From f05788e40d0e71dd6c5f5bb68ada801e1a5d7acd Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Wed, 7 Jul 2010 11:04:33 +0200 Subject: Fix text drawing into alpha pixmap with opengl engine The merge 03dc74984749adf5b11482bf871a47086217845c mistakenly merged the glyphMargin() (which had been removed in 4.7 because QGLTextureGlyphCache now inherits from the image glyph cache) with the glyphPadding() which had been introduced in separate commits in both branches (probably backported.) This broke text drawing into a pixmap with an alpha with the GL engine, because we'd assume a margin of 1, but the alphaMapForGlyph() function doesn't support margins. Task-number: QTBUG-11987 Reviewed-by: Gunnar (cherry picked from commit 4e915e3942c1523ffdda01e36c019f842062b794) --- src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | 5 ----- src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h | 1 - 2 files changed, 6 deletions(-) diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 5371c5e..410cf21 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -276,11 +276,6 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph) } } -int QGLTextureGlyphCache::glyphMargin() const -{ - return 1; -} - int QGLTextureGlyphCache::glyphPadding() const { return 1; diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h index 84e9021..6bcd655 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h @@ -72,7 +72,6 @@ public: virtual void createTextureData(int width, int height); virtual void resizeTextureData(int width, int height); virtual void fillTexture(const Coord &c, glyph_t glyph); - virtual int glyphMargin() const; virtual int glyphPadding() const; inline GLuint texture() const { return m_texture; } -- cgit v0.12 From ccc63a06ea8d418ed095383791eb45541fe31d0d Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 6 Jul 2010 13:48:23 +1000 Subject: Fix input methods for TextInput elements with key handlers Task-number: QTBUG-10297 Reviewed-by: Martin Jones (cherry picked from commit 98bfc8b8db811eb902290dbe87660ce799a44c27) --- .../graphicsitems/qdeclarativetextinput.cpp | 1 + .../data/inputmethodhints.qml | 6 ----- .../qdeclarativetextinput/data/inputmethods.qml | 7 ++++++ .../tst_qdeclarativetextinput.cpp | 29 ++++++++++++++++------ 4 files changed, 29 insertions(+), 14 deletions(-) delete mode 100644 tests/auto/declarative/qdeclarativetextinput/data/inputmethodhints.qml create mode 100644 tests/auto/declarative/qdeclarativetextinput/data/inputmethods.qml diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index ed999a2..a7d21cc 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -910,6 +910,7 @@ void QDeclarativeTextInput::keyPressEvent(QKeyEvent* ev) void QDeclarativeTextInput::inputMethodEvent(QInputMethodEvent *ev) { Q_D(QDeclarativeTextInput); + ev->ignore(); inputMethodPreHandler(ev); if (ev->isAccepted()) return; diff --git a/tests/auto/declarative/qdeclarativetextinput/data/inputmethodhints.qml b/tests/auto/declarative/qdeclarativetextinput/data/inputmethodhints.qml deleted file mode 100644 index da6b81f..0000000 --- a/tests/auto/declarative/qdeclarativetextinput/data/inputmethodhints.qml +++ /dev/null @@ -1,6 +0,0 @@ -import Qt 4.7 - -TextInput { - text: "Hello world!" - inputMethodHints: Qt.ImhNoPredictiveText -} diff --git a/tests/auto/declarative/qdeclarativetextinput/data/inputmethods.qml b/tests/auto/declarative/qdeclarativetextinput/data/inputmethods.qml new file mode 100644 index 0000000..405ee22 --- /dev/null +++ b/tests/auto/declarative/qdeclarativetextinput/data/inputmethods.qml @@ -0,0 +1,7 @@ +import Qt 4.7 + +TextInput { + text: "Hello world!" + inputMethodHints: Qt.ImhNoPredictiveText + Keys.onLeftPressed: {} +} diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index a55b42e..99c5568 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -74,7 +74,7 @@ private slots: void maxLength(); void masks(); void validators(); - void inputMethodHints(); + void inputMethods(); void cursorDelegate(); void navigation(); @@ -557,18 +557,31 @@ void tst_qdeclarativetextinput::validators() delete canvas; } -void tst_qdeclarativetextinput::inputMethodHints() +void tst_qdeclarativetextinput::inputMethods() { - QDeclarativeView *canvas = createView(SRCDIR "/data/inputmethodhints.qml"); + QDeclarativeView *canvas = createView(SRCDIR "/data/inputmethods.qml"); canvas->show(); canvas->setFocus(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + // test input method hints QVERIFY(canvas->rootObject() != 0); - QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); - QVERIFY(textinputObject != 0); - QVERIFY(textinputObject->inputMethodHints() & Qt::ImhNoPredictiveText); - textinputObject->setInputMethodHints(Qt::ImhUppercaseOnly); - QVERIFY(textinputObject->inputMethodHints() & Qt::ImhUppercaseOnly); + QDeclarativeTextInput *input = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); + QVERIFY(input != 0); + QVERIFY(input->inputMethodHints() & Qt::ImhNoPredictiveText); + input->setInputMethodHints(Qt::ImhUppercaseOnly); + QVERIFY(input->inputMethodHints() & Qt::ImhUppercaseOnly); + + QVERIFY(canvas->rootObject() != 0); + + input->setFocus(true); + QVERIFY(input->hasFocus() == true); + // test that input method event is committed + QInputMethodEvent event; + event.setCommitString( "My ", -12, 0); + QApplication::sendEvent(canvas, &event); + QCOMPARE(input->text(), QString("My Hello world!")); delete canvas; } -- cgit v0.12 From ab14670bb3d29791ea153f23c5e93c65f122afa2 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 6 Jul 2010 15:04:15 +1000 Subject: Changing currentIndex shouldn't cancel a flick unnecessarily. If the new currentIndex is in view, then there is no need to cancel a flick that is in progress. Task-number: QTBUG-11405 (cherry picked from commit c09f58965e772064ca952892f2e7969082f03855) --- .../graphicsitems/qdeclarativegridview.cpp | 35 +++++++++++++++------- .../graphicsitems/qdeclarativelistview.cpp | 34 +++++++++++++-------- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index cb99129..3efb9ad 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1216,6 +1216,11 @@ void QDeclarativeGridView::setModel(const QVariant &model) } else { d->moveReason = QDeclarativeGridViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); + if (d->highlight && d->currentItem) { + d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos()); + d->updateTrackedItem(); + } + d->moveReason = QDeclarativeGridViewPrivate::Other; } } connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); @@ -1274,6 +1279,11 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate) refill(); d->moveReason = QDeclarativeGridViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); + if (d->highlight && d->currentItem) { + d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos()); + d->updateTrackedItem(); + } + d->moveReason = QDeclarativeGridViewPrivate::Other; } emit delegateChanged(); } @@ -1300,7 +1310,6 @@ void QDeclarativeGridView::setCurrentIndex(int index) return; if (isComponentComplete() && d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) { d->moveReason = QDeclarativeGridViewPrivate::SetIndex; - cancelFlick(); d->updateCurrent(index); } else if (index != d->currentIndex) { d->currentIndex = index; @@ -2158,7 +2167,7 @@ void QDeclarativeGridView::componentComplete() d->updateCurrent(0); else d->updateCurrent(d->currentIndex); - if (d->highlight) { + if (d->highlight && d->currentItem) { d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos()); d->updateTrackedItem(); } @@ -2172,20 +2181,17 @@ void QDeclarativeGridView::trackedPositionChanged() Q_D(QDeclarativeGridView); if (!d->trackedItem || !d->currentItem) return; - if (!d->flickingHorizontally && !d->flickingVertically && !d->movingHorizontally && !d->movingVertically - && d->moveReason == QDeclarativeGridViewPrivate::SetIndex) { + if (d->moveReason == QDeclarativeGridViewPrivate::SetIndex) { const qreal trackedPos = d->trackedItem->rowPos(); const qreal viewPos = d->position(); + qreal pos = viewPos; if (d->haveHighlightRange) { if (d->highlightRange == StrictlyEnforceRange) { - qreal pos = viewPos; if (trackedPos > pos + d->highlightRangeEnd - d->rowSize()) pos = trackedPos - d->highlightRangeEnd + d->rowSize(); if (trackedPos < pos + d->highlightRangeStart) pos = trackedPos - d->highlightRangeStart; - d->setPosition(pos); } else { - qreal pos = viewPos; if (trackedPos < d->startPosition() + d->highlightRangeStart) { pos = d->startPosition(); } else if (d->trackedItem->endRowPos() > d->endPosition() - d->size() + d->highlightRangeEnd) { @@ -2199,14 +2205,12 @@ void QDeclarativeGridView::trackedPositionChanged() pos = trackedPos - d->highlightRangeEnd + d->rowSize(); } } - d->setPosition(pos); } } else { if (trackedPos < viewPos && d->currentItem->rowPos() < viewPos) { - d->setPosition(d->currentItem->rowPos() < trackedPos ? trackedPos : d->currentItem->rowPos()); + pos = d->currentItem->rowPos() < trackedPos ? trackedPos : d->currentItem->rowPos(); } else if (d->trackedItem->endRowPos() > viewPos + d->size() && d->currentItem->endRowPos() > viewPos + d->size()) { - qreal pos; if (d->trackedItem->endRowPos() < d->currentItem->endRowPos()) { pos = d->trackedItem->endRowPos() - d->size(); if (d->rowSize() > d->size()) @@ -2216,9 +2220,12 @@ void QDeclarativeGridView::trackedPositionChanged() if (d->rowSize() > d->size()) pos = d->currentItem->rowPos(); } - d->setPosition(pos); } } + if (viewPos != pos) { + cancelFlick(); + d->setPosition(pos); + } } } @@ -2563,6 +2570,12 @@ void QDeclarativeGridView::modelReset() refill(); d->moveReason = QDeclarativeGridViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); + if (d->highlight && d->currentItem) { + d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos()); + d->updateTrackedItem(); + } + d->moveReason = QDeclarativeGridViewPrivate::Other; + emit countChanged(); } diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index e519bd9..9497cb7 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1547,6 +1547,10 @@ void QDeclarativeListView::setModel(const QVariant &model) } else { d->moveReason = QDeclarativeListViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); + if (d->highlight && d->currentItem) { + d->highlight->setPosition(d->currentItem->position()); + d->updateTrackedItem(); + } } } connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); @@ -1610,6 +1614,10 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate) refill(); d->moveReason = QDeclarativeListViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); + if (d->highlight && d->currentItem) { + d->highlight->setPosition(d->currentItem->position()); + d->updateTrackedItem(); + } } } emit delegateChanged(); @@ -1636,7 +1644,6 @@ void QDeclarativeListView::setCurrentIndex(int index) return; if (isComponentComplete() && d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) { d->moveReason = QDeclarativeListViewPrivate::SetIndex; - cancelFlick(); d->updateCurrent(index); } else if (index != d->currentIndex) { d->currentIndex = index; @@ -2439,7 +2446,6 @@ void QDeclarativeListView::incrementCurrentIndex() if (currentIndex() < d->model->count() - 1 || d->wrap) { d->moveReason = QDeclarativeListViewPrivate::SetIndex; int index = currentIndex()+1; - cancelFlick(); d->updateCurrent(index < d->model->count() ? index : 0); } } @@ -2458,7 +2464,6 @@ void QDeclarativeListView::decrementCurrentIndex() if (currentIndex() > 0 || d->wrap) { d->moveReason = QDeclarativeListViewPrivate::SetIndex; int index = currentIndex()-1; - cancelFlick(); d->updateCurrent(index >= 0 ? index : d->model->count()-1); } } @@ -2591,7 +2596,7 @@ void QDeclarativeListView::componentComplete() d->updateCurrent(0); else d->updateCurrent(d->currentIndex); - if (d->highlight) { + if (d->highlight && d->currentItem) { d->highlight->setPosition(d->currentItem->position()); d->updateTrackedItem(); } @@ -2611,20 +2616,17 @@ void QDeclarativeListView::trackedPositionChanged() Q_D(QDeclarativeListView); if (!d->trackedItem || !d->currentItem) return; - if (!d->flickingHorizontally && !d->flickingVertically && !d->movingHorizontally && !d->movingVertically - && d->moveReason == QDeclarativeListViewPrivate::SetIndex) { + if (d->moveReason == QDeclarativeListViewPrivate::SetIndex) { const qreal trackedPos = qCeil(d->trackedItem->position()); const qreal viewPos = d->position(); + qreal pos = viewPos; if (d->haveHighlightRange) { if (d->highlightRange == StrictlyEnforceRange) { - qreal pos = viewPos; if (trackedPos > pos + d->highlightRangeEnd - d->trackedItem->size()) pos = trackedPos - d->highlightRangeEnd + d->trackedItem->size(); if (trackedPos < pos + d->highlightRangeStart) pos = trackedPos - d->highlightRangeStart; - d->setPosition(pos); } else { - qreal pos = viewPos; if (trackedPos < d->startPosition() + d->highlightRangeStart) { pos = d->startPosition(); } else if (d->trackedItem->endPosition() > d->endPosition() - d->size() + d->highlightRangeEnd) { @@ -2638,14 +2640,12 @@ void QDeclarativeListView::trackedPositionChanged() pos = trackedPos - d->highlightRangeEnd + d->trackedItem->size(); } } - d->setPosition(pos); } } else { if (trackedPos < viewPos && d->currentItem->position() < viewPos) { - d->setPosition(d->currentItem->position() < trackedPos ? trackedPos : d->currentItem->position()); + pos = d->currentItem->position() < trackedPos ? trackedPos : d->currentItem->position(); } else if (d->trackedItem->endPosition() > viewPos + d->size() && d->currentItem->endPosition() > viewPos + d->size()) { - qreal pos; if (d->trackedItem->endPosition() < d->currentItem->endPosition()) { pos = d->trackedItem->endPosition() - d->size(); if (d->trackedItem->size() > d->size()) @@ -2655,9 +2655,12 @@ void QDeclarativeListView::trackedPositionChanged() if (d->currentItem->size() > d->size()) pos = d->currentItem->position(); } - d->setPosition(pos); } } + if (viewPos != pos) { + cancelFlick(); + d->setPosition(pos); + } } } @@ -3021,6 +3024,11 @@ void QDeclarativeListView::modelReset() refill(); d->moveReason = QDeclarativeListViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); + if (d->highlight && d->currentItem) { + d->highlight->setPosition(d->currentItem->position()); + d->updateTrackedItem(); + } + d->moveReason = QDeclarativeListViewPrivate::Other; emit countChanged(); } -- cgit v0.12 From 5f64427b79dc3053fdb8e8b82698a08fa8ab179b Mon Sep 17 00:00:00 2001 From: Robert Griebl <robert.griebl@nokia.com> Date: Mon, 12 Jul 2010 14:35:33 +0200 Subject: Calling setMinimumSize(0, 0) on a top-level window sometimes triggers a bug in the Compiz window manager which leads to the QML viewer mainwindow not being composited anymore (at least until the next resize). Since we need to somehow switch between fixed size and freely resizable views, we have to work around that bug using the layout constraint hints. Task-number: QTBUG-11771 Reviewed-by: kkoehne (cherry picked from commit 07321dfceed41c1851781841e03c4148da47e41e) --- .../qdeclarativeviewer/tst_qdeclarativeviewer.cpp | 26 +++++----- tools/qml/qmlruntime.cpp | 60 ++++++++++------------ tools/qml/qmlruntime.h | 4 +- 3 files changed, 40 insertions(+), 50 deletions(-) diff --git a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp index 9660430..5344698 100644 --- a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp +++ b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp @@ -113,7 +113,6 @@ void tst_QDeclarativeViewer::orientation() viewer->rotateOrientation(); qApp->processEvents(); - qApp->processEvents(); // one extra round for the delayed updateSizeHints() call QCOMPARE(rootItem->width(), 300.0); QCOMPARE(rootItem->height(), 200.0); @@ -124,7 +123,6 @@ void tst_QDeclarativeViewer::orientation() viewer->rotateOrientation(); qApp->processEvents(); - qApp->processEvents(); // one extra round for the delayed updateSizeHints() call QCOMPARE(rootItem->width(), 200.0); QCOMPARE(rootItem->height(), 300.0); @@ -157,10 +155,10 @@ void tst_QDeclarativeViewer::loading() // window resized QTRY_COMPARE(rootItem->width(), 400.0); - QTRY_COMPARE(rootItem->height(), 500.0-viewer->menuBar()->height()); - QCOMPARE(viewer->view()->size(), QSize(400, 500-viewer->menuBar()->height())); + QTRY_COMPARE(rootItem->height(), 500.0 - MENUBAR_HEIGHT(viewer)); + QCOMPARE(viewer->view()->size(), QSize(400, 500 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); - QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(400, 500-viewer->menuBar()->height())); + QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(400, 500 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), QSize(400, 500)); QCOMPARE(viewer->size(), viewer->sizeHint()); @@ -174,7 +172,7 @@ void tst_QDeclarativeViewer::loading() QCOMPARE(viewer->view()->size(), QSize(200, 300)); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300)); - QCOMPARE(viewer->size(), QSize(200, 300+viewer->menuBar()->height())); + QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), viewer->sizeHint()); viewer->resize(QSize(400, 500)); @@ -182,10 +180,10 @@ void tst_QDeclarativeViewer::loading() // window resized again QTRY_COMPARE(rootItem->width(), 400.0); - QTRY_COMPARE(rootItem->height(), 500.0-viewer->menuBar()->height()); - QCOMPARE(viewer->view()->size(), QSize(400, 500-viewer->menuBar()->height())); + QTRY_COMPARE(rootItem->height(), 500.0 - MENUBAR_HEIGHT(viewer)); + QCOMPARE(viewer->view()->size(), QSize(400, 500 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); - QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(400, 500-viewer->menuBar()->height())); + QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(400, 500 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), QSize(400, 500)); QCOMPARE(viewer->size(), viewer->sizeHint()); @@ -199,7 +197,7 @@ void tst_QDeclarativeViewer::loading() QCOMPARE(viewer->view()->size(), QSize(200, 300)); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300)); - QCOMPARE(viewer->size(), QSize(200, 300+viewer->menuBar()->height())); + QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), viewer->sizeHint()); } @@ -266,7 +264,7 @@ void tst_QDeclarativeViewer::resizing() QTRY_COMPARE(viewer->view()->size(), QSize(150, 200)); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(150, 200)); - QCOMPARE(viewer->size(), QSize(150, 200+viewer->menuBar()->height())); + QCOMPARE(viewer->size(), QSize(150, 200 + MENUBAR_HEIGHT(viewer))); // do not size root object to view viewer->resize(QSize(180,250)); @@ -280,10 +278,10 @@ void tst_QDeclarativeViewer::resizing() qApp->processEvents(); QTRY_COMPARE(rootItem->width(), 250.0); - QTRY_COMPARE(rootItem->height(), 350.0-viewer->menuBar()->height()); - QTRY_COMPARE(viewer->view()->size(), QSize(250, 350-viewer->menuBar()->height())); + QTRY_COMPARE(rootItem->height(), 350.0 - MENUBAR_HEIGHT(viewer)); + QTRY_COMPARE(viewer->view()->size(), QSize(250, 350 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); - QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(250, 350-viewer->menuBar()->height())); + QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(250, 350 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), QSize(250, 350)); // do not size view to root object diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index debc902..51579f4 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -924,13 +924,7 @@ void QDeclarativeViewer::statusChanged() if (canvas->status() == QDeclarativeView::Ready) { initialSize = canvas->initialSize(); - if (canvas->resizeMode() == QDeclarativeView::SizeRootObjectToView) { - if (!isFullScreen() && !isMaximized()) { - canvas->setFixedSize(initialSize); - resize(1, 1); // workaround for QMainWindowLayout NOT shrinking the window if the centralWidget() shrink - QTimer::singleShot(0, this, SLOT(updateSizeHints())); - } - } + updateSizeHints(true); } } @@ -1055,13 +1049,9 @@ void QDeclarativeViewer::setRecordRate(int fps) record_rate = fps; } -void QDeclarativeViewer::sceneResized(QSize size) +void QDeclarativeViewer::sceneResized(QSize) { - if (size.width() > 0 && size.height() > 0) { - if (canvas->resizeMode() == QDeclarativeView::SizeViewToRootObject) { - updateSizeHints(); - } - } + updateSizeHints(); } void QDeclarativeViewer::keyPressEvent(QKeyEvent *event) @@ -1324,17 +1314,7 @@ void QDeclarativeViewer::changeOrientation(QAction *action) void QDeclarativeViewer::orientationChanged() { - if (canvas->resizeMode() == QDeclarativeView::SizeRootObjectToView) { - if (canvas->rootObject()) { - QSizeF rootObjectSize = canvas->rootObject()->boundingRect().size(); - if (size() != rootObjectSize.toSize()) { - canvas->setMinimumSize(rootObjectSize.toSize()); - canvas->resize(rootObjectSize.toSize()); - resize(rootObjectSize.toSize()); - resize(1, 1); // workaround for QMainWindowLayout NOT shrinking the window if the centralWidget() shrinks - } - } - } + updateSizeHints(); } void QDeclarativeViewer::setDeviceKeys(bool on) @@ -1383,20 +1363,32 @@ void QDeclarativeViewer::setSizeToView(bool sizeToView) } } -void QDeclarativeViewer::updateSizeHints() +void QDeclarativeViewer::updateSizeHints(bool initial) { - if (canvas->resizeMode() == QDeclarativeView::SizeViewToRootObject) { - QSize newWindowSize = canvas->sizeHint(); + static bool isRecursive = false; + + if (isRecursive) + return; + isRecursive = true; + + if (initial || (canvas->resizeMode() == QDeclarativeView::SizeViewToRootObject)) { + QSize newWindowSize = initial ? initialSize : canvas->sizeHint(); + //qWarning() << "USH:" << (initial ? "INIT:" : "V2R:") << "setting fixed size " << newWindowSize; if (!isFullScreen() && !isMaximized()) { - canvas->setMinimumSize(newWindowSize); - canvas->resize(newWindowSize); - resize(1, 1); // workaround for QMainWindowLayout NOT shrinking the window if the centralWidget() shrinks - canvas->setMinimumSize(QSize(0, 0)); + canvas->setFixedSize(newWindowSize); + resize(1, 1); + layout()->setSizeConstraint(QLayout::SetFixedSize); + layout()->activate(); } - } else { // QDeclarativeView::SizeRootObjectToView - canvas->setMinimumSize(QSize(0,0)); - canvas->setMaximumSize(QSize(16777215,16777215)); } + //qWarning() << "USH: R2V: setting free size "; + layout()->setSizeConstraint(QLayout::SetNoConstraint); + layout()->activate(); + setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); + canvas->setMinimumSize(QSize(0,0)); + canvas->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); + + isRecursive = false; } void QDeclarativeViewer::registerTypes() diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index e70e69f..68d3452 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -145,9 +145,9 @@ private slots: void warningsWidgetOpened(); void warningsWidgetClosed(); - void updateSizeHints(); - private: + void updateSizeHints(bool initial = false); + QString getVideoFileName(); LoggerWidget *loggerWindow; -- cgit v0.12 From 3b59e6b86a814358d4c019879643a2d111c99c0c Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Wed, 30 Jun 2010 17:10:33 +1000 Subject: Fix TextInput text getting improperly clipped Task-number: QTBUG-11790 Reviewed-by: Martin Jones (cherry picked from commit 37792d20eeef870a0d695fc15bc943f20275be9a) --- .../graphicsitems/qdeclarativetextinput.cpp | 46 ++++++++++-------- .../graphicsitems/qdeclarativetextinput_p_p.h | 1 + .../qdeclarativetext/tst_qdeclarativetext.cpp | 5 +- .../tst_qdeclarativetextedit.cpp | 5 +- .../qdeclarativetextinput/data/halign_center.png | Bin 0 -> 293 bytes .../qdeclarativetextinput/data/halign_left.png | Bin 0 -> 291 bytes .../qdeclarativetextinput/data/halign_right.png | Bin 0 -> 292 bytes .../data/horizontalAlignment.qml | 22 +++++++++ .../tst_qdeclarativetextinput.cpp | 53 ++++++++++++++++++++- 9 files changed, 110 insertions(+), 22 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativetextinput/data/halign_center.png create mode 100644 tests/auto/declarative/qdeclarativetextinput/data/halign_left.png create mode 100644 tests/auto/declarative/qdeclarativetextinput/data/halign_right.png create mode 100644 tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment.qml diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index a7d21cc..c2eea6e 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -100,8 +100,6 @@ void QDeclarativeTextInput::setText(const QString &s) if(s == text()) return; d->control->setText(s); - d->updateHorizontalScroll(); - //emit textChanged(); } /*! @@ -550,9 +548,9 @@ void QDeclarativeTextInput::setAutoScroll(bool b) return; d->autoScroll = b; - d->updateHorizontalScroll(); //We need to repaint so that the scrolling is taking into account. updateSize(true); + d->updateHorizontalScroll(); emit autoScrollChanged(d->autoScroll); } @@ -1021,27 +1019,43 @@ bool QDeclarativeTextInput::event(QEvent* ev) void QDeclarativeTextInput::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { - if (newGeometry.width() != oldGeometry.width()) + Q_D(QDeclarativeTextInput); + if (newGeometry.width() != oldGeometry.width()) { updateSize(); + d->updateHorizontalScroll(); + } QDeclarativePaintedItem::geometryChanged(newGeometry, oldGeometry); } +int QDeclarativeTextInputPrivate::calculateTextWidth() +{ + int cursorWidth = control->cursorWidth(); + if(cursorItem) + cursorWidth = cursorItem->width(); + + QFontMetrics fm = QFontMetrics(font); + int leftBearing = 0; + int rightBearing = 0; + if (!control->text().isEmpty()) { + leftBearing = qMax(0, -fm.leftBearing(control->text().at(0))); + rightBearing = qMax(0, -fm.rightBearing(control->text().at(control->text().count()-1))); + } + + return qRound(control->naturalTextWidth()) + qMax(cursorWidth, leftBearing) + rightBearing; +} + void QDeclarativeTextInputPrivate::updateHorizontalScroll() { Q_Q(QDeclarativeTextInput); - QFontMetrics fm = QFontMetrics(font); int cix = qRound(control->cursorToX()); QRect br(q->boundingRect().toRect()); - //###Is this using bearing appropriately? - int minLB = qMax(0, -fm.minLeftBearing()); - int minRB = qMax(0, -fm.minRightBearing()); - int widthUsed = qRound(control->naturalTextWidth()) + 1 + minRB; + int widthUsed = calculateTextWidth(); if (autoScroll) { - if ((minLB + widthUsed) <= br.width()) { + if (widthUsed <= br.width()) { // text fits in br; use hscroll for alignment switch (hAlign & ~(Qt::AlignAbsolute|Qt::AlignVertical_Mask)) { case Qt::AlignRight: - hscroll = widthUsed - br.width() + 1; + hscroll = widthUsed - br.width() - 1; break; case Qt::AlignHCenter: hscroll = (widthUsed - br.width()) / 2; @@ -1051,7 +1065,6 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() hscroll = 0; break; } - hscroll -= minLB; } else if (cix - hscroll >= br.width()) { // text doesn't fit, cursor is to the right of br (scroll right) hscroll = cix - br.width() + 1; @@ -1071,7 +1084,6 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() } else { hscroll = 0; } - hscroll -= minLB; } } @@ -1096,7 +1108,6 @@ void QDeclarativeTextInput::drawContents(QPainter *p, const QRect &r) offset = QPoint(d->hscroll, 0); } d->control->draw(p, offset, r, flags); - p->restore(); } @@ -1449,8 +1460,8 @@ void QDeclarativeTextInput::selectionChanged() void QDeclarativeTextInput::q_textChanged() { Q_D(QDeclarativeTextInput); - d->updateHorizontalScroll(); updateSize(); + d->updateHorizontalScroll(); updateMicroFocus(); emit textChanged(); emit displayTextChanged(); @@ -1476,10 +1487,7 @@ void QDeclarativeTextInput::updateSize(bool needsRedraw) int w = width(); int h = height(); setImplicitHeight(d->control->height()); - int cursorWidth = d->control->cursorWidth(); - if(d->cursorItem) - cursorWidth = d->cursorItem->width(); - setImplicitWidth(d->control->naturalTextWidth() + cursorWidth); + setImplicitWidth(d->calculateTextWidth()); setContentsSize(QSize(width(), height()));//Repaints if changed if(w==width() && h==height() && needsRedraw){ clearCache(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h index 8b74bcc..4ac5134 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h @@ -100,6 +100,7 @@ public: void startCreatingCursor(); void focusChanged(bool hasFocus); void updateHorizontalScroll(); + int calculateTextWidth(); QLineControl* control; diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 8a4f152..80198eb 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -48,6 +48,7 @@ #include <QGraphicsSceneMouseEvent> #include <qmath.h> #include <QDeclarativeView> +#include <private/qapplication_p.h> #include "../../../shared/util.h" #include "testhttpserver.h" @@ -452,7 +453,9 @@ void tst_qdeclarativetext::alignments() #ifdef Q_WS_X11 // Font-specific, but not likely platform-specific, so only test on one platform - QCOMPARE(actual,expect); + if (QApplicationPrivate::graphics_system_name == "raster" || QApplicationPrivate::graphics_system_name == "") { + QCOMPARE(actual,expect); + } #endif } diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index f1a367f..fc329c8 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -55,6 +55,7 @@ #include <QDeclarativeView> #include <QStyle> #include <QInputContext> +#include <private/qapplication_p.h> #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir @@ -353,7 +354,9 @@ void tst_qdeclarativetextedit::alignments() #ifdef Q_WS_X11 // Font-specific, but not likely platform-specific, so only test on one platform - QCOMPARE(actual,expect); + if (QApplicationPrivate::graphics_system_name == "raster" || QApplicationPrivate::graphics_system_name == "") { + QCOMPARE(actual,expect); + } #endif } diff --git a/tests/auto/declarative/qdeclarativetextinput/data/halign_center.png b/tests/auto/declarative/qdeclarativetextinput/data/halign_center.png new file mode 100644 index 0000000..53e09a8 Binary files /dev/null and b/tests/auto/declarative/qdeclarativetextinput/data/halign_center.png differ diff --git a/tests/auto/declarative/qdeclarativetextinput/data/halign_left.png b/tests/auto/declarative/qdeclarativetextinput/data/halign_left.png new file mode 100644 index 0000000..247acbc Binary files /dev/null and b/tests/auto/declarative/qdeclarativetextinput/data/halign_left.png differ diff --git a/tests/auto/declarative/qdeclarativetextinput/data/halign_right.png b/tests/auto/declarative/qdeclarativetextinput/data/halign_right.png new file mode 100644 index 0000000..691bc75 Binary files /dev/null and b/tests/auto/declarative/qdeclarativetextinput/data/halign_right.png differ diff --git a/tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment.qml b/tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment.qml new file mode 100644 index 0000000..b97f18e --- /dev/null +++ b/tests/auto/declarative/qdeclarativetextinput/data/horizontalAlignment.qml @@ -0,0 +1,22 @@ +import Qt 4.7 + +Rectangle { + id: top + width: 70; height: 70; + + property alias horizontalAlignment: text.horizontalAlignment + property string text: "Test" + + Rectangle { + anchors.centerIn: parent + width: 60 + height: 20 + color: "green" + + TextInput { + id: text + anchors.fill: parent + text: top.text + } + } +} diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 99c5568..24fedc4 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -49,6 +49,7 @@ #include <QDebug> #include <QStyle> #include <QInputContext> +#include <private/qapplication_p.h> #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir @@ -63,12 +64,16 @@ public: tst_qdeclarativetextinput(); private slots: + void text(); void width(); void font(); void color(); void selection(); + void horizontalAlignment_data(); + void horizontalAlignment(); + void positionAt(); void maxLength(); @@ -153,7 +158,7 @@ void tst_qdeclarativetextinput::width() QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput*>(textinputComponent.create()); QVERIFY(textinputObject != 0); - QCOMPARE(textinputObject->width(), 1.);//1 for the cursor + QCOMPARE(textinputObject->width(), 1.); // 1 for the cursor delete textinputObject; } @@ -370,6 +375,52 @@ void tst_qdeclarativetextinput::selection() delete textinputObject; } +void tst_qdeclarativetextinput::horizontalAlignment_data() +{ + QTest::addColumn<int>("hAlign"); + QTest::addColumn<QString>("expectfile"); + + QTest::newRow("L") << int(Qt::AlignLeft) << SRCDIR "/data/halign_left.png"; + QTest::newRow("R") << int(Qt::AlignRight) << SRCDIR "/data/halign_right.png"; + QTest::newRow("C") << int(Qt::AlignHCenter) << SRCDIR "/data/halign_center.png"; +} + +void tst_qdeclarativetextinput::horizontalAlignment() +{ + QFETCH(int, hAlign); + QFETCH(QString, expectfile); + +#ifdef Q_WS_X11 + // Font-specific, but not likely platform-specific, so only test on one platform + QFont fn; + fn.setRawName("-misc-fixed-medium-r-*-*-8-*-*-*-*-*-*-*"); + QApplication::setFont(fn); +#endif + + QDeclarativeView *canvas = createView(SRCDIR "/data/horizontalAlignment.qml"); + + canvas->show(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + QObject *ob = canvas->rootObject(); + QVERIFY(ob != 0); + ob->setProperty("horizontalAlignment",hAlign); + QImage actual(canvas->width(), canvas->height(), QImage::Format_RGB32); + actual.fill(qRgb(255,255,255)); + QPainter p(&actual); + canvas->render(&p); + + QImage expect(expectfile); + +#ifdef Q_WS_X11 + // Font-specific, but not likely platform-specific, so only test on one platform + if (QApplicationPrivate::graphics_system_name == "raster" || QApplicationPrivate::graphics_system_name == "") { + QCOMPARE(actual,expect); + } +#endif +} + void tst_qdeclarativetextinput::positionAt() { QDeclarativeView *canvas = createView(SRCDIR "/data/positionAt.qml"); -- cgit v0.12 From 8170264c1f3db19b7fba6d4807f09c6c367d149d Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Fri, 2 Jul 2010 13:39:23 +1000 Subject: qmlviewer: Update the proxy factory when the user changes the proxy. Task-number: QTBUG-11856 (cherry picked from commit 953142469cd49fd2f5180a60dcaa7d2029457401) --- tools/qml/qmlruntime.cpp | 104 ++++++++++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 42 deletions(-) diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index 51579f4..951b187 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -431,65 +431,82 @@ private: mutable QMutex mutex; }; -class NetworkAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory +class SystemProxyFactory : public QNetworkProxyFactory { public: - NetworkAccessManagerFactory() : cacheSize(0) {} - ~NetworkAccessManagerFactory() {} - - QNetworkAccessManager *create(QObject *parent); + SystemProxyFactory() : proxyDirty(true), httpProxyInUse(false) { + } - void setupProxy(QNetworkAccessManager *nam) + virtual QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query) { - class SystemProxyFactory : public QNetworkProxyFactory - { - public: - virtual QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query) - { - QString protocolTag = query.protocolTag(); - if (httpProxyInUse && (protocolTag == "http" || protocolTag == "https")) { - QList<QNetworkProxy> ret; - ret << httpProxy; - return ret; - } + if (proxyDirty) + setupProxy(); + QString protocolTag = query.protocolTag(); + if (httpProxyInUse && (protocolTag == "http" || protocolTag == "https")) { + QList<QNetworkProxy> ret; + ret << httpProxy; + return ret; + } #ifdef Q_OS_WIN - // systemProxyForQuery can take insanely long on Windows (QTBUG-10106) - return QNetworkProxyFactory::proxyForQuery(query); + // systemProxyForQuery can take insanely long on Windows (QTBUG-10106) + return QNetworkProxyFactory::proxyForQuery(query); #else - return QNetworkProxyFactory::systemProxyForQuery(query); + return QNetworkProxyFactory::systemProxyForQuery(query); #endif - } - void setHttpProxy (QNetworkProxy proxy) - { - httpProxy = proxy; - httpProxyInUse = true; - } - void unsetHttpProxy () - { - httpProxyInUse = false; - } - private: - bool httpProxyInUse; - QNetworkProxy httpProxy; - }; - - SystemProxyFactory *proxyFactory = new SystemProxyFactory; - if (ProxySettings::httpProxyInUse()) - proxyFactory->setHttpProxy(ProxySettings::httpProxy()); - else - proxyFactory->unsetHttpProxy(); - nam->setProxyFactory(proxyFactory); } + void setupProxy() { + // Don't bother locking because we know that the proxy only + // changes in response to the settings dialog and that + // the view will be reloaded. + proxyDirty = false; + httpProxyInUse = ProxySettings::httpProxyInUse(); + if (httpProxyInUse) + httpProxy = ProxySettings::httpProxy(); + } + + void proxyChanged() { + proxyDirty = true; + } + +private: + volatile bool proxyDirty; + bool httpProxyInUse; + QNetworkProxy httpProxy; +}; + +class NetworkAccessManagerFactory : public QObject, public QDeclarativeNetworkAccessManagerFactory +{ + Q_OBJECT +public: + NetworkAccessManagerFactory() : cacheSize(0) {} + ~NetworkAccessManagerFactory() {} + + QNetworkAccessManager *create(QObject *parent); + void setCacheSize(int size) { if (size != cacheSize) { cacheSize = size; } } + void proxyChanged() { + foreach (QNetworkAccessManager *nam, namList) { + static_cast<SystemProxyFactory*>(nam->proxyFactory())->proxyChanged(); + } + } + static PersistentCookieJar *cookieJar; + +private slots: + void managerDestroyed(QObject *obj) { + namList.removeOne(static_cast<QNetworkAccessManager*>(obj)); + } + +private: QMutex mutex; int cacheSize; + QList<QNetworkAccessManager*> namList; }; PersistentCookieJar *NetworkAccessManagerFactory::cookieJar = 0; @@ -510,7 +527,7 @@ QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent) } manager->setCookieJar(cookieJar); cookieJar->setParent(0); - setupProxy(manager); + manager->setProxyFactory(new SystemProxyFactory); if (cacheSize > 0) { QNetworkDiskCache *cache = new QNetworkDiskCache; cache->setCacheDirectory(QDir::tempPath()+QLatin1String("/qml-viewer-network-cache")); @@ -519,6 +536,8 @@ QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent) } else { manager->setCache(0); } + connect(manager, SIGNAL(destroyed(QObject*)), this, SLOT(managerDestroyed(QObject*))); + namList.append(manager); qDebug() << "created new network access manager for" << parent; return manager; } @@ -777,6 +796,7 @@ void QDeclarativeViewer::showProxySettings() void QDeclarativeViewer::proxySettingsChanged() { + namFactory->proxyChanged(); reload (); } -- cgit v0.12 From e942f655236ea3c17bb3edba81630508b65af057 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 6 Jul 2010 11:11:59 +1000 Subject: Fix TextEdit with no color property defined is drawn with wrong color Task-number: QTBUG-11932 Reviewed-by: Martin Jones (cherry picked from commit 5500ffeeaee3412272f0f4af844fbc1d4d78a3bb) --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 9 +++++++++ .../qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index c6566ff..a078c34 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1263,6 +1263,15 @@ void QDeclarativeTextEditPrivate::init() control = new QTextControl(q); control->setIgnoreUnusedNavigationEvents(true); + // QTextControl follows the default text color + // defined by the platform, declarative text + // should be black by default + QPalette pal = control->palette(); + if (pal.color(QPalette::Text) != color) { + pal.setColor(QPalette::Text, color); + control->setPalette(pal); + } + QObject::connect(control, SIGNAL(updateRequest(QRectF)), q, SLOT(updateImgCache(QRectF))); QObject::connect(control, SIGNAL(textChanged()), q, SLOT(q_textChanged())); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index fc329c8..4e4f45e 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -56,6 +56,7 @@ #include <QStyle> #include <QInputContext> #include <private/qapplication_p.h> +#include <private/qtextcontrol_p.h> #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir @@ -492,6 +493,23 @@ void tst_qdeclarativetextedit::font() void tst_qdeclarativetextedit::color() { + //test initial color + { + QString componentStr = "import Qt 4.7\nTextEdit { text: \"Hello World\" }"; + QDeclarativeComponent texteditComponent(&engine); + texteditComponent.setData(componentStr.toLatin1(), QUrl()); + QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit*>(texteditComponent.create()); + + QDeclarativeTextEditPrivate *textEditPrivate = static_cast<QDeclarativeTextEditPrivate*>(QDeclarativeItemPrivate::get(textEditObject)); + + QVERIFY(textEditObject); + QVERIFY(textEditPrivate); + QVERIFY(textEditPrivate->control); + + QPalette pal = textEditPrivate->control->palette(); + QCOMPARE(textEditPrivate->color, QColor("black")); + QCOMPARE(textEditPrivate->color, pal.color(QPalette::Text)); + } //test normal for (int i = 0; i < colorStrings.size(); i++) { -- cgit v0.12 From e6e140fe65a6a7ed1baf7bc03afe930e7b188f26 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 7 Jul 2010 15:45:45 +1000 Subject: Don't crash if drag.target has no parentItem Task-number: QTBUG-11986 (cherry picked from commit 44d78dca77b8a5f4f0d1bb67e84c21a4c57345b6) --- src/declarative/graphicsitems/qdeclarativemousearea.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index caf251d..7b65ca7 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -443,7 +443,7 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event) QPointF startLocalPos; QPointF curLocalPos; - if (drag()->target()->parent()) { + if (drag()->target()->parentItem()) { startLocalPos = drag()->target()->parentItem()->mapFromScene(d->startScene); curLocalPos = drag()->target()->parentItem()->mapFromScene(event->scenePos()); } else { @@ -761,7 +761,7 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag() \c drag provides a convenient way to make an item draggable. \list - \i \c drag.target specifies the item to drag. + \i \c drag.target specifies the id of the item to drag. \i \c drag.active specifies if the target item is currently being dragged. \i \c drag.axis specifies whether dragging can be done horizontally (\c Drag.XAxis), vertically (\c Drag.YAxis), or both (\c Drag.XandYAxis) \i \c drag.minimum and \c drag.maximum limit how far the target can be dragged along the corresponding axes. -- cgit v0.12 From b73f5756c29ef8353e69e1ce17698c6f4a48aba3 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Thu, 8 Jul 2010 15:44:49 +1000 Subject: Quiet qmake warnings during configure. Configure runs qmake on all .pro files in the source tree. Wrapping symbian only code in symbian scopes prevents warnings about unset EPOCROOT on other platforms. Task-number: QTBUG-11996 (cherry picked from commit 054049046e89d6e18d800f4728d4927354b640c6) --- src/plugins/bearer/symbian/3_2/3_2.pro | 16 +++++++++------- src/plugins/bearer/symbian/symbian_3/symbian_3.pro | 22 ++++++++++++---------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/plugins/bearer/symbian/3_2/3_2.pro b/src/plugins/bearer/symbian/3_2/3_2.pro index 3404dde..6f3ecaf 100644 --- a/src/plugins/bearer/symbian/3_2/3_2.pro +++ b/src/plugins/bearer/symbian/3_2/3_2.pro @@ -1,12 +1,14 @@ include(../symbian.pri) -exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ -exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { - DEFINES += SNAP_FUNCTIONALITY_AVAILABLE - LIBS += -lcmmanager -} else { - # Fall back to 3_1 implementation on platforms that do not have cmmanager - LIBS += -lapengine +symbian { + exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ + exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { + DEFINES += SNAP_FUNCTIONALITY_AVAILABLE + LIBS += -lcmmanager + } else { + # Fall back to 3_1 implementation on platforms that do not have cmmanager + LIBS += -lapengine + } } TARGET = $${TARGET}_3_2 diff --git a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro index 804986a..25f18f2 100644 --- a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro +++ b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro @@ -1,17 +1,19 @@ include(../symbian.pri) -exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ -exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { - DEFINES += SNAP_FUNCTIONALITY_AVAILABLE - LIBS += -lcmmanager +symbian { + exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \ + exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) { + DEFINES += SNAP_FUNCTIONALITY_AVAILABLE + LIBS += -lcmmanager - exists($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h)) { - DEFINES += OCC_FUNCTIONALITY_AVAILABLE - LIBS += -lextendedconnpref + exists($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h)) { + DEFINES += OCC_FUNCTIONALITY_AVAILABLE + LIBS += -lextendedconnpref + } + } else { + # Fall back to 3_1 implementation on platforms that do not have cmmanager + LIBS += -lapengine } -} else { - # Fall back to 3_1 implementation on platforms that do not have cmmanager - LIBS += -lapengine } TARGET.UID3 = 0x20021319 -- cgit v0.12 From 80a0b509f49db0d1c5727b897520e6b6f0f52f6f Mon Sep 17 00:00:00 2001 From: Geir Vattekar <geir.vattekar@nokia.com> Date: Mon, 12 Jul 2010 16:32:01 +0200 Subject: Doc: Removed links to Qt3 support in QHostAddress Task-number: QTBUG-12004 (cherry picked from commit 10039e4b5bb80e5a9705126e7c62c588039acde6) --- src/network/kernel/qhostaddress.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index 5ae3acc..0bacf90 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -428,9 +428,9 @@ void QNetmaskAddress::setPrefixLength(QAbstractSocket::NetworkLayerProtocol prot QHostAddress is normally used with the QTcpSocket, QTcpServer, and QUdpSocket to connect to a host or to set up a server. - A host address is set with setAddress(), checked for its type - using isIPv4Address() or isIPv6Address(), and retrieved with - toIPv4Address(), toIPv6Address(), or toString(). + A host address is set with setAddress(), and retrieved with + toIPv4Address(), toIPv6Address(), or toString(). You can check the + type with protocol(). \note Please note that QHostAddress does not do DNS lookups. QHostInfo is needed for that. @@ -679,7 +679,8 @@ void QHostAddress::setAddress(const struct sockaddr *sockaddr) For example, if the address is 127.0.0.1, the returned value is 2130706433 (i.e. 0x7f000001). - This value is only valid if isIp4Addr() returns true. + This value is only valid if the Protocol() is + \l{QAbstractSocket::}{IPv4Protocol}. \sa toString() */ @@ -704,7 +705,8 @@ QAbstractSocket::NetworkLayerProtocol QHostAddress::protocol() const \snippet doc/src/snippets/code/src_network_kernel_qhostaddress.cpp 0 - This value is only valid if isIPv6Address() returns true. + This value is only valid if the protocol() is + \l{QAbstractSocket::}{IPv6Protocol}. \sa toString() */ -- cgit v0.12 From c753f6eadb522c8cd55bd221b6c1acf383fd7a48 Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Mon, 12 Jul 2010 12:10:45 +1000 Subject: Fix qdoc error. Task-number: QTBUG-12078 Reviewed-By: Trust Me (cherry picked from commit e45b8dceca9c424815c6b08355a95cb34382186c) --- doc/src/external-resources.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc index cbd66ee..61c9da2 100644 --- a/doc/src/external-resources.qdoc +++ b/doc/src/external-resources.qdoc @@ -416,5 +416,5 @@ /*! \externalpage http://opensource.org/licenses/bsd-license.php - \title New and Modified BSD Licenses -*/ \ No newline at end of file + \title BSD License +*/ -- cgit v0.12 From e2d8a2b0619c70a593da9289b86e0e8594408044 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Thu, 8 Jul 2010 13:09:07 +1000 Subject: Allow the debugger to modify method bodies QTBUG-11933 (cherry picked from commit 76a1804b0fff9ffd092a551defe448d3e9d4346e) --- src/declarative/debugger/qdeclarativedebug.cpp | 36 ++++++++------ src/declarative/debugger/qdeclarativedebug_p.h | 19 ++------ src/declarative/qml/qdeclarativeenginedebug.cpp | 55 +++++++++++++++++++-- src/declarative/qml/qdeclarativeenginedebug_p.h | 1 + src/declarative/qml/qdeclarativevmemetaobject.cpp | 30 ++++++++++++ src/declarative/qml/qdeclarativevmemetaobject_p.h | 2 + .../qdeclarativedebug/tst_qdeclarativedebug.cpp | 56 ++++++++++++++++++++-- 7 files changed, 160 insertions(+), 39 deletions(-) diff --git a/src/declarative/debugger/qdeclarativedebug.cpp b/src/declarative/debugger/qdeclarativedebug.cpp index e4a991b..0c0cf2e 100644 --- a/src/declarative/debugger/qdeclarativedebug.cpp +++ b/src/declarative/debugger/qdeclarativedebug.cpp @@ -562,31 +562,37 @@ QDeclarativeDebugExpressionQuery *QDeclarativeEngineDebug::queryExpressionResult return query; } -QDeclarativeDebugExpressionQuery *QDeclarativeEngineDebug::setBindingForObject(int objectDebugId, - const QString &propertyName, - const QVariant &bindingExpression, - bool isLiteralValue, - QObject *parent) +bool QDeclarativeEngineDebug::setBindingForObject(int objectDebugId, const QString &propertyName, + const QVariant &bindingExpression, + bool isLiteralValue) { Q_D(QDeclarativeEngineDebug); - QDeclarativeDebugExpressionQuery *query = new QDeclarativeDebugExpressionQuery(parent); if (d->client->isConnected() && objectDebugId != -1) { - query->m_client = this; - query->m_expr = bindingExpression; - int queryId = d->getId(); - query->m_queryId = queryId; - d->expressionQuery.insert(queryId, query); - QByteArray message; QDataStream ds(&message, QIODevice::WriteOnly); - ds << QByteArray("SET_BINDING") << queryId << objectDebugId << propertyName << bindingExpression << isLiteralValue; + ds << QByteArray("SET_BINDING") << objectDebugId << propertyName << bindingExpression << isLiteralValue; d->client->sendMessage(message); + return true; } else { - query->m_state = QDeclarativeDebugQuery::Error; + return false; } +} - return query; +bool QDeclarativeEngineDebug::setMethodBody(int objectDebugId, const QString &methodName, + const QString &methodBody) +{ + Q_D(QDeclarativeEngineDebug); + + if (d->client->isConnected() && objectDebugId != -1) { + QByteArray message; + QDataStream ds(&message, QIODevice::WriteOnly); + ds << QByteArray("SET_METHOD_BODY") << objectDebugId << methodName << methodBody; + d->client->sendMessage(message); + return true; + } else { + return false; + } } QDeclarativeDebugWatch::QDeclarativeDebugWatch(QObject *parent) diff --git a/src/declarative/debugger/qdeclarativedebug_p.h b/src/declarative/debugger/qdeclarativedebug_p.h index 007cbd7..9c38184 100644 --- a/src/declarative/debugger/qdeclarativedebug_p.h +++ b/src/declarative/debugger/qdeclarativedebug_p.h @@ -94,11 +94,10 @@ public: QDeclarativeDebugExpressionQuery *queryExpressionResult(int objectDebugId, const QString &expr, QObject *parent = 0); - QDeclarativeDebugExpressionQuery *setBindingForObject(int objectDebugId, - const QString &propertyName, - const QVariant &bindingExpression, - bool isLiteralValue, - QObject *parent = 0); + bool setBindingForObject(int objectDebugId, const QString &propertyName, + const QVariant &bindingExpression, bool isLiteralValue); + bool setMethodBody(int objectDebugId, const QString &methodName, const QString &methodBody); + private: Q_DECLARE_PRIVATE(QDeclarativeEngineDebug) }; @@ -202,11 +201,6 @@ public: private: friend class QDeclarativeEngineDebugPrivate; - QDeclarativeDebugExpressionQuery *setBindingForObject(int objectDebugId, - const QString &propertyName, - const QVariant &bindingExpression, - bool isLiteralValue, - QObject *parent); QUrl m_url; int m_lineNumber; int m_columnNumber; @@ -224,11 +218,6 @@ public: QString name() const; private: - QDeclarativeDebugExpressionQuery *setBindingForObject(int objectDebugId, - const QString &propertyName, - const QVariant &bindingExpression, - bool isLiteralValue, - QObject *parent); friend class QDeclarativeEngineDebugPrivate; int m_debugId; QString m_name; diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp index d765649..acd7ab6 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/qml/qdeclarativeenginedebug.cpp @@ -50,6 +50,8 @@ #include "private/qdeclarativecontext_p.h" #include "private/qdeclarativewatcher_p.h" #include "private/qdeclarativevaluetype_p.h" +#include "private/qdeclarativevmemetaobject_p.h" +#include "private/qdeclarativeexpression_p.h" #include <QtCore/qdebug.h> #include <QtCore/qmetaobject.h> @@ -453,20 +455,25 @@ void QDeclarativeEngineDebugServer::messageReceived(const QByteArray &message) sendMessage(reply); } else if (type == "SET_BINDING") { - int queryId; int objectId; QString propertyName; QVariant expr; bool isLiteralValue; - ds >> queryId >> objectId >> propertyName >> expr >> isLiteralValue; + ds >> objectId >> propertyName >> expr >> isLiteralValue; setBinding(objectId, propertyName, expr, isLiteralValue); + } else if (type == "SET_METHOD_BODY") { + int objectId; + QString methodName; + QString methodBody; + ds >> objectId >> methodName >> methodBody; + setMethodBody(objectId, methodName, methodBody); } } void QDeclarativeEngineDebugServer::setBinding(int objectId, - const QString &propertyName, - const QVariant &expression, - bool isLiteralValue) + const QString &propertyName, + const QVariant &expression, + bool isLiteralValue) { QObject *object = objectForId(objectId); QDeclarativeContext *context = qmlContext(object); @@ -493,7 +500,45 @@ void QDeclarativeEngineDebugServer::setBinding(int objectId, } } } +} + +void QDeclarativeEngineDebugServer::setMethodBody(int objectId, const QString &method, const QString &body) +{ + QObject *object = objectForId(objectId); + QDeclarativeContext *context = qmlContext(object); + if (!object || !context || !context->engine()) + return; + QDeclarativeContextData *contextData = QDeclarativeContextData::get(context); + if (!contextData) + return; + + QDeclarativePropertyCache::Data dummy; + QDeclarativePropertyCache::Data *prop = + QDeclarativePropertyCache::property(context->engine(), object, method, dummy); + + if (!prop || !(prop->flags & QDeclarativePropertyCache::Data::IsVMEFunction)) + return; + + QMetaMethod metaMethod = object->metaObject()->method(prop->coreIndex); + QList<QByteArray> paramNames = metaMethod.parameterNames(); + + QString paramStr; + for (int ii = 0; ii < paramNames.count(); ++ii) { + if (ii != 0) paramStr.append(QLatin1String(",")); + paramStr.append(QString::fromUtf8(paramNames.at(ii))); + } + + QString jsfunction = QLatin1String("(function ") + method + QLatin1String("(") + paramStr + + QLatin1String(") {"); + jsfunction += body; + jsfunction += QLatin1String("\n})"); + + QDeclarativeVMEMetaObject *vmeMetaObject = + static_cast<QDeclarativeVMEMetaObject*>(QObjectPrivate::get(object)->metaObject); + Q_ASSERT(vmeMetaObject); // the fact we found the property above should guarentee this + int lineNumber = vmeMetaObject->vmeMethodLineNumber(prop->coreIndex); + vmeMetaObject->setVmeMethod(prop->coreIndex, QDeclarativeExpressionPrivate::evalInObjectScope(contextData, object, jsfunction, contextData->url.toString(), lineNumber, 0)); } void QDeclarativeEngineDebugServer::propertyChanged(int id, int objectId, const QMetaProperty &property, const QVariant &value) diff --git a/src/declarative/qml/qdeclarativeenginedebug_p.h b/src/declarative/qml/qdeclarativeenginedebug_p.h index b3c23bd..ce6df0d 100644 --- a/src/declarative/qml/qdeclarativeenginedebug_p.h +++ b/src/declarative/qml/qdeclarativeenginedebug_p.h @@ -108,6 +108,7 @@ private: QDeclarativeObjectProperty propertyData(QObject *, int); QVariant valueContents(const QVariant &defaultValue) const; void setBinding(int objectId, const QString &propertyName, const QVariant &expression, bool isLiteralValue); + void setMethodBody(int objectId, const QString &method, const QString &body); static QList<QDeclarativeEngine *> m_engines; QDeclarativeWatcher *m_watch; diff --git a/src/declarative/qml/qdeclarativevmemetaobject.cpp b/src/declarative/qml/qdeclarativevmemetaobject.cpp index 7aea7cb..689ed92 100644 --- a/src/declarative/qml/qdeclarativevmemetaobject.cpp +++ b/src/declarative/qml/qdeclarativevmemetaobject.cpp @@ -751,6 +751,22 @@ void QDeclarativeVMEMetaObject::registerInterceptor(int index, int valueIndex, Q interceptors.insert(index, qMakePair(valueIndex, interceptor)); } +int QDeclarativeVMEMetaObject::vmeMethodLineNumber(int index) +{ + if (index < methodOffset) { + Q_ASSERT(parent); + return static_cast<QDeclarativeVMEMetaObject *>(parent)->vmeMethodLineNumber(index); + } + + int plainSignals = metaData->signalCount + metaData->propertyCount + metaData->aliasCount; + Q_ASSERT(index >= (methodOffset + plainSignals) && index < (methodOffset + plainSignals + metaData->methodCount)); + + int rawIndex = index - methodOffset - plainSignals; + + QDeclarativeVMEMetaData::MethodData *data = metaData->methodData() + rawIndex; + return data->lineNumber; +} + QScriptValue QDeclarativeVMEMetaObject::vmeMethod(int index) { if (index < methodOffset) { @@ -762,6 +778,20 @@ QScriptValue QDeclarativeVMEMetaObject::vmeMethod(int index) return method(index - methodOffset - plainSignals); } +void QDeclarativeVMEMetaObject::setVmeMethod(int index, const QScriptValue &value) +{ + if (index < methodOffset) { + Q_ASSERT(parent); + return static_cast<QDeclarativeVMEMetaObject *>(parent)->setVmeMethod(index, value); + } + int plainSignals = metaData->signalCount + metaData->propertyCount + metaData->aliasCount; + Q_ASSERT(index >= (methodOffset + plainSignals) && index < (methodOffset + plainSignals + metaData->methodCount)); + + if (!methods) + methods = new QScriptValue[metaData->methodCount]; + methods[index - methodOffset - plainSignals] = value; +} + QScriptValue QDeclarativeVMEMetaObject::vmeProperty(int index) { if (index < propOffset) { diff --git a/src/declarative/qml/qdeclarativevmemetaobject_p.h b/src/declarative/qml/qdeclarativevmemetaobject_p.h index 4fc3269..20ca80b 100644 --- a/src/declarative/qml/qdeclarativevmemetaobject_p.h +++ b/src/declarative/qml/qdeclarativevmemetaobject_p.h @@ -121,6 +121,8 @@ public: void registerInterceptor(int index, int valueIndex, QDeclarativePropertyValueInterceptor *interceptor); QScriptValue vmeMethod(int index); + int vmeMethodLineNumber(int index); + void setVmeMethod(int index, const QScriptValue &); QScriptValue vmeProperty(int index); void setVMEProperty(int index, const QScriptValue &); diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp index dcd1a85..4a945f3 100644 --- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp +++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp @@ -71,7 +71,7 @@ class tst_QDeclarativeDebug : public QObject Q_OBJECT private: - QDeclarativeDebugObjectReference findRootObject(); + QDeclarativeDebugObjectReference findRootObject(int context = 0); QDeclarativeDebugPropertyReference findProperty(const QList<QDeclarativeDebugPropertyReference> &props, const QString &name) const; void waitForQuery(QDeclarativeDebugQuery *query); @@ -111,9 +111,11 @@ private slots: void tst_QDeclarativeDebugObjectReference(); void tst_QDeclarativeDebugContextReference(); void tst_QDeclarativeDebugPropertyReference(); + + void setMethodBody(); }; -QDeclarativeDebugObjectReference tst_QDeclarativeDebug::findRootObject() +QDeclarativeDebugObjectReference tst_QDeclarativeDebug::findRootObject(int context) { QDeclarativeDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); waitForQuery(q_engines); @@ -125,7 +127,7 @@ QDeclarativeDebugObjectReference tst_QDeclarativeDebug::findRootObject() if (q_context->rootContext().objects().count() == 0) return QDeclarativeDebugObjectReference(); - QDeclarativeDebugObjectQuery *q_obj = m_dbg->queryObject(q_context->rootContext().objects()[0], this); + QDeclarativeDebugObjectQuery *q_obj = m_dbg->queryObject(q_context->rootContext().objects()[context], this); waitForQuery(q_obj); QDeclarativeDebugObjectReference result = q_obj->object(); @@ -290,10 +292,19 @@ void tst_QDeclarativeDebug::initTestCase() "onEntered: { console.log('hello') }" "}" "}"; + // add second component to test multiple root contexts qml << "import Qt 4.7\n" "Item {}"; + // and a third to test methods + qml << "import Qt 4.7\n" + "Item {" + "function myMethodNoArgs() { return 3; }\n" + "function myMethod(a) { return a + 9; }\n" + "function myMethodIndirect() { myMethod(3); }\n" + "}"; + for (int i=0; i<qml.count(); i++) { QDeclarativeComponent component(m_engine); component.setData(qml[i], QUrl::fromLocalFile("")); @@ -322,6 +333,43 @@ void tst_QDeclarativeDebug::cleanupTestCase() qDeleteAll(m_components); } +void tst_QDeclarativeDebug::setMethodBody() +{ + QDeclarativeDebugObjectReference obj = findRootObject(2); + + QObject *root = m_components.at(2); + // Without args + { + QVariant rv; + QVERIFY(QMetaObject::invokeMethod(root, "myMethodNoArgs", Qt::DirectConnection, + Q_RETURN_ARG(QVariant, rv))); + QVERIFY(rv == QVariant(qreal(3))); + + + QVERIFY(m_dbg->setMethodBody(obj.debugId(), "myMethodNoArgs", "return 7")); + QTest::qWait(100); + + QVERIFY(QMetaObject::invokeMethod(root, "myMethodNoArgs", Qt::DirectConnection, + Q_RETURN_ARG(QVariant, rv))); + QVERIFY(rv == QVariant(qreal(7))); + } + + // With args + { + QVariant rv; + QVERIFY(QMetaObject::invokeMethod(root, "myMethod", Qt::DirectConnection, + Q_RETURN_ARG(QVariant, rv), Q_ARG(QVariant, QVariant(19)))); + QVERIFY(rv == QVariant(qreal(28))); + + QVERIFY(m_dbg->setMethodBody(obj.debugId(), "myMethod", "return a + 7")); + QTest::qWait(100); + + QVERIFY(QMetaObject::invokeMethod(root, "myMethod", Qt::DirectConnection, + Q_RETURN_ARG(QVariant, rv), Q_ARG(QVariant, QVariant(19)))); + QVERIFY(rv == QVariant(qreal(26))); + } +} + void tst_QDeclarativeDebug::watch_property() { QDeclarativeDebugObjectReference obj = findRootObject(); @@ -581,7 +629,7 @@ void tst_QDeclarativeDebug::queryRootContexts() QCOMPARE(context.debugId(), QDeclarativeDebugService::idForObject(actualContext)); QCOMPARE(context.name(), actualContext->objectName()); - QCOMPARE(context.objects().count(), 2); // 2 qml component objects created for context in main() + QCOMPARE(context.objects().count(), 3); // 3 qml component objects created for context in main() // root context query sends only root object data - it doesn't fill in // the children or property info -- cgit v0.12 From ca259d99473757190152e81e899aa200355235a5 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Mon, 5 Jul 2010 14:20:14 +1000 Subject: Make declarative pixmap cache easier to use The QDeclarativePixmapCache was both slow, and very trickey to use correctly. Many QML elements did not correctly cancel outstanding requests, which leads to pixmaps leaking indefinately. Other elements, such as Text, were subject to race conditions that meant they may never actually load all their images. QDeclarativePixmap is a single class than encapsulates the action of fetching a pixmap, as well as the pixmap itself and the responsibility of canceling outstanding requests. Rather than relying on Qt's pixmap cache that doesn't cache all the information QML needs, QDeclarativePixmap implements its own cache, that correctly degrades over time (unlike QPixmapCache that can stop expiring items in some conditions). Reviewed-by: Warwick Allison (cherry picked from commit 09f07b98dfdaec2e48749768b967a48e588d3f7f) --- .../graphicsitems/qdeclarativeborderimage.cpp | 100 +- .../graphicsitems/qdeclarativeborderimage_p_p.h | 2 - .../graphicsitems/qdeclarativeimage.cpp | 4 +- .../graphicsitems/qdeclarativeimagebase.cpp | 65 +- .../graphicsitems/qdeclarativeimagebase_p_p.h | 5 +- src/declarative/graphicsitems/qdeclarativetext.cpp | 148 +-- src/declarative/graphicsitems/qdeclarativetext_p.h | 3 - .../graphicsitems/qdeclarativetext_p_p.h | 4 + src/declarative/util/qdeclarativepixmapcache.cpp | 1115 ++++++++++++-------- src/declarative/util/qdeclarativepixmapcache_p.h | 85 +- src/imports/particles/qdeclarativeparticles.cpp | 33 +- .../tst_qdeclarativepixmapcache.cpp | 99 +- 12 files changed, 930 insertions(+), 733 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index d4ca9eb..44c206b 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -94,8 +94,6 @@ QDeclarativeBorderImage::~QDeclarativeBorderImage() Q_D(QDeclarativeBorderImage); if (d->sciReply) d->sciReply->deleteLater(); - if (d->sciPendingPixmapCache) - QDeclarativePixmapCache::cancel(d->sciurl, this); } /*! \qmlproperty enumeration BorderImage::status @@ -164,15 +162,6 @@ void QDeclarativeBorderImage::setSource(const QUrl &url) d->sciReply = 0; } - if (d->pendingPixmapCache) { - QDeclarativePixmapCache::cancel(d->url, this); - d->pendingPixmapCache = false; - } - if (d->sciPendingPixmapCache) { - QDeclarativePixmapCache::cancel(d->sciurl, this); - d->sciPendingPixmapCache = false; - } - d->url = url; d->sciurl = QUrl(); emit sourceChanged(d->url); @@ -190,7 +179,7 @@ void QDeclarativeBorderImage::load() } if (d->url.isEmpty()) { - d->pix = QPixmap(); + d->pix.clear(); d->status = Null; setImplicitWidth(0); setImplicitHeight(0); @@ -224,26 +213,24 @@ void QDeclarativeBorderImage::load() thisSciRequestFinished, Qt::DirectConnection); } } else { - QSize impsize; - QString errorString; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async); - if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { - QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url); - d->pendingPixmapCache = true; - connect(reply, SIGNAL(finished()), this, SLOT(requestFinished())); - connect(reply, SIGNAL(downloadProgress(qint64,qint64)), - this, SLOT(requestProgress(qint64,qint64))); + + d->pix.load(qmlEngine(this), d->url, d->async); + + if (d->pix.isLoading()) { + d->pix.connectFinished(this, SLOT(requestFinished())); + d->pix.connectDownloadProgress(this, SLOT(requestProgress(qint64,qint64))); } else { - //### should be unified with requestFinished + QSize impsize = d->pix.implicitSize(); setImplicitWidth(impsize.width()); setImplicitHeight(impsize.height()); - if (d->pix.isNull()) { + if (d->pix.isReady()) { + d->status = Ready; + } else { d->status = Error; - qmlInfo(this) << errorString; + qmlInfo(this) << d->pix.error(); } - if (d->status == Loading) - d->status = Ready; + d->progress = 1.0; emit statusChanged(d->status); emit progressChanged(d->progress); @@ -343,47 +330,40 @@ void QDeclarativeBorderImage::setGridScaledImage(const QDeclarativeGridScaledIma d->verticalTileMode = sci.verticalTileRule(); d->sciurl = d->url.resolved(QUrl(sci.pixmapUrl())); - QSize impsize; - QString errorString; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->sciurl, &d->pix, &errorString, &impsize, d->async); - if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { - QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->sciurl); - d->sciPendingPixmapCache = true; - - static int replyDownloadProgress = -1; - static int replyFinished = -1; + + d->pix.load(qmlEngine(this), d->sciurl, d->async); + + if (d->pix.isLoading()) { static int thisRequestProgress = -1; static int thisRequestFinished = -1; - if (replyDownloadProgress == -1) { - replyDownloadProgress = - QDeclarativePixmapReply::staticMetaObject.indexOfSignal("downloadProgress(qint64,qint64)"); - replyFinished = - QDeclarativePixmapReply::staticMetaObject.indexOfSignal("finished()"); + if (thisRequestProgress == -1) { thisRequestProgress = QDeclarativeBorderImage::staticMetaObject.indexOfSlot("requestProgress(qint64,qint64)"); thisRequestFinished = QDeclarativeBorderImage::staticMetaObject.indexOfSlot("requestFinished()"); } - QMetaObject::connect(reply, replyFinished, this, - thisRequestFinished, Qt::DirectConnection); - QMetaObject::connect(reply, replyDownloadProgress, this, - thisRequestProgress, Qt::DirectConnection); + d->pix.connectFinished(this, thisRequestFinished); + d->pix.connectDownloadProgress(this, thisRequestProgress); + } else { - //### should be unified with requestFinished + + QSize impsize = d->pix.implicitSize(); setImplicitWidth(impsize.width()); setImplicitHeight(impsize.height()); - if (d->pix.isNull()) { + if (d->pix.isReady()) { + d->status = Ready; + } else { d->status = Error; - qmlInfo(this) << errorString; + qmlInfo(this) << d->pix.error(); } - if (d->status == Loading) - d->status = Ready; + d->progress = 1.0; emit statusChanged(d->status); emit progressChanged(1.0); update(); + } } } @@ -392,27 +372,17 @@ void QDeclarativeBorderImage::requestFinished() { Q_D(QDeclarativeBorderImage); - QSize impsize; - if (d->url.path().endsWith(QLatin1String(".sci"))) { - d->sciPendingPixmapCache = false; - QString errorString; - if (QDeclarativePixmapCache::get(d->sciurl, &d->pix, &errorString, &impsize, d->async) != QDeclarativePixmapReply::Ready) { - d->status = Error; - qmlInfo(this) << errorString; - } + QSize impsize = d->pix.implicitSize(); + if (d->pix.isError()) { + d->status = Error; + qmlInfo(this) << d->pix.error(); } else { - d->pendingPixmapCache = false; - QString errorString; - if (QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async) != QDeclarativePixmapReply::Ready) { - d->status = Error; - qmlInfo(this) << errorString; - } + d->status = Ready; } + setImplicitWidth(impsize.width()); setImplicitHeight(impsize.height()); - if (d->status == Loading) - d->status = Ready; d->progress = 1.0; emit statusChanged(d->status); emit progressChanged(1.0); diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h b/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h index 01e4a00..65583d6 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h @@ -66,7 +66,6 @@ class QDeclarativeBorderImagePrivate : public QDeclarativeImageBasePrivate public: QDeclarativeBorderImagePrivate() : border(0), sciReply(0), - sciPendingPixmapCache(false), horizontalTileMode(QDeclarativeBorderImage::Stretch), verticalTileMode(QDeclarativeBorderImage::Stretch), redirectCount(0) @@ -97,7 +96,6 @@ public: QDeclarativeScaleGrid *border; QUrl sciurl; QNetworkReply *sciReply; - bool sciPendingPixmapCache; QDeclarativeBorderImage::TileMode horizontalTileMode; QDeclarativeBorderImage::TileMode verticalTileMode; int redirectCount; diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index ff61302..e0db580 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -126,7 +126,7 @@ QDeclarativeImage::~QDeclarativeImage() QPixmap QDeclarativeImage::pixmap() const { Q_D(const QDeclarativeImage); - return d->pix; + return d->pix.pixmap(); } void QDeclarativeImage::setPixmap(const QPixmap &pix) @@ -140,7 +140,7 @@ void QDeclarativeImage::setPixmap(const QPixmap &pix) void QDeclarativeImagePrivate::setPixmap(const QPixmap &pixmap) { Q_Q(QDeclarativeImage); - pix = pixmap; + pix.setPixmap(pixmap); q->setImplicitWidth(pix.width()); q->setImplicitHeight(pix.height()); diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp index c3f8195..67f2327 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp @@ -57,9 +57,6 @@ QDeclarativeImageBase::QDeclarativeImageBase(QDeclarativeImageBasePrivate &dd, Q QDeclarativeImageBase::~QDeclarativeImageBase() { - Q_D(QDeclarativeImageBase); - if (d->pendingPixmapCache) - QDeclarativePixmapCache::cancel(d->url, this); } QDeclarativeImageBase::Status QDeclarativeImageBase::status() const @@ -91,7 +88,6 @@ void QDeclarativeImageBase::setAsynchronous(bool async) } } - QUrl QDeclarativeImageBase::source() const { Q_D(const QDeclarativeImageBase); @@ -105,11 +101,6 @@ void QDeclarativeImageBase::setSource(const QUrl &url) if ((d->url.isEmpty() == url.isEmpty()) && url == d->url) return; - if (d->pendingPixmapCache) { - QDeclarativePixmapCache::cancel(d->url, this); - d->pendingPixmapCache = false; - } - d->url = url; emit sourceChanged(d->url); @@ -122,6 +113,7 @@ void QDeclarativeImageBase::setSourceSize(const QSize& size) Q_D(QDeclarativeImageBase); if (d->sourcesize == size) return; + d->sourcesize = size; emit sourceSizeChanged(); if (isComponentComplete()) @@ -143,7 +135,7 @@ void QDeclarativeImageBase::load() } if (d->url.isEmpty()) { - d->pix = QPixmap(); + d->pix.clear(); d->status = Null; setImplicitWidth(0); setImplicitHeight(0); @@ -152,48 +144,37 @@ void QDeclarativeImageBase::load() update(); } else { d->status = Loading; - int reqwidth = d->sourcesize.width(); - int reqheight = d->sourcesize.height(); - QSize impsize; - QString errorString; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async, reqwidth, reqheight); - if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { - QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url, reqwidth, reqheight); - d->pendingPixmapCache = true; - - static int replyDownloadProgress = -1; - static int replyFinished = -1; + + d->pix.load(qmlEngine(this), d->url, d->sourcesize, d->async); + + if (d->pix.isLoading()) { + static int thisRequestProgress = -1; static int thisRequestFinished = -1; - if (replyDownloadProgress == -1) { - replyDownloadProgress = - QDeclarativePixmapReply::staticMetaObject.indexOfSignal("downloadProgress(qint64,qint64)"); - replyFinished = - QDeclarativePixmapReply::staticMetaObject.indexOfSignal("finished()"); + if (thisRequestProgress == -1) { thisRequestProgress = QDeclarativeImageBase::staticMetaObject.indexOfSlot("requestProgress(qint64,qint64)"); thisRequestFinished = QDeclarativeImageBase::staticMetaObject.indexOfSlot("requestFinished()"); } - QMetaObject::connect(reply, replyFinished, this, - thisRequestFinished, Qt::DirectConnection); - QMetaObject::connect(reply, replyDownloadProgress, this, - thisRequestProgress, Qt::DirectConnection); + d->pix.connectFinished(this, thisRequestFinished); + d->pix.connectDownloadProgress(this, thisRequestProgress); + } else { - //### should be unified with requestFinished - if (status == QDeclarativePixmapReply::Ready) { - setImplicitWidth(impsize.width()); - setImplicitHeight(impsize.height()); + QSize impsize = d->pix.implicitSize(); + setImplicitWidth(impsize.width()); + setImplicitHeight(impsize.height()); - if (d->status == Loading) - d->status = Ready; + if (d->pix.isReady()) { + d->status = Ready; if (!d->sourcesize.isValid()) emit sourceSizeChanged(); + } else { d->status = Error; - qmlInfo(this) << errorString; + qmlInfo(this) << d->pix.error(); } d->progress = 1.0; emit statusChanged(d->status); @@ -201,6 +182,7 @@ void QDeclarativeImageBase::load() pixmapChange(); update(); } + } emit statusChanged(d->status); @@ -210,14 +192,13 @@ void QDeclarativeImageBase::requestFinished() { Q_D(QDeclarativeImageBase); - d->pendingPixmapCache = false; + QSize impsize = d->pix.implicitSize(); - QSize impsize; - QString errorString; - if (QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async, d->sourcesize.width(), d->sourcesize.height()) != QDeclarativePixmapReply::Ready) { + if (d->pix.isError()) { d->status = Error; - qmlInfo(this) << errorString; + qmlInfo(this) << d->pix.error(); } + setImplicitWidth(impsize.width()); setImplicitHeight(impsize.height()); diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h index 392c1db..aee8b28 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h @@ -54,6 +54,7 @@ // #include "private/qdeclarativeitem_p.h" +#include "private/qdeclarativepixmapcache_p.h" #include <QtCore/QPointer> @@ -68,18 +69,16 @@ public: QDeclarativeImageBasePrivate() : status(QDeclarativeImageBase::Null), progress(0.0), - pendingPixmapCache(false), async(false) { QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents; } - QPixmap pix; + QDeclarativePixmap pix; QDeclarativeImageBase::Status status; QUrl url; qreal progress; QSize sourcesize; - bool pendingPixmapCache : 1; bool async : 1; }; diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 0bd9a53..a7e2ed0 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -61,52 +61,100 @@ class QTextDocumentWithImageResources : public QTextDocument { Q_OBJECT public: - QTextDocumentWithImageResources(QDeclarativeText *parent) : - QTextDocument(parent), - outstanding(0) - { - } + QTextDocumentWithImageResources(QDeclarativeText *parent); + virtual ~QTextDocumentWithImageResources(); + void setText(const QString &); int resourcesLoading() const { return outstanding; } protected: - QVariant loadResource(int type, const QUrl &name) - { - QUrl url = qmlContext(parent())->resolvedUrl(name); - - if (type == QTextDocument::ImageResource) { - QPixmap pm; - QString errorString; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(url, &pm, &errorString, 0, false, 0, 0); - if (status == QDeclarativePixmapReply::Ready) - return pm; - if (status == QDeclarativePixmapReply::Error) { - if (!errors.contains(url)) { - errors.insert(url); - qmlInfo(parent()) << errorString; - } - } else { - QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(parent()), url); - connect(reply, SIGNAL(finished()), this, SLOT(requestFinished())); + QVariant loadResource(int type, const QUrl &name); + +private slots: + void requestFinished(); + +private: + QHash<QUrl, QDeclarativePixmap *> m_resources; + + int outstanding; + static QSet<QUrl> errors; +}; + +QTextDocumentWithImageResources::QTextDocumentWithImageResources(QDeclarativeText *parent) +: QTextDocument(parent), outstanding(0) +{ +} + +QTextDocumentWithImageResources::~QTextDocumentWithImageResources() +{ + if (!m_resources.isEmpty()) + qDeleteAll(m_resources); +} + +QVariant QTextDocumentWithImageResources::loadResource(int type, const QUrl &name) +{ + QDeclarativeContext *context = qmlContext(parent()); + QUrl url = context->resolvedUrl(name); + + if (type == QTextDocument::ImageResource) { + QHash<QUrl, QDeclarativePixmap *>::Iterator iter = m_resources.find(url); + + if (iter == m_resources.end()) { + QDeclarativePixmap *p = new QDeclarativePixmap(context->engine(), url); + iter = m_resources.insert(name, p); + + if (p->isLoading()) { + p->connectFinished(this, SLOT(requestFinished())); outstanding++; } } - return QTextDocument::loadResource(type,url); // The *resolved* URL + QDeclarativePixmap *p = *iter; + if (p->isReady()) { + return p->pixmap(); + } else if (p->isError()) { + if (!errors.contains(url)) { + errors.insert(url); + qmlInfo(parent()) << p->error(); + } + } } -private slots: - void requestFinished() - { - outstanding--; - if (outstanding == 0) - static_cast<QDeclarativeText*>(parent())->reloadWithResources(); + return QTextDocument::loadResource(type,url); // The *resolved* URL +} + +void QTextDocumentWithImageResources::requestFinished() +{ + outstanding--; + if (outstanding == 0) { + QDeclarativeText *textItem = static_cast<QDeclarativeText*>(parent()); + QString text = textItem->text(); +#ifndef QT_NO_TEXTHTMLPARSER + setHtml(text); +#else + setPlainText(text); +#endif + QDeclarativeTextPrivate *d = QDeclarativeTextPrivate::get(textItem); + d->updateLayout(); + d->markImgDirty(); } +} -private: - int outstanding; - static QSet<QUrl> errors; -}; +void QTextDocumentWithImageResources::setText(const QString &text) +{ + if (!m_resources.isEmpty()) { + qWarning("CLEAR"); + qDeleteAll(m_resources); + m_resources.clear(); + outstanding = 0; + } + +#ifndef QT_NO_TEXTHTMLPARSER + setHtml(text); +#else + setPlainText(text); +#endif +} QSet<QUrl> QTextDocumentWithImageResources::errors; @@ -314,11 +362,7 @@ void QDeclarativeText::setText(const QString &n) if (d->richText) { if (isComponentComplete()) { d->ensureDoc(); -#ifndef QT_NO_TEXTHTMLPARSER - d->doc->setHtml(n); -#else - d->doc->setPlainText(n); -#endif + d->doc->setText(n); } } @@ -607,11 +651,7 @@ void QDeclarativeText::setTextFormat(TextFormat format) } else if (!wasRich && d->richText) { if (isComponentComplete()) { d->ensureDoc(); -#ifndef QT_NO_TEXTHTMLPARSER - d->doc->setHtml(d->text); -#else - d->doc->setPlainText(d->text); -#endif + d->doc->setText(d->text); } d->updateLayout(); d->markImgDirty(); @@ -1074,20 +1114,6 @@ void QDeclarativeTextPrivate::ensureDoc() } } -void QDeclarativeText::reloadWithResources() -{ - Q_D(QDeclarativeText); - if (!d->richText) - return; -#ifndef QT_NO_TEXTHTMLPARSER - d->doc->setHtml(d->text); -#else - d->doc->setPlainText(d->text); -#endif - d->updateLayout(); - d->markImgDirty(); -} - /*! Returns the number of resources (images) that are being loaded asynchronously. */ @@ -1173,11 +1199,7 @@ void QDeclarativeText::componentComplete() if (d->dirty) { if (d->richText) { d->ensureDoc(); -#ifndef QT_NO_TEXTHTMLPARSER - d->doc->setHtml(d->text); -#else - d->doc->setPlainText(d->text); -#endif + d->doc->setText(d->text); } d->updateLayout(); d->dirty = false; diff --git a/src/declarative/graphicsitems/qdeclarativetext_p.h b/src/declarative/graphicsitems/qdeclarativetext_p.h index cd97df3..2cc4d52 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p.h @@ -168,9 +168,6 @@ protected: private: Q_DISABLE_COPY(QDeclarativeText) Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarativeText) - - friend class QTextDocumentWithImageResources; - void reloadWithResources(); }; QT_END_NAMESPACE diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h index 332f99e..51a5514 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h @@ -124,6 +124,10 @@ public: QSize cachedLayoutSize; QDeclarativeText::TextFormat format; QDeclarativeText::WrapMode wrapMode; + + static inline QDeclarativeTextPrivate *get(QDeclarativeText *t) { + return t->d_func(); + } }; QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index 0c2f23d..fdc2455 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -55,104 +55,209 @@ #include <QFile> #include <QThread> #include <QMutex> +#include <QMutexLocker> +#include <QWaitCondition> #include <QBuffer> #include <QWaitCondition> #include <QtCore/qdebug.h> #include <private/qobject_p.h> #include <QSslError> -// Maximum number of simultaneous image requests to send. -static const int maxImageRequestCount = 8; +#define IMAGEREQUEST_MAX_REQUEST_COUNT 8 +#define IMAGEREQUEST_MAX_REDIRECT_RECURSION 16 +#define CACHE_EXPIRE_TIME 30 +#define CACHE_REMOVAL_FRACTION 4 QT_BEGIN_NAMESPACE -class QDeclarativeImageReaderEvent : public QEvent +class QDeclarativePixmapReader; +class QDeclarativePixmapData; +class QDeclarativePixmapReply : public QObject { + Q_OBJECT public: enum ReadError { NoError, Loading, Decoding }; - QDeclarativeImageReaderEvent(QDeclarativeImageReaderEvent::ReadError err, const QString &errStr, const QImage &img) - : QEvent(QEvent::User), error(err), errorString(errStr), image(img) {} + QDeclarativePixmapReply(QDeclarativePixmapData *); + ~QDeclarativePixmapReply(); - ReadError error; - QString errorString; - QImage image; + QDeclarativePixmapData *data; + QDeclarativePixmapReader *reader; + + bool loading; + int redirectCount; + + class Event : public QEvent { + public: + Event(ReadError, const QString &, const QSize &, const QImage &); + + ReadError error; + QString errorString; + QSize implicitSize; + QImage image; + }; + void postReply(ReadError, const QString &, const QSize &, const QImage &); + + +Q_SIGNALS: + void finished(); + void downloadProgress(qint64, qint64); + +protected: + bool event(QEvent *event); + +private: + Q_DISABLE_COPY(QDeclarativePixmapReply) + +public: + static int finishedIndex; + static int downloadProgressIndex; }; -class QDeclarativeImageRequestHandler; -class QDeclarativeImageReader : public QThread +class QDeclarativePixmapData; +class QDeclarativePixmapReader : public QThread { Q_OBJECT public: - QDeclarativeImageReader(QDeclarativeEngine *eng); - ~QDeclarativeImageReader(); + QDeclarativePixmapReader(QDeclarativeEngine *eng); + ~QDeclarativePixmapReader(); - QDeclarativePixmapReply *getImage(const QUrl &url, int req_width, int req_height); + QDeclarativePixmapReply *getImage(QDeclarativePixmapData *); void cancel(QDeclarativePixmapReply *rep); - static QDeclarativeImageReader *instance(QDeclarativeEngine *engine); + static QDeclarativePixmapReader *instance(QDeclarativeEngine *engine); protected: void run(); +private slots: + void networkRequestDone(); + private: + void processJobs(); + void processJob(QDeclarativePixmapReply *); + QList<QDeclarativePixmapReply*> jobs; QList<QDeclarativePixmapReply*> cancelled; QDeclarativeEngine *engine; - QDeclarativeImageRequestHandler *handler; QObject *eventLoopQuitHack; + QMutex mutex; + class ThreadObject : public QObject { + public: + ThreadObject(QDeclarativePixmapReader *); + void processJobs(); + virtual bool event(QEvent *e); + private: + QDeclarativePixmapReader *reader; + } *threadObject; + QWaitCondition waitCondition; + + QNetworkAccessManager *networkAccessManager(); + QNetworkAccessManager *accessManager; - static QHash<QDeclarativeEngine *,QDeclarativeImageReader*> readers; + QHash<QNetworkReply*,QDeclarativePixmapReply*> replies; + + static int replyDownloadProgress; + static int replyFinished; + static int downloadProgress; + static int thisNetworkRequestDone; + static QHash<QDeclarativeEngine *,QDeclarativePixmapReader*> readers; static QMutex readerMutex; - friend class QDeclarativeImageRequestHandler; }; -QHash<QDeclarativeEngine *,QDeclarativeImageReader*> QDeclarativeImageReader::readers; -QMutex QDeclarativeImageReader::readerMutex; - - -class QDeclarativeImageRequestHandler : public QObject +class QDeclarativePixmapData { - Q_OBJECT public: - QDeclarativeImageRequestHandler(QDeclarativeImageReader *read, QDeclarativeEngine *eng) - : QObject(), accessManager(0), engine(eng), reader(read), redirectCount(0) + QDeclarativePixmapData(const QUrl &u, const QSize &s, const QString &e) + : refCount(1), inCache(false), pixmapStatus(QDeclarativePixmap::Error), + url(u), errorString(e), requestSize(s), reply(0), prevUnreferenced(0), + prevUnreferencedPtr(0), nextUnreferenced(0) { - QCoreApplication::postEvent(this, new QEvent(QEvent::User)); } - QDeclarativePixmapReply *getImage(const QUrl &url, int req_width, int req_height); - void cancel(QDeclarativePixmapReply *reply); - -protected: - bool event(QEvent *event); + QDeclarativePixmapData(const QUrl &u, const QSize &r) + : refCount(1), inCache(false), pixmapStatus(QDeclarativePixmap::Loading), + url(u), requestSize(r), reply(0), prevUnreferenced(0), prevUnreferencedPtr(0), + nextUnreferenced(0) + { + } -private slots: - void networkRequestDone(); + QDeclarativePixmapData(const QUrl &u, const QPixmap &p, const QSize &s, const QSize &r) + : refCount(1), inCache(false), privatePixmap(false), pixmapStatus(QDeclarativePixmap::Ready), + url(u), pixmap(p), implicitSize(s), requestSize(r), reply(0), prevUnreferenced(0), + prevUnreferencedPtr(0), nextUnreferenced(0) + { + } -private: - QNetworkAccessManager *networkAccessManager() { - if (!accessManager) - accessManager = QDeclarativeEnginePrivate::get(engine)->createNetworkAccessManager(this); - return accessManager; + QDeclarativePixmapData(const QPixmap &p) + : refCount(1), inCache(false), privatePixmap(true), pixmapStatus(QDeclarativePixmap::Ready), + pixmap(p), implicitSize(p.size()), requestSize(p.size()), reply(0), prevUnreferenced(0), + prevUnreferencedPtr(0), nextUnreferenced(0) + { } - QHash<QNetworkReply*,QDeclarativePixmapReply*> replies; - QNetworkAccessManager *accessManager; - QDeclarativeEngine *engine; - QDeclarativeImageReader *reader; - int redirectCount; + int cost() const; + void addref(); + void release(); + void addToCache(); + void removeFromCache(); - static int replyDownloadProgress; - static int replyFinished; - static int downloadProgress; - static int thisNetworkRequestDone; + uint refCount; + + bool inCache:1; + bool privatePixmap:1; + + QDeclarativePixmap::Status pixmapStatus; + QUrl url; + QString errorString; + QPixmap pixmap; + QSize implicitSize; + QSize requestSize; + + QDeclarativePixmapReply *reply; + + QDeclarativePixmapData *prevUnreferenced; + QDeclarativePixmapData**prevUnreferencedPtr; + QDeclarativePixmapData *nextUnreferenced; }; -//=========================================================================== +int QDeclarativePixmapReply::finishedIndex = -1; +int QDeclarativePixmapReply::downloadProgressIndex = -1; + +// XXX +QHash<QDeclarativeEngine *,QDeclarativePixmapReader*> QDeclarativePixmapReader::readers; +QMutex QDeclarativePixmapReader::readerMutex; -static bool readImage(const QUrl& url, QIODevice *dev, QImage *image, QString *errorString, QSize *impsize, int req_width, int req_height) +int QDeclarativePixmapReader::replyDownloadProgress = -1; +int QDeclarativePixmapReader::replyFinished = -1; +int QDeclarativePixmapReader::downloadProgress = -1; +int QDeclarativePixmapReader::thisNetworkRequestDone = -1; + + +void QDeclarativePixmapReply::postReply(ReadError error, const QString &errorString, + const QSize &implicitSize, const QImage &image) +{ + loading = false; + QCoreApplication::postEvent(this, new Event(error, errorString, implicitSize, image)); +} + +QDeclarativePixmapReply::Event::Event(ReadError e, const QString &s, const QSize &iSize, const QImage &i) +: QEvent(QEvent::User), error(e), errorString(s), implicitSize(iSize), image(i) +{ +} + +QNetworkAccessManager *QDeclarativePixmapReader::networkAccessManager() +{ + if (!accessManager) { + Q_ASSERT(threadObject); + accessManager = QDeclarativeEnginePrivate::get(engine)->createNetworkAccessManager(threadObject); + } + return accessManager; +} + +static bool readImage(const QUrl& url, QIODevice *dev, QImage *image, QString *errorString, QSize *impsize, + const QSize &requestSize) { QImageReader imgio(dev); @@ -163,17 +268,17 @@ static bool readImage(const QUrl& url, QIODevice *dev, QImage *image, QString *e } bool scaled = false; - if (req_width > 0 || req_height > 0) { + if (requestSize.width() > 0 || requestSize.height() > 0) { QSize s = imgio.size(); - if (req_width && (force_scale || req_width < s.width())) { - if (req_height <= 0) - s.setHeight(s.height()*req_width/s.width()); - s.setWidth(req_width); scaled = true; + if (requestSize.width() && (force_scale || requestSize.width() < s.width())) { + if (requestSize.height() <= 0) + s.setHeight(s.height()*requestSize.width()/s.width()); + s.setWidth(requestSize.width()); scaled = true; } - if (req_height && (force_scale || req_height < s.height())) { - if (req_width <= 0) - s.setWidth(s.width()*req_height/s.height()); - s.setHeight(req_height); scaled = true; + if (requestSize.height() && (force_scale || requestSize.height() < s.height())) { + if (requestSize.width() <= 0) + s.setWidth(s.width()*requestSize.height()/s.height()); + s.setHeight(requestSize.height()); scaled = true; } if (scaled) { imgio.setScaledSize(s); } } @@ -187,130 +292,39 @@ static bool readImage(const QUrl& url, QIODevice *dev, QImage *image, QString *e return true; } else { if (errorString) - *errorString = QDeclarativePixmapCache::tr("Error decoding: %1: %2").arg(url.toString()) + *errorString = QDeclarativePixmap::tr("Error decoding: %1: %2").arg(url.toString()) .arg(imgio.errorString()); return false; } } - -//=========================================================================== - -int QDeclarativeImageRequestHandler::replyDownloadProgress = -1; -int QDeclarativeImageRequestHandler::replyFinished = -1; -int QDeclarativeImageRequestHandler::downloadProgress = -1; -int QDeclarativeImageRequestHandler::thisNetworkRequestDone = -1; - -typedef QHash<QUrl, QSize> QDeclarativePixmapSizeHash; -Q_GLOBAL_STATIC(QDeclarativePixmapSizeHash, qmlOriginalSizes); - -bool QDeclarativeImageRequestHandler::event(QEvent *event) +QDeclarativePixmapReader::QDeclarativePixmapReader(QDeclarativeEngine *eng) +: QThread(eng), engine(eng), threadObject(0), accessManager(0) { - if (event->type() == QEvent::User) { - if (replyDownloadProgress == -1) { - replyDownloadProgress = QNetworkReply::staticMetaObject.indexOfSignal("downloadProgress(qint64,qint64)"); - replyFinished = QNetworkReply::staticMetaObject.indexOfSignal("finished()"); - downloadProgress = QDeclarativePixmapReply::staticMetaObject.indexOfSignal("downloadProgress(qint64,qint64)"); - thisNetworkRequestDone = QDeclarativeImageRequestHandler::staticMetaObject.indexOfSlot("networkRequestDone()"); - } - - while (1) { - reader->mutex.lock(); - - if (reader->cancelled.count()) { - for (int i = 0; i < reader->cancelled.count(); ++i) { - QDeclarativePixmapReply *job = reader->cancelled.at(i); - QNetworkReply *reply = replies.key(job, 0); - if (reply && reply->isRunning()) { - // cancel any jobs already started - replies.remove(reply); - reply->close(); - job->release(true); - } else { - // remove from pending job list - for (int j = 0; j < reader->jobs.count(); ++j) { - if (reader->jobs.at(j) == job) { - reader->jobs.removeAt(j); - job->release(true); - break; - } - } - } - } - reader->cancelled.clear(); - } - - if (!reader->jobs.count() || replies.count() > maxImageRequestCount) { - reader->mutex.unlock(); - break; - } - - QDeclarativePixmapReply *runningJob = reader->jobs.takeLast(); - QUrl url = runningJob->url(); - reader->mutex.unlock(); - - // fetch - if (url.scheme() == QLatin1String("image")) { - // Use QmlImageProvider - QSize read_impsize; - QImage image = QDeclarativeEnginePrivate::get(engine)->getImageFromProvider(url, &read_impsize, QSize(runningJob->forcedWidth(),runningJob->forcedHeight())); - qmlOriginalSizes()->insert(url, read_impsize); - QDeclarativeImageReaderEvent::ReadError errorCode = QDeclarativeImageReaderEvent::NoError; - QString errorStr; - if (image.isNull()) { - errorCode = QDeclarativeImageReaderEvent::Loading; - errorStr = QDeclarativePixmapCache::tr("Failed to get image from provider: %1").arg(url.toString()); - } - QCoreApplication::postEvent(runningJob, new QDeclarativeImageReaderEvent(errorCode, errorStr, image)); - } else { - QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); - if (!lf.isEmpty()) { - // Image is local - load/decode immediately - QImage image; - QDeclarativeImageReaderEvent::ReadError errorCode = QDeclarativeImageReaderEvent::NoError; - QString errorStr; - QFile f(lf); - if (f.open(QIODevice::ReadOnly)) { - QSize read_impsize; - if (readImage(url, &f, &image, &errorStr, &read_impsize, runningJob->forcedWidth(),runningJob->forcedHeight())) { - qmlOriginalSizes()->insert(url, read_impsize); - } else { - errorCode = QDeclarativeImageReaderEvent::Loading; - } - } else { - errorStr = QDeclarativePixmapCache::tr("Cannot open: %1").arg(url.toString()); - errorCode = QDeclarativeImageReaderEvent::Loading; - } - QCoreApplication::postEvent(runningJob, new QDeclarativeImageReaderEvent(errorCode, errorStr, image)); - } else { - // Network resource - QNetworkRequest req(url); - req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); - QNetworkReply *reply = networkAccessManager()->get(req); - - QMetaObject::connect(reply, replyDownloadProgress, runningJob, downloadProgress); - QMetaObject::connect(reply, replyFinished, this, thisNetworkRequestDone); + eventLoopQuitHack = new QObject; + eventLoopQuitHack->moveToThread(this); + connect(eventLoopQuitHack, SIGNAL(destroyed(QObject*)), SLOT(quit()), Qt::DirectConnection); + start(QThread::IdlePriority); +} - replies.insert(reply, runningJob); - } - } - } - return true; - } +QDeclarativePixmapReader::~QDeclarativePixmapReader() +{ + readerMutex.lock(); + readers.remove(engine); + readerMutex.unlock(); - return QObject::event(event); + eventLoopQuitHack->deleteLater(); + wait(); } -#define IMAGEREQUESTHANDLER_MAX_REDIRECT_RECURSION 16 - -void QDeclarativeImageRequestHandler::networkRequestDone() +void QDeclarativePixmapReader::networkRequestDone() { QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); QDeclarativePixmapReply *job = replies.take(reply); if (job) { - redirectCount++; - if (redirectCount < IMAGEREQUESTHANDLER_MAX_REDIRECT_RECURSION) { + job->redirectCount++; + if (job->redirectCount < IMAGEREQUEST_MAX_REDIRECT_RECURSION) { QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); if (redirect.isValid()) { QUrl url = reply->url().resolved(redirect.toUrl()); @@ -327,62 +341,141 @@ void QDeclarativeImageRequestHandler::networkRequestDone() return; } } - redirectCount=0; QImage image; - QDeclarativeImageReaderEvent::ReadError error; + QDeclarativePixmapReply::ReadError error = QDeclarativePixmapReply::NoError; QString errorString; + QSize readSize; if (reply->error()) { - error = QDeclarativeImageReaderEvent::Loading; + error = QDeclarativePixmapReply::Loading; errorString = reply->errorString(); } else { - QSize read_impsize; QByteArray all = reply->readAll(); QBuffer buff(&all); buff.open(QIODevice::ReadOnly); - if (readImage(reply->url(), &buff, &image, &errorString, &read_impsize, job->forcedWidth(), job->forcedHeight())) { - qmlOriginalSizes()->insert(reply->url(), read_impsize); - error = QDeclarativeImageReaderEvent::NoError; - } else { - error = QDeclarativeImageReaderEvent::Decoding; + if (!readImage(reply->url(), &buff, &image, &errorString, &readSize, job->data->requestSize)) { + error = QDeclarativePixmapReply::Decoding; } } // send completion event to the QDeclarativePixmapReply - QCoreApplication::postEvent(job, new QDeclarativeImageReaderEvent(error, errorString, image)); + job->postReply(error, errorString, readSize, image); } - // kick off event loop again if we have dropped below max request count - if (replies.count() == maxImageRequestCount) - QCoreApplication::postEvent(this, new QEvent(QEvent::User)); reply->deleteLater(); + + // kick off event loop again incase we have dropped below max request count + threadObject->processJobs(); } -//=========================================================================== +QDeclarativePixmapReader::ThreadObject::ThreadObject(QDeclarativePixmapReader *i) +: reader(i) +{ +} + +void QDeclarativePixmapReader::ThreadObject::processJobs() +{ + QCoreApplication::postEvent(this, new QEvent(QEvent::User)); +} -QDeclarativeImageReader::QDeclarativeImageReader(QDeclarativeEngine *eng) - : QThread(eng), engine(eng), handler(0) +bool QDeclarativePixmapReader::ThreadObject::event(QEvent *e) { - eventLoopQuitHack = new QObject; - eventLoopQuitHack->moveToThread(this); - connect(eventLoopQuitHack, SIGNAL(destroyed(QObject*)), SLOT(quit()), Qt::DirectConnection); - start(QThread::IdlePriority); + if (e->type() == QEvent::User) { + reader->processJobs(); + return true; + } else { + return QObject::event(e); + } } -QDeclarativeImageReader::~QDeclarativeImageReader() +void QDeclarativePixmapReader::processJobs() { - readerMutex.lock(); - readers.remove(engine); - readerMutex.unlock(); + QMutexLocker locker(&mutex); + + while (true) { + if (cancelled.isEmpty() && (jobs.isEmpty() || replies.count() >= IMAGEREQUEST_MAX_REQUEST_COUNT)) + return; // Nothing else to do + + // Clean cancelled jobs + if (cancelled.count()) { + for (int i = 0; i < cancelled.count(); ++i) { + QDeclarativePixmapReply *job = cancelled.at(i); + QNetworkReply *reply = replies.key(job, 0); + if (reply && reply->isRunning()) { + // cancel any jobs already started + replies.remove(reply); + reply->close(); + } + delete job; + } + cancelled.clear(); + } - eventLoopQuitHack->deleteLater(); - wait(); + if (!jobs.isEmpty() && replies.count() < IMAGEREQUEST_MAX_REQUEST_COUNT) { + QDeclarativePixmapReply *runningJob = jobs.takeLast(); + runningJob->loading = true; + + locker.unlock(); + processJob(runningJob); + locker.relock(); + } + } +} + +void QDeclarativePixmapReader::processJob(QDeclarativePixmapReply *runningJob) +{ + QUrl url = runningJob->data->url; + + // fetch + if (url.scheme() == QLatin1String("image")) { + // Use QmlImageProvider + QSize readSize; + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); + QImage image = ep->getImageFromProvider(url, &readSize, runningJob->data->requestSize); + + QDeclarativePixmapReply::ReadError errorCode = QDeclarativePixmapReply::NoError; + QString errorStr; + if (image.isNull()) { + errorCode = QDeclarativePixmapReply::Loading; + errorStr = QDeclarativePixmap::tr("Failed to get image from provider: %1").arg(url.toString()); + } + + runningJob->postReply(errorCode, errorStr, readSize, image); + } else { + QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); + if (!lf.isEmpty()) { + // Image is local - load/decode immediately + QImage image; + QDeclarativePixmapReply::ReadError errorCode = QDeclarativePixmapReply::NoError; + QString errorStr; + QFile f(lf); + QSize readSize; + if (f.open(QIODevice::ReadOnly)) { + if (!readImage(url, &f, &image, &errorStr, &readSize, runningJob->data->requestSize)) + errorCode = QDeclarativePixmapReply::Loading; + } else { + errorStr = QDeclarativePixmap::tr("Cannot open: %1").arg(url.toString()); + errorCode = QDeclarativePixmapReply::Loading; + } + runningJob->postReply(errorCode, errorStr, readSize, image); + } else { + // Network resource + QNetworkRequest req(url); + req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); + QNetworkReply *reply = networkAccessManager()->get(req); + + QMetaObject::connect(reply, replyDownloadProgress, runningJob, downloadProgress); + QMetaObject::connect(reply, replyFinished, this, thisNetworkRequestDone); + + replies.insert(reply, runningJob); + } + } } -QDeclarativeImageReader *QDeclarativeImageReader::instance(QDeclarativeEngine *engine) +QDeclarativePixmapReader *QDeclarativePixmapReader::instance(QDeclarativeEngine *engine) { readerMutex.lock(); - QDeclarativeImageReader *reader = readers.value(engine); + QDeclarativePixmapReader *reader = readers.value(engine); if (!reader) { - reader = new QDeclarativeImageReader(engine); + reader = new QDeclarativePixmapReader(engine); readers.insert(engine, reader); } readerMutex.unlock(); @@ -390,348 +483,510 @@ QDeclarativeImageReader *QDeclarativeImageReader::instance(QDeclarativeEngine *e return reader; } -QDeclarativePixmapReply *QDeclarativeImageReader::getImage(const QUrl &url, int req_width, int req_height) +QDeclarativePixmapReply *QDeclarativePixmapReader::getImage(QDeclarativePixmapData *data) { mutex.lock(); - QDeclarativePixmapReply *reply = new QDeclarativePixmapReply(this, url, req_width, req_height); - reply->addRef(); - reply->setLoading(); + QDeclarativePixmapReply *reply = new QDeclarativePixmapReply(data); + reply->reader = this; jobs.append(reply); - if (jobs.count() == 1 && handler) - QCoreApplication::postEvent(handler, new QEvent(QEvent::User)); + // XXX + if (threadObject) threadObject->processJobs(); mutex.unlock(); return reply; } -void QDeclarativeImageReader::cancel(QDeclarativePixmapReply *reply) +void QDeclarativePixmapReader::cancel(QDeclarativePixmapReply *reply) { mutex.lock(); - if (reply->isLoading()) { - // Add to cancel list to be cancelled in reader thread. + if (reply->loading) { cancelled.append(reply); - if (cancelled.count() == 1 && handler) - QCoreApplication::postEvent(handler, new QEvent(QEvent::User)); + // XXX + if (threadObject) threadObject->processJobs(); + } else { + jobs.removeAll(reply); + delete reply; } mutex.unlock(); } -void QDeclarativeImageReader::run() +void QDeclarativePixmapReader::run() { - readerMutex.lock(); - handler = new QDeclarativeImageRequestHandler(this, engine); - readerMutex.unlock(); + if (replyDownloadProgress == -1) { + const QMetaObject *nr = &QNetworkReply::staticMetaObject; + const QMetaObject *pr = &QDeclarativePixmapReply::staticMetaObject; + const QMetaObject *ir = &QDeclarativePixmapReader::staticMetaObject; + replyDownloadProgress = nr->indexOfSignal("downloadProgress(qint64,qint64)"); + replyFinished = nr->indexOfSignal("finished()"); + downloadProgress = pr->indexOfSignal("downloadProgress(qint64,qint64)"); + thisNetworkRequestDone = ir->indexOfSlot("networkRequestDone()"); + } + mutex.lock(); + threadObject = new ThreadObject(this); + mutex.unlock(); + + processJobs(); exec(); - delete handler; - handler = 0; + delete threadObject; + threadObject = 0; } -//=========================================================================== - -/*! - \internal - \class QDeclarativePixmapCache - \brief Enacapsultes a pixmap for QDeclarativeGraphics items. +class QDeclarativePixmapKey +{ +public: + const QUrl *url; + const QSize *size; +}; - This class is NOT reentrant. - */ +inline bool operator==(const QDeclarativePixmapKey &lhs, const QDeclarativePixmapKey &rhs) +{ + return *lhs.size == *rhs.size && *lhs.url == *rhs.url; +} -typedef QHash<QUrl, QDeclarativePixmapReply *> QDeclarativePixmapReplyHash; -Q_GLOBAL_STATIC(QDeclarativePixmapReplyHash, qmlActivePixmapReplies); +inline uint qHash(const QDeclarativePixmapKey &key) +{ + return qHash(*key.url) ^ key.size->width() ^ key.size->height(); +} -class QDeclarativePixmapReplyPrivate : public QObjectPrivate +class QDeclarativePixmapStore : public QObject { - Q_DECLARE_PUBLIC(QDeclarativePixmapReply) + Q_OBJECT +public: + QDeclarativePixmapStore(); + + void unreferencePixmap(QDeclarativePixmapData *); + void referencePixmap(QDeclarativePixmapData *); + +protected: + virtual void timerEvent(QTimerEvent *); public: - QDeclarativePixmapReplyPrivate(QDeclarativeImageReader *r, const QUrl &u, int req_width, int req_height) - : QObjectPrivate(), refCount(1), url(u), status(QDeclarativePixmapReply::Loading), loading(false), reader(r), - forced_width(req_width), forced_height(req_height) - { - } + QHash<QDeclarativePixmapKey, QDeclarativePixmapData *> m_cache; - int refCount; - QUrl url; - QPixmap pixmap; // ensure reference to pixmap so QPixmapCache does not discard - QDeclarativePixmapReply::Status status; - bool loading; - QDeclarativeImageReader *reader; - int forced_width, forced_height; - QString errorString; -}; +private: + QDeclarativePixmapData *m_unreferencedPixmaps; + QDeclarativePixmapData *m_lastUnreferencedPixmap; + int m_unreferencedCost; + int m_timerId; +}; +Q_GLOBAL_STATIC(QDeclarativePixmapStore, pixmapStore); -QDeclarativePixmapReply::QDeclarativePixmapReply(QDeclarativeImageReader *reader, const QUrl &url, int req_width, int req_height) - : QObject(*new QDeclarativePixmapReplyPrivate(reader, url, req_width, req_height), 0) +QDeclarativePixmapStore::QDeclarativePixmapStore() +: m_unreferencedPixmaps(0), m_lastUnreferencedPixmap(0), m_unreferencedCost(0), m_timerId(-1) { } -QDeclarativePixmapReply::~QDeclarativePixmapReply() +void QDeclarativePixmapStore::unreferencePixmap(QDeclarativePixmapData *data) { + Q_ASSERT(data->prevUnreferenced == 0); + Q_ASSERT(data->prevUnreferencedPtr == 0); + Q_ASSERT(data->nextUnreferenced == 0); + + data->nextUnreferenced = m_unreferencedPixmaps; + data->prevUnreferencedPtr = &m_unreferencedPixmaps; + + m_unreferencedPixmaps = data; + if (m_unreferencedPixmaps->nextUnreferenced) { + m_unreferencedPixmaps->nextUnreferenced->prevUnreferenced = m_unreferencedPixmaps; + m_unreferencedPixmaps->nextUnreferenced->prevUnreferencedPtr = &m_unreferencedPixmaps->nextUnreferenced; + } + + if (!m_lastUnreferencedPixmap) + m_lastUnreferencedPixmap = data; + + m_unreferencedCost += data->cost(); + + if (m_timerId == -1) + startTimer(CACHE_EXPIRE_TIME * 1000); } -const QUrl &QDeclarativePixmapReply::url() const +void QDeclarativePixmapStore::referencePixmap(QDeclarativePixmapData *data) { - Q_D(const QDeclarativePixmapReply); - return d->url; + Q_ASSERT(data->prevUnreferencedPtr); + + *data->prevUnreferencedPtr = data->nextUnreferenced; + if (data->nextUnreferenced) { + data->nextUnreferenced->prevUnreferencedPtr = data->prevUnreferencedPtr; + data->nextUnreferenced->prevUnreferenced = data->prevUnreferenced; + } + if (m_lastUnreferencedPixmap == data) + m_lastUnreferencedPixmap = data->prevUnreferenced; + + data->nextUnreferenced = 0; + data->prevUnreferencedPtr = 0; + data->prevUnreferenced = 0; + + m_unreferencedCost -= data->cost(); } -int QDeclarativePixmapReply::forcedWidth() const +void QDeclarativePixmapStore::timerEvent(QTimerEvent *) { - Q_D(const QDeclarativePixmapReply); - return d->forced_width; + int removalCost = m_unreferencedCost / CACHE_REMOVAL_FRACTION; + + while (removalCost > 0 && m_lastUnreferencedPixmap) { + QDeclarativePixmapData *data = m_lastUnreferencedPixmap; + Q_ASSERT(data->nextUnreferenced == 0); + + *data->prevUnreferencedPtr = 0; + m_lastUnreferencedPixmap = data->prevUnreferenced; + data->prevUnreferencedPtr = 0; + data->prevUnreferenced = 0; + + removalCost -= data->cost(); + data->removeFromCache(); + delete data; + } + + if (m_unreferencedPixmaps == 0) { + killTimer(m_timerId); + m_timerId = -1; + } } -int QDeclarativePixmapReply::forcedHeight() const +QDeclarativePixmapReply::QDeclarativePixmapReply(QDeclarativePixmapData *d) +: data(d), reader(0), loading(false), redirectCount(0) { - Q_D(const QDeclarativePixmapReply); - return d->forced_height; + if (finishedIndex == -1) { + finishedIndex = QDeclarativePixmapReply::staticMetaObject.indexOfSignal("finished()"); + downloadProgressIndex = QDeclarativePixmapReply::staticMetaObject.indexOfSignal("downloadProgress(qint64,qint64)"); + } } -QSize QDeclarativePixmapReply::implicitSize() const +QDeclarativePixmapReply::~QDeclarativePixmapReply() { - Q_D(const QDeclarativePixmapReply); - QDeclarativePixmapSizeHash::Iterator iter = qmlOriginalSizes()->find(d->url); - if (iter != qmlOriginalSizes()->end()) - return *iter; - else - return QSize(); } bool QDeclarativePixmapReply::event(QEvent *event) { - Q_D(QDeclarativePixmapReply); if (event->type() == QEvent::User) { - d->loading = false; - if (!release(true)) { - QDeclarativeImageReaderEvent *de = static_cast<QDeclarativeImageReaderEvent*>(event); - d->status = (de->error == QDeclarativeImageReaderEvent::NoError) ? Ready : Error; - if (d->status == Ready) - d->pixmap = QPixmap::fromImage(de->image); - else - d->errorString = de->errorString; - QByteArray key = d->url.toEncoded(QUrl::FormattingOption(0x100)); - if (d->forced_width > 0 || d->forced_height > 0) { - key += ':'; - key += QByteArray::number(d->forced_width); - key += 'x'; - key += QByteArray::number(d->forced_height); + + if (data) { + Event *de = static_cast<Event *>(event); + data->pixmapStatus = (de->error == NoError) ? QDeclarativePixmap::Ready : QDeclarativePixmap::Error; + + if (data->pixmapStatus == QDeclarativePixmap::Ready) { + data->pixmap = QPixmap::fromImage(de->image); + data->implicitSize = de->implicitSize; + } else { + data->errorString = de->errorString; + data->removeFromCache(); // We don't continue to cache error'd pixmaps } - QString strKey = QString::fromLatin1(key.constData(), key.count()); - QPixmapCache::insert(strKey, d->pixmap); // note: may fail (returns false) + + data->reply = 0; emit finished(); } + + delete this; return true; + } else { + return QObject::event(event); } +} - return QObject::event(event); +int QDeclarativePixmapData::cost() const +{ + return pixmap.width() * pixmap.height() * pixmap.depth(); } -QString QDeclarativePixmapReply::errorString() const +void QDeclarativePixmapData::addref() { - Q_D(const QDeclarativePixmapReply); - return d->errorString; + ++refCount; + if (prevUnreferencedPtr) + pixmapStore()->referencePixmap(this); } -QDeclarativePixmapReply::Status QDeclarativePixmapReply::status() const +void QDeclarativePixmapData::release() { - Q_D(const QDeclarativePixmapReply); - return d->status; + Q_ASSERT(refCount > 0); + --refCount; + + if (refCount == 0) { + if (reply) { + reply->data = 0; + reply->reader->cancel(reply); + reply = 0; + } + + if (pixmapStatus == QDeclarativePixmap::Ready) { + pixmapStore()->unreferencePixmap(this); + } else { + removeFromCache(); + delete this; + } + } } -bool QDeclarativePixmapReply::isLoading() const +void QDeclarativePixmapData::addToCache() { - Q_D(const QDeclarativePixmapReply); - return d->loading; + if (!inCache) { + QDeclarativePixmapKey key = { &url, &requestSize }; + pixmapStore()->m_cache.insert(key, this); + inCache = true; + } } -void QDeclarativePixmapReply::setLoading() +void QDeclarativePixmapData::removeFromCache() { - Q_D(QDeclarativePixmapReply); - d->loading = true; + if (inCache) { + QDeclarativePixmapKey key = { &url, &requestSize }; + pixmapStore()->m_cache.remove(key); + inCache = false; + } } -void QDeclarativePixmapReply::addRef() +struct QDeclarativePixmapNull { + QUrl url; + QPixmap pixmap; + QSize size; +}; +Q_GLOBAL_STATIC(QDeclarativePixmapNull, nullPixmap); + +QDeclarativePixmap::QDeclarativePixmap() +: d(0) { - Q_D(QDeclarativePixmapReply); - ++d->refCount; } -bool QDeclarativePixmapReply::release(bool defer) +QDeclarativePixmap::QDeclarativePixmap(QDeclarativeEngine *engine, const QUrl &url) +: d(0) { - Q_D(QDeclarativePixmapReply); - Q_ASSERT(d->refCount > 0); - --d->refCount; - if (d->refCount == 0) { - qmlActivePixmapReplies()->remove(d->url); - if (defer) - deleteLater(); - else - delete this; - return true; - } else if (d->refCount == 1 && d->loading) { - // The only reference left is the reader thread. - qmlActivePixmapReplies()->remove(d->url); - d->reader->cancel(this); + load(engine, url); +} + +QDeclarativePixmap::QDeclarativePixmap(QDeclarativeEngine *engine, const QUrl &url, const QSize &size) +: d(0) +{ + load(engine, url, size); +} + +QDeclarativePixmap::~QDeclarativePixmap() +{ + if (d) { + d->release(); + d = 0; } +} - return false; +bool QDeclarativePixmap::isNull() const +{ + return d == 0; } -/*! - Finds the cached pixmap corresponding to \a url. - If the image is a network resource and has not yet - been retrieved and cached, request() must be called. +bool QDeclarativePixmap::isReady() const +{ + return status() == Ready; +} - Returns Ready, or Error if the image has been retrieved, - otherwise the current retrieval status. +bool QDeclarativePixmap::isError() const +{ + return status() == Error; +} - If \a async is false the image will be loaded and decoded immediately; - otherwise the image will be loaded and decoded in a separate thread. +bool QDeclarativePixmap::isLoading() const +{ + return status() == Loading; +} - If \a req_width and \a req_height are non-zero, they are used for - the size of the rendered pixmap rather than the intrinsic size of the image. - Different request sizes add different cache items. +QString QDeclarativePixmap::error() const +{ + if (d) + return d->errorString; + else + return QString(); +} - Note that images sourced from the network will always be loaded and - decoded asynchonously. -*/ -QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QPixmap *pixmap, QString *errorString, QSize *impsize, bool async, int req_width, int req_height) +QDeclarativePixmap::Status QDeclarativePixmap::status() const { - QDeclarativePixmapReply::Status status = QDeclarativePixmapReply::Unrequested; - QByteArray key = url.toEncoded(QUrl::FormattingOption(0x100)); + if (d) + return d->pixmapStatus; + else + return Null; +} - if (req_width > 0 || req_height > 0) { - key += ':'; - key += QByteArray::number(req_width); - key += 'x'; - key += QByteArray::number(req_height); - } +const QUrl &QDeclarativePixmap::url() const +{ + if (d) + return d->url; + else + return nullPixmap()->url; +} - QString strKey = QString::fromLatin1(key.constData(), key.count()); +const QSize &QDeclarativePixmap::implicitSize() const +{ + if (d) + return d->implicitSize; + else + return nullPixmap()->size; +} + +const QSize &QDeclarativePixmap::requestSize() const +{ + if (d) + return d->requestSize; + else + return nullPixmap()->size; +} + +const QPixmap &QDeclarativePixmap::pixmap() const +{ + if (d) + return d->pixmap; + else + return nullPixmap()->pixmap; +} + +void QDeclarativePixmap::setPixmap(const QPixmap &p) +{ + clear(); + + if (!p.isNull()) + d = new QDeclarativePixmapData(p); +} + +int QDeclarativePixmap::width() const +{ + if (d) + return d->pixmap.width(); + else + return 0; +} + +int QDeclarativePixmap::height() const +{ + if (d) + return d->pixmap.height(); + else + return 0; +} + +QRect QDeclarativePixmap::rect() const +{ + if (d) + return d->pixmap.rect(); + else + return QRect(); +} + +void QDeclarativePixmap::load(QDeclarativeEngine *engine, const QUrl &url) +{ + load(engine, url, QSize(), false); +} + +void QDeclarativePixmap::load(QDeclarativeEngine *engine, const QUrl &url, bool async) +{ + load(engine, url, QSize(), async); +} + +void QDeclarativePixmap::load(QDeclarativeEngine *engine, const QUrl &url, const QSize &size) +{ + load(engine, url, size, false); +} + +void QDeclarativePixmap::load(QDeclarativeEngine *engine, const QUrl &url, const QSize &requestSize, bool async) +{ + if (d) { d->release(); d = 0; } + + QDeclarativePixmapKey key = { &url, &requestSize }; + QDeclarativePixmapStore *store = pixmapStore(); + + QHash<QDeclarativePixmapKey, QDeclarativePixmapData *>::Iterator iter = store->m_cache.find(key); + + if (iter == store->m_cache.end()) { + if (!async) { + QString localFile = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); + if (!localFile.isEmpty()) { + QFile f(localFile); + QSize readSize; + QString errorString; -#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML - if (!async) { - QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); - if (!lf.isEmpty()) { - status = QDeclarativePixmapReply::Ready; - if (!QPixmapCache::find(strKey,pixmap)) { - QFile f(lf); - QSize read_impsize; if (f.open(QIODevice::ReadOnly)) { QImage image; - if (readImage(url, &f, &image, errorString, &read_impsize, req_width, req_height)) { - *pixmap = QPixmap::fromImage(image); - } else { - *pixmap = QPixmap(); - status = QDeclarativePixmapReply::Error; - } + if (readImage(url, &f, &image, &errorString, &readSize, requestSize)) { + d = new QDeclarativePixmapData(url, QPixmap::fromImage(image), readSize, requestSize); + d->addToCache(); + return; + } } else { - if (errorString) - *errorString = tr("Cannot open: %1").arg(url.toString()); - *pixmap = QPixmap(); - status = QDeclarativePixmapReply::Error; - } - if (status == QDeclarativePixmapReply::Ready) { - QPixmapCache::insert(strKey, *pixmap); - qmlOriginalSizes()->insert(url, read_impsize); - } - if (impsize) - *impsize = read_impsize; - } else { - if (impsize) { - QDeclarativePixmapSizeHash::Iterator iter = qmlOriginalSizes()->find(url); - if (iter != qmlOriginalSizes()->end()) - *impsize = *iter; + errorString = tr("Cannot open: %1").arg(url.toString()); } + + d = new QDeclarativePixmapData(url, requestSize, errorString); + return; } - return status; - } - } -#endif - - QDeclarativePixmapReplyHash::Iterator iter = qmlActivePixmapReplies()->find(url); - if (iter != qmlActivePixmapReplies()->end() && (*iter)->status() == QDeclarativePixmapReply::Ready) { - // Must check this, since QPixmapCache::insert may have failed. - *pixmap = (*iter)->d_func()->pixmap; - status = (*iter)->status(); - (*iter)->release(); - } else if (QPixmapCache::find(strKey, pixmap)) { - if (iter != qmlActivePixmapReplies()->end()) { - status = (*iter)->status(); - if (errorString) - *errorString = (*iter)->errorString(); - (*iter)->release(); - } else if (pixmap->isNull()) { - status = QDeclarativePixmapReply::Error; - if (errorString) - *errorString = tr("Unknown Error loading %1").arg(url.toString()); - } else { - status = QDeclarativePixmapReply::Ready; - } - } else if (iter != qmlActivePixmapReplies()->end()) { - status = QDeclarativePixmapReply::Loading; - } - if (impsize) { - QDeclarativePixmapSizeHash::Iterator iter = qmlOriginalSizes()->find(url); - if (iter != qmlOriginalSizes()->end()) - *impsize = *iter; - } + } + + if (!engine) + return; + + QDeclarativePixmapReader *reader = QDeclarativePixmapReader::instance(engine); + + d = new QDeclarativePixmapData(url, requestSize); + d->addToCache(); - return status; + d->reply = reader->getImage(d); + } else { + d = *iter; + d->addref(); + } } -/*! - Starts a network request to load \a url. +void QDeclarativePixmap::clear() +{ + if (d) { + d->release(); + d = 0; + } +} - Returns a QDeclarativePixmapReply. Caller should connect to QDeclarativePixmapReply::finished() - and call get() when the image is available. +void QDeclarativePixmap::clear(QObject *obj) +{ + if (d) { + if (d->reply) + QObject::disconnect(d->reply, 0, obj, 0); + d->release(); + d = 0; + } +} - The returned QDeclarativePixmapReply will be deleted when all request() calls are - matched by a corresponding get() call. -*/ -QDeclarativePixmapReply *QDeclarativePixmapCache::request(QDeclarativeEngine *engine, const QUrl &url, int req_width, int req_height) +bool QDeclarativePixmap::connectFinished(QObject *object, const char *method) { - QDeclarativePixmapReplyHash::Iterator iter = qmlActivePixmapReplies()->find(url); - if (iter == qmlActivePixmapReplies()->end()) { - QDeclarativeImageReader *reader = QDeclarativeImageReader::instance(engine); - QDeclarativePixmapReply *item = reader->getImage(url, req_width, req_height); - iter = qmlActivePixmapReplies()->insert(url, item); - } else { - (*iter)->addRef(); + if (!d || !d->reply) { + qWarning("QDeclarativePixmap: connectFinished() called when not loading."); + return false; } - return (*iter); + return QObject::connect(d->reply, SIGNAL(finished()), object, method); } -/*! - Cancels a previous call to request(). +bool QDeclarativePixmap::connectFinished(QObject *object, int method) +{ + if (!d || !d->reply) { + qWarning("QDeclarativePixmap: connectFinished() called when not loading."); + return false; + } - May also cancel loading (eg. if no other pending request). + return QMetaObject::connect(d->reply, QDeclarativePixmapReply::finishedIndex, object, method); +} - Any connections from the QDeclarativePixmapReply returned by request() to \a obj will be - disconnected. -*/ -void QDeclarativePixmapCache::cancel(const QUrl& url, QObject *obj) +bool QDeclarativePixmap::connectDownloadProgress(QObject *object, const char *method) { - QDeclarativePixmapReplyHash::Iterator iter = qmlActivePixmapReplies()->find(url); - if (iter == qmlActivePixmapReplies()->end()) - return; + if (!d || !d->reply) { + qWarning("QDeclarativePixmap: connectDownloadProgress() called when not loading."); + return false; + } - QDeclarativePixmapReply *reply = *iter; - if (obj) - QObject::disconnect(reply, 0, obj, 0); - reply->release(); + return QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)), object, method); } -/*! - This function is mainly for test verification. It returns the number of - requests that are still unfinished. -*/ -int QDeclarativePixmapCache::pendingRequests() +bool QDeclarativePixmap::connectDownloadProgress(QObject *object, int method) { - return qmlActivePixmapReplies()->count(); + if (!d || !d->reply) { + qWarning("QDeclarativePixmap: connectDownloadProgress() called when not loading."); + return false; + } + + return QMetaObject::connect(d->reply, QDeclarativePixmapReply::downloadProgressIndex, object, method); } QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativepixmapcache_p.h b/src/declarative/util/qdeclarativepixmapcache_p.h index 33d9de1..8278c35 100644 --- a/src/declarative/util/qdeclarativepixmapcache_p.h +++ b/src/declarative/util/qdeclarativepixmapcache_p.h @@ -42,69 +42,70 @@ #ifndef QDECLARATIVEPIXMAPCACHE_H #define QDECLARATIVEPIXMAPCACHE_H -#include <QtCore/QString> -#include <QtGui/QPixmap> +#include <QtCore/qcoreapplication.h> +#include <QtCore/qstring.h> +#include <QtGui/qpixmap.h> #include <QtCore/qurl.h> -#include <QtCore/QCoreApplication> QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_MODULE(Declarative) -class QDeclarativeEngine; -class QNetworkReply; -class QDeclarativeImageReader; -class QDeclarativePixmapReplyPrivate; -class Q_DECLARATIVE_EXPORT QDeclarativePixmapReply : public QObject +class QDeclarativeEngine; +class QDeclarativePixmapData; +class Q_AUTOTEST_EXPORT QDeclarativePixmap { - Q_OBJECT + Q_DECLARE_TR_FUNCTIONS(QDeclarativePixmap) public: - ~QDeclarativePixmapReply(); + QDeclarativePixmap(); + QDeclarativePixmap(QDeclarativeEngine *, const QUrl &); + QDeclarativePixmap(QDeclarativeEngine *, const QUrl &, const QSize &); + ~QDeclarativePixmap(); - enum Status { Ready, Error, Unrequested, Loading }; - Status status() const; - QString errorString() const; + enum Status { Null, Ready, Error, Loading }; + bool isNull() const; + bool isReady() const; + bool isError() const; + bool isLoading() const; + + Status status() const; + QString error() const; const QUrl &url() const; - int forcedWidth() const; - int forcedHeight() const; - QSize implicitSize() const; + const QSize &implicitSize() const; + const QSize &requestSize() const; + const QPixmap &pixmap() const; + void setPixmap(const QPixmap &); -Q_SIGNALS: - void finished(); - void downloadProgress(qint64, qint64); + QRect rect() const; + int width() const; + int height() const; + inline operator const QPixmap &() const; -protected: - bool event(QEvent *event); + void load(QDeclarativeEngine *, const QUrl &); + void load(QDeclarativeEngine *, const QUrl &, bool); + void load(QDeclarativeEngine *, const QUrl &, const QSize &); + void load(QDeclarativeEngine *, const QUrl &, const QSize &, bool); -private: - void addRef(); - bool release(bool defer=false); - bool isLoading() const; - void setLoading(); + void clear(); + void clear(QObject *); + + bool connectFinished(QObject *, const char *); + bool connectFinished(QObject *, int); + bool connectDownloadProgress(QObject *, const char *); + bool connectDownloadProgress(QObject *, int); private: - QDeclarativePixmapReply(QDeclarativeImageReader *reader, const QUrl &url, int req_width, int req_height); - Q_DISABLE_COPY(QDeclarativePixmapReply) - Q_DECLARE_PRIVATE(QDeclarativePixmapReply) - friend class QDeclarativeImageRequestHandler; - friend class QDeclarativeImageReader; - friend class QDeclarativePixmapCache; + Q_DISABLE_COPY(QDeclarativePixmap); + QDeclarativePixmapData *d; }; -class Q_DECLARATIVE_EXPORT QDeclarativePixmapCache +inline QDeclarativePixmap::operator const QPixmap &() const { - Q_DECLARE_TR_FUNCTIONS(QDeclarativePixmapCache) -public: - static QDeclarativePixmapReply::Status get(const QUrl& url, QPixmap *pixmap, QString *errorString, QSize *impsize=0, bool async=false, int req_width=0, int req_height=0); - static QDeclarativePixmapReply *request(QDeclarativeEngine *, const QUrl& url, int req_width=0, int req_height=0); - static void cancel(const QUrl& url, QObject *obj); - static int pendingRequests(); -}; - - + return pixmap(); +} QT_END_NAMESPACE diff --git a/src/imports/particles/qdeclarativeparticles.cpp b/src/imports/particles/qdeclarativeparticles.cpp index 630c068..a7c445d 100644 --- a/src/imports/particles/qdeclarativeparticles.cpp +++ b/src/imports/particles/qdeclarativeparticles.cpp @@ -437,7 +437,7 @@ public: , lifeSpanDev(1000), fadeInDur(200), fadeOutDur(300) , angle(0), angleDev(0), velocity(0), velocityDev(0), emissionCarry(0.) , addParticleTime(0), addParticleCount(0), lastAdvTime(0) - , motion(0), pendingPixmapCache(false), clock(this) + , motion(0), clock(this) { } @@ -456,7 +456,7 @@ public: void updateOpacity(QDeclarativeParticle &p, int age); QUrl url; - QPixmap image; + QDeclarativePixmap image; int count; int emissionRate; qreal emissionVariance; @@ -475,7 +475,6 @@ public: QDeclarativeParticleMotion *motion; QDeclarativeParticlesPainter *paintItem; - bool pendingPixmapCache; QList<QPair<int, int> > bursts;//countLeft, emissionRate pairs QList<QDeclarativeParticle> particles; @@ -709,9 +708,6 @@ QDeclarativeParticles::QDeclarativeParticles(QDeclarativeItem *parent) QDeclarativeParticles::~QDeclarativeParticles() { - Q_D(QDeclarativeParticles); - if (d->pendingPixmapCache) - QDeclarativePixmapCache::cancel(d->url, this); } /*! @@ -732,10 +728,8 @@ QUrl QDeclarativeParticles::source() const void QDeclarativeParticles::imageLoaded() { Q_D(QDeclarativeParticles); - d->pendingPixmapCache = false; - QString errorString; - if (QDeclarativePixmapCache::get(d->url, &d->image, &errorString)==QDeclarativePixmapReply::Error) - qmlInfo(this) << errorString; + if (d->image.isError()) + qmlInfo(this) << d->image.error(); d->paintItem->updateSize(); d->paintItem->update(); } @@ -747,27 +741,20 @@ void QDeclarativeParticles::setSource(const QUrl &name) if ((d->url.isEmpty() == name.isEmpty()) && name == d->url) return; - if (d->pendingPixmapCache) { - QDeclarativePixmapCache::cancel(d->url, this); - d->pendingPixmapCache = false; - } if (name.isEmpty()) { d->url = name; - d->image = QPixmap(); + d->image.clear(this); d->paintItem->updateSize(); d->paintItem->update(); } else { d->url = name; Q_ASSERT(!name.isRelative()); - QString errorString; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->image, &errorString); - if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) { - QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url); - connect(reply, SIGNAL(finished()), this, SLOT(imageLoaded())); - d->pendingPixmapCache = true; + d->image.load(qmlEngine(this), d->url); + if (d->image.isLoading()) { + d->image.connectFinished(this, SLOT(imageLoaded())); } else { - if (status == QDeclarativePixmapReply::Error) - qmlInfo(this) << errorString; + if (d->image.isError()) + qmlInfo(this) << d->image.error(); //### unify with imageLoaded d->paintItem->updateSize(); d->paintItem->update(); diff --git a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp index f1018b2..0c7780c 100644 --- a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp +++ b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp @@ -138,42 +138,37 @@ void tst_qdeclarativepixmapcache::single() expectedError = "Cannot open: " + target.toString(); } - QPixmap pixmap; + QDeclarativePixmap pixmap; QVERIFY(pixmap.width() <= 0); // Check Qt assumption - QString errorString; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(target, &pixmap, &errorString); + + pixmap.load(&engine, target); if (incache) { - QCOMPARE(errorString, expectedError); + QCOMPARE(pixmap.error(), expectedError); if (exists) { - QVERIFY(status == QDeclarativePixmapReply::Ready); + QVERIFY(pixmap.status() == QDeclarativePixmap::Ready); QVERIFY(pixmap.width() > 0); } else { - QVERIFY(status == QDeclarativePixmapReply::Error); + QVERIFY(pixmap.status() == QDeclarativePixmap::Error); QVERIFY(pixmap.width() <= 0); } } else { - QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(&engine, target); - QVERIFY(reply); QVERIFY(pixmap.width() <= 0); Slotter getter; - connect(reply, SIGNAL(finished()), &getter, SLOT(got())); + pixmap.connectFinished(&getter, SLOT(got())); QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(getter.gotslot); - QString errorString; if (exists) { - QVERIFY(QDeclarativePixmapCache::get(target, &pixmap, &errorString) == QDeclarativePixmapReply::Ready); + QVERIFY(pixmap.status() == QDeclarativePixmap::Ready); QVERIFY(pixmap.width() > 0); } else { - QVERIFY(QDeclarativePixmapCache::get(target, &pixmap, &errorString) == QDeclarativePixmapReply::Error); + QVERIFY(pixmap.status() == QDeclarativePixmap::Error); QVERIFY(pixmap.width() <= 0); } - QCOMPARE(errorString, expectedError); + QCOMPARE(pixmap.error(), expectedError); } - - QCOMPARE(QDeclarativePixmapCache::pendingRequests(), 0); } void tst_qdeclarativepixmapcache::parallel_data() @@ -185,47 +180,36 @@ void tst_qdeclarativepixmapcache::parallel_data() QTest::addColumn<QUrl>("target2"); QTest::addColumn<int>("incache"); QTest::addColumn<int>("cancel"); // which one to cancel - QTest::addColumn<int>("requests"); QTest::newRow("local") << thisfile.resolved(QUrl("data/exists1.png")) << thisfile.resolved(QUrl("data/exists2.png")) << (localfile_optimized ? 2 : 0) - << -1 - << (localfile_optimized ? 0 : 2) - ; + << -1; QTest::newRow("remote") << QUrl("http://127.0.0.1:14452/exists2.png") << QUrl("http://127.0.0.1:14452/exists3.png") << 0 - << -1 - << 2 - ; + << -1; QTest::newRow("remoteagain") << QUrl("http://127.0.0.1:14452/exists2.png") << QUrl("http://127.0.0.1:14452/exists3.png") << 2 - << -1 - << 0 - ; + << -1; QTest::newRow("remotecopy") << QUrl("http://127.0.0.1:14452/exists4.png") << QUrl("http://127.0.0.1:14452/exists4.png") << 0 - << -1 - << 1 - ; + << -1; QTest::newRow("remotecopycancel") << QUrl("http://127.0.0.1:14452/exists5.png") << QUrl("http://127.0.0.1:14452/exists5.png") << 0 - << 0 - << 1 - ; + << 0; } void tst_qdeclarativepixmapcache::parallel() @@ -234,38 +218,38 @@ void tst_qdeclarativepixmapcache::parallel() QFETCH(QUrl, target2); QFETCH(int, incache); QFETCH(int, cancel); - QFETCH(int, requests); QList<QUrl> targets; targets << target1 << target2; - QList<QDeclarativePixmapReply*> replies; + QList<QDeclarativePixmap *> pixmaps; + QList<bool> pending; QList<Slotter*> getters; + for (int i=0; i<targets.count(); ++i) { QUrl target = targets.at(i); - QPixmap pixmap; - QString errorString; - QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(target, &pixmap, &errorString); - QDeclarativePixmapReply *reply = 0; - QVERIFY(status != QDeclarativePixmapReply::Error); - if (status != QDeclarativePixmapReply::Error && status != QDeclarativePixmapReply::Ready) - reply = QDeclarativePixmapCache::request(&engine, target); - replies.append(reply); - if (!reply) { - QVERIFY(pixmap.width() > 0); + QDeclarativePixmap *pixmap = new QDeclarativePixmap; + + pixmap->load(&engine, target); + + QVERIFY(pixmap->status() != QDeclarativePixmap::Error); + pixmaps.append(pixmap); + if (pixmap->isReady()) { + QVERIFY(pixmap->width() > 0); getters.append(0); + pending.append(false); } else { - QVERIFY(pixmap.width() <= 0); + QVERIFY(pixmap->width() <= 0); getters.append(new Slotter); - connect(reply, SIGNAL(finished()), getters[i], SLOT(got())); + pixmap->connectFinished(getters[i], SLOT(got())); + pending.append(true); } } QCOMPARE(incache+slotters, targets.count()); - QCOMPARE(QDeclarativePixmapCache::pendingRequests(), requests); if (cancel >= 0) { - QDeclarativePixmapCache::cancel(targets.at(cancel), getters[cancel]); + pixmaps.at(cancel)->clear(getters[cancel]); slotters--; } @@ -275,22 +259,21 @@ void tst_qdeclarativepixmapcache::parallel() } for (int i=0; i<targets.count(); ++i) { - QDeclarativePixmapReply *reply = replies[i]; - if (reply) { - if (i == cancel) { - QVERIFY(!getters[i]->gotslot); - } else { + QDeclarativePixmap *pixmap = pixmaps[i]; + + if (i == cancel) { + QVERIFY(!getters[i]->gotslot); + } else { + if (pending[i]) QVERIFY(getters[i]->gotslot); - QPixmap pixmap; - QString errorString; - QVERIFY(QDeclarativePixmapCache::get(targets[i], &pixmap, &errorString) == QDeclarativePixmapReply::Ready); - QVERIFY(pixmap.width() > 0); - } + + QVERIFY(pixmap->isReady()); + QVERIFY(pixmap->width() > 0); delete getters[i]; } } - QCOMPARE(QDeclarativePixmapCache::pendingRequests(), 0); + qDeleteAll(pixmaps); } QTEST_MAIN(tst_qdeclarativepixmapcache) -- cgit v0.12 From 7c1ff382b0927d8b003468c16e31333816c3ab6b Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 8 Jul 2010 13:19:22 +1000 Subject: Extend QDeclarativeImageProvider to support QPixmap loading and synchronous loading of QImages. (QPixmaps can only be created in the main thread so they will always be loaded synchronously). This changes request() to requestImage() and adds requestPixmap() for pixmap support. Task-number: QTBUG-11989 (cherry picked from commit a258456bcb35ec4211751a702ea94a1881d82a07) --- doc/src/declarative/pics/imageprovider.png | Bin 0 -> 420 bytes doc/src/examples/qml-examples.qdoc | 6 +- doc/src/images/qml-imageprovider-example.png | Bin 0 -> 2259 bytes .../imageprovider/imageprovider-example.qml | 28 +-- .../cppextensions/imageprovider/imageprovider.cpp | 73 ++++---- src/declarative/qml/qdeclarativeengine.cpp | 39 ++-- src/declarative/qml/qdeclarativeengine_p.h | 3 + src/declarative/qml/qdeclarativeimageprovider.cpp | 164 +++++++++++++++-- src/declarative/qml/qdeclarativeimageprovider.h | 18 +- src/declarative/util/qdeclarativepixmapcache.cpp | 85 +++++++-- .../qdeclarativeimageprovider/data/exists.png | Bin 2738 -> 0 bytes .../qdeclarativeimageprovider/data/exists1.png | Bin 2738 -> 0 bytes .../qdeclarativeimageprovider/data/exists2.png | Bin 2738 -> 0 bytes .../tst_qdeclarativeimageprovider.cpp | 204 +++++++++++++++++---- 14 files changed, 473 insertions(+), 147 deletions(-) create mode 100644 doc/src/declarative/pics/imageprovider.png create mode 100644 doc/src/images/qml-imageprovider-example.png delete mode 100644 tests/auto/declarative/qdeclarativeimageprovider/data/exists.png delete mode 100644 tests/auto/declarative/qdeclarativeimageprovider/data/exists1.png delete mode 100644 tests/auto/declarative/qdeclarativeimageprovider/data/exists2.png diff --git a/doc/src/declarative/pics/imageprovider.png b/doc/src/declarative/pics/imageprovider.png new file mode 100644 index 0000000..422103c Binary files /dev/null and b/doc/src/declarative/pics/imageprovider.png differ diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index c8a7403..8896366 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -211,8 +211,10 @@ \title C++ Extensions: Image Provider \example declarative/cppextensions/imageprovider - This examples shows how to use QDeclarativeImageProvider to serve images asynchronously - into a QML item. + This examples shows how to use QDeclarativeImageProvider to serve images + to QML image elements. + + \image qml-imageprovider-example.png */ /*! diff --git a/doc/src/images/qml-imageprovider-example.png b/doc/src/images/qml-imageprovider-example.png new file mode 100644 index 0000000..e82548a Binary files /dev/null and b/doc/src/images/qml-imageprovider-example.png differ diff --git a/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml b/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml index 5890c91..1ef97fa 100644 --- a/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml +++ b/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml @@ -37,29 +37,13 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - import Qt 4.7 -import "ImageProviderCore" -//![0] -ListView { - width: 100; height: 100 - anchors.fill: parent - - model: myModel +import "ImageProviderCore" // import the plugin that registers the color image provider - delegate: Component { - Item { - width: 100 - height: 50 - Text { - text: "Loading..." - anchors.centerIn: parent - } - Image { - source: modelData - sourceSize: "50x25" - } - } - } +//![0] +Column { + Image { source: "image://colors/yellow" } + Image { source: "image://colors/red" } } //![0] + diff --git a/examples/declarative/cppextensions/imageprovider/imageprovider.cpp b/examples/declarative/cppextensions/imageprovider/imageprovider.cpp index 0281b4a..995192a 100644 --- a/examples/declarative/cppextensions/imageprovider/imageprovider.cpp +++ b/examples/declarative/cppextensions/imageprovider/imageprovider.cpp @@ -42,7 +42,6 @@ #include <qdeclarativeextensionplugin.h> #include <qdeclarativeengine.h> -#include <qdeclarativecontext.h> #include <qdeclarative.h> #include <qdeclarativeitem.h> #include <qdeclarativeimageprovider.h> @@ -50,62 +49,57 @@ #include <QImage> #include <QPainter> -/* - This example illustrates using a QDeclarativeImageProvider to serve - images asynchronously. -*/ - //![0] class ColorImageProvider : public QDeclarativeImageProvider { public: - // This is run in a low priority thread. - QImage request(const QString &id, QSize *size, const QSize &req_size) + ColorImageProvider() + : QDeclarativeImageProvider(Pixmap) { - if (size) *size = QSize(100,50); - QImage image( - req_size.width() > 0 ? req_size.width() : 100, - req_size.height() > 0 ? req_size.height() : 50, - QImage::Format_RGB32); - image.fill(QColor(id).rgba()); - QPainter p(&image); - QFont f = p.font(); - f.setPixelSize(30); - p.setFont(f); - p.setPen(Qt::black); - if (req_size.isValid()) - p.scale(req_size.width()/100.0, req_size.height()/50.0); - p.drawText(QRectF(0,0,100,50),Qt::AlignCenter,id); - return image; + } + + QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) + { + int width = 100; + int height = 50; + + if (size) + *size = QSize(width, height); + QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width, + requestedSize.height() > 0 ? requestedSize.height() : height); + pixmap.fill(QColor(id).rgba()); +//![0] + + // write the color name + QPainter painter(&pixmap); + QFont f = painter.font(); + f.setPixelSize(20); + painter.setFont(f); + painter.setPen(Qt::black); + if (requestedSize.isValid()) + painter.scale(requestedSize.width() / width, requestedSize.height() / height); + painter.drawText(QRectF(0, 0, width, height), Qt::AlignCenter, id); + +//![1] + return pixmap; } }; +//![1] class ImageProviderExtensionPlugin : public QDeclarativeExtensionPlugin { Q_OBJECT public: - void registerTypes(const char *uri) { + void registerTypes(const char *uri) + { Q_UNUSED(uri); - } - void initializeEngine(QDeclarativeEngine *engine, const char *uri) { + void initializeEngine(QDeclarativeEngine *engine, const char *uri) + { Q_UNUSED(uri); - engine->addImageProvider("colors", new ColorImageProvider); - - QStringList dataList; - dataList.append("image://colors/red"); - dataList.append("image://colors/green"); - dataList.append("image://colors/blue"); - dataList.append("image://colors/brown"); - dataList.append("image://colors/orange"); - dataList.append("image://colors/purple"); - dataList.append("image://colors/yellow"); - - QDeclarativeContext *ctxt = engine->rootContext(); - ctxt->setContextProperty("myModel", QVariant::fromValue(dataList)); } }; @@ -113,5 +107,4 @@ public: #include "imageprovider.moc" Q_EXPORT_PLUGIN(ImageProviderExtensionPlugin); -//![0] diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 8b15ae9..c7fa3b3 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -620,24 +620,16 @@ QNetworkAccessManager *QDeclarativeEngine::networkAccessManager() const /*! Sets the \a provider to use for images requested via the \e - image: url scheme, with host \a providerId. + image: url scheme, with host \a providerId. The QDeclarativeEngine + takes ownership of \a provider. - QDeclarativeImageProvider allows images to be provided to QML - asynchronously. The image request will be run in a low priority - thread. This allows potentially costly image loading to be done in - the background, without affecting the performance of the UI. + Image providers enable support for pixmap and threaded image + requests. See the QDeclarativeImageProvider documentation for details on + implementing and using image providers. Note that images loaded from a QDeclarativeImageProvider are cached by QPixmapCache, similar to any image loaded by QML. - The QDeclarativeEngine assumes ownership of the provider. - - This example creates a provider with id \e colors: - - \snippet examples/declarative/cppextensions/imageprovider/imageprovider.cpp 0 - - \snippet examples/declarative/cppextensions/imageprovider/imageprovider-example.qml 0 - \sa removeImageProvider() */ void QDeclarativeEngine::addImageProvider(const QString &providerId, QDeclarativeImageProvider *provider) @@ -671,16 +663,35 @@ void QDeclarativeEngine::removeImageProvider(const QString &providerId) delete d->imageProviders.take(providerId); } +QDeclarativeImageProvider::ImageType QDeclarativeEnginePrivate::getImageProviderType(const QUrl &url) +{ + QMutexLocker locker(&mutex); + QDeclarativeImageProvider *provider = imageProviders.value(url.host()); + if (provider) + return provider->imageType(); + return static_cast<QDeclarativeImageProvider::ImageType>(-1); +} + QImage QDeclarativeEnginePrivate::getImageFromProvider(const QUrl &url, QSize *size, const QSize& req_size) { QMutexLocker locker(&mutex); QImage image; QDeclarativeImageProvider *provider = imageProviders.value(url.host()); if (provider) - image = provider->request(url.path().mid(1), size, req_size); + image = provider->requestImage(url.path().mid(1), size, req_size); return image; } +QPixmap QDeclarativeEnginePrivate::getPixmapFromProvider(const QUrl &url, QSize *size, const QSize& req_size) +{ + QMutexLocker locker(&mutex); + QPixmap pixmap; + QDeclarativeImageProvider *provider = imageProviders.value(url.host()); + if (provider) + pixmap = provider->requestPixmap(url.path().mid(1), size, req_size); + return pixmap; +} + /*! Return the base URL for this engine. The base URL is only used to resolve components when a relative URL is passed to the diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h index cfa9d73..f457b53 100644 --- a/src/declarative/qml/qdeclarativeengine_p.h +++ b/src/declarative/qml/qdeclarativeengine_p.h @@ -64,6 +64,7 @@ #include "qdeclarativecontext.h" #include "private/qdeclarativecontext_p.h" #include "qdeclarativeexpression.h" +#include "qdeclarativeimageprovider.h" #include "private/qdeclarativeproperty_p.h" #include "private/qdeclarativepropertycache_p.h" #include "private/qdeclarativeobjectscriptclass_p.h" @@ -233,7 +234,9 @@ public: mutable QDeclarativeNetworkAccessManagerFactory *networkAccessManagerFactory; QHash<QString,QDeclarativeImageProvider*> imageProviders; + QDeclarativeImageProvider::ImageType getImageProviderType(const QUrl &url); QImage getImageFromProvider(const QUrl &url, QSize *size, const QSize& req_size); + QPixmap getPixmapFromProvider(const QUrl &url, QSize *size, const QSize& req_size); mutable QMutex mutex; diff --git a/src/declarative/qml/qdeclarativeimageprovider.cpp b/src/declarative/qml/qdeclarativeimageprovider.cpp index f4a8588..f38da4e 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.cpp +++ b/src/declarative/qml/qdeclarativeimageprovider.cpp @@ -43,35 +43,142 @@ QT_BEGIN_NAMESPACE +class QDeclarativeImageProviderPrivate +{ +public: + QDeclarativeImageProvider::ImageType type; +}; + /*! \class QDeclarativeImageProvider \since 4.7 - \brief The QDeclarativeImageProvider class provides an interface for threaded image requests in QML. + \brief The QDeclarativeImageProvider class provides an interface for supporting pixmaps and threaded image requests in QML. - QDeclarativeImageProvider can be used by a QDeclarativeEngine to provide images to QML asynchronously. - The image request will be run in a low priority thread, allowing potentially costly image - loading to be done in the background, without affecting the performance of the UI. + QDeclarativeImageProvider is used to provide advanced image loading features + in QML applications. It allows images in QML to be: - See the QDeclarativeEngine::addImageProvider() documentation for an - example of how a custom QDeclarativeImageProvider can be constructed and used. + \list + \o Loaded using QPixmaps rather than actual image files + \o Loaded asynchronously in a separate thread, if imageType() is \l ImageType::Image + \endlist - \note the request() method may be called by multiple threads, so ensure the - implementation of this method is reentrant. + To specify that an image should be loaded by an image provider, use the + \bold {"image:"} scheme for the URL source of the image, followed by the + identifiers of the image provider and the requested image. For example: + + \qml + Image { source: "image://myimageprovider/image.png" } + \endqml + + This specifies that the image should be loaded by the image provider named + "myimageprovider", and the image to be loaded is named "image.png". The QML engine + invokes the appropriate image provider according to the providers that have + been registered through QDeclarativeEngine::addImageProvider(). + + + \section2 An example + + Here are two images. Their \c source values indicate they should be loaded by + an image provider named "colors", and the images to be loaded are "yellow" + and "red", respectively: + + \snippet examples/declarative/cppextensions/imageprovider/imageprovider-example.qml 0 + + When these images are loaded by QML, it looks for a matching image provider + and calls its requestImage() or requestPixmap() method (depending on its + imageType()) to load the image. The method is called with the \c id + parameter set to "yellow" for the first image, and "red" for the second. + + Here is an image provider implementation that can load the images + requested by the above QML. This implementation dynamically + generates QPixmap images that are filled with the requested color: + + \snippet examples/declarative/cppextensions/imageprovider/imageprovider.cpp 0 + \codeline + \snippet examples/declarative/cppextensions/imageprovider/imageprovider.cpp 1 + + To make this provider accessible to QML, it is registered with the QML engine + with a "colors" identifier: + + \code + int main(int argc, char *argv[]) + { + ... + + QDeclarativeEngine engine; + engine->addImageProvider(QLatin1String("colors"), new ColorPixmapProvider); + + ... + } + \endcode + + Now the images can be succesfully loaded in QML: + + \image imageprovider.png + + A complete example is available in Qt's + \l {declarative/cppextensions/imageprovider}{examples/declarative/cppextensions/imageprovider} + directory. Note the example registers the provider via a \l{QDeclarativeExtensionPlugin}{plugin} + instead of registering it in the application \c main() function as shown above. + + + \section2 Asynchronous image loading + + Image providers that support QImage loading automatically include support + for asychronous loading of images. To enable asynchronous loading for an + \l Image source, set \l Image::asynchronous to \c true. When this is enabled, + the image request to the provider is run in a low priority thread, + allowing image loading to be executed in the background, and reducing the + performance impact on the user interface. + + Asynchronous loading is not supported for image providers that provide + QPixmap rather than QImage values, as pixmaps can only be created in the + main thread. In this case, if \l {Image::}{asynchronous} is set to + \c true, the value is ignored and the image is loaded + synchronously. + + \sa QDeclarativeEngine::addImageProvider() +*/ + +/*! + \enum QDeclarativeImageProvider::ImageType + + Defines the type of image supported by this image provider. - \sa QDeclarativeEngine::addImageProvider(), {declarative/cppextensions/imageprovider}{ImageProvider example} + \value Image The Image Provider provides QImage images. The + requestImage() method will be called for all image requests. + \value Pixmap The Image Provider provides QPixmap images. The + requestPixmap() method will be called for all image requests. */ /*! - Destroys the image provider. - */ + Creates an image provider that will provide images of the given \a type. +*/ +QDeclarativeImageProvider::QDeclarativeImageProvider(ImageType type) + : d(new QDeclarativeImageProviderPrivate) +{ + d->type = type; +} + +/*! + \internal +*/ QDeclarativeImageProvider::~QDeclarativeImageProvider() { + delete d; } /*! - \fn QImage QDeclarativeImageProvider::request(const QString &id, QSize *size, const QSize& requestedSize) + Returns the image type supported by this provider. +*/ +QDeclarativeImageProvider::ImageType QDeclarativeImageProvider::imageType() const +{ + return d->type; +} - Implement this method to return the image with \a id. +/*! + Implement this method to return the image with \a id. The default + implementation returns an empty image. If \a requestedSize is a valid size, the image returned should be of that size. @@ -80,5 +187,36 @@ QDeclarativeImageProvider::~QDeclarativeImageProvider() \note this method may be called by multiple threads, so ensure the implementation of this method is reentrant. */ +QImage QDeclarativeImageProvider::requestImage(const QString &id, QSize *size, const QSize& requestedSize) +{ + Q_UNUSED(id); + Q_UNUSED(size); + Q_UNUSED(requestedSize); + if (d->type == Image) + qWarning("ImageProvider supports Image type but has not implemented requestImage()"); + return QImage(); +} + +/*! + Implement this method to return the pixmap with \a id. The default + implementation returns an empty pixmap. + + If \a requestedSize is a valid size, the image returned should be of that size. + + In all cases, \a size must be set to the original size of the image. + + \note this method may be called by multiple threads, so ensure the + implementation of this method is reentrant. +*/ +QPixmap QDeclarativeImageProvider::requestPixmap(const QString &id, QSize *size, const QSize& requestedSize) +{ + Q_UNUSED(id); + Q_UNUSED(size); + Q_UNUSED(requestedSize); + if (d->type == Pixmap) + qWarning("ImageProvider supports Pixmap type but has not implemented requestPixmap()"); + return QPixmap(); +} QT_END_NAMESPACE + diff --git a/src/declarative/qml/qdeclarativeimageprovider.h b/src/declarative/qml/qdeclarativeimageprovider.h index cc9c9af..5a72943 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.h +++ b/src/declarative/qml/qdeclarativeimageprovider.h @@ -43,6 +43,7 @@ #define QDECLARATIVEIMAGEPROVIDER_H #include <QtGui/qimage.h> +#include <QtGui/qpixmap.h> QT_BEGIN_HEADER @@ -50,11 +51,26 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) +class QDeclarativeImageProviderPrivate; + class Q_DECLARATIVE_EXPORT QDeclarativeImageProvider { public: + enum ImageType { + Image, + Pixmap + }; + + QDeclarativeImageProvider(ImageType type); virtual ~QDeclarativeImageProvider(); - virtual QImage request(const QString &id, QSize *size, const QSize& requestedSize) = 0; + + ImageType imageType() const; + + virtual QImage requestImage(const QString &id, QSize *size, const QSize& requestedSize); + virtual QPixmap requestPixmap(const QString &id, QSize *size, const QSize& requestedSize); + +private: + QDeclarativeImageProviderPrivate *d; }; QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index fdc2455..3f496b3 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -736,6 +736,58 @@ void QDeclarativePixmapData::removeFromCache() } } +static QDeclarativePixmapData* createPixmapDataSync(QDeclarativeEngine *engine, const QUrl &url, const QSize &requestSize, bool *ok) +{ + if (url.scheme() == QLatin1String("image")) { + QSize readSize; + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); + QDeclarativeImageProvider::ImageType imageType = ep->getImageProviderType(url); + + switch (imageType) { + case QDeclarativeImageProvider::Image: + { + QImage image = ep->getImageFromProvider(url, &readSize, requestSize); + if (!image.isNull()) { + *ok = true; + return new QDeclarativePixmapData(url, QPixmap::fromImage(image), readSize, requestSize); + } + } + case QDeclarativeImageProvider::Pixmap: + { + QPixmap pixmap = ep->getPixmapFromProvider(url, &readSize, requestSize); + if (!pixmap.isNull()) { + *ok = true; + return new QDeclarativePixmapData(url, pixmap, readSize, requestSize); + } + } + } + + // no matching provider, or provider has bad image type, or provider returned null image + return new QDeclarativePixmapData(url, requestSize, + QDeclarativePixmap::tr("Failed to get image from provider: %1").arg(url.toString())); + } + + QString localFile = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); + if (localFile.isEmpty()) + return 0; + + QFile f(localFile); + QSize readSize; + QString errorString; + + if (f.open(QIODevice::ReadOnly)) { + QImage image; + if (readImage(url, &f, &image, &errorString, &readSize, requestSize)) { + *ok = true; + return new QDeclarativePixmapData(url, QPixmap::fromImage(image), readSize, requestSize); + } + } else { + errorString = QDeclarativePixmap::tr("Cannot open: %1").arg(url.toString()); + } + return new QDeclarativePixmapData(url, requestSize, errorString); +} + + struct QDeclarativePixmapNull { QUrl url; QPixmap pixmap; @@ -893,27 +945,24 @@ void QDeclarativePixmap::load(QDeclarativeEngine *engine, const QUrl &url, const QHash<QDeclarativePixmapKey, QDeclarativePixmapData *>::Iterator iter = store->m_cache.find(key); if (iter == store->m_cache.end()) { - if (!async) { - QString localFile = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); - if (!localFile.isEmpty()) { - QFile f(localFile); - QSize readSize; - QString errorString; - - if (f.open(QIODevice::ReadOnly)) { - QImage image; - if (readImage(url, &f, &image, &errorString, &readSize, requestSize)) { - d = new QDeclarativePixmapData(url, QPixmap::fromImage(image), readSize, requestSize); - d->addToCache(); - return; - } - } else { - errorString = tr("Cannot open: %1").arg(url.toString()); - } + if (async) { + if (url.scheme() == QLatin1String("image") + && QDeclarativeEnginePrivate::get(engine)->getImageProviderType(url) == QDeclarativeImageProvider::Pixmap) { + qWarning().nospace() << "Pixmaps must be loaded synchronously, ignoring asynchronous property for Image with source: " + << url.toString(); + async = false; + } + } - d = new QDeclarativePixmapData(url, requestSize, errorString); + if (!async) { + bool ok = false; + d = createPixmapDataSync(engine, url, requestSize, &ok); + if (ok) { + d->addToCache(); return; } + if (d) // loadable, but encountered error while loading + return; } if (!engine) diff --git a/tests/auto/declarative/qdeclarativeimageprovider/data/exists.png b/tests/auto/declarative/qdeclarativeimageprovider/data/exists.png deleted file mode 100644 index 399bd0b..0000000 Binary files a/tests/auto/declarative/qdeclarativeimageprovider/data/exists.png and /dev/null differ diff --git a/tests/auto/declarative/qdeclarativeimageprovider/data/exists1.png b/tests/auto/declarative/qdeclarativeimageprovider/data/exists1.png deleted file mode 100644 index 399bd0b..0000000 Binary files a/tests/auto/declarative/qdeclarativeimageprovider/data/exists1.png and /dev/null differ diff --git a/tests/auto/declarative/qdeclarativeimageprovider/data/exists2.png b/tests/auto/declarative/qdeclarativeimageprovider/data/exists2.png deleted file mode 100644 index 399bd0b..0000000 Binary files a/tests/auto/declarative/qdeclarativeimageprovider/data/exists2.png and /dev/null differ diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp index 4185790..9d62f22 100644 --- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp +++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp @@ -61,6 +61,8 @@ QVERIFY((expr)); \ } while (false) +Q_DECLARE_METATYPE(QDeclarativeImageProvider*); + class tst_qdeclarativeimageprovider : public QObject { @@ -71,43 +73,103 @@ public: } private slots: - void imageSource(); - void imageSource_data(); + void requestImage_sync_data(); + void requestImage_sync(); + void requestImage_async_data(); + void requestImage_async(); + + void requestPixmap_sync_data(); + void requestPixmap_sync(); + void requestPixmap_async(); + + void removeProvider_data(); void removeProvider(); private: - QDeclarativeEngine engine; + QString newImageFileName() const; + void fillRequestTestsData(const QString &id); + void runTest(bool async, QDeclarativeImageProvider *provider); }; -class TestProvider : public QDeclarativeImageProvider + +class TestQImageProvider : public QDeclarativeImageProvider { public: - QImage request(const QString &id, QSize *size, const QSize& requested_size) { - QImageReader io(SRCDIR "/data/" + id); - if (size) *size = io.size(); - if (requested_size.isValid()) - io.setScaledSize(requested_size); - return io.read(); + TestQImageProvider() + : QDeclarativeImageProvider(Image) + { + } + + QImage requestImage(const QString &id, QSize *size, const QSize& requestedSize) + { + if (id == QLatin1String("no-such-file.png")) + return QImage(); + + int width = 100; + int height = 100; + QImage image(width, height, QImage::Format_RGB32); + if (size) + *size = QSize(width, height); + if (requestedSize.isValid()) + image = image.scaled(requestedSize); + return image; } }; +Q_DECLARE_METATYPE(TestQImageProvider*); -void tst_qdeclarativeimageprovider::imageSource_data() + +class TestQPixmapProvider : public QDeclarativeImageProvider +{ +public: + TestQPixmapProvider() + : QDeclarativeImageProvider(Pixmap) + { + } + + QPixmap requestPixmap(const QString &id, QSize *size, const QSize& requestedSize) + { + if (id == QLatin1String("no-such-file.png")) + return QPixmap(); + + int width = 100; + int height = 100; + QPixmap image(width, height); + if (size) + *size = QSize(width, height); + if (requestedSize.isValid()) + image = image.scaled(requestedSize); + return image; + } +}; +Q_DECLARE_METATYPE(TestQPixmapProvider*); + + +QString tst_qdeclarativeimageprovider::newImageFileName() const +{ + // need to generate new filenames each time or else images are loaded + // from cache and we won't get loading status changes when testing + // async loading + static int count = 0; + return QString("image://test/image-%1.png").arg(count++); +} + +void tst_qdeclarativeimageprovider::fillRequestTestsData(const QString &id) { QTest::addColumn<QString>("source"); QTest::addColumn<QString>("properties"); QTest::addColumn<QSize>("size"); QTest::addColumn<QString>("error"); - QTest::newRow("exists") << "image://test/exists.png" << "" << QSize(100,100) << ""; - QTest::newRow("scaled") << "image://test/exists.png" << "sourceSize: \"80x30\"" << QSize(80,30) << ""; - QTest::newRow("missing") << "image://test/no-such-file.png" << "" << QSize() + QTest::newRow(QTest::toString(id + " exists")) << newImageFileName() << "" << QSize(100,100) << ""; + QTest::newRow(QTest::toString(id + " scaled")) << newImageFileName() << "sourceSize: \"80x30\"" << QSize(80,30) << ""; + + QTest::newRow(QTest::toString(id + " missing")) << "image://test/no-such-file.png" << "" << QSize() << "file::2:1: QML Image: Failed to get image from provider: image://test/no-such-file.png"; - QTest::newRow("unknown provider") << "image://bogus/exists.png" << "" << QSize() + QTest::newRow(QTest::toString(id + " unknown provider")) << "image://bogus/exists.png" << "" << QSize() << "file::2:1: QML Image: Failed to get image from provider: image://bogus/exists.png"; - } - -void tst_qdeclarativeimageprovider::imageSource() + +void tst_qdeclarativeimageprovider::runTest(bool async, QDeclarativeImageProvider *provider) { QFETCH(QString, source); QFETCH(QString, properties); @@ -117,21 +179,29 @@ void tst_qdeclarativeimageprovider::imageSource() if (!error.isEmpty()) QTest::ignoreMessage(QtWarningMsg, error.toUtf8()); - engine.addImageProvider("test", new TestProvider); + QDeclarativeEngine engine; + + engine.addImageProvider("test", provider); QVERIFY(engine.imageProvider("test") != 0); - QString componentStr = "import Qt 4.7\nImage { source: \"" + source + "\"; " + properties + " }"; + QString componentStr = "import Qt 4.7\nImage { source: \"" + source + "\"; " + + (async ? "asynchronous: true; " : "") + + properties + " }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create()); QVERIFY(obj != 0); - TRY_WAIT(obj->status() == QDeclarativeImage::Loading); + if (async) + TRY_WAIT(obj->status() == QDeclarativeImage::Loading); QCOMPARE(obj->source(), QUrl(source)); if (error.isEmpty()) { - TRY_WAIT(obj->status() == QDeclarativeImage::Ready); + if (async) + TRY_WAIT(obj->status() == QDeclarativeImage::Ready); + else + QVERIFY(obj->status() == QDeclarativeImage::Ready); QCOMPARE(obj->width(), 100.0); QCOMPARE(obj->height(), 100.0); QCOMPARE(obj->pixmap().width(), size.width()); @@ -139,40 +209,100 @@ void tst_qdeclarativeimageprovider::imageSource() QCOMPARE(obj->fillMode(), QDeclarativeImage::Stretch); QCOMPARE(obj->progress(), 1.0); } else { - TRY_WAIT(obj->status() == QDeclarativeImage::Error); + if (async) + TRY_WAIT(obj->status() == QDeclarativeImage::Error); + else + QVERIFY(obj->status() == QDeclarativeImage::Error); } delete obj; } +void tst_qdeclarativeimageprovider::requestImage_sync_data() +{ + fillRequestTestsData("qimage|sync"); +} + +void tst_qdeclarativeimageprovider::requestImage_sync() +{ + runTest(false, new TestQImageProvider); +} + +void tst_qdeclarativeimageprovider::requestImage_async_data() +{ + fillRequestTestsData("qimage|async"); +} + +void tst_qdeclarativeimageprovider::requestImage_async() +{ + runTest(true, new TestQImageProvider); +} + +void tst_qdeclarativeimageprovider::requestPixmap_sync_data() +{ + fillRequestTestsData("qpixmap"); +} + +void tst_qdeclarativeimageprovider::requestPixmap_sync() +{ + runTest(false, new TestQPixmapProvider); +} + +void tst_qdeclarativeimageprovider::requestPixmap_async() +{ + QDeclarativeEngine engine; + QDeclarativeImageProvider *provider = new TestQPixmapProvider; + + engine.addImageProvider("test", provider); + QVERIFY(engine.imageProvider("test") != 0); + + QTest::ignoreMessage(QtWarningMsg, + "Pixmaps must be loaded synchronously, ignoring asynchronous property for Image with source: \"image://test/pixmap-async-test.png\""); + + QString componentStr = "import Qt 4.7\nImage { asynchronous: true; source: \"image://test/pixmap-async-test.png\" }"; + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create()); + QVERIFY(obj != 0); + + delete obj; +} + +void tst_qdeclarativeimageprovider::removeProvider_data() +{ + QTest::addColumn<QDeclarativeImageProvider*>("provider"); + + QTest::newRow("qimage") << static_cast<QDeclarativeImageProvider*>(new TestQImageProvider); + QTest::newRow("qpixmap") << static_cast<QDeclarativeImageProvider*>(new TestQPixmapProvider); +} + void tst_qdeclarativeimageprovider::removeProvider() { - engine.addImageProvider("test2", new TestProvider); - QVERIFY(engine.imageProvider("test2") != 0); + QFETCH(QDeclarativeImageProvider*, provider); + + QDeclarativeEngine engine; + + engine.addImageProvider("test", provider); + QVERIFY(engine.imageProvider("test") != 0); // add provider, confirm it works - QString componentStr = "import Qt 4.7\nImage { source: \"image://test2/exists1.png\" }"; + QString componentStr = "import Qt 4.7\nImage { source: \"" + newImageFileName() + "\" }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create()); QVERIFY(obj != 0); - TRY_WAIT(obj->status() == QDeclarativeImage::Loading); - TRY_WAIT(obj->status() == QDeclarativeImage::Ready); - - QCOMPARE(obj->width(), 100.0); + QCOMPARE(obj->status(), QDeclarativeImage::Ready); // remove the provider and confirm - QString error("file::2:1: QML Image: Failed to get image from provider: image://test2/exists2.png"); - + QString fileName = newImageFileName(); + QString error("file::2:1: QML Image: Failed to get image from provider: " + fileName); QTest::ignoreMessage(QtWarningMsg, error.toUtf8()); - engine.removeImageProvider("test2"); - - obj->setSource(QUrl("image://test2/exists2.png")); + engine.removeImageProvider("test"); - TRY_WAIT(obj->status() == QDeclarativeImage::Loading); - TRY_WAIT(obj->status() == QDeclarativeImage::Error); + obj->setSource(QUrl(fileName)); + QCOMPARE(obj->status(), QDeclarativeImage::Error); delete obj; } -- cgit v0.12 From 15855edc421d34773cda52ff510c34b1016f64d7 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 8 Jul 2010 15:30:58 +1000 Subject: Remove Image::pixmap property. QML applications should use QDeclarativeImageProvider to provide pixmaps instead. Task-number: QTBUG-11980 (cherry picked from commit 33b664eabe5d9621d71e5bf3bfcc46ea385a399c) --- src/declarative/QmlChanges.txt | 7 +++-- .../graphicsitems/qdeclarativeimage.cpp | 10 ------- .../graphicsitems/qdeclarativeimage_p.h | 2 -- .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 31 ---------------------- 4 files changed, 5 insertions(+), 45 deletions(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 336fbbf..e878ab5 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -16,8 +16,11 @@ Component: - errorsString() renamed to errorString() ListView: - ListView.prevSection property changed to ListView.previousSection - -TextInput xToPosition -> positionAt (to match TextEdit.positionAt) +TextInput: + - xToPosition -> positionAt (to match TextEdit.positionAt) +Image: + - pixmap property removed, use QDeclarativeImageProvider to serve pixmaps + instead QList<QObject*> models no longer provide properties in model object. The properties are now updated when the object changes. An object's property diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index e0db580..3dde6f7 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -114,15 +114,6 @@ QDeclarativeImage::~QDeclarativeImage() { } -/*! - \qmlproperty QPixmap Image::pixmap - - This property holds the QPixmap image to display. - - This is useful for displaying images provided by a C++ implementation, - for example, a model may provide a data role of type QPixmap. -*/ - QPixmap QDeclarativeImage::pixmap() const { Q_D(const QDeclarativeImage); @@ -522,7 +513,6 @@ void QDeclarativeImage::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWi void QDeclarativeImage::pixmapChange() { updatePaintedGeometry(); - emit pixmapChanged(); } QT_END_NAMESPACE diff --git a/src/declarative/graphicsitems/qdeclarativeimage_p.h b/src/declarative/graphicsitems/qdeclarativeimage_p.h index a4f4475..c8bb30b 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage_p.h +++ b/src/declarative/graphicsitems/qdeclarativeimage_p.h @@ -57,7 +57,6 @@ class Q_AUTOTEST_EXPORT QDeclarativeImage : public QDeclarativeImageBase Q_OBJECT Q_ENUMS(FillMode) - Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap NOTIFY pixmapChanged DESIGNABLE false) Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged) Q_PROPERTY(qreal paintedWidth READ paintedWidth NOTIFY paintedGeometryChanged) Q_PROPERTY(qreal paintedHeight READ paintedHeight NOTIFY paintedGeometryChanged) @@ -79,7 +78,6 @@ public: void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); Q_SIGNALS: - void pixmapChanged(); void fillModeChanged(); void paintedGeometryChanged(); diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index c09f7fc..adee312 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -88,7 +88,6 @@ private slots: void resized(); void preserveAspectRatio(); void smooth(); - void pixmap(); void svg(); void big(); void tiling_QTBUG_6716(); @@ -261,36 +260,6 @@ void tst_qdeclarativeimage::smooth() delete obj; } -void tst_qdeclarativeimage::pixmap() -{ - QString componentStr = "import Qt 4.7\nImage { pixmap: testPixmap }"; - - QPixmap pixmap; - QDeclarativeContext *ctxt = engine.rootContext(); - ctxt->setContextProperty("testPixmap", pixmap); - - QDeclarativeComponent component(&engine); - component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); - - QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create()); - QVERIFY(obj != 0); - QCOMPARE(obj->source(), QUrl()); - QVERIFY(obj->status() == QDeclarativeImage::Null); - QCOMPARE(obj->width(), 0.); - QCOMPARE(obj->height(), 0.); - QCOMPARE(obj->fillMode(), QDeclarativeImage::Stretch); - QCOMPARE(obj->progress(), 0.0); - QVERIFY(obj->pixmap().isNull()); - - pixmap = QPixmap(SRCDIR "/data/colors.png"); - ctxt->setContextProperty("testPixmap", pixmap); - QCOMPARE(obj->width(), 120.); - QCOMPARE(obj->height(), 120.); - QVERIFY(obj->status() == QDeclarativeImage::Ready); - - delete obj; -} - void tst_qdeclarativeimage::svg() { QString src = QUrl::fromLocalFile(SRCDIR "/data/heart.svg").toString(); -- cgit v0.12 From 8b19260629f9d83db7803a80c6856aa9c2bd280b Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 8 Jul 2010 15:19:41 +1000 Subject: Update QmlChanges.txt (cherry picked from commit c3ee63fd9a1428718ca2f2a32e81a3f977878fad) --- src/declarative/QmlChanges.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index e878ab5..a0e013f 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -38,6 +38,10 @@ The QDeclarativeExpression constructor has changed from to QDeclarativeExpression(context, scope, expression, parent = 0) +QDeclarativeImageProvider::request() has been renamed to +QDeclarativeImageProvider::image() and the class can now provide +both qimages and qpixmaps, and qimages can be served synchronously + QML Viewer ------------ The standalone qml executable has been renamed back to Qml Viewer. Runtime warnings -- cgit v0.12 From 957751d93aeb8d5c2703fa3d13d8b3a0e0334d51 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 7 Jul 2010 13:30:11 +1000 Subject: Remove deprecated Flickable.flickDirection (cherry picked from commit e3bc34b40559e0cb88363039ee61300478e7c700) --- src/declarative/QmlChanges.txt | 2 +- src/declarative/graphicsitems/qdeclarativeflickable.cpp | 12 ------------ src/declarative/graphicsitems/qdeclarativeflickable_p.h | 3 --- 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index a0e013f..259d9a9 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -1,5 +1,5 @@ ============================================================================= -The changes below are pre Qt 4.7.0 RC +The changes below are pre Qt 4.7.0 beta 2 QDeclarativeView - initialSize() function added diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index a40546f..70cbf74 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -641,18 +641,6 @@ void QDeclarativeFlickable::setFlickableDirection(FlickableDirection direction) } } -QDeclarativeFlickable::FlickableDirection QDeclarativeFlickable::flickDirection() const -{ - qmlInfo(this) << "'flickDirection' is deprecated. Please use 'flickableDirection' instead."; - return flickableDirection(); -} - -void QDeclarativeFlickable::setFlickDirection(FlickableDirection direction) -{ - qmlInfo(this) << "'flickDirection' is deprecated. Please use 'flickableDirection' instead."; - setFlickableDirection(direction); -} - void QDeclarativeFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event) { if (interactive && timeline.isActive() && (qAbs(hData.velocity) > 10 || qAbs(vData.velocity) > 10)) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p.h index 47746c6..44f2bcf 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p.h @@ -74,7 +74,6 @@ class Q_AUTOTEST_EXPORT QDeclarativeFlickable : public QDeclarativeItem Q_PROPERTY(bool flicking READ isFlicking NOTIFY flickingChanged) Q_PROPERTY(bool flickingHorizontally READ isFlickingHorizontally NOTIFY flickingHorizontallyChanged) Q_PROPERTY(bool flickingVertically READ isFlickingVertically NOTIFY flickingVerticallyChanged) - Q_PROPERTY(FlickableDirection flickDirection READ flickDirection WRITE setFlickDirection NOTIFY flickableDirectionChanged) // deprecated Q_PROPERTY(FlickableDirection flickableDirection READ flickableDirection WRITE setFlickableDirection NOTIFY flickableDirectionChanged) Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged) @@ -147,8 +146,6 @@ public: QDeclarativeItem *contentItem(); enum FlickableDirection { AutoFlickDirection=0x00, HorizontalFlick=0x01, VerticalFlick=0x02, HorizontalAndVerticalFlick=0x03 }; - FlickableDirection flickDirection() const; // deprecated - void setFlickDirection(FlickableDirection); // deprecated FlickableDirection flickableDirection() const; void setFlickableDirection(FlickableDirection); -- cgit v0.12 From 35dc9919a0dadaafb72ab4651cc5e9ea29b9aa66 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Mon, 12 Jul 2010 11:22:16 +1000 Subject: Add copy(), cut() and paste() support to TextInput Task-number: QTBUG-12086 Reviewed-by: Michael Brasser (cherry picked from commit 0fdf5122c72eb86d49cba2b69f80d3a9c5949da6) --- src/declarative/QmlChanges.txt | 5 +++ .../graphicsitems/qdeclarativetextinput.cpp | 36 +++++++++++++++++++++ .../graphicsitems/qdeclarativetextinput_p.h | 5 +++ .../tst_qdeclarativetextedit.cpp | 35 ++++++++++++++++++++ .../tst_qdeclarativetextinput.cpp | 37 +++++++++++++++++++++- 5 files changed, 117 insertions(+), 1 deletion(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 259d9a9..872f6cb 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -1,4 +1,9 @@ ============================================================================= +The changes below are pre Qt 4.7.0 tech preview + +TextInput + - copy(), cut() and paste() functions added + The changes below are pre Qt 4.7.0 beta 2 QDeclarativeView diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index c2eea6e..2707b9c 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1154,6 +1154,42 @@ void QDeclarativeTextInput::selectAll() d->control->setSelection(0, d->control->text().length()); } +#ifndef QT_NO_CLIPBOARD +/*! + \qmlmethod TextInput::cut() + + Moves the currently selected text to the system clipboard. +*/ +void QDeclarativeTextInput::cut() +{ + Q_D(QDeclarativeTextInput); + d->control->copy(); + d->control->del(); +} + +/*! + \qmlmethod TextInput::copy() + + Copies the currently selected text to the system clipboard. +*/ +void QDeclarativeTextInput::copy() +{ + Q_D(QDeclarativeTextInput); + d->control->copy(); +} + +/*! + \qmlmethod TextInput::paste() + + Replaces the currently selected text by the contents of the system clipboard. +*/ +void QDeclarativeTextInput::paste() +{ + Q_D(QDeclarativeTextInput); + d->control->paste(); +} +#endif // QT_NO_CLIPBOARD + /*! \qmlmethod void TextInput::selectWord() diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index bacd041..336a8b9 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -230,6 +230,11 @@ public Q_SLOTS: void selectAll(); void selectWord(); void select(int start, int end); +#ifndef QT_NO_CLIPBOARD + void cut(); + void copy(); + void paste(); +#endif private Q_SLOTS: void updateSize(bool needsRedraw = true); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 4e4f45e..1ec700b 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -96,6 +96,7 @@ private slots: void delegateLoading(); void navigation(); void readOnly(); + void copyAndPaste(); void openInputPanelOnClick(); void openInputPanelOnFocus(); void geometrySignals(); @@ -842,6 +843,40 @@ void tst_qdeclarativetextedit::navigation() QVERIFY(input->hasFocus() == true); } +void tst_qdeclarativetextedit::copyAndPaste() { +#ifndef QT_NO_CLIPBOARD + QString componentStr = "import Qt 4.7\nTextEdit { text: \"Hello world!\" }"; + QDeclarativeComponent textEditComponent(&engine); + textEditComponent.setData(componentStr.toLatin1(), QUrl()); + QDeclarativeTextEdit *textEdit = qobject_cast<QDeclarativeTextEdit*>(textEditComponent.create()); + QVERIFY(textEdit != 0); + + // copy and paste + QCOMPARE(textEdit->text().length(), 12); + textEdit->select(0, textEdit->text().length());; + textEdit->copy(); + QCOMPARE(textEdit->selectedText(), QString("Hello world!")); + QCOMPARE(textEdit->selectedText().length(), 12); + textEdit->setCursorPosition(0); + textEdit->paste(); + QCOMPARE(textEdit->text(), QString("Hello world!Hello world!")); + QCOMPARE(textEdit->text().length(), 24); + + // select word + textEdit->setCursorPosition(0); + textEdit->selectWord(); + QCOMPARE(textEdit->selectedText(), QString("Hello")); + + // select all and cut + textEdit->selectAll(); + textEdit->cut(); + QCOMPARE(textEdit->text().length(), 0); + textEdit->paste(); + QCOMPARE(textEdit->text(), QString("Hello world!Hello world!")); + QCOMPARE(textEdit->text().length(), 24); +#endif +} + void tst_qdeclarativetextedit::readOnly() { QDeclarativeView *canvas = createView(SRCDIR "/data/readOnly.qml"); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 24fedc4..a032071 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -83,6 +83,7 @@ private slots: void cursorDelegate(); void navigation(); + void copyAndPaste(); void readOnly(); void openInputPanelOnClick(); @@ -683,6 +684,40 @@ void tst_qdeclarativetextinput::navigation() delete canvas; } +void tst_qdeclarativetextinput::copyAndPaste() { +#ifndef QT_NO_CLIPBOARD + QString componentStr = "import Qt 4.7\nTextInput { text: \"Hello world!\" }"; + QDeclarativeComponent textInputComponent(&engine); + textInputComponent.setData(componentStr.toLatin1(), QUrl()); + QDeclarativeTextInput *textInput = qobject_cast<QDeclarativeTextInput*>(textInputComponent.create()); + QVERIFY(textInput != 0); + + // copy and paste + QCOMPARE(textInput->text().length(), 12); + textInput->select(0, textInput->text().length());; + textInput->copy(); + QCOMPARE(textInput->selectedText(), QString("Hello world!")); + QCOMPARE(textInput->selectedText().length(), 12); + textInput->setCursorPosition(0); + textInput->paste(); + QCOMPARE(textInput->text(), QString("Hello world!Hello world!")); + QCOMPARE(textInput->text().length(), 24); + + // select word + textInput->setCursorPosition(0); + textInput->selectWord(); + QCOMPARE(textInput->selectedText(), QString("Hello")); + + // select all and cut + textInput->selectAll(); + textInput->cut(); + QCOMPARE(textInput->text().length(), 0); + textInput->paste(); + QCOMPARE(textInput->text(), QString("Hello world!Hello world!")); + QCOMPARE(textInput->text().length(), 24); +#endif +} + void tst_qdeclarativetextinput::cursorDelegate() { QDeclarativeView* view = createView(SRCDIR "/data/cursorTest.qml"); @@ -994,7 +1029,7 @@ void tst_qdeclarativetextinput::openInputPanelOnFocus() QCOMPARE(ic.openInputPanelReceived, false); // input method should be disabled - // if TextEdit loses focus + // if TextInput loses focus input.setFocus(false); QApplication::processEvents(); QVERIFY(view.inputContext() == 0); -- cgit v0.12 From 5bb2b79b19ec91a39f550408399ab829be2bc530 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Tue, 6 Jul 2010 15:41:49 +0200 Subject: Added QDeclarativeSpringAnimation The QDeclarativeSpringAnimation is a replacement for QDeclarativeSpringFollow. The idea is to remove the Follows quickly. Follows used to have an inSync property. In order to provide an alternative mechanism, the commit also fixes the running property for animations which are controlled by a behavior. Previously running would always return false and never change. Now running does change and indicates that the animation is running indeed. (cherry picked from commit cb406a116bf2237c743ac05882fb06927c70359c) --- doc/src/declarative/qml-intro.qdoc | 14 +- .../ui-components/dialcontrol/content/Dial.qml | 19 +- src/declarative/util/qdeclarativeanimation.cpp | 10 + src/declarative/util/qdeclarativeanimation_p.h | 1 + src/declarative/util/qdeclarativebehavior.cpp | 27 +- src/declarative/util/qdeclarativebehavior_p.h | 3 + .../util/qdeclarativespringanimation.cpp | 435 +++++++++++++++++++++ .../util/qdeclarativespringanimation_p.h | 126 ++++++ src/declarative/util/qdeclarativeutilmodule.cpp | 2 + src/declarative/util/util.pri | 2 + 10 files changed, 622 insertions(+), 17 deletions(-) create mode 100644 src/declarative/util/qdeclarativespringanimation.cpp create mode 100644 src/declarative/util/qdeclarativespringanimation_p.h diff --git a/doc/src/declarative/qml-intro.qdoc b/doc/src/declarative/qml-intro.qdoc index ac79496..a98d0f9 100644 --- a/doc/src/declarative/qml-intro.qdoc +++ b/doc/src/declarative/qml-intro.qdoc @@ -915,16 +915,18 @@ the rotation of the needle image. Notice this piece of code in Dial where the change in \c value modifies the position of the needle. \code - SpringFollow on angle { - spring: 1.4 - damping: .15 - to: Math.min(Math.max(-130, root.value*2.6 - 130), 133) + angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133) + Behavior on angle { + SpringAnimation { + spring: 1.4 + damping: .15 + } } \endcode This is part of the \c needleRotation that rotates the needle and causes the -rotation of its shadow. \l SpringFollow is an element that modifies the value -of that rotation angle \e to and mimics the oscillatory behavior of a spring, +rotation of its shadow. \l SpringAnimation is an element that modifies the value +of that rotation \e angle and mimics the oscillatory behavior of a spring, with the appropriate \e spring constant to control the acceleration and the \e damping to control how quickly the effect dies away. diff --git a/examples/declarative/ui-components/dialcontrol/content/Dial.qml b/examples/declarative/ui-components/dialcontrol/content/Dial.qml index 2b421bf..b5074a64 100644 --- a/examples/declarative/ui-components/dialcontrol/content/Dial.qml +++ b/examples/declarative/ui-components/dialcontrol/content/Dial.qml @@ -50,11 +50,11 @@ Item { //! [needle_shadow] Image { - x: 93 + x: 96 y: 35 source: "needle_shadow.png" transform: Rotation { - origin.x: 11; origin.y: 67 + origin.x: 9; origin.y: 67 angle: needleRotation.angle } } @@ -62,17 +62,18 @@ Item { //! [needle] Image { id: needle - x: 95; y: 33 + x: 98; y: 33 smooth: true source: "needle.png" transform: Rotation { id: needleRotation - origin.x: 7; origin.y: 65 - angle: -130 - SpringFollow on angle { - spring: 1.4 - damping: .15 - to: Math.min(Math.max(-130, root.value*2.6 - 130), 133) + origin.x: 5; origin.y: 65 + angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133) + Behavior on angle { + SpringAnimation { + spring: 1.4 + damping: .15 + } } } } diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index add27f3..6559bd5 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -142,6 +142,16 @@ bool QDeclarativeAbstractAnimation::isRunning() const return d->running; } +// the behavior connects the animation to this slot +void QDeclarativeAbstractAnimation::behaviorControlRunningChanged(bool running) +{ + Q_D(QDeclarativeAbstractAnimation); + if (d->disableUserControl && d->running != running) { + d->running = running; + emit runningChanged(running); + } +} + //commence is called to start an animation when it is used as a //simple animation, and not as part of a transition void QDeclarativeAbstractAnimationPrivate::commence() diff --git a/src/declarative/util/qdeclarativeanimation_p.h b/src/declarative/util/qdeclarativeanimation_p.h index 3f8fbdd..2279b0e 100644 --- a/src/declarative/util/qdeclarativeanimation_p.h +++ b/src/declarative/util/qdeclarativeanimation_p.h @@ -134,6 +134,7 @@ public: private Q_SLOTS: void timelineComplete(); void componentFinalized(); + void behaviorControlRunningChanged(bool running); private: virtual void setTarget(const QDeclarativeProperty &); diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp index 047993e..4480e75 100644 --- a/src/declarative/util/qdeclarativebehavior.cpp +++ b/src/declarative/util/qdeclarativebehavior.cpp @@ -58,7 +58,8 @@ class QDeclarativeBehaviorPrivate : public QObjectPrivate { Q_DECLARE_PUBLIC(QDeclarativeBehavior) public: - QDeclarativeBehaviorPrivate() : animation(0), enabled(true), finalized(false) {} + QDeclarativeBehaviorPrivate() : animation(0), enabled(true), finalized(false) + , blockRunningChanged(false) {} QDeclarativeProperty property; QVariant currentValue; @@ -66,6 +67,7 @@ public: QDeclarativeGuard<QDeclarativeAbstractAnimation> animation; bool enabled; bool finalized; + bool blockRunningChanged; }; /*! @@ -132,9 +134,26 @@ void QDeclarativeBehavior::setAnimation(QDeclarativeAbstractAnimation *animation if (d->animation) { d->animation->setDefaultTarget(d->property); d->animation->setDisableUserControl(); + connect(d->animation->qtAnimation(), + SIGNAL(stateChanged(QAbstractAnimation::State,QAbstractAnimation::State)), + this, + SLOT(qtAnimationStateChanged(QAbstractAnimation::State,QAbstractAnimation::State))); + connect(this, + SIGNAL(qtAnimationRunningChanged(bool)), + d->animation, + SLOT(behaviorControlRunningChanged(bool))); } } + +void QDeclarativeBehavior::qtAnimationStateChanged(QAbstractAnimation::State newState,QAbstractAnimation::State) +{ + Q_D(QDeclarativeBehavior); + if (!d->blockRunningChanged) + emit qtAnimationRunningChanged(newState == QAbstractAnimation::Running); +} + + /*! \qmlproperty bool Behavior::enabled Whether the Behavior will be triggered when the property it is tracking changes. @@ -173,8 +192,11 @@ void QDeclarativeBehavior::write(const QVariant &value) d->currentValue = d->property.read(); d->targetValue = value; - if (d->animation->qtAnimation()->duration() != -1) + if (d->animation->qtAnimation()->duration() != -1 + && d->animation->qtAnimation()->state() != QAbstractAnimation::Stopped) { + d->blockRunningChanged = true; d->animation->qtAnimation()->stop(); + } QDeclarativeStateOperation::ActionList actions; QDeclarativeAction action; @@ -186,6 +208,7 @@ void QDeclarativeBehavior::write(const QVariant &value) QList<QDeclarativeProperty> after; d->animation->transition(actions, after, QDeclarativeAbstractAnimation::Forward); d->animation->qtAnimation()->start(); + d->blockRunningChanged = false; if (!after.contains(d->property)) QDeclarativePropertyPrivate::write(d->property, value, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding); } diff --git a/src/declarative/util/qdeclarativebehavior_p.h b/src/declarative/util/qdeclarativebehavior_p.h index 6c10eec..a3132d9 100644 --- a/src/declarative/util/qdeclarativebehavior_p.h +++ b/src/declarative/util/qdeclarativebehavior_p.h @@ -47,6 +47,7 @@ #include <qdeclarativepropertyvaluesource.h> #include <qdeclarativepropertyvalueinterceptor.h> #include <qdeclarative.h> +#include <QtCore/QAbstractAnimation> QT_BEGIN_HEADER @@ -82,9 +83,11 @@ public: Q_SIGNALS: void enabledChanged(); + void qtAnimationRunningChanged(bool running); private Q_SLOTS: void componentFinalized(); + void qtAnimationStateChanged(QAbstractAnimation::State,QAbstractAnimation::State); }; QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp new file mode 100644 index 0000000..314b82b --- /dev/null +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -0,0 +1,435 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "private/qdeclarativespringanimation_p.h" + +#include "private/qdeclarativeanimation_p_p.h" +#include <qdeclarativeproperty_p.h> + +#include <QtCore/qdebug.h> + +#include <private/qobject_p.h> + +#include <limits.h> +#include <math.h> + +QT_BEGIN_NAMESPACE + + + +class QDeclarativeSpringAnimationPrivate : public QDeclarativeAbstractAnimationPrivate +{ + Q_DECLARE_PUBLIC(QDeclarativeSpringAnimation) +public: + QDeclarativeSpringAnimationPrivate() + : currentValue(0), to(0), from(0), maxVelocity(0), lastTime(0) + , mass(1.0), spring(0.), damping(0.), velocity(0), epsilon(0.01) + , modulus(0.0), useMass(false), haveModulus(false), enabled(true) + , fromDefined(false), toDefined(false) + , mode(Track), clock(this) {} + + qreal currentValue; + qreal to; + qreal from; + qreal maxVelocity; + qreal velocityms; + int lastTime; + qreal mass; + qreal spring; + qreal damping; + qreal velocity; + qreal epsilon; + qreal modulus; + + bool useMass : 1; + bool haveModulus : 1; + bool enabled : 1; + bool fromDefined : 1; + bool toDefined : 1; + + enum Mode { + Track, + Velocity, + Spring + }; + Mode mode; + + void tick(int); + void updateMode(); + + QTickAnimationProxy<QDeclarativeSpringAnimationPrivate, &QDeclarativeSpringAnimationPrivate::tick> clock; +}; + +void QDeclarativeSpringAnimationPrivate::tick(int time) +{ + if (mode == Track) { + clock.stop(); + return; + } + + int elapsed = time - lastTime; + if (!elapsed) + return; + qreal srcVal = to; + + bool stop = false; + + if (haveModulus) { + currentValue = fmod(currentValue, modulus); + srcVal = fmod(srcVal, modulus); + } + if (mode == Spring) { + if (elapsed < 16) // capped at 62fps. + return; + // Real men solve the spring DEs using RK4. + // We'll do something much simpler which gives a result that looks fine. + int count = elapsed / 16; + for (int i = 0; i < count; ++i) { + qreal diff = srcVal - currentValue; + if (haveModulus && qAbs(diff) > modulus / 2) { + if (diff < 0) + diff += modulus; + else + diff -= modulus; + } + if (useMass) + velocity = velocity + (spring * diff - damping * velocity) / mass; + else + velocity = velocity + spring * diff - damping * velocity; + if (maxVelocity > 0.) { + // limit velocity + if (velocity > maxVelocity) + velocity = maxVelocity; + else if (velocity < -maxVelocity) + velocity = -maxVelocity; + } + currentValue += velocity * 16.0 / 1000.0; + if (haveModulus) { + currentValue = fmod(currentValue, modulus); + if (currentValue < 0.0) + currentValue += modulus; + } + } + if (qAbs(velocity) < epsilon && qAbs(srcVal - currentValue) < epsilon) { + velocity = 0.0; + currentValue = srcVal; + stop = true; + } + lastTime = time - (elapsed - count * 16); + } else { + qreal moveBy = elapsed * velocityms; + qreal diff = srcVal - currentValue; + if (haveModulus && qAbs(diff) > modulus / 2) { + if (diff < 0) + diff += modulus; + else + diff -= modulus; + } + if (diff > 0) { + currentValue += moveBy; + if (haveModulus) + currentValue = fmod(currentValue, modulus); + if (currentValue > to) { + currentValue = to; + stop = true; + } + } else { + currentValue -= moveBy; + if (haveModulus && currentValue < 0.0) + currentValue = fmod(currentValue, modulus) + modulus; + if (currentValue < to) { + currentValue = to; + stop = true; + } + } + lastTime = time; + } + + QDeclarativePropertyPrivate::write(defaultProperty, currentValue, + QDeclarativePropertyPrivate::BypassInterceptor | + QDeclarativePropertyPrivate::DontRemoveBinding); + + if (stop) + clock.stop(); +} + +void QDeclarativeSpringAnimationPrivate::updateMode() +{ + if (spring == 0. && maxVelocity == 0.) + mode = Track; + else if (spring > 0.) + mode = Spring; + else + mode = Velocity; +} + +/*! + \qmlclass SpringAnimation QDeclarativeSpringAnimation + \since 4.7 +*/ + +QDeclarativeSpringAnimation::QDeclarativeSpringAnimation(QObject *parent) +: QDeclarativeAbstractAnimation(*(new QDeclarativeSpringAnimationPrivate),parent) +{ +} + +QDeclarativeSpringAnimation::~QDeclarativeSpringAnimation() +{ +} + +void QDeclarativeSpringAnimation::setTarget(const QDeclarativeProperty &property) +{ + Q_D(QDeclarativeSpringAnimation); + d->defaultProperty = property; + d->currentValue = property.read().toReal(); + if (!d->avoidPropertyValueSourceStart) { + setRunning(true); + } +} + +qreal QDeclarativeSpringAnimation::to() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->toDefined ? d->to : 0; +} + +/*! + \qmlproperty real SpringFollow::to +*/ + +void QDeclarativeSpringAnimation::setTo(qreal value) +{ + Q_D(QDeclarativeSpringAnimation); + if (d->to == value) + return; + + d->to = value; + d->toDefined = true; + d->lastTime = 0; + emit toChanged(value); +} + +qreal QDeclarativeSpringAnimation::from() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->fromDefined ? d->from : 0; +} + +/*! + \qmlproperty real SpringFollow::from +*/ + +void QDeclarativeSpringAnimation::setFrom(qreal value) +{ + Q_D(QDeclarativeSpringAnimation); + if (d->from == value) + return; + + d->currentValue = d->from = value; + d->fromDefined = true; + d->lastTime = 0; + emit fromChanged(value); +} + + +/*! + \qmlproperty real SpringAnimation::velocity + This property holds the maximum velocity allowed when tracking the source. +*/ + +qreal QDeclarativeSpringAnimation::velocity() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->maxVelocity; +} + +void QDeclarativeSpringAnimation::setVelocity(qreal velocity) +{ + Q_D(QDeclarativeSpringAnimation); + d->maxVelocity = velocity; + d->velocityms = velocity / 1000.0; + d->updateMode(); +} + +/*! + \qmlproperty real SpringAnimation::spring + This property holds the spring constant + + The spring constant describes how strongly the target is pulled towards the + source. Setting spring to 0 turns off spring tracking. Useful values 0 - 5.0 + + When a spring constant is set and the velocity property is greater than 0, + velocity limits the maximum speed. +*/ +qreal QDeclarativeSpringAnimation::spring() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->spring; +} + +void QDeclarativeSpringAnimation::setSpring(qreal spring) +{ + Q_D(QDeclarativeSpringAnimation); + d->spring = spring; + d->updateMode(); +} + +/*! + \qmlproperty real SpringAnimation::damping + This property holds the spring damping constant + + The damping constant describes how quickly a sprung follower comes to rest. + Useful range is 0 - 1.0 +*/ +qreal QDeclarativeSpringAnimation::damping() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->damping; +} + +void QDeclarativeSpringAnimation::setDamping(qreal damping) +{ + Q_D(QDeclarativeSpringAnimation); + if (damping > 1.) + damping = 1.; + + d->damping = damping; +} + + +/*! + \qmlproperty real SpringAnimation::epsilon + This property holds the spring epsilon + + The epsilon is the rate and amount of change in the value which is close enough + to 0 to be considered equal to zero. This will depend on the usage of the value. + For pixel positions, 0.25 would suffice. For scale, 0.005 will suffice. + + The default is 0.01. Tuning this value can provide small performance improvements. +*/ +qreal QDeclarativeSpringAnimation::epsilon() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->epsilon; +} + +void QDeclarativeSpringAnimation::setEpsilon(qreal epsilon) +{ + Q_D(QDeclarativeSpringAnimation); + d->epsilon = epsilon; +} + +/*! + \qmlproperty real SpringAnimation::modulus + This property holds the modulus value. + + Setting a \a modulus forces the target value to "wrap around" at the modulus. + For example, setting the modulus to 360 will cause a value of 370 to wrap around to 10. +*/ +qreal QDeclarativeSpringAnimation::modulus() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->modulus; +} + +void QDeclarativeSpringAnimation::setModulus(qreal modulus) +{ + Q_D(QDeclarativeSpringAnimation); + if (d->modulus != modulus) { + d->haveModulus = modulus != 0.0; + d->modulus = modulus; + emit modulusChanged(); + } +} + +/*! + \qmlproperty real SpringAnimation::mass + This property holds the "mass" of the property being moved. + + mass is 1.0 by default. Setting a different mass changes the dynamics of + a \l spring follow. +*/ +qreal QDeclarativeSpringAnimation::mass() const +{ + Q_D(const QDeclarativeSpringAnimation); + return d->mass; +} + +void QDeclarativeSpringAnimation::setMass(qreal mass) +{ + Q_D(QDeclarativeSpringAnimation); + if (d->mass != mass && mass > 0.0) { + d->useMass = mass != 1.0; + d->mass = mass; + emit massChanged(); + } +} + +void QDeclarativeSpringAnimation::transition(QDeclarativeStateActions &actions, + QDeclarativeProperties &modified, + TransitionDirection direction) +{ + Q_D(QDeclarativeSpringAnimation); + Q_UNUSED(direction); + + if (d->clock.state() != QAbstractAnimation::Running) + d->lastTime = 0; + + if (!actions.isEmpty()) { + for (int i = 0; i < actions.size(); ++i) { + if (!d->toDefined) + d->to = actions.at(i).toValue.toReal(); + if (!d->fromDefined) + d->currentValue = actions.at(i).fromValue.toReal(); + if (d->mode != QDeclarativeSpringAnimationPrivate::Track) + modified << d->defaultProperty; + } + } +} + + +QAbstractAnimation *QDeclarativeSpringAnimation::qtAnimation() +{ + Q_D(QDeclarativeSpringAnimation); + return &d->clock; +} + +QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativespringanimation_p.h b/src/declarative/util/qdeclarativespringanimation_p.h new file mode 100644 index 0000000..6f574ef --- /dev/null +++ b/src/declarative/util/qdeclarativespringanimation_p.h @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVESPRINGANIMATION_H +#define QDECLARATIVESPRINGANIMATION_H + +#include <qdeclarative.h> +#include "private/qdeclarativeanimation_p.h" + +#include <QtCore/qobject.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Declarative) + +class QDeclarativeSpringAnimationPrivate; +class Q_AUTOTEST_EXPORT QDeclarativeSpringAnimation : public QDeclarativeAbstractAnimation +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QDeclarativeSpringAnimation) + Q_INTERFACES(QDeclarativePropertyValueSource) + + Q_PROPERTY(qreal to READ to WRITE setTo NOTIFY toChanged) + Q_PROPERTY(qreal from READ from WRITE setFrom NOTIFY fromChanged) + Q_PROPERTY(qreal velocity READ velocity WRITE setVelocity) + Q_PROPERTY(qreal spring READ spring WRITE setSpring) + Q_PROPERTY(qreal damping READ damping WRITE setDamping) + Q_PROPERTY(qreal epsilon READ epsilon WRITE setEpsilon) + Q_PROPERTY(qreal modulus READ modulus WRITE setModulus NOTIFY modulusChanged) + Q_PROPERTY(qreal mass READ mass WRITE setMass NOTIFY massChanged) + +public: + QDeclarativeSpringAnimation(QObject *parent=0); + ~QDeclarativeSpringAnimation(); + + virtual void setTarget(const QDeclarativeProperty &); + + qreal to() const; + void setTo(qreal value); + + qreal from() const; + void setFrom(qreal value); + + qreal velocity() const; + void setVelocity(qreal velocity); + + qreal spring() const; + void setSpring(qreal spring); + + qreal damping() const; + void setDamping(qreal damping); + + qreal epsilon() const; + void setEpsilon(qreal epsilon); + + qreal mass() const; + void setMass(qreal modulus); + + qreal modulus() const; + void setModulus(qreal modulus); + + bool enabled() const; + void setEnabled(bool enabled); + + virtual void transition(QDeclarativeStateActions &actions, + QDeclarativeProperties &modified, + TransitionDirection direction); + +protected: + virtual QAbstractAnimation *qtAnimation(); + +Q_SIGNALS: + void toChanged(qreal); + void fromChanged(qreal); + void modulusChanged(); + void massChanged(); + void syncChanged(); +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QDeclarativeSpringAnimation) + +QT_END_HEADER + +#endif // QDECLARATIVESPRINGANIMATION_H diff --git a/src/declarative/util/qdeclarativeutilmodule.cpp b/src/declarative/util/qdeclarativeutilmodule.cpp index 3cf07a7..74fdac6 100644 --- a/src/declarative/util/qdeclarativeutilmodule.cpp +++ b/src/declarative/util/qdeclarativeutilmodule.cpp @@ -57,6 +57,7 @@ #include "private/qdeclarativepropertychanges_p.h" #include "qdeclarativepropertymap.h" #include "private/qdeclarativespringfollow_p.h" +#include "private/qdeclarativespringanimation_p.h" #include "private/qdeclarativestategroup_p.h" #include "private/qdeclarativestateoperations_p.h" #include "private/qdeclarativestate_p.h" @@ -98,6 +99,7 @@ void QDeclarativeUtilModule::defineModule() qmlRegisterType<QDeclarativeScriptAction>("Qt",4,7,"ScriptAction"); qmlRegisterType<QDeclarativeSequentialAnimation>("Qt",4,7,"SequentialAnimation"); qmlRegisterType<QDeclarativeSpringFollow>("Qt",4,7,"SpringFollow"); + qmlRegisterType<QDeclarativeSpringAnimation>("Qt",4,7,"SpringAnimation"); qmlRegisterType<QDeclarativeStateChangeScript>("Qt",4,7,"StateChangeScript"); qmlRegisterType<QDeclarativeStateGroup>("Qt",4,7,"StateGroup"); qmlRegisterType<QDeclarativeState>("Qt",4,7,"State"); diff --git a/src/declarative/util/util.pri b/src/declarative/util/util.pri index 04cfc68..0cbcbd7 100644 --- a/src/declarative/util/util.pri +++ b/src/declarative/util/util.pri @@ -8,6 +8,7 @@ SOURCES += \ $$PWD/qdeclarativeanimation.cpp \ $$PWD/qdeclarativesystempalette.cpp \ $$PWD/qdeclarativespringfollow.cpp \ + $$PWD/qdeclarativespringanimation.cpp \ $$PWD/qdeclarativesmoothedanimation.cpp \ $$PWD/qdeclarativesmoothedfollow.cpp \ $$PWD/qdeclarativestate.cpp\ @@ -39,6 +40,7 @@ HEADERS += \ $$PWD/qdeclarativeanimation_p_p.h \ $$PWD/qdeclarativesystempalette_p.h \ $$PWD/qdeclarativespringfollow_p.h \ + $$PWD/qdeclarativespringanimation_p.h \ $$PWD/qdeclarativesmoothedanimation_p.h \ $$PWD/qdeclarativesmoothedfollow_p.h \ $$PWD/qdeclarativesmoothedanimation_p_p.h \ -- cgit v0.12 From 2389fc6bbb0f8e1b6b1c28d21d9b204391204e31 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 6 Jul 2010 16:31:09 +1000 Subject: Update QtDeclarative def files (cherry picked from commit 23ef32dc0972d027617e5052192d1a17ba424f66) --- src/s60installs/bwins/QtDeclarativeu.def | 105 ++++++++++++++++++++----------- src/s60installs/eabi/QtDeclarativeu.def | 92 ++++++++++++++++++--------- 2 files changed, 131 insertions(+), 66 deletions(-) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 9572b72..2ee1736 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -10,7 +10,7 @@ EXPORTS ??6QDeclarativeInfo@@QAEAAV0@_J@Z @ 9 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(long long) ?propertyOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 10 NONAME ; int QDeclarativeOpenMetaObjectType::propertyOffset(void) const ??0QDeclarativeText@@QAE@PAVQDeclarativeItem@@@Z @ 11 NONAME ; QDeclarativeText::QDeclarativeText(class QDeclarativeItem *) - ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *, int) + ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 12 NONAME ABSENT ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *, int) ?propertyTypeName@QDeclarativeProperty@@QBEPBDXZ @ 13 NONAME ; char const * QDeclarativeProperty::propertyTypeName(void) const ?wantsFocusChanged@QDeclarativeItem@@IAEX_N@Z @ 14 NONAME ; void QDeclarativeItem::wantsFocusChanged(bool) ?getStaticMetaObject@QDeclarativeDebugService@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & QDeclarativeDebugService::getStaticMetaObject(void) @@ -22,7 +22,7 @@ EXPORTS ?elapsed@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 21 NONAME ; long long QDeclarativeItemPrivate::elapsed(class QElapsedTimer &) ?clearComponentCache@QDeclarativeEngine@@QAEXXZ @ 22 NONAME ; void QDeclarativeEngine::clearComponentCache(void) ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 23 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *, int) - ??_EQDeclarativePixmapReply@@UAE@I@Z @ 24 NONAME ; QDeclarativePixmapReply::~QDeclarativePixmapReply(unsigned int) + ??_EQDeclarativePixmapReply@@UAE@I@Z @ 24 NONAME ABSENT ; QDeclarativePixmapReply::~QDeclarativePixmapReply(unsigned int) ??1QDeclarativeParserStatus@@UAE@XZ @ 25 NONAME ; QDeclarativeParserStatus::~QDeclarativeParserStatus(void) ?gradient@QDeclarativeRectangle@@QBEPAVQDeclarativeGradient@@XZ @ 26 NONAME ; class QDeclarativeGradient * QDeclarativeRectangle::gradient(void) const ?setReadable@QMetaPropertyBuilder@@QAEX_N@Z @ 27 NONAME ; void QMetaPropertyBuilder::setReadable(bool) @@ -35,7 +35,7 @@ EXPORTS ??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@ABVQString@@PAVQObject@@@Z @ 34 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QString const &, class QObject *) ?d_func@QDeclarativeContext@@AAEPAVQDeclarativeContextPrivate@@XZ @ 35 NONAME ; class QDeclarativeContextPrivate * QDeclarativeContext::d_func(void) ?resetLeft@QDeclarativeAnchors@@QAEXXZ @ 36 NONAME ; void QDeclarativeAnchors::resetLeft(void) - ?staticMetaObject@QDeclarativePixmapReply@@2UQMetaObject@@B @ 37 NONAME ; struct QMetaObject const QDeclarativePixmapReply::staticMetaObject + ?staticMetaObject@QDeclarativePixmapReply@@2UQMetaObject@@B @ 37 NONAME ABSENT ; struct QMetaObject const QDeclarativePixmapReply::staticMetaObject ?setOfflineStoragePath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 38 NONAME ; void QDeclarativeEngine::setOfflineStoragePath(class QString const &) ?getStaticMetaObject@QListModelInterface@@SAABUQMetaObject@@XZ @ 39 NONAME ; struct QMetaObject const & QListModelInterface::getStaticMetaObject(void) ?tr@QDeclarativeEngine@@SA?AVQString@@PBD0H@Z @ 40 NONAME ; class QString QDeclarativeEngine::tr(char const *, char const *, int) @@ -82,7 +82,7 @@ EXPORTS ?registerType@QDeclarativePrivate@@YAHABURegisterInterface@1@@Z @ 81 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterInterface const &) ?classBegin@QDeclarativeItem@@MAEXXZ @ 82 NONAME ; void QDeclarativeItem::classBegin(void) ?setTransformOrigin@QDeclarativeItem@@QAEXW4TransformOrigin@1@@Z @ 83 NONAME ; void QDeclarativeItem::setTransformOrigin(enum QDeclarativeItem::TransformOrigin) - ?request@QDeclarativePixmapCache@@SAPAVQDeclarativePixmapReply@@PAVQDeclarativeEngine@@ABVQUrl@@HH@Z @ 84 NONAME ; class QDeclarativePixmapReply * QDeclarativePixmapCache::request(class QDeclarativeEngine *, class QUrl const &, int, int) + ?request@QDeclarativePixmapCache@@SAPAVQDeclarativePixmapReply@@PAVQDeclarativeEngine@@ABVQUrl@@HH@Z @ 84 NONAME ABSENT ; class QDeclarativePixmapReply * QDeclarativePixmapCache::request(class QDeclarativeEngine *, class QUrl const &, int, int) ?event@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 85 NONAME ; bool QDeclarativeItem::event(class QEvent *) ?setAttributes@QMetaMethodBuilder@@QAEXH@Z @ 86 NONAME ; void QMetaMethodBuilder::setAttributes(int) ??_EQDeclarativeDebugObjectReference@@QAE@I@Z @ 87 NONAME ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(unsigned int) @@ -137,7 +137,7 @@ EXPORTS ?transform_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 136 NONAME ; void QDeclarativeItemPrivate::transform_clear(class QDeclarativeListProperty<class QGraphicsTransform> *) ?staticMetaObject@QDeclarativeValueType@@2UQMetaObject@@B @ 137 NONAME ; struct QMetaObject const QDeclarativeValueType::staticMetaObject ?propertyName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 138 NONAME ; class QByteArray QDeclarativeDomDynamicProperty::propertyName(void) const - ?getStaticMetaObject@QDeclarativePixmapReply@@SAABUQMetaObject@@XZ @ 139 NONAME ; struct QMetaObject const & QDeclarativePixmapReply::getStaticMetaObject(void) + ?getStaticMetaObject@QDeclarativePixmapReply@@SAABUQMetaObject@@XZ @ 139 NONAME ABSENT ; struct QMetaObject const & QDeclarativePixmapReply::getStaticMetaObject(void) ?focusChanged@QDeclarativeItem@@IAEX_N@Z @ 140 NONAME ; void QDeclarativeItem::focusChanged(bool) ?getStaticMetaObject@QDeclarativeBinding@@SAABUQMetaObject@@XZ @ 141 NONAME ; struct QMetaObject const & QDeclarativeBinding::getStaticMetaObject(void) ?copy@QDeclarativeMetaType@@SA_NHPAXPBX@Z @ 142 NONAME ; bool QDeclarativeMetaType::copy(int, void *, void const *) @@ -159,7 +159,7 @@ EXPORTS ?property@QMetaObjectBuilder@@QBE?AVQMetaPropertyBuilder@@H@Z @ 158 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::property(int) const ?index@QDeclarativeType@@QBEHXZ @ 159 NONAME ; int QDeclarativeType::index(void) const ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 160 NONAME ; class QString QDeclarativeRectangle::tr(char const *, char const *) - ?release@QDeclarativePixmapReply@@AAE_N_N@Z @ 161 NONAME ; bool QDeclarativePixmapReply::release(bool) + ?release@QDeclarativePixmapReply@@AAE_N_N@Z @ 161 NONAME ABSENT ; bool QDeclarativePixmapReply::release(bool) ??0QDeclarativeScaleGrid@@QAE@PAVQObject@@@Z @ 162 NONAME ; QDeclarativeScaleGrid::QDeclarativeScaleGrid(class QObject *) ?engines@QDeclarativeDebugEnginesQuery@@QBE?AV?$QList@VQDeclarativeDebugEngineReference@@@@XZ @ 163 NONAME ; class QList<class QDeclarativeDebugEngineReference> QDeclarativeDebugEnginesQuery::engines(void) const ?qt_metacall@QDeclarativeDebugPropertyWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 164 NONAME ; int QDeclarativeDebugPropertyWatch::qt_metacall(enum QMetaObject::Call, int, void * *) @@ -212,7 +212,7 @@ EXPORTS ?setRight@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 211 NONAME ; void QDeclarativeAnchors::setRight(class QDeclarativeAnchorLine const &) ?needsNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 212 NONAME ; bool QDeclarativeProperty::needsNotifySignal(void) const ?fill@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 213 NONAME ; class QGraphicsObject * QDeclarativeAnchors::fill(void) const - ?url@QDeclarativePixmapReply@@QBEABVQUrl@@XZ @ 214 NONAME ; class QUrl const & QDeclarativePixmapReply::url(void) const + ?url@QDeclarativePixmapReply@@QBEABVQUrl@@XZ @ 214 NONAME ABSENT ; class QUrl const & QDeclarativePixmapReply::url(void) const ?top@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 215 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::top(void) const ?clear@QDeclarativeListReference@@QBE_NXZ @ 216 NONAME ; bool QDeclarativeListReference::clear(void) const ?parentChanged@QDeclarativeItem@@IAEXPAV1@@Z @ 217 NONAME ; void QDeclarativeItem::parentChanged(class QDeclarativeItem *) @@ -299,7 +299,7 @@ EXPORTS ??1QDeclarativeExpression@@UAE@XZ @ 298 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(void) ?binding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@@Z @ 299 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::binding(class QDeclarativeProperty const &) ?removeMethod@QMetaObjectBuilder@@QAEXH@Z @ 300 NONAME ; void QMetaObjectBuilder::removeMethod(int) - ?get@QDeclarativePixmapCache@@SA?AW4Status@QDeclarativePixmapReply@@ABVQUrl@@PAVQPixmap@@PAVQString@@PAVQSize@@_NHH@Z @ 301 NONAME ; enum QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(class QUrl const &, class QPixmap *, class QString *, class QSize *, bool, int, int) + ?get@QDeclarativePixmapCache@@SA?AW4Status@QDeclarativePixmapReply@@ABVQUrl@@PAVQPixmap@@PAVQString@@PAVQSize@@_NHH@Z @ 301 NONAME ABSENT ; enum QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(class QUrl const &, class QPixmap *, class QString *, class QSize *, bool, int, int) ?operationAt@QDeclarativeState@@QBEPAVQDeclarativeStateOperation@@H@Z @ 302 NONAME ; class QDeclarativeStateOperation * QDeclarativeState::operationAt(int) const ?methodCount@QMetaObjectBuilder@@QBEHXZ @ 303 NONAME ; int QMetaObjectBuilder::methodCount(void) const ?font@QDeclarativeText@@QBE?AVQFont@@XZ @ 304 NONAME ; class QFont QDeclarativeText::font(void) const @@ -406,7 +406,7 @@ EXPORTS ?margins@QDeclarativeAnchors@@QBEMXZ @ 405 NONAME ; float QDeclarativeAnchors::margins(void) const ?length@QDeclarativeDomProperty@@QBEHXZ @ 406 NONAME ; int QDeclarativeDomProperty::length(void) const ??1QDeclarativeDomImport@@QAE@XZ @ 407 NONAME ; QDeclarativeDomImport::~QDeclarativeDomImport(void) - ?addRef@QDeclarativePixmapReply@@AAEXXZ @ 408 NONAME ; void QDeclarativePixmapReply::addRef(void) + ?addRef@QDeclarativePixmapReply@@AAEXXZ @ 408 NONAME ABSENT ; void QDeclarativePixmapReply::addRef(void) ?mouseReleaseEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 409 NONAME ; void QDeclarativeText::mouseReleaseEvent(class QGraphicsSceneMouseEvent *) ?isCustomType@QDeclarativeDomObject@@QBE_NXZ @ 410 NONAME ; bool QDeclarativeDomObject::isCustomType(void) const ?registerType@QDeclarativePrivate@@YAHABURegisterType@1@@Z @ 411 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterType const &) @@ -414,7 +414,7 @@ EXPORTS ??0QDeclarativeComponent@@AAE@PAVQDeclarativeEngine@@PAVQDeclarativeCompiledData@@HHPAVQObject@@@Z @ 413 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QDeclarativeCompiledData *, int, int, class QObject *) ?resources_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 414 NONAME ; int QDeclarativeItemPrivate::resources_count(class QDeclarativeListProperty<class QObject> *) ?timerEvent@QDeclarativeView@@MAEXPAVQTimerEvent@@@Z @ 415 NONAME ; void QDeclarativeView::timerEvent(class QTimerEvent *) - ?finished@QDeclarativePixmapReply@@IAEXXZ @ 416 NONAME ; void QDeclarativePixmapReply::finished(void) + ?finished@QDeclarativePixmapReply@@IAEXXZ @ 416 NONAME ABSENT ; void QDeclarativePixmapReply::finished(void) ?setToState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 417 NONAME ; void QDeclarativeTransition::setToState(class QString const &) ?methodType@QMetaMethodBuilder@@QBE?AW4MethodType@QMetaMethod@@XZ @ 418 NONAME ; enum QMetaMethod::MethodType QMetaMethodBuilder::methodType(void) const ?getStaticMetaObject@QDeclarativeView@@SAABUQMetaObject@@XZ @ 419 NONAME ; struct QMetaObject const & QDeclarativeView::getStaticMetaObject(void) @@ -485,12 +485,12 @@ EXPORTS ?staticMetaObject@QDeclarativeDebugService@@2UQMetaObject@@B @ 484 NONAME ; struct QMetaObject const QDeclarativeDebugService::staticMetaObject ?topMargin@QDeclarativeAnchors@@QBEMXZ @ 485 NONAME ; float QDeclarativeAnchors::topMargin(void) const ??0QDeclarativeDebugExpressionQuery@@AAE@PAVQObject@@@Z @ 486 NONAME ; QDeclarativeDebugExpressionQuery::QDeclarativeDebugExpressionQuery(class QObject *) - ?qt_metacast@QDeclarativePixmapReply@@UAEPAXPBD@Z @ 487 NONAME ; void * QDeclarativePixmapReply::qt_metacast(char const *) + ?qt_metacast@QDeclarativePixmapReply@@UAEPAXPBD@Z @ 487 NONAME ABSENT ; void * QDeclarativePixmapReply::qt_metacast(char const *) ??0QPacket@@IAE@ABVQByteArray@@@Z @ 488 NONAME ; QPacket::QPacket(class QByteArray const &) ?setFlags@QMetaObjectBuilder@@QAEXV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@@Z @ 489 NONAME ; void QMetaObjectBuilder::setFlags(class QFlags<enum QMetaObjectBuilder::MetaObjectFlag>) ?horizontalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 490 NONAME ; void QDeclarativeAnchors::horizontalCenterChanged(void) ?right@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 491 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::right(void) const - ?pendingRequests@QDeclarativePixmapCache@@SAHXZ @ 492 NONAME ; int QDeclarativePixmapCache::pendingRequests(void) + ?pendingRequests@QDeclarativePixmapCache@@SAHXZ @ 492 NONAME ABSENT ; int QDeclarativePixmapCache::pendingRequests(void) ?staticMetaObject@QDeclarativeDebugObjectQuery@@2UQMetaObject@@B @ 493 NONAME ; struct QMetaObject const QDeclarativeDebugObjectQuery::staticMetaObject ?propertyRead@QDeclarativeOpenMetaObject@@MAEXH@Z @ 494 NONAME ; void QDeclarativeOpenMetaObject::propertyRead(int) ?importPathList@QDeclarativeEngine@@QBE?AVQStringList@@XZ @ 495 NONAME ; class QStringList QDeclarativeEngine::importPathList(void) const @@ -600,7 +600,7 @@ EXPORTS ?typeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 599 NONAME ; class QByteArray QDeclarativeType::typeName(void) const ?asStringList@Variant@QDeclarativeParser@@QBE?AVQStringList@@XZ @ 600 NONAME ; class QStringList QDeclarativeParser::Variant::asStringList(void) const ?removeKey@QMetaEnumBuilder@@QAEXH@Z @ 601 NONAME ; void QMetaEnumBuilder::removeKey(int) - ?downloadProgress@QDeclarativePixmapReply@@IAEX_J0@Z @ 602 NONAME ; void QDeclarativePixmapReply::downloadProgress(long long, long long) + ?downloadProgress@QDeclarativePixmapReply@@IAEX_J0@Z @ 602 NONAME ABSENT ; void QDeclarativePixmapReply::downloadProgress(long long, long long) ?addRelatedMetaObject@QMetaObjectBuilder@@QAEHABQ6AABUQMetaObject@@XZ@Z @ 603 NONAME ; int QMetaObjectBuilder::addRelatedMetaObject(struct QMetaObject const & (* const)(void) const &) ??0QDeclarativeDomValueLiteral@@QAE@XZ @ 604 NONAME ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(void) ??_EQDeclarativeDebugObjectExpressionWatch@@UAE@I@Z @ 605 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(unsigned int) @@ -626,7 +626,7 @@ EXPORTS ??0QDeclarativeCustomParserNode@@QAE@XZ @ 625 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(void) ?version@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 626 NONAME ; class QString QDeclarativeDomImport::version(void) const ?smooth@QDeclarativeItem@@QBE_NXZ @ 627 NONAME ; bool QDeclarativeItem::smooth(void) const - ?implicitSize@QDeclarativePixmapReply@@QBE?AVQSize@@XZ @ 628 NONAME ; class QSize QDeclarativePixmapReply::implicitSize(void) const + ?implicitSize@QDeclarativePixmapReply@@QBE?AVQSize@@XZ @ 628 NONAME ABSENT ; class QSize QDeclarativePixmapReply::implicitSize(void) const ??1QDeclarativeInfo@@QAE@XZ @ 629 NONAME ; QDeclarativeInfo::~QDeclarativeInfo(void) ?qt_metacast@QDeclarativeStateOperation@@UAEPAXPBD@Z @ 630 NONAME ; void * QDeclarativeStateOperation::qt_metacast(char const *) ??4QDeclarativeDebugEngineReference@@QAEAAV0@ABV0@@Z @ 631 NONAME ; class QDeclarativeDebugEngineReference & QDeclarativeDebugEngineReference::operator=(class QDeclarativeDebugEngineReference const &) @@ -712,7 +712,7 @@ EXPORTS ?mapToItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 711 NONAME ; class QScriptValue QDeclarativeItem::mapToItem(class QScriptValue const &, float, float) const ?setPluginPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 712 NONAME ; void QDeclarativeEngine::setPluginPathList(class QStringList const &) ?metaObject@QDeclarativeState@@UBEPBUQMetaObject@@XZ @ 713 NONAME ; struct QMetaObject const * QDeclarativeState::metaObject(void) const - ?errorString@QDeclarativePixmapReply@@QBE?AVQString@@XZ @ 714 NONAME ; class QString QDeclarativePixmapReply::errorString(void) const + ?errorString@QDeclarativePixmapReply@@QBE?AVQString@@XZ @ 714 NONAME ABSENT ; class QString QDeclarativePixmapReply::errorString(void) const ?boundingRect@QDeclarativeRectangle@@UBE?AVQRectF@@XZ @ 715 NONAME ; class QRectF QDeclarativeRectangle::boundingRect(void) const ?uri@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 716 NONAME ; class QString QDeclarativeDomImport::uri(void) const ?setContextProperty@QDeclarativeContext@@QAEXABVQString@@PAVQObject@@@Z @ 717 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QObject *) @@ -758,14 +758,14 @@ EXPORTS ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 757 NONAME ; class QString QDeclarativeDebugConnection::tr(char const *, char const *) ?staticMetaObject@QDeclarativeBinding@@2UQMetaObject@@B @ 758 NONAME ; struct QMetaObject const QDeclarativeBinding::staticMetaObject ?qualifier@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 759 NONAME ; class QString QDeclarativeDomImport::qualifier(void) const - ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 760 NONAME ; class QString QDeclarativePixmapCache::tr(char const *, char const *, int) + ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 760 NONAME ABSENT ; class QString QDeclarativePixmapCache::tr(char const *, char const *, int) ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@@Z @ 761 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &, class QDeclarativeContext *) ?setSuperClass@QMetaObjectBuilder@@QAEXPBUQMetaObject@@@Z @ 762 NONAME ; void QMetaObjectBuilder::setSuperClass(struct QMetaObject const *) ?contains@QDeclarativePropertyMap@@QBE_NABVQString@@@Z @ 763 NONAME ; bool QDeclarativePropertyMap::contains(class QString const &) const ?setGradient@QDeclarativeRectangle@@QAEXPAVQDeclarativeGradient@@@Z @ 764 NONAME ; void QDeclarativeRectangle::setGradient(class QDeclarativeGradient *) ?metaObject@QDeclarativeTransition@@UBEPBUQMetaObject@@XZ @ 765 NONAME ; struct QMetaObject const * QDeclarativeTransition::metaObject(void) const ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PBUQMetaObject@@@Z @ 766 NONAME ; class QMetaMethod QDeclarativeMetaType::defaultMethod(struct QMetaObject const *) - ??0QDeclarativePixmapReply@@AAE@PAVQDeclarativeImageReader@@ABVQUrl@@HH@Z @ 767 NONAME ; QDeclarativePixmapReply::QDeclarativePixmapReply(class QDeclarativeImageReader *, class QUrl const &, int, int) + ??0QDeclarativePixmapReply@@AAE@PAVQDeclarativeImageReader@@ABVQUrl@@HH@Z @ 767 NONAME ABSENT ; QDeclarativePixmapReply::QDeclarativePixmapReply(class QDeclarativeImageReader *, class QUrl const &, int, int) ?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 768 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *, int) ?metaObject@QDeclarativeValueType@@UBEPBUQMetaObject@@XZ @ 769 NONAME ; struct QMetaObject const * QDeclarativeValueType::metaObject(void) const ?hasNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 770 NONAME ; bool QDeclarativeProperty::hasNotifySignal(void) const @@ -811,7 +811,7 @@ EXPORTS ?setParentItem@QDeclarativeItem@@QAEXPAV1@@Z @ 810 NONAME ; void QDeclarativeItem::setParentItem(class QDeclarativeItem *) ?qmlAttachedProperties@QDeclarativeComponent@@SAPAVQDeclarativeComponentAttached@@PAVQObject@@@Z @ 811 NONAME ; class QDeclarativeComponentAttached * QDeclarativeComponent::qmlAttachedProperties(class QObject *) ??0QDeclarativeView@@QAE@ABVQUrl@@PAVQWidget@@@Z @ 812 NONAME ; QDeclarativeView::QDeclarativeView(class QUrl const &, class QWidget *) - ?qt_metacall@QDeclarativePixmapReply@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 813 NONAME ; int QDeclarativePixmapReply::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QDeclarativePixmapReply@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 813 NONAME ABSENT ; int QDeclarativePixmapReply::qt_metacall(enum QMetaObject::Call, int, void * *) ?valueChanged@QDeclarativeExpression@@IAEXXZ @ 814 NONAME ; void QDeclarativeExpression::valueChanged(void) ?childrenChanged@QDeclarativeItem@@IAEXXZ @ 815 NONAME ; void QDeclarativeItem::childrenChanged(void) ??_EQDeclarativeView@@UAE@I@Z @ 816 NONAME ; QDeclarativeView::~QDeclarativeView(unsigned int) @@ -823,7 +823,7 @@ EXPORTS ?d_func@QDeclarativeStateGroup@@ABEPBVQDeclarativeStateGroupPrivate@@XZ @ 822 NONAME ; class QDeclarativeStateGroupPrivate const * QDeclarativeStateGroup::d_func(void) const ?stateChanged@QDeclarativeItem@@IAEXABVQString@@@Z @ 823 NONAME ; void QDeclarativeItem::stateChanged(class QString const &) ?horizontalAlignmentChanged@QDeclarativeText@@IAEXW4HAlignment@1@@Z @ 824 NONAME ; void QDeclarativeText::horizontalAlignmentChanged(enum QDeclarativeText::HAlignment) - ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 825 NONAME ; class QString QDeclarativePixmapCache::tr(char const *, char const *) + ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 825 NONAME ABSENT ; class QString QDeclarativePixmapCache::tr(char const *, char const *) ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 826 NONAME ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData &) ?setDynamic@QMetaPropertyBuilder@@QAEX_N@Z @ 827 NONAME ; void QMetaPropertyBuilder::setDynamic(bool) ?d_func@QDeclarativeEngine@@ABEPBVQDeclarativeEnginePrivate@@XZ @ 828 NONAME ; class QDeclarativeEnginePrivate const * QDeclarativeEngine::d_func(void) const @@ -832,7 +832,7 @@ EXPORTS ?horizontalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 831 NONAME ; void QDeclarativeAnchors::horizontalCenterOffsetChanged(void) ?tr@QDeclarativeContext@@SA?AVQString@@PBD0@Z @ 832 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *) ?d_func@QDeclarativeItem@@ABEPBVQDeclarativeItemPrivate@@XZ @ 833 NONAME ; class QDeclarativeItemPrivate const * QDeclarativeItem::d_func(void) const - ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 834 NONAME ; class QString QDeclarativePixmapReply::tr(char const *, char const *) + ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 834 NONAME ABSENT ; class QString QDeclarativePixmapReply::tr(char const *, char const *) ?isUser@QMetaPropertyBuilder@@QBE_NXZ @ 835 NONAME ; bool QMetaPropertyBuilder::isUser(void) const ?doUpdate@QDeclarativeRectangle@@AAEXXZ @ 836 NONAME ; void QDeclarativeRectangle::doUpdate(void) ?qmlExecuteDeferred@@YAXPAVQObject@@@Z @ 837 NONAME ; void qmlExecuteDeferred(class QObject *) @@ -849,9 +849,9 @@ EXPORTS ?d_func@QDeclarativeDebugService@@ABEPBVQDeclarativeDebugServicePrivate@@XZ @ 848 NONAME ; class QDeclarativeDebugServicePrivate const * QDeclarativeDebugService::d_func(void) const ??1QDeclarativeDebugQuery@@UAE@XZ @ 849 NONAME ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(void) ?data_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 850 NONAME ; void QDeclarativeItemPrivate::data_append(class QDeclarativeListProperty<class QObject> *, class QObject *) - ??1QDeclarativePixmapReply@@UAE@XZ @ 851 NONAME ; QDeclarativePixmapReply::~QDeclarativePixmapReply(void) + ??1QDeclarativePixmapReply@@UAE@XZ @ 851 NONAME ABSENT ; QDeclarativePixmapReply::~QDeclarativePixmapReply(void) ?tr@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 852 NONAME ; class QString QDeclarativeState::tr(char const *, char const *) - ?isLoading@QDeclarativePixmapReply@@ABE_NXZ @ 853 NONAME ; bool QDeclarativePixmapReply::isLoading(void) const + ?isLoading@QDeclarativePixmapReply@@ABE_NXZ @ 853 NONAME ABSENT ; bool QDeclarativePixmapReply::isLoading(void) const ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 854 NONAME ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *, int) ?createProperty@QDeclarativeOpenMetaObject@@MAEHPBD0@Z @ 855 NONAME ; int QDeclarativeOpenMetaObject::createProperty(char const *, char const *) ?bottomMargin@QDeclarativeAnchors@@QBEMXZ @ 856 NONAME ; float QDeclarativeAnchors::bottomMargin(void) const @@ -865,7 +865,7 @@ EXPORTS ?qt_metacast@QDeclarativeDebugWatch@@UAEPAXPBD@Z @ 864 NONAME ; void * QDeclarativeDebugWatch::qt_metacast(char const *) ?implicitHeight@QDeclarativeItem@@QBEMXZ @ 865 NONAME ; float QDeclarativeItem::implicitHeight(void) const ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 866 NONAME ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *) - ?status@QDeclarativePixmapReply@@QBE?AW4Status@1@XZ @ 867 NONAME ; enum QDeclarativePixmapReply::Status QDeclarativePixmapReply::status(void) const + ?status@QDeclarativePixmapReply@@QBE?AW4Status@1@XZ @ 867 NONAME ABSENT ; enum QDeclarativePixmapReply::Status QDeclarativePixmapReply::status(void) const ??6@YA?AVQDebug@@V0@ABVQDeclarativeError@@@Z @ 868 NONAME ; class QDebug operator<<(class QDebug, class QDeclarativeError const &) ?setContextProperty@QDeclarativeContext@@QAEXABVQString@@ABVQVariant@@@Z @ 869 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QVariant const &) ?imports@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeDomImport@@@@XZ @ 870 NONAME ; class QList<class QDeclarativeDomImport> QDeclarativeDomDocument::imports(void) const @@ -967,7 +967,7 @@ EXPORTS ?removeState@QDeclarativeStateGroup@@AAEXPAVQDeclarativeState@@@Z @ 966 NONAME ; void QDeclarativeStateGroup::removeState(class QDeclarativeState *) ?qmlTypeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 967 NONAME ; class QByteArray QDeclarativeType::qmlTypeName(void) const ?tr@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 968 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *) - ?setLoading@QDeclarativePixmapReply@@AAEXXZ @ 969 NONAME ; void QDeclarativePixmapReply::setLoading(void) + ?setLoading@QDeclarativePixmapReply@@AAEXXZ @ 969 NONAME ABSENT ; void QDeclarativePixmapReply::setLoading(void) ?isProperty@QDeclarativeProperty@@QBE_NXZ @ 970 NONAME ; bool QDeclarativeProperty::isProperty(void) const ?states@QDeclarativeStateGroup@@QBE?AV?$QList@PAVQDeclarativeState@@@@XZ @ 971 NONAME ; class QList<class QDeclarativeState *> QDeclarativeStateGroup::states(void) const ??1QDeclarativeDebugExpressionQuery@@UAE@XZ @ 972 NONAME ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(void) @@ -1105,7 +1105,7 @@ EXPORTS ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 1104 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *, int) ?tr@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 1105 NONAME ; class QString QPacketProtocol::tr(char const *, char const *, int) ?d_func@QDeclarativeAnchors@@ABEPBVQDeclarativeAnchorsPrivate@@XZ @ 1106 NONAME ; class QDeclarativeAnchorsPrivate const * QDeclarativeAnchors::d_func(void) const - ?metaObject@QDeclarativePixmapReply@@UBEPBUQMetaObject@@XZ @ 1107 NONAME ; struct QMetaObject const * QDeclarativePixmapReply::metaObject(void) const + ?metaObject@QDeclarativePixmapReply@@UBEPBUQMetaObject@@XZ @ 1107 NONAME ABSENT ; struct QMetaObject const * QDeclarativePixmapReply::metaObject(void) const ?setNotifySignal@QMetaPropertyBuilder@@QAEXABVQMetaMethodBuilder@@@Z @ 1108 NONAME ; void QMetaPropertyBuilder::setNotifySignal(class QMetaMethodBuilder const &) ?enabled@QDeclarativeBehavior@@QBE_NXZ @ 1109 NONAME ; bool QDeclarativeBehavior::enabled(void) const ?initProperty@QDeclarativePropertyPrivate@@QAEXPAVQObject@@ABVQString@@@Z @ 1110 NONAME ; void QDeclarativePropertyPrivate::initProperty(class QObject *, class QString const &) @@ -1158,7 +1158,7 @@ EXPORTS ?isDefaultProperty@QDeclarativeDomProperty@@QBE_NXZ @ 1157 NONAME ; bool QDeclarativeDomProperty::isDefaultProperty(void) const ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1158 NONAME ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QVariant const &) ?metaObject@QDeclarativeRectangle@@UBEPBUQMetaObject@@XZ @ 1159 NONAME ; struct QMetaObject const * QDeclarativeRectangle::metaObject(void) const - ?forcedWidth@QDeclarativePixmapReply@@QBEHXZ @ 1160 NONAME ; int QDeclarativePixmapReply::forcedWidth(void) const + ?forcedWidth@QDeclarativePixmapReply@@QBEHXZ @ 1160 NONAME ABSENT ; int QDeclarativePixmapReply::forcedWidth(void) const ?removeRelatedMetaObject@QMetaObjectBuilder@@QAEXH@Z @ 1161 NONAME ; void QMetaObjectBuilder::removeRelatedMetaObject(int) ??0QDeclarativeError@@QAE@XZ @ 1162 NONAME ; QDeclarativeError::QDeclarativeError(void) ?object@QDeclarativeProperty@@QBEPAVQObject@@XZ @ 1163 NONAME ; class QObject * QDeclarativeProperty::object(void) const @@ -1204,7 +1204,7 @@ EXPORTS ?isValid@QDeclarativeError@@QBE_NXZ @ 1203 NONAME ; bool QDeclarativeError::isValid(void) const ??0QMetaMethodBuilder@@QAE@XZ @ 1204 NONAME ; QMetaMethodBuilder::QMetaMethodBuilder(void) ?completed@QDeclarativeState@@IAEXXZ @ 1205 NONAME ; void QDeclarativeState::completed(void) - ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 1206 NONAME ; class QString QDeclarativePixmapReply::tr(char const *, char const *, int) + ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 1206 NONAME ABSENT ; class QString QDeclarativePixmapReply::tr(char const *, char const *, int) ?radiusChanged@QDeclarativeRectangle@@IAEXXZ @ 1207 NONAME ; void QDeclarativeRectangle::radiusChanged(void) ?getStaticMetaObject@QDeclarativeExpression@@SAABUQMetaObject@@XZ @ 1208 NONAME ; struct QMetaObject const & QDeclarativeExpression::getStaticMetaObject(void) ?gridLeft@QDeclarativeGridScaledImage@@QBEHXZ @ 1209 NONAME ; int QDeclarativeGridScaledImage::gridLeft(void) const @@ -1275,7 +1275,7 @@ EXPORTS ?contextProperty@QDeclarativeContext@@QBE?AVQVariant@@ABVQString@@@Z @ 1274 NONAME ; class QVariant QDeclarativeContext::contextProperty(class QString const &) const ?verticalCenter@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1275 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::verticalCenter(void) const ?metaObject@QDeclarativeScaleGrid@@UBEPBUQMetaObject@@XZ @ 1276 NONAME ; struct QMetaObject const * QDeclarativeScaleGrid::metaObject(void) const - ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 1277 NONAME ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *, int) + ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 1277 NONAME ABSENT ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *, int) ?qmlContext@@YAPAVQDeclarativeContext@@PBVQObject@@@Z @ 1278 NONAME ; class QDeclarativeContext * qmlContext(class QObject const *) ?transform_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 1279 NONAME ; int QDeclarativeItemPrivate::transform_count(class QDeclarativeListProperty<class QGraphicsTransform> *) ?tr@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 1280 NONAME ; class QString QListModelInterface::tr(char const *, char const *, int) @@ -1283,7 +1283,7 @@ EXPORTS ?style@QDeclarativeText@@QBE?AW4TextStyle@1@XZ @ 1282 NONAME ; enum QDeclarativeText::TextStyle QDeclarativeText::style(void) const ??0QDeclarativeAbstractBinding@@QAE@XZ @ 1283 NONAME ; QDeclarativeAbstractBinding::QDeclarativeAbstractBinding(void) ?staticMetaObject@QDeclarativeDebugEnginesQuery@@2UQMetaObject@@B @ 1284 NONAME ; struct QMetaObject const QDeclarativeDebugEnginesQuery::staticMetaObject - ?cancel@QDeclarativePixmapCache@@SAXABVQUrl@@PAVQObject@@@Z @ 1285 NONAME ; void QDeclarativePixmapCache::cancel(class QUrl const &, class QObject *) + ?cancel@QDeclarativePixmapCache@@SAXABVQUrl@@PAVQObject@@@Z @ 1285 NONAME ABSENT ; void QDeclarativePixmapCache::cancel(class QUrl const &, class QObject *) ?isError@QDeclarativeComponent@@QBE_NXZ @ 1286 NONAME ; bool QDeclarativeComponent::isError(void) const ?qt_metacall@QDeclarativeTransition@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1287 NONAME ; int QDeclarativeTransition::qt_metacall(enum QMetaObject::Call, int, void * *) ?type@QDeclarativeDomImport@@QBE?AW4Type@1@XZ @ 1288 NONAME ; enum QDeclarativeDomImport::Type QDeclarativeDomImport::type(void) const @@ -1547,14 +1547,14 @@ EXPORTS ?isValid@QDeclarativeContext@@QBE_NXZ @ 1546 NONAME ; bool QDeclarativeContext::isValid(void) const ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 1547 NONAME ; class QString QDeclarativeValueType::trUtf8(char const *, char const *, int) ?qmlAttachedPropertiesObjectById@@YAPAVQObject@@HPBV1@_N@Z @ 1548 NONAME ; class QObject * qmlAttachedPropertiesObjectById(int, class QObject const *, bool) - ?d_func@QDeclarativePixmapReply@@ABEPBVQDeclarativePixmapReplyPrivate@@XZ @ 1549 NONAME ; class QDeclarativePixmapReplyPrivate const * QDeclarativePixmapReply::d_func(void) const + ?d_func@QDeclarativePixmapReply@@ABEPBVQDeclarativePixmapReplyPrivate@@XZ @ 1549 NONAME ABSENT ; class QDeclarativePixmapReplyPrivate const * QDeclarativePixmapReply::d_func(void) const ?constructorCount@QMetaObjectBuilder@@QBEHXZ @ 1550 NONAME ; int QMetaObjectBuilder::constructorCount(void) const ??0QDeclarativeDomValueValueInterceptor@@QAE@ABV0@@Z @ 1551 NONAME ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(class QDeclarativeDomValueValueInterceptor const &) ?object@QDeclarativeDebugObjectQuery@@QBE?AVQDeclarativeDebugObjectReference@@XZ @ 1552 NONAME ; class QDeclarativeDebugObjectReference QDeclarativeDebugObjectQuery::object(void) const ??0QMetaPropertyBuilder@@QAE@XZ @ 1553 NONAME ; QMetaPropertyBuilder::QMetaPropertyBuilder(void) ?toMetaObject@QMetaObjectBuilder@@QBEPAUQMetaObject@@XZ @ 1554 NONAME ; struct QMetaObject * QMetaObjectBuilder::toMetaObject(void) const ?d_func@QDeclarativeEngine@@AAEPAVQDeclarativeEnginePrivate@@XZ @ 1555 NONAME ; class QDeclarativeEnginePrivate * QDeclarativeEngine::d_func(void) - ?forcedHeight@QDeclarativePixmapReply@@QBEHXZ @ 1556 NONAME ; int QDeclarativePixmapReply::forcedHeight(void) const + ?forcedHeight@QDeclarativePixmapReply@@QBEHXZ @ 1556 NONAME ABSENT ; int QDeclarativePixmapReply::forcedHeight(void) const ?staticMetaObject@QDeclarativeRectangle@@2UQMetaObject@@B @ 1557 NONAME ; struct QMetaObject const QDeclarativeRectangle::staticMetaObject ?addSignal@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1558 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addSignal(class QByteArray const &) ?getStaticMetaObject@QDeclarativeStateGroup@@SAABUQMetaObject@@XZ @ 1559 NONAME ; struct QMetaObject const & QDeclarativeStateGroup::getStaticMetaObject(void) @@ -1580,9 +1580,9 @@ EXPORTS ?height@QDeclarativeItem@@QBEMXZ @ 1579 NONAME ; float QDeclarativeItem::height(void) const ?minorVersion@QDeclarativeType@@QBEHXZ @ 1580 NONAME ; int QDeclarativeType::minorVersion(void) const ?qt_metacall@QDeclarativeText@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1581 NONAME ; int QDeclarativeText::qt_metacall(enum QMetaObject::Call, int, void * *) - ?event@QDeclarativePixmapReply@@MAE_NPAVQEvent@@@Z @ 1582 NONAME ; bool QDeclarativePixmapReply::event(class QEvent *) + ?event@QDeclarativePixmapReply@@MAE_NPAVQEvent@@@Z @ 1582 NONAME ABSENT ; bool QDeclarativePixmapReply::event(class QEvent *) ?isConnected@QDeclarativeDebugConnection@@QBE_NXZ @ 1583 NONAME ; bool QDeclarativeDebugConnection::isConnected(void) const - ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 1584 NONAME ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *) + ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 1584 NONAME ABSENT ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *) ??6QDeclarativeInfo@@QAEAAV0@I@Z @ 1585 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned int) ?setNetworkAccessManagerFactory@QDeclarativeEngine@@QAEXPAVQDeclarativeNetworkAccessManagerFactory@@@Z @ 1586 NONAME ; void QDeclarativeEngine::setNetworkAccessManagerFactory(class QDeclarativeNetworkAccessManagerFactory *) ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 1587 NONAME ; class QString QDeclarativeDebugQuery::tr(char const *, char const *, int) @@ -1593,7 +1593,7 @@ EXPORTS ?count@QDeclarativeListReference@@QBEHXZ @ 1592 NONAME ; int QDeclarativeListReference::count(void) const ?location@QDeclarativeCustomParserProperty@@QBE?AULocation@QDeclarativeParser@@XZ @ 1593 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserProperty::location(void) const ?metaObject@QDeclarativePen@@UBEPBUQMetaObject@@XZ @ 1594 NONAME ; struct QMetaObject const * QDeclarativePen::metaObject(void) const - ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 1595 NONAME ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *) + ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 1595 NONAME ABSENT ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *) ?url@QDeclarativeError@@QBE?AVQUrl@@XZ @ 1596 NONAME ; class QUrl QDeclarativeError::url(void) const ?isBinding@QDeclarativeDomValue@@QBE_NXZ @ 1597 NONAME ; bool QDeclarativeDomValue::isBinding(void) const ?name@QDeclarativeProperty@@QBE?AVQString@@XZ @ 1598 NONAME ; class QString QDeclarativeProperty::name(void) const @@ -1607,7 +1607,7 @@ EXPORTS ?objectToString@QDeclarativeDebugService@@SA?AVQString@@PAVQObject@@@Z @ 1606 NONAME ; class QString QDeclarativeDebugService::objectToString(class QObject *) ?defaultValue@QDeclarativeDomDynamicProperty@@QBE?AVQDeclarativeDomProperty@@XZ @ 1607 NONAME ; class QDeclarativeDomProperty QDeclarativeDomDynamicProperty::defaultValue(void) const ?relatedMetaObject@QMetaObjectBuilder@@QBEPBUQMetaObject@@H@Z @ 1608 NONAME ; struct QMetaObject const * QMetaObjectBuilder::relatedMetaObject(int) const - ?d_func@QDeclarativePixmapReply@@AAEPAVQDeclarativePixmapReplyPrivate@@XZ @ 1609 NONAME ; class QDeclarativePixmapReplyPrivate * QDeclarativePixmapReply::d_func(void) + ?d_func@QDeclarativePixmapReply@@AAEPAVQDeclarativePixmapReplyPrivate@@XZ @ 1609 NONAME ABSENT ; class QDeclarativePixmapReplyPrivate * QDeclarativePixmapReply::d_func(void) ?addKey@QMetaEnumBuilder@@QAEHABVQByteArray@@H@Z @ 1610 NONAME ; int QMetaEnumBuilder::addKey(class QByteArray const &, int) ?setPosHelper@QDeclarativeItemPrivate@@UAEXABVQPointF@@@Z @ 1611 NONAME ; void QDeclarativeItemPrivate::setPosHelper(class QPointF const &) ?attributes@QMetaMethodBuilder@@QBEHXZ @ 1612 NONAME ; int QMetaMethodBuilder::attributes(void) const @@ -1616,7 +1616,7 @@ EXPORTS ?metaObject@QDeclarativeItem@@UBEPBUQMetaObject@@XZ @ 1615 NONAME ; struct QMetaObject const * QDeclarativeItem::metaObject(void) const ?clear@QDeclarativeAbstractBinding@@IAEXXZ @ 1616 NONAME ; void QDeclarativeAbstractBinding::clear(void) ?start@QDeclarativeItemPrivate@@SAXAAVQElapsedTimer@@@Z @ 1617 NONAME ; void QDeclarativeItemPrivate::start(class QElapsedTimer &) - ?reloadWithResources@QDeclarativeText@@AAEXXZ @ 1618 NONAME ; void QDeclarativeText::reloadWithResources(void) + ?reloadWithResources@QDeclarativeText@@AAEXXZ @ 1618 NONAME ABSENT ; void QDeclarativeText::reloadWithResources(void) ?stringToRule@QDeclarativeGridScaledImage@@CA?AW4TileMode@QDeclarativeBorderImage@@ABVQString@@@Z @ 1619 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::stringToRule(class QString const &) ?setHorizontalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1620 NONAME ; void QDeclarativeAnchors::setHorizontalCenter(class QDeclarativeAnchorLine const &) ?setFocus@QDeclarativeItem@@QAEX_N@Z @ 1621 NONAME ; void QDeclarativeItem::setFocus(bool) @@ -1635,4 +1635,37 @@ EXPORTS ?setContextForObject@QDeclarativeEngine@@SAXPAVQObject@@PAVQDeclarativeContext@@@Z @ 1634 NONAME ; void QDeclarativeEngine::setContextForObject(class QObject *, class QDeclarativeContext *) ?baselineOffsetChanged@QDeclarativeItem@@IAEXM@Z @ 1635 NONAME ; void QDeclarativeItem::baselineOffsetChanged(float) ??6QDeclarativeInfo@@QAEAAV0@VQChar@@@Z @ 1636 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QChar) + ?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 1637 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, int) + ?status@QDeclarativePixmap@@QBE?AW4Status@1@XZ @ 1638 NONAME ; enum QDeclarativePixmap::Status QDeclarativePixmap::status(void) const + ?error@QDeclarativePixmap@@QBE?AVQString@@XZ @ 1639 NONAME ; class QString QDeclarativePixmap::error(void) const + ??BQDeclarativePixmap@@QBEABVQPixmap@@XZ @ 1640 NONAME ; QDeclarativePixmap::operator class QPixmap const &(void) const + ?tr@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 1641 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *, int) + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1642 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &) + ?height@QDeclarativePixmap@@QBEHXZ @ 1643 NONAME ; int QDeclarativePixmap::height(void) const + ?implicitSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1644 NONAME ; class QSize const & QDeclarativePixmap::implicitSize(void) const + ?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 1645 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, char const *) + ?clear@QDeclarativePixmap@@QAEXPAVQObject@@@Z @ 1646 NONAME ; void QDeclarativePixmap::clear(class QObject *) + ?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 1647 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, char const *) + ?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 1648 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *, int) + ?isLoading@QDeclarativePixmap@@QBE_NXZ @ 1649 NONAME ; bool QDeclarativePixmap::isLoading(void) const + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@@Z @ 1650 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &) + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@_N@Z @ 1651 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, bool) + ??1QDeclarativePixmap@@QAE@XZ @ 1652 NONAME ; QDeclarativePixmap::~QDeclarativePixmap(void) + ??0QDeclarativePixmap@@QAE@XZ @ 1653 NONAME ; QDeclarativePixmap::QDeclarativePixmap(void) + ?isReady@QDeclarativePixmap@@QBE_NXZ @ 1654 NONAME ; bool QDeclarativePixmap::isReady(void) const + ?clear@QDeclarativePixmap@@QAEXXZ @ 1655 NONAME ; void QDeclarativePixmap::clear(void) + ?pixmap@QDeclarativePixmap@@QBEABVQPixmap@@XZ @ 1656 NONAME ; class QPixmap const & QDeclarativePixmap::pixmap(void) const + ??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@@Z @ 1657 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &) + ?width@QDeclarativePixmap@@QBEHXZ @ 1658 NONAME ; int QDeclarativePixmap::width(void) const + ?setPixmap@QDeclarativePixmap@@QAEXABVQPixmap@@@Z @ 1659 NONAME ; void QDeclarativePixmap::setPixmap(class QPixmap const &) + ?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 1660 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, int) + ?isError@QDeclarativePixmap@@QBE_NXZ @ 1661 NONAME ; bool QDeclarativePixmap::isError(void) const + ?rect@QDeclarativePixmap@@QBE?AVQRect@@XZ @ 1662 NONAME ; class QRect QDeclarativePixmap::rect(void) const + ?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1663 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *) + ?tr@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1664 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *) + ?isNull@QDeclarativePixmap@@QBE_NXZ @ 1665 NONAME ; bool QDeclarativePixmap::isNull(void) const + ?requestSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1666 NONAME ; class QSize const & QDeclarativePixmap::requestSize(void) const + ??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1667 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &, class QSize const &) + ?url@QDeclarativePixmap@@QBEABVQUrl@@XZ @ 1668 NONAME ; class QUrl const & QDeclarativePixmap::url(void) const + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@_N@Z @ 1669 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &, bool) diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index ea9bc18..f2c7206 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -116,7 +116,7 @@ EXPORTS _ZN16QDeclarativeText17textFormatChangedENS_10TextFormatE @ 115 NONAME _ZN16QDeclarativeText18paintedSizeChangedEv @ 116 NONAME _ZN16QDeclarativeText19getStaticMetaObjectEv @ 117 NONAME - _ZN16QDeclarativeText19reloadWithResourcesEv @ 118 NONAME + _ZN16QDeclarativeText19reloadWithResourcesEv @ 118 NONAME ABSENT _ZN16QDeclarativeText24verticalAlignmentChangedENS_10VAlignmentE @ 119 NONAME _ZN16QDeclarativeText26horizontalAlignmentChangedENS_10HAlignmentE @ 120 NONAME _ZN16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 121 NONAME @@ -729,25 +729,25 @@ EXPORTS _ZN23QDeclarativeItemPrivate8setWidthEf @ 728 NONAME _ZN23QDeclarativeItemPrivate9resourcesEv @ 729 NONAME _ZN23QDeclarativeItemPrivate9setHeightEf @ 730 NONAME - _ZN23QDeclarativePixmapCache15pendingRequestsEv @ 731 NONAME - _ZN23QDeclarativePixmapCache3getERK4QUrlP7QPixmapP7QStringP5QSizebii @ 732 NONAME - _ZN23QDeclarativePixmapCache6cancelERK4QUrlP7QObject @ 733 NONAME - _ZN23QDeclarativePixmapCache7requestEP18QDeclarativeEngineRK4QUrlii @ 734 NONAME - _ZN23QDeclarativePixmapReply10setLoadingEv @ 735 NONAME - _ZN23QDeclarativePixmapReply11qt_metacallEN11QMetaObject4CallEiPPv @ 736 NONAME - _ZN23QDeclarativePixmapReply11qt_metacastEPKc @ 737 NONAME - _ZN23QDeclarativePixmapReply16downloadProgressExx @ 738 NONAME - _ZN23QDeclarativePixmapReply16staticMetaObjectE @ 739 NONAME DATA 16 - _ZN23QDeclarativePixmapReply19getStaticMetaObjectEv @ 740 NONAME - _ZN23QDeclarativePixmapReply5eventEP6QEvent @ 741 NONAME - _ZN23QDeclarativePixmapReply6addRefEv @ 742 NONAME - _ZN23QDeclarativePixmapReply7releaseEb @ 743 NONAME - _ZN23QDeclarativePixmapReply8finishedEv @ 744 NONAME - _ZN23QDeclarativePixmapReplyC1EP23QDeclarativeImageReaderRK4QUrlii @ 745 NONAME - _ZN23QDeclarativePixmapReplyC2EP23QDeclarativeImageReaderRK4QUrlii @ 746 NONAME - _ZN23QDeclarativePixmapReplyD0Ev @ 747 NONAME - _ZN23QDeclarativePixmapReplyD1Ev @ 748 NONAME - _ZN23QDeclarativePixmapReplyD2Ev @ 749 NONAME + _ZN23QDeclarativePixmapCache15pendingRequestsEv @ 731 NONAME ABSENT + _ZN23QDeclarativePixmapCache3getERK4QUrlP7QPixmapP7QStringP5QSizebii @ 732 NONAME ABSENT + _ZN23QDeclarativePixmapCache6cancelERK4QUrlP7QObject @ 733 NONAME ABSENT + _ZN23QDeclarativePixmapCache7requestEP18QDeclarativeEngineRK4QUrlii @ 734 NONAME ABSENT + _ZN23QDeclarativePixmapReply10setLoadingEv @ 735 NONAME ABSENT + _ZN23QDeclarativePixmapReply11qt_metacallEN11QMetaObject4CallEiPPv @ 736 NONAME ABSENT + _ZN23QDeclarativePixmapReply11qt_metacastEPKc @ 737 NONAME ABSENT + _ZN23QDeclarativePixmapReply16downloadProgressExx @ 738 NONAME ABSENT + _ZN23QDeclarativePixmapReply16staticMetaObjectE @ 739 NONAME DATA 16 ABSENT + _ZN23QDeclarativePixmapReply19getStaticMetaObjectEv @ 740 NONAME ABSENT + _ZN23QDeclarativePixmapReply5eventEP6QEvent @ 741 NONAME ABSENT + _ZN23QDeclarativePixmapReply6addRefEv @ 742 NONAME ABSENT + _ZN23QDeclarativePixmapReply7releaseEb @ 743 NONAME ABSENT + _ZN23QDeclarativePixmapReply8finishedEv @ 744 NONAME ABSENT + _ZN23QDeclarativePixmapReplyC1EP23QDeclarativeImageReaderRK4QUrlii @ 745 NONAME ABSENT + _ZN23QDeclarativePixmapReplyC2EP23QDeclarativeImageReaderRK4QUrlii @ 746 NONAME ABSENT + _ZN23QDeclarativePixmapReplyD0Ev @ 747 NONAME ABSENT + _ZN23QDeclarativePixmapReplyD1Ev @ 748 NONAME ABSENT + _ZN23QDeclarativePixmapReplyD2Ev @ 749 NONAME ABSENT _ZN23QDeclarativePropertyMap11qt_metacallEN11QMetaObject4CallEiPPv @ 750 NONAME _ZN23QDeclarativePropertyMap11qt_metacastEPKc @ 751 NONAME _ZN23QDeclarativePropertyMap12valueChangedERK7QStringRK8QVariant @ 752 NONAME @@ -1399,14 +1399,14 @@ EXPORTS _ZNK23QDeclarativeItemPrivate6bottomEv @ 1398 NONAME _ZNK23QDeclarativeItemPrivate6heightEv @ 1399 NONAME _ZNK23QDeclarativeItemPrivate8baselineEv @ 1400 NONAME - _ZNK23QDeclarativePixmapReply10metaObjectEv @ 1401 NONAME - _ZNK23QDeclarativePixmapReply11errorStringEv @ 1402 NONAME - _ZNK23QDeclarativePixmapReply11forcedWidthEv @ 1403 NONAME - _ZNK23QDeclarativePixmapReply12forcedHeightEv @ 1404 NONAME - _ZNK23QDeclarativePixmapReply12implicitSizeEv @ 1405 NONAME - _ZNK23QDeclarativePixmapReply3urlEv @ 1406 NONAME - _ZNK23QDeclarativePixmapReply6statusEv @ 1407 NONAME - _ZNK23QDeclarativePixmapReply9isLoadingEv @ 1408 NONAME + _ZNK23QDeclarativePixmapReply10metaObjectEv @ 1401 NONAME ABSENT + _ZNK23QDeclarativePixmapReply11errorStringEv @ 1402 NONAME ABSENT + _ZNK23QDeclarativePixmapReply11forcedWidthEv @ 1403 NONAME ABSENT + _ZNK23QDeclarativePixmapReply12forcedHeightEv @ 1404 NONAME ABSENT + _ZNK23QDeclarativePixmapReply12implicitSizeEv @ 1405 NONAME ABSENT + _ZNK23QDeclarativePixmapReply3urlEv @ 1406 NONAME ABSENT + _ZNK23QDeclarativePixmapReply6statusEv @ 1407 NONAME ABSENT + _ZNK23QDeclarativePixmapReply9isLoadingEv @ 1408 NONAME ABSENT _ZNK23QDeclarativePropertyMap10metaObjectEv @ 1409 NONAME _ZNK23QDeclarativePropertyMap4keysEv @ 1410 NONAME _ZNK23QDeclarativePropertyMap4sizeEv @ 1411 NONAME @@ -1542,7 +1542,7 @@ EXPORTS _ZTI23QDeclarativeDebugClient @ 1541 NONAME _ZTI23QDeclarativeEngineDebug @ 1542 NONAME _ZTI23QDeclarativeItemPrivate @ 1543 NONAME - _ZTI23QDeclarativePixmapReply @ 1544 NONAME + _ZTI23QDeclarativePixmapReply @ 1544 NONAME ABSENT _ZTI23QDeclarativePropertyMap @ 1545 NONAME _ZTI24QDeclarativeCustomParser @ 1546 NONAME _ZTI24QDeclarativeDebugService @ 1547 NONAME @@ -1593,7 +1593,7 @@ EXPORTS _ZTV23QDeclarativeDebugClient @ 1592 NONAME _ZTV23QDeclarativeEngineDebug @ 1593 NONAME _ZTV23QDeclarativeItemPrivate @ 1594 NONAME - _ZTV23QDeclarativePixmapReply @ 1595 NONAME + _ZTV23QDeclarativePixmapReply @ 1595 NONAME ABSENT _ZTV23QDeclarativePropertyMap @ 1596 NONAME _ZTV24QDeclarativeCustomParser @ 1597 NONAME _ZTV24QDeclarativeDebugService @ 1598 NONAME @@ -1666,4 +1666,36 @@ EXPORTS _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1665 NONAME _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1666 NONAME _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1667 NONAME + _ZN18QDeclarativePixmap15connectFinishedEP7QObjectPKc @ 1668 NONAME + _ZN18QDeclarativePixmap15connectFinishedEP7QObjecti @ 1669 NONAME + _ZN18QDeclarativePixmap23connectDownloadProgressEP7QObjectPKc @ 1670 NONAME + _ZN18QDeclarativePixmap23connectDownloadProgressEP7QObjecti @ 1671 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrl @ 1672 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlRK5QSize @ 1673 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlRK5QSizeb @ 1674 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlb @ 1675 NONAME + _ZN18QDeclarativePixmap5clearEP7QObject @ 1676 NONAME + _ZN18QDeclarativePixmap5clearEv @ 1677 NONAME + _ZN18QDeclarativePixmap9setPixmapERK7QPixmap @ 1678 NONAME + _ZN18QDeclarativePixmapC1EP18QDeclarativeEngineRK4QUrl @ 1679 NONAME + _ZN18QDeclarativePixmapC1EP18QDeclarativeEngineRK4QUrlRK5QSize @ 1680 NONAME + _ZN18QDeclarativePixmapC1Ev @ 1681 NONAME + _ZN18QDeclarativePixmapC2EP18QDeclarativeEngineRK4QUrl @ 1682 NONAME + _ZN18QDeclarativePixmapC2EP18QDeclarativeEngineRK4QUrlRK5QSize @ 1683 NONAME + _ZN18QDeclarativePixmapC2Ev @ 1684 NONAME + _ZN18QDeclarativePixmapD1Ev @ 1685 NONAME + _ZN18QDeclarativePixmapD2Ev @ 1686 NONAME + _ZNK18QDeclarativePixmap11requestSizeEv @ 1687 NONAME + _ZNK18QDeclarativePixmap12implicitSizeEv @ 1688 NONAME + _ZNK18QDeclarativePixmap3urlEv @ 1689 NONAME + _ZNK18QDeclarativePixmap4rectEv @ 1690 NONAME + _ZNK18QDeclarativePixmap5errorEv @ 1691 NONAME + _ZNK18QDeclarativePixmap5widthEv @ 1692 NONAME + _ZNK18QDeclarativePixmap6heightEv @ 1693 NONAME + _ZNK18QDeclarativePixmap6isNullEv @ 1694 NONAME + _ZNK18QDeclarativePixmap6pixmapEv @ 1695 NONAME + _ZNK18QDeclarativePixmap6statusEv @ 1696 NONAME + _ZNK18QDeclarativePixmap7isErrorEv @ 1697 NONAME + _ZNK18QDeclarativePixmap7isReadyEv @ 1698 NONAME + _ZNK18QDeclarativePixmap9isLoadingEv @ 1699 NONAME -- cgit v0.12 From 829b2a2be40bc6a3fdfd12a3f44c81d2e69b67cf Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 6 Jul 2010 16:34:58 +1000 Subject: Convert QtDeclarative def files to use LF line endings (cherry picked from commit 7e35c6ff442e237ff9a1bec9ea1cdfb597d9ceae) --- src/s60installs/bwins/QtDeclarativeu.def | 3342 ++++++++++++++--------------- src/s60installs/eabi/QtDeclarativeu.def | 3402 +++++++++++++++--------------- 2 files changed, 3372 insertions(+), 3372 deletions(-) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 2ee1736..80ba423 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -1,1671 +1,1671 @@ -EXPORTS - ?write@QDeclarativeProperty@@QBE_NABVQVariant@@@Z @ 1 NONAME ; bool QDeclarativeProperty::write(class QVariant const &) const - ?setStored@QMetaPropertyBuilder@@QAEX_N@Z @ 2 NONAME ; void QMetaPropertyBuilder::setStored(bool) - ?trUtf8@QDeclarativeExpression@@SA?AVQString@@PBD0H@Z @ 3 NONAME ; class QString QDeclarativeExpression::trUtf8(char const *, char const *, int) - ?qt_metacast@QDeclarativeComponent@@UAEPAXPBD@Z @ 4 NONAME ; void * QDeclarativeComponent::qt_metacast(char const *) - ?name@QDeclarativeDebugService@@QBE?AVQString@@XZ @ 5 NONAME ; class QString QDeclarativeDebugService::name(void) const - ?debugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 6 NONAME ; int QDeclarativeDebugObjectReference::debugId(void) const - ?addPluginPath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 7 NONAME ; void QDeclarativeEngine::addPluginPath(class QString const &) - ?name@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 8 NONAME ; class QByteArray QMetaPropertyBuilder::name(void) const - ??6QDeclarativeInfo@@QAEAAV0@_J@Z @ 9 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(long long) - ?propertyOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 10 NONAME ; int QDeclarativeOpenMetaObjectType::propertyOffset(void) const - ??0QDeclarativeText@@QAE@PAVQDeclarativeItem@@@Z @ 11 NONAME ; QDeclarativeText::QDeclarativeText(class QDeclarativeItem *) - ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 12 NONAME ABSENT ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *, int) - ?propertyTypeName@QDeclarativeProperty@@QBEPBDXZ @ 13 NONAME ; char const * QDeclarativeProperty::propertyTypeName(void) const - ?wantsFocusChanged@QDeclarativeItem@@IAEX_N@Z @ 14 NONAME ; void QDeclarativeItem::wantsFocusChanged(bool) - ?getStaticMetaObject@QDeclarativeDebugService@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & QDeclarativeDebugService::getStaticMetaObject(void) - ?setLeft@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 16 NONAME ; void QDeclarativeAnchors::setLeft(class QDeclarativeAnchorLine const &) - ?qt_metacall@QDeclarativeExpression@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 17 NONAME ; int QDeclarativeExpression::qt_metacall(enum QMetaObject::Call, int, void * *) - ?staticMetaObject@QDeclarativePen@@2UQMetaObject@@B @ 18 NONAME ; struct QMetaObject const QDeclarativePen::staticMetaObject - ?transformOriginChanged@QDeclarativeItem@@IAEXW4TransformOrigin@1@@Z @ 19 NONAME ; void QDeclarativeItem::transformOriginChanged(enum QDeclarativeItem::TransformOrigin) - ?isStored@QMetaPropertyBuilder@@QBE_NXZ @ 20 NONAME ; bool QMetaPropertyBuilder::isStored(void) const - ?elapsed@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 21 NONAME ; long long QDeclarativeItemPrivate::elapsed(class QElapsedTimer &) - ?clearComponentCache@QDeclarativeEngine@@QAEXXZ @ 22 NONAME ; void QDeclarativeEngine::clearComponentCache(void) - ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 23 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *, int) - ??_EQDeclarativePixmapReply@@UAE@I@Z @ 24 NONAME ABSENT ; QDeclarativePixmapReply::~QDeclarativePixmapReply(unsigned int) - ??1QDeclarativeParserStatus@@UAE@XZ @ 25 NONAME ; QDeclarativeParserStatus::~QDeclarativeParserStatus(void) - ?gradient@QDeclarativeRectangle@@QBEPAVQDeclarativeGradient@@XZ @ 26 NONAME ; class QDeclarativeGradient * QDeclarativeRectangle::gradient(void) const - ?setReadable@QMetaPropertyBuilder@@QAEX_N@Z @ 27 NONAME ; void QMetaPropertyBuilder::setReadable(bool) - ?d_func@QDeclarativeExpression@@AAEPAVQDeclarativeExpressionPrivate@@XZ @ 28 NONAME ; class QDeclarativeExpressionPrivate * QDeclarativeExpression::d_func(void) - ??1QDeclarativeDomValueValueSource@@QAE@XZ @ 29 NONAME ; QDeclarativeDomValueValueSource::~QDeclarativeDomValueValueSource(void) - ??_EQDeclarativeStateGroup@@UAE@I@Z @ 30 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(unsigned int) - ?property@QDeclarativeDomObject@@QBE?AVQDeclarativeDomProperty@@ABVQByteArray@@@Z @ 31 NONAME ; class QDeclarativeDomProperty QDeclarativeDomObject::property(class QByteArray const &) const - ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 32 NONAME ; class QString QDeclarativeAnchors::tr(char const *, char const *, int) - ?location@QDeclarativeCustomParserNode@@QBE?AULocation@QDeclarativeParser@@XZ @ 33 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserNode::location(void) const - ??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@ABVQString@@PAVQObject@@@Z @ 34 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QString const &, class QObject *) - ?d_func@QDeclarativeContext@@AAEPAVQDeclarativeContextPrivate@@XZ @ 35 NONAME ; class QDeclarativeContextPrivate * QDeclarativeContext::d_func(void) - ?resetLeft@QDeclarativeAnchors@@QAEXXZ @ 36 NONAME ; void QDeclarativeAnchors::resetLeft(void) - ?staticMetaObject@QDeclarativePixmapReply@@2UQMetaObject@@B @ 37 NONAME ABSENT ; struct QMetaObject const QDeclarativePixmapReply::staticMetaObject - ?setOfflineStoragePath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 38 NONAME ; void QDeclarativeEngine::setOfflineStoragePath(class QString const &) - ?getStaticMetaObject@QListModelInterface@@SAABUQMetaObject@@XZ @ 39 NONAME ; struct QMetaObject const & QListModelInterface::getStaticMetaObject(void) - ?tr@QDeclarativeEngine@@SA?AVQString@@PBD0H@Z @ 40 NONAME ; class QString QDeclarativeEngine::tr(char const *, char const *, int) - ??0QDeclarativeEngine@@QAE@PAVQObject@@@Z @ 41 NONAME ; QDeclarativeEngine::QDeclarativeEngine(class QObject *) - ??0QDeclarativeDebugObjectReference@@QAE@ABV0@@Z @ 42 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(class QDeclarativeDebugObjectReference const &) - ?set@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 43 NONAME ; void QDeclarativeListModel::set(int, class QScriptValue const &) - ?tr@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 44 NONAME ; class QString QDeclarativeState::tr(char const *, char const *, int) - ?metaObject@QDeclarativeBinding@@UBEPBUQMetaObject@@XZ @ 45 NONAME ; struct QMetaObject const * QDeclarativeBinding::metaObject(void) const - ?setUser@QMetaPropertyBuilder@@QAEX_N@Z @ 46 NONAME ; void QMetaPropertyBuilder::setUser(bool) - ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 47 NONAME ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *) - ?setHorizontalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 48 NONAME ; void QDeclarativeAnchors::setHorizontalCenterOffset(float) - ??0QDeclarativeProperty@@QAE@XZ @ 49 NONAME ; QDeclarativeProperty::QDeclarativeProperty(void) - ?valueType@QDeclarativeValueTypeFactory@@SAPAVQDeclarativeValueType@@H@Z @ 50 NONAME ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::valueType(int) - ??1QDeclarativeText@@UAE@XZ @ 51 NONAME ; QDeclarativeText::~QDeclarativeText(void) - ?getStaticMetaObject@QDeclarativeText@@SAABUQMetaObject@@XZ @ 52 NONAME ; struct QMetaObject const & QDeclarativeText::getStaticMetaObject(void) - ?isDesignable@QMetaPropertyBuilder@@QBE_NXZ @ 53 NONAME ; bool QMetaPropertyBuilder::isDesignable(void) const - ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 54 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *, int) - ?errors@QDeclarativeView@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 55 NONAME ; class QList<class QDeclarativeError> QDeclarativeView::errors(void) const - ??0QPacket@@QAE@ABV0@@Z @ 56 NONAME ; QPacket::QPacket(class QPacket const &) - ??1QDeclarativeDebugObjectExpressionWatch@@UAE@XZ @ 57 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(void) - ?bottom@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 58 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::bottom(void) const - ??_EQDeclarativeDebugObjectQuery@@UAE@I@Z @ 59 NONAME ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(unsigned int) - ??0QDeclarativeDomObject@@QAE@XZ @ 60 NONAME ; QDeclarativeDomObject::QDeclarativeDomObject(void) - ?errors@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 61 NONAME ; class QList<class QDeclarativeError> QDeclarativeDomDocument::errors(void) const - ?toChanged@QDeclarativeTransition@@IAEXXZ @ 62 NONAME ; void QDeclarativeTransition::toChanged(void) - ?registerAutoParentFunction@QDeclarativePrivate@@YAHP6A?AW4AutoParentResult@1@PAVQObject@@0@Z@Z @ 63 NONAME ; int QDeclarativePrivate::registerAutoParentFunction(enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)) - ?objectOwnership@QDeclarativeEngine@@SA?AW4ObjectOwnership@1@PAVQObject@@@Z @ 64 NONAME ; enum QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(class QObject *) - ??0QDeclarativeDebugWatch@@QAE@PAVQObject@@@Z @ 65 NONAME ; QDeclarativeDebugWatch::QDeclarativeDebugWatch(class QObject *) - ?value@QDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 66 NONAME ; class QVariant QDeclarativePropertyMap::value(class QString const &) const - ?trUtf8@QDeclarativePropertyMap@@SA?AVQString@@PBD0@Z @ 67 NONAME ; class QString QDeclarativePropertyMap::trUtf8(char const *, char const *) - ?isWaiting@QDeclarativeDebugQuery@@QBE_NXZ @ 68 NONAME ; bool QDeclarativeDebugQuery::isWaiting(void) const - ??1Variant@QDeclarativeParser@@QAE@XZ @ 69 NONAME ; QDeclarativeParser::Variant::~Variant(void) - ??0Variant@QDeclarativeParser@@QAE@ABVQString@@@Z @ 70 NONAME ; QDeclarativeParser::Variant::Variant(class QString const &) - ?paintedSizeChanged@QDeclarativeText@@IAEXXZ @ 71 NONAME ; void QDeclarativeText::paintedSizeChanged(void) - ??1QDeclarativeDebugClient@@UAE@XZ @ 72 NONAME ; QDeclarativeDebugClient::~QDeclarativeDebugClient(void) - ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 73 NONAME ; class QString QPacketProtocol::trUtf8(char const *, char const *) - ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 74 NONAME ; class QString QDeclarativeListModel::trUtf8(char const *, char const *) - ?qt_metacast@QDeclarativeState@@UAEPAXPBD@Z @ 75 NONAME ; void * QDeclarativeState::qt_metacast(char const *) - ??1QDeclarativeDebugContextReference@@QAE@XZ @ 76 NONAME ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(void) - ?getStaticMetaObject@QDeclarativeStateOperation@@SAABUQMetaObject@@XZ @ 77 NONAME ; struct QMetaObject const & QDeclarativeStateOperation::getStaticMetaObject(void) - ?isInvalid@QDeclarativeDomValue@@QBE_NXZ @ 78 NONAME ; bool QDeclarativeDomValue::isInvalid(void) const - ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString QDeclarativeText::trUtf8(char const *, char const *, int) - ??0QDeclarativeListReference@@QAE@ABV0@@Z @ 80 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QDeclarativeListReference const &) - ?registerType@QDeclarativePrivate@@YAHABURegisterInterface@1@@Z @ 81 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterInterface const &) - ?classBegin@QDeclarativeItem@@MAEXXZ @ 82 NONAME ; void QDeclarativeItem::classBegin(void) - ?setTransformOrigin@QDeclarativeItem@@QAEXW4TransformOrigin@1@@Z @ 83 NONAME ; void QDeclarativeItem::setTransformOrigin(enum QDeclarativeItem::TransformOrigin) - ?request@QDeclarativePixmapCache@@SAPAVQDeclarativePixmapReply@@PAVQDeclarativeEngine@@ABVQUrl@@HH@Z @ 84 NONAME ABSENT ; class QDeclarativePixmapReply * QDeclarativePixmapCache::request(class QDeclarativeEngine *, class QUrl const &, int, int) - ?event@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 85 NONAME ; bool QDeclarativeItem::event(class QEvent *) - ?setAttributes@QMetaMethodBuilder@@QAEXH@Z @ 86 NONAME ; void QMetaMethodBuilder::setAttributes(int) - ??_EQDeclarativeDebugObjectReference@@QAE@I@Z @ 87 NONAME ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(unsigned int) - ?qt_metacall@QDeclarativeDebugQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 88 NONAME ; int QDeclarativeDebugQuery::qt_metacall(enum QMetaObject::Call, int, void * *) - ?findState@QDeclarativeStateGroup@@QBEPAVQDeclarativeState@@ABVQString@@@Z @ 89 NONAME ; class QDeclarativeState * QDeclarativeStateGroup::findState(class QString const &) const - ?asScript@Variant@QDeclarativeParser@@QBE?AVQString@@XZ @ 90 NONAME ; class QString QDeclarativeParser::Variant::asScript(void) const - ?qt_metacast@QDeclarativeExtensionPlugin@@UAEPAXPBD@Z @ 91 NONAME ; void * QDeclarativeExtensionPlugin::qt_metacast(char const *) - ?objectId@QDeclarativeDomObject@@QBE?AVQString@@XZ @ 92 NONAME ; class QString QDeclarativeDomObject::objectId(void) const - ?right@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 93 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::right(void) const - ?removeFromObject@QDeclarativeAbstractBinding@@QAEXXZ @ 94 NONAME ; void QDeclarativeAbstractBinding::removeFromObject(void) - ?resizeMode@QDeclarativeView@@QBE?AW4ResizeMode@1@XZ @ 95 NONAME ; enum QDeclarativeView::ResizeMode QDeclarativeView::resizeMode(void) const - ?object@QDeclarativeOpenMetaObject@@QBEPAVQObject@@XZ @ 96 NONAME ; class QObject * QDeclarativeOpenMetaObject::object(void) const - ?staticMetaObject@QDeclarativeBehavior@@2UQMetaObject@@B @ 97 NONAME ; struct QMetaObject const QDeclarativeBehavior::staticMetaObject - ?toObject@QDeclarativeDomValue@@QBE?AVQDeclarativeDomObject@@XZ @ 98 NONAME ; class QDeclarativeDomObject QDeclarativeDomValue::toObject(void) const - ?setLine@QDeclarativeError@@QAEXH@Z @ 99 NONAME ; void QDeclarativeError::setLine(int) - ??6QDeclarativeInfo@@QAEAAV0@K@Z @ 100 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned long) - ??0QDeclarativeDebugConnection@@QAE@PAVQObject@@@Z @ 101 NONAME ; QDeclarativeDebugConnection::QDeclarativeDebugConnection(class QObject *) - ?qt_metacast@QDeclarativeDebugQuery@@UAEPAXPBD@Z @ 102 NONAME ; void * QDeclarativeDebugQuery::qt_metacast(char const *) - ?isValid@QDeclarativeGridScaledImage@@QBE_NXZ @ 103 NONAME ; bool QDeclarativeGridScaledImage::isValid(void) const - ?qt_metacast@QDeclarativeContext@@UAEPAXPBD@Z @ 104 NONAME ; void * QDeclarativeContext::qt_metacast(char const *) - ?metaObject@QDeclarativeDebugClient@@UBEPBUQMetaObject@@XZ @ 105 NONAME ; struct QMetaObject const * QDeclarativeDebugClient::metaObject(void) const - ?transitions@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 106 NONAME ; class QDeclarativeListProperty<class QDeclarativeTransition> QDeclarativeItemPrivate::transitions(void) - ??0QDeclarativeDebugPropertyWatch@@QAE@PAVQObject@@@Z @ 107 NONAME ; QDeclarativeDebugPropertyWatch::QDeclarativeDebugPropertyWatch(class QObject *) - ??_EQDeclarativeDebugPropertyReference@@QAE@I@Z @ 108 NONAME ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(unsigned int) - ?itemsChanged@QListModelInterface@@IAEXHHABV?$QList@H@@@Z @ 109 NONAME ; void QListModelInterface::itemsChanged(int, int, class QList<int> const &) - ??6@YA?AVQDebug@@V0@PAVQDeclarativeItem@@@Z @ 110 NONAME ; class QDebug operator<<(class QDebug, class QDeclarativeItem *) - ?write@QDeclarativePropertyPrivate@@SA_NABVQDeclarativeProperty@@ABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 111 NONAME ; bool QDeclarativePropertyPrivate::write(class QDeclarativeProperty const &, class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ?verticalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 112 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::verticalTileRule(void) const - ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 113 NONAME ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *) - ?isDynamic@QMetaPropertyBuilder@@QBE_NXZ @ 114 NONAME ; bool QMetaPropertyBuilder::isDynamic(void) const - ?removeClassInfo@QMetaObjectBuilder@@QAEXH@Z @ 115 NONAME ; void QMetaObjectBuilder::removeClassInfo(int) - ?warnings@QDeclarativeEngine@@IAEXABV?$QList@VQDeclarativeError@@@@@Z @ 116 NONAME ; void QDeclarativeEngine::warnings(class QList<class QDeclarativeError> const &) - ?description@QDeclarativeError@@QBE?AVQString@@XZ @ 117 NONAME ; class QString QDeclarativeError::description(void) const - ?binding@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 118 NONAME ; class QString QDeclarativeDebugPropertyReference::binding(void) const - ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 119 NONAME ; class QString QDeclarativePen::trUtf8(char const *, char const *) - ?readValueProperty@QDeclarativePropertyPrivate@@QAE?AVQVariant@@XZ @ 120 NONAME ; class QVariant QDeclarativePropertyPrivate::readValueProperty(void) - ?propertyType@QDeclarativeDomDynamicProperty@@QBEHXZ @ 121 NONAME ; int QDeclarativeDomDynamicProperty::propertyType(void) const - ?gridBottom@QDeclarativeGridScaledImage@@QBEHXZ @ 122 NONAME ; int QDeclarativeGridScaledImage::gridBottom(void) const - ?setRadius@QDeclarativeRectangle@@QAEXM@Z @ 123 NONAME ; void QDeclarativeRectangle::setRadius(float) - ?d_func@QDeclarativeBehavior@@AAEPAVQDeclarativeBehaviorPrivate@@XZ @ 124 NONAME ; class QDeclarativeBehaviorPrivate * QDeclarativeBehavior::d_func(void) - ?isValid@QDeclarativePen@@QAE_NXZ @ 125 NONAME ; bool QDeclarativePen::isValid(void) - ?result@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 126 NONAME ; class QVariant QDeclarativeDebugExpressionQuery::result(void) const - ?isEnumOrFlag@QMetaPropertyBuilder@@QBE_NXZ @ 127 NONAME ; bool QMetaPropertyBuilder::isEnumOrFlag(void) const - ?addToObject@QDeclarativeAbstractBinding@@QAEXPAVQObject@@@Z @ 128 NONAME ; void QDeclarativeAbstractBinding::addToObject(class QObject *) - ?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0H@Z @ 129 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *, int) - ?d_func@QDeclarativeAnchors@@AAEPAVQDeclarativeAnchorsPrivate@@XZ @ 130 NONAME ; class QDeclarativeAnchorsPrivate * QDeclarativeAnchors::d_func(void) - ??1QPacket@@UAE@XZ @ 131 NONAME ; QPacket::~QPacket(void) - ?top@QDeclarativeScaleGrid@@QBEHXZ @ 132 NONAME ; int QDeclarativeScaleGrid::top(void) const - ?setExpression@QDeclarativeExpression@@QAEXABVQString@@@Z @ 133 NONAME ; void QDeclarativeExpression::setExpression(class QString const &) - ??1QDeclarativeDebugEngineReference@@QAE@XZ @ 134 NONAME ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(void) - ??0QDeclarativeStateOperation@@QAE@PAVQObject@@@Z @ 135 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObject *) - ?transform_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 136 NONAME ; void QDeclarativeItemPrivate::transform_clear(class QDeclarativeListProperty<class QGraphicsTransform> *) - ?staticMetaObject@QDeclarativeValueType@@2UQMetaObject@@B @ 137 NONAME ; struct QMetaObject const QDeclarativeValueType::staticMetaObject - ?propertyName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 138 NONAME ; class QByteArray QDeclarativeDomDynamicProperty::propertyName(void) const - ?getStaticMetaObject@QDeclarativePixmapReply@@SAABUQMetaObject@@XZ @ 139 NONAME ABSENT ; struct QMetaObject const & QDeclarativePixmapReply::getStaticMetaObject(void) - ?focusChanged@QDeclarativeItem@@IAEX_N@Z @ 140 NONAME ; void QDeclarativeItem::focusChanged(bool) - ?getStaticMetaObject@QDeclarativeBinding@@SAABUQMetaObject@@XZ @ 141 NONAME ; struct QMetaObject const & QDeclarativeBinding::getStaticMetaObject(void) - ?copy@QDeclarativeMetaType@@SA_NHPAXPBX@Z @ 142 NONAME ; bool QDeclarativeMetaType::copy(int, void *, void const *) - ?qt_metacall@QDeclarativeDebugEnginesQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 143 NONAME ; int QDeclarativeDebugEnginesQuery::qt_metacall(enum QMetaObject::Call, int, void * *) - ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 144 NONAME ; class QString QDeclarativeDebugWatch::tr(char const *, char const *) - ?setEnumOrFlag@QMetaPropertyBuilder@@QAEX_N@Z @ 145 NONAME ; void QMetaPropertyBuilder::setEnumOrFlag(bool) - ?getStaticMetaObject@QDeclarativeRectangle@@SAABUQMetaObject@@XZ @ 146 NONAME ; struct QMetaObject const & QDeclarativeRectangle::getStaticMetaObject(void) - ?isValid@QDeclarativeProperty@@QBE_NXZ @ 147 NONAME ; bool QDeclarativeProperty::isValid(void) const - ?isConnected@QDeclarativeDebugClient@@QBE_NXZ @ 148 NONAME ; bool QDeclarativeDebugClient::isConnected(void) const - ?enabled@QDeclarativeBinding@@QBE_NXZ @ 149 NONAME ; bool QDeclarativeBinding::enabled(void) const - ?setSource@QDeclarativeView@@QAEXABVQUrl@@@Z @ 150 NONAME ; void QDeclarativeView::setSource(class QUrl const &) - ??_EQDeclarativeDebugService@@UAE@I@Z @ 151 NONAME ; QDeclarativeDebugService::~QDeclarativeDebugService(unsigned int) - ??0QDeclarativeDomDynamicProperty@@QAE@ABV0@@Z @ 152 NONAME ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(class QDeclarativeDomDynamicProperty const &) - ?className@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 153 NONAME ; class QString QDeclarativeDebugObjectReference::className(void) const - ?indexOfSlot@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 154 NONAME ; int QMetaObjectBuilder::indexOfSlot(class QByteArray const &) - ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 155 NONAME ; class QString QDeclarativeDebugConnection::tr(char const *, char const *, int) - ?progressChanged@QDeclarativeComponent@@IAEXM@Z @ 156 NONAME ; void QDeclarativeComponent::progressChanged(float) - ?hasError@QDeclarativeExpression@@QBE_NXZ @ 157 NONAME ; bool QDeclarativeExpression::hasError(void) const - ?property@QMetaObjectBuilder@@QBE?AVQMetaPropertyBuilder@@H@Z @ 158 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::property(int) const - ?index@QDeclarativeType@@QBEHXZ @ 159 NONAME ; int QDeclarativeType::index(void) const - ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 160 NONAME ; class QString QDeclarativeRectangle::tr(char const *, char const *) - ?release@QDeclarativePixmapReply@@AAE_N_N@Z @ 161 NONAME ABSENT ; bool QDeclarativePixmapReply::release(bool) - ??0QDeclarativeScaleGrid@@QAE@PAVQObject@@@Z @ 162 NONAME ; QDeclarativeScaleGrid::QDeclarativeScaleGrid(class QObject *) - ?engines@QDeclarativeDebugEnginesQuery@@QBE?AV?$QList@VQDeclarativeDebugEngineReference@@@@XZ @ 163 NONAME ; class QList<class QDeclarativeDebugEngineReference> QDeclarativeDebugEnginesQuery::engines(void) const - ?qt_metacall@QDeclarativeDebugPropertyWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 164 NONAME ; int QDeclarativeDebugPropertyWatch::qt_metacall(enum QMetaObject::Call, int, void * *) - ?metaObject@QDeclarativeAnchors@@UBEPBUQMetaObject@@XZ @ 165 NONAME ; struct QMetaObject const * QDeclarativeAnchors::metaObject(void) const - ?sceneResized@QDeclarativeView@@IAEXVQSize@@@Z @ 166 NONAME ; void QDeclarativeView::sceneResized(class QSize) - ?subFocusItemChange@QDeclarativeItemPrivate@@UAEXXZ @ 167 NONAME ; void QDeclarativeItemPrivate::subFocusItemChange(void) - ?hasNotifySignal@QDeclarativeDebugPropertyReference@@QBE_NXZ @ 168 NONAME ; bool QDeclarativeDebugPropertyReference::hasNotifySignal(void) const - ?addSlot@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 169 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addSlot(class QByteArray const &) - ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 170 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *) - ?propertyCreated@QDeclarativeOpenMetaObjectType@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 171 NONAME ; void QDeclarativeOpenMetaObjectType::propertyCreated(int, class QMetaPropertyBuilder &) - ??1QDeclarativeItemPrivate@@UAE@XZ @ 172 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(void) - ?clear@QDeclarativePropertyMap@@QAEXABVQString@@@Z @ 173 NONAME ; void QDeclarativePropertyMap::clear(class QString const &) - ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 174 NONAME ; class QString QDeclarativeDebugClient::tr(char const *, char const *, int) - ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@PAVQDeclarativeEngine@@@Z @ 175 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &, class QDeclarativeEngine *) - ?insert@QDeclarativePropertyMap@@QAEXABVQString@@ABVQVariant@@@Z @ 176 NONAME ; void QDeclarativePropertyMap::insert(class QString const &, class QVariant const &) - ??1QDeclarativeContext@@UAE@XZ @ 177 NONAME ; QDeclarativeContext::~QDeclarativeContext(void) - ?operationCount@QDeclarativeState@@QBEHXZ @ 178 NONAME ; int QDeclarativeState::operationCount(void) const - ?getStaticMetaObject@QDeclarativeItem@@SAABUQMetaObject@@XZ @ 179 NONAME ; struct QMetaObject const & QDeclarativeItem::getStaticMetaObject(void) - ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 180 NONAME ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *, int) - ?status@QDeclarativeComponent@@QBE?AW4Status@1@XZ @ 181 NONAME ; enum QDeclarativeComponent::Status QDeclarativeComponent::status(void) const - ?boundingRect@QDeclarativeItem@@UBE?AVQRectF@@XZ @ 182 NONAME ; class QRectF QDeclarativeItem::boundingRect(void) const - ?availableInVersion@QDeclarativeType@@QBE_NHH@Z @ 183 NONAME ; bool QDeclarativeType::availableInVersion(int, int) const - ?getStaticMetaObject@QDeclarativeDebugWatch@@SAABUQMetaObject@@XZ @ 184 NONAME ; struct QMetaObject const & QDeclarativeDebugWatch::getStaticMetaObject(void) - ??_EQDeclarativeRectangle@@UAE@I@Z @ 185 NONAME ; QDeclarativeRectangle::~QDeclarativeRectangle(unsigned int) - ?setTopMargin@QDeclarativeAnchors@@QAEXM@Z @ 186 NONAME ; void QDeclarativeAnchors::setTopMargin(float) - ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 187 NONAME ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &) - ??1QDeclarativeValueTypeFactory@@QAE@XZ @ 188 NONAME ; QDeclarativeValueTypeFactory::~QDeclarativeValueTypeFactory(void) - ?metaObject@QDeclarativeDebugObjectExpressionWatch@@UBEPBUQMetaObject@@XZ @ 189 NONAME ; struct QMetaObject const * QDeclarativeDebugObjectExpressionWatch::metaObject(void) const - ??0QDeclarativeComponent@@QAE@PAVQObject@@@Z @ 190 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QObject *) - ?qt_metacast@QDeclarativeItem@@UAEPAXPBD@Z @ 191 NONAME ; void * QDeclarativeItem::qt_metacast(char const *) - ?changes@QDeclarativeState@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeStateOperation@@@@XZ @ 192 NONAME ; class QDeclarativeListProperty<class QDeclarativeStateOperation> QDeclarativeState::changes(void) - ?resizeEvent@QDeclarativeView@@MAEXPAVQResizeEvent@@@Z @ 193 NONAME ; void QDeclarativeView::resizeEvent(class QResizeEvent *) - ?d_func@QDeclarativeBinding@@ABEPBVQDeclarativeBindingPrivate@@XZ @ 194 NONAME ; class QDeclarativeBindingPrivate const * QDeclarativeBinding::d_func(void) const - ?wrapMode@QDeclarativeText@@QBE?AW4WrapMode@1@XZ @ 195 NONAME ; enum QDeclarativeText::WrapMode QDeclarativeText::wrapMode(void) const - ?centerIn@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 196 NONAME ; class QGraphicsObject * QDeclarativeAnchors::centerIn(void) const - ??0QDeclarativeType@@AAE@HABURegisterType@QDeclarativePrivate@@@Z @ 197 NONAME ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterType const &) - ?trUtf8@QDeclarativeComponent@@SA?AVQString@@PBD0H@Z @ 198 NONAME ; class QString QDeclarativeComponent::trUtf8(char const *, char const *, int) - ??0QMetaObjectBuilder@@QAE@PBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 199 NONAME ; QMetaObjectBuilder::QMetaObjectBuilder(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>) - ?quit@QDeclarativeEngine@@IAEXXZ @ 200 NONAME ; void QDeclarativeEngine::quit(void) - ??0QMetaEnumBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 201 NONAME ; QMetaEnumBuilder::QMetaEnumBuilder(class QMetaObjectBuilder const *, int) - ?setBottom@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 202 NONAME ; void QDeclarativeAnchors::setBottom(class QDeclarativeAnchorLine const &) - ??0QDeclarativeCustomParser@@QAE@XZ @ 203 NONAME ; QDeclarativeCustomParser::QDeclarativeCustomParser(void) - ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 204 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(class QByteArray const &) const - ?styleColor@QDeclarativeText@@QBE?AVQColor@@XZ @ 205 NONAME ; class QColor QDeclarativeText::styleColor(void) const - ?centerInChanged@QDeclarativeAnchors@@IAEXXZ @ 206 NONAME ; void QDeclarativeAnchors::centerInChanged(void) - ?colorChanged@QDeclarativeRectangle@@IAEXXZ @ 207 NONAME ; void QDeclarativeRectangle::colorChanged(void) - ??0QDeclarativePropertyPrivate@@QAE@ABV0@@Z @ 208 NONAME ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(class QDeclarativePropertyPrivate const &) - ?loadUrl@QDeclarativeComponent@@QAEXABVQUrl@@@Z @ 209 NONAME ; void QDeclarativeComponent::loadUrl(class QUrl const &) - ?beginCreate@QDeclarativeComponent@@UAEPAVQObject@@PAVQDeclarativeContext@@@Z @ 210 NONAME ; class QObject * QDeclarativeComponent::beginCreate(class QDeclarativeContext *) - ?setRight@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 211 NONAME ; void QDeclarativeAnchors::setRight(class QDeclarativeAnchorLine const &) - ?needsNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 212 NONAME ; bool QDeclarativeProperty::needsNotifySignal(void) const - ?fill@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 213 NONAME ; class QGraphicsObject * QDeclarativeAnchors::fill(void) const - ?url@QDeclarativePixmapReply@@QBEABVQUrl@@XZ @ 214 NONAME ABSENT ; class QUrl const & QDeclarativePixmapReply::url(void) const - ?top@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 215 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::top(void) const - ?clear@QDeclarativeListReference@@QBE_NXZ @ 216 NONAME ; bool QDeclarativeListReference::clear(void) const - ?parentChanged@QDeclarativeItem@@IAEXPAV1@@Z @ 217 NONAME ; void QDeclarativeItem::parentChanged(class QDeclarativeItem *) - ?columnNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 218 NONAME ; int QDeclarativeDebugFileReference::columnNumber(void) const - ??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 219 NONAME ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *) - ?apply@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@PAVQDeclarativeTransition@@PAV1@@Z @ 220 NONAME ; void QDeclarativeState::apply(class QDeclarativeStateGroup *, class QDeclarativeTransition *, class QDeclarativeState *) - ?isValid@QDeclarativeDomProperty@@QBE_NXZ @ 221 NONAME ; bool QDeclarativeDomProperty::isValid(void) const - ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 222 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *) - ?statusChanged@QDeclarativeView@@IAEXW4Status@1@@Z @ 223 NONAME ; void QDeclarativeView::statusChanged(enum QDeclarativeView::Status) - ?componentComplete@QDeclarativeText@@UAEXXZ @ 224 NONAME ; void QDeclarativeText::componentComplete(void) - ?canCount@QDeclarativeListReference@@QBE_NXZ @ 225 NONAME ; bool QDeclarativeListReference::canCount(void) const - ??1QListModelInterface@@UAE@XZ @ 226 NONAME ; QListModelInterface::~QListModelInterface(void) - ??0QDeclarativeAnchors@@QAE@PAVQObject@@@Z @ 227 NONAME ; QDeclarativeAnchors::QDeclarativeAnchors(class QObject *) - ?resources_at@QDeclarativeItemPrivate@@SAPAVQObject@@PAV?$QDeclarativeListProperty@VQObject@@@@H@Z @ 228 NONAME ; class QObject * QDeclarativeItemPrivate::resources_at(class QDeclarativeListProperty<class QObject> *, int) - ?isExtendedType@QDeclarativeType@@QBE_NXZ @ 229 NONAME ; bool QDeclarativeType::isExtendedType(void) const - ?top@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 230 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::top(void) const - ??0QDeclarativePropertyMap@@QAE@PAVQObject@@@Z @ 231 NONAME ; QDeclarativePropertyMap::QDeclarativePropertyMap(class QObject *) - ??0QDeclarativeExpression@@IAE@PAVQDeclarativeContextData@@PAXPAVQDeclarativeRefCount@@PAVQObject@@ABVQString@@HAAVQDeclarativeExpressionPrivate@@@Z @ 232 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, void *, class QDeclarativeRefCount *, class QObject *, class QString const &, int, class QDeclarativeExpressionPrivate &) - ?setColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 233 NONAME ; void QDeclarativeText::setColor(class QColor const &) - ?hasStdCppSet@QMetaPropertyBuilder@@QBE_NXZ @ 234 NONAME ; bool QMetaPropertyBuilder::hasStdCppSet(void) const - ??0QDeclarativeDebugFileReference@@QAE@ABV0@@Z @ 235 NONAME ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(class QDeclarativeDebugFileReference const &) - ?toValueInterceptor@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueInterceptor@@XZ @ 236 NONAME ; class QDeclarativeDomValueValueInterceptor QDeclarativeDomValue::toValueInterceptor(void) const - ??0QDeclarativeDebugEngineReference@@QAE@H@Z @ 237 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(int) - ?state@QDeclarativeItemPrivate@@QBE?AVQString@@XZ @ 238 NONAME ; class QString QDeclarativeItemPrivate::state(void) const - ??1QDeclarativePropertyValueInterceptor@@UAE@XZ @ 239 NONAME ; QDeclarativePropertyValueInterceptor::~QDeclarativePropertyValueInterceptor(void) - ?getStaticMetaObject@QDeclarativePropertyMap@@SAABUQMetaObject@@XZ @ 240 NONAME ; struct QMetaObject const & QDeclarativePropertyMap::getStaticMetaObject(void) - ??1QDeclarativeScaleGrid@@UAE@XZ @ 241 NONAME ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(void) - ?idString@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 242 NONAME ; class QString QDeclarativeDebugObjectReference::idString(void) const - ?customTypeData@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 243 NONAME ; class QByteArray QDeclarativeDomObject::customTypeData(void) const - ?stop@QDeclarativeTransition@@QAEXXZ @ 244 NONAME ; void QDeclarativeTransition::stop(void) - ?data@QDeclarativeListModel@@UBE?AV?$QHash@HVQVariant@@@@HABV?$QList@H@@@Z @ 245 NONAME ; class QHash<int, class QVariant> QDeclarativeListModel::data(int, class QList<int> const &) const - ?verticalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 246 NONAME ; float QDeclarativeAnchors::verticalCenterOffset(void) const - ?metaObject@QDeclarativeText@@UBEPBUQMetaObject@@XZ @ 247 NONAME ; struct QMetaObject const * QDeclarativeText::metaObject(void) const - ??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@PAVQObject@@@Z @ 248 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QObject *) - ?createProperty@QDeclarativeOpenMetaObjectType@@QAEHABVQByteArray@@@Z @ 249 NONAME ; int QDeclarativeOpenMetaObjectType::createProperty(class QByteArray const &) - ??0QDeclarativeContext@@QAE@PAVQDeclarativeEngine@@PAVQObject@@@Z @ 250 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeEngine *, class QObject *) - ??6QDeclarativeInfo@@QAEAAV0@M@Z @ 251 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(float) - ??4QDeclarativeDomValueLiteral@@QAEAAV0@ABV0@@Z @ 252 NONAME ; class QDeclarativeDomValueLiteral & QDeclarativeDomValueLiteral::operator=(class QDeclarativeDomValueLiteral const &) - ?setScript@QDeclarativeScriptString@@QAEXABVQString@@@Z @ 253 NONAME ; void QDeclarativeScriptString::setScript(class QString const &) - ?qt_metacast@QPacketProtocol@@UAEPAXPBD@Z @ 254 NONAME ; void * QPacketProtocol::qt_metacast(char const *) - ?addMetaObject@QMetaObjectBuilder@@QAEXPBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 255 NONAME ; void QMetaObjectBuilder::addMetaObject(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>) - ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 256 NONAME ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *, int) - ?qt_metacast@QDeclarativeText@@UAEPAXPBD@Z @ 257 NONAME ; void * QDeclarativeText::qt_metacast(char const *) - ?anchors@QDeclarativeItemPrivate@@QAEPAVQDeclarativeAnchors@@XZ @ 258 NONAME ; class QDeclarativeAnchors * QDeclarativeItemPrivate::anchors(void) - ??0QListModelInterface@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 259 NONAME ; QListModelInterface::QListModelInterface(class QObjectPrivate &, class QObject *) - ?valueTypeName@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 260 NONAME ; class QString QDeclarativeDebugPropertyReference::valueTypeName(void) const - ?setStyleColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 261 NONAME ; void QDeclarativeText::setStyleColor(class QColor const &) - ?create@QDeclarativeType@@QBEPAVQObject@@XZ @ 262 NONAME ; class QObject * QDeclarativeType::create(void) const - ?metaObject@QDeclarativeDebugExpressionQuery@@UBEPBUQMetaObject@@XZ @ 263 NONAME ; struct QMetaObject const * QDeclarativeDebugExpressionQuery::metaObject(void) const - ?readyRead@QPacketProtocol@@IAEXXZ @ 264 NONAME ; void QPacketProtocol::readyRead(void) - ?qt_metacall@QDeclarativeValueType@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 265 NONAME ; int QDeclarativeValueType::qt_metacall(enum QMetaObject::Call, int, void * *) - ?propertyType@QDeclarativePropertyPrivate@@QBEHXZ @ 266 NONAME ; int QDeclarativePropertyPrivate::propertyType(void) const - ?engine@QDeclarativeView@@QAEPAVQDeclarativeEngine@@XZ @ 267 NONAME ; class QDeclarativeEngine * QDeclarativeView::engine(void) - ?inputMethodQuery@QDeclarativeItem@@MBE?AVQVariant@@W4InputMethodQuery@Qt@@@Z @ 268 NONAME ; class QVariant QDeclarativeItem::inputMethodQuery(enum Qt::InputMethodQuery) const - ?sizeHint@QDeclarativeView@@UBE?AVQSize@@XZ @ 269 NONAME ; class QSize QDeclarativeView::sizeHint(void) const - ?flags@QDeclarativeCustomParser@@QBE?AV?$QFlags@W4Flag@QDeclarativeCustomParser@@@@XZ @ 270 NONAME ; class QFlags<enum QDeclarativeCustomParser::Flag> QDeclarativeCustomParser::flags(void) const - ?staticMetaObject@QDeclarativeDebugObjectExpressionWatch@@2UQMetaObject@@B @ 271 NONAME ; struct QMetaObject const QDeclarativeDebugObjectExpressionWatch::staticMetaObject - ??0QDeclarativeDebugPropertyReference@@QAE@ABV0@@Z @ 272 NONAME ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(class QDeclarativeDebugPropertyReference const &) - ??_EQDeclarativeCustomParser@@UAE@I@Z @ 273 NONAME ; QDeclarativeCustomParser::~QDeclarativeCustomParser(unsigned int) - ??6QDeclarativeInfo@@QAEAAV0@ABVQStringRef@@@Z @ 274 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QStringRef const &) - ?values@QDeclarativeDomList@@QBE?AV?$QList@VQDeclarativeDomValue@@@@XZ @ 275 NONAME ; class QList<class QDeclarativeDomValue> QDeclarativeDomList::values(void) const - ?errorString@QDeclarativeComponent@@QBE?AVQString@@XZ @ 276 NONAME ; class QString QDeclarativeComponent::errorString(void) const - ?metaObject@QDeclarativeEngineDebug@@UBEPBUQMetaObject@@XZ @ 277 NONAME ; struct QMetaObject const * QDeclarativeEngineDebug::metaObject(void) const - ??1QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 278 NONAME ; QDeclarativeDomValueValueInterceptor::~QDeclarativeDomValueValueInterceptor(void) - ?flatten@QDeclarativeListModel@@AAE_NXZ @ 279 NONAME ; bool QDeclarativeListModel::flatten(void) - ?propertyCount@QMetaObjectBuilder@@QBEHXZ @ 280 NONAME ; int QMetaObjectBuilder::propertyCount(void) const - ?method@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 281 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::method(int) const - ?textFormat@QDeclarativeText@@QBE?AW4TextFormat@1@XZ @ 282 NONAME ; enum QDeclarativeText::TextFormat QDeclarativeText::textFormat(void) const - ?getStaticMetaObject@QDeclarativeDebugObjectExpressionWatch@@SAABUQMetaObject@@XZ @ 283 NONAME ; struct QMetaObject const & QDeclarativeDebugObjectExpressionWatch::getStaticMetaObject(void) - ?write@QDeclarativeBehavior@@UAEXABVQVariant@@@Z @ 284 NONAME ; void QDeclarativeBehavior::write(class QVariant const &) - ?resetTop@QDeclarativeAnchors@@QAEXXZ @ 285 NONAME ; void QDeclarativeAnchors::resetTop(void) - ?queryId@QDeclarativeDebugWatch@@QBEHXZ @ 286 NONAME ; int QDeclarativeDebugWatch::queryId(void) const - ?trUtf8@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 287 NONAME ; class QString QDeclarativeExtensionPlugin::trUtf8(char const *, char const *, int) - ?staticMetaObject@QDeclarativeComponent@@2UQMetaObject@@B @ 288 NONAME ; struct QMetaObject const QDeclarativeComponent::staticMetaObject - ?setStateGroup@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@@Z @ 289 NONAME ; void QDeclarativeState::setStateGroup(class QDeclarativeStateGroup *) - ?access@QMetaMethodBuilder@@QBE?AW4Access@QMetaMethod@@XZ @ 290 NONAME ; enum QMetaMethod::Access QMetaMethodBuilder::access(void) const - ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 291 NONAME ; class QString QDeclarativeDebugQuery::tr(char const *, char const *) - ?attachedPropertiesType@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 292 NONAME ; struct QMetaObject const * QDeclarativeType::attachedPropertiesType(void) const - ?setName@QDeclarativeState@@QAEXABVQString@@@Z @ 293 NONAME ; void QDeclarativeState::setName(class QString const &) - ?setReversed@QDeclarativeTransition@@QAEX_N@Z @ 294 NONAME ; void QDeclarativeTransition::setReversed(bool) - ?idForObject@QDeclarativeDebugService@@SAHPAVQObject@@@Z @ 295 NONAME ; int QDeclarativeDebugService::idForObject(class QObject *) - ?qt_metacall@QDeclarativeDebugWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 296 NONAME ; int QDeclarativeDebugWatch::qt_metacall(enum QMetaObject::Call, int, void * *) - ?fromState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 297 NONAME ; class QString QDeclarativeTransition::fromState(void) const - ??1QDeclarativeExpression@@UAE@XZ @ 298 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(void) - ?binding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@@Z @ 299 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::binding(class QDeclarativeProperty const &) - ?removeMethod@QMetaObjectBuilder@@QAEXH@Z @ 300 NONAME ; void QMetaObjectBuilder::removeMethod(int) - ?get@QDeclarativePixmapCache@@SA?AW4Status@QDeclarativePixmapReply@@ABVQUrl@@PAVQPixmap@@PAVQString@@PAVQSize@@_NHH@Z @ 301 NONAME ABSENT ; enum QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(class QUrl const &, class QPixmap *, class QString *, class QSize *, bool, int, int) - ?operationAt@QDeclarativeState@@QBEPAVQDeclarativeStateOperation@@H@Z @ 302 NONAME ; class QDeclarativeStateOperation * QDeclarativeState::operationAt(int) const - ?methodCount@QMetaObjectBuilder@@QBEHXZ @ 303 NONAME ; int QMetaObjectBuilder::methodCount(void) const - ?font@QDeclarativeText@@QBE?AVQFont@@XZ @ 304 NONAME ; class QFont QDeclarativeText::font(void) const - ?completeCreate@QDeclarativeComponent@@UAEXXZ @ 305 NONAME ; void QDeclarativeComponent::completeCreate(void) - ??0QDeclarativeDomProperty@@QAE@XZ @ 306 NONAME ; QDeclarativeDomProperty::QDeclarativeDomProperty(void) - ?initDefault@QDeclarativePropertyPrivate@@QAEXPAVQObject@@@Z @ 307 NONAME ; void QDeclarativePropertyPrivate::initDefault(class QObject *) - ?count@QDeclarativeListModel@@UBEHXZ @ 308 NONAME ; int QDeclarativeListModel::count(void) const - ?setSmooth@QDeclarativeItem@@QAEX_N@Z @ 309 NONAME ; void QDeclarativeItem::setSmooth(bool) - ?value@QDeclarativeDebugPropertyReference@@QBE?AVQVariant@@XZ @ 310 NONAME ; class QVariant QDeclarativeDebugPropertyReference::value(void) const - ?resources@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQObject@@@@XZ @ 311 NONAME ; class QDeclarativeListProperty<class QObject> QDeclarativeItemPrivate::resources(void) - ?clear@QPacketProtocol@@QAEXXZ @ 312 NONAME ; void QPacketProtocol::clear(void) - ?setState@QDeclarativeItemPrivate@@QAEXABVQString@@@Z @ 313 NONAME ; void QDeclarativeItemPrivate::setState(class QString const &) - ??4QDeclarativeDebugPropertyReference@@QAEAAV0@ABV0@@Z @ 314 NONAME ; class QDeclarativeDebugPropertyReference & QDeclarativeDebugPropertyReference::operator=(class QDeclarativeDebugPropertyReference const &) - ?metaObject@QDeclarativeView@@UBEPBUQMetaObject@@XZ @ 315 NONAME ; struct QMetaObject const * QDeclarativeView::metaObject(void) const - ?listElementType@QDeclarativeListReference@@QBEPBUQMetaObject@@XZ @ 316 NONAME ; struct QMetaObject const * QDeclarativeListReference::listElementType(void) const - ??0QDeclarativeProperty@@QAE@PAVQObject@@PAVQDeclarativeContext@@@Z @ 317 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QDeclarativeContext *) - ?setTarget@QDeclarativeBehavior@@UAEXABVQDeclarativeProperty@@@Z @ 318 NONAME ; void QDeclarativeBehavior::setTarget(class QDeclarativeProperty const &) - ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 319 NONAME ; class QString QDeclarativeValueType::tr(char const *, char const *, int) - ?parent@QDeclarativeOpenMetaObject@@IBEPAUQAbstractDynamicMetaObject@@XZ @ 320 NONAME ; struct QAbstractDynamicMetaObject * QDeclarativeOpenMetaObject::parent(void) const - ??0QDeclarativeDebugClient@@QAE@ABVQString@@PAVQDeclarativeDebugConnection@@@Z @ 321 NONAME ; QDeclarativeDebugClient::QDeclarativeDebugClient(class QString const &, class QDeclarativeDebugConnection *) - ?qt_metacall@QDeclarativeStateOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 322 NONAME ; int QDeclarativeStateOperation::qt_metacall(enum QMetaObject::Call, int, void * *) - ?type@Variant@QDeclarativeParser@@QBE?AW4Type@12@XZ @ 323 NONAME ; enum QDeclarativeParser::Variant::Type QDeclarativeParser::Variant::type(void) const - ??6QDeclarativeInfo@@QAEAAV0@_N@Z @ 324 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(bool) - ?value@QDeclarativeDomProperty@@QBE?AVQDeclarativeDomValue@@XZ @ 325 NONAME ; class QDeclarativeDomValue QDeclarativeDomProperty::value(void) const - ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectExpressionWatch@@ABVQDeclarativeDebugObjectReference@@ABVQString@@PAVQObject@@@Z @ 326 NONAME ; class QDeclarativeDebugObjectExpressionWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QString const &, class QObject *) - ??_EQDeclarativeDebugConnection@@UAE@I@Z @ 327 NONAME ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(unsigned int) - ?qt_metacall@QDeclarativeDebugConnection@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 328 NONAME ; int QDeclarativeDebugConnection::qt_metacall(enum QMetaObject::Call, int, void * *) - ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 329 NONAME ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *, int) - ?errors@QDeclarativeComponent@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 330 NONAME ; class QList<class QDeclarativeError> QDeclarativeComponent::errors(void) const - ??0QDeclarativeCustomParserNode@@QAE@ABV0@@Z @ 331 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(class QDeclarativeCustomParserNode const &) - ??1QDeclarativeImageProvider@@UAE@XZ @ 332 NONAME ; QDeclarativeImageProvider::~QDeclarativeImageProvider(void) - ?sync@QDeclarativeListModel@@QAEXXZ @ 333 NONAME ; void QDeclarativeListModel::sync(void) - ?objectForId@QDeclarativeDebugService@@SAPAVQObject@@H@Z @ 334 NONAME ; class QObject * QDeclarativeDebugService::objectForId(int) - ?hasFocus@QDeclarativeItem@@QBE_NXZ @ 335 NONAME ; bool QDeclarativeItem::hasFocus(void) const - ??1QDeclarativeExtensionPlugin@@UAE@XZ @ 336 NONAME ; QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin(void) - ?qt_metacall@QDeclarativeBehavior@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 337 NONAME ; int QDeclarativeBehavior::qt_metacall(enum QMetaObject::Call, int, void * *) - ?d_func@QDeclarativeBehavior@@ABEPBVQDeclarativeBehaviorPrivate@@XZ @ 338 NONAME ; class QDeclarativeBehaviorPrivate const * QDeclarativeBehavior::d_func(void) const - ?wrapModeChanged@QDeclarativeText@@IAEXXZ @ 339 NONAME ; void QDeclarativeText::wrapModeChanged(void) - ?elideModeChanged@QDeclarativeText@@IAEXW4TextElideMode@1@@Z @ 340 NONAME ; void QDeclarativeText::elideModeChanged(enum QDeclarativeText::TextElideMode) - ??1QDeclarativeExtensionInterface@@UAE@XZ @ 341 NONAME ; QDeclarativeExtensionInterface::~QDeclarativeExtensionInterface(void) - ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQMetaEnum@@@Z @ 342 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QMetaEnum const &) - ?interfaceIId@QDeclarativeType@@QBEPBDXZ @ 343 NONAME ; char const * QDeclarativeType::interfaceIId(void) const - ?resetHorizontalCenter@QDeclarativeAnchors@@QAEXXZ @ 344 NONAME ; void QDeclarativeAnchors::resetHorizontalCenter(void) - ?outputWarningsToStandardError@QDeclarativeEngine@@QBE_NXZ @ 345 NONAME ; bool QDeclarativeEngine::outputWarningsToStandardError(void) const - ?getStaticMetaObject@QDeclarativeBehavior@@SAABUQMetaObject@@XZ @ 346 NONAME ; struct QMetaObject const & QDeclarativeBehavior::getStaticMetaObject(void) - ??0QMetaEnumBuilder@@QAE@XZ @ 347 NONAME ; QMetaEnumBuilder::QMetaEnumBuilder(void) - ?isValueType@QDeclarativeValueTypeFactory@@SA_NH@Z @ 348 NONAME ; bool QDeclarativeValueTypeFactory::isValueType(int) - ?setWidth@QDeclarativePen@@QAEXH@Z @ 349 NONAME ; void QDeclarativePen::setWidth(int) - ?isReadable@QMetaPropertyBuilder@@QBE_NXZ @ 350 NONAME ; bool QMetaPropertyBuilder::isReadable(void) const - ?metaObject@QDeclarativeExpression@@UBEPBUQMetaObject@@XZ @ 351 NONAME ; struct QMetaObject const * QDeclarativeExpression::metaObject(void) const - ??0QDeclarativeDomValueLiteral@@QAE@ABV0@@Z @ 352 NONAME ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(class QDeclarativeDomValueLiteral const &) - ?getStaticMetaObject@QDeclarativeDebugQuery@@SAABUQMetaObject@@XZ @ 353 NONAME ; struct QMetaObject const & QDeclarativeDebugQuery::getStaticMetaObject(void) - ??0QDeclarativeDomComponent@@QAE@XZ @ 354 NONAME ; QDeclarativeDomComponent::QDeclarativeDomComponent(void) - ??1QDeclarativePropertyPrivate@@QAE@XZ @ 355 NONAME ; QDeclarativePropertyPrivate::~QDeclarativePropertyPrivate(void) - ?setBaselineOffset@QDeclarativeItem@@QAEXM@Z @ 356 NONAME ; void QDeclarativeItem::setBaselineOffset(float) - ??0QDeclarativeDebugPropertyReference@@QAE@XZ @ 357 NONAME ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(void) - ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 358 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *, int) - ?setState@QDeclarativeStateGroup@@QAEXABVQString@@@Z @ 359 NONAME ; void QDeclarativeStateGroup::setState(class QString const &) - ??_EQDeclarativeImageProvider@@UAE@I@Z @ 360 NONAME ; QDeclarativeImageProvider::~QDeclarativeImageProvider(unsigned int) - ?trUtf8@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 361 NONAME ; class QString QDeclarativeComponent::trUtf8(char const *, char const *) - ?isLoading@QDeclarativeComponent@@QBE_NXZ @ 362 NONAME ; bool QDeclarativeComponent::isLoading(void) const - ?createFunction@QDeclarativeType@@QBEP6AXPAX@ZXZ @ 363 NONAME ; void (*)(void *) QDeclarativeType::createFunction(void) const - ?childrenRect@QDeclarativeItem@@QAE?AVQRectF@@XZ @ 364 NONAME ; class QRectF QDeclarativeItem::childrenRect(void) - ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 365 NONAME ; class QString QDeclarativeEngineDebug::tr(char const *, char const *) - ?objectTypeMajorVersion@QDeclarativeDomObject@@QBEHXZ @ 366 NONAME ; int QDeclarativeDomObject::objectTypeMajorVersion(void) const - ??6QDeclarativeInfo@@QAEAAV0@D@Z @ 367 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(char) - ??1QDeclarativeDomValueLiteral@@QAE@XZ @ 368 NONAME ; QDeclarativeDomValueLiteral::~QDeclarativeDomValueLiteral(void) - ?keepMouseGrab@QDeclarativeItem@@QBE_NXZ @ 369 NONAME ; bool QDeclarativeItem::keepMouseGrab(void) const - ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 370 NONAME ; class QString QDeclarativeEngineDebug::tr(char const *, char const *, int) - ?getStaticMetaObject@QDeclarativeDebugConnection@@SAABUQMetaObject@@XZ @ 371 NONAME ; struct QMetaObject const & QDeclarativeDebugConnection::getStaticMetaObject(void) - ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 372 NONAME ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *) - ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@H@Z @ 373 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](int) - ??0Variant@QDeclarativeParser@@QAE@XZ @ 374 NONAME ; QDeclarativeParser::Variant::Variant(void) - ?status@QDeclarativeView@@QBE?AW4Status@1@XZ @ 375 NONAME ; enum QDeclarativeView::Status QDeclarativeView::status(void) const - ??0QDeclarativeEngineDebug@@QAE@PAVQDeclarativeDebugConnection@@PAVQObject@@@Z @ 376 NONAME ; QDeclarativeEngineDebug::QDeclarativeEngineDebug(class QDeclarativeDebugConnection *, class QObject *) - ?create@QDeclarativeComponent@@UAEPAVQObject@@PAVQDeclarativeContext@@@Z @ 377 NONAME ; class QObject * QDeclarativeComponent::create(class QDeclarativeContext *) - ??_EQPacket@@UAE@I@Z @ 378 NONAME ; QPacket::~QPacket(unsigned int) - ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 379 NONAME ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *, int) - ?isResettable@QDeclarativeProperty@@QBE_NXZ @ 380 NONAME ; bool QDeclarativeProperty::isResettable(void) const - ?isList@QDeclarativeCustomParserProperty@@QBE_NXZ @ 381 NONAME ; bool QDeclarativeCustomParserProperty::isList(void) const - ?resetVerticalCenter@QDeclarativeAnchors@@QAEXXZ @ 382 NONAME ; void QDeclarativeAnchors::resetVerticalCenter(void) - ??0QDeclarativeValueType@@QAE@PAVQObject@@@Z @ 383 NONAME ; QDeclarativeValueType::QDeclarativeValueType(class QObject *) - ?staticMetaObject@QDeclarativeDebugConnection@@2UQMetaObject@@B @ 384 NONAME ; struct QMetaObject const QDeclarativeDebugConnection::staticMetaObject - ?isLiteral@QDeclarativeDomValue@@QBE_NXZ @ 385 NONAME ; bool QDeclarativeDomValue::isLiteral(void) const - ?qt_metacall@QDeclarativeItem@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 386 NONAME ; int QDeclarativeItem::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@QListModelInterface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 387 NONAME ; int QListModelInterface::qt_metacall(enum QMetaObject::Call, int, void * *) - ?move@QDeclarativeListModel@@QAEXHHH@Z @ 388 NONAME ; void QDeclarativeListModel::move(int, int, int) - ?metaObject@QDeclarativeBehavior@@UBEPBUQMetaObject@@XZ @ 389 NONAME ; struct QMetaObject const * QDeclarativeBehavior::metaObject(void) const - ?inputMethodPreHandler@QDeclarativeItem@@IAEXPAVQInputMethodEvent@@@Z @ 390 NONAME ; void QDeclarativeItem::inputMethodPreHandler(class QInputMethodEvent *) - ?d_func@QDeclarativeText@@AAEPAVQDeclarativeTextPrivate@@XZ @ 391 NONAME ; class QDeclarativeTextPrivate * QDeclarativeText::d_func(void) - ?signature@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 392 NONAME ; class QByteArray QMetaMethodBuilder::signature(void) const - ??_EQDeclarativeParserStatus@@UAE@I@Z @ 393 NONAME ; QDeclarativeParserStatus::~QDeclarativeParserStatus(unsigned int) - ?rightMargin@QDeclarativeAnchors@@QBEMXZ @ 394 NONAME ; float QDeclarativeAnchors::rightMargin(void) const - ?itemsMoved@QListModelInterface@@IAEXHHH@Z @ 395 NONAME ; void QListModelInterface::itemsMoved(int, int, int) - ?rectFFromString@QDeclarativeStringConverters@@YA?AVQRectF@@ABVQString@@PA_N@Z @ 396 NONAME ; class QRectF QDeclarativeStringConverters::rectFFromString(class QString const &, bool *) - ?canAt@QDeclarativeListReference@@QBE_NXZ @ 397 NONAME ; bool QDeclarativeListReference::canAt(void) const - ?children@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 398 NONAME ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugObjectReference::children(void) const - ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 399 NONAME ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *) - ?qt_metacall@QDeclarativeDebugExpressionQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 400 NONAME ; int QDeclarativeDebugExpressionQuery::qt_metacall(enum QMetaObject::Call, int, void * *) - ?getStaticMetaObject@QDeclarativeEngine@@SAABUQMetaObject@@XZ @ 401 NONAME ; struct QMetaObject const & QDeclarativeEngine::getStaticMetaObject(void) - ?paintEvent@QDeclarativeView@@MAEXPAVQPaintEvent@@@Z @ 402 NONAME ; void QDeclarativeView::paintEvent(class QPaintEvent *) - ?name@QDeclarativeDebugPropertyWatch@@QBE?AVQString@@XZ @ 403 NONAME ; class QString QDeclarativeDebugPropertyWatch::name(void) const - ?bindingType@QDeclarativeAbstractBinding@@UBE?AW4Type@1@XZ @ 404 NONAME ; enum QDeclarativeAbstractBinding::Type QDeclarativeAbstractBinding::bindingType(void) const - ?margins@QDeclarativeAnchors@@QBEMXZ @ 405 NONAME ; float QDeclarativeAnchors::margins(void) const - ?length@QDeclarativeDomProperty@@QBEHXZ @ 406 NONAME ; int QDeclarativeDomProperty::length(void) const - ??1QDeclarativeDomImport@@QAE@XZ @ 407 NONAME ; QDeclarativeDomImport::~QDeclarativeDomImport(void) - ?addRef@QDeclarativePixmapReply@@AAEXXZ @ 408 NONAME ABSENT ; void QDeclarativePixmapReply::addRef(void) - ?mouseReleaseEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 409 NONAME ; void QDeclarativeText::mouseReleaseEvent(class QGraphicsSceneMouseEvent *) - ?isCustomType@QDeclarativeDomObject@@QBE_NXZ @ 410 NONAME ; bool QDeclarativeDomObject::isCustomType(void) const - ?registerType@QDeclarativePrivate@@YAHABURegisterType@1@@Z @ 411 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterType const &) - ?radius@QDeclarativeRectangle@@QBEMXZ @ 412 NONAME ; float QDeclarativeRectangle::radius(void) const - ??0QDeclarativeComponent@@AAE@PAVQDeclarativeEngine@@PAVQDeclarativeCompiledData@@HHPAVQObject@@@Z @ 413 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QDeclarativeCompiledData *, int, int, class QObject *) - ?resources_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 414 NONAME ; int QDeclarativeItemPrivate::resources_count(class QDeclarativeListProperty<class QObject> *) - ?timerEvent@QDeclarativeView@@MAEXPAVQTimerEvent@@@Z @ 415 NONAME ; void QDeclarativeView::timerEvent(class QTimerEvent *) - ?finished@QDeclarativePixmapReply@@IAEXXZ @ 416 NONAME ABSENT ; void QDeclarativePixmapReply::finished(void) - ?setToState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 417 NONAME ; void QDeclarativeTransition::setToState(class QString const &) - ?methodType@QMetaMethodBuilder@@QBE?AW4MethodType@QMetaMethod@@XZ @ 418 NONAME ; enum QMetaMethod::MethodType QMetaMethodBuilder::methodType(void) const - ?getStaticMetaObject@QDeclarativeView@@SAABUQMetaObject@@XZ @ 419 NONAME ; struct QMetaObject const & QDeclarativeView::getStaticMetaObject(void) - ?metaObject@QDeclarativeStateOperation@@UBEPBUQMetaObject@@XZ @ 420 NONAME ; struct QMetaObject const * QDeclarativeStateOperation::metaObject(void) const - ?keyReleasePreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 421 NONAME ; void QDeclarativeItem::keyReleasePreHandler(class QKeyEvent *) - ?append@QDeclarativeListModel@@QAEXABVQScriptValue@@@Z @ 422 NONAME ; void QDeclarativeListModel::append(class QScriptValue const &) - ??1QDeclarativeDebugObjectReference@@QAE@XZ @ 423 NONAME ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(void) - ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 424 NONAME ; class QString QDeclarativeDebugClient::tr(char const *, char const *) - ?resolvedUrl@QDeclarativeContext@@QAE?AVQUrl@@ABV2@@Z @ 425 NONAME ; class QUrl QDeclarativeContext::resolvedUrl(class QUrl const &) - ?object@QDeclarativeListReference@@QBEPAVQObject@@XZ @ 426 NONAME ; class QObject * QDeclarativeListReference::object(void) const - ?setEnabled@QDeclarativeBehavior@@QAEX_N@Z @ 427 NONAME ; void QDeclarativeBehavior::setEnabled(bool) - ?line@QDeclarativeError@@QBEHXZ @ 428 NONAME ; int QDeclarativeError::line(void) const - ?heightValid@QDeclarativeItem@@IBE_NXZ @ 429 NONAME ; bool QDeclarativeItem::heightValid(void) const - ??1QDeclarativeOpenMetaObject@@UAE@XZ @ 430 NONAME ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(void) - ??0QPacket@@QAE@XZ @ 431 NONAME ; QPacket::QPacket(void) - ?trUtf8@QDeclarativePropertyMap@@SA?AVQString@@PBD0H@Z @ 432 NONAME ; class QString QDeclarativePropertyMap::trUtf8(char const *, char const *, int) - ?trUtf8@QDeclarativeEngine@@SA?AVQString@@PBD0H@Z @ 433 NONAME ; class QString QDeclarativeEngine::trUtf8(char const *, char const *, int) - ??0QDeclarativeDebugEngineReference@@QAE@XZ @ 434 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(void) - ?qmlEngine@@YAPAVQDeclarativeEngine@@PBVQObject@@@Z @ 435 NONAME ; class QDeclarativeEngine * qmlEngine(class QObject const *) - ?error@QDeclarativeExpression@@QBE?AVQDeclarativeError@@XZ @ 436 NONAME ; class QDeclarativeError QDeclarativeExpression::error(void) const - ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 437 NONAME ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *) - ?styleColorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 438 NONAME ; void QDeclarativeText::styleColorChanged(class QColor const &) - ?getStaticMetaObject@QDeclarativeDebugExpressionQuery@@SAABUQMetaObject@@XZ @ 439 NONAME ; struct QMetaObject const & QDeclarativeDebugExpressionQuery::getStaticMetaObject(void) - ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 440 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *, int) - ?writeValueProperty@QDeclarativePropertyPrivate@@QAE_NABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 441 NONAME ; bool QDeclarativePropertyPrivate::writeValueProperty(class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ?errors@QDeclarativeCustomParser@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 442 NONAME ; class QList<class QDeclarativeError> QDeclarativeCustomParser::errors(void) const - ?statesProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 443 NONAME ; class QDeclarativeListProperty<class QDeclarativeState> QDeclarativeStateGroup::statesProperty(void) - ?roles@QDeclarativeListModel@@UBE?AV?$QList@H@@XZ @ 444 NONAME ; class QList<int> QDeclarativeListModel::roles(void) const - ?name@QMetaEnumBuilder@@QBE?AVQByteArray@@XZ @ 445 NONAME ; class QByteArray QMetaEnumBuilder::name(void) const - ??_EQDeclarativeDebugRootContextQuery@@UAE@I@Z @ 446 NONAME ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(unsigned int) - ?setColor@QDeclarativeRectangle@@QAEXABVQColor@@@Z @ 447 NONAME ; void QDeclarativeRectangle::setColor(class QColor const &) - ?clipChanged@QDeclarativeItem@@IAEX_N@Z @ 448 NONAME ; void QDeclarativeItem::clipChanged(bool) - ??0QDeclarativeCustomParser@@QAE@V?$QFlags@W4Flag@QDeclarativeCustomParser@@@@@Z @ 449 NONAME ; QDeclarativeCustomParser::QDeclarativeCustomParser(class QFlags<enum QDeclarativeCustomParser::Flag>) - ?valueChanged@QDeclarativeDebugWatch@@IAEXABVQByteArray@@ABVQVariant@@@Z @ 450 NONAME ; void QDeclarativeDebugWatch::valueChanged(class QByteArray const &, class QVariant const &) - ?smoothChanged@QDeclarativeItem@@IAEX_N@Z @ 451 NONAME ; void QDeclarativeItem::smoothChanged(bool) - ?colorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 452 NONAME ; void QDeclarativeText::colorChanged(class QColor const &) - ?continueExecute@QDeclarativeView@@AAEXXZ @ 453 NONAME ; void QDeclarativeView::continueExecute(void) - ?initialSize@QDeclarativeView@@QBE?AVQSize@@XZ @ 454 NONAME ; class QSize QDeclarativeView::initialSize(void) const - ?interfaceIId@QDeclarativeMetaType@@SAPBDH@Z @ 455 NONAME ; char const * QDeclarativeMetaType::interfaceIId(int) - ?isValid@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 456 NONAME ; bool QDeclarativeDomDynamicProperty::isValid(void) const - ?baselineChanged@QDeclarativeAnchors@@IAEXXZ @ 457 NONAME ; void QDeclarativeAnchors::baselineChanged(void) - ?name@QDeclarativeState@@QBE?AVQString@@XZ @ 458 NONAME ; class QString QDeclarativeState::name(void) const - ??4QDeclarativeDomObject@@QAEAAV0@ABV0@@Z @ 459 NONAME ; class QDeclarativeDomObject & QDeclarativeDomObject::operator=(class QDeclarativeDomObject const &) - ?qt_metacall@QDeclarativeContext@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 460 NONAME ; int QDeclarativeContext::qt_metacall(enum QMetaObject::Call, int, void * *) - ??_EQDeclarativeValueType@@UAE@I@Z @ 461 NONAME ; QDeclarativeValueType::~QDeclarativeValueType(unsigned int) - ?qt_metacall@QDeclarativeState@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 462 NONAME ; int QDeclarativeState::qt_metacall(enum QMetaObject::Call, int, void * *) - ?isEnabled@QDeclarativeDebugService@@QBE_NXZ @ 463 NONAME ; bool QDeclarativeDebugService::isEnabled(void) const - ?stateChanged@QDeclarativeDebugWatch@@IAEXW4State@1@@Z @ 464 NONAME ; void QDeclarativeDebugWatch::stateChanged(enum QDeclarativeDebugWatch::State) - ??0QMetaMethodBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 465 NONAME ; QMetaMethodBuilder::QMetaMethodBuilder(class QMetaObjectBuilder const *, int) - ??4QDeclarativeListReference@@QAEAAV0@ABV0@@Z @ 466 NONAME ; class QDeclarativeListReference & QDeclarativeListReference::operator=(class QDeclarativeListReference const &) - ?componentFinalized@QDeclarativeBehavior@@AAEXXZ @ 467 NONAME ; void QDeclarativeBehavior::componentFinalized(void) - ?stateChanged@QDeclarativeDebugQuery@@IAEXW4State@1@@Z @ 468 NONAME ; void QDeclarativeDebugQuery::stateChanged(enum QDeclarativeDebugQuery::State) - ?setVerticalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 469 NONAME ; void QDeclarativeAnchors::setVerticalCenter(class QDeclarativeAnchorLine const &) - ?keyPressEvent@QDeclarativeItem@@MAEXPAVQKeyEvent@@@Z @ 470 NONAME ; void QDeclarativeItem::keyPressEvent(class QKeyEvent *) - ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 471 NONAME ; class QString QDeclarativeValueType::trUtf8(char const *, char const *) - ?metaObject@QDeclarativeExtensionPlugin@@UBEPBUQMetaObject@@XZ @ 472 NONAME ; struct QMetaObject const * QDeclarativeExtensionPlugin::metaObject(void) const - ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 473 NONAME ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *, int) - ?setCenterIn@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 474 NONAME ; void QDeclarativeAnchors::setCenterIn(class QGraphicsObject *) - ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@ABVQByteArray@@HH@Z @ 475 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(class QByteArray const &, int, int) - ??0QDeclarativeDebugObjectQuery@@AAE@PAVQObject@@@Z @ 476 NONAME ; QDeclarativeDebugObjectQuery::QDeclarativeDebugObjectQuery(class QObject *) - ?isComponent@QDeclarativeDomObject@@QBE_NXZ @ 477 NONAME ; bool QDeclarativeDomObject::isComponent(void) const - ?inputMethodEvent@QDeclarativeItem@@MAEXPAVQInputMethodEvent@@@Z @ 478 NONAME ; void QDeclarativeItem::inputMethodEvent(class QInputMethodEvent *) - ?styleChanged@QDeclarativeText@@IAEXW4TextStyle@1@@Z @ 479 NONAME ; void QDeclarativeText::styleChanged(enum QDeclarativeText::TextStyle) - ?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@PAVQDeclarativeEngine@@@Z @ 480 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &, class QDeclarativeEngine *) - ?pluginPathList@QDeclarativeEngine@@QBE?AVQStringList@@XZ @ 481 NONAME ; class QStringList QDeclarativeEngine::pluginPathList(void) const - ?parentContext@QDeclarativeContext@@QBEPAV1@XZ @ 482 NONAME ; class QDeclarativeContext * QDeclarativeContext::parentContext(void) const - ?leftMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 483 NONAME ; void QDeclarativeAnchors::leftMarginChanged(void) - ?staticMetaObject@QDeclarativeDebugService@@2UQMetaObject@@B @ 484 NONAME ; struct QMetaObject const QDeclarativeDebugService::staticMetaObject - ?topMargin@QDeclarativeAnchors@@QBEMXZ @ 485 NONAME ; float QDeclarativeAnchors::topMargin(void) const - ??0QDeclarativeDebugExpressionQuery@@AAE@PAVQObject@@@Z @ 486 NONAME ; QDeclarativeDebugExpressionQuery::QDeclarativeDebugExpressionQuery(class QObject *) - ?qt_metacast@QDeclarativePixmapReply@@UAEPAXPBD@Z @ 487 NONAME ABSENT ; void * QDeclarativePixmapReply::qt_metacast(char const *) - ??0QPacket@@IAE@ABVQByteArray@@@Z @ 488 NONAME ; QPacket::QPacket(class QByteArray const &) - ?setFlags@QMetaObjectBuilder@@QAEXV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@@Z @ 489 NONAME ; void QMetaObjectBuilder::setFlags(class QFlags<enum QMetaObjectBuilder::MetaObjectFlag>) - ?horizontalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 490 NONAME ; void QDeclarativeAnchors::horizontalCenterChanged(void) - ?right@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 491 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::right(void) const - ?pendingRequests@QDeclarativePixmapCache@@SAHXZ @ 492 NONAME ABSENT ; int QDeclarativePixmapCache::pendingRequests(void) - ?staticMetaObject@QDeclarativeDebugObjectQuery@@2UQMetaObject@@B @ 493 NONAME ; struct QMetaObject const QDeclarativeDebugObjectQuery::staticMetaObject - ?propertyRead@QDeclarativeOpenMetaObject@@MAEXH@Z @ 494 NONAME ; void QDeclarativeOpenMetaObject::propertyRead(int) - ?importPathList@QDeclarativeEngine@@QBE?AVQStringList@@XZ @ 495 NONAME ; class QStringList QDeclarativeEngine::importPathList(void) const - ?border@QDeclarativeRectangle@@QAEPAVQDeclarativePen@@XZ @ 496 NONAME ; class QDeclarativePen * QDeclarativeRectangle::border(void) - ?baselineOffset@QDeclarativeItem@@QBEMXZ @ 497 NONAME ; float QDeclarativeItem::baselineOffset(void) const - ?dateFromString@QDeclarativeStringConverters@@YA?AVQDate@@ABVQString@@PA_N@Z @ 498 NONAME ; class QDate QDeclarativeStringConverters::dateFromString(class QString const &, bool *) - ?qt_metacast@QDeclarativeDebugObjectExpressionWatch@@UAEPAXPBD@Z @ 499 NONAME ; void * QDeclarativeDebugObjectExpressionWatch::qt_metacast(char const *) - ??0QDeclarativeDomValue@@QAE@ABV0@@Z @ 500 NONAME ; QDeclarativeDomValue::QDeclarativeDomValue(class QDeclarativeDomValue const &) - ??1QDeclarativeListModel@@UAE@XZ @ 501 NONAME ; QDeclarativeListModel::~QDeclarativeListModel(void) - ?qmlAttachedPropertiesObject@@YAPAVQObject@@PAHPBV1@PBUQMetaObject@@_N@Z @ 502 NONAME ; class QObject * qmlAttachedPropertiesObject(int *, class QObject const *, struct QMetaObject const *, bool) - ??_EQDeclarativeDebugClient@@UAE@I@Z @ 503 NONAME ; QDeclarativeDebugClient::~QDeclarativeDebugClient(unsigned int) - ??4QDeclarativeDomComponent@@QAEAAV0@ABV0@@Z @ 504 NONAME ; class QDeclarativeDomComponent & QDeclarativeDomComponent::operator=(class QDeclarativeDomComponent const &) - ?tr@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 505 NONAME ; class QString QPacketProtocol::tr(char const *, char const *) - ?setFont@QDeclarativeText@@QAEXABVQFont@@@Z @ 506 NONAME ; void QDeclarativeText::setFont(class QFont const &) - ?fromChanged@QDeclarativeTransition@@IAEXXZ @ 507 NONAME ; void QDeclarativeTransition::fromChanged(void) - ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 508 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QMetaMethod const &) - ?setHeight@QDeclarativeItemPrivate@@UAEXM@Z @ 509 NONAME ; void QDeclarativeItemPrivate::setHeight(float) - ??0Variant@QDeclarativeParser@@QAE@ABV01@@Z @ 510 NONAME ; QDeclarativeParser::Variant::Variant(class QDeclarativeParser::Variant const &) - ?getStaticMetaObject@QDeclarativeExtensionPlugin@@SAABUQMetaObject@@XZ @ 511 NONAME ; struct QMetaObject const & QDeclarativeExtensionPlugin::getStaticMetaObject(void) - ??0QDeclarativeBinding@@QAE@PAXPAVQDeclarativeRefCount@@PAVQObject@@PAVQDeclarativeContextData@@ABVQString@@H2@Z @ 512 NONAME ; QDeclarativeBinding::QDeclarativeBinding(void *, class QDeclarativeRefCount *, class QObject *, class QDeclarativeContextData *, class QString const &, int, class QObject *) - ?qt_metacast@QDeclarativeDebugClient@@UAEPAXPBD@Z @ 513 NONAME ; void * QDeclarativeDebugClient::qt_metacast(char const *) - ?classInfoValue@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 514 NONAME ; class QByteArray QMetaObjectBuilder::classInfoValue(int) const - ?right@QDeclarativeScaleGrid@@QBEHXZ @ 515 NONAME ; int QDeclarativeScaleGrid::right(void) const - ?setClassName@QMetaObjectBuilder@@QAEXABVQByteArray@@@Z @ 516 NONAME ; void QMetaObjectBuilder::setClassName(class QByteArray const &) - ??1QDeclarativeAnchors@@UAE@XZ @ 517 NONAME ; QDeclarativeAnchors::~QDeclarativeAnchors(void) - ?removeConstructor@QMetaObjectBuilder@@QAEXH@Z @ 518 NONAME ; void QMetaObjectBuilder::removeConstructor(int) - ??4QDeclarativeDomValueValueInterceptor@@QAEAAV0@ABV0@@Z @ 519 NONAME ; class QDeclarativeDomValueValueInterceptor & QDeclarativeDomValueValueInterceptor::operator=(class QDeclarativeDomValueValueInterceptor const &) - ?resolveType@QDeclarativeCustomParser@@IBEPBUQMetaObject@@ABVQByteArray@@@Z @ 520 NONAME ; struct QMetaObject const * QDeclarativeCustomParser::resolveType(class QByteArray const &) const - ??_EQDeclarativePropertyValueSource@@UAE@I@Z @ 521 NONAME ; QDeclarativePropertyValueSource::~QDeclarativePropertyValueSource(unsigned int) - ?staticMetaObject@QDeclarativeItem@@2UQMetaObject@@B @ 522 NONAME ; struct QMetaObject const QDeclarativeItem::staticMetaObject - ?qt_metacast@QDeclarativeDebugRootContextQuery@@UAEPAXPBD@Z @ 523 NONAME ; void * QDeclarativeDebugRootContextQuery::qt_metacast(char const *) - ?itemsRemoved@QListModelInterface@@IAEXHH@Z @ 524 NONAME ; void QListModelInterface::itemsRemoved(int, int) - ?networkAccessManager@QDeclarativeEngine@@QBEPAVQNetworkAccessManager@@XZ @ 525 NONAME ; class QNetworkAccessManager * QDeclarativeEngine::networkAccessManager(void) const - ??0QDeclarativeDomValue@@QAE@XZ @ 526 NONAME ; QDeclarativeDomValue::QDeclarativeDomValue(void) - ?init@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItem@@@Z @ 527 NONAME ; void QDeclarativeItemPrivate::init(class QDeclarativeItem *) - ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQByteArray@@0H@Z @ 528 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QByteArray const &, class QByteArray const &, int) - ?getStaticMetaObject@QDeclarativeState@@SAABUQMetaObject@@XZ @ 529 NONAME ; struct QMetaObject const & QDeclarativeState::getStaticMetaObject(void) - ?isResettable@QMetaPropertyBuilder@@QBE_NXZ @ 530 NONAME ; bool QMetaPropertyBuilder::isResettable(void) const - ?bottomMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 531 NONAME ; void QDeclarativeAnchors::bottomMarginChanged(void) - ?offlineStoragePath@QDeclarativeEngine@@QBE?AVQString@@XZ @ 532 NONAME ; class QString QDeclarativeEngine::offlineStoragePath(void) const - ?keys@QDeclarativePropertyMap@@QBE?AVQStringList@@XZ @ 533 NONAME ; class QStringList QDeclarativePropertyMap::keys(void) const - ?addItemChangeListener@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItemChangeListener@@V?$QFlags@W4ChangeType@QDeclarativeItemPrivate@@@@@Z @ 534 NONAME ; void QDeclarativeItemPrivate::addItemChangeListener(class QDeclarativeItemChangeListener *, class QFlags<enum QDeclarativeItemPrivate::ChangeType>) - ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 535 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QMetaMethod const &) - ??6QDeclarativeInfo@@QAEAAV0@F@Z @ 536 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(short) - ?serialize@QMetaObjectBuilder@@QBEXAAVQDataStream@@@Z @ 537 NONAME ; void QMetaObjectBuilder::serialize(class QDataStream &) const - ??0QDeclarativeDebugContextReference@@QAE@ABV0@@Z @ 538 NONAME ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(class QDeclarativeDebugContextReference const &) - ?saveProperty@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H@Z @ 539 NONAME ; class QByteArray QDeclarativePropertyPrivate::saveProperty(struct QMetaObject const *, int) - ?propertyType@QDeclarativeProperty@@QBEHXZ @ 540 NONAME ; int QDeclarativeProperty::propertyType(void) const - ?isDefaultProperty@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 541 NONAME ; bool QDeclarativeDomDynamicProperty::isDefaultProperty(void) const - ??_EQDeclarativeBehavior@@UAE@I@Z @ 542 NONAME ; QDeclarativeBehavior::~QDeclarativeBehavior(unsigned int) - ??_EQDeclarativeListModel@@UAE@I@Z @ 543 NONAME ; QDeclarativeListModel::~QDeclarativeListModel(unsigned int) - ?isCreatable@QDeclarativeType@@QBE_NXZ @ 544 NONAME ; bool QDeclarativeType::isCreatable(void) const - ??6QDeclarativeInfo@@QAEAAV0@ABVQString@@@Z @ 545 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QString const &) - ?tr@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 546 NONAME ; class QString QDeclarativePen::tr(char const *, char const *) - ?trUtf8@QDeclarativeContext@@SA?AVQString@@PBD0H@Z @ 547 NONAME ; class QString QDeclarativeContext::trUtf8(char const *, char const *, int) - ??0QDeclarativeListModel@@QAE@PAVQObject@@@Z @ 548 NONAME ; QDeclarativeListModel::QDeclarativeListModel(class QObject *) - ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugContextReference@@ABVQString@@PAVQObject@@@Z @ 549 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugContextReference const &, class QString const &, class QObject *) - ?setColumn@QDeclarativeError@@QAEXH@Z @ 550 NONAME ; void QDeclarativeError::setColumn(int) - ??1QDeclarativeTransition@@UAE@XZ @ 551 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(void) - ??AQDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 552 NONAME ; class QVariant QDeclarativePropertyMap::operator[](class QString const &) const - ?qt_metacall@QDeclarativeListModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 553 NONAME ; int QDeclarativeListModel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qdeclarativeelement_destructor@QDeclarativePrivate@@YAXPAVQObject@@@Z @ 554 NONAME ; void QDeclarativePrivate::qdeclarativeelement_destructor(class QObject *) - ?registerCustomStringConverter@QDeclarativeMetaType@@SAXHP6A?AVQVariant@@ABVQString@@@Z@Z @ 555 NONAME ; void QDeclarativeMetaType::registerCustomStringConverter(int, class QVariant (*)(class QString const &)) - ?metaObject@QDeclarativeEngine@@UBEPBUQMetaObject@@XZ @ 556 NONAME ; struct QMetaObject const * QDeclarativeEngine::metaObject(void) const - ??_EQDeclarativeDebugContextReference@@QAE@I@Z @ 557 NONAME ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(unsigned int) - ?propertyWrite@QDeclarativeOpenMetaObject@@MAEXH@Z @ 558 NONAME ; void QDeclarativeOpenMetaObject::propertyWrite(int) - ?qt_metacall@QDeclarativeDebugService@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 559 NONAME ; int QDeclarativeDebugService::qt_metacall(enum QMetaObject::Call, int, void * *) - ?setVerticalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 560 NONAME ; void QDeclarativeAnchors::setVerticalCenterOffset(float) - ??1QDeclarativeDebugWatch@@UAE@XZ @ 561 NONAME ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(void) - ??1QPacketAutoSend@@UAE@XZ @ 562 NONAME ; QPacketAutoSend::~QPacketAutoSend(void) - ?geometryChanged@QDeclarativeText@@MAEXABVQRectF@@0@Z @ 563 NONAME ; void QDeclarativeText::geometryChanged(class QRectF const &, class QRectF const &) - ?d_func@QDeclarativeRectangle@@AAEPAVQDeclarativeRectanglePrivate@@XZ @ 564 NONAME ; class QDeclarativeRectanglePrivate * QDeclarativeRectangle::d_func(void) - ?qt_metacast@QDeclarativeListModel@@UAEPAXPBD@Z @ 565 NONAME ; void * QDeclarativeListModel::qt_metacast(char const *) - ?name@QDeclarativeCustomParserProperty@@QBE?AVQByteArray@@XZ @ 566 NONAME ; class QByteArray QDeclarativeCustomParserProperty::name(void) const - ?update@QDeclarativeBinding@@QAEXXZ @ 567 NONAME ; void QDeclarativeBinding::update(void) - ?trUtf8@QDeclarativeEngine@@SA?AVQString@@PBD0@Z @ 568 NONAME ; class QString QDeclarativeEngine::trUtf8(char const *, char const *) - ?qt_metacast@QDeclarativeDebugConnection@@UAEPAXPBD@Z @ 569 NONAME ; void * QDeclarativeDebugConnection::qt_metacast(char const *) - ?removeWatch@QDeclarativeEngineDebug@@QAEXPAVQDeclarativeDebugWatch@@@Z @ 570 NONAME ; void QDeclarativeEngineDebug::removeWatch(class QDeclarativeDebugWatch *) - ?qt_metacast@QDeclarativeBinding@@UAEPAXPBD@Z @ 571 NONAME ; void * QDeclarativeBinding::qt_metacast(char const *) - ?baseline@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 572 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::baseline(void) const - ?restore@QDeclarativePropertyPrivate@@SA?AVQDeclarativeProperty@@ABVQByteArray@@PAVQObject@@PAVQDeclarativeContextData@@@Z @ 573 NONAME ; class QDeclarativeProperty QDeclarativePropertyPrivate::restore(class QByteArray const &, class QObject *, class QDeclarativeContextData *) - ??0QDeclarativeProperty@@QAE@PAVQObject@@@Z @ 574 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *) - ?source@QDeclarativeDebugObjectReference@@QBE?AVQDeclarativeDebugFileReference@@XZ @ 575 NONAME ; class QDeclarativeDebugFileReference QDeclarativeDebugObjectReference::source(void) const - ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 576 NONAME ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *, int) - ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@H@Z @ 577 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(int) - ??1QDeclarativeCustomParser@@UAE@XZ @ 578 NONAME ; QDeclarativeCustomParser::~QDeclarativeCustomParser(void) - ?toList@QDeclarativeDomValue@@QBE?AVQDeclarativeDomList@@XZ @ 579 NONAME ; class QDeclarativeDomList QDeclarativeDomValue::toList(void) const - ?metaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 580 NONAME ; struct QMetaObject const * QDeclarativeType::metaObject(void) const - ?animation@QDeclarativeBehavior@@QAEPAVQDeclarativeAbstractAnimation@@XZ @ 581 NONAME ; class QDeclarativeAbstractAnimation * QDeclarativeBehavior::animation(void) - ?listType@QDeclarativeMetaType@@SAHH@Z @ 582 NONAME ; int QDeclarativeMetaType::listType(int) - ?transform_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@PAVQGraphicsTransform@@@Z @ 583 NONAME ; void QDeclarativeItemPrivate::transform_append(class QDeclarativeListProperty<class QGraphicsTransform> *, class QGraphicsTransform *) - ?d_func@QDeclarativeComponent@@AAEPAVQDeclarativeComponentPrivate@@XZ @ 584 NONAME ; class QDeclarativeComponentPrivate * QDeclarativeComponent::d_func(void) - ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@@Z @ 585 NONAME ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &) - ?qt_metacall@QDeclarativeScaleGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 586 NONAME ; int QDeclarativeScaleGrid::qt_metacall(enum QMetaObject::Call, int, void * *) - ?size@QDeclarativePropertyMap@@QBEHXZ @ 587 NONAME ; int QDeclarativePropertyMap::size(void) const - ?cancel@QDeclarativeState@@QAEXXZ @ 588 NONAME ; void QDeclarativeState::cancel(void) - ?qt_metacall@QDeclarativeStateGroup@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 589 NONAME ; int QDeclarativeStateGroup::qt_metacall(enum QMetaObject::Call, int, void * *) - ??0QDeclarativePropertyPrivate@@QAE@XZ @ 590 NONAME ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(void) - ?getStaticMetaObject@QDeclarativeDebugPropertyWatch@@SAABUQMetaObject@@XZ @ 591 NONAME ; struct QMetaObject const & QDeclarativeDebugPropertyWatch::getStaticMetaObject(void) - ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 592 NONAME ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *, int) - ?transformOrigin@QDeclarativeItem@@QBE?AW4TransformOrigin@1@XZ @ 593 NONAME ; enum QDeclarativeItem::TransformOrigin QDeclarativeItem::transformOrigin(void) const - ?setState@QDeclarativeDebugWatch@@AAEXW4State@1@@Z @ 594 NONAME ; void QDeclarativeDebugWatch::setState(enum QDeclarativeDebugWatch::State) - ?evaluateEnum@QDeclarativeCustomParser@@IBEHABVQByteArray@@@Z @ 595 NONAME ; int QDeclarativeCustomParser::evaluateEnum(class QByteArray const &) const - ?setState@QDeclarativeDebugQuery@@AAEXW4State@1@@Z @ 596 NONAME ; void QDeclarativeDebugQuery::setState(enum QDeclarativeDebugQuery::State) - ?d_func@QDeclarativeText@@ABEPBVQDeclarativeTextPrivate@@XZ @ 597 NONAME ; class QDeclarativeTextPrivate const * QDeclarativeText::d_func(void) const - ?transitionsProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 598 NONAME ; class QDeclarativeListProperty<class QDeclarativeTransition> QDeclarativeStateGroup::transitionsProperty(void) - ?typeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 599 NONAME ; class QByteArray QDeclarativeType::typeName(void) const - ?asStringList@Variant@QDeclarativeParser@@QBE?AVQStringList@@XZ @ 600 NONAME ; class QStringList QDeclarativeParser::Variant::asStringList(void) const - ?removeKey@QMetaEnumBuilder@@QAEXH@Z @ 601 NONAME ; void QMetaEnumBuilder::removeKey(int) - ?downloadProgress@QDeclarativePixmapReply@@IAEX_J0@Z @ 602 NONAME ABSENT ; void QDeclarativePixmapReply::downloadProgress(long long, long long) - ?addRelatedMetaObject@QMetaObjectBuilder@@QAEHABQ6AABUQMetaObject@@XZ@Z @ 603 NONAME ; int QMetaObjectBuilder::addRelatedMetaObject(struct QMetaObject const & (* const)(void) const &) - ??0QDeclarativeDomValueLiteral@@QAE@XZ @ 604 NONAME ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(void) - ??_EQDeclarativeDebugObjectExpressionWatch@@UAE@I@Z @ 605 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(unsigned int) - ?computeTransformOrigin@QDeclarativeItemPrivate@@QBE?AVQPointF@@XZ @ 606 NONAME ; class QPointF QDeclarativeItemPrivate::computeTransformOrigin(void) const - ??0QDeclarativeListReference@@QAE@PAVQObject@@PBDPAVQDeclarativeEngine@@@Z @ 607 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QObject *, char const *, class QDeclarativeEngine *) - ?setData@QListModelInterface@@UAE_NHABV?$QHash@HVQVariant@@@@@Z @ 608 NONAME ; bool QListModelInterface::setData(int, class QHash<int, class QVariant> const &) - ??0QDeclarativePen@@QAE@PAVQObject@@@Z @ 609 NONAME ; QDeclarativePen::QDeclarativePen(class QObject *) - ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 610 NONAME ; class QString QPacketProtocol::trUtf8(char const *, char const *, int) - ?setContextObject@QDeclarativeContext@@QAEXPAVQObject@@@Z @ 611 NONAME ; void QDeclarativeContext::setContextObject(class QObject *) - ??_EQDeclarativeState@@UAE@I@Z @ 612 NONAME ; QDeclarativeState::~QDeclarativeState(unsigned int) - ?expression@QDeclarativeExpression@@QBE?AVQString@@XZ @ 613 NONAME ; class QString QDeclarativeExpression::expression(void) const - ??1QDeclarativeDomDocument@@QAE@XZ @ 614 NONAME ; QDeclarativeDomDocument::~QDeclarativeDomDocument(void) - ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 615 NONAME ; class QString QDeclarativeListModel::trUtf8(char const *, char const *, int) - ?asNumber@Variant@QDeclarativeParser@@QBENXZ @ 616 NONAME ; double QDeclarativeParser::Variant::asNumber(void) const - ?d_func@QDeclarativeDebugClient@@ABEPBVQDeclarativeDebugClientPrivate@@XZ @ 617 NONAME ; class QDeclarativeDebugClientPrivate const * QDeclarativeDebugClient::d_func(void) const - ?sceneEvent@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 618 NONAME ; bool QDeclarativeItem::sceneEvent(class QEvent *) - ??0QDeclarativeDebugRootContextQuery@@AAE@PAVQObject@@@Z @ 619 NONAME ; QDeclarativeDebugRootContextQuery::QDeclarativeDebugRootContextQuery(class QObject *) - ?name@QDeclarativeDebugEngineReference@@QBE?AVQString@@XZ @ 620 NONAME ; class QString QDeclarativeDebugEngineReference::name(void) const - ??_EQDeclarativeTransition@@UAE@I@Z @ 621 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(unsigned int) - ??0QDeclarativeAction@@QAE@ABV0@@Z @ 622 NONAME ; QDeclarativeAction::QDeclarativeAction(class QDeclarativeAction const &) - ?extends@QDeclarativeState@@QBE?AVQString@@XZ @ 623 NONAME ; class QString QDeclarativeState::extends(void) const - ?error@QDeclarativeCustomParser@@IAEXABVQDeclarativeCustomParserProperty@@ABVQString@@@Z @ 624 NONAME ; void QDeclarativeCustomParser::error(class QDeclarativeCustomParserProperty const &, class QString const &) - ??0QDeclarativeCustomParserNode@@QAE@XZ @ 625 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(void) - ?version@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 626 NONAME ; class QString QDeclarativeDomImport::version(void) const - ?smooth@QDeclarativeItem@@QBE_NXZ @ 627 NONAME ; bool QDeclarativeItem::smooth(void) const - ?implicitSize@QDeclarativePixmapReply@@QBE?AVQSize@@XZ @ 628 NONAME ABSENT ; class QSize QDeclarativePixmapReply::implicitSize(void) const - ??1QDeclarativeInfo@@QAE@XZ @ 629 NONAME ; QDeclarativeInfo::~QDeclarativeInfo(void) - ?qt_metacast@QDeclarativeStateOperation@@UAEPAXPBD@Z @ 630 NONAME ; void * QDeclarativeStateOperation::qt_metacast(char const *) - ??4QDeclarativeDebugEngineReference@@QAEAAV0@ABV0@@Z @ 631 NONAME ; class QDeclarativeDebugEngineReference & QDeclarativeDebugEngineReference::operator=(class QDeclarativeDebugEngineReference const &) - ?isValueType@QDeclarativePropertyPrivate@@QBE_NXZ @ 632 NONAME ; bool QDeclarativePropertyPrivate::isValueType(void) const - ??0QDeclarativeDomValueValueSource@@QAE@ABV0@@Z @ 633 NONAME ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(class QDeclarativeDomValueValueSource const &) - ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 634 NONAME ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *, int) - ??_EQDeclarativeDebugExpressionQuery@@UAE@I@Z @ 635 NONAME ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(unsigned int) - ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 636 NONAME ; class QString QListModelInterface::trUtf8(char const *, char const *, int) - ?qt_metacall@QDeclarativeDebugObjectExpressionWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 637 NONAME ; int QDeclarativeDebugObjectExpressionWatch::qt_metacall(enum QMetaObject::Call, int, void * *) - ?d_func@QDeclarativeItem@@AAEPAVQDeclarativeItemPrivate@@XZ @ 638 NONAME ; class QDeclarativeItemPrivate * QDeclarativeItem::d_func(void) - ?binding@QDeclarativeDomValueBinding@@QBE?AVQString@@XZ @ 639 NONAME ; class QString QDeclarativeDomValueBinding::binding(void) const - ?updateAutoState@QDeclarativeStateGroup@@AAE_NXZ @ 640 NONAME ; bool QDeclarativeStateGroup::updateAutoState(void) - ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 641 NONAME ; class QString QDeclarativeDebugService::tr(char const *, char const *) - ?tr@QDeclarativeComponent@@SA?AVQString@@PBD0H@Z @ 642 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *, int) - ??1QDeclarativeProperty@@QAE@XZ @ 643 NONAME ; QDeclarativeProperty::~QDeclarativeProperty(void) - ?fontChanged@QDeclarativeText@@IAEXABVQFont@@@Z @ 644 NONAME ; void QDeclarativeText::fontChanged(class QFont const &) - ?removeItemChangeListener@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItemChangeListener@@V?$QFlags@W4ChangeType@QDeclarativeItemPrivate@@@@@Z @ 645 NONAME ; void QDeclarativeItemPrivate::removeItemChangeListener(class QDeclarativeItemChangeListener *, class QFlags<enum QDeclarativeItemPrivate::ChangeType>) - ?isList@QDeclarativeDomValue@@QBE_NXZ @ 646 NONAME ; bool QDeclarativeDomValue::isList(void) const - ?insert@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 647 NONAME ; void QDeclarativeListModel::insert(int, class QScriptValue const &) - ?staticMetaObject@QDeclarativeListModel@@2UQMetaObject@@B @ 648 NONAME ; struct QMetaObject const QDeclarativeListModel::staticMetaObject - ?indexOfConstructor@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 649 NONAME ; int QMetaObjectBuilder::indexOfConstructor(class QByteArray const &) - ?lineNumber@QDeclarativeExpression@@QBEHXZ @ 650 NONAME ; int QDeclarativeExpression::lineNumber(void) const - ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 651 NONAME ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *, int) - ?toString@QDeclarativeError@@QBE?AVQString@@XZ @ 652 NONAME ; class QString QDeclarativeError::toString(void) const - ?index@QMetaPropertyBuilder@@QBEHXZ @ 653 NONAME ; int QMetaPropertyBuilder::index(void) const - ?commaPositions@QDeclarativeDomList@@QBE?AV?$QList@H@@XZ @ 654 NONAME ; class QList<int> QDeclarativeDomList::commaPositions(void) const - ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 655 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *) - ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 656 NONAME ; class QString QDeclarativeAnchors::tr(char const *, char const *) - ?tr@QDeclarativeEngine@@SA?AVQString@@PBD0@Z @ 657 NONAME ; class QString QDeclarativeEngine::tr(char const *, char const *) - ?setTextFormat@QDeclarativeText@@QAEXW4TextFormat@1@@Z @ 658 NONAME ; void QDeclarativeText::setTextFormat(enum QDeclarativeText::TextFormat) - ?parserStatusCast@QDeclarativeType@@QBEHXZ @ 659 NONAME ; int QDeclarativeType::parserStatusCast(void) const - ??_EQListModelInterface@@UAE@I@Z @ 660 NONAME ; QListModelInterface::~QListModelInterface(unsigned int) - ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 661 NONAME ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *) - ?getStaticMetaObject@QDeclarativeListModel@@SAABUQMetaObject@@XZ @ 662 NONAME ; struct QMetaObject const & QDeclarativeListModel::getStaticMetaObject(void) - ?setStdCppSet@QMetaPropertyBuilder@@QAEX_N@Z @ 663 NONAME ; void QMetaPropertyBuilder::setStdCppSet(bool) - ??0QDeclarativeItemPrivate@@QAE@XZ @ 664 NONAME ; QDeclarativeItemPrivate::QDeclarativeItemPrivate(void) - ??0QDeclarativeDebugService@@QAE@ABVQString@@PAVQObject@@@Z @ 665 NONAME ; QDeclarativeDebugService::QDeclarativeDebugService(class QString const &, class QObject *) - ??_EQPacketAutoSend@@UAE@I@Z @ 666 NONAME ; QPacketAutoSend::~QPacketAutoSend(unsigned int) - ?saveValueType@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H0H@Z @ 667 NONAME ; class QByteArray QDeclarativePropertyPrivate::saveValueType(struct QMetaObject const *, int, struct QMetaObject const *, int) - ?resetHeight@QDeclarativeItem@@QAEXXZ @ 668 NONAME ; void QDeclarativeItem::resetHeight(void) - ?setVAlign@QDeclarativeText@@QAEXW4VAlignment@1@@Z @ 669 NONAME ; void QDeclarativeText::setVAlign(enum QDeclarativeText::VAlignment) - ??1QDeclarativeDebugService@@UAE@XZ @ 670 NONAME ; QDeclarativeDebugService::~QDeclarativeDebugService(void) - ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 671 NONAME ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *, int) - ?elideMode@QDeclarativeText@@QBE?AW4TextElideMode@1@XZ @ 672 NONAME ; enum QDeclarativeText::TextElideMode QDeclarativeText::elideMode(void) const - ?baseUrl@QDeclarativeContext@@QBE?AVQUrl@@XZ @ 673 NONAME ; class QUrl QDeclarativeContext::baseUrl(void) const - ?qt_metacall@QDeclarativeDebugRootContextQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 674 NONAME ; int QDeclarativeDebugRootContextQuery::qt_metacall(enum QMetaObject::Call, int, void * *) - ?isNamed@QDeclarativeState@@QBE_NXZ @ 675 NONAME ; bool QDeclarativeState::isNamed(void) const - ?isString@Variant@QDeclarativeParser@@QBE_NXZ @ 676 NONAME ; bool QDeclarativeParser::Variant::isString(void) const - ?restart@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 677 NONAME ; long long QDeclarativeItemPrivate::restart(class QElapsedTimer &) - ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 678 NONAME ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *, int) - ?qt_metacast@QDeclarativeTransition@@UAEPAXPBD@Z @ 679 NONAME ; void * QDeclarativeTransition::qt_metacast(char const *) - ?timeFromString@QDeclarativeStringConverters@@YA?AVQTime@@ABVQString@@PA_N@Z @ 680 NONAME ; class QTime QDeclarativeStringConverters::timeFromString(class QString const &, bool *) - ?d_func@QDeclarativeDebugClient@@AAEPAVQDeclarativeDebugClientPrivate@@XZ @ 681 NONAME ; class QDeclarativeDebugClientPrivate * QDeclarativeDebugClient::d_func(void) - ??1QDeclarativeType@@AAE@XZ @ 682 NONAME ; QDeclarativeType::~QDeclarativeType(void) - ?colorFromString@QDeclarativeStringConverters@@YA?AVQColor@@ABVQString@@PA_N@Z @ 683 NONAME ; class QColor QDeclarativeStringConverters::colorFromString(class QString const &, bool *) - ??_EQPacketProtocol@@UAE@I@Z @ 684 NONAME ; QPacketProtocol::~QPacketProtocol(unsigned int) - ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 685 NONAME ; class QString QDeclarativeListModel::tr(char const *, char const *) - ??0QDeclarativeDebugObjectReference@@QAE@XZ @ 686 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(void) - ?staticMetaObject@QDeclarativeExtensionPlugin@@2UQMetaObject@@B @ 687 NONAME ; struct QMetaObject const QDeclarativeExtensionPlugin::staticMetaObject - ?isNull@QDeclarativeScaleGrid@@QBE_NXZ @ 688 NONAME ; bool QDeclarativeScaleGrid::isNull(void) const - ??_EQDeclarativeStateOperation@@UAE@I@Z @ 689 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(unsigned int) - ??6QDeclarativeInfo@@QAEAAV0@H@Z @ 690 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(int) - ??0QDeclarativeDomDynamicProperty@@QAE@XZ @ 691 NONAME ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(void) - ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 692 NONAME ; class QString QDeclarativeRectangle::tr(char const *, char const *, int) - ?type@QDeclarativeProperty@@QBE?AW4Type@1@XZ @ 693 NONAME ; enum QDeclarativeProperty::Type QDeclarativeProperty::type(void) const - ??0QDeclarativeDebugQuery@@IAE@PAVQObject@@@Z @ 694 NONAME ; QDeclarativeDebugQuery::QDeclarativeDebugQuery(class QObject *) - ?baselineOffset@QDeclarativeAnchors@@QBEMXZ @ 695 NONAME ; float QDeclarativeAnchors::baselineOffset(void) const - ??4QDeclarativeDomDocument@@QAEAAV0@ABV0@@Z @ 696 NONAME ; class QDeclarativeDomDocument & QDeclarativeDomDocument::operator=(class QDeclarativeDomDocument const &) - ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@PAVQDeclarativeOpenMetaObjectType@@_N@Z @ 697 NONAME ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, class QDeclarativeOpenMetaObjectType *, bool) - ?trUtf8@QDeclarativeExpression@@SA?AVQString@@PBD0@Z @ 698 NONAME ; class QString QDeclarativeExpression::trUtf8(char const *, char const *) - ??0QPacketProtocol@@QAE@PAVQIODevice@@PAVQObject@@@Z @ 699 NONAME ; QPacketProtocol::QPacketProtocol(class QIODevice *, class QObject *) - ??1QDeclarativeListReference@@QAE@XZ @ 700 NONAME ; QDeclarativeListReference::~QDeclarativeListReference(void) - ?clearError@QDeclarativeExpression@@QAEXXZ @ 701 NONAME ; void QDeclarativeExpression::clearError(void) - ?setLineNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 702 NONAME ; void QDeclarativeDebugFileReference::setLineNumber(int) - ?qt_metacall@QDeclarativeExtensionPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 703 NONAME ; int QDeclarativeExtensionPlugin::qt_metacall(enum QMetaObject::Call, int, void * *) - ?boundingRect@QDeclarativeText@@UBE?AVQRectF@@XZ @ 704 NONAME ; class QRectF QDeclarativeText::boundingRect(void) const - ?setColor@QDeclarativePen@@QAEXABVQColor@@@Z @ 705 NONAME ; void QDeclarativePen::setColor(class QColor const &) - ??0QDeclarativeDomImport@@QAE@XZ @ 706 NONAME ; QDeclarativeDomImport::QDeclarativeDomImport(void) - ?clearErrors@QDeclarativeCustomParser@@QAEXXZ @ 707 NONAME ; void QDeclarativeCustomParser::clearErrors(void) - ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 708 NONAME ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *, int) - ?toRelocatableData@QMetaObjectBuilder@@QBE?AVQByteArray@@PA_N@Z @ 709 NONAME ; class QByteArray QMetaObjectBuilder::toRelocatableData(bool *) const - ?qt_metacast@QDeclarativeView@@UAEPAXPBD@Z @ 710 NONAME ; void * QDeclarativeView::qt_metacast(char const *) - ?mapToItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 711 NONAME ; class QScriptValue QDeclarativeItem::mapToItem(class QScriptValue const &, float, float) const - ?setPluginPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 712 NONAME ; void QDeclarativeEngine::setPluginPathList(class QStringList const &) - ?metaObject@QDeclarativeState@@UBEPBUQMetaObject@@XZ @ 713 NONAME ; struct QMetaObject const * QDeclarativeState::metaObject(void) const - ?errorString@QDeclarativePixmapReply@@QBE?AVQString@@XZ @ 714 NONAME ABSENT ; class QString QDeclarativePixmapReply::errorString(void) const - ?boundingRect@QDeclarativeRectangle@@UBE?AVQRectF@@XZ @ 715 NONAME ; class QRectF QDeclarativeRectangle::boundingRect(void) const - ?uri@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 716 NONAME ; class QString QDeclarativeDomImport::uri(void) const - ?setContextProperty@QDeclarativeContext@@QAEXABVQString@@PAVQObject@@@Z @ 717 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QObject *) - ?setBaseUrl@QDeclarativeEngine@@QAEXABVQUrl@@@Z @ 718 NONAME ; void QDeclarativeEngine::setBaseUrl(class QUrl const &) - ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 719 NONAME ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *, int) - ?setScriptable@QMetaPropertyBuilder@@QAEX_N@Z @ 720 NONAME ; void QMetaPropertyBuilder::setScriptable(bool) - ??0QDeclarativeProperty@@QAE@PAVQObject@@PAVQDeclarativeEngine@@@Z @ 721 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QDeclarativeEngine *) - ?itemsInserted@QListModelInterface@@IAEXHH@Z @ 722 NONAME ; void QListModelInterface::itemsInserted(int, int) - ?generateBorderedRect@QDeclarativeRectangle@@AAEXXZ @ 723 NONAME ; void QDeclarativeRectangle::generateBorderedRect(void) - ?verticalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 724 NONAME ; void QDeclarativeAnchors::verticalCenterOffsetChanged(void) - ?width@QDeclarativeItem@@QBEMXZ @ 725 NONAME ; float QDeclarativeItem::width(void) const - ?isValueInterceptor@QDeclarativeDomValue@@QBE_NXZ @ 726 NONAME ; bool QDeclarativeDomValue::isValueInterceptor(void) const - ?transform_at@QDeclarativeItemPrivate@@SAPAVQGraphicsTransform@@PAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@H@Z @ 727 NONAME ; class QGraphicsTransform * QDeclarativeItemPrivate::transform_at(class QDeclarativeListProperty<class QGraphicsTransform> *, int) - ??1QDeclarativeDomValueBinding@@QAE@XZ @ 728 NONAME ; QDeclarativeDomValueBinding::~QDeclarativeDomValueBinding(void) - ?qt_metacast@QDeclarativeAnchors@@UAEPAXPBD@Z @ 729 NONAME ; void * QDeclarativeAnchors::qt_metacast(char const *) - ?isInterface@QDeclarativeMetaType@@SA_NH@Z @ 730 NONAME ; bool QDeclarativeMetaType::isInterface(int) - ?qt_metacall@QDeclarativeRectangle@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 731 NONAME ; int QDeclarativeRectangle::qt_metacall(enum QMetaObject::Call, int, void * *) - ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 732 NONAME ; class QString QDeclarativePen::trUtf8(char const *, char const *, int) - ??0Variant@QDeclarativeParser@@QAE@ABVQString@@PAVNode@AST@QDeclarativeJS@@@Z @ 733 NONAME ; QDeclarativeParser::Variant::Variant(class QString const &, class QDeclarativeJS::AST::Node *) - ?rootObject@QDeclarativeDomDocument@@QBE?AVQDeclarativeDomObject@@XZ @ 734 NONAME ; class QDeclarativeDomObject QDeclarativeDomDocument::rootObject(void) const - ?rightChanged@QDeclarativeAnchors@@IAEXXZ @ 735 NONAME ; void QDeclarativeAnchors::rightChanged(void) - ??6QDeclarativeInfo@@QAEAAV0@ABVQByteArray@@@Z @ 736 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QByteArray const &) - ?qt_metacast@QDeclarativeEngine@@UAEPAXPBD@Z @ 737 NONAME ; void * QDeclarativeEngine::qt_metacast(char const *) - ?objectType@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 738 NONAME ; class QByteArray QDeclarativeDomObject::objectType(void) const - ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 739 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QByteArray const &) - ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@@Z @ 740 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &, class QDeclarativeContext *) - ?staticMetaObject@QDeclarativeDebugExpressionQuery@@2UQMetaObject@@B @ 741 NONAME ; struct QMetaObject const QDeclarativeDebugExpressionQuery::staticMetaObject - ?queryRootContexts@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugRootContextQuery@@ABVQDeclarativeDebugEngineReference@@PAVQObject@@@Z @ 742 NONAME ; class QDeclarativeDebugRootContextQuery * QDeclarativeEngineDebug::queryRootContexts(class QDeclarativeDebugEngineReference const &, class QObject *) - ?vector3DFromString@QDeclarativeStringConverters@@YA?AVQVector3D@@ABVQString@@PA_N@Z @ 743 NONAME ; class QVector3D QDeclarativeStringConverters::vector3DFromString(class QString const &, bool *) - ??_EQDeclarativeDebugPropertyWatch@@UAE@I@Z @ 744 NONAME ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(unsigned int) - ?relatedMetaObjectCount@QMetaObjectBuilder@@QBEHXZ @ 745 NONAME ; int QMetaObjectBuilder::relatedMetaObjectCount(void) const - ?script@QDeclarativeScriptString@@QBE?AVQString@@XZ @ 746 NONAME ; class QString QDeclarativeScriptString::script(void) const - ?index@QMetaMethodBuilder@@QBEHXZ @ 747 NONAME ; int QMetaMethodBuilder::index(void) const - ??4QDeclarativeDomValueBinding@@QAEAAV0@ABV0@@Z @ 748 NONAME ; class QDeclarativeDomValueBinding & QDeclarativeDomValueBinding::operator=(class QDeclarativeDomValueBinding const &) - ??0QDeclarativeExpression@@QAE@XZ @ 749 NONAME ; QDeclarativeExpression::QDeclarativeExpression(void) - ?paint@QDeclarativeItem@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 750 NONAME ; void QDeclarativeItem::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) - ?send@QPacketProtocol@@QAE?AVQPacketAutoSend@@XZ @ 751 NONAME ; class QPacketAutoSend QPacketProtocol::send(void) - ?countChanged@QDeclarativeListModel@@IAEXXZ @ 752 NONAME ; void QDeclarativeListModel::countChanged(void) - ?setBindingForObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@ABVQVariant@@_NPAVQObject@@@Z @ 753 NONAME ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool, class QObject *) - ??0QDeclarativeGridScaledImage@@QAE@PAVQIODevice@@@Z @ 754 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QIODevice *) - ??_EQDeclarativeBinding@@UAE@I@Z @ 755 NONAME ; QDeclarativeBinding::~QDeclarativeBinding(unsigned int) - ?baseMetaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 756 NONAME ; struct QMetaObject const * QDeclarativeType::baseMetaObject(void) const - ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 757 NONAME ; class QString QDeclarativeDebugConnection::tr(char const *, char const *) - ?staticMetaObject@QDeclarativeBinding@@2UQMetaObject@@B @ 758 NONAME ; struct QMetaObject const QDeclarativeBinding::staticMetaObject - ?qualifier@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 759 NONAME ; class QString QDeclarativeDomImport::qualifier(void) const - ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 760 NONAME ABSENT ; class QString QDeclarativePixmapCache::tr(char const *, char const *, int) - ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@@Z @ 761 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &, class QDeclarativeContext *) - ?setSuperClass@QMetaObjectBuilder@@QAEXPBUQMetaObject@@@Z @ 762 NONAME ; void QMetaObjectBuilder::setSuperClass(struct QMetaObject const *) - ?contains@QDeclarativePropertyMap@@QBE_NABVQString@@@Z @ 763 NONAME ; bool QDeclarativePropertyMap::contains(class QString const &) const - ?setGradient@QDeclarativeRectangle@@QAEXPAVQDeclarativeGradient@@@Z @ 764 NONAME ; void QDeclarativeRectangle::setGradient(class QDeclarativeGradient *) - ?metaObject@QDeclarativeTransition@@UBEPBUQMetaObject@@XZ @ 765 NONAME ; struct QMetaObject const * QDeclarativeTransition::metaObject(void) const - ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PBUQMetaObject@@@Z @ 766 NONAME ; class QMetaMethod QDeclarativeMetaType::defaultMethod(struct QMetaObject const *) - ??0QDeclarativePixmapReply@@AAE@PAVQDeclarativeImageReader@@ABVQUrl@@HH@Z @ 767 NONAME ABSENT ; QDeclarativePixmapReply::QDeclarativePixmapReply(class QDeclarativeImageReader *, class QUrl const &, int, int) - ?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 768 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *, int) - ?metaObject@QDeclarativeValueType@@UBEPBUQMetaObject@@XZ @ 769 NONAME ; struct QMetaObject const * QDeclarativeValueType::metaObject(void) const - ?hasNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 770 NONAME ; bool QDeclarativeProperty::hasNotifySignal(void) const - ?create@QDeclarativeType@@QBEXPAPAVQObject@@PAPAXI@Z @ 771 NONAME ; void QDeclarativeType::create(class QObject * *, void * *, unsigned int) const - ?reversible@QDeclarativeTransition@@QBE_NXZ @ 772 NONAME ; bool QDeclarativeTransition::reversible(void) const - ?invalidPacket@QPacketProtocol@@IAEXXZ @ 773 NONAME ; void QPacketProtocol::invalidPacket(void) - ??0QDeclarativeDebugObjectReference@@QAE@H@Z @ 774 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(int) - ?superClass@QMetaObjectBuilder@@QBEPBUQMetaObject@@XZ @ 775 NONAME ; struct QMetaObject const * QMetaObjectBuilder::superClass(void) const - ?isValid@QDeclarativeListReference@@QBE_NXZ @ 776 NONAME ; bool QDeclarativeListReference::isValid(void) const - ?source@QDeclarativeView@@QBE?AVQUrl@@XZ @ 777 NONAME ; class QUrl QDeclarativeView::source(void) const - ?method@QDeclarativeProperty@@QBE?AVQMetaMethod@@XZ @ 778 NONAME ; class QMetaMethod QDeclarativeProperty::method(void) const - ??0QDeclarativeInfo@@QAE@ABV0@@Z @ 779 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfo const &) - ?deleteFromBinding@QDeclarativeAction@@QAEXXZ @ 780 NONAME ; void QDeclarativeAction::deleteFromBinding(void) - ?setClip@QDeclarativeItem@@QAEX_N@Z @ 781 NONAME ; void QDeclarativeItem::setClip(bool) - ??4QDeclarativeCustomParserNode@@QAEAAV0@ABV0@@Z @ 782 NONAME ; class QDeclarativeCustomParserNode & QDeclarativeCustomParserNode::operator=(class QDeclarativeCustomParserNode const &) - ?color@QDeclarativePen@@QBE?AVQColor@@XZ @ 783 NONAME ; class QColor QDeclarativePen::color(void) const - ?setDesignable@QMetaPropertyBuilder@@QAEX_N@Z @ 784 NONAME ; void QMetaPropertyBuilder::setDesignable(bool) - ?setWrapMode@QDeclarativeText@@QAEXW4WrapMode@1@@Z @ 785 NONAME ; void QDeclarativeText::setWrapMode(enum QDeclarativeText::WrapMode) - ?addClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@0@Z @ 786 NONAME ; int QMetaObjectBuilder::addClassInfo(class QByteArray const &, class QByteArray const &) - ?qt_metacall@QDeclarativePen@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 787 NONAME ; int QDeclarativePen::qt_metacall(enum QMetaObject::Call, int, void * *) - ?dynamicProperty@QDeclarativeDomObject@@QBE?AVQDeclarativeDomDynamicProperty@@ABVQByteArray@@@Z @ 788 NONAME ; class QDeclarativeDomDynamicProperty QDeclarativeDomObject::dynamicProperty(class QByteArray const &) const - ??1QDeclarativeDomComponent@@QAE@XZ @ 789 NONAME ; QDeclarativeDomComponent::~QDeclarativeDomComponent(void) - ?setRight@QDeclarativeScaleGrid@@QAEXH@Z @ 790 NONAME ; void QDeclarativeScaleGrid::setRight(int) - ?isList@QDeclarativeMetaType@@SA_NH@Z @ 791 NONAME ; bool QDeclarativeMetaType::isList(int) - ??6QDeclarativeInfo@@QAEAAV0@VQTextStreamManipulator@@@Z @ 792 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QTextStreamManipulator) - ?index@QDeclarativeProperty@@QBEHXZ @ 793 NONAME ; int QDeclarativeProperty::index(void) const - ?d_func@QMetaPropertyBuilder@@ABEPAVQMetaPropertyBuilderPrivate@@XZ @ 794 NONAME ; class QMetaPropertyBuilderPrivate * QMetaPropertyBuilder::d_func(void) const - ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 795 NONAME ; class QString QDeclarativeScaleGrid::tr(char const *, char const *, int) - ?setEnabled@QDeclarativeAbstractBinding@@QAEX_N@Z @ 796 NONAME ; void QDeclarativeAbstractBinding::setEnabled(bool) - ?returnType@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 797 NONAME ; class QByteArray QMetaMethodBuilder::returnType(void) const - ?propertyValueSourceCast@QDeclarativeType@@QBEHXZ @ 798 NONAME ; int QDeclarativeType::propertyValueSourceCast(void) const - ?mousePressEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 799 NONAME ; void QDeclarativeText::mousePressEvent(class QGraphicsSceneMouseEvent *) - ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 800 NONAME ; class QString QDeclarativeText::trUtf8(char const *, char const *) - ?constructor@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 801 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::constructor(int) const - ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PAVQObject@@@Z @ 802 NONAME ; class QMetaProperty QDeclarativeMetaType::defaultProperty(class QObject *) - ?resetHeight@QDeclarativeItemPrivate@@UAEXXZ @ 803 NONAME ; void QDeclarativeItemPrivate::resetHeight(void) - ?qt_metacast@QDeclarativeDebugPropertyWatch@@UAEPAXPBD@Z @ 804 NONAME ; void * QDeclarativeDebugPropertyWatch::qt_metacast(char const *) - ??1QDeclarativeStateOperation@@UAE@XZ @ 805 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(void) - ??_EQDeclarativeDebugQuery@@UAE@I@Z @ 806 NONAME ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(unsigned int) - ?update@QDeclarativeAbstractBinding@@QAEXXZ @ 807 NONAME ; void QDeclarativeAbstractBinding::update(void) - ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 808 NONAME ; class QString QDeclarativeBehavior::tr(char const *, char const *, int) - ?read@QPacketProtocol@@QAE?AVQPacket@@XZ @ 809 NONAME ; class QPacket QPacketProtocol::read(void) - ?setParentItem@QDeclarativeItem@@QAEXPAV1@@Z @ 810 NONAME ; void QDeclarativeItem::setParentItem(class QDeclarativeItem *) - ?qmlAttachedProperties@QDeclarativeComponent@@SAPAVQDeclarativeComponentAttached@@PAVQObject@@@Z @ 811 NONAME ; class QDeclarativeComponentAttached * QDeclarativeComponent::qmlAttachedProperties(class QObject *) - ??0QDeclarativeView@@QAE@ABVQUrl@@PAVQWidget@@@Z @ 812 NONAME ; QDeclarativeView::QDeclarativeView(class QUrl const &, class QWidget *) - ?qt_metacall@QDeclarativePixmapReply@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 813 NONAME ABSENT ; int QDeclarativePixmapReply::qt_metacall(enum QMetaObject::Call, int, void * *) - ?valueChanged@QDeclarativeExpression@@IAEXXZ @ 814 NONAME ; void QDeclarativeExpression::valueChanged(void) - ?childrenChanged@QDeclarativeItem@@IAEXXZ @ 815 NONAME ; void QDeclarativeItem::childrenChanged(void) - ??_EQDeclarativeView@@UAE@I@Z @ 816 NONAME ; QDeclarativeView::~QDeclarativeView(unsigned int) - ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 817 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *, int) - ?tag@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 818 NONAME ; class QByteArray QMetaMethodBuilder::tag(void) const - ?getStaticMetaObject@QPacketProtocol@@SAABUQMetaObject@@XZ @ 819 NONAME ; struct QMetaObject const & QPacketProtocol::getStaticMetaObject(void) - ?setContext@QDeclarativeScriptString@@QAEXPAVQDeclarativeContext@@@Z @ 820 NONAME ; void QDeclarativeScriptString::setContext(class QDeclarativeContext *) - ?addImageProvider@QDeclarativeEngine@@QAEXABVQString@@PAVQDeclarativeImageProvider@@@Z @ 821 NONAME ; void QDeclarativeEngine::addImageProvider(class QString const &, class QDeclarativeImageProvider *) - ?d_func@QDeclarativeStateGroup@@ABEPBVQDeclarativeStateGroupPrivate@@XZ @ 822 NONAME ; class QDeclarativeStateGroupPrivate const * QDeclarativeStateGroup::d_func(void) const - ?stateChanged@QDeclarativeItem@@IAEXABVQString@@@Z @ 823 NONAME ; void QDeclarativeItem::stateChanged(class QString const &) - ?horizontalAlignmentChanged@QDeclarativeText@@IAEXW4HAlignment@1@@Z @ 824 NONAME ; void QDeclarativeText::horizontalAlignmentChanged(enum QDeclarativeText::HAlignment) - ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 825 NONAME ABSENT ; class QString QDeclarativePixmapCache::tr(char const *, char const *) - ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 826 NONAME ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData &) - ?setDynamic@QMetaPropertyBuilder@@QAEX_N@Z @ 827 NONAME ; void QMetaPropertyBuilder::setDynamic(bool) - ?d_func@QDeclarativeEngine@@ABEPBVQDeclarativeEnginePrivate@@XZ @ 828 NONAME ; class QDeclarativeEnginePrivate const * QDeclarativeEngine::d_func(void) const - ?toBinding@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueBinding@@XZ @ 829 NONAME ; class QDeclarativeDomValueBinding QDeclarativeDomValue::toBinding(void) const - ?removeImageProvider@QDeclarativeEngine@@QAEXABVQString@@@Z @ 830 NONAME ; void QDeclarativeEngine::removeImageProvider(class QString const &) - ?horizontalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 831 NONAME ; void QDeclarativeAnchors::horizontalCenterOffsetChanged(void) - ?tr@QDeclarativeContext@@SA?AVQString@@PBD0@Z @ 832 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *) - ?d_func@QDeclarativeItem@@ABEPBVQDeclarativeItemPrivate@@XZ @ 833 NONAME ; class QDeclarativeItemPrivate const * QDeclarativeItem::d_func(void) const - ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 834 NONAME ABSENT ; class QString QDeclarativePixmapReply::tr(char const *, char const *) - ?isUser@QMetaPropertyBuilder@@QBE_NXZ @ 835 NONAME ; bool QMetaPropertyBuilder::isUser(void) const - ?doUpdate@QDeclarativeRectangle@@AAEXXZ @ 836 NONAME ; void QDeclarativeRectangle::doUpdate(void) - ?qmlExecuteDeferred@@YAXPAVQObject@@@Z @ 837 NONAME ; void qmlExecuteDeferred(class QObject *) - ?setImplicitHeight@QDeclarativeItem@@IAEXM@Z @ 838 NONAME ; void QDeclarativeItem::setImplicitHeight(float) - ?horizontalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 839 NONAME ; float QDeclarativeAnchors::horizontalCenterOffset(void) const - ?resetRight@QDeclarativeAnchors@@QAEXXZ @ 840 NONAME ; void QDeclarativeAnchors::resetRight(void) - ??6QDeclarativeInfo@@QAEAAV0@J@Z @ 841 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(long) - ?isReady@QDeclarativeComponent@@QBE_NXZ @ 842 NONAME ; bool QDeclarativeComponent::isReady(void) const - ??4QDeclarativeDebugObjectReference@@QAEAAV0@ABV0@@Z @ 843 NONAME ; class QDeclarativeDebugObjectReference & QDeclarativeDebugObjectReference::operator=(class QDeclarativeDebugObjectReference const &) - ??1QDeclarativeDomDynamicProperty@@QAE@XZ @ 844 NONAME ; QDeclarativeDomDynamicProperty::~QDeclarativeDomDynamicProperty(void) - ??1QDeclarativeBehavior@@UAE@XZ @ 845 NONAME ; QDeclarativeBehavior::~QDeclarativeBehavior(void) - ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@@Z @ 846 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *) - ?qt_metacall@QDeclarativeDebugClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 847 NONAME ; int QDeclarativeDebugClient::qt_metacall(enum QMetaObject::Call, int, void * *) - ?d_func@QDeclarativeDebugService@@ABEPBVQDeclarativeDebugServicePrivate@@XZ @ 848 NONAME ; class QDeclarativeDebugServicePrivate const * QDeclarativeDebugService::d_func(void) const - ??1QDeclarativeDebugQuery@@UAE@XZ @ 849 NONAME ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(void) - ?data_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 850 NONAME ; void QDeclarativeItemPrivate::data_append(class QDeclarativeListProperty<class QObject> *, class QObject *) - ??1QDeclarativePixmapReply@@UAE@XZ @ 851 NONAME ABSENT ; QDeclarativePixmapReply::~QDeclarativePixmapReply(void) - ?tr@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 852 NONAME ; class QString QDeclarativeState::tr(char const *, char const *) - ?isLoading@QDeclarativePixmapReply@@ABE_NXZ @ 853 NONAME ABSENT ; bool QDeclarativePixmapReply::isLoading(void) const - ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 854 NONAME ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *, int) - ?createProperty@QDeclarativeOpenMetaObject@@MAEHPBD0@Z @ 855 NONAME ; int QDeclarativeOpenMetaObject::createProperty(char const *, char const *) - ?bottomMargin@QDeclarativeAnchors@@QBEMXZ @ 856 NONAME ; float QDeclarativeAnchors::bottomMargin(void) const - ?q_func@QDeclarativeItemPrivate@@AAEPAVQDeclarativeItem@@XZ @ 857 NONAME ; class QDeclarativeItem * QDeclarativeItemPrivate::q_func(void) - ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 858 NONAME ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *) - ??1QDeclarativeDomList@@QAE@XZ @ 859 NONAME ; QDeclarativeDomList::~QDeclarativeDomList(void) - ??0QDeclarativeOpenMetaObjectType@@QAE@PBUQMetaObject@@PAVQDeclarativeEngine@@@Z @ 860 NONAME ; QDeclarativeOpenMetaObjectType::QDeclarativeOpenMetaObjectType(struct QMetaObject const *, class QDeclarativeEngine *) - ?removeProperty@QMetaObjectBuilder@@QAEXH@Z @ 861 NONAME ; void QMetaObjectBuilder::removeProperty(int) - ?staticMetaObject@QDeclarativeScaleGrid@@2UQMetaObject@@B @ 862 NONAME ; struct QMetaObject const QDeclarativeScaleGrid::staticMetaObject - ??0QDeclarativeDomObject@@QAE@ABV0@@Z @ 863 NONAME ; QDeclarativeDomObject::QDeclarativeDomObject(class QDeclarativeDomObject const &) - ?qt_metacast@QDeclarativeDebugWatch@@UAEPAXPBD@Z @ 864 NONAME ; void * QDeclarativeDebugWatch::qt_metacast(char const *) - ?implicitHeight@QDeclarativeItem@@QBEMXZ @ 865 NONAME ; float QDeclarativeItem::implicitHeight(void) const - ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 866 NONAME ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *) - ?status@QDeclarativePixmapReply@@QBE?AW4Status@1@XZ @ 867 NONAME ABSENT ; enum QDeclarativePixmapReply::Status QDeclarativePixmapReply::status(void) const - ??6@YA?AVQDebug@@V0@ABVQDeclarativeError@@@Z @ 868 NONAME ; class QDebug operator<<(class QDebug, class QDeclarativeError const &) - ?setContextProperty@QDeclarativeContext@@QAEXABVQString@@ABVQVariant@@@Z @ 869 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QVariant const &) - ?imports@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeDomImport@@@@XZ @ 870 NONAME ; class QList<class QDeclarativeDomImport> QDeclarativeDomDocument::imports(void) const - ?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0@Z @ 871 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *) - ?getStaticMetaObject@QDeclarativePen@@SAABUQMetaObject@@XZ @ 872 NONAME ; struct QMetaObject const & QDeclarativePen::getStaticMetaObject(void) - ?penChanged@QDeclarativePen@@IAEXXZ @ 873 NONAME ; void QDeclarativePen::penChanged(void) - ?propertyTypeName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 874 NONAME ; class QByteArray QDeclarativeDomDynamicProperty::propertyTypeName(void) const - ?position@QDeclarativeDomValue@@QBEHXZ @ 875 NONAME ; int QDeclarativeDomValue::position(void) const - ?setWidth@QDeclarativeItemPrivate@@UAEXM@Z @ 876 NONAME ; void QDeclarativeItemPrivate::setWidth(float) - ?staticMetaObject@QDeclarativeDebugWatch@@2UQMetaObject@@B @ 877 NONAME ; struct QMetaObject const QDeclarativeDebugWatch::staticMetaObject - ??_EQDeclarativeContext@@UAE@I@Z @ 878 NONAME ; QDeclarativeContext::~QDeclarativeContext(unsigned int) - ?rootContext@QDeclarativeView@@QAEPAVQDeclarativeContext@@XZ @ 879 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void) - ?staticMetaObject@QDeclarativeDebugQuery@@2UQMetaObject@@B @ 880 NONAME ; struct QMetaObject const QDeclarativeDebugQuery::staticMetaObject - ??0QDeclarativeExtensionPlugin@@QAE@PAVQObject@@@Z @ 881 NONAME ; QDeclarativeExtensionPlugin::QDeclarativeExtensionPlugin(class QObject *) - ??_EQDeclarativeOpenMetaObject@@UAE@I@Z @ 882 NONAME ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(unsigned int) - ?states@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 883 NONAME ; class QDeclarativeListProperty<class QDeclarativeState> QDeclarativeItemPrivate::states(void) - ?rawMetaObjectForType@QDeclarativePropertyPrivate@@SAPBUQMetaObject@@PAVQDeclarativeEnginePrivate@@H@Z @ 884 NONAME ; struct QMetaObject const * QDeclarativePropertyPrivate::rawMetaObjectForType(class QDeclarativeEnginePrivate *, int) - ?setHeight@QDeclarativeItem@@QAEXM@Z @ 885 NONAME ; void QDeclarativeItem::setHeight(float) - ??0QDeclarativeDomDocument@@QAE@ABV0@@Z @ 886 NONAME ; QDeclarativeDomDocument::QDeclarativeDomDocument(class QDeclarativeDomDocument const &) - ?position@QDeclarativeDomDynamicProperty@@QBEHXZ @ 887 NONAME ; int QDeclarativeDomDynamicProperty::position(void) const - ?animations@QDeclarativeTransition@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeAbstractAnimation@@@@XZ @ 888 NONAME ; class QDeclarativeListProperty<class QDeclarativeAbstractAnimation> QDeclarativeTransition::animations(void) - ?tr@QDeclarativeExpression@@SA?AVQString@@PBD0H@Z @ 889 NONAME ; class QString QDeclarativeExpression::tr(char const *, char const *, int) - ??_EQMetaObjectBuilder@@UAE@I@Z @ 890 NONAME ; QMetaObjectBuilder::~QMetaObjectBuilder(unsigned int) - ?propertyName@QDeclarativeDomProperty@@QBE?AVQByteArray@@XZ @ 891 NONAME ; class QByteArray QDeclarativeDomProperty::propertyName(void) const - ??0QDeclarativeView@@QAE@PAVQWidget@@@Z @ 892 NONAME ; QDeclarativeView::QDeclarativeView(class QWidget *) - ?createObject@QDeclarativeComponent@@IAE?AVQScriptValue@@PAVQObject@@@Z @ 893 NONAME ; class QScriptValue QDeclarativeComponent::createObject(class QObject *) - ?name@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 894 NONAME ; class QString QDeclarativeDebugPropertyReference::name(void) const - ?object@QDeclarativeDomValueValueSource@@QBE?AVQDeclarativeDomObject@@XZ @ 895 NONAME ; class QDeclarativeDomObject QDeclarativeDomValueValueSource::object(void) const - ??0QMetaPropertyBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 896 NONAME ; QMetaPropertyBuilder::QMetaPropertyBuilder(class QMetaObjectBuilder const *, int) - ?d_func@QDeclarativeEngineDebug@@ABEPBVQDeclarativeEngineDebugPrivate@@XZ @ 897 NONAME ; class QDeclarativeEngineDebugPrivate const * QDeclarativeEngineDebug::d_func(void) const - ?d_func@QDeclarativeBinding@@AAEPAVQDeclarativeBindingPrivate@@XZ @ 898 NONAME ; class QDeclarativeBindingPrivate * QDeclarativeBinding::d_func(void) - ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 899 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *, int) - ?attachedPropertiesFuncId@QDeclarativeMetaType@@SAHPBUQMetaObject@@@Z @ 900 NONAME ; int QDeclarativeMetaType::attachedPropertiesFuncId(struct QMetaObject const *) - ?horizontalCenter@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 901 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::horizontalCenter(void) const - ?isNull@QDeclarativeComponent@@QBE_NXZ @ 902 NONAME ; bool QDeclarativeComponent::isNull(void) const - ?d_func@QDeclarativeRectangle@@ABEPBVQDeclarativeRectanglePrivate@@XZ @ 903 NONAME ; class QDeclarativeRectanglePrivate const * QDeclarativeRectangle::d_func(void) const - ?setRightMargin@QDeclarativeAnchors@@QAEXM@Z @ 904 NONAME ; void QDeclarativeAnchors::setRightMargin(float) - ?className@QMetaObjectBuilder@@QBE?AVQByteArray@@XZ @ 905 NONAME ; class QByteArray QMetaObjectBuilder::className(void) const - ??0QDeclarativeState@@QAE@PAVQObject@@@Z @ 906 NONAME ; QDeclarativeState::QDeclarativeState(class QObject *) - ?contexts@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugContextReference@@@@XZ @ 907 NONAME ; class QList<class QDeclarativeDebugContextReference> QDeclarativeDebugContextReference::contexts(void) const - ?keyReleaseEvent@QDeclarativeItem@@MAEXPAVQKeyEvent@@@Z @ 908 NONAME ; void QDeclarativeItem::keyReleaseEvent(class QKeyEvent *) - ?qt_metacall@QDeclarativeAnchors@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 909 NONAME ; int QDeclarativeAnchors::qt_metacall(enum QMetaObject::Call, int, void * *) - ??0QDeclarativeAnchors@@QAE@PAVQGraphicsObject@@PAVQObject@@@Z @ 910 NONAME ; QDeclarativeAnchors::QDeclarativeAnchors(class QGraphicsObject *, class QObject *) - ??4QDeclarativeScriptString@@QAEAAV0@ABV0@@Z @ 911 NONAME ; class QDeclarativeScriptString & QDeclarativeScriptString::operator=(class QDeclarativeScriptString const &) - ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 912 NONAME ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty const &) - ?hasNotifySignal@QMetaPropertyBuilder@@QBE_NXZ @ 913 NONAME ; bool QMetaPropertyBuilder::hasNotifySignal(void) const - ??4QDeclarativeDomImport@@QAEAAV0@ABV0@@Z @ 914 NONAME ; class QDeclarativeDomImport & QDeclarativeDomImport::operator=(class QDeclarativeDomImport const &) - ?resetFill@QDeclarativeAnchors@@QAEXXZ @ 915 NONAME ; void QDeclarativeAnchors::resetFill(void) - ??6QDeclarativeInfo@@QAEAAV0@_K@Z @ 916 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned long long) - ?d_func@QDeclarativeComponent@@ABEPBVQDeclarativeComponentPrivate@@XZ @ 917 NONAME ; class QDeclarativeComponentPrivate const * QDeclarativeComponent::d_func(void) const - ??0QDeclarativeBehavior@@QAE@PAVQObject@@@Z @ 918 NONAME ; QDeclarativeBehavior::QDeclarativeBehavior(class QObject *) - ?length@QDeclarativeDomValue@@QBEHXZ @ 919 NONAME ; int QDeclarativeDomValue::length(void) const - ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 920 NONAME ; class QString QDeclarativeBinding::trUtf8(char const *, char const *, int) - ??0QDeclarativeType@@AAE@HABURegisterInterface@QDeclarativePrivate@@@Z @ 921 NONAME ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterInterface const &) - ?scopeObject@QDeclarativeScriptString@@QBEPAVQObject@@XZ @ 922 NONAME ; class QObject * QDeclarativeScriptString::scopeObject(void) const - ?left@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 923 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::left(void) const - ??1QDeclarativeDebuggerStatus@@UAE@XZ @ 924 NONAME ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(void) - ??6QDeclarativeInfo@@QAEAAV0@ABVQLatin1String@@@Z @ 925 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QLatin1String const &) - ?at@QDeclarativeListReference@@QBEPAVQObject@@H@Z @ 926 NONAME ; class QObject * QDeclarativeListReference::at(int) const - ?metaObject@QDeclarativeDebugWatch@@UBEPBUQMetaObject@@XZ @ 927 NONAME ; struct QMetaObject const * QDeclarativeDebugWatch::metaObject(void) const - ?qt_metacast@QListModelInterface@@UAEPAXPBD@Z @ 928 NONAME ; void * QListModelInterface::qt_metacast(char const *) - ?deserialize@QMetaObjectBuilder@@QAEXAAVQDataStream@@ABV?$QMap@VQByteArray@@PB$$CBUQMetaObject@@@@@Z @ 929 NONAME ; void QMetaObjectBuilder::deserialize(class QDataStream &, class QMap<class QByteArray, struct QMetaObject const *> const &) - ?canClear@QDeclarativeListReference@@QBE_NXZ @ 930 NONAME ; bool QDeclarativeListReference::canClear(void) const - ??4QDeclarativeCustomParserProperty@@QAEAAV0@ABV0@@Z @ 931 NONAME ; class QDeclarativeCustomParserProperty & QDeclarativeCustomParserProperty::operator=(class QDeclarativeCustomParserProperty const &) - ?parameterNames@QMetaMethodBuilder@@QBE?AV?$QList@VQByteArray@@@@XZ @ 932 NONAME ; class QList<class QByteArray> QMetaMethodBuilder::parameterNames(void) const - ?get@QDeclarativeListModel@@QBE?AVQScriptValue@@H@Z @ 933 NONAME ; class QScriptValue QDeclarativeListModel::get(int) const - ?createSize@QDeclarativeType@@QBEHXZ @ 934 NONAME ; int QDeclarativeType::createSize(void) const - ?isValueSource@QDeclarativeDomValue@@QBE_NXZ @ 935 NONAME ; bool QDeclarativeDomValue::isValueSource(void) const - ?isWritable@QDeclarativeProperty@@QBE_NXZ @ 936 NONAME ; bool QDeclarativeProperty::isWritable(void) const - ?setKeepMouseGrab@QDeclarativeItem@@QAEX_N@Z @ 937 NONAME ; void QDeclarativeItem::setKeepMouseGrab(bool) - ??0QDeclarativeDebugContextReference@@QAE@XZ @ 938 NONAME ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(void) - ?setParameterNames@QMetaMethodBuilder@@QAEXABV?$QList@VQByteArray@@@@@Z @ 939 NONAME ; void QMetaMethodBuilder::setParameterNames(class QList<class QByteArray> const &) - ?getStaticMetaObject@QDeclarativeDebugRootContextQuery@@SAABUQMetaObject@@XZ @ 940 NONAME ; struct QMetaObject const & QDeclarativeDebugRootContextQuery::getStaticMetaObject(void) - ?textChanged@QDeclarativeText@@IAEXABVQString@@@Z @ 941 NONAME ; void QDeclarativeText::textChanged(class QString const &) - ?trUtf8@QDeclarativeItem@@SA?AVQString@@PBD0@Z @ 942 NONAME ; class QString QDeclarativeItem::trUtf8(char const *, char const *) - ??0QDeclarativeCustomParserProperty@@QAE@ABV0@@Z @ 943 NONAME ; QDeclarativeCustomParserProperty::QDeclarativeCustomParserProperty(class QDeclarativeCustomParserProperty const &) - ?getStaticMetaObject@QDeclarativeComponent@@SAABUQMetaObject@@XZ @ 944 NONAME ; struct QMetaObject const & QDeclarativeComponent::getStaticMetaObject(void) - ?parentItem@QDeclarativeItem@@QBEPAV1@XZ @ 945 NONAME ; class QDeclarativeItem * QDeclarativeItem::parentItem(void) const - ?value@QMetaEnumBuilder@@QBEHH@Z @ 946 NONAME ; int QMetaEnumBuilder::value(int) const - ??_EQDeclarativeExpression@@UAE@I@Z @ 947 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(unsigned int) - ?load@QDeclarativeDomDocument@@QAE_NPAVQDeclarativeEngine@@ABVQByteArray@@ABVQUrl@@@Z @ 948 NONAME ; bool QDeclarativeDomDocument::load(class QDeclarativeEngine *, class QByteArray const &, class QUrl const &) - ?staticMetaObject@QDeclarativeStateGroup@@2UQMetaObject@@B @ 949 NONAME ; struct QMetaObject const QDeclarativeStateGroup::staticMetaObject - ?tr@QDeclarativePropertyMap@@SA?AVQString@@PBD0@Z @ 950 NONAME ; class QString QDeclarativePropertyMap::tr(char const *, char const *) - ?verticalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 951 NONAME ; void QDeclarativeAnchors::verticalCenterChanged(void) - ?isScriptable@QMetaPropertyBuilder@@QBE_NXZ @ 952 NONAME ; bool QMetaPropertyBuilder::isScriptable(void) const - ?typeCategory@QDeclarativeMetaType@@SA?AW4TypeCategory@1@H@Z @ 953 NONAME ; enum QDeclarativeMetaType::TypeCategory QDeclarativeMetaType::typeCategory(int) - ?findSignalByName@QDeclarativePropertyPrivate@@SA?AVQMetaMethod@@PBUQMetaObject@@ABVQByteArray@@@Z @ 954 NONAME ; class QMetaMethod QDeclarativePropertyPrivate::findSignalByName(struct QMetaObject const *, class QByteArray const &) - ?length@QDeclarativeDomDynamicProperty@@QBEHXZ @ 955 NONAME ; int QDeclarativeDomDynamicProperty::length(void) const - ?property@QDeclarativeBinding@@QBE?AVQDeclarativeProperty@@XZ @ 956 NONAME ; class QDeclarativeProperty QDeclarativeBinding::property(void) const - ??0QDeclarativeDomValueBinding@@QAE@XZ @ 957 NONAME ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(void) - ?addImportPath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 958 NONAME ; void QDeclarativeEngine::addImportPath(class QString const &) - ?engine@QDeclarativeContext@@QBEPAVQDeclarativeEngine@@XZ @ 959 NONAME ; class QDeclarativeEngine * QDeclarativeContext::engine(void) const - ?length@QDeclarativeDomObject@@QBEHXZ @ 960 NONAME ; int QDeclarativeDomObject::length(void) const - ?setBaselineOffset@QDeclarativeAnchors@@QAEXM@Z @ 961 NONAME ; void QDeclarativeAnchors::setBaselineOffset(float) - ?append@QDeclarativeListReference@@QBE_NPAVQObject@@@Z @ 962 NONAME ; bool QDeclarativeListReference::append(class QObject *) const - ?d_func@QDeclarativeEngineDebug@@AAEPAVQDeclarativeEngineDebugPrivate@@XZ @ 963 NONAME ; class QDeclarativeEngineDebugPrivate * QDeclarativeEngineDebug::d_func(void) - ??1QDeclarativeNetworkAccessManagerFactory@@UAE@XZ @ 964 NONAME ; QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory(void) - ?textFormatChanged@QDeclarativeText@@IAEXW4TextFormat@1@@Z @ 965 NONAME ; void QDeclarativeText::textFormatChanged(enum QDeclarativeText::TextFormat) - ?removeState@QDeclarativeStateGroup@@AAEXPAVQDeclarativeState@@@Z @ 966 NONAME ; void QDeclarativeStateGroup::removeState(class QDeclarativeState *) - ?qmlTypeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 967 NONAME ; class QByteArray QDeclarativeType::qmlTypeName(void) const - ?tr@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 968 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *) - ?setLoading@QDeclarativePixmapReply@@AAEXXZ @ 969 NONAME ABSENT ; void QDeclarativePixmapReply::setLoading(void) - ?isProperty@QDeclarativeProperty@@QBE_NXZ @ 970 NONAME ; bool QDeclarativeProperty::isProperty(void) const - ?states@QDeclarativeStateGroup@@QBE?AV?$QList@PAVQDeclarativeState@@@@XZ @ 971 NONAME ; class QList<class QDeclarativeState *> QDeclarativeStateGroup::states(void) const - ??1QDeclarativeDebugExpressionQuery@@UAE@XZ @ 972 NONAME ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(void) - ?isValid@QDeclarativeDomObject@@QBE_NXZ @ 973 NONAME ; bool QDeclarativeDomObject::isValid(void) const - ?staticMetaObject@QDeclarativeAnchors@@2UQMetaObject@@B @ 974 NONAME ; struct QMetaObject const QDeclarativeAnchors::staticMetaObject - ??_EQDeclarativePen@@UAE@I@Z @ 975 NONAME ; QDeclarativePen::~QDeclarativePen(unsigned int) - ??0QDeclarativeDomProperty@@QAE@ABV0@@Z @ 976 NONAME ; QDeclarativeDomProperty::QDeclarativeDomProperty(class QDeclarativeDomProperty const &) - ?_states@QDeclarativeItemPrivate@@QAEPAVQDeclarativeStateGroup@@XZ @ 977 NONAME ; class QDeclarativeStateGroup * QDeclarativeItemPrivate::_states(void) - ?verticalAlignmentChanged@QDeclarativeText@@IAEXW4VAlignment@1@@Z @ 978 NONAME ; void QDeclarativeText::verticalAlignmentChanged(enum QDeclarativeText::VAlignment) - ?typeId@QDeclarativeType@@QBEHXZ @ 979 NONAME ; int QDeclarativeType::typeId(void) const - ?marginsChanged@QDeclarativeAnchors@@IAEXXZ @ 980 NONAME ; void QDeclarativeAnchors::marginsChanged(void) - ?setValue@QDeclarativeOpenMetaObject@@QAEXHABVQVariant@@@Z @ 981 NONAME ; void QDeclarativeOpenMetaObject::setValue(int, class QVariant const &) - ?parentProperty@QDeclarativeItemPrivate@@SAXPAVQObject@@PAXPAVQDeclarativeNotifierEndpoint@@@Z @ 982 NONAME ; void QDeclarativeItemPrivate::parentProperty(class QObject *, void *, class QDeclarativeNotifierEndpoint *) - ??4QDeclarativeDebugContextReference@@QAEAAV0@ABV0@@Z @ 983 NONAME ; class QDeclarativeDebugContextReference & QDeclarativeDebugContextReference::operator=(class QDeclarativeDebugContextReference const &) - ?isModule@QDeclarativeMetaType@@SA_NABVQByteArray@@HH@Z @ 984 NONAME ; bool QDeclarativeMetaType::isModule(class QByteArray const &, int, int) - ?parentFunctions@QDeclarativeMetaType@@SA?AV?$QList@P6A?AW4AutoParentResult@QDeclarativePrivate@@PAVQObject@@0@Z@@XZ @ 985 NONAME ; class QList<enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)> QDeclarativeMetaType::parentFunctions(void) - ?metaObject@QDeclarativeDebugPropertyWatch@@UBEPBUQMetaObject@@XZ @ 986 NONAME ; struct QMetaObject const * QDeclarativeDebugPropertyWatch::metaObject(void) const - ??0QDeclarativeRectangle@@QAE@PAVQDeclarativeItem@@@Z @ 987 NONAME ; QDeclarativeRectangle::QDeclarativeRectangle(class QDeclarativeItem *) - ?setOutputWarningsToStandardError@QDeclarativeEngine@@QAEX_N@Z @ 988 NONAME ; void QDeclarativeEngine::setOutputWarningsToStandardError(bool) - ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@0@Z @ 989 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &, class QByteArray const &) - ?enumerator@QMetaObjectBuilder@@QBE?AVQMetaEnumBuilder@@H@Z @ 990 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::enumerator(int) const - ?fromRelocatableData@QMetaObjectBuilder@@SAXPAUQMetaObject@@PBU2@ABVQByteArray@@@Z @ 991 NONAME ; void QMetaObjectBuilder::fromRelocatableData(struct QMetaObject *, struct QMetaObject const *, class QByteArray const &) - ?gridRight@QDeclarativeGridScaledImage@@QBEHXZ @ 992 NONAME ; int QDeclarativeGridScaledImage::gridRight(void) const - ?isAlias@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 993 NONAME ; bool QDeclarativeDomDynamicProperty::isAlias(void) const - ?d_func@QDeclarativeContext@@ABEPBVQDeclarativeContextPrivate@@XZ @ 994 NONAME ; class QDeclarativeContextPrivate const * QDeclarativeContext::d_func(void) const - ?getStaticMetaObject@QDeclarativeDebugEnginesQuery@@SAABUQMetaObject@@XZ @ 995 NONAME ; struct QMetaObject const & QDeclarativeDebugEnginesQuery::getStaticMetaObject(void) - ?tr@QDeclarativeItem@@SA?AVQString@@PBD0H@Z @ 996 NONAME ; class QString QDeclarativeItem::tr(char const *, char const *, int) - ?staticMetaObject@QDeclarativeDebugPropertyWatch@@2UQMetaObject@@B @ 997 NONAME ; struct QMetaObject const QDeclarativeDebugPropertyWatch::staticMetaObject - ?setDescription@QDeclarativeError@@QAEXABVQString@@@Z @ 998 NONAME ; void QDeclarativeError::setDescription(class QString const &) - ??0QDeclarativeExpression@@AAE@PAVQDeclarativeContextData@@PAVQObject@@ABVQString@@@Z @ 999 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, class QObject *, class QString const &) - ??1QDeclarativeOpenMetaObjectType@@UAE@XZ @ 1000 NONAME ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(void) - ?setReversible@QDeclarativeTransition@@QAEX_N@Z @ 1001 NONAME ; void QDeclarativeTransition::setReversible(bool) - ?notifySignal@QMetaPropertyBuilder@@QBE?AVQMetaMethodBuilder@@XZ @ 1002 NONAME ; class QMetaMethodBuilder QMetaPropertyBuilder::notifySignal(void) const - ??0QDeclarativeDomList@@QAE@XZ @ 1003 NONAME ; QDeclarativeDomList::QDeclarativeDomList(void) - ?indexOfSignal@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1004 NONAME ; int QMetaObjectBuilder::indexOfSignal(class QByteArray const &) - ?toState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 1005 NONAME ; class QString QDeclarativeTransition::toState(void) const - ??0QDeclarativeDomDocument@@QAE@XZ @ 1006 NONAME ; QDeclarativeDomDocument::QDeclarativeDomDocument(void) - ?setWhen@QDeclarativeState@@QAEXPAVQDeclarativeBinding@@@Z @ 1007 NONAME ; void QDeclarativeState::setWhen(class QDeclarativeBinding *) - ?isWhenKnown@QDeclarativeState@@QBE_NXZ @ 1008 NONAME ; bool QDeclarativeState::isWhenKnown(void) const - ?agent@QDeclarativeListModel@@QAEPAVQDeclarativeListModelWorkerAgent@@XZ @ 1009 NONAME ; class QDeclarativeListModelWorkerAgent * QDeclarativeListModel::agent(void) - ?engine@QDeclarativeExpression@@QBEPAVQDeclarativeEngine@@XZ @ 1010 NONAME ; class QDeclarativeEngine * QDeclarativeExpression::engine(void) const - ??_EQDeclarativeDebugWatch@@UAE@I@Z @ 1011 NONAME ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(unsigned int) - ?isEmpty@QPacket@@QBE_NXZ @ 1012 NONAME ; bool QPacket::isEmpty(void) const - ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@PBUQMetaObject@@@Z @ 1013 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(struct QMetaObject const *) - ?setFill@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 1014 NONAME ; void QDeclarativeAnchors::setFill(class QGraphicsObject *) - ?setHAlign@QDeclarativeText@@QAEXW4HAlignment@1@@Z @ 1015 NONAME ; void QDeclarativeText::setHAlign(enum QDeclarativeText::HAlignment) - ??0QDeclarativeScriptString@@QAE@ABV0@@Z @ 1016 NONAME ; QDeclarativeScriptString::QDeclarativeScriptString(class QDeclarativeScriptString const &) - ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1017 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *) - ?metaObject@QDeclarativeDebugRootContextQuery@@UBEPBUQMetaObject@@XZ @ 1018 NONAME ; struct QMetaObject const * QDeclarativeDebugRootContextQuery::metaObject(void) const - ?setSignalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@PAV2@@Z @ 1019 NONAME ; class QDeclarativeExpression * QDeclarativePropertyPrivate::setSignalExpression(class QDeclarativeProperty const &, class QDeclarativeExpression *) - ?reversibleChanged@QDeclarativeTransition@@IAEXXZ @ 1020 NONAME ; void QDeclarativeTransition::reversibleChanged(void) - ??4QDeclarativeDomValueValueSource@@QAEAAV0@ABV0@@Z @ 1021 NONAME ; class QDeclarativeDomValueValueSource & QDeclarativeDomValueValueSource::operator=(class QDeclarativeDomValueValueSource const &) - ?name@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 1022 NONAME ; class QString QDeclarativeDebugObjectReference::name(void) const - ?anchorLines@QDeclarativeItemPrivate@@QBEPAUAnchorLines@1@XZ @ 1023 NONAME ; struct QDeclarativeItemPrivate::AnchorLines * QDeclarativeItemPrivate::anchorLines(void) const - ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABVQDeclarativeError@@@Z @ 1024 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QDeclarativeError const &) - ?staticMetaObject@QDeclarativeText@@2UQMetaObject@@B @ 1025 NONAME ; struct QMetaObject const QDeclarativeText::staticMetaObject - ?color@QDeclarativeRectangle@@QBE?AVQColor@@XZ @ 1026 NONAME ; class QColor QDeclarativeRectangle::color(void) const - ?isEnabled@QDeclarativeDebugClient@@QBE_NXZ @ 1027 NONAME ; bool QDeclarativeDebugClient::isEnabled(void) const - ?send@QPacketProtocol@@QAEXABVQPacket@@@Z @ 1028 NONAME ; void QPacketProtocol::send(class QPacket const &) - ?error@QDeclarativeCustomParser@@IAEXABVQDeclarativeCustomParserNode@@ABVQString@@@Z @ 1029 NONAME ; void QDeclarativeCustomParser::error(class QDeclarativeCustomParserNode const &, class QString const &) - ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PBUQMetaObject@@@Z @ 1030 NONAME ; class QMetaProperty QDeclarativeMetaType::defaultProperty(struct QMetaObject const *) - ?isComponentComplete@QDeclarativeItem@@IBE_NXZ @ 1031 NONAME ; bool QDeclarativeItem::isComponentComplete(void) const - ?type@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 1032 NONAME ; class QByteArray QMetaPropertyBuilder::type(void) const - ?setProperty@QDeclarativeListModel@@QAEXHABVQString@@ABVQVariant@@@Z @ 1033 NONAME ; void QDeclarativeListModel::setProperty(int, class QString const &, class QVariant const &) - ?rootContext@QDeclarativeDebugRootContextQuery@@QBE?AVQDeclarativeDebugContextReference@@XZ @ 1034 NONAME ; class QDeclarativeDebugContextReference QDeclarativeDebugRootContextQuery::rootContext(void) const - ?contextForObject@QDeclarativeEngine@@SAPAVQDeclarativeContext@@PBVQObject@@@Z @ 1035 NONAME ; class QDeclarativeContext * QDeclarativeEngine::contextForObject(class QObject const *) - ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQMetaProperty@@@Z @ 1036 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QMetaProperty const &) - ?isQObject@QDeclarativeMetaType@@SA_NH@Z @ 1037 NONAME ; bool QDeclarativeMetaType::isQObject(int) - ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 1038 NONAME ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *) - ?getStaticMetaObject@QDeclarativeValueType@@SAABUQMetaObject@@XZ @ 1039 NONAME ; struct QMetaObject const & QDeclarativeValueType::getStaticMetaObject(void) - ?valueChanged@QDeclarativePropertyMap@@IAEXABVQString@@ABVQVariant@@@Z @ 1040 NONAME ; void QDeclarativePropertyMap::valueChanged(class QString const &, class QVariant const &) - ?staticMetaObject@QPacketProtocol@@2UQMetaObject@@B @ 1041 NONAME ; struct QMetaObject const QPacketProtocol::staticMetaObject - ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 1042 NONAME ; class QString QDeclarativeListModel::tr(char const *, char const *, int) - ??0QDeclarativeScriptString@@QAE@XZ @ 1043 NONAME ; QDeclarativeScriptString::QDeclarativeScriptString(void) - ?tr@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1044 NONAME ; class QString QListModelInterface::tr(char const *, char const *) - ?height@QDeclarativeItemPrivate@@UBEMXZ @ 1045 NONAME ; float QDeclarativeItemPrivate::height(void) const - ?qt_metacast@QDeclarativeDebugObjectQuery@@UAEPAXPBD@Z @ 1046 NONAME ; void * QDeclarativeDebugObjectQuery::qt_metacast(char const *) - ?type@QDeclarativeDomValue@@QBE?AW4Type@1@XZ @ 1047 NONAME ; enum QDeclarativeDomValue::Type QDeclarativeDomValue::type(void) const - ?staticMetacallFunction@QMetaObjectBuilder@@QBEP6AHW4Call@QMetaObject@@HPAPAX@ZXZ @ 1048 NONAME ; int (*)(enum QMetaObject::Call, int, void * *) QMetaObjectBuilder::staticMetacallFunction(void) const - ?setStyle@QDeclarativeText@@QAEXW4TextStyle@1@@Z @ 1049 NONAME ; void QDeclarativeText::setStyle(enum QDeclarativeText::TextStyle) - ?staticMetaObject@QDeclarativePropertyMap@@2UQMetaObject@@B @ 1050 NONAME ; struct QMetaObject const QDeclarativePropertyMap::staticMetaObject - ??_EQDeclarativeDebugEnginesQuery@@UAE@I@Z @ 1051 NONAME ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(unsigned int) - ?enumeratorCount@QMetaObjectBuilder@@QBEHXZ @ 1052 NONAME ; int QMetaObjectBuilder::enumeratorCount(void) const - ?setConsistentTime@QDeclarativeItemPrivate@@SAX_J@Z @ 1053 NONAME ; void QDeclarativeItemPrivate::setConsistentTime(long long) - ?initializeEngine@QDeclarativeExtensionPlugin@@UAEXPAVQDeclarativeEngine@@PBD@Z @ 1054 NONAME ; void QDeclarativeExtensionPlugin::initializeEngine(class QDeclarativeEngine *, char const *) - ?metaObject@QDeclarativeDebugQuery@@UBEPBUQMetaObject@@XZ @ 1055 NONAME ; struct QMetaObject const * QDeclarativeDebugQuery::metaObject(void) const - ?rightMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1056 NONAME ; void QDeclarativeAnchors::rightMarginChanged(void) - ??_EQDeclarativePropertyValueInterceptor@@UAE@I@Z @ 1057 NONAME ; QDeclarativePropertyValueInterceptor::~QDeclarativePropertyValueInterceptor(unsigned int) - ?linkActivated@QDeclarativeText@@IAEXABVQString@@@Z @ 1058 NONAME ; void QDeclarativeText::linkActivated(class QString const &) - ?canConvert@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1059 NONAME ; bool QDeclarativePropertyPrivate::canConvert(struct QMetaObject const *, struct QMetaObject const *) - ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 1060 NONAME ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *, int) - ?toComponent@QDeclarativeDomObject@@QBE?AVQDeclarativeDomComponent@@XZ @ 1061 NONAME ; class QDeclarativeDomComponent QDeclarativeDomObject::toComponent(void) const - ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 1062 NONAME ; class QString QDeclarativeValueType::tr(char const *, char const *) - ?setLeft@QDeclarativeScaleGrid@@QAEXH@Z @ 1063 NONAME ; void QDeclarativeScaleGrid::setLeft(int) - ??1QDeclarativeGridScaledImage@@QAE@XZ @ 1064 NONAME ; QDeclarativeGridScaledImage::~QDeclarativeGridScaledImage(void) - ??0QDeclarativeGridScaledImage@@QAE@ABV0@@Z @ 1065 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QDeclarativeGridScaledImage const &) - ?column@QDeclarativeError@@QBEHXZ @ 1066 NONAME ; int QDeclarativeError::column(void) const - ?properties@QDeclarativeCustomParserNode@@QBE?AV?$QList@VQDeclarativeCustomParserProperty@@@@XZ @ 1067 NONAME ; class QList<class QDeclarativeCustomParserProperty> QDeclarativeCustomParserNode::properties(void) const - ?qt_metacast@QDeclarativeScaleGrid@@UAEPAXPBD@Z @ 1068 NONAME ; void * QDeclarativeScaleGrid::qt_metacast(char const *) - ??0QDeclarativeListReference@@QAE@XZ @ 1069 NONAME ; QDeclarativeListReference::QDeclarativeListReference(void) - ??1QDeclarativeDebugRootContextQuery@@UAE@XZ @ 1070 NONAME ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(void) - ?name@QDeclarativeCustomParserNode@@QBE?AVQByteArray@@XZ @ 1071 NONAME ; class QByteArray QDeclarativeCustomParserNode::name(void) const - ?object@QDeclarativeDomValueValueInterceptor@@QBE?AVQDeclarativeDomObject@@XZ @ 1072 NONAME ; class QDeclarativeDomObject QDeclarativeDomValueValueInterceptor::object(void) const - ??1QDeclarativePen@@UAE@XZ @ 1073 NONAME ; QDeclarativePen::~QDeclarativePen(void) - ?data@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQObject@@@@XZ @ 1074 NONAME ; class QDeclarativeListProperty<class QObject> QDeclarativeItemPrivate::data(void) - ?qt_metacall@QDeclarativeBinding@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1075 NONAME ; int QDeclarativeBinding::qt_metacall(enum QMetaObject::Call, int, void * *) - ??1QDeclarativeEngine@@UAE@XZ @ 1076 NONAME ; QDeclarativeEngine::~QDeclarativeEngine(void) - ?debugId@QDeclarativeDebugContextReference@@QBEHXZ @ 1077 NONAME ; int QDeclarativeDebugContextReference::debugId(void) const - ?propertyNameParts@QDeclarativeDomProperty@@QBE?AV?$QList@VQByteArray@@@@XZ @ 1078 NONAME ; class QList<class QByteArray> QDeclarativeDomProperty::propertyNameParts(void) const - ?rootContext@QDeclarativeEngine@@QAEPAVQDeclarativeContext@@XZ @ 1079 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) - ?resetWidth@QDeclarativeItemPrivate@@UAEXXZ @ 1080 NONAME ; void QDeclarativeItemPrivate::resetWidth(void) - ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@ABVQByteArray@@@Z @ 1081 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](class QByteArray const &) - ?bottom@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1082 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::bottom(void) const - ?device@QPacketProtocol@@QAEPAVQIODevice@@XZ @ 1083 NONAME ; class QIODevice * QPacketProtocol::device(void) - ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1084 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *) - ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@HPA_N@Z @ 1085 NONAME ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &, int, bool *) - ?metaObject@QDeclarativeComponent@@UBEPBUQMetaObject@@XZ @ 1086 NONAME ; struct QMetaObject const * QDeclarativeComponent::metaObject(void) const - ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABV?$QList@VQDeclarativeError@@@@@Z @ 1087 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QList<class QDeclarativeError> const &) - ?assignedValues@QDeclarativeCustomParserProperty@@QBE?AV?$QList@VQVariant@@@@XZ @ 1088 NONAME ; class QList<class QVariant> QDeclarativeCustomParserProperty::assignedValues(void) const - ?setValue@QDeclarativeOpenMetaObject@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1089 NONAME ; void QDeclarativeOpenMetaObject::setValue(class QByteArray const &, class QVariant const &) - ?data@QDeclarativeListModel@@UBE?AVQVariant@@HH@Z @ 1090 NONAME ; class QVariant QDeclarativeListModel::data(int, int) const - ?setElideMode@QDeclarativeText@@QAEXW4TextElideMode@1@@Z @ 1091 NONAME ; void QDeclarativeText::setElideMode(enum QDeclarativeText::TextElideMode) - ?d_func@QDeclarativePropertyMap@@ABEPBVQDeclarativePropertyMapPrivate@@XZ @ 1092 NONAME ; class QDeclarativePropertyMapPrivate const * QDeclarativePropertyMap::d_func(void) const - ?consistentTime@QDeclarativeItemPrivate@@2_JA @ 1093 NONAME ; long long QDeclarativeItemPrivate::consistentTime - ?setWidth@QDeclarativeItem@@QAEXM@Z @ 1094 NONAME ; void QDeclarativeItem::setWidth(float) - ?contextObject@QDeclarativeContext@@QBEPAVQObject@@XZ @ 1095 NONAME ; class QObject * QDeclarativeContext::contextObject(void) const - ?qt_metacall@QDeclarativeDebugObjectQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1096 NONAME ; int QDeclarativeDebugObjectQuery::qt_metacall(enum QMetaObject::Call, int, void * *) - ??_EQDeclarativeOpenMetaObjectType@@UAE@I@Z @ 1097 NONAME ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(unsigned int) - ?isWritable@QMetaPropertyBuilder@@QBE_NXZ @ 1098 NONAME ; bool QMetaPropertyBuilder::isWritable(void) const - ?sizeFFromString@QDeclarativeStringConverters@@YA?AVQSizeF@@ABVQString@@PA_N@Z @ 1099 NONAME ; class QSizeF QDeclarativeStringConverters::sizeFFromString(class QString const &, bool *) - ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeEngine@@@Z @ 1100 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &, class QDeclarativeEngine *) - ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1101 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &) - ??0QDeclarativeDebugFileReference@@QAE@XZ @ 1102 NONAME ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(void) - ?mapFromItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 1103 NONAME ; class QScriptValue QDeclarativeItem::mapFromItem(class QScriptValue const &, float, float) const - ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 1104 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *, int) - ?tr@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 1105 NONAME ; class QString QPacketProtocol::tr(char const *, char const *, int) - ?d_func@QDeclarativeAnchors@@ABEPBVQDeclarativeAnchorsPrivate@@XZ @ 1106 NONAME ; class QDeclarativeAnchorsPrivate const * QDeclarativeAnchors::d_func(void) const - ?metaObject@QDeclarativePixmapReply@@UBEPBUQMetaObject@@XZ @ 1107 NONAME ABSENT ; struct QMetaObject const * QDeclarativePixmapReply::metaObject(void) const - ?setNotifySignal@QMetaPropertyBuilder@@QAEXABVQMetaMethodBuilder@@@Z @ 1108 NONAME ; void QMetaPropertyBuilder::setNotifySignal(class QMetaMethodBuilder const &) - ?enabled@QDeclarativeBehavior@@QBE_NXZ @ 1109 NONAME ; bool QDeclarativeBehavior::enabled(void) const - ?initProperty@QDeclarativePropertyPrivate@@QAEXPAVQObject@@ABVQString@@@Z @ 1110 NONAME ; void QDeclarativePropertyPrivate::initProperty(class QObject *, class QString const &) - ?isEditable@QMetaPropertyBuilder@@QBE_NXZ @ 1111 NONAME ; bool QMetaPropertyBuilder::isEditable(void) const - ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContextData@@1@Z @ 1112 NONAME ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContextData *, class QObject *) - ?expression@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 1113 NONAME ; class QVariant QDeclarativeDebugExpressionQuery::expression(void) const - ??4QDeclarativeDomList@@QAEAAV0@ABV0@@Z @ 1114 NONAME ; class QDeclarativeDomList & QDeclarativeDomList::operator=(class QDeclarativeDomList const &) - ?qt_metacall@QDeclarativeComponent@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1115 NONAME ; int QDeclarativeComponent::qt_metacall(enum QMetaObject::Call, int, void * *) - ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 1116 NONAME ; class QString QDeclarativeDebugService::tr(char const *, char const *, int) - ?staticMetaObject@QDeclarativeEngine@@2UQMetaObject@@B @ 1117 NONAME ; struct QMetaObject const QDeclarativeEngine::staticMetaObject - ?staticMetaObject@QDeclarativeStateOperation@@2UQMetaObject@@B @ 1118 NONAME ; struct QMetaObject const QDeclarativeStateOperation::staticMetaObject - ?actions@QDeclarativeStateOperation@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1119 NONAME ; class QList<class QDeclarativeAction> QDeclarativeStateOperation::actions(void) - ?objectClassName@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 1120 NONAME ; class QByteArray QDeclarativeDomObject::objectClassName(void) const - ??8QDeclarativeProperty@@QBE_NABV0@@Z @ 1121 NONAME ; bool QDeclarativeProperty::operator==(class QDeclarativeProperty const &) const - ??1QDeclarativeDomValue@@QAE@XZ @ 1122 NONAME ; QDeclarativeDomValue::~QDeclarativeDomValue(void) - ??_EQDeclarativePropertyMap@@UAE@I@Z @ 1123 NONAME ; QDeclarativePropertyMap::~QDeclarativePropertyMap(unsigned int) - ?staticMetaObject@QDeclarativeDebugRootContextQuery@@2UQMetaObject@@B @ 1124 NONAME ; struct QMetaObject const QDeclarativeDebugRootContextQuery::staticMetaObject - ?noCreationReason@QDeclarativeType@@QBE?AVQString@@XZ @ 1125 NONAME ; class QString QDeclarativeType::noCreationReason(void) const - ?setUrl@QDeclarativeDebugFileReference@@QAEXABVQUrl@@@Z @ 1126 NONAME ; void QDeclarativeDebugFileReference::setUrl(class QUrl const &) - ??1QDeclarativeCustomParserProperty@@QAE@XZ @ 1127 NONAME ; QDeclarativeCustomParserProperty::~QDeclarativeCustomParserProperty(void) - ??1QPacketProtocol@@UAE@XZ @ 1128 NONAME ; QPacketProtocol::~QPacketProtocol(void) - ??1QDeclarativeAbstractBinding@@MAE@XZ @ 1129 NONAME ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(void) - ?indexOfEnumerator@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1130 NONAME ; int QMetaObjectBuilder::indexOfEnumerator(class QByteArray const &) - ?qt_metacast@QDeclarativePen@@UAEPAXPBD@Z @ 1131 NONAME ; void * QDeclarativePen::qt_metacast(char const *) - ?leftMargin@QDeclarativeAnchors@@QBEMXZ @ 1132 NONAME ; float QDeclarativeAnchors::leftMargin(void) const - ??1QDeclarativeComponent@@UAE@XZ @ 1133 NONAME ; QDeclarativeComponent::~QDeclarativeComponent(void) - ??1QDeclarativeItem@@UAE@XZ @ 1134 NONAME ; QDeclarativeItem::~QDeclarativeItem(void) - ?setEnabled@QDeclarativeAbstractBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1135 NONAME ; void QDeclarativeAbstractBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ?staticMetaObject@QListModelInterface@@2UQMetaObject@@B @ 1136 NONAME ; struct QMetaObject const QListModelInterface::staticMetaObject - ?d_func@QDeclarativeTransition@@ABEPBVQDeclarativeTransitionPrivate@@XZ @ 1137 NONAME ; class QDeclarativeTransitionPrivate const * QDeclarativeTransition::d_func(void) const - ?sourceFile@QDeclarativeExpression@@QBE?AVQString@@XZ @ 1138 NONAME ; class QString QDeclarativeExpression::sourceFile(void) const - ??_EQDeclarativeAnchors@@UAE@I@Z @ 1139 NONAME ; QDeclarativeAnchors::~QDeclarativeAnchors(unsigned int) - ?removeNotifySignal@QMetaPropertyBuilder@@QAEXXZ @ 1140 NONAME ; void QMetaPropertyBuilder::removeNotifySignal(void) - ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 1141 NONAME ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *) - ?setImportPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 1142 NONAME ; void QDeclarativeEngine::setImportPathList(class QStringList const &) - ?enabledChanged@QDeclarativeDebugService@@MAEX_N@Z @ 1143 NONAME ; void QDeclarativeDebugService::enabledChanged(bool) - ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1144 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QObject *) - ?asAST@Variant@QDeclarativeParser@@QBEPAVNode@AST@QDeclarativeJS@@XZ @ 1145 NONAME ; class QDeclarativeJS::AST::Node * QDeclarativeParser::Variant::asAST(void) const - ?indexOfClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1146 NONAME ; int QMetaObjectBuilder::indexOfClassInfo(class QByteArray const &) - ??0QDeclarativeDomImport@@QAE@ABV0@@Z @ 1147 NONAME ; QDeclarativeDomImport::QDeclarativeDomImport(class QDeclarativeDomImport const &) - ?width@QDeclarativePen@@QBEHXZ @ 1148 NONAME ; int QDeclarativePen::width(void) const - ?d_func@QDeclarativeStateGroup@@AAEPAVQDeclarativeStateGroupPrivate@@XZ @ 1149 NONAME ; class QDeclarativeStateGroupPrivate * QDeclarativeStateGroup::d_func(void) - ??6QDeclarativeInfo@@QAEAAV0@P6AAAVQTextStream@@AAV1@@Z@Z @ 1150 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QTextStream & (*)(class QTextStream &)) - ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 1151 NONAME ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *) - ?type@QDeclarativeOpenMetaObject@@QBEPAVQDeclarativeOpenMetaObjectType@@XZ @ 1152 NONAME ; class QDeclarativeOpenMetaObjectType * QDeclarativeOpenMetaObject::type(void) const - ?tr@QDeclarativeExpression@@SA?AVQString@@PBD0@Z @ 1153 NONAME ; class QString QDeclarativeExpression::tr(char const *, char const *) - ??0QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 1154 NONAME ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(void) - ??1QDeclarativeDebugPropertyWatch@@UAE@XZ @ 1155 NONAME ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(void) - ?evaluate@QDeclarativeExpression@@QAE?AVQVariant@@PA_N@Z @ 1156 NONAME ; class QVariant QDeclarativeExpression::evaluate(bool *) - ?isDefaultProperty@QDeclarativeDomProperty@@QBE_NXZ @ 1157 NONAME ; bool QDeclarativeDomProperty::isDefaultProperty(void) const - ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1158 NONAME ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QVariant const &) - ?metaObject@QDeclarativeRectangle@@UBEPBUQMetaObject@@XZ @ 1159 NONAME ; struct QMetaObject const * QDeclarativeRectangle::metaObject(void) const - ?forcedWidth@QDeclarativePixmapReply@@QBEHXZ @ 1160 NONAME ABSENT ; int QDeclarativePixmapReply::forcedWidth(void) const - ?removeRelatedMetaObject@QMetaObjectBuilder@@QAEXH@Z @ 1161 NONAME ; void QMetaObjectBuilder::removeRelatedMetaObject(int) - ??0QDeclarativeError@@QAE@XZ @ 1162 NONAME ; QDeclarativeError::QDeclarativeError(void) - ?object@QDeclarativeProperty@@QBEPAVQObject@@XZ @ 1163 NONAME ; class QObject * QDeclarativeProperty::object(void) const - ?stateGroup@QDeclarativeState@@QBEPAVQDeclarativeStateGroup@@XZ @ 1164 NONAME ; class QDeclarativeStateGroup * QDeclarativeState::stateGroup(void) const - ?connectNotifySignal@QDeclarativeProperty@@QBE_NPAVQObject@@H@Z @ 1165 NONAME ; bool QDeclarativeProperty::connectNotifySignal(class QObject *, int) const - ?focusChanged@QDeclarativeItemPrivate@@UAEX_N@Z @ 1166 NONAME ; void QDeclarativeItemPrivate::focusChanged(bool) - ?contextDebugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 1167 NONAME ; int QDeclarativeDebugObjectReference::contextDebugId(void) const - ?url@QDeclarativeDebugFileReference@@QBE?AVQUrl@@XZ @ 1168 NONAME ; class QUrl QDeclarativeDebugFileReference::url(void) const - ?paint@QDeclarativeRectangle@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1169 NONAME ; void QDeclarativeRectangle::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) - ??6QDeclarativeState@@QAEAAV0@PAVQDeclarativeStateOperation@@@Z @ 1170 NONAME ; class QDeclarativeState & QDeclarativeState::operator<<(class QDeclarativeStateOperation *) - ?destroy@QDeclarativeAbstractBinding@@UAEXXZ @ 1171 NONAME ; void QDeclarativeAbstractBinding::destroy(void) - ?qt_metacast@QDeclarativeDebugService@@UAEPAXPBD@Z @ 1172 NONAME ; void * QDeclarativeDebugService::qt_metacast(char const *) - ?qt_metacast@QDeclarativeValueType@@UAEPAXPBD@Z @ 1173 NONAME ; void * QDeclarativeValueType::qt_metacast(char const *) - ?childAt@QDeclarativeItem@@QBEPAV1@MM@Z @ 1174 NONAME ; class QDeclarativeItem * QDeclarativeItem::childAt(float, float) const - ?paintedWidth@QDeclarativeText@@QBEMXZ @ 1175 NONAME ; float QDeclarativeText::paintedWidth(void) const - ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1176 NONAME ; class QString QDeclarativeBinding::tr(char const *, char const *) - ?clip@QDeclarativeItem@@QBE_NXZ @ 1177 NONAME ; bool QDeclarativeItem::clip(void) const - ??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@PAVQObject@@@Z @ 1178 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QUrl const &, class QObject *) - ??0QDeclarativeValueTypeFactory@@QAE@XZ @ 1179 NONAME ; QDeclarativeValueTypeFactory::QDeclarativeValueTypeFactory(void) - ?literal@QDeclarativeDomValueLiteral@@QBE?AVQString@@XZ @ 1180 NONAME ; class QString QDeclarativeDomValueLiteral::literal(void) const - ??_EQDeclarativeEngineDebug@@UAE@I@Z @ 1181 NONAME ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(unsigned int) - ?bottom@QDeclarativeScaleGrid@@QBEHXZ @ 1182 NONAME ; int QDeclarativeScaleGrid::bottom(void) const - ?d_func@QDeclarativePropertyMap@@AAEPAVQDeclarativePropertyMapPrivate@@XZ @ 1183 NONAME ; class QDeclarativePropertyMapPrivate * QDeclarativePropertyMap::d_func(void) - ?forceFocus@QDeclarativeItem@@QAEXXZ @ 1184 NONAME ; void QDeclarativeItem::forceFocus(void) - ?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1185 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *) - ??0QDeclarativeTransition@@QAE@PAVQObject@@@Z @ 1186 NONAME ; QDeclarativeTransition::QDeclarativeTransition(class QObject *) - ?horizontalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1187 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::horizontalCenter(void) const - ?setObjectOwnership@QDeclarativeEngine@@SAXPAVQObject@@W4ObjectOwnership@1@@Z @ 1188 NONAME ; void QDeclarativeEngine::setObjectOwnership(class QObject *, enum QDeclarativeEngine::ObjectOwnership) - ?tr@QDeclarativeContext@@SA?AVQString@@PBD0H@Z @ 1189 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *, int) - ?metaCall@QDeclarativeOpenMetaObject@@MAEHW4Call@QMetaObject@@HPAPAX@Z @ 1190 NONAME ; int QDeclarativeOpenMetaObject::metaCall(enum QMetaObject::Call, int, void * *) - ??_EQDeclarativeText@@UAE@I@Z @ 1191 NONAME ; QDeclarativeText::~QDeclarativeText(unsigned int) - ?setLeftMargin@QDeclarativeAnchors@@QAEXM@Z @ 1192 NONAME ; void QDeclarativeAnchors::setLeftMargin(float) - ?metaObject@QDeclarativeStateGroup@@UBEPBUQMetaObject@@XZ @ 1193 NONAME ; struct QMetaObject const * QDeclarativeStateGroup::metaObject(void) const - ?expression@QDeclarativeAbstractBinding@@UBE?AVQString@@XZ @ 1194 NONAME ; class QString QDeclarativeAbstractBinding::expression(void) const - ??6QDeclarativeInfo@@QAEAAV0@N@Z @ 1195 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(double) - ?setAnimation@QDeclarativeBehavior@@QAEXPAVQDeclarativeAbstractAnimation@@@Z @ 1196 NONAME ; void QDeclarativeBehavior::setAnimation(class QDeclarativeAbstractAnimation *) - ?properties@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugPropertyReference@@@@XZ @ 1197 NONAME ; class QList<class QDeclarativeDebugPropertyReference> QDeclarativeDebugObjectReference::properties(void) const - ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 1198 NONAME ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *) - ?context@QDeclarativeExpression@@QBEPAVQDeclarativeContext@@XZ @ 1199 NONAME ; class QDeclarativeContext * QDeclarativeExpression::context(void) const - ?qt_metacast@QDeclarativeBehavior@@UAEPAXPBD@Z @ 1200 NONAME ; void * QDeclarativeBehavior::qt_metacast(char const *) - ?objectTypeMinorVersion@QDeclarativeDomObject@@QBEHXZ @ 1201 NONAME ; int QDeclarativeDomObject::objectTypeMinorVersion(void) const - ??0QDeclarativePropertyValueInterceptor@@QAE@XZ @ 1202 NONAME ; QDeclarativePropertyValueInterceptor::QDeclarativePropertyValueInterceptor(void) - ?isValid@QDeclarativeError@@QBE_NXZ @ 1203 NONAME ; bool QDeclarativeError::isValid(void) const - ??0QMetaMethodBuilder@@QAE@XZ @ 1204 NONAME ; QMetaMethodBuilder::QMetaMethodBuilder(void) - ?completed@QDeclarativeState@@IAEXXZ @ 1205 NONAME ; void QDeclarativeState::completed(void) - ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 1206 NONAME ABSENT ; class QString QDeclarativePixmapReply::tr(char const *, char const *, int) - ?radiusChanged@QDeclarativeRectangle@@IAEXXZ @ 1207 NONAME ; void QDeclarativeRectangle::radiusChanged(void) - ?getStaticMetaObject@QDeclarativeExpression@@SAABUQMetaObject@@XZ @ 1208 NONAME ; struct QMetaObject const & QDeclarativeExpression::getStaticMetaObject(void) - ?gridLeft@QDeclarativeGridScaledImage@@QBEHXZ @ 1209 NONAME ; int QDeclarativeGridScaledImage::gridLeft(void) const - ?setWritable@QMetaPropertyBuilder@@QAEX_N@Z @ 1210 NONAME ; void QMetaPropertyBuilder::setWritable(bool) - ?qt_metacast@QDeclarativeStateGroup@@UAEPAXPBD@Z @ 1211 NONAME ; void * QDeclarativeStateGroup::qt_metacast(char const *) - ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PAVQObject@@@Z @ 1212 NONAME ; class QMetaMethod QDeclarativeMetaType::defaultMethod(class QObject *) - ?qt_metacast@QDeclarativeEngineDebug@@UAEPAXPBD@Z @ 1213 NONAME ; void * QDeclarativeEngineDebug::qt_metacast(char const *) - ?staticMetaObject@QDeclarativeExpression@@2UQMetaObject@@B @ 1214 NONAME ; struct QMetaObject const QDeclarativeExpression::staticMetaObject - ?statusChanged@QDeclarativeComponent@@IAEXW4Status@1@@Z @ 1215 NONAME ; void QDeclarativeComponent::statusChanged(enum QDeclarativeComponent::Status) - ?setTarget@QDeclarativeBinding@@QAEXABVQDeclarativeProperty@@@Z @ 1216 NONAME ; void QDeclarativeBinding::setTarget(class QDeclarativeProperty const &) - ?imageProvider@QDeclarativeEngine@@QBEPAVQDeclarativeImageProvider@@ABVQString@@@Z @ 1217 NONAME ; class QDeclarativeImageProvider * QDeclarativeEngine::imageProvider(class QString const &) const - ?packetsAvailable@QPacketProtocol@@QBE_JXZ @ 1218 NONAME ; long long QPacketProtocol::packetsAvailable(void) const - ?state@QDeclarativeDebugWatch@@QBE?AW4State@1@XZ @ 1219 NONAME ; enum QDeclarativeDebugWatch::State QDeclarativeDebugWatch::state(void) const - ?attachedPropertiesFuncById@QDeclarativeMetaType@@SAP6APAVQObject@@PAV2@@ZH@Z @ 1220 NONAME ; class QObject * (*)(class QObject *) QDeclarativeMetaType::attachedPropertiesFuncById(int) - ?resetBaseline@QDeclarativeAnchors@@QAEXXZ @ 1221 NONAME ; void QDeclarativeAnchors::resetBaseline(void) - ?name@QDeclarativeDebugClient@@QBE?AVQString@@XZ @ 1222 NONAME ; class QString QDeclarativeDebugClient::name(void) const - ?propertyValueInterceptorCast@QDeclarativeType@@QBEHXZ @ 1223 NONAME ; int QDeclarativeType::propertyValueInterceptorCast(void) const - ?setData@QDeclarativeComponent@@QAEXABVQByteArray@@ABVQUrl@@@Z @ 1224 NONAME ; void QDeclarativeComponent::setData(class QByteArray const &, class QUrl const &) - ??4QDeclarativeDomValue@@QAEAAV0@ABV0@@Z @ 1225 NONAME ; class QDeclarativeDomValue & QDeclarativeDomValue::operator=(class QDeclarativeDomValue const &) - ?toString@QDeclarativeListModel@@UBE?AVQString@@H@Z @ 1226 NONAME ; class QString QDeclarativeListModel::toString(int) const - ?resetWidth@QDeclarativeItem@@QAEXXZ @ 1227 NONAME ; void QDeclarativeItem::resetWidth(void) - ??0QDeclarativeProperty@@QAE@ABV0@@Z @ 1228 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QDeclarativeProperty const &) - ?text@QDeclarativeText@@QBE?AVQString@@XZ @ 1229 NONAME ; class QString QDeclarativeText::text(void) const - ??1QDeclarativeDebugObjectQuery@@UAE@XZ @ 1230 NONAME ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(void) - ?count@QDeclarativeOpenMetaObject@@QBEHXZ @ 1231 NONAME ; int QDeclarativeOpenMetaObject::count(void) const - ?isFlag@QMetaEnumBuilder@@QBE_NXZ @ 1232 NONAME ; bool QMetaEnumBuilder::isFlag(void) const - ?bindingIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1233 NONAME ; int QDeclarativePropertyPrivate::bindingIndex(class QDeclarativeProperty const &) - ??0QDeclarativeDomValueBinding@@QAE@ABV0@@Z @ 1234 NONAME ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(class QDeclarativeDomValueBinding const &) - ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 1235 NONAME ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *) - ?classInfoName@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 1236 NONAME ; class QByteArray QMetaObjectBuilder::classInfoName(int) const - ?metaObject@QDeclarativeDebugObjectQuery@@UBEPBUQMetaObject@@XZ @ 1237 NONAME ; struct QMetaObject const * QDeclarativeDebugObjectQuery::metaObject(void) const - ??4QDeclarativeDomDynamicProperty@@QAEAAV0@ABV0@@Z @ 1238 NONAME ; class QDeclarativeDomDynamicProperty & QDeclarativeDomDynamicProperty::operator=(class QDeclarativeDomDynamicProperty const &) - ??_EQDeclarativeDebugEngineReference@@QAE@I@Z @ 1239 NONAME ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(unsigned int) - ?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4Anchor@QDeclarativeAnchors@@@@XZ @ 1240 NONAME ; class QFlags<enum QDeclarativeAnchors::Anchor> QDeclarativeAnchors::usedAnchors(void) const - ?baseline@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1241 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline(void) const - ?clear@QDeclarativeListModel@@QAEXXZ @ 1242 NONAME ; void QDeclarativeListModel::clear(void) - ??0QDeclarativeDebugObjectExpressionWatch@@QAE@PAVQObject@@@Z @ 1243 NONAME ; QDeclarativeDebugObjectExpressionWatch::QDeclarativeDebugObjectExpressionWatch(class QObject *) - ??4QDeclarativeDomProperty@@QAEAAV0@ABV0@@Z @ 1244 NONAME ; class QDeclarativeDomProperty & QDeclarativeDomProperty::operator=(class QDeclarativeDomProperty const &) - ?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1245 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &) - ?trUtf8@QDeclarativeContext@@SA?AVQString@@PBD0@Z @ 1246 NONAME ; class QString QDeclarativeContext::trUtf8(char const *, char const *) - ?borderChanged@QDeclarativeScaleGrid@@IAEXXZ @ 1247 NONAME ; void QDeclarativeScaleGrid::borderChanged(void) - ??1QDeclarativeRectangle@@UAE@XZ @ 1248 NONAME ; QDeclarativeRectangle::~QDeclarativeRectangle(void) - ?count@QDeclarativePropertyMap@@QBEHXZ @ 1249 NONAME ; int QDeclarativePropertyMap::count(void) const - ?setReturnType@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1250 NONAME ; void QMetaMethodBuilder::setReturnType(class QByteArray const &) - ??0QDeclarativePropertyValueSource@@QAE@XZ @ 1251 NONAME ; QDeclarativePropertyValueSource::QDeclarativePropertyValueSource(void) - ?tr@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 1252 NONAME ; class QString QDeclarativePen::tr(char const *, char const *, int) - ?toLiteral@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueLiteral@@XZ @ 1253 NONAME ; class QDeclarativeDomValueLiteral QDeclarativeDomValue::toLiteral(void) const - ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@_N@Z @ 1254 NONAME ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, bool) - ?url@QDeclarativeComponent@@QBE?AVQUrl@@XZ @ 1255 NONAME ; class QUrl QDeclarativeComponent::url(void) const - ?componentComplete@QDeclarativeStateGroup@@UAEXXZ @ 1256 NONAME ; void QDeclarativeStateGroup::componentComplete(void) - ?setMargins@QDeclarativeAnchors@@QAEXM@Z @ 1257 NONAME ; void QDeclarativeAnchors::setMargins(float) - ?qt_metacall@QDeclarativeView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1258 NONAME ; int QDeclarativeView::qt_metacall(enum QMetaObject::Call, int, void * *) - ?state@QDeclarativeStateGroup@@QBE?AVQString@@XZ @ 1259 NONAME ; class QString QDeclarativeStateGroup::state(void) const - ??0QDeclarativeDomComponent@@QAE@ABV0@@Z @ 1260 NONAME ; QDeclarativeDomComponent::QDeclarativeDomComponent(class QDeclarativeDomComponent const &) - ?queryAvailableEngines@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugEnginesQuery@@PAVQObject@@@Z @ 1261 NONAME ; class QDeclarativeDebugEnginesQuery * QDeclarativeEngineDebug::queryAvailableEngines(class QObject *) - ??_EQDeclarativeItemPrivate@@UAE@I@Z @ 1262 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(unsigned int) - ?expression@QDeclarativeBinding@@UBE?AVQString@@XZ @ 1263 NONAME ; class QString QDeclarativeBinding::expression(void) const - ?position@QDeclarativeDomProperty@@QBEHXZ @ 1264 NONAME ; int QDeclarativeDomProperty::position(void) const - ?registerValueTypes@QDeclarativeValueTypeFactory@@SAXXZ @ 1265 NONAME ; void QDeclarativeValueTypeFactory::registerValueTypes(void) - ?dynamicProperties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomDynamicProperty@@@@XZ @ 1266 NONAME ; class QList<class QDeclarativeDomDynamicProperty> QDeclarativeDomObject::dynamicProperties(void) const - ?attachedPropertiesFunction@QDeclarativeType@@QBEP6APAVQObject@@PAV2@@ZXZ @ 1267 NONAME ; class QObject * (*)(class QObject *) QDeclarativeType::attachedPropertiesFunction(void) const - ??1QDeclarativePropertyMap@@UAE@XZ @ 1268 NONAME ; QDeclarativePropertyMap::~QDeclarativePropertyMap(void) - ??_EQDeclarativeExtensionInterface@@UAE@I@Z @ 1269 NONAME ; QDeclarativeExtensionInterface::~QDeclarativeExtensionInterface(unsigned int) - ??0Variant@QDeclarativeParser@@QAE@NABVQString@@@Z @ 1270 NONAME ; QDeclarativeParser::Variant::Variant(double, class QString const &) - ??6QDeclarativeInfo@@QAEAAV0@VQBool@@@Z @ 1271 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QBool) - ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@PAVQObject@@HHPAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1272 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QObject *, int, int, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ?qt_metacast@QDeclarativeDebugExpressionQuery@@UAEPAXPBD@Z @ 1273 NONAME ; void * QDeclarativeDebugExpressionQuery::qt_metacast(char const *) - ?contextProperty@QDeclarativeContext@@QBE?AVQVariant@@ABVQString@@@Z @ 1274 NONAME ; class QVariant QDeclarativeContext::contextProperty(class QString const &) const - ?verticalCenter@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1275 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::verticalCenter(void) const - ?metaObject@QDeclarativeScaleGrid@@UBEPBUQMetaObject@@XZ @ 1276 NONAME ; struct QMetaObject const * QDeclarativeScaleGrid::metaObject(void) const - ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 1277 NONAME ABSENT ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *, int) - ?qmlContext@@YAPAVQDeclarativeContext@@PBVQObject@@@Z @ 1278 NONAME ; class QDeclarativeContext * qmlContext(class QObject const *) - ?transform_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 1279 NONAME ; int QDeclarativeItemPrivate::transform_count(class QDeclarativeListProperty<class QGraphicsTransform> *) - ?tr@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 1280 NONAME ; class QString QListModelInterface::tr(char const *, char const *, int) - ??1QDeclarativeDebugFileReference@@QAE@XZ @ 1281 NONAME ; QDeclarativeDebugFileReference::~QDeclarativeDebugFileReference(void) - ?style@QDeclarativeText@@QBE?AW4TextStyle@1@XZ @ 1282 NONAME ; enum QDeclarativeText::TextStyle QDeclarativeText::style(void) const - ??0QDeclarativeAbstractBinding@@QAE@XZ @ 1283 NONAME ; QDeclarativeAbstractBinding::QDeclarativeAbstractBinding(void) - ?staticMetaObject@QDeclarativeDebugEnginesQuery@@2UQMetaObject@@B @ 1284 NONAME ; struct QMetaObject const QDeclarativeDebugEnginesQuery::staticMetaObject - ?cancel@QDeclarativePixmapCache@@SAXABVQUrl@@PAVQObject@@@Z @ 1285 NONAME ABSENT ; void QDeclarativePixmapCache::cancel(class QUrl const &, class QObject *) - ?isError@QDeclarativeComponent@@QBE_NXZ @ 1286 NONAME ; bool QDeclarativeComponent::isError(void) const - ?qt_metacall@QDeclarativeTransition@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1287 NONAME ; int QDeclarativeTransition::qt_metacall(enum QMetaObject::Call, int, void * *) - ?type@QDeclarativeDomImport@@QBE?AW4Type@1@XZ @ 1288 NONAME ; enum QDeclarativeDomImport::Type QDeclarativeDomImport::type(void) const - ??1QDeclarativeDebugConnection@@UAE@XZ @ 1289 NONAME ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(void) - ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@H@Z @ 1290 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(int) const - ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 1291 NONAME ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *, int) - ?setFromState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 1292 NONAME ; void QDeclarativeTransition::setFromState(class QString const &) - ?metaObject@QDeclarativeDebugService@@UBEPBUQMetaObject@@XZ @ 1293 NONAME ; struct QMetaObject const * QDeclarativeDebugService::metaObject(void) const - ?state@QDeclarativeDebugQuery@@QBE?AW4State@1@XZ @ 1294 NONAME ; enum QDeclarativeDebugQuery::State QDeclarativeDebugQuery::state(void) const - ?setBottom@QDeclarativeScaleGrid@@QAEXH@Z @ 1295 NONAME ; void QDeclarativeScaleGrid::setBottom(int) - ?topMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1296 NONAME ; void QDeclarativeAnchors::topMarginChanged(void) - ?itemChange@QDeclarativeItem@@MAE?AVQVariant@@W4GraphicsItemChange@QGraphicsItem@@ABV2@@Z @ 1297 NONAME ; class QVariant QDeclarativeItem::itemChange(enum QGraphicsItem::GraphicsItemChange, class QVariant const &) - ?position@QDeclarativeDomObject@@QBEHXZ @ 1298 NONAME ; int QDeclarativeDomObject::position(void) const - ?update@QDeclarativeBinding@@UAEXV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1299 NONAME ; void QDeclarativeBinding::update(class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 1300 NONAME ; class QString QDeclarativeBehavior::tr(char const *, char const *) - ?isDebuggingEnabled@QDeclarativeDebugService@@SA_NXZ @ 1301 NONAME ; bool QDeclarativeDebugService::isDebuggingEnabled(void) - ?tr@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 1302 NONAME ; class QString QDeclarativeText::tr(char const *, char const *, int) - ?reset@QDeclarativeProperty@@QBE_NXZ @ 1303 NONAME ; bool QDeclarativeProperty::reset(void) const - ?objectDebugId@QDeclarativeDebugWatch@@QBEHXZ @ 1304 NONAME ; int QDeclarativeDebugWatch::objectDebugId(void) const - ?width@QDeclarativeItemPrivate@@UBEMXZ @ 1305 NONAME ; float QDeclarativeItemPrivate::width(void) const - ?d_func@QMetaMethodBuilder@@ABEPAVQMetaMethodBuilderPrivate@@XZ @ 1306 NONAME ; class QMetaMethodBuilderPrivate * QMetaMethodBuilder::d_func(void) const - ?isScript@Variant@QDeclarativeParser@@QBE_NXZ @ 1307 NONAME ; bool QDeclarativeParser::Variant::isScript(void) const - ?classBegin@QDeclarativeStateGroup@@UAEXXZ @ 1308 NONAME ; void QDeclarativeStateGroup::classBegin(void) - ?qt_metacast@QDeclarativeRectangle@@UAEPAXPBD@Z @ 1309 NONAME ; void * QDeclarativeRectangle::qt_metacast(char const *) - ?qt_metacast@QDeclarativeExpression@@UAEPAXPBD@Z @ 1310 NONAME ; void * QDeclarativeExpression::qt_metacast(char const *) - ?indexOfProperty@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1311 NONAME ; int QMetaObjectBuilder::indexOfProperty(class QByteArray const &) - ?vAlign@QDeclarativeText@@QBE?AW4VAlignment@1@XZ @ 1312 NONAME ; enum QDeclarativeText::VAlignment QDeclarativeText::vAlign(void) const - ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQByteArray@@@Z @ 1313 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QByteArray const &) - ??1QDeclarativeError@@QAE@XZ @ 1314 NONAME ; QDeclarativeError::~QDeclarativeError(void) - ?property@QDeclarativeProperty@@QBE?AVQMetaProperty@@XZ @ 1315 NONAME ; class QMetaProperty QDeclarativeProperty::property(void) const - ?tr@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 1316 NONAME ; class QString QDeclarativeText::tr(char const *, char const *) - ?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@PAVQDeclarativeContext@@@Z @ 1317 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &, class QDeclarativeContext *) - ??0QDeclarativeGridScaledImage@@QAE@XZ @ 1318 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(void) - ?setText@QDeclarativeText@@QAEXABVQString@@@Z @ 1319 NONAME ; void QDeclarativeText::setText(class QString const &) - ?setBaseline@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1320 NONAME ; void QDeclarativeAnchors::setBaseline(class QDeclarativeAnchorLine const &) - ?resetCenterIn@QDeclarativeAnchors@@QAEXXZ @ 1321 NONAME ; void QDeclarativeAnchors::resetCenterIn(void) - ?pixmapUrl@QDeclarativeGridScaledImage@@QBE?AVQString@@XZ @ 1322 NONAME ; class QString QDeclarativeGridScaledImage::pixmapUrl(void) const - ?name@QDeclarativeOpenMetaObject@@QBE?AVQByteArray@@H@Z @ 1323 NONAME ; class QByteArray QDeclarativeOpenMetaObject::name(int) const - ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 1324 NONAME ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *) - ?getStaticMetaObject@QDeclarativeAnchors@@SAABUQMetaObject@@XZ @ 1325 NONAME ; struct QMetaObject const & QDeclarativeAnchors::getStaticMetaObject(void) - ?qt_metacall@QDeclarativeEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1326 NONAME ; int QDeclarativeEngine::qt_metacall(enum QMetaObject::Call, int, void * *) - ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@@Z @ 1327 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &) - ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 1328 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *) - ?setStaticMetacallFunction@QMetaObjectBuilder@@QAEXP6AHW4Call@QMetaObject@@HPAPAX@Z@Z @ 1329 NONAME ; void QMetaObjectBuilder::setStaticMetacallFunction(int (*)(enum QMetaObject::Call, int, void * *)) - ?properties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomProperty@@@@XZ @ 1330 NONAME ; class QList<class QDeclarativeDomProperty> QDeclarativeDomObject::properties(void) const - ??0QDeclarativeExpression@@QAE@PAVQDeclarativeContext@@PAVQObject@@ABVQString@@1@Z @ 1331 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContext *, class QObject *, class QString const &, class QObject *) - ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 1332 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *, int) - ?dateTimeFromString@QDeclarativeStringConverters@@YA?AVQDateTime@@ABVQString@@PA_N@Z @ 1333 NONAME ; class QDateTime QDeclarativeStringConverters::dateTimeFromString(class QString const &, bool *) - ?implicitWidth@QDeclarativeItem@@QBEMXZ @ 1334 NONAME ; float QDeclarativeItem::implicitWidth(void) const - ?metaObject@QDeclarativeContext@@UBEPBUQMetaObject@@XZ @ 1335 NONAME ; struct QMetaObject const * QDeclarativeContext::metaObject(void) const - ??0QDeclarativeContext@@AAE@PAVQDeclarativeContextData@@@Z @ 1336 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeContextData *) - ?maximumPacketSize@QPacketProtocol@@QBEHXZ @ 1337 NONAME ; int QPacketProtocol::maximumPacketSize(void) const - ??_EQDeclarativeDebuggerStatus@@UAE@I@Z @ 1338 NONAME ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(unsigned int) - ?error@QDeclarativeCustomParser@@IAEXABVQString@@@Z @ 1339 NONAME ; void QDeclarativeCustomParser::error(class QString const &) - ?messageReceived@QDeclarativeDebugService@@MAEXABVQByteArray@@@Z @ 1340 NONAME ; void QDeclarativeDebugService::messageReceived(class QByteArray const &) - ??0QDeclarativeParserStatus@@QAE@XZ @ 1341 NONAME ; QDeclarativeParserStatus::QDeclarativeParserStatus(void) - ?isNumber@Variant@QDeclarativeParser@@QBE_NXZ @ 1342 NONAME ; bool QDeclarativeParser::Variant::isNumber(void) const - ?getStaticMetaObject@QDeclarativeEngineDebug@@SAABUQMetaObject@@XZ @ 1343 NONAME ; struct QMetaObject const & QDeclarativeEngineDebug::getStaticMetaObject(void) - ??_EQDeclarativeEngine@@UAE@I@Z @ 1344 NONAME ; QDeclarativeEngine::~QDeclarativeEngine(unsigned int) - ??1QDeclarativeCustomParserNode@@QAE@XZ @ 1345 NONAME ; QDeclarativeCustomParserNode::~QDeclarativeCustomParserNode(void) - ??1QDeclarativeAction@@QAE@XZ @ 1346 NONAME ; QDeclarativeAction::~QDeclarativeAction(void) - ?resourcesLoading@QDeclarativeText@@QBEHXZ @ 1347 NONAME ; int QDeclarativeText::resourcesLoading(void) const - ?isBoolean@Variant@QDeclarativeParser@@QBE_NXZ @ 1348 NONAME ; bool QDeclarativeParser::Variant::isBoolean(void) const - ??0QDeclarativeAction@@QAE@XZ @ 1349 NONAME ; QDeclarativeAction::QDeclarativeAction(void) - ?signalOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 1350 NONAME ; int QDeclarativeOpenMetaObjectType::signalOffset(void) const - ?index@QMetaEnumBuilder@@QBEHXZ @ 1351 NONAME ; int QMetaEnumBuilder::index(void) const - ?setResettable@QMetaPropertyBuilder@@QAEX_N@Z @ 1352 NONAME ; void QMetaPropertyBuilder::setResettable(bool) - ??0QDeclarativeError@@QAE@ABV0@@Z @ 1353 NONAME ; QDeclarativeError::QDeclarativeError(class QDeclarativeError const &) - ?classInfoCount@QMetaObjectBuilder@@QBEHXZ @ 1354 NONAME ; int QMetaObjectBuilder::classInfoCount(void) const - ?isObject@QDeclarativeDomValue@@QBE_NXZ @ 1355 NONAME ; bool QDeclarativeDomValue::isObject(void) const - ?left@QDeclarativeScaleGrid@@QBEHXZ @ 1356 NONAME ; int QDeclarativeScaleGrid::left(void) const - ?qt_metacast@QDeclarativeDebugEnginesQuery@@UAEPAXPBD@Z @ 1357 NONAME ; void * QDeclarativeDebugEnginesQuery::qt_metacast(char const *) - ?d_func@QDeclarativeView@@AAEPAVQDeclarativeViewPrivate@@XZ @ 1358 NONAME ; class QDeclarativeViewPrivate * QDeclarativeView::d_func(void) - ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugPropertyWatch@@ABVQDeclarativeDebugPropertyReference@@PAVQObject@@@Z @ 1359 NONAME ; class QDeclarativeDebugPropertyWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugPropertyReference const &, class QObject *) - ?stateChanged@QDeclarativeStateGroup@@IAEXABVQString@@@Z @ 1360 NONAME ; void QDeclarativeStateGroup::stateChanged(class QString const &) - ?customStringConverter@QDeclarativeMetaType@@SAP6A?AVQVariant@@ABVQString@@@ZH@Z @ 1361 NONAME ; class QVariant (*)(class QString const &) QDeclarativeMetaType::customStringConverter(int) - ??0QDeclarativeDomValueValueSource@@QAE@XZ @ 1362 NONAME ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(void) - ?baselineOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 1363 NONAME ; void QDeclarativeAnchors::baselineOffsetChanged(void) - ?tr@QDeclarativeView@@SA?AVQString@@PBD0H@Z @ 1364 NONAME ; class QString QDeclarativeView::tr(char const *, char const *, int) - ??4QDeclarativeDebugFileReference@@QAEAAV0@ABV0@@Z @ 1365 NONAME ; class QDeclarativeDebugFileReference & QDeclarativeDebugFileReference::operator=(class QDeclarativeDebugFileReference const &) - ?eventFilter@QDeclarativeView@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 1366 NONAME ; bool QDeclarativeView::eventFilter(class QObject *, class QEvent *) - ??1QDeclarativeView@@UAE@XZ @ 1367 NONAME ; QDeclarativeView::~QDeclarativeView(void) - ?verticalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1368 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::verticalCenter(void) const - ?setIsFlag@QMetaEnumBuilder@@QAEX_N@Z @ 1369 NONAME ; void QMetaEnumBuilder::setIsFlag(bool) - ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 1370 NONAME ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *, int) - ?majorVersion@QDeclarativeType@@QBEHXZ @ 1371 NONAME ; int QDeclarativeType::majorVersion(void) const - ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 1372 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *) - ?baseUrl@QDeclarativeEngine@@QBE?AVQUrl@@XZ @ 1373 NONAME ; class QUrl QDeclarativeEngine::baseUrl(void) const - ??6QDeclarativeInfo@@QAEAAV0@PBX@Z @ 1374 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(void const *) - ?setTop@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1375 NONAME ; void QDeclarativeAnchors::setTop(class QDeclarativeAnchorLine const &) - ?setEnabled@QDeclarativeBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1376 NONAME ; void QDeclarativeBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ??_EQDeclarativeNetworkAccessManagerFactory@@UAE@I@Z @ 1377 NONAME ; QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory(unsigned int) - ?qmlTypes@QDeclarativeMetaType@@SA?AV?$QList@PAVQDeclarativeType@@@@XZ @ 1378 NONAME ; class QList<class QDeclarativeType *> QDeclarativeMetaType::qmlTypes(void) - ?valueTypeCoreIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1379 NONAME ; int QDeclarativePropertyPrivate::valueTypeCoreIndex(class QDeclarativeProperty const &) - ?writeEnumProperty@QDeclarativePropertyPrivate@@SA_NABVQMetaProperty@@HPAVQObject@@ABVQVariant@@H@Z @ 1380 NONAME ; bool QDeclarativePropertyPrivate::writeEnumProperty(class QMetaProperty const &, int, class QObject *, class QVariant const &, int) - ?setEnabled@QDeclarativeDebugClient@@QAEX_N@Z @ 1381 NONAME ; void QDeclarativeDebugClient::setEnabled(bool) - ??1QMetaObjectBuilder@@UAE@XZ @ 1382 NONAME ; QMetaObjectBuilder::~QMetaObjectBuilder(void) - ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 1383 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *) - ?clear@QPacket@@QAEXXZ @ 1384 NONAME ; void QPacket::clear(void) - ?getStaticMetaObject@QDeclarativeDebugClient@@SAABUQMetaObject@@XZ @ 1385 NONAME ; struct QMetaObject const & QDeclarativeDebugClient::getStaticMetaObject(void) - ??0QDeclarativeDomList@@QAE@ABV0@@Z @ 1386 NONAME ; QDeclarativeDomList::QDeclarativeDomList(class QDeclarativeDomList const &) - ?gridTop@QDeclarativeGridScaledImage@@QBEHXZ @ 1387 NONAME ; int QDeclarativeGridScaledImage::gridTop(void) const - ?setUrl@QDeclarativeError@@QAEXABVQUrl@@@Z @ 1388 NONAME ; void QDeclarativeError::setUrl(class QUrl const &) - ?setMaximumPacketSize@QPacketProtocol@@QAEHH@Z @ 1389 NONAME ; int QPacketProtocol::setMaximumPacketSize(int) - ??_EQDeclarativeAction@@QAE@I@Z @ 1390 NONAME ; QDeclarativeAction::~QDeclarativeAction(unsigned int) - ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 1391 NONAME ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *) - ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@@Z @ 1392 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &) - ?widthValid@QDeclarativeItem@@IBE_NXZ @ 1393 NONAME ; bool QDeclarativeItem::widthValid(void) const - ?staticMetaObject@QDeclarativeState@@2UQMetaObject@@B @ 1394 NONAME ; struct QMetaObject const QDeclarativeState::staticMetaObject - ?setAccess@QMetaMethodBuilder@@QAEXW4Access@QMetaMethod@@@Z @ 1395 NONAME ; void QMetaMethodBuilder::setAccess(enum QMetaMethod::Access) - ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@ABVQVariant@@@Z @ 1396 NONAME ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QDeclarativeContext *, class QVariant const &) - ?staticMetaObject@QDeclarativeDebugClient@@2UQMetaObject@@B @ 1397 NONAME ; struct QMetaObject const QDeclarativeDebugClient::staticMetaObject - ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 1398 NONAME ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *) - ?d_func@QDeclarativeExpression@@ABEPBVQDeclarativeExpressionPrivate@@XZ @ 1399 NONAME ; class QDeclarativeExpressionPrivate const * QDeclarativeExpression::d_func(void) const - ??1QDeclarativeValueType@@UAE@XZ @ 1400 NONAME ; QDeclarativeValueType::~QDeclarativeValueType(void) - ?setBaseUrl@QDeclarativeContext@@QAEXABVQUrl@@@Z @ 1401 NONAME ; void QDeclarativeContext::setBaseUrl(class QUrl const &) - ??_EQDeclarativeAbstractBinding@@UAE@I@Z @ 1402 NONAME ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(unsigned int) - ?queryExpressionResult@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@PAVQObject@@@Z @ 1403 NONAME ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::queryExpressionResult(int, class QString const &, class QObject *) - ?indexOfMethod@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1404 NONAME ; int QMetaObjectBuilder::indexOfMethod(class QByteArray const &) - ?setCached@QDeclarativeOpenMetaObject@@QAEX_N@Z @ 1405 NONAME ; void QDeclarativeOpenMetaObject::setCached(bool) - ?length@QDeclarativeDomList@@QBEHXZ @ 1406 NONAME ; int QDeclarativeDomList::length(void) const - ?horizontalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 1407 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::horizontalTileRule(void) const - ??0QDeclarativeCustomParserProperty@@QAE@XZ @ 1408 NONAME ; QDeclarativeCustomParserProperty::QDeclarativeCustomParserProperty(void) - ??1QDeclarativeEngineDebug@@UAE@XZ @ 1409 NONAME ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(void) - ?qt_metacall@QDeclarativeEngineDebug@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1410 NONAME ; int QDeclarativeEngineDebug::qt_metacall(enum QMetaObject::Call, int, void * *) - ?q_func@QDeclarativeItemPrivate@@ABEPBVQDeclarativeItem@@XZ @ 1411 NONAME ; class QDeclarativeItem const * QDeclarativeItemPrivate::q_func(void) const - ?customParser@QDeclarativeType@@QBEPAVQDeclarativeCustomParser@@XZ @ 1412 NONAME ; class QDeclarativeCustomParser * QDeclarativeType::customParser(void) const - ?setSourceLocation@QDeclarativeExpression@@QAEXABVQString@@H@Z @ 1413 NONAME ; void QDeclarativeExpression::setSourceLocation(class QString const &, int) - ?equal@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1414 NONAME ; bool QDeclarativePropertyPrivate::equal(struct QMetaObject const *, struct QMetaObject const *) - ??_EQDeclarativeExtensionPlugin@@UAE@I@Z @ 1415 NONAME ; QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin(unsigned int) - ?write@QDeclarativePropertyPrivate@@SA_NPAVQObject@@ABUData@QDeclarativePropertyCache@@ABVQVariant@@PAVQDeclarativeContextData@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1416 NONAME ; bool QDeclarativePropertyPrivate::write(class QObject *, struct QDeclarativePropertyCache::Data const &, class QVariant const &, class QDeclarativeContextData *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ?debugId@QDeclarativeDebugEngineReference@@QBEHXZ @ 1417 NONAME ; int QDeclarativeDebugEngineReference::debugId(void) const - ?metaObject@QDeclarativeDebugEnginesQuery@@UBEPBUQMetaObject@@XZ @ 1418 NONAME ; struct QMetaObject const * QDeclarativeDebugEnginesQuery::metaObject(void) const - ??_EQDeclarativeScaleGrid@@UAE@I@Z @ 1419 NONAME ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(unsigned int) - ??1QDeclarativeDebugPropertyReference@@QAE@XZ @ 1420 NONAME ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(void) - ?componentComplete@QDeclarativeAnchors@@QAEXXZ @ 1421 NONAME ; void QDeclarativeAnchors::componentComplete(void) - ??1QDeclarativeDomObject@@QAE@XZ @ 1422 NONAME ; QDeclarativeDomObject::~QDeclarativeDomObject(void) - ?expression@QDeclarativeDebugObjectExpressionWatch@@QBE?AVQString@@XZ @ 1423 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::expression(void) const - ?metaObject@QListModelInterface@@UBEPBUQMetaObject@@XZ @ 1424 NONAME ; struct QMetaObject const * QListModelInterface::metaObject(void) const - ?key@QMetaEnumBuilder@@QBE?AVQByteArray@@H@Z @ 1425 NONAME ; class QByteArray QMetaEnumBuilder::key(int) const - ?d_func@QMetaEnumBuilder@@ABEPAVQMetaEnumBuilderPrivate@@XZ @ 1426 NONAME ; class QMetaEnumBuilderPrivate * QMetaEnumBuilder::d_func(void) const - ??6QDeclarativeInfo@@QAEAAV0@PBD@Z @ 1427 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(char const *) - ?d_func@QDeclarativeState@@AAEPAVQDeclarativeStatePrivate@@XZ @ 1428 NONAME ; class QDeclarativeStatePrivate * QDeclarativeState::d_func(void) - ??0QDeclarativeDebugEnginesQuery@@AAE@PAVQObject@@@Z @ 1429 NONAME ; QDeclarativeDebugEnginesQuery::QDeclarativeDebugEnginesQuery(class QObject *) - ?bottomChanged@QDeclarativeAnchors@@IAEXXZ @ 1430 NONAME ; void QDeclarativeAnchors::bottomChanged(void) - ?qListTypeId@QDeclarativeType@@QBEHXZ @ 1431 NONAME ; int QDeclarativeType::qListTypeId(void) const - ?setSelectedState@QDeclarativeDebuggerStatus@@UAEX_N@Z @ 1432 NONAME ; void QDeclarativeDebuggerStatus::setSelectedState(bool) - ?staticMetaObject@QDeclarativeEngineDebug@@2UQMetaObject@@B @ 1433 NONAME ; struct QMetaObject const QDeclarativeEngineDebug::staticMetaObject - ?setExtends@QDeclarativeState@@QAEXABVQString@@@Z @ 1434 NONAME ; void QDeclarativeState::setExtends(class QString const &) - ??4QDeclarativeError@@QAEAAV0@ABV0@@Z @ 1435 NONAME ; class QDeclarativeError & QDeclarativeError::operator=(class QDeclarativeError const &) - ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 1436 NONAME ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *, int) - ?d_func@QDeclarativeTransition@@AAEPAVQDeclarativeTransitionPrivate@@XZ @ 1437 NONAME ; class QDeclarativeTransitionPrivate * QDeclarativeTransition::d_func(void) - ?propertyWritten@QDeclarativeOpenMetaObject@@MAEXH@Z @ 1438 NONAME ; void QDeclarativeOpenMetaObject::propertyWritten(int) - ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1439 NONAME ; class QString QListModelInterface::trUtf8(char const *, char const *) - ?setColumnNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 1440 NONAME ; void QDeclarativeDebugFileReference::setColumnNumber(int) - ?drawRect@QDeclarativeRectangle@@AAEXAAVQPainter@@@Z @ 1441 NONAME ; void QDeclarativeRectangle::drawRect(class QPainter &) - ?read@QDeclarativeProperty@@QBE?AVQVariant@@XZ @ 1442 NONAME ; class QVariant QDeclarativeProperty::read(void) const - ?isEmpty@QDeclarativePropertyMap@@QBE_NXZ @ 1443 NONAME ; bool QDeclarativePropertyMap::isEmpty(void) const - ?wantsFocus@QDeclarativeItem@@QBE_NXZ @ 1444 NONAME ; bool QDeclarativeItem::wantsFocus(void) const - ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 1445 NONAME ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData const &) - ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 1446 NONAME ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *, int) - ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContext@@1@Z @ 1447 NONAME ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContext *, class QObject *) - ?tr@QDeclarativeItem@@SA?AVQString@@PBD0@Z @ 1448 NONAME ; class QString QDeclarativeItem::tr(char const *, char const *) - ??6QDeclarativeInfo@@QAEAAV0@G@Z @ 1449 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned short) - ??0QDeclarativeStateOperation@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 1450 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObjectPrivate &, class QObject *) - ?notifyOnValueChanged@QDeclarativeExpression@@QBE_NXZ @ 1451 NONAME ; bool QDeclarativeExpression::notifyOnValueChanged(void) const - ?keyPressPreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 1452 NONAME ; void QDeclarativeItem::keyPressPreHandler(class QKeyEvent *) - ?trUtf8@QDeclarativeItem@@SA?AVQString@@PBD0H@Z @ 1453 NONAME ; class QString QDeclarativeItem::trUtf8(char const *, char const *, int) - ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugFileReference@@PAVQObject@@@Z @ 1454 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugFileReference const &, class QObject *) - ?paintedHeight@QDeclarativeText@@QBEMXZ @ 1455 NONAME ; float QDeclarativeText::paintedHeight(void) const - ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1456 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *) - ?transform@QDeclarativeItem@@QAE?AV?$QDeclarativeListProperty@VQGraphicsTransform@@@@XZ @ 1457 NONAME ; class QDeclarativeListProperty<class QGraphicsTransform> QDeclarativeItem::transform(void) - ?leftChanged@QDeclarativeAnchors@@IAEXXZ @ 1458 NONAME ; void QDeclarativeAnchors::leftChanged(void) - ?topChanged@QDeclarativeAnchors@@IAEXXZ @ 1459 NONAME ; void QDeclarativeAnchors::topChanged(void) - ??0QMetaObjectBuilder@@QAE@XZ @ 1460 NONAME ; QMetaObjectBuilder::QMetaObjectBuilder(void) - ?asBoolean@Variant@QDeclarativeParser@@QBE_NXZ @ 1461 NONAME ; bool QDeclarativeParser::Variant::asBoolean(void) const - ?removeEnumerator@QMetaObjectBuilder@@QAEXH@Z @ 1462 NONAME ; void QMetaObjectBuilder::removeEnumerator(int) - ?url@QDeclarativeDomObject@@QBE?AVQUrl@@XZ @ 1463 NONAME ; class QUrl QDeclarativeDomObject::url(void) const - ?getStaticMetaObject@QDeclarativeScaleGrid@@SAABUQMetaObject@@XZ @ 1464 NONAME ; struct QMetaObject const & QDeclarativeScaleGrid::getStaticMetaObject(void) - ?signalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@@Z @ 1465 NONAME ; class QDeclarativeExpression * QDeclarativePropertyPrivate::signalExpression(class QDeclarativeProperty const &) - ?networkAccessManagerFactory@QDeclarativeEngine@@QBEPAVQDeclarativeNetworkAccessManagerFactory@@XZ @ 1466 NONAME ; class QDeclarativeNetworkAccessManagerFactory * QDeclarativeEngine::networkAccessManagerFactory(void) const - ?isStringList@Variant@QDeclarativeParser@@QBE_NXZ @ 1467 NONAME ; bool QDeclarativeParser::Variant::isStringList(void) const - ?packetWritten@QPacketProtocol@@IAEXXZ @ 1468 NONAME ; void QPacketProtocol::packetWritten(void) - ?getStaticMetaObject@QDeclarativeDebugObjectQuery@@SAABUQMetaObject@@XZ @ 1469 NONAME ; struct QMetaObject const & QDeclarativeDebugObjectQuery::getStaticMetaObject(void) - ?isSignalProperty@QDeclarativeProperty@@QBE_NXZ @ 1470 NONAME ; bool QDeclarativeProperty::isSignalProperty(void) const - ?d_func@QDeclarativeDebugService@@AAEPAVQDeclarativeDebugServicePrivate@@XZ @ 1471 NONAME ; class QDeclarativeDebugServicePrivate * QDeclarativeDebugService::d_func(void) - ?qmlTypeNames@QDeclarativeMetaType@@SA?AV?$QList@VQByteArray@@@@XZ @ 1472 NONAME ; class QList<class QByteArray> QDeclarativeMetaType::qmlTypeNames(void) - ?creationContext@QDeclarativeComponent@@QBEPAVQDeclarativeContext@@XZ @ 1473 NONAME ; class QDeclarativeContext * QDeclarativeComponent::creationContext(void) const - ?componentComplete@QDeclarativeItem@@MAEXXZ @ 1474 NONAME ; void QDeclarativeItem::componentComplete(void) - ?enabledChanged@QDeclarativeBehavior@@IAEXXZ @ 1475 NONAME ; void QDeclarativeBehavior::enabledChanged(void) - ?staticMetaObject@QDeclarativeTransition@@2UQMetaObject@@B @ 1476 NONAME ; struct QMetaObject const QDeclarativeTransition::staticMetaObject - ??0QDeclarativeInfo@@AAE@PAVQDeclarativeInfoPrivate@@@Z @ 1477 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfoPrivate *) - ?name@QDeclarativeDebugContextReference@@QBE?AVQString@@XZ @ 1478 NONAME ; class QString QDeclarativeDebugContextReference::name(void) const - ?propertyIndex@QDeclarativeBinding@@UAEHXZ @ 1479 NONAME ; int QDeclarativeBinding::propertyIndex(void) - ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 1480 NONAME ; class QString QDeclarativeDebugWatch::tr(char const *, char const *, int) - ?qt_metacast@QDeclarativePropertyMap@@UAEPAXPBD@Z @ 1481 NONAME ; void * QDeclarativePropertyMap::qt_metacast(char const *) - ?classBegin@QDeclarativeAnchors@@QAEXXZ @ 1482 NONAME ; void QDeclarativeAnchors::classBegin(void) - ?color@QDeclarativeText@@QBE?AVQColor@@XZ @ 1483 NONAME ; class QColor QDeclarativeText::color(void) const - ?metaObject@QPacketProtocol@@UBEPBUQMetaObject@@XZ @ 1484 NONAME ; struct QMetaObject const * QPacketProtocol::metaObject(void) const - ??4QDeclarativeGridScaledImage@@QAEAAV0@ABV0@@Z @ 1485 NONAME ; class QDeclarativeGridScaledImage & QDeclarativeGridScaledImage::operator=(class QDeclarativeGridScaledImage const &) - ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 1486 NONAME ; class QString QDeclarativeScaleGrid::tr(char const *, char const *) - ??1QDeclarativeScriptString@@QAE@XZ @ 1487 NONAME ; QDeclarativeScriptString::~QDeclarativeScriptString(void) - ??1QDeclarativePropertyValueSource@@UAE@XZ @ 1488 NONAME ; QDeclarativePropertyValueSource::~QDeclarativePropertyValueSource(void) - ?position@QDeclarativeDomList@@QBEHXZ @ 1489 NONAME ; int QDeclarativeDomList::position(void) const - ?toQObject@QDeclarativeMetaType@@SAPAVQObject@@ABVQVariant@@PA_N@Z @ 1490 NONAME ; class QObject * QDeclarativeMetaType::toQObject(class QVariant const &, bool *) - ??_EQDeclarativeItem@@UAE@I@Z @ 1491 NONAME ; QDeclarativeItem::~QDeclarativeItem(unsigned int) - ?getStaticMetaObject@QDeclarativeContext@@SAABUQMetaObject@@XZ @ 1492 NONAME ; struct QMetaObject const & QDeclarativeContext::getStaticMetaObject(void) - ?metaObject@QDeclarativeListModel@@UBEPBUQMetaObject@@XZ @ 1493 NONAME ; struct QMetaObject const * QDeclarativeListModel::metaObject(void) const - ?transformChanged@QDeclarativeItemPrivate@@UAEXXZ @ 1494 NONAME ; void QDeclarativeItemPrivate::transformChanged(void) - ?remove@QDeclarativeListModel@@QAEXH@Z @ 1495 NONAME ; void QDeclarativeListModel::remove(int) - ?setResizeMode@QDeclarativeView@@QAEXW4ResizeMode@1@@Z @ 1496 NONAME ; void QDeclarativeView::setResizeMode(enum QDeclarativeView::ResizeMode) - ?left@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1497 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::left(void) const - ?flags@QMetaObjectBuilder@@QBE?AV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@XZ @ 1498 NONAME ; class QFlags<enum QMetaObjectBuilder::MetaObjectFlag> QMetaObjectBuilder::flags(void) const - ??0QDeclarativeItem@@IAE@AAVQDeclarativeItemPrivate@@PAV0@@Z @ 1499 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItemPrivate &, class QDeclarativeItem *) - ??0QDeclarativeContext@@QAE@PAV0@PAVQObject@@@Z @ 1500 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeContext *, class QObject *) - ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 1501 NONAME ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *) - ??1QDeclarativeDebugEnginesQuery@@UAE@XZ @ 1502 NONAME ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(void) - ?getStaticMetaObject@QDeclarativeTransition@@SAABUQMetaObject@@XZ @ 1503 NONAME ; struct QMetaObject const & QDeclarativeTransition::getStaticMetaObject(void) - ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 1504 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *, int) - ?metaObject@QDeclarativePropertyMap@@UBEPBUQMetaObject@@XZ @ 1505 NONAME ; struct QMetaObject const * QDeclarativePropertyMap::metaObject(void) const - ?componentRoot@QDeclarativeDomComponent@@QBE?AVQDeclarativeDomObject@@XZ @ 1506 NONAME ; class QDeclarativeDomObject QDeclarativeDomComponent::componentRoot(void) const - ?metaObject@QDeclarativeDebugConnection@@UBEPBUQMetaObject@@XZ @ 1507 NONAME ; struct QMetaObject const * QDeclarativeDebugConnection::metaObject(void) const - ?setTag@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1508 NONAME ; void QMetaMethodBuilder::setTag(class QByteArray const &) - ?objects@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 1509 NONAME ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugContextReference::objects(void) const - ??4Variant@QDeclarativeParser@@QAEAAV01@ABV01@@Z @ 1510 NONAME ; class QDeclarativeParser::Variant & QDeclarativeParser::Variant::operator=(class QDeclarativeParser::Variant const &) - ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1511 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *) - ?setScopeObject@QDeclarativeScriptString@@QAEXPAVQObject@@@Z @ 1512 NONAME ; void QDeclarativeScriptString::setScopeObject(class QObject *) - ??1QDeclarativeBinding@@MAE@XZ @ 1513 NONAME ; QDeclarativeBinding::~QDeclarativeBinding(void) - ?importPlugin@QDeclarativeEngine@@QAE_NABVQString@@0PAV2@@Z @ 1514 NONAME ; bool QDeclarativeEngine::importPlugin(class QString const &, class QString const &, class QString *) - ?setBottomMargin@QDeclarativeAnchors@@QAEXM@Z @ 1515 NONAME ; void QDeclarativeAnchors::setBottomMargin(float) - ?geometryChanged@QDeclarativeItem@@MAEXABVQRectF@@0@Z @ 1516 NONAME ; void QDeclarativeItem::geometryChanged(class QRectF const &, class QRectF const &) - ?toValueSource@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueSource@@XZ @ 1517 NONAME ; class QDeclarativeDomValueValueSource QDeclarativeDomValue::toValueSource(void) const - ?hAlign@QDeclarativeText@@QBE?AW4HAlignment@1@XZ @ 1518 NONAME ; enum QDeclarativeText::HAlignment QDeclarativeText::hAlign(void) const - ?when@QDeclarativeState@@QBEPAVQDeclarativeBinding@@XZ @ 1519 NONAME ; class QDeclarativeBinding * QDeclarativeState::when(void) const - ?setRootObject@QDeclarativeView@@MAEXPAVQObject@@@Z @ 1520 NONAME ; void QDeclarativeView::setRootObject(class QObject *) - ?resetBottom@QDeclarativeAnchors@@QAEXXZ @ 1521 NONAME ; void QDeclarativeAnchors::resetBottom(void) - ?qt_metacall@QDeclarativePropertyMap@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1522 NONAME ; int QDeclarativePropertyMap::qt_metacall(enum QMetaObject::Call, int, void * *) - ??0QDeclarativeDebugEngineReference@@QAE@ABV0@@Z @ 1523 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(class QDeclarativeDebugEngineReference const &) - ?objectDebugId@QDeclarativeDebugPropertyReference@@QBEHXZ @ 1524 NONAME ; int QDeclarativeDebugPropertyReference::objectDebugId(void) const - ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 1525 NONAME ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *) - ??AQDeclarativeValueTypeFactory@@QBEPAVQDeclarativeValueType@@H@Z @ 1526 NONAME ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::operator[](int) const - ?siblingOrderChange@QDeclarativeItemPrivate@@UAEXXZ @ 1527 NONAME ; void QDeclarativeItemPrivate::siblingOrderChange(void) - ??1QDeclarativeState@@UAE@XZ @ 1528 NONAME ; QDeclarativeState::~QDeclarativeState(void) - ?paint@QDeclarativeText@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1529 NONAME ; void QDeclarativeText::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) - ??1QDeclarativeStateGroup@@UAE@XZ @ 1530 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(void) - ?setEditable@QMetaPropertyBuilder@@QAEX_N@Z @ 1531 NONAME ; void QMetaPropertyBuilder::setEditable(bool) - ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@PAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1532 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QDeclarativeProperty const &, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) - ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1533 NONAME ; class QString QDeclarativeBinding::trUtf8(char const *, char const *) - ?progress@QDeclarativeComponent@@QBEMXZ @ 1534 NONAME ; float QDeclarativeComponent::progress(void) const - ?d_func@QDeclarativeState@@ABEPBVQDeclarativeStatePrivate@@XZ @ 1535 NONAME ; class QDeclarativeStatePrivate const * QDeclarativeState::d_func(void) const - ??0QListModelInterface@@QAE@PAVQObject@@@Z @ 1536 NONAME ; QListModelInterface::QListModelInterface(class QObject *) - ?pointFFromString@QDeclarativeStringConverters@@YA?AVQPointF@@ABVQString@@PA_N@Z @ 1537 NONAME ; class QPointF QDeclarativeStringConverters::pointFFromString(class QString const &, bool *) - ?propertyCreated@QDeclarativeOpenMetaObject@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 1538 NONAME ; void QDeclarativeOpenMetaObject::propertyCreated(int, class QMetaPropertyBuilder &) - ?d_func@QDeclarativeView@@ABEPBVQDeclarativeViewPrivate@@XZ @ 1539 NONAME ; class QDeclarativeViewPrivate const * QDeclarativeView::d_func(void) const - ?rootObject@QDeclarativeView@@QBEPAVQGraphicsObject@@XZ @ 1540 NONAME ; class QGraphicsObject * QDeclarativeView::rootObject(void) const - ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 1541 NONAME ; class QString QDeclarativeBinding::tr(char const *, char const *, int) - ?queryObjectRecursive@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1542 NONAME ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObjectRecursive(class QDeclarativeDebugObjectReference const &, class QObject *) - ?prepare@QDeclarativeTransition@@QAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@PAVQDeclarativeTransitionManager@@@Z @ 1543 NONAME ; void QDeclarativeTransition::prepare(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, class QDeclarativeTransitionManager *) - ??6QDeclarativeInfo@@QAEAAV0@ABVQUrl@@@Z @ 1544 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QUrl const &) - ?scopeObject@QDeclarativeExpression@@QBEPAVQObject@@XZ @ 1545 NONAME ; class QObject * QDeclarativeExpression::scopeObject(void) const - ?isValid@QDeclarativeContext@@QBE_NXZ @ 1546 NONAME ; bool QDeclarativeContext::isValid(void) const - ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 1547 NONAME ; class QString QDeclarativeValueType::trUtf8(char const *, char const *, int) - ?qmlAttachedPropertiesObjectById@@YAPAVQObject@@HPBV1@_N@Z @ 1548 NONAME ; class QObject * qmlAttachedPropertiesObjectById(int, class QObject const *, bool) - ?d_func@QDeclarativePixmapReply@@ABEPBVQDeclarativePixmapReplyPrivate@@XZ @ 1549 NONAME ABSENT ; class QDeclarativePixmapReplyPrivate const * QDeclarativePixmapReply::d_func(void) const - ?constructorCount@QMetaObjectBuilder@@QBEHXZ @ 1550 NONAME ; int QMetaObjectBuilder::constructorCount(void) const - ??0QDeclarativeDomValueValueInterceptor@@QAE@ABV0@@Z @ 1551 NONAME ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(class QDeclarativeDomValueValueInterceptor const &) - ?object@QDeclarativeDebugObjectQuery@@QBE?AVQDeclarativeDebugObjectReference@@XZ @ 1552 NONAME ; class QDeclarativeDebugObjectReference QDeclarativeDebugObjectQuery::object(void) const - ??0QMetaPropertyBuilder@@QAE@XZ @ 1553 NONAME ; QMetaPropertyBuilder::QMetaPropertyBuilder(void) - ?toMetaObject@QMetaObjectBuilder@@QBEPAUQMetaObject@@XZ @ 1554 NONAME ; struct QMetaObject * QMetaObjectBuilder::toMetaObject(void) const - ?d_func@QDeclarativeEngine@@AAEPAVQDeclarativeEnginePrivate@@XZ @ 1555 NONAME ; class QDeclarativeEnginePrivate * QDeclarativeEngine::d_func(void) - ?forcedHeight@QDeclarativePixmapReply@@QBEHXZ @ 1556 NONAME ABSENT ; int QDeclarativePixmapReply::forcedHeight(void) const - ?staticMetaObject@QDeclarativeRectangle@@2UQMetaObject@@B @ 1557 NONAME ; struct QMetaObject const QDeclarativeRectangle::staticMetaObject - ?addSignal@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1558 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addSignal(class QByteArray const &) - ?getStaticMetaObject@QDeclarativeStateGroup@@SAABUQMetaObject@@XZ @ 1559 NONAME ; struct QMetaObject const & QDeclarativeStateGroup::getStaticMetaObject(void) - ?childrenRectChanged@QDeclarativeItem@@IAEXABVQRectF@@@Z @ 1560 NONAME ; void QDeclarativeItem::childrenRectChanged(class QRectF const &) - ?isDesignable@QDeclarativeProperty@@QBE_NXZ @ 1561 NONAME ; bool QDeclarativeProperty::isDesignable(void) const - ?propertyTypeCategory@QDeclarativePropertyPrivate@@QBE?AW4PropertyTypeCategory@QDeclarativeProperty@@XZ @ 1562 NONAME ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativePropertyPrivate::propertyTypeCategory(void) const - ?setSize@QDeclarativeItem@@QAEXABVQSizeF@@@Z @ 1563 NONAME ; void QDeclarativeItem::setSize(class QSizeF const &) - ?generateRoundedRect@QDeclarativeRectangle@@AAEXXZ @ 1564 NONAME ; void QDeclarativeRectangle::generateRoundedRect(void) - ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 1565 NONAME ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *) - ?propertyTypeCategory@QDeclarativeProperty@@QBE?AW4PropertyTypeCategory@1@XZ @ 1566 NONAME ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativeProperty::propertyTypeCategory(void) const - ??0QPacketAutoSend@@AAE@PAVQPacketProtocol@@@Z @ 1567 NONAME ; QPacketAutoSend::QPacketAutoSend(class QPacketProtocol *) - ?keyCount@QMetaEnumBuilder@@QBEHXZ @ 1568 NONAME ; int QMetaEnumBuilder::keyCount(void) const - ??1QDeclarativeDomProperty@@QAE@XZ @ 1569 NONAME ; QDeclarativeDomProperty::~QDeclarativeDomProperty(void) - ?sendMessage@QDeclarativeDebugService@@QAEXABVQByteArray@@@Z @ 1570 NONAME ; void QDeclarativeDebugService::sendMessage(class QByteArray const &) - ?context@QDeclarativeScriptString@@QBEPAVQDeclarativeContext@@XZ @ 1571 NONAME ; class QDeclarativeContext * QDeclarativeScriptString::context(void) const - ?queryObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1572 NONAME ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObject(class QDeclarativeDebugObjectReference const &, class QObject *) - ?tr@QDeclarativePropertyMap@@SA?AVQString@@PBD0H@Z @ 1573 NONAME ; class QString QDeclarativePropertyMap::tr(char const *, char const *, int) - ?setNotifyOnValueChanged@QDeclarativeExpression@@QAEX_N@Z @ 1574 NONAME ; void QDeclarativeExpression::setNotifyOnValueChanged(bool) - ??0QDeclarativeExpression@@IAE@PAVQDeclarativeContextData@@PAVQObject@@ABVQString@@AAVQDeclarativeExpressionPrivate@@@Z @ 1575 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, class QObject *, class QString const &, class QDeclarativeExpressionPrivate &) - ?fillChanged@QDeclarativeAnchors@@IAEXXZ @ 1576 NONAME ; void QDeclarativeAnchors::fillChanged(void) - ?resources_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 1577 NONAME ; void QDeclarativeItemPrivate::resources_append(class QDeclarativeListProperty<class QObject> *, class QObject *) - ??0QDeclarativeComponent@@IAE@AAVQDeclarativeComponentPrivate@@PAVQObject@@@Z @ 1578 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeComponentPrivate &, class QObject *) - ?height@QDeclarativeItem@@QBEMXZ @ 1579 NONAME ; float QDeclarativeItem::height(void) const - ?minorVersion@QDeclarativeType@@QBEHXZ @ 1580 NONAME ; int QDeclarativeType::minorVersion(void) const - ?qt_metacall@QDeclarativeText@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1581 NONAME ; int QDeclarativeText::qt_metacall(enum QMetaObject::Call, int, void * *) - ?event@QDeclarativePixmapReply@@MAE_NPAVQEvent@@@Z @ 1582 NONAME ABSENT ; bool QDeclarativePixmapReply::event(class QEvent *) - ?isConnected@QDeclarativeDebugConnection@@QBE_NXZ @ 1583 NONAME ; bool QDeclarativeDebugConnection::isConnected(void) const - ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 1584 NONAME ABSENT ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *) - ??6QDeclarativeInfo@@QAEAAV0@I@Z @ 1585 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned int) - ?setNetworkAccessManagerFactory@QDeclarativeEngine@@QAEXPAVQDeclarativeNetworkAccessManagerFactory@@@Z @ 1586 NONAME ; void QDeclarativeEngine::setNetworkAccessManagerFactory(class QDeclarativeNetworkAccessManagerFactory *) - ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 1587 NONAME ; class QString QDeclarativeDebugQuery::tr(char const *, char const *, int) - ??AQDeclarativePropertyMap@@QAEAAVQVariant@@ABVQString@@@Z @ 1588 NONAME ; class QVariant & QDeclarativePropertyMap::operator[](class QString const &) - ??0Variant@QDeclarativeParser@@QAE@_N@Z @ 1589 NONAME ; QDeclarativeParser::Variant::Variant(bool) - ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 1590 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *, int) - ??0QDeclarativeStateGroup@@QAE@PAVQObject@@@Z @ 1591 NONAME ; QDeclarativeStateGroup::QDeclarativeStateGroup(class QObject *) - ?count@QDeclarativeListReference@@QBEHXZ @ 1592 NONAME ; int QDeclarativeListReference::count(void) const - ?location@QDeclarativeCustomParserProperty@@QBE?AULocation@QDeclarativeParser@@XZ @ 1593 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserProperty::location(void) const - ?metaObject@QDeclarativePen@@UBEPBUQMetaObject@@XZ @ 1594 NONAME ; struct QMetaObject const * QDeclarativePen::metaObject(void) const - ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 1595 NONAME ABSENT ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *) - ?url@QDeclarativeError@@QBE?AVQUrl@@XZ @ 1596 NONAME ; class QUrl QDeclarativeError::url(void) const - ?isBinding@QDeclarativeDomValue@@QBE_NXZ @ 1597 NONAME ; bool QDeclarativeDomValue::isBinding(void) const - ?name@QDeclarativeProperty@@QBE?AVQString@@XZ @ 1598 NONAME ; class QString QDeclarativeProperty::name(void) const - ?asString@Variant@QDeclarativeParser@@QBE?AVQString@@XZ @ 1599 NONAME ; class QString QDeclarativeParser::Variant::asString(void) const - ?trUtf8@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0@Z @ 1600 NONAME ; class QString QDeclarativeExtensionPlugin::trUtf8(char const *, char const *) - ?sendMessage@QDeclarativeDebugClient@@QAEXABVQByteArray@@@Z @ 1601 NONAME ; void QDeclarativeDebugClient::sendMessage(class QByteArray const &) - ?canAppend@QDeclarativeListReference@@QBE_NXZ @ 1602 NONAME ; bool QDeclarativeListReference::canAppend(void) const - ??_EQDeclarativeComponent@@UAE@I@Z @ 1603 NONAME ; QDeclarativeComponent::~QDeclarativeComponent(unsigned int) - ?get@QDeclarativeItemPrivate@@SAPAV1@PAVQDeclarativeItem@@@Z @ 1604 NONAME ; class QDeclarativeItemPrivate * QDeclarativeItemPrivate::get(class QDeclarativeItem *) - ?staticMetaObject@QDeclarativeView@@2UQMetaObject@@B @ 1605 NONAME ; struct QMetaObject const QDeclarativeView::staticMetaObject - ?objectToString@QDeclarativeDebugService@@SA?AVQString@@PAVQObject@@@Z @ 1606 NONAME ; class QString QDeclarativeDebugService::objectToString(class QObject *) - ?defaultValue@QDeclarativeDomDynamicProperty@@QBE?AVQDeclarativeDomProperty@@XZ @ 1607 NONAME ; class QDeclarativeDomProperty QDeclarativeDomDynamicProperty::defaultValue(void) const - ?relatedMetaObject@QMetaObjectBuilder@@QBEPBUQMetaObject@@H@Z @ 1608 NONAME ; struct QMetaObject const * QMetaObjectBuilder::relatedMetaObject(int) const - ?d_func@QDeclarativePixmapReply@@AAEPAVQDeclarativePixmapReplyPrivate@@XZ @ 1609 NONAME ABSENT ; class QDeclarativePixmapReplyPrivate * QDeclarativePixmapReply::d_func(void) - ?addKey@QMetaEnumBuilder@@QAEHABVQByteArray@@H@Z @ 1610 NONAME ; int QMetaEnumBuilder::addKey(class QByteArray const &, int) - ?setPosHelper@QDeclarativeItemPrivate@@UAEXABVQPointF@@@Z @ 1611 NONAME ; void QDeclarativeItemPrivate::setPosHelper(class QPointF const &) - ?attributes@QMetaMethodBuilder@@QBEHXZ @ 1612 NONAME ; int QMetaMethodBuilder::attributes(void) const - ?lineNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 1613 NONAME ; int QDeclarativeDebugFileReference::lineNumber(void) const - ?setTop@QDeclarativeScaleGrid@@QAEXH@Z @ 1614 NONAME ; void QDeclarativeScaleGrid::setTop(int) - ?metaObject@QDeclarativeItem@@UBEPBUQMetaObject@@XZ @ 1615 NONAME ; struct QMetaObject const * QDeclarativeItem::metaObject(void) const - ?clear@QDeclarativeAbstractBinding@@IAEXXZ @ 1616 NONAME ; void QDeclarativeAbstractBinding::clear(void) - ?start@QDeclarativeItemPrivate@@SAXAAVQElapsedTimer@@@Z @ 1617 NONAME ; void QDeclarativeItemPrivate::start(class QElapsedTimer &) - ?reloadWithResources@QDeclarativeText@@AAEXXZ @ 1618 NONAME ABSENT ; void QDeclarativeText::reloadWithResources(void) - ?stringToRule@QDeclarativeGridScaledImage@@CA?AW4TileMode@QDeclarativeBorderImage@@ABVQString@@@Z @ 1619 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::stringToRule(class QString const &) - ?setHorizontalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1620 NONAME ; void QDeclarativeAnchors::setHorizontalCenter(class QDeclarativeAnchorLine const &) - ?setFocus@QDeclarativeItem@@QAEX_N@Z @ 1621 NONAME ; void QDeclarativeItem::setFocus(bool) - ?connectNotifySignal@QDeclarativeProperty@@QBE_NPAVQObject@@PBD@Z @ 1622 NONAME ; bool QDeclarativeProperty::connectNotifySignal(class QObject *, char const *) const - ??4QDeclarativeProperty@@QAEAAV0@ABV0@@Z @ 1623 NONAME ; class QDeclarativeProperty & QDeclarativeProperty::operator=(class QDeclarativeProperty const &) - ?messageReceived@QDeclarativeDebugClient@@MAEXABVQByteArray@@@Z @ 1624 NONAME ; void QDeclarativeDebugClient::messageReceived(class QByteArray const &) - ?setImplicitWidth@QDeclarativeItem@@IAEXM@Z @ 1625 NONAME ; void QDeclarativeItem::setImplicitWidth(float) - ?isInterface@QDeclarativeType@@QBE_NXZ @ 1626 NONAME ; bool QDeclarativeType::isInterface(void) const - ??0QDeclarativeContext@@AAE@PAVQDeclarativeEngine@@_N@Z @ 1627 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeEngine *, bool) - ?initialValue@QDeclarativeOpenMetaObject@@UAE?AVQVariant@@H@Z @ 1628 NONAME ; class QVariant QDeclarativeOpenMetaObject::initialValue(int) - ?tr@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1629 NONAME ; class QString QDeclarativeView::tr(char const *, char const *) - ?qt_metacall@QPacketProtocol@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1630 NONAME ; int QPacketProtocol::qt_metacall(enum QMetaObject::Call, int, void * *) - ??0QDeclarativeItem@@QAE@PAV0@@Z @ 1631 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItem *) - ?hasDebuggingClient@QDeclarativeDebugService@@SA_NXZ @ 1632 NONAME ; bool QDeclarativeDebugService::hasDebuggingClient(void) - ?staticMetaObject@QDeclarativeContext@@2UQMetaObject@@B @ 1633 NONAME ; struct QMetaObject const QDeclarativeContext::staticMetaObject - ?setContextForObject@QDeclarativeEngine@@SAXPAVQObject@@PAVQDeclarativeContext@@@Z @ 1634 NONAME ; void QDeclarativeEngine::setContextForObject(class QObject *, class QDeclarativeContext *) - ?baselineOffsetChanged@QDeclarativeItem@@IAEXM@Z @ 1635 NONAME ; void QDeclarativeItem::baselineOffsetChanged(float) - ??6QDeclarativeInfo@@QAEAAV0@VQChar@@@Z @ 1636 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QChar) - ?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 1637 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, int) - ?status@QDeclarativePixmap@@QBE?AW4Status@1@XZ @ 1638 NONAME ; enum QDeclarativePixmap::Status QDeclarativePixmap::status(void) const - ?error@QDeclarativePixmap@@QBE?AVQString@@XZ @ 1639 NONAME ; class QString QDeclarativePixmap::error(void) const - ??BQDeclarativePixmap@@QBEABVQPixmap@@XZ @ 1640 NONAME ; QDeclarativePixmap::operator class QPixmap const &(void) const - ?tr@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 1641 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *, int) - ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1642 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &) - ?height@QDeclarativePixmap@@QBEHXZ @ 1643 NONAME ; int QDeclarativePixmap::height(void) const - ?implicitSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1644 NONAME ; class QSize const & QDeclarativePixmap::implicitSize(void) const - ?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 1645 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, char const *) - ?clear@QDeclarativePixmap@@QAEXPAVQObject@@@Z @ 1646 NONAME ; void QDeclarativePixmap::clear(class QObject *) - ?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 1647 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, char const *) - ?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 1648 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *, int) - ?isLoading@QDeclarativePixmap@@QBE_NXZ @ 1649 NONAME ; bool QDeclarativePixmap::isLoading(void) const - ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@@Z @ 1650 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &) - ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@_N@Z @ 1651 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, bool) - ??1QDeclarativePixmap@@QAE@XZ @ 1652 NONAME ; QDeclarativePixmap::~QDeclarativePixmap(void) - ??0QDeclarativePixmap@@QAE@XZ @ 1653 NONAME ; QDeclarativePixmap::QDeclarativePixmap(void) - ?isReady@QDeclarativePixmap@@QBE_NXZ @ 1654 NONAME ; bool QDeclarativePixmap::isReady(void) const - ?clear@QDeclarativePixmap@@QAEXXZ @ 1655 NONAME ; void QDeclarativePixmap::clear(void) - ?pixmap@QDeclarativePixmap@@QBEABVQPixmap@@XZ @ 1656 NONAME ; class QPixmap const & QDeclarativePixmap::pixmap(void) const - ??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@@Z @ 1657 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &) - ?width@QDeclarativePixmap@@QBEHXZ @ 1658 NONAME ; int QDeclarativePixmap::width(void) const - ?setPixmap@QDeclarativePixmap@@QAEXABVQPixmap@@@Z @ 1659 NONAME ; void QDeclarativePixmap::setPixmap(class QPixmap const &) - ?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 1660 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, int) - ?isError@QDeclarativePixmap@@QBE_NXZ @ 1661 NONAME ; bool QDeclarativePixmap::isError(void) const - ?rect@QDeclarativePixmap@@QBE?AVQRect@@XZ @ 1662 NONAME ; class QRect QDeclarativePixmap::rect(void) const - ?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1663 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *) - ?tr@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1664 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *) - ?isNull@QDeclarativePixmap@@QBE_NXZ @ 1665 NONAME ; bool QDeclarativePixmap::isNull(void) const - ?requestSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1666 NONAME ; class QSize const & QDeclarativePixmap::requestSize(void) const - ??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1667 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &, class QSize const &) - ?url@QDeclarativePixmap@@QBEABVQUrl@@XZ @ 1668 NONAME ; class QUrl const & QDeclarativePixmap::url(void) const - ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@_N@Z @ 1669 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &, bool) - +EXPORTS + ?write@QDeclarativeProperty@@QBE_NABVQVariant@@@Z @ 1 NONAME ; bool QDeclarativeProperty::write(class QVariant const &) const + ?setStored@QMetaPropertyBuilder@@QAEX_N@Z @ 2 NONAME ; void QMetaPropertyBuilder::setStored(bool) + ?trUtf8@QDeclarativeExpression@@SA?AVQString@@PBD0H@Z @ 3 NONAME ; class QString QDeclarativeExpression::trUtf8(char const *, char const *, int) + ?qt_metacast@QDeclarativeComponent@@UAEPAXPBD@Z @ 4 NONAME ; void * QDeclarativeComponent::qt_metacast(char const *) + ?name@QDeclarativeDebugService@@QBE?AVQString@@XZ @ 5 NONAME ; class QString QDeclarativeDebugService::name(void) const + ?debugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 6 NONAME ; int QDeclarativeDebugObjectReference::debugId(void) const + ?addPluginPath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 7 NONAME ; void QDeclarativeEngine::addPluginPath(class QString const &) + ?name@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 8 NONAME ; class QByteArray QMetaPropertyBuilder::name(void) const + ??6QDeclarativeInfo@@QAEAAV0@_J@Z @ 9 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(long long) + ?propertyOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 10 NONAME ; int QDeclarativeOpenMetaObjectType::propertyOffset(void) const + ??0QDeclarativeText@@QAE@PAVQDeclarativeItem@@@Z @ 11 NONAME ; QDeclarativeText::QDeclarativeText(class QDeclarativeItem *) + ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 12 NONAME ABSENT ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *, int) + ?propertyTypeName@QDeclarativeProperty@@QBEPBDXZ @ 13 NONAME ; char const * QDeclarativeProperty::propertyTypeName(void) const + ?wantsFocusChanged@QDeclarativeItem@@IAEX_N@Z @ 14 NONAME ; void QDeclarativeItem::wantsFocusChanged(bool) + ?getStaticMetaObject@QDeclarativeDebugService@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & QDeclarativeDebugService::getStaticMetaObject(void) + ?setLeft@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 16 NONAME ; void QDeclarativeAnchors::setLeft(class QDeclarativeAnchorLine const &) + ?qt_metacall@QDeclarativeExpression@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 17 NONAME ; int QDeclarativeExpression::qt_metacall(enum QMetaObject::Call, int, void * *) + ?staticMetaObject@QDeclarativePen@@2UQMetaObject@@B @ 18 NONAME ; struct QMetaObject const QDeclarativePen::staticMetaObject + ?transformOriginChanged@QDeclarativeItem@@IAEXW4TransformOrigin@1@@Z @ 19 NONAME ; void QDeclarativeItem::transformOriginChanged(enum QDeclarativeItem::TransformOrigin) + ?isStored@QMetaPropertyBuilder@@QBE_NXZ @ 20 NONAME ; bool QMetaPropertyBuilder::isStored(void) const + ?elapsed@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 21 NONAME ; long long QDeclarativeItemPrivate::elapsed(class QElapsedTimer &) + ?clearComponentCache@QDeclarativeEngine@@QAEXXZ @ 22 NONAME ; void QDeclarativeEngine::clearComponentCache(void) + ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 23 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *, int) + ??_EQDeclarativePixmapReply@@UAE@I@Z @ 24 NONAME ABSENT ; QDeclarativePixmapReply::~QDeclarativePixmapReply(unsigned int) + ??1QDeclarativeParserStatus@@UAE@XZ @ 25 NONAME ; QDeclarativeParserStatus::~QDeclarativeParserStatus(void) + ?gradient@QDeclarativeRectangle@@QBEPAVQDeclarativeGradient@@XZ @ 26 NONAME ; class QDeclarativeGradient * QDeclarativeRectangle::gradient(void) const + ?setReadable@QMetaPropertyBuilder@@QAEX_N@Z @ 27 NONAME ; void QMetaPropertyBuilder::setReadable(bool) + ?d_func@QDeclarativeExpression@@AAEPAVQDeclarativeExpressionPrivate@@XZ @ 28 NONAME ; class QDeclarativeExpressionPrivate * QDeclarativeExpression::d_func(void) + ??1QDeclarativeDomValueValueSource@@QAE@XZ @ 29 NONAME ; QDeclarativeDomValueValueSource::~QDeclarativeDomValueValueSource(void) + ??_EQDeclarativeStateGroup@@UAE@I@Z @ 30 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(unsigned int) + ?property@QDeclarativeDomObject@@QBE?AVQDeclarativeDomProperty@@ABVQByteArray@@@Z @ 31 NONAME ; class QDeclarativeDomProperty QDeclarativeDomObject::property(class QByteArray const &) const + ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 32 NONAME ; class QString QDeclarativeAnchors::tr(char const *, char const *, int) + ?location@QDeclarativeCustomParserNode@@QBE?AULocation@QDeclarativeParser@@XZ @ 33 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserNode::location(void) const + ??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@ABVQString@@PAVQObject@@@Z @ 34 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QString const &, class QObject *) + ?d_func@QDeclarativeContext@@AAEPAVQDeclarativeContextPrivate@@XZ @ 35 NONAME ; class QDeclarativeContextPrivate * QDeclarativeContext::d_func(void) + ?resetLeft@QDeclarativeAnchors@@QAEXXZ @ 36 NONAME ; void QDeclarativeAnchors::resetLeft(void) + ?staticMetaObject@QDeclarativePixmapReply@@2UQMetaObject@@B @ 37 NONAME ABSENT ; struct QMetaObject const QDeclarativePixmapReply::staticMetaObject + ?setOfflineStoragePath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 38 NONAME ; void QDeclarativeEngine::setOfflineStoragePath(class QString const &) + ?getStaticMetaObject@QListModelInterface@@SAABUQMetaObject@@XZ @ 39 NONAME ; struct QMetaObject const & QListModelInterface::getStaticMetaObject(void) + ?tr@QDeclarativeEngine@@SA?AVQString@@PBD0H@Z @ 40 NONAME ; class QString QDeclarativeEngine::tr(char const *, char const *, int) + ??0QDeclarativeEngine@@QAE@PAVQObject@@@Z @ 41 NONAME ; QDeclarativeEngine::QDeclarativeEngine(class QObject *) + ??0QDeclarativeDebugObjectReference@@QAE@ABV0@@Z @ 42 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(class QDeclarativeDebugObjectReference const &) + ?set@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 43 NONAME ; void QDeclarativeListModel::set(int, class QScriptValue const &) + ?tr@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 44 NONAME ; class QString QDeclarativeState::tr(char const *, char const *, int) + ?metaObject@QDeclarativeBinding@@UBEPBUQMetaObject@@XZ @ 45 NONAME ; struct QMetaObject const * QDeclarativeBinding::metaObject(void) const + ?setUser@QMetaPropertyBuilder@@QAEX_N@Z @ 46 NONAME ; void QMetaPropertyBuilder::setUser(bool) + ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 47 NONAME ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *) + ?setHorizontalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 48 NONAME ; void QDeclarativeAnchors::setHorizontalCenterOffset(float) + ??0QDeclarativeProperty@@QAE@XZ @ 49 NONAME ; QDeclarativeProperty::QDeclarativeProperty(void) + ?valueType@QDeclarativeValueTypeFactory@@SAPAVQDeclarativeValueType@@H@Z @ 50 NONAME ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::valueType(int) + ??1QDeclarativeText@@UAE@XZ @ 51 NONAME ; QDeclarativeText::~QDeclarativeText(void) + ?getStaticMetaObject@QDeclarativeText@@SAABUQMetaObject@@XZ @ 52 NONAME ; struct QMetaObject const & QDeclarativeText::getStaticMetaObject(void) + ?isDesignable@QMetaPropertyBuilder@@QBE_NXZ @ 53 NONAME ; bool QMetaPropertyBuilder::isDesignable(void) const + ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 54 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *, int) + ?errors@QDeclarativeView@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 55 NONAME ; class QList<class QDeclarativeError> QDeclarativeView::errors(void) const + ??0QPacket@@QAE@ABV0@@Z @ 56 NONAME ; QPacket::QPacket(class QPacket const &) + ??1QDeclarativeDebugObjectExpressionWatch@@UAE@XZ @ 57 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(void) + ?bottom@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 58 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::bottom(void) const + ??_EQDeclarativeDebugObjectQuery@@UAE@I@Z @ 59 NONAME ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(unsigned int) + ??0QDeclarativeDomObject@@QAE@XZ @ 60 NONAME ; QDeclarativeDomObject::QDeclarativeDomObject(void) + ?errors@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 61 NONAME ; class QList<class QDeclarativeError> QDeclarativeDomDocument::errors(void) const + ?toChanged@QDeclarativeTransition@@IAEXXZ @ 62 NONAME ; void QDeclarativeTransition::toChanged(void) + ?registerAutoParentFunction@QDeclarativePrivate@@YAHP6A?AW4AutoParentResult@1@PAVQObject@@0@Z@Z @ 63 NONAME ; int QDeclarativePrivate::registerAutoParentFunction(enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)) + ?objectOwnership@QDeclarativeEngine@@SA?AW4ObjectOwnership@1@PAVQObject@@@Z @ 64 NONAME ; enum QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(class QObject *) + ??0QDeclarativeDebugWatch@@QAE@PAVQObject@@@Z @ 65 NONAME ; QDeclarativeDebugWatch::QDeclarativeDebugWatch(class QObject *) + ?value@QDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 66 NONAME ; class QVariant QDeclarativePropertyMap::value(class QString const &) const + ?trUtf8@QDeclarativePropertyMap@@SA?AVQString@@PBD0@Z @ 67 NONAME ; class QString QDeclarativePropertyMap::trUtf8(char const *, char const *) + ?isWaiting@QDeclarativeDebugQuery@@QBE_NXZ @ 68 NONAME ; bool QDeclarativeDebugQuery::isWaiting(void) const + ??1Variant@QDeclarativeParser@@QAE@XZ @ 69 NONAME ; QDeclarativeParser::Variant::~Variant(void) + ??0Variant@QDeclarativeParser@@QAE@ABVQString@@@Z @ 70 NONAME ; QDeclarativeParser::Variant::Variant(class QString const &) + ?paintedSizeChanged@QDeclarativeText@@IAEXXZ @ 71 NONAME ; void QDeclarativeText::paintedSizeChanged(void) + ??1QDeclarativeDebugClient@@UAE@XZ @ 72 NONAME ; QDeclarativeDebugClient::~QDeclarativeDebugClient(void) + ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 73 NONAME ; class QString QPacketProtocol::trUtf8(char const *, char const *) + ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 74 NONAME ; class QString QDeclarativeListModel::trUtf8(char const *, char const *) + ?qt_metacast@QDeclarativeState@@UAEPAXPBD@Z @ 75 NONAME ; void * QDeclarativeState::qt_metacast(char const *) + ??1QDeclarativeDebugContextReference@@QAE@XZ @ 76 NONAME ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(void) + ?getStaticMetaObject@QDeclarativeStateOperation@@SAABUQMetaObject@@XZ @ 77 NONAME ; struct QMetaObject const & QDeclarativeStateOperation::getStaticMetaObject(void) + ?isInvalid@QDeclarativeDomValue@@QBE_NXZ @ 78 NONAME ; bool QDeclarativeDomValue::isInvalid(void) const + ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString QDeclarativeText::trUtf8(char const *, char const *, int) + ??0QDeclarativeListReference@@QAE@ABV0@@Z @ 80 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QDeclarativeListReference const &) + ?registerType@QDeclarativePrivate@@YAHABURegisterInterface@1@@Z @ 81 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterInterface const &) + ?classBegin@QDeclarativeItem@@MAEXXZ @ 82 NONAME ; void QDeclarativeItem::classBegin(void) + ?setTransformOrigin@QDeclarativeItem@@QAEXW4TransformOrigin@1@@Z @ 83 NONAME ; void QDeclarativeItem::setTransformOrigin(enum QDeclarativeItem::TransformOrigin) + ?request@QDeclarativePixmapCache@@SAPAVQDeclarativePixmapReply@@PAVQDeclarativeEngine@@ABVQUrl@@HH@Z @ 84 NONAME ABSENT ; class QDeclarativePixmapReply * QDeclarativePixmapCache::request(class QDeclarativeEngine *, class QUrl const &, int, int) + ?event@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 85 NONAME ; bool QDeclarativeItem::event(class QEvent *) + ?setAttributes@QMetaMethodBuilder@@QAEXH@Z @ 86 NONAME ; void QMetaMethodBuilder::setAttributes(int) + ??_EQDeclarativeDebugObjectReference@@QAE@I@Z @ 87 NONAME ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(unsigned int) + ?qt_metacall@QDeclarativeDebugQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 88 NONAME ; int QDeclarativeDebugQuery::qt_metacall(enum QMetaObject::Call, int, void * *) + ?findState@QDeclarativeStateGroup@@QBEPAVQDeclarativeState@@ABVQString@@@Z @ 89 NONAME ; class QDeclarativeState * QDeclarativeStateGroup::findState(class QString const &) const + ?asScript@Variant@QDeclarativeParser@@QBE?AVQString@@XZ @ 90 NONAME ; class QString QDeclarativeParser::Variant::asScript(void) const + ?qt_metacast@QDeclarativeExtensionPlugin@@UAEPAXPBD@Z @ 91 NONAME ; void * QDeclarativeExtensionPlugin::qt_metacast(char const *) + ?objectId@QDeclarativeDomObject@@QBE?AVQString@@XZ @ 92 NONAME ; class QString QDeclarativeDomObject::objectId(void) const + ?right@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 93 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::right(void) const + ?removeFromObject@QDeclarativeAbstractBinding@@QAEXXZ @ 94 NONAME ; void QDeclarativeAbstractBinding::removeFromObject(void) + ?resizeMode@QDeclarativeView@@QBE?AW4ResizeMode@1@XZ @ 95 NONAME ; enum QDeclarativeView::ResizeMode QDeclarativeView::resizeMode(void) const + ?object@QDeclarativeOpenMetaObject@@QBEPAVQObject@@XZ @ 96 NONAME ; class QObject * QDeclarativeOpenMetaObject::object(void) const + ?staticMetaObject@QDeclarativeBehavior@@2UQMetaObject@@B @ 97 NONAME ; struct QMetaObject const QDeclarativeBehavior::staticMetaObject + ?toObject@QDeclarativeDomValue@@QBE?AVQDeclarativeDomObject@@XZ @ 98 NONAME ; class QDeclarativeDomObject QDeclarativeDomValue::toObject(void) const + ?setLine@QDeclarativeError@@QAEXH@Z @ 99 NONAME ; void QDeclarativeError::setLine(int) + ??6QDeclarativeInfo@@QAEAAV0@K@Z @ 100 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned long) + ??0QDeclarativeDebugConnection@@QAE@PAVQObject@@@Z @ 101 NONAME ; QDeclarativeDebugConnection::QDeclarativeDebugConnection(class QObject *) + ?qt_metacast@QDeclarativeDebugQuery@@UAEPAXPBD@Z @ 102 NONAME ; void * QDeclarativeDebugQuery::qt_metacast(char const *) + ?isValid@QDeclarativeGridScaledImage@@QBE_NXZ @ 103 NONAME ; bool QDeclarativeGridScaledImage::isValid(void) const + ?qt_metacast@QDeclarativeContext@@UAEPAXPBD@Z @ 104 NONAME ; void * QDeclarativeContext::qt_metacast(char const *) + ?metaObject@QDeclarativeDebugClient@@UBEPBUQMetaObject@@XZ @ 105 NONAME ; struct QMetaObject const * QDeclarativeDebugClient::metaObject(void) const + ?transitions@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 106 NONAME ; class QDeclarativeListProperty<class QDeclarativeTransition> QDeclarativeItemPrivate::transitions(void) + ??0QDeclarativeDebugPropertyWatch@@QAE@PAVQObject@@@Z @ 107 NONAME ; QDeclarativeDebugPropertyWatch::QDeclarativeDebugPropertyWatch(class QObject *) + ??_EQDeclarativeDebugPropertyReference@@QAE@I@Z @ 108 NONAME ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(unsigned int) + ?itemsChanged@QListModelInterface@@IAEXHHABV?$QList@H@@@Z @ 109 NONAME ; void QListModelInterface::itemsChanged(int, int, class QList<int> const &) + ??6@YA?AVQDebug@@V0@PAVQDeclarativeItem@@@Z @ 110 NONAME ; class QDebug operator<<(class QDebug, class QDeclarativeItem *) + ?write@QDeclarativePropertyPrivate@@SA_NABVQDeclarativeProperty@@ABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 111 NONAME ; bool QDeclarativePropertyPrivate::write(class QDeclarativeProperty const &, class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ?verticalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 112 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::verticalTileRule(void) const + ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 113 NONAME ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *) + ?isDynamic@QMetaPropertyBuilder@@QBE_NXZ @ 114 NONAME ; bool QMetaPropertyBuilder::isDynamic(void) const + ?removeClassInfo@QMetaObjectBuilder@@QAEXH@Z @ 115 NONAME ; void QMetaObjectBuilder::removeClassInfo(int) + ?warnings@QDeclarativeEngine@@IAEXABV?$QList@VQDeclarativeError@@@@@Z @ 116 NONAME ; void QDeclarativeEngine::warnings(class QList<class QDeclarativeError> const &) + ?description@QDeclarativeError@@QBE?AVQString@@XZ @ 117 NONAME ; class QString QDeclarativeError::description(void) const + ?binding@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 118 NONAME ; class QString QDeclarativeDebugPropertyReference::binding(void) const + ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 119 NONAME ; class QString QDeclarativePen::trUtf8(char const *, char const *) + ?readValueProperty@QDeclarativePropertyPrivate@@QAE?AVQVariant@@XZ @ 120 NONAME ; class QVariant QDeclarativePropertyPrivate::readValueProperty(void) + ?propertyType@QDeclarativeDomDynamicProperty@@QBEHXZ @ 121 NONAME ; int QDeclarativeDomDynamicProperty::propertyType(void) const + ?gridBottom@QDeclarativeGridScaledImage@@QBEHXZ @ 122 NONAME ; int QDeclarativeGridScaledImage::gridBottom(void) const + ?setRadius@QDeclarativeRectangle@@QAEXM@Z @ 123 NONAME ; void QDeclarativeRectangle::setRadius(float) + ?d_func@QDeclarativeBehavior@@AAEPAVQDeclarativeBehaviorPrivate@@XZ @ 124 NONAME ; class QDeclarativeBehaviorPrivate * QDeclarativeBehavior::d_func(void) + ?isValid@QDeclarativePen@@QAE_NXZ @ 125 NONAME ; bool QDeclarativePen::isValid(void) + ?result@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 126 NONAME ; class QVariant QDeclarativeDebugExpressionQuery::result(void) const + ?isEnumOrFlag@QMetaPropertyBuilder@@QBE_NXZ @ 127 NONAME ; bool QMetaPropertyBuilder::isEnumOrFlag(void) const + ?addToObject@QDeclarativeAbstractBinding@@QAEXPAVQObject@@@Z @ 128 NONAME ; void QDeclarativeAbstractBinding::addToObject(class QObject *) + ?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0H@Z @ 129 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *, int) + ?d_func@QDeclarativeAnchors@@AAEPAVQDeclarativeAnchorsPrivate@@XZ @ 130 NONAME ; class QDeclarativeAnchorsPrivate * QDeclarativeAnchors::d_func(void) + ??1QPacket@@UAE@XZ @ 131 NONAME ; QPacket::~QPacket(void) + ?top@QDeclarativeScaleGrid@@QBEHXZ @ 132 NONAME ; int QDeclarativeScaleGrid::top(void) const + ?setExpression@QDeclarativeExpression@@QAEXABVQString@@@Z @ 133 NONAME ; void QDeclarativeExpression::setExpression(class QString const &) + ??1QDeclarativeDebugEngineReference@@QAE@XZ @ 134 NONAME ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(void) + ??0QDeclarativeStateOperation@@QAE@PAVQObject@@@Z @ 135 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObject *) + ?transform_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 136 NONAME ; void QDeclarativeItemPrivate::transform_clear(class QDeclarativeListProperty<class QGraphicsTransform> *) + ?staticMetaObject@QDeclarativeValueType@@2UQMetaObject@@B @ 137 NONAME ; struct QMetaObject const QDeclarativeValueType::staticMetaObject + ?propertyName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 138 NONAME ; class QByteArray QDeclarativeDomDynamicProperty::propertyName(void) const + ?getStaticMetaObject@QDeclarativePixmapReply@@SAABUQMetaObject@@XZ @ 139 NONAME ABSENT ; struct QMetaObject const & QDeclarativePixmapReply::getStaticMetaObject(void) + ?focusChanged@QDeclarativeItem@@IAEX_N@Z @ 140 NONAME ; void QDeclarativeItem::focusChanged(bool) + ?getStaticMetaObject@QDeclarativeBinding@@SAABUQMetaObject@@XZ @ 141 NONAME ; struct QMetaObject const & QDeclarativeBinding::getStaticMetaObject(void) + ?copy@QDeclarativeMetaType@@SA_NHPAXPBX@Z @ 142 NONAME ; bool QDeclarativeMetaType::copy(int, void *, void const *) + ?qt_metacall@QDeclarativeDebugEnginesQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 143 NONAME ; int QDeclarativeDebugEnginesQuery::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 144 NONAME ; class QString QDeclarativeDebugWatch::tr(char const *, char const *) + ?setEnumOrFlag@QMetaPropertyBuilder@@QAEX_N@Z @ 145 NONAME ; void QMetaPropertyBuilder::setEnumOrFlag(bool) + ?getStaticMetaObject@QDeclarativeRectangle@@SAABUQMetaObject@@XZ @ 146 NONAME ; struct QMetaObject const & QDeclarativeRectangle::getStaticMetaObject(void) + ?isValid@QDeclarativeProperty@@QBE_NXZ @ 147 NONAME ; bool QDeclarativeProperty::isValid(void) const + ?isConnected@QDeclarativeDebugClient@@QBE_NXZ @ 148 NONAME ; bool QDeclarativeDebugClient::isConnected(void) const + ?enabled@QDeclarativeBinding@@QBE_NXZ @ 149 NONAME ; bool QDeclarativeBinding::enabled(void) const + ?setSource@QDeclarativeView@@QAEXABVQUrl@@@Z @ 150 NONAME ; void QDeclarativeView::setSource(class QUrl const &) + ??_EQDeclarativeDebugService@@UAE@I@Z @ 151 NONAME ; QDeclarativeDebugService::~QDeclarativeDebugService(unsigned int) + ??0QDeclarativeDomDynamicProperty@@QAE@ABV0@@Z @ 152 NONAME ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(class QDeclarativeDomDynamicProperty const &) + ?className@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 153 NONAME ; class QString QDeclarativeDebugObjectReference::className(void) const + ?indexOfSlot@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 154 NONAME ; int QMetaObjectBuilder::indexOfSlot(class QByteArray const &) + ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 155 NONAME ; class QString QDeclarativeDebugConnection::tr(char const *, char const *, int) + ?progressChanged@QDeclarativeComponent@@IAEXM@Z @ 156 NONAME ; void QDeclarativeComponent::progressChanged(float) + ?hasError@QDeclarativeExpression@@QBE_NXZ @ 157 NONAME ; bool QDeclarativeExpression::hasError(void) const + ?property@QMetaObjectBuilder@@QBE?AVQMetaPropertyBuilder@@H@Z @ 158 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::property(int) const + ?index@QDeclarativeType@@QBEHXZ @ 159 NONAME ; int QDeclarativeType::index(void) const + ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 160 NONAME ; class QString QDeclarativeRectangle::tr(char const *, char const *) + ?release@QDeclarativePixmapReply@@AAE_N_N@Z @ 161 NONAME ABSENT ; bool QDeclarativePixmapReply::release(bool) + ??0QDeclarativeScaleGrid@@QAE@PAVQObject@@@Z @ 162 NONAME ; QDeclarativeScaleGrid::QDeclarativeScaleGrid(class QObject *) + ?engines@QDeclarativeDebugEnginesQuery@@QBE?AV?$QList@VQDeclarativeDebugEngineReference@@@@XZ @ 163 NONAME ; class QList<class QDeclarativeDebugEngineReference> QDeclarativeDebugEnginesQuery::engines(void) const + ?qt_metacall@QDeclarativeDebugPropertyWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 164 NONAME ; int QDeclarativeDebugPropertyWatch::qt_metacall(enum QMetaObject::Call, int, void * *) + ?metaObject@QDeclarativeAnchors@@UBEPBUQMetaObject@@XZ @ 165 NONAME ; struct QMetaObject const * QDeclarativeAnchors::metaObject(void) const + ?sceneResized@QDeclarativeView@@IAEXVQSize@@@Z @ 166 NONAME ; void QDeclarativeView::sceneResized(class QSize) + ?subFocusItemChange@QDeclarativeItemPrivate@@UAEXXZ @ 167 NONAME ; void QDeclarativeItemPrivate::subFocusItemChange(void) + ?hasNotifySignal@QDeclarativeDebugPropertyReference@@QBE_NXZ @ 168 NONAME ; bool QDeclarativeDebugPropertyReference::hasNotifySignal(void) const + ?addSlot@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 169 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addSlot(class QByteArray const &) + ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 170 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *) + ?propertyCreated@QDeclarativeOpenMetaObjectType@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 171 NONAME ; void QDeclarativeOpenMetaObjectType::propertyCreated(int, class QMetaPropertyBuilder &) + ??1QDeclarativeItemPrivate@@UAE@XZ @ 172 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(void) + ?clear@QDeclarativePropertyMap@@QAEXABVQString@@@Z @ 173 NONAME ; void QDeclarativePropertyMap::clear(class QString const &) + ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 174 NONAME ; class QString QDeclarativeDebugClient::tr(char const *, char const *, int) + ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@PAVQDeclarativeEngine@@@Z @ 175 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &, class QDeclarativeEngine *) + ?insert@QDeclarativePropertyMap@@QAEXABVQString@@ABVQVariant@@@Z @ 176 NONAME ; void QDeclarativePropertyMap::insert(class QString const &, class QVariant const &) + ??1QDeclarativeContext@@UAE@XZ @ 177 NONAME ; QDeclarativeContext::~QDeclarativeContext(void) + ?operationCount@QDeclarativeState@@QBEHXZ @ 178 NONAME ; int QDeclarativeState::operationCount(void) const + ?getStaticMetaObject@QDeclarativeItem@@SAABUQMetaObject@@XZ @ 179 NONAME ; struct QMetaObject const & QDeclarativeItem::getStaticMetaObject(void) + ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 180 NONAME ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *, int) + ?status@QDeclarativeComponent@@QBE?AW4Status@1@XZ @ 181 NONAME ; enum QDeclarativeComponent::Status QDeclarativeComponent::status(void) const + ?boundingRect@QDeclarativeItem@@UBE?AVQRectF@@XZ @ 182 NONAME ; class QRectF QDeclarativeItem::boundingRect(void) const + ?availableInVersion@QDeclarativeType@@QBE_NHH@Z @ 183 NONAME ; bool QDeclarativeType::availableInVersion(int, int) const + ?getStaticMetaObject@QDeclarativeDebugWatch@@SAABUQMetaObject@@XZ @ 184 NONAME ; struct QMetaObject const & QDeclarativeDebugWatch::getStaticMetaObject(void) + ??_EQDeclarativeRectangle@@UAE@I@Z @ 185 NONAME ; QDeclarativeRectangle::~QDeclarativeRectangle(unsigned int) + ?setTopMargin@QDeclarativeAnchors@@QAEXM@Z @ 186 NONAME ; void QDeclarativeAnchors::setTopMargin(float) + ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 187 NONAME ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &) + ??1QDeclarativeValueTypeFactory@@QAE@XZ @ 188 NONAME ; QDeclarativeValueTypeFactory::~QDeclarativeValueTypeFactory(void) + ?metaObject@QDeclarativeDebugObjectExpressionWatch@@UBEPBUQMetaObject@@XZ @ 189 NONAME ; struct QMetaObject const * QDeclarativeDebugObjectExpressionWatch::metaObject(void) const + ??0QDeclarativeComponent@@QAE@PAVQObject@@@Z @ 190 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QObject *) + ?qt_metacast@QDeclarativeItem@@UAEPAXPBD@Z @ 191 NONAME ; void * QDeclarativeItem::qt_metacast(char const *) + ?changes@QDeclarativeState@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeStateOperation@@@@XZ @ 192 NONAME ; class QDeclarativeListProperty<class QDeclarativeStateOperation> QDeclarativeState::changes(void) + ?resizeEvent@QDeclarativeView@@MAEXPAVQResizeEvent@@@Z @ 193 NONAME ; void QDeclarativeView::resizeEvent(class QResizeEvent *) + ?d_func@QDeclarativeBinding@@ABEPBVQDeclarativeBindingPrivate@@XZ @ 194 NONAME ; class QDeclarativeBindingPrivate const * QDeclarativeBinding::d_func(void) const + ?wrapMode@QDeclarativeText@@QBE?AW4WrapMode@1@XZ @ 195 NONAME ; enum QDeclarativeText::WrapMode QDeclarativeText::wrapMode(void) const + ?centerIn@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 196 NONAME ; class QGraphicsObject * QDeclarativeAnchors::centerIn(void) const + ??0QDeclarativeType@@AAE@HABURegisterType@QDeclarativePrivate@@@Z @ 197 NONAME ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterType const &) + ?trUtf8@QDeclarativeComponent@@SA?AVQString@@PBD0H@Z @ 198 NONAME ; class QString QDeclarativeComponent::trUtf8(char const *, char const *, int) + ??0QMetaObjectBuilder@@QAE@PBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 199 NONAME ; QMetaObjectBuilder::QMetaObjectBuilder(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>) + ?quit@QDeclarativeEngine@@IAEXXZ @ 200 NONAME ; void QDeclarativeEngine::quit(void) + ??0QMetaEnumBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 201 NONAME ; QMetaEnumBuilder::QMetaEnumBuilder(class QMetaObjectBuilder const *, int) + ?setBottom@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 202 NONAME ; void QDeclarativeAnchors::setBottom(class QDeclarativeAnchorLine const &) + ??0QDeclarativeCustomParser@@QAE@XZ @ 203 NONAME ; QDeclarativeCustomParser::QDeclarativeCustomParser(void) + ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 204 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(class QByteArray const &) const + ?styleColor@QDeclarativeText@@QBE?AVQColor@@XZ @ 205 NONAME ; class QColor QDeclarativeText::styleColor(void) const + ?centerInChanged@QDeclarativeAnchors@@IAEXXZ @ 206 NONAME ; void QDeclarativeAnchors::centerInChanged(void) + ?colorChanged@QDeclarativeRectangle@@IAEXXZ @ 207 NONAME ; void QDeclarativeRectangle::colorChanged(void) + ??0QDeclarativePropertyPrivate@@QAE@ABV0@@Z @ 208 NONAME ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(class QDeclarativePropertyPrivate const &) + ?loadUrl@QDeclarativeComponent@@QAEXABVQUrl@@@Z @ 209 NONAME ; void QDeclarativeComponent::loadUrl(class QUrl const &) + ?beginCreate@QDeclarativeComponent@@UAEPAVQObject@@PAVQDeclarativeContext@@@Z @ 210 NONAME ; class QObject * QDeclarativeComponent::beginCreate(class QDeclarativeContext *) + ?setRight@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 211 NONAME ; void QDeclarativeAnchors::setRight(class QDeclarativeAnchorLine const &) + ?needsNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 212 NONAME ; bool QDeclarativeProperty::needsNotifySignal(void) const + ?fill@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 213 NONAME ; class QGraphicsObject * QDeclarativeAnchors::fill(void) const + ?url@QDeclarativePixmapReply@@QBEABVQUrl@@XZ @ 214 NONAME ABSENT ; class QUrl const & QDeclarativePixmapReply::url(void) const + ?top@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 215 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::top(void) const + ?clear@QDeclarativeListReference@@QBE_NXZ @ 216 NONAME ; bool QDeclarativeListReference::clear(void) const + ?parentChanged@QDeclarativeItem@@IAEXPAV1@@Z @ 217 NONAME ; void QDeclarativeItem::parentChanged(class QDeclarativeItem *) + ?columnNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 218 NONAME ; int QDeclarativeDebugFileReference::columnNumber(void) const + ??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 219 NONAME ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *) + ?apply@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@PAVQDeclarativeTransition@@PAV1@@Z @ 220 NONAME ; void QDeclarativeState::apply(class QDeclarativeStateGroup *, class QDeclarativeTransition *, class QDeclarativeState *) + ?isValid@QDeclarativeDomProperty@@QBE_NXZ @ 221 NONAME ; bool QDeclarativeDomProperty::isValid(void) const + ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 222 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *) + ?statusChanged@QDeclarativeView@@IAEXW4Status@1@@Z @ 223 NONAME ; void QDeclarativeView::statusChanged(enum QDeclarativeView::Status) + ?componentComplete@QDeclarativeText@@UAEXXZ @ 224 NONAME ; void QDeclarativeText::componentComplete(void) + ?canCount@QDeclarativeListReference@@QBE_NXZ @ 225 NONAME ; bool QDeclarativeListReference::canCount(void) const + ??1QListModelInterface@@UAE@XZ @ 226 NONAME ; QListModelInterface::~QListModelInterface(void) + ??0QDeclarativeAnchors@@QAE@PAVQObject@@@Z @ 227 NONAME ; QDeclarativeAnchors::QDeclarativeAnchors(class QObject *) + ?resources_at@QDeclarativeItemPrivate@@SAPAVQObject@@PAV?$QDeclarativeListProperty@VQObject@@@@H@Z @ 228 NONAME ; class QObject * QDeclarativeItemPrivate::resources_at(class QDeclarativeListProperty<class QObject> *, int) + ?isExtendedType@QDeclarativeType@@QBE_NXZ @ 229 NONAME ; bool QDeclarativeType::isExtendedType(void) const + ?top@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 230 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::top(void) const + ??0QDeclarativePropertyMap@@QAE@PAVQObject@@@Z @ 231 NONAME ; QDeclarativePropertyMap::QDeclarativePropertyMap(class QObject *) + ??0QDeclarativeExpression@@IAE@PAVQDeclarativeContextData@@PAXPAVQDeclarativeRefCount@@PAVQObject@@ABVQString@@HAAVQDeclarativeExpressionPrivate@@@Z @ 232 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, void *, class QDeclarativeRefCount *, class QObject *, class QString const &, int, class QDeclarativeExpressionPrivate &) + ?setColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 233 NONAME ; void QDeclarativeText::setColor(class QColor const &) + ?hasStdCppSet@QMetaPropertyBuilder@@QBE_NXZ @ 234 NONAME ; bool QMetaPropertyBuilder::hasStdCppSet(void) const + ??0QDeclarativeDebugFileReference@@QAE@ABV0@@Z @ 235 NONAME ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(class QDeclarativeDebugFileReference const &) + ?toValueInterceptor@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueInterceptor@@XZ @ 236 NONAME ; class QDeclarativeDomValueValueInterceptor QDeclarativeDomValue::toValueInterceptor(void) const + ??0QDeclarativeDebugEngineReference@@QAE@H@Z @ 237 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(int) + ?state@QDeclarativeItemPrivate@@QBE?AVQString@@XZ @ 238 NONAME ; class QString QDeclarativeItemPrivate::state(void) const + ??1QDeclarativePropertyValueInterceptor@@UAE@XZ @ 239 NONAME ; QDeclarativePropertyValueInterceptor::~QDeclarativePropertyValueInterceptor(void) + ?getStaticMetaObject@QDeclarativePropertyMap@@SAABUQMetaObject@@XZ @ 240 NONAME ; struct QMetaObject const & QDeclarativePropertyMap::getStaticMetaObject(void) + ??1QDeclarativeScaleGrid@@UAE@XZ @ 241 NONAME ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(void) + ?idString@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 242 NONAME ; class QString QDeclarativeDebugObjectReference::idString(void) const + ?customTypeData@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 243 NONAME ; class QByteArray QDeclarativeDomObject::customTypeData(void) const + ?stop@QDeclarativeTransition@@QAEXXZ @ 244 NONAME ; void QDeclarativeTransition::stop(void) + ?data@QDeclarativeListModel@@UBE?AV?$QHash@HVQVariant@@@@HABV?$QList@H@@@Z @ 245 NONAME ; class QHash<int, class QVariant> QDeclarativeListModel::data(int, class QList<int> const &) const + ?verticalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 246 NONAME ; float QDeclarativeAnchors::verticalCenterOffset(void) const + ?metaObject@QDeclarativeText@@UBEPBUQMetaObject@@XZ @ 247 NONAME ; struct QMetaObject const * QDeclarativeText::metaObject(void) const + ??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@PAVQObject@@@Z @ 248 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QObject *) + ?createProperty@QDeclarativeOpenMetaObjectType@@QAEHABVQByteArray@@@Z @ 249 NONAME ; int QDeclarativeOpenMetaObjectType::createProperty(class QByteArray const &) + ??0QDeclarativeContext@@QAE@PAVQDeclarativeEngine@@PAVQObject@@@Z @ 250 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeEngine *, class QObject *) + ??6QDeclarativeInfo@@QAEAAV0@M@Z @ 251 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(float) + ??4QDeclarativeDomValueLiteral@@QAEAAV0@ABV0@@Z @ 252 NONAME ; class QDeclarativeDomValueLiteral & QDeclarativeDomValueLiteral::operator=(class QDeclarativeDomValueLiteral const &) + ?setScript@QDeclarativeScriptString@@QAEXABVQString@@@Z @ 253 NONAME ; void QDeclarativeScriptString::setScript(class QString const &) + ?qt_metacast@QPacketProtocol@@UAEPAXPBD@Z @ 254 NONAME ; void * QPacketProtocol::qt_metacast(char const *) + ?addMetaObject@QMetaObjectBuilder@@QAEXPBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 255 NONAME ; void QMetaObjectBuilder::addMetaObject(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>) + ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 256 NONAME ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *, int) + ?qt_metacast@QDeclarativeText@@UAEPAXPBD@Z @ 257 NONAME ; void * QDeclarativeText::qt_metacast(char const *) + ?anchors@QDeclarativeItemPrivate@@QAEPAVQDeclarativeAnchors@@XZ @ 258 NONAME ; class QDeclarativeAnchors * QDeclarativeItemPrivate::anchors(void) + ??0QListModelInterface@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 259 NONAME ; QListModelInterface::QListModelInterface(class QObjectPrivate &, class QObject *) + ?valueTypeName@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 260 NONAME ; class QString QDeclarativeDebugPropertyReference::valueTypeName(void) const + ?setStyleColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 261 NONAME ; void QDeclarativeText::setStyleColor(class QColor const &) + ?create@QDeclarativeType@@QBEPAVQObject@@XZ @ 262 NONAME ; class QObject * QDeclarativeType::create(void) const + ?metaObject@QDeclarativeDebugExpressionQuery@@UBEPBUQMetaObject@@XZ @ 263 NONAME ; struct QMetaObject const * QDeclarativeDebugExpressionQuery::metaObject(void) const + ?readyRead@QPacketProtocol@@IAEXXZ @ 264 NONAME ; void QPacketProtocol::readyRead(void) + ?qt_metacall@QDeclarativeValueType@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 265 NONAME ; int QDeclarativeValueType::qt_metacall(enum QMetaObject::Call, int, void * *) + ?propertyType@QDeclarativePropertyPrivate@@QBEHXZ @ 266 NONAME ; int QDeclarativePropertyPrivate::propertyType(void) const + ?engine@QDeclarativeView@@QAEPAVQDeclarativeEngine@@XZ @ 267 NONAME ; class QDeclarativeEngine * QDeclarativeView::engine(void) + ?inputMethodQuery@QDeclarativeItem@@MBE?AVQVariant@@W4InputMethodQuery@Qt@@@Z @ 268 NONAME ; class QVariant QDeclarativeItem::inputMethodQuery(enum Qt::InputMethodQuery) const + ?sizeHint@QDeclarativeView@@UBE?AVQSize@@XZ @ 269 NONAME ; class QSize QDeclarativeView::sizeHint(void) const + ?flags@QDeclarativeCustomParser@@QBE?AV?$QFlags@W4Flag@QDeclarativeCustomParser@@@@XZ @ 270 NONAME ; class QFlags<enum QDeclarativeCustomParser::Flag> QDeclarativeCustomParser::flags(void) const + ?staticMetaObject@QDeclarativeDebugObjectExpressionWatch@@2UQMetaObject@@B @ 271 NONAME ; struct QMetaObject const QDeclarativeDebugObjectExpressionWatch::staticMetaObject + ??0QDeclarativeDebugPropertyReference@@QAE@ABV0@@Z @ 272 NONAME ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(class QDeclarativeDebugPropertyReference const &) + ??_EQDeclarativeCustomParser@@UAE@I@Z @ 273 NONAME ; QDeclarativeCustomParser::~QDeclarativeCustomParser(unsigned int) + ??6QDeclarativeInfo@@QAEAAV0@ABVQStringRef@@@Z @ 274 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QStringRef const &) + ?values@QDeclarativeDomList@@QBE?AV?$QList@VQDeclarativeDomValue@@@@XZ @ 275 NONAME ; class QList<class QDeclarativeDomValue> QDeclarativeDomList::values(void) const + ?errorString@QDeclarativeComponent@@QBE?AVQString@@XZ @ 276 NONAME ; class QString QDeclarativeComponent::errorString(void) const + ?metaObject@QDeclarativeEngineDebug@@UBEPBUQMetaObject@@XZ @ 277 NONAME ; struct QMetaObject const * QDeclarativeEngineDebug::metaObject(void) const + ??1QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 278 NONAME ; QDeclarativeDomValueValueInterceptor::~QDeclarativeDomValueValueInterceptor(void) + ?flatten@QDeclarativeListModel@@AAE_NXZ @ 279 NONAME ; bool QDeclarativeListModel::flatten(void) + ?propertyCount@QMetaObjectBuilder@@QBEHXZ @ 280 NONAME ; int QMetaObjectBuilder::propertyCount(void) const + ?method@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 281 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::method(int) const + ?textFormat@QDeclarativeText@@QBE?AW4TextFormat@1@XZ @ 282 NONAME ; enum QDeclarativeText::TextFormat QDeclarativeText::textFormat(void) const + ?getStaticMetaObject@QDeclarativeDebugObjectExpressionWatch@@SAABUQMetaObject@@XZ @ 283 NONAME ; struct QMetaObject const & QDeclarativeDebugObjectExpressionWatch::getStaticMetaObject(void) + ?write@QDeclarativeBehavior@@UAEXABVQVariant@@@Z @ 284 NONAME ; void QDeclarativeBehavior::write(class QVariant const &) + ?resetTop@QDeclarativeAnchors@@QAEXXZ @ 285 NONAME ; void QDeclarativeAnchors::resetTop(void) + ?queryId@QDeclarativeDebugWatch@@QBEHXZ @ 286 NONAME ; int QDeclarativeDebugWatch::queryId(void) const + ?trUtf8@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 287 NONAME ; class QString QDeclarativeExtensionPlugin::trUtf8(char const *, char const *, int) + ?staticMetaObject@QDeclarativeComponent@@2UQMetaObject@@B @ 288 NONAME ; struct QMetaObject const QDeclarativeComponent::staticMetaObject + ?setStateGroup@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@@Z @ 289 NONAME ; void QDeclarativeState::setStateGroup(class QDeclarativeStateGroup *) + ?access@QMetaMethodBuilder@@QBE?AW4Access@QMetaMethod@@XZ @ 290 NONAME ; enum QMetaMethod::Access QMetaMethodBuilder::access(void) const + ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 291 NONAME ; class QString QDeclarativeDebugQuery::tr(char const *, char const *) + ?attachedPropertiesType@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 292 NONAME ; struct QMetaObject const * QDeclarativeType::attachedPropertiesType(void) const + ?setName@QDeclarativeState@@QAEXABVQString@@@Z @ 293 NONAME ; void QDeclarativeState::setName(class QString const &) + ?setReversed@QDeclarativeTransition@@QAEX_N@Z @ 294 NONAME ; void QDeclarativeTransition::setReversed(bool) + ?idForObject@QDeclarativeDebugService@@SAHPAVQObject@@@Z @ 295 NONAME ; int QDeclarativeDebugService::idForObject(class QObject *) + ?qt_metacall@QDeclarativeDebugWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 296 NONAME ; int QDeclarativeDebugWatch::qt_metacall(enum QMetaObject::Call, int, void * *) + ?fromState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 297 NONAME ; class QString QDeclarativeTransition::fromState(void) const + ??1QDeclarativeExpression@@UAE@XZ @ 298 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(void) + ?binding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@@Z @ 299 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::binding(class QDeclarativeProperty const &) + ?removeMethod@QMetaObjectBuilder@@QAEXH@Z @ 300 NONAME ; void QMetaObjectBuilder::removeMethod(int) + ?get@QDeclarativePixmapCache@@SA?AW4Status@QDeclarativePixmapReply@@ABVQUrl@@PAVQPixmap@@PAVQString@@PAVQSize@@_NHH@Z @ 301 NONAME ABSENT ; enum QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(class QUrl const &, class QPixmap *, class QString *, class QSize *, bool, int, int) + ?operationAt@QDeclarativeState@@QBEPAVQDeclarativeStateOperation@@H@Z @ 302 NONAME ; class QDeclarativeStateOperation * QDeclarativeState::operationAt(int) const + ?methodCount@QMetaObjectBuilder@@QBEHXZ @ 303 NONAME ; int QMetaObjectBuilder::methodCount(void) const + ?font@QDeclarativeText@@QBE?AVQFont@@XZ @ 304 NONAME ; class QFont QDeclarativeText::font(void) const + ?completeCreate@QDeclarativeComponent@@UAEXXZ @ 305 NONAME ; void QDeclarativeComponent::completeCreate(void) + ??0QDeclarativeDomProperty@@QAE@XZ @ 306 NONAME ; QDeclarativeDomProperty::QDeclarativeDomProperty(void) + ?initDefault@QDeclarativePropertyPrivate@@QAEXPAVQObject@@@Z @ 307 NONAME ; void QDeclarativePropertyPrivate::initDefault(class QObject *) + ?count@QDeclarativeListModel@@UBEHXZ @ 308 NONAME ; int QDeclarativeListModel::count(void) const + ?setSmooth@QDeclarativeItem@@QAEX_N@Z @ 309 NONAME ; void QDeclarativeItem::setSmooth(bool) + ?value@QDeclarativeDebugPropertyReference@@QBE?AVQVariant@@XZ @ 310 NONAME ; class QVariant QDeclarativeDebugPropertyReference::value(void) const + ?resources@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQObject@@@@XZ @ 311 NONAME ; class QDeclarativeListProperty<class QObject> QDeclarativeItemPrivate::resources(void) + ?clear@QPacketProtocol@@QAEXXZ @ 312 NONAME ; void QPacketProtocol::clear(void) + ?setState@QDeclarativeItemPrivate@@QAEXABVQString@@@Z @ 313 NONAME ; void QDeclarativeItemPrivate::setState(class QString const &) + ??4QDeclarativeDebugPropertyReference@@QAEAAV0@ABV0@@Z @ 314 NONAME ; class QDeclarativeDebugPropertyReference & QDeclarativeDebugPropertyReference::operator=(class QDeclarativeDebugPropertyReference const &) + ?metaObject@QDeclarativeView@@UBEPBUQMetaObject@@XZ @ 315 NONAME ; struct QMetaObject const * QDeclarativeView::metaObject(void) const + ?listElementType@QDeclarativeListReference@@QBEPBUQMetaObject@@XZ @ 316 NONAME ; struct QMetaObject const * QDeclarativeListReference::listElementType(void) const + ??0QDeclarativeProperty@@QAE@PAVQObject@@PAVQDeclarativeContext@@@Z @ 317 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QDeclarativeContext *) + ?setTarget@QDeclarativeBehavior@@UAEXABVQDeclarativeProperty@@@Z @ 318 NONAME ; void QDeclarativeBehavior::setTarget(class QDeclarativeProperty const &) + ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 319 NONAME ; class QString QDeclarativeValueType::tr(char const *, char const *, int) + ?parent@QDeclarativeOpenMetaObject@@IBEPAUQAbstractDynamicMetaObject@@XZ @ 320 NONAME ; struct QAbstractDynamicMetaObject * QDeclarativeOpenMetaObject::parent(void) const + ??0QDeclarativeDebugClient@@QAE@ABVQString@@PAVQDeclarativeDebugConnection@@@Z @ 321 NONAME ; QDeclarativeDebugClient::QDeclarativeDebugClient(class QString const &, class QDeclarativeDebugConnection *) + ?qt_metacall@QDeclarativeStateOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 322 NONAME ; int QDeclarativeStateOperation::qt_metacall(enum QMetaObject::Call, int, void * *) + ?type@Variant@QDeclarativeParser@@QBE?AW4Type@12@XZ @ 323 NONAME ; enum QDeclarativeParser::Variant::Type QDeclarativeParser::Variant::type(void) const + ??6QDeclarativeInfo@@QAEAAV0@_N@Z @ 324 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(bool) + ?value@QDeclarativeDomProperty@@QBE?AVQDeclarativeDomValue@@XZ @ 325 NONAME ; class QDeclarativeDomValue QDeclarativeDomProperty::value(void) const + ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectExpressionWatch@@ABVQDeclarativeDebugObjectReference@@ABVQString@@PAVQObject@@@Z @ 326 NONAME ; class QDeclarativeDebugObjectExpressionWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QString const &, class QObject *) + ??_EQDeclarativeDebugConnection@@UAE@I@Z @ 327 NONAME ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(unsigned int) + ?qt_metacall@QDeclarativeDebugConnection@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 328 NONAME ; int QDeclarativeDebugConnection::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 329 NONAME ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *, int) + ?errors@QDeclarativeComponent@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 330 NONAME ; class QList<class QDeclarativeError> QDeclarativeComponent::errors(void) const + ??0QDeclarativeCustomParserNode@@QAE@ABV0@@Z @ 331 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(class QDeclarativeCustomParserNode const &) + ??1QDeclarativeImageProvider@@UAE@XZ @ 332 NONAME ; QDeclarativeImageProvider::~QDeclarativeImageProvider(void) + ?sync@QDeclarativeListModel@@QAEXXZ @ 333 NONAME ; void QDeclarativeListModel::sync(void) + ?objectForId@QDeclarativeDebugService@@SAPAVQObject@@H@Z @ 334 NONAME ; class QObject * QDeclarativeDebugService::objectForId(int) + ?hasFocus@QDeclarativeItem@@QBE_NXZ @ 335 NONAME ; bool QDeclarativeItem::hasFocus(void) const + ??1QDeclarativeExtensionPlugin@@UAE@XZ @ 336 NONAME ; QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin(void) + ?qt_metacall@QDeclarativeBehavior@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 337 NONAME ; int QDeclarativeBehavior::qt_metacall(enum QMetaObject::Call, int, void * *) + ?d_func@QDeclarativeBehavior@@ABEPBVQDeclarativeBehaviorPrivate@@XZ @ 338 NONAME ; class QDeclarativeBehaviorPrivate const * QDeclarativeBehavior::d_func(void) const + ?wrapModeChanged@QDeclarativeText@@IAEXXZ @ 339 NONAME ; void QDeclarativeText::wrapModeChanged(void) + ?elideModeChanged@QDeclarativeText@@IAEXW4TextElideMode@1@@Z @ 340 NONAME ; void QDeclarativeText::elideModeChanged(enum QDeclarativeText::TextElideMode) + ??1QDeclarativeExtensionInterface@@UAE@XZ @ 341 NONAME ; QDeclarativeExtensionInterface::~QDeclarativeExtensionInterface(void) + ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQMetaEnum@@@Z @ 342 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QMetaEnum const &) + ?interfaceIId@QDeclarativeType@@QBEPBDXZ @ 343 NONAME ; char const * QDeclarativeType::interfaceIId(void) const + ?resetHorizontalCenter@QDeclarativeAnchors@@QAEXXZ @ 344 NONAME ; void QDeclarativeAnchors::resetHorizontalCenter(void) + ?outputWarningsToStandardError@QDeclarativeEngine@@QBE_NXZ @ 345 NONAME ; bool QDeclarativeEngine::outputWarningsToStandardError(void) const + ?getStaticMetaObject@QDeclarativeBehavior@@SAABUQMetaObject@@XZ @ 346 NONAME ; struct QMetaObject const & QDeclarativeBehavior::getStaticMetaObject(void) + ??0QMetaEnumBuilder@@QAE@XZ @ 347 NONAME ; QMetaEnumBuilder::QMetaEnumBuilder(void) + ?isValueType@QDeclarativeValueTypeFactory@@SA_NH@Z @ 348 NONAME ; bool QDeclarativeValueTypeFactory::isValueType(int) + ?setWidth@QDeclarativePen@@QAEXH@Z @ 349 NONAME ; void QDeclarativePen::setWidth(int) + ?isReadable@QMetaPropertyBuilder@@QBE_NXZ @ 350 NONAME ; bool QMetaPropertyBuilder::isReadable(void) const + ?metaObject@QDeclarativeExpression@@UBEPBUQMetaObject@@XZ @ 351 NONAME ; struct QMetaObject const * QDeclarativeExpression::metaObject(void) const + ??0QDeclarativeDomValueLiteral@@QAE@ABV0@@Z @ 352 NONAME ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(class QDeclarativeDomValueLiteral const &) + ?getStaticMetaObject@QDeclarativeDebugQuery@@SAABUQMetaObject@@XZ @ 353 NONAME ; struct QMetaObject const & QDeclarativeDebugQuery::getStaticMetaObject(void) + ??0QDeclarativeDomComponent@@QAE@XZ @ 354 NONAME ; QDeclarativeDomComponent::QDeclarativeDomComponent(void) + ??1QDeclarativePropertyPrivate@@QAE@XZ @ 355 NONAME ; QDeclarativePropertyPrivate::~QDeclarativePropertyPrivate(void) + ?setBaselineOffset@QDeclarativeItem@@QAEXM@Z @ 356 NONAME ; void QDeclarativeItem::setBaselineOffset(float) + ??0QDeclarativeDebugPropertyReference@@QAE@XZ @ 357 NONAME ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(void) + ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 358 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *, int) + ?setState@QDeclarativeStateGroup@@QAEXABVQString@@@Z @ 359 NONAME ; void QDeclarativeStateGroup::setState(class QString const &) + ??_EQDeclarativeImageProvider@@UAE@I@Z @ 360 NONAME ; QDeclarativeImageProvider::~QDeclarativeImageProvider(unsigned int) + ?trUtf8@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 361 NONAME ; class QString QDeclarativeComponent::trUtf8(char const *, char const *) + ?isLoading@QDeclarativeComponent@@QBE_NXZ @ 362 NONAME ; bool QDeclarativeComponent::isLoading(void) const + ?createFunction@QDeclarativeType@@QBEP6AXPAX@ZXZ @ 363 NONAME ; void (*)(void *) QDeclarativeType::createFunction(void) const + ?childrenRect@QDeclarativeItem@@QAE?AVQRectF@@XZ @ 364 NONAME ; class QRectF QDeclarativeItem::childrenRect(void) + ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 365 NONAME ; class QString QDeclarativeEngineDebug::tr(char const *, char const *) + ?objectTypeMajorVersion@QDeclarativeDomObject@@QBEHXZ @ 366 NONAME ; int QDeclarativeDomObject::objectTypeMajorVersion(void) const + ??6QDeclarativeInfo@@QAEAAV0@D@Z @ 367 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(char) + ??1QDeclarativeDomValueLiteral@@QAE@XZ @ 368 NONAME ; QDeclarativeDomValueLiteral::~QDeclarativeDomValueLiteral(void) + ?keepMouseGrab@QDeclarativeItem@@QBE_NXZ @ 369 NONAME ; bool QDeclarativeItem::keepMouseGrab(void) const + ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 370 NONAME ; class QString QDeclarativeEngineDebug::tr(char const *, char const *, int) + ?getStaticMetaObject@QDeclarativeDebugConnection@@SAABUQMetaObject@@XZ @ 371 NONAME ; struct QMetaObject const & QDeclarativeDebugConnection::getStaticMetaObject(void) + ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 372 NONAME ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *) + ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@H@Z @ 373 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](int) + ??0Variant@QDeclarativeParser@@QAE@XZ @ 374 NONAME ; QDeclarativeParser::Variant::Variant(void) + ?status@QDeclarativeView@@QBE?AW4Status@1@XZ @ 375 NONAME ; enum QDeclarativeView::Status QDeclarativeView::status(void) const + ??0QDeclarativeEngineDebug@@QAE@PAVQDeclarativeDebugConnection@@PAVQObject@@@Z @ 376 NONAME ; QDeclarativeEngineDebug::QDeclarativeEngineDebug(class QDeclarativeDebugConnection *, class QObject *) + ?create@QDeclarativeComponent@@UAEPAVQObject@@PAVQDeclarativeContext@@@Z @ 377 NONAME ; class QObject * QDeclarativeComponent::create(class QDeclarativeContext *) + ??_EQPacket@@UAE@I@Z @ 378 NONAME ; QPacket::~QPacket(unsigned int) + ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 379 NONAME ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *, int) + ?isResettable@QDeclarativeProperty@@QBE_NXZ @ 380 NONAME ; bool QDeclarativeProperty::isResettable(void) const + ?isList@QDeclarativeCustomParserProperty@@QBE_NXZ @ 381 NONAME ; bool QDeclarativeCustomParserProperty::isList(void) const + ?resetVerticalCenter@QDeclarativeAnchors@@QAEXXZ @ 382 NONAME ; void QDeclarativeAnchors::resetVerticalCenter(void) + ??0QDeclarativeValueType@@QAE@PAVQObject@@@Z @ 383 NONAME ; QDeclarativeValueType::QDeclarativeValueType(class QObject *) + ?staticMetaObject@QDeclarativeDebugConnection@@2UQMetaObject@@B @ 384 NONAME ; struct QMetaObject const QDeclarativeDebugConnection::staticMetaObject + ?isLiteral@QDeclarativeDomValue@@QBE_NXZ @ 385 NONAME ; bool QDeclarativeDomValue::isLiteral(void) const + ?qt_metacall@QDeclarativeItem@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 386 NONAME ; int QDeclarativeItem::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QListModelInterface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 387 NONAME ; int QListModelInterface::qt_metacall(enum QMetaObject::Call, int, void * *) + ?move@QDeclarativeListModel@@QAEXHHH@Z @ 388 NONAME ; void QDeclarativeListModel::move(int, int, int) + ?metaObject@QDeclarativeBehavior@@UBEPBUQMetaObject@@XZ @ 389 NONAME ; struct QMetaObject const * QDeclarativeBehavior::metaObject(void) const + ?inputMethodPreHandler@QDeclarativeItem@@IAEXPAVQInputMethodEvent@@@Z @ 390 NONAME ; void QDeclarativeItem::inputMethodPreHandler(class QInputMethodEvent *) + ?d_func@QDeclarativeText@@AAEPAVQDeclarativeTextPrivate@@XZ @ 391 NONAME ; class QDeclarativeTextPrivate * QDeclarativeText::d_func(void) + ?signature@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 392 NONAME ; class QByteArray QMetaMethodBuilder::signature(void) const + ??_EQDeclarativeParserStatus@@UAE@I@Z @ 393 NONAME ; QDeclarativeParserStatus::~QDeclarativeParserStatus(unsigned int) + ?rightMargin@QDeclarativeAnchors@@QBEMXZ @ 394 NONAME ; float QDeclarativeAnchors::rightMargin(void) const + ?itemsMoved@QListModelInterface@@IAEXHHH@Z @ 395 NONAME ; void QListModelInterface::itemsMoved(int, int, int) + ?rectFFromString@QDeclarativeStringConverters@@YA?AVQRectF@@ABVQString@@PA_N@Z @ 396 NONAME ; class QRectF QDeclarativeStringConverters::rectFFromString(class QString const &, bool *) + ?canAt@QDeclarativeListReference@@QBE_NXZ @ 397 NONAME ; bool QDeclarativeListReference::canAt(void) const + ?children@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 398 NONAME ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugObjectReference::children(void) const + ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 399 NONAME ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *) + ?qt_metacall@QDeclarativeDebugExpressionQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 400 NONAME ; int QDeclarativeDebugExpressionQuery::qt_metacall(enum QMetaObject::Call, int, void * *) + ?getStaticMetaObject@QDeclarativeEngine@@SAABUQMetaObject@@XZ @ 401 NONAME ; struct QMetaObject const & QDeclarativeEngine::getStaticMetaObject(void) + ?paintEvent@QDeclarativeView@@MAEXPAVQPaintEvent@@@Z @ 402 NONAME ; void QDeclarativeView::paintEvent(class QPaintEvent *) + ?name@QDeclarativeDebugPropertyWatch@@QBE?AVQString@@XZ @ 403 NONAME ; class QString QDeclarativeDebugPropertyWatch::name(void) const + ?bindingType@QDeclarativeAbstractBinding@@UBE?AW4Type@1@XZ @ 404 NONAME ; enum QDeclarativeAbstractBinding::Type QDeclarativeAbstractBinding::bindingType(void) const + ?margins@QDeclarativeAnchors@@QBEMXZ @ 405 NONAME ; float QDeclarativeAnchors::margins(void) const + ?length@QDeclarativeDomProperty@@QBEHXZ @ 406 NONAME ; int QDeclarativeDomProperty::length(void) const + ??1QDeclarativeDomImport@@QAE@XZ @ 407 NONAME ; QDeclarativeDomImport::~QDeclarativeDomImport(void) + ?addRef@QDeclarativePixmapReply@@AAEXXZ @ 408 NONAME ABSENT ; void QDeclarativePixmapReply::addRef(void) + ?mouseReleaseEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 409 NONAME ; void QDeclarativeText::mouseReleaseEvent(class QGraphicsSceneMouseEvent *) + ?isCustomType@QDeclarativeDomObject@@QBE_NXZ @ 410 NONAME ; bool QDeclarativeDomObject::isCustomType(void) const + ?registerType@QDeclarativePrivate@@YAHABURegisterType@1@@Z @ 411 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterType const &) + ?radius@QDeclarativeRectangle@@QBEMXZ @ 412 NONAME ; float QDeclarativeRectangle::radius(void) const + ??0QDeclarativeComponent@@AAE@PAVQDeclarativeEngine@@PAVQDeclarativeCompiledData@@HHPAVQObject@@@Z @ 413 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QDeclarativeCompiledData *, int, int, class QObject *) + ?resources_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 414 NONAME ; int QDeclarativeItemPrivate::resources_count(class QDeclarativeListProperty<class QObject> *) + ?timerEvent@QDeclarativeView@@MAEXPAVQTimerEvent@@@Z @ 415 NONAME ; void QDeclarativeView::timerEvent(class QTimerEvent *) + ?finished@QDeclarativePixmapReply@@IAEXXZ @ 416 NONAME ABSENT ; void QDeclarativePixmapReply::finished(void) + ?setToState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 417 NONAME ; void QDeclarativeTransition::setToState(class QString const &) + ?methodType@QMetaMethodBuilder@@QBE?AW4MethodType@QMetaMethod@@XZ @ 418 NONAME ; enum QMetaMethod::MethodType QMetaMethodBuilder::methodType(void) const + ?getStaticMetaObject@QDeclarativeView@@SAABUQMetaObject@@XZ @ 419 NONAME ; struct QMetaObject const & QDeclarativeView::getStaticMetaObject(void) + ?metaObject@QDeclarativeStateOperation@@UBEPBUQMetaObject@@XZ @ 420 NONAME ; struct QMetaObject const * QDeclarativeStateOperation::metaObject(void) const + ?keyReleasePreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 421 NONAME ; void QDeclarativeItem::keyReleasePreHandler(class QKeyEvent *) + ?append@QDeclarativeListModel@@QAEXABVQScriptValue@@@Z @ 422 NONAME ; void QDeclarativeListModel::append(class QScriptValue const &) + ??1QDeclarativeDebugObjectReference@@QAE@XZ @ 423 NONAME ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(void) + ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 424 NONAME ; class QString QDeclarativeDebugClient::tr(char const *, char const *) + ?resolvedUrl@QDeclarativeContext@@QAE?AVQUrl@@ABV2@@Z @ 425 NONAME ; class QUrl QDeclarativeContext::resolvedUrl(class QUrl const &) + ?object@QDeclarativeListReference@@QBEPAVQObject@@XZ @ 426 NONAME ; class QObject * QDeclarativeListReference::object(void) const + ?setEnabled@QDeclarativeBehavior@@QAEX_N@Z @ 427 NONAME ; void QDeclarativeBehavior::setEnabled(bool) + ?line@QDeclarativeError@@QBEHXZ @ 428 NONAME ; int QDeclarativeError::line(void) const + ?heightValid@QDeclarativeItem@@IBE_NXZ @ 429 NONAME ; bool QDeclarativeItem::heightValid(void) const + ??1QDeclarativeOpenMetaObject@@UAE@XZ @ 430 NONAME ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(void) + ??0QPacket@@QAE@XZ @ 431 NONAME ; QPacket::QPacket(void) + ?trUtf8@QDeclarativePropertyMap@@SA?AVQString@@PBD0H@Z @ 432 NONAME ; class QString QDeclarativePropertyMap::trUtf8(char const *, char const *, int) + ?trUtf8@QDeclarativeEngine@@SA?AVQString@@PBD0H@Z @ 433 NONAME ; class QString QDeclarativeEngine::trUtf8(char const *, char const *, int) + ??0QDeclarativeDebugEngineReference@@QAE@XZ @ 434 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(void) + ?qmlEngine@@YAPAVQDeclarativeEngine@@PBVQObject@@@Z @ 435 NONAME ; class QDeclarativeEngine * qmlEngine(class QObject const *) + ?error@QDeclarativeExpression@@QBE?AVQDeclarativeError@@XZ @ 436 NONAME ; class QDeclarativeError QDeclarativeExpression::error(void) const + ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 437 NONAME ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *) + ?styleColorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 438 NONAME ; void QDeclarativeText::styleColorChanged(class QColor const &) + ?getStaticMetaObject@QDeclarativeDebugExpressionQuery@@SAABUQMetaObject@@XZ @ 439 NONAME ; struct QMetaObject const & QDeclarativeDebugExpressionQuery::getStaticMetaObject(void) + ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 440 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *, int) + ?writeValueProperty@QDeclarativePropertyPrivate@@QAE_NABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 441 NONAME ; bool QDeclarativePropertyPrivate::writeValueProperty(class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ?errors@QDeclarativeCustomParser@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 442 NONAME ; class QList<class QDeclarativeError> QDeclarativeCustomParser::errors(void) const + ?statesProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 443 NONAME ; class QDeclarativeListProperty<class QDeclarativeState> QDeclarativeStateGroup::statesProperty(void) + ?roles@QDeclarativeListModel@@UBE?AV?$QList@H@@XZ @ 444 NONAME ; class QList<int> QDeclarativeListModel::roles(void) const + ?name@QMetaEnumBuilder@@QBE?AVQByteArray@@XZ @ 445 NONAME ; class QByteArray QMetaEnumBuilder::name(void) const + ??_EQDeclarativeDebugRootContextQuery@@UAE@I@Z @ 446 NONAME ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(unsigned int) + ?setColor@QDeclarativeRectangle@@QAEXABVQColor@@@Z @ 447 NONAME ; void QDeclarativeRectangle::setColor(class QColor const &) + ?clipChanged@QDeclarativeItem@@IAEX_N@Z @ 448 NONAME ; void QDeclarativeItem::clipChanged(bool) + ??0QDeclarativeCustomParser@@QAE@V?$QFlags@W4Flag@QDeclarativeCustomParser@@@@@Z @ 449 NONAME ; QDeclarativeCustomParser::QDeclarativeCustomParser(class QFlags<enum QDeclarativeCustomParser::Flag>) + ?valueChanged@QDeclarativeDebugWatch@@IAEXABVQByteArray@@ABVQVariant@@@Z @ 450 NONAME ; void QDeclarativeDebugWatch::valueChanged(class QByteArray const &, class QVariant const &) + ?smoothChanged@QDeclarativeItem@@IAEX_N@Z @ 451 NONAME ; void QDeclarativeItem::smoothChanged(bool) + ?colorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 452 NONAME ; void QDeclarativeText::colorChanged(class QColor const &) + ?continueExecute@QDeclarativeView@@AAEXXZ @ 453 NONAME ; void QDeclarativeView::continueExecute(void) + ?initialSize@QDeclarativeView@@QBE?AVQSize@@XZ @ 454 NONAME ; class QSize QDeclarativeView::initialSize(void) const + ?interfaceIId@QDeclarativeMetaType@@SAPBDH@Z @ 455 NONAME ; char const * QDeclarativeMetaType::interfaceIId(int) + ?isValid@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 456 NONAME ; bool QDeclarativeDomDynamicProperty::isValid(void) const + ?baselineChanged@QDeclarativeAnchors@@IAEXXZ @ 457 NONAME ; void QDeclarativeAnchors::baselineChanged(void) + ?name@QDeclarativeState@@QBE?AVQString@@XZ @ 458 NONAME ; class QString QDeclarativeState::name(void) const + ??4QDeclarativeDomObject@@QAEAAV0@ABV0@@Z @ 459 NONAME ; class QDeclarativeDomObject & QDeclarativeDomObject::operator=(class QDeclarativeDomObject const &) + ?qt_metacall@QDeclarativeContext@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 460 NONAME ; int QDeclarativeContext::qt_metacall(enum QMetaObject::Call, int, void * *) + ??_EQDeclarativeValueType@@UAE@I@Z @ 461 NONAME ; QDeclarativeValueType::~QDeclarativeValueType(unsigned int) + ?qt_metacall@QDeclarativeState@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 462 NONAME ; int QDeclarativeState::qt_metacall(enum QMetaObject::Call, int, void * *) + ?isEnabled@QDeclarativeDebugService@@QBE_NXZ @ 463 NONAME ; bool QDeclarativeDebugService::isEnabled(void) const + ?stateChanged@QDeclarativeDebugWatch@@IAEXW4State@1@@Z @ 464 NONAME ; void QDeclarativeDebugWatch::stateChanged(enum QDeclarativeDebugWatch::State) + ??0QMetaMethodBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 465 NONAME ; QMetaMethodBuilder::QMetaMethodBuilder(class QMetaObjectBuilder const *, int) + ??4QDeclarativeListReference@@QAEAAV0@ABV0@@Z @ 466 NONAME ; class QDeclarativeListReference & QDeclarativeListReference::operator=(class QDeclarativeListReference const &) + ?componentFinalized@QDeclarativeBehavior@@AAEXXZ @ 467 NONAME ; void QDeclarativeBehavior::componentFinalized(void) + ?stateChanged@QDeclarativeDebugQuery@@IAEXW4State@1@@Z @ 468 NONAME ; void QDeclarativeDebugQuery::stateChanged(enum QDeclarativeDebugQuery::State) + ?setVerticalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 469 NONAME ; void QDeclarativeAnchors::setVerticalCenter(class QDeclarativeAnchorLine const &) + ?keyPressEvent@QDeclarativeItem@@MAEXPAVQKeyEvent@@@Z @ 470 NONAME ; void QDeclarativeItem::keyPressEvent(class QKeyEvent *) + ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 471 NONAME ; class QString QDeclarativeValueType::trUtf8(char const *, char const *) + ?metaObject@QDeclarativeExtensionPlugin@@UBEPBUQMetaObject@@XZ @ 472 NONAME ; struct QMetaObject const * QDeclarativeExtensionPlugin::metaObject(void) const + ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 473 NONAME ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *, int) + ?setCenterIn@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 474 NONAME ; void QDeclarativeAnchors::setCenterIn(class QGraphicsObject *) + ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@ABVQByteArray@@HH@Z @ 475 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(class QByteArray const &, int, int) + ??0QDeclarativeDebugObjectQuery@@AAE@PAVQObject@@@Z @ 476 NONAME ; QDeclarativeDebugObjectQuery::QDeclarativeDebugObjectQuery(class QObject *) + ?isComponent@QDeclarativeDomObject@@QBE_NXZ @ 477 NONAME ; bool QDeclarativeDomObject::isComponent(void) const + ?inputMethodEvent@QDeclarativeItem@@MAEXPAVQInputMethodEvent@@@Z @ 478 NONAME ; void QDeclarativeItem::inputMethodEvent(class QInputMethodEvent *) + ?styleChanged@QDeclarativeText@@IAEXW4TextStyle@1@@Z @ 479 NONAME ; void QDeclarativeText::styleChanged(enum QDeclarativeText::TextStyle) + ?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@PAVQDeclarativeEngine@@@Z @ 480 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &, class QDeclarativeEngine *) + ?pluginPathList@QDeclarativeEngine@@QBE?AVQStringList@@XZ @ 481 NONAME ; class QStringList QDeclarativeEngine::pluginPathList(void) const + ?parentContext@QDeclarativeContext@@QBEPAV1@XZ @ 482 NONAME ; class QDeclarativeContext * QDeclarativeContext::parentContext(void) const + ?leftMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 483 NONAME ; void QDeclarativeAnchors::leftMarginChanged(void) + ?staticMetaObject@QDeclarativeDebugService@@2UQMetaObject@@B @ 484 NONAME ; struct QMetaObject const QDeclarativeDebugService::staticMetaObject + ?topMargin@QDeclarativeAnchors@@QBEMXZ @ 485 NONAME ; float QDeclarativeAnchors::topMargin(void) const + ??0QDeclarativeDebugExpressionQuery@@AAE@PAVQObject@@@Z @ 486 NONAME ; QDeclarativeDebugExpressionQuery::QDeclarativeDebugExpressionQuery(class QObject *) + ?qt_metacast@QDeclarativePixmapReply@@UAEPAXPBD@Z @ 487 NONAME ABSENT ; void * QDeclarativePixmapReply::qt_metacast(char const *) + ??0QPacket@@IAE@ABVQByteArray@@@Z @ 488 NONAME ; QPacket::QPacket(class QByteArray const &) + ?setFlags@QMetaObjectBuilder@@QAEXV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@@Z @ 489 NONAME ; void QMetaObjectBuilder::setFlags(class QFlags<enum QMetaObjectBuilder::MetaObjectFlag>) + ?horizontalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 490 NONAME ; void QDeclarativeAnchors::horizontalCenterChanged(void) + ?right@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 491 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::right(void) const + ?pendingRequests@QDeclarativePixmapCache@@SAHXZ @ 492 NONAME ABSENT ; int QDeclarativePixmapCache::pendingRequests(void) + ?staticMetaObject@QDeclarativeDebugObjectQuery@@2UQMetaObject@@B @ 493 NONAME ; struct QMetaObject const QDeclarativeDebugObjectQuery::staticMetaObject + ?propertyRead@QDeclarativeOpenMetaObject@@MAEXH@Z @ 494 NONAME ; void QDeclarativeOpenMetaObject::propertyRead(int) + ?importPathList@QDeclarativeEngine@@QBE?AVQStringList@@XZ @ 495 NONAME ; class QStringList QDeclarativeEngine::importPathList(void) const + ?border@QDeclarativeRectangle@@QAEPAVQDeclarativePen@@XZ @ 496 NONAME ; class QDeclarativePen * QDeclarativeRectangle::border(void) + ?baselineOffset@QDeclarativeItem@@QBEMXZ @ 497 NONAME ; float QDeclarativeItem::baselineOffset(void) const + ?dateFromString@QDeclarativeStringConverters@@YA?AVQDate@@ABVQString@@PA_N@Z @ 498 NONAME ; class QDate QDeclarativeStringConverters::dateFromString(class QString const &, bool *) + ?qt_metacast@QDeclarativeDebugObjectExpressionWatch@@UAEPAXPBD@Z @ 499 NONAME ; void * QDeclarativeDebugObjectExpressionWatch::qt_metacast(char const *) + ??0QDeclarativeDomValue@@QAE@ABV0@@Z @ 500 NONAME ; QDeclarativeDomValue::QDeclarativeDomValue(class QDeclarativeDomValue const &) + ??1QDeclarativeListModel@@UAE@XZ @ 501 NONAME ; QDeclarativeListModel::~QDeclarativeListModel(void) + ?qmlAttachedPropertiesObject@@YAPAVQObject@@PAHPBV1@PBUQMetaObject@@_N@Z @ 502 NONAME ; class QObject * qmlAttachedPropertiesObject(int *, class QObject const *, struct QMetaObject const *, bool) + ??_EQDeclarativeDebugClient@@UAE@I@Z @ 503 NONAME ; QDeclarativeDebugClient::~QDeclarativeDebugClient(unsigned int) + ??4QDeclarativeDomComponent@@QAEAAV0@ABV0@@Z @ 504 NONAME ; class QDeclarativeDomComponent & QDeclarativeDomComponent::operator=(class QDeclarativeDomComponent const &) + ?tr@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 505 NONAME ; class QString QPacketProtocol::tr(char const *, char const *) + ?setFont@QDeclarativeText@@QAEXABVQFont@@@Z @ 506 NONAME ; void QDeclarativeText::setFont(class QFont const &) + ?fromChanged@QDeclarativeTransition@@IAEXXZ @ 507 NONAME ; void QDeclarativeTransition::fromChanged(void) + ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 508 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QMetaMethod const &) + ?setHeight@QDeclarativeItemPrivate@@UAEXM@Z @ 509 NONAME ; void QDeclarativeItemPrivate::setHeight(float) + ??0Variant@QDeclarativeParser@@QAE@ABV01@@Z @ 510 NONAME ; QDeclarativeParser::Variant::Variant(class QDeclarativeParser::Variant const &) + ?getStaticMetaObject@QDeclarativeExtensionPlugin@@SAABUQMetaObject@@XZ @ 511 NONAME ; struct QMetaObject const & QDeclarativeExtensionPlugin::getStaticMetaObject(void) + ??0QDeclarativeBinding@@QAE@PAXPAVQDeclarativeRefCount@@PAVQObject@@PAVQDeclarativeContextData@@ABVQString@@H2@Z @ 512 NONAME ; QDeclarativeBinding::QDeclarativeBinding(void *, class QDeclarativeRefCount *, class QObject *, class QDeclarativeContextData *, class QString const &, int, class QObject *) + ?qt_metacast@QDeclarativeDebugClient@@UAEPAXPBD@Z @ 513 NONAME ; void * QDeclarativeDebugClient::qt_metacast(char const *) + ?classInfoValue@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 514 NONAME ; class QByteArray QMetaObjectBuilder::classInfoValue(int) const + ?right@QDeclarativeScaleGrid@@QBEHXZ @ 515 NONAME ; int QDeclarativeScaleGrid::right(void) const + ?setClassName@QMetaObjectBuilder@@QAEXABVQByteArray@@@Z @ 516 NONAME ; void QMetaObjectBuilder::setClassName(class QByteArray const &) + ??1QDeclarativeAnchors@@UAE@XZ @ 517 NONAME ; QDeclarativeAnchors::~QDeclarativeAnchors(void) + ?removeConstructor@QMetaObjectBuilder@@QAEXH@Z @ 518 NONAME ; void QMetaObjectBuilder::removeConstructor(int) + ??4QDeclarativeDomValueValueInterceptor@@QAEAAV0@ABV0@@Z @ 519 NONAME ; class QDeclarativeDomValueValueInterceptor & QDeclarativeDomValueValueInterceptor::operator=(class QDeclarativeDomValueValueInterceptor const &) + ?resolveType@QDeclarativeCustomParser@@IBEPBUQMetaObject@@ABVQByteArray@@@Z @ 520 NONAME ; struct QMetaObject const * QDeclarativeCustomParser::resolveType(class QByteArray const &) const + ??_EQDeclarativePropertyValueSource@@UAE@I@Z @ 521 NONAME ; QDeclarativePropertyValueSource::~QDeclarativePropertyValueSource(unsigned int) + ?staticMetaObject@QDeclarativeItem@@2UQMetaObject@@B @ 522 NONAME ; struct QMetaObject const QDeclarativeItem::staticMetaObject + ?qt_metacast@QDeclarativeDebugRootContextQuery@@UAEPAXPBD@Z @ 523 NONAME ; void * QDeclarativeDebugRootContextQuery::qt_metacast(char const *) + ?itemsRemoved@QListModelInterface@@IAEXHH@Z @ 524 NONAME ; void QListModelInterface::itemsRemoved(int, int) + ?networkAccessManager@QDeclarativeEngine@@QBEPAVQNetworkAccessManager@@XZ @ 525 NONAME ; class QNetworkAccessManager * QDeclarativeEngine::networkAccessManager(void) const + ??0QDeclarativeDomValue@@QAE@XZ @ 526 NONAME ; QDeclarativeDomValue::QDeclarativeDomValue(void) + ?init@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItem@@@Z @ 527 NONAME ; void QDeclarativeItemPrivate::init(class QDeclarativeItem *) + ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQByteArray@@0H@Z @ 528 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QByteArray const &, class QByteArray const &, int) + ?getStaticMetaObject@QDeclarativeState@@SAABUQMetaObject@@XZ @ 529 NONAME ; struct QMetaObject const & QDeclarativeState::getStaticMetaObject(void) + ?isResettable@QMetaPropertyBuilder@@QBE_NXZ @ 530 NONAME ; bool QMetaPropertyBuilder::isResettable(void) const + ?bottomMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 531 NONAME ; void QDeclarativeAnchors::bottomMarginChanged(void) + ?offlineStoragePath@QDeclarativeEngine@@QBE?AVQString@@XZ @ 532 NONAME ; class QString QDeclarativeEngine::offlineStoragePath(void) const + ?keys@QDeclarativePropertyMap@@QBE?AVQStringList@@XZ @ 533 NONAME ; class QStringList QDeclarativePropertyMap::keys(void) const + ?addItemChangeListener@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItemChangeListener@@V?$QFlags@W4ChangeType@QDeclarativeItemPrivate@@@@@Z @ 534 NONAME ; void QDeclarativeItemPrivate::addItemChangeListener(class QDeclarativeItemChangeListener *, class QFlags<enum QDeclarativeItemPrivate::ChangeType>) + ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 535 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QMetaMethod const &) + ??6QDeclarativeInfo@@QAEAAV0@F@Z @ 536 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(short) + ?serialize@QMetaObjectBuilder@@QBEXAAVQDataStream@@@Z @ 537 NONAME ; void QMetaObjectBuilder::serialize(class QDataStream &) const + ??0QDeclarativeDebugContextReference@@QAE@ABV0@@Z @ 538 NONAME ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(class QDeclarativeDebugContextReference const &) + ?saveProperty@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H@Z @ 539 NONAME ; class QByteArray QDeclarativePropertyPrivate::saveProperty(struct QMetaObject const *, int) + ?propertyType@QDeclarativeProperty@@QBEHXZ @ 540 NONAME ; int QDeclarativeProperty::propertyType(void) const + ?isDefaultProperty@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 541 NONAME ; bool QDeclarativeDomDynamicProperty::isDefaultProperty(void) const + ??_EQDeclarativeBehavior@@UAE@I@Z @ 542 NONAME ; QDeclarativeBehavior::~QDeclarativeBehavior(unsigned int) + ??_EQDeclarativeListModel@@UAE@I@Z @ 543 NONAME ; QDeclarativeListModel::~QDeclarativeListModel(unsigned int) + ?isCreatable@QDeclarativeType@@QBE_NXZ @ 544 NONAME ; bool QDeclarativeType::isCreatable(void) const + ??6QDeclarativeInfo@@QAEAAV0@ABVQString@@@Z @ 545 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QString const &) + ?tr@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 546 NONAME ; class QString QDeclarativePen::tr(char const *, char const *) + ?trUtf8@QDeclarativeContext@@SA?AVQString@@PBD0H@Z @ 547 NONAME ; class QString QDeclarativeContext::trUtf8(char const *, char const *, int) + ??0QDeclarativeListModel@@QAE@PAVQObject@@@Z @ 548 NONAME ; QDeclarativeListModel::QDeclarativeListModel(class QObject *) + ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugContextReference@@ABVQString@@PAVQObject@@@Z @ 549 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugContextReference const &, class QString const &, class QObject *) + ?setColumn@QDeclarativeError@@QAEXH@Z @ 550 NONAME ; void QDeclarativeError::setColumn(int) + ??1QDeclarativeTransition@@UAE@XZ @ 551 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(void) + ??AQDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 552 NONAME ; class QVariant QDeclarativePropertyMap::operator[](class QString const &) const + ?qt_metacall@QDeclarativeListModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 553 NONAME ; int QDeclarativeListModel::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qdeclarativeelement_destructor@QDeclarativePrivate@@YAXPAVQObject@@@Z @ 554 NONAME ; void QDeclarativePrivate::qdeclarativeelement_destructor(class QObject *) + ?registerCustomStringConverter@QDeclarativeMetaType@@SAXHP6A?AVQVariant@@ABVQString@@@Z@Z @ 555 NONAME ; void QDeclarativeMetaType::registerCustomStringConverter(int, class QVariant (*)(class QString const &)) + ?metaObject@QDeclarativeEngine@@UBEPBUQMetaObject@@XZ @ 556 NONAME ; struct QMetaObject const * QDeclarativeEngine::metaObject(void) const + ??_EQDeclarativeDebugContextReference@@QAE@I@Z @ 557 NONAME ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(unsigned int) + ?propertyWrite@QDeclarativeOpenMetaObject@@MAEXH@Z @ 558 NONAME ; void QDeclarativeOpenMetaObject::propertyWrite(int) + ?qt_metacall@QDeclarativeDebugService@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 559 NONAME ; int QDeclarativeDebugService::qt_metacall(enum QMetaObject::Call, int, void * *) + ?setVerticalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 560 NONAME ; void QDeclarativeAnchors::setVerticalCenterOffset(float) + ??1QDeclarativeDebugWatch@@UAE@XZ @ 561 NONAME ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(void) + ??1QPacketAutoSend@@UAE@XZ @ 562 NONAME ; QPacketAutoSend::~QPacketAutoSend(void) + ?geometryChanged@QDeclarativeText@@MAEXABVQRectF@@0@Z @ 563 NONAME ; void QDeclarativeText::geometryChanged(class QRectF const &, class QRectF const &) + ?d_func@QDeclarativeRectangle@@AAEPAVQDeclarativeRectanglePrivate@@XZ @ 564 NONAME ; class QDeclarativeRectanglePrivate * QDeclarativeRectangle::d_func(void) + ?qt_metacast@QDeclarativeListModel@@UAEPAXPBD@Z @ 565 NONAME ; void * QDeclarativeListModel::qt_metacast(char const *) + ?name@QDeclarativeCustomParserProperty@@QBE?AVQByteArray@@XZ @ 566 NONAME ; class QByteArray QDeclarativeCustomParserProperty::name(void) const + ?update@QDeclarativeBinding@@QAEXXZ @ 567 NONAME ; void QDeclarativeBinding::update(void) + ?trUtf8@QDeclarativeEngine@@SA?AVQString@@PBD0@Z @ 568 NONAME ; class QString QDeclarativeEngine::trUtf8(char const *, char const *) + ?qt_metacast@QDeclarativeDebugConnection@@UAEPAXPBD@Z @ 569 NONAME ; void * QDeclarativeDebugConnection::qt_metacast(char const *) + ?removeWatch@QDeclarativeEngineDebug@@QAEXPAVQDeclarativeDebugWatch@@@Z @ 570 NONAME ; void QDeclarativeEngineDebug::removeWatch(class QDeclarativeDebugWatch *) + ?qt_metacast@QDeclarativeBinding@@UAEPAXPBD@Z @ 571 NONAME ; void * QDeclarativeBinding::qt_metacast(char const *) + ?baseline@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 572 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::baseline(void) const + ?restore@QDeclarativePropertyPrivate@@SA?AVQDeclarativeProperty@@ABVQByteArray@@PAVQObject@@PAVQDeclarativeContextData@@@Z @ 573 NONAME ; class QDeclarativeProperty QDeclarativePropertyPrivate::restore(class QByteArray const &, class QObject *, class QDeclarativeContextData *) + ??0QDeclarativeProperty@@QAE@PAVQObject@@@Z @ 574 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *) + ?source@QDeclarativeDebugObjectReference@@QBE?AVQDeclarativeDebugFileReference@@XZ @ 575 NONAME ; class QDeclarativeDebugFileReference QDeclarativeDebugObjectReference::source(void) const + ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 576 NONAME ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *, int) + ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@H@Z @ 577 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(int) + ??1QDeclarativeCustomParser@@UAE@XZ @ 578 NONAME ; QDeclarativeCustomParser::~QDeclarativeCustomParser(void) + ?toList@QDeclarativeDomValue@@QBE?AVQDeclarativeDomList@@XZ @ 579 NONAME ; class QDeclarativeDomList QDeclarativeDomValue::toList(void) const + ?metaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 580 NONAME ; struct QMetaObject const * QDeclarativeType::metaObject(void) const + ?animation@QDeclarativeBehavior@@QAEPAVQDeclarativeAbstractAnimation@@XZ @ 581 NONAME ; class QDeclarativeAbstractAnimation * QDeclarativeBehavior::animation(void) + ?listType@QDeclarativeMetaType@@SAHH@Z @ 582 NONAME ; int QDeclarativeMetaType::listType(int) + ?transform_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@PAVQGraphicsTransform@@@Z @ 583 NONAME ; void QDeclarativeItemPrivate::transform_append(class QDeclarativeListProperty<class QGraphicsTransform> *, class QGraphicsTransform *) + ?d_func@QDeclarativeComponent@@AAEPAVQDeclarativeComponentPrivate@@XZ @ 584 NONAME ; class QDeclarativeComponentPrivate * QDeclarativeComponent::d_func(void) + ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@@Z @ 585 NONAME ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &) + ?qt_metacall@QDeclarativeScaleGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 586 NONAME ; int QDeclarativeScaleGrid::qt_metacall(enum QMetaObject::Call, int, void * *) + ?size@QDeclarativePropertyMap@@QBEHXZ @ 587 NONAME ; int QDeclarativePropertyMap::size(void) const + ?cancel@QDeclarativeState@@QAEXXZ @ 588 NONAME ; void QDeclarativeState::cancel(void) + ?qt_metacall@QDeclarativeStateGroup@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 589 NONAME ; int QDeclarativeStateGroup::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QDeclarativePropertyPrivate@@QAE@XZ @ 590 NONAME ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(void) + ?getStaticMetaObject@QDeclarativeDebugPropertyWatch@@SAABUQMetaObject@@XZ @ 591 NONAME ; struct QMetaObject const & QDeclarativeDebugPropertyWatch::getStaticMetaObject(void) + ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 592 NONAME ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *, int) + ?transformOrigin@QDeclarativeItem@@QBE?AW4TransformOrigin@1@XZ @ 593 NONAME ; enum QDeclarativeItem::TransformOrigin QDeclarativeItem::transformOrigin(void) const + ?setState@QDeclarativeDebugWatch@@AAEXW4State@1@@Z @ 594 NONAME ; void QDeclarativeDebugWatch::setState(enum QDeclarativeDebugWatch::State) + ?evaluateEnum@QDeclarativeCustomParser@@IBEHABVQByteArray@@@Z @ 595 NONAME ; int QDeclarativeCustomParser::evaluateEnum(class QByteArray const &) const + ?setState@QDeclarativeDebugQuery@@AAEXW4State@1@@Z @ 596 NONAME ; void QDeclarativeDebugQuery::setState(enum QDeclarativeDebugQuery::State) + ?d_func@QDeclarativeText@@ABEPBVQDeclarativeTextPrivate@@XZ @ 597 NONAME ; class QDeclarativeTextPrivate const * QDeclarativeText::d_func(void) const + ?transitionsProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 598 NONAME ; class QDeclarativeListProperty<class QDeclarativeTransition> QDeclarativeStateGroup::transitionsProperty(void) + ?typeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 599 NONAME ; class QByteArray QDeclarativeType::typeName(void) const + ?asStringList@Variant@QDeclarativeParser@@QBE?AVQStringList@@XZ @ 600 NONAME ; class QStringList QDeclarativeParser::Variant::asStringList(void) const + ?removeKey@QMetaEnumBuilder@@QAEXH@Z @ 601 NONAME ; void QMetaEnumBuilder::removeKey(int) + ?downloadProgress@QDeclarativePixmapReply@@IAEX_J0@Z @ 602 NONAME ABSENT ; void QDeclarativePixmapReply::downloadProgress(long long, long long) + ?addRelatedMetaObject@QMetaObjectBuilder@@QAEHABQ6AABUQMetaObject@@XZ@Z @ 603 NONAME ; int QMetaObjectBuilder::addRelatedMetaObject(struct QMetaObject const & (* const)(void) const &) + ??0QDeclarativeDomValueLiteral@@QAE@XZ @ 604 NONAME ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(void) + ??_EQDeclarativeDebugObjectExpressionWatch@@UAE@I@Z @ 605 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(unsigned int) + ?computeTransformOrigin@QDeclarativeItemPrivate@@QBE?AVQPointF@@XZ @ 606 NONAME ; class QPointF QDeclarativeItemPrivate::computeTransformOrigin(void) const + ??0QDeclarativeListReference@@QAE@PAVQObject@@PBDPAVQDeclarativeEngine@@@Z @ 607 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QObject *, char const *, class QDeclarativeEngine *) + ?setData@QListModelInterface@@UAE_NHABV?$QHash@HVQVariant@@@@@Z @ 608 NONAME ; bool QListModelInterface::setData(int, class QHash<int, class QVariant> const &) + ??0QDeclarativePen@@QAE@PAVQObject@@@Z @ 609 NONAME ; QDeclarativePen::QDeclarativePen(class QObject *) + ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 610 NONAME ; class QString QPacketProtocol::trUtf8(char const *, char const *, int) + ?setContextObject@QDeclarativeContext@@QAEXPAVQObject@@@Z @ 611 NONAME ; void QDeclarativeContext::setContextObject(class QObject *) + ??_EQDeclarativeState@@UAE@I@Z @ 612 NONAME ; QDeclarativeState::~QDeclarativeState(unsigned int) + ?expression@QDeclarativeExpression@@QBE?AVQString@@XZ @ 613 NONAME ; class QString QDeclarativeExpression::expression(void) const + ??1QDeclarativeDomDocument@@QAE@XZ @ 614 NONAME ; QDeclarativeDomDocument::~QDeclarativeDomDocument(void) + ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 615 NONAME ; class QString QDeclarativeListModel::trUtf8(char const *, char const *, int) + ?asNumber@Variant@QDeclarativeParser@@QBENXZ @ 616 NONAME ; double QDeclarativeParser::Variant::asNumber(void) const + ?d_func@QDeclarativeDebugClient@@ABEPBVQDeclarativeDebugClientPrivate@@XZ @ 617 NONAME ; class QDeclarativeDebugClientPrivate const * QDeclarativeDebugClient::d_func(void) const + ?sceneEvent@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 618 NONAME ; bool QDeclarativeItem::sceneEvent(class QEvent *) + ??0QDeclarativeDebugRootContextQuery@@AAE@PAVQObject@@@Z @ 619 NONAME ; QDeclarativeDebugRootContextQuery::QDeclarativeDebugRootContextQuery(class QObject *) + ?name@QDeclarativeDebugEngineReference@@QBE?AVQString@@XZ @ 620 NONAME ; class QString QDeclarativeDebugEngineReference::name(void) const + ??_EQDeclarativeTransition@@UAE@I@Z @ 621 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(unsigned int) + ??0QDeclarativeAction@@QAE@ABV0@@Z @ 622 NONAME ; QDeclarativeAction::QDeclarativeAction(class QDeclarativeAction const &) + ?extends@QDeclarativeState@@QBE?AVQString@@XZ @ 623 NONAME ; class QString QDeclarativeState::extends(void) const + ?error@QDeclarativeCustomParser@@IAEXABVQDeclarativeCustomParserProperty@@ABVQString@@@Z @ 624 NONAME ; void QDeclarativeCustomParser::error(class QDeclarativeCustomParserProperty const &, class QString const &) + ??0QDeclarativeCustomParserNode@@QAE@XZ @ 625 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(void) + ?version@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 626 NONAME ; class QString QDeclarativeDomImport::version(void) const + ?smooth@QDeclarativeItem@@QBE_NXZ @ 627 NONAME ; bool QDeclarativeItem::smooth(void) const + ?implicitSize@QDeclarativePixmapReply@@QBE?AVQSize@@XZ @ 628 NONAME ABSENT ; class QSize QDeclarativePixmapReply::implicitSize(void) const + ??1QDeclarativeInfo@@QAE@XZ @ 629 NONAME ; QDeclarativeInfo::~QDeclarativeInfo(void) + ?qt_metacast@QDeclarativeStateOperation@@UAEPAXPBD@Z @ 630 NONAME ; void * QDeclarativeStateOperation::qt_metacast(char const *) + ??4QDeclarativeDebugEngineReference@@QAEAAV0@ABV0@@Z @ 631 NONAME ; class QDeclarativeDebugEngineReference & QDeclarativeDebugEngineReference::operator=(class QDeclarativeDebugEngineReference const &) + ?isValueType@QDeclarativePropertyPrivate@@QBE_NXZ @ 632 NONAME ; bool QDeclarativePropertyPrivate::isValueType(void) const + ??0QDeclarativeDomValueValueSource@@QAE@ABV0@@Z @ 633 NONAME ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(class QDeclarativeDomValueValueSource const &) + ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 634 NONAME ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *, int) + ??_EQDeclarativeDebugExpressionQuery@@UAE@I@Z @ 635 NONAME ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(unsigned int) + ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 636 NONAME ; class QString QListModelInterface::trUtf8(char const *, char const *, int) + ?qt_metacall@QDeclarativeDebugObjectExpressionWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 637 NONAME ; int QDeclarativeDebugObjectExpressionWatch::qt_metacall(enum QMetaObject::Call, int, void * *) + ?d_func@QDeclarativeItem@@AAEPAVQDeclarativeItemPrivate@@XZ @ 638 NONAME ; class QDeclarativeItemPrivate * QDeclarativeItem::d_func(void) + ?binding@QDeclarativeDomValueBinding@@QBE?AVQString@@XZ @ 639 NONAME ; class QString QDeclarativeDomValueBinding::binding(void) const + ?updateAutoState@QDeclarativeStateGroup@@AAE_NXZ @ 640 NONAME ; bool QDeclarativeStateGroup::updateAutoState(void) + ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 641 NONAME ; class QString QDeclarativeDebugService::tr(char const *, char const *) + ?tr@QDeclarativeComponent@@SA?AVQString@@PBD0H@Z @ 642 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *, int) + ??1QDeclarativeProperty@@QAE@XZ @ 643 NONAME ; QDeclarativeProperty::~QDeclarativeProperty(void) + ?fontChanged@QDeclarativeText@@IAEXABVQFont@@@Z @ 644 NONAME ; void QDeclarativeText::fontChanged(class QFont const &) + ?removeItemChangeListener@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItemChangeListener@@V?$QFlags@W4ChangeType@QDeclarativeItemPrivate@@@@@Z @ 645 NONAME ; void QDeclarativeItemPrivate::removeItemChangeListener(class QDeclarativeItemChangeListener *, class QFlags<enum QDeclarativeItemPrivate::ChangeType>) + ?isList@QDeclarativeDomValue@@QBE_NXZ @ 646 NONAME ; bool QDeclarativeDomValue::isList(void) const + ?insert@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 647 NONAME ; void QDeclarativeListModel::insert(int, class QScriptValue const &) + ?staticMetaObject@QDeclarativeListModel@@2UQMetaObject@@B @ 648 NONAME ; struct QMetaObject const QDeclarativeListModel::staticMetaObject + ?indexOfConstructor@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 649 NONAME ; int QMetaObjectBuilder::indexOfConstructor(class QByteArray const &) + ?lineNumber@QDeclarativeExpression@@QBEHXZ @ 650 NONAME ; int QDeclarativeExpression::lineNumber(void) const + ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 651 NONAME ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *, int) + ?toString@QDeclarativeError@@QBE?AVQString@@XZ @ 652 NONAME ; class QString QDeclarativeError::toString(void) const + ?index@QMetaPropertyBuilder@@QBEHXZ @ 653 NONAME ; int QMetaPropertyBuilder::index(void) const + ?commaPositions@QDeclarativeDomList@@QBE?AV?$QList@H@@XZ @ 654 NONAME ; class QList<int> QDeclarativeDomList::commaPositions(void) const + ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 655 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *) + ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 656 NONAME ; class QString QDeclarativeAnchors::tr(char const *, char const *) + ?tr@QDeclarativeEngine@@SA?AVQString@@PBD0@Z @ 657 NONAME ; class QString QDeclarativeEngine::tr(char const *, char const *) + ?setTextFormat@QDeclarativeText@@QAEXW4TextFormat@1@@Z @ 658 NONAME ; void QDeclarativeText::setTextFormat(enum QDeclarativeText::TextFormat) + ?parserStatusCast@QDeclarativeType@@QBEHXZ @ 659 NONAME ; int QDeclarativeType::parserStatusCast(void) const + ??_EQListModelInterface@@UAE@I@Z @ 660 NONAME ; QListModelInterface::~QListModelInterface(unsigned int) + ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 661 NONAME ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *) + ?getStaticMetaObject@QDeclarativeListModel@@SAABUQMetaObject@@XZ @ 662 NONAME ; struct QMetaObject const & QDeclarativeListModel::getStaticMetaObject(void) + ?setStdCppSet@QMetaPropertyBuilder@@QAEX_N@Z @ 663 NONAME ; void QMetaPropertyBuilder::setStdCppSet(bool) + ??0QDeclarativeItemPrivate@@QAE@XZ @ 664 NONAME ; QDeclarativeItemPrivate::QDeclarativeItemPrivate(void) + ??0QDeclarativeDebugService@@QAE@ABVQString@@PAVQObject@@@Z @ 665 NONAME ; QDeclarativeDebugService::QDeclarativeDebugService(class QString const &, class QObject *) + ??_EQPacketAutoSend@@UAE@I@Z @ 666 NONAME ; QPacketAutoSend::~QPacketAutoSend(unsigned int) + ?saveValueType@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H0H@Z @ 667 NONAME ; class QByteArray QDeclarativePropertyPrivate::saveValueType(struct QMetaObject const *, int, struct QMetaObject const *, int) + ?resetHeight@QDeclarativeItem@@QAEXXZ @ 668 NONAME ; void QDeclarativeItem::resetHeight(void) + ?setVAlign@QDeclarativeText@@QAEXW4VAlignment@1@@Z @ 669 NONAME ; void QDeclarativeText::setVAlign(enum QDeclarativeText::VAlignment) + ??1QDeclarativeDebugService@@UAE@XZ @ 670 NONAME ; QDeclarativeDebugService::~QDeclarativeDebugService(void) + ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 671 NONAME ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *, int) + ?elideMode@QDeclarativeText@@QBE?AW4TextElideMode@1@XZ @ 672 NONAME ; enum QDeclarativeText::TextElideMode QDeclarativeText::elideMode(void) const + ?baseUrl@QDeclarativeContext@@QBE?AVQUrl@@XZ @ 673 NONAME ; class QUrl QDeclarativeContext::baseUrl(void) const + ?qt_metacall@QDeclarativeDebugRootContextQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 674 NONAME ; int QDeclarativeDebugRootContextQuery::qt_metacall(enum QMetaObject::Call, int, void * *) + ?isNamed@QDeclarativeState@@QBE_NXZ @ 675 NONAME ; bool QDeclarativeState::isNamed(void) const + ?isString@Variant@QDeclarativeParser@@QBE_NXZ @ 676 NONAME ; bool QDeclarativeParser::Variant::isString(void) const + ?restart@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 677 NONAME ; long long QDeclarativeItemPrivate::restart(class QElapsedTimer &) + ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 678 NONAME ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *, int) + ?qt_metacast@QDeclarativeTransition@@UAEPAXPBD@Z @ 679 NONAME ; void * QDeclarativeTransition::qt_metacast(char const *) + ?timeFromString@QDeclarativeStringConverters@@YA?AVQTime@@ABVQString@@PA_N@Z @ 680 NONAME ; class QTime QDeclarativeStringConverters::timeFromString(class QString const &, bool *) + ?d_func@QDeclarativeDebugClient@@AAEPAVQDeclarativeDebugClientPrivate@@XZ @ 681 NONAME ; class QDeclarativeDebugClientPrivate * QDeclarativeDebugClient::d_func(void) + ??1QDeclarativeType@@AAE@XZ @ 682 NONAME ; QDeclarativeType::~QDeclarativeType(void) + ?colorFromString@QDeclarativeStringConverters@@YA?AVQColor@@ABVQString@@PA_N@Z @ 683 NONAME ; class QColor QDeclarativeStringConverters::colorFromString(class QString const &, bool *) + ??_EQPacketProtocol@@UAE@I@Z @ 684 NONAME ; QPacketProtocol::~QPacketProtocol(unsigned int) + ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 685 NONAME ; class QString QDeclarativeListModel::tr(char const *, char const *) + ??0QDeclarativeDebugObjectReference@@QAE@XZ @ 686 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(void) + ?staticMetaObject@QDeclarativeExtensionPlugin@@2UQMetaObject@@B @ 687 NONAME ; struct QMetaObject const QDeclarativeExtensionPlugin::staticMetaObject + ?isNull@QDeclarativeScaleGrid@@QBE_NXZ @ 688 NONAME ; bool QDeclarativeScaleGrid::isNull(void) const + ??_EQDeclarativeStateOperation@@UAE@I@Z @ 689 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(unsigned int) + ??6QDeclarativeInfo@@QAEAAV0@H@Z @ 690 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(int) + ??0QDeclarativeDomDynamicProperty@@QAE@XZ @ 691 NONAME ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(void) + ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 692 NONAME ; class QString QDeclarativeRectangle::tr(char const *, char const *, int) + ?type@QDeclarativeProperty@@QBE?AW4Type@1@XZ @ 693 NONAME ; enum QDeclarativeProperty::Type QDeclarativeProperty::type(void) const + ??0QDeclarativeDebugQuery@@IAE@PAVQObject@@@Z @ 694 NONAME ; QDeclarativeDebugQuery::QDeclarativeDebugQuery(class QObject *) + ?baselineOffset@QDeclarativeAnchors@@QBEMXZ @ 695 NONAME ; float QDeclarativeAnchors::baselineOffset(void) const + ??4QDeclarativeDomDocument@@QAEAAV0@ABV0@@Z @ 696 NONAME ; class QDeclarativeDomDocument & QDeclarativeDomDocument::operator=(class QDeclarativeDomDocument const &) + ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@PAVQDeclarativeOpenMetaObjectType@@_N@Z @ 697 NONAME ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, class QDeclarativeOpenMetaObjectType *, bool) + ?trUtf8@QDeclarativeExpression@@SA?AVQString@@PBD0@Z @ 698 NONAME ; class QString QDeclarativeExpression::trUtf8(char const *, char const *) + ??0QPacketProtocol@@QAE@PAVQIODevice@@PAVQObject@@@Z @ 699 NONAME ; QPacketProtocol::QPacketProtocol(class QIODevice *, class QObject *) + ??1QDeclarativeListReference@@QAE@XZ @ 700 NONAME ; QDeclarativeListReference::~QDeclarativeListReference(void) + ?clearError@QDeclarativeExpression@@QAEXXZ @ 701 NONAME ; void QDeclarativeExpression::clearError(void) + ?setLineNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 702 NONAME ; void QDeclarativeDebugFileReference::setLineNumber(int) + ?qt_metacall@QDeclarativeExtensionPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 703 NONAME ; int QDeclarativeExtensionPlugin::qt_metacall(enum QMetaObject::Call, int, void * *) + ?boundingRect@QDeclarativeText@@UBE?AVQRectF@@XZ @ 704 NONAME ; class QRectF QDeclarativeText::boundingRect(void) const + ?setColor@QDeclarativePen@@QAEXABVQColor@@@Z @ 705 NONAME ; void QDeclarativePen::setColor(class QColor const &) + ??0QDeclarativeDomImport@@QAE@XZ @ 706 NONAME ; QDeclarativeDomImport::QDeclarativeDomImport(void) + ?clearErrors@QDeclarativeCustomParser@@QAEXXZ @ 707 NONAME ; void QDeclarativeCustomParser::clearErrors(void) + ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 708 NONAME ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *, int) + ?toRelocatableData@QMetaObjectBuilder@@QBE?AVQByteArray@@PA_N@Z @ 709 NONAME ; class QByteArray QMetaObjectBuilder::toRelocatableData(bool *) const + ?qt_metacast@QDeclarativeView@@UAEPAXPBD@Z @ 710 NONAME ; void * QDeclarativeView::qt_metacast(char const *) + ?mapToItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 711 NONAME ; class QScriptValue QDeclarativeItem::mapToItem(class QScriptValue const &, float, float) const + ?setPluginPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 712 NONAME ; void QDeclarativeEngine::setPluginPathList(class QStringList const &) + ?metaObject@QDeclarativeState@@UBEPBUQMetaObject@@XZ @ 713 NONAME ; struct QMetaObject const * QDeclarativeState::metaObject(void) const + ?errorString@QDeclarativePixmapReply@@QBE?AVQString@@XZ @ 714 NONAME ABSENT ; class QString QDeclarativePixmapReply::errorString(void) const + ?boundingRect@QDeclarativeRectangle@@UBE?AVQRectF@@XZ @ 715 NONAME ; class QRectF QDeclarativeRectangle::boundingRect(void) const + ?uri@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 716 NONAME ; class QString QDeclarativeDomImport::uri(void) const + ?setContextProperty@QDeclarativeContext@@QAEXABVQString@@PAVQObject@@@Z @ 717 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QObject *) + ?setBaseUrl@QDeclarativeEngine@@QAEXABVQUrl@@@Z @ 718 NONAME ; void QDeclarativeEngine::setBaseUrl(class QUrl const &) + ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 719 NONAME ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *, int) + ?setScriptable@QMetaPropertyBuilder@@QAEX_N@Z @ 720 NONAME ; void QMetaPropertyBuilder::setScriptable(bool) + ??0QDeclarativeProperty@@QAE@PAVQObject@@PAVQDeclarativeEngine@@@Z @ 721 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QDeclarativeEngine *) + ?itemsInserted@QListModelInterface@@IAEXHH@Z @ 722 NONAME ; void QListModelInterface::itemsInserted(int, int) + ?generateBorderedRect@QDeclarativeRectangle@@AAEXXZ @ 723 NONAME ; void QDeclarativeRectangle::generateBorderedRect(void) + ?verticalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 724 NONAME ; void QDeclarativeAnchors::verticalCenterOffsetChanged(void) + ?width@QDeclarativeItem@@QBEMXZ @ 725 NONAME ; float QDeclarativeItem::width(void) const + ?isValueInterceptor@QDeclarativeDomValue@@QBE_NXZ @ 726 NONAME ; bool QDeclarativeDomValue::isValueInterceptor(void) const + ?transform_at@QDeclarativeItemPrivate@@SAPAVQGraphicsTransform@@PAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@H@Z @ 727 NONAME ; class QGraphicsTransform * QDeclarativeItemPrivate::transform_at(class QDeclarativeListProperty<class QGraphicsTransform> *, int) + ??1QDeclarativeDomValueBinding@@QAE@XZ @ 728 NONAME ; QDeclarativeDomValueBinding::~QDeclarativeDomValueBinding(void) + ?qt_metacast@QDeclarativeAnchors@@UAEPAXPBD@Z @ 729 NONAME ; void * QDeclarativeAnchors::qt_metacast(char const *) + ?isInterface@QDeclarativeMetaType@@SA_NH@Z @ 730 NONAME ; bool QDeclarativeMetaType::isInterface(int) + ?qt_metacall@QDeclarativeRectangle@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 731 NONAME ; int QDeclarativeRectangle::qt_metacall(enum QMetaObject::Call, int, void * *) + ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 732 NONAME ; class QString QDeclarativePen::trUtf8(char const *, char const *, int) + ??0Variant@QDeclarativeParser@@QAE@ABVQString@@PAVNode@AST@QDeclarativeJS@@@Z @ 733 NONAME ; QDeclarativeParser::Variant::Variant(class QString const &, class QDeclarativeJS::AST::Node *) + ?rootObject@QDeclarativeDomDocument@@QBE?AVQDeclarativeDomObject@@XZ @ 734 NONAME ; class QDeclarativeDomObject QDeclarativeDomDocument::rootObject(void) const + ?rightChanged@QDeclarativeAnchors@@IAEXXZ @ 735 NONAME ; void QDeclarativeAnchors::rightChanged(void) + ??6QDeclarativeInfo@@QAEAAV0@ABVQByteArray@@@Z @ 736 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QByteArray const &) + ?qt_metacast@QDeclarativeEngine@@UAEPAXPBD@Z @ 737 NONAME ; void * QDeclarativeEngine::qt_metacast(char const *) + ?objectType@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 738 NONAME ; class QByteArray QDeclarativeDomObject::objectType(void) const + ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 739 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QByteArray const &) + ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@@Z @ 740 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &, class QDeclarativeContext *) + ?staticMetaObject@QDeclarativeDebugExpressionQuery@@2UQMetaObject@@B @ 741 NONAME ; struct QMetaObject const QDeclarativeDebugExpressionQuery::staticMetaObject + ?queryRootContexts@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugRootContextQuery@@ABVQDeclarativeDebugEngineReference@@PAVQObject@@@Z @ 742 NONAME ; class QDeclarativeDebugRootContextQuery * QDeclarativeEngineDebug::queryRootContexts(class QDeclarativeDebugEngineReference const &, class QObject *) + ?vector3DFromString@QDeclarativeStringConverters@@YA?AVQVector3D@@ABVQString@@PA_N@Z @ 743 NONAME ; class QVector3D QDeclarativeStringConverters::vector3DFromString(class QString const &, bool *) + ??_EQDeclarativeDebugPropertyWatch@@UAE@I@Z @ 744 NONAME ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(unsigned int) + ?relatedMetaObjectCount@QMetaObjectBuilder@@QBEHXZ @ 745 NONAME ; int QMetaObjectBuilder::relatedMetaObjectCount(void) const + ?script@QDeclarativeScriptString@@QBE?AVQString@@XZ @ 746 NONAME ; class QString QDeclarativeScriptString::script(void) const + ?index@QMetaMethodBuilder@@QBEHXZ @ 747 NONAME ; int QMetaMethodBuilder::index(void) const + ??4QDeclarativeDomValueBinding@@QAEAAV0@ABV0@@Z @ 748 NONAME ; class QDeclarativeDomValueBinding & QDeclarativeDomValueBinding::operator=(class QDeclarativeDomValueBinding const &) + ??0QDeclarativeExpression@@QAE@XZ @ 749 NONAME ; QDeclarativeExpression::QDeclarativeExpression(void) + ?paint@QDeclarativeItem@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 750 NONAME ; void QDeclarativeItem::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) + ?send@QPacketProtocol@@QAE?AVQPacketAutoSend@@XZ @ 751 NONAME ; class QPacketAutoSend QPacketProtocol::send(void) + ?countChanged@QDeclarativeListModel@@IAEXXZ @ 752 NONAME ; void QDeclarativeListModel::countChanged(void) + ?setBindingForObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@ABVQVariant@@_NPAVQObject@@@Z @ 753 NONAME ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool, class QObject *) + ??0QDeclarativeGridScaledImage@@QAE@PAVQIODevice@@@Z @ 754 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QIODevice *) + ??_EQDeclarativeBinding@@UAE@I@Z @ 755 NONAME ; QDeclarativeBinding::~QDeclarativeBinding(unsigned int) + ?baseMetaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 756 NONAME ; struct QMetaObject const * QDeclarativeType::baseMetaObject(void) const + ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 757 NONAME ; class QString QDeclarativeDebugConnection::tr(char const *, char const *) + ?staticMetaObject@QDeclarativeBinding@@2UQMetaObject@@B @ 758 NONAME ; struct QMetaObject const QDeclarativeBinding::staticMetaObject + ?qualifier@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 759 NONAME ; class QString QDeclarativeDomImport::qualifier(void) const + ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 760 NONAME ABSENT ; class QString QDeclarativePixmapCache::tr(char const *, char const *, int) + ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@@Z @ 761 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &, class QDeclarativeContext *) + ?setSuperClass@QMetaObjectBuilder@@QAEXPBUQMetaObject@@@Z @ 762 NONAME ; void QMetaObjectBuilder::setSuperClass(struct QMetaObject const *) + ?contains@QDeclarativePropertyMap@@QBE_NABVQString@@@Z @ 763 NONAME ; bool QDeclarativePropertyMap::contains(class QString const &) const + ?setGradient@QDeclarativeRectangle@@QAEXPAVQDeclarativeGradient@@@Z @ 764 NONAME ; void QDeclarativeRectangle::setGradient(class QDeclarativeGradient *) + ?metaObject@QDeclarativeTransition@@UBEPBUQMetaObject@@XZ @ 765 NONAME ; struct QMetaObject const * QDeclarativeTransition::metaObject(void) const + ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PBUQMetaObject@@@Z @ 766 NONAME ; class QMetaMethod QDeclarativeMetaType::defaultMethod(struct QMetaObject const *) + ??0QDeclarativePixmapReply@@AAE@PAVQDeclarativeImageReader@@ABVQUrl@@HH@Z @ 767 NONAME ABSENT ; QDeclarativePixmapReply::QDeclarativePixmapReply(class QDeclarativeImageReader *, class QUrl const &, int, int) + ?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 768 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *, int) + ?metaObject@QDeclarativeValueType@@UBEPBUQMetaObject@@XZ @ 769 NONAME ; struct QMetaObject const * QDeclarativeValueType::metaObject(void) const + ?hasNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 770 NONAME ; bool QDeclarativeProperty::hasNotifySignal(void) const + ?create@QDeclarativeType@@QBEXPAPAVQObject@@PAPAXI@Z @ 771 NONAME ; void QDeclarativeType::create(class QObject * *, void * *, unsigned int) const + ?reversible@QDeclarativeTransition@@QBE_NXZ @ 772 NONAME ; bool QDeclarativeTransition::reversible(void) const + ?invalidPacket@QPacketProtocol@@IAEXXZ @ 773 NONAME ; void QPacketProtocol::invalidPacket(void) + ??0QDeclarativeDebugObjectReference@@QAE@H@Z @ 774 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(int) + ?superClass@QMetaObjectBuilder@@QBEPBUQMetaObject@@XZ @ 775 NONAME ; struct QMetaObject const * QMetaObjectBuilder::superClass(void) const + ?isValid@QDeclarativeListReference@@QBE_NXZ @ 776 NONAME ; bool QDeclarativeListReference::isValid(void) const + ?source@QDeclarativeView@@QBE?AVQUrl@@XZ @ 777 NONAME ; class QUrl QDeclarativeView::source(void) const + ?method@QDeclarativeProperty@@QBE?AVQMetaMethod@@XZ @ 778 NONAME ; class QMetaMethod QDeclarativeProperty::method(void) const + ??0QDeclarativeInfo@@QAE@ABV0@@Z @ 779 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfo const &) + ?deleteFromBinding@QDeclarativeAction@@QAEXXZ @ 780 NONAME ; void QDeclarativeAction::deleteFromBinding(void) + ?setClip@QDeclarativeItem@@QAEX_N@Z @ 781 NONAME ; void QDeclarativeItem::setClip(bool) + ??4QDeclarativeCustomParserNode@@QAEAAV0@ABV0@@Z @ 782 NONAME ; class QDeclarativeCustomParserNode & QDeclarativeCustomParserNode::operator=(class QDeclarativeCustomParserNode const &) + ?color@QDeclarativePen@@QBE?AVQColor@@XZ @ 783 NONAME ; class QColor QDeclarativePen::color(void) const + ?setDesignable@QMetaPropertyBuilder@@QAEX_N@Z @ 784 NONAME ; void QMetaPropertyBuilder::setDesignable(bool) + ?setWrapMode@QDeclarativeText@@QAEXW4WrapMode@1@@Z @ 785 NONAME ; void QDeclarativeText::setWrapMode(enum QDeclarativeText::WrapMode) + ?addClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@0@Z @ 786 NONAME ; int QMetaObjectBuilder::addClassInfo(class QByteArray const &, class QByteArray const &) + ?qt_metacall@QDeclarativePen@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 787 NONAME ; int QDeclarativePen::qt_metacall(enum QMetaObject::Call, int, void * *) + ?dynamicProperty@QDeclarativeDomObject@@QBE?AVQDeclarativeDomDynamicProperty@@ABVQByteArray@@@Z @ 788 NONAME ; class QDeclarativeDomDynamicProperty QDeclarativeDomObject::dynamicProperty(class QByteArray const &) const + ??1QDeclarativeDomComponent@@QAE@XZ @ 789 NONAME ; QDeclarativeDomComponent::~QDeclarativeDomComponent(void) + ?setRight@QDeclarativeScaleGrid@@QAEXH@Z @ 790 NONAME ; void QDeclarativeScaleGrid::setRight(int) + ?isList@QDeclarativeMetaType@@SA_NH@Z @ 791 NONAME ; bool QDeclarativeMetaType::isList(int) + ??6QDeclarativeInfo@@QAEAAV0@VQTextStreamManipulator@@@Z @ 792 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QTextStreamManipulator) + ?index@QDeclarativeProperty@@QBEHXZ @ 793 NONAME ; int QDeclarativeProperty::index(void) const + ?d_func@QMetaPropertyBuilder@@ABEPAVQMetaPropertyBuilderPrivate@@XZ @ 794 NONAME ; class QMetaPropertyBuilderPrivate * QMetaPropertyBuilder::d_func(void) const + ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 795 NONAME ; class QString QDeclarativeScaleGrid::tr(char const *, char const *, int) + ?setEnabled@QDeclarativeAbstractBinding@@QAEX_N@Z @ 796 NONAME ; void QDeclarativeAbstractBinding::setEnabled(bool) + ?returnType@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 797 NONAME ; class QByteArray QMetaMethodBuilder::returnType(void) const + ?propertyValueSourceCast@QDeclarativeType@@QBEHXZ @ 798 NONAME ; int QDeclarativeType::propertyValueSourceCast(void) const + ?mousePressEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 799 NONAME ; void QDeclarativeText::mousePressEvent(class QGraphicsSceneMouseEvent *) + ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 800 NONAME ; class QString QDeclarativeText::trUtf8(char const *, char const *) + ?constructor@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 801 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::constructor(int) const + ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PAVQObject@@@Z @ 802 NONAME ; class QMetaProperty QDeclarativeMetaType::defaultProperty(class QObject *) + ?resetHeight@QDeclarativeItemPrivate@@UAEXXZ @ 803 NONAME ; void QDeclarativeItemPrivate::resetHeight(void) + ?qt_metacast@QDeclarativeDebugPropertyWatch@@UAEPAXPBD@Z @ 804 NONAME ; void * QDeclarativeDebugPropertyWatch::qt_metacast(char const *) + ??1QDeclarativeStateOperation@@UAE@XZ @ 805 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(void) + ??_EQDeclarativeDebugQuery@@UAE@I@Z @ 806 NONAME ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(unsigned int) + ?update@QDeclarativeAbstractBinding@@QAEXXZ @ 807 NONAME ; void QDeclarativeAbstractBinding::update(void) + ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 808 NONAME ; class QString QDeclarativeBehavior::tr(char const *, char const *, int) + ?read@QPacketProtocol@@QAE?AVQPacket@@XZ @ 809 NONAME ; class QPacket QPacketProtocol::read(void) + ?setParentItem@QDeclarativeItem@@QAEXPAV1@@Z @ 810 NONAME ; void QDeclarativeItem::setParentItem(class QDeclarativeItem *) + ?qmlAttachedProperties@QDeclarativeComponent@@SAPAVQDeclarativeComponentAttached@@PAVQObject@@@Z @ 811 NONAME ; class QDeclarativeComponentAttached * QDeclarativeComponent::qmlAttachedProperties(class QObject *) + ??0QDeclarativeView@@QAE@ABVQUrl@@PAVQWidget@@@Z @ 812 NONAME ; QDeclarativeView::QDeclarativeView(class QUrl const &, class QWidget *) + ?qt_metacall@QDeclarativePixmapReply@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 813 NONAME ABSENT ; int QDeclarativePixmapReply::qt_metacall(enum QMetaObject::Call, int, void * *) + ?valueChanged@QDeclarativeExpression@@IAEXXZ @ 814 NONAME ; void QDeclarativeExpression::valueChanged(void) + ?childrenChanged@QDeclarativeItem@@IAEXXZ @ 815 NONAME ; void QDeclarativeItem::childrenChanged(void) + ??_EQDeclarativeView@@UAE@I@Z @ 816 NONAME ; QDeclarativeView::~QDeclarativeView(unsigned int) + ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 817 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *, int) + ?tag@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 818 NONAME ; class QByteArray QMetaMethodBuilder::tag(void) const + ?getStaticMetaObject@QPacketProtocol@@SAABUQMetaObject@@XZ @ 819 NONAME ; struct QMetaObject const & QPacketProtocol::getStaticMetaObject(void) + ?setContext@QDeclarativeScriptString@@QAEXPAVQDeclarativeContext@@@Z @ 820 NONAME ; void QDeclarativeScriptString::setContext(class QDeclarativeContext *) + ?addImageProvider@QDeclarativeEngine@@QAEXABVQString@@PAVQDeclarativeImageProvider@@@Z @ 821 NONAME ; void QDeclarativeEngine::addImageProvider(class QString const &, class QDeclarativeImageProvider *) + ?d_func@QDeclarativeStateGroup@@ABEPBVQDeclarativeStateGroupPrivate@@XZ @ 822 NONAME ; class QDeclarativeStateGroupPrivate const * QDeclarativeStateGroup::d_func(void) const + ?stateChanged@QDeclarativeItem@@IAEXABVQString@@@Z @ 823 NONAME ; void QDeclarativeItem::stateChanged(class QString const &) + ?horizontalAlignmentChanged@QDeclarativeText@@IAEXW4HAlignment@1@@Z @ 824 NONAME ; void QDeclarativeText::horizontalAlignmentChanged(enum QDeclarativeText::HAlignment) + ?tr@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 825 NONAME ABSENT ; class QString QDeclarativePixmapCache::tr(char const *, char const *) + ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 826 NONAME ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData &) + ?setDynamic@QMetaPropertyBuilder@@QAEX_N@Z @ 827 NONAME ; void QMetaPropertyBuilder::setDynamic(bool) + ?d_func@QDeclarativeEngine@@ABEPBVQDeclarativeEnginePrivate@@XZ @ 828 NONAME ; class QDeclarativeEnginePrivate const * QDeclarativeEngine::d_func(void) const + ?toBinding@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueBinding@@XZ @ 829 NONAME ; class QDeclarativeDomValueBinding QDeclarativeDomValue::toBinding(void) const + ?removeImageProvider@QDeclarativeEngine@@QAEXABVQString@@@Z @ 830 NONAME ; void QDeclarativeEngine::removeImageProvider(class QString const &) + ?horizontalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 831 NONAME ; void QDeclarativeAnchors::horizontalCenterOffsetChanged(void) + ?tr@QDeclarativeContext@@SA?AVQString@@PBD0@Z @ 832 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *) + ?d_func@QDeclarativeItem@@ABEPBVQDeclarativeItemPrivate@@XZ @ 833 NONAME ; class QDeclarativeItemPrivate const * QDeclarativeItem::d_func(void) const + ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 834 NONAME ABSENT ; class QString QDeclarativePixmapReply::tr(char const *, char const *) + ?isUser@QMetaPropertyBuilder@@QBE_NXZ @ 835 NONAME ; bool QMetaPropertyBuilder::isUser(void) const + ?doUpdate@QDeclarativeRectangle@@AAEXXZ @ 836 NONAME ; void QDeclarativeRectangle::doUpdate(void) + ?qmlExecuteDeferred@@YAXPAVQObject@@@Z @ 837 NONAME ; void qmlExecuteDeferred(class QObject *) + ?setImplicitHeight@QDeclarativeItem@@IAEXM@Z @ 838 NONAME ; void QDeclarativeItem::setImplicitHeight(float) + ?horizontalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 839 NONAME ; float QDeclarativeAnchors::horizontalCenterOffset(void) const + ?resetRight@QDeclarativeAnchors@@QAEXXZ @ 840 NONAME ; void QDeclarativeAnchors::resetRight(void) + ??6QDeclarativeInfo@@QAEAAV0@J@Z @ 841 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(long) + ?isReady@QDeclarativeComponent@@QBE_NXZ @ 842 NONAME ; bool QDeclarativeComponent::isReady(void) const + ??4QDeclarativeDebugObjectReference@@QAEAAV0@ABV0@@Z @ 843 NONAME ; class QDeclarativeDebugObjectReference & QDeclarativeDebugObjectReference::operator=(class QDeclarativeDebugObjectReference const &) + ??1QDeclarativeDomDynamicProperty@@QAE@XZ @ 844 NONAME ; QDeclarativeDomDynamicProperty::~QDeclarativeDomDynamicProperty(void) + ??1QDeclarativeBehavior@@UAE@XZ @ 845 NONAME ; QDeclarativeBehavior::~QDeclarativeBehavior(void) + ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@@Z @ 846 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *) + ?qt_metacall@QDeclarativeDebugClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 847 NONAME ; int QDeclarativeDebugClient::qt_metacall(enum QMetaObject::Call, int, void * *) + ?d_func@QDeclarativeDebugService@@ABEPBVQDeclarativeDebugServicePrivate@@XZ @ 848 NONAME ; class QDeclarativeDebugServicePrivate const * QDeclarativeDebugService::d_func(void) const + ??1QDeclarativeDebugQuery@@UAE@XZ @ 849 NONAME ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(void) + ?data_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 850 NONAME ; void QDeclarativeItemPrivate::data_append(class QDeclarativeListProperty<class QObject> *, class QObject *) + ??1QDeclarativePixmapReply@@UAE@XZ @ 851 NONAME ABSENT ; QDeclarativePixmapReply::~QDeclarativePixmapReply(void) + ?tr@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 852 NONAME ; class QString QDeclarativeState::tr(char const *, char const *) + ?isLoading@QDeclarativePixmapReply@@ABE_NXZ @ 853 NONAME ABSENT ; bool QDeclarativePixmapReply::isLoading(void) const + ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 854 NONAME ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *, int) + ?createProperty@QDeclarativeOpenMetaObject@@MAEHPBD0@Z @ 855 NONAME ; int QDeclarativeOpenMetaObject::createProperty(char const *, char const *) + ?bottomMargin@QDeclarativeAnchors@@QBEMXZ @ 856 NONAME ; float QDeclarativeAnchors::bottomMargin(void) const + ?q_func@QDeclarativeItemPrivate@@AAEPAVQDeclarativeItem@@XZ @ 857 NONAME ; class QDeclarativeItem * QDeclarativeItemPrivate::q_func(void) + ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 858 NONAME ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *) + ??1QDeclarativeDomList@@QAE@XZ @ 859 NONAME ; QDeclarativeDomList::~QDeclarativeDomList(void) + ??0QDeclarativeOpenMetaObjectType@@QAE@PBUQMetaObject@@PAVQDeclarativeEngine@@@Z @ 860 NONAME ; QDeclarativeOpenMetaObjectType::QDeclarativeOpenMetaObjectType(struct QMetaObject const *, class QDeclarativeEngine *) + ?removeProperty@QMetaObjectBuilder@@QAEXH@Z @ 861 NONAME ; void QMetaObjectBuilder::removeProperty(int) + ?staticMetaObject@QDeclarativeScaleGrid@@2UQMetaObject@@B @ 862 NONAME ; struct QMetaObject const QDeclarativeScaleGrid::staticMetaObject + ??0QDeclarativeDomObject@@QAE@ABV0@@Z @ 863 NONAME ; QDeclarativeDomObject::QDeclarativeDomObject(class QDeclarativeDomObject const &) + ?qt_metacast@QDeclarativeDebugWatch@@UAEPAXPBD@Z @ 864 NONAME ; void * QDeclarativeDebugWatch::qt_metacast(char const *) + ?implicitHeight@QDeclarativeItem@@QBEMXZ @ 865 NONAME ; float QDeclarativeItem::implicitHeight(void) const + ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 866 NONAME ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *) + ?status@QDeclarativePixmapReply@@QBE?AW4Status@1@XZ @ 867 NONAME ABSENT ; enum QDeclarativePixmapReply::Status QDeclarativePixmapReply::status(void) const + ??6@YA?AVQDebug@@V0@ABVQDeclarativeError@@@Z @ 868 NONAME ; class QDebug operator<<(class QDebug, class QDeclarativeError const &) + ?setContextProperty@QDeclarativeContext@@QAEXABVQString@@ABVQVariant@@@Z @ 869 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QVariant const &) + ?imports@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeDomImport@@@@XZ @ 870 NONAME ; class QList<class QDeclarativeDomImport> QDeclarativeDomDocument::imports(void) const + ?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0@Z @ 871 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *) + ?getStaticMetaObject@QDeclarativePen@@SAABUQMetaObject@@XZ @ 872 NONAME ; struct QMetaObject const & QDeclarativePen::getStaticMetaObject(void) + ?penChanged@QDeclarativePen@@IAEXXZ @ 873 NONAME ; void QDeclarativePen::penChanged(void) + ?propertyTypeName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 874 NONAME ; class QByteArray QDeclarativeDomDynamicProperty::propertyTypeName(void) const + ?position@QDeclarativeDomValue@@QBEHXZ @ 875 NONAME ; int QDeclarativeDomValue::position(void) const + ?setWidth@QDeclarativeItemPrivate@@UAEXM@Z @ 876 NONAME ; void QDeclarativeItemPrivate::setWidth(float) + ?staticMetaObject@QDeclarativeDebugWatch@@2UQMetaObject@@B @ 877 NONAME ; struct QMetaObject const QDeclarativeDebugWatch::staticMetaObject + ??_EQDeclarativeContext@@UAE@I@Z @ 878 NONAME ; QDeclarativeContext::~QDeclarativeContext(unsigned int) + ?rootContext@QDeclarativeView@@QAEPAVQDeclarativeContext@@XZ @ 879 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void) + ?staticMetaObject@QDeclarativeDebugQuery@@2UQMetaObject@@B @ 880 NONAME ; struct QMetaObject const QDeclarativeDebugQuery::staticMetaObject + ??0QDeclarativeExtensionPlugin@@QAE@PAVQObject@@@Z @ 881 NONAME ; QDeclarativeExtensionPlugin::QDeclarativeExtensionPlugin(class QObject *) + ??_EQDeclarativeOpenMetaObject@@UAE@I@Z @ 882 NONAME ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(unsigned int) + ?states@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 883 NONAME ; class QDeclarativeListProperty<class QDeclarativeState> QDeclarativeItemPrivate::states(void) + ?rawMetaObjectForType@QDeclarativePropertyPrivate@@SAPBUQMetaObject@@PAVQDeclarativeEnginePrivate@@H@Z @ 884 NONAME ; struct QMetaObject const * QDeclarativePropertyPrivate::rawMetaObjectForType(class QDeclarativeEnginePrivate *, int) + ?setHeight@QDeclarativeItem@@QAEXM@Z @ 885 NONAME ; void QDeclarativeItem::setHeight(float) + ??0QDeclarativeDomDocument@@QAE@ABV0@@Z @ 886 NONAME ; QDeclarativeDomDocument::QDeclarativeDomDocument(class QDeclarativeDomDocument const &) + ?position@QDeclarativeDomDynamicProperty@@QBEHXZ @ 887 NONAME ; int QDeclarativeDomDynamicProperty::position(void) const + ?animations@QDeclarativeTransition@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeAbstractAnimation@@@@XZ @ 888 NONAME ; class QDeclarativeListProperty<class QDeclarativeAbstractAnimation> QDeclarativeTransition::animations(void) + ?tr@QDeclarativeExpression@@SA?AVQString@@PBD0H@Z @ 889 NONAME ; class QString QDeclarativeExpression::tr(char const *, char const *, int) + ??_EQMetaObjectBuilder@@UAE@I@Z @ 890 NONAME ; QMetaObjectBuilder::~QMetaObjectBuilder(unsigned int) + ?propertyName@QDeclarativeDomProperty@@QBE?AVQByteArray@@XZ @ 891 NONAME ; class QByteArray QDeclarativeDomProperty::propertyName(void) const + ??0QDeclarativeView@@QAE@PAVQWidget@@@Z @ 892 NONAME ; QDeclarativeView::QDeclarativeView(class QWidget *) + ?createObject@QDeclarativeComponent@@IAE?AVQScriptValue@@PAVQObject@@@Z @ 893 NONAME ; class QScriptValue QDeclarativeComponent::createObject(class QObject *) + ?name@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 894 NONAME ; class QString QDeclarativeDebugPropertyReference::name(void) const + ?object@QDeclarativeDomValueValueSource@@QBE?AVQDeclarativeDomObject@@XZ @ 895 NONAME ; class QDeclarativeDomObject QDeclarativeDomValueValueSource::object(void) const + ??0QMetaPropertyBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 896 NONAME ; QMetaPropertyBuilder::QMetaPropertyBuilder(class QMetaObjectBuilder const *, int) + ?d_func@QDeclarativeEngineDebug@@ABEPBVQDeclarativeEngineDebugPrivate@@XZ @ 897 NONAME ; class QDeclarativeEngineDebugPrivate const * QDeclarativeEngineDebug::d_func(void) const + ?d_func@QDeclarativeBinding@@AAEPAVQDeclarativeBindingPrivate@@XZ @ 898 NONAME ; class QDeclarativeBindingPrivate * QDeclarativeBinding::d_func(void) + ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 899 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *, int) + ?attachedPropertiesFuncId@QDeclarativeMetaType@@SAHPBUQMetaObject@@@Z @ 900 NONAME ; int QDeclarativeMetaType::attachedPropertiesFuncId(struct QMetaObject const *) + ?horizontalCenter@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 901 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::horizontalCenter(void) const + ?isNull@QDeclarativeComponent@@QBE_NXZ @ 902 NONAME ; bool QDeclarativeComponent::isNull(void) const + ?d_func@QDeclarativeRectangle@@ABEPBVQDeclarativeRectanglePrivate@@XZ @ 903 NONAME ; class QDeclarativeRectanglePrivate const * QDeclarativeRectangle::d_func(void) const + ?setRightMargin@QDeclarativeAnchors@@QAEXM@Z @ 904 NONAME ; void QDeclarativeAnchors::setRightMargin(float) + ?className@QMetaObjectBuilder@@QBE?AVQByteArray@@XZ @ 905 NONAME ; class QByteArray QMetaObjectBuilder::className(void) const + ??0QDeclarativeState@@QAE@PAVQObject@@@Z @ 906 NONAME ; QDeclarativeState::QDeclarativeState(class QObject *) + ?contexts@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugContextReference@@@@XZ @ 907 NONAME ; class QList<class QDeclarativeDebugContextReference> QDeclarativeDebugContextReference::contexts(void) const + ?keyReleaseEvent@QDeclarativeItem@@MAEXPAVQKeyEvent@@@Z @ 908 NONAME ; void QDeclarativeItem::keyReleaseEvent(class QKeyEvent *) + ?qt_metacall@QDeclarativeAnchors@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 909 NONAME ; int QDeclarativeAnchors::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QDeclarativeAnchors@@QAE@PAVQGraphicsObject@@PAVQObject@@@Z @ 910 NONAME ; QDeclarativeAnchors::QDeclarativeAnchors(class QGraphicsObject *, class QObject *) + ??4QDeclarativeScriptString@@QAEAAV0@ABV0@@Z @ 911 NONAME ; class QDeclarativeScriptString & QDeclarativeScriptString::operator=(class QDeclarativeScriptString const &) + ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 912 NONAME ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty const &) + ?hasNotifySignal@QMetaPropertyBuilder@@QBE_NXZ @ 913 NONAME ; bool QMetaPropertyBuilder::hasNotifySignal(void) const + ??4QDeclarativeDomImport@@QAEAAV0@ABV0@@Z @ 914 NONAME ; class QDeclarativeDomImport & QDeclarativeDomImport::operator=(class QDeclarativeDomImport const &) + ?resetFill@QDeclarativeAnchors@@QAEXXZ @ 915 NONAME ; void QDeclarativeAnchors::resetFill(void) + ??6QDeclarativeInfo@@QAEAAV0@_K@Z @ 916 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned long long) + ?d_func@QDeclarativeComponent@@ABEPBVQDeclarativeComponentPrivate@@XZ @ 917 NONAME ; class QDeclarativeComponentPrivate const * QDeclarativeComponent::d_func(void) const + ??0QDeclarativeBehavior@@QAE@PAVQObject@@@Z @ 918 NONAME ; QDeclarativeBehavior::QDeclarativeBehavior(class QObject *) + ?length@QDeclarativeDomValue@@QBEHXZ @ 919 NONAME ; int QDeclarativeDomValue::length(void) const + ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 920 NONAME ; class QString QDeclarativeBinding::trUtf8(char const *, char const *, int) + ??0QDeclarativeType@@AAE@HABURegisterInterface@QDeclarativePrivate@@@Z @ 921 NONAME ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterInterface const &) + ?scopeObject@QDeclarativeScriptString@@QBEPAVQObject@@XZ @ 922 NONAME ; class QObject * QDeclarativeScriptString::scopeObject(void) const + ?left@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 923 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::left(void) const + ??1QDeclarativeDebuggerStatus@@UAE@XZ @ 924 NONAME ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(void) + ??6QDeclarativeInfo@@QAEAAV0@ABVQLatin1String@@@Z @ 925 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QLatin1String const &) + ?at@QDeclarativeListReference@@QBEPAVQObject@@H@Z @ 926 NONAME ; class QObject * QDeclarativeListReference::at(int) const + ?metaObject@QDeclarativeDebugWatch@@UBEPBUQMetaObject@@XZ @ 927 NONAME ; struct QMetaObject const * QDeclarativeDebugWatch::metaObject(void) const + ?qt_metacast@QListModelInterface@@UAEPAXPBD@Z @ 928 NONAME ; void * QListModelInterface::qt_metacast(char const *) + ?deserialize@QMetaObjectBuilder@@QAEXAAVQDataStream@@ABV?$QMap@VQByteArray@@PB$$CBUQMetaObject@@@@@Z @ 929 NONAME ; void QMetaObjectBuilder::deserialize(class QDataStream &, class QMap<class QByteArray, struct QMetaObject const *> const &) + ?canClear@QDeclarativeListReference@@QBE_NXZ @ 930 NONAME ; bool QDeclarativeListReference::canClear(void) const + ??4QDeclarativeCustomParserProperty@@QAEAAV0@ABV0@@Z @ 931 NONAME ; class QDeclarativeCustomParserProperty & QDeclarativeCustomParserProperty::operator=(class QDeclarativeCustomParserProperty const &) + ?parameterNames@QMetaMethodBuilder@@QBE?AV?$QList@VQByteArray@@@@XZ @ 932 NONAME ; class QList<class QByteArray> QMetaMethodBuilder::parameterNames(void) const + ?get@QDeclarativeListModel@@QBE?AVQScriptValue@@H@Z @ 933 NONAME ; class QScriptValue QDeclarativeListModel::get(int) const + ?createSize@QDeclarativeType@@QBEHXZ @ 934 NONAME ; int QDeclarativeType::createSize(void) const + ?isValueSource@QDeclarativeDomValue@@QBE_NXZ @ 935 NONAME ; bool QDeclarativeDomValue::isValueSource(void) const + ?isWritable@QDeclarativeProperty@@QBE_NXZ @ 936 NONAME ; bool QDeclarativeProperty::isWritable(void) const + ?setKeepMouseGrab@QDeclarativeItem@@QAEX_N@Z @ 937 NONAME ; void QDeclarativeItem::setKeepMouseGrab(bool) + ??0QDeclarativeDebugContextReference@@QAE@XZ @ 938 NONAME ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(void) + ?setParameterNames@QMetaMethodBuilder@@QAEXABV?$QList@VQByteArray@@@@@Z @ 939 NONAME ; void QMetaMethodBuilder::setParameterNames(class QList<class QByteArray> const &) + ?getStaticMetaObject@QDeclarativeDebugRootContextQuery@@SAABUQMetaObject@@XZ @ 940 NONAME ; struct QMetaObject const & QDeclarativeDebugRootContextQuery::getStaticMetaObject(void) + ?textChanged@QDeclarativeText@@IAEXABVQString@@@Z @ 941 NONAME ; void QDeclarativeText::textChanged(class QString const &) + ?trUtf8@QDeclarativeItem@@SA?AVQString@@PBD0@Z @ 942 NONAME ; class QString QDeclarativeItem::trUtf8(char const *, char const *) + ??0QDeclarativeCustomParserProperty@@QAE@ABV0@@Z @ 943 NONAME ; QDeclarativeCustomParserProperty::QDeclarativeCustomParserProperty(class QDeclarativeCustomParserProperty const &) + ?getStaticMetaObject@QDeclarativeComponent@@SAABUQMetaObject@@XZ @ 944 NONAME ; struct QMetaObject const & QDeclarativeComponent::getStaticMetaObject(void) + ?parentItem@QDeclarativeItem@@QBEPAV1@XZ @ 945 NONAME ; class QDeclarativeItem * QDeclarativeItem::parentItem(void) const + ?value@QMetaEnumBuilder@@QBEHH@Z @ 946 NONAME ; int QMetaEnumBuilder::value(int) const + ??_EQDeclarativeExpression@@UAE@I@Z @ 947 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(unsigned int) + ?load@QDeclarativeDomDocument@@QAE_NPAVQDeclarativeEngine@@ABVQByteArray@@ABVQUrl@@@Z @ 948 NONAME ; bool QDeclarativeDomDocument::load(class QDeclarativeEngine *, class QByteArray const &, class QUrl const &) + ?staticMetaObject@QDeclarativeStateGroup@@2UQMetaObject@@B @ 949 NONAME ; struct QMetaObject const QDeclarativeStateGroup::staticMetaObject + ?tr@QDeclarativePropertyMap@@SA?AVQString@@PBD0@Z @ 950 NONAME ; class QString QDeclarativePropertyMap::tr(char const *, char const *) + ?verticalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 951 NONAME ; void QDeclarativeAnchors::verticalCenterChanged(void) + ?isScriptable@QMetaPropertyBuilder@@QBE_NXZ @ 952 NONAME ; bool QMetaPropertyBuilder::isScriptable(void) const + ?typeCategory@QDeclarativeMetaType@@SA?AW4TypeCategory@1@H@Z @ 953 NONAME ; enum QDeclarativeMetaType::TypeCategory QDeclarativeMetaType::typeCategory(int) + ?findSignalByName@QDeclarativePropertyPrivate@@SA?AVQMetaMethod@@PBUQMetaObject@@ABVQByteArray@@@Z @ 954 NONAME ; class QMetaMethod QDeclarativePropertyPrivate::findSignalByName(struct QMetaObject const *, class QByteArray const &) + ?length@QDeclarativeDomDynamicProperty@@QBEHXZ @ 955 NONAME ; int QDeclarativeDomDynamicProperty::length(void) const + ?property@QDeclarativeBinding@@QBE?AVQDeclarativeProperty@@XZ @ 956 NONAME ; class QDeclarativeProperty QDeclarativeBinding::property(void) const + ??0QDeclarativeDomValueBinding@@QAE@XZ @ 957 NONAME ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(void) + ?addImportPath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 958 NONAME ; void QDeclarativeEngine::addImportPath(class QString const &) + ?engine@QDeclarativeContext@@QBEPAVQDeclarativeEngine@@XZ @ 959 NONAME ; class QDeclarativeEngine * QDeclarativeContext::engine(void) const + ?length@QDeclarativeDomObject@@QBEHXZ @ 960 NONAME ; int QDeclarativeDomObject::length(void) const + ?setBaselineOffset@QDeclarativeAnchors@@QAEXM@Z @ 961 NONAME ; void QDeclarativeAnchors::setBaselineOffset(float) + ?append@QDeclarativeListReference@@QBE_NPAVQObject@@@Z @ 962 NONAME ; bool QDeclarativeListReference::append(class QObject *) const + ?d_func@QDeclarativeEngineDebug@@AAEPAVQDeclarativeEngineDebugPrivate@@XZ @ 963 NONAME ; class QDeclarativeEngineDebugPrivate * QDeclarativeEngineDebug::d_func(void) + ??1QDeclarativeNetworkAccessManagerFactory@@UAE@XZ @ 964 NONAME ; QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory(void) + ?textFormatChanged@QDeclarativeText@@IAEXW4TextFormat@1@@Z @ 965 NONAME ; void QDeclarativeText::textFormatChanged(enum QDeclarativeText::TextFormat) + ?removeState@QDeclarativeStateGroup@@AAEXPAVQDeclarativeState@@@Z @ 966 NONAME ; void QDeclarativeStateGroup::removeState(class QDeclarativeState *) + ?qmlTypeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 967 NONAME ; class QByteArray QDeclarativeType::qmlTypeName(void) const + ?tr@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 968 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *) + ?setLoading@QDeclarativePixmapReply@@AAEXXZ @ 969 NONAME ABSENT ; void QDeclarativePixmapReply::setLoading(void) + ?isProperty@QDeclarativeProperty@@QBE_NXZ @ 970 NONAME ; bool QDeclarativeProperty::isProperty(void) const + ?states@QDeclarativeStateGroup@@QBE?AV?$QList@PAVQDeclarativeState@@@@XZ @ 971 NONAME ; class QList<class QDeclarativeState *> QDeclarativeStateGroup::states(void) const + ??1QDeclarativeDebugExpressionQuery@@UAE@XZ @ 972 NONAME ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(void) + ?isValid@QDeclarativeDomObject@@QBE_NXZ @ 973 NONAME ; bool QDeclarativeDomObject::isValid(void) const + ?staticMetaObject@QDeclarativeAnchors@@2UQMetaObject@@B @ 974 NONAME ; struct QMetaObject const QDeclarativeAnchors::staticMetaObject + ??_EQDeclarativePen@@UAE@I@Z @ 975 NONAME ; QDeclarativePen::~QDeclarativePen(unsigned int) + ??0QDeclarativeDomProperty@@QAE@ABV0@@Z @ 976 NONAME ; QDeclarativeDomProperty::QDeclarativeDomProperty(class QDeclarativeDomProperty const &) + ?_states@QDeclarativeItemPrivate@@QAEPAVQDeclarativeStateGroup@@XZ @ 977 NONAME ; class QDeclarativeStateGroup * QDeclarativeItemPrivate::_states(void) + ?verticalAlignmentChanged@QDeclarativeText@@IAEXW4VAlignment@1@@Z @ 978 NONAME ; void QDeclarativeText::verticalAlignmentChanged(enum QDeclarativeText::VAlignment) + ?typeId@QDeclarativeType@@QBEHXZ @ 979 NONAME ; int QDeclarativeType::typeId(void) const + ?marginsChanged@QDeclarativeAnchors@@IAEXXZ @ 980 NONAME ; void QDeclarativeAnchors::marginsChanged(void) + ?setValue@QDeclarativeOpenMetaObject@@QAEXHABVQVariant@@@Z @ 981 NONAME ; void QDeclarativeOpenMetaObject::setValue(int, class QVariant const &) + ?parentProperty@QDeclarativeItemPrivate@@SAXPAVQObject@@PAXPAVQDeclarativeNotifierEndpoint@@@Z @ 982 NONAME ; void QDeclarativeItemPrivate::parentProperty(class QObject *, void *, class QDeclarativeNotifierEndpoint *) + ??4QDeclarativeDebugContextReference@@QAEAAV0@ABV0@@Z @ 983 NONAME ; class QDeclarativeDebugContextReference & QDeclarativeDebugContextReference::operator=(class QDeclarativeDebugContextReference const &) + ?isModule@QDeclarativeMetaType@@SA_NABVQByteArray@@HH@Z @ 984 NONAME ; bool QDeclarativeMetaType::isModule(class QByteArray const &, int, int) + ?parentFunctions@QDeclarativeMetaType@@SA?AV?$QList@P6A?AW4AutoParentResult@QDeclarativePrivate@@PAVQObject@@0@Z@@XZ @ 985 NONAME ; class QList<enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)> QDeclarativeMetaType::parentFunctions(void) + ?metaObject@QDeclarativeDebugPropertyWatch@@UBEPBUQMetaObject@@XZ @ 986 NONAME ; struct QMetaObject const * QDeclarativeDebugPropertyWatch::metaObject(void) const + ??0QDeclarativeRectangle@@QAE@PAVQDeclarativeItem@@@Z @ 987 NONAME ; QDeclarativeRectangle::QDeclarativeRectangle(class QDeclarativeItem *) + ?setOutputWarningsToStandardError@QDeclarativeEngine@@QAEX_N@Z @ 988 NONAME ; void QDeclarativeEngine::setOutputWarningsToStandardError(bool) + ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@0@Z @ 989 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &, class QByteArray const &) + ?enumerator@QMetaObjectBuilder@@QBE?AVQMetaEnumBuilder@@H@Z @ 990 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::enumerator(int) const + ?fromRelocatableData@QMetaObjectBuilder@@SAXPAUQMetaObject@@PBU2@ABVQByteArray@@@Z @ 991 NONAME ; void QMetaObjectBuilder::fromRelocatableData(struct QMetaObject *, struct QMetaObject const *, class QByteArray const &) + ?gridRight@QDeclarativeGridScaledImage@@QBEHXZ @ 992 NONAME ; int QDeclarativeGridScaledImage::gridRight(void) const + ?isAlias@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 993 NONAME ; bool QDeclarativeDomDynamicProperty::isAlias(void) const + ?d_func@QDeclarativeContext@@ABEPBVQDeclarativeContextPrivate@@XZ @ 994 NONAME ; class QDeclarativeContextPrivate const * QDeclarativeContext::d_func(void) const + ?getStaticMetaObject@QDeclarativeDebugEnginesQuery@@SAABUQMetaObject@@XZ @ 995 NONAME ; struct QMetaObject const & QDeclarativeDebugEnginesQuery::getStaticMetaObject(void) + ?tr@QDeclarativeItem@@SA?AVQString@@PBD0H@Z @ 996 NONAME ; class QString QDeclarativeItem::tr(char const *, char const *, int) + ?staticMetaObject@QDeclarativeDebugPropertyWatch@@2UQMetaObject@@B @ 997 NONAME ; struct QMetaObject const QDeclarativeDebugPropertyWatch::staticMetaObject + ?setDescription@QDeclarativeError@@QAEXABVQString@@@Z @ 998 NONAME ; void QDeclarativeError::setDescription(class QString const &) + ??0QDeclarativeExpression@@AAE@PAVQDeclarativeContextData@@PAVQObject@@ABVQString@@@Z @ 999 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, class QObject *, class QString const &) + ??1QDeclarativeOpenMetaObjectType@@UAE@XZ @ 1000 NONAME ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(void) + ?setReversible@QDeclarativeTransition@@QAEX_N@Z @ 1001 NONAME ; void QDeclarativeTransition::setReversible(bool) + ?notifySignal@QMetaPropertyBuilder@@QBE?AVQMetaMethodBuilder@@XZ @ 1002 NONAME ; class QMetaMethodBuilder QMetaPropertyBuilder::notifySignal(void) const + ??0QDeclarativeDomList@@QAE@XZ @ 1003 NONAME ; QDeclarativeDomList::QDeclarativeDomList(void) + ?indexOfSignal@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1004 NONAME ; int QMetaObjectBuilder::indexOfSignal(class QByteArray const &) + ?toState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 1005 NONAME ; class QString QDeclarativeTransition::toState(void) const + ??0QDeclarativeDomDocument@@QAE@XZ @ 1006 NONAME ; QDeclarativeDomDocument::QDeclarativeDomDocument(void) + ?setWhen@QDeclarativeState@@QAEXPAVQDeclarativeBinding@@@Z @ 1007 NONAME ; void QDeclarativeState::setWhen(class QDeclarativeBinding *) + ?isWhenKnown@QDeclarativeState@@QBE_NXZ @ 1008 NONAME ; bool QDeclarativeState::isWhenKnown(void) const + ?agent@QDeclarativeListModel@@QAEPAVQDeclarativeListModelWorkerAgent@@XZ @ 1009 NONAME ; class QDeclarativeListModelWorkerAgent * QDeclarativeListModel::agent(void) + ?engine@QDeclarativeExpression@@QBEPAVQDeclarativeEngine@@XZ @ 1010 NONAME ; class QDeclarativeEngine * QDeclarativeExpression::engine(void) const + ??_EQDeclarativeDebugWatch@@UAE@I@Z @ 1011 NONAME ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(unsigned int) + ?isEmpty@QPacket@@QBE_NXZ @ 1012 NONAME ; bool QPacket::isEmpty(void) const + ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@PBUQMetaObject@@@Z @ 1013 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(struct QMetaObject const *) + ?setFill@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 1014 NONAME ; void QDeclarativeAnchors::setFill(class QGraphicsObject *) + ?setHAlign@QDeclarativeText@@QAEXW4HAlignment@1@@Z @ 1015 NONAME ; void QDeclarativeText::setHAlign(enum QDeclarativeText::HAlignment) + ??0QDeclarativeScriptString@@QAE@ABV0@@Z @ 1016 NONAME ; QDeclarativeScriptString::QDeclarativeScriptString(class QDeclarativeScriptString const &) + ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1017 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *) + ?metaObject@QDeclarativeDebugRootContextQuery@@UBEPBUQMetaObject@@XZ @ 1018 NONAME ; struct QMetaObject const * QDeclarativeDebugRootContextQuery::metaObject(void) const + ?setSignalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@PAV2@@Z @ 1019 NONAME ; class QDeclarativeExpression * QDeclarativePropertyPrivate::setSignalExpression(class QDeclarativeProperty const &, class QDeclarativeExpression *) + ?reversibleChanged@QDeclarativeTransition@@IAEXXZ @ 1020 NONAME ; void QDeclarativeTransition::reversibleChanged(void) + ??4QDeclarativeDomValueValueSource@@QAEAAV0@ABV0@@Z @ 1021 NONAME ; class QDeclarativeDomValueValueSource & QDeclarativeDomValueValueSource::operator=(class QDeclarativeDomValueValueSource const &) + ?name@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 1022 NONAME ; class QString QDeclarativeDebugObjectReference::name(void) const + ?anchorLines@QDeclarativeItemPrivate@@QBEPAUAnchorLines@1@XZ @ 1023 NONAME ; struct QDeclarativeItemPrivate::AnchorLines * QDeclarativeItemPrivate::anchorLines(void) const + ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABVQDeclarativeError@@@Z @ 1024 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QDeclarativeError const &) + ?staticMetaObject@QDeclarativeText@@2UQMetaObject@@B @ 1025 NONAME ; struct QMetaObject const QDeclarativeText::staticMetaObject + ?color@QDeclarativeRectangle@@QBE?AVQColor@@XZ @ 1026 NONAME ; class QColor QDeclarativeRectangle::color(void) const + ?isEnabled@QDeclarativeDebugClient@@QBE_NXZ @ 1027 NONAME ; bool QDeclarativeDebugClient::isEnabled(void) const + ?send@QPacketProtocol@@QAEXABVQPacket@@@Z @ 1028 NONAME ; void QPacketProtocol::send(class QPacket const &) + ?error@QDeclarativeCustomParser@@IAEXABVQDeclarativeCustomParserNode@@ABVQString@@@Z @ 1029 NONAME ; void QDeclarativeCustomParser::error(class QDeclarativeCustomParserNode const &, class QString const &) + ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PBUQMetaObject@@@Z @ 1030 NONAME ; class QMetaProperty QDeclarativeMetaType::defaultProperty(struct QMetaObject const *) + ?isComponentComplete@QDeclarativeItem@@IBE_NXZ @ 1031 NONAME ; bool QDeclarativeItem::isComponentComplete(void) const + ?type@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 1032 NONAME ; class QByteArray QMetaPropertyBuilder::type(void) const + ?setProperty@QDeclarativeListModel@@QAEXHABVQString@@ABVQVariant@@@Z @ 1033 NONAME ; void QDeclarativeListModel::setProperty(int, class QString const &, class QVariant const &) + ?rootContext@QDeclarativeDebugRootContextQuery@@QBE?AVQDeclarativeDebugContextReference@@XZ @ 1034 NONAME ; class QDeclarativeDebugContextReference QDeclarativeDebugRootContextQuery::rootContext(void) const + ?contextForObject@QDeclarativeEngine@@SAPAVQDeclarativeContext@@PBVQObject@@@Z @ 1035 NONAME ; class QDeclarativeContext * QDeclarativeEngine::contextForObject(class QObject const *) + ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQMetaProperty@@@Z @ 1036 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QMetaProperty const &) + ?isQObject@QDeclarativeMetaType@@SA_NH@Z @ 1037 NONAME ; bool QDeclarativeMetaType::isQObject(int) + ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 1038 NONAME ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *) + ?getStaticMetaObject@QDeclarativeValueType@@SAABUQMetaObject@@XZ @ 1039 NONAME ; struct QMetaObject const & QDeclarativeValueType::getStaticMetaObject(void) + ?valueChanged@QDeclarativePropertyMap@@IAEXABVQString@@ABVQVariant@@@Z @ 1040 NONAME ; void QDeclarativePropertyMap::valueChanged(class QString const &, class QVariant const &) + ?staticMetaObject@QPacketProtocol@@2UQMetaObject@@B @ 1041 NONAME ; struct QMetaObject const QPacketProtocol::staticMetaObject + ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 1042 NONAME ; class QString QDeclarativeListModel::tr(char const *, char const *, int) + ??0QDeclarativeScriptString@@QAE@XZ @ 1043 NONAME ; QDeclarativeScriptString::QDeclarativeScriptString(void) + ?tr@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1044 NONAME ; class QString QListModelInterface::tr(char const *, char const *) + ?height@QDeclarativeItemPrivate@@UBEMXZ @ 1045 NONAME ; float QDeclarativeItemPrivate::height(void) const + ?qt_metacast@QDeclarativeDebugObjectQuery@@UAEPAXPBD@Z @ 1046 NONAME ; void * QDeclarativeDebugObjectQuery::qt_metacast(char const *) + ?type@QDeclarativeDomValue@@QBE?AW4Type@1@XZ @ 1047 NONAME ; enum QDeclarativeDomValue::Type QDeclarativeDomValue::type(void) const + ?staticMetacallFunction@QMetaObjectBuilder@@QBEP6AHW4Call@QMetaObject@@HPAPAX@ZXZ @ 1048 NONAME ; int (*)(enum QMetaObject::Call, int, void * *) QMetaObjectBuilder::staticMetacallFunction(void) const + ?setStyle@QDeclarativeText@@QAEXW4TextStyle@1@@Z @ 1049 NONAME ; void QDeclarativeText::setStyle(enum QDeclarativeText::TextStyle) + ?staticMetaObject@QDeclarativePropertyMap@@2UQMetaObject@@B @ 1050 NONAME ; struct QMetaObject const QDeclarativePropertyMap::staticMetaObject + ??_EQDeclarativeDebugEnginesQuery@@UAE@I@Z @ 1051 NONAME ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(unsigned int) + ?enumeratorCount@QMetaObjectBuilder@@QBEHXZ @ 1052 NONAME ; int QMetaObjectBuilder::enumeratorCount(void) const + ?setConsistentTime@QDeclarativeItemPrivate@@SAX_J@Z @ 1053 NONAME ; void QDeclarativeItemPrivate::setConsistentTime(long long) + ?initializeEngine@QDeclarativeExtensionPlugin@@UAEXPAVQDeclarativeEngine@@PBD@Z @ 1054 NONAME ; void QDeclarativeExtensionPlugin::initializeEngine(class QDeclarativeEngine *, char const *) + ?metaObject@QDeclarativeDebugQuery@@UBEPBUQMetaObject@@XZ @ 1055 NONAME ; struct QMetaObject const * QDeclarativeDebugQuery::metaObject(void) const + ?rightMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1056 NONAME ; void QDeclarativeAnchors::rightMarginChanged(void) + ??_EQDeclarativePropertyValueInterceptor@@UAE@I@Z @ 1057 NONAME ; QDeclarativePropertyValueInterceptor::~QDeclarativePropertyValueInterceptor(unsigned int) + ?linkActivated@QDeclarativeText@@IAEXABVQString@@@Z @ 1058 NONAME ; void QDeclarativeText::linkActivated(class QString const &) + ?canConvert@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1059 NONAME ; bool QDeclarativePropertyPrivate::canConvert(struct QMetaObject const *, struct QMetaObject const *) + ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 1060 NONAME ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *, int) + ?toComponent@QDeclarativeDomObject@@QBE?AVQDeclarativeDomComponent@@XZ @ 1061 NONAME ; class QDeclarativeDomComponent QDeclarativeDomObject::toComponent(void) const + ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 1062 NONAME ; class QString QDeclarativeValueType::tr(char const *, char const *) + ?setLeft@QDeclarativeScaleGrid@@QAEXH@Z @ 1063 NONAME ; void QDeclarativeScaleGrid::setLeft(int) + ??1QDeclarativeGridScaledImage@@QAE@XZ @ 1064 NONAME ; QDeclarativeGridScaledImage::~QDeclarativeGridScaledImage(void) + ??0QDeclarativeGridScaledImage@@QAE@ABV0@@Z @ 1065 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QDeclarativeGridScaledImage const &) + ?column@QDeclarativeError@@QBEHXZ @ 1066 NONAME ; int QDeclarativeError::column(void) const + ?properties@QDeclarativeCustomParserNode@@QBE?AV?$QList@VQDeclarativeCustomParserProperty@@@@XZ @ 1067 NONAME ; class QList<class QDeclarativeCustomParserProperty> QDeclarativeCustomParserNode::properties(void) const + ?qt_metacast@QDeclarativeScaleGrid@@UAEPAXPBD@Z @ 1068 NONAME ; void * QDeclarativeScaleGrid::qt_metacast(char const *) + ??0QDeclarativeListReference@@QAE@XZ @ 1069 NONAME ; QDeclarativeListReference::QDeclarativeListReference(void) + ??1QDeclarativeDebugRootContextQuery@@UAE@XZ @ 1070 NONAME ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(void) + ?name@QDeclarativeCustomParserNode@@QBE?AVQByteArray@@XZ @ 1071 NONAME ; class QByteArray QDeclarativeCustomParserNode::name(void) const + ?object@QDeclarativeDomValueValueInterceptor@@QBE?AVQDeclarativeDomObject@@XZ @ 1072 NONAME ; class QDeclarativeDomObject QDeclarativeDomValueValueInterceptor::object(void) const + ??1QDeclarativePen@@UAE@XZ @ 1073 NONAME ; QDeclarativePen::~QDeclarativePen(void) + ?data@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQObject@@@@XZ @ 1074 NONAME ; class QDeclarativeListProperty<class QObject> QDeclarativeItemPrivate::data(void) + ?qt_metacall@QDeclarativeBinding@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1075 NONAME ; int QDeclarativeBinding::qt_metacall(enum QMetaObject::Call, int, void * *) + ??1QDeclarativeEngine@@UAE@XZ @ 1076 NONAME ; QDeclarativeEngine::~QDeclarativeEngine(void) + ?debugId@QDeclarativeDebugContextReference@@QBEHXZ @ 1077 NONAME ; int QDeclarativeDebugContextReference::debugId(void) const + ?propertyNameParts@QDeclarativeDomProperty@@QBE?AV?$QList@VQByteArray@@@@XZ @ 1078 NONAME ; class QList<class QByteArray> QDeclarativeDomProperty::propertyNameParts(void) const + ?rootContext@QDeclarativeEngine@@QAEPAVQDeclarativeContext@@XZ @ 1079 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) + ?resetWidth@QDeclarativeItemPrivate@@UAEXXZ @ 1080 NONAME ; void QDeclarativeItemPrivate::resetWidth(void) + ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@ABVQByteArray@@@Z @ 1081 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](class QByteArray const &) + ?bottom@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1082 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::bottom(void) const + ?device@QPacketProtocol@@QAEPAVQIODevice@@XZ @ 1083 NONAME ; class QIODevice * QPacketProtocol::device(void) + ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1084 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *) + ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@HPA_N@Z @ 1085 NONAME ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &, int, bool *) + ?metaObject@QDeclarativeComponent@@UBEPBUQMetaObject@@XZ @ 1086 NONAME ; struct QMetaObject const * QDeclarativeComponent::metaObject(void) const + ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABV?$QList@VQDeclarativeError@@@@@Z @ 1087 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QList<class QDeclarativeError> const &) + ?assignedValues@QDeclarativeCustomParserProperty@@QBE?AV?$QList@VQVariant@@@@XZ @ 1088 NONAME ; class QList<class QVariant> QDeclarativeCustomParserProperty::assignedValues(void) const + ?setValue@QDeclarativeOpenMetaObject@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1089 NONAME ; void QDeclarativeOpenMetaObject::setValue(class QByteArray const &, class QVariant const &) + ?data@QDeclarativeListModel@@UBE?AVQVariant@@HH@Z @ 1090 NONAME ; class QVariant QDeclarativeListModel::data(int, int) const + ?setElideMode@QDeclarativeText@@QAEXW4TextElideMode@1@@Z @ 1091 NONAME ; void QDeclarativeText::setElideMode(enum QDeclarativeText::TextElideMode) + ?d_func@QDeclarativePropertyMap@@ABEPBVQDeclarativePropertyMapPrivate@@XZ @ 1092 NONAME ; class QDeclarativePropertyMapPrivate const * QDeclarativePropertyMap::d_func(void) const + ?consistentTime@QDeclarativeItemPrivate@@2_JA @ 1093 NONAME ; long long QDeclarativeItemPrivate::consistentTime + ?setWidth@QDeclarativeItem@@QAEXM@Z @ 1094 NONAME ; void QDeclarativeItem::setWidth(float) + ?contextObject@QDeclarativeContext@@QBEPAVQObject@@XZ @ 1095 NONAME ; class QObject * QDeclarativeContext::contextObject(void) const + ?qt_metacall@QDeclarativeDebugObjectQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1096 NONAME ; int QDeclarativeDebugObjectQuery::qt_metacall(enum QMetaObject::Call, int, void * *) + ??_EQDeclarativeOpenMetaObjectType@@UAE@I@Z @ 1097 NONAME ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(unsigned int) + ?isWritable@QMetaPropertyBuilder@@QBE_NXZ @ 1098 NONAME ; bool QMetaPropertyBuilder::isWritable(void) const + ?sizeFFromString@QDeclarativeStringConverters@@YA?AVQSizeF@@ABVQString@@PA_N@Z @ 1099 NONAME ; class QSizeF QDeclarativeStringConverters::sizeFFromString(class QString const &, bool *) + ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeEngine@@@Z @ 1100 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &, class QDeclarativeEngine *) + ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1101 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &) + ??0QDeclarativeDebugFileReference@@QAE@XZ @ 1102 NONAME ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(void) + ?mapFromItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 1103 NONAME ; class QScriptValue QDeclarativeItem::mapFromItem(class QScriptValue const &, float, float) const + ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 1104 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *, int) + ?tr@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 1105 NONAME ; class QString QPacketProtocol::tr(char const *, char const *, int) + ?d_func@QDeclarativeAnchors@@ABEPBVQDeclarativeAnchorsPrivate@@XZ @ 1106 NONAME ; class QDeclarativeAnchorsPrivate const * QDeclarativeAnchors::d_func(void) const + ?metaObject@QDeclarativePixmapReply@@UBEPBUQMetaObject@@XZ @ 1107 NONAME ABSENT ; struct QMetaObject const * QDeclarativePixmapReply::metaObject(void) const + ?setNotifySignal@QMetaPropertyBuilder@@QAEXABVQMetaMethodBuilder@@@Z @ 1108 NONAME ; void QMetaPropertyBuilder::setNotifySignal(class QMetaMethodBuilder const &) + ?enabled@QDeclarativeBehavior@@QBE_NXZ @ 1109 NONAME ; bool QDeclarativeBehavior::enabled(void) const + ?initProperty@QDeclarativePropertyPrivate@@QAEXPAVQObject@@ABVQString@@@Z @ 1110 NONAME ; void QDeclarativePropertyPrivate::initProperty(class QObject *, class QString const &) + ?isEditable@QMetaPropertyBuilder@@QBE_NXZ @ 1111 NONAME ; bool QMetaPropertyBuilder::isEditable(void) const + ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContextData@@1@Z @ 1112 NONAME ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContextData *, class QObject *) + ?expression@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 1113 NONAME ; class QVariant QDeclarativeDebugExpressionQuery::expression(void) const + ??4QDeclarativeDomList@@QAEAAV0@ABV0@@Z @ 1114 NONAME ; class QDeclarativeDomList & QDeclarativeDomList::operator=(class QDeclarativeDomList const &) + ?qt_metacall@QDeclarativeComponent@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1115 NONAME ; int QDeclarativeComponent::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 1116 NONAME ; class QString QDeclarativeDebugService::tr(char const *, char const *, int) + ?staticMetaObject@QDeclarativeEngine@@2UQMetaObject@@B @ 1117 NONAME ; struct QMetaObject const QDeclarativeEngine::staticMetaObject + ?staticMetaObject@QDeclarativeStateOperation@@2UQMetaObject@@B @ 1118 NONAME ; struct QMetaObject const QDeclarativeStateOperation::staticMetaObject + ?actions@QDeclarativeStateOperation@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1119 NONAME ; class QList<class QDeclarativeAction> QDeclarativeStateOperation::actions(void) + ?objectClassName@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 1120 NONAME ; class QByteArray QDeclarativeDomObject::objectClassName(void) const + ??8QDeclarativeProperty@@QBE_NABV0@@Z @ 1121 NONAME ; bool QDeclarativeProperty::operator==(class QDeclarativeProperty const &) const + ??1QDeclarativeDomValue@@QAE@XZ @ 1122 NONAME ; QDeclarativeDomValue::~QDeclarativeDomValue(void) + ??_EQDeclarativePropertyMap@@UAE@I@Z @ 1123 NONAME ; QDeclarativePropertyMap::~QDeclarativePropertyMap(unsigned int) + ?staticMetaObject@QDeclarativeDebugRootContextQuery@@2UQMetaObject@@B @ 1124 NONAME ; struct QMetaObject const QDeclarativeDebugRootContextQuery::staticMetaObject + ?noCreationReason@QDeclarativeType@@QBE?AVQString@@XZ @ 1125 NONAME ; class QString QDeclarativeType::noCreationReason(void) const + ?setUrl@QDeclarativeDebugFileReference@@QAEXABVQUrl@@@Z @ 1126 NONAME ; void QDeclarativeDebugFileReference::setUrl(class QUrl const &) + ??1QDeclarativeCustomParserProperty@@QAE@XZ @ 1127 NONAME ; QDeclarativeCustomParserProperty::~QDeclarativeCustomParserProperty(void) + ??1QPacketProtocol@@UAE@XZ @ 1128 NONAME ; QPacketProtocol::~QPacketProtocol(void) + ??1QDeclarativeAbstractBinding@@MAE@XZ @ 1129 NONAME ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(void) + ?indexOfEnumerator@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1130 NONAME ; int QMetaObjectBuilder::indexOfEnumerator(class QByteArray const &) + ?qt_metacast@QDeclarativePen@@UAEPAXPBD@Z @ 1131 NONAME ; void * QDeclarativePen::qt_metacast(char const *) + ?leftMargin@QDeclarativeAnchors@@QBEMXZ @ 1132 NONAME ; float QDeclarativeAnchors::leftMargin(void) const + ??1QDeclarativeComponent@@UAE@XZ @ 1133 NONAME ; QDeclarativeComponent::~QDeclarativeComponent(void) + ??1QDeclarativeItem@@UAE@XZ @ 1134 NONAME ; QDeclarativeItem::~QDeclarativeItem(void) + ?setEnabled@QDeclarativeAbstractBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1135 NONAME ; void QDeclarativeAbstractBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ?staticMetaObject@QListModelInterface@@2UQMetaObject@@B @ 1136 NONAME ; struct QMetaObject const QListModelInterface::staticMetaObject + ?d_func@QDeclarativeTransition@@ABEPBVQDeclarativeTransitionPrivate@@XZ @ 1137 NONAME ; class QDeclarativeTransitionPrivate const * QDeclarativeTransition::d_func(void) const + ?sourceFile@QDeclarativeExpression@@QBE?AVQString@@XZ @ 1138 NONAME ; class QString QDeclarativeExpression::sourceFile(void) const + ??_EQDeclarativeAnchors@@UAE@I@Z @ 1139 NONAME ; QDeclarativeAnchors::~QDeclarativeAnchors(unsigned int) + ?removeNotifySignal@QMetaPropertyBuilder@@QAEXXZ @ 1140 NONAME ; void QMetaPropertyBuilder::removeNotifySignal(void) + ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 1141 NONAME ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *) + ?setImportPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 1142 NONAME ; void QDeclarativeEngine::setImportPathList(class QStringList const &) + ?enabledChanged@QDeclarativeDebugService@@MAEX_N@Z @ 1143 NONAME ; void QDeclarativeDebugService::enabledChanged(bool) + ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1144 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QObject *) + ?asAST@Variant@QDeclarativeParser@@QBEPAVNode@AST@QDeclarativeJS@@XZ @ 1145 NONAME ; class QDeclarativeJS::AST::Node * QDeclarativeParser::Variant::asAST(void) const + ?indexOfClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1146 NONAME ; int QMetaObjectBuilder::indexOfClassInfo(class QByteArray const &) + ??0QDeclarativeDomImport@@QAE@ABV0@@Z @ 1147 NONAME ; QDeclarativeDomImport::QDeclarativeDomImport(class QDeclarativeDomImport const &) + ?width@QDeclarativePen@@QBEHXZ @ 1148 NONAME ; int QDeclarativePen::width(void) const + ?d_func@QDeclarativeStateGroup@@AAEPAVQDeclarativeStateGroupPrivate@@XZ @ 1149 NONAME ; class QDeclarativeStateGroupPrivate * QDeclarativeStateGroup::d_func(void) + ??6QDeclarativeInfo@@QAEAAV0@P6AAAVQTextStream@@AAV1@@Z@Z @ 1150 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QTextStream & (*)(class QTextStream &)) + ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 1151 NONAME ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *) + ?type@QDeclarativeOpenMetaObject@@QBEPAVQDeclarativeOpenMetaObjectType@@XZ @ 1152 NONAME ; class QDeclarativeOpenMetaObjectType * QDeclarativeOpenMetaObject::type(void) const + ?tr@QDeclarativeExpression@@SA?AVQString@@PBD0@Z @ 1153 NONAME ; class QString QDeclarativeExpression::tr(char const *, char const *) + ??0QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 1154 NONAME ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(void) + ??1QDeclarativeDebugPropertyWatch@@UAE@XZ @ 1155 NONAME ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(void) + ?evaluate@QDeclarativeExpression@@QAE?AVQVariant@@PA_N@Z @ 1156 NONAME ; class QVariant QDeclarativeExpression::evaluate(bool *) + ?isDefaultProperty@QDeclarativeDomProperty@@QBE_NXZ @ 1157 NONAME ; bool QDeclarativeDomProperty::isDefaultProperty(void) const + ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1158 NONAME ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QVariant const &) + ?metaObject@QDeclarativeRectangle@@UBEPBUQMetaObject@@XZ @ 1159 NONAME ; struct QMetaObject const * QDeclarativeRectangle::metaObject(void) const + ?forcedWidth@QDeclarativePixmapReply@@QBEHXZ @ 1160 NONAME ABSENT ; int QDeclarativePixmapReply::forcedWidth(void) const + ?removeRelatedMetaObject@QMetaObjectBuilder@@QAEXH@Z @ 1161 NONAME ; void QMetaObjectBuilder::removeRelatedMetaObject(int) + ??0QDeclarativeError@@QAE@XZ @ 1162 NONAME ; QDeclarativeError::QDeclarativeError(void) + ?object@QDeclarativeProperty@@QBEPAVQObject@@XZ @ 1163 NONAME ; class QObject * QDeclarativeProperty::object(void) const + ?stateGroup@QDeclarativeState@@QBEPAVQDeclarativeStateGroup@@XZ @ 1164 NONAME ; class QDeclarativeStateGroup * QDeclarativeState::stateGroup(void) const + ?connectNotifySignal@QDeclarativeProperty@@QBE_NPAVQObject@@H@Z @ 1165 NONAME ; bool QDeclarativeProperty::connectNotifySignal(class QObject *, int) const + ?focusChanged@QDeclarativeItemPrivate@@UAEX_N@Z @ 1166 NONAME ; void QDeclarativeItemPrivate::focusChanged(bool) + ?contextDebugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 1167 NONAME ; int QDeclarativeDebugObjectReference::contextDebugId(void) const + ?url@QDeclarativeDebugFileReference@@QBE?AVQUrl@@XZ @ 1168 NONAME ; class QUrl QDeclarativeDebugFileReference::url(void) const + ?paint@QDeclarativeRectangle@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1169 NONAME ; void QDeclarativeRectangle::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) + ??6QDeclarativeState@@QAEAAV0@PAVQDeclarativeStateOperation@@@Z @ 1170 NONAME ; class QDeclarativeState & QDeclarativeState::operator<<(class QDeclarativeStateOperation *) + ?destroy@QDeclarativeAbstractBinding@@UAEXXZ @ 1171 NONAME ; void QDeclarativeAbstractBinding::destroy(void) + ?qt_metacast@QDeclarativeDebugService@@UAEPAXPBD@Z @ 1172 NONAME ; void * QDeclarativeDebugService::qt_metacast(char const *) + ?qt_metacast@QDeclarativeValueType@@UAEPAXPBD@Z @ 1173 NONAME ; void * QDeclarativeValueType::qt_metacast(char const *) + ?childAt@QDeclarativeItem@@QBEPAV1@MM@Z @ 1174 NONAME ; class QDeclarativeItem * QDeclarativeItem::childAt(float, float) const + ?paintedWidth@QDeclarativeText@@QBEMXZ @ 1175 NONAME ; float QDeclarativeText::paintedWidth(void) const + ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1176 NONAME ; class QString QDeclarativeBinding::tr(char const *, char const *) + ?clip@QDeclarativeItem@@QBE_NXZ @ 1177 NONAME ; bool QDeclarativeItem::clip(void) const + ??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@PAVQObject@@@Z @ 1178 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QUrl const &, class QObject *) + ??0QDeclarativeValueTypeFactory@@QAE@XZ @ 1179 NONAME ; QDeclarativeValueTypeFactory::QDeclarativeValueTypeFactory(void) + ?literal@QDeclarativeDomValueLiteral@@QBE?AVQString@@XZ @ 1180 NONAME ; class QString QDeclarativeDomValueLiteral::literal(void) const + ??_EQDeclarativeEngineDebug@@UAE@I@Z @ 1181 NONAME ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(unsigned int) + ?bottom@QDeclarativeScaleGrid@@QBEHXZ @ 1182 NONAME ; int QDeclarativeScaleGrid::bottom(void) const + ?d_func@QDeclarativePropertyMap@@AAEPAVQDeclarativePropertyMapPrivate@@XZ @ 1183 NONAME ; class QDeclarativePropertyMapPrivate * QDeclarativePropertyMap::d_func(void) + ?forceFocus@QDeclarativeItem@@QAEXXZ @ 1184 NONAME ; void QDeclarativeItem::forceFocus(void) + ?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1185 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *) + ??0QDeclarativeTransition@@QAE@PAVQObject@@@Z @ 1186 NONAME ; QDeclarativeTransition::QDeclarativeTransition(class QObject *) + ?horizontalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1187 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::horizontalCenter(void) const + ?setObjectOwnership@QDeclarativeEngine@@SAXPAVQObject@@W4ObjectOwnership@1@@Z @ 1188 NONAME ; void QDeclarativeEngine::setObjectOwnership(class QObject *, enum QDeclarativeEngine::ObjectOwnership) + ?tr@QDeclarativeContext@@SA?AVQString@@PBD0H@Z @ 1189 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *, int) + ?metaCall@QDeclarativeOpenMetaObject@@MAEHW4Call@QMetaObject@@HPAPAX@Z @ 1190 NONAME ; int QDeclarativeOpenMetaObject::metaCall(enum QMetaObject::Call, int, void * *) + ??_EQDeclarativeText@@UAE@I@Z @ 1191 NONAME ; QDeclarativeText::~QDeclarativeText(unsigned int) + ?setLeftMargin@QDeclarativeAnchors@@QAEXM@Z @ 1192 NONAME ; void QDeclarativeAnchors::setLeftMargin(float) + ?metaObject@QDeclarativeStateGroup@@UBEPBUQMetaObject@@XZ @ 1193 NONAME ; struct QMetaObject const * QDeclarativeStateGroup::metaObject(void) const + ?expression@QDeclarativeAbstractBinding@@UBE?AVQString@@XZ @ 1194 NONAME ; class QString QDeclarativeAbstractBinding::expression(void) const + ??6QDeclarativeInfo@@QAEAAV0@N@Z @ 1195 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(double) + ?setAnimation@QDeclarativeBehavior@@QAEXPAVQDeclarativeAbstractAnimation@@@Z @ 1196 NONAME ; void QDeclarativeBehavior::setAnimation(class QDeclarativeAbstractAnimation *) + ?properties@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugPropertyReference@@@@XZ @ 1197 NONAME ; class QList<class QDeclarativeDebugPropertyReference> QDeclarativeDebugObjectReference::properties(void) const + ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 1198 NONAME ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *) + ?context@QDeclarativeExpression@@QBEPAVQDeclarativeContext@@XZ @ 1199 NONAME ; class QDeclarativeContext * QDeclarativeExpression::context(void) const + ?qt_metacast@QDeclarativeBehavior@@UAEPAXPBD@Z @ 1200 NONAME ; void * QDeclarativeBehavior::qt_metacast(char const *) + ?objectTypeMinorVersion@QDeclarativeDomObject@@QBEHXZ @ 1201 NONAME ; int QDeclarativeDomObject::objectTypeMinorVersion(void) const + ??0QDeclarativePropertyValueInterceptor@@QAE@XZ @ 1202 NONAME ; QDeclarativePropertyValueInterceptor::QDeclarativePropertyValueInterceptor(void) + ?isValid@QDeclarativeError@@QBE_NXZ @ 1203 NONAME ; bool QDeclarativeError::isValid(void) const + ??0QMetaMethodBuilder@@QAE@XZ @ 1204 NONAME ; QMetaMethodBuilder::QMetaMethodBuilder(void) + ?completed@QDeclarativeState@@IAEXXZ @ 1205 NONAME ; void QDeclarativeState::completed(void) + ?tr@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 1206 NONAME ABSENT ; class QString QDeclarativePixmapReply::tr(char const *, char const *, int) + ?radiusChanged@QDeclarativeRectangle@@IAEXXZ @ 1207 NONAME ; void QDeclarativeRectangle::radiusChanged(void) + ?getStaticMetaObject@QDeclarativeExpression@@SAABUQMetaObject@@XZ @ 1208 NONAME ; struct QMetaObject const & QDeclarativeExpression::getStaticMetaObject(void) + ?gridLeft@QDeclarativeGridScaledImage@@QBEHXZ @ 1209 NONAME ; int QDeclarativeGridScaledImage::gridLeft(void) const + ?setWritable@QMetaPropertyBuilder@@QAEX_N@Z @ 1210 NONAME ; void QMetaPropertyBuilder::setWritable(bool) + ?qt_metacast@QDeclarativeStateGroup@@UAEPAXPBD@Z @ 1211 NONAME ; void * QDeclarativeStateGroup::qt_metacast(char const *) + ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PAVQObject@@@Z @ 1212 NONAME ; class QMetaMethod QDeclarativeMetaType::defaultMethod(class QObject *) + ?qt_metacast@QDeclarativeEngineDebug@@UAEPAXPBD@Z @ 1213 NONAME ; void * QDeclarativeEngineDebug::qt_metacast(char const *) + ?staticMetaObject@QDeclarativeExpression@@2UQMetaObject@@B @ 1214 NONAME ; struct QMetaObject const QDeclarativeExpression::staticMetaObject + ?statusChanged@QDeclarativeComponent@@IAEXW4Status@1@@Z @ 1215 NONAME ; void QDeclarativeComponent::statusChanged(enum QDeclarativeComponent::Status) + ?setTarget@QDeclarativeBinding@@QAEXABVQDeclarativeProperty@@@Z @ 1216 NONAME ; void QDeclarativeBinding::setTarget(class QDeclarativeProperty const &) + ?imageProvider@QDeclarativeEngine@@QBEPAVQDeclarativeImageProvider@@ABVQString@@@Z @ 1217 NONAME ; class QDeclarativeImageProvider * QDeclarativeEngine::imageProvider(class QString const &) const + ?packetsAvailable@QPacketProtocol@@QBE_JXZ @ 1218 NONAME ; long long QPacketProtocol::packetsAvailable(void) const + ?state@QDeclarativeDebugWatch@@QBE?AW4State@1@XZ @ 1219 NONAME ; enum QDeclarativeDebugWatch::State QDeclarativeDebugWatch::state(void) const + ?attachedPropertiesFuncById@QDeclarativeMetaType@@SAP6APAVQObject@@PAV2@@ZH@Z @ 1220 NONAME ; class QObject * (*)(class QObject *) QDeclarativeMetaType::attachedPropertiesFuncById(int) + ?resetBaseline@QDeclarativeAnchors@@QAEXXZ @ 1221 NONAME ; void QDeclarativeAnchors::resetBaseline(void) + ?name@QDeclarativeDebugClient@@QBE?AVQString@@XZ @ 1222 NONAME ; class QString QDeclarativeDebugClient::name(void) const + ?propertyValueInterceptorCast@QDeclarativeType@@QBEHXZ @ 1223 NONAME ; int QDeclarativeType::propertyValueInterceptorCast(void) const + ?setData@QDeclarativeComponent@@QAEXABVQByteArray@@ABVQUrl@@@Z @ 1224 NONAME ; void QDeclarativeComponent::setData(class QByteArray const &, class QUrl const &) + ??4QDeclarativeDomValue@@QAEAAV0@ABV0@@Z @ 1225 NONAME ; class QDeclarativeDomValue & QDeclarativeDomValue::operator=(class QDeclarativeDomValue const &) + ?toString@QDeclarativeListModel@@UBE?AVQString@@H@Z @ 1226 NONAME ; class QString QDeclarativeListModel::toString(int) const + ?resetWidth@QDeclarativeItem@@QAEXXZ @ 1227 NONAME ; void QDeclarativeItem::resetWidth(void) + ??0QDeclarativeProperty@@QAE@ABV0@@Z @ 1228 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QDeclarativeProperty const &) + ?text@QDeclarativeText@@QBE?AVQString@@XZ @ 1229 NONAME ; class QString QDeclarativeText::text(void) const + ??1QDeclarativeDebugObjectQuery@@UAE@XZ @ 1230 NONAME ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(void) + ?count@QDeclarativeOpenMetaObject@@QBEHXZ @ 1231 NONAME ; int QDeclarativeOpenMetaObject::count(void) const + ?isFlag@QMetaEnumBuilder@@QBE_NXZ @ 1232 NONAME ; bool QMetaEnumBuilder::isFlag(void) const + ?bindingIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1233 NONAME ; int QDeclarativePropertyPrivate::bindingIndex(class QDeclarativeProperty const &) + ??0QDeclarativeDomValueBinding@@QAE@ABV0@@Z @ 1234 NONAME ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(class QDeclarativeDomValueBinding const &) + ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 1235 NONAME ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *) + ?classInfoName@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 1236 NONAME ; class QByteArray QMetaObjectBuilder::classInfoName(int) const + ?metaObject@QDeclarativeDebugObjectQuery@@UBEPBUQMetaObject@@XZ @ 1237 NONAME ; struct QMetaObject const * QDeclarativeDebugObjectQuery::metaObject(void) const + ??4QDeclarativeDomDynamicProperty@@QAEAAV0@ABV0@@Z @ 1238 NONAME ; class QDeclarativeDomDynamicProperty & QDeclarativeDomDynamicProperty::operator=(class QDeclarativeDomDynamicProperty const &) + ??_EQDeclarativeDebugEngineReference@@QAE@I@Z @ 1239 NONAME ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(unsigned int) + ?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4Anchor@QDeclarativeAnchors@@@@XZ @ 1240 NONAME ; class QFlags<enum QDeclarativeAnchors::Anchor> QDeclarativeAnchors::usedAnchors(void) const + ?baseline@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1241 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline(void) const + ?clear@QDeclarativeListModel@@QAEXXZ @ 1242 NONAME ; void QDeclarativeListModel::clear(void) + ??0QDeclarativeDebugObjectExpressionWatch@@QAE@PAVQObject@@@Z @ 1243 NONAME ; QDeclarativeDebugObjectExpressionWatch::QDeclarativeDebugObjectExpressionWatch(class QObject *) + ??4QDeclarativeDomProperty@@QAEAAV0@ABV0@@Z @ 1244 NONAME ; class QDeclarativeDomProperty & QDeclarativeDomProperty::operator=(class QDeclarativeDomProperty const &) + ?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1245 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &) + ?trUtf8@QDeclarativeContext@@SA?AVQString@@PBD0@Z @ 1246 NONAME ; class QString QDeclarativeContext::trUtf8(char const *, char const *) + ?borderChanged@QDeclarativeScaleGrid@@IAEXXZ @ 1247 NONAME ; void QDeclarativeScaleGrid::borderChanged(void) + ??1QDeclarativeRectangle@@UAE@XZ @ 1248 NONAME ; QDeclarativeRectangle::~QDeclarativeRectangle(void) + ?count@QDeclarativePropertyMap@@QBEHXZ @ 1249 NONAME ; int QDeclarativePropertyMap::count(void) const + ?setReturnType@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1250 NONAME ; void QMetaMethodBuilder::setReturnType(class QByteArray const &) + ??0QDeclarativePropertyValueSource@@QAE@XZ @ 1251 NONAME ; QDeclarativePropertyValueSource::QDeclarativePropertyValueSource(void) + ?tr@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 1252 NONAME ; class QString QDeclarativePen::tr(char const *, char const *, int) + ?toLiteral@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueLiteral@@XZ @ 1253 NONAME ; class QDeclarativeDomValueLiteral QDeclarativeDomValue::toLiteral(void) const + ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@_N@Z @ 1254 NONAME ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, bool) + ?url@QDeclarativeComponent@@QBE?AVQUrl@@XZ @ 1255 NONAME ; class QUrl QDeclarativeComponent::url(void) const + ?componentComplete@QDeclarativeStateGroup@@UAEXXZ @ 1256 NONAME ; void QDeclarativeStateGroup::componentComplete(void) + ?setMargins@QDeclarativeAnchors@@QAEXM@Z @ 1257 NONAME ; void QDeclarativeAnchors::setMargins(float) + ?qt_metacall@QDeclarativeView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1258 NONAME ; int QDeclarativeView::qt_metacall(enum QMetaObject::Call, int, void * *) + ?state@QDeclarativeStateGroup@@QBE?AVQString@@XZ @ 1259 NONAME ; class QString QDeclarativeStateGroup::state(void) const + ??0QDeclarativeDomComponent@@QAE@ABV0@@Z @ 1260 NONAME ; QDeclarativeDomComponent::QDeclarativeDomComponent(class QDeclarativeDomComponent const &) + ?queryAvailableEngines@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugEnginesQuery@@PAVQObject@@@Z @ 1261 NONAME ; class QDeclarativeDebugEnginesQuery * QDeclarativeEngineDebug::queryAvailableEngines(class QObject *) + ??_EQDeclarativeItemPrivate@@UAE@I@Z @ 1262 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(unsigned int) + ?expression@QDeclarativeBinding@@UBE?AVQString@@XZ @ 1263 NONAME ; class QString QDeclarativeBinding::expression(void) const + ?position@QDeclarativeDomProperty@@QBEHXZ @ 1264 NONAME ; int QDeclarativeDomProperty::position(void) const + ?registerValueTypes@QDeclarativeValueTypeFactory@@SAXXZ @ 1265 NONAME ; void QDeclarativeValueTypeFactory::registerValueTypes(void) + ?dynamicProperties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomDynamicProperty@@@@XZ @ 1266 NONAME ; class QList<class QDeclarativeDomDynamicProperty> QDeclarativeDomObject::dynamicProperties(void) const + ?attachedPropertiesFunction@QDeclarativeType@@QBEP6APAVQObject@@PAV2@@ZXZ @ 1267 NONAME ; class QObject * (*)(class QObject *) QDeclarativeType::attachedPropertiesFunction(void) const + ??1QDeclarativePropertyMap@@UAE@XZ @ 1268 NONAME ; QDeclarativePropertyMap::~QDeclarativePropertyMap(void) + ??_EQDeclarativeExtensionInterface@@UAE@I@Z @ 1269 NONAME ; QDeclarativeExtensionInterface::~QDeclarativeExtensionInterface(unsigned int) + ??0Variant@QDeclarativeParser@@QAE@NABVQString@@@Z @ 1270 NONAME ; QDeclarativeParser::Variant::Variant(double, class QString const &) + ??6QDeclarativeInfo@@QAEAAV0@VQBool@@@Z @ 1271 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QBool) + ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@PAVQObject@@HHPAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1272 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QObject *, int, int, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ?qt_metacast@QDeclarativeDebugExpressionQuery@@UAEPAXPBD@Z @ 1273 NONAME ; void * QDeclarativeDebugExpressionQuery::qt_metacast(char const *) + ?contextProperty@QDeclarativeContext@@QBE?AVQVariant@@ABVQString@@@Z @ 1274 NONAME ; class QVariant QDeclarativeContext::contextProperty(class QString const &) const + ?verticalCenter@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1275 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::verticalCenter(void) const + ?metaObject@QDeclarativeScaleGrid@@UBEPBUQMetaObject@@XZ @ 1276 NONAME ; struct QMetaObject const * QDeclarativeScaleGrid::metaObject(void) const + ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0H@Z @ 1277 NONAME ABSENT ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *, int) + ?qmlContext@@YAPAVQDeclarativeContext@@PBVQObject@@@Z @ 1278 NONAME ; class QDeclarativeContext * qmlContext(class QObject const *) + ?transform_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 1279 NONAME ; int QDeclarativeItemPrivate::transform_count(class QDeclarativeListProperty<class QGraphicsTransform> *) + ?tr@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 1280 NONAME ; class QString QListModelInterface::tr(char const *, char const *, int) + ??1QDeclarativeDebugFileReference@@QAE@XZ @ 1281 NONAME ; QDeclarativeDebugFileReference::~QDeclarativeDebugFileReference(void) + ?style@QDeclarativeText@@QBE?AW4TextStyle@1@XZ @ 1282 NONAME ; enum QDeclarativeText::TextStyle QDeclarativeText::style(void) const + ??0QDeclarativeAbstractBinding@@QAE@XZ @ 1283 NONAME ; QDeclarativeAbstractBinding::QDeclarativeAbstractBinding(void) + ?staticMetaObject@QDeclarativeDebugEnginesQuery@@2UQMetaObject@@B @ 1284 NONAME ; struct QMetaObject const QDeclarativeDebugEnginesQuery::staticMetaObject + ?cancel@QDeclarativePixmapCache@@SAXABVQUrl@@PAVQObject@@@Z @ 1285 NONAME ABSENT ; void QDeclarativePixmapCache::cancel(class QUrl const &, class QObject *) + ?isError@QDeclarativeComponent@@QBE_NXZ @ 1286 NONAME ; bool QDeclarativeComponent::isError(void) const + ?qt_metacall@QDeclarativeTransition@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1287 NONAME ; int QDeclarativeTransition::qt_metacall(enum QMetaObject::Call, int, void * *) + ?type@QDeclarativeDomImport@@QBE?AW4Type@1@XZ @ 1288 NONAME ; enum QDeclarativeDomImport::Type QDeclarativeDomImport::type(void) const + ??1QDeclarativeDebugConnection@@UAE@XZ @ 1289 NONAME ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(void) + ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@H@Z @ 1290 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(int) const + ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 1291 NONAME ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *, int) + ?setFromState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 1292 NONAME ; void QDeclarativeTransition::setFromState(class QString const &) + ?metaObject@QDeclarativeDebugService@@UBEPBUQMetaObject@@XZ @ 1293 NONAME ; struct QMetaObject const * QDeclarativeDebugService::metaObject(void) const + ?state@QDeclarativeDebugQuery@@QBE?AW4State@1@XZ @ 1294 NONAME ; enum QDeclarativeDebugQuery::State QDeclarativeDebugQuery::state(void) const + ?setBottom@QDeclarativeScaleGrid@@QAEXH@Z @ 1295 NONAME ; void QDeclarativeScaleGrid::setBottom(int) + ?topMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1296 NONAME ; void QDeclarativeAnchors::topMarginChanged(void) + ?itemChange@QDeclarativeItem@@MAE?AVQVariant@@W4GraphicsItemChange@QGraphicsItem@@ABV2@@Z @ 1297 NONAME ; class QVariant QDeclarativeItem::itemChange(enum QGraphicsItem::GraphicsItemChange, class QVariant const &) + ?position@QDeclarativeDomObject@@QBEHXZ @ 1298 NONAME ; int QDeclarativeDomObject::position(void) const + ?update@QDeclarativeBinding@@UAEXV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1299 NONAME ; void QDeclarativeBinding::update(class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 1300 NONAME ; class QString QDeclarativeBehavior::tr(char const *, char const *) + ?isDebuggingEnabled@QDeclarativeDebugService@@SA_NXZ @ 1301 NONAME ; bool QDeclarativeDebugService::isDebuggingEnabled(void) + ?tr@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 1302 NONAME ; class QString QDeclarativeText::tr(char const *, char const *, int) + ?reset@QDeclarativeProperty@@QBE_NXZ @ 1303 NONAME ; bool QDeclarativeProperty::reset(void) const + ?objectDebugId@QDeclarativeDebugWatch@@QBEHXZ @ 1304 NONAME ; int QDeclarativeDebugWatch::objectDebugId(void) const + ?width@QDeclarativeItemPrivate@@UBEMXZ @ 1305 NONAME ; float QDeclarativeItemPrivate::width(void) const + ?d_func@QMetaMethodBuilder@@ABEPAVQMetaMethodBuilderPrivate@@XZ @ 1306 NONAME ; class QMetaMethodBuilderPrivate * QMetaMethodBuilder::d_func(void) const + ?isScript@Variant@QDeclarativeParser@@QBE_NXZ @ 1307 NONAME ; bool QDeclarativeParser::Variant::isScript(void) const + ?classBegin@QDeclarativeStateGroup@@UAEXXZ @ 1308 NONAME ; void QDeclarativeStateGroup::classBegin(void) + ?qt_metacast@QDeclarativeRectangle@@UAEPAXPBD@Z @ 1309 NONAME ; void * QDeclarativeRectangle::qt_metacast(char const *) + ?qt_metacast@QDeclarativeExpression@@UAEPAXPBD@Z @ 1310 NONAME ; void * QDeclarativeExpression::qt_metacast(char const *) + ?indexOfProperty@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1311 NONAME ; int QMetaObjectBuilder::indexOfProperty(class QByteArray const &) + ?vAlign@QDeclarativeText@@QBE?AW4VAlignment@1@XZ @ 1312 NONAME ; enum QDeclarativeText::VAlignment QDeclarativeText::vAlign(void) const + ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQByteArray@@@Z @ 1313 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QByteArray const &) + ??1QDeclarativeError@@QAE@XZ @ 1314 NONAME ; QDeclarativeError::~QDeclarativeError(void) + ?property@QDeclarativeProperty@@QBE?AVQMetaProperty@@XZ @ 1315 NONAME ; class QMetaProperty QDeclarativeProperty::property(void) const + ?tr@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 1316 NONAME ; class QString QDeclarativeText::tr(char const *, char const *) + ?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@PAVQDeclarativeContext@@@Z @ 1317 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &, class QDeclarativeContext *) + ??0QDeclarativeGridScaledImage@@QAE@XZ @ 1318 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(void) + ?setText@QDeclarativeText@@QAEXABVQString@@@Z @ 1319 NONAME ; void QDeclarativeText::setText(class QString const &) + ?setBaseline@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1320 NONAME ; void QDeclarativeAnchors::setBaseline(class QDeclarativeAnchorLine const &) + ?resetCenterIn@QDeclarativeAnchors@@QAEXXZ @ 1321 NONAME ; void QDeclarativeAnchors::resetCenterIn(void) + ?pixmapUrl@QDeclarativeGridScaledImage@@QBE?AVQString@@XZ @ 1322 NONAME ; class QString QDeclarativeGridScaledImage::pixmapUrl(void) const + ?name@QDeclarativeOpenMetaObject@@QBE?AVQByteArray@@H@Z @ 1323 NONAME ; class QByteArray QDeclarativeOpenMetaObject::name(int) const + ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 1324 NONAME ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *) + ?getStaticMetaObject@QDeclarativeAnchors@@SAABUQMetaObject@@XZ @ 1325 NONAME ; struct QMetaObject const & QDeclarativeAnchors::getStaticMetaObject(void) + ?qt_metacall@QDeclarativeEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1326 NONAME ; int QDeclarativeEngine::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@@Z @ 1327 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &) + ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 1328 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *) + ?setStaticMetacallFunction@QMetaObjectBuilder@@QAEXP6AHW4Call@QMetaObject@@HPAPAX@Z@Z @ 1329 NONAME ; void QMetaObjectBuilder::setStaticMetacallFunction(int (*)(enum QMetaObject::Call, int, void * *)) + ?properties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomProperty@@@@XZ @ 1330 NONAME ; class QList<class QDeclarativeDomProperty> QDeclarativeDomObject::properties(void) const + ??0QDeclarativeExpression@@QAE@PAVQDeclarativeContext@@PAVQObject@@ABVQString@@1@Z @ 1331 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContext *, class QObject *, class QString const &, class QObject *) + ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 1332 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *, int) + ?dateTimeFromString@QDeclarativeStringConverters@@YA?AVQDateTime@@ABVQString@@PA_N@Z @ 1333 NONAME ; class QDateTime QDeclarativeStringConverters::dateTimeFromString(class QString const &, bool *) + ?implicitWidth@QDeclarativeItem@@QBEMXZ @ 1334 NONAME ; float QDeclarativeItem::implicitWidth(void) const + ?metaObject@QDeclarativeContext@@UBEPBUQMetaObject@@XZ @ 1335 NONAME ; struct QMetaObject const * QDeclarativeContext::metaObject(void) const + ??0QDeclarativeContext@@AAE@PAVQDeclarativeContextData@@@Z @ 1336 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeContextData *) + ?maximumPacketSize@QPacketProtocol@@QBEHXZ @ 1337 NONAME ; int QPacketProtocol::maximumPacketSize(void) const + ??_EQDeclarativeDebuggerStatus@@UAE@I@Z @ 1338 NONAME ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(unsigned int) + ?error@QDeclarativeCustomParser@@IAEXABVQString@@@Z @ 1339 NONAME ; void QDeclarativeCustomParser::error(class QString const &) + ?messageReceived@QDeclarativeDebugService@@MAEXABVQByteArray@@@Z @ 1340 NONAME ; void QDeclarativeDebugService::messageReceived(class QByteArray const &) + ??0QDeclarativeParserStatus@@QAE@XZ @ 1341 NONAME ; QDeclarativeParserStatus::QDeclarativeParserStatus(void) + ?isNumber@Variant@QDeclarativeParser@@QBE_NXZ @ 1342 NONAME ; bool QDeclarativeParser::Variant::isNumber(void) const + ?getStaticMetaObject@QDeclarativeEngineDebug@@SAABUQMetaObject@@XZ @ 1343 NONAME ; struct QMetaObject const & QDeclarativeEngineDebug::getStaticMetaObject(void) + ??_EQDeclarativeEngine@@UAE@I@Z @ 1344 NONAME ; QDeclarativeEngine::~QDeclarativeEngine(unsigned int) + ??1QDeclarativeCustomParserNode@@QAE@XZ @ 1345 NONAME ; QDeclarativeCustomParserNode::~QDeclarativeCustomParserNode(void) + ??1QDeclarativeAction@@QAE@XZ @ 1346 NONAME ; QDeclarativeAction::~QDeclarativeAction(void) + ?resourcesLoading@QDeclarativeText@@QBEHXZ @ 1347 NONAME ; int QDeclarativeText::resourcesLoading(void) const + ?isBoolean@Variant@QDeclarativeParser@@QBE_NXZ @ 1348 NONAME ; bool QDeclarativeParser::Variant::isBoolean(void) const + ??0QDeclarativeAction@@QAE@XZ @ 1349 NONAME ; QDeclarativeAction::QDeclarativeAction(void) + ?signalOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 1350 NONAME ; int QDeclarativeOpenMetaObjectType::signalOffset(void) const + ?index@QMetaEnumBuilder@@QBEHXZ @ 1351 NONAME ; int QMetaEnumBuilder::index(void) const + ?setResettable@QMetaPropertyBuilder@@QAEX_N@Z @ 1352 NONAME ; void QMetaPropertyBuilder::setResettable(bool) + ??0QDeclarativeError@@QAE@ABV0@@Z @ 1353 NONAME ; QDeclarativeError::QDeclarativeError(class QDeclarativeError const &) + ?classInfoCount@QMetaObjectBuilder@@QBEHXZ @ 1354 NONAME ; int QMetaObjectBuilder::classInfoCount(void) const + ?isObject@QDeclarativeDomValue@@QBE_NXZ @ 1355 NONAME ; bool QDeclarativeDomValue::isObject(void) const + ?left@QDeclarativeScaleGrid@@QBEHXZ @ 1356 NONAME ; int QDeclarativeScaleGrid::left(void) const + ?qt_metacast@QDeclarativeDebugEnginesQuery@@UAEPAXPBD@Z @ 1357 NONAME ; void * QDeclarativeDebugEnginesQuery::qt_metacast(char const *) + ?d_func@QDeclarativeView@@AAEPAVQDeclarativeViewPrivate@@XZ @ 1358 NONAME ; class QDeclarativeViewPrivate * QDeclarativeView::d_func(void) + ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugPropertyWatch@@ABVQDeclarativeDebugPropertyReference@@PAVQObject@@@Z @ 1359 NONAME ; class QDeclarativeDebugPropertyWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugPropertyReference const &, class QObject *) + ?stateChanged@QDeclarativeStateGroup@@IAEXABVQString@@@Z @ 1360 NONAME ; void QDeclarativeStateGroup::stateChanged(class QString const &) + ?customStringConverter@QDeclarativeMetaType@@SAP6A?AVQVariant@@ABVQString@@@ZH@Z @ 1361 NONAME ; class QVariant (*)(class QString const &) QDeclarativeMetaType::customStringConverter(int) + ??0QDeclarativeDomValueValueSource@@QAE@XZ @ 1362 NONAME ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(void) + ?baselineOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 1363 NONAME ; void QDeclarativeAnchors::baselineOffsetChanged(void) + ?tr@QDeclarativeView@@SA?AVQString@@PBD0H@Z @ 1364 NONAME ; class QString QDeclarativeView::tr(char const *, char const *, int) + ??4QDeclarativeDebugFileReference@@QAEAAV0@ABV0@@Z @ 1365 NONAME ; class QDeclarativeDebugFileReference & QDeclarativeDebugFileReference::operator=(class QDeclarativeDebugFileReference const &) + ?eventFilter@QDeclarativeView@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 1366 NONAME ; bool QDeclarativeView::eventFilter(class QObject *, class QEvent *) + ??1QDeclarativeView@@UAE@XZ @ 1367 NONAME ; QDeclarativeView::~QDeclarativeView(void) + ?verticalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1368 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::verticalCenter(void) const + ?setIsFlag@QMetaEnumBuilder@@QAEX_N@Z @ 1369 NONAME ; void QMetaEnumBuilder::setIsFlag(bool) + ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 1370 NONAME ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *, int) + ?majorVersion@QDeclarativeType@@QBEHXZ @ 1371 NONAME ; int QDeclarativeType::majorVersion(void) const + ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 1372 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *) + ?baseUrl@QDeclarativeEngine@@QBE?AVQUrl@@XZ @ 1373 NONAME ; class QUrl QDeclarativeEngine::baseUrl(void) const + ??6QDeclarativeInfo@@QAEAAV0@PBX@Z @ 1374 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(void const *) + ?setTop@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1375 NONAME ; void QDeclarativeAnchors::setTop(class QDeclarativeAnchorLine const &) + ?setEnabled@QDeclarativeBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1376 NONAME ; void QDeclarativeBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ??_EQDeclarativeNetworkAccessManagerFactory@@UAE@I@Z @ 1377 NONAME ; QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory(unsigned int) + ?qmlTypes@QDeclarativeMetaType@@SA?AV?$QList@PAVQDeclarativeType@@@@XZ @ 1378 NONAME ; class QList<class QDeclarativeType *> QDeclarativeMetaType::qmlTypes(void) + ?valueTypeCoreIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1379 NONAME ; int QDeclarativePropertyPrivate::valueTypeCoreIndex(class QDeclarativeProperty const &) + ?writeEnumProperty@QDeclarativePropertyPrivate@@SA_NABVQMetaProperty@@HPAVQObject@@ABVQVariant@@H@Z @ 1380 NONAME ; bool QDeclarativePropertyPrivate::writeEnumProperty(class QMetaProperty const &, int, class QObject *, class QVariant const &, int) + ?setEnabled@QDeclarativeDebugClient@@QAEX_N@Z @ 1381 NONAME ; void QDeclarativeDebugClient::setEnabled(bool) + ??1QMetaObjectBuilder@@UAE@XZ @ 1382 NONAME ; QMetaObjectBuilder::~QMetaObjectBuilder(void) + ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 1383 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *) + ?clear@QPacket@@QAEXXZ @ 1384 NONAME ; void QPacket::clear(void) + ?getStaticMetaObject@QDeclarativeDebugClient@@SAABUQMetaObject@@XZ @ 1385 NONAME ; struct QMetaObject const & QDeclarativeDebugClient::getStaticMetaObject(void) + ??0QDeclarativeDomList@@QAE@ABV0@@Z @ 1386 NONAME ; QDeclarativeDomList::QDeclarativeDomList(class QDeclarativeDomList const &) + ?gridTop@QDeclarativeGridScaledImage@@QBEHXZ @ 1387 NONAME ; int QDeclarativeGridScaledImage::gridTop(void) const + ?setUrl@QDeclarativeError@@QAEXABVQUrl@@@Z @ 1388 NONAME ; void QDeclarativeError::setUrl(class QUrl const &) + ?setMaximumPacketSize@QPacketProtocol@@QAEHH@Z @ 1389 NONAME ; int QPacketProtocol::setMaximumPacketSize(int) + ??_EQDeclarativeAction@@QAE@I@Z @ 1390 NONAME ; QDeclarativeAction::~QDeclarativeAction(unsigned int) + ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 1391 NONAME ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *) + ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@@Z @ 1392 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &) + ?widthValid@QDeclarativeItem@@IBE_NXZ @ 1393 NONAME ; bool QDeclarativeItem::widthValid(void) const + ?staticMetaObject@QDeclarativeState@@2UQMetaObject@@B @ 1394 NONAME ; struct QMetaObject const QDeclarativeState::staticMetaObject + ?setAccess@QMetaMethodBuilder@@QAEXW4Access@QMetaMethod@@@Z @ 1395 NONAME ; void QMetaMethodBuilder::setAccess(enum QMetaMethod::Access) + ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@ABVQVariant@@@Z @ 1396 NONAME ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QDeclarativeContext *, class QVariant const &) + ?staticMetaObject@QDeclarativeDebugClient@@2UQMetaObject@@B @ 1397 NONAME ; struct QMetaObject const QDeclarativeDebugClient::staticMetaObject + ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 1398 NONAME ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *) + ?d_func@QDeclarativeExpression@@ABEPBVQDeclarativeExpressionPrivate@@XZ @ 1399 NONAME ; class QDeclarativeExpressionPrivate const * QDeclarativeExpression::d_func(void) const + ??1QDeclarativeValueType@@UAE@XZ @ 1400 NONAME ; QDeclarativeValueType::~QDeclarativeValueType(void) + ?setBaseUrl@QDeclarativeContext@@QAEXABVQUrl@@@Z @ 1401 NONAME ; void QDeclarativeContext::setBaseUrl(class QUrl const &) + ??_EQDeclarativeAbstractBinding@@UAE@I@Z @ 1402 NONAME ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(unsigned int) + ?queryExpressionResult@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@PAVQObject@@@Z @ 1403 NONAME ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::queryExpressionResult(int, class QString const &, class QObject *) + ?indexOfMethod@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1404 NONAME ; int QMetaObjectBuilder::indexOfMethod(class QByteArray const &) + ?setCached@QDeclarativeOpenMetaObject@@QAEX_N@Z @ 1405 NONAME ; void QDeclarativeOpenMetaObject::setCached(bool) + ?length@QDeclarativeDomList@@QBEHXZ @ 1406 NONAME ; int QDeclarativeDomList::length(void) const + ?horizontalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 1407 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::horizontalTileRule(void) const + ??0QDeclarativeCustomParserProperty@@QAE@XZ @ 1408 NONAME ; QDeclarativeCustomParserProperty::QDeclarativeCustomParserProperty(void) + ??1QDeclarativeEngineDebug@@UAE@XZ @ 1409 NONAME ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(void) + ?qt_metacall@QDeclarativeEngineDebug@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1410 NONAME ; int QDeclarativeEngineDebug::qt_metacall(enum QMetaObject::Call, int, void * *) + ?q_func@QDeclarativeItemPrivate@@ABEPBVQDeclarativeItem@@XZ @ 1411 NONAME ; class QDeclarativeItem const * QDeclarativeItemPrivate::q_func(void) const + ?customParser@QDeclarativeType@@QBEPAVQDeclarativeCustomParser@@XZ @ 1412 NONAME ; class QDeclarativeCustomParser * QDeclarativeType::customParser(void) const + ?setSourceLocation@QDeclarativeExpression@@QAEXABVQString@@H@Z @ 1413 NONAME ; void QDeclarativeExpression::setSourceLocation(class QString const &, int) + ?equal@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1414 NONAME ; bool QDeclarativePropertyPrivate::equal(struct QMetaObject const *, struct QMetaObject const *) + ??_EQDeclarativeExtensionPlugin@@UAE@I@Z @ 1415 NONAME ; QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin(unsigned int) + ?write@QDeclarativePropertyPrivate@@SA_NPAVQObject@@ABUData@QDeclarativePropertyCache@@ABVQVariant@@PAVQDeclarativeContextData@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1416 NONAME ; bool QDeclarativePropertyPrivate::write(class QObject *, struct QDeclarativePropertyCache::Data const &, class QVariant const &, class QDeclarativeContextData *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ?debugId@QDeclarativeDebugEngineReference@@QBEHXZ @ 1417 NONAME ; int QDeclarativeDebugEngineReference::debugId(void) const + ?metaObject@QDeclarativeDebugEnginesQuery@@UBEPBUQMetaObject@@XZ @ 1418 NONAME ; struct QMetaObject const * QDeclarativeDebugEnginesQuery::metaObject(void) const + ??_EQDeclarativeScaleGrid@@UAE@I@Z @ 1419 NONAME ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(unsigned int) + ??1QDeclarativeDebugPropertyReference@@QAE@XZ @ 1420 NONAME ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(void) + ?componentComplete@QDeclarativeAnchors@@QAEXXZ @ 1421 NONAME ; void QDeclarativeAnchors::componentComplete(void) + ??1QDeclarativeDomObject@@QAE@XZ @ 1422 NONAME ; QDeclarativeDomObject::~QDeclarativeDomObject(void) + ?expression@QDeclarativeDebugObjectExpressionWatch@@QBE?AVQString@@XZ @ 1423 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::expression(void) const + ?metaObject@QListModelInterface@@UBEPBUQMetaObject@@XZ @ 1424 NONAME ; struct QMetaObject const * QListModelInterface::metaObject(void) const + ?key@QMetaEnumBuilder@@QBE?AVQByteArray@@H@Z @ 1425 NONAME ; class QByteArray QMetaEnumBuilder::key(int) const + ?d_func@QMetaEnumBuilder@@ABEPAVQMetaEnumBuilderPrivate@@XZ @ 1426 NONAME ; class QMetaEnumBuilderPrivate * QMetaEnumBuilder::d_func(void) const + ??6QDeclarativeInfo@@QAEAAV0@PBD@Z @ 1427 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(char const *) + ?d_func@QDeclarativeState@@AAEPAVQDeclarativeStatePrivate@@XZ @ 1428 NONAME ; class QDeclarativeStatePrivate * QDeclarativeState::d_func(void) + ??0QDeclarativeDebugEnginesQuery@@AAE@PAVQObject@@@Z @ 1429 NONAME ; QDeclarativeDebugEnginesQuery::QDeclarativeDebugEnginesQuery(class QObject *) + ?bottomChanged@QDeclarativeAnchors@@IAEXXZ @ 1430 NONAME ; void QDeclarativeAnchors::bottomChanged(void) + ?qListTypeId@QDeclarativeType@@QBEHXZ @ 1431 NONAME ; int QDeclarativeType::qListTypeId(void) const + ?setSelectedState@QDeclarativeDebuggerStatus@@UAEX_N@Z @ 1432 NONAME ; void QDeclarativeDebuggerStatus::setSelectedState(bool) + ?staticMetaObject@QDeclarativeEngineDebug@@2UQMetaObject@@B @ 1433 NONAME ; struct QMetaObject const QDeclarativeEngineDebug::staticMetaObject + ?setExtends@QDeclarativeState@@QAEXABVQString@@@Z @ 1434 NONAME ; void QDeclarativeState::setExtends(class QString const &) + ??4QDeclarativeError@@QAEAAV0@ABV0@@Z @ 1435 NONAME ; class QDeclarativeError & QDeclarativeError::operator=(class QDeclarativeError const &) + ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 1436 NONAME ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *, int) + ?d_func@QDeclarativeTransition@@AAEPAVQDeclarativeTransitionPrivate@@XZ @ 1437 NONAME ; class QDeclarativeTransitionPrivate * QDeclarativeTransition::d_func(void) + ?propertyWritten@QDeclarativeOpenMetaObject@@MAEXH@Z @ 1438 NONAME ; void QDeclarativeOpenMetaObject::propertyWritten(int) + ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1439 NONAME ; class QString QListModelInterface::trUtf8(char const *, char const *) + ?setColumnNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 1440 NONAME ; void QDeclarativeDebugFileReference::setColumnNumber(int) + ?drawRect@QDeclarativeRectangle@@AAEXAAVQPainter@@@Z @ 1441 NONAME ; void QDeclarativeRectangle::drawRect(class QPainter &) + ?read@QDeclarativeProperty@@QBE?AVQVariant@@XZ @ 1442 NONAME ; class QVariant QDeclarativeProperty::read(void) const + ?isEmpty@QDeclarativePropertyMap@@QBE_NXZ @ 1443 NONAME ; bool QDeclarativePropertyMap::isEmpty(void) const + ?wantsFocus@QDeclarativeItem@@QBE_NXZ @ 1444 NONAME ; bool QDeclarativeItem::wantsFocus(void) const + ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 1445 NONAME ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData const &) + ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 1446 NONAME ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *, int) + ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContext@@1@Z @ 1447 NONAME ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContext *, class QObject *) + ?tr@QDeclarativeItem@@SA?AVQString@@PBD0@Z @ 1448 NONAME ; class QString QDeclarativeItem::tr(char const *, char const *) + ??6QDeclarativeInfo@@QAEAAV0@G@Z @ 1449 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned short) + ??0QDeclarativeStateOperation@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 1450 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObjectPrivate &, class QObject *) + ?notifyOnValueChanged@QDeclarativeExpression@@QBE_NXZ @ 1451 NONAME ; bool QDeclarativeExpression::notifyOnValueChanged(void) const + ?keyPressPreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 1452 NONAME ; void QDeclarativeItem::keyPressPreHandler(class QKeyEvent *) + ?trUtf8@QDeclarativeItem@@SA?AVQString@@PBD0H@Z @ 1453 NONAME ; class QString QDeclarativeItem::trUtf8(char const *, char const *, int) + ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugFileReference@@PAVQObject@@@Z @ 1454 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugFileReference const &, class QObject *) + ?paintedHeight@QDeclarativeText@@QBEMXZ @ 1455 NONAME ; float QDeclarativeText::paintedHeight(void) const + ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1456 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *) + ?transform@QDeclarativeItem@@QAE?AV?$QDeclarativeListProperty@VQGraphicsTransform@@@@XZ @ 1457 NONAME ; class QDeclarativeListProperty<class QGraphicsTransform> QDeclarativeItem::transform(void) + ?leftChanged@QDeclarativeAnchors@@IAEXXZ @ 1458 NONAME ; void QDeclarativeAnchors::leftChanged(void) + ?topChanged@QDeclarativeAnchors@@IAEXXZ @ 1459 NONAME ; void QDeclarativeAnchors::topChanged(void) + ??0QMetaObjectBuilder@@QAE@XZ @ 1460 NONAME ; QMetaObjectBuilder::QMetaObjectBuilder(void) + ?asBoolean@Variant@QDeclarativeParser@@QBE_NXZ @ 1461 NONAME ; bool QDeclarativeParser::Variant::asBoolean(void) const + ?removeEnumerator@QMetaObjectBuilder@@QAEXH@Z @ 1462 NONAME ; void QMetaObjectBuilder::removeEnumerator(int) + ?url@QDeclarativeDomObject@@QBE?AVQUrl@@XZ @ 1463 NONAME ; class QUrl QDeclarativeDomObject::url(void) const + ?getStaticMetaObject@QDeclarativeScaleGrid@@SAABUQMetaObject@@XZ @ 1464 NONAME ; struct QMetaObject const & QDeclarativeScaleGrid::getStaticMetaObject(void) + ?signalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@@Z @ 1465 NONAME ; class QDeclarativeExpression * QDeclarativePropertyPrivate::signalExpression(class QDeclarativeProperty const &) + ?networkAccessManagerFactory@QDeclarativeEngine@@QBEPAVQDeclarativeNetworkAccessManagerFactory@@XZ @ 1466 NONAME ; class QDeclarativeNetworkAccessManagerFactory * QDeclarativeEngine::networkAccessManagerFactory(void) const + ?isStringList@Variant@QDeclarativeParser@@QBE_NXZ @ 1467 NONAME ; bool QDeclarativeParser::Variant::isStringList(void) const + ?packetWritten@QPacketProtocol@@IAEXXZ @ 1468 NONAME ; void QPacketProtocol::packetWritten(void) + ?getStaticMetaObject@QDeclarativeDebugObjectQuery@@SAABUQMetaObject@@XZ @ 1469 NONAME ; struct QMetaObject const & QDeclarativeDebugObjectQuery::getStaticMetaObject(void) + ?isSignalProperty@QDeclarativeProperty@@QBE_NXZ @ 1470 NONAME ; bool QDeclarativeProperty::isSignalProperty(void) const + ?d_func@QDeclarativeDebugService@@AAEPAVQDeclarativeDebugServicePrivate@@XZ @ 1471 NONAME ; class QDeclarativeDebugServicePrivate * QDeclarativeDebugService::d_func(void) + ?qmlTypeNames@QDeclarativeMetaType@@SA?AV?$QList@VQByteArray@@@@XZ @ 1472 NONAME ; class QList<class QByteArray> QDeclarativeMetaType::qmlTypeNames(void) + ?creationContext@QDeclarativeComponent@@QBEPAVQDeclarativeContext@@XZ @ 1473 NONAME ; class QDeclarativeContext * QDeclarativeComponent::creationContext(void) const + ?componentComplete@QDeclarativeItem@@MAEXXZ @ 1474 NONAME ; void QDeclarativeItem::componentComplete(void) + ?enabledChanged@QDeclarativeBehavior@@IAEXXZ @ 1475 NONAME ; void QDeclarativeBehavior::enabledChanged(void) + ?staticMetaObject@QDeclarativeTransition@@2UQMetaObject@@B @ 1476 NONAME ; struct QMetaObject const QDeclarativeTransition::staticMetaObject + ??0QDeclarativeInfo@@AAE@PAVQDeclarativeInfoPrivate@@@Z @ 1477 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfoPrivate *) + ?name@QDeclarativeDebugContextReference@@QBE?AVQString@@XZ @ 1478 NONAME ; class QString QDeclarativeDebugContextReference::name(void) const + ?propertyIndex@QDeclarativeBinding@@UAEHXZ @ 1479 NONAME ; int QDeclarativeBinding::propertyIndex(void) + ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 1480 NONAME ; class QString QDeclarativeDebugWatch::tr(char const *, char const *, int) + ?qt_metacast@QDeclarativePropertyMap@@UAEPAXPBD@Z @ 1481 NONAME ; void * QDeclarativePropertyMap::qt_metacast(char const *) + ?classBegin@QDeclarativeAnchors@@QAEXXZ @ 1482 NONAME ; void QDeclarativeAnchors::classBegin(void) + ?color@QDeclarativeText@@QBE?AVQColor@@XZ @ 1483 NONAME ; class QColor QDeclarativeText::color(void) const + ?metaObject@QPacketProtocol@@UBEPBUQMetaObject@@XZ @ 1484 NONAME ; struct QMetaObject const * QPacketProtocol::metaObject(void) const + ??4QDeclarativeGridScaledImage@@QAEAAV0@ABV0@@Z @ 1485 NONAME ; class QDeclarativeGridScaledImage & QDeclarativeGridScaledImage::operator=(class QDeclarativeGridScaledImage const &) + ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 1486 NONAME ; class QString QDeclarativeScaleGrid::tr(char const *, char const *) + ??1QDeclarativeScriptString@@QAE@XZ @ 1487 NONAME ; QDeclarativeScriptString::~QDeclarativeScriptString(void) + ??1QDeclarativePropertyValueSource@@UAE@XZ @ 1488 NONAME ; QDeclarativePropertyValueSource::~QDeclarativePropertyValueSource(void) + ?position@QDeclarativeDomList@@QBEHXZ @ 1489 NONAME ; int QDeclarativeDomList::position(void) const + ?toQObject@QDeclarativeMetaType@@SAPAVQObject@@ABVQVariant@@PA_N@Z @ 1490 NONAME ; class QObject * QDeclarativeMetaType::toQObject(class QVariant const &, bool *) + ??_EQDeclarativeItem@@UAE@I@Z @ 1491 NONAME ; QDeclarativeItem::~QDeclarativeItem(unsigned int) + ?getStaticMetaObject@QDeclarativeContext@@SAABUQMetaObject@@XZ @ 1492 NONAME ; struct QMetaObject const & QDeclarativeContext::getStaticMetaObject(void) + ?metaObject@QDeclarativeListModel@@UBEPBUQMetaObject@@XZ @ 1493 NONAME ; struct QMetaObject const * QDeclarativeListModel::metaObject(void) const + ?transformChanged@QDeclarativeItemPrivate@@UAEXXZ @ 1494 NONAME ; void QDeclarativeItemPrivate::transformChanged(void) + ?remove@QDeclarativeListModel@@QAEXH@Z @ 1495 NONAME ; void QDeclarativeListModel::remove(int) + ?setResizeMode@QDeclarativeView@@QAEXW4ResizeMode@1@@Z @ 1496 NONAME ; void QDeclarativeView::setResizeMode(enum QDeclarativeView::ResizeMode) + ?left@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1497 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::left(void) const + ?flags@QMetaObjectBuilder@@QBE?AV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@XZ @ 1498 NONAME ; class QFlags<enum QMetaObjectBuilder::MetaObjectFlag> QMetaObjectBuilder::flags(void) const + ??0QDeclarativeItem@@IAE@AAVQDeclarativeItemPrivate@@PAV0@@Z @ 1499 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItemPrivate &, class QDeclarativeItem *) + ??0QDeclarativeContext@@QAE@PAV0@PAVQObject@@@Z @ 1500 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeContext *, class QObject *) + ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 1501 NONAME ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *) + ??1QDeclarativeDebugEnginesQuery@@UAE@XZ @ 1502 NONAME ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(void) + ?getStaticMetaObject@QDeclarativeTransition@@SAABUQMetaObject@@XZ @ 1503 NONAME ; struct QMetaObject const & QDeclarativeTransition::getStaticMetaObject(void) + ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 1504 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *, int) + ?metaObject@QDeclarativePropertyMap@@UBEPBUQMetaObject@@XZ @ 1505 NONAME ; struct QMetaObject const * QDeclarativePropertyMap::metaObject(void) const + ?componentRoot@QDeclarativeDomComponent@@QBE?AVQDeclarativeDomObject@@XZ @ 1506 NONAME ; class QDeclarativeDomObject QDeclarativeDomComponent::componentRoot(void) const + ?metaObject@QDeclarativeDebugConnection@@UBEPBUQMetaObject@@XZ @ 1507 NONAME ; struct QMetaObject const * QDeclarativeDebugConnection::metaObject(void) const + ?setTag@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1508 NONAME ; void QMetaMethodBuilder::setTag(class QByteArray const &) + ?objects@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 1509 NONAME ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugContextReference::objects(void) const + ??4Variant@QDeclarativeParser@@QAEAAV01@ABV01@@Z @ 1510 NONAME ; class QDeclarativeParser::Variant & QDeclarativeParser::Variant::operator=(class QDeclarativeParser::Variant const &) + ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1511 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *) + ?setScopeObject@QDeclarativeScriptString@@QAEXPAVQObject@@@Z @ 1512 NONAME ; void QDeclarativeScriptString::setScopeObject(class QObject *) + ??1QDeclarativeBinding@@MAE@XZ @ 1513 NONAME ; QDeclarativeBinding::~QDeclarativeBinding(void) + ?importPlugin@QDeclarativeEngine@@QAE_NABVQString@@0PAV2@@Z @ 1514 NONAME ; bool QDeclarativeEngine::importPlugin(class QString const &, class QString const &, class QString *) + ?setBottomMargin@QDeclarativeAnchors@@QAEXM@Z @ 1515 NONAME ; void QDeclarativeAnchors::setBottomMargin(float) + ?geometryChanged@QDeclarativeItem@@MAEXABVQRectF@@0@Z @ 1516 NONAME ; void QDeclarativeItem::geometryChanged(class QRectF const &, class QRectF const &) + ?toValueSource@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueSource@@XZ @ 1517 NONAME ; class QDeclarativeDomValueValueSource QDeclarativeDomValue::toValueSource(void) const + ?hAlign@QDeclarativeText@@QBE?AW4HAlignment@1@XZ @ 1518 NONAME ; enum QDeclarativeText::HAlignment QDeclarativeText::hAlign(void) const + ?when@QDeclarativeState@@QBEPAVQDeclarativeBinding@@XZ @ 1519 NONAME ; class QDeclarativeBinding * QDeclarativeState::when(void) const + ?setRootObject@QDeclarativeView@@MAEXPAVQObject@@@Z @ 1520 NONAME ; void QDeclarativeView::setRootObject(class QObject *) + ?resetBottom@QDeclarativeAnchors@@QAEXXZ @ 1521 NONAME ; void QDeclarativeAnchors::resetBottom(void) + ?qt_metacall@QDeclarativePropertyMap@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1522 NONAME ; int QDeclarativePropertyMap::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QDeclarativeDebugEngineReference@@QAE@ABV0@@Z @ 1523 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(class QDeclarativeDebugEngineReference const &) + ?objectDebugId@QDeclarativeDebugPropertyReference@@QBEHXZ @ 1524 NONAME ; int QDeclarativeDebugPropertyReference::objectDebugId(void) const + ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 1525 NONAME ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *) + ??AQDeclarativeValueTypeFactory@@QBEPAVQDeclarativeValueType@@H@Z @ 1526 NONAME ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::operator[](int) const + ?siblingOrderChange@QDeclarativeItemPrivate@@UAEXXZ @ 1527 NONAME ; void QDeclarativeItemPrivate::siblingOrderChange(void) + ??1QDeclarativeState@@UAE@XZ @ 1528 NONAME ; QDeclarativeState::~QDeclarativeState(void) + ?paint@QDeclarativeText@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1529 NONAME ; void QDeclarativeText::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) + ??1QDeclarativeStateGroup@@UAE@XZ @ 1530 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(void) + ?setEditable@QMetaPropertyBuilder@@QAEX_N@Z @ 1531 NONAME ; void QMetaPropertyBuilder::setEditable(bool) + ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@PAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1532 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QDeclarativeProperty const &, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>) + ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1533 NONAME ; class QString QDeclarativeBinding::trUtf8(char const *, char const *) + ?progress@QDeclarativeComponent@@QBEMXZ @ 1534 NONAME ; float QDeclarativeComponent::progress(void) const + ?d_func@QDeclarativeState@@ABEPBVQDeclarativeStatePrivate@@XZ @ 1535 NONAME ; class QDeclarativeStatePrivate const * QDeclarativeState::d_func(void) const + ??0QListModelInterface@@QAE@PAVQObject@@@Z @ 1536 NONAME ; QListModelInterface::QListModelInterface(class QObject *) + ?pointFFromString@QDeclarativeStringConverters@@YA?AVQPointF@@ABVQString@@PA_N@Z @ 1537 NONAME ; class QPointF QDeclarativeStringConverters::pointFFromString(class QString const &, bool *) + ?propertyCreated@QDeclarativeOpenMetaObject@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 1538 NONAME ; void QDeclarativeOpenMetaObject::propertyCreated(int, class QMetaPropertyBuilder &) + ?d_func@QDeclarativeView@@ABEPBVQDeclarativeViewPrivate@@XZ @ 1539 NONAME ; class QDeclarativeViewPrivate const * QDeclarativeView::d_func(void) const + ?rootObject@QDeclarativeView@@QBEPAVQGraphicsObject@@XZ @ 1540 NONAME ; class QGraphicsObject * QDeclarativeView::rootObject(void) const + ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 1541 NONAME ; class QString QDeclarativeBinding::tr(char const *, char const *, int) + ?queryObjectRecursive@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1542 NONAME ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObjectRecursive(class QDeclarativeDebugObjectReference const &, class QObject *) + ?prepare@QDeclarativeTransition@@QAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@PAVQDeclarativeTransitionManager@@@Z @ 1543 NONAME ; void QDeclarativeTransition::prepare(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, class QDeclarativeTransitionManager *) + ??6QDeclarativeInfo@@QAEAAV0@ABVQUrl@@@Z @ 1544 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QUrl const &) + ?scopeObject@QDeclarativeExpression@@QBEPAVQObject@@XZ @ 1545 NONAME ; class QObject * QDeclarativeExpression::scopeObject(void) const + ?isValid@QDeclarativeContext@@QBE_NXZ @ 1546 NONAME ; bool QDeclarativeContext::isValid(void) const + ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 1547 NONAME ; class QString QDeclarativeValueType::trUtf8(char const *, char const *, int) + ?qmlAttachedPropertiesObjectById@@YAPAVQObject@@HPBV1@_N@Z @ 1548 NONAME ; class QObject * qmlAttachedPropertiesObjectById(int, class QObject const *, bool) + ?d_func@QDeclarativePixmapReply@@ABEPBVQDeclarativePixmapReplyPrivate@@XZ @ 1549 NONAME ABSENT ; class QDeclarativePixmapReplyPrivate const * QDeclarativePixmapReply::d_func(void) const + ?constructorCount@QMetaObjectBuilder@@QBEHXZ @ 1550 NONAME ; int QMetaObjectBuilder::constructorCount(void) const + ??0QDeclarativeDomValueValueInterceptor@@QAE@ABV0@@Z @ 1551 NONAME ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(class QDeclarativeDomValueValueInterceptor const &) + ?object@QDeclarativeDebugObjectQuery@@QBE?AVQDeclarativeDebugObjectReference@@XZ @ 1552 NONAME ; class QDeclarativeDebugObjectReference QDeclarativeDebugObjectQuery::object(void) const + ??0QMetaPropertyBuilder@@QAE@XZ @ 1553 NONAME ; QMetaPropertyBuilder::QMetaPropertyBuilder(void) + ?toMetaObject@QMetaObjectBuilder@@QBEPAUQMetaObject@@XZ @ 1554 NONAME ; struct QMetaObject * QMetaObjectBuilder::toMetaObject(void) const + ?d_func@QDeclarativeEngine@@AAEPAVQDeclarativeEnginePrivate@@XZ @ 1555 NONAME ; class QDeclarativeEnginePrivate * QDeclarativeEngine::d_func(void) + ?forcedHeight@QDeclarativePixmapReply@@QBEHXZ @ 1556 NONAME ABSENT ; int QDeclarativePixmapReply::forcedHeight(void) const + ?staticMetaObject@QDeclarativeRectangle@@2UQMetaObject@@B @ 1557 NONAME ; struct QMetaObject const QDeclarativeRectangle::staticMetaObject + ?addSignal@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1558 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addSignal(class QByteArray const &) + ?getStaticMetaObject@QDeclarativeStateGroup@@SAABUQMetaObject@@XZ @ 1559 NONAME ; struct QMetaObject const & QDeclarativeStateGroup::getStaticMetaObject(void) + ?childrenRectChanged@QDeclarativeItem@@IAEXABVQRectF@@@Z @ 1560 NONAME ; void QDeclarativeItem::childrenRectChanged(class QRectF const &) + ?isDesignable@QDeclarativeProperty@@QBE_NXZ @ 1561 NONAME ; bool QDeclarativeProperty::isDesignable(void) const + ?propertyTypeCategory@QDeclarativePropertyPrivate@@QBE?AW4PropertyTypeCategory@QDeclarativeProperty@@XZ @ 1562 NONAME ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativePropertyPrivate::propertyTypeCategory(void) const + ?setSize@QDeclarativeItem@@QAEXABVQSizeF@@@Z @ 1563 NONAME ; void QDeclarativeItem::setSize(class QSizeF const &) + ?generateRoundedRect@QDeclarativeRectangle@@AAEXXZ @ 1564 NONAME ; void QDeclarativeRectangle::generateRoundedRect(void) + ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 1565 NONAME ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *) + ?propertyTypeCategory@QDeclarativeProperty@@QBE?AW4PropertyTypeCategory@1@XZ @ 1566 NONAME ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativeProperty::propertyTypeCategory(void) const + ??0QPacketAutoSend@@AAE@PAVQPacketProtocol@@@Z @ 1567 NONAME ; QPacketAutoSend::QPacketAutoSend(class QPacketProtocol *) + ?keyCount@QMetaEnumBuilder@@QBEHXZ @ 1568 NONAME ; int QMetaEnumBuilder::keyCount(void) const + ??1QDeclarativeDomProperty@@QAE@XZ @ 1569 NONAME ; QDeclarativeDomProperty::~QDeclarativeDomProperty(void) + ?sendMessage@QDeclarativeDebugService@@QAEXABVQByteArray@@@Z @ 1570 NONAME ; void QDeclarativeDebugService::sendMessage(class QByteArray const &) + ?context@QDeclarativeScriptString@@QBEPAVQDeclarativeContext@@XZ @ 1571 NONAME ; class QDeclarativeContext * QDeclarativeScriptString::context(void) const + ?queryObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1572 NONAME ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObject(class QDeclarativeDebugObjectReference const &, class QObject *) + ?tr@QDeclarativePropertyMap@@SA?AVQString@@PBD0H@Z @ 1573 NONAME ; class QString QDeclarativePropertyMap::tr(char const *, char const *, int) + ?setNotifyOnValueChanged@QDeclarativeExpression@@QAEX_N@Z @ 1574 NONAME ; void QDeclarativeExpression::setNotifyOnValueChanged(bool) + ??0QDeclarativeExpression@@IAE@PAVQDeclarativeContextData@@PAVQObject@@ABVQString@@AAVQDeclarativeExpressionPrivate@@@Z @ 1575 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, class QObject *, class QString const &, class QDeclarativeExpressionPrivate &) + ?fillChanged@QDeclarativeAnchors@@IAEXXZ @ 1576 NONAME ; void QDeclarativeAnchors::fillChanged(void) + ?resources_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 1577 NONAME ; void QDeclarativeItemPrivate::resources_append(class QDeclarativeListProperty<class QObject> *, class QObject *) + ??0QDeclarativeComponent@@IAE@AAVQDeclarativeComponentPrivate@@PAVQObject@@@Z @ 1578 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeComponentPrivate &, class QObject *) + ?height@QDeclarativeItem@@QBEMXZ @ 1579 NONAME ; float QDeclarativeItem::height(void) const + ?minorVersion@QDeclarativeType@@QBEHXZ @ 1580 NONAME ; int QDeclarativeType::minorVersion(void) const + ?qt_metacall@QDeclarativeText@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1581 NONAME ; int QDeclarativeText::qt_metacall(enum QMetaObject::Call, int, void * *) + ?event@QDeclarativePixmapReply@@MAE_NPAVQEvent@@@Z @ 1582 NONAME ABSENT ; bool QDeclarativePixmapReply::event(class QEvent *) + ?isConnected@QDeclarativeDebugConnection@@QBE_NXZ @ 1583 NONAME ; bool QDeclarativeDebugConnection::isConnected(void) const + ?trUtf8@QDeclarativePixmapCache@@SA?AVQString@@PBD0@Z @ 1584 NONAME ABSENT ; class QString QDeclarativePixmapCache::trUtf8(char const *, char const *) + ??6QDeclarativeInfo@@QAEAAV0@I@Z @ 1585 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned int) + ?setNetworkAccessManagerFactory@QDeclarativeEngine@@QAEXPAVQDeclarativeNetworkAccessManagerFactory@@@Z @ 1586 NONAME ; void QDeclarativeEngine::setNetworkAccessManagerFactory(class QDeclarativeNetworkAccessManagerFactory *) + ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 1587 NONAME ; class QString QDeclarativeDebugQuery::tr(char const *, char const *, int) + ??AQDeclarativePropertyMap@@QAEAAVQVariant@@ABVQString@@@Z @ 1588 NONAME ; class QVariant & QDeclarativePropertyMap::operator[](class QString const &) + ??0Variant@QDeclarativeParser@@QAE@_N@Z @ 1589 NONAME ; QDeclarativeParser::Variant::Variant(bool) + ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 1590 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *, int) + ??0QDeclarativeStateGroup@@QAE@PAVQObject@@@Z @ 1591 NONAME ; QDeclarativeStateGroup::QDeclarativeStateGroup(class QObject *) + ?count@QDeclarativeListReference@@QBEHXZ @ 1592 NONAME ; int QDeclarativeListReference::count(void) const + ?location@QDeclarativeCustomParserProperty@@QBE?AULocation@QDeclarativeParser@@XZ @ 1593 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserProperty::location(void) const + ?metaObject@QDeclarativePen@@UBEPBUQMetaObject@@XZ @ 1594 NONAME ; struct QMetaObject const * QDeclarativePen::metaObject(void) const + ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0@Z @ 1595 NONAME ABSENT ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *) + ?url@QDeclarativeError@@QBE?AVQUrl@@XZ @ 1596 NONAME ; class QUrl QDeclarativeError::url(void) const + ?isBinding@QDeclarativeDomValue@@QBE_NXZ @ 1597 NONAME ; bool QDeclarativeDomValue::isBinding(void) const + ?name@QDeclarativeProperty@@QBE?AVQString@@XZ @ 1598 NONAME ; class QString QDeclarativeProperty::name(void) const + ?asString@Variant@QDeclarativeParser@@QBE?AVQString@@XZ @ 1599 NONAME ; class QString QDeclarativeParser::Variant::asString(void) const + ?trUtf8@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0@Z @ 1600 NONAME ; class QString QDeclarativeExtensionPlugin::trUtf8(char const *, char const *) + ?sendMessage@QDeclarativeDebugClient@@QAEXABVQByteArray@@@Z @ 1601 NONAME ; void QDeclarativeDebugClient::sendMessage(class QByteArray const &) + ?canAppend@QDeclarativeListReference@@QBE_NXZ @ 1602 NONAME ; bool QDeclarativeListReference::canAppend(void) const + ??_EQDeclarativeComponent@@UAE@I@Z @ 1603 NONAME ; QDeclarativeComponent::~QDeclarativeComponent(unsigned int) + ?get@QDeclarativeItemPrivate@@SAPAV1@PAVQDeclarativeItem@@@Z @ 1604 NONAME ; class QDeclarativeItemPrivate * QDeclarativeItemPrivate::get(class QDeclarativeItem *) + ?staticMetaObject@QDeclarativeView@@2UQMetaObject@@B @ 1605 NONAME ; struct QMetaObject const QDeclarativeView::staticMetaObject + ?objectToString@QDeclarativeDebugService@@SA?AVQString@@PAVQObject@@@Z @ 1606 NONAME ; class QString QDeclarativeDebugService::objectToString(class QObject *) + ?defaultValue@QDeclarativeDomDynamicProperty@@QBE?AVQDeclarativeDomProperty@@XZ @ 1607 NONAME ; class QDeclarativeDomProperty QDeclarativeDomDynamicProperty::defaultValue(void) const + ?relatedMetaObject@QMetaObjectBuilder@@QBEPBUQMetaObject@@H@Z @ 1608 NONAME ; struct QMetaObject const * QMetaObjectBuilder::relatedMetaObject(int) const + ?d_func@QDeclarativePixmapReply@@AAEPAVQDeclarativePixmapReplyPrivate@@XZ @ 1609 NONAME ABSENT ; class QDeclarativePixmapReplyPrivate * QDeclarativePixmapReply::d_func(void) + ?addKey@QMetaEnumBuilder@@QAEHABVQByteArray@@H@Z @ 1610 NONAME ; int QMetaEnumBuilder::addKey(class QByteArray const &, int) + ?setPosHelper@QDeclarativeItemPrivate@@UAEXABVQPointF@@@Z @ 1611 NONAME ; void QDeclarativeItemPrivate::setPosHelper(class QPointF const &) + ?attributes@QMetaMethodBuilder@@QBEHXZ @ 1612 NONAME ; int QMetaMethodBuilder::attributes(void) const + ?lineNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 1613 NONAME ; int QDeclarativeDebugFileReference::lineNumber(void) const + ?setTop@QDeclarativeScaleGrid@@QAEXH@Z @ 1614 NONAME ; void QDeclarativeScaleGrid::setTop(int) + ?metaObject@QDeclarativeItem@@UBEPBUQMetaObject@@XZ @ 1615 NONAME ; struct QMetaObject const * QDeclarativeItem::metaObject(void) const + ?clear@QDeclarativeAbstractBinding@@IAEXXZ @ 1616 NONAME ; void QDeclarativeAbstractBinding::clear(void) + ?start@QDeclarativeItemPrivate@@SAXAAVQElapsedTimer@@@Z @ 1617 NONAME ; void QDeclarativeItemPrivate::start(class QElapsedTimer &) + ?reloadWithResources@QDeclarativeText@@AAEXXZ @ 1618 NONAME ABSENT ; void QDeclarativeText::reloadWithResources(void) + ?stringToRule@QDeclarativeGridScaledImage@@CA?AW4TileMode@QDeclarativeBorderImage@@ABVQString@@@Z @ 1619 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::stringToRule(class QString const &) + ?setHorizontalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1620 NONAME ; void QDeclarativeAnchors::setHorizontalCenter(class QDeclarativeAnchorLine const &) + ?setFocus@QDeclarativeItem@@QAEX_N@Z @ 1621 NONAME ; void QDeclarativeItem::setFocus(bool) + ?connectNotifySignal@QDeclarativeProperty@@QBE_NPAVQObject@@PBD@Z @ 1622 NONAME ; bool QDeclarativeProperty::connectNotifySignal(class QObject *, char const *) const + ??4QDeclarativeProperty@@QAEAAV0@ABV0@@Z @ 1623 NONAME ; class QDeclarativeProperty & QDeclarativeProperty::operator=(class QDeclarativeProperty const &) + ?messageReceived@QDeclarativeDebugClient@@MAEXABVQByteArray@@@Z @ 1624 NONAME ; void QDeclarativeDebugClient::messageReceived(class QByteArray const &) + ?setImplicitWidth@QDeclarativeItem@@IAEXM@Z @ 1625 NONAME ; void QDeclarativeItem::setImplicitWidth(float) + ?isInterface@QDeclarativeType@@QBE_NXZ @ 1626 NONAME ; bool QDeclarativeType::isInterface(void) const + ??0QDeclarativeContext@@AAE@PAVQDeclarativeEngine@@_N@Z @ 1627 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeEngine *, bool) + ?initialValue@QDeclarativeOpenMetaObject@@UAE?AVQVariant@@H@Z @ 1628 NONAME ; class QVariant QDeclarativeOpenMetaObject::initialValue(int) + ?tr@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1629 NONAME ; class QString QDeclarativeView::tr(char const *, char const *) + ?qt_metacall@QPacketProtocol@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1630 NONAME ; int QPacketProtocol::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QDeclarativeItem@@QAE@PAV0@@Z @ 1631 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItem *) + ?hasDebuggingClient@QDeclarativeDebugService@@SA_NXZ @ 1632 NONAME ; bool QDeclarativeDebugService::hasDebuggingClient(void) + ?staticMetaObject@QDeclarativeContext@@2UQMetaObject@@B @ 1633 NONAME ; struct QMetaObject const QDeclarativeContext::staticMetaObject + ?setContextForObject@QDeclarativeEngine@@SAXPAVQObject@@PAVQDeclarativeContext@@@Z @ 1634 NONAME ; void QDeclarativeEngine::setContextForObject(class QObject *, class QDeclarativeContext *) + ?baselineOffsetChanged@QDeclarativeItem@@IAEXM@Z @ 1635 NONAME ; void QDeclarativeItem::baselineOffsetChanged(float) + ??6QDeclarativeInfo@@QAEAAV0@VQChar@@@Z @ 1636 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QChar) + ?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 1637 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, int) + ?status@QDeclarativePixmap@@QBE?AW4Status@1@XZ @ 1638 NONAME ; enum QDeclarativePixmap::Status QDeclarativePixmap::status(void) const + ?error@QDeclarativePixmap@@QBE?AVQString@@XZ @ 1639 NONAME ; class QString QDeclarativePixmap::error(void) const + ??BQDeclarativePixmap@@QBEABVQPixmap@@XZ @ 1640 NONAME ; QDeclarativePixmap::operator class QPixmap const &(void) const + ?tr@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 1641 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *, int) + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1642 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &) + ?height@QDeclarativePixmap@@QBEHXZ @ 1643 NONAME ; int QDeclarativePixmap::height(void) const + ?implicitSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1644 NONAME ; class QSize const & QDeclarativePixmap::implicitSize(void) const + ?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 1645 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, char const *) + ?clear@QDeclarativePixmap@@QAEXPAVQObject@@@Z @ 1646 NONAME ; void QDeclarativePixmap::clear(class QObject *) + ?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 1647 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, char const *) + ?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 1648 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *, int) + ?isLoading@QDeclarativePixmap@@QBE_NXZ @ 1649 NONAME ; bool QDeclarativePixmap::isLoading(void) const + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@@Z @ 1650 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &) + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@_N@Z @ 1651 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, bool) + ??1QDeclarativePixmap@@QAE@XZ @ 1652 NONAME ; QDeclarativePixmap::~QDeclarativePixmap(void) + ??0QDeclarativePixmap@@QAE@XZ @ 1653 NONAME ; QDeclarativePixmap::QDeclarativePixmap(void) + ?isReady@QDeclarativePixmap@@QBE_NXZ @ 1654 NONAME ; bool QDeclarativePixmap::isReady(void) const + ?clear@QDeclarativePixmap@@QAEXXZ @ 1655 NONAME ; void QDeclarativePixmap::clear(void) + ?pixmap@QDeclarativePixmap@@QBEABVQPixmap@@XZ @ 1656 NONAME ; class QPixmap const & QDeclarativePixmap::pixmap(void) const + ??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@@Z @ 1657 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &) + ?width@QDeclarativePixmap@@QBEHXZ @ 1658 NONAME ; int QDeclarativePixmap::width(void) const + ?setPixmap@QDeclarativePixmap@@QAEXABVQPixmap@@@Z @ 1659 NONAME ; void QDeclarativePixmap::setPixmap(class QPixmap const &) + ?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 1660 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, int) + ?isError@QDeclarativePixmap@@QBE_NXZ @ 1661 NONAME ; bool QDeclarativePixmap::isError(void) const + ?rect@QDeclarativePixmap@@QBE?AVQRect@@XZ @ 1662 NONAME ; class QRect QDeclarativePixmap::rect(void) const + ?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1663 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *) + ?tr@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1664 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *) + ?isNull@QDeclarativePixmap@@QBE_NXZ @ 1665 NONAME ; bool QDeclarativePixmap::isNull(void) const + ?requestSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1666 NONAME ; class QSize const & QDeclarativePixmap::requestSize(void) const + ??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1667 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &, class QSize const &) + ?url@QDeclarativePixmap@@QBEABVQUrl@@XZ @ 1668 NONAME ; class QUrl const & QDeclarativePixmap::url(void) const + ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@_N@Z @ 1669 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &, bool) + diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index f2c7206..8c59b18 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -1,1701 +1,1701 @@ -EXPORTS - _Z10qmlContextPK7QObject @ 1 NONAME - _Z18qmlExecuteDeferredP7QObject @ 2 NONAME - _Z27qmlAttachedPropertiesObjectPiPK7QObjectPK11QMetaObjectb @ 3 NONAME - _Z31qmlAttachedPropertiesObjectByIdiPK7QObjectb @ 4 NONAME - _Z7qmlInfoPK7QObject @ 5 NONAME - _Z7qmlInfoPK7QObjectRK17QDeclarativeError @ 6 NONAME - _Z7qmlInfoPK7QObjectRK5QListI17QDeclarativeErrorE @ 7 NONAME - _Z9qmlEnginePK7QObject @ 8 NONAME - _ZN15QDeclarativePen10penChangedEv @ 9 NONAME - _ZN15QDeclarativePen11qt_metacallEN11QMetaObject4CallEiPPv @ 10 NONAME - _ZN15QDeclarativePen11qt_metacastEPKc @ 11 NONAME - _ZN15QDeclarativePen16staticMetaObjectE @ 12 NONAME DATA 16 - _ZN15QDeclarativePen19getStaticMetaObjectEv @ 13 NONAME - _ZN15QDeclarativePen8setColorERK6QColor @ 14 NONAME - _ZN15QDeclarativePen8setWidthEi @ 15 NONAME - _ZN15QPacketAutoSendC1EP15QPacketProtocol @ 16 NONAME - _ZN15QPacketAutoSendC2EP15QPacketProtocol @ 17 NONAME - _ZN15QPacketAutoSendD0Ev @ 18 NONAME - _ZN15QPacketAutoSendD1Ev @ 19 NONAME - _ZN15QPacketAutoSendD2Ev @ 20 NONAME - _ZN15QPacketProtocol11qt_metacallEN11QMetaObject4CallEiPPv @ 21 NONAME - _ZN15QPacketProtocol11qt_metacastEPKc @ 22 NONAME - _ZN15QPacketProtocol13invalidPacketEv @ 23 NONAME - _ZN15QPacketProtocol13packetWrittenEv @ 24 NONAME - _ZN15QPacketProtocol16staticMetaObjectE @ 25 NONAME DATA 16 - _ZN15QPacketProtocol19getStaticMetaObjectEv @ 26 NONAME - _ZN15QPacketProtocol20setMaximumPacketSizeEi @ 27 NONAME - _ZN15QPacketProtocol4readEv @ 28 NONAME - _ZN15QPacketProtocol4sendERK7QPacket @ 29 NONAME - _ZN15QPacketProtocol4sendEv @ 30 NONAME - _ZN15QPacketProtocol5clearEv @ 31 NONAME - _ZN15QPacketProtocol6deviceEv @ 32 NONAME - _ZN15QPacketProtocol9readyReadEv @ 33 NONAME - _ZN15QPacketProtocolC1EP9QIODeviceP7QObject @ 34 NONAME - _ZN15QPacketProtocolC2EP9QIODeviceP7QObject @ 35 NONAME - _ZN15QPacketProtocolD0Ev @ 36 NONAME - _ZN15QPacketProtocolD1Ev @ 37 NONAME - _ZN15QPacketProtocolD2Ev @ 38 NONAME - _ZN16QDeclarativeInfoC1EP23QDeclarativeInfoPrivate @ 39 NONAME - _ZN16QDeclarativeInfoC1ERKS_ @ 40 NONAME - _ZN16QDeclarativeInfoC2EP23QDeclarativeInfoPrivate @ 41 NONAME - _ZN16QDeclarativeInfoC2ERKS_ @ 42 NONAME - _ZN16QDeclarativeInfoD1Ev @ 43 NONAME - _ZN16QDeclarativeInfoD2Ev @ 44 NONAME - _ZN16QDeclarativeItem10classBeginEv @ 45 NONAME - _ZN16QDeclarativeItem10forceFocusEv @ 46 NONAME - _ZN16QDeclarativeItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 47 NONAME - _ZN16QDeclarativeItem10resetWidthEv @ 48 NONAME - _ZN16QDeclarativeItem10sceneEventEP6QEvent @ 49 NONAME - _ZN16QDeclarativeItem11clipChangedEb @ 50 NONAME - _ZN16QDeclarativeItem11qt_metacallEN11QMetaObject4CallEiPPv @ 51 NONAME - _ZN16QDeclarativeItem11qt_metacastEPKc @ 52 NONAME - _ZN16QDeclarativeItem11resetHeightEv @ 53 NONAME - _ZN16QDeclarativeItem12childrenRectEv @ 54 NONAME - _ZN16QDeclarativeItem12focusChangedEb @ 55 NONAME - _ZN16QDeclarativeItem12stateChangedERK7QString @ 56 NONAME - _ZN16QDeclarativeItem13keyPressEventEP9QKeyEvent @ 57 NONAME - _ZN16QDeclarativeItem13parentChangedEPS_ @ 58 NONAME - _ZN16QDeclarativeItem13setParentItemEPS_ @ 59 NONAME - _ZN16QDeclarativeItem13smoothChangedEb @ 60 NONAME - _ZN16QDeclarativeItem15childrenChangedEv @ 61 NONAME - _ZN16QDeclarativeItem15geometryChangedERK6QRectFS2_ @ 62 NONAME - _ZN16QDeclarativeItem15keyReleaseEventEP9QKeyEvent @ 63 NONAME - _ZN16QDeclarativeItem16inputMethodEventEP17QInputMethodEvent @ 64 NONAME - _ZN16QDeclarativeItem16setImplicitWidthEf @ 65 NONAME - _ZN16QDeclarativeItem16setKeepMouseGrabEb @ 66 NONAME - _ZN16QDeclarativeItem16staticMetaObjectE @ 67 NONAME DATA 16 - _ZN16QDeclarativeItem17componentCompleteEv @ 68 NONAME - _ZN16QDeclarativeItem17setBaselineOffsetEf @ 69 NONAME - _ZN16QDeclarativeItem17setImplicitHeightEf @ 70 NONAME - _ZN16QDeclarativeItem17wantsFocusChangedEb @ 71 NONAME - _ZN16QDeclarativeItem18keyPressPreHandlerEP9QKeyEvent @ 72 NONAME - _ZN16QDeclarativeItem18setTransformOriginENS_15TransformOriginE @ 73 NONAME - _ZN16QDeclarativeItem19childrenRectChangedERK6QRectF @ 74 NONAME - _ZN16QDeclarativeItem19getStaticMetaObjectEv @ 75 NONAME - _ZN16QDeclarativeItem20keyReleasePreHandlerEP9QKeyEvent @ 76 NONAME - _ZN16QDeclarativeItem21baselineOffsetChangedEf @ 77 NONAME - _ZN16QDeclarativeItem21inputMethodPreHandlerEP17QInputMethodEvent @ 78 NONAME - _ZN16QDeclarativeItem22transformOriginChangedENS_15TransformOriginE @ 79 NONAME - _ZN16QDeclarativeItem5eventEP6QEvent @ 80 NONAME - _ZN16QDeclarativeItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 81 NONAME - _ZN16QDeclarativeItem7setClipEb @ 82 NONAME - _ZN16QDeclarativeItem7setSizeERK6QSizeF @ 83 NONAME - _ZN16QDeclarativeItem8setFocusEb @ 84 NONAME - _ZN16QDeclarativeItem8setWidthEf @ 85 NONAME - _ZN16QDeclarativeItem9setHeightEf @ 86 NONAME - _ZN16QDeclarativeItem9setSmoothEb @ 87 NONAME - _ZN16QDeclarativeItem9transformEv @ 88 NONAME - _ZN16QDeclarativeItemC1EPS_ @ 89 NONAME - _ZN16QDeclarativeItemC1ER23QDeclarativeItemPrivatePS_ @ 90 NONAME - _ZN16QDeclarativeItemC2EPS_ @ 91 NONAME - _ZN16QDeclarativeItemC2ER23QDeclarativeItemPrivatePS_ @ 92 NONAME - _ZN16QDeclarativeItemD0Ev @ 93 NONAME - _ZN16QDeclarativeItemD1Ev @ 94 NONAME - _ZN16QDeclarativeItemD2Ev @ 95 NONAME - _ZN16QDeclarativeText11fontChangedERK5QFont @ 96 NONAME - _ZN16QDeclarativeText11qt_metacallEN11QMetaObject4CallEiPPv @ 97 NONAME - _ZN16QDeclarativeText11qt_metacastEPKc @ 98 NONAME - _ZN16QDeclarativeText11setWrapModeENS_8WrapModeE @ 99 NONAME - _ZN16QDeclarativeText11textChangedERK7QString @ 100 NONAME - _ZN16QDeclarativeText12colorChangedERK6QColor @ 101 NONAME - _ZN16QDeclarativeText12setElideModeENS_13TextElideModeE @ 102 NONAME - _ZN16QDeclarativeText12styleChangedENS_9TextStyleE @ 103 NONAME - _ZN16QDeclarativeText13linkActivatedERK7QString @ 104 NONAME - _ZN16QDeclarativeText13setStyleColorERK6QColor @ 105 NONAME - _ZN16QDeclarativeText13setTextFormatENS_10TextFormatE @ 106 NONAME - _ZN16QDeclarativeText15geometryChangedERK6QRectFS2_ @ 107 NONAME - _ZN16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 108 NONAME - _ZN16QDeclarativeText15wrapModeChangedEv @ 109 NONAME - _ZN16QDeclarativeText16elideModeChangedENS_13TextElideModeE @ 110 NONAME - _ZN16QDeclarativeText16staticMetaObjectE @ 111 NONAME DATA 16 - _ZN16QDeclarativeText17componentCompleteEv @ 112 NONAME - _ZN16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 113 NONAME - _ZN16QDeclarativeText17styleColorChangedERK6QColor @ 114 NONAME - _ZN16QDeclarativeText17textFormatChangedENS_10TextFormatE @ 115 NONAME - _ZN16QDeclarativeText18paintedSizeChangedEv @ 116 NONAME - _ZN16QDeclarativeText19getStaticMetaObjectEv @ 117 NONAME - _ZN16QDeclarativeText19reloadWithResourcesEv @ 118 NONAME ABSENT - _ZN16QDeclarativeText24verticalAlignmentChangedENS_10VAlignmentE @ 119 NONAME - _ZN16QDeclarativeText26horizontalAlignmentChangedENS_10HAlignmentE @ 120 NONAME - _ZN16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 121 NONAME - _ZN16QDeclarativeText7setFontERK5QFont @ 122 NONAME - _ZN16QDeclarativeText7setTextERK7QString @ 123 NONAME - _ZN16QDeclarativeText8setColorERK6QColor @ 124 NONAME - _ZN16QDeclarativeText8setStyleENS_9TextStyleE @ 125 NONAME - _ZN16QDeclarativeText9setHAlignENS_10HAlignmentE @ 126 NONAME - _ZN16QDeclarativeText9setVAlignENS_10VAlignmentE @ 127 NONAME - _ZN16QDeclarativeTextC1EP16QDeclarativeItem @ 128 NONAME - _ZN16QDeclarativeTextC2EP16QDeclarativeItem @ 129 NONAME - _ZN16QDeclarativeTextD0Ev @ 130 NONAME - _ZN16QDeclarativeTextD1Ev @ 131 NONAME - _ZN16QDeclarativeTextD2Ev @ 132 NONAME - _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate12RegisterTypeE @ 133 NONAME - _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 134 NONAME - _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate12RegisterTypeE @ 135 NONAME - _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 136 NONAME - _ZN16QDeclarativeTypeD1Ev @ 137 NONAME - _ZN16QDeclarativeTypeD2Ev @ 138 NONAME - _ZN16QDeclarativeView10paintEventEP11QPaintEvent @ 139 NONAME - _ZN16QDeclarativeView10timerEventEP11QTimerEvent @ 140 NONAME - _ZN16QDeclarativeView11eventFilterEP7QObjectP6QEvent @ 141 NONAME - _ZN16QDeclarativeView11qt_metacallEN11QMetaObject4CallEiPPv @ 142 NONAME - _ZN16QDeclarativeView11qt_metacastEPKc @ 143 NONAME - _ZN16QDeclarativeView11resizeEventEP12QResizeEvent @ 144 NONAME - _ZN16QDeclarativeView11rootContextEv @ 145 NONAME - _ZN16QDeclarativeView12sceneResizedE5QSize @ 146 NONAME - _ZN16QDeclarativeView13setResizeModeENS_10ResizeModeE @ 147 NONAME - _ZN16QDeclarativeView13setRootObjectEP7QObject @ 148 NONAME - _ZN16QDeclarativeView13statusChangedENS_6StatusE @ 149 NONAME - _ZN16QDeclarativeView15continueExecuteEv @ 150 NONAME - _ZN16QDeclarativeView16staticMetaObjectE @ 151 NONAME DATA 16 - _ZN16QDeclarativeView19getStaticMetaObjectEv @ 152 NONAME - _ZN16QDeclarativeView6engineEv @ 153 NONAME - _ZN16QDeclarativeView9setSourceERK4QUrl @ 154 NONAME - _ZN16QDeclarativeViewC1EP7QWidget @ 155 NONAME - _ZN16QDeclarativeViewC1ERK4QUrlP7QWidget @ 156 NONAME - _ZN16QDeclarativeViewC2EP7QWidget @ 157 NONAME - _ZN16QDeclarativeViewC2ERK4QUrlP7QWidget @ 158 NONAME - _ZN16QDeclarativeViewD0Ev @ 159 NONAME - _ZN16QDeclarativeViewD1Ev @ 160 NONAME - _ZN16QDeclarativeViewD2Ev @ 161 NONAME - _ZN16QMetaEnumBuilder6addKeyERK10QByteArrayi @ 162 NONAME - _ZN16QMetaEnumBuilder9removeKeyEi @ 163 NONAME - _ZN16QMetaEnumBuilder9setIsFlagEb @ 164 NONAME - _ZN17QDeclarativeError14setDescriptionERK7QString @ 165 NONAME - _ZN17QDeclarativeError6setUrlERK4QUrl @ 166 NONAME - _ZN17QDeclarativeError7setLineEi @ 167 NONAME - _ZN17QDeclarativeError9setColumnEi @ 168 NONAME - _ZN17QDeclarativeErrorC1ERKS_ @ 169 NONAME - _ZN17QDeclarativeErrorC1Ev @ 170 NONAME - _ZN17QDeclarativeErrorC2ERKS_ @ 171 NONAME - _ZN17QDeclarativeErrorC2Ev @ 172 NONAME - _ZN17QDeclarativeErrorD1Ev @ 173 NONAME - _ZN17QDeclarativeErrorD2Ev @ 174 NONAME - _ZN17QDeclarativeErroraSERKS_ @ 175 NONAME - _ZN17QDeclarativeState10setExtendsERK7QString @ 176 NONAME - _ZN17QDeclarativeState11qt_metacallEN11QMetaObject4CallEiPPv @ 177 NONAME - _ZN17QDeclarativeState11qt_metacastEPKc @ 178 NONAME - _ZN17QDeclarativeState13setStateGroupEP22QDeclarativeStateGroup @ 179 NONAME - _ZN17QDeclarativeState16staticMetaObjectE @ 180 NONAME DATA 16 - _ZN17QDeclarativeState19getStaticMetaObjectEv @ 181 NONAME - _ZN17QDeclarativeState5applyEP22QDeclarativeStateGroupP22QDeclarativeTransitionPS_ @ 182 NONAME - _ZN17QDeclarativeState6cancelEv @ 183 NONAME - _ZN17QDeclarativeState7changesEv @ 184 NONAME - _ZN17QDeclarativeState7setNameERK7QString @ 185 NONAME - _ZN17QDeclarativeState7setWhenEP19QDeclarativeBinding @ 186 NONAME - _ZN17QDeclarativeState9completedEv @ 187 NONAME - _ZN17QDeclarativeStateC1EP7QObject @ 188 NONAME - _ZN17QDeclarativeStateC2EP7QObject @ 189 NONAME - _ZN17QDeclarativeStateD0Ev @ 190 NONAME - _ZN17QDeclarativeStateD1Ev @ 191 NONAME - _ZN17QDeclarativeStateD2Ev @ 192 NONAME - _ZN17QDeclarativeStatelsEP26QDeclarativeStateOperation @ 193 NONAME - _ZN18QDeclarativeAction17deleteFromBindingEv @ 194 NONAME - _ZN18QDeclarativeActionC1EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 195 NONAME - _ZN18QDeclarativeActionC1EP7QObjectRK7QStringRK8QVariant @ 196 NONAME - _ZN18QDeclarativeActionC1Ev @ 197 NONAME - _ZN18QDeclarativeActionC2EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 198 NONAME - _ZN18QDeclarativeActionC2EP7QObjectRK7QStringRK8QVariant @ 199 NONAME - _ZN18QDeclarativeActionC2Ev @ 200 NONAME - _ZN18QDeclarativeEngine10setBaseUrlERK4QUrl @ 201 NONAME - _ZN18QDeclarativeEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 202 NONAME - _ZN18QDeclarativeEngine11qt_metacastEPKc @ 203 NONAME - _ZN18QDeclarativeEngine11rootContextEv @ 204 NONAME - _ZN18QDeclarativeEngine12importPluginERK7QStringS2_PS0_ @ 205 NONAME - _ZN18QDeclarativeEngine13addImportPathERK7QString @ 206 NONAME - _ZN18QDeclarativeEngine13addPluginPathERK7QString @ 207 NONAME - _ZN18QDeclarativeEngine15objectOwnershipEP7QObject @ 208 NONAME - _ZN18QDeclarativeEngine16addImageProviderERK7QStringP25QDeclarativeImageProvider @ 209 NONAME - _ZN18QDeclarativeEngine16contextForObjectEPK7QObject @ 210 NONAME - _ZN18QDeclarativeEngine16staticMetaObjectE @ 211 NONAME DATA 16 - _ZN18QDeclarativeEngine17setImportPathListERK11QStringList @ 212 NONAME - _ZN18QDeclarativeEngine17setPluginPathListERK11QStringList @ 213 NONAME - _ZN18QDeclarativeEngine18setObjectOwnershipEP7QObjectNS_15ObjectOwnershipE @ 214 NONAME - _ZN18QDeclarativeEngine19clearComponentCacheEv @ 215 NONAME - _ZN18QDeclarativeEngine19getStaticMetaObjectEv @ 216 NONAME - _ZN18QDeclarativeEngine19removeImageProviderERK7QString @ 217 NONAME - _ZN18QDeclarativeEngine19setContextForObjectEP7QObjectP19QDeclarativeContext @ 218 NONAME - _ZN18QDeclarativeEngine21setOfflineStoragePathERK7QString @ 219 NONAME - _ZN18QDeclarativeEngine30setNetworkAccessManagerFactoryEP39QDeclarativeNetworkAccessManagerFactory @ 220 NONAME - _ZN18QDeclarativeEngine32setOutputWarningsToStandardErrorEb @ 221 NONAME - _ZN18QDeclarativeEngine4quitEv @ 222 NONAME - _ZN18QDeclarativeEngine8warningsERK5QListI17QDeclarativeErrorE @ 223 NONAME - _ZN18QDeclarativeEngineC1EP7QObject @ 224 NONAME - _ZN18QDeclarativeEngineC2EP7QObject @ 225 NONAME - _ZN18QDeclarativeEngineD0Ev @ 226 NONAME - _ZN18QDeclarativeEngineD1Ev @ 227 NONAME - _ZN18QDeclarativeEngineD2Ev @ 228 NONAME - _ZN18QDeclarativeParser7VariantC1ERK7QString @ 229 NONAME - _ZN18QDeclarativeParser7VariantC1ERK7QStringPN14QDeclarativeJS3AST4NodeE @ 230 NONAME - _ZN18QDeclarativeParser7VariantC1ERKS0_ @ 231 NONAME - _ZN18QDeclarativeParser7VariantC1Eb @ 232 NONAME - _ZN18QDeclarativeParser7VariantC1EdRK7QString @ 233 NONAME - _ZN18QDeclarativeParser7VariantC1Ev @ 234 NONAME - _ZN18QDeclarativeParser7VariantC2ERK7QString @ 235 NONAME - _ZN18QDeclarativeParser7VariantC2ERK7QStringPN14QDeclarativeJS3AST4NodeE @ 236 NONAME - _ZN18QDeclarativeParser7VariantC2ERKS0_ @ 237 NONAME - _ZN18QDeclarativeParser7VariantC2Eb @ 238 NONAME - _ZN18QDeclarativeParser7VariantC2EdRK7QString @ 239 NONAME - _ZN18QDeclarativeParser7VariantC2Ev @ 240 NONAME - _ZN18QDeclarativeParser7VariantaSERKS0_ @ 241 NONAME - _ZN18QMetaMethodBuilder13setAttributesEi @ 242 NONAME - _ZN18QMetaMethodBuilder13setReturnTypeERK10QByteArray @ 243 NONAME - _ZN18QMetaMethodBuilder17setParameterNamesERK5QListI10QByteArrayE @ 244 NONAME - _ZN18QMetaMethodBuilder6setTagERK10QByteArray @ 245 NONAME - _ZN18QMetaMethodBuilder9setAccessEN11QMetaMethod6AccessE @ 246 NONAME - _ZN18QMetaObjectBuilder11addPropertyERK10QByteArrayS2_i @ 247 NONAME - _ZN18QMetaObjectBuilder11addPropertyERK13QMetaProperty @ 248 NONAME - _ZN18QMetaObjectBuilder11deserializeER11QDataStreamRK4QMapI10QByteArrayPK11QMetaObjectE @ 249 NONAME - _ZN18QMetaObjectBuilder11indexOfSlotERK10QByteArray @ 250 NONAME - _ZN18QMetaObjectBuilder12addClassInfoERK10QByteArrayS2_ @ 251 NONAME - _ZN18QMetaObjectBuilder12removeMethodEi @ 252 NONAME - _ZN18QMetaObjectBuilder12setClassNameERK10QByteArray @ 253 NONAME - _ZN18QMetaObjectBuilder13addEnumeratorERK10QByteArray @ 254 NONAME - _ZN18QMetaObjectBuilder13addEnumeratorERK9QMetaEnum @ 255 NONAME - _ZN18QMetaObjectBuilder13addMetaObjectEPK11QMetaObject6QFlagsINS_9AddMemberEE @ 256 NONAME - _ZN18QMetaObjectBuilder13indexOfMethodERK10QByteArray @ 257 NONAME - _ZN18QMetaObjectBuilder13indexOfSignalERK10QByteArray @ 258 NONAME - _ZN18QMetaObjectBuilder13setSuperClassEPK11QMetaObject @ 259 NONAME - _ZN18QMetaObjectBuilder14addConstructorERK10QByteArray @ 260 NONAME - _ZN18QMetaObjectBuilder14addConstructorERK11QMetaMethod @ 261 NONAME - _ZN18QMetaObjectBuilder14removePropertyEi @ 262 NONAME - _ZN18QMetaObjectBuilder15indexOfPropertyERK10QByteArray @ 263 NONAME - _ZN18QMetaObjectBuilder15removeClassInfoEi @ 264 NONAME - _ZN18QMetaObjectBuilder16indexOfClassInfoERK10QByteArray @ 265 NONAME - _ZN18QMetaObjectBuilder16removeEnumeratorEi @ 266 NONAME - _ZN18QMetaObjectBuilder17indexOfEnumeratorERK10QByteArray @ 267 NONAME - _ZN18QMetaObjectBuilder17removeConstructorEi @ 268 NONAME - _ZN18QMetaObjectBuilder18indexOfConstructorERK10QByteArray @ 269 NONAME - _ZN18QMetaObjectBuilder19fromRelocatableDataEP11QMetaObjectPKS0_RK10QByteArray @ 270 NONAME - _ZN18QMetaObjectBuilder20addRelatedMetaObjectERKPFRK11QMetaObjectvE @ 271 NONAME - _ZN18QMetaObjectBuilder23removeRelatedMetaObjectEi @ 272 NONAME - _ZN18QMetaObjectBuilder25setStaticMetacallFunctionEPFiN11QMetaObject4CallEiPPvE @ 273 NONAME - _ZN18QMetaObjectBuilder7addSlotERK10QByteArray @ 274 NONAME - _ZN18QMetaObjectBuilder8setFlagsE6QFlagsINS_14MetaObjectFlagEE @ 275 NONAME - _ZN18QMetaObjectBuilder9addMethodERK10QByteArray @ 276 NONAME - _ZN18QMetaObjectBuilder9addMethodERK10QByteArrayS2_ @ 277 NONAME - _ZN18QMetaObjectBuilder9addMethodERK11QMetaMethod @ 278 NONAME - _ZN18QMetaObjectBuilder9addSignalERK10QByteArray @ 279 NONAME - _ZN18QMetaObjectBuilderC1EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 280 NONAME - _ZN18QMetaObjectBuilderC1Ev @ 281 NONAME - _ZN18QMetaObjectBuilderC2EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 282 NONAME - _ZN18QMetaObjectBuilderC2Ev @ 283 NONAME - _ZN18QMetaObjectBuilderD0Ev @ 284 NONAME - _ZN18QMetaObjectBuilderD1Ev @ 285 NONAME - _ZN18QMetaObjectBuilderD2Ev @ 286 NONAME - _ZN19QDeclarativeAnchors10classBeginEv @ 287 NONAME - _ZN19QDeclarativeAnchors10resetRightEv @ 288 NONAME - _ZN19QDeclarativeAnchors10setMarginsEf @ 289 NONAME - _ZN19QDeclarativeAnchors10topChangedEv @ 290 NONAME - _ZN19QDeclarativeAnchors11fillChangedEv @ 291 NONAME - _ZN19QDeclarativeAnchors11leftChangedEv @ 292 NONAME - _ZN19QDeclarativeAnchors11qt_metacallEN11QMetaObject4CallEiPPv @ 293 NONAME - _ZN19QDeclarativeAnchors11qt_metacastEPKc @ 294 NONAME - _ZN19QDeclarativeAnchors11resetBottomEv @ 295 NONAME - _ZN19QDeclarativeAnchors11setBaselineERK22QDeclarativeAnchorLine @ 296 NONAME - _ZN19QDeclarativeAnchors11setCenterInEP15QGraphicsObject @ 297 NONAME - _ZN19QDeclarativeAnchors12rightChangedEv @ 298 NONAME - _ZN19QDeclarativeAnchors12setTopMarginEf @ 299 NONAME - _ZN19QDeclarativeAnchors13bottomChangedEv @ 300 NONAME - _ZN19QDeclarativeAnchors13resetBaselineEv @ 301 NONAME - _ZN19QDeclarativeAnchors13resetCenterInEv @ 302 NONAME - _ZN19QDeclarativeAnchors13setLeftMarginEf @ 303 NONAME - _ZN19QDeclarativeAnchors14marginsChangedEv @ 304 NONAME - _ZN19QDeclarativeAnchors14setRightMarginEf @ 305 NONAME - _ZN19QDeclarativeAnchors15baselineChangedEv @ 306 NONAME - _ZN19QDeclarativeAnchors15centerInChangedEv @ 307 NONAME - _ZN19QDeclarativeAnchors15setBottomMarginEf @ 308 NONAME - _ZN19QDeclarativeAnchors16staticMetaObjectE @ 309 NONAME DATA 16 - _ZN19QDeclarativeAnchors16topMarginChangedEv @ 310 NONAME - _ZN19QDeclarativeAnchors17componentCompleteEv @ 311 NONAME - _ZN19QDeclarativeAnchors17leftMarginChangedEv @ 312 NONAME - _ZN19QDeclarativeAnchors17setBaselineOffsetEf @ 313 NONAME - _ZN19QDeclarativeAnchors17setVerticalCenterERK22QDeclarativeAnchorLine @ 314 NONAME - _ZN19QDeclarativeAnchors18rightMarginChangedEv @ 315 NONAME - _ZN19QDeclarativeAnchors19bottomMarginChangedEv @ 316 NONAME - _ZN19QDeclarativeAnchors19getStaticMetaObjectEv @ 317 NONAME - _ZN19QDeclarativeAnchors19resetVerticalCenterEv @ 318 NONAME - _ZN19QDeclarativeAnchors19setHorizontalCenterERK22QDeclarativeAnchorLine @ 319 NONAME - _ZN19QDeclarativeAnchors21baselineOffsetChangedEv @ 320 NONAME - _ZN19QDeclarativeAnchors21resetHorizontalCenterEv @ 321 NONAME - _ZN19QDeclarativeAnchors21verticalCenterChangedEv @ 322 NONAME - _ZN19QDeclarativeAnchors23horizontalCenterChangedEv @ 323 NONAME - _ZN19QDeclarativeAnchors23setVerticalCenterOffsetEf @ 324 NONAME - _ZN19QDeclarativeAnchors25setHorizontalCenterOffsetEf @ 325 NONAME - _ZN19QDeclarativeAnchors27verticalCenterOffsetChangedEv @ 326 NONAME - _ZN19QDeclarativeAnchors29horizontalCenterOffsetChangedEv @ 327 NONAME - _ZN19QDeclarativeAnchors6setTopERK22QDeclarativeAnchorLine @ 328 NONAME - _ZN19QDeclarativeAnchors7setFillEP15QGraphicsObject @ 329 NONAME - _ZN19QDeclarativeAnchors7setLeftERK22QDeclarativeAnchorLine @ 330 NONAME - _ZN19QDeclarativeAnchors8resetTopEv @ 331 NONAME - _ZN19QDeclarativeAnchors8setRightERK22QDeclarativeAnchorLine @ 332 NONAME - _ZN19QDeclarativeAnchors9resetFillEv @ 333 NONAME - _ZN19QDeclarativeAnchors9resetLeftEv @ 334 NONAME - _ZN19QDeclarativeAnchors9setBottomERK22QDeclarativeAnchorLine @ 335 NONAME - _ZN19QDeclarativeAnchorsC1EP15QGraphicsObjectP7QObject @ 336 NONAME - _ZN19QDeclarativeAnchorsC1EP7QObject @ 337 NONAME - _ZN19QDeclarativeAnchorsC2EP15QGraphicsObjectP7QObject @ 338 NONAME - _ZN19QDeclarativeAnchorsC2EP7QObject @ 339 NONAME - _ZN19QDeclarativeAnchorsD0Ev @ 340 NONAME - _ZN19QDeclarativeAnchorsD1Ev @ 341 NONAME - _ZN19QDeclarativeAnchorsD2Ev @ 342 NONAME - _ZN19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 343 NONAME - _ZN19QDeclarativeBinding11qt_metacallEN11QMetaObject4CallEiPPv @ 344 NONAME - _ZN19QDeclarativeBinding11qt_metacastEPKc @ 345 NONAME - _ZN19QDeclarativeBinding13propertyIndexEv @ 346 NONAME - _ZN19QDeclarativeBinding16staticMetaObjectE @ 347 NONAME DATA 16 - _ZN19QDeclarativeBinding19getStaticMetaObjectEv @ 348 NONAME - _ZN19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 349 NONAME - _ZN19QDeclarativeBinding9setTargetERK20QDeclarativeProperty @ 350 NONAME - _ZN19QDeclarativeBindingC1EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 351 NONAME - _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 352 NONAME - _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 353 NONAME - _ZN19QDeclarativeBindingC2EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 354 NONAME - _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 355 NONAME - _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 356 NONAME - _ZN19QDeclarativeBindingD0Ev @ 357 NONAME - _ZN19QDeclarativeBindingD1Ev @ 358 NONAME - _ZN19QDeclarativeBindingD2Ev @ 359 NONAME - _ZN19QDeclarativeContext10setBaseUrlERK4QUrl @ 360 NONAME - _ZN19QDeclarativeContext11qt_metacallEN11QMetaObject4CallEiPPv @ 361 NONAME - _ZN19QDeclarativeContext11qt_metacastEPKc @ 362 NONAME - _ZN19QDeclarativeContext11resolvedUrlERK4QUrl @ 363 NONAME - _ZN19QDeclarativeContext16setContextObjectEP7QObject @ 364 NONAME - _ZN19QDeclarativeContext16staticMetaObjectE @ 365 NONAME DATA 16 - _ZN19QDeclarativeContext18setContextPropertyERK7QStringP7QObject @ 366 NONAME - _ZN19QDeclarativeContext18setContextPropertyERK7QStringRK8QVariant @ 367 NONAME - _ZN19QDeclarativeContext19getStaticMetaObjectEv @ 368 NONAME - _ZN19QDeclarativeContextC1EP18QDeclarativeEngineP7QObject @ 369 NONAME - _ZN19QDeclarativeContextC1EP18QDeclarativeEngineb @ 370 NONAME - _ZN19QDeclarativeContextC1EP23QDeclarativeContextData @ 371 NONAME - _ZN19QDeclarativeContextC1EPS_P7QObject @ 372 NONAME - _ZN19QDeclarativeContextC2EP18QDeclarativeEngineP7QObject @ 373 NONAME - _ZN19QDeclarativeContextC2EP18QDeclarativeEngineb @ 374 NONAME - _ZN19QDeclarativeContextC2EP23QDeclarativeContextData @ 375 NONAME - _ZN19QDeclarativeContextC2EPS_P7QObject @ 376 NONAME - _ZN19QDeclarativeContextD0Ev @ 377 NONAME - _ZN19QDeclarativeContextD1Ev @ 378 NONAME - _ZN19QDeclarativeContextD2Ev @ 379 NONAME - _ZN19QDeclarativeDomListC1ERKS_ @ 380 NONAME - _ZN19QDeclarativeDomListC1Ev @ 381 NONAME - _ZN19QDeclarativeDomListC2ERKS_ @ 382 NONAME - _ZN19QDeclarativeDomListC2Ev @ 383 NONAME - _ZN19QDeclarativeDomListD1Ev @ 384 NONAME - _ZN19QDeclarativeDomListD2Ev @ 385 NONAME - _ZN19QDeclarativeDomListaSERKS_ @ 386 NONAME - _ZN19QDeclarativePrivate12registerTypeERKNS_12RegisterTypeE @ 387 NONAME - _ZN19QDeclarativePrivate12registerTypeERKNS_17RegisterInterfaceE @ 388 NONAME - _ZN19QDeclarativePrivate26registerAutoParentFunctionEPFNS_16AutoParentResultEP7QObjectS2_E @ 389 NONAME - _ZN19QDeclarativePrivate30qdeclarativeelement_destructorEP7QObject @ 390 NONAME - _ZN19QListModelInterface10itemsMovedEiii @ 391 NONAME - _ZN19QListModelInterface11qt_metacallEN11QMetaObject4CallEiPPv @ 392 NONAME - _ZN19QListModelInterface11qt_metacastEPKc @ 393 NONAME - _ZN19QListModelInterface12itemsChangedEiiRK5QListIiE @ 394 NONAME - _ZN19QListModelInterface12itemsRemovedEii @ 395 NONAME - _ZN19QListModelInterface13itemsInsertedEii @ 396 NONAME - _ZN19QListModelInterface16staticMetaObjectE @ 397 NONAME DATA 16 - _ZN19QListModelInterface19getStaticMetaObjectEv @ 398 NONAME - _ZN20QDeclarativeBehavior10setEnabledEb @ 399 NONAME - _ZN20QDeclarativeBehavior11qt_metacallEN11QMetaObject4CallEiPPv @ 400 NONAME - _ZN20QDeclarativeBehavior11qt_metacastEPKc @ 401 NONAME - _ZN20QDeclarativeBehavior12setAnimationEP29QDeclarativeAbstractAnimation @ 402 NONAME - _ZN20QDeclarativeBehavior14enabledChangedEv @ 403 NONAME - _ZN20QDeclarativeBehavior16staticMetaObjectE @ 404 NONAME DATA 16 - _ZN20QDeclarativeBehavior18componentFinalizedEv @ 405 NONAME - _ZN20QDeclarativeBehavior19getStaticMetaObjectEv @ 406 NONAME - _ZN20QDeclarativeBehavior5writeERK8QVariant @ 407 NONAME - _ZN20QDeclarativeBehavior9animationEv @ 408 NONAME - _ZN20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 409 NONAME - _ZN20QDeclarativeBehaviorC1EP7QObject @ 410 NONAME - _ZN20QDeclarativeBehaviorC2EP7QObject @ 411 NONAME - _ZN20QDeclarativeBehaviorD0Ev @ 412 NONAME - _ZN20QDeclarativeBehaviorD1Ev @ 413 NONAME - _ZN20QDeclarativeBehaviorD2Ev @ 414 NONAME - _ZN20QDeclarativeDomValueC1ERKS_ @ 415 NONAME - _ZN20QDeclarativeDomValueC1Ev @ 416 NONAME - _ZN20QDeclarativeDomValueC2ERKS_ @ 417 NONAME - _ZN20QDeclarativeDomValueC2Ev @ 418 NONAME - _ZN20QDeclarativeDomValueD1Ev @ 419 NONAME - _ZN20QDeclarativeDomValueD2Ev @ 420 NONAME - _ZN20QDeclarativeDomValueaSERKS_ @ 421 NONAME - _ZN20QDeclarativeMetaType11isInterfaceEi @ 422 NONAME - _ZN20QDeclarativeMetaType12interfaceIIdEi @ 423 NONAME - _ZN20QDeclarativeMetaType12qmlTypeNamesEv @ 424 NONAME - _ZN20QDeclarativeMetaType12typeCategoryEi @ 425 NONAME - _ZN20QDeclarativeMetaType13defaultMethodEP7QObject @ 426 NONAME - _ZN20QDeclarativeMetaType13defaultMethodEPK11QMetaObject @ 427 NONAME - _ZN20QDeclarativeMetaType15defaultPropertyEP7QObject @ 428 NONAME - _ZN20QDeclarativeMetaType15defaultPropertyEPK11QMetaObject @ 429 NONAME - _ZN20QDeclarativeMetaType15parentFunctionsEv @ 430 NONAME - _ZN20QDeclarativeMetaType21customStringConverterEi @ 431 NONAME - _ZN20QDeclarativeMetaType24attachedPropertiesFuncIdEPK11QMetaObject @ 432 NONAME - _ZN20QDeclarativeMetaType26attachedPropertiesFuncByIdEi @ 433 NONAME - _ZN20QDeclarativeMetaType29registerCustomStringConverterEiPF8QVariantRK7QStringE @ 434 NONAME - _ZN20QDeclarativeMetaType4copyEiPvPKv @ 435 NONAME - _ZN20QDeclarativeMetaType6isListEi @ 436 NONAME - _ZN20QDeclarativeMetaType7qmlTypeEPK11QMetaObject @ 437 NONAME - _ZN20QDeclarativeMetaType7qmlTypeERK10QByteArrayii @ 438 NONAME - _ZN20QDeclarativeMetaType7qmlTypeEi @ 439 NONAME - _ZN20QDeclarativeMetaType8isModuleERK10QByteArrayii @ 440 NONAME - _ZN20QDeclarativeMetaType8listTypeEi @ 441 NONAME - _ZN20QDeclarativeMetaType8qmlTypesEv @ 442 NONAME - _ZN20QDeclarativeMetaType9isQObjectEi @ 443 NONAME - _ZN20QDeclarativeMetaType9toQObjectERK8QVariantPb @ 444 NONAME - _ZN20QDeclarativeProperty4readEP7QObjectRK7QString @ 445 NONAME - _ZN20QDeclarativeProperty4readEP7QObjectRK7QStringP18QDeclarativeEngine @ 446 NONAME - _ZN20QDeclarativeProperty4readEP7QObjectRK7QStringP19QDeclarativeContext @ 447 NONAME - _ZN20QDeclarativeProperty5writeEP7QObjectRK7QStringRK8QVariant @ 448 NONAME - _ZN20QDeclarativeProperty5writeEP7QObjectRK7QStringRK8QVariantP18QDeclarativeEngine @ 449 NONAME - _ZN20QDeclarativeProperty5writeEP7QObjectRK7QStringRK8QVariantP19QDeclarativeContext @ 450 NONAME - _ZN20QDeclarativePropertyC1EP7QObject @ 451 NONAME - _ZN20QDeclarativePropertyC1EP7QObjectP18QDeclarativeEngine @ 452 NONAME - _ZN20QDeclarativePropertyC1EP7QObjectP19QDeclarativeContext @ 453 NONAME - _ZN20QDeclarativePropertyC1EP7QObjectRK7QString @ 454 NONAME - _ZN20QDeclarativePropertyC1EP7QObjectRK7QStringP18QDeclarativeEngine @ 455 NONAME - _ZN20QDeclarativePropertyC1EP7QObjectRK7QStringP19QDeclarativeContext @ 456 NONAME - _ZN20QDeclarativePropertyC1ERKS_ @ 457 NONAME - _ZN20QDeclarativePropertyC1Ev @ 458 NONAME - _ZN20QDeclarativePropertyC2EP7QObject @ 459 NONAME - _ZN20QDeclarativePropertyC2EP7QObjectP18QDeclarativeEngine @ 460 NONAME - _ZN20QDeclarativePropertyC2EP7QObjectP19QDeclarativeContext @ 461 NONAME - _ZN20QDeclarativePropertyC2EP7QObjectRK7QString @ 462 NONAME - _ZN20QDeclarativePropertyC2EP7QObjectRK7QStringP18QDeclarativeEngine @ 463 NONAME - _ZN20QDeclarativePropertyC2EP7QObjectRK7QStringP19QDeclarativeContext @ 464 NONAME - _ZN20QDeclarativePropertyC2ERKS_ @ 465 NONAME - _ZN20QDeclarativePropertyC2Ev @ 466 NONAME - _ZN20QDeclarativePropertyD1Ev @ 467 NONAME - _ZN20QDeclarativePropertyD2Ev @ 468 NONAME - _ZN20QDeclarativePropertyaSERKS_ @ 469 NONAME - _ZN20QMetaPropertyBuilder10setDynamicEb @ 470 NONAME - _ZN20QMetaPropertyBuilder11setEditableEb @ 471 NONAME - _ZN20QMetaPropertyBuilder11setReadableEb @ 472 NONAME - _ZN20QMetaPropertyBuilder11setWritableEb @ 473 NONAME - _ZN20QMetaPropertyBuilder12setStdCppSetEb @ 474 NONAME - _ZN20QMetaPropertyBuilder13setDesignableEb @ 475 NONAME - _ZN20QMetaPropertyBuilder13setEnumOrFlagEb @ 476 NONAME - _ZN20QMetaPropertyBuilder13setResettableEb @ 477 NONAME - _ZN20QMetaPropertyBuilder13setScriptableEb @ 478 NONAME - _ZN20QMetaPropertyBuilder15setNotifySignalERK18QMetaMethodBuilder @ 479 NONAME - _ZN20QMetaPropertyBuilder18removeNotifySignalEv @ 480 NONAME - _ZN20QMetaPropertyBuilder7setUserEb @ 481 NONAME - _ZN20QMetaPropertyBuilder9setStoredEb @ 482 NONAME - _ZN21QDeclarativeComponent11beginCreateEP19QDeclarativeContext @ 483 NONAME - _ZN21QDeclarativeComponent11qt_metacallEN11QMetaObject4CallEiPPv @ 484 NONAME - _ZN21QDeclarativeComponent11qt_metacastEPKc @ 485 NONAME - _ZN21QDeclarativeComponent12createObjectEP7QObject @ 486 NONAME - _ZN21QDeclarativeComponent13statusChangedENS_6StatusE @ 487 NONAME - _ZN21QDeclarativeComponent14completeCreateEv @ 488 NONAME - _ZN21QDeclarativeComponent15progressChangedEf @ 489 NONAME - _ZN21QDeclarativeComponent16staticMetaObjectE @ 490 NONAME DATA 16 - _ZN21QDeclarativeComponent19getStaticMetaObjectEv @ 491 NONAME - _ZN21QDeclarativeComponent21qmlAttachedPropertiesEP7QObject @ 492 NONAME - _ZN21QDeclarativeComponent6createEP19QDeclarativeContext @ 493 NONAME - _ZN21QDeclarativeComponent7loadUrlERK4QUrl @ 494 NONAME - _ZN21QDeclarativeComponent7setDataERK10QByteArrayRK4QUrl @ 495 NONAME - _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineP24QDeclarativeCompiledDataiiP7QObject @ 496 NONAME - _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineP7QObject @ 497 NONAME - _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineRK4QUrlP7QObject @ 498 NONAME - _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineRK7QStringP7QObject @ 499 NONAME - _ZN21QDeclarativeComponentC1EP7QObject @ 500 NONAME - _ZN21QDeclarativeComponentC1ER28QDeclarativeComponentPrivateP7QObject @ 501 NONAME - _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineP24QDeclarativeCompiledDataiiP7QObject @ 502 NONAME - _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineP7QObject @ 503 NONAME - _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineRK4QUrlP7QObject @ 504 NONAME - _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineRK7QStringP7QObject @ 505 NONAME - _ZN21QDeclarativeComponentC2EP7QObject @ 506 NONAME - _ZN21QDeclarativeComponentC2ER28QDeclarativeComponentPrivateP7QObject @ 507 NONAME - _ZN21QDeclarativeComponentD0Ev @ 508 NONAME - _ZN21QDeclarativeComponentD1Ev @ 509 NONAME - _ZN21QDeclarativeComponentD2Ev @ 510 NONAME - _ZN21QDeclarativeDomImportC1ERKS_ @ 511 NONAME - _ZN21QDeclarativeDomImportC1Ev @ 512 NONAME - _ZN21QDeclarativeDomImportC2ERKS_ @ 513 NONAME - _ZN21QDeclarativeDomImportC2Ev @ 514 NONAME - _ZN21QDeclarativeDomImportD1Ev @ 515 NONAME - _ZN21QDeclarativeDomImportD2Ev @ 516 NONAME - _ZN21QDeclarativeDomImportaSERKS_ @ 517 NONAME - _ZN21QDeclarativeDomObjectC1ERKS_ @ 518 NONAME - _ZN21QDeclarativeDomObjectC1Ev @ 519 NONAME - _ZN21QDeclarativeDomObjectC2ERKS_ @ 520 NONAME - _ZN21QDeclarativeDomObjectC2Ev @ 521 NONAME - _ZN21QDeclarativeDomObjectD1Ev @ 522 NONAME - _ZN21QDeclarativeDomObjectD2Ev @ 523 NONAME - _ZN21QDeclarativeDomObjectaSERKS_ @ 524 NONAME - _ZN21QDeclarativeListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 525 NONAME - _ZN21QDeclarativeListModel11qt_metacastEPKc @ 526 NONAME - _ZN21QDeclarativeListModel11setPropertyEiRK7QStringRK8QVariant @ 527 NONAME - _ZN21QDeclarativeListModel12countChangedEv @ 528 NONAME - _ZN21QDeclarativeListModel16staticMetaObjectE @ 529 NONAME DATA 16 - _ZN21QDeclarativeListModel19getStaticMetaObjectEv @ 530 NONAME - _ZN21QDeclarativeListModel3setEiRK12QScriptValue @ 531 NONAME - _ZN21QDeclarativeListModel4moveEiii @ 532 NONAME - _ZN21QDeclarativeListModel4syncEv @ 533 NONAME - _ZN21QDeclarativeListModel5agentEv @ 534 NONAME - _ZN21QDeclarativeListModel5clearEv @ 535 NONAME - _ZN21QDeclarativeListModel6appendERK12QScriptValue @ 536 NONAME - _ZN21QDeclarativeListModel6insertEiRK12QScriptValue @ 537 NONAME - _ZN21QDeclarativeListModel6removeEi @ 538 NONAME - _ZN21QDeclarativeListModel7flattenEv @ 539 NONAME - _ZN21QDeclarativeListModelC1EP7QObject @ 540 NONAME - _ZN21QDeclarativeListModelC1EbP7QObject @ 541 NONAME - _ZN21QDeclarativeListModelC2EP7QObject @ 542 NONAME - _ZN21QDeclarativeListModelC2EbP7QObject @ 543 NONAME - _ZN21QDeclarativeListModelD0Ev @ 544 NONAME - _ZN21QDeclarativeListModelD1Ev @ 545 NONAME - _ZN21QDeclarativeListModelD2Ev @ 546 NONAME - _ZN21QDeclarativeRectangle11qt_metacallEN11QMetaObject4CallEiPPv @ 547 NONAME - _ZN21QDeclarativeRectangle11qt_metacastEPKc @ 548 NONAME - _ZN21QDeclarativeRectangle11setGradientEP20QDeclarativeGradient @ 549 NONAME - _ZN21QDeclarativeRectangle12colorChangedEv @ 550 NONAME - _ZN21QDeclarativeRectangle13radiusChangedEv @ 551 NONAME - _ZN21QDeclarativeRectangle16staticMetaObjectE @ 552 NONAME DATA 16 - _ZN21QDeclarativeRectangle19generateRoundedRectEv @ 553 NONAME - _ZN21QDeclarativeRectangle19getStaticMetaObjectEv @ 554 NONAME - _ZN21QDeclarativeRectangle20generateBorderedRectEv @ 555 NONAME - _ZN21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 556 NONAME - _ZN21QDeclarativeRectangle6borderEv @ 557 NONAME - _ZN21QDeclarativeRectangle8doUpdateEv @ 558 NONAME - _ZN21QDeclarativeRectangle8drawRectER8QPainter @ 559 NONAME - _ZN21QDeclarativeRectangle8setColorERK6QColor @ 560 NONAME - _ZN21QDeclarativeRectangle9setRadiusEf @ 561 NONAME - _ZN21QDeclarativeRectangleC1EP16QDeclarativeItem @ 562 NONAME - _ZN21QDeclarativeRectangleC2EP16QDeclarativeItem @ 563 NONAME - _ZN21QDeclarativeScaleGrid11qt_metacallEN11QMetaObject4CallEiPPv @ 564 NONAME - _ZN21QDeclarativeScaleGrid11qt_metacastEPKc @ 565 NONAME - _ZN21QDeclarativeScaleGrid13borderChangedEv @ 566 NONAME - _ZN21QDeclarativeScaleGrid16staticMetaObjectE @ 567 NONAME DATA 16 - _ZN21QDeclarativeScaleGrid19getStaticMetaObjectEv @ 568 NONAME - _ZN21QDeclarativeScaleGrid6setTopEi @ 569 NONAME - _ZN21QDeclarativeScaleGrid7setLeftEi @ 570 NONAME - _ZN21QDeclarativeScaleGrid8setRightEi @ 571 NONAME - _ZN21QDeclarativeScaleGrid9setBottomEi @ 572 NONAME - _ZN21QDeclarativeScaleGridC1EP7QObject @ 573 NONAME - _ZN21QDeclarativeScaleGridC2EP7QObject @ 574 NONAME - _ZN21QDeclarativeScaleGridD0Ev @ 575 NONAME - _ZN21QDeclarativeScaleGridD1Ev @ 576 NONAME - _ZN21QDeclarativeScaleGridD2Ev @ 577 NONAME - _ZN21QDeclarativeValueType11qt_metacallEN11QMetaObject4CallEiPPv @ 578 NONAME - _ZN21QDeclarativeValueType11qt_metacastEPKc @ 579 NONAME - _ZN21QDeclarativeValueType16staticMetaObjectE @ 580 NONAME DATA 16 - _ZN21QDeclarativeValueType19getStaticMetaObjectEv @ 581 NONAME - _ZN21QDeclarativeValueTypeC2EP7QObject @ 582 NONAME - _ZN22QDeclarativeDebugQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 583 NONAME - _ZN22QDeclarativeDebugQuery11qt_metacastEPKc @ 584 NONAME - _ZN22QDeclarativeDebugQuery12stateChangedENS_5StateE @ 585 NONAME - _ZN22QDeclarativeDebugQuery16staticMetaObjectE @ 586 NONAME DATA 16 - _ZN22QDeclarativeDebugQuery19getStaticMetaObjectEv @ 587 NONAME - _ZN22QDeclarativeDebugQuery8setStateENS_5StateE @ 588 NONAME - _ZN22QDeclarativeDebugQueryC1EP7QObject @ 589 NONAME - _ZN22QDeclarativeDebugQueryC2EP7QObject @ 590 NONAME - _ZN22QDeclarativeDebugWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 591 NONAME - _ZN22QDeclarativeDebugWatch11qt_metacastEPKc @ 592 NONAME - _ZN22QDeclarativeDebugWatch12stateChangedENS_5StateE @ 593 NONAME - _ZN22QDeclarativeDebugWatch12valueChangedERK10QByteArrayRK8QVariant @ 594 NONAME - _ZN22QDeclarativeDebugWatch16staticMetaObjectE @ 595 NONAME DATA 16 - _ZN22QDeclarativeDebugWatch19getStaticMetaObjectEv @ 596 NONAME - _ZN22QDeclarativeDebugWatch8setStateENS_5StateE @ 597 NONAME - _ZN22QDeclarativeDebugWatchC1EP7QObject @ 598 NONAME - _ZN22QDeclarativeDebugWatchC2EP7QObject @ 599 NONAME - _ZN22QDeclarativeDebugWatchD0Ev @ 600 NONAME - _ZN22QDeclarativeDebugWatchD1Ev @ 601 NONAME - _ZN22QDeclarativeDebugWatchD2Ev @ 602 NONAME - _ZN22QDeclarativeExpression10clearErrorEv @ 603 NONAME - _ZN22QDeclarativeExpression11qt_metacallEN11QMetaObject4CallEiPPv @ 604 NONAME - _ZN22QDeclarativeExpression11qt_metacastEPKc @ 605 NONAME - _ZN22QDeclarativeExpression12valueChangedEv @ 606 NONAME - _ZN22QDeclarativeExpression13setExpressionERK7QString @ 607 NONAME - _ZN22QDeclarativeExpression16staticMetaObjectE @ 608 NONAME DATA 16 - _ZN22QDeclarativeExpression17setSourceLocationERK7QStringi @ 609 NONAME - _ZN22QDeclarativeExpression19getStaticMetaObjectEv @ 610 NONAME - _ZN22QDeclarativeExpression23setNotifyOnValueChangedEb @ 611 NONAME - _ZN22QDeclarativeExpression8evaluateEPb @ 612 NONAME - _ZN22QDeclarativeExpressionC1EP19QDeclarativeContextP7QObjectRK7QStringS3_ @ 613 NONAME - _ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataP7QObjectRK7QString @ 614 NONAME - _ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataP7QObjectRK7QStringR29QDeclarativeExpressionPrivate @ 615 NONAME - _ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataPvP20QDeclarativeRefCountP7QObjectRK7QStringiR29QDeclarativeExpressionPrivate @ 616 NONAME - _ZN22QDeclarativeExpressionC1Ev @ 617 NONAME - _ZN22QDeclarativeExpressionC2EP19QDeclarativeContextP7QObjectRK7QStringS3_ @ 618 NONAME - _ZN22QDeclarativeExpressionC2EP23QDeclarativeContextDataP7QObjectRK7QString @ 619 NONAME - _ZN22QDeclarativeExpressionC2EP23QDeclarativeContextDataP7QObjectRK7QStringR29QDeclarativeExpressionPrivate @ 620 NONAME - _ZN22QDeclarativeExpressionC2EP23QDeclarativeContextDataPvP20QDeclarativeRefCountP7QObjectRK7QStringiR29QDeclarativeExpressionPrivate @ 621 NONAME - _ZN22QDeclarativeExpressionC2Ev @ 622 NONAME - _ZN22QDeclarativeExpressionD0Ev @ 623 NONAME - _ZN22QDeclarativeExpressionD1Ev @ 624 NONAME - _ZN22QDeclarativeExpressionD2Ev @ 625 NONAME - _ZN22QDeclarativeStateGroup10classBeginEv @ 626 NONAME - _ZN22QDeclarativeStateGroup11qt_metacallEN11QMetaObject4CallEiPPv @ 627 NONAME - _ZN22QDeclarativeStateGroup11qt_metacastEPKc @ 628 NONAME - _ZN22QDeclarativeStateGroup11removeStateEP17QDeclarativeState @ 629 NONAME - _ZN22QDeclarativeStateGroup12stateChangedERK7QString @ 630 NONAME - _ZN22QDeclarativeStateGroup14statesPropertyEv @ 631 NONAME - _ZN22QDeclarativeStateGroup15updateAutoStateEv @ 632 NONAME - _ZN22QDeclarativeStateGroup16staticMetaObjectE @ 633 NONAME DATA 16 - _ZN22QDeclarativeStateGroup17componentCompleteEv @ 634 NONAME - _ZN22QDeclarativeStateGroup19getStaticMetaObjectEv @ 635 NONAME - _ZN22QDeclarativeStateGroup19transitionsPropertyEv @ 636 NONAME - _ZN22QDeclarativeStateGroup8setStateERK7QString @ 637 NONAME - _ZN22QDeclarativeStateGroupC1EP7QObject @ 638 NONAME - _ZN22QDeclarativeStateGroupC2EP7QObject @ 639 NONAME - _ZN22QDeclarativeStateGroupD0Ev @ 640 NONAME - _ZN22QDeclarativeStateGroupD1Ev @ 641 NONAME - _ZN22QDeclarativeStateGroupD2Ev @ 642 NONAME - _ZN22QDeclarativeTransition10animationsEv @ 643 NONAME - _ZN22QDeclarativeTransition10setToStateERK7QString @ 644 NONAME - _ZN22QDeclarativeTransition11fromChangedEv @ 645 NONAME - _ZN22QDeclarativeTransition11qt_metacallEN11QMetaObject4CallEiPPv @ 646 NONAME - _ZN22QDeclarativeTransition11qt_metacastEPKc @ 647 NONAME - _ZN22QDeclarativeTransition11setReversedEb @ 648 NONAME - _ZN22QDeclarativeTransition12setFromStateERK7QString @ 649 NONAME - _ZN22QDeclarativeTransition13setReversibleEb @ 650 NONAME - _ZN22QDeclarativeTransition16staticMetaObjectE @ 651 NONAME DATA 16 - _ZN22QDeclarativeTransition17reversibleChangedEv @ 652 NONAME - _ZN22QDeclarativeTransition19getStaticMetaObjectEv @ 653 NONAME - _ZN22QDeclarativeTransition4stopEv @ 654 NONAME - _ZN22QDeclarativeTransition7prepareER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyEP29QDeclarativeTransitionManager @ 655 NONAME - _ZN22QDeclarativeTransition9toChangedEv @ 656 NONAME - _ZN22QDeclarativeTransitionC1EP7QObject @ 657 NONAME - _ZN22QDeclarativeTransitionC2EP7QObject @ 658 NONAME - _ZN22QDeclarativeTransitionD0Ev @ 659 NONAME - _ZN22QDeclarativeTransitionD1Ev @ 660 NONAME - _ZN22QDeclarativeTransitionD2Ev @ 661 NONAME - _ZN23QDeclarativeDebugClient10setEnabledEb @ 662 NONAME - _ZN23QDeclarativeDebugClient11qt_metacallEN11QMetaObject4CallEiPPv @ 663 NONAME - _ZN23QDeclarativeDebugClient11qt_metacastEPKc @ 664 NONAME - _ZN23QDeclarativeDebugClient11sendMessageERK10QByteArray @ 665 NONAME - _ZN23QDeclarativeDebugClient15messageReceivedERK10QByteArray @ 666 NONAME - _ZN23QDeclarativeDebugClient16staticMetaObjectE @ 667 NONAME DATA 16 - _ZN23QDeclarativeDebugClient19getStaticMetaObjectEv @ 668 NONAME - _ZN23QDeclarativeDebugClientC1ERK7QStringP27QDeclarativeDebugConnection @ 669 NONAME - _ZN23QDeclarativeDebugClientC2ERK7QStringP27QDeclarativeDebugConnection @ 670 NONAME - _ZN23QDeclarativeDomDocument4loadEP18QDeclarativeEngineRK10QByteArrayRK4QUrl @ 671 NONAME - _ZN23QDeclarativeDomDocumentC1ERKS_ @ 672 NONAME - _ZN23QDeclarativeDomDocumentC1Ev @ 673 NONAME - _ZN23QDeclarativeDomDocumentC2ERKS_ @ 674 NONAME - _ZN23QDeclarativeDomDocumentC2Ev @ 675 NONAME - _ZN23QDeclarativeDomDocumentD1Ev @ 676 NONAME - _ZN23QDeclarativeDomDocumentD2Ev @ 677 NONAME - _ZN23QDeclarativeDomDocumentaSERKS_ @ 678 NONAME - _ZN23QDeclarativeDomPropertyC1ERKS_ @ 679 NONAME - _ZN23QDeclarativeDomPropertyC1Ev @ 680 NONAME - _ZN23QDeclarativeDomPropertyC2ERKS_ @ 681 NONAME - _ZN23QDeclarativeDomPropertyC2Ev @ 682 NONAME - _ZN23QDeclarativeDomPropertyD1Ev @ 683 NONAME - _ZN23QDeclarativeDomPropertyD2Ev @ 684 NONAME - _ZN23QDeclarativeDomPropertyaSERKS_ @ 685 NONAME - _ZN23QDeclarativeEngineDebug11qt_metacallEN11QMetaObject4CallEiPPv @ 686 NONAME - _ZN23QDeclarativeEngineDebug11qt_metacastEPKc @ 687 NONAME - _ZN23QDeclarativeEngineDebug11queryObjectERK32QDeclarativeDebugObjectReferenceP7QObject @ 688 NONAME - _ZN23QDeclarativeEngineDebug11removeWatchEP22QDeclarativeDebugWatch @ 689 NONAME - _ZN23QDeclarativeEngineDebug16staticMetaObjectE @ 690 NONAME DATA 16 - _ZN23QDeclarativeEngineDebug17queryRootContextsERK32QDeclarativeDebugEngineReferenceP7QObject @ 691 NONAME - _ZN23QDeclarativeEngineDebug19getStaticMetaObjectEv @ 692 NONAME - _ZN23QDeclarativeEngineDebug19setBindingForObjectEiRK7QStringRK8QVariantbP7QObject @ 693 NONAME - _ZN23QDeclarativeEngineDebug20queryObjectRecursiveERK32QDeclarativeDebugObjectReferenceP7QObject @ 694 NONAME - _ZN23QDeclarativeEngineDebug21queryAvailableEnginesEP7QObject @ 695 NONAME - _ZN23QDeclarativeEngineDebug21queryExpressionResultEiRK7QStringP7QObject @ 696 NONAME - _ZN23QDeclarativeEngineDebug8addWatchERK30QDeclarativeDebugFileReferenceP7QObject @ 697 NONAME - _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceP7QObject @ 698 NONAME - _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceRK7QStringP7QObject @ 699 NONAME - _ZN23QDeclarativeEngineDebug8addWatchERK33QDeclarativeDebugContextReferenceRK7QStringP7QObject @ 700 NONAME - _ZN23QDeclarativeEngineDebug8addWatchERK34QDeclarativeDebugPropertyReferenceP7QObject @ 701 NONAME - _ZN23QDeclarativeEngineDebugC1EP27QDeclarativeDebugConnectionP7QObject @ 702 NONAME - _ZN23QDeclarativeEngineDebugC2EP27QDeclarativeDebugConnectionP7QObject @ 703 NONAME - _ZN23QDeclarativeItemPrivate10resetWidthEv @ 704 NONAME - _ZN23QDeclarativeItemPrivate11data_appendEP24QDeclarativeListPropertyI7QObjectEPS1_ @ 705 NONAME - _ZN23QDeclarativeItemPrivate11resetHeightEv @ 706 NONAME - _ZN23QDeclarativeItemPrivate11transitionsEv @ 707 NONAME - _ZN23QDeclarativeItemPrivate12focusChangedEb @ 708 NONAME - _ZN23QDeclarativeItemPrivate12resources_atEP24QDeclarativeListPropertyI7QObjectEi @ 709 NONAME - _ZN23QDeclarativeItemPrivate12transform_atEP24QDeclarativeListPropertyI18QGraphicsTransformEi @ 710 NONAME - _ZN23QDeclarativeItemPrivate14consistentTimeE @ 711 NONAME DATA 8 - _ZN23QDeclarativeItemPrivate14parentPropertyEP7QObjectPvP28QDeclarativeNotifierEndpoint @ 712 NONAME - _ZN23QDeclarativeItemPrivate15resources_countEP24QDeclarativeListPropertyI7QObjectE @ 713 NONAME - _ZN23QDeclarativeItemPrivate15transform_clearEP24QDeclarativeListPropertyI18QGraphicsTransformE @ 714 NONAME - _ZN23QDeclarativeItemPrivate15transform_countEP24QDeclarativeListPropertyI18QGraphicsTransformE @ 715 NONAME - _ZN23QDeclarativeItemPrivate16resources_appendEP24QDeclarativeListPropertyI7QObjectEPS1_ @ 716 NONAME - _ZN23QDeclarativeItemPrivate16transformChangedEv @ 717 NONAME - _ZN23QDeclarativeItemPrivate16transform_appendEP24QDeclarativeListPropertyI18QGraphicsTransformEPS1_ @ 718 NONAME - _ZN23QDeclarativeItemPrivate17setConsistentTimeEx @ 719 NONAME - _ZN23QDeclarativeItemPrivate24removeItemChangeListenerEP30QDeclarativeItemChangeListener6QFlagsINS_10ChangeTypeEE @ 720 NONAME - _ZN23QDeclarativeItemPrivate4dataEv @ 721 NONAME - _ZN23QDeclarativeItemPrivate5startER13QElapsedTimer @ 722 NONAME - _ZN23QDeclarativeItemPrivate6statesEv @ 723 NONAME - _ZN23QDeclarativeItemPrivate7_statesEv @ 724 NONAME - _ZN23QDeclarativeItemPrivate7elapsedER13QElapsedTimer @ 725 NONAME - _ZN23QDeclarativeItemPrivate7restartER13QElapsedTimer @ 726 NONAME - _ZN23QDeclarativeItemPrivate8setStateERK7QString @ 727 NONAME - _ZN23QDeclarativeItemPrivate8setWidthEf @ 728 NONAME - _ZN23QDeclarativeItemPrivate9resourcesEv @ 729 NONAME - _ZN23QDeclarativeItemPrivate9setHeightEf @ 730 NONAME - _ZN23QDeclarativePixmapCache15pendingRequestsEv @ 731 NONAME ABSENT - _ZN23QDeclarativePixmapCache3getERK4QUrlP7QPixmapP7QStringP5QSizebii @ 732 NONAME ABSENT - _ZN23QDeclarativePixmapCache6cancelERK4QUrlP7QObject @ 733 NONAME ABSENT - _ZN23QDeclarativePixmapCache7requestEP18QDeclarativeEngineRK4QUrlii @ 734 NONAME ABSENT - _ZN23QDeclarativePixmapReply10setLoadingEv @ 735 NONAME ABSENT - _ZN23QDeclarativePixmapReply11qt_metacallEN11QMetaObject4CallEiPPv @ 736 NONAME ABSENT - _ZN23QDeclarativePixmapReply11qt_metacastEPKc @ 737 NONAME ABSENT - _ZN23QDeclarativePixmapReply16downloadProgressExx @ 738 NONAME ABSENT - _ZN23QDeclarativePixmapReply16staticMetaObjectE @ 739 NONAME DATA 16 ABSENT - _ZN23QDeclarativePixmapReply19getStaticMetaObjectEv @ 740 NONAME ABSENT - _ZN23QDeclarativePixmapReply5eventEP6QEvent @ 741 NONAME ABSENT - _ZN23QDeclarativePixmapReply6addRefEv @ 742 NONAME ABSENT - _ZN23QDeclarativePixmapReply7releaseEb @ 743 NONAME ABSENT - _ZN23QDeclarativePixmapReply8finishedEv @ 744 NONAME ABSENT - _ZN23QDeclarativePixmapReplyC1EP23QDeclarativeImageReaderRK4QUrlii @ 745 NONAME ABSENT - _ZN23QDeclarativePixmapReplyC2EP23QDeclarativeImageReaderRK4QUrlii @ 746 NONAME ABSENT - _ZN23QDeclarativePixmapReplyD0Ev @ 747 NONAME ABSENT - _ZN23QDeclarativePixmapReplyD1Ev @ 748 NONAME ABSENT - _ZN23QDeclarativePixmapReplyD2Ev @ 749 NONAME ABSENT - _ZN23QDeclarativePropertyMap11qt_metacallEN11QMetaObject4CallEiPPv @ 750 NONAME - _ZN23QDeclarativePropertyMap11qt_metacastEPKc @ 751 NONAME - _ZN23QDeclarativePropertyMap12valueChangedERK7QStringRK8QVariant @ 752 NONAME - _ZN23QDeclarativePropertyMap16staticMetaObjectE @ 753 NONAME DATA 16 - _ZN23QDeclarativePropertyMap19getStaticMetaObjectEv @ 754 NONAME - _ZN23QDeclarativePropertyMap5clearERK7QString @ 755 NONAME - _ZN23QDeclarativePropertyMap6insertERK7QStringRK8QVariant @ 756 NONAME - _ZN23QDeclarativePropertyMapC1EP7QObject @ 757 NONAME - _ZN23QDeclarativePropertyMapC2EP7QObject @ 758 NONAME - _ZN23QDeclarativePropertyMapD0Ev @ 759 NONAME - _ZN23QDeclarativePropertyMapD1Ev @ 760 NONAME - _ZN23QDeclarativePropertyMapD2Ev @ 761 NONAME - _ZN23QDeclarativePropertyMapixERK7QString @ 762 NONAME - _ZN24QDeclarativeCustomParser11clearErrorsEv @ 763 NONAME - _ZN24QDeclarativeCustomParser5errorERK28QDeclarativeCustomParserNodeRK7QString @ 764 NONAME - _ZN24QDeclarativeCustomParser5errorERK32QDeclarativeCustomParserPropertyRK7QString @ 765 NONAME - _ZN24QDeclarativeCustomParser5errorERK7QString @ 766 NONAME - _ZN24QDeclarativeDebugService11idForObjectEP7QObject @ 767 NONAME - _ZN24QDeclarativeDebugService11objectForIdEi @ 768 NONAME - _ZN24QDeclarativeDebugService11qt_metacallEN11QMetaObject4CallEiPPv @ 769 NONAME - _ZN24QDeclarativeDebugService11qt_metacastEPKc @ 770 NONAME - _ZN24QDeclarativeDebugService11sendMessageERK10QByteArray @ 771 NONAME - _ZN24QDeclarativeDebugService14enabledChangedEb @ 772 NONAME - _ZN24QDeclarativeDebugService14objectToStringEP7QObject @ 773 NONAME - _ZN24QDeclarativeDebugService15messageReceivedERK10QByteArray @ 774 NONAME - _ZN24QDeclarativeDebugService16staticMetaObjectE @ 775 NONAME DATA 16 - _ZN24QDeclarativeDebugService18hasDebuggingClientEv @ 776 NONAME - _ZN24QDeclarativeDebugService18isDebuggingEnabledEv @ 777 NONAME - _ZN24QDeclarativeDebugService19getStaticMetaObjectEv @ 778 NONAME - _ZN24QDeclarativeDebugServiceC1ERK7QStringP7QObject @ 779 NONAME - _ZN24QDeclarativeDebugServiceC2ERK7QStringP7QObject @ 780 NONAME - _ZN24QDeclarativeDomComponentC1ERKS_ @ 781 NONAME - _ZN24QDeclarativeDomComponentC1Ev @ 782 NONAME - _ZN24QDeclarativeDomComponentC2ERKS_ @ 783 NONAME - _ZN24QDeclarativeDomComponentC2Ev @ 784 NONAME - _ZN24QDeclarativeDomComponentD1Ev @ 785 NONAME - _ZN24QDeclarativeDomComponentD2Ev @ 786 NONAME - _ZN24QDeclarativeDomComponentaSERKS_ @ 787 NONAME - _ZN24QDeclarativeParserStatusC2Ev @ 788 NONAME - _ZN24QDeclarativeParserStatusD0Ev @ 789 NONAME - _ZN24QDeclarativeParserStatusD1Ev @ 790 NONAME - _ZN24QDeclarativeParserStatusD2Ev @ 791 NONAME - _ZN24QDeclarativeScriptString10setContextEP19QDeclarativeContext @ 792 NONAME - _ZN24QDeclarativeScriptString14setScopeObjectEP7QObject @ 793 NONAME - _ZN24QDeclarativeScriptString9setScriptERK7QString @ 794 NONAME - _ZN24QDeclarativeScriptStringC1ERKS_ @ 795 NONAME - _ZN24QDeclarativeScriptStringC1Ev @ 796 NONAME - _ZN24QDeclarativeScriptStringC2ERKS_ @ 797 NONAME - _ZN24QDeclarativeScriptStringC2Ev @ 798 NONAME - _ZN24QDeclarativeScriptStringD1Ev @ 799 NONAME - _ZN24QDeclarativeScriptStringD2Ev @ 800 NONAME - _ZN24QDeclarativeScriptStringaSERKS_ @ 801 NONAME - _ZN25QDeclarativeImageProviderD0Ev @ 802 NONAME - _ZN25QDeclarativeImageProviderD1Ev @ 803 NONAME - _ZN25QDeclarativeImageProviderD2Ev @ 804 NONAME - _ZN25QDeclarativeListReferenceC1EP7QObjectPKcP18QDeclarativeEngine @ 805 NONAME - _ZN25QDeclarativeListReferenceC1ERKS_ @ 806 NONAME - _ZN25QDeclarativeListReferenceC1Ev @ 807 NONAME - _ZN25QDeclarativeListReferenceC2EP7QObjectPKcP18QDeclarativeEngine @ 808 NONAME - _ZN25QDeclarativeListReferenceC2ERKS_ @ 809 NONAME - _ZN25QDeclarativeListReferenceC2Ev @ 810 NONAME - _ZN25QDeclarativeListReferenceD1Ev @ 811 NONAME - _ZN25QDeclarativeListReferenceD2Ev @ 812 NONAME - _ZN25QDeclarativeListReferenceaSERKS_ @ 813 NONAME - _ZN26QDeclarativeDebuggerStatus16setSelectedStateEb @ 814 NONAME - _ZN26QDeclarativeDebuggerStatusD0Ev @ 815 NONAME - _ZN26QDeclarativeDebuggerStatusD1Ev @ 816 NONAME - _ZN26QDeclarativeDebuggerStatusD2Ev @ 817 NONAME - _ZN26QDeclarativeOpenMetaObject12initialValueEi @ 818 NONAME - _ZN26QDeclarativeOpenMetaObject12propertyReadEi @ 819 NONAME - _ZN26QDeclarativeOpenMetaObject13propertyWriteEi @ 820 NONAME - _ZN26QDeclarativeOpenMetaObject14createPropertyEPKcS1_ @ 821 NONAME - _ZN26QDeclarativeOpenMetaObject15propertyCreatedEiR20QMetaPropertyBuilder @ 822 NONAME - _ZN26QDeclarativeOpenMetaObject15propertyWrittenEi @ 823 NONAME - _ZN26QDeclarativeOpenMetaObject8metaCallEN11QMetaObject4CallEiPPv @ 824 NONAME - _ZN26QDeclarativeOpenMetaObject8setValueERK10QByteArrayRK8QVariant @ 825 NONAME - _ZN26QDeclarativeOpenMetaObject8setValueEiRK8QVariant @ 826 NONAME - _ZN26QDeclarativeOpenMetaObject9setCachedEb @ 827 NONAME - _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 828 NONAME - _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectb @ 829 NONAME - _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 830 NONAME - _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectb @ 831 NONAME - _ZN26QDeclarativeOpenMetaObjectD0Ev @ 832 NONAME - _ZN26QDeclarativeOpenMetaObjectD1Ev @ 833 NONAME - _ZN26QDeclarativeOpenMetaObjectD2Ev @ 834 NONAME - _ZN26QDeclarativeOpenMetaObjectixERK10QByteArray @ 835 NONAME - _ZN26QDeclarativeOpenMetaObjectixEi @ 836 NONAME - _ZN26QDeclarativeStateOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 837 NONAME - _ZN26QDeclarativeStateOperation11qt_metacastEPKc @ 838 NONAME - _ZN26QDeclarativeStateOperation16staticMetaObjectE @ 839 NONAME DATA 16 - _ZN26QDeclarativeStateOperation19getStaticMetaObjectEv @ 840 NONAME - _ZN26QDeclarativeStateOperation7actionsEv @ 841 NONAME - _ZN26QDeclarativeStateOperationC1ER14QObjectPrivateP7QObject @ 842 NONAME - _ZN26QDeclarativeStateOperationC2ER14QObjectPrivateP7QObject @ 843 NONAME - _ZN27QDeclarativeAbstractBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 844 NONAME - _ZN27QDeclarativeAbstractBinding11addToObjectEP7QObject @ 845 NONAME - _ZN27QDeclarativeAbstractBinding16removeFromObjectEv @ 846 NONAME - _ZN27QDeclarativeAbstractBinding5clearEv @ 847 NONAME - _ZN27QDeclarativeAbstractBinding7destroyEv @ 848 NONAME - _ZN27QDeclarativeAbstractBindingC2Ev @ 849 NONAME - _ZN27QDeclarativeAbstractBindingD0Ev @ 850 NONAME - _ZN27QDeclarativeAbstractBindingD1Ev @ 851 NONAME - _ZN27QDeclarativeAbstractBindingD2Ev @ 852 NONAME - _ZN27QDeclarativeDebugConnection11qt_metacallEN11QMetaObject4CallEiPPv @ 853 NONAME - _ZN27QDeclarativeDebugConnection11qt_metacastEPKc @ 854 NONAME - _ZN27QDeclarativeDebugConnection16staticMetaObjectE @ 855 NONAME DATA 16 - _ZN27QDeclarativeDebugConnection19getStaticMetaObjectEv @ 856 NONAME - _ZN27QDeclarativeDebugConnectionC1EP7QObject @ 857 NONAME - _ZN27QDeclarativeDebugConnectionC2EP7QObject @ 858 NONAME - _ZN27QDeclarativeDomValueBindingC1ERKS_ @ 859 NONAME - _ZN27QDeclarativeDomValueBindingC1Ev @ 860 NONAME - _ZN27QDeclarativeDomValueBindingC2ERKS_ @ 861 NONAME - _ZN27QDeclarativeDomValueBindingC2Ev @ 862 NONAME - _ZN27QDeclarativeDomValueBindingD1Ev @ 863 NONAME - _ZN27QDeclarativeDomValueBindingD2Ev @ 864 NONAME - _ZN27QDeclarativeDomValueBindingaSERKS_ @ 865 NONAME - _ZN27QDeclarativeDomValueLiteralC1ERKS_ @ 866 NONAME - _ZN27QDeclarativeDomValueLiteralC1Ev @ 867 NONAME - _ZN27QDeclarativeDomValueLiteralC2ERKS_ @ 868 NONAME - _ZN27QDeclarativeDomValueLiteralC2Ev @ 869 NONAME - _ZN27QDeclarativeDomValueLiteralD1Ev @ 870 NONAME - _ZN27QDeclarativeDomValueLiteralD2Ev @ 871 NONAME - _ZN27QDeclarativeDomValueLiteralaSERKS_ @ 872 NONAME - _ZN27QDeclarativeExtensionPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 873 NONAME - _ZN27QDeclarativeExtensionPlugin11qt_metacastEPKc @ 874 NONAME - _ZN27QDeclarativeExtensionPlugin16initializeEngineEP18QDeclarativeEnginePKc @ 875 NONAME - _ZN27QDeclarativeExtensionPlugin16staticMetaObjectE @ 876 NONAME DATA 16 - _ZN27QDeclarativeExtensionPlugin19getStaticMetaObjectEv @ 877 NONAME - _ZN27QDeclarativeExtensionPluginC2EP7QObject @ 878 NONAME - _ZN27QDeclarativeExtensionPluginD0Ev @ 879 NONAME - _ZN27QDeclarativeExtensionPluginD1Ev @ 880 NONAME - _ZN27QDeclarativeExtensionPluginD2Ev @ 881 NONAME - _ZN27QDeclarativeGridScaledImage12stringToRuleERK7QString @ 882 NONAME - _ZN27QDeclarativeGridScaledImageC1EP9QIODevice @ 883 NONAME - _ZN27QDeclarativeGridScaledImageC1ERKS_ @ 884 NONAME - _ZN27QDeclarativeGridScaledImageC1Ev @ 885 NONAME - _ZN27QDeclarativeGridScaledImageC2EP9QIODevice @ 886 NONAME - _ZN27QDeclarativeGridScaledImageC2ERKS_ @ 887 NONAME - _ZN27QDeclarativeGridScaledImageC2Ev @ 888 NONAME - _ZN27QDeclarativeGridScaledImageaSERKS_ @ 889 NONAME - _ZN27QDeclarativePropertyPrivate10canConvertEPK11QMetaObjectS2_ @ 890 NONAME - _ZN27QDeclarativePropertyPrivate10setBindingEP7QObjectiiP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 891 NONAME - _ZN27QDeclarativePropertyPrivate10setBindingERK20QDeclarativePropertyP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 892 NONAME - _ZN27QDeclarativePropertyPrivate11initDefaultEP7QObject @ 893 NONAME - _ZN27QDeclarativePropertyPrivate12bindingIndexERK20QDeclarativeProperty @ 894 NONAME - _ZN27QDeclarativePropertyPrivate12initPropertyEP7QObjectRK7QString @ 895 NONAME - _ZN27QDeclarativePropertyPrivate12savePropertyEPK11QMetaObjecti @ 896 NONAME - _ZN27QDeclarativePropertyPrivate13saveValueTypeEPK11QMetaObjectiS2_i @ 897 NONAME - _ZN27QDeclarativePropertyPrivate16findSignalByNameEPK11QMetaObjectRK10QByteArray @ 898 NONAME - _ZN27QDeclarativePropertyPrivate16signalExpressionERK20QDeclarativeProperty @ 899 NONAME - _ZN27QDeclarativePropertyPrivate17readValuePropertyEv @ 900 NONAME - _ZN27QDeclarativePropertyPrivate17writeEnumPropertyERK13QMetaPropertyiP7QObjectRK8QVarianti @ 901 NONAME - _ZN27QDeclarativePropertyPrivate18valueTypeCoreIndexERK20QDeclarativeProperty @ 902 NONAME - _ZN27QDeclarativePropertyPrivate18writeValuePropertyERK8QVariant6QFlagsINS_9WriteFlagEE @ 903 NONAME - _ZN27QDeclarativePropertyPrivate19setSignalExpressionERK20QDeclarativePropertyP22QDeclarativeExpression @ 904 NONAME - _ZN27QDeclarativePropertyPrivate20rawMetaObjectForTypeEP25QDeclarativeEnginePrivatei @ 905 NONAME - _ZN27QDeclarativePropertyPrivate5equalEPK11QMetaObjectS2_ @ 906 NONAME - _ZN27QDeclarativePropertyPrivate5writeEP7QObjectRKN25QDeclarativePropertyCache4DataERK8QVariantP23QDeclarativeContextData6QFlagsINS_9WriteFlagEE @ 907 NONAME - _ZN27QDeclarativePropertyPrivate5writeERK20QDeclarativePropertyRK8QVariant6QFlagsINS_9WriteFlagEE @ 908 NONAME - _ZN27QDeclarativePropertyPrivate7bindingERK20QDeclarativeProperty @ 909 NONAME - _ZN27QDeclarativePropertyPrivate7restoreERK10QByteArrayP7QObjectP23QDeclarativeContextData @ 910 NONAME - _ZN28QDeclarativeCustomParserNodeC1ERKS_ @ 911 NONAME - _ZN28QDeclarativeCustomParserNodeC1Ev @ 912 NONAME - _ZN28QDeclarativeCustomParserNodeC2ERKS_ @ 913 NONAME - _ZN28QDeclarativeCustomParserNodeC2Ev @ 914 NONAME - _ZN28QDeclarativeCustomParserNodeD1Ev @ 915 NONAME - _ZN28QDeclarativeCustomParserNodeD2Ev @ 916 NONAME - _ZN28QDeclarativeCustomParserNodeaSERKS_ @ 917 NONAME - _ZN28QDeclarativeDebugObjectQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 918 NONAME - _ZN28QDeclarativeDebugObjectQuery11qt_metacastEPKc @ 919 NONAME - _ZN28QDeclarativeDebugObjectQuery16staticMetaObjectE @ 920 NONAME DATA 16 - _ZN28QDeclarativeDebugObjectQuery19getStaticMetaObjectEv @ 921 NONAME - _ZN28QDeclarativeDebugObjectQueryC1EP7QObject @ 922 NONAME - _ZN28QDeclarativeDebugObjectQueryC2EP7QObject @ 923 NONAME - _ZN28QDeclarativeDebugObjectQueryD0Ev @ 924 NONAME - _ZN28QDeclarativeDebugObjectQueryD1Ev @ 925 NONAME - _ZN28QDeclarativeDebugObjectQueryD2Ev @ 926 NONAME - _ZN28QDeclarativeStringConverters14dateFromStringERK7QStringPb @ 927 NONAME - _ZN28QDeclarativeStringConverters14timeFromStringERK7QStringPb @ 928 NONAME - _ZN28QDeclarativeStringConverters15colorFromStringERK7QStringPb @ 929 NONAME - _ZN28QDeclarativeStringConverters15rectFFromStringERK7QStringPb @ 930 NONAME - _ZN28QDeclarativeStringConverters15sizeFFromStringERK7QStringPb @ 931 NONAME - _ZN28QDeclarativeStringConverters16pointFFromStringERK7QStringPb @ 932 NONAME - _ZN28QDeclarativeStringConverters17variantFromStringERK7QString @ 933 NONAME - _ZN28QDeclarativeStringConverters17variantFromStringERK7QStringiPb @ 934 NONAME - _ZN28QDeclarativeStringConverters18dateTimeFromStringERK7QStringPb @ 935 NONAME - _ZN28QDeclarativeStringConverters18vector3DFromStringERK7QStringPb @ 936 NONAME - _ZN28QDeclarativeValueTypeFactory11isValueTypeEi @ 937 NONAME - _ZN28QDeclarativeValueTypeFactory18registerValueTypesEv @ 938 NONAME - _ZN28QDeclarativeValueTypeFactory9valueTypeEi @ 939 NONAME - _ZN28QDeclarativeValueTypeFactoryC1Ev @ 940 NONAME - _ZN28QDeclarativeValueTypeFactoryC2Ev @ 941 NONAME - _ZN28QDeclarativeValueTypeFactoryD1Ev @ 942 NONAME - _ZN28QDeclarativeValueTypeFactoryD2Ev @ 943 NONAME - _ZN29QDeclarativeDebugEnginesQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 944 NONAME - _ZN29QDeclarativeDebugEnginesQuery11qt_metacastEPKc @ 945 NONAME - _ZN29QDeclarativeDebugEnginesQuery16staticMetaObjectE @ 946 NONAME DATA 16 - _ZN29QDeclarativeDebugEnginesQuery19getStaticMetaObjectEv @ 947 NONAME - _ZN29QDeclarativeDebugEnginesQueryC1EP7QObject @ 948 NONAME - _ZN29QDeclarativeDebugEnginesQueryC2EP7QObject @ 949 NONAME - _ZN29QDeclarativeDebugEnginesQueryD0Ev @ 950 NONAME - _ZN29QDeclarativeDebugEnginesQueryD1Ev @ 951 NONAME - _ZN29QDeclarativeDebugEnginesQueryD2Ev @ 952 NONAME - _ZN30QDeclarativeDebugFileReference13setLineNumberEi @ 953 NONAME - _ZN30QDeclarativeDebugFileReference15setColumnNumberEi @ 954 NONAME - _ZN30QDeclarativeDebugFileReference6setUrlERK4QUrl @ 955 NONAME - _ZN30QDeclarativeDebugFileReferenceC1ERKS_ @ 956 NONAME - _ZN30QDeclarativeDebugFileReferenceC1Ev @ 957 NONAME - _ZN30QDeclarativeDebugFileReferenceC2ERKS_ @ 958 NONAME - _ZN30QDeclarativeDebugFileReferenceC2Ev @ 959 NONAME - _ZN30QDeclarativeDebugFileReferenceaSERKS_ @ 960 NONAME - _ZN30QDeclarativeDebugPropertyWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 961 NONAME - _ZN30QDeclarativeDebugPropertyWatch11qt_metacastEPKc @ 962 NONAME - _ZN30QDeclarativeDebugPropertyWatch16staticMetaObjectE @ 963 NONAME DATA 16 - _ZN30QDeclarativeDebugPropertyWatch19getStaticMetaObjectEv @ 964 NONAME - _ZN30QDeclarativeDebugPropertyWatchC1EP7QObject @ 965 NONAME - _ZN30QDeclarativeDebugPropertyWatchC2EP7QObject @ 966 NONAME - _ZN30QDeclarativeDomDynamicPropertyC1ERKS_ @ 967 NONAME - _ZN30QDeclarativeDomDynamicPropertyC1Ev @ 968 NONAME - _ZN30QDeclarativeDomDynamicPropertyC2ERKS_ @ 969 NONAME - _ZN30QDeclarativeDomDynamicPropertyC2Ev @ 970 NONAME - _ZN30QDeclarativeDomDynamicPropertyD1Ev @ 971 NONAME - _ZN30QDeclarativeDomDynamicPropertyD2Ev @ 972 NONAME - _ZN30QDeclarativeDomDynamicPropertyaSERKS_ @ 973 NONAME - _ZN30QDeclarativeOpenMetaObjectType14createPropertyERK10QByteArray @ 974 NONAME - _ZN30QDeclarativeOpenMetaObjectType15propertyCreatedEiR20QMetaPropertyBuilder @ 975 NONAME - _ZN30QDeclarativeOpenMetaObjectTypeC1EPK11QMetaObjectP18QDeclarativeEngine @ 976 NONAME - _ZN30QDeclarativeOpenMetaObjectTypeC2EPK11QMetaObjectP18QDeclarativeEngine @ 977 NONAME - _ZN30QDeclarativeOpenMetaObjectTypeD0Ev @ 978 NONAME - _ZN30QDeclarativeOpenMetaObjectTypeD1Ev @ 979 NONAME - _ZN30QDeclarativeOpenMetaObjectTypeD2Ev @ 980 NONAME - _ZN31QDeclarativeDomValueValueSourceC1ERKS_ @ 981 NONAME - _ZN31QDeclarativeDomValueValueSourceC1Ev @ 982 NONAME - _ZN31QDeclarativeDomValueValueSourceC2ERKS_ @ 983 NONAME - _ZN31QDeclarativeDomValueValueSourceC2Ev @ 984 NONAME - _ZN31QDeclarativeDomValueValueSourceD1Ev @ 985 NONAME - _ZN31QDeclarativeDomValueValueSourceD2Ev @ 986 NONAME - _ZN31QDeclarativeDomValueValueSourceaSERKS_ @ 987 NONAME - _ZN31QDeclarativePropertyValueSourceC2Ev @ 988 NONAME - _ZN31QDeclarativePropertyValueSourceD0Ev @ 989 NONAME - _ZN31QDeclarativePropertyValueSourceD1Ev @ 990 NONAME - _ZN31QDeclarativePropertyValueSourceD2Ev @ 991 NONAME - _ZN32QDeclarativeCustomParserPropertyC1ERKS_ @ 992 NONAME - _ZN32QDeclarativeCustomParserPropertyC1Ev @ 993 NONAME - _ZN32QDeclarativeCustomParserPropertyC2ERKS_ @ 994 NONAME - _ZN32QDeclarativeCustomParserPropertyC2Ev @ 995 NONAME - _ZN32QDeclarativeCustomParserPropertyD1Ev @ 996 NONAME - _ZN32QDeclarativeCustomParserPropertyD2Ev @ 997 NONAME - _ZN32QDeclarativeCustomParserPropertyaSERKS_ @ 998 NONAME - _ZN32QDeclarativeDebugEngineReferenceC1ERKS_ @ 999 NONAME - _ZN32QDeclarativeDebugEngineReferenceC1Ei @ 1000 NONAME - _ZN32QDeclarativeDebugEngineReferenceC1Ev @ 1001 NONAME - _ZN32QDeclarativeDebugEngineReferenceC2ERKS_ @ 1002 NONAME - _ZN32QDeclarativeDebugEngineReferenceC2Ei @ 1003 NONAME - _ZN32QDeclarativeDebugEngineReferenceC2Ev @ 1004 NONAME - _ZN32QDeclarativeDebugEngineReferenceaSERKS_ @ 1005 NONAME - _ZN32QDeclarativeDebugExpressionQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1006 NONAME - _ZN32QDeclarativeDebugExpressionQuery11qt_metacastEPKc @ 1007 NONAME - _ZN32QDeclarativeDebugExpressionQuery16staticMetaObjectE @ 1008 NONAME DATA 16 - _ZN32QDeclarativeDebugExpressionQuery19getStaticMetaObjectEv @ 1009 NONAME - _ZN32QDeclarativeDebugExpressionQueryC1EP7QObject @ 1010 NONAME - _ZN32QDeclarativeDebugExpressionQueryC2EP7QObject @ 1011 NONAME - _ZN32QDeclarativeDebugExpressionQueryD0Ev @ 1012 NONAME - _ZN32QDeclarativeDebugExpressionQueryD1Ev @ 1013 NONAME - _ZN32QDeclarativeDebugExpressionQueryD2Ev @ 1014 NONAME - _ZN32QDeclarativeDebugObjectReferenceC1ERKS_ @ 1015 NONAME - _ZN32QDeclarativeDebugObjectReferenceC1Ei @ 1016 NONAME - _ZN32QDeclarativeDebugObjectReferenceC1Ev @ 1017 NONAME - _ZN32QDeclarativeDebugObjectReferenceC2ERKS_ @ 1018 NONAME - _ZN32QDeclarativeDebugObjectReferenceC2Ei @ 1019 NONAME - _ZN32QDeclarativeDebugObjectReferenceC2Ev @ 1020 NONAME - _ZN32QDeclarativeDebugObjectReferenceaSERKS_ @ 1021 NONAME - _ZN33QDeclarativeDebugContextReferenceC1ERKS_ @ 1022 NONAME - _ZN33QDeclarativeDebugContextReferenceC1Ev @ 1023 NONAME - _ZN33QDeclarativeDebugContextReferenceC2ERKS_ @ 1024 NONAME - _ZN33QDeclarativeDebugContextReferenceC2Ev @ 1025 NONAME - _ZN33QDeclarativeDebugContextReferenceaSERKS_ @ 1026 NONAME - _ZN33QDeclarativeDebugRootContextQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1027 NONAME - _ZN33QDeclarativeDebugRootContextQuery11qt_metacastEPKc @ 1028 NONAME - _ZN33QDeclarativeDebugRootContextQuery16staticMetaObjectE @ 1029 NONAME DATA 16 - _ZN33QDeclarativeDebugRootContextQuery19getStaticMetaObjectEv @ 1030 NONAME - _ZN33QDeclarativeDebugRootContextQueryC1EP7QObject @ 1031 NONAME - _ZN33QDeclarativeDebugRootContextQueryC2EP7QObject @ 1032 NONAME - _ZN33QDeclarativeDebugRootContextQueryD0Ev @ 1033 NONAME - _ZN33QDeclarativeDebugRootContextQueryD1Ev @ 1034 NONAME - _ZN33QDeclarativeDebugRootContextQueryD2Ev @ 1035 NONAME - _ZN34QDeclarativeDebugPropertyReferenceC1ERKS_ @ 1036 NONAME - _ZN34QDeclarativeDebugPropertyReferenceC1Ev @ 1037 NONAME - _ZN34QDeclarativeDebugPropertyReferenceC2ERKS_ @ 1038 NONAME - _ZN34QDeclarativeDebugPropertyReferenceC2Ev @ 1039 NONAME - _ZN34QDeclarativeDebugPropertyReferenceaSERKS_ @ 1040 NONAME - _ZN36QDeclarativeDomValueValueInterceptorC1ERKS_ @ 1041 NONAME - _ZN36QDeclarativeDomValueValueInterceptorC1Ev @ 1042 NONAME - _ZN36QDeclarativeDomValueValueInterceptorC2ERKS_ @ 1043 NONAME - _ZN36QDeclarativeDomValueValueInterceptorC2Ev @ 1044 NONAME - _ZN36QDeclarativeDomValueValueInterceptorD1Ev @ 1045 NONAME - _ZN36QDeclarativeDomValueValueInterceptorD2Ev @ 1046 NONAME - _ZN36QDeclarativeDomValueValueInterceptoraSERKS_ @ 1047 NONAME - _ZN36QDeclarativePropertyValueInterceptorC2Ev @ 1048 NONAME - _ZN36QDeclarativePropertyValueInterceptorD0Ev @ 1049 NONAME - _ZN36QDeclarativePropertyValueInterceptorD1Ev @ 1050 NONAME - _ZN36QDeclarativePropertyValueInterceptorD2Ev @ 1051 NONAME - _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 1052 NONAME - _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacastEPKc @ 1053 NONAME - _ZN38QDeclarativeDebugObjectExpressionWatch16staticMetaObjectE @ 1054 NONAME DATA 16 - _ZN38QDeclarativeDebugObjectExpressionWatch19getStaticMetaObjectEv @ 1055 NONAME - _ZN38QDeclarativeDebugObjectExpressionWatchC1EP7QObject @ 1056 NONAME - _ZN38QDeclarativeDebugObjectExpressionWatchC2EP7QObject @ 1057 NONAME - _ZN39QDeclarativeNetworkAccessManagerFactoryD0Ev @ 1058 NONAME - _ZN39QDeclarativeNetworkAccessManagerFactoryD1Ev @ 1059 NONAME - _ZN39QDeclarativeNetworkAccessManagerFactoryD2Ev @ 1060 NONAME - _ZN7QPacket5clearEv @ 1061 NONAME - _ZN7QPacketC1ERK10QByteArray @ 1062 NONAME - _ZN7QPacketC1ERKS_ @ 1063 NONAME - _ZN7QPacketC1Ev @ 1064 NONAME - _ZN7QPacketC2ERK10QByteArray @ 1065 NONAME - _ZN7QPacketC2ERKS_ @ 1066 NONAME - _ZN7QPacketC2Ev @ 1067 NONAME - _ZN7QPacketD0Ev @ 1068 NONAME - _ZN7QPacketD1Ev @ 1069 NONAME - _ZN7QPacketD2Ev @ 1070 NONAME - _ZNK15QDeclarativePen10metaObjectEv @ 1071 NONAME - _ZNK15QPacketProtocol10metaObjectEv @ 1072 NONAME - _ZNK15QPacketProtocol16packetsAvailableEv @ 1073 NONAME - _ZNK15QPacketProtocol17maximumPacketSizeEv @ 1074 NONAME - _ZNK16QDeclarativeItem10metaObjectEv @ 1075 NONAME - _ZNK16QDeclarativeItem10parentItemEv @ 1076 NONAME - _ZNK16QDeclarativeItem10wantsFocusEv @ 1077 NONAME - _ZNK16QDeclarativeItem10widthValidEv @ 1078 NONAME - _ZNK16QDeclarativeItem11heightValidEv @ 1079 NONAME - _ZNK16QDeclarativeItem11mapFromItemERK12QScriptValueff @ 1080 NONAME - _ZNK16QDeclarativeItem12boundingRectEv @ 1081 NONAME - _ZNK16QDeclarativeItem13implicitWidthEv @ 1082 NONAME - _ZNK16QDeclarativeItem13keepMouseGrabEv @ 1083 NONAME - _ZNK16QDeclarativeItem14baselineOffsetEv @ 1084 NONAME - _ZNK16QDeclarativeItem14implicitHeightEv @ 1085 NONAME - _ZNK16QDeclarativeItem15transformOriginEv @ 1086 NONAME - _ZNK16QDeclarativeItem16inputMethodQueryEN2Qt16InputMethodQueryE @ 1087 NONAME - _ZNK16QDeclarativeItem19isComponentCompleteEv @ 1088 NONAME - _ZNK16QDeclarativeItem4clipEv @ 1089 NONAME - _ZNK16QDeclarativeItem5widthEv @ 1090 NONAME - _ZNK16QDeclarativeItem6heightEv @ 1091 NONAME - _ZNK16QDeclarativeItem6smoothEv @ 1092 NONAME - _ZNK16QDeclarativeItem7childAtEff @ 1093 NONAME - _ZNK16QDeclarativeItem8hasFocusEv @ 1094 NONAME - _ZNK16QDeclarativeItem9mapToItemERK12QScriptValueff @ 1095 NONAME - _ZNK16QDeclarativeText10metaObjectEv @ 1096 NONAME - _ZNK16QDeclarativeText10styleColorEv @ 1097 NONAME - _ZNK16QDeclarativeText10textFormatEv @ 1098 NONAME - _ZNK16QDeclarativeText12boundingRectEv @ 1099 NONAME - _ZNK16QDeclarativeText12paintedWidthEv @ 1100 NONAME - _ZNK16QDeclarativeText13paintedHeightEv @ 1101 NONAME - _ZNK16QDeclarativeText16resourcesLoadingEv @ 1102 NONAME - _ZNK16QDeclarativeText4fontEv @ 1103 NONAME - _ZNK16QDeclarativeText4textEv @ 1104 NONAME - _ZNK16QDeclarativeText5colorEv @ 1105 NONAME - _ZNK16QDeclarativeText5styleEv @ 1106 NONAME - _ZNK16QDeclarativeText6hAlignEv @ 1107 NONAME - _ZNK16QDeclarativeText6vAlignEv @ 1108 NONAME - _ZNK16QDeclarativeText8wrapModeEv @ 1109 NONAME - _ZNK16QDeclarativeText9elideModeEv @ 1110 NONAME - _ZNK16QDeclarativeType10createSizeEv @ 1111 NONAME - _ZNK16QDeclarativeType10metaObjectEv @ 1112 NONAME - _ZNK16QDeclarativeType11isCreatableEv @ 1113 NONAME - _ZNK16QDeclarativeType11isInterfaceEv @ 1114 NONAME - _ZNK16QDeclarativeType11qListTypeIdEv @ 1115 NONAME - _ZNK16QDeclarativeType11qmlTypeNameEv @ 1116 NONAME - _ZNK16QDeclarativeType12customParserEv @ 1117 NONAME - _ZNK16QDeclarativeType12interfaceIIdEv @ 1118 NONAME - _ZNK16QDeclarativeType12majorVersionEv @ 1119 NONAME - _ZNK16QDeclarativeType12minorVersionEv @ 1120 NONAME - _ZNK16QDeclarativeType14baseMetaObjectEv @ 1121 NONAME - _ZNK16QDeclarativeType14createFunctionEv @ 1122 NONAME - _ZNK16QDeclarativeType14isExtendedTypeEv @ 1123 NONAME - _ZNK16QDeclarativeType16noCreationReasonEv @ 1124 NONAME - _ZNK16QDeclarativeType16parserStatusCastEv @ 1125 NONAME - _ZNK16QDeclarativeType18availableInVersionEii @ 1126 NONAME - _ZNK16QDeclarativeType22attachedPropertiesTypeEv @ 1127 NONAME - _ZNK16QDeclarativeType23propertyValueSourceCastEv @ 1128 NONAME - _ZNK16QDeclarativeType26attachedPropertiesFunctionEv @ 1129 NONAME - _ZNK16QDeclarativeType28propertyValueInterceptorCastEv @ 1130 NONAME - _ZNK16QDeclarativeType5indexEv @ 1131 NONAME - _ZNK16QDeclarativeType6createEPP7QObjectPPvj @ 1132 NONAME - _ZNK16QDeclarativeType6createEv @ 1133 NONAME - _ZNK16QDeclarativeType6typeIdEv @ 1134 NONAME - _ZNK16QDeclarativeType8typeNameEv @ 1135 NONAME - _ZNK16QDeclarativeView10metaObjectEv @ 1136 NONAME - _ZNK16QDeclarativeView10resizeModeEv @ 1137 NONAME - _ZNK16QDeclarativeView10rootObjectEv @ 1138 NONAME - _ZNK16QDeclarativeView11initialSizeEv @ 1139 NONAME - _ZNK16QDeclarativeView6errorsEv @ 1140 NONAME - _ZNK16QDeclarativeView6sourceEv @ 1141 NONAME - _ZNK16QDeclarativeView6statusEv @ 1142 NONAME - _ZNK16QDeclarativeView8sizeHintEv @ 1143 NONAME - _ZNK16QMetaEnumBuilder3keyEi @ 1144 NONAME - _ZNK16QMetaEnumBuilder4nameEv @ 1145 NONAME - _ZNK16QMetaEnumBuilder5valueEi @ 1146 NONAME - _ZNK16QMetaEnumBuilder6d_funcEv @ 1147 NONAME - _ZNK16QMetaEnumBuilder6isFlagEv @ 1148 NONAME - _ZNK16QMetaEnumBuilder8keyCountEv @ 1149 NONAME - _ZNK17QDeclarativeError11descriptionEv @ 1150 NONAME - _ZNK17QDeclarativeError3urlEv @ 1151 NONAME - _ZNK17QDeclarativeError4lineEv @ 1152 NONAME - _ZNK17QDeclarativeError6columnEv @ 1153 NONAME - _ZNK17QDeclarativeError7isValidEv @ 1154 NONAME - _ZNK17QDeclarativeError8toStringEv @ 1155 NONAME - _ZNK17QDeclarativeState10metaObjectEv @ 1156 NONAME - _ZNK17QDeclarativeState10stateGroupEv @ 1157 NONAME - _ZNK17QDeclarativeState11isWhenKnownEv @ 1158 NONAME - _ZNK17QDeclarativeState11operationAtEi @ 1159 NONAME - _ZNK17QDeclarativeState14operationCountEv @ 1160 NONAME - _ZNK17QDeclarativeState4nameEv @ 1161 NONAME - _ZNK17QDeclarativeState4whenEv @ 1162 NONAME - _ZNK17QDeclarativeState7extendsEv @ 1163 NONAME - _ZNK17QDeclarativeState7isNamedEv @ 1164 NONAME - _ZNK18QDeclarativeEngine10metaObjectEv @ 1165 NONAME - _ZNK18QDeclarativeEngine13imageProviderERK7QString @ 1166 NONAME - _ZNK18QDeclarativeEngine14importPathListEv @ 1167 NONAME - _ZNK18QDeclarativeEngine14pluginPathListEv @ 1168 NONAME - _ZNK18QDeclarativeEngine18offlineStoragePathEv @ 1169 NONAME - _ZNK18QDeclarativeEngine20networkAccessManagerEv @ 1170 NONAME - _ZNK18QDeclarativeEngine27networkAccessManagerFactoryEv @ 1171 NONAME - _ZNK18QDeclarativeEngine29outputWarningsToStandardErrorEv @ 1172 NONAME - _ZNK18QDeclarativeEngine7baseUrlEv @ 1173 NONAME - _ZNK18QDeclarativeParser7Variant12asStringListEv @ 1174 NONAME - _ZNK18QDeclarativeParser7Variant12isStringListEv @ 1175 NONAME - _ZNK18QDeclarativeParser7Variant4typeEv @ 1176 NONAME - _ZNK18QDeclarativeParser7Variant5asASTEv @ 1177 NONAME - _ZNK18QDeclarativeParser7Variant8asNumberEv @ 1178 NONAME - _ZNK18QDeclarativeParser7Variant8asScriptEv @ 1179 NONAME - _ZNK18QDeclarativeParser7Variant8asStringEv @ 1180 NONAME - _ZNK18QDeclarativeParser7Variant9asBooleanEv @ 1181 NONAME - _ZNK18QMetaMethodBuilder10attributesEv @ 1182 NONAME - _ZNK18QMetaMethodBuilder10methodTypeEv @ 1183 NONAME - _ZNK18QMetaMethodBuilder10returnTypeEv @ 1184 NONAME - _ZNK18QMetaMethodBuilder14parameterNamesEv @ 1185 NONAME - _ZNK18QMetaMethodBuilder3tagEv @ 1186 NONAME - _ZNK18QMetaMethodBuilder5indexEv @ 1187 NONAME - _ZNK18QMetaMethodBuilder6accessEv @ 1188 NONAME - _ZNK18QMetaMethodBuilder6d_funcEv @ 1189 NONAME - _ZNK18QMetaMethodBuilder9signatureEv @ 1190 NONAME - _ZNK18QMetaObjectBuilder10enumeratorEi @ 1191 NONAME - _ZNK18QMetaObjectBuilder10superClassEv @ 1192 NONAME - _ZNK18QMetaObjectBuilder11constructorEi @ 1193 NONAME - _ZNK18QMetaObjectBuilder11methodCountEv @ 1194 NONAME - _ZNK18QMetaObjectBuilder12toMetaObjectEv @ 1195 NONAME - _ZNK18QMetaObjectBuilder13classInfoNameEi @ 1196 NONAME - _ZNK18QMetaObjectBuilder13propertyCountEv @ 1197 NONAME - _ZNK18QMetaObjectBuilder14classInfoCountEv @ 1198 NONAME - _ZNK18QMetaObjectBuilder14classInfoValueEi @ 1199 NONAME - _ZNK18QMetaObjectBuilder15enumeratorCountEv @ 1200 NONAME - _ZNK18QMetaObjectBuilder16constructorCountEv @ 1201 NONAME - _ZNK18QMetaObjectBuilder17relatedMetaObjectEi @ 1202 NONAME - _ZNK18QMetaObjectBuilder17toRelocatableDataEPb @ 1203 NONAME - _ZNK18QMetaObjectBuilder22relatedMetaObjectCountEv @ 1204 NONAME - _ZNK18QMetaObjectBuilder22staticMetacallFunctionEv @ 1205 NONAME - _ZNK18QMetaObjectBuilder5flagsEv @ 1206 NONAME - _ZNK18QMetaObjectBuilder6methodEi @ 1207 NONAME - _ZNK18QMetaObjectBuilder8propertyEi @ 1208 NONAME - _ZNK18QMetaObjectBuilder9classNameEv @ 1209 NONAME - _ZNK18QMetaObjectBuilder9serializeER11QDataStream @ 1210 NONAME - _ZNK19QDeclarativeAnchors10leftMarginEv @ 1211 NONAME - _ZNK19QDeclarativeAnchors10metaObjectEv @ 1212 NONAME - _ZNK19QDeclarativeAnchors11rightMarginEv @ 1213 NONAME - _ZNK19QDeclarativeAnchors11usedAnchorsEv @ 1214 NONAME - _ZNK19QDeclarativeAnchors12bottomMarginEv @ 1215 NONAME - _ZNK19QDeclarativeAnchors14baselineOffsetEv @ 1216 NONAME - _ZNK19QDeclarativeAnchors14verticalCenterEv @ 1217 NONAME - _ZNK19QDeclarativeAnchors16horizontalCenterEv @ 1218 NONAME - _ZNK19QDeclarativeAnchors20verticalCenterOffsetEv @ 1219 NONAME - _ZNK19QDeclarativeAnchors22horizontalCenterOffsetEv @ 1220 NONAME - _ZNK19QDeclarativeAnchors3topEv @ 1221 NONAME - _ZNK19QDeclarativeAnchors4fillEv @ 1222 NONAME - _ZNK19QDeclarativeAnchors4leftEv @ 1223 NONAME - _ZNK19QDeclarativeAnchors5rightEv @ 1224 NONAME - _ZNK19QDeclarativeAnchors6bottomEv @ 1225 NONAME - _ZNK19QDeclarativeAnchors7marginsEv @ 1226 NONAME - _ZNK19QDeclarativeAnchors8baselineEv @ 1227 NONAME - _ZNK19QDeclarativeAnchors8centerInEv @ 1228 NONAME - _ZNK19QDeclarativeAnchors9topMarginEv @ 1229 NONAME - _ZNK19QDeclarativeBinding10expressionEv @ 1230 NONAME - _ZNK19QDeclarativeBinding10metaObjectEv @ 1231 NONAME - _ZNK19QDeclarativeBinding7enabledEv @ 1232 NONAME - _ZNK19QDeclarativeBinding8propertyEv @ 1233 NONAME - _ZNK19QDeclarativeContext10metaObjectEv @ 1234 NONAME - _ZNK19QDeclarativeContext13contextObjectEv @ 1235 NONAME - _ZNK19QDeclarativeContext13parentContextEv @ 1236 NONAME - _ZNK19QDeclarativeContext15contextPropertyERK7QString @ 1237 NONAME - _ZNK19QDeclarativeContext6engineEv @ 1238 NONAME - _ZNK19QDeclarativeContext7baseUrlEv @ 1239 NONAME - _ZNK19QDeclarativeContext7isValidEv @ 1240 NONAME - _ZNK19QDeclarativeDomList14commaPositionsEv @ 1241 NONAME - _ZNK19QDeclarativeDomList6lengthEv @ 1242 NONAME - _ZNK19QDeclarativeDomList6valuesEv @ 1243 NONAME - _ZNK19QDeclarativeDomList8positionEv @ 1244 NONAME - _ZNK19QListModelInterface10metaObjectEv @ 1245 NONAME - _ZNK20QDeclarativeBehavior10metaObjectEv @ 1246 NONAME - _ZNK20QDeclarativeBehavior7enabledEv @ 1247 NONAME - _ZNK20QDeclarativeDomValue13isValueSourceEv @ 1248 NONAME - _ZNK20QDeclarativeDomValue13toValueSourceEv @ 1249 NONAME - _ZNK20QDeclarativeDomValue18isValueInterceptorEv @ 1250 NONAME - _ZNK20QDeclarativeDomValue18toValueInterceptorEv @ 1251 NONAME - _ZNK20QDeclarativeDomValue4typeEv @ 1252 NONAME - _ZNK20QDeclarativeDomValue6isListEv @ 1253 NONAME - _ZNK20QDeclarativeDomValue6lengthEv @ 1254 NONAME - _ZNK20QDeclarativeDomValue6toListEv @ 1255 NONAME - _ZNK20QDeclarativeDomValue8isObjectEv @ 1256 NONAME - _ZNK20QDeclarativeDomValue8positionEv @ 1257 NONAME - _ZNK20QDeclarativeDomValue8toObjectEv @ 1258 NONAME - _ZNK20QDeclarativeDomValue9isBindingEv @ 1259 NONAME - _ZNK20QDeclarativeDomValue9isInvalidEv @ 1260 NONAME - _ZNK20QDeclarativeDomValue9isLiteralEv @ 1261 NONAME - _ZNK20QDeclarativeDomValue9toBindingEv @ 1262 NONAME - _ZNK20QDeclarativeDomValue9toLiteralEv @ 1263 NONAME - _ZNK20QDeclarativeProperty10isPropertyEv @ 1264 NONAME - _ZNK20QDeclarativeProperty10isWritableEv @ 1265 NONAME - _ZNK20QDeclarativeProperty12isDesignableEv @ 1266 NONAME - _ZNK20QDeclarativeProperty12isResettableEv @ 1267 NONAME - _ZNK20QDeclarativeProperty12propertyTypeEv @ 1268 NONAME - _ZNK20QDeclarativeProperty15hasNotifySignalEv @ 1269 NONAME - _ZNK20QDeclarativeProperty16isSignalPropertyEv @ 1270 NONAME - _ZNK20QDeclarativeProperty16propertyTypeNameEv @ 1271 NONAME - _ZNK20QDeclarativeProperty17needsNotifySignalEv @ 1272 NONAME - _ZNK20QDeclarativeProperty19connectNotifySignalEP7QObjectPKc @ 1273 NONAME - _ZNK20QDeclarativeProperty19connectNotifySignalEP7QObjecti @ 1274 NONAME - _ZNK20QDeclarativeProperty20propertyTypeCategoryEv @ 1275 NONAME - _ZNK20QDeclarativeProperty4nameEv @ 1276 NONAME - _ZNK20QDeclarativeProperty4readEv @ 1277 NONAME - _ZNK20QDeclarativeProperty4typeEv @ 1278 NONAME - _ZNK20QDeclarativeProperty5indexEv @ 1279 NONAME - _ZNK20QDeclarativeProperty5resetEv @ 1280 NONAME - _ZNK20QDeclarativeProperty5writeERK8QVariant @ 1281 NONAME - _ZNK20QDeclarativeProperty6methodEv @ 1282 NONAME - _ZNK20QDeclarativeProperty6objectEv @ 1283 NONAME - _ZNK20QDeclarativeProperty7isValidEv @ 1284 NONAME - _ZNK20QDeclarativeProperty8propertyEv @ 1285 NONAME - _ZNK20QDeclarativePropertyeqERKS_ @ 1286 NONAME - _ZNK20QMetaPropertyBuilder10isEditableEv @ 1287 NONAME - _ZNK20QMetaPropertyBuilder10isReadableEv @ 1288 NONAME - _ZNK20QMetaPropertyBuilder10isWritableEv @ 1289 NONAME - _ZNK20QMetaPropertyBuilder12hasStdCppSetEv @ 1290 NONAME - _ZNK20QMetaPropertyBuilder12isDesignableEv @ 1291 NONAME - _ZNK20QMetaPropertyBuilder12isEnumOrFlagEv @ 1292 NONAME - _ZNK20QMetaPropertyBuilder12isResettableEv @ 1293 NONAME - _ZNK20QMetaPropertyBuilder12isScriptableEv @ 1294 NONAME - _ZNK20QMetaPropertyBuilder12notifySignalEv @ 1295 NONAME - _ZNK20QMetaPropertyBuilder15hasNotifySignalEv @ 1296 NONAME - _ZNK20QMetaPropertyBuilder4nameEv @ 1297 NONAME - _ZNK20QMetaPropertyBuilder4typeEv @ 1298 NONAME - _ZNK20QMetaPropertyBuilder6d_funcEv @ 1299 NONAME - _ZNK20QMetaPropertyBuilder6isUserEv @ 1300 NONAME - _ZNK20QMetaPropertyBuilder8isStoredEv @ 1301 NONAME - _ZNK20QMetaPropertyBuilder9isDynamicEv @ 1302 NONAME - _ZNK21QDeclarativeComponent10metaObjectEv @ 1303 NONAME - _ZNK21QDeclarativeComponent11errorStringEv @ 1304 NONAME - _ZNK21QDeclarativeComponent15creationContextEv @ 1305 NONAME - _ZNK21QDeclarativeComponent3urlEv @ 1306 NONAME - _ZNK21QDeclarativeComponent6errorsEv @ 1307 NONAME - _ZNK21QDeclarativeComponent6isNullEv @ 1308 NONAME - _ZNK21QDeclarativeComponent6statusEv @ 1309 NONAME - _ZNK21QDeclarativeComponent7isErrorEv @ 1310 NONAME - _ZNK21QDeclarativeComponent7isReadyEv @ 1311 NONAME - _ZNK21QDeclarativeComponent8progressEv @ 1312 NONAME - _ZNK21QDeclarativeComponent9isLoadingEv @ 1313 NONAME - _ZNK21QDeclarativeDomImport3uriEv @ 1314 NONAME - _ZNK21QDeclarativeDomImport4typeEv @ 1315 NONAME - _ZNK21QDeclarativeDomImport7versionEv @ 1316 NONAME - _ZNK21QDeclarativeDomImport9qualifierEv @ 1317 NONAME - _ZNK21QDeclarativeDomObject10objectTypeEv @ 1318 NONAME - _ZNK21QDeclarativeDomObject10propertiesEv @ 1319 NONAME - _ZNK21QDeclarativeDomObject11isComponentEv @ 1320 NONAME - _ZNK21QDeclarativeDomObject11toComponentEv @ 1321 NONAME - _ZNK21QDeclarativeDomObject12isCustomTypeEv @ 1322 NONAME - _ZNK21QDeclarativeDomObject14customTypeDataEv @ 1323 NONAME - _ZNK21QDeclarativeDomObject15dynamicPropertyERK10QByteArray @ 1324 NONAME - _ZNK21QDeclarativeDomObject15objectClassNameEv @ 1325 NONAME - _ZNK21QDeclarativeDomObject17dynamicPropertiesEv @ 1326 NONAME - _ZNK21QDeclarativeDomObject22objectTypeMajorVersionEv @ 1327 NONAME - _ZNK21QDeclarativeDomObject22objectTypeMinorVersionEv @ 1328 NONAME - _ZNK21QDeclarativeDomObject3urlEv @ 1329 NONAME - _ZNK21QDeclarativeDomObject6lengthEv @ 1330 NONAME - _ZNK21QDeclarativeDomObject7isValidEv @ 1331 NONAME - _ZNK21QDeclarativeDomObject8objectIdEv @ 1332 NONAME - _ZNK21QDeclarativeDomObject8positionEv @ 1333 NONAME - _ZNK21QDeclarativeDomObject8propertyERK10QByteArray @ 1334 NONAME - _ZNK21QDeclarativeListModel10metaObjectEv @ 1335 NONAME - _ZNK21QDeclarativeListModel3getEi @ 1336 NONAME - _ZNK21QDeclarativeListModel4dataEiRK5QListIiE @ 1337 NONAME - _ZNK21QDeclarativeListModel4dataEii @ 1338 NONAME - _ZNK21QDeclarativeListModel5countEv @ 1339 NONAME - _ZNK21QDeclarativeListModel5rolesEv @ 1340 NONAME - _ZNK21QDeclarativeListModel8toStringEi @ 1341 NONAME - _ZNK21QDeclarativeRectangle10metaObjectEv @ 1342 NONAME - _ZNK21QDeclarativeRectangle12boundingRectEv @ 1343 NONAME - _ZNK21QDeclarativeRectangle5colorEv @ 1344 NONAME - _ZNK21QDeclarativeRectangle6radiusEv @ 1345 NONAME - _ZNK21QDeclarativeRectangle8gradientEv @ 1346 NONAME - _ZNK21QDeclarativeScaleGrid10metaObjectEv @ 1347 NONAME - _ZNK21QDeclarativeScaleGrid6isNullEv @ 1348 NONAME - _ZNK21QDeclarativeValueType10metaObjectEv @ 1349 NONAME - _ZNK22QDeclarativeDebugQuery10metaObjectEv @ 1350 NONAME - _ZNK22QDeclarativeDebugQuery5stateEv @ 1351 NONAME - _ZNK22QDeclarativeDebugQuery9isWaitingEv @ 1352 NONAME - _ZNK22QDeclarativeDebugWatch10metaObjectEv @ 1353 NONAME - _ZNK22QDeclarativeDebugWatch13objectDebugIdEv @ 1354 NONAME - _ZNK22QDeclarativeDebugWatch5stateEv @ 1355 NONAME - _ZNK22QDeclarativeDebugWatch7queryIdEv @ 1356 NONAME - _ZNK22QDeclarativeExpression10expressionEv @ 1357 NONAME - _ZNK22QDeclarativeExpression10lineNumberEv @ 1358 NONAME - _ZNK22QDeclarativeExpression10metaObjectEv @ 1359 NONAME - _ZNK22QDeclarativeExpression10sourceFileEv @ 1360 NONAME - _ZNK22QDeclarativeExpression11scopeObjectEv @ 1361 NONAME - _ZNK22QDeclarativeExpression20notifyOnValueChangedEv @ 1362 NONAME - _ZNK22QDeclarativeExpression5errorEv @ 1363 NONAME - _ZNK22QDeclarativeExpression6engineEv @ 1364 NONAME - _ZNK22QDeclarativeExpression7contextEv @ 1365 NONAME - _ZNK22QDeclarativeExpression8hasErrorEv @ 1366 NONAME - _ZNK22QDeclarativeStateGroup10metaObjectEv @ 1367 NONAME - _ZNK22QDeclarativeStateGroup5stateEv @ 1368 NONAME - _ZNK22QDeclarativeStateGroup6statesEv @ 1369 NONAME - _ZNK22QDeclarativeStateGroup9findStateERK7QString @ 1370 NONAME - _ZNK22QDeclarativeTransition10metaObjectEv @ 1371 NONAME - _ZNK22QDeclarativeTransition10reversibleEv @ 1372 NONAME - _ZNK22QDeclarativeTransition7toStateEv @ 1373 NONAME - _ZNK22QDeclarativeTransition9fromStateEv @ 1374 NONAME - _ZNK23QDeclarativeDebugClient10metaObjectEv @ 1375 NONAME - _ZNK23QDeclarativeDebugClient11isConnectedEv @ 1376 NONAME - _ZNK23QDeclarativeDebugClient4nameEv @ 1377 NONAME - _ZNK23QDeclarativeDebugClient9isEnabledEv @ 1378 NONAME - _ZNK23QDeclarativeDomDocument10rootObjectEv @ 1379 NONAME - _ZNK23QDeclarativeDomDocument6errorsEv @ 1380 NONAME - _ZNK23QDeclarativeDomDocument7importsEv @ 1381 NONAME - _ZNK23QDeclarativeDomProperty12propertyNameEv @ 1382 NONAME - _ZNK23QDeclarativeDomProperty17isDefaultPropertyEv @ 1383 NONAME - _ZNK23QDeclarativeDomProperty17propertyNamePartsEv @ 1384 NONAME - _ZNK23QDeclarativeDomProperty5valueEv @ 1385 NONAME - _ZNK23QDeclarativeDomProperty6lengthEv @ 1386 NONAME - _ZNK23QDeclarativeDomProperty7isValidEv @ 1387 NONAME - _ZNK23QDeclarativeDomProperty8positionEv @ 1388 NONAME - _ZNK23QDeclarativeEngineDebug10metaObjectEv @ 1389 NONAME - _ZNK23QDeclarativeItemPrivate14verticalCenterEv @ 1390 NONAME - _ZNK23QDeclarativeItemPrivate16horizontalCenterEv @ 1391 NONAME - _ZNK23QDeclarativeItemPrivate22computeTransformOriginEv @ 1392 NONAME - _ZNK23QDeclarativeItemPrivate3topEv @ 1393 NONAME - _ZNK23QDeclarativeItemPrivate4leftEv @ 1394 NONAME - _ZNK23QDeclarativeItemPrivate5rightEv @ 1395 NONAME - _ZNK23QDeclarativeItemPrivate5stateEv @ 1396 NONAME - _ZNK23QDeclarativeItemPrivate5widthEv @ 1397 NONAME - _ZNK23QDeclarativeItemPrivate6bottomEv @ 1398 NONAME - _ZNK23QDeclarativeItemPrivate6heightEv @ 1399 NONAME - _ZNK23QDeclarativeItemPrivate8baselineEv @ 1400 NONAME - _ZNK23QDeclarativePixmapReply10metaObjectEv @ 1401 NONAME ABSENT - _ZNK23QDeclarativePixmapReply11errorStringEv @ 1402 NONAME ABSENT - _ZNK23QDeclarativePixmapReply11forcedWidthEv @ 1403 NONAME ABSENT - _ZNK23QDeclarativePixmapReply12forcedHeightEv @ 1404 NONAME ABSENT - _ZNK23QDeclarativePixmapReply12implicitSizeEv @ 1405 NONAME ABSENT - _ZNK23QDeclarativePixmapReply3urlEv @ 1406 NONAME ABSENT - _ZNK23QDeclarativePixmapReply6statusEv @ 1407 NONAME ABSENT - _ZNK23QDeclarativePixmapReply9isLoadingEv @ 1408 NONAME ABSENT - _ZNK23QDeclarativePropertyMap10metaObjectEv @ 1409 NONAME - _ZNK23QDeclarativePropertyMap4keysEv @ 1410 NONAME - _ZNK23QDeclarativePropertyMap4sizeEv @ 1411 NONAME - _ZNK23QDeclarativePropertyMap5countEv @ 1412 NONAME - _ZNK23QDeclarativePropertyMap5valueERK7QString @ 1413 NONAME - _ZNK23QDeclarativePropertyMap7isEmptyEv @ 1414 NONAME - _ZNK23QDeclarativePropertyMap8containsERK7QString @ 1415 NONAME - _ZNK23QDeclarativePropertyMapixERK7QString @ 1416 NONAME - _ZNK24QDeclarativeCustomParser11resolveTypeERK10QByteArray @ 1417 NONAME - _ZNK24QDeclarativeCustomParser12evaluateEnumERK10QByteArray @ 1418 NONAME - _ZNK24QDeclarativeDebugService10metaObjectEv @ 1419 NONAME - _ZNK24QDeclarativeDebugService4nameEv @ 1420 NONAME - _ZNK24QDeclarativeDebugService9isEnabledEv @ 1421 NONAME - _ZNK24QDeclarativeDomComponent13componentRootEv @ 1422 NONAME - _ZNK24QDeclarativeScriptString11scopeObjectEv @ 1423 NONAME - _ZNK24QDeclarativeScriptString6scriptEv @ 1424 NONAME - _ZNK24QDeclarativeScriptString7contextEv @ 1425 NONAME - _ZNK25QDeclarativeListReference15listElementTypeEv @ 1426 NONAME - _ZNK25QDeclarativeListReference2atEi @ 1427 NONAME - _ZNK25QDeclarativeListReference5canAtEv @ 1428 NONAME - _ZNK25QDeclarativeListReference5clearEv @ 1429 NONAME - _ZNK25QDeclarativeListReference5countEv @ 1430 NONAME - _ZNK25QDeclarativeListReference6appendEP7QObject @ 1431 NONAME - _ZNK25QDeclarativeListReference6objectEv @ 1432 NONAME - _ZNK25QDeclarativeListReference7isValidEv @ 1433 NONAME - _ZNK25QDeclarativeListReference8canClearEv @ 1434 NONAME - _ZNK25QDeclarativeListReference8canCountEv @ 1435 NONAME - _ZNK25QDeclarativeListReference9canAppendEv @ 1436 NONAME - _ZNK26QDeclarativeOpenMetaObject4nameEi @ 1437 NONAME - _ZNK26QDeclarativeOpenMetaObject4typeEv @ 1438 NONAME - _ZNK26QDeclarativeOpenMetaObject5countEv @ 1439 NONAME - _ZNK26QDeclarativeOpenMetaObject5valueERK10QByteArray @ 1440 NONAME - _ZNK26QDeclarativeOpenMetaObject5valueEi @ 1441 NONAME - _ZNK26QDeclarativeOpenMetaObject6objectEv @ 1442 NONAME - _ZNK26QDeclarativeOpenMetaObject6parentEv @ 1443 NONAME - _ZNK26QDeclarativeStateOperation10metaObjectEv @ 1444 NONAME - _ZNK27QDeclarativeAbstractBinding10expressionEv @ 1445 NONAME - _ZNK27QDeclarativeDebugConnection10metaObjectEv @ 1446 NONAME - _ZNK27QDeclarativeDebugConnection11isConnectedEv @ 1447 NONAME - _ZNK27QDeclarativeDomValueBinding7bindingEv @ 1448 NONAME - _ZNK27QDeclarativeDomValueLiteral7literalEv @ 1449 NONAME - _ZNK27QDeclarativeExtensionPlugin10metaObjectEv @ 1450 NONAME - _ZNK27QDeclarativeGridScaledImage10gridBottomEv @ 1451 NONAME - _ZNK27QDeclarativeGridScaledImage7gridTopEv @ 1452 NONAME - _ZNK27QDeclarativeGridScaledImage7isValidEv @ 1453 NONAME - _ZNK27QDeclarativeGridScaledImage8gridLeftEv @ 1454 NONAME - _ZNK27QDeclarativeGridScaledImage9gridRightEv @ 1455 NONAME - _ZNK27QDeclarativeGridScaledImage9pixmapUrlEv @ 1456 NONAME - _ZNK27QDeclarativePropertyPrivate11isValueTypeEv @ 1457 NONAME - _ZNK27QDeclarativePropertyPrivate12propertyTypeEv @ 1458 NONAME - _ZNK27QDeclarativePropertyPrivate20propertyTypeCategoryEv @ 1459 NONAME - _ZNK28QDeclarativeCustomParserNode10propertiesEv @ 1460 NONAME - _ZNK28QDeclarativeCustomParserNode4nameEv @ 1461 NONAME - _ZNK28QDeclarativeCustomParserNode8locationEv @ 1462 NONAME - _ZNK28QDeclarativeDebugObjectQuery10metaObjectEv @ 1463 NONAME - _ZNK28QDeclarativeDebugObjectQuery6objectEv @ 1464 NONAME - _ZNK29QDeclarativeDebugEnginesQuery10metaObjectEv @ 1465 NONAME - _ZNK29QDeclarativeDebugEnginesQuery7enginesEv @ 1466 NONAME - _ZNK30QDeclarativeDebugFileReference10lineNumberEv @ 1467 NONAME - _ZNK30QDeclarativeDebugFileReference12columnNumberEv @ 1468 NONAME - _ZNK30QDeclarativeDebugFileReference3urlEv @ 1469 NONAME - _ZNK30QDeclarativeDebugPropertyWatch10metaObjectEv @ 1470 NONAME - _ZNK30QDeclarativeDebugPropertyWatch4nameEv @ 1471 NONAME - _ZNK30QDeclarativeDomDynamicProperty12defaultValueEv @ 1472 NONAME - _ZNK30QDeclarativeDomDynamicProperty12propertyNameEv @ 1473 NONAME - _ZNK30QDeclarativeDomDynamicProperty12propertyTypeEv @ 1474 NONAME - _ZNK30QDeclarativeDomDynamicProperty16propertyTypeNameEv @ 1475 NONAME - _ZNK30QDeclarativeDomDynamicProperty17isDefaultPropertyEv @ 1476 NONAME - _ZNK30QDeclarativeDomDynamicProperty6lengthEv @ 1477 NONAME - _ZNK30QDeclarativeDomDynamicProperty7isAliasEv @ 1478 NONAME - _ZNK30QDeclarativeDomDynamicProperty7isValidEv @ 1479 NONAME - _ZNK30QDeclarativeDomDynamicProperty8positionEv @ 1480 NONAME - _ZNK30QDeclarativeOpenMetaObjectType12signalOffsetEv @ 1481 NONAME - _ZNK30QDeclarativeOpenMetaObjectType14propertyOffsetEv @ 1482 NONAME - _ZNK31QDeclarativeDomValueValueSource6objectEv @ 1483 NONAME - _ZNK32QDeclarativeCustomParserProperty14assignedValuesEv @ 1484 NONAME - _ZNK32QDeclarativeCustomParserProperty4nameEv @ 1485 NONAME - _ZNK32QDeclarativeCustomParserProperty6isListEv @ 1486 NONAME - _ZNK32QDeclarativeCustomParserProperty8locationEv @ 1487 NONAME - _ZNK32QDeclarativeDebugEngineReference4nameEv @ 1488 NONAME - _ZNK32QDeclarativeDebugEngineReference7debugIdEv @ 1489 NONAME - _ZNK32QDeclarativeDebugExpressionQuery10expressionEv @ 1490 NONAME - _ZNK32QDeclarativeDebugExpressionQuery10metaObjectEv @ 1491 NONAME - _ZNK32QDeclarativeDebugExpressionQuery6resultEv @ 1492 NONAME - _ZNK32QDeclarativeDebugObjectReference10propertiesEv @ 1493 NONAME - _ZNK32QDeclarativeDebugObjectReference14contextDebugIdEv @ 1494 NONAME - _ZNK32QDeclarativeDebugObjectReference4nameEv @ 1495 NONAME - _ZNK32QDeclarativeDebugObjectReference6sourceEv @ 1496 NONAME - _ZNK32QDeclarativeDebugObjectReference7debugIdEv @ 1497 NONAME - _ZNK32QDeclarativeDebugObjectReference8childrenEv @ 1498 NONAME - _ZNK32QDeclarativeDebugObjectReference8idStringEv @ 1499 NONAME - _ZNK32QDeclarativeDebugObjectReference9classNameEv @ 1500 NONAME - _ZNK33QDeclarativeDebugContextReference4nameEv @ 1501 NONAME - _ZNK33QDeclarativeDebugContextReference7debugIdEv @ 1502 NONAME - _ZNK33QDeclarativeDebugContextReference7objectsEv @ 1503 NONAME - _ZNK33QDeclarativeDebugContextReference8contextsEv @ 1504 NONAME - _ZNK33QDeclarativeDebugRootContextQuery10metaObjectEv @ 1505 NONAME - _ZNK33QDeclarativeDebugRootContextQuery11rootContextEv @ 1506 NONAME - _ZNK34QDeclarativeDebugPropertyReference13objectDebugIdEv @ 1507 NONAME - _ZNK34QDeclarativeDebugPropertyReference13valueTypeNameEv @ 1508 NONAME - _ZNK34QDeclarativeDebugPropertyReference15hasNotifySignalEv @ 1509 NONAME - _ZNK34QDeclarativeDebugPropertyReference4nameEv @ 1510 NONAME - _ZNK34QDeclarativeDebugPropertyReference5valueEv @ 1511 NONAME - _ZNK34QDeclarativeDebugPropertyReference7bindingEv @ 1512 NONAME - _ZNK36QDeclarativeDomValueValueInterceptor6objectEv @ 1513 NONAME - _ZNK38QDeclarativeDebugObjectExpressionWatch10expressionEv @ 1514 NONAME - _ZNK38QDeclarativeDebugObjectExpressionWatch10metaObjectEv @ 1515 NONAME - _ZNK7QPacket7isEmptyEv @ 1516 NONAME - _ZTI15QDeclarativePen @ 1517 NONAME - _ZTI15QPacketAutoSend @ 1518 NONAME - _ZTI15QPacketProtocol @ 1519 NONAME - _ZTI16QDeclarativeItem @ 1520 NONAME - _ZTI16QDeclarativeText @ 1521 NONAME - _ZTI16QDeclarativeView @ 1522 NONAME - _ZTI17QDeclarativeState @ 1523 NONAME - _ZTI18QDeclarativeEngine @ 1524 NONAME - _ZTI18QMetaObjectBuilder @ 1525 NONAME - _ZTI19QDeclarativeAnchors @ 1526 NONAME - _ZTI19QDeclarativeBinding @ 1527 NONAME - _ZTI19QDeclarativeContext @ 1528 NONAME - _ZTI19QListModelInterface @ 1529 NONAME - _ZTI20QDeclarativeBehavior @ 1530 NONAME - _ZTI21QDeclarativeComponent @ 1531 NONAME - _ZTI21QDeclarativeListModel @ 1532 NONAME - _ZTI21QDeclarativeRectangle @ 1533 NONAME - _ZTI21QDeclarativeScaleGrid @ 1534 NONAME - _ZTI21QDeclarativeValueType @ 1535 NONAME - _ZTI22QDeclarativeDebugQuery @ 1536 NONAME - _ZTI22QDeclarativeDebugWatch @ 1537 NONAME - _ZTI22QDeclarativeExpression @ 1538 NONAME - _ZTI22QDeclarativeStateGroup @ 1539 NONAME - _ZTI22QDeclarativeTransition @ 1540 NONAME - _ZTI23QDeclarativeDebugClient @ 1541 NONAME - _ZTI23QDeclarativeEngineDebug @ 1542 NONAME - _ZTI23QDeclarativeItemPrivate @ 1543 NONAME - _ZTI23QDeclarativePixmapReply @ 1544 NONAME ABSENT - _ZTI23QDeclarativePropertyMap @ 1545 NONAME - _ZTI24QDeclarativeCustomParser @ 1546 NONAME - _ZTI24QDeclarativeDebugService @ 1547 NONAME - _ZTI24QDeclarativeParserStatus @ 1548 NONAME - _ZTI25QDeclarativeImageProvider @ 1549 NONAME - _ZTI26QDeclarativeDebuggerStatus @ 1550 NONAME - _ZTI26QDeclarativeOpenMetaObject @ 1551 NONAME - _ZTI26QDeclarativeStateOperation @ 1552 NONAME - _ZTI27QDeclarativeAbstractBinding @ 1553 NONAME - _ZTI27QDeclarativeDebugConnection @ 1554 NONAME - _ZTI27QDeclarativeExtensionPlugin @ 1555 NONAME - _ZTI28QDeclarativeDebugObjectQuery @ 1556 NONAME - _ZTI29QDeclarativeDebugEnginesQuery @ 1557 NONAME - _ZTI30QDeclarativeDebugPropertyWatch @ 1558 NONAME - _ZTI30QDeclarativeExtensionInterface @ 1559 NONAME - _ZTI30QDeclarativeOpenMetaObjectType @ 1560 NONAME - _ZTI31QDeclarativePropertyValueSource @ 1561 NONAME - _ZTI32QDeclarativeDebugExpressionQuery @ 1562 NONAME - _ZTI33QDeclarativeDebugRootContextQuery @ 1563 NONAME - _ZTI36QDeclarativePropertyValueInterceptor @ 1564 NONAME - _ZTI38QDeclarativeDebugObjectExpressionWatch @ 1565 NONAME - _ZTI39QDeclarativeNetworkAccessManagerFactory @ 1566 NONAME - _ZTI7QPacket @ 1567 NONAME - _ZTV15QDeclarativePen @ 1568 NONAME - _ZTV15QPacketAutoSend @ 1569 NONAME - _ZTV15QPacketProtocol @ 1570 NONAME - _ZTV16QDeclarativeItem @ 1571 NONAME - _ZTV16QDeclarativeText @ 1572 NONAME - _ZTV16QDeclarativeView @ 1573 NONAME - _ZTV17QDeclarativeState @ 1574 NONAME - _ZTV18QDeclarativeEngine @ 1575 NONAME - _ZTV18QMetaObjectBuilder @ 1576 NONAME - _ZTV19QDeclarativeAnchors @ 1577 NONAME - _ZTV19QDeclarativeBinding @ 1578 NONAME - _ZTV19QDeclarativeContext @ 1579 NONAME - _ZTV19QListModelInterface @ 1580 NONAME - _ZTV20QDeclarativeBehavior @ 1581 NONAME - _ZTV21QDeclarativeComponent @ 1582 NONAME - _ZTV21QDeclarativeListModel @ 1583 NONAME - _ZTV21QDeclarativeRectangle @ 1584 NONAME - _ZTV21QDeclarativeScaleGrid @ 1585 NONAME - _ZTV21QDeclarativeValueType @ 1586 NONAME - _ZTV22QDeclarativeDebugQuery @ 1587 NONAME - _ZTV22QDeclarativeDebugWatch @ 1588 NONAME - _ZTV22QDeclarativeExpression @ 1589 NONAME - _ZTV22QDeclarativeStateGroup @ 1590 NONAME - _ZTV22QDeclarativeTransition @ 1591 NONAME - _ZTV23QDeclarativeDebugClient @ 1592 NONAME - _ZTV23QDeclarativeEngineDebug @ 1593 NONAME - _ZTV23QDeclarativeItemPrivate @ 1594 NONAME - _ZTV23QDeclarativePixmapReply @ 1595 NONAME ABSENT - _ZTV23QDeclarativePropertyMap @ 1596 NONAME - _ZTV24QDeclarativeCustomParser @ 1597 NONAME - _ZTV24QDeclarativeDebugService @ 1598 NONAME - _ZTV24QDeclarativeParserStatus @ 1599 NONAME - _ZTV25QDeclarativeImageProvider @ 1600 NONAME - _ZTV26QDeclarativeDebuggerStatus @ 1601 NONAME - _ZTV26QDeclarativeOpenMetaObject @ 1602 NONAME - _ZTV26QDeclarativeStateOperation @ 1603 NONAME - _ZTV27QDeclarativeAbstractBinding @ 1604 NONAME - _ZTV27QDeclarativeDebugConnection @ 1605 NONAME - _ZTV27QDeclarativeExtensionPlugin @ 1606 NONAME - _ZTV28QDeclarativeDebugObjectQuery @ 1607 NONAME - _ZTV29QDeclarativeDebugEnginesQuery @ 1608 NONAME - _ZTV30QDeclarativeDebugPropertyWatch @ 1609 NONAME - _ZTV30QDeclarativeOpenMetaObjectType @ 1610 NONAME - _ZTV31QDeclarativePropertyValueSource @ 1611 NONAME - _ZTV32QDeclarativeDebugExpressionQuery @ 1612 NONAME - _ZTV33QDeclarativeDebugRootContextQuery @ 1613 NONAME - _ZTV36QDeclarativePropertyValueInterceptor @ 1614 NONAME - _ZTV38QDeclarativeDebugObjectExpressionWatch @ 1615 NONAME - _ZTV39QDeclarativeNetworkAccessManagerFactory @ 1616 NONAME - _ZTV7QPacket @ 1617 NONAME - _ZThn16_N16QDeclarativeItem10classBeginEv @ 1618 NONAME - _ZThn16_N16QDeclarativeItem17componentCompleteEv @ 1619 NONAME - _ZThn16_N16QDeclarativeItemD0Ev @ 1620 NONAME - _ZThn16_N16QDeclarativeItemD1Ev @ 1621 NONAME - _ZThn16_N16QDeclarativeText17componentCompleteEv @ 1622 NONAME - _ZThn16_N16QDeclarativeTextD0Ev @ 1623 NONAME - _ZThn16_N16QDeclarativeTextD1Ev @ 1624 NONAME - _ZThn8_N16QDeclarativeItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 1625 NONAME - _ZThn8_N16QDeclarativeItem10sceneEventEP6QEvent @ 1626 NONAME - _ZThn8_N16QDeclarativeItem13keyPressEventEP9QKeyEvent @ 1627 NONAME - _ZThn8_N16QDeclarativeItem15keyReleaseEventEP9QKeyEvent @ 1628 NONAME - _ZThn8_N16QDeclarativeItem16inputMethodEventEP17QInputMethodEvent @ 1629 NONAME - _ZThn8_N16QDeclarativeItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1630 NONAME - _ZThn8_N16QDeclarativeItemD0Ev @ 1631 NONAME - _ZThn8_N16QDeclarativeItemD1Ev @ 1632 NONAME - _ZThn8_N16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 1633 NONAME - _ZThn8_N16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 1634 NONAME - _ZThn8_N16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1635 NONAME - _ZThn8_N16QDeclarativeTextD0Ev @ 1636 NONAME - _ZThn8_N16QDeclarativeTextD1Ev @ 1637 NONAME - _ZThn8_N16QDeclarativeViewD0Ev @ 1638 NONAME - _ZThn8_N16QDeclarativeViewD1Ev @ 1639 NONAME - _ZThn8_N19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1640 NONAME - _ZThn8_N19QDeclarativeBinding13propertyIndexEv @ 1641 NONAME - _ZThn8_N19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1642 NONAME - _ZThn8_N19QDeclarativeBindingD0Ev @ 1643 NONAME - _ZThn8_N19QDeclarativeBindingD1Ev @ 1644 NONAME - _ZThn8_N20QDeclarativeBehavior5writeERK8QVariant @ 1645 NONAME - _ZThn8_N20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 1646 NONAME - _ZThn8_N20QDeclarativeBehaviorD0Ev @ 1647 NONAME - _ZThn8_N20QDeclarativeBehaviorD1Ev @ 1648 NONAME - _ZThn8_N21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1649 NONAME - _ZThn8_N22QDeclarativeStateGroup10classBeginEv @ 1650 NONAME - _ZThn8_N22QDeclarativeStateGroup17componentCompleteEv @ 1651 NONAME - _ZThn8_N22QDeclarativeStateGroupD0Ev @ 1652 NONAME - _ZThn8_N22QDeclarativeStateGroupD1Ev @ 1653 NONAME - _ZThn8_N27QDeclarativeExtensionPlugin16initializeEngineEP18QDeclarativeEnginePKc @ 1654 NONAME - _ZThn8_N27QDeclarativeExtensionPluginD0Ev @ 1655 NONAME - _ZThn8_N27QDeclarativeExtensionPluginD1Ev @ 1656 NONAME - _ZThn8_NK16QDeclarativeItem12boundingRectEv @ 1657 NONAME - _ZThn8_NK16QDeclarativeItem16inputMethodQueryEN2Qt16InputMethodQueryE @ 1658 NONAME - _ZThn8_NK16QDeclarativeText12boundingRectEv @ 1659 NONAME - _ZThn8_NK19QDeclarativeBinding10expressionEv @ 1660 NONAME - _ZThn8_NK21QDeclarativeRectangle12boundingRectEv @ 1661 NONAME - _Zls6QDebugP16QDeclarativeItem @ 1662 NONAME - _Zls6QDebugRK17QDeclarativeError @ 1663 NONAME - _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1664 NONAME - _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1665 NONAME - _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1666 NONAME - _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1667 NONAME - _ZN18QDeclarativePixmap15connectFinishedEP7QObjectPKc @ 1668 NONAME - _ZN18QDeclarativePixmap15connectFinishedEP7QObjecti @ 1669 NONAME - _ZN18QDeclarativePixmap23connectDownloadProgressEP7QObjectPKc @ 1670 NONAME - _ZN18QDeclarativePixmap23connectDownloadProgressEP7QObjecti @ 1671 NONAME - _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrl @ 1672 NONAME - _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlRK5QSize @ 1673 NONAME - _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlRK5QSizeb @ 1674 NONAME - _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlb @ 1675 NONAME - _ZN18QDeclarativePixmap5clearEP7QObject @ 1676 NONAME - _ZN18QDeclarativePixmap5clearEv @ 1677 NONAME - _ZN18QDeclarativePixmap9setPixmapERK7QPixmap @ 1678 NONAME - _ZN18QDeclarativePixmapC1EP18QDeclarativeEngineRK4QUrl @ 1679 NONAME - _ZN18QDeclarativePixmapC1EP18QDeclarativeEngineRK4QUrlRK5QSize @ 1680 NONAME - _ZN18QDeclarativePixmapC1Ev @ 1681 NONAME - _ZN18QDeclarativePixmapC2EP18QDeclarativeEngineRK4QUrl @ 1682 NONAME - _ZN18QDeclarativePixmapC2EP18QDeclarativeEngineRK4QUrlRK5QSize @ 1683 NONAME - _ZN18QDeclarativePixmapC2Ev @ 1684 NONAME - _ZN18QDeclarativePixmapD1Ev @ 1685 NONAME - _ZN18QDeclarativePixmapD2Ev @ 1686 NONAME - _ZNK18QDeclarativePixmap11requestSizeEv @ 1687 NONAME - _ZNK18QDeclarativePixmap12implicitSizeEv @ 1688 NONAME - _ZNK18QDeclarativePixmap3urlEv @ 1689 NONAME - _ZNK18QDeclarativePixmap4rectEv @ 1690 NONAME - _ZNK18QDeclarativePixmap5errorEv @ 1691 NONAME - _ZNK18QDeclarativePixmap5widthEv @ 1692 NONAME - _ZNK18QDeclarativePixmap6heightEv @ 1693 NONAME - _ZNK18QDeclarativePixmap6isNullEv @ 1694 NONAME - _ZNK18QDeclarativePixmap6pixmapEv @ 1695 NONAME - _ZNK18QDeclarativePixmap6statusEv @ 1696 NONAME - _ZNK18QDeclarativePixmap7isErrorEv @ 1697 NONAME - _ZNK18QDeclarativePixmap7isReadyEv @ 1698 NONAME - _ZNK18QDeclarativePixmap9isLoadingEv @ 1699 NONAME - +EXPORTS + _Z10qmlContextPK7QObject @ 1 NONAME + _Z18qmlExecuteDeferredP7QObject @ 2 NONAME + _Z27qmlAttachedPropertiesObjectPiPK7QObjectPK11QMetaObjectb @ 3 NONAME + _Z31qmlAttachedPropertiesObjectByIdiPK7QObjectb @ 4 NONAME + _Z7qmlInfoPK7QObject @ 5 NONAME + _Z7qmlInfoPK7QObjectRK17QDeclarativeError @ 6 NONAME + _Z7qmlInfoPK7QObjectRK5QListI17QDeclarativeErrorE @ 7 NONAME + _Z9qmlEnginePK7QObject @ 8 NONAME + _ZN15QDeclarativePen10penChangedEv @ 9 NONAME + _ZN15QDeclarativePen11qt_metacallEN11QMetaObject4CallEiPPv @ 10 NONAME + _ZN15QDeclarativePen11qt_metacastEPKc @ 11 NONAME + _ZN15QDeclarativePen16staticMetaObjectE @ 12 NONAME DATA 16 + _ZN15QDeclarativePen19getStaticMetaObjectEv @ 13 NONAME + _ZN15QDeclarativePen8setColorERK6QColor @ 14 NONAME + _ZN15QDeclarativePen8setWidthEi @ 15 NONAME + _ZN15QPacketAutoSendC1EP15QPacketProtocol @ 16 NONAME + _ZN15QPacketAutoSendC2EP15QPacketProtocol @ 17 NONAME + _ZN15QPacketAutoSendD0Ev @ 18 NONAME + _ZN15QPacketAutoSendD1Ev @ 19 NONAME + _ZN15QPacketAutoSendD2Ev @ 20 NONAME + _ZN15QPacketProtocol11qt_metacallEN11QMetaObject4CallEiPPv @ 21 NONAME + _ZN15QPacketProtocol11qt_metacastEPKc @ 22 NONAME + _ZN15QPacketProtocol13invalidPacketEv @ 23 NONAME + _ZN15QPacketProtocol13packetWrittenEv @ 24 NONAME + _ZN15QPacketProtocol16staticMetaObjectE @ 25 NONAME DATA 16 + _ZN15QPacketProtocol19getStaticMetaObjectEv @ 26 NONAME + _ZN15QPacketProtocol20setMaximumPacketSizeEi @ 27 NONAME + _ZN15QPacketProtocol4readEv @ 28 NONAME + _ZN15QPacketProtocol4sendERK7QPacket @ 29 NONAME + _ZN15QPacketProtocol4sendEv @ 30 NONAME + _ZN15QPacketProtocol5clearEv @ 31 NONAME + _ZN15QPacketProtocol6deviceEv @ 32 NONAME + _ZN15QPacketProtocol9readyReadEv @ 33 NONAME + _ZN15QPacketProtocolC1EP9QIODeviceP7QObject @ 34 NONAME + _ZN15QPacketProtocolC2EP9QIODeviceP7QObject @ 35 NONAME + _ZN15QPacketProtocolD0Ev @ 36 NONAME + _ZN15QPacketProtocolD1Ev @ 37 NONAME + _ZN15QPacketProtocolD2Ev @ 38 NONAME + _ZN16QDeclarativeInfoC1EP23QDeclarativeInfoPrivate @ 39 NONAME + _ZN16QDeclarativeInfoC1ERKS_ @ 40 NONAME + _ZN16QDeclarativeInfoC2EP23QDeclarativeInfoPrivate @ 41 NONAME + _ZN16QDeclarativeInfoC2ERKS_ @ 42 NONAME + _ZN16QDeclarativeInfoD1Ev @ 43 NONAME + _ZN16QDeclarativeInfoD2Ev @ 44 NONAME + _ZN16QDeclarativeItem10classBeginEv @ 45 NONAME + _ZN16QDeclarativeItem10forceFocusEv @ 46 NONAME + _ZN16QDeclarativeItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 47 NONAME + _ZN16QDeclarativeItem10resetWidthEv @ 48 NONAME + _ZN16QDeclarativeItem10sceneEventEP6QEvent @ 49 NONAME + _ZN16QDeclarativeItem11clipChangedEb @ 50 NONAME + _ZN16QDeclarativeItem11qt_metacallEN11QMetaObject4CallEiPPv @ 51 NONAME + _ZN16QDeclarativeItem11qt_metacastEPKc @ 52 NONAME + _ZN16QDeclarativeItem11resetHeightEv @ 53 NONAME + _ZN16QDeclarativeItem12childrenRectEv @ 54 NONAME + _ZN16QDeclarativeItem12focusChangedEb @ 55 NONAME + _ZN16QDeclarativeItem12stateChangedERK7QString @ 56 NONAME + _ZN16QDeclarativeItem13keyPressEventEP9QKeyEvent @ 57 NONAME + _ZN16QDeclarativeItem13parentChangedEPS_ @ 58 NONAME + _ZN16QDeclarativeItem13setParentItemEPS_ @ 59 NONAME + _ZN16QDeclarativeItem13smoothChangedEb @ 60 NONAME + _ZN16QDeclarativeItem15childrenChangedEv @ 61 NONAME + _ZN16QDeclarativeItem15geometryChangedERK6QRectFS2_ @ 62 NONAME + _ZN16QDeclarativeItem15keyReleaseEventEP9QKeyEvent @ 63 NONAME + _ZN16QDeclarativeItem16inputMethodEventEP17QInputMethodEvent @ 64 NONAME + _ZN16QDeclarativeItem16setImplicitWidthEf @ 65 NONAME + _ZN16QDeclarativeItem16setKeepMouseGrabEb @ 66 NONAME + _ZN16QDeclarativeItem16staticMetaObjectE @ 67 NONAME DATA 16 + _ZN16QDeclarativeItem17componentCompleteEv @ 68 NONAME + _ZN16QDeclarativeItem17setBaselineOffsetEf @ 69 NONAME + _ZN16QDeclarativeItem17setImplicitHeightEf @ 70 NONAME + _ZN16QDeclarativeItem17wantsFocusChangedEb @ 71 NONAME + _ZN16QDeclarativeItem18keyPressPreHandlerEP9QKeyEvent @ 72 NONAME + _ZN16QDeclarativeItem18setTransformOriginENS_15TransformOriginE @ 73 NONAME + _ZN16QDeclarativeItem19childrenRectChangedERK6QRectF @ 74 NONAME + _ZN16QDeclarativeItem19getStaticMetaObjectEv @ 75 NONAME + _ZN16QDeclarativeItem20keyReleasePreHandlerEP9QKeyEvent @ 76 NONAME + _ZN16QDeclarativeItem21baselineOffsetChangedEf @ 77 NONAME + _ZN16QDeclarativeItem21inputMethodPreHandlerEP17QInputMethodEvent @ 78 NONAME + _ZN16QDeclarativeItem22transformOriginChangedENS_15TransformOriginE @ 79 NONAME + _ZN16QDeclarativeItem5eventEP6QEvent @ 80 NONAME + _ZN16QDeclarativeItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 81 NONAME + _ZN16QDeclarativeItem7setClipEb @ 82 NONAME + _ZN16QDeclarativeItem7setSizeERK6QSizeF @ 83 NONAME + _ZN16QDeclarativeItem8setFocusEb @ 84 NONAME + _ZN16QDeclarativeItem8setWidthEf @ 85 NONAME + _ZN16QDeclarativeItem9setHeightEf @ 86 NONAME + _ZN16QDeclarativeItem9setSmoothEb @ 87 NONAME + _ZN16QDeclarativeItem9transformEv @ 88 NONAME + _ZN16QDeclarativeItemC1EPS_ @ 89 NONAME + _ZN16QDeclarativeItemC1ER23QDeclarativeItemPrivatePS_ @ 90 NONAME + _ZN16QDeclarativeItemC2EPS_ @ 91 NONAME + _ZN16QDeclarativeItemC2ER23QDeclarativeItemPrivatePS_ @ 92 NONAME + _ZN16QDeclarativeItemD0Ev @ 93 NONAME + _ZN16QDeclarativeItemD1Ev @ 94 NONAME + _ZN16QDeclarativeItemD2Ev @ 95 NONAME + _ZN16QDeclarativeText11fontChangedERK5QFont @ 96 NONAME + _ZN16QDeclarativeText11qt_metacallEN11QMetaObject4CallEiPPv @ 97 NONAME + _ZN16QDeclarativeText11qt_metacastEPKc @ 98 NONAME + _ZN16QDeclarativeText11setWrapModeENS_8WrapModeE @ 99 NONAME + _ZN16QDeclarativeText11textChangedERK7QString @ 100 NONAME + _ZN16QDeclarativeText12colorChangedERK6QColor @ 101 NONAME + _ZN16QDeclarativeText12setElideModeENS_13TextElideModeE @ 102 NONAME + _ZN16QDeclarativeText12styleChangedENS_9TextStyleE @ 103 NONAME + _ZN16QDeclarativeText13linkActivatedERK7QString @ 104 NONAME + _ZN16QDeclarativeText13setStyleColorERK6QColor @ 105 NONAME + _ZN16QDeclarativeText13setTextFormatENS_10TextFormatE @ 106 NONAME + _ZN16QDeclarativeText15geometryChangedERK6QRectFS2_ @ 107 NONAME + _ZN16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 108 NONAME + _ZN16QDeclarativeText15wrapModeChangedEv @ 109 NONAME + _ZN16QDeclarativeText16elideModeChangedENS_13TextElideModeE @ 110 NONAME + _ZN16QDeclarativeText16staticMetaObjectE @ 111 NONAME DATA 16 + _ZN16QDeclarativeText17componentCompleteEv @ 112 NONAME + _ZN16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 113 NONAME + _ZN16QDeclarativeText17styleColorChangedERK6QColor @ 114 NONAME + _ZN16QDeclarativeText17textFormatChangedENS_10TextFormatE @ 115 NONAME + _ZN16QDeclarativeText18paintedSizeChangedEv @ 116 NONAME + _ZN16QDeclarativeText19getStaticMetaObjectEv @ 117 NONAME + _ZN16QDeclarativeText19reloadWithResourcesEv @ 118 NONAME ABSENT + _ZN16QDeclarativeText24verticalAlignmentChangedENS_10VAlignmentE @ 119 NONAME + _ZN16QDeclarativeText26horizontalAlignmentChangedENS_10HAlignmentE @ 120 NONAME + _ZN16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 121 NONAME + _ZN16QDeclarativeText7setFontERK5QFont @ 122 NONAME + _ZN16QDeclarativeText7setTextERK7QString @ 123 NONAME + _ZN16QDeclarativeText8setColorERK6QColor @ 124 NONAME + _ZN16QDeclarativeText8setStyleENS_9TextStyleE @ 125 NONAME + _ZN16QDeclarativeText9setHAlignENS_10HAlignmentE @ 126 NONAME + _ZN16QDeclarativeText9setVAlignENS_10VAlignmentE @ 127 NONAME + _ZN16QDeclarativeTextC1EP16QDeclarativeItem @ 128 NONAME + _ZN16QDeclarativeTextC2EP16QDeclarativeItem @ 129 NONAME + _ZN16QDeclarativeTextD0Ev @ 130 NONAME + _ZN16QDeclarativeTextD1Ev @ 131 NONAME + _ZN16QDeclarativeTextD2Ev @ 132 NONAME + _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate12RegisterTypeE @ 133 NONAME + _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 134 NONAME + _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate12RegisterTypeE @ 135 NONAME + _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 136 NONAME + _ZN16QDeclarativeTypeD1Ev @ 137 NONAME + _ZN16QDeclarativeTypeD2Ev @ 138 NONAME + _ZN16QDeclarativeView10paintEventEP11QPaintEvent @ 139 NONAME + _ZN16QDeclarativeView10timerEventEP11QTimerEvent @ 140 NONAME + _ZN16QDeclarativeView11eventFilterEP7QObjectP6QEvent @ 141 NONAME + _ZN16QDeclarativeView11qt_metacallEN11QMetaObject4CallEiPPv @ 142 NONAME + _ZN16QDeclarativeView11qt_metacastEPKc @ 143 NONAME + _ZN16QDeclarativeView11resizeEventEP12QResizeEvent @ 144 NONAME + _ZN16QDeclarativeView11rootContextEv @ 145 NONAME + _ZN16QDeclarativeView12sceneResizedE5QSize @ 146 NONAME + _ZN16QDeclarativeView13setResizeModeENS_10ResizeModeE @ 147 NONAME + _ZN16QDeclarativeView13setRootObjectEP7QObject @ 148 NONAME + _ZN16QDeclarativeView13statusChangedENS_6StatusE @ 149 NONAME + _ZN16QDeclarativeView15continueExecuteEv @ 150 NONAME + _ZN16QDeclarativeView16staticMetaObjectE @ 151 NONAME DATA 16 + _ZN16QDeclarativeView19getStaticMetaObjectEv @ 152 NONAME + _ZN16QDeclarativeView6engineEv @ 153 NONAME + _ZN16QDeclarativeView9setSourceERK4QUrl @ 154 NONAME + _ZN16QDeclarativeViewC1EP7QWidget @ 155 NONAME + _ZN16QDeclarativeViewC1ERK4QUrlP7QWidget @ 156 NONAME + _ZN16QDeclarativeViewC2EP7QWidget @ 157 NONAME + _ZN16QDeclarativeViewC2ERK4QUrlP7QWidget @ 158 NONAME + _ZN16QDeclarativeViewD0Ev @ 159 NONAME + _ZN16QDeclarativeViewD1Ev @ 160 NONAME + _ZN16QDeclarativeViewD2Ev @ 161 NONAME + _ZN16QMetaEnumBuilder6addKeyERK10QByteArrayi @ 162 NONAME + _ZN16QMetaEnumBuilder9removeKeyEi @ 163 NONAME + _ZN16QMetaEnumBuilder9setIsFlagEb @ 164 NONAME + _ZN17QDeclarativeError14setDescriptionERK7QString @ 165 NONAME + _ZN17QDeclarativeError6setUrlERK4QUrl @ 166 NONAME + _ZN17QDeclarativeError7setLineEi @ 167 NONAME + _ZN17QDeclarativeError9setColumnEi @ 168 NONAME + _ZN17QDeclarativeErrorC1ERKS_ @ 169 NONAME + _ZN17QDeclarativeErrorC1Ev @ 170 NONAME + _ZN17QDeclarativeErrorC2ERKS_ @ 171 NONAME + _ZN17QDeclarativeErrorC2Ev @ 172 NONAME + _ZN17QDeclarativeErrorD1Ev @ 173 NONAME + _ZN17QDeclarativeErrorD2Ev @ 174 NONAME + _ZN17QDeclarativeErroraSERKS_ @ 175 NONAME + _ZN17QDeclarativeState10setExtendsERK7QString @ 176 NONAME + _ZN17QDeclarativeState11qt_metacallEN11QMetaObject4CallEiPPv @ 177 NONAME + _ZN17QDeclarativeState11qt_metacastEPKc @ 178 NONAME + _ZN17QDeclarativeState13setStateGroupEP22QDeclarativeStateGroup @ 179 NONAME + _ZN17QDeclarativeState16staticMetaObjectE @ 180 NONAME DATA 16 + _ZN17QDeclarativeState19getStaticMetaObjectEv @ 181 NONAME + _ZN17QDeclarativeState5applyEP22QDeclarativeStateGroupP22QDeclarativeTransitionPS_ @ 182 NONAME + _ZN17QDeclarativeState6cancelEv @ 183 NONAME + _ZN17QDeclarativeState7changesEv @ 184 NONAME + _ZN17QDeclarativeState7setNameERK7QString @ 185 NONAME + _ZN17QDeclarativeState7setWhenEP19QDeclarativeBinding @ 186 NONAME + _ZN17QDeclarativeState9completedEv @ 187 NONAME + _ZN17QDeclarativeStateC1EP7QObject @ 188 NONAME + _ZN17QDeclarativeStateC2EP7QObject @ 189 NONAME + _ZN17QDeclarativeStateD0Ev @ 190 NONAME + _ZN17QDeclarativeStateD1Ev @ 191 NONAME + _ZN17QDeclarativeStateD2Ev @ 192 NONAME + _ZN17QDeclarativeStatelsEP26QDeclarativeStateOperation @ 193 NONAME + _ZN18QDeclarativeAction17deleteFromBindingEv @ 194 NONAME + _ZN18QDeclarativeActionC1EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 195 NONAME + _ZN18QDeclarativeActionC1EP7QObjectRK7QStringRK8QVariant @ 196 NONAME + _ZN18QDeclarativeActionC1Ev @ 197 NONAME + _ZN18QDeclarativeActionC2EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 198 NONAME + _ZN18QDeclarativeActionC2EP7QObjectRK7QStringRK8QVariant @ 199 NONAME + _ZN18QDeclarativeActionC2Ev @ 200 NONAME + _ZN18QDeclarativeEngine10setBaseUrlERK4QUrl @ 201 NONAME + _ZN18QDeclarativeEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 202 NONAME + _ZN18QDeclarativeEngine11qt_metacastEPKc @ 203 NONAME + _ZN18QDeclarativeEngine11rootContextEv @ 204 NONAME + _ZN18QDeclarativeEngine12importPluginERK7QStringS2_PS0_ @ 205 NONAME + _ZN18QDeclarativeEngine13addImportPathERK7QString @ 206 NONAME + _ZN18QDeclarativeEngine13addPluginPathERK7QString @ 207 NONAME + _ZN18QDeclarativeEngine15objectOwnershipEP7QObject @ 208 NONAME + _ZN18QDeclarativeEngine16addImageProviderERK7QStringP25QDeclarativeImageProvider @ 209 NONAME + _ZN18QDeclarativeEngine16contextForObjectEPK7QObject @ 210 NONAME + _ZN18QDeclarativeEngine16staticMetaObjectE @ 211 NONAME DATA 16 + _ZN18QDeclarativeEngine17setImportPathListERK11QStringList @ 212 NONAME + _ZN18QDeclarativeEngine17setPluginPathListERK11QStringList @ 213 NONAME + _ZN18QDeclarativeEngine18setObjectOwnershipEP7QObjectNS_15ObjectOwnershipE @ 214 NONAME + _ZN18QDeclarativeEngine19clearComponentCacheEv @ 215 NONAME + _ZN18QDeclarativeEngine19getStaticMetaObjectEv @ 216 NONAME + _ZN18QDeclarativeEngine19removeImageProviderERK7QString @ 217 NONAME + _ZN18QDeclarativeEngine19setContextForObjectEP7QObjectP19QDeclarativeContext @ 218 NONAME + _ZN18QDeclarativeEngine21setOfflineStoragePathERK7QString @ 219 NONAME + _ZN18QDeclarativeEngine30setNetworkAccessManagerFactoryEP39QDeclarativeNetworkAccessManagerFactory @ 220 NONAME + _ZN18QDeclarativeEngine32setOutputWarningsToStandardErrorEb @ 221 NONAME + _ZN18QDeclarativeEngine4quitEv @ 222 NONAME + _ZN18QDeclarativeEngine8warningsERK5QListI17QDeclarativeErrorE @ 223 NONAME + _ZN18QDeclarativeEngineC1EP7QObject @ 224 NONAME + _ZN18QDeclarativeEngineC2EP7QObject @ 225 NONAME + _ZN18QDeclarativeEngineD0Ev @ 226 NONAME + _ZN18QDeclarativeEngineD1Ev @ 227 NONAME + _ZN18QDeclarativeEngineD2Ev @ 228 NONAME + _ZN18QDeclarativeParser7VariantC1ERK7QString @ 229 NONAME + _ZN18QDeclarativeParser7VariantC1ERK7QStringPN14QDeclarativeJS3AST4NodeE @ 230 NONAME + _ZN18QDeclarativeParser7VariantC1ERKS0_ @ 231 NONAME + _ZN18QDeclarativeParser7VariantC1Eb @ 232 NONAME + _ZN18QDeclarativeParser7VariantC1EdRK7QString @ 233 NONAME + _ZN18QDeclarativeParser7VariantC1Ev @ 234 NONAME + _ZN18QDeclarativeParser7VariantC2ERK7QString @ 235 NONAME + _ZN18QDeclarativeParser7VariantC2ERK7QStringPN14QDeclarativeJS3AST4NodeE @ 236 NONAME + _ZN18QDeclarativeParser7VariantC2ERKS0_ @ 237 NONAME + _ZN18QDeclarativeParser7VariantC2Eb @ 238 NONAME + _ZN18QDeclarativeParser7VariantC2EdRK7QString @ 239 NONAME + _ZN18QDeclarativeParser7VariantC2Ev @ 240 NONAME + _ZN18QDeclarativeParser7VariantaSERKS0_ @ 241 NONAME + _ZN18QMetaMethodBuilder13setAttributesEi @ 242 NONAME + _ZN18QMetaMethodBuilder13setReturnTypeERK10QByteArray @ 243 NONAME + _ZN18QMetaMethodBuilder17setParameterNamesERK5QListI10QByteArrayE @ 244 NONAME + _ZN18QMetaMethodBuilder6setTagERK10QByteArray @ 245 NONAME + _ZN18QMetaMethodBuilder9setAccessEN11QMetaMethod6AccessE @ 246 NONAME + _ZN18QMetaObjectBuilder11addPropertyERK10QByteArrayS2_i @ 247 NONAME + _ZN18QMetaObjectBuilder11addPropertyERK13QMetaProperty @ 248 NONAME + _ZN18QMetaObjectBuilder11deserializeER11QDataStreamRK4QMapI10QByteArrayPK11QMetaObjectE @ 249 NONAME + _ZN18QMetaObjectBuilder11indexOfSlotERK10QByteArray @ 250 NONAME + _ZN18QMetaObjectBuilder12addClassInfoERK10QByteArrayS2_ @ 251 NONAME + _ZN18QMetaObjectBuilder12removeMethodEi @ 252 NONAME + _ZN18QMetaObjectBuilder12setClassNameERK10QByteArray @ 253 NONAME + _ZN18QMetaObjectBuilder13addEnumeratorERK10QByteArray @ 254 NONAME + _ZN18QMetaObjectBuilder13addEnumeratorERK9QMetaEnum @ 255 NONAME + _ZN18QMetaObjectBuilder13addMetaObjectEPK11QMetaObject6QFlagsINS_9AddMemberEE @ 256 NONAME + _ZN18QMetaObjectBuilder13indexOfMethodERK10QByteArray @ 257 NONAME + _ZN18QMetaObjectBuilder13indexOfSignalERK10QByteArray @ 258 NONAME + _ZN18QMetaObjectBuilder13setSuperClassEPK11QMetaObject @ 259 NONAME + _ZN18QMetaObjectBuilder14addConstructorERK10QByteArray @ 260 NONAME + _ZN18QMetaObjectBuilder14addConstructorERK11QMetaMethod @ 261 NONAME + _ZN18QMetaObjectBuilder14removePropertyEi @ 262 NONAME + _ZN18QMetaObjectBuilder15indexOfPropertyERK10QByteArray @ 263 NONAME + _ZN18QMetaObjectBuilder15removeClassInfoEi @ 264 NONAME + _ZN18QMetaObjectBuilder16indexOfClassInfoERK10QByteArray @ 265 NONAME + _ZN18QMetaObjectBuilder16removeEnumeratorEi @ 266 NONAME + _ZN18QMetaObjectBuilder17indexOfEnumeratorERK10QByteArray @ 267 NONAME + _ZN18QMetaObjectBuilder17removeConstructorEi @ 268 NONAME + _ZN18QMetaObjectBuilder18indexOfConstructorERK10QByteArray @ 269 NONAME + _ZN18QMetaObjectBuilder19fromRelocatableDataEP11QMetaObjectPKS0_RK10QByteArray @ 270 NONAME + _ZN18QMetaObjectBuilder20addRelatedMetaObjectERKPFRK11QMetaObjectvE @ 271 NONAME + _ZN18QMetaObjectBuilder23removeRelatedMetaObjectEi @ 272 NONAME + _ZN18QMetaObjectBuilder25setStaticMetacallFunctionEPFiN11QMetaObject4CallEiPPvE @ 273 NONAME + _ZN18QMetaObjectBuilder7addSlotERK10QByteArray @ 274 NONAME + _ZN18QMetaObjectBuilder8setFlagsE6QFlagsINS_14MetaObjectFlagEE @ 275 NONAME + _ZN18QMetaObjectBuilder9addMethodERK10QByteArray @ 276 NONAME + _ZN18QMetaObjectBuilder9addMethodERK10QByteArrayS2_ @ 277 NONAME + _ZN18QMetaObjectBuilder9addMethodERK11QMetaMethod @ 278 NONAME + _ZN18QMetaObjectBuilder9addSignalERK10QByteArray @ 279 NONAME + _ZN18QMetaObjectBuilderC1EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 280 NONAME + _ZN18QMetaObjectBuilderC1Ev @ 281 NONAME + _ZN18QMetaObjectBuilderC2EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 282 NONAME + _ZN18QMetaObjectBuilderC2Ev @ 283 NONAME + _ZN18QMetaObjectBuilderD0Ev @ 284 NONAME + _ZN18QMetaObjectBuilderD1Ev @ 285 NONAME + _ZN18QMetaObjectBuilderD2Ev @ 286 NONAME + _ZN19QDeclarativeAnchors10classBeginEv @ 287 NONAME + _ZN19QDeclarativeAnchors10resetRightEv @ 288 NONAME + _ZN19QDeclarativeAnchors10setMarginsEf @ 289 NONAME + _ZN19QDeclarativeAnchors10topChangedEv @ 290 NONAME + _ZN19QDeclarativeAnchors11fillChangedEv @ 291 NONAME + _ZN19QDeclarativeAnchors11leftChangedEv @ 292 NONAME + _ZN19QDeclarativeAnchors11qt_metacallEN11QMetaObject4CallEiPPv @ 293 NONAME + _ZN19QDeclarativeAnchors11qt_metacastEPKc @ 294 NONAME + _ZN19QDeclarativeAnchors11resetBottomEv @ 295 NONAME + _ZN19QDeclarativeAnchors11setBaselineERK22QDeclarativeAnchorLine @ 296 NONAME + _ZN19QDeclarativeAnchors11setCenterInEP15QGraphicsObject @ 297 NONAME + _ZN19QDeclarativeAnchors12rightChangedEv @ 298 NONAME + _ZN19QDeclarativeAnchors12setTopMarginEf @ 299 NONAME + _ZN19QDeclarativeAnchors13bottomChangedEv @ 300 NONAME + _ZN19QDeclarativeAnchors13resetBaselineEv @ 301 NONAME + _ZN19QDeclarativeAnchors13resetCenterInEv @ 302 NONAME + _ZN19QDeclarativeAnchors13setLeftMarginEf @ 303 NONAME + _ZN19QDeclarativeAnchors14marginsChangedEv @ 304 NONAME + _ZN19QDeclarativeAnchors14setRightMarginEf @ 305 NONAME + _ZN19QDeclarativeAnchors15baselineChangedEv @ 306 NONAME + _ZN19QDeclarativeAnchors15centerInChangedEv @ 307 NONAME + _ZN19QDeclarativeAnchors15setBottomMarginEf @ 308 NONAME + _ZN19QDeclarativeAnchors16staticMetaObjectE @ 309 NONAME DATA 16 + _ZN19QDeclarativeAnchors16topMarginChangedEv @ 310 NONAME + _ZN19QDeclarativeAnchors17componentCompleteEv @ 311 NONAME + _ZN19QDeclarativeAnchors17leftMarginChangedEv @ 312 NONAME + _ZN19QDeclarativeAnchors17setBaselineOffsetEf @ 313 NONAME + _ZN19QDeclarativeAnchors17setVerticalCenterERK22QDeclarativeAnchorLine @ 314 NONAME + _ZN19QDeclarativeAnchors18rightMarginChangedEv @ 315 NONAME + _ZN19QDeclarativeAnchors19bottomMarginChangedEv @ 316 NONAME + _ZN19QDeclarativeAnchors19getStaticMetaObjectEv @ 317 NONAME + _ZN19QDeclarativeAnchors19resetVerticalCenterEv @ 318 NONAME + _ZN19QDeclarativeAnchors19setHorizontalCenterERK22QDeclarativeAnchorLine @ 319 NONAME + _ZN19QDeclarativeAnchors21baselineOffsetChangedEv @ 320 NONAME + _ZN19QDeclarativeAnchors21resetHorizontalCenterEv @ 321 NONAME + _ZN19QDeclarativeAnchors21verticalCenterChangedEv @ 322 NONAME + _ZN19QDeclarativeAnchors23horizontalCenterChangedEv @ 323 NONAME + _ZN19QDeclarativeAnchors23setVerticalCenterOffsetEf @ 324 NONAME + _ZN19QDeclarativeAnchors25setHorizontalCenterOffsetEf @ 325 NONAME + _ZN19QDeclarativeAnchors27verticalCenterOffsetChangedEv @ 326 NONAME + _ZN19QDeclarativeAnchors29horizontalCenterOffsetChangedEv @ 327 NONAME + _ZN19QDeclarativeAnchors6setTopERK22QDeclarativeAnchorLine @ 328 NONAME + _ZN19QDeclarativeAnchors7setFillEP15QGraphicsObject @ 329 NONAME + _ZN19QDeclarativeAnchors7setLeftERK22QDeclarativeAnchorLine @ 330 NONAME + _ZN19QDeclarativeAnchors8resetTopEv @ 331 NONAME + _ZN19QDeclarativeAnchors8setRightERK22QDeclarativeAnchorLine @ 332 NONAME + _ZN19QDeclarativeAnchors9resetFillEv @ 333 NONAME + _ZN19QDeclarativeAnchors9resetLeftEv @ 334 NONAME + _ZN19QDeclarativeAnchors9setBottomERK22QDeclarativeAnchorLine @ 335 NONAME + _ZN19QDeclarativeAnchorsC1EP15QGraphicsObjectP7QObject @ 336 NONAME + _ZN19QDeclarativeAnchorsC1EP7QObject @ 337 NONAME + _ZN19QDeclarativeAnchorsC2EP15QGraphicsObjectP7QObject @ 338 NONAME + _ZN19QDeclarativeAnchorsC2EP7QObject @ 339 NONAME + _ZN19QDeclarativeAnchorsD0Ev @ 340 NONAME + _ZN19QDeclarativeAnchorsD1Ev @ 341 NONAME + _ZN19QDeclarativeAnchorsD2Ev @ 342 NONAME + _ZN19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 343 NONAME + _ZN19QDeclarativeBinding11qt_metacallEN11QMetaObject4CallEiPPv @ 344 NONAME + _ZN19QDeclarativeBinding11qt_metacastEPKc @ 345 NONAME + _ZN19QDeclarativeBinding13propertyIndexEv @ 346 NONAME + _ZN19QDeclarativeBinding16staticMetaObjectE @ 347 NONAME DATA 16 + _ZN19QDeclarativeBinding19getStaticMetaObjectEv @ 348 NONAME + _ZN19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 349 NONAME + _ZN19QDeclarativeBinding9setTargetERK20QDeclarativeProperty @ 350 NONAME + _ZN19QDeclarativeBindingC1EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 351 NONAME + _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 352 NONAME + _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 353 NONAME + _ZN19QDeclarativeBindingC2EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 354 NONAME + _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 355 NONAME + _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 356 NONAME + _ZN19QDeclarativeBindingD0Ev @ 357 NONAME + _ZN19QDeclarativeBindingD1Ev @ 358 NONAME + _ZN19QDeclarativeBindingD2Ev @ 359 NONAME + _ZN19QDeclarativeContext10setBaseUrlERK4QUrl @ 360 NONAME + _ZN19QDeclarativeContext11qt_metacallEN11QMetaObject4CallEiPPv @ 361 NONAME + _ZN19QDeclarativeContext11qt_metacastEPKc @ 362 NONAME + _ZN19QDeclarativeContext11resolvedUrlERK4QUrl @ 363 NONAME + _ZN19QDeclarativeContext16setContextObjectEP7QObject @ 364 NONAME + _ZN19QDeclarativeContext16staticMetaObjectE @ 365 NONAME DATA 16 + _ZN19QDeclarativeContext18setContextPropertyERK7QStringP7QObject @ 366 NONAME + _ZN19QDeclarativeContext18setContextPropertyERK7QStringRK8QVariant @ 367 NONAME + _ZN19QDeclarativeContext19getStaticMetaObjectEv @ 368 NONAME + _ZN19QDeclarativeContextC1EP18QDeclarativeEngineP7QObject @ 369 NONAME + _ZN19QDeclarativeContextC1EP18QDeclarativeEngineb @ 370 NONAME + _ZN19QDeclarativeContextC1EP23QDeclarativeContextData @ 371 NONAME + _ZN19QDeclarativeContextC1EPS_P7QObject @ 372 NONAME + _ZN19QDeclarativeContextC2EP18QDeclarativeEngineP7QObject @ 373 NONAME + _ZN19QDeclarativeContextC2EP18QDeclarativeEngineb @ 374 NONAME + _ZN19QDeclarativeContextC2EP23QDeclarativeContextData @ 375 NONAME + _ZN19QDeclarativeContextC2EPS_P7QObject @ 376 NONAME + _ZN19QDeclarativeContextD0Ev @ 377 NONAME + _ZN19QDeclarativeContextD1Ev @ 378 NONAME + _ZN19QDeclarativeContextD2Ev @ 379 NONAME + _ZN19QDeclarativeDomListC1ERKS_ @ 380 NONAME + _ZN19QDeclarativeDomListC1Ev @ 381 NONAME + _ZN19QDeclarativeDomListC2ERKS_ @ 382 NONAME + _ZN19QDeclarativeDomListC2Ev @ 383 NONAME + _ZN19QDeclarativeDomListD1Ev @ 384 NONAME + _ZN19QDeclarativeDomListD2Ev @ 385 NONAME + _ZN19QDeclarativeDomListaSERKS_ @ 386 NONAME + _ZN19QDeclarativePrivate12registerTypeERKNS_12RegisterTypeE @ 387 NONAME + _ZN19QDeclarativePrivate12registerTypeERKNS_17RegisterInterfaceE @ 388 NONAME + _ZN19QDeclarativePrivate26registerAutoParentFunctionEPFNS_16AutoParentResultEP7QObjectS2_E @ 389 NONAME + _ZN19QDeclarativePrivate30qdeclarativeelement_destructorEP7QObject @ 390 NONAME + _ZN19QListModelInterface10itemsMovedEiii @ 391 NONAME + _ZN19QListModelInterface11qt_metacallEN11QMetaObject4CallEiPPv @ 392 NONAME + _ZN19QListModelInterface11qt_metacastEPKc @ 393 NONAME + _ZN19QListModelInterface12itemsChangedEiiRK5QListIiE @ 394 NONAME + _ZN19QListModelInterface12itemsRemovedEii @ 395 NONAME + _ZN19QListModelInterface13itemsInsertedEii @ 396 NONAME + _ZN19QListModelInterface16staticMetaObjectE @ 397 NONAME DATA 16 + _ZN19QListModelInterface19getStaticMetaObjectEv @ 398 NONAME + _ZN20QDeclarativeBehavior10setEnabledEb @ 399 NONAME + _ZN20QDeclarativeBehavior11qt_metacallEN11QMetaObject4CallEiPPv @ 400 NONAME + _ZN20QDeclarativeBehavior11qt_metacastEPKc @ 401 NONAME + _ZN20QDeclarativeBehavior12setAnimationEP29QDeclarativeAbstractAnimation @ 402 NONAME + _ZN20QDeclarativeBehavior14enabledChangedEv @ 403 NONAME + _ZN20QDeclarativeBehavior16staticMetaObjectE @ 404 NONAME DATA 16 + _ZN20QDeclarativeBehavior18componentFinalizedEv @ 405 NONAME + _ZN20QDeclarativeBehavior19getStaticMetaObjectEv @ 406 NONAME + _ZN20QDeclarativeBehavior5writeERK8QVariant @ 407 NONAME + _ZN20QDeclarativeBehavior9animationEv @ 408 NONAME + _ZN20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 409 NONAME + _ZN20QDeclarativeBehaviorC1EP7QObject @ 410 NONAME + _ZN20QDeclarativeBehaviorC2EP7QObject @ 411 NONAME + _ZN20QDeclarativeBehaviorD0Ev @ 412 NONAME + _ZN20QDeclarativeBehaviorD1Ev @ 413 NONAME + _ZN20QDeclarativeBehaviorD2Ev @ 414 NONAME + _ZN20QDeclarativeDomValueC1ERKS_ @ 415 NONAME + _ZN20QDeclarativeDomValueC1Ev @ 416 NONAME + _ZN20QDeclarativeDomValueC2ERKS_ @ 417 NONAME + _ZN20QDeclarativeDomValueC2Ev @ 418 NONAME + _ZN20QDeclarativeDomValueD1Ev @ 419 NONAME + _ZN20QDeclarativeDomValueD2Ev @ 420 NONAME + _ZN20QDeclarativeDomValueaSERKS_ @ 421 NONAME + _ZN20QDeclarativeMetaType11isInterfaceEi @ 422 NONAME + _ZN20QDeclarativeMetaType12interfaceIIdEi @ 423 NONAME + _ZN20QDeclarativeMetaType12qmlTypeNamesEv @ 424 NONAME + _ZN20QDeclarativeMetaType12typeCategoryEi @ 425 NONAME + _ZN20QDeclarativeMetaType13defaultMethodEP7QObject @ 426 NONAME + _ZN20QDeclarativeMetaType13defaultMethodEPK11QMetaObject @ 427 NONAME + _ZN20QDeclarativeMetaType15defaultPropertyEP7QObject @ 428 NONAME + _ZN20QDeclarativeMetaType15defaultPropertyEPK11QMetaObject @ 429 NONAME + _ZN20QDeclarativeMetaType15parentFunctionsEv @ 430 NONAME + _ZN20QDeclarativeMetaType21customStringConverterEi @ 431 NONAME + _ZN20QDeclarativeMetaType24attachedPropertiesFuncIdEPK11QMetaObject @ 432 NONAME + _ZN20QDeclarativeMetaType26attachedPropertiesFuncByIdEi @ 433 NONAME + _ZN20QDeclarativeMetaType29registerCustomStringConverterEiPF8QVariantRK7QStringE @ 434 NONAME + _ZN20QDeclarativeMetaType4copyEiPvPKv @ 435 NONAME + _ZN20QDeclarativeMetaType6isListEi @ 436 NONAME + _ZN20QDeclarativeMetaType7qmlTypeEPK11QMetaObject @ 437 NONAME + _ZN20QDeclarativeMetaType7qmlTypeERK10QByteArrayii @ 438 NONAME + _ZN20QDeclarativeMetaType7qmlTypeEi @ 439 NONAME + _ZN20QDeclarativeMetaType8isModuleERK10QByteArrayii @ 440 NONAME + _ZN20QDeclarativeMetaType8listTypeEi @ 441 NONAME + _ZN20QDeclarativeMetaType8qmlTypesEv @ 442 NONAME + _ZN20QDeclarativeMetaType9isQObjectEi @ 443 NONAME + _ZN20QDeclarativeMetaType9toQObjectERK8QVariantPb @ 444 NONAME + _ZN20QDeclarativeProperty4readEP7QObjectRK7QString @ 445 NONAME + _ZN20QDeclarativeProperty4readEP7QObjectRK7QStringP18QDeclarativeEngine @ 446 NONAME + _ZN20QDeclarativeProperty4readEP7QObjectRK7QStringP19QDeclarativeContext @ 447 NONAME + _ZN20QDeclarativeProperty5writeEP7QObjectRK7QStringRK8QVariant @ 448 NONAME + _ZN20QDeclarativeProperty5writeEP7QObjectRK7QStringRK8QVariantP18QDeclarativeEngine @ 449 NONAME + _ZN20QDeclarativeProperty5writeEP7QObjectRK7QStringRK8QVariantP19QDeclarativeContext @ 450 NONAME + _ZN20QDeclarativePropertyC1EP7QObject @ 451 NONAME + _ZN20QDeclarativePropertyC1EP7QObjectP18QDeclarativeEngine @ 452 NONAME + _ZN20QDeclarativePropertyC1EP7QObjectP19QDeclarativeContext @ 453 NONAME + _ZN20QDeclarativePropertyC1EP7QObjectRK7QString @ 454 NONAME + _ZN20QDeclarativePropertyC1EP7QObjectRK7QStringP18QDeclarativeEngine @ 455 NONAME + _ZN20QDeclarativePropertyC1EP7QObjectRK7QStringP19QDeclarativeContext @ 456 NONAME + _ZN20QDeclarativePropertyC1ERKS_ @ 457 NONAME + _ZN20QDeclarativePropertyC1Ev @ 458 NONAME + _ZN20QDeclarativePropertyC2EP7QObject @ 459 NONAME + _ZN20QDeclarativePropertyC2EP7QObjectP18QDeclarativeEngine @ 460 NONAME + _ZN20QDeclarativePropertyC2EP7QObjectP19QDeclarativeContext @ 461 NONAME + _ZN20QDeclarativePropertyC2EP7QObjectRK7QString @ 462 NONAME + _ZN20QDeclarativePropertyC2EP7QObjectRK7QStringP18QDeclarativeEngine @ 463 NONAME + _ZN20QDeclarativePropertyC2EP7QObjectRK7QStringP19QDeclarativeContext @ 464 NONAME + _ZN20QDeclarativePropertyC2ERKS_ @ 465 NONAME + _ZN20QDeclarativePropertyC2Ev @ 466 NONAME + _ZN20QDeclarativePropertyD1Ev @ 467 NONAME + _ZN20QDeclarativePropertyD2Ev @ 468 NONAME + _ZN20QDeclarativePropertyaSERKS_ @ 469 NONAME + _ZN20QMetaPropertyBuilder10setDynamicEb @ 470 NONAME + _ZN20QMetaPropertyBuilder11setEditableEb @ 471 NONAME + _ZN20QMetaPropertyBuilder11setReadableEb @ 472 NONAME + _ZN20QMetaPropertyBuilder11setWritableEb @ 473 NONAME + _ZN20QMetaPropertyBuilder12setStdCppSetEb @ 474 NONAME + _ZN20QMetaPropertyBuilder13setDesignableEb @ 475 NONAME + _ZN20QMetaPropertyBuilder13setEnumOrFlagEb @ 476 NONAME + _ZN20QMetaPropertyBuilder13setResettableEb @ 477 NONAME + _ZN20QMetaPropertyBuilder13setScriptableEb @ 478 NONAME + _ZN20QMetaPropertyBuilder15setNotifySignalERK18QMetaMethodBuilder @ 479 NONAME + _ZN20QMetaPropertyBuilder18removeNotifySignalEv @ 480 NONAME + _ZN20QMetaPropertyBuilder7setUserEb @ 481 NONAME + _ZN20QMetaPropertyBuilder9setStoredEb @ 482 NONAME + _ZN21QDeclarativeComponent11beginCreateEP19QDeclarativeContext @ 483 NONAME + _ZN21QDeclarativeComponent11qt_metacallEN11QMetaObject4CallEiPPv @ 484 NONAME + _ZN21QDeclarativeComponent11qt_metacastEPKc @ 485 NONAME + _ZN21QDeclarativeComponent12createObjectEP7QObject @ 486 NONAME + _ZN21QDeclarativeComponent13statusChangedENS_6StatusE @ 487 NONAME + _ZN21QDeclarativeComponent14completeCreateEv @ 488 NONAME + _ZN21QDeclarativeComponent15progressChangedEf @ 489 NONAME + _ZN21QDeclarativeComponent16staticMetaObjectE @ 490 NONAME DATA 16 + _ZN21QDeclarativeComponent19getStaticMetaObjectEv @ 491 NONAME + _ZN21QDeclarativeComponent21qmlAttachedPropertiesEP7QObject @ 492 NONAME + _ZN21QDeclarativeComponent6createEP19QDeclarativeContext @ 493 NONAME + _ZN21QDeclarativeComponent7loadUrlERK4QUrl @ 494 NONAME + _ZN21QDeclarativeComponent7setDataERK10QByteArrayRK4QUrl @ 495 NONAME + _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineP24QDeclarativeCompiledDataiiP7QObject @ 496 NONAME + _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineP7QObject @ 497 NONAME + _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineRK4QUrlP7QObject @ 498 NONAME + _ZN21QDeclarativeComponentC1EP18QDeclarativeEngineRK7QStringP7QObject @ 499 NONAME + _ZN21QDeclarativeComponentC1EP7QObject @ 500 NONAME + _ZN21QDeclarativeComponentC1ER28QDeclarativeComponentPrivateP7QObject @ 501 NONAME + _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineP24QDeclarativeCompiledDataiiP7QObject @ 502 NONAME + _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineP7QObject @ 503 NONAME + _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineRK4QUrlP7QObject @ 504 NONAME + _ZN21QDeclarativeComponentC2EP18QDeclarativeEngineRK7QStringP7QObject @ 505 NONAME + _ZN21QDeclarativeComponentC2EP7QObject @ 506 NONAME + _ZN21QDeclarativeComponentC2ER28QDeclarativeComponentPrivateP7QObject @ 507 NONAME + _ZN21QDeclarativeComponentD0Ev @ 508 NONAME + _ZN21QDeclarativeComponentD1Ev @ 509 NONAME + _ZN21QDeclarativeComponentD2Ev @ 510 NONAME + _ZN21QDeclarativeDomImportC1ERKS_ @ 511 NONAME + _ZN21QDeclarativeDomImportC1Ev @ 512 NONAME + _ZN21QDeclarativeDomImportC2ERKS_ @ 513 NONAME + _ZN21QDeclarativeDomImportC2Ev @ 514 NONAME + _ZN21QDeclarativeDomImportD1Ev @ 515 NONAME + _ZN21QDeclarativeDomImportD2Ev @ 516 NONAME + _ZN21QDeclarativeDomImportaSERKS_ @ 517 NONAME + _ZN21QDeclarativeDomObjectC1ERKS_ @ 518 NONAME + _ZN21QDeclarativeDomObjectC1Ev @ 519 NONAME + _ZN21QDeclarativeDomObjectC2ERKS_ @ 520 NONAME + _ZN21QDeclarativeDomObjectC2Ev @ 521 NONAME + _ZN21QDeclarativeDomObjectD1Ev @ 522 NONAME + _ZN21QDeclarativeDomObjectD2Ev @ 523 NONAME + _ZN21QDeclarativeDomObjectaSERKS_ @ 524 NONAME + _ZN21QDeclarativeListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 525 NONAME + _ZN21QDeclarativeListModel11qt_metacastEPKc @ 526 NONAME + _ZN21QDeclarativeListModel11setPropertyEiRK7QStringRK8QVariant @ 527 NONAME + _ZN21QDeclarativeListModel12countChangedEv @ 528 NONAME + _ZN21QDeclarativeListModel16staticMetaObjectE @ 529 NONAME DATA 16 + _ZN21QDeclarativeListModel19getStaticMetaObjectEv @ 530 NONAME + _ZN21QDeclarativeListModel3setEiRK12QScriptValue @ 531 NONAME + _ZN21QDeclarativeListModel4moveEiii @ 532 NONAME + _ZN21QDeclarativeListModel4syncEv @ 533 NONAME + _ZN21QDeclarativeListModel5agentEv @ 534 NONAME + _ZN21QDeclarativeListModel5clearEv @ 535 NONAME + _ZN21QDeclarativeListModel6appendERK12QScriptValue @ 536 NONAME + _ZN21QDeclarativeListModel6insertEiRK12QScriptValue @ 537 NONAME + _ZN21QDeclarativeListModel6removeEi @ 538 NONAME + _ZN21QDeclarativeListModel7flattenEv @ 539 NONAME + _ZN21QDeclarativeListModelC1EP7QObject @ 540 NONAME + _ZN21QDeclarativeListModelC1EbP7QObject @ 541 NONAME + _ZN21QDeclarativeListModelC2EP7QObject @ 542 NONAME + _ZN21QDeclarativeListModelC2EbP7QObject @ 543 NONAME + _ZN21QDeclarativeListModelD0Ev @ 544 NONAME + _ZN21QDeclarativeListModelD1Ev @ 545 NONAME + _ZN21QDeclarativeListModelD2Ev @ 546 NONAME + _ZN21QDeclarativeRectangle11qt_metacallEN11QMetaObject4CallEiPPv @ 547 NONAME + _ZN21QDeclarativeRectangle11qt_metacastEPKc @ 548 NONAME + _ZN21QDeclarativeRectangle11setGradientEP20QDeclarativeGradient @ 549 NONAME + _ZN21QDeclarativeRectangle12colorChangedEv @ 550 NONAME + _ZN21QDeclarativeRectangle13radiusChangedEv @ 551 NONAME + _ZN21QDeclarativeRectangle16staticMetaObjectE @ 552 NONAME DATA 16 + _ZN21QDeclarativeRectangle19generateRoundedRectEv @ 553 NONAME + _ZN21QDeclarativeRectangle19getStaticMetaObjectEv @ 554 NONAME + _ZN21QDeclarativeRectangle20generateBorderedRectEv @ 555 NONAME + _ZN21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 556 NONAME + _ZN21QDeclarativeRectangle6borderEv @ 557 NONAME + _ZN21QDeclarativeRectangle8doUpdateEv @ 558 NONAME + _ZN21QDeclarativeRectangle8drawRectER8QPainter @ 559 NONAME + _ZN21QDeclarativeRectangle8setColorERK6QColor @ 560 NONAME + _ZN21QDeclarativeRectangle9setRadiusEf @ 561 NONAME + _ZN21QDeclarativeRectangleC1EP16QDeclarativeItem @ 562 NONAME + _ZN21QDeclarativeRectangleC2EP16QDeclarativeItem @ 563 NONAME + _ZN21QDeclarativeScaleGrid11qt_metacallEN11QMetaObject4CallEiPPv @ 564 NONAME + _ZN21QDeclarativeScaleGrid11qt_metacastEPKc @ 565 NONAME + _ZN21QDeclarativeScaleGrid13borderChangedEv @ 566 NONAME + _ZN21QDeclarativeScaleGrid16staticMetaObjectE @ 567 NONAME DATA 16 + _ZN21QDeclarativeScaleGrid19getStaticMetaObjectEv @ 568 NONAME + _ZN21QDeclarativeScaleGrid6setTopEi @ 569 NONAME + _ZN21QDeclarativeScaleGrid7setLeftEi @ 570 NONAME + _ZN21QDeclarativeScaleGrid8setRightEi @ 571 NONAME + _ZN21QDeclarativeScaleGrid9setBottomEi @ 572 NONAME + _ZN21QDeclarativeScaleGridC1EP7QObject @ 573 NONAME + _ZN21QDeclarativeScaleGridC2EP7QObject @ 574 NONAME + _ZN21QDeclarativeScaleGridD0Ev @ 575 NONAME + _ZN21QDeclarativeScaleGridD1Ev @ 576 NONAME + _ZN21QDeclarativeScaleGridD2Ev @ 577 NONAME + _ZN21QDeclarativeValueType11qt_metacallEN11QMetaObject4CallEiPPv @ 578 NONAME + _ZN21QDeclarativeValueType11qt_metacastEPKc @ 579 NONAME + _ZN21QDeclarativeValueType16staticMetaObjectE @ 580 NONAME DATA 16 + _ZN21QDeclarativeValueType19getStaticMetaObjectEv @ 581 NONAME + _ZN21QDeclarativeValueTypeC2EP7QObject @ 582 NONAME + _ZN22QDeclarativeDebugQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 583 NONAME + _ZN22QDeclarativeDebugQuery11qt_metacastEPKc @ 584 NONAME + _ZN22QDeclarativeDebugQuery12stateChangedENS_5StateE @ 585 NONAME + _ZN22QDeclarativeDebugQuery16staticMetaObjectE @ 586 NONAME DATA 16 + _ZN22QDeclarativeDebugQuery19getStaticMetaObjectEv @ 587 NONAME + _ZN22QDeclarativeDebugQuery8setStateENS_5StateE @ 588 NONAME + _ZN22QDeclarativeDebugQueryC1EP7QObject @ 589 NONAME + _ZN22QDeclarativeDebugQueryC2EP7QObject @ 590 NONAME + _ZN22QDeclarativeDebugWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 591 NONAME + _ZN22QDeclarativeDebugWatch11qt_metacastEPKc @ 592 NONAME + _ZN22QDeclarativeDebugWatch12stateChangedENS_5StateE @ 593 NONAME + _ZN22QDeclarativeDebugWatch12valueChangedERK10QByteArrayRK8QVariant @ 594 NONAME + _ZN22QDeclarativeDebugWatch16staticMetaObjectE @ 595 NONAME DATA 16 + _ZN22QDeclarativeDebugWatch19getStaticMetaObjectEv @ 596 NONAME + _ZN22QDeclarativeDebugWatch8setStateENS_5StateE @ 597 NONAME + _ZN22QDeclarativeDebugWatchC1EP7QObject @ 598 NONAME + _ZN22QDeclarativeDebugWatchC2EP7QObject @ 599 NONAME + _ZN22QDeclarativeDebugWatchD0Ev @ 600 NONAME + _ZN22QDeclarativeDebugWatchD1Ev @ 601 NONAME + _ZN22QDeclarativeDebugWatchD2Ev @ 602 NONAME + _ZN22QDeclarativeExpression10clearErrorEv @ 603 NONAME + _ZN22QDeclarativeExpression11qt_metacallEN11QMetaObject4CallEiPPv @ 604 NONAME + _ZN22QDeclarativeExpression11qt_metacastEPKc @ 605 NONAME + _ZN22QDeclarativeExpression12valueChangedEv @ 606 NONAME + _ZN22QDeclarativeExpression13setExpressionERK7QString @ 607 NONAME + _ZN22QDeclarativeExpression16staticMetaObjectE @ 608 NONAME DATA 16 + _ZN22QDeclarativeExpression17setSourceLocationERK7QStringi @ 609 NONAME + _ZN22QDeclarativeExpression19getStaticMetaObjectEv @ 610 NONAME + _ZN22QDeclarativeExpression23setNotifyOnValueChangedEb @ 611 NONAME + _ZN22QDeclarativeExpression8evaluateEPb @ 612 NONAME + _ZN22QDeclarativeExpressionC1EP19QDeclarativeContextP7QObjectRK7QStringS3_ @ 613 NONAME + _ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataP7QObjectRK7QString @ 614 NONAME + _ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataP7QObjectRK7QStringR29QDeclarativeExpressionPrivate @ 615 NONAME + _ZN22QDeclarativeExpressionC1EP23QDeclarativeContextDataPvP20QDeclarativeRefCountP7QObjectRK7QStringiR29QDeclarativeExpressionPrivate @ 616 NONAME + _ZN22QDeclarativeExpressionC1Ev @ 617 NONAME + _ZN22QDeclarativeExpressionC2EP19QDeclarativeContextP7QObjectRK7QStringS3_ @ 618 NONAME + _ZN22QDeclarativeExpressionC2EP23QDeclarativeContextDataP7QObjectRK7QString @ 619 NONAME + _ZN22QDeclarativeExpressionC2EP23QDeclarativeContextDataP7QObjectRK7QStringR29QDeclarativeExpressionPrivate @ 620 NONAME + _ZN22QDeclarativeExpressionC2EP23QDeclarativeContextDataPvP20QDeclarativeRefCountP7QObjectRK7QStringiR29QDeclarativeExpressionPrivate @ 621 NONAME + _ZN22QDeclarativeExpressionC2Ev @ 622 NONAME + _ZN22QDeclarativeExpressionD0Ev @ 623 NONAME + _ZN22QDeclarativeExpressionD1Ev @ 624 NONAME + _ZN22QDeclarativeExpressionD2Ev @ 625 NONAME + _ZN22QDeclarativeStateGroup10classBeginEv @ 626 NONAME + _ZN22QDeclarativeStateGroup11qt_metacallEN11QMetaObject4CallEiPPv @ 627 NONAME + _ZN22QDeclarativeStateGroup11qt_metacastEPKc @ 628 NONAME + _ZN22QDeclarativeStateGroup11removeStateEP17QDeclarativeState @ 629 NONAME + _ZN22QDeclarativeStateGroup12stateChangedERK7QString @ 630 NONAME + _ZN22QDeclarativeStateGroup14statesPropertyEv @ 631 NONAME + _ZN22QDeclarativeStateGroup15updateAutoStateEv @ 632 NONAME + _ZN22QDeclarativeStateGroup16staticMetaObjectE @ 633 NONAME DATA 16 + _ZN22QDeclarativeStateGroup17componentCompleteEv @ 634 NONAME + _ZN22QDeclarativeStateGroup19getStaticMetaObjectEv @ 635 NONAME + _ZN22QDeclarativeStateGroup19transitionsPropertyEv @ 636 NONAME + _ZN22QDeclarativeStateGroup8setStateERK7QString @ 637 NONAME + _ZN22QDeclarativeStateGroupC1EP7QObject @ 638 NONAME + _ZN22QDeclarativeStateGroupC2EP7QObject @ 639 NONAME + _ZN22QDeclarativeStateGroupD0Ev @ 640 NONAME + _ZN22QDeclarativeStateGroupD1Ev @ 641 NONAME + _ZN22QDeclarativeStateGroupD2Ev @ 642 NONAME + _ZN22QDeclarativeTransition10animationsEv @ 643 NONAME + _ZN22QDeclarativeTransition10setToStateERK7QString @ 644 NONAME + _ZN22QDeclarativeTransition11fromChangedEv @ 645 NONAME + _ZN22QDeclarativeTransition11qt_metacallEN11QMetaObject4CallEiPPv @ 646 NONAME + _ZN22QDeclarativeTransition11qt_metacastEPKc @ 647 NONAME + _ZN22QDeclarativeTransition11setReversedEb @ 648 NONAME + _ZN22QDeclarativeTransition12setFromStateERK7QString @ 649 NONAME + _ZN22QDeclarativeTransition13setReversibleEb @ 650 NONAME + _ZN22QDeclarativeTransition16staticMetaObjectE @ 651 NONAME DATA 16 + _ZN22QDeclarativeTransition17reversibleChangedEv @ 652 NONAME + _ZN22QDeclarativeTransition19getStaticMetaObjectEv @ 653 NONAME + _ZN22QDeclarativeTransition4stopEv @ 654 NONAME + _ZN22QDeclarativeTransition7prepareER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyEP29QDeclarativeTransitionManager @ 655 NONAME + _ZN22QDeclarativeTransition9toChangedEv @ 656 NONAME + _ZN22QDeclarativeTransitionC1EP7QObject @ 657 NONAME + _ZN22QDeclarativeTransitionC2EP7QObject @ 658 NONAME + _ZN22QDeclarativeTransitionD0Ev @ 659 NONAME + _ZN22QDeclarativeTransitionD1Ev @ 660 NONAME + _ZN22QDeclarativeTransitionD2Ev @ 661 NONAME + _ZN23QDeclarativeDebugClient10setEnabledEb @ 662 NONAME + _ZN23QDeclarativeDebugClient11qt_metacallEN11QMetaObject4CallEiPPv @ 663 NONAME + _ZN23QDeclarativeDebugClient11qt_metacastEPKc @ 664 NONAME + _ZN23QDeclarativeDebugClient11sendMessageERK10QByteArray @ 665 NONAME + _ZN23QDeclarativeDebugClient15messageReceivedERK10QByteArray @ 666 NONAME + _ZN23QDeclarativeDebugClient16staticMetaObjectE @ 667 NONAME DATA 16 + _ZN23QDeclarativeDebugClient19getStaticMetaObjectEv @ 668 NONAME + _ZN23QDeclarativeDebugClientC1ERK7QStringP27QDeclarativeDebugConnection @ 669 NONAME + _ZN23QDeclarativeDebugClientC2ERK7QStringP27QDeclarativeDebugConnection @ 670 NONAME + _ZN23QDeclarativeDomDocument4loadEP18QDeclarativeEngineRK10QByteArrayRK4QUrl @ 671 NONAME + _ZN23QDeclarativeDomDocumentC1ERKS_ @ 672 NONAME + _ZN23QDeclarativeDomDocumentC1Ev @ 673 NONAME + _ZN23QDeclarativeDomDocumentC2ERKS_ @ 674 NONAME + _ZN23QDeclarativeDomDocumentC2Ev @ 675 NONAME + _ZN23QDeclarativeDomDocumentD1Ev @ 676 NONAME + _ZN23QDeclarativeDomDocumentD2Ev @ 677 NONAME + _ZN23QDeclarativeDomDocumentaSERKS_ @ 678 NONAME + _ZN23QDeclarativeDomPropertyC1ERKS_ @ 679 NONAME + _ZN23QDeclarativeDomPropertyC1Ev @ 680 NONAME + _ZN23QDeclarativeDomPropertyC2ERKS_ @ 681 NONAME + _ZN23QDeclarativeDomPropertyC2Ev @ 682 NONAME + _ZN23QDeclarativeDomPropertyD1Ev @ 683 NONAME + _ZN23QDeclarativeDomPropertyD2Ev @ 684 NONAME + _ZN23QDeclarativeDomPropertyaSERKS_ @ 685 NONAME + _ZN23QDeclarativeEngineDebug11qt_metacallEN11QMetaObject4CallEiPPv @ 686 NONAME + _ZN23QDeclarativeEngineDebug11qt_metacastEPKc @ 687 NONAME + _ZN23QDeclarativeEngineDebug11queryObjectERK32QDeclarativeDebugObjectReferenceP7QObject @ 688 NONAME + _ZN23QDeclarativeEngineDebug11removeWatchEP22QDeclarativeDebugWatch @ 689 NONAME + _ZN23QDeclarativeEngineDebug16staticMetaObjectE @ 690 NONAME DATA 16 + _ZN23QDeclarativeEngineDebug17queryRootContextsERK32QDeclarativeDebugEngineReferenceP7QObject @ 691 NONAME + _ZN23QDeclarativeEngineDebug19getStaticMetaObjectEv @ 692 NONAME + _ZN23QDeclarativeEngineDebug19setBindingForObjectEiRK7QStringRK8QVariantbP7QObject @ 693 NONAME + _ZN23QDeclarativeEngineDebug20queryObjectRecursiveERK32QDeclarativeDebugObjectReferenceP7QObject @ 694 NONAME + _ZN23QDeclarativeEngineDebug21queryAvailableEnginesEP7QObject @ 695 NONAME + _ZN23QDeclarativeEngineDebug21queryExpressionResultEiRK7QStringP7QObject @ 696 NONAME + _ZN23QDeclarativeEngineDebug8addWatchERK30QDeclarativeDebugFileReferenceP7QObject @ 697 NONAME + _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceP7QObject @ 698 NONAME + _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceRK7QStringP7QObject @ 699 NONAME + _ZN23QDeclarativeEngineDebug8addWatchERK33QDeclarativeDebugContextReferenceRK7QStringP7QObject @ 700 NONAME + _ZN23QDeclarativeEngineDebug8addWatchERK34QDeclarativeDebugPropertyReferenceP7QObject @ 701 NONAME + _ZN23QDeclarativeEngineDebugC1EP27QDeclarativeDebugConnectionP7QObject @ 702 NONAME + _ZN23QDeclarativeEngineDebugC2EP27QDeclarativeDebugConnectionP7QObject @ 703 NONAME + _ZN23QDeclarativeItemPrivate10resetWidthEv @ 704 NONAME + _ZN23QDeclarativeItemPrivate11data_appendEP24QDeclarativeListPropertyI7QObjectEPS1_ @ 705 NONAME + _ZN23QDeclarativeItemPrivate11resetHeightEv @ 706 NONAME + _ZN23QDeclarativeItemPrivate11transitionsEv @ 707 NONAME + _ZN23QDeclarativeItemPrivate12focusChangedEb @ 708 NONAME + _ZN23QDeclarativeItemPrivate12resources_atEP24QDeclarativeListPropertyI7QObjectEi @ 709 NONAME + _ZN23QDeclarativeItemPrivate12transform_atEP24QDeclarativeListPropertyI18QGraphicsTransformEi @ 710 NONAME + _ZN23QDeclarativeItemPrivate14consistentTimeE @ 711 NONAME DATA 8 + _ZN23QDeclarativeItemPrivate14parentPropertyEP7QObjectPvP28QDeclarativeNotifierEndpoint @ 712 NONAME + _ZN23QDeclarativeItemPrivate15resources_countEP24QDeclarativeListPropertyI7QObjectE @ 713 NONAME + _ZN23QDeclarativeItemPrivate15transform_clearEP24QDeclarativeListPropertyI18QGraphicsTransformE @ 714 NONAME + _ZN23QDeclarativeItemPrivate15transform_countEP24QDeclarativeListPropertyI18QGraphicsTransformE @ 715 NONAME + _ZN23QDeclarativeItemPrivate16resources_appendEP24QDeclarativeListPropertyI7QObjectEPS1_ @ 716 NONAME + _ZN23QDeclarativeItemPrivate16transformChangedEv @ 717 NONAME + _ZN23QDeclarativeItemPrivate16transform_appendEP24QDeclarativeListPropertyI18QGraphicsTransformEPS1_ @ 718 NONAME + _ZN23QDeclarativeItemPrivate17setConsistentTimeEx @ 719 NONAME + _ZN23QDeclarativeItemPrivate24removeItemChangeListenerEP30QDeclarativeItemChangeListener6QFlagsINS_10ChangeTypeEE @ 720 NONAME + _ZN23QDeclarativeItemPrivate4dataEv @ 721 NONAME + _ZN23QDeclarativeItemPrivate5startER13QElapsedTimer @ 722 NONAME + _ZN23QDeclarativeItemPrivate6statesEv @ 723 NONAME + _ZN23QDeclarativeItemPrivate7_statesEv @ 724 NONAME + _ZN23QDeclarativeItemPrivate7elapsedER13QElapsedTimer @ 725 NONAME + _ZN23QDeclarativeItemPrivate7restartER13QElapsedTimer @ 726 NONAME + _ZN23QDeclarativeItemPrivate8setStateERK7QString @ 727 NONAME + _ZN23QDeclarativeItemPrivate8setWidthEf @ 728 NONAME + _ZN23QDeclarativeItemPrivate9resourcesEv @ 729 NONAME + _ZN23QDeclarativeItemPrivate9setHeightEf @ 730 NONAME + _ZN23QDeclarativePixmapCache15pendingRequestsEv @ 731 NONAME ABSENT + _ZN23QDeclarativePixmapCache3getERK4QUrlP7QPixmapP7QStringP5QSizebii @ 732 NONAME ABSENT + _ZN23QDeclarativePixmapCache6cancelERK4QUrlP7QObject @ 733 NONAME ABSENT + _ZN23QDeclarativePixmapCache7requestEP18QDeclarativeEngineRK4QUrlii @ 734 NONAME ABSENT + _ZN23QDeclarativePixmapReply10setLoadingEv @ 735 NONAME ABSENT + _ZN23QDeclarativePixmapReply11qt_metacallEN11QMetaObject4CallEiPPv @ 736 NONAME ABSENT + _ZN23QDeclarativePixmapReply11qt_metacastEPKc @ 737 NONAME ABSENT + _ZN23QDeclarativePixmapReply16downloadProgressExx @ 738 NONAME ABSENT + _ZN23QDeclarativePixmapReply16staticMetaObjectE @ 739 NONAME DATA 16 ABSENT + _ZN23QDeclarativePixmapReply19getStaticMetaObjectEv @ 740 NONAME ABSENT + _ZN23QDeclarativePixmapReply5eventEP6QEvent @ 741 NONAME ABSENT + _ZN23QDeclarativePixmapReply6addRefEv @ 742 NONAME ABSENT + _ZN23QDeclarativePixmapReply7releaseEb @ 743 NONAME ABSENT + _ZN23QDeclarativePixmapReply8finishedEv @ 744 NONAME ABSENT + _ZN23QDeclarativePixmapReplyC1EP23QDeclarativeImageReaderRK4QUrlii @ 745 NONAME ABSENT + _ZN23QDeclarativePixmapReplyC2EP23QDeclarativeImageReaderRK4QUrlii @ 746 NONAME ABSENT + _ZN23QDeclarativePixmapReplyD0Ev @ 747 NONAME ABSENT + _ZN23QDeclarativePixmapReplyD1Ev @ 748 NONAME ABSENT + _ZN23QDeclarativePixmapReplyD2Ev @ 749 NONAME ABSENT + _ZN23QDeclarativePropertyMap11qt_metacallEN11QMetaObject4CallEiPPv @ 750 NONAME + _ZN23QDeclarativePropertyMap11qt_metacastEPKc @ 751 NONAME + _ZN23QDeclarativePropertyMap12valueChangedERK7QStringRK8QVariant @ 752 NONAME + _ZN23QDeclarativePropertyMap16staticMetaObjectE @ 753 NONAME DATA 16 + _ZN23QDeclarativePropertyMap19getStaticMetaObjectEv @ 754 NONAME + _ZN23QDeclarativePropertyMap5clearERK7QString @ 755 NONAME + _ZN23QDeclarativePropertyMap6insertERK7QStringRK8QVariant @ 756 NONAME + _ZN23QDeclarativePropertyMapC1EP7QObject @ 757 NONAME + _ZN23QDeclarativePropertyMapC2EP7QObject @ 758 NONAME + _ZN23QDeclarativePropertyMapD0Ev @ 759 NONAME + _ZN23QDeclarativePropertyMapD1Ev @ 760 NONAME + _ZN23QDeclarativePropertyMapD2Ev @ 761 NONAME + _ZN23QDeclarativePropertyMapixERK7QString @ 762 NONAME + _ZN24QDeclarativeCustomParser11clearErrorsEv @ 763 NONAME + _ZN24QDeclarativeCustomParser5errorERK28QDeclarativeCustomParserNodeRK7QString @ 764 NONAME + _ZN24QDeclarativeCustomParser5errorERK32QDeclarativeCustomParserPropertyRK7QString @ 765 NONAME + _ZN24QDeclarativeCustomParser5errorERK7QString @ 766 NONAME + _ZN24QDeclarativeDebugService11idForObjectEP7QObject @ 767 NONAME + _ZN24QDeclarativeDebugService11objectForIdEi @ 768 NONAME + _ZN24QDeclarativeDebugService11qt_metacallEN11QMetaObject4CallEiPPv @ 769 NONAME + _ZN24QDeclarativeDebugService11qt_metacastEPKc @ 770 NONAME + _ZN24QDeclarativeDebugService11sendMessageERK10QByteArray @ 771 NONAME + _ZN24QDeclarativeDebugService14enabledChangedEb @ 772 NONAME + _ZN24QDeclarativeDebugService14objectToStringEP7QObject @ 773 NONAME + _ZN24QDeclarativeDebugService15messageReceivedERK10QByteArray @ 774 NONAME + _ZN24QDeclarativeDebugService16staticMetaObjectE @ 775 NONAME DATA 16 + _ZN24QDeclarativeDebugService18hasDebuggingClientEv @ 776 NONAME + _ZN24QDeclarativeDebugService18isDebuggingEnabledEv @ 777 NONAME + _ZN24QDeclarativeDebugService19getStaticMetaObjectEv @ 778 NONAME + _ZN24QDeclarativeDebugServiceC1ERK7QStringP7QObject @ 779 NONAME + _ZN24QDeclarativeDebugServiceC2ERK7QStringP7QObject @ 780 NONAME + _ZN24QDeclarativeDomComponentC1ERKS_ @ 781 NONAME + _ZN24QDeclarativeDomComponentC1Ev @ 782 NONAME + _ZN24QDeclarativeDomComponentC2ERKS_ @ 783 NONAME + _ZN24QDeclarativeDomComponentC2Ev @ 784 NONAME + _ZN24QDeclarativeDomComponentD1Ev @ 785 NONAME + _ZN24QDeclarativeDomComponentD2Ev @ 786 NONAME + _ZN24QDeclarativeDomComponentaSERKS_ @ 787 NONAME + _ZN24QDeclarativeParserStatusC2Ev @ 788 NONAME + _ZN24QDeclarativeParserStatusD0Ev @ 789 NONAME + _ZN24QDeclarativeParserStatusD1Ev @ 790 NONAME + _ZN24QDeclarativeParserStatusD2Ev @ 791 NONAME + _ZN24QDeclarativeScriptString10setContextEP19QDeclarativeContext @ 792 NONAME + _ZN24QDeclarativeScriptString14setScopeObjectEP7QObject @ 793 NONAME + _ZN24QDeclarativeScriptString9setScriptERK7QString @ 794 NONAME + _ZN24QDeclarativeScriptStringC1ERKS_ @ 795 NONAME + _ZN24QDeclarativeScriptStringC1Ev @ 796 NONAME + _ZN24QDeclarativeScriptStringC2ERKS_ @ 797 NONAME + _ZN24QDeclarativeScriptStringC2Ev @ 798 NONAME + _ZN24QDeclarativeScriptStringD1Ev @ 799 NONAME + _ZN24QDeclarativeScriptStringD2Ev @ 800 NONAME + _ZN24QDeclarativeScriptStringaSERKS_ @ 801 NONAME + _ZN25QDeclarativeImageProviderD0Ev @ 802 NONAME + _ZN25QDeclarativeImageProviderD1Ev @ 803 NONAME + _ZN25QDeclarativeImageProviderD2Ev @ 804 NONAME + _ZN25QDeclarativeListReferenceC1EP7QObjectPKcP18QDeclarativeEngine @ 805 NONAME + _ZN25QDeclarativeListReferenceC1ERKS_ @ 806 NONAME + _ZN25QDeclarativeListReferenceC1Ev @ 807 NONAME + _ZN25QDeclarativeListReferenceC2EP7QObjectPKcP18QDeclarativeEngine @ 808 NONAME + _ZN25QDeclarativeListReferenceC2ERKS_ @ 809 NONAME + _ZN25QDeclarativeListReferenceC2Ev @ 810 NONAME + _ZN25QDeclarativeListReferenceD1Ev @ 811 NONAME + _ZN25QDeclarativeListReferenceD2Ev @ 812 NONAME + _ZN25QDeclarativeListReferenceaSERKS_ @ 813 NONAME + _ZN26QDeclarativeDebuggerStatus16setSelectedStateEb @ 814 NONAME + _ZN26QDeclarativeDebuggerStatusD0Ev @ 815 NONAME + _ZN26QDeclarativeDebuggerStatusD1Ev @ 816 NONAME + _ZN26QDeclarativeDebuggerStatusD2Ev @ 817 NONAME + _ZN26QDeclarativeOpenMetaObject12initialValueEi @ 818 NONAME + _ZN26QDeclarativeOpenMetaObject12propertyReadEi @ 819 NONAME + _ZN26QDeclarativeOpenMetaObject13propertyWriteEi @ 820 NONAME + _ZN26QDeclarativeOpenMetaObject14createPropertyEPKcS1_ @ 821 NONAME + _ZN26QDeclarativeOpenMetaObject15propertyCreatedEiR20QMetaPropertyBuilder @ 822 NONAME + _ZN26QDeclarativeOpenMetaObject15propertyWrittenEi @ 823 NONAME + _ZN26QDeclarativeOpenMetaObject8metaCallEN11QMetaObject4CallEiPPv @ 824 NONAME + _ZN26QDeclarativeOpenMetaObject8setValueERK10QByteArrayRK8QVariant @ 825 NONAME + _ZN26QDeclarativeOpenMetaObject8setValueEiRK8QVariant @ 826 NONAME + _ZN26QDeclarativeOpenMetaObject9setCachedEb @ 827 NONAME + _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 828 NONAME + _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectb @ 829 NONAME + _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 830 NONAME + _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectb @ 831 NONAME + _ZN26QDeclarativeOpenMetaObjectD0Ev @ 832 NONAME + _ZN26QDeclarativeOpenMetaObjectD1Ev @ 833 NONAME + _ZN26QDeclarativeOpenMetaObjectD2Ev @ 834 NONAME + _ZN26QDeclarativeOpenMetaObjectixERK10QByteArray @ 835 NONAME + _ZN26QDeclarativeOpenMetaObjectixEi @ 836 NONAME + _ZN26QDeclarativeStateOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 837 NONAME + _ZN26QDeclarativeStateOperation11qt_metacastEPKc @ 838 NONAME + _ZN26QDeclarativeStateOperation16staticMetaObjectE @ 839 NONAME DATA 16 + _ZN26QDeclarativeStateOperation19getStaticMetaObjectEv @ 840 NONAME + _ZN26QDeclarativeStateOperation7actionsEv @ 841 NONAME + _ZN26QDeclarativeStateOperationC1ER14QObjectPrivateP7QObject @ 842 NONAME + _ZN26QDeclarativeStateOperationC2ER14QObjectPrivateP7QObject @ 843 NONAME + _ZN27QDeclarativeAbstractBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 844 NONAME + _ZN27QDeclarativeAbstractBinding11addToObjectEP7QObject @ 845 NONAME + _ZN27QDeclarativeAbstractBinding16removeFromObjectEv @ 846 NONAME + _ZN27QDeclarativeAbstractBinding5clearEv @ 847 NONAME + _ZN27QDeclarativeAbstractBinding7destroyEv @ 848 NONAME + _ZN27QDeclarativeAbstractBindingC2Ev @ 849 NONAME + _ZN27QDeclarativeAbstractBindingD0Ev @ 850 NONAME + _ZN27QDeclarativeAbstractBindingD1Ev @ 851 NONAME + _ZN27QDeclarativeAbstractBindingD2Ev @ 852 NONAME + _ZN27QDeclarativeDebugConnection11qt_metacallEN11QMetaObject4CallEiPPv @ 853 NONAME + _ZN27QDeclarativeDebugConnection11qt_metacastEPKc @ 854 NONAME + _ZN27QDeclarativeDebugConnection16staticMetaObjectE @ 855 NONAME DATA 16 + _ZN27QDeclarativeDebugConnection19getStaticMetaObjectEv @ 856 NONAME + _ZN27QDeclarativeDebugConnectionC1EP7QObject @ 857 NONAME + _ZN27QDeclarativeDebugConnectionC2EP7QObject @ 858 NONAME + _ZN27QDeclarativeDomValueBindingC1ERKS_ @ 859 NONAME + _ZN27QDeclarativeDomValueBindingC1Ev @ 860 NONAME + _ZN27QDeclarativeDomValueBindingC2ERKS_ @ 861 NONAME + _ZN27QDeclarativeDomValueBindingC2Ev @ 862 NONAME + _ZN27QDeclarativeDomValueBindingD1Ev @ 863 NONAME + _ZN27QDeclarativeDomValueBindingD2Ev @ 864 NONAME + _ZN27QDeclarativeDomValueBindingaSERKS_ @ 865 NONAME + _ZN27QDeclarativeDomValueLiteralC1ERKS_ @ 866 NONAME + _ZN27QDeclarativeDomValueLiteralC1Ev @ 867 NONAME + _ZN27QDeclarativeDomValueLiteralC2ERKS_ @ 868 NONAME + _ZN27QDeclarativeDomValueLiteralC2Ev @ 869 NONAME + _ZN27QDeclarativeDomValueLiteralD1Ev @ 870 NONAME + _ZN27QDeclarativeDomValueLiteralD2Ev @ 871 NONAME + _ZN27QDeclarativeDomValueLiteralaSERKS_ @ 872 NONAME + _ZN27QDeclarativeExtensionPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 873 NONAME + _ZN27QDeclarativeExtensionPlugin11qt_metacastEPKc @ 874 NONAME + _ZN27QDeclarativeExtensionPlugin16initializeEngineEP18QDeclarativeEnginePKc @ 875 NONAME + _ZN27QDeclarativeExtensionPlugin16staticMetaObjectE @ 876 NONAME DATA 16 + _ZN27QDeclarativeExtensionPlugin19getStaticMetaObjectEv @ 877 NONAME + _ZN27QDeclarativeExtensionPluginC2EP7QObject @ 878 NONAME + _ZN27QDeclarativeExtensionPluginD0Ev @ 879 NONAME + _ZN27QDeclarativeExtensionPluginD1Ev @ 880 NONAME + _ZN27QDeclarativeExtensionPluginD2Ev @ 881 NONAME + _ZN27QDeclarativeGridScaledImage12stringToRuleERK7QString @ 882 NONAME + _ZN27QDeclarativeGridScaledImageC1EP9QIODevice @ 883 NONAME + _ZN27QDeclarativeGridScaledImageC1ERKS_ @ 884 NONAME + _ZN27QDeclarativeGridScaledImageC1Ev @ 885 NONAME + _ZN27QDeclarativeGridScaledImageC2EP9QIODevice @ 886 NONAME + _ZN27QDeclarativeGridScaledImageC2ERKS_ @ 887 NONAME + _ZN27QDeclarativeGridScaledImageC2Ev @ 888 NONAME + _ZN27QDeclarativeGridScaledImageaSERKS_ @ 889 NONAME + _ZN27QDeclarativePropertyPrivate10canConvertEPK11QMetaObjectS2_ @ 890 NONAME + _ZN27QDeclarativePropertyPrivate10setBindingEP7QObjectiiP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 891 NONAME + _ZN27QDeclarativePropertyPrivate10setBindingERK20QDeclarativePropertyP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 892 NONAME + _ZN27QDeclarativePropertyPrivate11initDefaultEP7QObject @ 893 NONAME + _ZN27QDeclarativePropertyPrivate12bindingIndexERK20QDeclarativeProperty @ 894 NONAME + _ZN27QDeclarativePropertyPrivate12initPropertyEP7QObjectRK7QString @ 895 NONAME + _ZN27QDeclarativePropertyPrivate12savePropertyEPK11QMetaObjecti @ 896 NONAME + _ZN27QDeclarativePropertyPrivate13saveValueTypeEPK11QMetaObjectiS2_i @ 897 NONAME + _ZN27QDeclarativePropertyPrivate16findSignalByNameEPK11QMetaObjectRK10QByteArray @ 898 NONAME + _ZN27QDeclarativePropertyPrivate16signalExpressionERK20QDeclarativeProperty @ 899 NONAME + _ZN27QDeclarativePropertyPrivate17readValuePropertyEv @ 900 NONAME + _ZN27QDeclarativePropertyPrivate17writeEnumPropertyERK13QMetaPropertyiP7QObjectRK8QVarianti @ 901 NONAME + _ZN27QDeclarativePropertyPrivate18valueTypeCoreIndexERK20QDeclarativeProperty @ 902 NONAME + _ZN27QDeclarativePropertyPrivate18writeValuePropertyERK8QVariant6QFlagsINS_9WriteFlagEE @ 903 NONAME + _ZN27QDeclarativePropertyPrivate19setSignalExpressionERK20QDeclarativePropertyP22QDeclarativeExpression @ 904 NONAME + _ZN27QDeclarativePropertyPrivate20rawMetaObjectForTypeEP25QDeclarativeEnginePrivatei @ 905 NONAME + _ZN27QDeclarativePropertyPrivate5equalEPK11QMetaObjectS2_ @ 906 NONAME + _ZN27QDeclarativePropertyPrivate5writeEP7QObjectRKN25QDeclarativePropertyCache4DataERK8QVariantP23QDeclarativeContextData6QFlagsINS_9WriteFlagEE @ 907 NONAME + _ZN27QDeclarativePropertyPrivate5writeERK20QDeclarativePropertyRK8QVariant6QFlagsINS_9WriteFlagEE @ 908 NONAME + _ZN27QDeclarativePropertyPrivate7bindingERK20QDeclarativeProperty @ 909 NONAME + _ZN27QDeclarativePropertyPrivate7restoreERK10QByteArrayP7QObjectP23QDeclarativeContextData @ 910 NONAME + _ZN28QDeclarativeCustomParserNodeC1ERKS_ @ 911 NONAME + _ZN28QDeclarativeCustomParserNodeC1Ev @ 912 NONAME + _ZN28QDeclarativeCustomParserNodeC2ERKS_ @ 913 NONAME + _ZN28QDeclarativeCustomParserNodeC2Ev @ 914 NONAME + _ZN28QDeclarativeCustomParserNodeD1Ev @ 915 NONAME + _ZN28QDeclarativeCustomParserNodeD2Ev @ 916 NONAME + _ZN28QDeclarativeCustomParserNodeaSERKS_ @ 917 NONAME + _ZN28QDeclarativeDebugObjectQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 918 NONAME + _ZN28QDeclarativeDebugObjectQuery11qt_metacastEPKc @ 919 NONAME + _ZN28QDeclarativeDebugObjectQuery16staticMetaObjectE @ 920 NONAME DATA 16 + _ZN28QDeclarativeDebugObjectQuery19getStaticMetaObjectEv @ 921 NONAME + _ZN28QDeclarativeDebugObjectQueryC1EP7QObject @ 922 NONAME + _ZN28QDeclarativeDebugObjectQueryC2EP7QObject @ 923 NONAME + _ZN28QDeclarativeDebugObjectQueryD0Ev @ 924 NONAME + _ZN28QDeclarativeDebugObjectQueryD1Ev @ 925 NONAME + _ZN28QDeclarativeDebugObjectQueryD2Ev @ 926 NONAME + _ZN28QDeclarativeStringConverters14dateFromStringERK7QStringPb @ 927 NONAME + _ZN28QDeclarativeStringConverters14timeFromStringERK7QStringPb @ 928 NONAME + _ZN28QDeclarativeStringConverters15colorFromStringERK7QStringPb @ 929 NONAME + _ZN28QDeclarativeStringConverters15rectFFromStringERK7QStringPb @ 930 NONAME + _ZN28QDeclarativeStringConverters15sizeFFromStringERK7QStringPb @ 931 NONAME + _ZN28QDeclarativeStringConverters16pointFFromStringERK7QStringPb @ 932 NONAME + _ZN28QDeclarativeStringConverters17variantFromStringERK7QString @ 933 NONAME + _ZN28QDeclarativeStringConverters17variantFromStringERK7QStringiPb @ 934 NONAME + _ZN28QDeclarativeStringConverters18dateTimeFromStringERK7QStringPb @ 935 NONAME + _ZN28QDeclarativeStringConverters18vector3DFromStringERK7QStringPb @ 936 NONAME + _ZN28QDeclarativeValueTypeFactory11isValueTypeEi @ 937 NONAME + _ZN28QDeclarativeValueTypeFactory18registerValueTypesEv @ 938 NONAME + _ZN28QDeclarativeValueTypeFactory9valueTypeEi @ 939 NONAME + _ZN28QDeclarativeValueTypeFactoryC1Ev @ 940 NONAME + _ZN28QDeclarativeValueTypeFactoryC2Ev @ 941 NONAME + _ZN28QDeclarativeValueTypeFactoryD1Ev @ 942 NONAME + _ZN28QDeclarativeValueTypeFactoryD2Ev @ 943 NONAME + _ZN29QDeclarativeDebugEnginesQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 944 NONAME + _ZN29QDeclarativeDebugEnginesQuery11qt_metacastEPKc @ 945 NONAME + _ZN29QDeclarativeDebugEnginesQuery16staticMetaObjectE @ 946 NONAME DATA 16 + _ZN29QDeclarativeDebugEnginesQuery19getStaticMetaObjectEv @ 947 NONAME + _ZN29QDeclarativeDebugEnginesQueryC1EP7QObject @ 948 NONAME + _ZN29QDeclarativeDebugEnginesQueryC2EP7QObject @ 949 NONAME + _ZN29QDeclarativeDebugEnginesQueryD0Ev @ 950 NONAME + _ZN29QDeclarativeDebugEnginesQueryD1Ev @ 951 NONAME + _ZN29QDeclarativeDebugEnginesQueryD2Ev @ 952 NONAME + _ZN30QDeclarativeDebugFileReference13setLineNumberEi @ 953 NONAME + _ZN30QDeclarativeDebugFileReference15setColumnNumberEi @ 954 NONAME + _ZN30QDeclarativeDebugFileReference6setUrlERK4QUrl @ 955 NONAME + _ZN30QDeclarativeDebugFileReferenceC1ERKS_ @ 956 NONAME + _ZN30QDeclarativeDebugFileReferenceC1Ev @ 957 NONAME + _ZN30QDeclarativeDebugFileReferenceC2ERKS_ @ 958 NONAME + _ZN30QDeclarativeDebugFileReferenceC2Ev @ 959 NONAME + _ZN30QDeclarativeDebugFileReferenceaSERKS_ @ 960 NONAME + _ZN30QDeclarativeDebugPropertyWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 961 NONAME + _ZN30QDeclarativeDebugPropertyWatch11qt_metacastEPKc @ 962 NONAME + _ZN30QDeclarativeDebugPropertyWatch16staticMetaObjectE @ 963 NONAME DATA 16 + _ZN30QDeclarativeDebugPropertyWatch19getStaticMetaObjectEv @ 964 NONAME + _ZN30QDeclarativeDebugPropertyWatchC1EP7QObject @ 965 NONAME + _ZN30QDeclarativeDebugPropertyWatchC2EP7QObject @ 966 NONAME + _ZN30QDeclarativeDomDynamicPropertyC1ERKS_ @ 967 NONAME + _ZN30QDeclarativeDomDynamicPropertyC1Ev @ 968 NONAME + _ZN30QDeclarativeDomDynamicPropertyC2ERKS_ @ 969 NONAME + _ZN30QDeclarativeDomDynamicPropertyC2Ev @ 970 NONAME + _ZN30QDeclarativeDomDynamicPropertyD1Ev @ 971 NONAME + _ZN30QDeclarativeDomDynamicPropertyD2Ev @ 972 NONAME + _ZN30QDeclarativeDomDynamicPropertyaSERKS_ @ 973 NONAME + _ZN30QDeclarativeOpenMetaObjectType14createPropertyERK10QByteArray @ 974 NONAME + _ZN30QDeclarativeOpenMetaObjectType15propertyCreatedEiR20QMetaPropertyBuilder @ 975 NONAME + _ZN30QDeclarativeOpenMetaObjectTypeC1EPK11QMetaObjectP18QDeclarativeEngine @ 976 NONAME + _ZN30QDeclarativeOpenMetaObjectTypeC2EPK11QMetaObjectP18QDeclarativeEngine @ 977 NONAME + _ZN30QDeclarativeOpenMetaObjectTypeD0Ev @ 978 NONAME + _ZN30QDeclarativeOpenMetaObjectTypeD1Ev @ 979 NONAME + _ZN30QDeclarativeOpenMetaObjectTypeD2Ev @ 980 NONAME + _ZN31QDeclarativeDomValueValueSourceC1ERKS_ @ 981 NONAME + _ZN31QDeclarativeDomValueValueSourceC1Ev @ 982 NONAME + _ZN31QDeclarativeDomValueValueSourceC2ERKS_ @ 983 NONAME + _ZN31QDeclarativeDomValueValueSourceC2Ev @ 984 NONAME + _ZN31QDeclarativeDomValueValueSourceD1Ev @ 985 NONAME + _ZN31QDeclarativeDomValueValueSourceD2Ev @ 986 NONAME + _ZN31QDeclarativeDomValueValueSourceaSERKS_ @ 987 NONAME + _ZN31QDeclarativePropertyValueSourceC2Ev @ 988 NONAME + _ZN31QDeclarativePropertyValueSourceD0Ev @ 989 NONAME + _ZN31QDeclarativePropertyValueSourceD1Ev @ 990 NONAME + _ZN31QDeclarativePropertyValueSourceD2Ev @ 991 NONAME + _ZN32QDeclarativeCustomParserPropertyC1ERKS_ @ 992 NONAME + _ZN32QDeclarativeCustomParserPropertyC1Ev @ 993 NONAME + _ZN32QDeclarativeCustomParserPropertyC2ERKS_ @ 994 NONAME + _ZN32QDeclarativeCustomParserPropertyC2Ev @ 995 NONAME + _ZN32QDeclarativeCustomParserPropertyD1Ev @ 996 NONAME + _ZN32QDeclarativeCustomParserPropertyD2Ev @ 997 NONAME + _ZN32QDeclarativeCustomParserPropertyaSERKS_ @ 998 NONAME + _ZN32QDeclarativeDebugEngineReferenceC1ERKS_ @ 999 NONAME + _ZN32QDeclarativeDebugEngineReferenceC1Ei @ 1000 NONAME + _ZN32QDeclarativeDebugEngineReferenceC1Ev @ 1001 NONAME + _ZN32QDeclarativeDebugEngineReferenceC2ERKS_ @ 1002 NONAME + _ZN32QDeclarativeDebugEngineReferenceC2Ei @ 1003 NONAME + _ZN32QDeclarativeDebugEngineReferenceC2Ev @ 1004 NONAME + _ZN32QDeclarativeDebugEngineReferenceaSERKS_ @ 1005 NONAME + _ZN32QDeclarativeDebugExpressionQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1006 NONAME + _ZN32QDeclarativeDebugExpressionQuery11qt_metacastEPKc @ 1007 NONAME + _ZN32QDeclarativeDebugExpressionQuery16staticMetaObjectE @ 1008 NONAME DATA 16 + _ZN32QDeclarativeDebugExpressionQuery19getStaticMetaObjectEv @ 1009 NONAME + _ZN32QDeclarativeDebugExpressionQueryC1EP7QObject @ 1010 NONAME + _ZN32QDeclarativeDebugExpressionQueryC2EP7QObject @ 1011 NONAME + _ZN32QDeclarativeDebugExpressionQueryD0Ev @ 1012 NONAME + _ZN32QDeclarativeDebugExpressionQueryD1Ev @ 1013 NONAME + _ZN32QDeclarativeDebugExpressionQueryD2Ev @ 1014 NONAME + _ZN32QDeclarativeDebugObjectReferenceC1ERKS_ @ 1015 NONAME + _ZN32QDeclarativeDebugObjectReferenceC1Ei @ 1016 NONAME + _ZN32QDeclarativeDebugObjectReferenceC1Ev @ 1017 NONAME + _ZN32QDeclarativeDebugObjectReferenceC2ERKS_ @ 1018 NONAME + _ZN32QDeclarativeDebugObjectReferenceC2Ei @ 1019 NONAME + _ZN32QDeclarativeDebugObjectReferenceC2Ev @ 1020 NONAME + _ZN32QDeclarativeDebugObjectReferenceaSERKS_ @ 1021 NONAME + _ZN33QDeclarativeDebugContextReferenceC1ERKS_ @ 1022 NONAME + _ZN33QDeclarativeDebugContextReferenceC1Ev @ 1023 NONAME + _ZN33QDeclarativeDebugContextReferenceC2ERKS_ @ 1024 NONAME + _ZN33QDeclarativeDebugContextReferenceC2Ev @ 1025 NONAME + _ZN33QDeclarativeDebugContextReferenceaSERKS_ @ 1026 NONAME + _ZN33QDeclarativeDebugRootContextQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1027 NONAME + _ZN33QDeclarativeDebugRootContextQuery11qt_metacastEPKc @ 1028 NONAME + _ZN33QDeclarativeDebugRootContextQuery16staticMetaObjectE @ 1029 NONAME DATA 16 + _ZN33QDeclarativeDebugRootContextQuery19getStaticMetaObjectEv @ 1030 NONAME + _ZN33QDeclarativeDebugRootContextQueryC1EP7QObject @ 1031 NONAME + _ZN33QDeclarativeDebugRootContextQueryC2EP7QObject @ 1032 NONAME + _ZN33QDeclarativeDebugRootContextQueryD0Ev @ 1033 NONAME + _ZN33QDeclarativeDebugRootContextQueryD1Ev @ 1034 NONAME + _ZN33QDeclarativeDebugRootContextQueryD2Ev @ 1035 NONAME + _ZN34QDeclarativeDebugPropertyReferenceC1ERKS_ @ 1036 NONAME + _ZN34QDeclarativeDebugPropertyReferenceC1Ev @ 1037 NONAME + _ZN34QDeclarativeDebugPropertyReferenceC2ERKS_ @ 1038 NONAME + _ZN34QDeclarativeDebugPropertyReferenceC2Ev @ 1039 NONAME + _ZN34QDeclarativeDebugPropertyReferenceaSERKS_ @ 1040 NONAME + _ZN36QDeclarativeDomValueValueInterceptorC1ERKS_ @ 1041 NONAME + _ZN36QDeclarativeDomValueValueInterceptorC1Ev @ 1042 NONAME + _ZN36QDeclarativeDomValueValueInterceptorC2ERKS_ @ 1043 NONAME + _ZN36QDeclarativeDomValueValueInterceptorC2Ev @ 1044 NONAME + _ZN36QDeclarativeDomValueValueInterceptorD1Ev @ 1045 NONAME + _ZN36QDeclarativeDomValueValueInterceptorD2Ev @ 1046 NONAME + _ZN36QDeclarativeDomValueValueInterceptoraSERKS_ @ 1047 NONAME + _ZN36QDeclarativePropertyValueInterceptorC2Ev @ 1048 NONAME + _ZN36QDeclarativePropertyValueInterceptorD0Ev @ 1049 NONAME + _ZN36QDeclarativePropertyValueInterceptorD1Ev @ 1050 NONAME + _ZN36QDeclarativePropertyValueInterceptorD2Ev @ 1051 NONAME + _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 1052 NONAME + _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacastEPKc @ 1053 NONAME + _ZN38QDeclarativeDebugObjectExpressionWatch16staticMetaObjectE @ 1054 NONAME DATA 16 + _ZN38QDeclarativeDebugObjectExpressionWatch19getStaticMetaObjectEv @ 1055 NONAME + _ZN38QDeclarativeDebugObjectExpressionWatchC1EP7QObject @ 1056 NONAME + _ZN38QDeclarativeDebugObjectExpressionWatchC2EP7QObject @ 1057 NONAME + _ZN39QDeclarativeNetworkAccessManagerFactoryD0Ev @ 1058 NONAME + _ZN39QDeclarativeNetworkAccessManagerFactoryD1Ev @ 1059 NONAME + _ZN39QDeclarativeNetworkAccessManagerFactoryD2Ev @ 1060 NONAME + _ZN7QPacket5clearEv @ 1061 NONAME + _ZN7QPacketC1ERK10QByteArray @ 1062 NONAME + _ZN7QPacketC1ERKS_ @ 1063 NONAME + _ZN7QPacketC1Ev @ 1064 NONAME + _ZN7QPacketC2ERK10QByteArray @ 1065 NONAME + _ZN7QPacketC2ERKS_ @ 1066 NONAME + _ZN7QPacketC2Ev @ 1067 NONAME + _ZN7QPacketD0Ev @ 1068 NONAME + _ZN7QPacketD1Ev @ 1069 NONAME + _ZN7QPacketD2Ev @ 1070 NONAME + _ZNK15QDeclarativePen10metaObjectEv @ 1071 NONAME + _ZNK15QPacketProtocol10metaObjectEv @ 1072 NONAME + _ZNK15QPacketProtocol16packetsAvailableEv @ 1073 NONAME + _ZNK15QPacketProtocol17maximumPacketSizeEv @ 1074 NONAME + _ZNK16QDeclarativeItem10metaObjectEv @ 1075 NONAME + _ZNK16QDeclarativeItem10parentItemEv @ 1076 NONAME + _ZNK16QDeclarativeItem10wantsFocusEv @ 1077 NONAME + _ZNK16QDeclarativeItem10widthValidEv @ 1078 NONAME + _ZNK16QDeclarativeItem11heightValidEv @ 1079 NONAME + _ZNK16QDeclarativeItem11mapFromItemERK12QScriptValueff @ 1080 NONAME + _ZNK16QDeclarativeItem12boundingRectEv @ 1081 NONAME + _ZNK16QDeclarativeItem13implicitWidthEv @ 1082 NONAME + _ZNK16QDeclarativeItem13keepMouseGrabEv @ 1083 NONAME + _ZNK16QDeclarativeItem14baselineOffsetEv @ 1084 NONAME + _ZNK16QDeclarativeItem14implicitHeightEv @ 1085 NONAME + _ZNK16QDeclarativeItem15transformOriginEv @ 1086 NONAME + _ZNK16QDeclarativeItem16inputMethodQueryEN2Qt16InputMethodQueryE @ 1087 NONAME + _ZNK16QDeclarativeItem19isComponentCompleteEv @ 1088 NONAME + _ZNK16QDeclarativeItem4clipEv @ 1089 NONAME + _ZNK16QDeclarativeItem5widthEv @ 1090 NONAME + _ZNK16QDeclarativeItem6heightEv @ 1091 NONAME + _ZNK16QDeclarativeItem6smoothEv @ 1092 NONAME + _ZNK16QDeclarativeItem7childAtEff @ 1093 NONAME + _ZNK16QDeclarativeItem8hasFocusEv @ 1094 NONAME + _ZNK16QDeclarativeItem9mapToItemERK12QScriptValueff @ 1095 NONAME + _ZNK16QDeclarativeText10metaObjectEv @ 1096 NONAME + _ZNK16QDeclarativeText10styleColorEv @ 1097 NONAME + _ZNK16QDeclarativeText10textFormatEv @ 1098 NONAME + _ZNK16QDeclarativeText12boundingRectEv @ 1099 NONAME + _ZNK16QDeclarativeText12paintedWidthEv @ 1100 NONAME + _ZNK16QDeclarativeText13paintedHeightEv @ 1101 NONAME + _ZNK16QDeclarativeText16resourcesLoadingEv @ 1102 NONAME + _ZNK16QDeclarativeText4fontEv @ 1103 NONAME + _ZNK16QDeclarativeText4textEv @ 1104 NONAME + _ZNK16QDeclarativeText5colorEv @ 1105 NONAME + _ZNK16QDeclarativeText5styleEv @ 1106 NONAME + _ZNK16QDeclarativeText6hAlignEv @ 1107 NONAME + _ZNK16QDeclarativeText6vAlignEv @ 1108 NONAME + _ZNK16QDeclarativeText8wrapModeEv @ 1109 NONAME + _ZNK16QDeclarativeText9elideModeEv @ 1110 NONAME + _ZNK16QDeclarativeType10createSizeEv @ 1111 NONAME + _ZNK16QDeclarativeType10metaObjectEv @ 1112 NONAME + _ZNK16QDeclarativeType11isCreatableEv @ 1113 NONAME + _ZNK16QDeclarativeType11isInterfaceEv @ 1114 NONAME + _ZNK16QDeclarativeType11qListTypeIdEv @ 1115 NONAME + _ZNK16QDeclarativeType11qmlTypeNameEv @ 1116 NONAME + _ZNK16QDeclarativeType12customParserEv @ 1117 NONAME + _ZNK16QDeclarativeType12interfaceIIdEv @ 1118 NONAME + _ZNK16QDeclarativeType12majorVersionEv @ 1119 NONAME + _ZNK16QDeclarativeType12minorVersionEv @ 1120 NONAME + _ZNK16QDeclarativeType14baseMetaObjectEv @ 1121 NONAME + _ZNK16QDeclarativeType14createFunctionEv @ 1122 NONAME + _ZNK16QDeclarativeType14isExtendedTypeEv @ 1123 NONAME + _ZNK16QDeclarativeType16noCreationReasonEv @ 1124 NONAME + _ZNK16QDeclarativeType16parserStatusCastEv @ 1125 NONAME + _ZNK16QDeclarativeType18availableInVersionEii @ 1126 NONAME + _ZNK16QDeclarativeType22attachedPropertiesTypeEv @ 1127 NONAME + _ZNK16QDeclarativeType23propertyValueSourceCastEv @ 1128 NONAME + _ZNK16QDeclarativeType26attachedPropertiesFunctionEv @ 1129 NONAME + _ZNK16QDeclarativeType28propertyValueInterceptorCastEv @ 1130 NONAME + _ZNK16QDeclarativeType5indexEv @ 1131 NONAME + _ZNK16QDeclarativeType6createEPP7QObjectPPvj @ 1132 NONAME + _ZNK16QDeclarativeType6createEv @ 1133 NONAME + _ZNK16QDeclarativeType6typeIdEv @ 1134 NONAME + _ZNK16QDeclarativeType8typeNameEv @ 1135 NONAME + _ZNK16QDeclarativeView10metaObjectEv @ 1136 NONAME + _ZNK16QDeclarativeView10resizeModeEv @ 1137 NONAME + _ZNK16QDeclarativeView10rootObjectEv @ 1138 NONAME + _ZNK16QDeclarativeView11initialSizeEv @ 1139 NONAME + _ZNK16QDeclarativeView6errorsEv @ 1140 NONAME + _ZNK16QDeclarativeView6sourceEv @ 1141 NONAME + _ZNK16QDeclarativeView6statusEv @ 1142 NONAME + _ZNK16QDeclarativeView8sizeHintEv @ 1143 NONAME + _ZNK16QMetaEnumBuilder3keyEi @ 1144 NONAME + _ZNK16QMetaEnumBuilder4nameEv @ 1145 NONAME + _ZNK16QMetaEnumBuilder5valueEi @ 1146 NONAME + _ZNK16QMetaEnumBuilder6d_funcEv @ 1147 NONAME + _ZNK16QMetaEnumBuilder6isFlagEv @ 1148 NONAME + _ZNK16QMetaEnumBuilder8keyCountEv @ 1149 NONAME + _ZNK17QDeclarativeError11descriptionEv @ 1150 NONAME + _ZNK17QDeclarativeError3urlEv @ 1151 NONAME + _ZNK17QDeclarativeError4lineEv @ 1152 NONAME + _ZNK17QDeclarativeError6columnEv @ 1153 NONAME + _ZNK17QDeclarativeError7isValidEv @ 1154 NONAME + _ZNK17QDeclarativeError8toStringEv @ 1155 NONAME + _ZNK17QDeclarativeState10metaObjectEv @ 1156 NONAME + _ZNK17QDeclarativeState10stateGroupEv @ 1157 NONAME + _ZNK17QDeclarativeState11isWhenKnownEv @ 1158 NONAME + _ZNK17QDeclarativeState11operationAtEi @ 1159 NONAME + _ZNK17QDeclarativeState14operationCountEv @ 1160 NONAME + _ZNK17QDeclarativeState4nameEv @ 1161 NONAME + _ZNK17QDeclarativeState4whenEv @ 1162 NONAME + _ZNK17QDeclarativeState7extendsEv @ 1163 NONAME + _ZNK17QDeclarativeState7isNamedEv @ 1164 NONAME + _ZNK18QDeclarativeEngine10metaObjectEv @ 1165 NONAME + _ZNK18QDeclarativeEngine13imageProviderERK7QString @ 1166 NONAME + _ZNK18QDeclarativeEngine14importPathListEv @ 1167 NONAME + _ZNK18QDeclarativeEngine14pluginPathListEv @ 1168 NONAME + _ZNK18QDeclarativeEngine18offlineStoragePathEv @ 1169 NONAME + _ZNK18QDeclarativeEngine20networkAccessManagerEv @ 1170 NONAME + _ZNK18QDeclarativeEngine27networkAccessManagerFactoryEv @ 1171 NONAME + _ZNK18QDeclarativeEngine29outputWarningsToStandardErrorEv @ 1172 NONAME + _ZNK18QDeclarativeEngine7baseUrlEv @ 1173 NONAME + _ZNK18QDeclarativeParser7Variant12asStringListEv @ 1174 NONAME + _ZNK18QDeclarativeParser7Variant12isStringListEv @ 1175 NONAME + _ZNK18QDeclarativeParser7Variant4typeEv @ 1176 NONAME + _ZNK18QDeclarativeParser7Variant5asASTEv @ 1177 NONAME + _ZNK18QDeclarativeParser7Variant8asNumberEv @ 1178 NONAME + _ZNK18QDeclarativeParser7Variant8asScriptEv @ 1179 NONAME + _ZNK18QDeclarativeParser7Variant8asStringEv @ 1180 NONAME + _ZNK18QDeclarativeParser7Variant9asBooleanEv @ 1181 NONAME + _ZNK18QMetaMethodBuilder10attributesEv @ 1182 NONAME + _ZNK18QMetaMethodBuilder10methodTypeEv @ 1183 NONAME + _ZNK18QMetaMethodBuilder10returnTypeEv @ 1184 NONAME + _ZNK18QMetaMethodBuilder14parameterNamesEv @ 1185 NONAME + _ZNK18QMetaMethodBuilder3tagEv @ 1186 NONAME + _ZNK18QMetaMethodBuilder5indexEv @ 1187 NONAME + _ZNK18QMetaMethodBuilder6accessEv @ 1188 NONAME + _ZNK18QMetaMethodBuilder6d_funcEv @ 1189 NONAME + _ZNK18QMetaMethodBuilder9signatureEv @ 1190 NONAME + _ZNK18QMetaObjectBuilder10enumeratorEi @ 1191 NONAME + _ZNK18QMetaObjectBuilder10superClassEv @ 1192 NONAME + _ZNK18QMetaObjectBuilder11constructorEi @ 1193 NONAME + _ZNK18QMetaObjectBuilder11methodCountEv @ 1194 NONAME + _ZNK18QMetaObjectBuilder12toMetaObjectEv @ 1195 NONAME + _ZNK18QMetaObjectBuilder13classInfoNameEi @ 1196 NONAME + _ZNK18QMetaObjectBuilder13propertyCountEv @ 1197 NONAME + _ZNK18QMetaObjectBuilder14classInfoCountEv @ 1198 NONAME + _ZNK18QMetaObjectBuilder14classInfoValueEi @ 1199 NONAME + _ZNK18QMetaObjectBuilder15enumeratorCountEv @ 1200 NONAME + _ZNK18QMetaObjectBuilder16constructorCountEv @ 1201 NONAME + _ZNK18QMetaObjectBuilder17relatedMetaObjectEi @ 1202 NONAME + _ZNK18QMetaObjectBuilder17toRelocatableDataEPb @ 1203 NONAME + _ZNK18QMetaObjectBuilder22relatedMetaObjectCountEv @ 1204 NONAME + _ZNK18QMetaObjectBuilder22staticMetacallFunctionEv @ 1205 NONAME + _ZNK18QMetaObjectBuilder5flagsEv @ 1206 NONAME + _ZNK18QMetaObjectBuilder6methodEi @ 1207 NONAME + _ZNK18QMetaObjectBuilder8propertyEi @ 1208 NONAME + _ZNK18QMetaObjectBuilder9classNameEv @ 1209 NONAME + _ZNK18QMetaObjectBuilder9serializeER11QDataStream @ 1210 NONAME + _ZNK19QDeclarativeAnchors10leftMarginEv @ 1211 NONAME + _ZNK19QDeclarativeAnchors10metaObjectEv @ 1212 NONAME + _ZNK19QDeclarativeAnchors11rightMarginEv @ 1213 NONAME + _ZNK19QDeclarativeAnchors11usedAnchorsEv @ 1214 NONAME + _ZNK19QDeclarativeAnchors12bottomMarginEv @ 1215 NONAME + _ZNK19QDeclarativeAnchors14baselineOffsetEv @ 1216 NONAME + _ZNK19QDeclarativeAnchors14verticalCenterEv @ 1217 NONAME + _ZNK19QDeclarativeAnchors16horizontalCenterEv @ 1218 NONAME + _ZNK19QDeclarativeAnchors20verticalCenterOffsetEv @ 1219 NONAME + _ZNK19QDeclarativeAnchors22horizontalCenterOffsetEv @ 1220 NONAME + _ZNK19QDeclarativeAnchors3topEv @ 1221 NONAME + _ZNK19QDeclarativeAnchors4fillEv @ 1222 NONAME + _ZNK19QDeclarativeAnchors4leftEv @ 1223 NONAME + _ZNK19QDeclarativeAnchors5rightEv @ 1224 NONAME + _ZNK19QDeclarativeAnchors6bottomEv @ 1225 NONAME + _ZNK19QDeclarativeAnchors7marginsEv @ 1226 NONAME + _ZNK19QDeclarativeAnchors8baselineEv @ 1227 NONAME + _ZNK19QDeclarativeAnchors8centerInEv @ 1228 NONAME + _ZNK19QDeclarativeAnchors9topMarginEv @ 1229 NONAME + _ZNK19QDeclarativeBinding10expressionEv @ 1230 NONAME + _ZNK19QDeclarativeBinding10metaObjectEv @ 1231 NONAME + _ZNK19QDeclarativeBinding7enabledEv @ 1232 NONAME + _ZNK19QDeclarativeBinding8propertyEv @ 1233 NONAME + _ZNK19QDeclarativeContext10metaObjectEv @ 1234 NONAME + _ZNK19QDeclarativeContext13contextObjectEv @ 1235 NONAME + _ZNK19QDeclarativeContext13parentContextEv @ 1236 NONAME + _ZNK19QDeclarativeContext15contextPropertyERK7QString @ 1237 NONAME + _ZNK19QDeclarativeContext6engineEv @ 1238 NONAME + _ZNK19QDeclarativeContext7baseUrlEv @ 1239 NONAME + _ZNK19QDeclarativeContext7isValidEv @ 1240 NONAME + _ZNK19QDeclarativeDomList14commaPositionsEv @ 1241 NONAME + _ZNK19QDeclarativeDomList6lengthEv @ 1242 NONAME + _ZNK19QDeclarativeDomList6valuesEv @ 1243 NONAME + _ZNK19QDeclarativeDomList8positionEv @ 1244 NONAME + _ZNK19QListModelInterface10metaObjectEv @ 1245 NONAME + _ZNK20QDeclarativeBehavior10metaObjectEv @ 1246 NONAME + _ZNK20QDeclarativeBehavior7enabledEv @ 1247 NONAME + _ZNK20QDeclarativeDomValue13isValueSourceEv @ 1248 NONAME + _ZNK20QDeclarativeDomValue13toValueSourceEv @ 1249 NONAME + _ZNK20QDeclarativeDomValue18isValueInterceptorEv @ 1250 NONAME + _ZNK20QDeclarativeDomValue18toValueInterceptorEv @ 1251 NONAME + _ZNK20QDeclarativeDomValue4typeEv @ 1252 NONAME + _ZNK20QDeclarativeDomValue6isListEv @ 1253 NONAME + _ZNK20QDeclarativeDomValue6lengthEv @ 1254 NONAME + _ZNK20QDeclarativeDomValue6toListEv @ 1255 NONAME + _ZNK20QDeclarativeDomValue8isObjectEv @ 1256 NONAME + _ZNK20QDeclarativeDomValue8positionEv @ 1257 NONAME + _ZNK20QDeclarativeDomValue8toObjectEv @ 1258 NONAME + _ZNK20QDeclarativeDomValue9isBindingEv @ 1259 NONAME + _ZNK20QDeclarativeDomValue9isInvalidEv @ 1260 NONAME + _ZNK20QDeclarativeDomValue9isLiteralEv @ 1261 NONAME + _ZNK20QDeclarativeDomValue9toBindingEv @ 1262 NONAME + _ZNK20QDeclarativeDomValue9toLiteralEv @ 1263 NONAME + _ZNK20QDeclarativeProperty10isPropertyEv @ 1264 NONAME + _ZNK20QDeclarativeProperty10isWritableEv @ 1265 NONAME + _ZNK20QDeclarativeProperty12isDesignableEv @ 1266 NONAME + _ZNK20QDeclarativeProperty12isResettableEv @ 1267 NONAME + _ZNK20QDeclarativeProperty12propertyTypeEv @ 1268 NONAME + _ZNK20QDeclarativeProperty15hasNotifySignalEv @ 1269 NONAME + _ZNK20QDeclarativeProperty16isSignalPropertyEv @ 1270 NONAME + _ZNK20QDeclarativeProperty16propertyTypeNameEv @ 1271 NONAME + _ZNK20QDeclarativeProperty17needsNotifySignalEv @ 1272 NONAME + _ZNK20QDeclarativeProperty19connectNotifySignalEP7QObjectPKc @ 1273 NONAME + _ZNK20QDeclarativeProperty19connectNotifySignalEP7QObjecti @ 1274 NONAME + _ZNK20QDeclarativeProperty20propertyTypeCategoryEv @ 1275 NONAME + _ZNK20QDeclarativeProperty4nameEv @ 1276 NONAME + _ZNK20QDeclarativeProperty4readEv @ 1277 NONAME + _ZNK20QDeclarativeProperty4typeEv @ 1278 NONAME + _ZNK20QDeclarativeProperty5indexEv @ 1279 NONAME + _ZNK20QDeclarativeProperty5resetEv @ 1280 NONAME + _ZNK20QDeclarativeProperty5writeERK8QVariant @ 1281 NONAME + _ZNK20QDeclarativeProperty6methodEv @ 1282 NONAME + _ZNK20QDeclarativeProperty6objectEv @ 1283 NONAME + _ZNK20QDeclarativeProperty7isValidEv @ 1284 NONAME + _ZNK20QDeclarativeProperty8propertyEv @ 1285 NONAME + _ZNK20QDeclarativePropertyeqERKS_ @ 1286 NONAME + _ZNK20QMetaPropertyBuilder10isEditableEv @ 1287 NONAME + _ZNK20QMetaPropertyBuilder10isReadableEv @ 1288 NONAME + _ZNK20QMetaPropertyBuilder10isWritableEv @ 1289 NONAME + _ZNK20QMetaPropertyBuilder12hasStdCppSetEv @ 1290 NONAME + _ZNK20QMetaPropertyBuilder12isDesignableEv @ 1291 NONAME + _ZNK20QMetaPropertyBuilder12isEnumOrFlagEv @ 1292 NONAME + _ZNK20QMetaPropertyBuilder12isResettableEv @ 1293 NONAME + _ZNK20QMetaPropertyBuilder12isScriptableEv @ 1294 NONAME + _ZNK20QMetaPropertyBuilder12notifySignalEv @ 1295 NONAME + _ZNK20QMetaPropertyBuilder15hasNotifySignalEv @ 1296 NONAME + _ZNK20QMetaPropertyBuilder4nameEv @ 1297 NONAME + _ZNK20QMetaPropertyBuilder4typeEv @ 1298 NONAME + _ZNK20QMetaPropertyBuilder6d_funcEv @ 1299 NONAME + _ZNK20QMetaPropertyBuilder6isUserEv @ 1300 NONAME + _ZNK20QMetaPropertyBuilder8isStoredEv @ 1301 NONAME + _ZNK20QMetaPropertyBuilder9isDynamicEv @ 1302 NONAME + _ZNK21QDeclarativeComponent10metaObjectEv @ 1303 NONAME + _ZNK21QDeclarativeComponent11errorStringEv @ 1304 NONAME + _ZNK21QDeclarativeComponent15creationContextEv @ 1305 NONAME + _ZNK21QDeclarativeComponent3urlEv @ 1306 NONAME + _ZNK21QDeclarativeComponent6errorsEv @ 1307 NONAME + _ZNK21QDeclarativeComponent6isNullEv @ 1308 NONAME + _ZNK21QDeclarativeComponent6statusEv @ 1309 NONAME + _ZNK21QDeclarativeComponent7isErrorEv @ 1310 NONAME + _ZNK21QDeclarativeComponent7isReadyEv @ 1311 NONAME + _ZNK21QDeclarativeComponent8progressEv @ 1312 NONAME + _ZNK21QDeclarativeComponent9isLoadingEv @ 1313 NONAME + _ZNK21QDeclarativeDomImport3uriEv @ 1314 NONAME + _ZNK21QDeclarativeDomImport4typeEv @ 1315 NONAME + _ZNK21QDeclarativeDomImport7versionEv @ 1316 NONAME + _ZNK21QDeclarativeDomImport9qualifierEv @ 1317 NONAME + _ZNK21QDeclarativeDomObject10objectTypeEv @ 1318 NONAME + _ZNK21QDeclarativeDomObject10propertiesEv @ 1319 NONAME + _ZNK21QDeclarativeDomObject11isComponentEv @ 1320 NONAME + _ZNK21QDeclarativeDomObject11toComponentEv @ 1321 NONAME + _ZNK21QDeclarativeDomObject12isCustomTypeEv @ 1322 NONAME + _ZNK21QDeclarativeDomObject14customTypeDataEv @ 1323 NONAME + _ZNK21QDeclarativeDomObject15dynamicPropertyERK10QByteArray @ 1324 NONAME + _ZNK21QDeclarativeDomObject15objectClassNameEv @ 1325 NONAME + _ZNK21QDeclarativeDomObject17dynamicPropertiesEv @ 1326 NONAME + _ZNK21QDeclarativeDomObject22objectTypeMajorVersionEv @ 1327 NONAME + _ZNK21QDeclarativeDomObject22objectTypeMinorVersionEv @ 1328 NONAME + _ZNK21QDeclarativeDomObject3urlEv @ 1329 NONAME + _ZNK21QDeclarativeDomObject6lengthEv @ 1330 NONAME + _ZNK21QDeclarativeDomObject7isValidEv @ 1331 NONAME + _ZNK21QDeclarativeDomObject8objectIdEv @ 1332 NONAME + _ZNK21QDeclarativeDomObject8positionEv @ 1333 NONAME + _ZNK21QDeclarativeDomObject8propertyERK10QByteArray @ 1334 NONAME + _ZNK21QDeclarativeListModel10metaObjectEv @ 1335 NONAME + _ZNK21QDeclarativeListModel3getEi @ 1336 NONAME + _ZNK21QDeclarativeListModel4dataEiRK5QListIiE @ 1337 NONAME + _ZNK21QDeclarativeListModel4dataEii @ 1338 NONAME + _ZNK21QDeclarativeListModel5countEv @ 1339 NONAME + _ZNK21QDeclarativeListModel5rolesEv @ 1340 NONAME + _ZNK21QDeclarativeListModel8toStringEi @ 1341 NONAME + _ZNK21QDeclarativeRectangle10metaObjectEv @ 1342 NONAME + _ZNK21QDeclarativeRectangle12boundingRectEv @ 1343 NONAME + _ZNK21QDeclarativeRectangle5colorEv @ 1344 NONAME + _ZNK21QDeclarativeRectangle6radiusEv @ 1345 NONAME + _ZNK21QDeclarativeRectangle8gradientEv @ 1346 NONAME + _ZNK21QDeclarativeScaleGrid10metaObjectEv @ 1347 NONAME + _ZNK21QDeclarativeScaleGrid6isNullEv @ 1348 NONAME + _ZNK21QDeclarativeValueType10metaObjectEv @ 1349 NONAME + _ZNK22QDeclarativeDebugQuery10metaObjectEv @ 1350 NONAME + _ZNK22QDeclarativeDebugQuery5stateEv @ 1351 NONAME + _ZNK22QDeclarativeDebugQuery9isWaitingEv @ 1352 NONAME + _ZNK22QDeclarativeDebugWatch10metaObjectEv @ 1353 NONAME + _ZNK22QDeclarativeDebugWatch13objectDebugIdEv @ 1354 NONAME + _ZNK22QDeclarativeDebugWatch5stateEv @ 1355 NONAME + _ZNK22QDeclarativeDebugWatch7queryIdEv @ 1356 NONAME + _ZNK22QDeclarativeExpression10expressionEv @ 1357 NONAME + _ZNK22QDeclarativeExpression10lineNumberEv @ 1358 NONAME + _ZNK22QDeclarativeExpression10metaObjectEv @ 1359 NONAME + _ZNK22QDeclarativeExpression10sourceFileEv @ 1360 NONAME + _ZNK22QDeclarativeExpression11scopeObjectEv @ 1361 NONAME + _ZNK22QDeclarativeExpression20notifyOnValueChangedEv @ 1362 NONAME + _ZNK22QDeclarativeExpression5errorEv @ 1363 NONAME + _ZNK22QDeclarativeExpression6engineEv @ 1364 NONAME + _ZNK22QDeclarativeExpression7contextEv @ 1365 NONAME + _ZNK22QDeclarativeExpression8hasErrorEv @ 1366 NONAME + _ZNK22QDeclarativeStateGroup10metaObjectEv @ 1367 NONAME + _ZNK22QDeclarativeStateGroup5stateEv @ 1368 NONAME + _ZNK22QDeclarativeStateGroup6statesEv @ 1369 NONAME + _ZNK22QDeclarativeStateGroup9findStateERK7QString @ 1370 NONAME + _ZNK22QDeclarativeTransition10metaObjectEv @ 1371 NONAME + _ZNK22QDeclarativeTransition10reversibleEv @ 1372 NONAME + _ZNK22QDeclarativeTransition7toStateEv @ 1373 NONAME + _ZNK22QDeclarativeTransition9fromStateEv @ 1374 NONAME + _ZNK23QDeclarativeDebugClient10metaObjectEv @ 1375 NONAME + _ZNK23QDeclarativeDebugClient11isConnectedEv @ 1376 NONAME + _ZNK23QDeclarativeDebugClient4nameEv @ 1377 NONAME + _ZNK23QDeclarativeDebugClient9isEnabledEv @ 1378 NONAME + _ZNK23QDeclarativeDomDocument10rootObjectEv @ 1379 NONAME + _ZNK23QDeclarativeDomDocument6errorsEv @ 1380 NONAME + _ZNK23QDeclarativeDomDocument7importsEv @ 1381 NONAME + _ZNK23QDeclarativeDomProperty12propertyNameEv @ 1382 NONAME + _ZNK23QDeclarativeDomProperty17isDefaultPropertyEv @ 1383 NONAME + _ZNK23QDeclarativeDomProperty17propertyNamePartsEv @ 1384 NONAME + _ZNK23QDeclarativeDomProperty5valueEv @ 1385 NONAME + _ZNK23QDeclarativeDomProperty6lengthEv @ 1386 NONAME + _ZNK23QDeclarativeDomProperty7isValidEv @ 1387 NONAME + _ZNK23QDeclarativeDomProperty8positionEv @ 1388 NONAME + _ZNK23QDeclarativeEngineDebug10metaObjectEv @ 1389 NONAME + _ZNK23QDeclarativeItemPrivate14verticalCenterEv @ 1390 NONAME + _ZNK23QDeclarativeItemPrivate16horizontalCenterEv @ 1391 NONAME + _ZNK23QDeclarativeItemPrivate22computeTransformOriginEv @ 1392 NONAME + _ZNK23QDeclarativeItemPrivate3topEv @ 1393 NONAME + _ZNK23QDeclarativeItemPrivate4leftEv @ 1394 NONAME + _ZNK23QDeclarativeItemPrivate5rightEv @ 1395 NONAME + _ZNK23QDeclarativeItemPrivate5stateEv @ 1396 NONAME + _ZNK23QDeclarativeItemPrivate5widthEv @ 1397 NONAME + _ZNK23QDeclarativeItemPrivate6bottomEv @ 1398 NONAME + _ZNK23QDeclarativeItemPrivate6heightEv @ 1399 NONAME + _ZNK23QDeclarativeItemPrivate8baselineEv @ 1400 NONAME + _ZNK23QDeclarativePixmapReply10metaObjectEv @ 1401 NONAME ABSENT + _ZNK23QDeclarativePixmapReply11errorStringEv @ 1402 NONAME ABSENT + _ZNK23QDeclarativePixmapReply11forcedWidthEv @ 1403 NONAME ABSENT + _ZNK23QDeclarativePixmapReply12forcedHeightEv @ 1404 NONAME ABSENT + _ZNK23QDeclarativePixmapReply12implicitSizeEv @ 1405 NONAME ABSENT + _ZNK23QDeclarativePixmapReply3urlEv @ 1406 NONAME ABSENT + _ZNK23QDeclarativePixmapReply6statusEv @ 1407 NONAME ABSENT + _ZNK23QDeclarativePixmapReply9isLoadingEv @ 1408 NONAME ABSENT + _ZNK23QDeclarativePropertyMap10metaObjectEv @ 1409 NONAME + _ZNK23QDeclarativePropertyMap4keysEv @ 1410 NONAME + _ZNK23QDeclarativePropertyMap4sizeEv @ 1411 NONAME + _ZNK23QDeclarativePropertyMap5countEv @ 1412 NONAME + _ZNK23QDeclarativePropertyMap5valueERK7QString @ 1413 NONAME + _ZNK23QDeclarativePropertyMap7isEmptyEv @ 1414 NONAME + _ZNK23QDeclarativePropertyMap8containsERK7QString @ 1415 NONAME + _ZNK23QDeclarativePropertyMapixERK7QString @ 1416 NONAME + _ZNK24QDeclarativeCustomParser11resolveTypeERK10QByteArray @ 1417 NONAME + _ZNK24QDeclarativeCustomParser12evaluateEnumERK10QByteArray @ 1418 NONAME + _ZNK24QDeclarativeDebugService10metaObjectEv @ 1419 NONAME + _ZNK24QDeclarativeDebugService4nameEv @ 1420 NONAME + _ZNK24QDeclarativeDebugService9isEnabledEv @ 1421 NONAME + _ZNK24QDeclarativeDomComponent13componentRootEv @ 1422 NONAME + _ZNK24QDeclarativeScriptString11scopeObjectEv @ 1423 NONAME + _ZNK24QDeclarativeScriptString6scriptEv @ 1424 NONAME + _ZNK24QDeclarativeScriptString7contextEv @ 1425 NONAME + _ZNK25QDeclarativeListReference15listElementTypeEv @ 1426 NONAME + _ZNK25QDeclarativeListReference2atEi @ 1427 NONAME + _ZNK25QDeclarativeListReference5canAtEv @ 1428 NONAME + _ZNK25QDeclarativeListReference5clearEv @ 1429 NONAME + _ZNK25QDeclarativeListReference5countEv @ 1430 NONAME + _ZNK25QDeclarativeListReference6appendEP7QObject @ 1431 NONAME + _ZNK25QDeclarativeListReference6objectEv @ 1432 NONAME + _ZNK25QDeclarativeListReference7isValidEv @ 1433 NONAME + _ZNK25QDeclarativeListReference8canClearEv @ 1434 NONAME + _ZNK25QDeclarativeListReference8canCountEv @ 1435 NONAME + _ZNK25QDeclarativeListReference9canAppendEv @ 1436 NONAME + _ZNK26QDeclarativeOpenMetaObject4nameEi @ 1437 NONAME + _ZNK26QDeclarativeOpenMetaObject4typeEv @ 1438 NONAME + _ZNK26QDeclarativeOpenMetaObject5countEv @ 1439 NONAME + _ZNK26QDeclarativeOpenMetaObject5valueERK10QByteArray @ 1440 NONAME + _ZNK26QDeclarativeOpenMetaObject5valueEi @ 1441 NONAME + _ZNK26QDeclarativeOpenMetaObject6objectEv @ 1442 NONAME + _ZNK26QDeclarativeOpenMetaObject6parentEv @ 1443 NONAME + _ZNK26QDeclarativeStateOperation10metaObjectEv @ 1444 NONAME + _ZNK27QDeclarativeAbstractBinding10expressionEv @ 1445 NONAME + _ZNK27QDeclarativeDebugConnection10metaObjectEv @ 1446 NONAME + _ZNK27QDeclarativeDebugConnection11isConnectedEv @ 1447 NONAME + _ZNK27QDeclarativeDomValueBinding7bindingEv @ 1448 NONAME + _ZNK27QDeclarativeDomValueLiteral7literalEv @ 1449 NONAME + _ZNK27QDeclarativeExtensionPlugin10metaObjectEv @ 1450 NONAME + _ZNK27QDeclarativeGridScaledImage10gridBottomEv @ 1451 NONAME + _ZNK27QDeclarativeGridScaledImage7gridTopEv @ 1452 NONAME + _ZNK27QDeclarativeGridScaledImage7isValidEv @ 1453 NONAME + _ZNK27QDeclarativeGridScaledImage8gridLeftEv @ 1454 NONAME + _ZNK27QDeclarativeGridScaledImage9gridRightEv @ 1455 NONAME + _ZNK27QDeclarativeGridScaledImage9pixmapUrlEv @ 1456 NONAME + _ZNK27QDeclarativePropertyPrivate11isValueTypeEv @ 1457 NONAME + _ZNK27QDeclarativePropertyPrivate12propertyTypeEv @ 1458 NONAME + _ZNK27QDeclarativePropertyPrivate20propertyTypeCategoryEv @ 1459 NONAME + _ZNK28QDeclarativeCustomParserNode10propertiesEv @ 1460 NONAME + _ZNK28QDeclarativeCustomParserNode4nameEv @ 1461 NONAME + _ZNK28QDeclarativeCustomParserNode8locationEv @ 1462 NONAME + _ZNK28QDeclarativeDebugObjectQuery10metaObjectEv @ 1463 NONAME + _ZNK28QDeclarativeDebugObjectQuery6objectEv @ 1464 NONAME + _ZNK29QDeclarativeDebugEnginesQuery10metaObjectEv @ 1465 NONAME + _ZNK29QDeclarativeDebugEnginesQuery7enginesEv @ 1466 NONAME + _ZNK30QDeclarativeDebugFileReference10lineNumberEv @ 1467 NONAME + _ZNK30QDeclarativeDebugFileReference12columnNumberEv @ 1468 NONAME + _ZNK30QDeclarativeDebugFileReference3urlEv @ 1469 NONAME + _ZNK30QDeclarativeDebugPropertyWatch10metaObjectEv @ 1470 NONAME + _ZNK30QDeclarativeDebugPropertyWatch4nameEv @ 1471 NONAME + _ZNK30QDeclarativeDomDynamicProperty12defaultValueEv @ 1472 NONAME + _ZNK30QDeclarativeDomDynamicProperty12propertyNameEv @ 1473 NONAME + _ZNK30QDeclarativeDomDynamicProperty12propertyTypeEv @ 1474 NONAME + _ZNK30QDeclarativeDomDynamicProperty16propertyTypeNameEv @ 1475 NONAME + _ZNK30QDeclarativeDomDynamicProperty17isDefaultPropertyEv @ 1476 NONAME + _ZNK30QDeclarativeDomDynamicProperty6lengthEv @ 1477 NONAME + _ZNK30QDeclarativeDomDynamicProperty7isAliasEv @ 1478 NONAME + _ZNK30QDeclarativeDomDynamicProperty7isValidEv @ 1479 NONAME + _ZNK30QDeclarativeDomDynamicProperty8positionEv @ 1480 NONAME + _ZNK30QDeclarativeOpenMetaObjectType12signalOffsetEv @ 1481 NONAME + _ZNK30QDeclarativeOpenMetaObjectType14propertyOffsetEv @ 1482 NONAME + _ZNK31QDeclarativeDomValueValueSource6objectEv @ 1483 NONAME + _ZNK32QDeclarativeCustomParserProperty14assignedValuesEv @ 1484 NONAME + _ZNK32QDeclarativeCustomParserProperty4nameEv @ 1485 NONAME + _ZNK32QDeclarativeCustomParserProperty6isListEv @ 1486 NONAME + _ZNK32QDeclarativeCustomParserProperty8locationEv @ 1487 NONAME + _ZNK32QDeclarativeDebugEngineReference4nameEv @ 1488 NONAME + _ZNK32QDeclarativeDebugEngineReference7debugIdEv @ 1489 NONAME + _ZNK32QDeclarativeDebugExpressionQuery10expressionEv @ 1490 NONAME + _ZNK32QDeclarativeDebugExpressionQuery10metaObjectEv @ 1491 NONAME + _ZNK32QDeclarativeDebugExpressionQuery6resultEv @ 1492 NONAME + _ZNK32QDeclarativeDebugObjectReference10propertiesEv @ 1493 NONAME + _ZNK32QDeclarativeDebugObjectReference14contextDebugIdEv @ 1494 NONAME + _ZNK32QDeclarativeDebugObjectReference4nameEv @ 1495 NONAME + _ZNK32QDeclarativeDebugObjectReference6sourceEv @ 1496 NONAME + _ZNK32QDeclarativeDebugObjectReference7debugIdEv @ 1497 NONAME + _ZNK32QDeclarativeDebugObjectReference8childrenEv @ 1498 NONAME + _ZNK32QDeclarativeDebugObjectReference8idStringEv @ 1499 NONAME + _ZNK32QDeclarativeDebugObjectReference9classNameEv @ 1500 NONAME + _ZNK33QDeclarativeDebugContextReference4nameEv @ 1501 NONAME + _ZNK33QDeclarativeDebugContextReference7debugIdEv @ 1502 NONAME + _ZNK33QDeclarativeDebugContextReference7objectsEv @ 1503 NONAME + _ZNK33QDeclarativeDebugContextReference8contextsEv @ 1504 NONAME + _ZNK33QDeclarativeDebugRootContextQuery10metaObjectEv @ 1505 NONAME + _ZNK33QDeclarativeDebugRootContextQuery11rootContextEv @ 1506 NONAME + _ZNK34QDeclarativeDebugPropertyReference13objectDebugIdEv @ 1507 NONAME + _ZNK34QDeclarativeDebugPropertyReference13valueTypeNameEv @ 1508 NONAME + _ZNK34QDeclarativeDebugPropertyReference15hasNotifySignalEv @ 1509 NONAME + _ZNK34QDeclarativeDebugPropertyReference4nameEv @ 1510 NONAME + _ZNK34QDeclarativeDebugPropertyReference5valueEv @ 1511 NONAME + _ZNK34QDeclarativeDebugPropertyReference7bindingEv @ 1512 NONAME + _ZNK36QDeclarativeDomValueValueInterceptor6objectEv @ 1513 NONAME + _ZNK38QDeclarativeDebugObjectExpressionWatch10expressionEv @ 1514 NONAME + _ZNK38QDeclarativeDebugObjectExpressionWatch10metaObjectEv @ 1515 NONAME + _ZNK7QPacket7isEmptyEv @ 1516 NONAME + _ZTI15QDeclarativePen @ 1517 NONAME + _ZTI15QPacketAutoSend @ 1518 NONAME + _ZTI15QPacketProtocol @ 1519 NONAME + _ZTI16QDeclarativeItem @ 1520 NONAME + _ZTI16QDeclarativeText @ 1521 NONAME + _ZTI16QDeclarativeView @ 1522 NONAME + _ZTI17QDeclarativeState @ 1523 NONAME + _ZTI18QDeclarativeEngine @ 1524 NONAME + _ZTI18QMetaObjectBuilder @ 1525 NONAME + _ZTI19QDeclarativeAnchors @ 1526 NONAME + _ZTI19QDeclarativeBinding @ 1527 NONAME + _ZTI19QDeclarativeContext @ 1528 NONAME + _ZTI19QListModelInterface @ 1529 NONAME + _ZTI20QDeclarativeBehavior @ 1530 NONAME + _ZTI21QDeclarativeComponent @ 1531 NONAME + _ZTI21QDeclarativeListModel @ 1532 NONAME + _ZTI21QDeclarativeRectangle @ 1533 NONAME + _ZTI21QDeclarativeScaleGrid @ 1534 NONAME + _ZTI21QDeclarativeValueType @ 1535 NONAME + _ZTI22QDeclarativeDebugQuery @ 1536 NONAME + _ZTI22QDeclarativeDebugWatch @ 1537 NONAME + _ZTI22QDeclarativeExpression @ 1538 NONAME + _ZTI22QDeclarativeStateGroup @ 1539 NONAME + _ZTI22QDeclarativeTransition @ 1540 NONAME + _ZTI23QDeclarativeDebugClient @ 1541 NONAME + _ZTI23QDeclarativeEngineDebug @ 1542 NONAME + _ZTI23QDeclarativeItemPrivate @ 1543 NONAME + _ZTI23QDeclarativePixmapReply @ 1544 NONAME ABSENT + _ZTI23QDeclarativePropertyMap @ 1545 NONAME + _ZTI24QDeclarativeCustomParser @ 1546 NONAME + _ZTI24QDeclarativeDebugService @ 1547 NONAME + _ZTI24QDeclarativeParserStatus @ 1548 NONAME + _ZTI25QDeclarativeImageProvider @ 1549 NONAME + _ZTI26QDeclarativeDebuggerStatus @ 1550 NONAME + _ZTI26QDeclarativeOpenMetaObject @ 1551 NONAME + _ZTI26QDeclarativeStateOperation @ 1552 NONAME + _ZTI27QDeclarativeAbstractBinding @ 1553 NONAME + _ZTI27QDeclarativeDebugConnection @ 1554 NONAME + _ZTI27QDeclarativeExtensionPlugin @ 1555 NONAME + _ZTI28QDeclarativeDebugObjectQuery @ 1556 NONAME + _ZTI29QDeclarativeDebugEnginesQuery @ 1557 NONAME + _ZTI30QDeclarativeDebugPropertyWatch @ 1558 NONAME + _ZTI30QDeclarativeExtensionInterface @ 1559 NONAME + _ZTI30QDeclarativeOpenMetaObjectType @ 1560 NONAME + _ZTI31QDeclarativePropertyValueSource @ 1561 NONAME + _ZTI32QDeclarativeDebugExpressionQuery @ 1562 NONAME + _ZTI33QDeclarativeDebugRootContextQuery @ 1563 NONAME + _ZTI36QDeclarativePropertyValueInterceptor @ 1564 NONAME + _ZTI38QDeclarativeDebugObjectExpressionWatch @ 1565 NONAME + _ZTI39QDeclarativeNetworkAccessManagerFactory @ 1566 NONAME + _ZTI7QPacket @ 1567 NONAME + _ZTV15QDeclarativePen @ 1568 NONAME + _ZTV15QPacketAutoSend @ 1569 NONAME + _ZTV15QPacketProtocol @ 1570 NONAME + _ZTV16QDeclarativeItem @ 1571 NONAME + _ZTV16QDeclarativeText @ 1572 NONAME + _ZTV16QDeclarativeView @ 1573 NONAME + _ZTV17QDeclarativeState @ 1574 NONAME + _ZTV18QDeclarativeEngine @ 1575 NONAME + _ZTV18QMetaObjectBuilder @ 1576 NONAME + _ZTV19QDeclarativeAnchors @ 1577 NONAME + _ZTV19QDeclarativeBinding @ 1578 NONAME + _ZTV19QDeclarativeContext @ 1579 NONAME + _ZTV19QListModelInterface @ 1580 NONAME + _ZTV20QDeclarativeBehavior @ 1581 NONAME + _ZTV21QDeclarativeComponent @ 1582 NONAME + _ZTV21QDeclarativeListModel @ 1583 NONAME + _ZTV21QDeclarativeRectangle @ 1584 NONAME + _ZTV21QDeclarativeScaleGrid @ 1585 NONAME + _ZTV21QDeclarativeValueType @ 1586 NONAME + _ZTV22QDeclarativeDebugQuery @ 1587 NONAME + _ZTV22QDeclarativeDebugWatch @ 1588 NONAME + _ZTV22QDeclarativeExpression @ 1589 NONAME + _ZTV22QDeclarativeStateGroup @ 1590 NONAME + _ZTV22QDeclarativeTransition @ 1591 NONAME + _ZTV23QDeclarativeDebugClient @ 1592 NONAME + _ZTV23QDeclarativeEngineDebug @ 1593 NONAME + _ZTV23QDeclarativeItemPrivate @ 1594 NONAME + _ZTV23QDeclarativePixmapReply @ 1595 NONAME ABSENT + _ZTV23QDeclarativePropertyMap @ 1596 NONAME + _ZTV24QDeclarativeCustomParser @ 1597 NONAME + _ZTV24QDeclarativeDebugService @ 1598 NONAME + _ZTV24QDeclarativeParserStatus @ 1599 NONAME + _ZTV25QDeclarativeImageProvider @ 1600 NONAME + _ZTV26QDeclarativeDebuggerStatus @ 1601 NONAME + _ZTV26QDeclarativeOpenMetaObject @ 1602 NONAME + _ZTV26QDeclarativeStateOperation @ 1603 NONAME + _ZTV27QDeclarativeAbstractBinding @ 1604 NONAME + _ZTV27QDeclarativeDebugConnection @ 1605 NONAME + _ZTV27QDeclarativeExtensionPlugin @ 1606 NONAME + _ZTV28QDeclarativeDebugObjectQuery @ 1607 NONAME + _ZTV29QDeclarativeDebugEnginesQuery @ 1608 NONAME + _ZTV30QDeclarativeDebugPropertyWatch @ 1609 NONAME + _ZTV30QDeclarativeOpenMetaObjectType @ 1610 NONAME + _ZTV31QDeclarativePropertyValueSource @ 1611 NONAME + _ZTV32QDeclarativeDebugExpressionQuery @ 1612 NONAME + _ZTV33QDeclarativeDebugRootContextQuery @ 1613 NONAME + _ZTV36QDeclarativePropertyValueInterceptor @ 1614 NONAME + _ZTV38QDeclarativeDebugObjectExpressionWatch @ 1615 NONAME + _ZTV39QDeclarativeNetworkAccessManagerFactory @ 1616 NONAME + _ZTV7QPacket @ 1617 NONAME + _ZThn16_N16QDeclarativeItem10classBeginEv @ 1618 NONAME + _ZThn16_N16QDeclarativeItem17componentCompleteEv @ 1619 NONAME + _ZThn16_N16QDeclarativeItemD0Ev @ 1620 NONAME + _ZThn16_N16QDeclarativeItemD1Ev @ 1621 NONAME + _ZThn16_N16QDeclarativeText17componentCompleteEv @ 1622 NONAME + _ZThn16_N16QDeclarativeTextD0Ev @ 1623 NONAME + _ZThn16_N16QDeclarativeTextD1Ev @ 1624 NONAME + _ZThn8_N16QDeclarativeItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 1625 NONAME + _ZThn8_N16QDeclarativeItem10sceneEventEP6QEvent @ 1626 NONAME + _ZThn8_N16QDeclarativeItem13keyPressEventEP9QKeyEvent @ 1627 NONAME + _ZThn8_N16QDeclarativeItem15keyReleaseEventEP9QKeyEvent @ 1628 NONAME + _ZThn8_N16QDeclarativeItem16inputMethodEventEP17QInputMethodEvent @ 1629 NONAME + _ZThn8_N16QDeclarativeItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1630 NONAME + _ZThn8_N16QDeclarativeItemD0Ev @ 1631 NONAME + _ZThn8_N16QDeclarativeItemD1Ev @ 1632 NONAME + _ZThn8_N16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 1633 NONAME + _ZThn8_N16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 1634 NONAME + _ZThn8_N16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1635 NONAME + _ZThn8_N16QDeclarativeTextD0Ev @ 1636 NONAME + _ZThn8_N16QDeclarativeTextD1Ev @ 1637 NONAME + _ZThn8_N16QDeclarativeViewD0Ev @ 1638 NONAME + _ZThn8_N16QDeclarativeViewD1Ev @ 1639 NONAME + _ZThn8_N19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1640 NONAME + _ZThn8_N19QDeclarativeBinding13propertyIndexEv @ 1641 NONAME + _ZThn8_N19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1642 NONAME + _ZThn8_N19QDeclarativeBindingD0Ev @ 1643 NONAME + _ZThn8_N19QDeclarativeBindingD1Ev @ 1644 NONAME + _ZThn8_N20QDeclarativeBehavior5writeERK8QVariant @ 1645 NONAME + _ZThn8_N20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 1646 NONAME + _ZThn8_N20QDeclarativeBehaviorD0Ev @ 1647 NONAME + _ZThn8_N20QDeclarativeBehaviorD1Ev @ 1648 NONAME + _ZThn8_N21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1649 NONAME + _ZThn8_N22QDeclarativeStateGroup10classBeginEv @ 1650 NONAME + _ZThn8_N22QDeclarativeStateGroup17componentCompleteEv @ 1651 NONAME + _ZThn8_N22QDeclarativeStateGroupD0Ev @ 1652 NONAME + _ZThn8_N22QDeclarativeStateGroupD1Ev @ 1653 NONAME + _ZThn8_N27QDeclarativeExtensionPlugin16initializeEngineEP18QDeclarativeEnginePKc @ 1654 NONAME + _ZThn8_N27QDeclarativeExtensionPluginD0Ev @ 1655 NONAME + _ZThn8_N27QDeclarativeExtensionPluginD1Ev @ 1656 NONAME + _ZThn8_NK16QDeclarativeItem12boundingRectEv @ 1657 NONAME + _ZThn8_NK16QDeclarativeItem16inputMethodQueryEN2Qt16InputMethodQueryE @ 1658 NONAME + _ZThn8_NK16QDeclarativeText12boundingRectEv @ 1659 NONAME + _ZThn8_NK19QDeclarativeBinding10expressionEv @ 1660 NONAME + _ZThn8_NK21QDeclarativeRectangle12boundingRectEv @ 1661 NONAME + _Zls6QDebugP16QDeclarativeItem @ 1662 NONAME + _Zls6QDebugRK17QDeclarativeError @ 1663 NONAME + _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1664 NONAME + _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1665 NONAME + _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1666 NONAME + _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1667 NONAME + _ZN18QDeclarativePixmap15connectFinishedEP7QObjectPKc @ 1668 NONAME + _ZN18QDeclarativePixmap15connectFinishedEP7QObjecti @ 1669 NONAME + _ZN18QDeclarativePixmap23connectDownloadProgressEP7QObjectPKc @ 1670 NONAME + _ZN18QDeclarativePixmap23connectDownloadProgressEP7QObjecti @ 1671 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrl @ 1672 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlRK5QSize @ 1673 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlRK5QSizeb @ 1674 NONAME + _ZN18QDeclarativePixmap4loadEP18QDeclarativeEngineRK4QUrlb @ 1675 NONAME + _ZN18QDeclarativePixmap5clearEP7QObject @ 1676 NONAME + _ZN18QDeclarativePixmap5clearEv @ 1677 NONAME + _ZN18QDeclarativePixmap9setPixmapERK7QPixmap @ 1678 NONAME + _ZN18QDeclarativePixmapC1EP18QDeclarativeEngineRK4QUrl @ 1679 NONAME + _ZN18QDeclarativePixmapC1EP18QDeclarativeEngineRK4QUrlRK5QSize @ 1680 NONAME + _ZN18QDeclarativePixmapC1Ev @ 1681 NONAME + _ZN18QDeclarativePixmapC2EP18QDeclarativeEngineRK4QUrl @ 1682 NONAME + _ZN18QDeclarativePixmapC2EP18QDeclarativeEngineRK4QUrlRK5QSize @ 1683 NONAME + _ZN18QDeclarativePixmapC2Ev @ 1684 NONAME + _ZN18QDeclarativePixmapD1Ev @ 1685 NONAME + _ZN18QDeclarativePixmapD2Ev @ 1686 NONAME + _ZNK18QDeclarativePixmap11requestSizeEv @ 1687 NONAME + _ZNK18QDeclarativePixmap12implicitSizeEv @ 1688 NONAME + _ZNK18QDeclarativePixmap3urlEv @ 1689 NONAME + _ZNK18QDeclarativePixmap4rectEv @ 1690 NONAME + _ZNK18QDeclarativePixmap5errorEv @ 1691 NONAME + _ZNK18QDeclarativePixmap5widthEv @ 1692 NONAME + _ZNK18QDeclarativePixmap6heightEv @ 1693 NONAME + _ZNK18QDeclarativePixmap6isNullEv @ 1694 NONAME + _ZNK18QDeclarativePixmap6pixmapEv @ 1695 NONAME + _ZNK18QDeclarativePixmap6statusEv @ 1696 NONAME + _ZNK18QDeclarativePixmap7isErrorEv @ 1697 NONAME + _ZNK18QDeclarativePixmap7isReadyEv @ 1698 NONAME + _ZNK18QDeclarativePixmap9isLoadingEv @ 1699 NONAME + -- cgit v0.12 From 0fd5965a4dc7a4804ded06306cb2850eef488be0 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 8 Jul 2010 19:24:02 +1000 Subject: Update QtDeclarative def files (cherry picked from commit abd49d1d146b73a124b5e650f1b254da992ed3a4) --- src/s60installs/bwins/QtDeclarativeu.def | 9 ++++++++- src/s60installs/eabi/QtDeclarativeu.def | 10 +++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 80ba423..e96f83f 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -751,7 +751,7 @@ EXPORTS ?paint@QDeclarativeItem@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 750 NONAME ; void QDeclarativeItem::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) ?send@QPacketProtocol@@QAE?AVQPacketAutoSend@@XZ @ 751 NONAME ; class QPacketAutoSend QPacketProtocol::send(void) ?countChanged@QDeclarativeListModel@@IAEXXZ @ 752 NONAME ; void QDeclarativeListModel::countChanged(void) - ?setBindingForObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@ABVQVariant@@_NPAVQObject@@@Z @ 753 NONAME ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool, class QObject *) + ?setBindingForObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@ABVQVariant@@_NPAVQObject@@@Z @ 753 NONAME ABSENT ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool, class QObject *) ??0QDeclarativeGridScaledImage@@QAE@PAVQIODevice@@@Z @ 754 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QIODevice *) ??_EQDeclarativeBinding@@UAE@I@Z @ 755 NONAME ; QDeclarativeBinding::~QDeclarativeBinding(unsigned int) ?baseMetaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 756 NONAME ; struct QMetaObject const * QDeclarativeType::baseMetaObject(void) const @@ -1668,4 +1668,11 @@ EXPORTS ??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1667 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &, class QSize const &) ?url@QDeclarativePixmap@@QBEABVQUrl@@XZ @ 1668 NONAME ; class QUrl const & QDeclarativePixmap::url(void) const ?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@_N@Z @ 1669 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &, bool) + ?imageType@QDeclarativeImageProvider@@QBE?AW4ImageType@1@XZ @ 1670 NONAME ; enum QDeclarativeImageProvider::ImageType QDeclarativeImageProvider::imageType(void) const + ?qtAnimationStateChanged@QDeclarativeBehavior@@AAEXW4State@QAbstractAnimation@@0@Z @ 1671 NONAME ; void QDeclarativeBehavior::qtAnimationStateChanged(enum QAbstractAnimation::State, enum QAbstractAnimation::State) + ?requestImage@QDeclarativeImageProvider@@UAE?AVQImage@@ABVQString@@PAVQSize@@ABV4@@Z @ 1672 NONAME ; class QImage QDeclarativeImageProvider::requestImage(class QString const &, class QSize *, class QSize const &) + ?requestPixmap@QDeclarativeImageProvider@@UAE?AVQPixmap@@ABVQString@@PAVQSize@@ABV4@@Z @ 1673 NONAME ; class QPixmap QDeclarativeImageProvider::requestPixmap(class QString const &, class QSize *, class QSize const &) + ?setBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@ABVQVariant@@_N@Z @ 1674 NONAME ; bool QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool) + ??0QDeclarativeImageProvider@@QAE@W4ImageType@0@@Z @ 1675 NONAME ; QDeclarativeImageProvider::QDeclarativeImageProvider(enum QDeclarativeImageProvider::ImageType) + ?setMethodBody@QDeclarativeEngineDebug@@QAE_NHABVQString@@0@Z @ 1676 NONAME ; bool QDeclarativeEngineDebug::setMethodBody(int, class QString const &, class QString const &) diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 8c59b18..083e07f 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -691,7 +691,7 @@ EXPORTS _ZN23QDeclarativeEngineDebug16staticMetaObjectE @ 690 NONAME DATA 16 _ZN23QDeclarativeEngineDebug17queryRootContextsERK32QDeclarativeDebugEngineReferenceP7QObject @ 691 NONAME _ZN23QDeclarativeEngineDebug19getStaticMetaObjectEv @ 692 NONAME - _ZN23QDeclarativeEngineDebug19setBindingForObjectEiRK7QStringRK8QVariantbP7QObject @ 693 NONAME + _ZN23QDeclarativeEngineDebug19setBindingForObjectEiRK7QStringRK8QVariantbP7QObject @ 693 NONAME ABSENT _ZN23QDeclarativeEngineDebug20queryObjectRecursiveERK32QDeclarativeDebugObjectReferenceP7QObject @ 694 NONAME _ZN23QDeclarativeEngineDebug21queryAvailableEnginesEP7QObject @ 695 NONAME _ZN23QDeclarativeEngineDebug21queryExpressionResultEiRK7QStringP7QObject @ 696 NONAME @@ -1698,4 +1698,12 @@ EXPORTS _ZNK18QDeclarativePixmap7isErrorEv @ 1697 NONAME _ZNK18QDeclarativePixmap7isReadyEv @ 1698 NONAME _ZNK18QDeclarativePixmap9isLoadingEv @ 1699 NONAME + _ZN20QDeclarativeBehavior23qtAnimationStateChangedEN18QAbstractAnimation5StateES1_ @ 1700 NONAME + _ZN23QDeclarativeEngineDebug13setMethodBodyEiRK7QStringS2_ @ 1701 NONAME + _ZN23QDeclarativeEngineDebug19setBindingForObjectEiRK7QStringRK8QVariantb @ 1702 NONAME + _ZN25QDeclarativeImageProvider12requestImageERK7QStringP5QSizeRKS3_ @ 1703 NONAME + _ZN25QDeclarativeImageProvider13requestPixmapERK7QStringP5QSizeRKS3_ @ 1704 NONAME + _ZN25QDeclarativeImageProviderC1ENS_9ImageTypeE @ 1705 NONAME + _ZN25QDeclarativeImageProviderC2ENS_9ImageTypeE @ 1706 NONAME + _ZNK25QDeclarativeImageProvider9imageTypeEv @ 1707 NONAME -- cgit v0.12 From 4f9b0f34c985c810da5027d245515d8c66191881 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 13 Jul 2010 10:03:22 +1000 Subject: Fix TextInput selectionColor or selectedTextColor -based animations Task-number: QTBUG-12115 Reviewed-by: Martin Jones (cherry picked from commit 400b0d43830dfdcefb2f8bd91440ab6f4130ce0f) --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 2707b9c..850213b 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -275,6 +275,8 @@ void QDeclarativeTextInput::setSelectionColor(const QColor &color) QPalette p = d->control->palette(); p.setColor(QPalette::Highlight, d->selectionColor); d->control->setPalette(p); + clearCache(); + update(); emit selectionColorChanged(color); } @@ -299,6 +301,8 @@ void QDeclarativeTextInput::setSelectedTextColor(const QColor &color) QPalette p = d->control->palette(); p.setColor(QPalette::HighlightedText, d->selectedTextColor); d->control->setPalette(p); + clearCache(); + update(); emit selectedTextColorChanged(color); } -- cgit v0.12 From 174216f57b881ff1ab9d7df8bdbb5e2564df51b0 Mon Sep 17 00:00:00 2001 From: Warwick Allison <warwick.allison@nokia.com> Date: Tue, 6 Jul 2010 09:59:41 +1000 Subject: Fix inconsistent reporting of module import errors when using versions. Task-number: QTBUG-11936 (cherry picked from commit cabdb16f5ea6458dec9a2ec3b70a01e498b27dbc) --- doc/src/declarative/modules.qdoc | 11 +++++++++-- src/declarative/qml/qdeclarativeimport.cpp | 18 +++++++++++++++--- .../data/lib/com/nokia/installedtest/qmldir | 1 - .../lib/com/nokia/installedtest0/InstalledTest.qml | 2 ++ .../lib/com/nokia/installedtest0/InstalledTest2.qml | 2 ++ .../data/lib/com/nokia/installedtest0/qmldir | 2 ++ .../qdeclarativelanguage/tst_qdeclarativelanguage.cpp | 9 +++++++-- 7 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest2.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/qmldir diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index 02a2f5f..36570da 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -103,9 +103,16 @@ the \c qmldir file. Types which you do not wish to export to users of your modul may be marked with the \c internal keyword: \c internal <TypeName> <File>. The same type can be provided by different files in different versions, in which -case later earlier versions (eg. 1.2) must precede earlier versions (eg. 1.0), +case later versions (eg. 1.2) must precede earlier versions (eg. 1.0), since the \e first name-version match is used and a request for a version of a type -can be fulfilled by one defined in an earlier version of the module. +can be fulfilled by one defined in an earlier version of the module. If a user attempts +to import a version earlier than the earliest provided or later than the latest provided, +an error results, but if the user imports a version within the range of versions provided, +even if no type is specific to that version, no error results. + +A single module, in all versions, may only be provided in a single directory (and a single \c qmldir file). +If multiple are provided, only the first in the search path will be used (regardless of whether other versions +are provided by directories later in the search path). Installed and remote files without a namespace \e must be referred to by version information described above, local files \e may have it. diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index a2e3831..e917cf6 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -445,11 +445,23 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp if (vmaj > -1 && vmin > -1 && !qmldircomponents.isEmpty()) { QList<QDeclarativeDirParser::Component>::ConstIterator it = qmldircomponents.begin(); + int lowest_maj = INT_MAX; + int lowest_min = INT_MAX; + int highest_maj = INT_MIN; + int highest_min = INT_MIN; for (; it != qmldircomponents.end(); ++it) { - if (it->majorVersion > vmaj || (it->majorVersion == vmaj && it->minorVersion >= vmin)) - break; + if (it->majorVersion > highest_maj || (it->majorVersion == highest_maj && it->minorVersion > highest_min)) { + highest_maj = it->majorVersion; + highest_min = it->minorVersion; + } + if (it->majorVersion < lowest_maj || (it->majorVersion == lowest_maj && it->minorVersion < lowest_min)) { + lowest_maj = it->majorVersion; + lowest_min = it->minorVersion; + } } - if (it == qmldircomponents.end()) { + if (lowest_maj > vmaj || (lowest_maj == vmaj && lowest_min > vmin) + || highest_maj < vmaj || (highest_maj == vmaj && highest_min < vmin)) + { *errorString = QDeclarativeImportDatabase::tr("module \"%1\" version %2.%3 is not installed").arg(uri_arg).arg(vmaj).arg(vmin); return false; } diff --git a/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/qmldir b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/qmldir index 0adb0f6..d15720a 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/qmldir +++ b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest/qmldir @@ -2,4 +2,3 @@ Rectangle 1.5 InstalledTest2.qml LocalLast 1.0 LocalLast.qml InstalledTest 1.4 InstalledTest2.qml InstalledTest 1.0 InstalledTest.qml -InstalledTestTP 0.0 InstalledTest.qml diff --git a/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest.qml b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest.qml new file mode 100644 index 0000000..303b5a5 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest.qml @@ -0,0 +1,2 @@ +import Qt 4.7 as Qt47 +Qt47.Rectangle {} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest2.qml b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest2.qml new file mode 100644 index 0000000..8c953cb --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/InstalledTest2.qml @@ -0,0 +1,2 @@ +import Qt 4.7 +Text {} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/qmldir b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/qmldir new file mode 100644 index 0000000..b301226 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/lib/com/nokia/installedtest0/qmldir @@ -0,0 +1,2 @@ +InstalledTest 1.4 InstalledTest2.qml +InstalledTestTP 0.0 InstalledTest.qml diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index 3ce356e..e687ba0 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -1476,12 +1476,12 @@ void tst_qdeclarativelanguage::importsInstalled_data() // import installed QTest::newRow("installed import 0") - << "import com.nokia.installedtest 0.0\n" + << "import com.nokia.installedtest0 0.0\n" "InstalledTestTP {}" << "QDeclarativeRectangle" << ""; QTest::newRow("installed import 0 as TP") - << "import com.nokia.installedtest 0.0 as TP\n" + << "import com.nokia.installedtest0 0.0 as TP\n" "TP.InstalledTestTP {}" << "QDeclarativeRectangle" << ""; @@ -1500,6 +1500,11 @@ void tst_qdeclarativelanguage::importsInstalled_data() "InstalledTest {}" << "QDeclarativeText" << ""; + QTest::newRow("installed import minor version not available") // QTBUG-11936 + << "import com.nokia.installedtest 0.1\n" + "InstalledTest {}" + << "" + << "module \"com.nokia.installedtest\" version 0.1 is not installed"; QTest::newRow("installed import minor version not available") // QTBUG-9627 << "import com.nokia.installedtest 1.10\n" "InstalledTest {}" -- cgit v0.12 From 30afdcfb0eb5c926de434dc65076a97c87ac8d5d Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Thu, 8 Jul 2010 15:04:48 +1000 Subject: Don't double delete cancelled pixmap cache requests QTBUG-11954 (cherry picked from commit cec6d01d17e39af6e8a139156a3b51fd45558a50) --- src/declarative/util/qdeclarativepixmapcache.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index 3f496b3..f729ced 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -358,7 +358,9 @@ void QDeclarativePixmapReader::networkRequestDone() } } // send completion event to the QDeclarativePixmapReply - job->postReply(error, errorString, readSize, image); + mutex.lock(); + if (!cancelled.contains(job)) job->postReply(error, errorString, readSize, image); + mutex.unlock(); } reply->deleteLater(); @@ -438,7 +440,9 @@ void QDeclarativePixmapReader::processJob(QDeclarativePixmapReply *runningJob) errorStr = QDeclarativePixmap::tr("Failed to get image from provider: %1").arg(url.toString()); } - runningJob->postReply(errorCode, errorStr, readSize, image); + mutex.lock(); + if (!cancelled.contains(runningJob)) runningJob->postReply(errorCode, errorStr, readSize, image); + mutex.unlock(); } else { QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); if (!lf.isEmpty()) { @@ -455,7 +459,9 @@ void QDeclarativePixmapReader::processJob(QDeclarativePixmapReply *runningJob) errorStr = QDeclarativePixmap::tr("Cannot open: %1").arg(url.toString()); errorCode = QDeclarativePixmapReply::Loading; } - runningJob->postReply(errorCode, errorStr, readSize, image); + mutex.lock(); + if (!cancelled.contains(runningJob)) runningJob->postReply(errorCode, errorStr, readSize, image); + mutex.unlock(); } else { // Network resource QNetworkRequest req(url); -- cgit v0.12 From 32d49340b973b7b4504514a8392d1f631ba248dc Mon Sep 17 00:00:00 2001 From: Warwick Allison <warwick.allison@nokia.com> Date: Wed, 7 Jul 2010 14:09:49 +1000 Subject: Make Text, TextInput, and TextEdit all have the same size for the same text. This may mean that the cursor is to the right of the width, so components should cater for that with a margin if they are boxed / clipped. TextInput used to try to account for right bearing (and left bearing incorrectly since it added it on the right). This is removed. Potentially this means that for some fonts the text repaints incorrectly on the left or right, but if that is the case Text and TextEdit already had such a problem (undetected), and all will need fixing. Task-number: QTBUG-11983 (cherry picked from commit 628159323c60c434a202b036ecbaf5e433c703e8) --- src/declarative/graphicsitems/qdeclarativetext.cpp | 2 ++ .../graphicsitems/qdeclarativetextedit.cpp | 15 ++++++----- .../graphicsitems/qdeclarativetextinput.cpp | 31 +++++++++++----------- .../graphicsitems/qdeclarativetextinput_p.h | 2 ++ .../tst_qdeclarativetextedit.cpp | 6 ++--- .../tst_qdeclarativetextinput.cpp | 2 +- 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index a7e2ed0..200a680 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -711,6 +711,8 @@ QRectF QDeclarativeText::boundingRect() const int x = 0; int y = 0; + // Could include font max left/right bearings to either side of rectangle. + if (d->cache || d->style != Normal) { switch (d->hAlign) { case AlignLeft: diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index a078c34..04dac3b 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1341,6 +1341,15 @@ QRectF QDeclarativeTextEdit::boundingRect() const { Q_D(const QDeclarativeTextEdit); QRectF r = QDeclarativePaintedItem::boundingRect(); + int cursorWidth = 1; + if(d->cursor) + cursorWidth = d->cursor->width(); + if(!d->document->isEmpty()) + cursorWidth += 3;// ### Need a better way of accounting for space between char and cursor + + // Could include font max left/right bearings to either side of rectangle. + + r.setRight(r.right() + cursorWidth); return r.translated(0,d->yoff); } @@ -1380,12 +1389,6 @@ void QDeclarativeTextEdit::updateSize() int newWidth = qCeil(d->document->idealWidth()); if (!widthValid() && d->document->textWidth() != newWidth) d->document->setTextWidth(newWidth); // ### Text does not align if width is not set (QTextDoc bug) - int cursorWidth = 1; - if(d->cursor) - cursorWidth = d->cursor->width(); - newWidth += cursorWidth; - if(!d->document->isEmpty()) - newWidth += 3;// ### Need a better way of accounting for space between char and cursor // ### Setting the implicitWidth triggers another updateSize(), and unless there are bindings nothing has changed. setImplicitWidth(newWidth); qreal newHeight = d->document->isEmpty() ? fm.height() : (int)d->document->size().height(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 850213b..2a5d73d 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -828,7 +828,7 @@ void QDeclarativeTextInput::createCursor() QDeclarative_setParent_noEvent(d->cursorItem, this); d->cursorItem->setParentItem(this); d->cursorItem->setX(d->control->cursorToX()); - d->cursorItem->setHeight(d->control->height()); + d->cursorItem->setHeight(d->control->height()-1); // -1 to counter QLineControl's +1 which is not consistent with Text. } void QDeclarativeTextInput::moveCursor() @@ -1033,19 +1033,7 @@ void QDeclarativeTextInput::geometryChanged(const QRectF &newGeometry, int QDeclarativeTextInputPrivate::calculateTextWidth() { - int cursorWidth = control->cursorWidth(); - if(cursorItem) - cursorWidth = cursorItem->width(); - - QFontMetrics fm = QFontMetrics(font); - int leftBearing = 0; - int rightBearing = 0; - if (!control->text().isEmpty()) { - leftBearing = qMax(0, -fm.leftBearing(control->text().at(0))); - rightBearing = qMax(0, -fm.rightBearing(control->text().at(control->text().count()-1))); - } - - return qRound(control->naturalTextWidth()) + qMax(cursorWidth, leftBearing) + rightBearing; + return qRound(control->naturalTextWidth()); } void QDeclarativeTextInputPrivate::updateHorizontalScroll() @@ -1521,12 +1509,25 @@ void QDeclarativeTextInput::updateRect(const QRect &r) update(); } +QRectF QDeclarativeTextInput::boundingRect() const +{ + Q_D(const QDeclarativeTextInput); + QRectF r = QDeclarativePaintedItem::boundingRect(); + + int cursorWidth = d->cursorItem ? d->cursorItem->width() : d->control->cursorWidth(); + + // Could include font max left/right bearings to either side of rectangle. + + r.setRight(r.right() + cursorWidth); + return r; +} + void QDeclarativeTextInput::updateSize(bool needsRedraw) { Q_D(QDeclarativeTextInput); int w = width(); int h = height(); - setImplicitHeight(d->control->height()); + setImplicitHeight(d->control->height()-1); // -1 to counter QLineControl's +1 which is not consistent with Text. setImplicitWidth(d->calculateTextWidth()); setContentsSize(QSize(width(), height()));//Repaints if changed if(w==width() && h==height() && needsRedraw){ diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index 336a8b9..b1862c6 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -187,6 +187,8 @@ public: void drawContents(QPainter *p,const QRect &r); QVariant inputMethodQuery(Qt::InputMethodQuery property) const; + QRectF boundingRect() const; + Q_SIGNALS: void textChanged(); void cursorPositionChanged(); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 1ec700b..f7285c2 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -209,7 +209,7 @@ void tst_qdeclarativetextedit::width() QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit*>(texteditComponent.create()); QVERIFY(textEditObject != 0); - QCOMPARE(textEditObject->width(), 1.);//+1 for cursor + QCOMPARE(textEditObject->width(), 0.0); } for (int i = 0; i < standard.size(); i++) @@ -225,7 +225,7 @@ void tst_qdeclarativetextedit::width() QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit*>(texteditComponent.create()); QVERIFY(textEditObject != 0); - QCOMPARE(textEditObject->width(), qreal(metricWidth + 1 + 3));//+3 is the current way of accounting for space between cursor and last character. + QCOMPARE(textEditObject->width(), qreal(metricWidth)); } for (int i = 0; i < richText.size(); i++) @@ -242,7 +242,7 @@ void tst_qdeclarativetextedit::width() QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit*>(texteditComponent.create()); QVERIFY(textEditObject != 0); - QCOMPARE(textEditObject->width(), qreal(documentWidth + 1 + 3)); + QCOMPARE(textEditObject->width(), qreal(documentWidth)); } } diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index a032071..05dc50b 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -159,7 +159,7 @@ void tst_qdeclarativetextinput::width() QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput*>(textinputComponent.create()); QVERIFY(textinputObject != 0); - QCOMPARE(textinputObject->width(), 1.); // 1 for the cursor + QCOMPARE(textinputObject->width(), 0.0); delete textinputObject; } -- cgit v0.12 From 706e16f2a5caee192711796b6fcd0ac53064ee08 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 6 Jul 2010 10:41:41 +1000 Subject: Export QDeclarativePixmap But its still a private class. --- src/declarative/util/qdeclarativepixmapcache_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativepixmapcache_p.h b/src/declarative/util/qdeclarativepixmapcache_p.h index 8278c35..b4d88bd 100644 --- a/src/declarative/util/qdeclarativepixmapcache_p.h +++ b/src/declarative/util/qdeclarativepixmapcache_p.h @@ -55,7 +55,7 @@ QT_MODULE(Declarative) class QDeclarativeEngine; class QDeclarativePixmapData; -class Q_AUTOTEST_EXPORT QDeclarativePixmap +class Q_DECLARATIVE_EXPORT QDeclarativePixmap { Q_DECLARE_TR_FUNCTIONS(QDeclarativePixmap) public: -- cgit v0.12 From 596ac2674f2697cb0ac304389d91c50339b988bf Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Wed, 7 Jul 2010 15:45:33 +1000 Subject: Add Symbian support for runtime.orientation property Task-number: Reviewed-by: Martin Jones (cherry picked from commit af5fc41e27f068604453a927cac4d81886d1987e) --- demos/declarative/calculator/Core/calculator.js | 2 +- demos/declarative/calculator/calculator.qml | 29 +++-- tools/qml/deviceorientation_symbian.cpp | 166 ++++++++++++++++++++++++ tools/qml/main.cpp | 11 ++ tools/qml/qml.pri | 2 + tools/qml/qml.pro | 4 + 6 files changed, 205 insertions(+), 9 deletions(-) create mode 100644 tools/qml/deviceorientation_symbian.cpp diff --git a/demos/declarative/calculator/Core/calculator.js b/demos/declarative/calculator/Core/calculator.js index 51b3dd3..c80c42f 100644 --- a/demos/declarative/calculator/Core/calculator.js +++ b/demos/declarative/calculator/Core/calculator.js @@ -84,7 +84,7 @@ function doOperation(op) { } if (op == rotateLeft) - main.state = 'rotated' + main.state = "orientation " + Orientation.Landscape if (op == rotateRight) main.state = '' } diff --git a/demos/declarative/calculator/calculator.qml b/demos/declarative/calculator/calculator.qml index 3d36211..63b6c55 100644 --- a/demos/declarative/calculator/calculator.qml +++ b/demos/declarative/calculator/calculator.qml @@ -58,10 +58,11 @@ Rectangle { property string plusminus : "\u00b1" function doOp(operation) { CalcEngine.doOperation(operation) } - + Item { id: main - state: (runtime.orientation == Orientation.Portrait) ? '' : 'rotated' + state: "orientation " + runtime.orientation + width: parent.width; height: parent.height; anchors.centerIn: parent Column { @@ -130,16 +131,28 @@ Rectangle { } } - states: State { - name: 'rotated' - PropertyChanges { target: main; rotation: -90; width: window.height; height: window.width } - PropertyChanges { target: rotateButton; operation: rotateRight } - } + states: [ + State { + name: "orientation " + Orientation.Landscape + PropertyChanges { target: main; rotation: -90; width: window.height; height: window.width } + PropertyChanges { target: rotateButton; operation: rotateRight } + }, + State { + name: "orientation " + Orientation.PortraitInverted + PropertyChanges { target: main; rotation: -180; } + PropertyChanges { target: rotateButton; operation: rotateLeft } + }, + State { + name: "orientation " + Orientation.LandscapeInverted + PropertyChanges { target: main; rotation: -270; width: window.height; height: window.width } + PropertyChanges { target: rotateButton; operation: rotateRight } + } + ] transitions: Transition { SequentialAnimation { PropertyAction { target: rotateButton; property: "operation" } - NumberAnimation { properties: "rotation"; duration: 300; easing.type: Easing.InOutQuint } + RotationAnimation { direction: RotationAnimation.Shortest; duration: 300; easing.type: Easing.InOutQuint } NumberAnimation { properties: "x,y,width,height"; duration: 300; easing.type: Easing.InOutQuint } } } diff --git a/tools/qml/deviceorientation_symbian.cpp b/tools/qml/deviceorientation_symbian.cpp new file mode 100644 index 0000000..48bfc72 --- /dev/null +++ b/tools/qml/deviceorientation_symbian.cpp @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "deviceorientation.h" + +#include <e32base.h> +#include <sensrvchannelfinder.h> +#include <sensrvdatalistener.h> +#include <sensrvchannel.h> +#include <sensrvorientationsensor.h> + +class SymbianOrientation : public DeviceOrientation, public MSensrvDataListener +{ + Q_OBJECT +public: + SymbianOrientation() + : DeviceOrientation(), m_current(UnknownOrientation), m_sensorChannel(0) + { + TRAP_IGNORE(initL()); + if (!m_sensorChannel) + qWarning("No valid sensors found."); + } + + ~SymbianOrientation() + { + if (m_sensorChannel) { + m_sensorChannel->StopDataListening(); + m_sensorChannel->CloseChannel(); + delete m_sensorChannel; + } + } + + void initL() + { + CSensrvChannelFinder *channelFinder = CSensrvChannelFinder::NewLC(); + RSensrvChannelInfoList channelInfoList; + CleanupClosePushL(channelInfoList); + + TSensrvChannelInfo searchConditions; + searchConditions.iChannelType = KSensrvChannelTypeIdOrientationData; + channelFinder->FindChannelsL(channelInfoList, searchConditions); + + for (int i = 0; i < channelInfoList.Count(); ++i) { + TRAPD(error, m_sensorChannel = CSensrvChannel::NewL(channelInfoList[i])); + if (!error) + TRAP(error, m_sensorChannel->OpenChannelL()); + if (!error) { + TRAP(error, m_sensorChannel->StartDataListeningL(this, 1, 1, 0)); + break; + } + if (error) { + delete m_sensorChannel; + m_sensorChannel = 0; + } + } + + channelInfoList.Close(); + CleanupStack::Pop(&channelInfoList); + CleanupStack::PopAndDestroy(channelFinder); + } + + Orientation orientation() const + { + return m_current; + } + + void setOrientation(Orientation) { } + +private: + DeviceOrientation::Orientation m_current; + CSensrvChannel *m_sensorChannel; + + void DataReceived(CSensrvChannel &channel, TInt count, TInt dataLost) + { + if (channel.GetChannelInfo().iChannelType == KSensrvChannelTypeIdOrientationData) { + TSensrvOrientationData data; + for (int i = 0; i < count; ++i) { + TPckgBuf<TSensrvOrientationData> dataBuf; + channel.GetData(dataBuf); + data = dataBuf(); + Orientation o = UnknownOrientation; + switch (data.iDeviceOrientation) { + case TSensrvOrientationData::EOrientationDisplayRightUp: + o = LandscapeInverted; + break; + case TSensrvOrientationData::EOrientationDisplayUp: + o = Portrait; + break; + case TSensrvOrientationData::EOrientationDisplayDown: + o = PortraitInverted; + break; + case TSensrvOrientationData::EOrientationDisplayLeftUp: + o = Landscape; + break; + case TSensrvOrientationData::EOrientationUndefined: + case TSensrvOrientationData::EOrientationDisplayUpwards: + case TSensrvOrientationData::EOrientationDisplayDownwards: + default: + break; + } + + if (m_current != o) { + m_current = o; + emit orientationChanged(); + } + } + } + } + + void DataError(CSensrvChannel& /* channel */, TSensrvErrorSeverity /* error */) + { + } + + void GetDataListenerInterfaceL(TUid /* interfaceUid */, TAny*& /* interface */) + { + } +}; + + +DeviceOrientation* DeviceOrientation::instance() +{ + static SymbianOrientation *o = 0; + if (!o) + o = new SymbianOrientation; + return o; +} + +#include "deviceorientation_symbian.moc" diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index 900a464..baf1b4d 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -55,6 +55,10 @@ QT_USE_NAMESPACE QtMsgHandler systemMsgOutput = 0; +#if defined(Q_WS_S60) +#include <aknappui.h> // For locking app to portrait +#endif + #if defined (Q_OS_SYMBIAN) #include <unistd.h> #include <sys/types.h> @@ -200,6 +204,13 @@ int main(int argc, char ** argv) app.setOrganizationName("Nokia"); app.setOrganizationDomain("nokia.com"); +#if defined(Q_WS_S60) + CAknAppUi *appUi = static_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi()); + if (appUi) { + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait); + } +#endif + QDeclarativeViewer::registerTypes(); QDeclarativeTester::registerTypes(); diff --git a/tools/qml/qml.pri b/tools/qml/qml.pri index 3e5a88b..0d01f70 100644 --- a/tools/qml/qml.pri +++ b/tools/qml/qml.pri @@ -23,6 +23,8 @@ maemo5 { SOURCES += $$PWD/deviceorientation_maemo5.cpp FORMS = $$PWD/recopts_maemo5.ui \ $$PWD/proxysettings_maemo5.ui +} symbian:!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { + SOURCES += $$PWD/deviceorientation_symbian.cpp } else { SOURCES += $$PWD/deviceorientation.cpp FORMS = $$PWD/recopts.ui \ diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro index 63efff1..0a51c0b 100644 --- a/tools/qml/qml.pro +++ b/tools/qml/qml.pro @@ -37,6 +37,10 @@ symbian { include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 TARGET.CAPABILITY = NetworkServices ReadUserData + !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { + LIBS += -lsensrvclient -lsensrvutil + contains(QT_CONFIG, s60): LIBS += -lavkon -lcone + } } mac { QMAKE_INFO_PLIST=Info_mac.plist -- cgit v0.12 From 1131c251882135d1fe90d4f0f91b2b54a4568adf Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 13 Jul 2010 15:50:22 +1000 Subject: Only support portrait and landscape orientations on Symbian when updating the runtime.orientation property Task-number: QTBUG-12036 Reviewed-by: Martin Jones (cherry picked from commit cb6472cb67511316f058b1eda4ffe71a1c4fe019) --- tools/qml/deviceorientation_symbian.cpp | 12 ++++-------- tools/qml/main.cpp | 11 ++--------- tools/qml/qml.pro | 1 - 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/tools/qml/deviceorientation_symbian.cpp b/tools/qml/deviceorientation_symbian.cpp index 48bfc72..c305f94 100644 --- a/tools/qml/deviceorientation_symbian.cpp +++ b/tools/qml/deviceorientation_symbian.cpp @@ -118,18 +118,14 @@ private: data = dataBuf(); Orientation o = UnknownOrientation; switch (data.iDeviceOrientation) { - case TSensrvOrientationData::EOrientationDisplayRightUp: - o = LandscapeInverted; - break; case TSensrvOrientationData::EOrientationDisplayUp: o = Portrait; break; - case TSensrvOrientationData::EOrientationDisplayDown: - o = PortraitInverted; - break; - case TSensrvOrientationData::EOrientationDisplayLeftUp: + case TSensrvOrientationData::EOrientationDisplayRightUp: o = Landscape; break; + case TSensrvOrientationData::EOrientationDisplayLeftUp: + case TSensrvOrientationData::EOrientationDisplayDown: case TSensrvOrientationData::EOrientationUndefined: case TSensrvOrientationData::EOrientationDisplayUpwards: case TSensrvOrientationData::EOrientationDisplayDownwards: @@ -137,7 +133,7 @@ private: break; } - if (m_current != o) { + if (m_current != o && o != UnknownOrientation) { m_current = o; emit orientationChanged(); } diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index baf1b4d..6461b67 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -55,9 +55,7 @@ QT_USE_NAMESPACE QtMsgHandler systemMsgOutput = 0; -#if defined(Q_WS_S60) -#include <aknappui.h> // For locking app to portrait -#endif + #if defined (Q_OS_SYMBIAN) #include <unistd.h> @@ -204,12 +202,7 @@ int main(int argc, char ** argv) app.setOrganizationName("Nokia"); app.setOrganizationDomain("nokia.com"); -#if defined(Q_WS_S60) - CAknAppUi *appUi = static_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi()); - if (appUi) { - appUi->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait); - } -#endif + QDeclarativeViewer::registerTypes(); QDeclarativeTester::registerTypes(); diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro index 0a51c0b..bb69e8a 100644 --- a/tools/qml/qml.pro +++ b/tools/qml/qml.pro @@ -39,7 +39,6 @@ symbian { TARGET.CAPABILITY = NetworkServices ReadUserData !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { LIBS += -lsensrvclient -lsensrvutil - contains(QT_CONFIG, s60): LIBS += -lavkon -lcone } } mac { -- cgit v0.12 From 339ae395817867f44736c20df714986e52b8c9a9 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 13 Jul 2010 16:12:26 +1000 Subject: Ensure the section header isn't shown twice. Happened when currentItem was on a section boundary. Task-number: QTBUG-12089 (cherry picked from commit 181749ff7dcfbeb5eb64026e80353f27013af833) --- src/declarative/graphicsitems/qdeclarativelistview.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 9497cb7..9cc414a 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -494,7 +494,7 @@ public: QSmoothedAnimation *highlightSizeAnimator; QDeclarativeViewSection *sectionCriteria; QString currentSection; - static const int sectionCacheSize = 3; + static const int sectionCacheSize = 4; QDeclarativeItem *sectionCache[sectionCacheSize]; qreal spacing; qreal highlightMoveSpeed; @@ -1029,6 +1029,11 @@ void QDeclarativeListViewPrivate::updateCurrent(int modelIndex) } currentItem->item->setFocus(true); currentItem->attached->setIsCurrentItem(true); + // Avoid showing section delegate twice. We still need the section heading so that + // currentItem positioning works correctly. + // This is slightly sub-optimal, but section heading caching minimizes the impact. + if (currentItem->section) + currentItem->section->setVisible(false); } updateHighlight(); emit q->currentIndexChanged(); -- cgit v0.12 From 9585d98469903df64c6772d37c6aa71a2f82389c Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 14 Jul 2010 15:32:32 +1000 Subject: Position GridView and ListView footer correctly when model cleared. Task-number: QTBUG-12167 (cherry picked from commit 9adc85fdfa0af2b6948408932188ee1b79247fa6) --- .../graphicsitems/qdeclarativegridview.cpp | 5 ++- .../graphicsitems/qdeclarativelistview.cpp | 7 ++-- .../qdeclarativegridview/data/footer.qml | 32 +++++++++++++++++ .../tst_qdeclarativegridview.cpp | 41 ++++++++++++++++++++++ .../qdeclarativelistview/data/footer.qml | 30 ++++++++++++++++ .../tst_qdeclarativelistview.cpp | 32 +++++++++++++++++ 6 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativegridview/data/footer.qml create mode 100644 tests/auto/declarative/qdeclarativelistview/data/footer.qml diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 3efb9ad..078d034 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -2438,8 +2438,11 @@ void QDeclarativeGridView::itemsRemoved(int modelIndex, int count) if (removedVisible && d->visibleItems.isEmpty()) { d->timeline.clear(); d->setPosition(0); - if (d->itemCount == 0) + if (d->itemCount == 0) { + d->updateHeader(); + d->updateFooter(); update(); + } } emit countChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 9cc414a..42b953c 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1077,7 +1077,7 @@ void QDeclarativeListViewPrivate::updateFooter() } if (footer) { if (visibleItems.count()) { - qreal endPos = endPosition(); + qreal endPos = endPosition() + 1; if (lastVisibleIndex() == model->count()-1) { footer->setPosition(endPos); } else { @@ -2893,8 +2893,11 @@ void QDeclarativeListView::itemsRemoved(int modelIndex, int count) d->visiblePos = d->header ? d->header->size() : 0; d->timeline.clear(); d->setPosition(0); - if (d->itemCount == 0) + if (d->itemCount == 0) { + d->updateHeader(); + d->updateFooter(); update(); + } } emit countChanged(); diff --git a/tests/auto/declarative/qdeclarativegridview/data/footer.qml b/tests/auto/declarative/qdeclarativegridview/data/footer.qml new file mode 100644 index 0000000..170b2b5 --- /dev/null +++ b/tests/auto/declarative/qdeclarativegridview/data/footer.qml @@ -0,0 +1,32 @@ +import Qt 4.7 + +Rectangle { + width: 240 + height: 320 + color: "#ffffff" + Component { + id: myDelegate + Rectangle { + id: wrapper + objectName: "wrapper" + width: 80 + height: 60 + border.color: "blue" + Text { + text: index + } + color: GridView.isCurrentItem ? "lightsteelblue" : "white" + } + } + GridView { + id: grid + objectName: "grid" + width: 240 + height: 320 + cellWidth: 80 + cellHeight: 60 + model: testModel + delegate: myDelegate + footer: Text { objectName: "footer"; text: "Footer"; height: 30 } + } +} diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index a67c56f..1a28b71 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -81,6 +81,7 @@ private slots: void enforceRange(); void QTBUG_8456(); void manualHighlight(); + void footer(); private: QDeclarativeView *createView(); @@ -147,6 +148,14 @@ public: emit dataChanged(index(idx,0), index(idx,0)); } + void clear() { + int count = list.count(); + emit beginRemoveRows(QModelIndex(), 0, count-1); + list.clear(); + emit endRemoveRows(); + } + + private: QList<QPair<QString,QString> > list; }; @@ -1162,6 +1171,38 @@ void tst_QDeclarativeGridView::manualHighlight() QTRY_COMPARE(gridview->highlightItem()->x(), gridview->currentItem()->x()); } +void tst_QDeclarativeGridView::footer() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 7; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/footer.qml")); + qApp->processEvents(); + + QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid"); + QTRY_VERIFY(gridview != 0); + + QDeclarativeItem *contentItem = gridview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeText *footer = findItem<QDeclarativeText>(contentItem, "footer"); + QVERIFY(footer); + + QCOMPARE(footer->y(), 180.0); + + model.removeItem(2); + QTRY_COMPARE(footer->y(), 120.0); + + model.clear(); + QTRY_COMPARE(footer->y(), 0.0); +} + QDeclarativeView *tst_QDeclarativeGridView::createView() { diff --git a/tests/auto/declarative/qdeclarativelistview/data/footer.qml b/tests/auto/declarative/qdeclarativelistview/data/footer.qml new file mode 100644 index 0000000..11cbe16 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/data/footer.qml @@ -0,0 +1,30 @@ +import Qt 4.7 + +Rectangle { + width: 240 + height: 320 + color: "#ffffff" + Component { + id: myDelegate + Rectangle { + id: wrapper + objectName: "wrapper" + height: 20 + width: 240 + Text { + text: index + } + color: ListView.isCurrentItem ? "lightsteelblue" : "white" + } + } + ListView { + id: list + objectName: "list" + focus: true + width: 240 + height: 320 + model: testModel + delegate: myDelegate + footer: Text { objectName: "footer"; text: "Footer"; height: 30 } + } +} diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index e13bd94..9c24e03 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -97,6 +97,7 @@ private slots: void QTBUG_9791(); void manualHighlight(); void QTBUG_11105(); + void footer(); private: template <class T> void items(); @@ -1558,6 +1559,37 @@ void tst_QDeclarativeListView::QTBUG_11105() delete canvas; } +void tst_QDeclarativeListView::footer() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 3; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/footer.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = findItem<QDeclarativeListView>(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeText *footer = findItem<QDeclarativeText>(contentItem, "footer"); + QVERIFY(footer); + QCOMPARE(footer->y(), 60.0); + + model.removeItem(1); + QTRY_COMPARE(footer->y(), 40.0); + + model.clear(); + QTRY_COMPARE(footer->y(), 0.0); +} + void tst_QDeclarativeListView::qListModelInterface_items() { items<TestModel>(); -- cgit v0.12 From 855bc9b8e446982ab04fe4c4073b7c66821110be Mon Sep 17 00:00:00 2001 From: Yoann Lopes <yoann.lopes@nokia.com> Date: Tue, 13 Jul 2010 14:21:44 +0200 Subject: Fixes QGraphicsItem::focusItem() returning incorrect value. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When setting focus on an item, subfocus chain was previously updated only for items with a common ancestor. We now make sure that this chain is updated also for the previously focused item (possibly not sharing any common ancestor with the newly focused item). Autotest included. Task-number: QTBUG-12112 Reviewed-by: Alexis Ménard <alexis.menard@nokia.com> (cherry picked from commit b5b011a181bd187dcef5ee8f46a3ac2c5dc2e09c) --- src/gui/graphicsview/qgraphicsitem.cpp | 6 ++++-- tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 27 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 51dc543..5c444f1 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -3257,6 +3257,8 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim } // Update the child focus chain. + if (scene && scene->focusItem()) + scene->focusItem()->d_ptr->clearSubFocus(); f->d_ptr->setSubFocus(); // Update the scene's focus item. @@ -7634,9 +7636,9 @@ int QGraphicsItemPrivate::children_count(QDeclarativeListProperty<QGraphicsObjec QGraphicsObject *QGraphicsItemPrivate::children_at(QDeclarativeListProperty<QGraphicsObject> *list, int index) { QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(list->object)); - if (index >= 0 && index < d->children.count()) + if (index >= 0 && index < d->children.count()) return d->children.at(index)->toGraphicsObject(); - else + else return 0; } diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 31a6845..5a302b1 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -462,6 +462,7 @@ private slots: void sortItemsWhileAdding(); void doNotMarkFullUpdateIfNotInScene(); void itemDiesDuringDraggingOperation(); + void QTBUG_12112_focusItem(); private: QList<QGraphicsItem *> paintedItems; @@ -10675,5 +10676,31 @@ void tst_QGraphicsItem::itemDiesDuringDraggingOperation() delete item; QVERIFY(QGraphicsScenePrivate::get(&scene)->dragDropItem == 0); } + +void tst_QGraphicsItem::QTBUG_12112_focusItem() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + QGraphicsRectItem *item1 = new QGraphicsRectItem(0, 0, 20, 20); + item1->setFlag(QGraphicsItem::ItemIsFocusable); + QGraphicsRectItem *item2 = new QGraphicsRectItem(20, 20, 20, 20); + item2->setFlag(QGraphicsItem::ItemIsFocusable); + item1->setFocus(); + scene.addItem(item2); + scene.addItem(item1); + + view.show(); + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(QApplication::activeWindow(), (QWidget *)&view); + + QVERIFY(item1->focusItem()); + QVERIFY(!item2->focusItem()); + + item2->setFocus(); + QVERIFY(!item1->focusItem()); + QVERIFY(item2->focusItem()); +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc" -- cgit v0.12 From dd529528112f174f12ebe39903ad15655d0fcf90 Mon Sep 17 00:00:00 2001 From: Yoann Lopes <yoann.lopes@nokia.com> Date: Fri, 9 Jul 2010 16:28:18 +0200 Subject: Fixes crash in QGraphicsScene::addItem(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Crashed because tabFocusFirst could end up being a dangling pointer when removing an item from the scene before deleting it. When setting tabFocusFirst in fixFocusChainBeforeReparenting, we now check that the item is in the scene. If it is not, tabFocusFirst is set to 0. Autotest included. Task-number: QTBUG-12056 Reviewed-by: Alexis Ménard <alexis.menard@nokia.com> (cherry picked from commit 7d09f690d5b4c56699092444665d1879deb86a6e) --- src/gui/graphicsview/qgraphicswidget_p.cpp | 4 ++-- tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/gui/graphicsview/qgraphicswidget_p.cpp b/src/gui/graphicsview/qgraphicswidget_p.cpp index 28070da..f7850ca 100644 --- a/src/gui/graphicsview/qgraphicswidget_p.cpp +++ b/src/gui/graphicsview/qgraphicswidget_p.cpp @@ -761,7 +761,7 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new QGraphicsWidget *firstOld = 0; bool wasPreviousNew = true; - + while (w != q) { bool isCurrentNew = q->isAncestorOf(w); if (isCurrentNew) { @@ -796,7 +796,7 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new newScene = newParent->scene(); if (oldScene && newScene != oldScene) - oldScene->d_func()->tabFocusFirst = firstOld; + oldScene->d_func()->tabFocusFirst = (firstOld && firstOld->scene() == oldScene) ? firstOld : 0; QGraphicsItem *topLevelItem = newParent ? newParent->topLevelItem() : 0; QGraphicsWidget *topLevel = 0; diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index ed8ff04..a771332 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -176,6 +176,7 @@ private slots: void task243004_setStyleCrash(); void task250119_shortcutContext(); void QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems(); + void QT_BUG_12056_tabFocusFirstUnsetWhenRemovingItems(); }; @@ -3089,6 +3090,25 @@ void tst_QGraphicsWidget::QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems() //This should not crash } +void tst_QGraphicsWidget::QT_BUG_12056_tabFocusFirstUnsetWhenRemovingItems() +{ + QGraphicsScene scene; + QGraphicsWidget* item1 = new QGraphicsWidget; + QGraphicsWidget* item2 = new QGraphicsWidget; + QGraphicsWidget* item3 = new QGraphicsWidget; + + scene.addItem(item1); + scene.addItem(item2); + + scene.removeItem(item2); + scene.removeItem(item1); + delete item2; + delete item1; + + scene.addItem(item3); + + //This should not crash +} QTEST_MAIN(tst_QGraphicsWidget) #include "tst_qgraphicswidget.moc" -- cgit v0.12 From 9106ee74b071b683b38dcf40bf6a3d722d78e647 Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Wed, 14 Jul 2010 15:03:35 +1000 Subject: Finish QML for Qt Programmers section I don't think I kept the same style as the rest of the section, so this may need to be refactored a little. But it's not incomplete anymore, content-wise. Task-number: QTBUG-11918 (cherry picked from commit 2ba0dfd82a3d82e98a70aeda3b142e0a870eeb0d) --- doc/src/declarative/qtprogrammers.qdoc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/doc/src/declarative/qtprogrammers.qdoc b/doc/src/declarative/qtprogrammers.qdoc index ae54d58..68d56bf 100644 --- a/doc/src/declarative/qtprogrammers.qdoc +++ b/doc/src/declarative/qtprogrammers.qdoc @@ -27,8 +27,6 @@ /*! - INCOMPLETE - \page qtprogrammers.html \target qtprogrammers \title QML for Qt programmers @@ -146,4 +144,14 @@ transition from an arbitrary Text item, or characters within a Text item, so you item would need to be sufficiently flexible to allow such animation. \section1 QML Items Compared With QGraphicsWidgets + +The main difference between QML items and QGraphicsWidgets is how they are intended to be used. The technical implementation details are much the same, but in practice they are different because QML items are made for declarative and compositional use, and QGraphicsWidgets are made for imperative and more integrated use. Both QML items and QGraphicsWidgets inherit from QGraphicsObject, and can co-exist. The differences are in the layouting system and the interfacing with other components. Note that, as QGraphicsWidgets tend more to be all-in-one packages, the equivalent of a QGraphicsWidget may be many QML items composed across several QML files, but it can still be loaded and used as a single QGraphicsObject from C++. + +QGraphicsWidgets are usually designed to be laid out with QGraphicsLayouts. QML does not use QGraphicsLayouts, as the Qt layouts do not mix well with animated and fluid UIs, so the geometry interface is one of the main differences. When writing QML elements, you allow the designers to place their bounding rectangle using absolute geometry, bindings or anchors (all setup for you when you inherit QDeclarativeItem) and you do not use layouts or size hints. If size hints are appropriate, then place them in the QML documentation so that the designers know how to use the item best, but still have complete control over the look and feel. + +The other main difference is that QGraphicsWidgets tend to follow the widget model, in that they are a self-contained bundle of UI and logic. In contrast, QML primitives are usually a single purpose item that does not fulfill a use case on its own, but is composed into the equivalent of the widget inside the QML file. So when writing QML Items, try to avoid doing UI logic or composing visual elements inside the items. Try instead to write more general purpose primitives, so that the look and feel (which involves the UI logic) can be written in QML. + +Both differences are caused by the different method of interaction. QGraphicsWidget is a QGraphicsObject subclass which makes fluid UI development from C++ easier, and QDeclarativeItem is a QGraphicsObject subclass which makes fluid UI development from QML easier. The difference therefore is primarily one of the interface exposed, and the design of the items that come with it (the Declarative primitives for QML and the nothing for QGraphicsWidget, because you need to write your own UI logic into the subclass). + +If you wish to use both QML and C++ to write the UI, for example to ease the transition period, it is recommended to use QDeclarativeItem subclasses (although you can use QGraphicsWidgets as well). To allow for easier use from C++ make the root item of each C++ component a LayoutItem, and load individual 'widgets' of QML (possibly comprised of multiple files, and containing a self-contained bundle of UI and logic) into your scene to replace individual QGraphicsWidgets one at a time. */ -- cgit v0.12 From 7fa2c9f5b53e57b0adb50f765805935c19ec703f Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Wed, 14 Jul 2010 15:05:02 +1000 Subject: Clean up particle motion documentation Task-number: QTBUG-11917 (cherry picked from commit 2d4876330e292253a9133b0197e573097ecfa5bb) --- src/imports/particles/qdeclarativeparticles.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/imports/particles/qdeclarativeparticles.cpp b/src/imports/particles/qdeclarativeparticles.cpp index a7c445d..64cd1e1 100644 --- a/src/imports/particles/qdeclarativeparticles.cpp +++ b/src/imports/particles/qdeclarativeparticles.cpp @@ -158,6 +158,11 @@ void QDeclarativeParticleMotion::destroy(QDeclarativeParticle &particle) \brief The ParticleMotionLinear object moves particles linearly. \sa Particles + + This is the default motion, and moves the particles according to the + properties specified in the Particles element. + + It has no further properties. */ /*! @@ -178,6 +183,13 @@ void QDeclarativeParticleMotionLinear::advance(QDeclarativeParticle &p, int inte \since 4.7 \brief The ParticleMotionGravity object moves particles towards a point. + This motion attracts the particles to the specified point with the specified acceleration. + To mimic earth gravity, set yattractor to -6360000 and acceleration to 9.8. + + The defaults are all 0, not earth gravity, and so no motion will occur without setting + at least the acceleration property. + + \sa Particles */ @@ -186,6 +198,7 @@ void QDeclarativeParticleMotionLinear::advance(QDeclarativeParticle &p, int inte \class QDeclarativeParticleMotionGravity \ingroup group_effects \brief The QDeclarativeParticleMotionGravity class moves the particles towards a point. + */ /*! @@ -305,14 +318,14 @@ Rectangle { */ /*! - \qmlproperty real QDeclarativeParticleMotionWander::xvariance - \qmlproperty real QDeclarativeParticleMotionWander::yvariance + \qmlproperty real ParticleMotionWander::xvariance + \qmlproperty real ParticleMotionWander::yvariance These properties set the amount to wander in the x and y directions. */ /*! - \qmlproperty real QDeclarativeParticleMotionWander::pace + \qmlproperty real ParticleMotionWander::pace This property holds how quickly the paricles will move from side to side. */ -- cgit v0.12 From 3d982368945fbbf5c3b5a1846c32292e3e9b6ab4 Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Wed, 14 Jul 2010 15:02:33 +1000 Subject: Distinguish Qt Quick, Qt Declarative and QML on the landing page Task-number: QTBUG-11916 (cherry picked from commit d7a1e01e9970bef56f647873bb2a3496893b775a) --- doc/src/declarative/declarativeui.qdoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 4235c27..e9a039b 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -37,7 +37,9 @@ custom user interfaces from a rich set of \l {QML Elements}{QML elements}. Qt Quick helps programmers and designers collaborate to build the fluid user interfaces that are becoming common in portable consumer devices, such as mobile phones, media players, set-top boxes -and netbooks. +and netbooks. Qt Quick consists of the QtDeclarative C++ module, QML, and +the integration of both of these into the Qt Creator IDE. Using the QtDeclarative +C++ module, you can load and interact with QML files from your Qt application. QML is an extension to \l {http://www.ecma-international.org/publications/standards/Ecma-262.htm} @@ -58,7 +60,7 @@ complete internet-enabled applications like a \l Qt Quick builds on \l {QML for Qt programmers}{Qt's existing strengths}. QML can be be used to incrementally extend an existing application or to build completely new applications. QML is fully \l -{Extending QML in C++}{extensible from C++}. +{Extending QML in C++}{extensible from C++} through the QtDeclarative Module. \section1 Getting Started -- cgit v0.12 From d5e9a275ce6af16ef78f85463aa0bbaf11131490 Mon Sep 17 00:00:00 2001 From: Lasse Holmstedt <lasse.holmstedt@nokia.com> Date: Fri, 9 Jul 2010 11:37:48 +0200 Subject: Resetting bindings through debugger interface Reviewed-by: Aaron Kennedy (cherry picked from commit e55781212532e2abcdd1cef8548b146fb14f0713) --- src/declarative/debugger/qdeclarativedebug.cpp | 15 ++++++++++++++ src/declarative/debugger/qdeclarativedebug_p.h | 1 + src/declarative/qml/qdeclarativeenginedebug.cpp | 27 +++++++++++++++++++++++++ src/declarative/qml/qdeclarativeenginedebug_p.h | 1 + 4 files changed, 44 insertions(+) diff --git a/src/declarative/debugger/qdeclarativedebug.cpp b/src/declarative/debugger/qdeclarativedebug.cpp index 0c0cf2e..b950aef 100644 --- a/src/declarative/debugger/qdeclarativedebug.cpp +++ b/src/declarative/debugger/qdeclarativedebug.cpp @@ -579,6 +579,21 @@ bool QDeclarativeEngineDebug::setBindingForObject(int objectDebugId, const QStri } } +bool QDeclarativeEngineDebug::resetBindingForObject(int objectDebugId, const QString &propertyName) +{ + Q_D(QDeclarativeEngineDebug); + + if (d->client->isConnected() && objectDebugId != -1) { + QByteArray message; + QDataStream ds(&message, QIODevice::WriteOnly); + ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName; + d->client->sendMessage(message); + return true; + } else { + return false; + } +} + bool QDeclarativeEngineDebug::setMethodBody(int objectDebugId, const QString &methodName, const QString &methodBody) { diff --git a/src/declarative/debugger/qdeclarativedebug_p.h b/src/declarative/debugger/qdeclarativedebug_p.h index 9c38184..2e79c5d 100644 --- a/src/declarative/debugger/qdeclarativedebug_p.h +++ b/src/declarative/debugger/qdeclarativedebug_p.h @@ -96,6 +96,7 @@ public: QObject *parent = 0); bool setBindingForObject(int objectDebugId, const QString &propertyName, const QVariant &bindingExpression, bool isLiteralValue); + bool resetBindingForObject(int objectDebugId, const QString &propertyName); bool setMethodBody(int objectDebugId, const QString &methodName, const QString &methodBody); private: diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp index acd7ab6..001da46 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/qml/qdeclarativeenginedebug.cpp @@ -461,6 +461,11 @@ void QDeclarativeEngineDebugServer::messageReceived(const QByteArray &message) bool isLiteralValue; ds >> objectId >> propertyName >> expr >> isLiteralValue; setBinding(objectId, propertyName, expr, isLiteralValue); + } else if (type == "RESET_BINDING") { + int objectId; + QString propertyName; + ds >> objectId >> propertyName; + resetBinding(objectId, propertyName); } else if (type == "SET_METHOD_BODY") { int objectId; QString methodName; @@ -502,6 +507,28 @@ void QDeclarativeEngineDebugServer::setBinding(int objectId, } } +void QDeclarativeEngineDebugServer::resetBinding(int objectId, const QString &propertyName) +{ + QObject *object = objectForId(objectId); + QDeclarativeContext *context = qmlContext(object); + + if (object && context) { + if (object->property(propertyName.toLatin1()).isValid()) { + QDeclarativeProperty property(object, propertyName); + QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(property); + if (oldBinding) { + QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(property, 0); + if (oldBinding) + oldBinding->destroy(); + } else { + if (property.isResettable()) { + property.reset(); + } + } + } + } +} + void QDeclarativeEngineDebugServer::setMethodBody(int objectId, const QString &method, const QString &body) { QObject *object = objectForId(objectId); diff --git a/src/declarative/qml/qdeclarativeenginedebug_p.h b/src/declarative/qml/qdeclarativeenginedebug_p.h index ce6df0d..ea35b40 100644 --- a/src/declarative/qml/qdeclarativeenginedebug_p.h +++ b/src/declarative/qml/qdeclarativeenginedebug_p.h @@ -108,6 +108,7 @@ private: QDeclarativeObjectProperty propertyData(QObject *, int); QVariant valueContents(const QVariant &defaultValue) const; void setBinding(int objectId, const QString &propertyName, const QVariant &expression, bool isLiteralValue); + void resetBinding(int objectId, const QString &propertyName); void setMethodBody(int objectId, const QString &method, const QString &body); static QList<QDeclarativeEngine *> m_engines; -- cgit v0.12 From 0e037a832f7015117b9a9ef169b0308c64498e37 Mon Sep 17 00:00:00 2001 From: Lasse Holmstedt <lasse.holmstedt@nokia.com> Date: Wed, 14 Jul 2010 11:31:11 +0200 Subject: Added symbian defs for e55781212532e2abcdd1cef8548b146fb14f0713 Reviewed-by: Jason McDonald Submitted-by: Alessandro Portale (cherry picked from commit 9c68bdf3ed66564bce3064a49ca80b7889c35952) --- src/s60installs/bwins/QtDeclarativeu.def | 1 + src/s60installs/eabi/QtDeclarativeu.def | 1 + 2 files changed, 2 insertions(+) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index e96f83f..8fdd72c 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -1675,4 +1675,5 @@ EXPORTS ?setBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@ABVQVariant@@_N@Z @ 1674 NONAME ; bool QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool) ??0QDeclarativeImageProvider@@QAE@W4ImageType@0@@Z @ 1675 NONAME ; QDeclarativeImageProvider::QDeclarativeImageProvider(enum QDeclarativeImageProvider::ImageType) ?setMethodBody@QDeclarativeEngineDebug@@QAE_NHABVQString@@0@Z @ 1676 NONAME ; bool QDeclarativeEngineDebug::setMethodBody(int, class QString const &, class QString const &) + ?resetBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@@Z @ 1677 NONAME ; bool QDeclarativeEngineDebug::resetBindingForObject(int, class QString const &) diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 083e07f..dd5103f 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -1706,4 +1706,5 @@ EXPORTS _ZN25QDeclarativeImageProviderC1ENS_9ImageTypeE @ 1705 NONAME _ZN25QDeclarativeImageProviderC2ENS_9ImageTypeE @ 1706 NONAME _ZNK25QDeclarativeImageProvider9imageTypeEv @ 1707 NONAME + _ZN23QDeclarativeEngineDebug21resetBindingForObjectEiRK7QString @ 1708 NONAME -- cgit v0.12 From 29b2afa8d6689b96c185a779fa8353c1018dc0a7 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Thu, 15 Jul 2010 12:18:58 +1000 Subject: Performance docs. (cherry picked from commit adbdb6c4b52d72e77d1cb4ff23573e957a7c9e14) --- doc/src/declarative/qdeclarativeperformance.qdoc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc/src/declarative/qdeclarativeperformance.qdoc b/doc/src/declarative/qdeclarativeperformance.qdoc index 26c1e89..be8c029 100644 --- a/doc/src/declarative/qdeclarativeperformance.qdoc +++ b/doc/src/declarative/qdeclarativeperformance.qdoc @@ -115,4 +115,25 @@ provide an image that includes the frame and the shadow. Avoid running JavaScript during animation. For example, running a complex JavaScript expression for each frame of an x property animation. +\section1 Rendering + +Often using a different graphics system will give superior performance to the native +graphics system (this is especially the case on X11). This can be configured using +QApplication::setGraphicsSystem() or via the command line using the \c -graphicssystem +switch. + +You can enable OpenGL acceleration using the \c opengl graphics system, or by setting a +QGLWidget as the viewport of your QDeclarativeView. + +You may need to try various options to find what works the best for your application. +For embedded X11-based devices one recommended combination is to use the raster graphics +system with a QGLWidget for the viewport. While this doesn't guarantee the \bold fastest +performance for all use-cases, it typically has \bold{consistently good} performance for +all use-cases. In contrast, only using the raster paint engine may result in very good +performance for parts of your application and very poor performance elsewhere. + +The QML Viewer uses the raster graphics system by default for X11 and OS X. It also +includes a \c -opengl command line option which sets a QGLWidget as the viewport of the +view. On OS X, a QGLWidget is always used. + */ -- cgit v0.12 From aea1b6326d598b07a283a02863864850ac76d283 Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen <andreas.hanssen@tandberg.com> Date: Wed, 14 Jul 2010 12:02:08 +0200 Subject: Work around memory leak issue in grid and linear layouts. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These classes create a new QWidget and assign it to a static pointer which is never cleaned up. Using Q_GLOBAL_STATIC ensures that they are deleted on library unload. This is really just a cosmetic change that removes a leak warning - the real fix should be to find a way to not use a new QWidget like this. It seems odd that QGraphicsLayouts, which don't use QWidget in any other way, should depend on QWidget like this. Task-number: QTBUG-10768 Merge-request: 741 Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com> (cherry picked from commit ea6a5146397b668bf535ee7249bd4262d6185234) --- src/gui/graphicsview/qgraphicsgridlayout.cpp | 7 +++---- src/gui/graphicsview/qgraphicslinearlayout.cpp | 7 +++---- tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp | 7 +++++++ tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp | 7 +++++++ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsgridlayout.cpp b/src/gui/graphicsview/qgraphicsgridlayout.cpp index 83db3ec..062b5ac 100644 --- a/src/gui/graphicsview/qgraphicsgridlayout.cpp +++ b/src/gui/graphicsview/qgraphicsgridlayout.cpp @@ -94,14 +94,13 @@ public: #endif }; +Q_GLOBAL_STATIC(QWidget, globalStyleInfoWidget); + QLayoutStyleInfo QGraphicsGridLayoutPrivate::styleInfo() const { - static QWidget *wid = 0; - if (!wid) - wid = new QWidget; QGraphicsItem *item = parentItem(); QStyle *style = (item && item->isWidget()) ? static_cast<QGraphicsWidget*>(item)->style() : QApplication::style(); - return QLayoutStyleInfo(style, wid); + return QLayoutStyleInfo(style, globalStyleInfoWidget()); } /*! diff --git a/src/gui/graphicsview/qgraphicslinearlayout.cpp b/src/gui/graphicsview/qgraphicslinearlayout.cpp index b828722..37408ef 100644 --- a/src/gui/graphicsview/qgraphicslinearlayout.cpp +++ b/src/gui/graphicsview/qgraphicslinearlayout.cpp @@ -171,14 +171,13 @@ int QGraphicsLinearLayoutPrivate::gridColumn(int index) const return int(qMin(uint(index), uint(engine.columnCount()))); } +Q_GLOBAL_STATIC(QWidget, globalStyleInfoWidget) + QLayoutStyleInfo QGraphicsLinearLayoutPrivate::styleInfo() const { - static QWidget *wid = 0; - if (!wid) - wid = new QWidget; QGraphicsItem *item = parentItem(); QStyle *style = (item && item->isWidget()) ? static_cast<QGraphicsWidget*>(item)->style() : QApplication::style(); - return QLayoutStyleInfo(style, wid); + return QLayoutStyleInfo(style, globalStyleInfoWidget()); } /*! diff --git a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp index b9a5c66..d1d6860 100644 --- a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp +++ b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp @@ -105,6 +105,7 @@ private slots: void geometries_data(); void geometries(); void avoidRecursionInInsertItem(); + void styleInfoLeak(); void task236367_maxSizeHint(); }; @@ -2196,6 +2197,12 @@ void tst_QGraphicsGridLayout::avoidRecursionInInsertItem() QCOMPARE(layout->count(), 0); } +void tst_QGraphicsGridLayout::styleInfoLeak() +{ + QGraphicsGridLayout grid; + grid.horizontalSpacing(); +} + void tst_QGraphicsGridLayout::task236367_maxSizeHint() { QGraphicsWidget *widget = new QGraphicsWidget; diff --git a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index c26e5d4..6107fa1 100644 --- a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -102,6 +102,7 @@ private slots: void layoutDirection(); void removeLayout(); void avoidRecursionInInsertItem(); + void styleInfoLeak(); // Task specific tests void task218400_insertStretchCrash(); @@ -1443,6 +1444,12 @@ void tst_QGraphicsLinearLayout::avoidRecursionInInsertItem() QCOMPARE(layout->count(), 0); } +void tst_QGraphicsLinearLayout::styleInfoLeak() +{ + QGraphicsLinearLayout layout; + layout.spacing(); +} + void tst_QGraphicsLinearLayout::task218400_insertStretchCrash() { QGraphicsScene *scene = new QGraphicsScene; -- cgit v0.12 From 734d4aff280f7f272a6abe8ed02fe95e2a1b4e6d Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Wed, 14 Jul 2010 18:35:09 +0200 Subject: Compile with QT_NO_DEBUG_STREAM Task-number: QTBUG-11510 (cherry picked from commit 4e2eb2945dbc3865e2901f12d663ed89e8f0dfbf) --- src/gui/styles/qstyle.cpp | 4 ++-- src/gui/styles/qstyle.h | 2 ++ src/gui/styles/qstyleoption.cpp | 6 ++---- src/gui/styles/qstyleoption.h | 2 ++ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index 4cfa93f..676483e 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -2421,9 +2421,9 @@ QT_BEGIN_INCLUDE_NAMESPACE #include <QDebug> QT_END_INCLUDE_NAMESPACE +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, QStyle::State state) { -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) debug << "QStyle::State("; QStringList states; @@ -2455,9 +2455,9 @@ QDebug operator<<(QDebug debug, QStyle::State state) qSort(states); debug << states.join(QLatin1String(" | ")); debug << ')'; -#endif return debug; } +#endif /*! \since 4.6 diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index 439d626..1ee262d 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -878,7 +878,9 @@ private: Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::SubControls) +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, QStyle::State state); +#endif QT_END_NAMESPACE diff --git a/src/gui/styles/qstyleoption.cpp b/src/gui/styles/qstyleoption.cpp index c057a2b..eeab316 100644 --- a/src/gui/styles/qstyleoption.cpp +++ b/src/gui/styles/qstyleoption.cpp @@ -5419,9 +5419,9 @@ QStyleHintReturnVariant::QStyleHintReturnVariant() : QStyleHintReturn(Version, T Returns a T or 0 depending on the type of \a hint. */ +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) { -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) switch (optionType) { case QStyleOption::SO_Default: debug << "SO_Default"; break; @@ -5482,21 +5482,19 @@ QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) case QStyleOption::SO_GraphicsItem: debug << "SO_GraphicsItem"; break; } -#endif return debug; } QDebug operator<<(QDebug debug, const QStyleOption &option) { -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) debug << "QStyleOption("; debug << QStyleOption::OptionType(option.type); debug << ',' << (option.direction == Qt::RightToLeft ? "RightToLeft" : "LeftToRight"); debug << ',' << option.state; debug << ',' << option.rect; debug << ')'; -#endif return debug; } +#endif QT_END_NAMESPACE diff --git a/src/gui/styles/qstyleoption.h b/src/gui/styles/qstyleoption.h index 95de8d5..005b36a 100644 --- a/src/gui/styles/qstyleoption.h +++ b/src/gui/styles/qstyleoption.h @@ -958,8 +958,10 @@ T qstyleoption_cast(QStyleHintReturn *hint) return 0; } +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType); Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option); +#endif QT_END_NAMESPACE -- cgit v0.12 From dd09ed5a8f25df96296bab083b587ae6d3412340 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Wed, 14 Jul 2010 08:38:04 +0200 Subject: Fixed install docs for Qt for Symbian on Linux. (cherry picked from commit 920980c77269325cc94efd2ff10347bd2745736d) --- doc/src/snippets/code/doc_src_installation.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/snippets/code/doc_src_installation.qdoc b/doc/src/snippets/code/doc_src_installation.qdoc index 985f3da..c46159c 100644 --- a/doc/src/snippets/code/doc_src_installation.qdoc +++ b/doc/src/snippets/code/doc_src_installation.qdoc @@ -263,7 +263,7 @@ make //! [40] //! [41] -cd src/s60installs +cd src make sis //! [41] -- cgit v0.12 From 0691f8d06f46212fedb4748d04c5e55f5f76f50b Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Wed, 14 Jul 2010 08:38:30 +0200 Subject: Removed README.s60-mkspec. The instructions are old, and should now be found in the qdoc docs. (cherry picked from commit dcfa4125625c028165c424b5d95cb0795194d6f2) --- README.s60-mkspec | 99 ------------------------------------------------------- 1 file changed, 99 deletions(-) delete mode 100644 README.s60-mkspec diff --git a/README.s60-mkspec b/README.s60-mkspec deleted file mode 100644 index af500e1..0000000 --- a/README.s60-mkspec +++ /dev/null @@ -1,99 +0,0 @@ -How to build Qt for Symbian using the Linux makespec. - -Prerequisites: - - - Working RVCT 2.2 native Linux compiler. The new publicly - available RVCT 4.0 compiler may work, but it hasn't been tested - yet. - - - A working GnuPoc environment. See this page for details: - http://www.martin.st/symbian/ - Download the latest version, unpack it and run the 'install_eka2_tools' script as - described in the last part under the EKA2 part. The part about the your own gcc - are not needed as we use the rvct compiler. - Make sure you do the part about Wine setup as well. - - - Anderson Lizardo's patches for GnuPoc. Look for the - qt_s60_gnupoc_v10.patch on this page: - http://lizardo.wordpress.com/2009/09/24/installing-qt-for-s60-daily-snapshots-on-linux/ - and carry out the instructions under point 8: Installing Open C. - -Compiling: - - 1. First a few environment variables need to be set: - - export RVCT22LIB=<rvct-dir>/lib/armlib - export EPOCROOT=<s60-root> - export PATH=$PATH:<s60-root>/epoc32/tools:<rvctInstallDir>/bin - export PATH=$PATH:<qt-root>/bin - - Replace the s60-root with the installation directory of your SDK, - and the qt-root with the root of your Qt repository. - These are good candidates for putting in a script somewhere. - - 2. Run configure. It needs a bit more switches than usual, so here's - the full line: - - ./configure -developer-build -platform linux-g++ -xplatform \ - symbian/linux-armcc -little-endian -host-little-endian \ - -arch symbian - - 3. Compile Qt - - cd src - make - - and then wait for a while. - - 4. Package and install Qt - - cd s60installs - - Edit Qt_template.pkg and change the first 0x2xxxxxxx to - 0xExxxxxxx. Then execute: - - makesis Qt_template.pkg - signsis Qt_template.sis Qt_template.sisx selfsigned.cer selfsigned.key - - Then put Qt_template.sisx on a memory card and install it from - the phone file manager. - - Alternatively, you can use the runonphone tool found in the tools - directory of Qt. To build, this requires a separately configured - Qt installation for Linux, unfortunately. To use it, you also - need have App TRK running on the phone. At the time of writing, - only bleeding edge Linux kernels are able to autodetect the USB - serial port on the phone, but you can force detection by running: - - modprobe usbserial vendor=0xXXXX product=0xXXXX - - The XXXXs should be replaced with the two values listed for your - device when executing "lsusb". In most distributions, this will - lead to the creation of two devices: /dev/ttyUSB0 and - /dev/ttyUSB1. The latter is usually the one that App TRK responds - to. Then execute: - - runonphone -p /dev/ttyUSB1 -s Qt_template.sisx dummy.exe - - The dummy.exe argument is irrelevant, since we are not executing - anything yet. - - 5. Compile some helloworld application (I leave the details to you - ;-) - - qmake - make - - 6. Package, install and run application. - - makesis helloworld_template.pkg - signsis helloworld_template.sis helloworld_template.sisx \ - <QTDIR>/src/s60installs/selfsigned.cer \ - <QTDIR>/src/s60installs/selfsigned.key - - Then either install by memory card, or install and run like this: - - runonphone -p /dev/ttyUSB1 -s helloworld_template.sisx \ - helloworld.exe - - 7. Enjoy "hello world" on the phone! -- cgit v0.12 From ffaaede37750d4f9e4b978c9dd69f36aa23e1aef Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 9 Jul 2010 11:39:01 +0200 Subject: Add NTLMv2 authentication support to QAuthenticator. This also fixes a long-standing bug in handling usernames of type "domainname\username", typical of Windows domains, that didn't work with the previous NTLMv1 code. Patch by subcontractor. Task-number: QTBUG-9408, QTBUG-2421, QT-3248 Reviewed-By: Markus Goetz (cherry picked from commit 1b98fbd82c7145c2f81292f8a1feb6cac74e775d) --- src/network/kernel/qauthenticator.cpp | 286 +++++++++++++++++++++++++++++++++- 1 file changed, 279 insertions(+), 7 deletions(-) diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index e4023c8..e7442c0 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -50,6 +50,8 @@ #include <qdatastream.h> #include <qendian.h> #include <qstring.h> +#include <qdatetime.h> + QT_BEGIN_NAMESPACE @@ -162,7 +164,18 @@ QString QAuthenticator::user() const void QAuthenticator::setUser(const QString &user) { detach(); - d->user = user; + + int separatorPosn = 0; + separatorPosn = user.indexOf(QLatin1String("\\")); + + if (separatorPosn == -1) { + //No domain name present + d->user = user; + } else { + //domain name is present + d->realm = user.left(separatorPosn); + d->user = user.mid(separatorPosn+1); + } } /*! @@ -264,16 +277,17 @@ void QAuthenticatorPrivate::parseHttpResponse(const QHttpResponseHeader &header, switch(method) { case Basic: - realm = QString::fromLatin1(options.value("realm")); + if(realm.isEmpty()) + realm = QString::fromLatin1(options.value("realm")); if (user.isEmpty()) phase = Done; break; case Ntlm: // #### extract from header - realm.clear(); break; case DigestMd5: { - realm = QString::fromLatin1(options.value("realm")); + if(realm.isEmpty()) + realm = QString::fromLatin1(options.value("realm")); if (options.value("stale").toLower() == "true") phase = Start; if (user.isEmpty()) @@ -661,6 +675,20 @@ QByteArray QAuthenticatorPrivate::digestMd5Response(const QByteArray &challenge, */ #define NTLMSSP_NEGOTIATE_56 0x80000000 +/* + * AvId values + */ +#define AVTIMESTAMP 7 + +//#define NTLMV1_CLIENT + + +//************************Global variables*************************** + +const int blockSize = 64; //As per RFC2104 Block-size is 512 bits +const int nDigestLen = 16; //Trunctaion Length of the Hmac-Md5 digest +const quint8 respversion = 1; +const quint8 hirespversion = 1; /* usage: // fill up ctx with what we know. @@ -803,6 +831,7 @@ public: // extracted QString targetNameStr, targetInfoStr; + QByteArray targetInfoBuff; }; @@ -818,6 +847,7 @@ public: // extracted QByteArray lmResponseBuf, ntlmResponseBuf; QString domainStr, userStr, workstationStr, sessionKeyStr; + QByteArray v2Hash; }; @@ -899,7 +929,7 @@ static QString qStringFromUcs2Le(const QByteArray& src) return QString((const QChar *)src.data(), src.size()/2); } - +#ifdef NTLMV1_CLIENT static QByteArray qEncodeNtlmResponse(const QAuthenticatorPrivate *ctx, const QNtlmPhase2Block& ch) { QCryptographicHash md4(QCryptographicHash::Md4); @@ -941,7 +971,232 @@ static QByteArray qEncodeLmResponse(const QAuthenticatorPrivate *ctx, const QNtl hash.fill(0); return rc; } +#endif + +/********************************************************************* +* Function Name: qEncodeHmacMd5 +* Params: +* key: Type - QByteArray +* - It is the Authentication key +* message: Type - QByteArray +* - This is the actual message which will be encoded +* using HMacMd5 hash algorithm +* +* Return Value: +* hmacDigest: Type - QByteArray +* +* Description: +* This function will be used to encode the input message using +* HMacMd5 hash algorithm. +* +* As per the RFC2104 the HMacMd5 algorithm can be specified +* --------------------------------------- +* MD5(K XOR opad, MD5(K XOR ipad, text)) +* --------------------------------------- +* +*********************************************************************/ +QByteArray qEncodeHmacMd5(QByteArray &key, const QByteArray &message) +{ + Q_ASSERT_X(!(message.isEmpty()),"qEncodeHmacMd5", "Empty message check"); + Q_ASSERT_X(!(key.isEmpty()),"qEncodeHmacMd5", "Empty key check"); + + QCryptographicHash hash(QCryptographicHash::Md5); + QByteArray hMsg; + + QByteArray iKeyPad(blockSize, 0x36); + QByteArray oKeyPad(blockSize, 0x5c); + + hash.reset(); + // Adjust the key length to blockSize + + if(blockSize < key.length()) { + hash.addData(key); + key = hash.result(); //MD5 will always return 16 bytes length output + } + + //Key will be <= 16 or 20 bytes as hash function (MD5 or SHA hash algorithms) + //key size can be max of Block size only + key = key.leftJustified(blockSize,0,true); + + //iKeyPad, oKeyPad and key are all of same size "blockSize" + + //xor of iKeyPad with Key and store the result into iKeyPad + for(int i = 0; i<key.size();i++) { + iKeyPad[i] = key[i]^iKeyPad[i]; + } + + //xor of oKeyPad with Key and store the result into oKeyPad + for(int i = 0; i<key.size();i++) { + oKeyPad[i] = key[i]^oKeyPad[i]; + } + + iKeyPad.append(message); // (K0 xor ipad) || text + + hash.reset(); + hash.addData(iKeyPad); + hMsg = hash.result(); + //Digest gen after pass-1: H((K0 xor ipad)||text) + + QByteArray hmacDigest; + oKeyPad.append(hMsg); + hash.reset(); + hash.addData(oKeyPad); + hmacDigest = hash.result(); + // H((K0 xor opad )|| H((K0 xor ipad) || text)) + + /*hmacDigest should not be less than half the length of the HMAC output + (to match the birthday attack bound) and not less than 80 bits + (a suitable lower bound on the number of bits that need to be + predicted by an attacker). + Refer RFC 2104 for more details on truncation part */ + + /*MD5 hash always returns 16 byte digest only and HMAC-MD5 spec + (RFC 2104) also says digest length should be 16 bytes*/ + return hmacDigest; +} + +static QByteArray qCreatev2Hash(const QAuthenticatorPrivate *ctx, + QNtlmPhase3Block *phase3) +{ + Q_ASSERT(phase3 != 0); + // since v2 Hash is need for both NTLMv2 and LMv2 it is calculated + // only once and stored and reused + if(phase3->v2Hash.size() == 0) { + QCryptographicHash md4(QCryptographicHash::Md4); + QByteArray passUnicode = qStringAsUcs2Le(ctx->password); + md4.addData(passUnicode.data(), passUnicode.size()); + + QByteArray hashKey = md4.result(); + Q_ASSERT(hashKey.size() == 16); + // Assuming the user and domain is always unicode in challenge + QByteArray message = + qStringAsUcs2Le(ctx->user.toUpper()) + + qStringAsUcs2Le(ctx->realm); + + phase3->v2Hash = qEncodeHmacMd5(hashKey, message); + } + return phase3->v2Hash; +} + +static QByteArray clientChallenge(const QAuthenticatorPrivate *ctx) +{ + Q_ASSERT(ctx->cnonce.size() >= 8); + QByteArray clientCh = ctx->cnonce.right(8); + return clientCh; +} + +// caller has to ensure a valid targetInfoBuff +static bool qExtractServerTime(const QByteArray& targetInfoBuff, + quint64 *serverTime) +{ + Q_ASSERT(serverTime != 0); + bool retValue = false; + QDataStream ds(targetInfoBuff); + ds.setByteOrder(QDataStream::LittleEndian); + + quint16 avId; + quint16 avLen; + + ds >> avId; + ds >> avLen; + while(avId != 0) { + if(avId == AVTIMESTAMP) { + QByteArray timeArray(avLen, 0); + //avLen size of QByteArray is allocated + ds.readRawData(timeArray.data(), avLen); + bool ok; + *serverTime = timeArray.toHex().toLongLong(&ok, 16); + retValue = true; + break; + } + ds.skipRawData(avLen); + ds >> avId; + ds >> avLen; + } + return retValue; +} + +static QByteArray qEncodeNtlmv2Response(const QAuthenticatorPrivate *ctx, + const QNtlmPhase2Block& ch, + QNtlmPhase3Block *phase3) +{ + Q_ASSERT(phase3 != 0); + // return value stored in phase3 + qCreatev2Hash(ctx, phase3); + + QByteArray temp; + QDataStream ds(&temp, QIODevice::WriteOnly); + ds.setByteOrder(QDataStream::LittleEndian); + + ds << respversion; + ds << hirespversion; + + //Reserved + QByteArray reserved1(6, 0); + ds.writeRawData(reserved1.constData(), reserved1.size()); + + quint64 time = 0; + + //if server sends time, use it instead of current time + if(!(ch.targetInfo.len && qExtractServerTime(ch.targetInfoBuff, &time))) { + QDateTime currentTime(QDate::currentDate(), + QTime::currentTime(), Qt::UTC); + + // number of seconds between 1601 and epoc(1970) + // 369 years, 89 leap years + // ((369 * 365) + 89) * 24 * 3600 = 11644473600 + + time = Q_UINT64_C(currentTime.toTime_t() + 11644473600); + + // represented as 100 nano seconds + time = Q_UINT64_C(time * 10000000); + } + ds << time; + + //8 byte client challenge + QByteArray clientCh = clientChallenge(ctx); + ds.writeRawData(clientCh.constData(), clientCh.size()); + + //Reserved + QByteArray reserved2(4, 0); + ds.writeRawData(reserved2.constData(), reserved2.size()); + + if (ch.targetInfo.len > 0) { + ds.writeRawData(ch.targetInfoBuff.constData(), + ch.targetInfoBuff.size()); + } + + //Reserved + QByteArray reserved3(4, 0); + ds.writeRawData(reserved3.constData(), reserved3.size()); + + QByteArray message((const char*)ch.challenge, sizeof(ch.challenge)); + message.append(temp); + + QByteArray ntChallengeResp = qEncodeHmacMd5(phase3->v2Hash, message); + ntChallengeResp.append(temp); + + return ntChallengeResp; +} + +static QByteArray qEncodeLmv2Response(const QAuthenticatorPrivate *ctx, + const QNtlmPhase2Block& ch, + QNtlmPhase3Block *phase3) +{ + Q_ASSERT(phase3 != 0); + // return value stored in phase3 + qCreatev2Hash(ctx, phase3); + + QByteArray message((const char*)ch.challenge, sizeof(ch.challenge)); + QByteArray clientCh = clientChallenge(ctx); + message.append(clientCh); + + QByteArray lmChallengeResp = qEncodeHmacMd5(phase3->v2Hash, message); + lmChallengeResp.append(clientCh); + + return lmChallengeResp; +} static bool qNtlmDecodePhase2(const QByteArray& data, QNtlmPhase2Block& ch) { @@ -976,7 +1231,10 @@ static bool qNtlmDecodePhase2(const QByteArray& data, QNtlmPhase2Block& ch) } if (ch.targetInfo.len > 0) { - // UNUSED right now + if (ch.targetInfo.len + ch.targetInfo.offset > (unsigned)data.size()) + return false; + + ch.targetInfoBuff = data.mid(ch.targetInfo.offset, ch.targetInfo.len); } return true; @@ -996,7 +1254,8 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas bool unicode = ch.flags & NTLMSSP_NEGOTIATE_UNICODE; - ctx->realm = ch.targetNameStr; + if(ctx->realm.isEmpty()) + ctx->realm = ch.targetNameStr; pb.flags = NTLMSSP_NEGOTIATE_NTLM; if (unicode) @@ -1010,6 +1269,7 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas offset = qEncodeNtlmString(pb.domain, offset, ctx->realm, unicode); pb.domainStr = ctx->realm; + offset = qEncodeNtlmString(pb.user, offset, ctx->user, unicode); pb.userStr = ctx->user; @@ -1017,11 +1277,23 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas pb.workstationStr = ctx->workstation; // Get LM response +#ifdef NTLMV1_CLIENT pb.lmResponseBuf = qEncodeLmResponse(ctx, ch); +#else + if (ch.targetInfo.len > 0) { + pb.lmResponseBuf = QByteArray(); + } else { + pb.lmResponseBuf = qEncodeLmv2Response(ctx, ch, &pb); + } +#endif offset = qEncodeNtlmBuffer(pb.lmResponse, offset, pb.lmResponseBuf); // Get NTLM response +#ifdef NTLMV1_CLIENT pb.ntlmResponseBuf = qEncodeNtlmResponse(ctx, ch); +#else + pb.ntlmResponseBuf = qEncodeNtlmv2Response(ctx, ch, &pb); +#endif offset = qEncodeNtlmBuffer(pb.ntlmResponse, offset, pb.ntlmResponseBuf); -- cgit v0.12 From bf11d9223cc6948ed88848b5a51585df1a22d236 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 14 Jul 2010 13:23:56 +0200 Subject: Add a QAuthenticatorPrivate parsing for the headers without QHttpResponseHeader Reviewed-by: Markus Goetz (cherry picked from commit 367aa34cbcfa109926087e89d49f9223c1409d44) --- src/network/access/qhttpnetworkconnection.cpp | 9 ++----- src/network/kernel/qauthenticator.cpp | 39 ++++++++++++++++++--------- src/network/kernel/qauthenticator_p.h | 1 + 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 1afabec..9e2b85e 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -286,13 +286,8 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket resend = false; //create the response header to be used with QAuthenticatorPrivate. - QHttpResponseHeader responseHeader; QList<QPair<QByteArray, QByteArray> > fields = reply->header(); - QList<QPair<QByteArray, QByteArray> >::const_iterator it = fields.constBegin(); - while (it != fields.constEnd()) { - responseHeader.addValue(QString::fromLatin1(it->first), QString::fromUtf8(it->second)); - it++; - } + //find out the type of authentication protocol requested. QAuthenticatorPrivate::Method authMethod = reply->d_func()->authenticationMethod(isProxy); if (authMethod != QAuthenticatorPrivate::None) { @@ -310,7 +305,7 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket if (auth->isNull()) auth->detach(); QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(*auth); - priv->parseHttpResponse(responseHeader, isProxy); + priv->parseHttpResponse(fields, isProxy); if (priv->phase == QAuthenticatorPrivate::Done) { if ((isProxy && pendingProxyAuthSignal) ||(!isProxy && pendingAuthSignal)) { diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index e7442c0..0ea4fd4 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -241,7 +241,20 @@ QAuthenticatorPrivate::QAuthenticatorPrivate() #ifndef QT_NO_HTTP void QAuthenticatorPrivate::parseHttpResponse(const QHttpResponseHeader &header, bool isProxy) { - QList<QPair<QString, QString> > values = header.values(); + const QList<QPair<QString, QString> > values = header.values(); + QList<QPair<QByteArray, QByteArray> > rawValues; + + QList<QPair<QString, QString> >::const_iterator it, end; + for (it = values.constBegin(), end = values.constEnd(); it != end; ++it) + rawValues.append(qMakePair(it->first.toLatin1(), it->second.toUtf8())); + + // continue in byte array form + parseHttpResponse(rawValues, isProxy); +} +#endif + +void QAuthenticatorPrivate::parseHttpResponse(const QList<QPair<QByteArray, QByteArray> > &values, bool isProxy) +{ const char *search = isProxy ? "proxy-authenticate" : "www-authenticate"; method = None; @@ -255,24 +268,25 @@ void QAuthenticatorPrivate::parseHttpResponse(const QHttpResponseHeader &header, authentication parameters. */ - QString headerVal; + QByteArray headerVal; for (int i = 0; i < values.size(); ++i) { - const QPair<QString, QString> ¤t = values.at(i); - if (current.first.toLower() != QLatin1String(search)) + const QPair<QByteArray, QByteArray> ¤t = values.at(i); + if (current.first.toLower() != search) continue; - QString str = current.second; - if (method < Basic && str.startsWith(QLatin1String("Basic"), Qt::CaseInsensitive)) { - method = Basic; headerVal = str.mid(6); - } else if (method < Ntlm && str.startsWith(QLatin1String("NTLM"), Qt::CaseInsensitive)) { + QByteArray str = current.second.toLower(); + if (method < Basic && str.startsWith("basic")) { + method = Basic; + headerVal = current.second.mid(6); + } else if (method < Ntlm && str.startsWith("ntlm")) { method = Ntlm; - headerVal = str.mid(5); - } else if (method < DigestMd5 && str.startsWith(QLatin1String("Digest"), Qt::CaseInsensitive)) { + headerVal = current.second.mid(5); + } else if (method < DigestMd5 && str.startsWith("digest")) { method = DigestMd5; - headerVal = str.mid(7); + headerVal = current.second.mid(7); } } - challenge = headerVal.trimmed().toLatin1(); + challenge = headerVal.trimmed(); QHash<QByteArray, QByteArray> options = parseDigestAuthenticationChallenge(challenge); switch(method) { @@ -300,7 +314,6 @@ void QAuthenticatorPrivate::parseHttpResponse(const QHttpResponseHeader &header, phase = Invalid; } } -#endif QByteArray QAuthenticatorPrivate::calculateResponse(const QByteArray &requestMethod, const QByteArray &path) { diff --git a/src/network/kernel/qauthenticator_p.h b/src/network/kernel/qauthenticator_p.h index e9ce9ac..abb1cda 100644 --- a/src/network/kernel/qauthenticator_p.h +++ b/src/network/kernel/qauthenticator_p.h @@ -102,6 +102,7 @@ public: #ifndef QT_NO_HTTP void parseHttpResponse(const QHttpResponseHeader &, bool isProxy); #endif + void parseHttpResponse(const QList<QPair<QByteArray, QByteArray> >&, bool isProxy); }; -- cgit v0.12 From 977daf857c7e690c6c8b11e9e72e84963a004e66 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 14 Jul 2010 12:58:04 +0200 Subject: Expose the QAuthenticator map of options in the API. Task-number: QT-3573 Reviewed-By: Markus Goetz (cherry picked from commit 69027cdb2ab9b89673edf29d5034bed33e614a05) --- src/network/kernel/qauthenticator.cpp | 45 +++++++++++++++++++++++++++++++++-- src/network/kernel/qauthenticator.h | 5 ++++ src/network/kernel/qauthenticator_p.h | 3 ++- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index 0ea4fd4..ca8ec1c 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -140,7 +140,8 @@ bool QAuthenticator::operator==(const QAuthenticator &other) const return d->user == other.d->user && d->password == other.d->password && d->realm == other.d->realm - && d->method == other.d->method; + && d->method == other.d->method + && d->options == other.d->options; } /*! @@ -218,9 +219,49 @@ QString QAuthenticator::realm() const return d ? d->realm : QString(); } +/*! + \since 4.7 + Returns the value related to option \a opt if it was set by the server. + See \l{QAuthenticator#Options} for more information on incoming options. + If option \a opt isn't found, an invalid QVariant will be returned. + + \sa options(), QAuthenticator#Options +*/ +QVariant QAuthenticator::option(const QString &opt) const +{ + return d ? d->options.value(opt) : QVariant(); +} + +/*! + \since 4.7 + Returns all incoming options set in this QAuthenticator object by parsing + the server reply. See \l{QAuthenticator#Options} for more information + on incoming options. + + \sa option(), QAuthenticator#Options +*/ +QVariantHash QAuthenticator::options() const +{ + return d ? d->options : QVariantHash(); +} + +/*! + \since 4.7 + + Sets the outgoing option \a opt to value \a value. + See \l{QAuthenticator#Options} for more information on outgoing options. + + \sa options(), option(), QAuthenticator#Options +*/ +void QAuthenticator::setOption(const QString &opt, const QVariant &value) +{ + detach(); + d->options.insert(opt, value); +} + /*! - returns true if the authenticator is null. + Returns true if the authenticator is null. */ bool QAuthenticator::isNull() const { diff --git a/src/network/kernel/qauthenticator.h b/src/network/kernel/qauthenticator.h index 13ce593..983b7c0 100644 --- a/src/network/kernel/qauthenticator.h +++ b/src/network/kernel/qauthenticator.h @@ -43,6 +43,7 @@ #define QAUTHENTICATOR_H #include <QtCore/qstring.h> +#include <QtCore/qvariant.h> QT_BEGIN_HEADER @@ -73,6 +74,10 @@ public: QString realm() const; + QVariant option(const QString &opt) const; + QVariantHash options() const; + void setOption(const QString &opt, const QVariant &value); + bool isNull() const; void detach(); private: diff --git a/src/network/kernel/qauthenticator_p.h b/src/network/kernel/qauthenticator_p.h index abb1cda..665afef 100644 --- a/src/network/kernel/qauthenticator_p.h +++ b/src/network/kernel/qauthenticator_p.h @@ -57,6 +57,7 @@ #include <qbytearray.h> #include <qstring.h> #include <qauthenticator.h> +#include <qvariant.h> QT_BEGIN_NAMESPACE @@ -71,7 +72,7 @@ public: QAtomicInt ref; QString user; QString password; - QHash<QByteArray, QByteArray> options; + QVariantHash options; Method method; QString realm; QByteArray challenge; -- cgit v0.12 From c7c91f5a2aca4e46d1d2ec605e93861f94af5d82 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 14 Jul 2010 13:01:33 +0200 Subject: Add documentation for the QAuthenticator options. Task-number: QT-3573 Reviewed-by: Markus Goetz (cherry picked from commit 1af3362a321dd055798173737d3aede367a1d30c) --- src/network/kernel/qauthenticator.cpp | 42 +++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index ca8ec1c..d61c686 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -85,6 +85,44 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas Note that, in particular, NTLM version 2 is not supported. + \section1 Options + + In addition to the username and password required for authentication, a + QAuthenticator object can also contain additional options. The + options() function can be used to query incoming options sent by + the server; the setOption() function can + be used to set outgoing options, to be processed by the authenticator + calculation. The options accepted and provided depend on the authentication + type (see method()). + + The following tables list known incoming options as well as accepted + outgoing options. The list of incoming options is not exhaustive, since + servers may include additional information at any time. The list of + outgoing options is exhaustive, however, and no unknown options will be + treated or sent back to the server. + + \section2 Basic + + \table + \header \o Option \o Direction \o Description + \row \o \tt{realm} \o Incoming \o Contains the realm of the authentication, the same as realm() + \endtable + + The Basic authentication mechanism supports no outgoing options. + + \section2 NTLM version 1 + + The NTLM authentication mechanism currently supports no incoming or outgoing options. + + \section2 Digest-MD5 + + \table + \header \o Option \o Direction \o Description + \row \o \tt{realm} \o Incoming \o Contains the realm of the authentication, the same as realm() + \endtable + + The Digest-MD5 authentication mechanism supports no outgoing options. + \sa QSslSocket */ @@ -333,7 +371,7 @@ void QAuthenticatorPrivate::parseHttpResponse(const QList<QPair<QByteArray, QByt switch(method) { case Basic: if(realm.isEmpty()) - realm = QString::fromLatin1(options.value("realm")); + this->options[QLatin1String("realm")] = realm = QString::fromLatin1(options.value("realm")); if (user.isEmpty()) phase = Done; break; @@ -342,7 +380,7 @@ void QAuthenticatorPrivate::parseHttpResponse(const QList<QPair<QByteArray, QByt break; case DigestMd5: { if(realm.isEmpty()) - realm = QString::fromLatin1(options.value("realm")); + this->options[QLatin1String("realm")] = realm = QString::fromLatin1(options.value("realm")); if (options.value("stale").toLower() == "true") phase = Start; if (user.isEmpty()) -- cgit v0.12 From 5842c00976e70d190f5604ee06e839bbb9a9853a Mon Sep 17 00:00:00 2001 From: "Richard J. Moore" <rich@kde.org> Date: Sun, 6 Jun 2010 22:10:08 +0100 Subject: Fix handling of SSL certificates with wildcard domain names Merge-request: 731 Task-number: QTBUG-4455 Reviewed-by: Peter Hartmann (cherry picked from commit 5f6018564668d368f75e431c4cdac88d7421cff0) --- src/network/ssl/qsslsocket_openssl.cpp | 42 +++++++++++++++++++++++++++++--- src/network/ssl/qsslsocket_openssl_p.h | 1 + tests/auto/qsslsocket/tst_qsslsocket.cpp | 24 ++++++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index d7088ee..c6e340f 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -1100,17 +1100,16 @@ bool QSslSocketBackendPrivate::startHandshake() QString peerName = (verificationPeerName.isEmpty () ? q->peerName() : verificationPeerName); QString commonName = configuration.peerCertificate.subjectInfo(QSslCertificate::CommonName); - QRegExp regexp(commonName, Qt::CaseInsensitive, QRegExp::Wildcard); - if (!regexp.exactMatch(peerName)) { + if (!isMatchingHostname(commonName.lower(), peerName.lower())) { bool matched = false; foreach (const QString &altName, configuration.peerCertificate .alternateSubjectNames().values(QSsl::DnsEntry)) { - regexp.setPattern(altName); - if (regexp.exactMatch(peerName)) { + if (isMatchingHostname(altName.lower(), peerName.lower())) { matched = true; break; } } + if (!matched) { // No matches in common names or alternate names. QSslError error(QSslError::HostNameMismatch, configuration.peerCertificate); @@ -1240,4 +1239,39 @@ QList<QSslCertificate> QSslSocketBackendPrivate::STACKOFX509_to_QSslCertificates return certificates; } +bool QSslSocketBackendPrivate::isMatchingHostname(const QString &cn, const QString &hostname) +{ + int wildcard = cn.indexOf(QLatin1Char('*')); + + // Check this is a wildcard cert, if not then just compare the strings + if (wildcard < 0) + return cn == hostname; + + int firstCnDot = cn.indexOf(QLatin1Char('.')); + int secondCnDot = cn.indexOf(QLatin1Char('.'), firstCnDot+1); + + // Check at least 3 components + if ((-1 == secondCnDot) || (secondCnDot+1 >= cn.length())) + return false; + + // Check * is last character of 1st component (ie. there's a following .) + if (wildcard+1 != firstCnDot) + return false; + + // Check only one star + if (cn.lastIndexOf(QLatin1Char('*')) != wildcard) + return false; + + // Check characters preceding * (if any) match + if (wildcard && (hostname.leftRef(wildcard) != cn.leftRef(wildcard))) + return false; + + // Check characters following first . match + if (hostname.midRef(hostname.indexOf(QLatin1Char('.'))) != cn.midRef(firstCnDot)) + return false; + + // Ok, I guess this was a wildcard CN and the hostname matches. + return true; +} + QT_END_NAMESPACE diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h index e41320d..fd02838 100644 --- a/src/network/ssl/qsslsocket_openssl_p.h +++ b/src/network/ssl/qsslsocket_openssl_p.h @@ -116,6 +116,7 @@ public: static QSslCipher QSslCipher_from_SSL_CIPHER(SSL_CIPHER *cipher); static QList<QSslCertificate> STACKOFX509_to_QSslCertificates(STACK_OF(X509) *x509); + Q_AUTOTEST_EXPORT static bool isMatchingHostname(const QString &cn, const QString &hostname); }; #if defined(Q_OS_SYMBIAN) diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 0cf638b..0c12974 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -55,6 +55,7 @@ #include <QAuthenticator> #include "private/qhostinfo_p.h" +#include "private/qsslsocket_openssl_p.h" #include "../network-settings.h" @@ -163,6 +164,7 @@ private slots: void setDefaultCiphers(); void supportedCiphers(); void systemCaCertificates(); + void wildcardCertificateNames(); void wildcard(); void setEmptyKey(); void spontaneousWrite(); @@ -1063,6 +1065,28 @@ void tst_QSslSocket::systemCaCertificates() QCOMPARE(certs, QSslSocket::defaultCaCertificates()); } +void tst_QSslSocket::wildcardCertificateNames() +{ + // Passing CN matches + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("www.example.com"), QString("www.example.com")), true ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example.com"), QString("www.example.com")), true ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("xxx*.example.com"), QString("xxxwww.example.com")), true ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("f*.example.com"), QString("foo.example.com")), true ); + + // Failing CN matches + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("xxx.example.com"), QString("www.example.com")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*"), QString("www.example.com")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.*.com"), QString("www.example.com")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example.com"), QString("baa.foo.example.com")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("f*.example.com"), QString("baa.example.com")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.com"), QString("example.com")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*fail.com"), QString("example.com")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example."), QString("www.example.")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example."), QString("www.example")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString(""), QString("www")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*"), QString("www")), false ); +} + void tst_QSslSocket::wildcard() { QSKIP("TODO: solve wildcard problem", SkipAll); -- cgit v0.12 From dd8523316a7809f7e5ef120903e876d266064350 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig <jens.bache-wiig@nokia.com> Date: Fri, 18 Jun 2010 13:01:18 +0200 Subject: Fix QWizard icon and metrics on Windows 7 and Vista This patch takes care of missing icon on Windows Vista+7. It also updates the metrics to look more native in both versions. Task-number: QTBUG-9873, QTBUG-11974, QTBUG-6120 Reviewed-by: prasanth (cherry picked from commit 54e3221555997d26d59b880e3e153f1fc979505d) --- src/gui/dialogs/qwizard_win.cpp | 42 +++++++++++++++++++++++++++-------------- src/gui/dialogs/qwizard_win_p.h | 21 +++++++++++++++------ 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/src/gui/dialogs/qwizard_win.cpp b/src/gui/dialogs/qwizard_win.cpp index e406cba..ad8801a 100644 --- a/src/gui/dialogs/qwizard_win.cpp +++ b/src/gui/dialogs/qwizard_win.cpp @@ -180,7 +180,8 @@ QVistaBackButton::QVistaBackButton(QWidget *widget) QSize QVistaBackButton::sizeHint() const { ensurePolished(); - int width = 32, height = 32; + int size = int(QStyleHelper::dpiScaled(32)); + int width = size, height = size; /* HANDLE theme = pOpenThemeData(0, L"Navigation"); SIZE size; @@ -213,8 +214,8 @@ void QVistaBackButton::paintEvent(QPaintEvent *) HANDLE theme = pOpenThemeData(0, L"Navigation"); //RECT rect; RECT clipRect; - int xoffset = QWidget::mapToParent(r.topLeft()).x(); - int yoffset = QWidget::mapToParent(r.topLeft()).y(); + int xoffset = QWidget::mapToParent(r.topLeft()).x() - 1; + int yoffset = QWidget::mapToParent(r.topLeft()).y() - 1; clipRect.top = r.top() + yoffset; clipRect.bottom = r.bottom() + yoffset; @@ -245,6 +246,11 @@ QVistaHelper::QVistaHelper(QWizard *wizard) is_vista = resolveSymbols(); if (is_vista) backButton_ = new QVistaBackButton(wizard); + + // Handle diff between Windows 7 and Vista + iconSpacing = QStyleHelper::dpiScaled(7); + textSpacing = QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS7 ? + iconSpacing : QStyleHelper::dpiScaled(20); } QVistaHelper::~QVistaHelper() @@ -308,18 +314,15 @@ bool QVistaHelper::setDWMTitleBar(TitleBarChangeType type) void QVistaHelper::drawTitleBar(QPainter *painter) { - if (vistaState() == VistaAero) - drawBlackRect( - QRect(0, 0, wizard->width(), titleBarSize() + topOffset()), - painter->paintEngine()->getDC()); + HDC hdc = painter->paintEngine()->getDC(); + if (vistaState() == VistaAero) + drawBlackRect(QRect(0, 0, wizard->width(), + titleBarSize() + topOffset()), hdc); Q_ASSERT(backButton_); const int btnTop = backButton_->mapToParent(QPoint()).y(); const int btnHeight = backButton_->size().height(); - const int verticalCenter = (btnTop + btnHeight / 2); - - wizard->windowIcon().paint( - painter, QRect(leftMargin(), verticalCenter - iconSize() / 2, iconSize(), iconSize())); + const int verticalCenter = (btnTop + btnHeight / 2) - 1; const QString text = wizard->window()->windowTitle(); const QFont font = QApplication::font("QWorkspaceTitleBar"); @@ -327,14 +330,25 @@ void QVistaHelper::drawTitleBar(QPainter *painter) const QRect brect = fontMetrics.boundingRect(text); int textHeight = brect.height(); int textWidth = brect.width(); + int glowOffset = 0; + if (vistaState() == VistaAero) { textHeight += 2 * glowSize(); textWidth += 2 * glowSize(); + glowOffset = glowSize(); } + drawTitleText( painter, text, - QRect(titleOffset(), verticalCenter - textHeight / 2, textWidth, textHeight), - painter->paintEngine()->getDC()); + QRect(titleOffset() - glowOffset, verticalCenter - textHeight / 2, textWidth, textHeight), + hdc); + + if (!wizard->windowIcon().isNull()) { + QRect rect(leftMargin(), verticalCenter - iconSize() / 2, iconSize(), iconSize()); + HICON hIcon = wizard->windowIcon().pixmap(iconSize()).toWinHICON(); + DrawIconEx(hdc, rect.left(), rect.top(), hIcon, 0, 0, 0, NULL, DI_NORMAL | DI_COMPAT); + DestroyIcon(hIcon); + } } void QVistaHelper::setTitleBarIconAndCaptionVisible(bool visible) @@ -734,7 +748,7 @@ bool QVistaHelper::resolveSymbols() int QVistaHelper::titleOffset() { - int iconOffset = wizard ->windowIcon().isNull() ? 0 : iconSize() + padding(); + int iconOffset = wizard ->windowIcon().isNull() ? 0 : iconSize() + textSpacing; return leftMargin() + iconOffset; } diff --git a/src/gui/dialogs/qwizard_win_p.h b/src/gui/dialogs/qwizard_win_p.h index 5f3b6c2..caf018d 100644 --- a/src/gui/dialogs/qwizard_win_p.h +++ b/src/gui/dialogs/qwizard_win_p.h @@ -61,6 +61,7 @@ #include <qwidget.h> #include <qabstractbutton.h> #include <QtGui/private/qwidget_p.h> +#include <QtGui/private/qstylehelper_p.h> QT_BEGIN_NAMESPACE @@ -100,9 +101,14 @@ public: enum VistaState { VistaAero, VistaBasic, Classic, Dirty }; static VistaState vistaState(); static int titleBarSize() { return frameSize() + captionSize(); } - static int topPadding() { return 8; } - static int topOffset() { return titleBarSize() + (vistaState() == VistaAero ? 13 : 3); } - + static int topPadding() { // padding under text + return int(QStyleHelper::dpiScaled( + QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS7 ? 4 : 6)); + } + static int topOffset() { + static int aeroOffset = QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS7 ? + QStyleHelper::dpiScaled(4) : QStyleHelper::dpiScaled(13); + return (titleBarSize() + (vistaState() == VistaAero ? aeroOffset : 3)); } private: static HFONT getCaptionFont(HANDLE hTheme); bool drawTitleText(QPainter *painter, const QString &text, const QRect &rect, HDC hdc); @@ -111,11 +117,10 @@ private: static int frameSize() { return GetSystemMetrics(SM_CYSIZEFRAME); } static int captionSize() { return GetSystemMetrics(SM_CYCAPTION); } - static int backButtonSize() { return 31; } // ### should be queried from back button itself + static int backButtonSize() { return int(QStyleHelper::dpiScaled(30)); } static int iconSize() { return 16; } // Standard Aero - static int padding() { return 7; } // Standard Aero - static int leftMargin() { return backButtonSize() + padding(); } static int glowSize() { return 10; } + int leftMargin() { return backButton_->isVisible() ? backButtonSize() + iconSpacing : 0; } int titleOffset(); bool resolveSymbols(); @@ -139,6 +144,10 @@ private: QRect rtTitle; QWizard *wizard; QVistaBackButton *backButton_; + + int titleBarOffset; // Extra spacing above the text + int iconSpacing; // Space between button and icon + int textSpacing; // Space between icon and text }; -- cgit v0.12 From 830317bda972cc121ff8204f43d639c183e754ad Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Wed, 7 Jul 2010 09:51:34 +0200 Subject: qdoc: Fixed the case where the property and type names are the same. Also simplified some code. Task-number: QTBUG-6340 (cherry picked from commit f14b644004498dc6fb1a9437b81e3164e89bfdb5) --- tools/qdoc3/codemarker.cpp | 8 ++++++++ tools/qdoc3/codemarker.h | 9 +++++---- tools/qdoc3/cppcodemarker.cpp | 15 +++++++++------ tools/qdoc3/cppcodemarker.h | 7 ++++--- tools/qdoc3/htmlgenerator.cpp | 8 +++++--- tools/qdoc3/htmlgenerator.h | 7 ++++--- tools/qdoc3/javacodemarker.cpp | 6 ++++-- tools/qdoc3/javacodemarker.h | 5 ++++- tools/qdoc3/plaincodemarker.cpp | 7 ------- tools/qdoc3/plaincodemarker.h | 1 - tools/qdoc3/qscodemarker.cpp | 7 ------- tools/qdoc3/qscodemarker.h | 1 - tools/qdoc3/tree.cpp | 10 ++++++---- tools/qdoc3/tree.h | 20 ++++++++++++-------- 14 files changed, 61 insertions(+), 50 deletions(-) diff --git a/tools/qdoc3/codemarker.cpp b/tools/qdoc3/codemarker.cpp index 33ceaf5..7130d61 100644 --- a/tools/qdoc3/codemarker.cpp +++ b/tools/qdoc3/codemarker.cpp @@ -630,4 +630,12 @@ QList<Section> CodeMarker::qmlSections(const QmlClassNode* , SynopsisStyle ) } #endif +const Node* CodeMarker::resolveTarget(const QString& , + const Tree* , + const Node* , + const Node* ) +{ + return 0; +} + QT_END_NAMESPACE diff --git a/tools/qdoc3/codemarker.h b/tools/qdoc3/codemarker.h index aab8a9c..53ad4a8 100644 --- a/tools/qdoc3/codemarker.h +++ b/tools/qdoc3/codemarker.h @@ -155,10 +155,11 @@ class CodeMarker virtual QList<Section> qmlSections(const QmlClassNode* qmlClassNode, SynopsisStyle style); #endif - virtual const Node *resolveTarget(const QString& target, - const Tree *tree, - const Node *relative) = 0; - virtual QStringList macRefsForNode(const Node *node); + virtual const Node* resolveTarget(const QString& target, + const Tree* tree, + const Node* relative, + const Node* self = 0); + virtual QStringList macRefsForNode(const Node* node); static void initialize(const Config& config); static void terminate(); diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp index c4ee054..562e92b 100644 --- a/tools/qdoc3/cppcodemarker.cpp +++ b/tools/qdoc3/cppcodemarker.cpp @@ -825,9 +825,10 @@ QList<Section> CppCodeMarker::sections(const InnerNode *inner, return sections; } -const Node *CppCodeMarker::resolveTarget(const QString &target, - const Tree *tree, - const Node *relative) +const Node *CppCodeMarker::resolveTarget(const QString& target, + const Tree* tree, + const Node* relative, + const Node* self) { if (target.endsWith("()")) { const FunctionNode *func; @@ -869,11 +870,13 @@ const Node *CppCodeMarker::resolveTarget(const QString &target, else { QStringList path = target.split("::"); const Node *node; + int flags = Tree::SearchBaseClasses | + Tree::SearchEnumValues | + Tree::NonFunction; if ((node = tree->findNode(path, relative, - Tree::SearchBaseClasses | - Tree::SearchEnumValues | - Tree::NonFunction))) + flags, + self))) return node; } return 0; diff --git a/tools/qdoc3/cppcodemarker.h b/tools/qdoc3/cppcodemarker.h index 2dcf400..eca3936 100644 --- a/tools/qdoc3/cppcodemarker.h +++ b/tools/qdoc3/cppcodemarker.h @@ -81,9 +81,10 @@ class CppCodeMarker : public CodeMarker Status status); QList<Section> qmlSections(const QmlClassNode* qmlClassNode, SynopsisStyle style); - const Node *resolveTarget(const QString& target, - const Tree *tree, - const Node *relative); + const Node* resolveTarget(const QString& target, + const Tree* tree, + const Node* relative, + const Node* self = 0); private: QString addMarkUp(const QString& protectedCode, diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 89b1e98..4461b48 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -2676,7 +2676,7 @@ void HtmlGenerator::generateQmlItem(const Node *node, } } } - out() << highlightedCode(marked, marker, relative); + out() << highlightedCode(marked, marker, relative, false, node); debugging_on = false; } #endif @@ -2988,7 +2988,8 @@ void HtmlGenerator::generateSynopsis(const Node *node, QString HtmlGenerator::highlightedCode(const QString& markedCode, CodeMarker* marker, const Node* relative, - bool alignNames) + bool alignNames, + const Node* self) { QString src = markedCode; QString html; @@ -3067,8 +3068,9 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode, bool handled = false; if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) { par1 = QStringRef(); - const Node* n = marker->resolveTarget(arg.toString(), myTree, relative); + const Node* n = marker->resolveTarget(arg.toString(), myTree, relative, self); if (HtmlGenerator::debugging_on) { + qDebug() << "arg.toString()" << arg.toString(); if (n) { qDebug() << " " << n->name() << n->type() << n->subType(); qDebug() << " " << relative->name() << relative->type() << relative->subType(); diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index 80341de..a2fadf6 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -210,9 +210,10 @@ class HtmlGenerator : public PageGenerator const Node *relative, CodeMarker *marker); QString highlightedCode(const QString& markedCode, - CodeMarker *marker, - const Node *relative, - bool alignNames = false); + CodeMarker* marker, + const Node* relative, + bool alignNames = false, + const Node* self = 0); void generateFullName(const Node *apparentNode, const Node *relative, diff --git a/tools/qdoc3/javacodemarker.cpp b/tools/qdoc3/javacodemarker.cpp index 1918cd8..c9a8f60 100644 --- a/tools/qdoc3/javacodemarker.cpp +++ b/tools/qdoc3/javacodemarker.cpp @@ -155,8 +155,10 @@ QList<Section> JavaCodeMarker::sections(const InnerNode * /* inner */, SynopsisS return QList<Section>(); } -const Node *JavaCodeMarker::resolveTarget(const QString &target, const Tree *tree, - const Node *relative) +const Node *JavaCodeMarker::resolveTarget(const QString &target, + const Tree *tree, + const Node *relative, + const Node* /* self */) { if (target.endsWith("()")) { const FunctionNode *func; diff --git a/tools/qdoc3/javacodemarker.h b/tools/qdoc3/javacodemarker.h index a2d04dd..c2aabc0 100644 --- a/tools/qdoc3/javacodemarker.h +++ b/tools/qdoc3/javacodemarker.h @@ -72,7 +72,10 @@ public: QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status); QString functionBeginRegExp( const QString& funcName ); QString functionEndRegExp( const QString& funcName ); - const Node *resolveTarget( const QString& target, const Tree *tree, const Node *relative ); + const Node* resolveTarget( const QString& target, + const Tree* tree, + const Node* relative, + const Node* self = 0 ); }; QT_END_NAMESPACE diff --git a/tools/qdoc3/plaincodemarker.cpp b/tools/qdoc3/plaincodemarker.cpp index 4abfd2b..d825c13 100644 --- a/tools/qdoc3/plaincodemarker.cpp +++ b/tools/qdoc3/plaincodemarker.cpp @@ -129,11 +129,4 @@ QList<Section> PlainCodeMarker::sections(const InnerNode * /* innerNode */, return QList<Section>(); } -const Node *PlainCodeMarker::resolveTarget( const QString& /* target */, - const Tree * /* tree */, - const Node * /* relative */ ) -{ - return 0; -} - QT_END_NAMESPACE diff --git a/tools/qdoc3/plaincodemarker.h b/tools/qdoc3/plaincodemarker.h index e9cc40d..7afb88e 100644 --- a/tools/qdoc3/plaincodemarker.h +++ b/tools/qdoc3/plaincodemarker.h @@ -71,7 +71,6 @@ public: QString functionBeginRegExp( const QString& funcName ); QString functionEndRegExp( const QString& funcName ); QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status); - const Node *resolveTarget(const QString &target, const Tree *tree, const Node *relative); }; QT_END_NAMESPACE diff --git a/tools/qdoc3/qscodemarker.cpp b/tools/qdoc3/qscodemarker.cpp index d4b8e80..2ee5d99 100644 --- a/tools/qdoc3/qscodemarker.cpp +++ b/tools/qdoc3/qscodemarker.cpp @@ -375,11 +375,4 @@ QList<Section> QsCodeMarker::sections( const InnerNode *inner, SynopsisStyle sty return sections; } -const Node *QsCodeMarker::resolveTarget( const QString& /* target */, - const Tree * /* tree */, - const Node * /* relative */ ) -{ - return 0; -} - QT_END_NAMESPACE diff --git a/tools/qdoc3/qscodemarker.h b/tools/qdoc3/qscodemarker.h index 1590009..c6a177f 100644 --- a/tools/qdoc3/qscodemarker.h +++ b/tools/qdoc3/qscodemarker.h @@ -72,7 +72,6 @@ public: QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status); QString functionBeginRegExp( const QString& funcName ); QString functionEndRegExp( const QString& funcName ); - const Node *resolveTarget( const QString& target, const Tree *tree, const Node *relative ); }; QT_END_NAMESPACE diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp index 70b998f..022e1c2 100644 --- a/tools/qdoc3/tree.cpp +++ b/tools/qdoc3/tree.cpp @@ -125,18 +125,20 @@ Tree::~Tree() /*! */ -Node *Tree::findNode(const QStringList &path, Node *relative, int findFlags) +Node *Tree::findNode(const QStringList &path, Node *relative, int findFlags, const Node* self) { return const_cast<Node*>(const_cast<const Tree*>(this)->findNode(path, relative, - findFlags)); + findFlags, + self)); } /*! */ const Node* Tree::findNode(const QStringList &path, const Node* start, - int findFlags) const + int findFlags, + const Node* self) const { const Node* current = start; if (!current) @@ -172,7 +174,7 @@ const Node* Tree::findNode(const QStringList &path, if (node && i == path.size() && (!(findFlags & NonFunction) || node->type() != Node::Function || ((FunctionNode *)node)->metaness() == FunctionNode::MacroWithoutParams)) - if ((node != start) && (node->subType() != Node::QmlPropertyGroup)) + if ((node != self) && (node->subType() != Node::QmlPropertyGroup)) return node; current = current->parent(); } while (current); diff --git a/tools/qdoc3/tree.h b/tools/qdoc3/tree.h index 0865847..b34c3a8 100644 --- a/tools/qdoc3/tree.h +++ b/tools/qdoc3/tree.h @@ -65,10 +65,13 @@ class Tree Tree(); ~Tree(); - Node *findNode(const QStringList &path, Node *relative=0, int findFlags=0); - Node *findNode(const QStringList &path, + Node* findNode(const QStringList &path, + Node* relative=0, + int findFlags=0, + const Node* self=0); + Node* findNode(const QStringList &path, Node::Type type, - Node *relative = 0, + Node* relative = 0, int findFlags = 0); FunctionNode *findFunctionNode(const QStringList &path, Node *relative = 0, @@ -98,12 +101,13 @@ class Tree NamespaceNode *root() { return &roo; } QString version() const { return vers; } - const Node *findNode(const QStringList &path, - const Node *relative = 0, - int findFlags = 0) const; - const Node *findNode(const QStringList &path, + const Node* findNode(const QStringList &path, + const Node* relative = 0, + int findFlags = 0, + const Node* self=0) const; + const Node* findNode(const QStringList &path, Node::Type type, const - Node *relative = 0, + Node* relative = 0, int findFlags = 0) const; const FunctionNode *findFunctionNode(const QStringList &path, const Node *relative = 0, -- cgit v0.12 From e6532522d5176d8c5165ea9e9ebab058d597ed80 Mon Sep 17 00:00:00 2001 From: liang jian <jianliang79@gmail.com> Date: Thu, 8 Jul 2010 12:56:03 +0200 Subject: Build Qt with option -Zc:wchar_t under MSVC This will make projects generated by visual studio being successfully linked to the Qt dlls if they use the QString::fromWCharArray() or QString::toWCharArray() methods. Merge-request: 727 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> (cherry picked from commit a9c8decc741d8c2b340f38d7a854ef206672ab3e) --- mkspecs/win32-msvc2005/qmake.conf | 2 +- mkspecs/win32-msvc2008/qmake.conf | 2 +- mkspecs/win32-msvc2010/qmake.conf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf index 0406fd0..a5999cc 100644 --- a/mkspecs/win32-msvc2005/qmake.conf +++ b/mkspecs/win32-msvc2005/qmake.conf @@ -16,7 +16,7 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t- +QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = -O2 -MD diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf index 9805e90..1aab8e1 100644 --- a/mkspecs/win32-msvc2008/qmake.conf +++ b/mkspecs/win32-msvc2008/qmake.conf @@ -16,7 +16,7 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t- +QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = -O2 -MD diff --git a/mkspecs/win32-msvc2010/qmake.conf b/mkspecs/win32-msvc2010/qmake.conf index 28d4d3c..34a7782 100644 --- a/mkspecs/win32-msvc2010/qmake.conf +++ b/mkspecs/win32-msvc2010/qmake.conf @@ -16,7 +16,7 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t- +QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = -O2 -MD -- cgit v0.12 From 9842516c45323b5f3352232f3d76db98256fdb2e Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Fri, 2 Jul 2010 19:31:51 +0200 Subject: Fix an Assert in QTextTable The problem was caused by the fragment id being inserted in front of a cell spanning over several rows instead of the next logical cell (or fragment_end) in the cells structure. Task-number: QTBUG-11282 Reviewed-by: Simon Hausmann (cherry picked from commit b2a4c7f0142a48f60e7ec4fc5866917e3da8b7c3) --- src/gui/text/qtexttable.cpp | 28 ++++++++++++++--- tests/auto/qtexttable/tst_qtexttable.cpp | 54 ++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index 5100176..e3985ce 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -754,19 +754,39 @@ void QTextTable::insertColumns(int pos, int num) QTextFormatCollection *c = p->formatCollection(); p->beginEditBlock(); + QList<int> extendedSpans; for (int i = 0; i < d->nRows; ++i) { int cell; if (i == d->nRows - 1 && pos == d->nCols) cell = d->fragment_end; else cell = d->grid[i*d->nCols + pos]; - QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); - QTextCharFormat fmt = c->charFormat(it->format); if (pos > 0 && pos < d->nCols && cell == d->grid[i*d->nCols + pos - 1]) { // cell spans the insertion place, extend it - fmt.setTableCellColumnSpan(fmt.tableCellColumnSpan() + num); - p->setCharFormat(it.position(), 1, fmt); + if (!extendedSpans.contains(cell)) { + QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); + QTextCharFormat fmt = c->charFormat(it->format); + fmt.setTableCellColumnSpan(fmt.tableCellColumnSpan() + num); + p->setCharFormat(it.position(), 1, fmt); + d->dirty = true; + extendedSpans << cell; + } } else { + /* If the next cell is spanned from the row above, we need to find the right position + to insert to */ + if (i > 0 && pos < d->nCols && cell == d->grid[(i-1) * d->nCols + pos]) { + int gridIndex = i*d->nCols + pos; + const int gridEnd = d->nRows * d->nCols - 1; + while (gridIndex < gridEnd && cell == d->grid[gridIndex]) { + ++gridIndex; + } + if (gridIndex == gridEnd) + cell = d->fragment_end; + else + cell = d->grid[gridIndex]; + } + QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); + QTextCharFormat fmt = c->charFormat(it->format); fmt.setTableCellRowSpan(1); fmt.setTableCellColumnSpan(1); Q_ASSERT(fmt.objectIndex() == objectIndex()); diff --git a/tests/auto/qtexttable/tst_qtexttable.cpp b/tests/auto/qtexttable/tst_qtexttable.cpp index 2e6007e..b0cb34d 100644 --- a/tests/auto/qtexttable/tst_qtexttable.cpp +++ b/tests/auto/qtexttable/tst_qtexttable.cpp @@ -48,9 +48,14 @@ #include <qtexttable.h> #include <qdebug.h> #include <qtextcursor.h> +#include <qtextdocument.h> +#include <qtextedit.h> //TESTED_FILES= +typedef QList<int> IntList; +Q_DECLARE_METATYPE(IntList) + QT_FORWARD_DECLARE_CLASS(QTextDocument) class tst_QTextTable : public QObject @@ -78,6 +83,7 @@ private slots: void insertRows(); void deleteInTable(); void mergeCells(); + void mergeAndInsert(); void splitCells(); void blocksForTableShouldHaveEmptyFormat(); void removeTableByRemoveRows(); @@ -93,6 +99,8 @@ private slots: void removeColumns3(); void removeColumns4(); void removeColumns5(); + void QTBUG11282_insertBeforeMergedEnding_data(); + void QTBUG11282_insertBeforeMergedEnding(); private: QTextTable *create2x2Table(); @@ -586,6 +594,16 @@ void tst_QTextTable::mergeCells() QVERIFY(table->cellAt(0, 1) == table->cellAt(1, 1)); } +void tst_QTextTable::mergeAndInsert() +{ + QTextTable *table = cursor.insertTable(4,3); + table->mergeCells(0,1,3,2); + table->mergeCells(3,0,1,3); + //Don't crash ! + table->insertColumns(1,2); + QCOMPARE(table->columns(), 5); +} + void tst_QTextTable::splitCells() { QTextTable *table = create4x4Table(); @@ -931,5 +949,41 @@ void tst_QTextTable::removeColumns5() QCOMPARE(table->cellAt(3, 2).firstPosition(), 11); } +void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding_data() +{ + QTest::addColumn<int>("rows"); + QTest::addColumn<int>("columns"); + QTest::addColumn<QList<int> >("merge"); + QTest::addColumn<QList<int> >("insert"); + + QTest::newRow("2x3, merge two, insert one") << 2 << 3 << (QList<int>() << 1 << 2 << 2) + << (QList<int>() << 1 << 1) ; + QTest::newRow("3x4, merge three, insert one") << 3 << 4 << (QList<int>() << 1 << 3 << 3) + << (QList<int>() << 1 << 1) ; + QTest::newRow("4x3, merge two, insert two") << 4 << 3 << (QList<int>() << 1 << 4 << 2) + << (QList<int>() << 1 << 2) ; + QTest::newRow("4x4, merge middle two, insert one") << 4 << 4 << (QList<int>() << 1 << 4 << 2) + << (QList<int>() << 1 << 1) ; +} + +void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding() +{ + QFETCH(int, rows); + QFETCH(int, columns); + QFETCH(QList<int>, merge); + QFETCH(QList<int>, insert); + QTextTable *table = cursor.insertTable(rows, columns); + QTextEdit *textEdit = new QTextEdit; + textEdit->setDocument(doc); + textEdit->show(); + QTest::qWaitForWindowShown(textEdit); + table->mergeCells(0,merge.at(0), merge.at(1), merge.at(2)); + //Don't crash ! + table->insertColumns(insert.at(0), insert.at(1)); + //Check that the final size is what we expected + QCOMPARE(table->rows(), rows); + QCOMPARE(table->columns(), columns + insert.at(1)); +} + QTEST_MAIN(tst_QTextTable) #include "tst_qtexttable.moc" -- cgit v0.12 From 61134a909a5f3f2a0c9c9a25e769f76748b72205 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Wed, 14 Jul 2010 13:52:48 +1000 Subject: Revert "Fix an Assert in QTextTable" This reverts commit b2a4c7f0142a48f60e7ec4fc5866917e3da8b7c3. Unit test tst_qtexttable::QTBUG11282_insertBeforeMergedEnding fails on mac and Linux, reverting for now. (cherry picked from commit b2002d0814e18f7a50bdbf8d17c4bc1662fa70ee) --- src/gui/text/qtexttable.cpp | 28 +++-------------- tests/auto/qtexttable/tst_qtexttable.cpp | 54 -------------------------------- 2 files changed, 4 insertions(+), 78 deletions(-) diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index e3985ce..5100176 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -754,39 +754,19 @@ void QTextTable::insertColumns(int pos, int num) QTextFormatCollection *c = p->formatCollection(); p->beginEditBlock(); - QList<int> extendedSpans; for (int i = 0; i < d->nRows; ++i) { int cell; if (i == d->nRows - 1 && pos == d->nCols) cell = d->fragment_end; else cell = d->grid[i*d->nCols + pos]; + QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); + QTextCharFormat fmt = c->charFormat(it->format); if (pos > 0 && pos < d->nCols && cell == d->grid[i*d->nCols + pos - 1]) { // cell spans the insertion place, extend it - if (!extendedSpans.contains(cell)) { - QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); - QTextCharFormat fmt = c->charFormat(it->format); - fmt.setTableCellColumnSpan(fmt.tableCellColumnSpan() + num); - p->setCharFormat(it.position(), 1, fmt); - d->dirty = true; - extendedSpans << cell; - } + fmt.setTableCellColumnSpan(fmt.tableCellColumnSpan() + num); + p->setCharFormat(it.position(), 1, fmt); } else { - /* If the next cell is spanned from the row above, we need to find the right position - to insert to */ - if (i > 0 && pos < d->nCols && cell == d->grid[(i-1) * d->nCols + pos]) { - int gridIndex = i*d->nCols + pos; - const int gridEnd = d->nRows * d->nCols - 1; - while (gridIndex < gridEnd && cell == d->grid[gridIndex]) { - ++gridIndex; - } - if (gridIndex == gridEnd) - cell = d->fragment_end; - else - cell = d->grid[gridIndex]; - } - QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); - QTextCharFormat fmt = c->charFormat(it->format); fmt.setTableCellRowSpan(1); fmt.setTableCellColumnSpan(1); Q_ASSERT(fmt.objectIndex() == objectIndex()); diff --git a/tests/auto/qtexttable/tst_qtexttable.cpp b/tests/auto/qtexttable/tst_qtexttable.cpp index b0cb34d..2e6007e 100644 --- a/tests/auto/qtexttable/tst_qtexttable.cpp +++ b/tests/auto/qtexttable/tst_qtexttable.cpp @@ -48,14 +48,9 @@ #include <qtexttable.h> #include <qdebug.h> #include <qtextcursor.h> -#include <qtextdocument.h> -#include <qtextedit.h> //TESTED_FILES= -typedef QList<int> IntList; -Q_DECLARE_METATYPE(IntList) - QT_FORWARD_DECLARE_CLASS(QTextDocument) class tst_QTextTable : public QObject @@ -83,7 +78,6 @@ private slots: void insertRows(); void deleteInTable(); void mergeCells(); - void mergeAndInsert(); void splitCells(); void blocksForTableShouldHaveEmptyFormat(); void removeTableByRemoveRows(); @@ -99,8 +93,6 @@ private slots: void removeColumns3(); void removeColumns4(); void removeColumns5(); - void QTBUG11282_insertBeforeMergedEnding_data(); - void QTBUG11282_insertBeforeMergedEnding(); private: QTextTable *create2x2Table(); @@ -594,16 +586,6 @@ void tst_QTextTable::mergeCells() QVERIFY(table->cellAt(0, 1) == table->cellAt(1, 1)); } -void tst_QTextTable::mergeAndInsert() -{ - QTextTable *table = cursor.insertTable(4,3); - table->mergeCells(0,1,3,2); - table->mergeCells(3,0,1,3); - //Don't crash ! - table->insertColumns(1,2); - QCOMPARE(table->columns(), 5); -} - void tst_QTextTable::splitCells() { QTextTable *table = create4x4Table(); @@ -949,41 +931,5 @@ void tst_QTextTable::removeColumns5() QCOMPARE(table->cellAt(3, 2).firstPosition(), 11); } -void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding_data() -{ - QTest::addColumn<int>("rows"); - QTest::addColumn<int>("columns"); - QTest::addColumn<QList<int> >("merge"); - QTest::addColumn<QList<int> >("insert"); - - QTest::newRow("2x3, merge two, insert one") << 2 << 3 << (QList<int>() << 1 << 2 << 2) - << (QList<int>() << 1 << 1) ; - QTest::newRow("3x4, merge three, insert one") << 3 << 4 << (QList<int>() << 1 << 3 << 3) - << (QList<int>() << 1 << 1) ; - QTest::newRow("4x3, merge two, insert two") << 4 << 3 << (QList<int>() << 1 << 4 << 2) - << (QList<int>() << 1 << 2) ; - QTest::newRow("4x4, merge middle two, insert one") << 4 << 4 << (QList<int>() << 1 << 4 << 2) - << (QList<int>() << 1 << 1) ; -} - -void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding() -{ - QFETCH(int, rows); - QFETCH(int, columns); - QFETCH(QList<int>, merge); - QFETCH(QList<int>, insert); - QTextTable *table = cursor.insertTable(rows, columns); - QTextEdit *textEdit = new QTextEdit; - textEdit->setDocument(doc); - textEdit->show(); - QTest::qWaitForWindowShown(textEdit); - table->mergeCells(0,merge.at(0), merge.at(1), merge.at(2)); - //Don't crash ! - table->insertColumns(insert.at(0), insert.at(1)); - //Check that the final size is what we expected - QCOMPARE(table->rows(), rows); - QCOMPARE(table->columns(), columns + insert.at(1)); -} - QTEST_MAIN(tst_QTextTable) #include "tst_qtexttable.moc" -- cgit v0.12 From ec1ef2cdd7fc7aad08db6014056f1a59f9dc0520 Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Fri, 2 Jul 2010 19:31:51 +0200 Subject: Fix an Assert in QTextTable The problem was caused by the fragment id being inserted in front of a cell spanning over several rows instead of the next logical cell (or fragment_end) in the cells structure. Task-number: QTBUG-11282 Reviewed-by: Simon Hausmann (cherry picked from commit d3a6f124dde7732311ad9312ebf41997712fc6bb) --- src/gui/text/qtexttable.cpp | 28 +++++++++++++--- tests/auto/qtexttable/tst_qtexttable.cpp | 55 ++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index 5100176..e3985ce 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -754,19 +754,39 @@ void QTextTable::insertColumns(int pos, int num) QTextFormatCollection *c = p->formatCollection(); p->beginEditBlock(); + QList<int> extendedSpans; for (int i = 0; i < d->nRows; ++i) { int cell; if (i == d->nRows - 1 && pos == d->nCols) cell = d->fragment_end; else cell = d->grid[i*d->nCols + pos]; - QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); - QTextCharFormat fmt = c->charFormat(it->format); if (pos > 0 && pos < d->nCols && cell == d->grid[i*d->nCols + pos - 1]) { // cell spans the insertion place, extend it - fmt.setTableCellColumnSpan(fmt.tableCellColumnSpan() + num); - p->setCharFormat(it.position(), 1, fmt); + if (!extendedSpans.contains(cell)) { + QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); + QTextCharFormat fmt = c->charFormat(it->format); + fmt.setTableCellColumnSpan(fmt.tableCellColumnSpan() + num); + p->setCharFormat(it.position(), 1, fmt); + d->dirty = true; + extendedSpans << cell; + } } else { + /* If the next cell is spanned from the row above, we need to find the right position + to insert to */ + if (i > 0 && pos < d->nCols && cell == d->grid[(i-1) * d->nCols + pos]) { + int gridIndex = i*d->nCols + pos; + const int gridEnd = d->nRows * d->nCols - 1; + while (gridIndex < gridEnd && cell == d->grid[gridIndex]) { + ++gridIndex; + } + if (gridIndex == gridEnd) + cell = d->fragment_end; + else + cell = d->grid[gridIndex]; + } + QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), cell); + QTextCharFormat fmt = c->charFormat(it->format); fmt.setTableCellRowSpan(1); fmt.setTableCellColumnSpan(1); Q_ASSERT(fmt.objectIndex() == objectIndex()); diff --git a/tests/auto/qtexttable/tst_qtexttable.cpp b/tests/auto/qtexttable/tst_qtexttable.cpp index 2e6007e..9dcc369 100644 --- a/tests/auto/qtexttable/tst_qtexttable.cpp +++ b/tests/auto/qtexttable/tst_qtexttable.cpp @@ -48,9 +48,14 @@ #include <qtexttable.h> #include <qdebug.h> #include <qtextcursor.h> +#include <qtextdocument.h> +#include <qtextedit.h> //TESTED_FILES= +typedef QList<int> IntList; +Q_DECLARE_METATYPE(IntList) + QT_FORWARD_DECLARE_CLASS(QTextDocument) class tst_QTextTable : public QObject @@ -78,6 +83,7 @@ private slots: void insertRows(); void deleteInTable(); void mergeCells(); + void mergeAndInsert(); void splitCells(); void blocksForTableShouldHaveEmptyFormat(); void removeTableByRemoveRows(); @@ -93,6 +99,8 @@ private slots: void removeColumns3(); void removeColumns4(); void removeColumns5(); + void QTBUG11282_insertBeforeMergedEnding_data(); + void QTBUG11282_insertBeforeMergedEnding(); private: QTextTable *create2x2Table(); @@ -586,6 +594,16 @@ void tst_QTextTable::mergeCells() QVERIFY(table->cellAt(0, 1) == table->cellAt(1, 1)); } +void tst_QTextTable::mergeAndInsert() +{ + QTextTable *table = cursor.insertTable(4,3); + table->mergeCells(0,1,3,2); + table->mergeCells(3,0,1,3); + //Don't crash ! + table->insertColumns(1,2); + QCOMPARE(table->columns(), 5); +} + void tst_QTextTable::splitCells() { QTextTable *table = create4x4Table(); @@ -931,5 +949,42 @@ void tst_QTextTable::removeColumns5() QCOMPARE(table->cellAt(3, 2).firstPosition(), 11); } +void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding_data() +{ + QTest::addColumn<int>("rows"); + QTest::addColumn<int>("columns"); + QTest::addColumn<QList<int> >("merge"); + QTest::addColumn<QList<int> >("insert"); + + QTest::newRow("2x3, merge two, insert one") << 2 << 3 << (QList<int>() << 1 << 2 << 2) + << (QList<int>() << 1 << 1) ; + QTest::newRow("3x4, merge three, insert one") << 3 << 4 << (QList<int>() << 1 << 3 << 3) + << (QList<int>() << 1 << 1) ; + QTest::newRow("4x3, merge two, insert two") << 4 << 3 << (QList<int>() << 1 << 4 << 2) + << (QList<int>() << 1 << 2) ; + QTest::newRow("4x4, merge middle two, insert one") << 4 << 4 << (QList<int>() << 1 << 4 << 2) + << (QList<int>() << 1 << 1) ; +} + +void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding() +{ + QFETCH(int, rows); + QFETCH(int, columns); + QFETCH(QList<int>, merge); + QFETCH(QList<int>, insert); + QTextTable *table = cursor.insertTable(rows, columns); + QTextEdit *textEdit = new QTextEdit; + textEdit->setDocument(doc); + textEdit->show(); + QTest::qWaitForWindowShown(textEdit); + table->mergeCells(0,merge.at(0), merge.at(1), merge.at(2)); + //Don't crash ! + table->insertColumns(insert.at(0), insert.at(1)); + //Check that the final size is what we expected + QCOMPARE(table->rows(), rows); + QCOMPARE(table->columns(), columns + insert.at(1)); + delete textEdit; +} + QTEST_MAIN(tst_QTextTable) #include "tst_qtexttable.moc" -- cgit v0.12 From b2ab0a5912f68730ed6b23f31351d747ca8815cf Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 8 Jul 2010 10:24:49 +0200 Subject: doc: Added doc for accessing views and models from delegates. Task-number: QTBUG-11648 (cherry picked from commit 25e3227fc922f75cc772aadb9dd07cc8b965dcbd) --- doc/src/declarative/qdeclarativemodels.qdoc | 73 +++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/doc/src/declarative/qdeclarativemodels.qdoc b/doc/src/declarative/qdeclarativemodels.qdoc index b44e6f2..a2f4d3a 100644 --- a/doc/src/declarative/qdeclarativemodels.qdoc +++ b/doc/src/declarative/qdeclarativemodels.qdoc @@ -429,4 +429,77 @@ Rectangle { } \endcode +\section1 Accessing Views and Models from Delegates + +You can access the view for which a delegate is used, and its +properties, by using ListView.view in a delegate on a ListView, or +GridView.view in a delegate on a GridView, etc. In particular, you can +access the model and its properties by using ListView.view.model. + +This is useful when you want to use the same delegate for a number of +views, for example, but you want decorations or other features to be +different for each view, and you would like these different settings to +be properties of each of the views. Similarly, it might be of interest +to access or show some properties of the model. + +In the following example, the delegate shows the property \e{language} +of the model, and the color of one of the fields depends on the +property \e{fruit_color} of the view. + +\code +Rectangle { + width: 200; height: 200 + + ListModel { + id: fruitModel + property string language: "en" + ListElement { + name: "Apple" + cost: 2.45 + } + ListElement { + name: "Orange" + cost: 3.25 + } + ListElement { + name: "Banana" + cost: 1.95 + } + } + + Component { + id: fruitDelegate + Row { + Text { text: " Fruit: " + name; color: ListView.view.fruit_color } + Text { text: " Cost: $" + cost } + Text { text: " Language: " + ListView.view.model.language } + } + } + + ListView { + property color fruit_color: "green" + model: fruitModel + delegate: fruitDelegate + anchors.fill: parent + } +} +\endcode + +Another important case is when some action (e.g. mouse click) in the +delegate should update data in the model. In this case you can define +a function in the model, e.g.: + +\code + setData(int row, const QString & field_name, QVariant new_value), +\endcode + +...and call it from the delegate using: + +\code + ListView.view.model.setData(index, field, value) +\endcode + +...assuming that \e{field} holds the name of the field which should be +updated, and that \e{value} holds the new value. + */ -- cgit v0.12 From da11546e7ec502670e1dda499a68fcc80272b9f6 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Tue, 13 Jul 2010 09:43:08 +0200 Subject: qdoc: Fixed breadcrumbs for QML examples. Task-number: QTBUG-11679 (cherry picked from commit 69910bc33dc448a9aa81eb00ed45be6d0488e447) --- tools/qdoc3/htmlgenerator.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 4461b48..7acacff 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1738,8 +1738,9 @@ void HtmlGenerator::generateBreadCrumbs(const QString& title, } } else if (node->subType() == Node::Page) { - if (fn->name() == QString("examples.html")) { - out() << " <li>Examples</li>"; + if (fn->name() == QString("qdeclarativeexamples.html")) { + out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; + out() << " <li>QML Examples & Demos</li>"; } else if (fn->name().startsWith("examples-")) { out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; @@ -1759,10 +1760,14 @@ void HtmlGenerator::generateBreadCrumbs(const QString& title, else if (node->subType() == Node::Example) { out() << " <li><a href=\"all-examples.html\">Examples</a></li>"; QStringList sl = fn->name().split('/'); - QString name = "examples-" + sl.at(0) + ".html"; - QString t = CodeParser::titleFromName(name); - out() << " <li><a href=\"" << name << "\">" - << t << "</a></li>"; + if (sl.contains("declarative")) + out() << " <li><a href=\"qdeclarativeexamples.html\">QML Examples & Demos</a></li>"; + else { + QString name = "examples-" + sl.at(0) + ".html"; + QString t = CodeParser::titleFromName(name); + out() << " <li><a href=\"" << name << "\">" + << t << "</a></li>"; + } out() << " <li>" << title << "</li>"; } } -- cgit v0.12 From 9fd83d455fa250d9a7901bd8d23a93abdc1cb283 Mon Sep 17 00:00:00 2001 From: ck <qt-info@nokia.com> Date: Fri, 9 Jul 2010 11:16:28 +0200 Subject: qhelpgenerator: Fix namespace syntax checking. (cherry picked from commit 7787b548907add8b7c2ac642d161181070050ea4) --- tools/assistant/lib/qhelpprojectdata.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/assistant/lib/qhelpprojectdata.cpp b/tools/assistant/lib/qhelpprojectdata.cpp index b0faf0c..5247847 100644 --- a/tools/assistant/lib/qhelpprojectdata.cpp +++ b/tools/assistant/lib/qhelpprojectdata.cpp @@ -327,10 +327,12 @@ bool QHelpProjectDataPrivate::hasValidSyntax(const QString &nameSpace, QUrl url; const QLatin1String scheme("qthelp"); url.setScheme(scheme); - url.setHost(nameSpace); + const QString canonicalNamespace = nameSpace.toLower(); + url.setHost(canonicalNamespace); url.setPath(vFolder); - const QString expectedUrl(scheme + QLatin1String("://") + nameSpace + slash + vFolder); + const QString expectedUrl(scheme + QLatin1String("://") + + canonicalNamespace + slash + vFolder); return url.isValid() && url.toString() == expectedUrl; } -- cgit v0.12 From 6776acfcc18132a2b084aa6bbb5515620a63b6a8 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 8 Jul 2010 09:18:50 +0200 Subject: qdoc: Fixed table of contents for namespace pages. Task-number: QTBUG-11992 (cherry picked from commit 28f84d2ed4000391f855140f57c359bc858d4799) --- tools/qdoc3/htmlgenerator.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 7acacff..813bb4b 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -2077,7 +2077,8 @@ void HtmlGenerator::generateTableOfContents(const Node *node, } } } - else if (sections && (node->type() == Node::Class)) { + else if (sections && ((node->type() == Node::Class) || + (node->type() == Node::Namespace))) { QList<Section>::ConstIterator s = sections->begin(); while (s != sections->end()) { if (!s->members.isEmpty() || !s->reimpMembers.isEmpty()) { -- cgit v0.12 From b5fad0d1d260ce900885f63f794cadd3d9dc25ba Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 8 Jul 2010 13:43:57 +0200 Subject: qdoc: Fixed broken QML property links. Task-number: QTBUG-12038 (cherry picked from commit 5903558f17a7a3173ad7a592892262bf297b52f2) --- tools/qdoc3/htmlgenerator.cpp | 2 +- tools/qdoc3/node.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 813bb4b..4aa53d8 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -3009,7 +3009,7 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode, static const QString headerTag("headerfile"); static const QString funcTag("func"); static const QString linkTag("link"); - + // replace all <@link> tags: "(<@link node=\"([^\"]+)\">).*(</@link>)" bool done = false; for (int i = 0, srcSize = src.size(); i < srcSize;) { diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index b077074..da62e29 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -299,7 +299,7 @@ InnerNode::~InnerNode() Node *InnerNode::findNode(const QString& name) { Node *node = childMap.value(name); - if (node) + if (node && node->subType() != QmlPropertyGroup) return node; if ((type() == Fake) && (subType() == QmlClass)) { for (int i=0; i<children.size(); ++i) { -- cgit v0.12 From bb17a182c05c52fd13e2315920a04c859f1516df Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Tue, 13 Jul 2010 10:02:54 +0200 Subject: QSslSocket: fix documentation for QSslSocket::setPeerVerifyMode() (cherry picked from commit 2c48de46fdfeb935d1f31ae18f13add52c162ac8) --- src/network/ssl/qsslsocket.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index f85fa84..f73068e 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -574,7 +574,7 @@ void QSslSocket::setProtocol(QSsl::SslProtocol protocol) certificate is valid. The default mode is AutoVerifyPeer, which tells QSslSocket to use - VerifyPeer for clients, QueryPeer for clients. + VerifyPeer for clients and QueryPeer for servers. \sa setPeerVerifyMode(), peerVerifyDepth(), mode() */ @@ -594,7 +594,7 @@ QSslSocket::PeerVerifyMode QSslSocket::peerVerifyMode() const certificate is valid. The default mode is AutoVerifyPeer, which tells QSslSocket to use - VerifyPeer for clients, QueryPeer for clients. + VerifyPeer for clients and QueryPeer for servers. Setting this mode after encryption has started has no effect on the current connection. -- cgit v0.12 From 848d32c91a18667a5a018dbd35f47d3fcfa018ad Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Thu, 15 Jul 2010 09:48:45 +1000 Subject: Text element does not clip even with clip=true Task: QTBUG-12201 Reviewed-by: Michael Brasser (cherry picked from commit 8ed72a96bc5c3af283f8ca4460adae9d4b466479) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 2 +- src/declarative/graphicsitems/qdeclarativetext.cpp | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 4abffc6..409af3a 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2499,7 +2499,7 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi \qmlproperty bool Item::clip This property holds whether clipping is enabled. - if clipping is enabled, an item will clip its own painting, as well + If clipping is enabled, an item will clip its own painting, as well as the painting of its children, to its bounding rectangle. Non-rectangular clipping regions are not supported for performance reasons. diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 200a680..ea418cf 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -1125,6 +1125,15 @@ int QDeclarativeText::resourcesLoading() const return d->doc ? d->doc->resourcesLoading() : 0; } +/*! + \qmlproperty bool Text::clip + This property holds whether the text is clipped. + + Note that if the text does not fit in the bounding rectangle it will be abruptly chopped. + + If you want to display potentially long text in a limited space, you probably want to use \c elide instead. +*/ + void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *) { Q_D(QDeclarativeText); @@ -1144,13 +1153,10 @@ void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid bool needClip = clip() && (d->imgCache.width() > width() || d->imgCache.height() > height()); - if (needClip) { - p->save(); - p->setClipRect(boundingRect(), Qt::IntersectClip); - } - p->drawPixmap(br.x(), br.y(), d->imgCache); if (needClip) - p->restore(); + p->drawPixmap(0, 0, width(), height(), d->imgCache, -br.x(), -br.y(), width(), height()); + else + p->drawPixmap(br.x(), br.y(), d->imgCache); if (d->smooth) { p->setRenderHint(QPainter::Antialiasing, oldAA); @@ -1164,7 +1170,7 @@ void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid if (needClip) { p->save(); - p->setClipRect(boundingRect(), Qt::IntersectClip); + p->setClipRect(0, 0, width(), height(), Qt::IntersectClip); } if (d->richText) { QAbstractTextDocumentLayout::PaintContext context; -- cgit v0.12 From 58ec5c8fe2e6c9f69402df8aeac2ca30029e77de Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Wed, 7 Jul 2010 10:50:58 +0200 Subject: qdoc: Removed a lot of dead code to minimize confusion. (cherry picked from commit 0ad74254d0810459bc08fdf9c0898a0d73f596b0) --- tools/qdoc3/htmlgenerator.cpp | 229 +----------------------------------------- tools/qdoc3/htmlgenerator.h | 6 -- 2 files changed, 1 insertion(+), 234 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 4aa53d8..37ae4fe 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -346,17 +346,6 @@ QString HtmlGenerator::format() */ void HtmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) { -#if 0 - // Copy the stylesheets from the directory containing the qdocconf file. - // ### This should be changed to use a special directory in doc/src. - QStringList::ConstIterator styleIter = stylesheets.begin(); - QDir configPath = QDir::current(); - while (styleIter != stylesheets.end()) { - QString filePath = configPath.absoluteFilePath(*styleIter); - Config::copyFile(Location(), filePath, filePath, outputDir()); - ++styleIter; - } -#endif myTree = tree; nonCompatClasses.clear(); mainClasses.clear(); @@ -371,9 +360,6 @@ void HtmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) findAllFunctions(tree->root()); findAllLegaleseTexts(tree->root()); findAllNamespaces(tree->root()); -#ifdef ZZZ_QDOC_QML - findAllQmlClasses(tree->root()); -#endif findAllSince(tree->root()); PageGenerator::generateTree(tree, marker); @@ -1259,30 +1245,6 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" << Atom(Atom::LineBreak); -#if 0 - // No longer used because the modeule name is a breadcrumb. - QString fixedModule = inner->moduleName(); - if (fixedModule == "Qt3SupportLight") - fixedModule = "Qt3Support"; - if (!fixedModule.isEmpty()) - subtitleText << "[" << Atom(Atom::AutoLink, fixedModule) << " module]"; - - if (fixedModule.isEmpty()) { - QMultiMap<QString, QString> publicGroups = myTree->publicGroups(); - QList<QString> groupNames = publicGroups.values(inner->name()); - if (!groupNames.isEmpty()) { - qSort(groupNames.begin(), groupNames.end()); - subtitleText << "["; - for (int j=0; j<groupNames.count(); j++) { - subtitleText << Atom(Atom::AutoLink, groupNames[j]); - if (j<groupNames.count()-1) - subtitleText <<", "; - } - subtitleText << "]"; - } - } -#endif - generateHeader(title, inner, marker); sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay); generateTableOfContents(inner,marker,§ions); @@ -1858,7 +1820,7 @@ void HtmlGenerator::generateHeader(const QString& title, generateBreadCrumbs(title,node,marker); out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); -#if 0 // Removed for new docf format. MWS +#if 0 // Removed for new doc format. MWS if (node && !node->links().empty()) out() << "<p>\n" << navigationLinks << "</p>\n"; #endif @@ -2671,19 +2633,7 @@ void HtmlGenerator::generateQmlItem(const Node *node, marked.replace("<@type>", ""); marked.replace("</@type>", ""); } - if (node->type() == Node::QmlProperty) { - const QmlPropertyNode* qpn = static_cast<const QmlPropertyNode*>(node); - if (!summary && qpn->name() == "color" && qpn->dataType() == "color") { - if (relative && relative->name() == "GradientStop") { - qDebug() << "color : color"; - debugging_on = true; - qDebug() << " " << relative->name() << relative->type() << relative->subType(); - qDebug() << marked; - } - } - } out() << highlightedCode(marked, marker, relative, false, node); - debugging_on = false; } #endif @@ -3075,13 +3025,6 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode, if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) { par1 = QStringRef(); const Node* n = marker->resolveTarget(arg.toString(), myTree, relative, self); - if (HtmlGenerator::debugging_on) { - qDebug() << "arg.toString()" << arg.toString(); - if (n) { - qDebug() << " " << n->name() << n->type() << n->subType(); - qDebug() << " " << relative->name() << relative->type() << relative->subType(); - } - } addLink(linkForNode(n,relative), arg, &html); handled = true; } @@ -3687,13 +3630,6 @@ void HtmlGenerator::findAllSince(const InnerNode *node) } } -#if 0 - const QRegExp versionSeparator("[\\-\\.]"); - const int minorIndex = version.indexOf(versionSeparator); - const int patchIndex = version.indexOf(versionSeparator, minorIndex+1); - version = version.left(patchIndex); -#endif - void HtmlGenerator::findAllFunctions(const InnerNode *node) { NodeList::ConstIterator c = node->childNodes().begin(); @@ -3757,29 +3693,6 @@ void HtmlGenerator::findAllNamespaces(const InnerNode *node) } } -#ifdef ZZZ_QDOC_QML -/*! - This function finds all the qml element nodes and - stores them in a map for later use. - */ -void HtmlGenerator::findAllQmlClasses(const InnerNode *node) -{ - NodeList::const_iterator c = node->childNodes().constBegin(); - while (c != node->childNodes().constEnd()) { - if ((*c)->type() == Node::Fake) { - const FakeNode* fakeNode = static_cast<const FakeNode *>(*c); - if (fakeNode->subType() == Node::QmlClass) { - const QmlClassNode* qmlNode = - static_cast<const QmlClassNode*>(fakeNode); - const Node* n = qmlNode->classNode(); - } - qmlClasses.insert(fakeNode->name(),*c); - } - ++c; - } -} -#endif - int HtmlGenerator::hOffset(const Node *node) { switch (node->type()) { @@ -3788,12 +3701,6 @@ int HtmlGenerator::hOffset(const Node *node) return 2; case Node::Fake: return 1; -#if 0 - if (node->doc().briefText().isEmpty()) - return 1; - else - return 2; -#endif case Node::Enum: case Node::Typedef: case Node::Function: @@ -4467,138 +4374,4 @@ void HtmlGenerator::generatePageIndex(const QString& fileName, CodeMarker* marke #endif -#if 0 // fossil removed for new doc format MWS 19/04/2010 - out() << "<!DOCTYPE html\n" - " PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"DTD/xhtml1-strict.dtd\">\n"; - out() << QString("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"%1\" lang=\"%1\">\n").arg(naturalLanguage); - - QString shortVersion; - if ((project != "Qtopia") && (project != "Qt Extended")) { - shortVersion = project + " " + shortVersion + ": "; - if (node && !node->doc().location().isEmpty()) - out() << "<!-- " << node->doc().location().fileName() << " -->\n"; - - shortVersion = myTree->version(); - if (shortVersion.count(QChar('.')) == 2) - shortVersion.truncate(shortVersion.lastIndexOf(QChar('.'))); - if (!shortVersion.isEmpty()) { - if (project == "QSA") - shortVersion = "QSA " + shortVersion + ": "; - else - shortVersion = "Qt " + shortVersion + ": "; - } - } - - out() << "<head>\n" - " <title>" << shortVersion << protectEnc(title) << "</title>\n"; - out() << QString("<meta http-equiv=\"Content-type\" content=\"text/html; charset=%1\" />").arg(outputEncoding); - - if (!style.isEmpty()) - out() << " <style type=\"text/css\">" << style << "</style>\n"; - - const QMap<QString, QString> &metaMap = node->doc().metaTagMap(); - if (!metaMap.isEmpty()) { - QMapIterator<QString, QString> i(metaMap); - while (i.hasNext()) { - i.next(); - out() << " <meta name=\"" << protectEnc(i.key()) << "\" contents=\"" - << protectEnc(i.value()) << "\" />\n"; - } - } - - navigationLinks.clear(); - - if (node && !node->links().empty()) { - QPair<QString,QString> linkPair; - QPair<QString,QString> anchorPair; - const Node *linkNode; - - if (node->links().contains(Node::PreviousLink)) { - linkPair = node->links()[Node::PreviousLink]; - linkNode = findNodeForTarget(linkPair.first, node, marker); - if (!linkNode || linkNode == node) - anchorPair = linkPair; - else - anchorPair = anchorForNode(linkNode); - - out() << " <link rel=\"prev\" href=\"" - << anchorPair.first << "\" />\n"; - - navigationLinks += "[Previous: <a href=\"" + anchorPair.first + "\">"; - if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) - navigationLinks += protectEnc(anchorPair.second); - else - navigationLinks += protectEnc(linkPair.second); - navigationLinks += "</a>]\n"; - } - if (node->links().contains(Node::ContentsLink)) { - linkPair = node->links()[Node::ContentsLink]; - linkNode = findNodeForTarget(linkPair.first, node, marker); - if (!linkNode || linkNode == node) - anchorPair = linkPair; - else - anchorPair = anchorForNode(linkNode); - - out() << " <link rel=\"contents\" href=\"" - << anchorPair.first << "\" />\n"; - - navigationLinks += "[<a href=\"" + anchorPair.first + "\">"; - if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) - navigationLinks += protectEnc(anchorPair.second); - else - navigationLinks += protectEnc(linkPair.second); - navigationLinks += "</a>]\n"; - } - if (node->links().contains(Node::NextLink)) { - linkPair = node->links()[Node::NextLink]; - linkNode = findNodeForTarget(linkPair.first, node, marker); - if (!linkNode || linkNode == node) - anchorPair = linkPair; - else - anchorPair = anchorForNode(linkNode); - - out() << " <link rel=\"next\" href=\"" - << anchorPair.first << "\" />\n"; - - navigationLinks += "[Next: <a href=\"" + anchorPair.first + "\">"; - if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) - navigationLinks += protectEnc(anchorPair.second); - else - navigationLinks += protectEnc(linkPair.second); - navigationLinks += "</a>]\n"; - } - if (node->links().contains(Node::IndexLink)) { - linkPair = node->links()[Node::IndexLink]; - linkNode = findNodeForTarget(linkPair.first, node, marker); - if (!linkNode || linkNode == node) - anchorPair = linkPair; - else - anchorPair = anchorForNode(linkNode); - out() << " <link rel=\"index\" href=\"" - << anchorPair.first << "\" />\n"; - } - if (node->links().contains(Node::StartLink)) { - linkPair = node->links()[Node::StartLink]; - linkNode = findNodeForTarget(linkPair.first, node, marker); - if (!linkNode || linkNode == node) - anchorPair = linkPair; - else - anchorPair = anchorForNode(linkNode); - out() << " <link rel=\"start\" href=\"" - << anchorPair.first << "\" />\n"; - } - } - - foreach (const QString &stylesheet, stylesheets) { - out() << " <link href=\"" << stylesheet << "\" rel=\"stylesheet\" " - << "type=\"text/css\" />\n"; - } - - foreach (const QString &customHeadElement, customHeadElements) { - out() << " " << customHeadElement << "\n"; - } - - out() << "</head>\n" - #endif - QT_END_NAMESPACE diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index a2fadf6..9c5be15 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -237,9 +237,6 @@ class HtmlGenerator : public PageGenerator void findAllFunctions(const InnerNode *node); void findAllLegaleseTexts(const InnerNode *node); void findAllNamespaces(const InnerNode *node); -#ifdef ZZZ_QDOC_QML - void findAllQmlClasses(const InnerNode *node); -#endif void findAllSince(const InnerNode *node); static int hOffset(const Node *node); static bool isThreeColumnEnumValueTable(const Atom *atom); @@ -317,9 +314,6 @@ class HtmlGenerator : public PageGenerator NodeMap obsoleteClasses; NodeMap namespaceIndex; NodeMap serviceClasses; -#ifdef QDOC_QML - NodeMap qmlClasses; -#endif QMap<QString, NodeMap > funcIndex; QMap<Text, const Node *> legaleseTexts; NewSinceMaps newSinceMaps; -- cgit v0.12 From 5ef1abb3b20bcdd1916016359d85c7277646c87f Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Wed, 7 Jul 2010 14:21:55 +0200 Subject: qdoc: Fixed a few links to QtObject (QML:QtObject) (cherry picked from commit 896de79554060aadf4963d8285ef3f5d8740428b) --- doc/src/declarative/elements.qdoc | 2 +- src/declarative/qml/qdeclarativeengine.cpp | 6 +++--- tools/qdoc3/cppcodeparser.cpp | 15 ++------------- tools/qdoc3/htmlgenerator.cpp | 5 ++++- tools/qdoc3/tree.cpp | 6 ++++-- 5 files changed, 14 insertions(+), 20 deletions(-) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index 48eb09f..349a8ed 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -114,7 +114,7 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \row \o \l {Connections} \o Explicitly connects signals and signal handlers \row \o \l {Component} \o Encapsulate QML items as a component \row \o \l {Timer} \o Provides timed triggers -\row \o \l {QtObject} \o Basic element containing only the objectName property +\row \o \l {QML:QtObject} {QtObject} \o Basic element containing only the objectName property \row \o \l {WorkerScript} \o Enables the use of threads in QML \row \o \l {Loader} \o Controls the loading of items or components \row \o \l {Repeater} \o Uses a model to create multiples of components diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index c7fa3b3..f6973bc 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -125,7 +125,7 @@ QT_BEGIN_NAMESPACE QObject. See the QObject documentation for further details. */ /*! - \qmlproperty string QtObject::objectName + \qmlproperty string QML:QtObject::objectName This property allows you to give a name to this specific object instance. See \l{scripting.html#accessing-child-qobjects}{Accessing Child QObjects} @@ -236,8 +236,8 @@ QDeclarativeEnginePrivate::QDeclarativeEnginePrivate(QDeclarativeEngine *e) } /*! -\qmlmethod url Qt::resolvedUrl(url) -Returns \c url resolved relative to the URL of the caller. + \qmlmethod url Qt::resolvedUrl(url) + Returns \c url resolved relative to the URL of the caller. */ QUrl QDeclarativeScriptEngine::resolvedUrl(QScriptContext *context, const QUrl& url) { diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp index e4870e3..d5108fd 100644 --- a/tools/qdoc3/cppcodeparser.cpp +++ b/tools/qdoc3/cppcodeparser.cpp @@ -728,23 +728,12 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, if (n) classNode = static_cast<const ClassNode*>(n); } - if (names[0].startsWith("Q")) + if (names[0].startsWith("Qt")) return new QmlClassNode(tre->root(), QLatin1String("QML:")+names[0], classNode); else return new QmlClassNode(tre->root(), names[0], classNode); } else if (command == COMMAND_QMLBASICTYPE) { -#if 0 - QStringList parts = arg.split(" "); - qDebug() << command << parts; - if (parts.size() > 1) { - FakeNode* pageNode = static_cast<FakeNode*>(tre->root()->findNode(parts[1], Node::Fake)); - if (pageNode) { - qDebug() << "FOUND"; - return new QmlBasicTypeNode(pageNode, parts[0]); - } - } -#endif return new QmlBasicTypeNode(tre->root(), arg); } else if ((command == COMMAND_QMLSIGNAL) || @@ -755,7 +744,7 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc, QString type; QmlClassNode* qmlClass = 0; if (splitQmlMethodArg(doc,arg,type,element)) { - if (element.startsWith(QLatin1String("Q"))) + if (element.startsWith(QLatin1String("Qt"))) element = QLatin1String("QML:") + element; Node* n = tre->findNode(QStringList(element),Node::Fake); if (n && n->subType() == Node::QmlClass) { diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 37ae4fe..2c89cdc 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -4203,7 +4203,10 @@ void HtmlGenerator::generateQmlInstantiates(const QmlClassNode* qcn, text << "["; text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); - text << Atom(Atom::String, qcn->name()); + QString name = qcn->name(); + if (name.startsWith(QLatin1String("QML:"))) + name = name.mid(4); // remove the "QML:" prefix + text << Atom(Atom::String, name); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); text << " instantiates the C++ class "; text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp index 022e1c2..d22a09a 100644 --- a/tools/qdoc3/tree.cpp +++ b/tools/qdoc3/tree.cpp @@ -173,9 +173,11 @@ const Node* Tree::findNode(const QStringList &path, } if (node && i == path.size() && (!(findFlags & NonFunction) || node->type() != Node::Function - || ((FunctionNode *)node)->metaness() == FunctionNode::MacroWithoutParams)) - if ((node != self) && (node->subType() != Node::QmlPropertyGroup)) + || ((FunctionNode *)node)->metaness() == FunctionNode::MacroWithoutParams)) { + if ((node != self) && (node->subType() != Node::QmlPropertyGroup)) { return node; + } + } current = current->parent(); } while (current); -- cgit v0.12 From 82a04410abdcf8473758407a4c426b6dd882d733 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Thu, 8 Jul 2010 10:36:50 +0200 Subject: Doc: adding HTML class names and style docs to the generator (cherry picked from commit 3062dac75befacffc1964d49392a58f5fb0b583f) --- tools/qdoc3/htmlgenerator.cpp | 66 ++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 2c89cdc..8148895 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -909,13 +909,13 @@ int HtmlGenerator::generateAtom(const Atom *atom, else out() << "<tr class=\"even\">"; - out() << "<tr><th>Constant</th>" - << "<th>Value</th>" - << "<th>Description</th></tr>\n"; + out() << "<tr><th class=\"tblConst\">Constant</th>" + << "<th class=\"tblval\">Value</th>" + << "<th class=\"tbldscr\">Description</th></tr>\n"; } else { out() << "<table class=\"valuelist\">" - << "<tr><th>Constant</th><th>Value</th></tr>\n"; + << "<tr><th class=\"tblConst\">Constant</th><th class=\"tblVal\">Value</th></tr>\n"; } } else { @@ -1129,9 +1129,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, case Atom::TableItemLeft: { if (inTableHeader) - out() << "<th"; + out() << "<th "; else - out() << "<td"; + out() << "<td "; QStringList spans = atom->string().split(","); if (spans.size() == 2) { @@ -1769,35 +1769,37 @@ void HtmlGenerator::generateHeader(const QString& title, if (offlineDocs) { - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Style common to all browsers + // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/OfflineStyle.css\" />"; // Only for Qt Creator out() << "</head>\n"; - out() << "<body class=\"offline narrow\" >\n"; // narrow mainly for Creator + out() << "<body class=\"offline narrow\">\n"; // narrow mainly for Creator + out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; } else { out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\"\n />"; - out() << " <!--[if IE]>\n"; - out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; - out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n"; - out() << "<![endif]-->\n"; - out() << "<!--[if lt IE 7]>\n"; - out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie6.css\">\n"; - out() << "<![endif]-->\n"; - out() << "<!--[if IE 7]>\n"; - out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie7.css\">\n"; - out() << "<![endif]-->\n"; - out() << "<!--[if IE 8]>\n"; - out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; - out() << "<![endif]-->\n"; + // out() << " <!--[if IE]>\n"; + // out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; + // out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n"; + // out() << "<![endif]-->\n"; + // out() << "<!--[if lt IE 7]>\n"; + // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie6.css\">\n"; + // out() << "<![endif]-->\n"; + // out() << "<!--[if IE 7]>\n"; + // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie7.css\">\n"; + // out() << "<![endif]-->\n"; + // out() << "<!--[if IE 8]>\n"; + // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; + // out() << "<![endif]-->\n"; // jquery functions out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; // menus and small docs js and css - out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; - out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />"; + // out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; + // out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; + // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; + // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />"; // syntax highlighter js and css // out() << " <link type=\"text/css\" rel=\"stylesheet\" href=\"style/shCore.css\"/>\n"; @@ -1809,7 +1811,7 @@ void HtmlGenerator::generateHeader(const QString& title, // out() << " </script>\n"; out() << "</head>\n"; - out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; + out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; // CheckEmptyAndLoadList() activating online search } #ifdef GENERATE_MAC_REFS @@ -2301,20 +2303,20 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative, out() << "<tr class=\"odd topAlign\">"; else out() << "<tr class=\"even topAlign\">"; - out() << "<td><p>"; + out() << "<td class=\"tblName\"><p>"; generateFullName(node, relative, marker); out() << "</p></td>"; if (!(node->type() == Node::Fake)) { Text brief = node->doc().trimmedBriefText(name); if (!brief.isEmpty()) { - out() << "<td><p>"; + out() << "<td class=\"tblDescr\"><p>"; generateText(brief, node, marker); out() << "</p></td>"; } } else { - out() << "<td><p>"; + out() << "<td class=\"tblDescr\"><p>"; out() << protectEnc(node->doc().briefText().toString()); out() << "</p></td>"; } @@ -4078,7 +4080,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, else out() << "<tr class=\"even\">"; - out() << "<td><p>"; + out() << "<td class=\"tblQmlPropNode\"><p>"; out() << "<a name=\"" + refForNode(qpn) + "\"></a>"; if (!qpn->isWritable()) @@ -4102,7 +4104,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "<tr class=\"odd\">"; else out() << "<tr class=\"even\">"; - out() << "<td><p>"; + out() << "<td class=\"tblQmlFuncNode\"><p>"; out() << "<a name=\"" + refForNode(qsn) + "\"></a>"; generateSynopsis(qsn,relative,marker,CodeMarker::Detailed,false); //generateQmlItem(qsn,relative,marker,false); @@ -4119,7 +4121,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "<tr class=\"odd\">"; else out() << "<tr class=\"even\">"; - out() << "<td><p>"; + out() << "<td class=\"tblQmlFuncNode\"><p>"; out() << "<a name=\"" + refForNode(qmn) + "\"></a>"; generateSynopsis(qmn,relative,marker,CodeMarker::Detailed,false); out() << "</p></td></tr>"; -- cgit v0.12 From 67d7bf08c8adbb7a33c4ed76629a72e2c6ae00ac Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Thu, 8 Jul 2010 11:13:17 +0200 Subject: Doc: changing index page (cherry picked from commit a538ccb93fd05b26dc7a7058bbb62e0dcb682f81) --- doc/src/index.qdoc | 31 +- doc/src/template/style/OfflineStyle.css | 832 ---------------------------- tools/qdoc3/htmlgenerator.cpp | 52 +- tools/qdoc3/test/qt-html-templates.qdocconf | 1 - 4 files changed, 61 insertions(+), 855 deletions(-) delete mode 100644 doc/src/template/style/OfflineStyle.css diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 18a1746..657f5d0 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -56,30 +56,29 @@ <div class="indexboxcont indexboxbar "> <div class="sectionlist tricol"> <ul> - <li><a href="classes.html">Class index</a></li> - <li><a href="functions.html">Function index</a></li> - <li><a href="modules.html">Modules</a></li> - <li><a href="namespaces.html">Namespaces</a></li> - <li><a href="qtglobal.html">Global stuff</a></li> - <li><a href="qdeclarativeelements.html">QML elements</a></li> + <li><a href="classes.html">Class index</a></li> + <li><a href="functions.html">Function index</a></li> + <li><a href="modules.html">Modules</a></li> + <li><a href="namespaces.html">Namespaces</a></li> + <li><a href="qtglobal.html">Global stuff</a></li> </ul> </div> <div class="sectionlist tricol"> <ul> - <li><a href="qt-basic-concepts.html">Basic Qt Architecture</a></li> - <li><a href="declarativeui.html">Device UI's & Qt Quick</a></li> - <li><a href="qt-gui-concepts.html">Desktop UI components</a></li> - <li><a href="platform-specific.html">Platform-specific info</a></li> - <li><a href="qt-graphics.html">Graphics, Painting & Printing</a></li> - <li><a href="qt-network.html">Input/Output & networking</a></li> + <li><a href="qt-basic-concepts.html">Programming with Qt</a></li> + <li><a href="qt-basic-concepts.html">Qt Architecture</a></li> + <li><a href="developing-with-qt.html">Cross-platform & Platform-specific Development</a></li> + <li><a href="technology-apis.html">Qt & standard technologies </a></li> + <li><a href="best-practices.html">Qt How-to's & best practices</a></li> </ul> </div> <div class="sectionlist"> <ul> - <li><a href="model-view-programming.html">Model/View programming</a></li> - <li><a href="technology-apis.html">Qt API's for other technologies</a></li> - <li><a href="best-practices.html">Qt How-to's & best practices</a></li> - <li><a href="developing-with-qt.html">Cross-platform development</a></li> + <li><a href="declarativeui.html">Qt Quick</a></li> + <li><a href="qdeclarativeintroduction.html">Introduction to QML</a></li> + <li><a href="qdeclarativeelements.html">QML Elements</a></li> + <li><a href="qt-gui-concepts.html">UI components</a></li> + <li><a href="declarativeui.html">Qt & GUI design</a></li> </ul> </div> </div> diff --git a/doc/src/template/style/OfflineStyle.css b/doc/src/template/style/OfflineStyle.css deleted file mode 100644 index afa7de0..0000000 --- a/doc/src/template/style/OfflineStyle.css +++ /dev/null @@ -1,832 +0,0 @@ -@media screen -{ - html - { - color: #000000; - background: #FFFFFF; - } - body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td - { - margin: 0; - padding: 0; - } - table - { - border-collapse: collapse; - border-spacing: 0; - } - fieldset, img - { - border: 0; - } - address, caption, cite, code, dfn, em, strong, th, var, optgroup - { - font-style: inherit; - font-weight: inherit; - } - del, ins - { - text-decoration: none; - } - li - { - list-style: none; - } - caption, th - { - text-align: left; - } - h1, h2, h3, h4, h5, h6 - { - font-size: 100%; - } - q:before, q:after - { - content: ''; - } - abbr, acronym - { - border: 0; - font-variant: normal; - } - sup - { - vertical-align: baseline; - } - sub - { - vertical-align: baseline; - } - tt, .qmlreadonly span, .qmldefault span - { - word-spacing:5px; - } - .heading - { - font: normal 600 16px/1.0 Arial; - } - .subtitle - { - font-size: 13px; - } - .small-subtitle - { - font-size: 13px; - } - legend - { - color: #000000; - } - input, button, textarea, select, optgroup, option - { - font-family: inherit; - font-size: inherit; - font-style: inherit; - font-weight: inherit; - } - input, button, textarea, select - { - font-size: 100%; - } - body - { - font: normal 13px/1.2 Verdana; - color: #363534; - } - strong - { - font-weight: bold; - } - em - { - font-style: italic; - } - a - { - color: #00732f; - text-decoration: none; - } - .header, .footer, .wrapper - { - /*min-width: 600px;*/ - max-width: 1500px; - margin: 0 5px; - } - .wrapper - { - position:relative; - top:50px; - } - .wrapper .bd - { - position: relative; - } - - .header, .footer - { - display: block; - clear: both; - overflow: hidden; - } - .header - { - height: 115px; - position: relative; - } - - - .header .qtref - { - position: absolute; - top: 28px; - left: 88px; - width: 302px; - height: 22px; - } - .header .qtref span - { - display: block; - height: 22px; - } - .wrap .content h1 - { - font: 600 18px/1.2 Arial; - } - .wrap .content h2 - { - font: 600 16px/1.2 Arial; - } - .wrap .content h3 - { - font: 600 14px/1.2 Arial; - } - .wrap .content h4 - { - font: 600 12px/1.2 Arial; - } - - .wrap .content p - { - line-height: 20px; - padding: 5px; - } - .wrap .content table p - { - line-height: 20px; - padding: 0px; - } - .wrap .content ul - { - padding-left: 25px; - padding-top: 10px; - } - a:hover - { - color: #4c0033; - text-decoration: underline; - } - .content a:visited - { - color: #4c0033; - text-decoration: none; - } - .content a:visited:hover - { - color: #4c0033; - text-decoration: underline; - } - - pre - { - border: 1px solid #DDDDDD; - margin: 0 20px 10px 10px; - padding: 20px 15px 20px 20px; - overflow-x: auto; - } - table, pre - { - -moz-border-radius: 7px 7px 7px 7px; - background-color: #F6F6F6; - border: 1px solid #E6E6E6; - border-collapse: separate; - font-size: 11px; - /*min-width: 395px;*/ - margin-bottom: 25px; - display: inline-block; - } - thead - { - margin-top: 5px; - font:600 12px/1.2 Arial; - } - th - { - padding: 5px 15px 5px 15px; - background-color: #E1E1E1; - /* border-bottom: 1px solid #E6E6E6;*/ - border-left: 1px solid #E6E6E6; - /* border-right: 1px solid #E6E6E6;*/ - } - td - { - padding: 3px 15px 3px 20px; - /* border-left: 1px solid #E6E6E6; - border-right: 1px solid #E6E6E6;*/ - } - tr.odd td:hover, tr.even td:hover - { - /* border-right: 1px solid #C3C3C3; - border-left: 1px solid #C3C3C3;*/ - } - - td.rightAlign - { - padding: 3px 15px 3px 10px; - } - table tr.odd - { - border-left: 1px solid #E6E6E6; - background-color: #F6F6F6; - color: #66666E; - } - table tr.even - { - border-left: 1px solid #E6E6E6; - background-color: #ffffff; - color: #66666E; - } - table tr.odd td:hover, table tr.even td:hover - { - background-color: #E6E6E6; - } - - span.comment - { - color: #8B0000; - font-style: italic; - } - span.string, span.char - { - color: #254117; - } - - .qmltype - { - text-align: center; - font-size: 160%; - } - .qmlreadonly - { - float: right; - color: #254117; - } - - .qmldefault - { - float: right; - color: red; - } - - .footer - { - border-top:1px solid #E5E5E5; - min-height: 100px; - color: #797775; - font: normal 9px/1 Verdana; - text-align: center; - padding-top: 40px; - margin: 0; - } - - - .wrap - { - margin: 0 5px 0 5px; - } - .wrap .toolbar - { - display:block; - } - - .wrap .breadcrumb ul li - { - float: left; - background: url(../images/breadcrumb.png) no-repeat 0 5px; - padding-left: 15px; - margin-left: 15px; - font-weight: bold; - } - .wrap .breadcrumb ul li.last - { - font-weight: normal; - } - .wrap .breadcrumb ul li a - { - /* color: #363534;*/ - color: #00732F; - } - .wrap .breadcrumb ul li.first - { - background-image: none; - padding-left: 0; - margin-left: 0; - } - .wrap .content - { - word-wrap:break-word; - } - .wrap .content li - { - /*padding-left: 12px;*/ - background: url(../images/bullet_sq.png) no-repeat 0 5px; - font: normal 400 10pt/1 Verdana; - /* color: #44a51c;*/ - margin-bottom: 10px; - } - - .offline .wrap .content - { - padding-top: 15px; - } - - .header:after, .footer:after, .breadcrumb:after, .wrap .content:after, .group:after - { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; - } - - hr - { - background-color: #E6E6E6; - border: 1px solid #E6E6E6; - height: 1px; - width: 100%; - text-align: left; - margin: 5px 0px 5px 0px; - } - - .content .alignedsummary - { - margin: 5px; - width:100%; - } - - - .toc - { - float: right; - -moz-border-radius: 7px 7px 7px 7px; - background-color: #F6F6F6; - border: 1px solid #DDDDDD; - margin: 0 20px 10px 10px; - padding: 20px 15px 20px 20px; - height: auto; - width: 200px; - } - - .toc h3, .generic a - { - font: 600 12px/1.2 Arial; - } - - .wrap .content .toc ul - { - padding-left: 0px; - } - - - .wrap .content .toc .level2 - { - margin-left: 15px; - } - - .wrap .content .toc .level3 - { - margin-left: 30px; - } - - .content .toc li - { - font: normal 10px/1.2 Verdana; - background: url(../images/bullet_dn.png) no-repeat 0 5px; - } - - - .generic{ - max-width:75%; - } - .generic td{ - padding:0; - } - - .generic .odd .alphaChar{ - background-color: #F6F6F6; - } - - .generic .even .alphaChar{ - background-color: #FFFFFF; - } - - .highlightedCode - { - margin:10px; - } - - .flowList{ - vertical-align:top; - } - .alphaChar{ - width:100%; - background-color:#F6F6F6; - border:1px solid #E6E6E6; - font-size:12pt; - padding-left:10px; - margin-top:10px; - margin-bottom:10px; - } - - .flowList dl{ - } - .flowList dd{ - display:inline-block; - margin-left:10px; - width:250px; - } - .wrap .content .flowList p{ - padding:0px; - } - - .relpage - { - -moz-border-radius: 7px 7px 7px 7px; - border: 1px solid #DDDDDD; - padding: 25px 25px; - clear: both; - } - .relpage ul - { - float: none; - padding: 15px; - } - .content .relpage li - { - font: normal 11px/1.2 Verdana; - } - h3.fn, span.fn - { - background-color: #F6F6F6; - border-width: 1px; - border-style: solid; - border-color: #E6E6E6; - font-weight: bold; - word-spacing:3px; - } - - .functionIndex { - font-size:12pt; - word-spacing:10px; - margin-bottom:10px; - background-color: #F6F6F6; - border-width: 1px; - border-style: solid; - border-color: #E6E6E6; - width:100%; - } - - .centerAlign { text-align:center;} - .rightAlign {text-align:right;} - .leftAlign {text-align:left;} - .topAlign{vertical-align:top } - .functionIndex a{display:inline-block;} - - /* start index box */ - .indexbox - { - width: 100%; - display:inline-block; - } - - .indexboxcont { display: block; } - - .indexboxbar - { - border-bottom:1px solid #E5E5E5; - margin-bottom: 25px; - } - - .indexboxcont .section - { - display: inline-block; - padding:0 2% 0 1%; - vertical-align:top; - } - - .indexboxcont .section { - float: left; - } - - .indexboxcont .section p - { - padding-top: 20px; - padding-bottom: 20px; - } - .indexboxcont .sectionlist - { - display: inline-block; - vertical-align:top; - padding: 0; - } - .indexboxcont .sectionlist ul - { - margin-bottom: 20px; - } - - .indexboxcont .sectionlist ul li - { - line-height: 12px; - } - - .content .indexboxcont li - { - font: normal 600 13px/1 Verdana; - } - - .indexbox a:hover, .indexbox a:visited:hover - { - color: #4c0033; - text-decoration: underline; - } - - .indexbox a:visited - { - color: #00732f; - text-decoration: none; - } - - .indexbox .indexIcon { - width: 11%; - } - - - .indexboxcont:after - { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; - } - - body.offline - { - background-image: none; - } - - .offline .footer { - margin: 0; - } - .offline .header - { - width: 100%; - margin: 0; - height: auto; - background-color: #ffffff; - padding: 10px 0 5px 0; - overflow: visible; - border-bottom: solid #E5E5E5 1px; - z-index:1; - position:fixed; - } - - .offline .header .content - { - } - .offline .header .qtref - { - color: #00732F; - position: static; - float: left; - margin-left: 5px; - font: bold 18px/1 Arial; - } - - .offline .header .qtref:visited - { - color: #00732F; - } - .offline .header .qtref:hover - { - color: #00732F; - text-decoration:none; - } - .offline .header .qtref span - { - background-image: none; - text-indent: 0; - text-decoration:none; - } - - .offline .wrap - { - margin: 0 5px 0 5px; - } - - .offline .wrap .toolbar - { - display:block; - padding-top:5px; - } - - .offline .wrap .breadcrumb ul li { - font-weight: normal; - } - - .offline .wrap .breadcrumb ul li a { - /*color: #44a51c;*/ - } - - .offline .wrap .breadcrumb ul li.last a { - /*color: #363534;*/ - } - - - - .narrow .indexboxcont .section { - width: 64%; - padding-left: 0; - } - - .narrow .indexboxcont .sectionlist { - width: 32.5%; - } - - .header .icon, - .sidebar, - .feedback, - .t_button, - .feedback, - #feedbackBox, - #feedback, - #blurpage, - .indexbox .indexIcon span, - .wrapper .hd, - .offline .indexbox .indexIcon, - .offline .header #nav-logo, - #offlinemenu, - #offlinesearch, - .offline .header #nav-topright, - .offline .header #shortCut , - .offline .wrapper .hd, - .offline .wrapper .ft, - .offline .sidebar, - .offline .wrap .feedback - { - display:none; - } - - /* end offline mode */ -#narrowmenu { - display: none; - float: right; - margin: 15px 40px 0 0; - font-size: 11px; - } - - .narrow #narrowmenu { - display: block; - } - - #narrowsearch{ - display:none; - } - - #narrowmenu ul - { - border-bottom:solid 1px #E5E5E5; - border-left:solid 1px #E5E5E5; - border-right:solid 1px #E5E5E5; - } - - #narrowmenu a { - line-height: 1.1; - background: url(../images/arrow_down.png) no-repeat 100% 50%; - white-space: nowrap; - padding: 0 16px 0 5px; - } - - #narrowmenu li { - margin-left: 20px; - } - - #narrowmenu li li { - margin: 0 0 5px 0; - } - - #narrowmenu li li a { - padding: 0; - background-image: none; - } - - #narrowmenu li, - #narrowmenu li ul { - background-color: #fff; - } - - #narrowmenu li ul { - width: auto; - padding: 5px; - margin-top:-15px; - } - - .sf-menu li:hover ul, .sf-menu li.sfHover ul { - top: 1.2em; - } -.sf-menu, .sf-menu * { - margin: 0; - padding: 0; - list-style: none; -} -.sf-menu { - line-height: 1.0; -} -.sf-menu ul { - position: absolute; - top: -999em; - width: 10em; /* left offset of submenus need to match (see below) */ -} -.sf-menu ul li { - width: 100%; -} -.sf-menu li:hover { - visibility: inherit; /* fixes IE7 'sticky bug' */ -} -.sf-menu li { - float: left; - position: relative; -} -.sf-menu a { - display: block; - position: relative; -} -.sf-menu li:hover ul, -.sf-menu li.sfHover ul { - left: 0; - top: 2.5em; /* match top ul list item height */ - z-index: 99; -} -ul.sf-menu li:hover li ul, -ul.sf-menu li.sfHover li ul { - top: -999em; -} -ul.sf-menu li li:hover ul, -ul.sf-menu li li.sfHover ul { - left: 10em; /* match ul width */ - top: 0; -} -ul.sf-menu li li:hover li ul, -ul.sf-menu li li.sfHover li ul { - top: -999em; -} -ul.sf-menu li li li:hover ul, -ul.sf-menu li li li.sfHover ul { - left: 10em; /* match ul width */ - top: 0; -} - .wrap .content ol li { - background:none; - font:400 10pt/1 Verdana; - margin-bottom:10px; - margin-left:12px; - } - .wrap .content ol li { - list-style-type:decimal; - - } - - - -} -/* end of screen media */ - -/* start of print media */ - -@media print -{ - input, textarea, .header, .footer, .toolbar, .feedback, .wrapper .hd, .wrapper .bd .sidebar, .wrapper .ft - { - display: none; - background: none; - } - .content - { - position: absolute; - top: 0px; - left: 0px; - background: none; - display: block; - } -} -/* end of print media */ diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 8148895..a50e08a 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1762,22 +1762,41 @@ void HtmlGenerator::generateHeader(const QString& title, else shortVersion = "Qt " + shortVersion + ": "; } - + // Generating page title out() << " <title>" << shortVersion << protectEnc(title) << "</title>\n"; - - //out() << " <title>Qt Reference Documentation</title>"; - + // Adding style sheet + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; + // Adding jquery and functions - providing online tools and search features + out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; + out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; + // Adding style and js for small windows + out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; + out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />"; + + // Adding syntax highlighter // future release + + // Setting assistant configuration if (offlineDocs) { +<<<<<<< Updated upstream:tools/qdoc3/htmlgenerator.cpp out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Style common to all browsers // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/OfflineStyle.css\" />"; // Only for Qt Creator out() << "</head>\n"; out() << "<body class=\"offline narrow\">\n"; // narrow mainly for Creator out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; +======= + out() << "</head>\n"; + out() << "<body class=\"offline narrow\" >\n"; // narrow mainly for Creator +// out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; +>>>>>>> Stashed changes:tools/qdoc3/htmlgenerator.cpp } + // Setting online doc configuration else { +<<<<<<< Updated upstream:tools/qdoc3/htmlgenerator.cpp out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\"\n />"; // out() << " <!--[if IE]>\n"; // out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; @@ -1792,10 +1811,25 @@ void HtmlGenerator::generateHeader(const QString& title, // out() << "<!--[if IE 8]>\n"; // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; // out() << "<![endif]-->\n"; +======= + // Custom browser styles + out() << " <!--[if IE]>\n"; + out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; + out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n"; + out() << "<![endif]-->\n"; + out() << "<!--[if lt IE 7]>\n"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie6.css\">\n"; + out() << "<![endif]-->\n"; + out() << "<!--[if IE 7]>\n"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie7.css\">\n"; + out() << "<![endif]-->\n"; + out() << "<!--[if IE 8]>\n"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; + out() << "<![endif]-->\n"; +>>>>>>> Stashed changes:tools/qdoc3/htmlgenerator.cpp // jquery functions - out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; - out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; // menus and small docs js and css +<<<<<<< Updated upstream:tools/qdoc3/htmlgenerator.cpp // out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; // out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; @@ -1812,6 +1846,12 @@ void HtmlGenerator::generateHeader(const QString& title, out() << "</head>\n"; out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; // CheckEmptyAndLoadList() activating online search +======= + + out() << "</head>\n"; + // CheckEmptyAndLoadList activating search + out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; +>>>>>>> Stashed changes:tools/qdoc3/htmlgenerator.cpp } #ifdef GENERATE_MAC_REFS diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf index 31c9d5a..19c768c 100644 --- a/tools/qdoc3/test/qt-html-templates.qdocconf +++ b/tools/qdoc3/test/qt-html-templates.qdocconf @@ -22,7 +22,6 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " <li class=\"nav-topright-doc nav-topright-doc-active\"><a href=\"http://doc.qt.nokia.com/\">\n" \ " DOC</a></li>\n" \ " <li class=\"nav-topright-blog\"><a href=\"http://blog.qt.nokia.com/\">BLOG</a></li>\n" \ - " <li class=\"nav-topright-shop\"><a title=\"SHOP\" href=\"http://shop.qt.nokia.com\">SHOP</a></li>\n" \ " </ul>\n" \ " </div>\n" \ " <div id=\"shortCut\">\n" \ -- cgit v0.12 From f6221adff4c3a154f22ee23705b6f76832421a81 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Thu, 8 Jul 2010 11:17:16 +0200 Subject: Doc: cleaning html generator (cherry picked from commit 5a6e3d952327753cb0cc00fa22804c5dab435c39) --- tools/qdoc3/htmlgenerator.cpp | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index a50e08a..ed177f2 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1780,23 +1780,17 @@ void HtmlGenerator::generateHeader(const QString& title, // Setting assistant configuration if (offlineDocs) { -<<<<<<< Updated upstream:tools/qdoc3/htmlgenerator.cpp out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Style common to all browsers // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/OfflineStyle.css\" />"; // Only for Qt Creator out() << "</head>\n"; out() << "<body class=\"offline narrow\">\n"; // narrow mainly for Creator - out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; - out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; -======= out() << "</head>\n"; out() << "<body class=\"offline narrow\" >\n"; // narrow mainly for Creator // out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; ->>>>>>> Stashed changes:tools/qdoc3/htmlgenerator.cpp } // Setting online doc configuration else { -<<<<<<< Updated upstream:tools/qdoc3/htmlgenerator.cpp out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\"\n />"; // out() << " <!--[if IE]>\n"; // out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; @@ -1811,7 +1805,6 @@ void HtmlGenerator::generateHeader(const QString& title, // out() << "<!--[if IE 8]>\n"; // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; // out() << "<![endif]-->\n"; -======= // Custom browser styles out() << " <!--[if IE]>\n"; out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; @@ -1826,32 +1819,13 @@ void HtmlGenerator::generateHeader(const QString& title, out() << "<!--[if IE 8]>\n"; out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; out() << "<![endif]-->\n"; ->>>>>>> Stashed changes:tools/qdoc3/htmlgenerator.cpp - // jquery functions - // menus and small docs js and css -<<<<<<< Updated upstream:tools/qdoc3/htmlgenerator.cpp - // out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; - // out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; - // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; - // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />"; - - // syntax highlighter js and css - // out() << " <link type=\"text/css\" rel=\"stylesheet\" href=\"style/shCore.css\"/>\n"; - // out() << " <link type=\"text/css\" rel=\"stylesheet\" href=\"style/shThemeDefault.css\"/>\n"; - // out() << " <script type=\"text/javascript\" src=\"scripts/shCore.js\"></script>\n"; - // out() << " <script type=\"text/javascript\" src=\"scripts/shBrushCpp.js\"></script>\n"; - // out() << " <script type=\"text/javascript\">\n"; - // out() << " SyntaxHighlighter.all();\n"; - // out() << " </script>\n"; out() << "</head>\n"; out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; // CheckEmptyAndLoadList() activating online search -======= out() << "</head>\n"; // CheckEmptyAndLoadList activating search out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; ->>>>>>> Stashed changes:tools/qdoc3/htmlgenerator.cpp } #ifdef GENERATE_MAC_REFS -- cgit v0.12 From 79208954f33269f337ab386554d5c43bc82c872a Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Thu, 8 Jul 2010 11:35:27 +0200 Subject: Doc: more cleaning (cherry picked from commit 25ace9513587abb5e52f78d900e6bec7b04bb663) --- tools/qdoc3/htmlgenerator.cpp | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index ed177f2..55214c3 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1771,8 +1771,8 @@ void HtmlGenerator::generateHeader(const QString& title, out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; // Adding style and js for small windows out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; - out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; + out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />"; // Adding syntax highlighter // future release @@ -1780,32 +1780,14 @@ void HtmlGenerator::generateHeader(const QString& title, // Setting assistant configuration if (offlineDocs) { - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Style common to all browsers - // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/OfflineStyle.css\" />"; // Only for Qt Creator + // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/CreatorStyle.css\" />"; // Only for Qt Creator out() << "</head>\n"; out() << "<body class=\"offline narrow\">\n"; // narrow mainly for Creator - out() << "</head>\n"; - out() << "<body class=\"offline narrow\" >\n"; // narrow mainly for Creator -// out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; } // Setting online doc configuration else { - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\"\n />"; - // out() << " <!--[if IE]>\n"; - // out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; - // out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n"; - // out() << "<![endif]-->\n"; - // out() << "<!--[if lt IE 7]>\n"; - // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie6.css\">\n"; - // out() << "<![endif]-->\n"; - // out() << "<!--[if IE 7]>\n"; - // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie7.css\">\n"; - // out() << "<![endif]-->\n"; - // out() << "<!--[if IE 8]>\n"; - // out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; - // out() << "<![endif]-->\n"; - // Custom browser styles + // Browser spec styles out() << " <!--[if IE]>\n"; out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n"; @@ -1821,9 +1803,6 @@ void HtmlGenerator::generateHeader(const QString& title, out() << "<![endif]-->\n"; out() << "</head>\n"; - out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; // CheckEmptyAndLoadList() activating online search - - out() << "</head>\n"; // CheckEmptyAndLoadList activating search out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; } -- cgit v0.12 From 01705e4119b8289c17da155a91ee6a846786db3c Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Thu, 8 Jul 2010 13:14:06 +0200 Subject: Doc: documenting docs (cherry picked from commit bc16436e33cfc61e0009474186cbb8210fb51df7) --- tools/qdoc3/htmlgenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 55214c3..0f65f9d 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1782,7 +1782,7 @@ void HtmlGenerator::generateHeader(const QString& title, { // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/CreatorStyle.css\" />"; // Only for Qt Creator out() << "</head>\n"; - out() << "<body class=\"offline narrow\">\n"; // narrow mainly for Creator + out() << "<body class=\"offline narrow\">\n"; // offline for Creator and Assistant } // Setting online doc configuration else -- cgit v0.12 From a34119272b588fa8ed31188f343b888b11813199 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Fri, 9 Jul 2010 12:18:18 +0200 Subject: Doc: Adding support for Qt Creator style Adding a variable to the qdocconf file will now generate the docs in Creator format Reviewed-by: Martin Smith (cherry picked from commit e649d255bc3785c9af7c36e743ac204c8890137e) --- tools/qdoc3/config.h | 1 + tools/qdoc3/htmlgenerator.cpp | 18 ++++++++++++++++-- tools/qdoc3/htmlgenerator.h | 1 + 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/qdoc3/config.h b/tools/qdoc3/config.h index c29becc..af58a3f 100644 --- a/tools/qdoc3/config.h +++ b/tools/qdoc3/config.h @@ -143,6 +143,7 @@ class Config #define CONFIG_NATURALLANGUAGE "naturallanguage" #define CONFIG_OBSOLETELINKS "obsoletelinks" #define CONFIG_ONLINE "online" +#define CONFIG_CREATOR "creator" #define CONFIG_OUTPUTDIR "outputdir" #define CONFIG_OUTPUTENCODING "outputencoding" #define CONFIG_OUTPUTLANGUAGE "outputlanguage" diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 0f65f9d..fec1049 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -214,6 +214,7 @@ HtmlGenerator::HtmlGenerator() numTableRows(0), threeColumnEnumValueTable(true), offlineDocs(true), + creatorDocs(false), funcLeftParen("\\S(\\()"), myTree(0), slow(false), @@ -276,6 +277,7 @@ void HtmlGenerator::initializeGenerator(const Config &config) project = config.getString(CONFIG_PROJECT); offlineDocs = !config.getBool(CONFIG_ONLINE); + creatorDocs = !config.getBool(CONFIG_CREATOR); projectDescription = config.getString(CONFIG_DESCRIPTION); if (projectDescription.isEmpty() && !project.isEmpty()) projectDescription = project + " Reference Documentation"; @@ -1780,9 +1782,17 @@ void HtmlGenerator::generateHeader(const QString& title, // Setting assistant configuration if (offlineDocs) { - // out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/CreatorStyle.css\" />"; // Only for Qt Creator + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/creatorStyle.css\" />"; // Only for Qt Creator out() << "</head>\n"; - out() << "<body class=\"offline narrow\">\n"; // offline for Creator and Assistant + //out() << "<body class=\"offline narrow \">\n"; // offline for Assistant + out() << "<body class=\"offline narrow creator\">\n"; // offline for Creator + } + if (creatorDocs) + { + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/creatorStyle.css\" />"; // Only for Qt Creator + out() << "</head>\n"; + //out() << "<body class=\"offline narrow \">\n"; // offline for Assistant + out() << "<body class=\"offline narrow creator\">\n"; // offline for Creator } // Setting online doc configuration else @@ -1852,6 +1862,10 @@ void HtmlGenerator::generateFooter(const Node *node) { out() << "</body>\n"; } + if (creatorDocs) + { + out() << "</body>\n"; + } else { out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index 9c5be15..abfca60 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -288,6 +288,7 @@ class HtmlGenerator : public PageGenerator int numTableRows; bool threeColumnEnumValueTable; bool offlineDocs; + bool creatorDocs; QString link; QStringList sectionNumber; QRegExp funcLeftParen; -- cgit v0.12 From ba0b76e0e58a33529223703e8d2917d20da25445 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Fri, 9 Jul 2010 15:21:03 +0200 Subject: Doc: fixing offline style (cherry picked from commit c50d351df3b7fe2f0d10444c1080b6a8c9833e0f) --- tools/qdoc3/htmlgenerator.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index fec1049..fb0f28d 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -214,7 +214,7 @@ HtmlGenerator::HtmlGenerator() numTableRows(0), threeColumnEnumValueTable(true), offlineDocs(true), - creatorDocs(false), + creatorDocs(true), funcLeftParen("\\S(\\()"), myTree(0), slow(false), @@ -1782,17 +1782,15 @@ void HtmlGenerator::generateHeader(const QString& title, // Setting assistant configuration if (offlineDocs) { - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/creatorStyle.css\" />"; // Only for Qt Creator + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Only for Qt Creator out() << "</head>\n"; - //out() << "<body class=\"offline narrow \">\n"; // offline for Assistant - out() << "<body class=\"offline narrow creator\">\n"; // offline for Creator + out() << "<body class=\"offline \">\n"; // offline for Assistant } if (creatorDocs) { - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/creatorStyle.css\" />"; // Only for Qt Creator + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Only for Qt Creator out() << "</head>\n"; - //out() << "<body class=\"offline narrow \">\n"; // offline for Assistant - out() << "<body class=\"offline narrow creator\">\n"; // offline for Creator + out() << "<body class=\"offline creator\">\n"; // offline for Creator } // Setting online doc configuration else -- cgit v0.12 From 3e6b200c2b7b755720724e3ebb22ba5045d14edf Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Tue, 13 Jul 2010 10:18:39 +0200 Subject: qdoc: Fixed several <div> elements that had the "/>" ending. (cherry picked from commit 1d3aa6681423d7a39a8ed375448a9418ef33a1f5) --- tools/qdoc3/htmlgenerator.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index fb0f28d..f57e28b 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1347,7 +1347,7 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, if (!inner->doc().isEmpty()) { //out() << "<hr />\n" - out() << "<div class=\"descr\"/>\n" // QTBUG-9504 + out() << "<div class=\"descr\">\n" // QTBUG-9504 << "<h2>" << "Detailed Description" << "</h2>\n"; generateBody(inner, marker); out() << "</div>\n"; // QTBUG-9504 @@ -1359,7 +1359,7 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, while (s != sections.end()) { //out() << "<hr />\n"; if (!(*s).divClass.isEmpty()) - out() << "<div class=\"" << (*s).divClass << "\"/>\n"; // QTBUG-9504 + out() << "<div class=\"" << (*s).divClass << "\">\n"; // QTBUG-9504 out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; NodeList::ConstIterator m = (*s).members.begin(); @@ -1596,11 +1596,11 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) Text brief = fake->doc().briefText(); if (fake->subType() == Node::Module && !brief.isEmpty()) { out() << "<a name=\"" << registerRef("details") << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; - out() << "<div class=\"descr\"/>\n"; // QTBUG-9504 + out() << "<div class=\"descr\">\n"; // QTBUG-9504 out() << "<h2>" << "Detailed Description" << "</h2>\n"; } else - out() << "<div class=\"descr\"/>\n"; // QTBUG-9504 + out() << "<div class=\"descr\">\n"; // QTBUG-9504 generateBody(fake, marker); out() << "</div>\n"; // QTBUG-9504 -- cgit v0.12 From 6ebe3585f948468d997b5d083100c56aa706f27f Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Wed, 14 Jul 2010 10:47:58 +0200 Subject: qdoc: Removed navigation arrow that was causing display problems. Task-number: QTBUG-12157, QTBUG-12148, QTBUG-12146 (cherry picked from commit d3f67bfe7cd1cc39d25e6a7371b2b185591008c4) --- tools/qdoc3/htmlgenerator.cpp | 30 ++++++++++++++++++------------ tools/qdoc3/htmlgenerator.h | 1 + 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index f57e28b..043731d 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -63,6 +63,12 @@ QT_BEGIN_NAMESPACE int HtmlGenerator::id = 0; bool HtmlGenerator::debugging_on = false; +#if 0 +QString HtmlGenerator::divNavTop = "<div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>"; +#endif + +QString HtmlGenerator::divNavTop = ""; + QString HtmlGenerator::sinceTitles[] = { " New Namespaces", @@ -1055,11 +1061,11 @@ int HtmlGenerator::generateAtom(const Atom *atom, } sectionNumber.last() = QString::number(sectionNumber.last().toInt() + 1); } - out() << "<a name=\"sec-" << sectionNumber.join("-") << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"sec-" << sectionNumber.join("-") << "\"></a>" << divNavTop << "\n"; } #else out() << "<a name=\"" << Doc::canonicalTitle(Text::sectionHeading(atom).toString()) - << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + << "\"></a>" << divNavTop << "\n"; #endif break; case Atom::SectionRight: @@ -1307,7 +1313,7 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, // out() << "<hr />\n"; out() << "<a name=\"" << registerRef((*s).name.toLower()) - << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + << "\"></a>" << divNavTop << "\n"; out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; generateSection(s->members, inner, marker, CodeMarker::Summary); } @@ -1316,7 +1322,7 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, // out() << "<hr />\n"; out() << "<a name=\"" << registerRef(name.toLower()) - << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + << "\"></a>" << divNavTop << "\n"; out() << "<h2>" << protectEnc(name) << "</h2>\n"; generateSection(s->reimpMembers, inner, marker, CodeMarker::Summary); } @@ -1343,7 +1349,7 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, out() << "</ul>\n"; } - out() << "<a name=\"" << registerRef("details") << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"" << registerRef("details") << "\"></a>" << divNavTop << "\n"; if (!inner->doc().isEmpty()) { //out() << "<hr />\n" @@ -1483,12 +1489,12 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) generateStatus(fake, marker); if (moduleNamespaceMap.contains(fake->name())) { - out() << "<a name=\"" << registerRef("namespaces") << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"" << registerRef("namespaces") << "\"></a>" << divNavTop << "\n"; out() << "<h2>Namespaces</h2>\n"; generateAnnotatedList(fake, marker, moduleNamespaceMap[fake->name()]); } if (moduleClassMap.contains(fake->name())) { - out() << "<a name=\"" << registerRef("classes") << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"" << registerRef("classes") << "\"></a>" << divNavTop << "\n"; out() << "<h2>Classes</h2>\n"; generateAnnotatedList(fake, marker, moduleClassMap[fake->name()]); } @@ -1551,13 +1557,13 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) sections = marker->qmlSections(qml_cn,CodeMarker::Summary); s = sections.begin(); while (s != sections.end()) { - out() << "<a name=\"" << registerRef((*s).name) << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"" << registerRef((*s).name) << "\"></a>" << divNavTop << "\n"; out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; generateQmlSummary(*s,fake,marker); ++s; } - out() << "<a name=\"" << registerRef("details") << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"" << registerRef("details") << "\"></a>" << divNavTop << "\n"; out() << "<h2>" << "Detailed Description" << "</h2>\n"; generateBody(fake, marker); if (cn) @@ -1587,7 +1593,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) sections = marker->sections(fake, CodeMarker::Summary, CodeMarker::Okay); s = sections.begin(); while (s != sections.end()) { - out() << "<a name=\"" << registerRef((*s).name) << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"" << registerRef((*s).name) << "\"></a>" << divNavTop << "\n"; out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; generateSectionList(*s, fake, marker, CodeMarker::Summary); ++s; @@ -1595,7 +1601,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) Text brief = fake->doc().briefText(); if (fake->subType() == Node::Module && !brief.isEmpty()) { - out() << "<a name=\"" << registerRef("details") << "\"></a><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "<a name=\"" << registerRef("details") << "\"></a>" << divNavTop << "\n"; out() << "<div class=\"descr\">\n"; // QTBUG-9504 out() << "<h2>" << "Detailed Description" << "</h2>\n"; } @@ -3481,7 +3487,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node, out() << "<h3 class=\"fn\">"; out() << "<a name=\"" + refForNode(node) + "\"></a>"; generateSynopsis(node, relative, marker, CodeMarker::Detailed); - out() << "</h3><div class=\"navTop\"><a href=\"#toc\"><img src=\"./images/bullet_up.png\"></a></div>\n"; + out() << "</h3>" << divNavTop << "\n"; } generateStatus(node, marker); diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index abfca60..54032d3 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -324,6 +324,7 @@ class HtmlGenerator : public PageGenerator static int id; public: static bool debugging_on; + static QString divNavTop; }; #define HTMLGENERATOR_ADDRESS "address" -- cgit v0.12 From cd2f294b9817ce0462687d47e6dce7cab11c9b61 Mon Sep 17 00:00:00 2001 From: Mark Brand <mabrand@mabrand.nl> Date: Mon, 12 Jul 2010 12:14:45 +0200 Subject: fix indentation Merge-request: 740 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> (cherry picked from commit 156193223ee9d58da66817ae6ffc0174bdf34e5b) --- tools/configure/configureapp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 952d4e0..0c450f0 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2439,7 +2439,7 @@ void Configure::generateOutputVars() qmakeFormatPlugins += "gif"; if (dictionary[ "TIFF" ] == "no") - qtConfig += "no-tiff"; + qtConfig += "no-tiff"; else if (dictionary[ "TIFF" ] == "plugin") qmakeFormatPlugins += "tiff"; if (dictionary[ "LIBTIFF" ] == "system") -- cgit v0.12 From 863ce8383d7c3b6ac825d4cec1da90f8d12d439b Mon Sep 17 00:00:00 2001 From: Mark Brand <mabrand@mabrand.nl> Date: Mon, 12 Jul 2010 12:14:46 +0200 Subject: fixed built-in jpeg and tiff in configure.exe, QTBUG-12093 Merge-request: 740 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> (cherry picked from commit 80ad34046e2d3d0b8bd5d8346cb1edb0c83c1585) --- tools/configure/configureapp.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 0c450f0..d3dec3c 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2440,6 +2440,8 @@ void Configure::generateOutputVars() if (dictionary[ "TIFF" ] == "no") qtConfig += "no-tiff"; + else if (dictionary[ "TIFF" ] == "yes") + qtConfig += "tiff"; else if (dictionary[ "TIFF" ] == "plugin") qmakeFormatPlugins += "tiff"; if (dictionary[ "LIBTIFF" ] == "system") @@ -2447,6 +2449,8 @@ void Configure::generateOutputVars() if (dictionary[ "JPEG" ] == "no") qtConfig += "no-jpeg"; + else if (dictionary[ "JPEG" ] == "yes") + qtConfig += "jpeg"; else if (dictionary[ "JPEG" ] == "plugin") qmakeFormatPlugins += "jpeg"; if (dictionary[ "LIBJPEG" ] == "system") -- cgit v0.12 From 74564a9b9f0f4e4ead8c3e38f72c24054b65f62a Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Wed, 14 Jul 2010 11:55:27 +0200 Subject: fix qconfig.h aliased header creation don't have configure create the forwarding headers (or symlinks on unix) for qconfig.h, but instead have syncqt create forwarding headers for not yet existing files. Reviewed-by: joerg (cherry picked from commit 74d0482c1690211a20bdfc996aa0ad30fdb9bb28) --- bin/syncqt | 2 ++ configure | 5 ----- tools/configure/configureapp.cpp | 10 ---------- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/bin/syncqt b/bin/syncqt index 11b1d72..cb67cc6 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -691,6 +691,7 @@ my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dis my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" ); my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" ); my %colliding_headers = (); +my %inject_headers = ( "$basedir/src/corelib/global" => ( "qconfig.h" ) ); foreach (@modules_to_sync) { #iteration info @@ -800,6 +801,7 @@ foreach (@modules_to_sync) { foreach (@subdirs) { my $subdir = "$_"; my @headers = findFiles("$subdir", "^[-a-z0-9_]*\\.h\$" , 0); + push @headers, $inject_headers{$subdir} if (defined $inject_headers{$subdir}); foreach (@headers) { my $header = "$_"; $header = 0 if("$header" =~ /^ui_.*.h/); diff --git a/configure b/configure index 166f201..62e0863 100755 --- a/configure +++ b/configure @@ -4481,11 +4481,6 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ]; fi mv -f "$QMAKE_QCONFIG_H" "$QCONFIG_H" - for conf in "$outpath/include/QtCore/qconfig.h" "$outpath/include/Qt/qconfig.h"; do - if [ '!' -f "$conf" ]; then - ln -s "$QCONFIG_H" "$conf" - fi - done #mkspecs/default is used as a (gasp!) default mkspec so QMAKESPEC needn't be set once configured rm -f mkspecs/default diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index d3dec3c..7f2d53b 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3164,16 +3164,6 @@ void Configure::generateConfigfiles() QFile::remove(outName); tmpFile.copy(outName); tmpFile.close(); - - if (!QFile::exists(buildPath + "/include/QtCore/qconfig.h")) { - if (!writeToFile("#include \"../../src/corelib/global/qconfig.h\"\n", - buildPath + "/include/QtCore/qconfig.h") - || !writeToFile("#include \"../../src/corelib/global/qconfig.h\"\n", - buildPath + "/include/Qt/qconfig.h")) { - dictionary["DONE"] = "error"; - return; - } - } } // Copy configured mkspec to default directory, but remove the old one first, if there is any -- cgit v0.12 From 308b4aa7cdbb55a07c3e988f4e42bdf77e784f93 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Tue, 13 Jul 2010 15:28:14 +0200 Subject: doc: Fixed several qdoc warnings. (cherry picked from commit 079a4105aff9c63d4107762aec478ade9900c7c2) --- doc/src/classes/phonon-api.qdoc | 12 +----------- doc/src/platforms/symbian-introduction.qdoc | 17 +++++++++++++++++ src/corelib/io/qprocess.cpp | 4 ++-- src/gui/text/qtextcursor.cpp | 6 +++--- src/network/socket/qtcpserver.cpp | 2 +- src/opengl/qgl.cpp | 14 ++++++++++---- 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/doc/src/classes/phonon-api.qdoc b/doc/src/classes/phonon-api.qdoc index 641b936..6fe0223 100644 --- a/doc/src/classes/phonon-api.qdoc +++ b/doc/src/classes/phonon-api.qdoc @@ -1577,7 +1577,6 @@ \since 4.4 \brief The MediaObject class provides an interface for media playback. - The media object manages a \l{Phonon::}{MediaSource}, which supplies the media object with multimedia content, e.g., from a file. A playback in Phonon is always started by calling the @@ -1651,17 +1650,8 @@ playback of the current source, but it is possible to try with a different one. A user readable error message is given by errorString(). - \section1 Symbian Platform Security Requirements - - On Symbian, processes which access media via the network must - have the \c NetworkServices platform security capability. If the client - process lacks this capability, operations will result in errors. - This failure is indicated by a state() of Phonon::ErrorState. - - Platform security capabilities are added via the - \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY} - qmake variable. + \sa {Symbian Platform Security Requirements} \sa Phonon::MediaSource, Phonon::AudioOutput, VideoWidget, {Music Player Example}, {Phonon Overview}, Phonon::VideoPlayer, Phonon::createPlayer(), {Phonon Module} diff --git a/doc/src/platforms/symbian-introduction.qdoc b/doc/src/platforms/symbian-introduction.qdoc index 22d858f..afb17c4 100644 --- a/doc/src/platforms/symbian-introduction.qdoc +++ b/doc/src/platforms/symbian-introduction.qdoc @@ -51,6 +51,7 @@ \o \l {Exception Safety with Symbian} \o \l {Platform Notes - Symbian} {Qt for the Symbian platform - state of support} \o \l {qmake Platform Notes#Symbian platform} {Qt for Symbian extensions for qmake} + \o \l {Symbian Platform Security Requirements} {Symbian Platform Security Requirements} \endlist \o \list @@ -60,6 +61,22 @@ */ /*! + \page symbian-platform-security-requirements.html + + \title Symbian Platform Security Requirements + \ingroup qtsymbian + + On Symbian, processes that access media via the network must + have the \c NetworkServices platform security capability. If the client + process lacks this capability, operations will result in errors. + This failure is indicated by a state() of Phonon::ErrorState. + + Platform security capabilities are added via the + \l{qmake-variable-reference.html#target-capability}{TARGET.CAPABILITY} + qmake variable. +*/ + +/*! \page symbian-with-qt-introduction.html \title The Symbian platform - Introduction to Qt diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index 9bc4063..739ac4d 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -1399,10 +1399,10 @@ QString QProcess::nativeArguments() const \since 4.7 \overload - Sets additional native command line arguments for the program. + Sets additional native command line \a arguments for the program. On operating systems where the system API for passing command line - arguments to a subprocess natively uses a single string, one can + \a arguments to a subprocess natively uses a single string, one can conceive command lines which cannot be passed via QProcess's portable list-based API. In such cases this function must be used to set a string which is \e appended to the string composed from the usual diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index a9caa6b..1ed9a18 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -1281,7 +1281,7 @@ void QTextCursor::setVisualNavigation(bool b) /*! \since 4.7 - Sets the visual x position for vertical cursor movements. + Sets the visual x position for vertical cursor movements to \a x. The vertical movement x position is cleared automatically when the cursor moves horizontally, and kept unchanged when the cursor moves vertically. The mechanism allows the cursor to move up and down on a @@ -1333,8 +1333,8 @@ bool QTextCursor::keepPositionOnInsert() const Defines whether the cursor should keep its current position when text gets inserted at the current position of the cursor. - If \b is true, the cursor keeps its current position when text gets inserted at the positing of the cursor. - If \b is false, the cursor moves along with the inserted text. + If \a b is true, the cursor keeps its current position when text gets inserted at the positing of the cursor. + If \a b is false, the cursor moves along with the inserted text. The default is false. diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp index 55f926d..0640c7c 100644 --- a/src/network/socket/qtcpserver.cpp +++ b/src/network/socket/qtcpserver.cpp @@ -577,7 +577,7 @@ void QTcpServer::incomingConnection(int socketDescriptor) /*! This function is called by QTcpServer::incomingConnection() - to add a socket to the list of pending incoming connections. + to add the \a socket to the list of pending incoming connections. \note Don't forget to call this member from reimplemented incomingConnection() if you do not want to break the diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index fc28a73..2fa33bf 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1334,6 +1334,10 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co \value OpenGL_Version_3_2 OpenGL version 3.2 or higher is present. + \value OpenGL_Version_3_3 OpenGL version 3.3 or higher is present. + + \value OpenGL_Version_4_0 OpenGL version 4.0 or higher is present. + \value OpenGL_ES_CommonLite_Version_1_0 OpenGL ES version 1.0 Common Lite or higher is present. \value OpenGL_ES_Common_Version_1_0 OpenGL ES version 1.0 Common or higher is present. @@ -5037,8 +5041,9 @@ void QGLWidget::deleteTexture(QMacCompatGLuint id) /*! \since 4.4 - Calls the corresponding QGLContext::drawTexture() on - this widget's context. + Calls the corresponding QGLContext::drawTexture() with + \a target, \a textureId, and \a textureTarget for this + widget's context. */ void QGLWidget::drawTexture(const QRectF &target, GLuint textureId, GLenum textureTarget) { @@ -5058,8 +5063,9 @@ void QGLWidget::drawTexture(const QRectF &target, QMacCompatGLuint textureId, QM /*! \since 4.4 - Calls the corresponding QGLContext::drawTexture() on - this widget's context. + Calls the corresponding QGLContext::drawTexture() with + \a point, \a textureId, and \a textureTarget for this + widget's context. */ void QGLWidget::drawTexture(const QPointF &point, GLuint textureId, GLenum textureTarget) { -- cgit v0.12 From 5cd75f7e89d94cb1d9450ebae81b95c33ab4d1fe Mon Sep 17 00:00:00 2001 From: Markus Goetz <Markus.Goetz@nokia.com> Date: Thu, 15 Jul 2010 14:56:54 +0200 Subject: QNAM HTTP: Fix problem with cached files and metaDataChanged() Reviewed-by: Peter Hartmann (cherry picked from commit 1c34bf050da3c4d6c303e1dd1dad9eb99e7ccbf4) --- src/network/access/qnetworkaccesshttpbackend.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index a6c5c02..f617244 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -944,10 +944,10 @@ bool QNetworkAccessHttpBackend::sendCacheContents(const QNetworkCacheMetaData &m checkForRedirect(status); - emit metaDataChanged(); - - // invoke this asynchronously, else Arora/QtDemoBrowser don't like cached downloads - // see task 250221 / 251801 + // This needs to be emitted in the event loop because it can be reached at + // the direct code path of qnam.get(...) before the user has a chance + // to connect any signals. + QMetaObject::invokeMethod(this, "metaDataChanged", Qt::QueuedConnection); qRegisterMetaType<QIODevice*>("QIODevice*"); QMetaObject::invokeMethod(this, "writeDownstreamData", Qt::QueuedConnection, Q_ARG(QIODevice*, contents)); -- cgit v0.12 From e64b427db8f835f8e9272ffdcde285b152cfd9ba Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil <prasanth.ullattil@nokia.com> Date: Wed, 14 Jul 2010 13:52:39 +0200 Subject: Drag and drop cursor doesnot change on invalid drop areas (Cocoa) Previos versions of Mac OS X (< 10.6) didn't have support for such 'Not Allowed' cursors. 10.6 introduced a new method for NSCursor called operationNotAllowedCursor. This fix uses the new cusor on available platforms. Task-number: QTBUG-5186 Reviewed-by: Denis (cherry picked from commit 247e3637c41cc14d174a1170957274fb8a9400b4) --- src/gui/kernel/qcocoaview_mac.mm | 38 +++++++++++++++++++++++++++++++++++--- src/gui/kernel/qcocoaview_mac_p.h | 1 + 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 5c90e2e..1935531 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -269,6 +269,28 @@ static int qCocoaViewCount = 0; dropData = new QCocoaDropData(dropPasteboard); } +- (void)changeDraggingCursor:(NSDragOperation)newOperation +{ + static SEL action = nil; + static bool operationSupported = false; + if (action == nil) { + action = NSSelectorFromString(@"operationNotAllowedCursor"); + if ([NSCursor respondsToSelector:action]) { + operationSupported = true; + } + } + if (operationSupported) { + NSCursor *notAllowedCursor = [NSCursor performSelector:action]; + bool isNotAllowedCursor = ([NSCursor currentCursor] == notAllowedCursor); + if (newOperation == NSDragOperationNone && !isNotAllowedCursor) { + [notAllowedCursor push]; + } else if (newOperation != NSDragOperationNone && isNotAllowedCursor) { + [notAllowedCursor pop]; + } + + } +} + - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender { // NB: This function is called from QCoocaWindow/QCocoaPanel rather than directly @@ -300,6 +322,7 @@ static int qCocoaViewCount = 0; if (!qDEEvent.isAccepted()) { // widget is not interested in this drag, so ignore this drop data. [self removeDropData]; + [self changeDraggingCursor:NSDragOperationNone]; return NSDragOperationNone; } else { // save the mouse position, used by draggingExited handler. @@ -321,6 +344,7 @@ static int qCocoaViewCount = 0; nsActions = QT_PREPEND_NAMESPACE(qt_mac_mapDropAction)(qDMEvent.dropAction()); } QT_PREPEND_NAMESPACE(qt_mac_copy_answer_rect)(qDMEvent); + [self changeDraggingCursor:nsActions]; return nsActions; } } @@ -335,16 +359,21 @@ static int qCocoaViewCount = 0; if (dragEnterSequence != [sender draggingSequenceNumber]) [self draggingEntered:sender]; // drag enter event was rejected, so ignore the move event. - if (dropData == 0) + if (dropData == 0) { + [self changeDraggingCursor:NSDragOperationNone]; return NSDragOperationNone; + } // return last value, if we are still in the answerRect. NSPoint globalPoint = [[sender draggingDestinationWindow] convertBaseToScreen:windowPoint]; NSPoint localPoint = [self convertPoint:windowPoint fromView:nil]; NSDragOperation nsActions = [sender draggingSourceOperationMask]; QPoint posDrag(localPoint.x, localPoint.y); if (qt_mac_mouse_inside_answer_rect(posDrag) - && QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec.lastOperation) == nsActions) - return QT_PREPEND_NAMESPACE(qt_mac_mapDropActions)(QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec.lastAction)); + && QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec.lastOperation) == nsActions) { + NSDragOperation operation = QT_PREPEND_NAMESPACE(qt_mac_mapDropActions)(QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec.lastAction)); + [self changeDraggingCursor:operation]; + return operation; + } // send drag move event to the widget QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec.lastOperation) = nsActions; Qt::DropActions qtAllowed = QT_PREPEND_NAMESPACE(qt_mac_mapNSDragOperations)(nsActions); @@ -373,6 +402,7 @@ static int qCocoaViewCount = 0; qDMEvent.setDropAction(Qt::IgnoreAction); } qt_mac_copy_answer_rect(qDMEvent); + [self changeDraggingCursor:operation]; return operation; } @@ -388,6 +418,8 @@ static int qCocoaViewCount = 0; QApplication::sendEvent(qwidget, &de); [self removeDropData]; } + [self changeDraggingCursor:NSDragOperationEvery]; + } - (BOOL)performDragOperation:(id <NSDraggingInfo>)sender diff --git a/src/gui/kernel/qcocoaview_mac_p.h b/src/gui/kernel/qcocoaview_mac_p.h index 33aaa24..b6b63ca 100644 --- a/src/gui/kernel/qcocoaview_mac_p.h +++ b/src/gui/kernel/qcocoaview_mac_p.h @@ -106,6 +106,7 @@ Q_GUI_EXPORT - (void) qt_clearQWidget; - (BOOL)qt_leftButtonIsRightButton; - (void)qt_setLeftButtonIsRightButton:(BOOL)isSwapped; +- (void)changeDraggingCursor:(NSDragOperation)newOperation; + (DnDParams*)currentMouseEvent; @end -- cgit v0.12 From 151983bd827c8a05b8798560ade4d911a04156c3 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Mon, 12 Jul 2010 18:32:06 +0200 Subject: QSslSocket: Improve error handling Reviewed-by: Markus Goetz Task-number: QT-3567 (cherry picked from commit c25c7c9bdfade6b906f37ac8bad44f6f0de57597) --- src/network/ssl/qsslsocket_openssl.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index c6e340f..46213ff 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -965,8 +965,20 @@ void QSslSocketBackendPrivate::transmit() #endif plainSocket->disconnectFromHost(); break; + case SSL_ERROR_SYSCALL: // some IO error + case SSL_ERROR_SSL: // error in the SSL library + // we do not know exactly what the error is, nor whether we can recover from it, + // so just return to prevent an endless loop in the outer "while" statement + q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(SSL_ERRORSTR())); + q->setSocketError(QAbstractSocket::UnknownSocketError); + emit q->error(QAbstractSocket::UnknownSocketError); + return; default: - // ### Handle errors better. + // SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT: can only happen with a + // BIO_s_connect() or BIO_s_accept(), which we do not call. + // SSL_ERROR_WANT_X509_LOOKUP: can only happen with a + // SSL_CTX_set_client_cert_cb(), which we do not call. + // So this default case should never be triggered. q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(SSL_ERRORSTR())); q->setSocketError(QAbstractSocket::UnknownSocketError); emit q->error(QAbstractSocket::UnknownSocketError); -- cgit v0.12 From 858b5d287ecc96fb9c5a0f533c0cc196ded9cc46 Mon Sep 17 00:00:00 2001 From: Andy Shaw <qt-info@nokia.com> Date: Wed, 14 Jul 2010 10:46:46 +0200 Subject: Silence warning when building with MSVC 2005 Reviewed-by: Eskil (cherry picked from commit 852ba9a62f65a27e42648d4b28b68c76b1589e75) --- src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index ee49a3d..d3f6a29 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1128,7 +1128,7 @@ void QGL2PaintEngineEx::fill(const QVectorPath &path, const QBrush &brush) d->fill(path); } -extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp +extern Q_GUI_EXPORT bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // qtransform.cpp void QGL2PaintEngineEx::stroke(const QVectorPath &path, const QPen &pen) -- cgit v0.12 From 152360b6daa24030904e186f08758babe90eaf9a Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 8 Jul 2010 10:41:16 +1000 Subject: Fix Symbian build (cherry picked from commit bd9e495a025ff8d282d54e8909771c8760ebdb3f) --- tools/qml/qml.pri | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/qml/qml.pri b/tools/qml/qml.pri index 0d01f70..fcd0c33 100644 --- a/tools/qml/qml.pri +++ b/tools/qml/qml.pri @@ -25,6 +25,8 @@ maemo5 { $$PWD/proxysettings_maemo5.ui } symbian:!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { SOURCES += $$PWD/deviceorientation_symbian.cpp + FORMS = $$PWD/recopts.ui \ + $$PWD/proxysettings.ui } else { SOURCES += $$PWD/deviceorientation.cpp FORMS = $$PWD/recopts.ui \ -- cgit v0.12 From 9948019d88ec22182c2cf0bd62c888bfbcdb7da5 Mon Sep 17 00:00:00 2001 From: Harald Fernengel <harald.fernengel@nokia.com> Date: Thu, 15 Jul 2010 16:50:28 +0200 Subject: Unbreak the Maemo 5 build after the Symbian fix Reviewed-by: Robert Griebl (cherry picked from commit 30630cf2bf8c7604efc3a52f74983c2237f309c3) --- tools/qml/qml.pri | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/qml/qml.pri b/tools/qml/qml.pri index fcd0c33..80afb45 100644 --- a/tools/qml/qml.pri +++ b/tools/qml/qml.pri @@ -17,16 +17,16 @@ SOURCES += $$PWD/qmlruntime.cpp \ $$PWD/loggerwidget.cpp RESOURCES = $$PWD/qmlruntime.qrc -maemo5 { +symbian:!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { + SOURCES += $$PWD/deviceorientation_symbian.cpp + FORMS = $$PWD/recopts.ui \ + $$PWD/proxysettings.ui +} else:maemo5 { QT += dbus HEADERS += $$PWD/texteditautoresizer_maemo5.h SOURCES += $$PWD/deviceorientation_maemo5.cpp FORMS = $$PWD/recopts_maemo5.ui \ $$PWD/proxysettings_maemo5.ui -} symbian:!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { - SOURCES += $$PWD/deviceorientation_symbian.cpp - FORMS = $$PWD/recopts.ui \ - $$PWD/proxysettings.ui } else { SOURCES += $$PWD/deviceorientation.cpp FORMS = $$PWD/recopts.ui \ -- cgit v0.12 From 42acecc6dc8f4d2fe09d5dda8907041845d37999 Mon Sep 17 00:00:00 2001 From: Lasse Holmstedt <lasse.holmstedt@nokia.com> Date: Wed, 14 Jul 2010 15:17:35 +0200 Subject: Fixed debugger's evaluation of dynamic properties in context Reviewed-by: Aaron Kennedy (cherry picked from commit ae39a510f86fd13d6d41bc85d4f5c243eca45eab) --- src/declarative/qml/qdeclarativeenginedebug.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp index 001da46..008d054 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/qml/qdeclarativeenginedebug.cpp @@ -495,7 +495,7 @@ void QDeclarativeEngineDebugServer::setBinding(int objectId, QDeclarativePropertyPrivate::setSignalExpression(property, declarativeExpression); } else { QDeclarativeBinding *binding = new QDeclarativeBinding(expression.toString(), object, context); - QDeclarativeProperty property(object, propertyName); + QDeclarativeProperty property(object, propertyName, context); binding->setTarget(property); binding->setNotifyOnValueChanged(true); QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(property, binding); -- cgit v0.12 From 3af27c679941e363c22769dfdccafeaa09d8a6e6 Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Sat, 17 Jul 2010 12:08:52 +1000 Subject: Rebuild configure.exe. (cherry picked from commit 956081702b5701ec570085174878a264c86c136b) --- configure.exe | Bin 1318912 -> 1318400 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/configure.exe b/configure.exe index 6817331..0863ecc 100755 Binary files a/configure.exe and b/configure.exe differ -- cgit v0.12 From afe175695d4dfe1f7bd131b651abbf14cc478dc3 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Mon, 12 Jul 2010 10:47:00 +0200 Subject: fix build for -no-qt3support QString::lower() is QT3_SUPPORT, the correct method is QString::toLower(). (cherry picked from commit 46175e55c8d053b61a45aea89a3e1b8371207dee) --- src/network/ssl/qsslsocket_openssl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 46213ff..a7340ea 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -1112,11 +1112,11 @@ bool QSslSocketBackendPrivate::startHandshake() QString peerName = (verificationPeerName.isEmpty () ? q->peerName() : verificationPeerName); QString commonName = configuration.peerCertificate.subjectInfo(QSslCertificate::CommonName); - if (!isMatchingHostname(commonName.lower(), peerName.lower())) { + if (!isMatchingHostname(commonName.toLower(), peerName.toLower())) { bool matched = false; foreach (const QString &altName, configuration.peerCertificate .alternateSubjectNames().values(QSsl::DnsEntry)) { - if (isMatchingHostname(altName.lower(), peerName.lower())) { + if (isMatchingHostname(altName.toLower(), peerName.toLower())) { matched = true; break; } -- cgit v0.12 From 06df15311bfb3e84033610fd55e8e242a0cadbc0 Mon Sep 17 00:00:00 2001 From: Shane Kearns <shane.kearns@accenture.com> Date: Fri, 16 Jul 2010 10:33:26 +0200 Subject: update def files for 69027cdb2ab9b89673edf29d5034bed33e614a05 Reviewed-by: Trust Me (cherry picked from commit 11f5b578e398c99570215facb905f1d82f6d6817) --- src/s60installs/bwins/QtNetworku.def | 3 +++ src/s60installs/eabi/QtNetworku.def | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def index 9d4507b..9911b36 100644 --- a/src/s60installs/bwins/QtNetworku.def +++ b/src/s60installs/bwins/QtNetworku.def @@ -1144,4 +1144,7 @@ EXPORTS ?startPolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1143 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void) ?capabilities@QNetworkConfigurationManagerPrivate@@QAE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1144 NONAME ; class QFlags<enum QNetworkConfigurationManager::Capability> QNetworkConfigurationManagerPrivate::capabilities(void) ?addPendingConnection@QTcpServer@@IAEXPAVQTcpSocket@@@Z @ 1145 NONAME ; void QTcpServer::addPendingConnection(class QTcpSocket *) + ?option@QAuthenticator@@QBE?AVQVariant@@ABVQString@@@Z @ 1146 NONAME ; class QVariant QAuthenticator::option(class QString const &) const + ?options@QAuthenticator@@QBE?AV?$QHash@VQString@@VQVariant@@@@XZ @ 1147 NONAME ; class QHash<class QString, class QVariant> QAuthenticator::options(void) const + ?setOption@QAuthenticator@@QAEXABVQString@@ABVQVariant@@@Z @ 1148 NONAME ; void QAuthenticator::setOption(class QString const &, class QVariant const &) diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index 3cc3644..eb30832 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1164,4 +1164,7 @@ EXPORTS _ZTV35QNetworkConfigurationManagerPrivate @ 1163 NONAME _ZThn8_N19QBearerEnginePluginD0Ev @ 1164 NONAME _ZThn8_N19QBearerEnginePluginD1Ev @ 1165 NONAME + _ZN14QAuthenticator9setOptionERK7QStringRK8QVariant @ 1166 NONAME + _ZNK14QAuthenticator6optionERK7QString @ 1167 NONAME + _ZNK14QAuthenticator7optionsEv @ 1168 NONAME -- cgit v0.12 From 98dad6147ed9f3edc4dd47fe21c629354f2f39ab Mon Sep 17 00:00:00 2001 From: Robert Griebl <robert.griebl@nokia.com> Date: Mon, 12 Jul 2010 18:02:03 +0200 Subject: Timing fix for slow devices. Although the wait is only specified as 50ms, it might still take longer than that for Qt to deliver the actual mouse release event (especially on embedded devices). The problem here is that in the meantime the auto-repeat on the button might have been triggered. Reviewed-by: Dominik Holland (cherry picked from commit 1e9348f52f06feb355245a9fffd786562e76e15f) --- tests/auto/qscrollbar/tst_qscrollbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qscrollbar/tst_qscrollbar.cpp b/tests/auto/qscrollbar/tst_qscrollbar.cpp index 735b2dd..16d5b42 100644 --- a/tests/auto/qscrollbar/tst_qscrollbar.cpp +++ b/tests/auto/qscrollbar/tst_qscrollbar.cpp @@ -130,7 +130,7 @@ void tst_QScrollBar::task_209492() QMouseEvent mousePressEvent(QEvent::MouseButtonPress, pressPoint, globalPressPoint, Qt::LeftButton, Qt::LeftButton, 0); QApplication::sendEvent(verticalScrollBar, &mousePressEvent); - QTest::qWait(50); + QTest::qWait(1); QMouseEvent mouseReleaseEvent(QEvent::MouseButtonRelease, pressPoint, globalPressPoint, Qt::LeftButton, Qt::LeftButton, 0); QApplication::sendEvent(verticalScrollBar, &mouseReleaseEvent); -- cgit v0.12 From 7702be3de6e2641afb1062f533567ca7a72e8e0f Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Sat, 17 Jul 2010 13:50:58 +1000 Subject: Revert "fix qconfig.h aliased header creation" This reverts commit 74564a9b9f0f4e4ead8c3e38f72c24054b65f62a, which breaks configure for Windows CE builds. --- bin/syncqt | 2 -- configure | 5 +++++ tools/configure/configureapp.cpp | 10 ++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bin/syncqt b/bin/syncqt index cb67cc6..11b1d72 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -691,7 +691,6 @@ my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dis my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" ); my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" ); my %colliding_headers = (); -my %inject_headers = ( "$basedir/src/corelib/global" => ( "qconfig.h" ) ); foreach (@modules_to_sync) { #iteration info @@ -801,7 +800,6 @@ foreach (@modules_to_sync) { foreach (@subdirs) { my $subdir = "$_"; my @headers = findFiles("$subdir", "^[-a-z0-9_]*\\.h\$" , 0); - push @headers, $inject_headers{$subdir} if (defined $inject_headers{$subdir}); foreach (@headers) { my $header = "$_"; $header = 0 if("$header" =~ /^ui_.*.h/); diff --git a/configure b/configure index 62e0863..166f201 100755 --- a/configure +++ b/configure @@ -4481,6 +4481,11 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ]; fi mv -f "$QMAKE_QCONFIG_H" "$QCONFIG_H" + for conf in "$outpath/include/QtCore/qconfig.h" "$outpath/include/Qt/qconfig.h"; do + if [ '!' -f "$conf" ]; then + ln -s "$QCONFIG_H" "$conf" + fi + done #mkspecs/default is used as a (gasp!) default mkspec so QMAKESPEC needn't be set once configured rm -f mkspecs/default diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 7f2d53b..d3dec3c 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3164,6 +3164,16 @@ void Configure::generateConfigfiles() QFile::remove(outName); tmpFile.copy(outName); tmpFile.close(); + + if (!QFile::exists(buildPath + "/include/QtCore/qconfig.h")) { + if (!writeToFile("#include \"../../src/corelib/global/qconfig.h\"\n", + buildPath + "/include/QtCore/qconfig.h") + || !writeToFile("#include \"../../src/corelib/global/qconfig.h\"\n", + buildPath + "/include/Qt/qconfig.h")) { + dictionary["DONE"] = "error"; + return; + } + } } // Copy configured mkspec to default directory, but remove the old one first, if there is any -- cgit v0.12 From 5488e9213e1163ff7cadffd32cf8c8b94e88dbf1 Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Sat, 17 Jul 2010 15:26:58 +1000 Subject: Revert "Compile with QT_NO_DEBUG_STREAM" This reverts commit 734d4aff280f7f272a6abe8ed02fe95e2a1b4e6d, which was not accompanied by the necessary .def file update for symbian. --- src/gui/styles/qstyle.cpp | 4 ++-- src/gui/styles/qstyle.h | 2 -- src/gui/styles/qstyleoption.cpp | 6 ++++-- src/gui/styles/qstyleoption.h | 2 -- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index 676483e..4cfa93f 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -2421,9 +2421,9 @@ QT_BEGIN_INCLUDE_NAMESPACE #include <QDebug> QT_END_INCLUDE_NAMESPACE -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, QStyle::State state) { +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) debug << "QStyle::State("; QStringList states; @@ -2455,9 +2455,9 @@ QDebug operator<<(QDebug debug, QStyle::State state) qSort(states); debug << states.join(QLatin1String(" | ")); debug << ')'; +#endif return debug; } -#endif /*! \since 4.6 diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index 1ee262d..439d626 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -878,9 +878,7 @@ private: Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::SubControls) -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, QStyle::State state); -#endif QT_END_NAMESPACE diff --git a/src/gui/styles/qstyleoption.cpp b/src/gui/styles/qstyleoption.cpp index eeab316..c057a2b 100644 --- a/src/gui/styles/qstyleoption.cpp +++ b/src/gui/styles/qstyleoption.cpp @@ -5419,9 +5419,9 @@ QStyleHintReturnVariant::QStyleHintReturnVariant() : QStyleHintReturn(Version, T Returns a T or 0 depending on the type of \a hint. */ -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) { +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) switch (optionType) { case QStyleOption::SO_Default: debug << "SO_Default"; break; @@ -5482,19 +5482,21 @@ QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) case QStyleOption::SO_GraphicsItem: debug << "SO_GraphicsItem"; break; } +#endif return debug; } QDebug operator<<(QDebug debug, const QStyleOption &option) { +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) debug << "QStyleOption("; debug << QStyleOption::OptionType(option.type); debug << ',' << (option.direction == Qt::RightToLeft ? "RightToLeft" : "LeftToRight"); debug << ',' << option.state; debug << ',' << option.rect; debug << ')'; +#endif return debug; } -#endif QT_END_NAMESPACE diff --git a/src/gui/styles/qstyleoption.h b/src/gui/styles/qstyleoption.h index 005b36a..95de8d5 100644 --- a/src/gui/styles/qstyleoption.h +++ b/src/gui/styles/qstyleoption.h @@ -958,10 +958,8 @@ T qstyleoption_cast(QStyleHintReturn *hint) return 0; } -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType); Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option); -#endif QT_END_NAMESPACE -- cgit v0.12 From b01688735b8d716bbe0d026e5e0cc6b088628884 Mon Sep 17 00:00:00 2001 From: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> Date: Fri, 16 Jul 2010 14:06:03 +1000 Subject: Added a QPixmap based QAbstractVideoBuffer HandleType. It can be used for example when the hw video decoder can use X11 pixmaps as a rendering target. Reviewed-by: Justin McPherson (cherry picked from commit 6771ce532f8b61499c998a502ea8c73e8e42262b) --- src/multimedia/video/qabstractvideobuffer.cpp | 1 + src/multimedia/video/qabstractvideobuffer.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/multimedia/video/qabstractvideobuffer.cpp b/src/multimedia/video/qabstractvideobuffer.cpp index e9d30d0..db05ee5 100644 --- a/src/multimedia/video/qabstractvideobuffer.cpp +++ b/src/multimedia/video/qabstractvideobuffer.cpp @@ -73,6 +73,7 @@ QT_BEGIN_NAMESPACE \value GLTextureHandle The handle of the buffer is an OpenGL texture ID. \value XvShmImageHandle The handle contains pointer to shared memory XVideo image. \value CoreImageHandle The handle contains pointer to Mac OS X CIImage. + \value QPixmapHandle The handle of the buffer is a QPixmap. \value UserHandle Start value for user defined handle types. \sa handleType() diff --git a/src/multimedia/video/qabstractvideobuffer.h b/src/multimedia/video/qabstractvideobuffer.h index a8389db..98e12da 100644 --- a/src/multimedia/video/qabstractvideobuffer.h +++ b/src/multimedia/video/qabstractvideobuffer.h @@ -63,6 +63,7 @@ public: GLTextureHandle, XvShmImageHandle, CoreImageHandle, + QPixmapHandle, UserHandle = 1000 }; -- cgit v0.12 From b63431e771da3d35f17f9aa584391096eb7c2ab0 Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Sat, 17 Jul 2010 16:59:01 +1000 Subject: Revert "Revert "fix qconfig.h aliased header creation"" This reverts commit 7702be3de6e2641afb1062f533567ca7a72e8e0f as a potential fix is now available. --- bin/syncqt | 2 ++ configure | 5 ----- tools/configure/configureapp.cpp | 10 ---------- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/bin/syncqt b/bin/syncqt index 11b1d72..cb67cc6 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -691,6 +691,7 @@ my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dis my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" ); my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" ); my %colliding_headers = (); +my %inject_headers = ( "$basedir/src/corelib/global" => ( "qconfig.h" ) ); foreach (@modules_to_sync) { #iteration info @@ -800,6 +801,7 @@ foreach (@modules_to_sync) { foreach (@subdirs) { my $subdir = "$_"; my @headers = findFiles("$subdir", "^[-a-z0-9_]*\\.h\$" , 0); + push @headers, $inject_headers{$subdir} if (defined $inject_headers{$subdir}); foreach (@headers) { my $header = "$_"; $header = 0 if("$header" =~ /^ui_.*.h/); diff --git a/configure b/configure index 166f201..62e0863 100755 --- a/configure +++ b/configure @@ -4481,11 +4481,6 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ]; fi mv -f "$QMAKE_QCONFIG_H" "$QCONFIG_H" - for conf in "$outpath/include/QtCore/qconfig.h" "$outpath/include/Qt/qconfig.h"; do - if [ '!' -f "$conf" ]; then - ln -s "$QCONFIG_H" "$conf" - fi - done #mkspecs/default is used as a (gasp!) default mkspec so QMAKESPEC needn't be set once configured rm -f mkspecs/default diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index d3dec3c..7f2d53b 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3164,16 +3164,6 @@ void Configure::generateConfigfiles() QFile::remove(outName); tmpFile.copy(outName); tmpFile.close(); - - if (!QFile::exists(buildPath + "/include/QtCore/qconfig.h")) { - if (!writeToFile("#include \"../../src/corelib/global/qconfig.h\"\n", - buildPath + "/include/QtCore/qconfig.h") - || !writeToFile("#include \"../../src/corelib/global/qconfig.h\"\n", - buildPath + "/include/Qt/qconfig.h")) { - dictionary["DONE"] = "error"; - return; - } - } } // Copy configured mkspec to default directory, but remove the old one first, if there is any -- cgit v0.12 From 139add5ad65e5d7b8c39127917047edb1baf4b18 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Wed, 14 Jul 2010 16:26:19 +0200 Subject: fix qconfig.h reference for shadow builds Reviewed-by: joerg (cherry picked from commit 00b7befbc003682a351c18d90436010efd26ece5) --- bin/syncqt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/syncqt b/bin/syncqt index cb67cc6..28dc0c3 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -691,7 +691,7 @@ my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dis my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" ); my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" ); my %colliding_headers = (); -my %inject_headers = ( "$basedir/src/corelib/global" => ( "qconfig.h" ) ); +my %inject_headers = ( "$basedir/src/corelib/global" => ( "*qconfig.h" ) ); foreach (@modules_to_sync) { #iteration info @@ -804,6 +804,7 @@ foreach (@modules_to_sync) { push @headers, $inject_headers{$subdir} if (defined $inject_headers{$subdir}); foreach (@headers) { my $header = "$_"; + my $shadow = ($header =~ s/^\*//); $header = 0 if("$header" =~ /^ui_.*.h/); foreach (@ignore_headers) { $header = 0 if("$header" eq "$_"); @@ -821,6 +822,7 @@ foreach (@modules_to_sync) { } my $iheader = $subdir . "/" . $header; + $iheader =~ s/^\Q$basedir\E/$out_basedir/ if ($shadow); my @classes = $public_header ? classNames($iheader) : (); if($showonly) { print "$header [$lib]\n"; -- cgit v0.12 From 998d9918e4ca5163947d209f71df6c3cf1c782dd Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Sat, 17 Jul 2010 20:17:19 +1000 Subject: Revert "Revert "Compile with QT_NO_DEBUG_STREAM"" This reverts commit 5488e9213e1163ff7cadffd32cf8c8b94e88dbf1. A fix for the symbian build issue causing the revert is now available. --- src/gui/styles/qstyle.cpp | 4 ++-- src/gui/styles/qstyle.h | 2 ++ src/gui/styles/qstyleoption.cpp | 6 ++---- src/gui/styles/qstyleoption.h | 2 ++ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index 4cfa93f..676483e 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -2421,9 +2421,9 @@ QT_BEGIN_INCLUDE_NAMESPACE #include <QDebug> QT_END_INCLUDE_NAMESPACE +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, QStyle::State state) { -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) debug << "QStyle::State("; QStringList states; @@ -2455,9 +2455,9 @@ QDebug operator<<(QDebug debug, QStyle::State state) qSort(states); debug << states.join(QLatin1String(" | ")); debug << ')'; -#endif return debug; } +#endif /*! \since 4.6 diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index 439d626..1ee262d 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -878,7 +878,9 @@ private: Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::SubControls) +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, QStyle::State state); +#endif QT_END_NAMESPACE diff --git a/src/gui/styles/qstyleoption.cpp b/src/gui/styles/qstyleoption.cpp index c057a2b..eeab316 100644 --- a/src/gui/styles/qstyleoption.cpp +++ b/src/gui/styles/qstyleoption.cpp @@ -5419,9 +5419,9 @@ QStyleHintReturnVariant::QStyleHintReturnVariant() : QStyleHintReturn(Version, T Returns a T or 0 depending on the type of \a hint. */ +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) { -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) switch (optionType) { case QStyleOption::SO_Default: debug << "SO_Default"; break; @@ -5482,21 +5482,19 @@ QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) case QStyleOption::SO_GraphicsItem: debug << "SO_GraphicsItem"; break; } -#endif return debug; } QDebug operator<<(QDebug debug, const QStyleOption &option) { -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) debug << "QStyleOption("; debug << QStyleOption::OptionType(option.type); debug << ',' << (option.direction == Qt::RightToLeft ? "RightToLeft" : "LeftToRight"); debug << ',' << option.state; debug << ',' << option.rect; debug << ')'; -#endif return debug; } +#endif QT_END_NAMESPACE diff --git a/src/gui/styles/qstyleoption.h b/src/gui/styles/qstyleoption.h index 95de8d5..005b36a 100644 --- a/src/gui/styles/qstyleoption.h +++ b/src/gui/styles/qstyleoption.h @@ -958,8 +958,10 @@ T qstyleoption_cast(QStyleHintReturn *hint) return 0; } +#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType); Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option); +#endif QT_END_NAMESPACE -- cgit v0.12 From fb318b89c113f47e3e5de788ee2b9bc9e3321e45 Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Thu, 15 Jul 2010 10:39:40 +0200 Subject: Amend previous commit 4e2eb2945dbc3865e2901f12d663ed89e8f0dfbf to fix compilation with QT_NO_DEBUG_STREAM Qt in debug need to stay binary compatible with Qt in release. See also commit cbbd7e084c7e46fd906db26b13032b8368c59093 that introduced the problem Task-number: QTBUG-11510 (cherry picked from commit 633349982422fec92df4ed06da5d2becf788c494) --- src/gui/styles/qstyle.cpp | 4 +++- src/gui/styles/qstyle.h | 2 +- src/gui/styles/qstyleoption.cpp | 6 +++++- src/gui/styles/qstyleoption.h | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index 676483e..687e587 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -2421,9 +2421,10 @@ QT_BEGIN_INCLUDE_NAMESPACE #include <QDebug> QT_END_INCLUDE_NAMESPACE -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) +#if !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, QStyle::State state) { +#if !defined(QT_NO_DEBUG) debug << "QStyle::State("; QStringList states; @@ -2455,6 +2456,7 @@ QDebug operator<<(QDebug debug, QStyle::State state) qSort(states); debug << states.join(QLatin1String(" | ")); debug << ')'; +#endif return debug; } #endif diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index 1ee262d..439901a 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -878,7 +878,7 @@ private: Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::SubControls) -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) +#if !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, QStyle::State state); #endif diff --git a/src/gui/styles/qstyleoption.cpp b/src/gui/styles/qstyleoption.cpp index eeab316..4780edf 100644 --- a/src/gui/styles/qstyleoption.cpp +++ b/src/gui/styles/qstyleoption.cpp @@ -5419,9 +5419,10 @@ QStyleHintReturnVariant::QStyleHintReturnVariant() : QStyleHintReturn(Version, T Returns a T or 0 depending on the type of \a hint. */ -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) +#if !defined(QT_NO_DEBUG_STREAM) QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) { +#if !defined(QT_NO_DEBUG) switch (optionType) { case QStyleOption::SO_Default: debug << "SO_Default"; break; @@ -5482,17 +5483,20 @@ QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) case QStyleOption::SO_GraphicsItem: debug << "SO_GraphicsItem"; break; } +#endif return debug; } QDebug operator<<(QDebug debug, const QStyleOption &option) { +#if !defined(QT_NO_DEBUG) debug << "QStyleOption("; debug << QStyleOption::OptionType(option.type); debug << ',' << (option.direction == Qt::RightToLeft ? "RightToLeft" : "LeftToRight"); debug << ',' << option.state; debug << ',' << option.rect; debug << ')'; +#endif return debug; } #endif diff --git a/src/gui/styles/qstyleoption.h b/src/gui/styles/qstyleoption.h index 005b36a..e79d9a4 100644 --- a/src/gui/styles/qstyleoption.h +++ b/src/gui/styles/qstyleoption.h @@ -958,7 +958,7 @@ T qstyleoption_cast(QStyleHintReturn *hint) return 0; } -#if !defined(QT_NO_DEBUG) && !defined(QT_NO_DEBUG_STREAM) +#if !defined(QT_NO_DEBUG_STREAM) Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType); Q_GUI_EXPORT QDebug operator<<(QDebug debug, const QStyleOption &option); #endif -- cgit v0.12 From aa77bf059eb7dfe41c9958f356fd80eac04b2f64 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko <denis.dzyubenko@nokia.com> Date: Fri, 16 Jul 2010 10:40:55 +0200 Subject: Added LatinAmericaAndTheCaribbean country to the doc. Task-number: QTBUG-12063 Reviewed-by: trustme (cherry picked from commit 70ffe96013dcf7b4be11d1fbe850b9bbcf37c741) --- src/corelib/tools/qlocale.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index a51ee81..6b1de5e 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -2096,6 +2096,7 @@ QDataStream &operator>>(QDataStream &ds, QLocale &l) \value Serbia \value SaintBarthelemy \value SaintMartin + \value LatinAmericaAndTheCaribbean \omitvalue LastCountry \sa country() -- cgit v0.12 From 0b5cfac41f7bb0911e45706b1fbdb3f11c1ee309 Mon Sep 17 00:00:00 2001 From: Markus Goetz <Markus.Goetz@nokia.com> Date: Fri, 16 Jul 2010 09:34:51 +0200 Subject: Network Proxy Query: Fix memleak on OS X Task-number: QTBUG-12106 (cherry picked from commit bca7646d81d8c580820cf5f6e52122da6d984c6b) --- src/network/kernel/qnetworkproxy_mac.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/network/kernel/qnetworkproxy_mac.cpp b/src/network/kernel/qnetworkproxy_mac.cpp index 1e22212..4139a7e 100644 --- a/src/network/kernel/qnetworkproxy_mac.cpp +++ b/src/network/kernel/qnetworkproxy_mac.cpp @@ -157,8 +157,10 @@ QList<QNetworkProxy> macQueryInternal(const QNetworkProxyQuery &query) return result; // failed } - if (isHostExcluded(dict, query.peerHostName())) + if (isHostExcluded(dict, query.peerHostName())) { + CFRelease(dict); return result; // no proxy for this host + } // is there a PAC enabled? If so, use it first. CFNumberRef pacEnabled; @@ -222,6 +224,7 @@ QList<QNetworkProxy> macQueryInternal(const QNetworkProxyQuery &query) result << https; } + CFRelease(dict); return result; } -- cgit v0.12 From 8506cf958836fb5cacd6a21c928acaf98c7175be Mon Sep 17 00:00:00 2001 From: David Boddie <dboddie@trolltech.com> Date: Fri, 16 Jul 2010 18:20:49 +0200 Subject: Doc: Added license documentation for 3rd party code and data. Task-number: QT-3585 Pre-approved-by: Legal Reviewed-by: Trust Me (cherry picked from commit bba06aacb84b5ae9fc286345e721cab639db35c8) --- doc/src/legal/3rdparty.qdoc | 234 +++++++++++++++++++++++++++++++++++++++++--- doc/src/legal/licenses.qdoc | 49 +++++++++- 2 files changed, 267 insertions(+), 16 deletions(-) diff --git a/doc/src/legal/3rdparty.qdoc b/doc/src/legal/3rdparty.qdoc index 110dac7..e7133e3 100644 --- a/doc/src/legal/3rdparty.qdoc +++ b/doc/src/legal/3rdparty.qdoc @@ -194,16 +194,16 @@ \hr copyright (C) 1999 by Willem van Schaik <willem@schaik.com> - + version 1.0 - 1999.10.15 - First version. - + Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. This software is provided "as is" without express or implied warranty. - + \hr Copyright (c) 1998-2001 Greg Roelofs. All rights reserved. @@ -293,7 +293,7 @@ Copyright (c) 1987, 1993, 1994\br The Regents of the University of California. All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\br @@ -305,7 +305,7 @@ 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -336,7 +336,7 @@ Copyright (C) 2004, Andrey Kiselev <dron@ak4719.spb.edu>\br Copyright (c( 1996 USAF Phillips Laboratory\br Additions (c) Richard Nolde 2006-2009 - + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that (i) the above copyright notices and this permission notice appear in @@ -344,11 +344,11 @@ Sam Leffler and Silicon Graphics may not be used in any advertising or publicity relating to the software without the specific, prior written permission of Sam Leffler and Silicon Graphics. - + THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - + IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, @@ -360,11 +360,11 @@ Copyright (c) 1985, 1986 The Regents of the University of California.\br All rights reserved. - + This code is derived from software contributed to Berkeley by James A. Woods, derived from original work by Spencer Thomas and Joseph Orost. - + Redistribution and use in source and binary forms are permitted provided that the above copyright notice and this paragraph are duplicated in all such forms and that any documentation, @@ -381,7 +381,7 @@ Copyright (c) 1996-1997 Sam Leffler\br Copyright (c) 1996 Pixar - + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that (i) the above copyright notices and this permission notice appear in @@ -389,11 +389,11 @@ Pixar, Sam Leffler and Silicon Graphics may not be used in any advertising or publicity relating to the software without the specific, prior written permission of Pixar, Sam Leffler and Silicon Graphics. - + THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - + IN NO EVENT SHALL PIXAR, SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, @@ -423,8 +423,6 @@ \section1 JavaScriptCore - \hr - Copyright (c) 1991, 2000, 2001 by Lucent Technologies.\br Copyright (C) 2002, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. @@ -441,6 +439,60 @@ See \c src/3rdparty/webkit/JavaScriptCore/wtf/dtoa.cpp for license details. + \hr + + Copyright (C) 2009 Company 100, Inc. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met:\br + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.\br + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + \hr + + Copyright (C) 2009 Apple Inc. All rights reserved.\br + Copyright (C) 2009 University of Szeged\br + All rights reserved.\br + Copyright (C) 2010 MIPS Technologies, Inc. All rights reserved.\br + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met:\br + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.\br + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY MIPS TECHNOLOGIES, INC. ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MIPS TECHNOLOGIES, INC. OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + \section1 Pixman (\c pixman) version 0.17.11 \e{pixman is a library that provides low-level pixel manipulation @@ -479,4 +531,156 @@ See \c src/3rdparty/pixman/pixman-arm-neon-asm.h and \c src/3rdparty/pixman/pixman-arm-neon-asm.S + + \section1 WebCore (WebKit) + + Copyright (C) 2009 Ericsson AB\br + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.\br + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution.\br + 3. Neither the name of Ericsson nor the names of its contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + \hr + + Copyright (C) 2004, Apple Computer, Inc. and The Mozilla Foundation.\br + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.\br + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution.\br + 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla + Foundation ("Mozilla") nor the names of their contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR + THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + \hr + + Copyright (C) 2009 Igalia S.L.\br + Copyright (C) 2009 Antonio Gomes <tonikitoo@webkit.org>\br + Copyright (C) 2008 Christian Dywan <christian@imendio.com>\br + Copyright (C) 2007 Nicholas Shanks <contact@nickshanks.com>\br + Copyright (C) 2006 Charles Samuels <charles@kde.org>\br + Copyright (C) 2009 Dominik Röttsches <dominik.roettsches@access-company.com>\br + Copyright (C) 2009 Brent Fulgham\br + Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in>\br + Copyright (C) 2006 Alexander Kellett <lypanov@kde.org>\br + Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>\br + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met:\br + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.\br + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + \hr + + Copyright (C) 2007, 2008 Apple Inc. All rights reserved.\br + Copyright (C) IBM Corp. 2009 All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.\br + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution.\br + 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission.\br + + THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + \hr + + Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved.\br + Copyright (C) 2010 François Sausset (sausset@gmail.com). All rights reserved\br + Copyright (C) 2007 Marius Renn <damarvy@gmail.com> All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met:\br + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer.\br + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ diff --git a/doc/src/legal/licenses.qdoc b/doc/src/legal/licenses.qdoc index 96d5d29..a04a256 100644 --- a/doc/src/legal/licenses.qdoc +++ b/doc/src/legal/licenses.qdoc @@ -328,7 +328,7 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + \list \o Parts of WebKit used by the QtWebKit module \endlist @@ -716,6 +716,53 @@ \list \o Parts of WebKit used by the QtWebKit module \endlist + + \hr + + Copyright (c) 1991-2009 Unicode, Inc. All rights reserved. + Distributed under the Terms of Use in + http://www.unicode.org/copyright.html. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of the Unicode data files and any associated + documentation (the "Data Files") or Unicode software and any + associated documentation (the "Software") to deal in the Data + Files or Software without restriction, including without + limitation the rights to use, copy, modify, merge, publish, + distribute, and/or sell copies of the Data Files or Software, + and to permit persons to whom the Data Files or Software are + furnished to do so, provided that (a) the above copyright + notice(s) and this permission notice appear with all copies + of the Data Files or Software, (b) both the above copyright + notice(s) and this permission notice appear in associated + documentation, and (c) there is clear notice in each modified + Data File or in the Software as well as in the documentation + associated with the Data File(s) or Software that the data or + software has been modified. + + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT + WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT + LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED + IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES + OR SOFTWARE. + + Except as contained in this notice, the name of a copyright + holder shall not be used in advertising or otherwise to promote + the sale, use or other dealings in these Data Files or Software + without prior written authorization of the copyright holder. + + \list + \o Included in \c{util/unicode/data}, + \c{tests/auto/qtextboundaryfinder/data} and + \c{tests/auto/qchar} + \o Parts of the \l makeqpf tool + \endlist */ /*! -- cgit v0.12 From e0a590ed25627a7d8efc7f2e20e814394fd8418d Mon Sep 17 00:00:00 2001 From: Charles Yin <charles.yin@nokia.com> Date: Fri, 16 Jul 2010 11:17:02 +1000 Subject: Fixes the Oracle invalid date bug when date is greater or equal to 2800 By converting the char into unsigned char to avoid the overflow when getting the century from a char for years greater or equal to 2800. Task-number: QTBUG-8210 Reviewed-by: Michael Goddard (cherry picked from commit 3a51462bfb3cca8c90e1c690cf045b371d2ab393) --- src/sql/drivers/oci/qsql_oci.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp index 2f0cfdc..c56b995 100644 --- a/src/sql/drivers/oci/qsql_oci.cpp +++ b/src/sql/drivers/oci/qsql_oci.cpp @@ -648,7 +648,7 @@ QByteArray qMakeOraDate(const QDateTime& dt) QDateTime qMakeDate(const char* oraDate) { - int century = oraDate[0]; + int century = uchar(oraDate[0]); if(century >= 100){ int year = uchar(oraDate[1]); year = ((century-100)*100) + (year-100); -- cgit v0.12 From 5cb7d124122c7b78a1149c2878f04773424f1d15 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Fri, 16 Jul 2010 10:17:32 +0200 Subject: Windows mobile: show the [X] button in the taskbar when maximizing We're now showing the cancel button explicitly in the taskbar on maximize, if the widget does not have the widget flags CancelButtonHint and OKButtonHint. Task-number: QTBUG-8408 Reviewed-by: Martin Petersson (cherry picked from commit 5f76c2b168ded91835d5d161b738a5dc03556cf6) --- src/gui/kernel/qguifunctions_wince.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/kernel/qguifunctions_wince.cpp b/src/gui/kernel/qguifunctions_wince.cpp index f5004b0..ab1a655 100644 --- a/src/gui/kernel/qguifunctions_wince.cpp +++ b/src/gui/kernel/qguifunctions_wince.cpp @@ -323,6 +323,8 @@ void qt_wince_maximize(QWidget *widget) shidi.dwFlags |= SHIDIF_CANCELBUTTON; if (widget->windowFlags() & Qt::WindowOkButtonHint) shidi.dwFlags |= SHIDIF_DONEBUTTON; + if (!(widget->windowFlags() & (Qt::WindowCancelButtonHint | Qt::WindowOkButtonHint))) + shidi.dwFlags |= SHIDIF_CANCELBUTTON; resolveAygLibs(); if (ptrAygInitDialog) ptrAygInitDialog(&shidi); -- cgit v0.12 From 259003d8f074d6a200fae56a38992531e6a55115 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Fri, 16 Jul 2010 10:37:58 +0200 Subject: Windows mobile: the [X] button in the taskbar minimizes the widget The [X] or cancel button in the task bar shall just "minimize" the widget on Windows mobile. A press on this button results in a WM_COMMAND, IDCANCEL message. Before this patch we just sent a QCloseEvent to the widget, which had basically no effect. Now, we're calling showMinimzed(), which is the desired behaviour. Task-number: QTBUG-8408 Reviewed-by: Martin Petersson (cherry picked from commit 2c1aafa47b8915ea8aae8da229d65086e42543b3) --- src/gui/kernel/qapplication_win.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 9e8a128..ec26e81 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -2485,7 +2485,7 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa if (OkCommand) QApplication::postEvent(widget, new QEvent(QEvent::OkRequest)); if (CancelCommand) - QApplication::postEvent(widget, new QEvent(QEvent::Close)); + widget->showMinimized(); else #ifndef QT_NO_MENUBAR QMenuBar::wceCommands(LOWORD(wParam)); -- cgit v0.12 From 67eaa50ad5ae1543fd165ac6ce29accfcc428036 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Fri, 16 Jul 2010 10:43:14 +0200 Subject: Windows mobile: hide [X] button in task bar on unmaximize When calling showNormal on a window that was maximized, we must remove the [X] button from the task bar. But only if it was added by qt_wince_maximize. Task-number: QTBUG-8408 Reviewed-by: Martin Petersson (cherry picked from commit ad4aff6e2d188d88a2c6b4b692932adb08491d22) --- src/gui/kernel/qguifunctions_wince.cpp | 17 +++++++++++++++++ src/gui/kernel/qwidget_win.cpp | 1 + src/gui/kernel/qwidget_wince.cpp | 1 + 3 files changed, 19 insertions(+) diff --git a/src/gui/kernel/qguifunctions_wince.cpp b/src/gui/kernel/qguifunctions_wince.cpp index ab1a655..01ff3cd 100644 --- a/src/gui/kernel/qguifunctions_wince.cpp +++ b/src/gui/kernel/qguifunctions_wince.cpp @@ -76,6 +76,10 @@ struct AygSIPINFO #define SHIDIF_SIZEDLGFULLSCREEN 0x0004 #endif +#ifndef SHDB_HIDE +#define SHDB_HIDE 0x0002 +#endif + #ifndef SHFS_SHOWTASKBAR #define SHFS_SHOWTASKBAR 0x0001 #endif @@ -112,10 +116,12 @@ struct AygSIPINFO typedef BOOL (*AygInitDialog)(AygSHINITDLGINFO*); typedef BOOL (*AygFullScreen)(HWND, DWORD); typedef BOOL (*AygSHSipInfo)(UINT, UINT, PVOID, UINT); +typedef BOOL (*AygSHDoneButton)(HWND, DWORD); static AygInitDialog ptrAygInitDialog = 0; static AygFullScreen ptrAygFullScreen = 0; static AygSHSipInfo ptrAygSHSipInfo = 0; +static AygSHDoneButton ptrAygSHDoneButton = 0; static bool aygResolved = false; static void resolveAygLibs() @@ -128,6 +134,7 @@ static void resolveAygLibs() ptrAygInitDialog = (AygInitDialog) ayglib.resolve("SHInitDialog"); ptrAygFullScreen = (AygFullScreen) ayglib.resolve("SHFullScreen"); ptrAygSHSipInfo = (AygSHSipInfo) ayglib.resolve("SHSipInfo"); + ptrAygSHDoneButton = (AygSHDoneButton) ayglib.resolve("SHDoneButton"); } } @@ -336,6 +343,16 @@ void qt_wince_maximize(QWidget *widget) } } +void qt_wince_unmaximize(QWidget *widget) +{ + if (ptrAygSHDoneButton && qt_wince_is_mobile() + && !(widget->windowFlags() & (Qt::WindowCancelButtonHint | Qt::WindowOkButtonHint))) + { + // Hide the [X] button, we've added in qt_wince_maximize. + ptrAygSHDoneButton(widget->winId(), SHDB_HIDE); + } +} + void qt_wince_minimize(HWND hwnd) { #ifdef Q_OS_WINCE_WM diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp index 0f05c6b..23f57da 100644 --- a/src/gui/kernel/qwidget_win.cpp +++ b/src/gui/kernel/qwidget_win.cpp @@ -70,6 +70,7 @@ #include "qguifunctions_wince.h" QT_USE_NAMESPACE extern void qt_wince_maximize(QWidget *widget); //defined in qguifunctions_wince.cpp +extern void qt_wince_unmaximize(QWidget *widget); //defined in qguifunctions_wince.cpp extern void qt_wince_minimize(HWND hwnd); //defined in qguifunctions_wince.cpp extern void qt_wince_full_screen(HWND hwnd, bool fullScreen, UINT swpf); //defined in qguifunctions_wince.cpp extern bool qt_wince_is_mobile(); //defined in qguifunctions_wince.cpp diff --git a/src/gui/kernel/qwidget_wince.cpp b/src/gui/kernel/qwidget_wince.cpp index fc1e52c..76532ed 100644 --- a/src/gui/kernel/qwidget_wince.cpp +++ b/src/gui/kernel/qwidget_wince.cpp @@ -498,6 +498,7 @@ void QWidget::setWindowState(Qt::WindowStates newstate) int style = GetWindowLong(internalWinId(), GWL_STYLE) | WS_BORDER | WS_POPUP | WS_CAPTION; SetWindowLong(internalWinId(), GWL_STYLE, style); SetWindowLong(internalWinId(), GWL_EXSTYLE, GetWindowLong (internalWinId(), GWL_EXSTYLE) & ~ WS_EX_NODRAG); + qt_wince_unmaximize(this); } if (isVisible() && newstate & Qt::WindowMaximized) qt_wince_maximize(this); -- cgit v0.12 From d8944b560a16db3805d6faadfaadbabe750c0cef Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Sun, 18 Jul 2010 13:29:17 +1000 Subject: QUUid::createUuid() should not generate identical sequences on UNIX An unintended side-effect of commit 90a082c9076f35dcca092ade019891e92692710e is that if qrand() is used without being seeded first, then createUuid() would always generate the same sequence. This quite likely to happen considering the Qt does not actually seed the PRNG, but does use it in many places (we do not call qsrand(), but we do often call qrand()). Fix this by changing qrand() to calculate a seed, instead of defaulting to 1. This allows us to remove the qsrand() overload with no arguments, since qrand() will now seed automatically unless manually seeded by the programmer. Task-number: QTBUG-11213 Reviewed-by: thiago (manually cherry picked from commits 2ef8b92ececbf9d33d7c0b44f46c7c975fb0fdaa and a0fffeed6fceb8244328b649a3f6feb520493bc2) Conflicts: src/corelib/plugin/quuid.cpp --- src/corelib/global/qglobal.cpp | 49 ------------------------------------------ src/corelib/plugin/quuid.cpp | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 55 deletions(-) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 75a51ec..c956b85 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -2606,55 +2606,6 @@ void qsrand(uint seed) #endif } -/*! \internal - \relates <QtGlobal> - \since 4.6 - - Seed the PRNG, but only if it has not already been seeded. - - The default seed is a combination of current time, a stack address and a - serial counter (since thread stack addresses are re-used). -*/ -void qsrand() -{ -#if (defined(Q_OS_UNIX) || defined(Q_OS_WIN)) && !defined(QT_NO_THREAD) - SeedStorage *seedStorage = randTLS(); - if (seedStorage) { - SeedStorageType *pseed = seedStorage->localData(); - if (pseed) { - // already seeded - return; - } - seedStorage->setLocalData(pseed = new SeedStorageType); - // start beyond 1 to avoid the sequence reset - static QBasicAtomicInt serial = Q_BASIC_ATOMIC_INITIALIZER(2); - *pseed = QDateTime::currentDateTime().toTime_t() - + quintptr(&pseed) - + serial.fetchAndAddRelaxed(1); -#if defined(Q_OS_WIN) || defined(Q_OS_SYMBIAN) - // for Windows and Symbian the srand function must still be called. - srand(*pseed); -#endif - } - -//QT_NO_THREAD implementations -#else - static unsigned int seed = 0; - - if (seed) - return; - -#if defined(Q_OS_SYMBIAN) - seed = Math::Random(); -#elif defined(Q_OS_WIN) - seed = GetTickCount(); -#else - seed = quintptr(&seed) + QDateTime::currentDateTime().toTime_t(); -#endif - srand(seed); -#endif // defined(Q_OS_UNIX) || defined(Q_OS_WIN)) && !defined(QT_NO_THREAD) -} - /*! \relates <QtGlobal> \since 4.2 diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 9332bbc..7858b33 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -578,11 +578,9 @@ QUuid QUuid::createUuid() QT_BEGIN_INCLUDE_NAMESPACE #include "qdatetime.h" #include "qfile.h" -#include "stdlib.h" // For srand/rand +#include "qthreadstorage.h" QT_END_INCLUDE_NAMESPACE -extern void qsrand(); // in qglobal.cpp - QUuid QUuid::createUuid() { QUuid result; @@ -600,12 +598,24 @@ QUuid QUuid::createUuid() static const int intbits = sizeof(int)*8; static int randbits = 0; if (!randbits) { + int r = 0; int max = RAND_MAX; - do { ++randbits; } while ((max=max>>1)); + do { ++r; } while ((max=max>>1)); + randbits = r; } - // reseed, but only if not already seeded - qsrand(); + static QThreadStorage<int *> uuidseed; + if (!uuidseed.hasLocalData()) { + // Seed the PRNG once per thread with a combination of current time, a + // stack address and a serial counter (since thread stack addresses are + // re-used). + int *pseed = new int; + static QBasicAtomicInt serial = Q_BASIC_ATOMIC_INITIALIZER(2); + qsrand(*pseed = QDateTime::currentDateTime().toTime_t() + + quintptr(&pseed) + + serial.fetchAndAddRelaxed(1)); + uuidseed.setLocalData(pseed); + } int chunks = 16 / sizeof(uint); while (chunks--) { -- cgit v0.12 From fad58a22089a381f97bfaaa192ad3cf651e52d94 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" <bradley.hughes@nokia.com> Date: Tue, 13 Jul 2010 12:23:05 +0200 Subject: Compile when bootstrapping qmake QThreadStorage is not available when bootstrapping qmake, so fall back to a simple static bool instead. Reviewed-by: TrustMe (cherry picked from commit a736d333aab9e2e97fdbb738b3f3f4646afe192e) --- src/corelib/plugin/quuid.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 7858b33..0d14b9b 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -604,11 +604,13 @@ QUuid QUuid::createUuid() randbits = r; } + // Seed the PRNG once per thread with a combination of current time, a + // stack address and a serial counter (since thread stack addresses are + // re-used). +#ifndef QT_BOOTSTRAPPED static QThreadStorage<int *> uuidseed; - if (!uuidseed.hasLocalData()) { - // Seed the PRNG once per thread with a combination of current time, a - // stack address and a serial counter (since thread stack addresses are - // re-used). + if (!uuidseed.hasLocalData()) + { int *pseed = new int; static QBasicAtomicInt serial = Q_BASIC_ATOMIC_INITIALIZER(2); qsrand(*pseed = QDateTime::currentDateTime().toTime_t() @@ -616,6 +618,12 @@ QUuid QUuid::createUuid() + serial.fetchAndAddRelaxed(1)); uuidseed.setLocalData(pseed); } +#else + static bool seeded = false; + if (!seeded) + qsrand(QDateTime::currentDateTime().toTime_t() + + quintptr(&seeded)); +#endif int chunks = 16 / sizeof(uint); while (chunks--) { -- cgit v0.12 From aa7bdea48d8006a272d080af3805836a1a4c540d Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Sun, 18 Jul 2010 13:31:46 +1000 Subject: Compile Re-add the stdlib.h include, since it brings in RAND_MAX Reviewed-by: TrustMe (cherry picked from commit f28a27987fa4e1b2faa1c57188c128afb735f70a) Conflicts: src/corelib/plugin/quuid.cpp --- src/corelib/plugin/quuid.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 0d14b9b..6c1b6e7 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -579,6 +579,7 @@ QT_BEGIN_INCLUDE_NAMESPACE #include "qdatetime.h" #include "qfile.h" #include "qthreadstorage.h" +#include <stdlib.h> // for RAND_MAX QT_END_INCLUDE_NAMESPACE QUuid QUuid::createUuid() -- cgit v0.12 From ea41b2b74f1c9656dec9b58fa91189b94ff1eb6f Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Wed, 14 Jul 2010 11:51:04 +1000 Subject: Fix test for get() to check for undefined return values Task-number: QTBUG-10658 (cherry picked from commit 237bc693a527f9cb2b6bbe7c518018cbf56b0eb6) --- .../qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp index f15ac8f..858c26d 100644 --- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp +++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp @@ -193,8 +193,9 @@ void tst_qdeclarativelistmodel::dynamic_data() QTest::newRow("count") << "count" << 0 << ""; - QTest::newRow("get1") << "{get(0)}" << 0 << ""; - QTest::newRow("get2") << "{get(-1)}" << 0 << ""; + QTest::newRow("get1") << "{get(0) === undefined}" << 1 << ""; + QTest::newRow("get2") << "{get(-1) === undefined}" << 1 << ""; + QTest::newRow("get3") << "{append({'foo':123});get(0) != undefined}" << 1 << ""; QTest::newRow("append1") << "{append({'foo':123});count}" << 1 << ""; QTest::newRow("append2") << "{append({'foo':123,'bar':456});count}" << 1 << ""; @@ -292,8 +293,6 @@ void tst_qdeclarativelistmodel::dynamic() if (e.hasError()) qDebug() << e.error(); // errors not expected - if (QTest::currentDataTag() != QLatin1String("clear3") && QTest::currentDataTag() != QLatin1String("remove3")) - QVERIFY(!e.hasError()); QCOMPARE(actual,result); } @@ -308,6 +307,9 @@ void tst_qdeclarativelistmodel::dynamic_worker() QFETCH(int, result); QFETCH(QString, warning); + // This is same as dynamic() except it applies the test to a ListModel called + // from a WorkerScript (i.e. testing the internal NestedListModel class) + QDeclarativeListModel model; QDeclarativeEngine eng; QDeclarativeComponent component(&eng, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); -- cgit v0.12 From 57dcaf349dbfd4494b15bb8465b277792eb739bb Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 2 Jul 2010 13:42:56 +1000 Subject: fix doc links (cherry picked from commit 2497d922f06404f6fd1c65c6c685fbce173303ae) --- doc/src/declarative/advtutorial.qdoc | 2 +- doc/src/declarative/globalobject.qdoc | 2 +- doc/src/examples/qml-webbrowser.qdoc | 2 +- src/declarative/graphicsitems/qdeclarativeitem.cpp | 2 +- src/declarative/graphicsitems/qdeclarativeloader.cpp | 2 +- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 2 +- src/declarative/qml/qdeclarativeengine.cpp | 5 +++-- src/declarative/util/qdeclarativeview.cpp | 2 +- src/declarative/util/qdeclarativexmllistmodel.cpp | 2 +- src/imports/gestures/qdeclarativegesturearea.cpp | 2 +- 10 files changed, 12 insertions(+), 11 deletions(-) diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc index 9c72e95..2c3610c 100644 --- a/doc/src/declarative/advtutorial.qdoc +++ b/doc/src/declarative/advtutorial.qdoc @@ -164,7 +164,7 @@ The \c createBlock() function creates a block from the \c Block.qml file and moves the new block to its position on the game canvas. This involves several steps: \list -\o \l {Qt::createComponent()}{Qt.createComponent()} is called to generate an element from \c Block.qml. +\o \l {QML:Qt::createComponent()}{Qt.createComponent()} is called to generate an element from \c Block.qml. If the component is ready, we can call \c createObject() to create an instance of the \c Block item. \o If \c createObject() returned null (i.e. if there was an error while loading the object), print the error information. diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc index 36d91ec..a9aee2f 100644 --- a/doc/src/declarative/globalobject.qdoc +++ b/doc/src/declarative/globalobject.qdoc @@ -35,7 +35,7 @@ Contains all the properties of the JavaScript global object, plus: \section1 Qt Object -The \l{Qt}{Qt object} provides useful enums and functions from Qt, for use in all QML +The \l{QmlGlobalQtObject}{Qt object} provides useful enums and functions from Qt, for use in all QML files. \section1 XMLHttpRequest diff --git a/doc/src/examples/qml-webbrowser.qdoc b/doc/src/examples/qml-webbrowser.qdoc index da6f600..d322b02 100644 --- a/doc/src/examples/qml-webbrowser.qdoc +++ b/doc/src/examples/qml-webbrowser.qdoc @@ -40,7 +40,7 @@ ****************************************************************************/ /*! - \title Web Browser + \title QML Web Browser \example demos/declarative/webbrowser This demo shows how to write a simple web browser in QML by combining the diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 409af3a..e5e7f51 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2145,7 +2145,7 @@ QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline() const \property QDeclarativeItem::baselineOffset \brief The position of the item's baseline in local coordinates. - The baseline of a Text item is the imaginary line on which the text + The baseline of a \l Text item is the imaginary line on which the text sits. Controls containing text usually set their baseline to the baseline of their text. diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp index c8c9e44..e745ca6 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader.cpp +++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp @@ -119,7 +119,7 @@ void QDeclarativeLoaderPrivate::initResize() property, or loaded from a URL via the \l source property. Loader can be used to delay the creation of a component until it is required. - For example, this loads "Page1.qml" as a component into the \l Loader element + For example, this loads "Page1.qml" as a component into the Loader element when the \l MouseArea is clicked: \code diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 04dac3b..f3eef23 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -203,7 +203,7 @@ QString QDeclarativeTextEdit::text() const Sets the font size in pixels. Using this function makes the font device dependent. - Use \l pointSize to set the size of the font in a device independent manner. + Use \l font.pointSize to set the size of the font in a device independent manner. */ /*! diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index f6973bc..559cad1 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -151,6 +151,7 @@ void QDeclarativeEnginePrivate::defineModule() } /*! +\keyword QmlGlobalQtObject \qmlclass Qt QDeclarativeEnginePrivate \brief The QML global Qt object provides useful enums and functions from Qt. @@ -1088,7 +1089,7 @@ If you are certain the files will be local, you could simplify to: \snippet doc/src/snippets/declarative/componentCreation.js 2 To create a QML object from an arbitrary string of QML (instead of a file), -use \l{Qt::createQmlObject()}{Qt.createQmlObject()}. +use \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()}. */ QScriptValue QDeclarativeEnginePrivate::createComponent(QScriptContext *ctxt, QScriptEngine *engine) @@ -1135,7 +1136,7 @@ Each object in this array has the members \c lineNumber, \c columnNumber, \c fil Note that this function returns immediately, and therefore may not work if the \a qml string loads new components (that is, external QML files that have not yet been loaded). -If this is the case, consider using \l{Qt::createComponent()}{Qt.createComponent()} instead. +If this is the case, consider using \l{QML:Qt::createComponent()}{Qt.createComponent()} instead. */ QScriptValue QDeclarativeEnginePrivate::createQmlObject(QScriptContext *ctxt, QScriptEngine *engine) diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp index 0414e65..12a8d3a 100644 --- a/src/declarative/util/qdeclarativeview.cpp +++ b/src/declarative/util/qdeclarativeview.cpp @@ -611,7 +611,7 @@ void QDeclarativeView::timerEvent(QTimerEvent* e) } } -/*! \reimp */ +/*! \internal */ bool QDeclarativeView::eventFilter(QObject *watched, QEvent *e) { Q_D(QDeclarativeView); diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 0692aaa..5583007 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -589,7 +589,7 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla with a combined value of all key roles that is not already present in the model. - \sa {declarative/rssnews}{RSS News demo} + \sa {demos/declarative/rssnews}{RSS News demo} */ QDeclarativeXmlListModel::QDeclarativeXmlListModel(QObject *parent) diff --git a/src/imports/gestures/qdeclarativegesturearea.cpp b/src/imports/gestures/qdeclarativegesturearea.cpp index e5647bd..243ba0f 100644 --- a/src/imports/gestures/qdeclarativegesturearea.cpp +++ b/src/imports/gestures/qdeclarativegesturearea.cpp @@ -130,7 +130,7 @@ public: GestureArea is an invisible item: it is never painted. - \sa Gesture, MouseArea, {declarative/touchinteraction/gestures}{Gestures example} + \sa MouseArea, {declarative/touchinteraction/gestures}{Gestures example} */ /*! -- cgit v0.12 From 953eeb0eeebb27d440e002cf4c3620b87bbe43d5 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 9 Jul 2010 14:07:31 +1000 Subject: Make test pass and fix docs following removal of SpringFollow (cherry picked from commit 31cd8c15c0fdb2f08c2652609a57413a715d1b13) --- src/declarative/util/qdeclarativesmoothedanimation.cpp | 2 +- src/declarative/util/qdeclarativespringanimation.cpp | 4 ++-- tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index 6b6df4d..5d47c30 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -307,7 +307,7 @@ Rectangle { set to a value such as 0.5 units/second. Animating from 0 to 1.0 with a velocity of 0.5 will take 2000 ms to complete. - \sa SpringFollow, {QML Animation}, {declarative/animation/basics}{Animation basics example} + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ QDeclarativeSmoothedAnimation::QDeclarativeSmoothedAnimation(QObject *parent) diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index 314b82b..d7c0f90 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -232,7 +232,7 @@ qreal QDeclarativeSpringAnimation::to() const } /*! - \qmlproperty real SpringFollow::to + \qmlproperty real SpringAnimation::to */ void QDeclarativeSpringAnimation::setTo(qreal value) @@ -254,7 +254,7 @@ qreal QDeclarativeSpringAnimation::from() const } /*! - \qmlproperty real SpringFollow::from + \qmlproperty real SpringAnimation::from */ void QDeclarativeSpringAnimation::setFrom(qreal value) diff --git a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp index 13960b1..5028ba1 100644 --- a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp +++ b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp @@ -279,7 +279,7 @@ void tst_qdeclarativedom::loadComposite() void tst_qdeclarativedom::testValueSource() { QByteArray qml = "import Qt 4.7\n" - "Rectangle { SpringFollow on height { spring: 1.4; damping: .15; to: Math.min(Math.max(-130, value*2.2 - 130), 133); }}"; + "Rectangle { SpringAnimation on height { spring: 1.4; damping: .15; to: Math.min(Math.max(-130, value*2.2 - 130), 133); }}"; QDeclarativeEngine freshEngine; QDeclarativeDomDocument document; @@ -295,7 +295,7 @@ void tst_qdeclarativedom::testValueSource() QDeclarativeDomObject valueSourceObject = valueSource.object(); QVERIFY(valueSourceObject.isValid()); - QVERIFY(valueSourceObject.objectType() == "Qt/SpringFollow"); + QVERIFY(valueSourceObject.objectType() == "Qt/SpringAnimation"); const QDeclarativeDomValue springValue = valueSourceObject.property("spring").value(); QVERIFY(!springValue.isInvalid()); -- cgit v0.12 From 55ef2c487358c85a87e5cd63e87e2c019c3f5935 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Thu, 8 Jul 2010 14:54:00 +0200 Subject: Fix spring animation Do not stop a spring animation if the to value got changed while notifying the target property change. (cherry picked from commit 3f2a4f34f6206e3a94915a8d50ddfe81e047b88b) --- src/declarative/util/qdeclarativespringanimation.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index d7c0f90..58d81ad 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -183,11 +183,13 @@ void QDeclarativeSpringAnimationPrivate::tick(int time) lastTime = time; } + qreal old_to = to; + QDeclarativePropertyPrivate::write(defaultProperty, currentValue, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding); - if (stop) + if (stop && old_to == to) // do not stop if we got restarted clock.stop(); } -- cgit v0.12 From f137dee009a63cd2dbef0f86e338e5b50730359c Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Thu, 8 Jul 2010 17:48:34 +0200 Subject: Added some documentation to spring animation (cherry picked from commit d5d16b3d3304774df11f40df0206d90ed5f840de) --- src/declarative/util/qdeclarativespringanimation.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index 58d81ad..4cf2fc0 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -206,6 +206,15 @@ void QDeclarativeSpringAnimationPrivate::updateMode() /*! \qmlclass SpringAnimation QDeclarativeSpringAnimation \since 4.7 + + \brief The SpringAnimation element allows a property to track a value in a spring-like motion + + SpringAnimation mimics the oscillatory behavior of a spring, with the appropriate \l spring constant to + control the acceleration and the \l damping to control how quickly the effect dies away. + + You can also limit the maximum \l velocity of the animation. + + */ QDeclarativeSpringAnimation::QDeclarativeSpringAnimation(QObject *parent) -- cgit v0.12 From 466a878c5df629759496ac68be1b4ce0527a78f0 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 16 Jul 2010 18:11:36 +1000 Subject: fixes, improvements for various docs and example code (cherry picked from commit 1ea53e6055a7c4e9677a5003725785ad503bb242) --- doc/src/declarative/qdeclarativemodels.qdoc | 16 +- doc/src/snippets/declarative/coloranimation.qml | 52 +++++++ doc/src/snippets/declarative/numberanimation.qml | 52 +++++++ doc/src/snippets/declarative/propertyanimation.qml | 101 +++++++++++++ doc/src/snippets/declarative/smoothedanimation.qml | 69 +++++++++ doc/src/snippets/declarative/springanimation.qml | 65 ++++++++ doc/src/snippets/declarative/state.qml | 23 +-- .../snippets/declarative/transition-from-to.qml | 62 ++++++++ .../snippets/declarative/transition-reversible.qml | 65 ++++++++ doc/src/snippets/declarative/transition.qml | 59 ++++++++ .../modelviews/abstractitemmodel/model.cpp | 2 + .../graphicsitems/qdeclarativeborderimage.cpp | 2 + src/declarative/util/qdeclarativeanimation.cpp | 163 ++++++++++++++------- .../util/qdeclarativesmoothedanimation.cpp | 44 ++---- .../util/qdeclarativespringanimation.cpp | 32 +++- src/declarative/util/qdeclarativestate.cpp | 24 ++- src/declarative/util/qdeclarativetransition.cpp | 96 ++++++++++-- 17 files changed, 805 insertions(+), 122 deletions(-) create mode 100644 doc/src/snippets/declarative/coloranimation.qml create mode 100644 doc/src/snippets/declarative/numberanimation.qml create mode 100644 doc/src/snippets/declarative/propertyanimation.qml create mode 100644 doc/src/snippets/declarative/smoothedanimation.qml create mode 100644 doc/src/snippets/declarative/springanimation.qml create mode 100644 doc/src/snippets/declarative/transition-from-to.qml create mode 100644 doc/src/snippets/declarative/transition-reversible.qml create mode 100644 doc/src/snippets/declarative/transition.qml diff --git a/doc/src/declarative/qdeclarativemodels.qdoc b/doc/src/declarative/qdeclarativemodels.qdoc index a2f4d3a..173002a 100644 --- a/doc/src/declarative/qdeclarativemodels.qdoc +++ b/doc/src/declarative/qdeclarativemodels.qdoc @@ -208,7 +208,10 @@ Models can be defined in C++ and then made available to QML. This is useful for exposing existing C++ data models or otherwise complex datasets to QML. A C++ model class can be defined as a QStringList, a QList<QObject*> or a -QAbstractItemModel. +QAbstractItemModel. The first two are useful for exposing simpler datasets, +while QAbstractItemModel provides a more flexible solution for more complex +models. + \section2 QStringList @@ -268,7 +271,10 @@ the model by calling QDeclarativeContext::setContextProperty() again. \section2 QAbstractItemModel -A model can be defined by subclassing QAbstractItemModel. +A model can be defined by subclassing QAbstractItemModel. This is the +best approach if you have a more complex model that cannot be supported +by the other approaches. A QAbstractItemModel can also automatically +notify a QML view when the model data has changed. The roles of a QAbstractItemModel subclass can be exposed to QML by calling QAbstractItemModel::setRoleNames(). The default role names set by Qt are: @@ -305,6 +311,12 @@ roles: \snippet examples/declarative/modelviews/abstractitemmodel/view.qml 0 +QML views are automatically updated when the model changes. Remember the model +must follow the standard rules for model changes and notify the view when +the model has changed by using QAbstractItemModel::dataChanged(), +QAbstractItemModel::beginInsertRows(), etc. See the \l {Model subclassing reference} for +more information. + The complete example is available in Qt's \l {declarative/modelviews/abstractitemmodel}{examples/declarative/modelviews/abstractitemmodel} directory. QAbstractItemModel presents a hierarchy of tables, but the views currently provided by QML diff --git a/doc/src/snippets/declarative/coloranimation.qml b/doc/src/snippets/declarative/coloranimation.qml new file mode 100644 index 0000000..4e35f22 --- /dev/null +++ b/doc/src/snippets/declarative/coloranimation.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Rectangle { + width: 100; height: 100 + color: "red" + + ColorAnimation on color { to: "yellow"; duration: 1000 } +} +//![0] + diff --git a/doc/src/snippets/declarative/numberanimation.qml b/doc/src/snippets/declarative/numberanimation.qml new file mode 100644 index 0000000..57d23b1 --- /dev/null +++ b/doc/src/snippets/declarative/numberanimation.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Rectangle { + width: 100; height: 100 + color: "red" + + NumberAnimation on x { to: 50; duration: 1000 } +} +//![0] + diff --git a/doc/src/snippets/declarative/propertyanimation.qml b/doc/src/snippets/declarative/propertyanimation.qml new file mode 100644 index 0000000..059cde5 --- /dev/null +++ b/doc/src/snippets/declarative/propertyanimation.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 + +Row { + +//![transition] +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + states: State { + name: "moved" + PropertyChanges { target: rect; x: 50 } + } + + transitions: Transition { + PropertyAnimation { properties: "x,y"; easing.type: Easing.InOutQuad } + } +} +//![transition] + +//![behavior] +Rectangle { + width: 100; height: 100 + color: "red" + + Behavior on x { PropertyAnimation {} } + + MouseArea { anchors.fill: parent; onClicked: parent.x = 50 } +} +//![behavior] + +//![propertyvaluesource] +Rectangle { + width: 100; height: 100 + color: "red" + + SequentialAnimation on x { + loops: Animation.Infinite + PropertyAnimation { to: 50 } + PropertyAnimation { to: 0 } + } +} +//![propertyvaluesource] + +//![standalone] +Rectangle { + id: theRect + width: 100; height: 100 + color: "red" + + // this is a standalone animation, it's not running by default + PropertyAnimation { id: animation; target: theRect; property: "width"; to: 30; duration: 500 } + + MouseArea { anchors.fill: parent; onClicked: animation.running = true } +} +//![standalone] + + +} diff --git a/doc/src/snippets/declarative/smoothedanimation.qml b/doc/src/snippets/declarative/smoothedanimation.qml new file mode 100644 index 0000000..20c90b5 --- /dev/null +++ b/doc/src/snippets/declarative/smoothedanimation.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Rectangle { + width: 800; height: 600 + color: "blue" + + Rectangle { + width: 60; height: 60 + x: rect1.x - 5; y: rect1.y - 5 + color: "green" + + Behavior on x { SmoothedAnimation { velocity: 200 } } + Behavior on y { SmoothedAnimation { velocity: 200 } } + } + + Rectangle { + id: rect1 + width: 50; height: 50 + color: "red" + } + + focus: true + Keys.onRightPressed: rect1.x = rect1.x + 100 + Keys.onLeftPressed: rect1.x = rect1.x - 100 + Keys.onUpPressed: rect1.y = rect1.y - 100 + Keys.onDownPressed: rect1.y = rect1.y + 100 +} +//![0] diff --git a/doc/src/snippets/declarative/springanimation.qml b/doc/src/snippets/declarative/springanimation.qml new file mode 100644 index 0000000..b73a9d2 --- /dev/null +++ b/doc/src/snippets/declarative/springanimation.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Rectangle { + width: 300; height: 300 + + Rectangle { + id: rect + width: 50; height: 50 + color: "red" + + Behavior on x { SpringAnimation { spring: 2; damping: 0.2 } } + Behavior on y { SpringAnimation { spring: 2; damping: 0.2 } } + } + + MouseArea { + anchors.fill: parent + onClicked: { + rect.x = mouse.x + rect.y = mouse.y + } + } +} +//![0] + diff --git a/doc/src/snippets/declarative/state.qml b/doc/src/snippets/declarative/state.qml index a99c2e2..af6b103 100644 --- a/doc/src/snippets/declarative/state.qml +++ b/doc/src/snippets/declarative/state.qml @@ -44,26 +44,13 @@ import Qt 4.7 Rectangle { id: myRect width: 100; height: 100 - color: "black" + color: "red" - states: [ - State { - name: "clicked" - PropertyChanges { - target: myRect - color: "red" - } - } - ] + MouseArea { id: mouseArea; anchors.fill: parent } - MouseArea { - anchors.fill: parent - onClicked: { - if (myRect.state == "") // i.e. the default state - myRect.state = "clicked"; - else - myRect.state = ""; - } + states: State { + name: "hidden"; when: mouseArea.pressed + PropertyChanges { target: myRect; opacity: 0 } } } //![0] diff --git a/doc/src/snippets/declarative/transition-from-to.qml b/doc/src/snippets/declarative/transition-from-to.qml new file mode 100644 index 0000000..615de17 --- /dev/null +++ b/doc/src/snippets/declarative/transition-from-to.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import Qt 4.7 + +//![0] +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + MouseArea { id: mouseArea; anchors.fill: parent } + + states: State { + name: "brighter"; when: mouseArea.pressed + PropertyChanges { target: rect; color: "yellow" } + } + + transitions: Transition { + ColorAnimation { duration: 1000 } + } +} +//![0] + + diff --git a/doc/src/snippets/declarative/transition-reversible.qml b/doc/src/snippets/declarative/transition-reversible.qml new file mode 100644 index 0000000..8a7b69a --- /dev/null +++ b/doc/src/snippets/declarative/transition-reversible.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import Qt 4.7 + +//![0] +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + MouseArea { id: mouseArea; anchors.fill: parent } + + states: State { + name: "brighter" + when: mouseArea.pressed + PropertyChanges { target: rect; color: "yellow"; x: 50 } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 1000 } + ColorAnimation { duration: 1000 } + } + } +} +//![0] + diff --git a/doc/src/snippets/declarative/transition.qml b/doc/src/snippets/declarative/transition.qml new file mode 100644 index 0000000..b884750 --- /dev/null +++ b/doc/src/snippets/declarative/transition.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + states: State { + name: "moved" + PropertyChanges { target: rect; x: 50; y: 50 } + } + + transitions: Transition { + PropertyAnimation { properties: "x,y"; easing.type: Easing.InOutQuad } + } +} +//![0] + diff --git a/examples/declarative/modelviews/abstractitemmodel/model.cpp b/examples/declarative/modelviews/abstractitemmodel/model.cpp index d0e0971..940a44d 100644 --- a/examples/declarative/modelviews/abstractitemmodel/model.cpp +++ b/examples/declarative/modelviews/abstractitemmodel/model.cpp @@ -67,7 +67,9 @@ AnimalModel::AnimalModel(QObject *parent) void AnimalModel::addAnimal(const Animal &animal) { + beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_animals << animal; + endInsertRows(); } int AnimalModel::rowCount(const QModelIndex & parent) const { diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index 44c206b..4881248 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -149,6 +149,8 @@ QDeclarativeBorderImage::~QDeclarativeBorderImage() \endqml The URL may be absolute, or relative to the URL of the component. + + \sa QDeclarativeImageProvider */ void QDeclarativeBorderImage::setSource(const QUrl &url) { diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 6559bd5..e558784 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -634,13 +634,23 @@ QAbstractAnimation *QDeclarativePauseAnimation::qtAnimation() \inherits PropertyAnimation \brief The ColorAnimation element allows you to animate color changes. - \code - ColorAnimation { from: "white"; to: "#c0c0c0"; duration: 100 } - \endcode + ColorAnimation defines an animation to be applied when a color value + changes. + + Here is a ColorAnimation applied to the \c color property of a \l Rectangle + as a property value source: + + \snippet doc/src/snippets/declarative/coloranimation.qml 0 + + Like any other animation element, a NumberAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l PropertyAnimation documentation shows a variety of methods + for creating animations. When used in a transition, ColorAnimation will by default animate - all properties of type color that are changing. If a property or properties - are explicitly set for the animation, then those will be used instead. + all properties of type color that have changed. If a \l{PropertyAnimation::}{property} + or \l{PropertyAnimation::}{properties} are explicitly set for the animation, + then those are used instead. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -665,6 +675,17 @@ QDeclarativeColorAnimation::~QDeclarativeColorAnimation() /*! \qmlproperty color ColorAnimation::from This property holds the starting color. + + For example, the following animation is not applied until a color value + has reached "#c0c0c0": + + Item { + states: [ ... ] + + transition: Transition { + NumberAnimation { from: "#c0c0c0"; duration: 2000 } + } + } */ QColor QDeclarativeColorAnimation::from() const { @@ -1098,11 +1119,22 @@ void QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions, \inherits PropertyAnimation \brief The NumberAnimation element allows you to animate changes in properties of type qreal. - For example, to animate a set of properties over 200ms, from their values in the start state to - their values in the end state of the transition: - \code - NumberAnimation { properties: "x,y,scale"; duration: 200 } - \endcode + NumberAnimation defines an animation to be applied when a numerical value + changes. + + Here is a NumberAnimation applied to the \c x property of a \l Rectangle + as a property value source: + + \snippet doc/src/snippets/declarative/numberanimation.qml 0 + + Like any other animation element, a NumberAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l PropertyAnimation documentation shows a variety of methods + for creating animations. + + Note that NumberAnimation may not animate smoothly if there are irregular + changes in the number value that it is tracking. If this is the case, use + SmoothedAnimation instead. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -1137,9 +1169,23 @@ void QDeclarativeNumberAnimation::init() /*! \qmlproperty real NumberAnimation::from - This property holds the starting value. - If not set, then the value defined in the start state of the transition. + This property holds the starting number value. + + For example, the following animation is not applied until the \c x value + has reached 100: + + Item { + states: [ ... ] + + transition: Transition { + NumberAnimation { properties: "x"; from: 100; duration: 200 } + } + } + + If this value is not set, it defaults to the value defined in the start + state of the \l Transition. */ + qreal QDeclarativeNumberAnimation::from() const { Q_D(const QDeclarativePropertyAnimation); @@ -1153,8 +1199,10 @@ void QDeclarativeNumberAnimation::setFrom(qreal f) /*! \qmlproperty real NumberAnimation::to - This property holds the ending value. - If not set, then the value defined in the end state of the transition or Behavior. + This property holds the ending number value. + + If this value is not set, it defaults to the value defined in the end + state of the \l Transition or \l Behavior. */ qreal QDeclarativeNumberAnimation::to() const { @@ -1199,7 +1247,9 @@ QDeclarativeVector3dAnimation::~QDeclarativeVector3dAnimation() /*! \qmlproperty real Vector3dAnimation::from This property holds the starting value. - If not set, then the value defined in the start state of the transition. + + If this value is not set, it defaults to the value defined in the start + state of the \l Transition. */ QVector3D QDeclarativeVector3dAnimation::from() const { @@ -1215,7 +1265,9 @@ void QDeclarativeVector3dAnimation::setFrom(QVector3D f) /*! \qmlproperty real Vector3dAnimation::to This property holds the ending value. - If not set, then the value defined in the end state of the transition or Behavior. + + If this value is not set, it defaults to the value defined in the end + state of the \l Transition or \l Behavior. */ QVector3D QDeclarativeVector3dAnimation::to() const { @@ -1320,8 +1372,21 @@ QDeclarativeRotationAnimation::~QDeclarativeRotationAnimation() /*! \qmlproperty real RotationAnimation::from - This property holds the starting value. - If not set, then the value defined in the start state of the transition. + This property holds the starting number value. + + For example, the following animation is not applied until the \c angle value + has reached 100: + + Item { + states: [ ... ] + + transition: Transition { + RotationAnimation { properties: "angle"; from: 100; duration: 2000 } + } + } + + If this value is not set, it defaults to the value defined in the start + state of the \l Transition. */ qreal QDeclarativeRotationAnimation::from() const { @@ -1337,7 +1402,9 @@ void QDeclarativeRotationAnimation::setFrom(qreal f) /*! \qmlproperty real RotationAnimation::to This property holds the ending value. - If not set, then the value defined in the end state of the transition or Behavior. + + If this value is not set, it defaults to the value defined in the end + state of the \l Transition or \l Behavior. */ qreal QDeclarativeRotationAnimation::to() const { @@ -1620,51 +1687,49 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int \inherits Animation \brief The PropertyAnimation element allows you to animate property changes. - PropertyAnimation provides a way to animate changes to a property's value. It can - be used in many different situations: + PropertyAnimation provides a way to animate changes to a property's value. + + It can be used to define animations in a number of ways: + \list - \o In a Transition + \o In a \l Transition + + For example, to animate any objects that have changed their \c x or \c y properties + as a result of a state change, using an \c InOutQuad easing curve: + + \snippet doc/src/snippets/declarative/propertyanimation.qml transition + + + \o In a \l Behavior + + For example, to animate all changes to a rectangle's \c x property: + + \snippet doc/src/snippets/declarative/propertyanimation.qml behavior - Animate any objects that have changed their x or y properties in the target state using - an InOutQuad easing curve: - \qml - Transition { PropertyAnimation { properties: "x,y"; easing.type: Easing.InOutQuad } } - \endqml - \o In a Behavior - Animate all changes to a rectangle's x property. - \qml - Rectangle { - Behavior on x { PropertyAnimation {} } - } - \endqml \o As a property value source - Repeatedly animate the rectangle's x property. - \qml - Rectangle { - SequentialAnimation on x { - loops: Animation.Infinite - PropertyAnimation { to: 50 } - PropertyAnimation { to: 0 } - } - } - \endqml + For example, to repeatedly animate the rectangle's \c x property: + + \snippet doc/src/snippets/declarative/propertyanimation.qml propertyvaluesource + + \o In a signal handler - Fade out \c theObject when clicked: + For example, to fade out \c theObject when clicked: \qml MouseArea { anchors.fill: theObject onClicked: PropertyAnimation { target: theObject; property: "opacity"; to: 0 } } \endqml + \o Standalone - Animate \c theObject's size property over 200ms, from its current size to 20-by-20: - \qml - PropertyAnimation { target: theObject; property: "size"; to: "20x20"; duration: 200 } - \endqml + For example, to animate \c rect's \c width property over 500ms, from its current width to 30: + + \snippet doc/src/snippets/declarative/propertyanimation.qml standalone + \endlist Depending on how the animation is used, the set of properties normally used will be diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index 5d47c30..e0d1097 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -272,33 +272,8 @@ void QSmoothedAnimation::init() with both a velocity of 200 and a duration of 8000 set. The follow example shows one rectangle tracking the position of another. -\code -import Qt 4.7 - -Rectangle { - width: 800; height: 600; color: "blue" - - Rectangle { - color: "green" - width: 60; height: 60; - x: rect1.x - 5; y: rect1.y - 5; - Behavior on x { SmoothedAnimation { velocity: 200 } } - Behavior on y { SmoothedAnimation { velocity: 200 } } - } - - Rectangle { - id: rect1 - color: "red" - width: 50; height: 50; - } - focus: true - Keys.onRightPressed: rect1.x = rect1.x + 100 - Keys.onLeftPressed: rect1.x = rect1.x - 100 - Keys.onUpPressed: rect1.y = rect1.y - 100 - Keys.onDownPressed: rect1.y = rect1.y + 100 -} -\endcode + \snippet doc/src/snippets/declarative/smoothedanimation.qml 0 The default velocity of SmoothedAnimation is 200 units/second. Note that if the range of the value being animated is small, then the velocity will need to be adjusted @@ -307,6 +282,11 @@ Rectangle { set to a value such as 0.5 units/second. Animating from 0 to 1.0 with a velocity of 0.5 will take 2000 ms to complete. + Like any other animation element, a SmoothedAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l PropertyAnimation documentation shows a variety of methods + for creating animations. + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -388,11 +368,13 @@ void QDeclarativeSmoothedAnimation::transition(QDeclarativeStateActions &actions Sets how the SmoothedAnimation behaves if an animation direction is reversed. - If reversing mode is \c SmoothedAnimation.Eased, the animation will smoothly decelerate, and - then reverse direction. If the reversing mode is \c SmoothedAnimation.Immediate, the - animation will immediately begin accelerating in the reverse direction, - begining with a velocity of 0. If the reversing mode is \c SmoothedAnimation.Sync, the - property is immediately set to the target value. + Possible values are: + + \list + \o SmoothedAnimation.Eased (default) - the animation will smoothly decelerate, and then reverse direction + \o SmoothedAnimation.Immediate - the animation will immediately begin accelerating in the reverse direction, begining with a velocity of 0 + \o SmoothedAnimation.Sync - the property is immediately set to the target value + \endlist */ QDeclarativeSmoothedAnimation::ReversingMode QDeclarativeSmoothedAnimation::reversingMode() const { diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index 4cf2fc0..be0af6d 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -207,14 +207,24 @@ void QDeclarativeSpringAnimationPrivate::updateMode() \qmlclass SpringAnimation QDeclarativeSpringAnimation \since 4.7 - \brief The SpringAnimation element allows a property to track a value in a spring-like motion + \brief The SpringAnimation element allows a property to track a value in a spring-like motion. SpringAnimation mimics the oscillatory behavior of a spring, with the appropriate \l spring constant to control the acceleration and the \l damping to control how quickly the effect dies away. You can also limit the maximum \l velocity of the animation. + The following \l Rectangle moves to the position of the mouse using a + SpringAnimation when the mouse is clicked: + \snippet doc/src/snippets/declarative/springanimation.qml 0 + + Like any other animation element, a SpringAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l PropertyAnimation documentation shows a variety of methods + for creating animations. + + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example}, {declarative/toys/clocks}{Clocks example} */ QDeclarativeSpringAnimation::QDeclarativeSpringAnimation(QObject *parent) @@ -244,6 +254,11 @@ qreal QDeclarativeSpringAnimation::to() const /*! \qmlproperty real SpringAnimation::to + + This property holds the value at which the animation will end. + + If not set, the animation will continue until it reaches the + value that is being tracked. */ void QDeclarativeSpringAnimation::setTo(qreal value) @@ -266,6 +281,11 @@ qreal QDeclarativeSpringAnimation::from() const /*! \qmlproperty real SpringAnimation::from + + This property holds the value from which the animation will begin. + + If not set, the animation will start regardless of the + value being tracked. */ void QDeclarativeSpringAnimation::setFrom(qreal value) @@ -325,10 +345,12 @@ void QDeclarativeSpringAnimation::setSpring(qreal spring) /*! \qmlproperty real SpringAnimation::damping - This property holds the spring damping constant + This property holds the spring damping value. + + This value describes how quickly a sprung follower comes to rest. - The damping constant describes how quickly a sprung follower comes to rest. - Useful range is 0 - 1.0 + The useful range is 0 - 1.0. The lower the value, the faster the + follower comes to rest. */ qreal QDeclarativeSpringAnimation::damping() const { @@ -348,7 +370,7 @@ void QDeclarativeSpringAnimation::setDamping(qreal damping) /*! \qmlproperty real SpringAnimation::epsilon - This property holds the spring epsilon + This property holds the spring epsilon. The epsilon is the rate and amount of change in the value which is close enough to 0 to be considered equal to zero. This will depend on the usage of the value. diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index ae19a9c..9f4cc39 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -144,7 +144,7 @@ QDeclarativeStateOperation::QDeclarativeStateOperation(QObjectPrivate &dd, QObje can, for example, be used to apply different sets of property values or execute different scripts. - The following example displays a single Rectangle. In the default state, the rectangle + The following example displays a single \l Rectangle. In the default state, the rectangle is colored black. In the "clicked" state, a PropertyChanges element changes the rectangle's color to red. Clicking within the MouseArea toggles the rectangle's state between the default state and the "clicked" state, thus toggling the color of the @@ -157,7 +157,7 @@ QDeclarativeStateOperation::QDeclarativeStateOperation(QObjectPrivate &dd, QObje States are commonly used together with \l {state-transitions}{Transitions} to provide animations when state changes occur. - \note setting the state of an object from within another state of the same object is + \note Setting the state of an object from within another state of the same object is not allowed. \sa {declarative/animation/states}{states example}, {qmlstates}{States}, {state-transitions}{Transitions}, QtDeclarative @@ -194,7 +194,7 @@ QDeclarativeState::~QDeclarativeState() \qmlproperty string State::name This property holds the name of the state. - Each state should have a unique name. + Each state should have a unique name within its item. */ QString QDeclarativeState::name() const { @@ -226,7 +226,23 @@ bool QDeclarativeState::isWhenKnown() const This property holds when the state should be applied. This should be set to an expression that evaluates to \c true when you want the state to - be applied. + be applied. For example, the following \l Rectangle changes in and out of the "hidden" + state when the \l MouseArea is pressed: + + \qml + Rectangle { + id: myRect + width: 100; height: 100 + color: "red" + + MouseArea { id: mouseArea; anchors.fill: parent } + + states: State { + name: "hidden"; when: mouseArea.pressed + PropertyChanges { target: myRect; opacity: 0 } + } + } + \endqml If multiple states in a group have \c when clauses that evaluate to \c true at the same time, the first matching state will be applied. For example, in the following snippet diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp index 38ed97e..34e1e2b 100644 --- a/src/declarative/util/qdeclarativetransition.cpp +++ b/src/declarative/util/qdeclarativetransition.cpp @@ -56,6 +56,30 @@ QT_BEGIN_NAMESPACE \since 4.7 \brief The Transition element defines animated transitions that occur on state changes. + A Transition defines the animations to be applied when a \l State change occurs. + + For example, the following \l Rectangle has two states: the default state, and + an added "moved" state. In the "moved state, the rectangle's position changes + to (50, 50). The added \l Transition specifies that when the rectangle + changes between the default and the "moved" state, any changes + to the \c x and \c y properties should be animated, using an \c Easing.InOutQuad. + + \snippet doc/src/snippets/declarative/transition.qml 0 + + Items can have multiple transitions, if + + To specify multiple transitions, specify \l Item::transitions as a list: + + \qml + Item { + ... + transitions: [ + Transition { ... } + Transition { ... } + ] + } + |endqml + \sa {declarative/animation/states}{states example}, {qmlstates}{States}, {state-transitions}{Transitions}, {QtDeclarative} */ @@ -171,18 +195,31 @@ void QDeclarativeTransition::prepare(QDeclarativeStateOperation::ActionList &act /*! \qmlproperty string Transition::from \qmlproperty string Transition::to - These properties are selectors indicating which state changes should trigger the transition. - from is used in conjunction with to to determine when a transition should - be applied. By default from and to are both "*" (any state). In the following example, - the transition is applied when changing from state1 to state2. - \code - Transition { - from: "state1" - to: "state2" - ... + These properties indicate the state changes that trigger the transition. + + The default values for these properties is "*" (that is, any state). + + For example, the following transition has not set the \c to and \c from + properties, so the animation is always applied when changing between + the two states (i.e. when the mouse is pressed and released). + + \snippet doc/src/snippets/declarative/transition-from-to.qml 0 + + If the transition was changed to this: + + \qml + transitions: Transition { + to: "brighter" + ColorAnimation { duration: 1000 } + } } - \endcode + \endqml + + The animation would only be applied when changing from the default state to + the "brighter" state (i.e. when the mouse is pressed, but not on release). + + \sa reversible */ QString QDeclarativeTransition::fromState() const { @@ -205,6 +242,24 @@ void QDeclarativeTransition::setFromState(const QString &f) This property holds whether the transition should be automatically reversed when the conditions that triggered this transition are reversed. The default value is false. + + By default, transitions run in parallel and are applied to all state + changes if the \l from and \l to states have not been set. In this + situation, the transition is automatically applied when a state change + is reversed, and it is not necessary to set this property to reverse + the transition. + + However, if a SequentialAnimation is used, or if the \l from or \l to + properties have been set, this property will need to be set to reverse + a transition when a state change is reverted. For example, the following + transition applies a sequential animation when the mouse is pressed, + and reverses the sequence of the animation when the mouse is released: + + \snippet doc/src/snippets/declarative/transition-reversible.qml 0 + + If the transition did not set the \c to and \c reversible values, then + on the mouse release, the transition would play the PropertyAnimation + before the ColorAnimation instead of reversing the sequence. */ bool QDeclarativeTransition::reversible() const { @@ -241,12 +296,27 @@ void QDeclarativeTransition::setToState(const QString &t) /*! \qmlproperty list<Animation> Transition::animations \default + This property holds a list of the animations to be run for this transition. + \qml + Transition { + PropertyAnimation { ... } + NumberAnimation { ... } + } + \endqml + The top-level animations are run in parallel. To run them sequentially, - you can create a single SequentialAnimation which contains all the animations, - and assign that to animations the animations property. - \default + define them within a SequentialAnimation: + + \qml + Transition { + SequentialAnimation { + PropertyAnimation { ... } + NumberAnimation { ... } + } + } + \endqml */ QDeclarativeListProperty<QDeclarativeAbstractAnimation> QDeclarativeTransition::animations() { -- cgit v0.12 From 8ec06dbfdcbb43b6b02523247a6e88c61b4e0011 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Thu, 8 Jul 2010 17:49:23 +0200 Subject: Follow -> Behavior Replace the usages of Follows with Behaviors, update docs. (cherry picked from commit b22a5e13003ff9f23b075284a1a1e0a6b0e46250) --- .../samegame/SamegameCore/BoomBlock.qml | 11 +- .../declarative/samegame/SamegameCore/samegame.js | 7 +- doc/src/declarative/advtutorial.qdoc | 11 +- doc/src/declarative/elements.qdoc | 3 +- doc/src/examples/qml-examples.qdoc | 6 +- doc/src/snippets/declarative/gridview/gridview.qml | 6 +- doc/src/snippets/declarative/listview/listview.qml | 10 +- .../plugins/com/nokia/TimeExample/Clock.qml | 16 +- .../declarative/modelviews/listview/highlight.qml | 5 +- examples/declarative/toys/clocks/content/Clock.qml | 35 +- examples/declarative/toys/corkboards/Day.qml | 6 +- examples/declarative/toys/tvtennis/tvtennis.qml | 24 +- .../samegame/samegame4/content/BoomBlock.qml | 11 +- .../samegame/samegame4/content/samegame.js | 7 +- .../graphicsitems/qdeclarativegridview.cpp | 2 +- .../graphicsitems/qdeclarativelistview.cpp | 2 +- .../util/qdeclarativesmoothedfollow.cpp | 299 ------------- .../util/qdeclarativesmoothedfollow_p.h | 113 ----- src/declarative/util/qdeclarativespringfollow.cpp | 464 --------------------- src/declarative/util/qdeclarativespringfollow_p.h | 120 ------ src/declarative/util/qdeclarativeutilmodule.cpp | 4 - src/declarative/util/util.pri | 4 - .../data/springanimation1.qml | 4 + .../data/springanimation2.qml | 9 + .../data/springanimation3.qml | 8 + .../qdeclarativespringanimation.pro | 16 + .../tst_qdeclarativespringanimation.cpp | 136 ++++++ .../data/springfollow1.qml | 4 - .../data/springfollow2.qml | 8 - .../data/springfollow3.qml | 8 - .../qdeclarativespringfollow.pro | 16 - .../tst_qdeclarativespringfollow.cpp | 142 ------- 32 files changed, 257 insertions(+), 1260 deletions(-) delete mode 100644 src/declarative/util/qdeclarativesmoothedfollow.cpp delete mode 100644 src/declarative/util/qdeclarativesmoothedfollow_p.h delete mode 100644 src/declarative/util/qdeclarativespringfollow.cpp delete mode 100644 src/declarative/util/qdeclarativespringfollow_p.h create mode 100644 tests/auto/declarative/qdeclarativespringanimation/data/springanimation1.qml create mode 100644 tests/auto/declarative/qdeclarativespringanimation/data/springanimation2.qml create mode 100644 tests/auto/declarative/qdeclarativespringanimation/data/springanimation3.qml create mode 100644 tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro create mode 100644 tests/auto/declarative/qdeclarativespringanimation/tst_qdeclarativespringanimation.cpp delete mode 100644 tests/auto/declarative/qdeclarativespringfollow/data/springfollow1.qml delete mode 100644 tests/auto/declarative/qdeclarativespringfollow/data/springfollow2.qml delete mode 100644 tests/auto/declarative/qdeclarativespringfollow/data/springfollow3.qml delete mode 100644 tests/auto/declarative/qdeclarativespringfollow/qdeclarativespringfollow.pro delete mode 100644 tests/auto/declarative/qdeclarativespringfollow/tst_qdeclarativespringfollow.cpp diff --git a/demos/declarative/samegame/SamegameCore/BoomBlock.qml b/demos/declarative/samegame/SamegameCore/BoomBlock.qml index 3f43579..43050af 100644 --- a/demos/declarative/samegame/SamegameCore/BoomBlock.qml +++ b/demos/declarative/samegame/SamegameCore/BoomBlock.qml @@ -47,11 +47,14 @@ Item { property bool dying: false property bool spawned: false property int type: 0 - property int targetX: 0 - property int targetY: 0 - SpringFollow on x { enabled: spawned; to: targetX; spring: 2; damping: 0.2 } - SpringFollow on y { to: targetY; spring: 2; damping: 0.2 } + Behavior on x { + enabled: spawned; + SpringAnimation{ spring: 2; damping: 0.2 } + } + Behavior on y { + SpringAnimation{ spring: 2; damping: 0.2 } + } Image { id: img diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js index 5c008a2..6e1b24d 100755 --- a/demos/declarative/samegame/SamegameCore/samegame.js +++ b/demos/declarative/samegame/SamegameCore/samegame.js @@ -110,7 +110,7 @@ function shuffleDown() }else{ if(fallDist > 0){ var obj = board[index(column,row)]; - obj.targetY += fallDist * gameCanvas.blockSize; + obj.y += fallDist * gameCanvas.blockSize; board[index(column,row+fallDist)] = obj; board[index(column,row)] = null; } @@ -128,7 +128,7 @@ function shuffleDown() obj = board[index(column,row)]; if(obj == null) continue; - obj.targetX -= fallDist * gameCanvas.blockSize; + obj.x -= fallDist * gameCanvas.blockSize; board[index(column-fallDist,row)] = obj; board[index(column,row)] = null; } @@ -184,8 +184,7 @@ function createBlock(column,row){ } dynamicObject.type = Math.floor(Math.random() * 3); dynamicObject.x = column*gameCanvas.blockSize; - dynamicObject.targetX = column*gameCanvas.blockSize; - dynamicObject.targetY = row*gameCanvas.blockSize; + dynamicObject.y = row*gameCanvas.blockSize; dynamicObject.width = gameCanvas.blockSize; dynamicObject.height = gameCanvas.blockSize; dynamicObject.spawned = true; diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc index 2c3610c..afedb44 100644 --- a/doc/src/declarative/advtutorial.qdoc +++ b/doc/src/declarative/advtutorial.qdoc @@ -306,18 +306,17 @@ In anticipation of the new block animations, \c Block.qml file is now renamed to \section3 Animating block movement First we will animate the blocks so that they move in a fluid manner. QML has a number of methods for adding fluid -movement, and in this case we're going to use the \l SpringFollow element to add an animation with a spring-like -movement. In \c BoomBlock.qml, we apply a \l SpringFollow -to the \c x and \c y properties so that the block will follow and animate its movement towards the -position specified by the new \c targetX and \c targetY properties (whose values will be set by \c samegame.js). -Here is the code added to \c BoomBlock.qml: +movement, and in this case we're going to use the \l Behavior element to add a \l SpringAnimation. +In \c BoomBlock.qml, we apply a \l SpringAnimation behavior to the \c x and \c y properties so that the +block will follow and animate its movement in a spring-like fashion towards the specified position (whose +values will be set by \c samegame.js).Here is the code added to \c BoomBlock.qml: \snippet declarative/tutorials/samegame/samegame4/content/BoomBlock.qml 1 The \c spring and \c damping values can be changed to modify the spring-like effect of the animation. The \c {enabled: spawned} setting refers to the \c spawned value that is set from \c createBlock() in \c samegame.js. -This ensures the \l SpringFollow on the \c x is only enabled after \c createBlock() has set the block to +This ensures the \l SpringAnimation on the \c x is only enabled after \c createBlock() has set the block to the correct position. Otherwise, the blocks will slide out of the corner (0,0) when a game begins, instead of falling from the top in rows. (Try commenting out \c {enabled: spawned} and see for yourself.) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index 349a8ed..c2930b3 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -76,11 +76,10 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \row \o \l {AnchorAnimation} \o Animates anchor changes \row \o \l {PauseAnimation} \o Pauses an animation \row \o \l {SmoothedAnimation} \o Allows a property to smoothly track a value +\row \o \l {SpringAnimation} \o Allows a property to track a value in a spring-like motion \row \o \l {PropertyAction} \o Sets immediate property changes during animation \row \o \l {ScriptAction} \o Runs scripts during an animation \row \o \l {Transition} \o Animates transitions during state changes -\row \o \l {SpringFollow} \o Allows a property to follow value changes -\row \o \l {SmoothedFollow} \o Allows animation to smoothly follow value changes \header \o {2,1} \bold {Working with Data} \row \o \l {Binding} \o Binds any value to any property diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index 8896366..9e0d6f1 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -474,7 +474,7 @@ This example displays a set of clocks with different times for different cities. Each clock is created by combining \l Image elements with \l Rotation transforms - and \l SpringFollow animations. + and \l SpringAnimation behaviors. \image qml-clocks-example.png */ @@ -514,7 +514,7 @@ \title Toys: TV Tennis \example declarative/toys/tvtennis - This example shows how to use animation components such as \l SpringFollow, + This example shows how to use animation components such as \l SpringAnimation, \l SequentialAnimation and \l PropertyAction to create a game of TV tennis. \image qml-tvtennis-example.png @@ -542,7 +542,7 @@ \example declarative/ui-components/dialcontrol This example shows how to create a dial-type control. It combines - \l Image elements with \l Rotation transforms and \l SpringFollow animations + \l Image elements with \l Rotation transforms and \l SpringAnimatino behaviors to produce an interactive speedometer-type dial. \image qml-dialcontrol-example.png diff --git a/doc/src/snippets/declarative/gridview/gridview.qml b/doc/src/snippets/declarative/gridview/gridview.qml index 7377cee..e92a429 100644 --- a/doc/src/snippets/declarative/gridview/gridview.qml +++ b/doc/src/snippets/declarative/gridview/gridview.qml @@ -108,8 +108,10 @@ Component { Rectangle { width: view.cellWidth; height: view.cellHeight color: "lightsteelblue"; radius: 5 - SpringFollow on x { to: view.currentItem.x; spring: 3; damping: 0.2 } - SpringFollow on y { to: view.currentItem.y; spring: 3; damping: 0.2 } + x: view.currentItem.x + y: view.currentItem.y + Behavior on x { SpringAnimation { spring: 3; damping: 0.2 } } + Behavior on y { SpringAnimation { spring: 3; damping: 0.2 } } } } diff --git a/doc/src/snippets/declarative/listview/listview.qml b/doc/src/snippets/declarative/listview/listview.qml index 0c6dfd4..cde820e 100644 --- a/doc/src/snippets/declarative/listview/listview.qml +++ b/doc/src/snippets/declarative/listview/listview.qml @@ -99,10 +99,12 @@ Component { Rectangle { width: 180; height: 40 color: "lightsteelblue"; radius: 5 - SpringFollow on y { - to: list.currentItem.y - spring: 3 - damping: 0.2 + y: list.currentItem.y + Behavior on y { + SpringAnimation { + spring: 3 + damping: 0.2 + } } } } diff --git a/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml b/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml index 37128b5..6b2676e 100644 --- a/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml +++ b/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml @@ -57,10 +57,10 @@ Rectangle { smooth: true transform: Rotation { id: hourRotation - origin.x: 7.5; origin.y: 73; angle: 0 - SpringFollow on angle { - spring: 2; damping: 0.2; modulus: 360 - to: (clock.hours * 30) + (clock.minutes * 0.5) + origin.x: 7.5; origin.y: 73; + angle: (clock.hours * 30) + (clock.minutes * 0.5) + Behavior on angle { + SpringAnimation{ spring: 2; damping: 0.2; modulus: 360 } } } } @@ -71,10 +71,10 @@ Rectangle { smooth: true transform: Rotation { id: minuteRotation - origin.x: 6.5; origin.y: 83; angle: 0 - SpringFollow on angle { - spring: 2; damping: 0.2; modulus: 360 - to: clock.minutes * 6 + origin.x: 6.5; origin.y: 83; + angle: clock.minutes * 6 + Behavior on angle { + SpringAnimation{ spring: 2; damping: 0.2; modulus: 360 } } } } diff --git a/examples/declarative/modelviews/listview/highlight.qml b/examples/declarative/modelviews/listview/highlight.qml index 4c14f2a..2d68da6 100644 --- a/examples/declarative/modelviews/listview/highlight.qml +++ b/examples/declarative/modelviews/listview/highlight.qml @@ -39,7 +39,7 @@ ****************************************************************************/ // This example shows how to create your own highlight delegate for a ListView -// that uses a SpringFollow animation to provide custom movement when the +// that uses a SpringAnimation to provide custom movement when the // highlight bar is moved between items. import Qt 4.7 @@ -78,7 +78,8 @@ Rectangle { Rectangle { width: 200; height: 50 color: "#FFFF88" - SpringFollow on y { to: listView.currentItem.y; spring: 3; damping: 0.1 } + y: listView.currentItem.y; + Behavior on y { SpringAnimation { spring: 2; damping: 0.1 } } } } diff --git a/examples/declarative/toys/clocks/content/Clock.qml b/examples/declarative/toys/clocks/content/Clock.qml index 136573b..24a07ec 100644 --- a/examples/declarative/toys/clocks/content/Clock.qml +++ b/examples/declarative/toys/clocks/content/Clock.qml @@ -45,10 +45,10 @@ Item { width: 200; height: 230 property alias city: cityLabel.text - property variant hours - property variant minutes - property variant seconds - property variant shift : 0 + property int hours + property int minutes + property int seconds + property real shift property bool night: false function timeChanged() { @@ -60,23 +60,24 @@ Item { } Timer { - interval: 100; running: true; repeat: true; triggeredOnStart: true + interval: 100; running: true; repeat: true; onTriggered: clock.timeChanged() } Image { id: background; source: "clock.png"; visible: clock.night == false } Image { source: "clock-night.png"; visible: clock.night == true } + Image { x: 92.5; y: 27 source: "hour.png" smooth: true transform: Rotation { id: hourRotation - origin.x: 7.5; origin.y: 73; angle: 0 - SpringFollow on angle { - spring: 2; damping: 0.2; modulus: 360 - to: (clock.hours * 30) + (clock.minutes * 0.5) + origin.x: 7.5; origin.y: 73; + angle: (clock.hours * 30) + (clock.minutes * 0.5) + Behavior on angle { + NumberAnimation{} } } } @@ -87,10 +88,10 @@ Item { smooth: true transform: Rotation { id: minuteRotation - origin.x: 6.5; origin.y: 83; angle: 0 - SpringFollow on angle { - spring: 2; damping: 0.2; modulus: 360 - to: clock.minutes * 6 + origin.x: 6.5; origin.y: 83; + angle: clock.minutes * 6 + Behavior on angle { + NumberAnimation{} } } } @@ -101,10 +102,10 @@ Item { smooth: true transform: Rotation { id: secondRotation - origin.x: 2.5; origin.y: 80; angle: 0 - SpringFollow on angle { - spring: 5; damping: 0.25; modulus: 360 - to: clock.seconds * 6 + origin.x: 2.5; origin.y: 80; + angle: clock.seconds * 6 + Behavior on angle { + NumberAnimation{} } } } diff --git a/examples/declarative/toys/corkboards/Day.qml b/examples/declarative/toys/corkboards/Day.qml index cc297b1..9d1f3ae 100644 --- a/examples/declarative/toys/corkboards/Day.qml +++ b/examples/declarative/toys/corkboards/Day.qml @@ -70,9 +70,9 @@ Component { x: randomX; y: randomY - SpringFollow on rotation { - to: -flickable.horizontalVelocity / 100 - spring: 2.0; damping: 0.15 + rotation: -flickable.horizontalVelocity / 100; + Behavior on rotation { + SpringAnimation { spring: 2.0; damping: 0.15 } } Item { diff --git a/examples/declarative/toys/tvtennis/tvtennis.qml b/examples/declarative/toys/tvtennis/tvtennis.qml index 726c649..2e144ed 100644 --- a/examples/declarative/toys/tvtennis/tvtennis.qml +++ b/examples/declarative/toys/tvtennis/tvtennis.qml @@ -50,7 +50,6 @@ Rectangle { id: ball // Add a property for the target y coordinate - property int targetY : page.height - 10 property variant direction : "right" x: 20; width: 20; height: 20; z: 1 @@ -65,15 +64,18 @@ Rectangle { PropertyAction { target: ball; property: "direction"; value: "right" } } - // Make y follow the target y coordinate, with a velocity of 200 - SpringFollow on y { to: ball.targetY; velocity: 200 } + // Make y move with a velocity of 200 + Behavior on y { SpringAnimation{ velocity: 200; } + } + + Component.onCompleted: y = page.height-10; // start the ball motion // Detect the ball hitting the top or bottom of the view and bounce it onYChanged: { if (y <= 0) { - targetY = page.height - 20; + y = page.height - 20; } else if (y >= page.height - 20) { - targetY = 0; + y = 0; } } } @@ -84,19 +86,15 @@ Rectangle { id: leftBat color: "Lime" x: 2; width: 20; height: 90 - SpringFollow on y { - to: ball.y - 45; velocity: 300 - enabled: ball.direction == 'left' - } + y: ball.direction == 'left' ? ball.y - 45 : page.height/2 -45; + Behavior on y { SpringAnimation{ spring: 1; damping: .1; } } } Rectangle { id: rightBat color: "Lime" x: page.width - 22; width: 20; height: 90 - SpringFollow on y { - to: ball.y-45; velocity: 300 - enabled: ball.direction == 'right' - } + y: ball.direction == 'right' ? ball.y - 45 : page.height/2 -45; + Behavior on y { SpringAnimation{ spring: 1; damping: .1; } } } // The rest, to make it look realistic, if neither ever scores... diff --git a/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml b/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml index 1f51e13..92c607f 100644 --- a/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml +++ b/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml @@ -49,11 +49,14 @@ Item { //![1] property bool spawned: false - property int targetX: 0 - property int targetY: 0 - SpringFollow on x { to: targetX; spring: 2; damping: 0.2; enabled: spawned } - SpringFollow on y { to: targetY; spring: 2; damping: 0.2 } + Behavior on x { + enabled: spawned; + SpringAnimation{ spring: 2; damping: 0.2 } + } + Behavior on y { + SpringAnimation{ spring: 2; damping: 0.2 } + } //![1] //![2] diff --git a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js index 930a3d8..b1f427c 100755 --- a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js +++ b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js @@ -57,8 +57,7 @@ function createBlock(column, row) { } dynamicObject.type = Math.floor(Math.random() * 3); dynamicObject.x = column * gameCanvas.blockSize; - dynamicObject.targetX = column * gameCanvas.blockSize; - dynamicObject.targetY = row * gameCanvas.blockSize; + dynamicObject.y = row * gameCanvas.blockSize; dynamicObject.width = gameCanvas.blockSize; dynamicObject.height = gameCanvas.blockSize; dynamicObject.spawned = true; @@ -128,7 +127,7 @@ function shuffleDown() { } else { if (fallDist > 0) { var obj = board[index(column, row)]; - obj.targetY += fallDist * gameCanvas.blockSize; + obj.y += fallDist * gameCanvas.blockSize; board[index(column, row + fallDist)] = obj; board[index(column, row)] = null; } @@ -146,7 +145,7 @@ function shuffleDown() { obj = board[index(column, row)]; if (obj == null) continue; - obj.targetX -= fallDist * gameCanvas.blockSize; + obj.x -= fallDist * gameCanvas.blockSize; board[index(column - fallDist, row)] = obj; board[index(column, row)] = null; } diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 078d034..14a4f08 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1390,7 +1390,7 @@ void QDeclarativeGridView::setHighlight(QDeclarativeComponent *highlight) highlight is not moved by the view, and any movement must be implemented by the highlight. - Here is a highlight with its motion defined by a \l {SpringFollow} item: + Here is a highlight with its motion defined by a \l {SpringAnimation} item: \snippet doc/src/snippets/declarative/gridview/gridview.qml highlightFollowsCurrentItem */ diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 42b953c..110c970 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1732,7 +1732,7 @@ void QDeclarativeListView::setHighlight(QDeclarativeComponent *highlight) highlight is not moved by the view, and any movement must be implemented by the highlight. - Here is a highlight with its motion defined by a \l {SpringFollow} item: + Here is a highlight with its motion defined by a \l {SpringAniamtion} item: \snippet doc/src/snippets/declarative/listview/listview.qml highlightFollowsCurrentItem diff --git a/src/declarative/util/qdeclarativesmoothedfollow.cpp b/src/declarative/util/qdeclarativesmoothedfollow.cpp deleted file mode 100644 index f70df9d..0000000 --- a/src/declarative/util/qdeclarativesmoothedfollow.cpp +++ /dev/null @@ -1,299 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdeclarativesmoothedfollow_p.h" -#include "qdeclarativesmoothedanimation_p_p.h" - -#include <private/qobject_p.h> -#include <QtCore/qnumeric.h> - -#include "qdeclarativeglobal_p.h" - - -QT_BEGIN_NAMESPACE - -class QDeclarativeSmoothedFollowPrivate : public QObjectPrivate -{ - Q_DECLARE_PUBLIC(QDeclarativeSmoothedFollow) -public: - QDeclarativeSmoothedFollowPrivate(); - - bool enabled; - QSmoothedAnimation *anim; -}; - -/*! - \qmlclass SmoothedFollow QDeclarativeSmoothedFollow - \since 4.7 - \inherits NumberAnimation - \brief The SmoothedFollow element allows a property to smoothly track a value. - - The SmoothedFollow animates a property's value to a set target value - using an ease in/out quad easing curve. If the animation is restarted - with a different target value, the easing curves used to animate to the old - and the new target values are smoothly spliced together to avoid any obvious - visual glitches by maintaining the current velocity. - - The property animation is configured by setting the velocity at which the - animation should occur, or the duration that the animation should take. - If both a velocity and a duration are specified, the one that results in - the quickest animation is chosen for each change in the target value. - - For example, animating from 0 to 800 will take 4 seconds if a velocity - of 200 is set, will take 8 seconds with a duration of 8000 set, and will - take 4 seconds with both a velocity of 200 and a duration of 8000 set. - Animating from 0 to 20000 will take 10 seconds if a velocity of 200 is set, - will take 8 seconds with a duration of 8000 set, and will take 8 seconds - with both a velocity of 200 and a duration of 8000 set. - - The follow example shows one rectangle tracking the position of another. -\code -import Qt 4.7 - -Rectangle { - width: 800; height: 600; color: "blue" - - Rectangle { - color: "green" - width: 60; height: 60; - SmoothedFollow on x { to: rect1.x - 5; velocity: 200 } - SmoothedFollow on y { to: rect1.y - 5; velocity: 200 } - } - - Rectangle { - id: rect1 - color: "red" - width: 50; height: 50; - } - - focus: true - Keys.onRightPressed: rect1.x = rect1.x + 100 - Keys.onLeftPressed: rect1.x = rect1.x - 100 - Keys.onUpPressed: rect1.y = rect1.y - 100 - Keys.onDownPressed: rect1.y = rect1.y + 100 -} -\endcode - - The default velocity of SmoothedFollow is 200 units/second. Note that if the range of the - value being animated is small, then the velocity will need to be adjusted - appropriately. For example, the opacity of an item ranges from 0 - 1.0. - To enable a smooth animation in this range the velocity will need to be - set to a value such as 0.5 units/second. Animating from 0 to 1.0 with a velocity - of 0.5 will take 2000 ms to complete. - - \sa SpringFollow -*/ - -QDeclarativeSmoothedFollow::QDeclarativeSmoothedFollow(QObject *parent) - : QObject(*(new QDeclarativeSmoothedFollowPrivate), parent) -{ -} - -QDeclarativeSmoothedFollow::~QDeclarativeSmoothedFollow() -{ -} - -QDeclarativeSmoothedFollowPrivate::QDeclarativeSmoothedFollowPrivate() - : enabled(true), anim(new QSmoothedAnimation) -{ - Q_Q(QDeclarativeSmoothedFollow); - QDeclarative_setParent_noEvent(anim, q); -} - -/*! - \qmlproperty enumeration SmoothedFollow::reversingMode - - Sets how the SmoothedFollow behaves if an animation direction is reversed. - - If reversing mode is \c SmoothedFollow.Eased, the animation will smoothly decelerate, and - then reverse direction. If the reversing mode is \c SmoothedFollow.Immediate, the - animation will immediately begin accelerating in the reverse direction, - begining with a velocity of 0. If the reversing mode is \c SmoothedFollow.Sync, the - property is immediately set to the target value. -*/ -QDeclarativeSmoothedFollow::ReversingMode QDeclarativeSmoothedFollow::reversingMode() const -{ - Q_D(const QDeclarativeSmoothedFollow); - return (ReversingMode) d->anim->reversingMode; -} - -void QDeclarativeSmoothedFollow::setReversingMode(ReversingMode m) -{ - Q_D(QDeclarativeSmoothedFollow); - if (d->anim->reversingMode == (QDeclarativeSmoothedAnimation::ReversingMode) m) - return; - - d->anim->reversingMode = (QDeclarativeSmoothedAnimation::ReversingMode) m; - emit reversingModeChanged(); -} - -/*! - \qmlproperty int SmoothedFollow::duration - - This property holds the animation duration, in msecs, used when tracking the source. - - Setting this to -1 (the default) disables the duration value. -*/ -int QDeclarativeSmoothedFollow::duration() const -{ - Q_D(const QDeclarativeSmoothedFollow); - return d->anim->userDuration; -} - -void QDeclarativeSmoothedFollow::setDuration(int duration) -{ - Q_D(QDeclarativeSmoothedFollow); - if (duration == d->anim->duration()) - return; - - d->anim->userDuration = duration; - emit durationChanged(); -} - -qreal QDeclarativeSmoothedFollow::velocity() const -{ - Q_D(const QDeclarativeSmoothedFollow); - return d->anim->velocity; -} - -/*! - \qmlproperty real SmoothedFollow::velocity - - This property holds the average velocity allowed when tracking the 'to' value. - - The default velocity of SmoothedFollow is 200 units/second. - - Setting this to -1 disables the velocity value. -*/ -void QDeclarativeSmoothedFollow::setVelocity(qreal v) -{ - Q_D(QDeclarativeSmoothedFollow); - if (d->anim->velocity == v) - return; - - d->anim->velocity = v; - emit velocityChanged(); -} - -/*! - \qmlproperty int SmoothedFollow::maximumEasingTime - - This property specifies the maximum time, in msecs, an "eases" during the follow should take. - Setting this property causes the velocity to "level out" after at a time. Setting - a negative value reverts to the normal mode of easing over the entire animation - duration. - - The default value is -1. -*/ -int QDeclarativeSmoothedFollow::maximumEasingTime() const -{ - Q_D(const QDeclarativeSmoothedFollow); - return d->anim->maximumEasingTime; -} - -void QDeclarativeSmoothedFollow::setMaximumEasingTime(int v) -{ - Q_D(QDeclarativeSmoothedFollow); - d->anim->maximumEasingTime = v; - emit maximumEasingTimeChanged(); -} - -/*! - \qmlproperty real SmoothedFollow::to - This property holds the ending value. - If not set, then the value defined in the end state of the transition or Behavior. -*/ -qreal QDeclarativeSmoothedFollow::to() const -{ - Q_D(const QDeclarativeSmoothedFollow); - return d->anim->to; -} - -void QDeclarativeSmoothedFollow::setTo(qreal t) -{ - Q_D(QDeclarativeSmoothedFollow); - - if (qIsNaN(t)) - return; - - if (d->anim->to == t) - return; - - d->anim->to = t; - - if (d->enabled) - d->anim->restart(); -} - -/*! - \qmlproperty bool SmoothedFollow::enabled - This property whether this animation should automatically restart when - the 'to' property is upated. - - The default value of this property is 'true'. -*/ -bool QDeclarativeSmoothedFollow::enabled() const -{ - Q_D(const QDeclarativeSmoothedFollow); - return d->enabled; -} - -void QDeclarativeSmoothedFollow::setEnabled(bool e) -{ - Q_D(QDeclarativeSmoothedFollow); - if (d->enabled == e) - return; - d->enabled = e; - - if (d->enabled) - d->anim->restart(); - else - d->anim->stop(); - emit enabledChanged(); -} - -void QDeclarativeSmoothedFollow::setTarget(const QDeclarativeProperty &t) -{ - Q_D(QDeclarativeSmoothedFollow); - d->anim->target = t; -} - -QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativesmoothedfollow_p.h b/src/declarative/util/qdeclarativesmoothedfollow_p.h deleted file mode 100644 index f852311..0000000 --- a/src/declarative/util/qdeclarativesmoothedfollow_p.h +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVESMOOTHEDFOLLOW_H -#define QDECLARATIVESMOOTHEDFOLLOW_H - -#include <qdeclarative.h> -#include <qdeclarativepropertyvaluesource.h> - -#include <QtCore/qobject.h> - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Declarative) - -class QDeclarativeProperty; -class QDeclarativeSmoothedFollowPrivate; -class Q_AUTOTEST_EXPORT QDeclarativeSmoothedFollow : public QObject, - public QDeclarativePropertyValueSource -{ - Q_OBJECT - Q_DECLARE_PRIVATE(QDeclarativeSmoothedFollow) - Q_INTERFACES(QDeclarativePropertyValueSource) - Q_ENUMS(ReversingMode) - - Q_PROPERTY(qreal to READ to WRITE setTo NOTIFY toChanged) - Q_PROPERTY(qreal velocity READ velocity WRITE setVelocity NOTIFY velocityChanged) - Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged) - Q_PROPERTY(ReversingMode reversingMode READ reversingMode WRITE setReversingMode NOTIFY reversingModeChanged) - Q_PROPERTY(qreal maximumEasingTime READ maximumEasingTime WRITE setMaximumEasingTime NOTIFY maximumEasingTimeChanged) - Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) - -public: - enum ReversingMode { Eased, Immediate, Sync }; - - QDeclarativeSmoothedFollow(QObject *parent = 0); - ~QDeclarativeSmoothedFollow(); - - qreal to() const; - void setTo(qreal); - - ReversingMode reversingMode() const; - void setReversingMode(ReversingMode); - - int duration() const; - void setDuration(int); - - qreal velocity() const; - void setVelocity(qreal); - - int maximumEasingTime() const; - void setMaximumEasingTime(int); - - bool enabled() const; - void setEnabled(bool); - - virtual void setTarget(const QDeclarativeProperty &); - -Q_SIGNALS: - void velocityChanged(); - void durationChanged(); - void reversingModeChanged(); - void maximumEasingTimeChanged(); - void enabledChanged(); -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QDeclarativeSmoothedFollow) - -QT_END_HEADER - -#endif // QDECLARATIVESMOOTHEDFOLLOW_H diff --git a/src/declarative/util/qdeclarativespringfollow.cpp b/src/declarative/util/qdeclarativespringfollow.cpp deleted file mode 100644 index aae66ac..0000000 --- a/src/declarative/util/qdeclarativespringfollow.cpp +++ /dev/null @@ -1,464 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "private/qdeclarativespringfollow_p.h" - -#include "private/qdeclarativeanimation_p_p.h" - -#include <QtCore/qdebug.h> - -#include <private/qobject_p.h> - -#include <limits.h> -#include <math.h> - -QT_BEGIN_NAMESPACE - - - -class QDeclarativeSpringFollowPrivate : public QObjectPrivate -{ - Q_DECLARE_PUBLIC(QDeclarativeSpringFollow) -public: - QDeclarativeSpringFollowPrivate() - : currentValue(0), to(0), maxVelocity(0), lastTime(0) - , mass(1.0), spring(0.), damping(0.), velocity(0), epsilon(0.01) - , modulus(0.0), useMass(false), haveModulus(false), enabled(true), mode(Track), clock(this) {} - - QDeclarativeProperty property; - qreal currentValue; - qreal to; - qreal maxVelocity; - qreal velocityms; - int lastTime; - qreal mass; - qreal spring; - qreal damping; - qreal velocity; - qreal epsilon; - qreal modulus; - - bool useMass : 1; - bool haveModulus : 1; - bool enabled : 1; - - enum Mode { - Track, - Velocity, - Spring - }; - Mode mode; - - void tick(int); - void updateMode(); - void start(); - void stop(); - - QTickAnimationProxy<QDeclarativeSpringFollowPrivate, &QDeclarativeSpringFollowPrivate::tick> clock; -}; - -void QDeclarativeSpringFollowPrivate::tick(int time) -{ - Q_Q(QDeclarativeSpringFollow); - - int elapsed = time - lastTime; - if (!elapsed) - return; - qreal srcVal = to; - if (haveModulus) { - currentValue = fmod(currentValue, modulus); - srcVal = fmod(srcVal, modulus); - } - if (mode == Spring) { - if (elapsed < 16) // capped at 62fps. - return; - // Real men solve the spring DEs using RK4. - // We'll do something much simpler which gives a result that looks fine. - int count = elapsed / 16; - for (int i = 0; i < count; ++i) { - qreal diff = srcVal - currentValue; - if (haveModulus && qAbs(diff) > modulus / 2) { - if (diff < 0) - diff += modulus; - else - diff -= modulus; - } - if (useMass) - velocity = velocity + (spring * diff - damping * velocity) / mass; - else - velocity = velocity + spring * diff - damping * velocity; - if (maxVelocity > 0.) { - // limit velocity - if (velocity > maxVelocity) - velocity = maxVelocity; - else if (velocity < -maxVelocity) - velocity = -maxVelocity; - } - currentValue += velocity * 16.0 / 1000.0; - if (haveModulus) { - currentValue = fmod(currentValue, modulus); - if (currentValue < 0.0) - currentValue += modulus; - } - } - if (qAbs(velocity) < epsilon && qAbs(srcVal - currentValue) < epsilon) { - velocity = 0.0; - currentValue = srcVal; - clock.stop(); - } - lastTime = time - (elapsed - count * 16); - } else { - qreal moveBy = elapsed * velocityms; - qreal diff = srcVal - currentValue; - if (haveModulus && qAbs(diff) > modulus / 2) { - if (diff < 0) - diff += modulus; - else - diff -= modulus; - } - if (diff > 0) { - currentValue += moveBy; - if (haveModulus) - currentValue = fmod(currentValue, modulus); - if (currentValue > to) { - currentValue = to; - clock.stop(); - } - } else { - currentValue -= moveBy; - if (haveModulus && currentValue < 0.0) - currentValue = fmod(currentValue, modulus) + modulus; - if (currentValue < to) { - currentValue = to; - clock.stop(); - } - } - lastTime = time; - } - property.write(currentValue); - emit q->valueChanged(currentValue); - if (clock.state() != QAbstractAnimation::Running) - emit q->syncChanged(); -} - -void QDeclarativeSpringFollowPrivate::updateMode() -{ - if (spring == 0. && maxVelocity == 0.) - mode = Track; - else if (spring > 0.) - mode = Spring; - else - mode = Velocity; -} - -void QDeclarativeSpringFollowPrivate::start() -{ - if (!enabled) - return; - - Q_Q(QDeclarativeSpringFollow); - if (mode == QDeclarativeSpringFollowPrivate::Track) { - currentValue = to; - property.write(currentValue); - } else if (to != currentValue && clock.state() != QAbstractAnimation::Running) { - lastTime = 0; - currentValue = property.read().toReal(); - clock.start(); // infinity?? - emit q->syncChanged(); - } -} - -void QDeclarativeSpringFollowPrivate::stop() -{ - clock.stop(); -} - -/*! - \qmlclass SpringFollow QDeclarativeSpringFollow - \since 4.7 - \brief The SpringFollow element allows a property to track a value. - - In example below, \e rect2 will follow \e rect1 moving with a velocity of up to 200: - \code - Rectangle { - id: rect1 - width: 20; height: 20 - color: "#00ff00" - y: 200 // initial value - SequentialAnimation on y { - loops: Animation.Infinite - NumberAnimation { - to: 200 - easing.type: Easing.OutBounce - easing.amplitude: 100 - duration: 2000 - } - PauseAnimation { duration: 1000 } - } - } - Rectangle { - id: rect2 - x: rect1.width - width: 20; height: 20 - color: "#ff0000" - SpringFollow on y { to: rect1.y; velocity: 200 } - } - \endcode -*/ - -QDeclarativeSpringFollow::QDeclarativeSpringFollow(QObject *parent) -: QObject(*(new QDeclarativeSpringFollowPrivate),parent) -{ -} - -QDeclarativeSpringFollow::~QDeclarativeSpringFollow() -{ -} - -void QDeclarativeSpringFollow::setTarget(const QDeclarativeProperty &property) -{ - Q_D(QDeclarativeSpringFollow); - d->property = property; - d->currentValue = property.read().toReal(); -} - -qreal QDeclarativeSpringFollow::to() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->to; -} - -/*! - \qmlproperty real SpringFollow::to - This property holds the target value which will be tracked. - - Bind to a property in order to track its changes. -*/ - -void QDeclarativeSpringFollow::setTo(qreal value) -{ - Q_D(QDeclarativeSpringFollow); - if (d->clock.state() == QAbstractAnimation::Running && d->to == value) - return; - - d->to = value; - d->start(); -} - -/*! - \qmlproperty real SpringFollow::velocity - This property holds the maximum velocity allowed when tracking the source. -*/ - -qreal QDeclarativeSpringFollow::velocity() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->maxVelocity; -} - -void QDeclarativeSpringFollow::setVelocity(qreal velocity) -{ - Q_D(QDeclarativeSpringFollow); - d->maxVelocity = velocity; - d->velocityms = velocity / 1000.0; - d->updateMode(); -} - -/*! - \qmlproperty real SpringFollow::spring - This property holds the spring constant - - The spring constant describes how strongly the target is pulled towards the - source. Setting spring to 0 turns off spring tracking. Useful values 0 - 5.0 - - When a spring constant is set and the velocity property is greater than 0, - velocity limits the maximum speed. -*/ -qreal QDeclarativeSpringFollow::spring() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->spring; -} - -void QDeclarativeSpringFollow::setSpring(qreal spring) -{ - Q_D(QDeclarativeSpringFollow); - d->spring = spring; - d->updateMode(); -} - -/*! - \qmlproperty real SpringFollow::damping - This property holds the spring damping constant - - The damping constant describes how quickly a sprung follower comes to rest. - Useful range is 0 - 1.0 -*/ -qreal QDeclarativeSpringFollow::damping() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->damping; -} - -void QDeclarativeSpringFollow::setDamping(qreal damping) -{ - Q_D(QDeclarativeSpringFollow); - if (damping > 1.) - damping = 1.; - - d->damping = damping; -} - - -/*! - \qmlproperty real SpringFollow::epsilon - This property holds the spring epsilon - - The epsilon is the rate and amount of change in the value which is close enough - to 0 to be considered equal to zero. This will depend on the usage of the value. - For pixel positions, 0.25 would suffice. For scale, 0.005 will suffice. - - The default is 0.01. Tuning this value can provide small performance improvements. -*/ -qreal QDeclarativeSpringFollow::epsilon() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->epsilon; -} - -void QDeclarativeSpringFollow::setEpsilon(qreal epsilon) -{ - Q_D(QDeclarativeSpringFollow); - d->epsilon = epsilon; -} - -/*! - \qmlproperty real SpringFollow::modulus - This property holds the modulus value. - - Setting a \a modulus forces the target value to "wrap around" at the modulus. - For example, setting the modulus to 360 will cause a value of 370 to wrap around to 10. -*/ -qreal QDeclarativeSpringFollow::modulus() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->modulus; -} - -void QDeclarativeSpringFollow::setModulus(qreal modulus) -{ - Q_D(QDeclarativeSpringFollow); - if (d->modulus != modulus) { - d->haveModulus = modulus != 0.0; - d->modulus = modulus; - emit modulusChanged(); - } -} - -/*! - \qmlproperty real SpringFollow::mass - This property holds the "mass" of the property being moved. - - mass is 1.0 by default. Setting a different mass changes the dynamics of - a \l spring follow. -*/ -qreal QDeclarativeSpringFollow::mass() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->mass; -} - -void QDeclarativeSpringFollow::setMass(qreal mass) -{ - Q_D(QDeclarativeSpringFollow); - if (d->mass != mass && mass > 0.0) { - d->useMass = mass != 1.0; - d->mass = mass; - emit massChanged(); - } -} - -/*! - \qmlproperty bool SpringFollow::enabled - This property holds whether the target will track the source. - - The default value of this property is 'true'. -*/ -bool QDeclarativeSpringFollow::enabled() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->enabled; -} - -void QDeclarativeSpringFollow::setEnabled(bool enabled) -{ - Q_D(QDeclarativeSpringFollow); - d->enabled = enabled; - if (enabled) - d->start(); - else - d->stop(); -} - -/*! - \qmlproperty bool SpringFollow::inSync - This property is true when target is equal to the source; otherwise - false. If inSync is true the target is not being animated. - - If \l enabled is false then inSync will also be false. -*/ -bool QDeclarativeSpringFollow::inSync() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->enabled && d->clock.state() != QAbstractAnimation::Running; -} - -/*! - \qmlproperty real SpringFollow::value - The current value. -*/ -qreal QDeclarativeSpringFollow::value() const -{ - Q_D(const QDeclarativeSpringFollow); - return d->currentValue; -} - -QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativespringfollow_p.h b/src/declarative/util/qdeclarativespringfollow_p.h deleted file mode 100644 index b6277c3..0000000 --- a/src/declarative/util/qdeclarativespringfollow_p.h +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDECLARATIVESMOOTHFOLLOW_H -#define QDECLARATIVESMOOTHFOLLOW_H - -#include <qdeclarativepropertyvaluesource.h> -#include <qdeclarative.h> - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Declarative) - -class QDeclarativeSpringFollowPrivate; -class Q_AUTOTEST_EXPORT QDeclarativeSpringFollow : public QObject, - public QDeclarativePropertyValueSource -{ - Q_OBJECT - Q_DECLARE_PRIVATE(QDeclarativeSpringFollow) - Q_INTERFACES(QDeclarativePropertyValueSource) - - Q_PROPERTY(qreal to READ to WRITE setTo) - Q_PROPERTY(qreal velocity READ velocity WRITE setVelocity) - Q_PROPERTY(qreal spring READ spring WRITE setSpring) - Q_PROPERTY(qreal damping READ damping WRITE setDamping) - Q_PROPERTY(qreal epsilon READ epsilon WRITE setEpsilon) - Q_PROPERTY(bool enabled READ enabled WRITE setEnabled) - Q_PROPERTY(qreal value READ value NOTIFY valueChanged) - Q_PROPERTY(qreal modulus READ modulus WRITE setModulus NOTIFY modulusChanged) - Q_PROPERTY(qreal mass READ mass WRITE setMass NOTIFY massChanged) - Q_PROPERTY(bool inSync READ inSync NOTIFY syncChanged) - -public: - QDeclarativeSpringFollow(QObject *parent=0); - ~QDeclarativeSpringFollow(); - - virtual void setTarget(const QDeclarativeProperty &); - - qreal to() const; - void setTo(qreal value); - - qreal velocity() const; - void setVelocity(qreal velocity); - - qreal spring() const; - void setSpring(qreal spring); - - qreal damping() const; - void setDamping(qreal damping); - - qreal epsilon() const; - void setEpsilon(qreal epsilon); - - qreal mass() const; - void setMass(qreal modulus); - - qreal modulus() const; - void setModulus(qreal modulus); - - bool enabled() const; - void setEnabled(bool enabled); - - bool inSync() const; - - qreal value() const; - -Q_SIGNALS: - void valueChanged(qreal); - void modulusChanged(); - void massChanged(); - void syncChanged(); -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QDeclarativeSpringFollow) - -QT_END_HEADER - -#endif // QDECLARATIVESMOOTHFOLLOW_H diff --git a/src/declarative/util/qdeclarativeutilmodule.cpp b/src/declarative/util/qdeclarativeutilmodule.cpp index 74fdac6..c5bfebd 100644 --- a/src/declarative/util/qdeclarativeutilmodule.cpp +++ b/src/declarative/util/qdeclarativeutilmodule.cpp @@ -46,7 +46,6 @@ #include "private/qdeclarativebind_p.h" #include "private/qdeclarativeconnections_p.h" #include "private/qdeclarativesmoothedanimation_p.h" -#include "private/qdeclarativesmoothedfollow_p.h" #include "private/qdeclarativefontloader_p.h" #include "private/qdeclarativelistaccessor_p.h" #include "private/qdeclarativelistmodel_p.h" @@ -56,7 +55,6 @@ #include "private/qdeclarativepixmapcache_p.h" #include "private/qdeclarativepropertychanges_p.h" #include "qdeclarativepropertymap.h" -#include "private/qdeclarativespringfollow_p.h" #include "private/qdeclarativespringanimation_p.h" #include "private/qdeclarativestategroup_p.h" #include "private/qdeclarativestateoperations_p.h" @@ -84,7 +82,6 @@ void QDeclarativeUtilModule::defineModule() qmlRegisterType<QDeclarativeColorAnimation>("Qt",4,7,"ColorAnimation"); qmlRegisterType<QDeclarativeConnections>("Qt",4,7,"Connections"); qmlRegisterType<QDeclarativeSmoothedAnimation>("Qt",4,7,"SmoothedAnimation"); - qmlRegisterType<QDeclarativeSmoothedFollow>("Qt",4,7,"SmoothedFollow"); qmlRegisterType<QDeclarativeFontLoader>("Qt",4,7,"FontLoader"); qmlRegisterType<QDeclarativeListElement>("Qt",4,7,"ListElement"); qmlRegisterType<QDeclarativeNumberAnimation>("Qt",4,7,"NumberAnimation"); @@ -98,7 +95,6 @@ void QDeclarativeUtilModule::defineModule() qmlRegisterType<QDeclarativeRotationAnimation>("Qt",4,7,"RotationAnimation"); qmlRegisterType<QDeclarativeScriptAction>("Qt",4,7,"ScriptAction"); qmlRegisterType<QDeclarativeSequentialAnimation>("Qt",4,7,"SequentialAnimation"); - qmlRegisterType<QDeclarativeSpringFollow>("Qt",4,7,"SpringFollow"); qmlRegisterType<QDeclarativeSpringAnimation>("Qt",4,7,"SpringAnimation"); qmlRegisterType<QDeclarativeStateChangeScript>("Qt",4,7,"StateChangeScript"); qmlRegisterType<QDeclarativeStateGroup>("Qt",4,7,"StateGroup"); diff --git a/src/declarative/util/util.pri b/src/declarative/util/util.pri index 0cbcbd7..fd57144 100644 --- a/src/declarative/util/util.pri +++ b/src/declarative/util/util.pri @@ -7,10 +7,8 @@ SOURCES += \ $$PWD/qdeclarativepackage.cpp \ $$PWD/qdeclarativeanimation.cpp \ $$PWD/qdeclarativesystempalette.cpp \ - $$PWD/qdeclarativespringfollow.cpp \ $$PWD/qdeclarativespringanimation.cpp \ $$PWD/qdeclarativesmoothedanimation.cpp \ - $$PWD/qdeclarativesmoothedfollow.cpp \ $$PWD/qdeclarativestate.cpp\ $$PWD/qdeclarativetransitionmanager.cpp \ $$PWD/qdeclarativestateoperations.cpp \ @@ -39,10 +37,8 @@ HEADERS += \ $$PWD/qdeclarativeanimation_p.h \ $$PWD/qdeclarativeanimation_p_p.h \ $$PWD/qdeclarativesystempalette_p.h \ - $$PWD/qdeclarativespringfollow_p.h \ $$PWD/qdeclarativespringanimation_p.h \ $$PWD/qdeclarativesmoothedanimation_p.h \ - $$PWD/qdeclarativesmoothedfollow_p.h \ $$PWD/qdeclarativesmoothedanimation_p_p.h \ $$PWD/qdeclarativestate_p.h\ $$PWD/qdeclarativestateoperations_p.h \ diff --git a/tests/auto/declarative/qdeclarativespringanimation/data/springanimation1.qml b/tests/auto/declarative/qdeclarativespringanimation/data/springanimation1.qml new file mode 100644 index 0000000..07587bd --- /dev/null +++ b/tests/auto/declarative/qdeclarativespringanimation/data/springanimation1.qml @@ -0,0 +1,4 @@ +import Qt 4.7 + +SpringAnimation { +} diff --git a/tests/auto/declarative/qdeclarativespringanimation/data/springanimation2.qml b/tests/auto/declarative/qdeclarativespringanimation/data/springanimation2.qml new file mode 100644 index 0000000..562f44a --- /dev/null +++ b/tests/auto/declarative/qdeclarativespringanimation/data/springanimation2.qml @@ -0,0 +1,9 @@ +import Qt 4.7 + +SpringAnimation { + to: 1.44; velocity: 0.9 + spring: 1.0; damping: 0.5 + epsilon: 0.25; modulus: 360.0 + mass: 2.0; + running: true; +} diff --git a/tests/auto/declarative/qdeclarativespringanimation/data/springanimation3.qml b/tests/auto/declarative/qdeclarativespringanimation/data/springanimation3.qml new file mode 100644 index 0000000..9f70bf4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativespringanimation/data/springanimation3.qml @@ -0,0 +1,8 @@ +import Qt 4.7 + +SpringAnimation { + to: 1.44; velocity: 0.9 + spring: 1.0; damping: 0.5 + epsilon: 0.25; modulus: 360.0 + mass: 2.0; running: false +} diff --git a/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro new file mode 100644 index 0000000..213b262 --- /dev/null +++ b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro @@ -0,0 +1,16 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qdeclarativespringanimation.cpp + +symbian: { + importFiles.sources = data + importFiles.path = . + DEPLOYMENT = importFiles +} else { + DEFINES += SRCDIR=\\\"$$PWD\\\" +} + +CONFIG += parallel_test + diff --git a/tests/auto/declarative/qdeclarativespringanimation/tst_qdeclarativespringanimation.cpp b/tests/auto/declarative/qdeclarativespringanimation/tst_qdeclarativespringanimation.cpp new file mode 100644 index 0000000..4b17a47 --- /dev/null +++ b/tests/auto/declarative/qdeclarativespringanimation/tst_qdeclarativespringanimation.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <qtest.h> +#include <QtDeclarative/qdeclarativeengine.h> +#include <QtDeclarative/qdeclarativecomponent.h> +#include <private/qdeclarativespringanimation_p.h> +#include <private/qdeclarativevaluetype_p.h> +#include "../../../shared/util.h" + +#ifdef Q_OS_SYMBIAN +// In Symbian OS test data is located in applications private dir +#define SRCDIR "." +#endif + +class tst_qdeclarativespringanimation : public QObject +{ + Q_OBJECT +public: + tst_qdeclarativespringanimation(); + +private slots: + void defaultValues(); + void values(); + void disabled(); + +private: + QDeclarativeEngine engine; +}; + +tst_qdeclarativespringanimation::tst_qdeclarativespringanimation() +{ +} + +void tst_qdeclarativespringanimation::defaultValues() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springanimation1.qml")); + QDeclarativeSpringAnimation *obj = qobject_cast<QDeclarativeSpringAnimation*>(c.create()); + + QVERIFY(obj != 0); + + QCOMPARE(obj->to(), 0.); + QCOMPARE(obj->velocity(), 0.); + QCOMPARE(obj->spring(), 0.); + QCOMPARE(obj->damping(), 0.); + QCOMPARE(obj->epsilon(), 0.01); + QCOMPARE(obj->modulus(), 0.); + QCOMPARE(obj->mass(), 1.); + QCOMPARE(obj->isRunning(), false); + + delete obj; +} + +void tst_qdeclarativespringanimation::values() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springanimation2.qml")); + QDeclarativeSpringAnimation *obj = qobject_cast<QDeclarativeSpringAnimation*>(c.create()); + + QVERIFY(obj != 0); + + QCOMPARE(obj->to(), 1.44); + QCOMPARE(obj->velocity(), 0.9); + QCOMPARE(obj->spring(), 1.0); + QCOMPARE(obj->damping(), 0.5); + QCOMPARE(obj->epsilon(), 0.25); + QCOMPARE(obj->modulus(), 360.0); + QCOMPARE(obj->mass(), 2.0); + QCOMPARE(obj->isRunning(), true); + + QTRY_COMPARE(obj->isRunning(), false); + + delete obj; +} + +void tst_qdeclarativespringanimation::disabled() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springanimation3.qml")); + QDeclarativeSpringAnimation *obj = qobject_cast<QDeclarativeSpringAnimation*>(c.create()); + + QVERIFY(obj != 0); + + QCOMPARE(obj->to(), 1.44); + QCOMPARE(obj->velocity(), 0.9); + QCOMPARE(obj->spring(), 1.0); + QCOMPARE(obj->damping(), 0.5); + QCOMPARE(obj->epsilon(), 0.25); + QCOMPARE(obj->modulus(), 360.0); + QCOMPARE(obj->mass(), 2.0); + QCOMPARE(obj->isRunning(), false); + + delete obj; +} + +QTEST_MAIN(tst_qdeclarativespringanimation) + +#include "tst_qdeclarativespringanimation.moc" diff --git a/tests/auto/declarative/qdeclarativespringfollow/data/springfollow1.qml b/tests/auto/declarative/qdeclarativespringfollow/data/springfollow1.qml deleted file mode 100644 index 8528cfa..0000000 --- a/tests/auto/declarative/qdeclarativespringfollow/data/springfollow1.qml +++ /dev/null @@ -1,4 +0,0 @@ -import Qt 4.7 - -SpringFollow { -} diff --git a/tests/auto/declarative/qdeclarativespringfollow/data/springfollow2.qml b/tests/auto/declarative/qdeclarativespringfollow/data/springfollow2.qml deleted file mode 100644 index 31a740a..0000000 --- a/tests/auto/declarative/qdeclarativespringfollow/data/springfollow2.qml +++ /dev/null @@ -1,8 +0,0 @@ -import Qt 4.7 - -SpringFollow { - to: 1.44; velocity: 0.9 - spring: 1.0; damping: 0.5 - epsilon: 0.25; modulus: 360.0 - mass: 2.0; enabled: true -} diff --git a/tests/auto/declarative/qdeclarativespringfollow/data/springfollow3.qml b/tests/auto/declarative/qdeclarativespringfollow/data/springfollow3.qml deleted file mode 100644 index 0fa4aa9..0000000 --- a/tests/auto/declarative/qdeclarativespringfollow/data/springfollow3.qml +++ /dev/null @@ -1,8 +0,0 @@ -import Qt 4.7 - -SpringFollow { - to: 1.44; velocity: 0.9 - spring: 1.0; damping: 0.5 - epsilon: 0.25; modulus: 360.0 - mass: 2.0; enabled: false -} diff --git a/tests/auto/declarative/qdeclarativespringfollow/qdeclarativespringfollow.pro b/tests/auto/declarative/qdeclarativespringfollow/qdeclarativespringfollow.pro deleted file mode 100644 index 1c17ba0..0000000 --- a/tests/auto/declarative/qdeclarativespringfollow/qdeclarativespringfollow.pro +++ /dev/null @@ -1,16 +0,0 @@ -load(qttest_p4) -contains(QT_CONFIG,declarative): QT += declarative gui -macx:CONFIG -= app_bundle - -SOURCES += tst_qdeclarativespringfollow.cpp - -symbian: { - importFiles.sources = data - importFiles.path = . - DEPLOYMENT = importFiles -} else { - DEFINES += SRCDIR=\\\"$$PWD\\\" -} - -CONFIG += parallel_test - diff --git a/tests/auto/declarative/qdeclarativespringfollow/tst_qdeclarativespringfollow.cpp b/tests/auto/declarative/qdeclarativespringfollow/tst_qdeclarativespringfollow.cpp deleted file mode 100644 index e0e2892..0000000 --- a/tests/auto/declarative/qdeclarativespringfollow/tst_qdeclarativespringfollow.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include <qtest.h> -#include <QtDeclarative/qdeclarativeengine.h> -#include <QtDeclarative/qdeclarativecomponent.h> -#include <private/qdeclarativespringfollow_p.h> -#include <private/qdeclarativevaluetype_p.h> -#include "../../../shared/util.h" - -#ifdef Q_OS_SYMBIAN -// In Symbian OS test data is located in applications private dir -#define SRCDIR "." -#endif - -class tst_qdeclarativespringfollow : public QObject -{ - Q_OBJECT -public: - tst_qdeclarativespringfollow(); - -private slots: - void defaultValues(); - void values(); - void disabled(); - -private: - QDeclarativeEngine engine; -}; - -tst_qdeclarativespringfollow::tst_qdeclarativespringfollow() -{ -} - -void tst_qdeclarativespringfollow::defaultValues() -{ - QDeclarativeEngine engine; - QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springfollow1.qml")); - QDeclarativeSpringFollow *obj = qobject_cast<QDeclarativeSpringFollow*>(c.create()); - - QVERIFY(obj != 0); - - QCOMPARE(obj->to(), 0.); - QCOMPARE(obj->velocity(), 0.); - QCOMPARE(obj->spring(), 0.); - QCOMPARE(obj->damping(), 0.); - QCOMPARE(obj->epsilon(), 0.01); - QCOMPARE(obj->modulus(), 0.); - QCOMPARE(obj->value(), 0.); - QCOMPARE(obj->mass(), 1.); - QCOMPARE(obj->enabled(), true); - QCOMPARE(obj->inSync(), true); - - delete obj; -} - -void tst_qdeclarativespringfollow::values() -{ - QDeclarativeEngine engine; - QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springfollow2.qml")); - QDeclarativeSpringFollow *obj = qobject_cast<QDeclarativeSpringFollow*>(c.create()); - - QVERIFY(obj != 0); - - QCOMPARE(obj->to(), 1.44); - QCOMPARE(obj->velocity(), 0.9); - QCOMPARE(obj->spring(), 1.0); - QCOMPARE(obj->damping(), 0.5); - QCOMPARE(obj->epsilon(), 0.25); - QCOMPARE(obj->modulus(), 360.0); - QCOMPARE(obj->mass(), 2.0); - QCOMPARE(obj->enabled(), true); - - QTRY_COMPARE(obj->value(), 1.44); - QTRY_COMPARE(obj->inSync(), true); - - delete obj; -} - -void tst_qdeclarativespringfollow::disabled() -{ - QDeclarativeEngine engine; - QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/springfollow3.qml")); - QDeclarativeSpringFollow *obj = qobject_cast<QDeclarativeSpringFollow*>(c.create()); - - QVERIFY(obj != 0); - - QCOMPARE(obj->to(), 1.44); - QCOMPARE(obj->velocity(), 0.9); - QCOMPARE(obj->spring(), 1.0); - QCOMPARE(obj->damping(), 0.5); - QCOMPARE(obj->epsilon(), 0.25); - QCOMPARE(obj->modulus(), 360.0); - QCOMPARE(obj->mass(), 2.0); - QCOMPARE(obj->enabled(), false); - - QCOMPARE(obj->value(), 0.0); - QCOMPARE(obj->inSync(), false); - - delete obj; -} - -QTEST_MAIN(tst_qdeclarativespringfollow) - -#include "tst_qdeclarativespringfollow.moc" -- cgit v0.12 From 6f0d46bbd3203fb1378234e37307800566588aca Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Mon, 19 Jul 2010 13:07:07 +1000 Subject: Fix Samegame Change to Behavior from Follow means that some of the previous assumptions are now incorrect. Script logic has been fixed. Task-number: QTBUG-12246 (cherry picked from commit 9e4fb690b864f8d0c05d70687a3498b9eb9b2ed5) --- demos/declarative/samegame/SamegameCore/samegame.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js index 6e1b24d..aa1b359 100755 --- a/demos/declarative/samegame/SamegameCore/samegame.js +++ b/demos/declarative/samegame/SamegameCore/samegame.js @@ -110,7 +110,7 @@ function shuffleDown() }else{ if(fallDist > 0){ var obj = board[index(column,row)]; - obj.y += fallDist * gameCanvas.blockSize; + obj.y = (row+fallDist) * gameCanvas.blockSize; board[index(column,row+fallDist)] = obj; board[index(column,row)] = null; } @@ -128,7 +128,7 @@ function shuffleDown() obj = board[index(column,row)]; if(obj == null) continue; - obj.x -= fallDist * gameCanvas.blockSize; + obj.x = (column-fallDist) * gameCanvas.blockSize; board[index(column-fallDist,row)] = obj; board[index(column,row)] = null; } -- cgit v0.12 From 1773ebf6adccabe69280b7fbd3feb856ce2d779c Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 19 Jul 2010 11:29:35 +1000 Subject: Always place PathView delegates centered on the path The scale of the delegate was used to offset the item. This was a bad way of making the item appear to be positioned correctly when the default transform origin was the top-left. Now that transform origin is center, it is obvious that it was a bad idea. Task-number: QTBUG-12245 Reviewed-by: Michael Brasser (cherry picked from commit 5572ec653fe735c4f413195c1ef34382aa8c6105) --- tests/auto/declarative/qdeclarativepathview/data/pathview0.qml | 2 ++ .../declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml index 8956205..ff6f224 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml @@ -6,6 +6,7 @@ Rectangle { property int currentB: -1 property real delegateWidth: 60 property real delegateHeight: 20 + property real delegateScale: 1.0 width: 240 height: 320 color: "#ffffff" @@ -17,6 +18,7 @@ Rectangle { objectName: "wrapper" height: root.delegateHeight width: root.delegateWidth + scale: root.delegateScale color: PathView.isCurrentItem ? "lightsteelblue" : "white" border.color: "black" Text { diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp index bf1e13a..fdbb16d 100644 --- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp +++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp @@ -451,11 +451,19 @@ void tst_QDeclarativePathView::pathMoved() QCOMPARE(firstItem->pos() + offset, start); // Change delegate size + pathview->setOffset(0.1); + pathview->setOffset(0.0); canvas->rootObject()->setProperty("delegateWidth", 30); QCOMPARE(firstItem->width(), 30.0); offset.setX(firstItem->width()/2); QTRY_COMPARE(firstItem->pos() + offset, start); + // Change delegate scale + pathview->setOffset(0.1); + pathview->setOffset(0.0); + canvas->rootObject()->setProperty("delegateScale", 1.2); + QTRY_COMPARE(firstItem->pos() + offset, start); + delete canvas; } -- cgit v0.12 From bb28f2217bae0a1e5f7645993a4a2540195eaeb6 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 19 Jul 2010 11:47:16 +1000 Subject: Missed the actual change in 5572ec653fe735c4f413195c1ef34382aa8c6105 Always place PathView delegates centered on the path The scale of the delegate was used to offset the item. This was a bad way of making the item appear to be positioned correctly when the default transform origin was the top-left. Now that transform origin is center, it is obvious that it was a bad idea. Task-number: QTBUG-12245 Reviewed-by: Michael Brasser (cherry picked from commit 19473443dbeff4a57cd6ec6572ca29c2e70d672c) --- src/declarative/graphicsitems/qdeclarativepathview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 0e980b3..b23a3c3 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -284,8 +284,8 @@ void QDeclarativePathViewPrivate::updateItem(QDeclarativeItem *item, qreal perce att->setValue(attr.toUtf8(), path->attributeAt(attr, percent)); } QPointF pf = path->pointAt(percent); - item->setX(qRound(pf.x() - item->width()*item->scale()/2)); - item->setY(qRound(pf.y() - item->height()*item->scale()/2)); + item->setX(qRound(pf.x() - item->width()/2)); + item->setY(qRound(pf.y() - item->height()/2)); } void QDeclarativePathViewPrivate::regenerate() -- cgit v0.12 From 7a748e9bb8ffc0e41eb38bebfa80cf9b6111169d Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 19 Jul 2010 15:30:06 +1000 Subject: Fix ListView sections with QList<QObject*> QDeclarativeVisualDataModel::stringValue() did not handle QList<QObject*> model types. Task-number: QTBUG-12005 (cherry picked from commit b6251d31652232a6ac3a5dff54ad4229542089b1) --- src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 +- src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp | 5 +++++ .../auto/declarative/qdeclarativevisualdatamodel/data/objectlist.qml | 3 +++ .../qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp | 3 +++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 110c970..6d127b5 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -577,7 +577,7 @@ FxListItem *QDeclarativeListViewPrivate::createItem(int modelIndex) listItem->attached->m_prevSection = sectionAt(modelIndex-1); if (FxListItem *item = visibleItem(modelIndex+1)) listItem->attached->m_nextSection = item->attached->section(); - else + else if (modelIndex < model->count()-1) listItem->attached->m_nextSection = sectionAt(modelIndex+1); } } diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 786d6f9..cfa1c6d 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -1089,6 +1089,11 @@ QString QDeclarativeVisualDataModel::stringValue(int index, const QString &name) if (d->m_visualItemModel) return d->m_visualItemModel->stringValue(index, name); + if ((!d->m_listModelInterface || !d->m_abstractItemModel) && d->m_listAccessor) { + if (QObject *object = d->m_listAccessor->at(index).value<QObject*>()) + return object->property(name.toUtf8()).toString(); + } + if ((!d->m_listModelInterface && !d->m_abstractItemModel) || !d->m_delegate) return QString(); diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/objectlist.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/objectlist.qml index f5198c9..d030222 100644 --- a/tests/auto/declarative/qdeclarativevisualdatamodel/data/objectlist.qml +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/objectlist.qml @@ -11,6 +11,9 @@ ListView { width: 100 color: model.modelData.color Text { objectName: "name"; text: name } + Text { objectName: "section"; text: parent.ListView.section } } } + section.property: "name" + section.criteria: ViewSection.FullString } diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp index 43d4d06..e0f32ea 100644 --- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp @@ -179,6 +179,9 @@ void tst_qdeclarativevisualdatamodel::objectListModel() QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "name", 0); QCOMPARE(name->text(), QString("Item 1")); + QDeclarativeText *section = findItem<QDeclarativeText>(contentItem, "section", 0); + QCOMPARE(section->text(), QString("Item 1")); + dataList[0]->setProperty("name", QLatin1String("Changed")); QCOMPARE(name->text(), QString("Changed")); } -- cgit v0.12 From f8eac1282a92c33acae21a54c0c097d487035d31 Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Mon, 19 Jul 2010 15:16:40 +1000 Subject: Add label to explain how to exit QML demos Some people didn't figure it out intuitively, so extra help is now provided. Task-number: QTBUG-11868 (cherry picked from commit 8668f245b69da455ac7fe1d0a599226c1d6b9580) --- demos/qtdemo/qmlShell.qml | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/demos/qtdemo/qmlShell.qml b/demos/qtdemo/qmlShell.qml index e15d33c..e9d8d56 100644 --- a/demos/qtdemo/qmlShell.qml +++ b/demos/qtdemo/qmlShell.qml @@ -52,6 +52,7 @@ Item { //below properties are sometimes set from C++ property url qmlFile: '' property bool show: false + /* Image{ id: bg opacity: 0 @@ -60,6 +61,7 @@ Item { pixmap: bgAppPixmap effect: Blur { id: blurEffect; enabled: useBlur; blurRadius: 8;} } + */ Item{ id:embeddedViewer width: parent.width @@ -136,6 +138,32 @@ Item { onLinkActivated: Qt.openUrlExternally(link); } } + Rectangle{ + id: helpLabel + property bool timedOut: false + z: 9 + //Positioned in the top left corner + x: 8 + y: 8 + color: "white" + border.color: "black" + border.width: 1 + width: helpText.width + 16 + height: helpText.height + 8 + Text{ + id: helpText + color: "black" + anchors.centerIn: parent + text: "Click outside the example to exit it." + } + opacity: 0 + Behavior on opacity{ NumberAnimation{duration:500} } + Timer{ + id: helpTimer + interval: 5000 + onTriggered: {helpLabel.timedOut=true} + } + } Rectangle{ id: blackout //Maybe use a colorize effect instead? z: 8 anchors.fill: parent @@ -160,8 +188,8 @@ Item { opacity: 1 } PropertyChanges { - target: bg - opacity: 1 + target: helpLabel + opacity: helpLabel.timedOut?0:1 } PropertyChanges { target: blackout @@ -171,9 +199,9 @@ Item { ] transitions: [//Should not be too long, because the component has already started running Transition { from: ''; to: "show"; reversible: true - SequentialAnimation{ - PropertyAction { target: bg; property: useBlur?"y":"opacity";}//fade in blurred background only if blurred - NumberAnimation{ properties: "opacity"; easing.type: Easing.InQuad; duration: 500} + ParallelAnimation{ + ScriptAction{ script: {helpLabel.timedOut = false; helpTimer.restart();} } + NumberAnimation{ exclude: helpLabel; properties: "opacity"; easing.type: Easing.InQuad; duration: 500} PropertyAction { target: loader; property: "focus"; value: true}//Might be needed to ensure the focus stays with us } } -- cgit v0.12 From 2694769692659f1de0346ccc53dacae843d8ffeb Mon Sep 17 00:00:00 2001 From: Alan Alpert <alan.alpert@nokia.com> Date: Mon, 19 Jul 2010 15:26:37 +1000 Subject: Remove the -use-blur option from qtdemo It relied on the now missing pixmap property. Since it isn't used, it doesn't seem worth the effort to update it to use a declarative image provider instead. (cherry picked from commit 75131b7a1bfeeb033ea5b8bf62d50cc3d82d757e) --- demos/qtdemo/colors.cpp | 6 +----- demos/qtdemo/colors.h | 1 - demos/qtdemo/mainwindow.cpp | 8 -------- demos/qtdemo/menumanager.cpp | 20 -------------------- demos/qtdemo/qmlShell.qml | 22 ---------------------- 5 files changed, 1 insertion(+), 56 deletions(-) diff --git a/demos/qtdemo/colors.cpp b/demos/qtdemo/colors.cpp index b352e3d..802d77d 100644 --- a/demos/qtdemo/colors.cpp +++ b/demos/qtdemo/colors.cpp @@ -81,7 +81,6 @@ bool Colors::noRescale = false; bool Colors::noAnimations = false; bool Colors::noBlending = false; bool Colors::noScreenSync = false; -bool Colors::noBlur = true; bool Colors::fullscreen = false; bool Colors::usePixmaps = false; bool Colors::useLoop = false; @@ -233,8 +232,6 @@ void Colors::parseArgs(int argc, char *argv[]) Colors::showFps = true; else if (s == "-no-blending") Colors::noBlending = true; - else if (s == "-use-blur") - Colors::noBlur = false; else if (s == "-no-sync") Colors::noScreenSync = true; else if (s.startsWith("-menu")) @@ -270,7 +267,7 @@ void Colors::parseArgs(int argc, char *argv[]) else if (s.startsWith("-h") || s.startsWith("-help")){ QMessageBox::warning(0, "Arguments", QString("Usage: qtdemo [-verbose] [-no-adapt] [-opengl] [-software] [-fullscreen] [-ticker[0|1]] ") - + "[-animations[0|1]] [-no-blending] [-use-blur] [-no-sync] [-use-timer-update[0|1]] [-pause[0|1]] " + + "[-animations[0|1]] [-no-blending] [-no-sync] [-use-timer-update[0|1]] [-pause[0|1]] " + "[-use-window-mask] [-no-rescale] " + "[-use-pixmaps] [-show-fps] [-show-br] [-8bit[0|1]] [-menu<int>] [-use-loop] [-use-balls] " + "[-animation-speed<float>] [-fps<int>] " @@ -298,7 +295,6 @@ void Colors::setLowSettings() Colors::usePixmaps = true; Colors::noAnimations = true; Colors::noBlending = true; - Colors::noBlur = true; } void Colors::detectSystemResources() diff --git a/demos/qtdemo/colors.h b/demos/qtdemo/colors.h index 2d58058..1e0b795 100644 --- a/demos/qtdemo/colors.h +++ b/demos/qtdemo/colors.h @@ -91,7 +91,6 @@ public: static bool noAnimations; static bool noBlending; static bool noScreenSync; - static bool noBlur; static bool useLoop; static bool noWindowMask; static bool usePixmaps; diff --git a/demos/qtdemo/mainwindow.cpp b/demos/qtdemo/mainwindow.cpp index 753014a..16c5bf3 100644 --- a/demos/qtdemo/mainwindow.cpp +++ b/demos/qtdemo/mainwindow.cpp @@ -310,14 +310,6 @@ void MainWindow::checkAdapt() qDebug() << "- benchmark adaption: removed ticker (fps < 30)"; } - //Note: Because we don't adapt later in the program, if blur makes FPS plummet then we won't catch it - if (!Colors::noBlur && MenuManager::instance()->declarativeEngine && this->mainSceneRoot){ - Colors::noBlur = true; - MenuManager::instance()->declarativeEngine->rootContext()->setContextProperty("useBlur", false); - if (Colors::verbose) - qDebug() << "- benchmark adaption: removed blur (fps < 30)"; - } - if (this->fpsMedian < 20){ Colors::noAnimations = true; if (Colors::verbose) diff --git a/demos/qtdemo/menumanager.cpp b/demos/qtdemo/menumanager.cpp index 15561ab..7168b57 100644 --- a/demos/qtdemo/menumanager.cpp +++ b/demos/qtdemo/menumanager.cpp @@ -378,17 +378,6 @@ void MenuManager::launchQmlExample(const QString &name) return; } } - if(!Colors::noBlur){ - QImage qmlBgImage(this->window->rect().size(), QImage::Format_ARGB32_Premultiplied); - QPainter painter(&qmlBgImage); - if(Colors::showFps) - this->window->fpsLabel->setOpacity(0); - this->window->render(&painter); - if(Colors::showFps) - this->window->fpsLabel->setOpacity(1.0); - Qt::ImageConversionFlags convFlags = Qt::AvoidDither | Qt::NoOpaqueDetection; - this->declarativeEngine->rootContext()->setContextProperty("bgAppPixmap", QVariant(QPixmap::fromImage(qmlBgImage, convFlags))); - } qmlRoot->setProperty("qmlFile", QVariant(""));//unload component qmlRoot->setProperty("show", QVariant(true)); @@ -439,17 +428,8 @@ void MenuManager::init(MainWindow *window) } // Create QML Loader - qmlRegisterType<QGraphicsBlurEffect>("Effects", 1, 0, "Blur"); - qmlRegisterType<QGraphicsDropShadowEffect>("Effects", 1, 0, "DropShadow"); declarativeEngine = new QDeclarativeEngine(this); - // Note that we paint the background into a static image for a theorized performance improvement when blurring - // It has not yet been determined what, if any, speed up this gives (but is left in 'cause the QML expects it now) - declarativeEngine->rootContext()->setContextProperty("useBlur", !Colors::noBlur); - QImage qmlBgImage(this->window->rect().size(), QImage::Format_ARGB32_Premultiplied); - qmlBgImage.fill(0); - this->declarativeEngine->rootContext()->setContextProperty("bgAppPixmap", QVariant(QPixmap::fromImage(qmlBgImage))); - QDeclarativeComponent component(declarativeEngine, QUrl("qrc:qml/qmlShell.qml"), this); qmlRoot = 0; if(component.isReady()) diff --git a/demos/qtdemo/qmlShell.qml b/demos/qtdemo/qmlShell.qml index e9d8d56..b5fdf39 100644 --- a/demos/qtdemo/qmlShell.qml +++ b/demos/qtdemo/qmlShell.qml @@ -40,28 +40,13 @@ ****************************************************************************/ import Qt 4.7 -import Effects 1.0 -/* Vars exposed from C++ - pixmap bgAppPixmap - bool useBlur (to turn on, pass -use-blur on the cmd line. Off by default 'cause it's too slow) -*/ Item { id: main //height and width set by program to fill window //below properties are sometimes set from C++ property url qmlFile: '' property bool show: false - /* - Image{ - id: bg - opacity: 0 - anchors.fill: parent - z: -1 - pixmap: bgAppPixmap - effect: Blur { id: blurEffect; enabled: useBlur; blurRadius: 8;} - } - */ Item{ id:embeddedViewer width: parent.width @@ -114,13 +99,6 @@ Item { anchors.fill:parent } - effect: DropShadow { - enabled: useBlur; - blurRadius: 9; - color: "#88000000"; - xOffset:0 - yOffset:0 - } } Text{ -- cgit v0.12 From 1cbdc34e8c75c835ad678fc25a0b7fea5a6eed58 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin <daniel.molkentin@nokia.com> Date: Mon, 19 Jul 2010 12:16:43 +0200 Subject: Make configure.exe accept -no-gif again, fix comment Reviewed-By: Jason McDonald (cherry picked from commit a545e26e1183133f4a66cb9a3bcd9051e2d77894) --- configure | 2 +- tools/configure/configureapp.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 62e0863..2b4cb44 100755 --- a/configure +++ b/configure @@ -3636,7 +3636,7 @@ Third Party Libraries: -no-gif ............ Do not compile GIF reading support. * -qt-gif ............ Compile GIF reading support. - See also src/gui/image/qgifhandler.h + See also src/gui/image/qgifhandler_p.h -no-libtiff ........ Do not compile TIFF support. -qt-libtiff ........ Use the libtiff bundled with Qt. diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 7f2d53b..c3498e3 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -581,6 +581,8 @@ void Configure::parseCmdLine() // Image formats -------------------------------------------- else if (configCmdLine.at(i) == "-no-gif") dictionary[ "GIF" ] = "no"; + else if (configCmdLine.at(i) == "-qt-gif") + dictionary[ "GIF" ] = "yes"; else if (configCmdLine.at(i) == "-no-libtiff") { dictionary[ "TIFF"] = "no"; @@ -1741,7 +1743,7 @@ bool Configure::displayHelp() desc("ZLIB", "system", "-system-zlib", "Use zlib from the operating system.\nSee http://www.gzip.org/zlib\n"); desc("GIF", "no", "-no-gif", "Do not compile GIF reading support."); - desc("GIF", "auto", "-qt-gif", "Compile GIF reading support.\nSee also src/gui/image/qgifhandler.h\n"); + desc("GIF", "auto", "-qt-gif", "Compile GIF reading support.\nSee also src/gui/image/qgifhandler_p.h\n"); desc("LIBPNG", "no", "-no-libpng", "Do not compile PNG support."); desc("LIBPNG", "qt", "-qt-libpng", "Use the libpng bundled with Qt."); -- cgit v0.12 From 80bf7c348c11165209bed290c4bf2bf821fa245c Mon Sep 17 00:00:00 2001 From: Daniel Molkentin <daniel.molkentin@nokia.com> Date: Mon, 19 Jul 2010 12:16:52 +0200 Subject: Rebuilt configure.exe (cherry picked from commit 368dd3c234b9011ab8a8506b50fce6f55694199c) --- configure.exe | Bin 1318400 -> 1686528 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/configure.exe b/configure.exe index 0863ecc..104923b 100755 Binary files a/configure.exe and b/configure.exe differ -- cgit v0.12 From 88f3045d32bff2c6ed2854c7de0b7a481226cebe Mon Sep 17 00:00:00 2001 From: Daniel Molkentin <daniel.molkentin@nokia.com> Date: Mon, 19 Jul 2010 19:05:53 +0200 Subject: Check in the correct configure.exe Reviewed-By: Alessandro Portale (cherry picked from commit ebf650dd893a8f6ace2252cd2a18ee895520f29d) --- configure.exe | Bin 1686528 -> 1317888 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/configure.exe b/configure.exe index 104923b..eea40f9 100755 Binary files a/configure.exe and b/configure.exe differ -- cgit v0.12 From 214adbf4093255e75dee420df539d1808430dd7a Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Wed, 7 Jul 2010 16:28:45 +1000 Subject: Convert examples and demos to use Bearer Management. Task-number: QTBUG-10439 (cherry picked from commit 75db37022a9fd479e2a446b57e774eaf8e3e73ea) --- demos/embedded/anomaly/anomaly.pro | 2 - demos/embedded/anomaly/src/BrowserView.cpp | 33 +- demos/embedded/anomaly/src/BrowserView.h | 3 - demos/embedded/lightmaps/lightmaps.cpp | 49 ++- demos/embedded/lightmaps/lightmaps.pro | 2 - demos/embedded/qmlflickr/qmlflickr.cpp | 63 +-- demos/embedded/qmlflickr/qmlflickr.pro | 2 - demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp | 63 +-- demos/embedded/qmlphotoviewer/qmlphotoviewer.pro | 2 - demos/embedded/qmltwitter/qmltwitter.cpp | 63 +-- demos/embedded/qmltwitter/qmltwitter.pro | 2 - examples/network/fortuneclient/client.cpp | 65 ++- examples/network/fortuneclient/client.h | 7 +- examples/network/fortuneclient/fortuneclient.pro | 2 - examples/network/fortuneserver/fortuneserver.pro | 2 - examples/network/fortuneserver/main.cpp | 7 - examples/network/fortuneserver/server.cpp | 96 +++-- examples/network/fortuneserver/server.h | 3 + examples/network/network-chat/main.cpp | 48 ++- examples/network/network-chat/network-chat.pro | 2 - examples/network/qftp/ftpwindow.cpp | 56 ++- examples/network/qftp/ftpwindow.h | 6 +- examples/network/qftp/qftp.pro | 2 - examples/network/qftp/sym_iap_util.h | 519 ----------------------- 24 files changed, 388 insertions(+), 711 deletions(-) delete mode 100644 examples/network/qftp/sym_iap_util.h diff --git a/demos/embedded/anomaly/anomaly.pro b/demos/embedded/anomaly/anomaly.pro index 584e5cd..a786b46 100644 --- a/demos/embedded/anomaly/anomaly.pro +++ b/demos/embedded/anomaly/anomaly.pro @@ -26,8 +26,6 @@ RESOURCES += src/anomaly.qrc symbian { TARGET.UID3 = 0xA000CF71 include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection TARGET.CAPABILITY = NetworkServices TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } diff --git a/demos/embedded/anomaly/src/BrowserView.cpp b/demos/embedded/anomaly/src/BrowserView.cpp index a6e6f7a..73d0b70 100644 --- a/demos/embedded/anomaly/src/BrowserView.cpp +++ b/demos/embedded/anomaly/src/BrowserView.cpp @@ -51,10 +51,6 @@ #include "webview.h" #include "ZoomStrip.h" -#if defined (Q_OS_SYMBIAN) -#include "sym_iap_util.h" -#endif - BrowserView::BrowserView(QWidget *parent) : QWidget(parent) , m_titleBar(0) @@ -71,6 +67,26 @@ BrowserView::BrowserView(QWidget *parent) m_zoomLevels << 100; m_zoomLevels << 110 << 120 << 133 << 150 << 170 << 200 << 240 << 300; + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = + settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system + // default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + m_webView->page()->networkAccessManager()->setConfiguration(config); + } + QTimer::singleShot(0, this, SLOT(initialize())); } @@ -100,9 +116,6 @@ void BrowserView::initialize() m_webView->setHtml("about:blank"); m_webView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_webView->setFocus(); -#ifdef Q_OS_SYMBIAN - QTimer::singleShot(0, this, SLOT(setDefaultIap())); -#endif } void BrowserView::start() @@ -173,12 +186,6 @@ void BrowserView::resizeEvent(QResizeEvent *event) int zh = m_zoomStrip->sizeHint().height(); m_zoomStrip->move(width() - zw, (height() - zh) / 2); } -#ifdef Q_OS_SYMBIAN -void BrowserView::setDefaultIap() -{ - qt_SetDefaultIap(); -} -#endif void BrowserView::navigate(const QUrl &url) { diff --git a/demos/embedded/anomaly/src/BrowserView.h b/demos/embedded/anomaly/src/BrowserView.h index 5ab1dd7..8981582 100644 --- a/demos/embedded/anomaly/src/BrowserView.h +++ b/demos/embedded/anomaly/src/BrowserView.h @@ -63,9 +63,6 @@ public slots: void navigate(const QUrl &url); void zoomIn(); void zoomOut(); -#ifdef Q_OS_SYMBIAN - void setDefaultIap(); -#endif private slots: void initialize(); diff --git a/demos/embedded/lightmaps/lightmaps.cpp b/demos/embedded/lightmaps/lightmaps.cpp index c76aed0..2eb1733 100644 --- a/demos/embedded/lightmaps/lightmaps.cpp +++ b/demos/embedded/lightmaps/lightmaps.cpp @@ -43,10 +43,6 @@ #include <QtGui> #include <QtNetwork> -#if defined (Q_OS_SYMBIAN) -#include "sym_iap_util.h" -#endif - #include <math.h> #ifndef M_PI @@ -490,6 +486,7 @@ class MapZoom : public QMainWindow private: LightMaps *map; + QNetworkSession *networkSession; public: MapZoom(): QMainWindow(0) { @@ -526,15 +523,49 @@ public: menu->addAction(osmAction); #endif - QTimer::singleShot(0, this, SLOT(delayedInit())); + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = + settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system + // default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + networkSession = new QNetworkSession(config, this); + connect(networkSession, SIGNAL(opened()), this, SLOT(sessionOpened())); + + networkSession->open(); + } else { + networkSession = 0; + } } private slots: - void delayedInit() { -#if defined(Q_OS_SYMBIAN) - qt_SetDefaultIap(); -#endif + void sessionOpened() { + // Save the used configuration + QNetworkConfiguration config = networkSession->configuration(); + QString id; + if (config.type() == QNetworkConfiguration::UserChoice) { + id = networkSession->sessionProperty( + QLatin1String("UserChoiceConfiguration")).toString(); + } else { + id = config.identifier(); + } + + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); + settings.endGroup(); } void chooseOslo() { diff --git a/demos/embedded/lightmaps/lightmaps.pro b/demos/embedded/lightmaps/lightmaps.pro index ee4cc5a..9d83721 100644 --- a/demos/embedded/lightmaps/lightmaps.pro +++ b/demos/embedded/lightmaps/lightmaps.pro @@ -5,8 +5,6 @@ QT += network symbian { TARGET.UID3 = 0xA000CF75 include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection TARGET.CAPABILITY = NetworkServices TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } diff --git a/demos/embedded/qmlflickr/qmlflickr.cpp b/demos/embedded/qmlflickr/qmlflickr.cpp index 6f0c528..7068f88 100644 --- a/demos/embedded/qmlflickr/qmlflickr.cpp +++ b/demos/embedded/qmlflickr/qmlflickr.cpp @@ -40,41 +40,59 @@ ****************************************************************************/ #include <QtCore/QFileInfo> +#include <QtCore/QSettings> #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> #include <QtDeclarative/QDeclarativeEngine> +#include <QtDeclarative/QDeclarativeNetworkAccessManagerFactory> +#include <QtNetwork/QNetworkConfiguration> +#include <QtNetwork/QNetworkConfigurationManager> +#include <QtNetwork/QNetworkAccessManager> -#if defined(Q_OS_SYMBIAN) -#include <QtCore/QTextCodec> -#include <QtCore/QTimer> -#include "sym_iap_util.h" - -class QmlAppView : public QDeclarativeView +// Factory to create QNetworkAccessManagers that use the saved network configuration; otherwise +// the system default. +class NetworkAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory { -Q_OBJECT public: - QmlAppView(QWidget *parent = 0) - : QDeclarativeView(parent) - { - QTimer::singleShot(0, this, SLOT(setDefaultIap())); - } + ~NetworkAccessManagerFactory() { } -private slots: - void setDefaultIap() - { - qt_SetDefaultIap(); - } + QNetworkAccessManager *create(QObject *parent); }; -#else // Q_OS_SYMBIAN -typedef QDeclarativeView QmlAppView; -#endif // Q_OS_SYMBIAN + +QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent) +{ + QNetworkAccessManager *accessManager = new QNetworkAccessManager(parent); + + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + accessManager->setConfiguration(config); + } + + return accessManager; +} int main(int argc, char *argv[]) { QApplication application(argc, argv); + NetworkAccessManagerFactory networkAccessManagerFactory; + const QString mainQmlApp = QLatin1String("flickr.qml"); - QmlAppView view; + QDeclarativeView view; + view.engine()->setNetworkAccessManagerFactory(&networkAccessManagerFactory); view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); @@ -87,6 +105,3 @@ int main(int argc, char *argv[]) return application.exec(); } -#if defined(Q_OS_SYMBIAN) -#include "qmlflickr.moc" -#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmlflickr/qmlflickr.pro b/demos/embedded/qmlflickr/qmlflickr.pro index e706134..39b316a 100644 --- a/demos/embedded/qmlflickr/qmlflickr.pro +++ b/demos/embedded/qmlflickr/qmlflickr.pro @@ -7,8 +7,6 @@ include($$PWD/deployment.pri) symbian { TARGET.UID3 = 0x$$qmlflickr_uid3 # defined in deployment.pri include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection TARGET.CAPABILITY = NetworkServices TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } diff --git a/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp index 7889842..2b9db5e 100644 --- a/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp +++ b/demos/embedded/qmlphotoviewer/qmlphotoviewer.cpp @@ -40,41 +40,59 @@ ****************************************************************************/ #include <QtCore/QFileInfo> +#include <QtCore/QSettings> #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> #include <QtDeclarative/QDeclarativeEngine> +#include <QtDeclarative/QDeclarativeNetworkAccessManagerFactory> +#include <QtNetwork/QNetworkConfiguration> +#include <QtNetwork/QNetworkConfigurationManager> +#include <QtNetwork/QNetworkAccessManager> -#if defined(Q_OS_SYMBIAN) -#include <QtCore/QTextCodec> -#include <QtCore/QTimer> -#include "sym_iap_util.h" - -class QmlAppView : public QDeclarativeView +// Factory to create QNetworkAccessManagers that use the saved network configuration; otherwise +// the system default. +class NetworkAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory { -Q_OBJECT public: - QmlAppView(QWidget *parent = 0) - : QDeclarativeView(parent) - { - QTimer::singleShot(0, this, SLOT(setDefaultIap())); - } + ~NetworkAccessManagerFactory() { } -private slots: - void setDefaultIap() - { - qt_SetDefaultIap(); - } + QNetworkAccessManager *create(QObject *parent); }; -#else // Q_OS_SYMBIAN -typedef QDeclarativeView QmlAppView; -#endif // Q_OS_SYMBIAN + +QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent) +{ + QNetworkAccessManager *accessManager = new QNetworkAccessManager(parent); + + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + accessManager->setConfiguration(config); + } + + return accessManager; +} int main(int argc, char *argv[]) { QApplication application(argc, argv); + NetworkAccessManagerFactory networkAccessManagerFactory; + const QString mainQmlApp = QLatin1String("photoviewer.qml"); - QmlAppView view; + QDeclarativeView view; + view.engine()->setNetworkAccessManagerFactory(&networkAccessManagerFactory); view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); @@ -87,6 +105,3 @@ int main(int argc, char *argv[]) return application.exec(); } -#if defined(Q_OS_SYMBIAN) -#include "qmlphotoviewer.moc" -#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro b/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro index ead5e67..a4234cf 100644 --- a/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro +++ b/demos/embedded/qmlphotoviewer/qmlphotoviewer.pro @@ -7,8 +7,6 @@ include($$PWD/deployment.pri) symbian { TARGET.UID3 = 0x$$qmlphotoviewer_uid3 # defined in deployment.pri include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection TARGET.CAPABILITY = NetworkServices TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } diff --git a/demos/embedded/qmltwitter/qmltwitter.cpp b/demos/embedded/qmltwitter/qmltwitter.cpp index e30ab24..c53098a4 100644 --- a/demos/embedded/qmltwitter/qmltwitter.cpp +++ b/demos/embedded/qmltwitter/qmltwitter.cpp @@ -40,41 +40,59 @@ ****************************************************************************/ #include <QtCore/QFileInfo> +#include <QtCore/QSettings> #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> #include <QtDeclarative/QDeclarativeEngine> +#include <QtDeclarative/QDeclarativeNetworkAccessManagerFactory> +#include <QtNetwork/QNetworkConfiguration> +#include <QtNetwork/QNetworkConfigurationManager> +#include <QtNetwork/QNetworkAccessManager> -#if defined(Q_OS_SYMBIAN) -#include <QtCore/QTextCodec> -#include <QtCore/QTimer> -#include "sym_iap_util.h" - -class QmlAppView : public QDeclarativeView +// Factory to create QNetworkAccessManagers that use the saved network configuration; otherwise +// the system default. +class NetworkAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory { -Q_OBJECT public: - QmlAppView(QWidget *parent = 0) - : QDeclarativeView(parent) - { - QTimer::singleShot(0, this, SLOT(setDefaultIap())); - } + ~NetworkAccessManagerFactory() { } -private slots: - void setDefaultIap() - { - qt_SetDefaultIap(); - } + QNetworkAccessManager *create(QObject *parent); }; -#else // Q_OS_SYMBIAN -typedef QDeclarativeView QmlAppView; -#endif // Q_OS_SYMBIAN + +QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent) +{ + QNetworkAccessManager *accessManager = new QNetworkAccessManager(parent); + + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + accessManager->setConfiguration(config); + } + + return accessManager; +} int main(int argc, char *argv[]) { QApplication application(argc, argv); + NetworkAccessManagerFactory networkAccessManagerFactory; + const QString mainQmlApp = QLatin1String("twitter.qml"); - QmlAppView view; + QDeclarativeView view; + view.engine()->setNetworkAccessManagerFactory(&networkAccessManagerFactory); view.setSource(QUrl(mainQmlApp)); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); @@ -87,6 +105,3 @@ int main(int argc, char *argv[]) return application.exec(); } -#if defined(Q_OS_SYMBIAN) -#include "qmltwitter.moc" -#endif // Q_OS_SYMBIAN diff --git a/demos/embedded/qmltwitter/qmltwitter.pro b/demos/embedded/qmltwitter/qmltwitter.pro index 7f9be57..7bd4617 100644 --- a/demos/embedded/qmltwitter/qmltwitter.pro +++ b/demos/embedded/qmltwitter/qmltwitter.pro @@ -7,8 +7,6 @@ include($$PWD/deployment.pri) symbian { TARGET.UID3 = 0x$$qmltwitter_uid3 # defined in deployment.pri include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection TARGET.CAPABILITY = NetworkServices TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } diff --git a/examples/network/fortuneclient/client.cpp b/examples/network/fortuneclient/client.cpp index b9a85c4..fe35906 100644 --- a/examples/network/fortuneclient/client.cpp +++ b/examples/network/fortuneclient/client.cpp @@ -43,13 +43,9 @@ #include "client.h" -#ifdef Q_OS_SYMBIAN -#include "sym_iap_util.h" -#endif - //! [0] Client::Client(QWidget *parent) - : QDialog(parent) +: QDialog(parent), networkSession(0) { //! [0] hostLabel = new QLabel(tr("&Server name:")); @@ -121,9 +117,28 @@ Client::Client(QWidget *parent) setWindowTitle(tr("Fortune Client")); portLineEdit->setFocus(); -#ifdef Q_OS_SYMBIAN - isDefaultIapSet = false; -#endif + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + networkSession = new QNetworkSession(config, this); + connect(networkSession, SIGNAL(opened()), this, SLOT(sessionOpened())); + + getFortuneButton->setEnabled(false); + statusLabel->setText(tr("Opening network session.")); + networkSession->open(); + } //! [5] } //! [5] @@ -132,12 +147,6 @@ Client::Client(QWidget *parent) void Client::requestNewFortune() { getFortuneButton->setEnabled(false); -#ifdef Q_OS_SYMBIAN - if(!isDefaultIapSet) { - qt_SetDefaultIap(); - isDefaultIapSet = true; - } -#endif blockSize = 0; tcpSocket->abort(); //! [7] @@ -214,6 +223,30 @@ void Client::displayError(QAbstractSocket::SocketError socketError) void Client::enableGetFortuneButton() { - getFortuneButton->setEnabled(!hostLineEdit->text().isEmpty() - && !portLineEdit->text().isEmpty()); + getFortuneButton->setEnabled((!networkSession || networkSession->isOpen()) && + !hostLineEdit->text().isEmpty() && + !portLineEdit->text().isEmpty()); + } + +void Client::sessionOpened() +{ + // Save the used configuration + QNetworkConfiguration config = networkSession->configuration(); + QString id; + if (config.type() == QNetworkConfiguration::UserChoice) + id = networkSession->sessionProperty(QLatin1String("UserChoiceConfiguration")).toString(); + else + id = config.identifier(); + + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); + settings.endGroup(); + + statusLabel->setText(tr("This examples requires that you run the " + "Fortune Server example as well.")); + + enableGetFortuneButton(); +} + diff --git a/examples/network/fortuneclient/client.h b/examples/network/fortuneclient/client.h index 50a9037..d0c0718 100644 --- a/examples/network/fortuneclient/client.h +++ b/examples/network/fortuneclient/client.h @@ -50,6 +50,7 @@ class QLabel; class QLineEdit; class QPushButton; class QTcpSocket; +class QNetworkSession; QT_END_NAMESPACE //! [0] @@ -65,6 +66,7 @@ private slots: void readFortune(); void displayError(QAbstractSocket::SocketError socketError); void enableGetFortuneButton(); + void sessionOpened(); private: QLabel *hostLabel; @@ -79,9 +81,8 @@ private: QTcpSocket *tcpSocket; QString currentFortune; quint16 blockSize; -#ifdef Q_OS_SYMBIAN - bool isDefaultIapSet; -#endif + + QNetworkSession *networkSession; }; //! [0] diff --git a/examples/network/fortuneclient/fortuneclient.pro b/examples/network/fortuneclient/fortuneclient.pro index edbf14d..f79679d 100644 --- a/examples/network/fortuneclient/fortuneclient.pro +++ b/examples/network/fortuneclient/fortuneclient.pro @@ -11,8 +11,6 @@ INSTALLS += target sources symbian { include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection TARGET.CAPABILITY = "NetworkServices ReadUserData WriteUserData" TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } diff --git a/examples/network/fortuneserver/fortuneserver.pro b/examples/network/fortuneserver/fortuneserver.pro index 474ec11..e13f309 100644 --- a/examples/network/fortuneserver/fortuneserver.pro +++ b/examples/network/fortuneserver/fortuneserver.pro @@ -12,8 +12,6 @@ INSTALLS += target sources symbian { TARGET.UID3 = 0xA000CF71 include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection TARGET.CAPABILITY = "NetworkServices ReadUserData" TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } diff --git a/examples/network/fortuneserver/main.cpp b/examples/network/fortuneserver/main.cpp index 29fe777..53149c0 100644 --- a/examples/network/fortuneserver/main.cpp +++ b/examples/network/fortuneserver/main.cpp @@ -45,15 +45,8 @@ #include "server.h" -#ifdef Q_OS_SYMBIAN -#include "sym_iap_util.h" -#endif - int main(int argc, char *argv[]) { -#ifdef Q_OS_SYMBIAN - qt_SetDefaultIap(); -#endif QApplication app(argc, argv); Server server; #ifdef Q_OS_SYMBIAN diff --git a/examples/network/fortuneserver/server.cpp b/examples/network/fortuneserver/server.cpp index 98234e0..b931b96 100644 --- a/examples/network/fortuneserver/server.cpp +++ b/examples/network/fortuneserver/server.cpp @@ -46,12 +46,79 @@ #include "server.h" Server::Server(QWidget *parent) - : QDialog(parent) +: QDialog(parent), tcpServer(0), networkSession(0) { statusLabel = new QLabel; quitButton = new QPushButton(tr("Quit")); quitButton->setAutoDefault(false); + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + networkSession = new QNetworkSession(config, this); + connect(networkSession, SIGNAL(opened()), this, SLOT(sessionOpened())); + + statusLabel->setText(tr("Opening network session.")); + networkSession->open(); + } else { + sessionOpened(); + } + + //! [2] + fortunes << tr("You've been leading a dog's life. Stay off the furniture.") + << tr("You've got to think about tomorrow.") + << tr("You will be surprised by a loud noise.") + << tr("You will feel hungry again in another hour.") + << tr("You might have mail.") + << tr("You cannot kill time without injuring eternity.") + << tr("Computers are not intelligent. They only think they are."); + //! [2] + + connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); + //! [3] + connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune())); + //! [3] + + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addStretch(1); + buttonLayout->addWidget(quitButton); + buttonLayout->addStretch(1); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(statusLabel); + mainLayout->addLayout(buttonLayout); + setLayout(mainLayout); + + setWindowTitle(tr("Fortune Server")); +} + +void Server::sessionOpened() +{ + // Save the used configuration + QNetworkConfiguration config = networkSession->configuration(); + QString id; + if (config.type() == QNetworkConfiguration::UserChoice) + id = networkSession->sessionProperty(QLatin1String("UserChoiceConfiguration")).toString(); + else + id = config.identifier(); + + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); + settings.endGroup(); + //! [0] //! [1] tcpServer = new QTcpServer(this); if (!tcpServer->listen()) { @@ -79,33 +146,6 @@ Server::Server(QWidget *parent) "Run the Fortune Client example now.") .arg(ipAddress).arg(tcpServer->serverPort())); //! [1] - -//! [2] - fortunes << tr("You've been leading a dog's life. Stay off the furniture.") - << tr("You've got to think about tomorrow.") - << tr("You will be surprised by a loud noise.") - << tr("You will feel hungry again in another hour.") - << tr("You might have mail.") - << tr("You cannot kill time without injuring eternity.") - << tr("Computers are not intelligent. They only think they are."); -//! [2] - - connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); -//! [3] - connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune())); -//! [3] - - QHBoxLayout *buttonLayout = new QHBoxLayout; - buttonLayout->addStretch(1); - buttonLayout->addWidget(quitButton); - buttonLayout->addStretch(1); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(statusLabel); - mainLayout->addLayout(buttonLayout); - setLayout(mainLayout); - - setWindowTitle(tr("Fortune Server")); } //! [4] diff --git a/examples/network/fortuneserver/server.h b/examples/network/fortuneserver/server.h index 2d8d116..9d9ef62 100644 --- a/examples/network/fortuneserver/server.h +++ b/examples/network/fortuneserver/server.h @@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE class QLabel; class QPushButton; class QTcpServer; +class QNetworkSession; QT_END_NAMESPACE //! [0] @@ -58,6 +59,7 @@ public: Server(QWidget *parent = 0); private slots: + void sessionOpened(); void sendFortune(); private: @@ -65,6 +67,7 @@ private: QPushButton *quitButton; QTcpServer *tcpServer; QStringList fortunes; + QNetworkSession *networkSession; }; //! [0] diff --git a/examples/network/network-chat/main.cpp b/examples/network/network-chat/main.cpp index 7226217..e3db74b 100644 --- a/examples/network/network-chat/main.cpp +++ b/examples/network/network-chat/main.cpp @@ -41,16 +41,52 @@ #include <QApplication> #include "chatdialog.h" -#ifdef Q_OS_SYMBIAN -#include "sym_iap_util.h" -#endif + +#include <QtCore/QSettings> +#include <QtNetwork/QNetworkConfigurationManager> +#include <QtNetwork/QNetworkSession> int main(int argc, char *argv[]) { -#ifdef Q_OS_SYMBIAN - qt_SetDefaultIap(); -#endif QApplication app(argc, argv); + + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + QNetworkSession *networkSession = new QNetworkSession(config, &app); + networkSession->open(); + networkSession->waitForOpened(); + + if (networkSession->isOpen()) { + // Save the used configuration + QNetworkConfiguration config = networkSession->configuration(); + QString id; + if (config.type() == QNetworkConfiguration::UserChoice) { + id = networkSession->sessionProperty( + QLatin1String("UserChoiceConfiguration")).toString(); + } else { + id = config.identifier(); + } + + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); + settings.endGroup(); + } + } + ChatDialog dialog; #ifdef Q_OS_SYMBIAN // Make application better looking and more usable on small screen diff --git a/examples/network/network-chat/network-chat.pro b/examples/network/network-chat/network-chat.pro index 1215aea..b3d429e 100644 --- a/examples/network/network-chat/network-chat.pro +++ b/examples/network/network-chat/network-chat.pro @@ -20,8 +20,6 @@ INSTALLS += target sources symbian { include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) - INCLUDEPATH += $$QT_SOURCE_TREE/examples/network/qftp/ - LIBS += -lesock -lcommdb -linsock # For IAP selection LIBS += -lcharconv TARGET.CAPABILITY = "NetworkServices ReadUserData WriteUserData" TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 diff --git a/examples/network/qftp/ftpwindow.cpp b/examples/network/qftp/ftpwindow.cpp index 635b679..f39f9a0 100644 --- a/examples/network/qftp/ftpwindow.cpp +++ b/examples/network/qftp/ftpwindow.cpp @@ -43,12 +43,8 @@ #include "ftpwindow.h" -#ifdef Q_OS_SYMBIAN -#include "sym_iap_util.h" -#endif - FtpWindow::FtpWindow(QWidget *parent) - : QDialog(parent), ftp(0) + : QDialog(parent), ftp(0), networkSession(0) { ftpServerLabel = new QLabel(tr("Ftp &server:")); ftpServerLineEdit = new QLineEdit("ftp.qt.nokia.com"); @@ -118,9 +114,28 @@ FtpWindow::FtpWindow(QWidget *parent) mainLayout->addWidget(buttonBox); setLayout(mainLayout); -#ifdef Q_OS_SYMBIAN - bDefaultIapSet = false; -#endif + QNetworkConfigurationManager manager; + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + networkSession = new QNetworkSession(config, this); + connect(networkSession, SIGNAL(opened()), this, SLOT(enableConnectButton())); + + connectButton->setEnabled(false); + statusLabel->setText(tr("Opening network session.")); + networkSession->open(); + } setWindowTitle(tr("FTP")); } @@ -133,12 +148,6 @@ QSize FtpWindow::sizeHint() const //![0] void FtpWindow::connectOrDisconnect() { -#ifdef Q_OS_SYMBIAN - if(!bDefaultIapSet) { - qt_SetDefaultIap(); - bDefaultIapSet = true; - } -#endif if (ftp) { ftp->abort(); ftp->deleteLater(); @@ -377,3 +386,22 @@ void FtpWindow::enableDownloadButton() } //![14] +void FtpWindow::enableConnectButton() +{ + // Save the used configuration + QNetworkConfiguration config = networkSession->configuration(); + QString id; + if (config.type() == QNetworkConfiguration::UserChoice) + id = networkSession->sessionProperty(QLatin1String("UserChoiceConfiguration")).toString(); + else + id = config.identifier(); + + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); + settings.endGroup(); + + connectButton->setEnabled(networkSession->isOpen()); + statusLabel->setText(tr("Please enter the name of an FTP server.")); +} + diff --git a/examples/network/qftp/ftpwindow.h b/examples/network/qftp/ftpwindow.h index 25a7a56..9f39ccd 100644 --- a/examples/network/qftp/ftpwindow.h +++ b/examples/network/qftp/ftpwindow.h @@ -55,6 +55,7 @@ class QTreeWidgetItem; class QProgressDialog; class QPushButton; class QUrlInfo; +class QNetworkSession; QT_END_NAMESPACE class FtpWindow : public QDialog @@ -78,6 +79,7 @@ private slots: void updateDataTransferProgress(qint64 readBytes, qint64 totalBytes); void enableDownloadButton(); + void enableConnectButton(); //![0] private: @@ -98,9 +100,7 @@ private: QFtp *ftp; QFile *file; -#ifdef Q_OS_SYMBIAN - bool bDefaultIapSet; -#endif + QNetworkSession *networkSession; //![1] }; diff --git a/examples/network/qftp/qftp.pro b/examples/network/qftp/qftp.pro index b3106c3..232e8eb 100644 --- a/examples/network/qftp/qftp.pro +++ b/examples/network/qftp/qftp.pro @@ -13,8 +13,6 @@ INSTALLS += target sources symbian { TARGET.UID3 = 0xA000A648 include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) - HEADERS += sym_iap_util.h INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE TARGET.CAPABILITY="NetworkServices ReadUserData WriteUserData" - LIBS+=-lesock -lcommdb -linsock # For IAP selection } diff --git a/examples/network/qftp/sym_iap_util.h b/examples/network/qftp/sym_iap_util.h deleted file mode 100644 index bea447c..0000000 --- a/examples/network/qftp/sym_iap_util.h +++ /dev/null @@ -1,519 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QSYM_IAP_UTIL_H -#define QSYM_IAP_UTIL_H - -// Symbian -#include <utf.h> -#include <es_sock.h> -#include <in_sock.h> -#include <es_enum.h> -#include <in_iface.h> -#include <commdbconnpref.h> -#include <e32cmn.h> - -// OpenC -#include <sys/socket.h> -#include <net/if.h> - -//Qt -#include <QSettings> -#include <QStringList> -//#include <QTextCodec> - -_LIT(KIapNameSetting, "IAP\\Name"); // text - mandatory -_LIT(KIapTableIdField, "IAP\\Id"); -_LIT(KIapDialogPref, "IAP\\DialogPref"); // TUnit32 - optional -_LIT(KIapService, "IAP\\IAPService"); // TUnit32 - mandatory -_LIT(KIapServiceType, "IAP\\IAPServiceType"); // text - mandatory -_LIT(KIapBearer, "IAP\\IAPBearer"); // TUint32 - optional -_LIT(KIapBearerType, "IAP\\IAPBearerType"); // text - optional -_LIT(KIapNetwork, "IAP\\IAPNetwork"); // TUint32 - optional - -const QLatin1String qtOrganizationTag("Trolltech"); -const QLatin1String qtNetworkModuleTag("QtNetwork"); -const QLatin1String iapGroupTag("IAP"); -const QLatin1String iapNamesArrayTag("Names"); -const QLatin1String iapNameItemTag("Name"); - -static QTextCodec *utf16LETextCodec = 0; - -void clearIapNamesSettings(QSettings &settings) { - settings.beginGroup(qtNetworkModuleTag); - settings.beginGroup(iapGroupTag); - settings.remove(iapNamesArrayTag); - settings.endGroup(); - settings.endGroup(); -} - -void writeIapNamesSettings(QSettings &settings, const QStringList& iapNames) { - clearIapNamesSettings(settings); - settings.beginGroup(qtNetworkModuleTag); - settings.beginGroup(iapGroupTag); - settings.beginWriteArray(iapNamesArrayTag); - for (int index = 0; index < iapNames.size(); ++index) { - settings.setArrayIndex(index); - settings.setValue(iapNameItemTag, iapNames.at(index)); - } - settings.endArray(); - settings.endGroup(); - settings.endGroup(); -} - -void readIapNamesSettings(QSettings &settings, QStringList& iapNames) { - settings.beginGroup(qtNetworkModuleTag); - settings.beginGroup(iapGroupTag); - int last = settings.beginReadArray(iapNamesArrayTag); - for (int index = 0; index < last; ++index) { - settings.setArrayIndex(index); - iapNames.append(settings.value(iapNameItemTag).toString()); - } - settings.endArray(); - settings.endGroup(); - settings.endGroup(); -} - -static QString qt_TNameToQString(TName data) { - if(utf16LETextCodec == 0) - utf16LETextCodec = QTextCodec::codecForName("UTF-16LE"); - - QByteArray tmpByteArray = QByteArray::fromRawData((char*)(data.PtrZ()), data.Length() * 2); - return utf16LETextCodec->toUnicode(tmpByteArray); -} - -static QString qt_InterfaceInfoL() -{ - QString output; - - TBuf8<512> buffer; - TBuf<128> t; - TAutoClose<RSocketServ> ss; - User::LeaveIfError(ss.iObj.Connect()); - ss.PushL(); - - TAutoClose<RSocket> sock; - User::LeaveIfError(sock.iObj.Open(ss.iObj, _L("udp"))); - sock.PushL(); - - User::LeaveIfError(sock.iObj.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl)); - - TProtocolDesc in; - User::LeaveIfError(sock.iObj.Info(in)); - printf("EPOC32 IP Configuration TCPIP Version %d.%d.%d\n", in.iVersion.iMajor, in.iVersion.iMinor, in.iVersion.iBuild); - - TPckgBuf<TSoInetInterfaceInfo> info, next; - - TInt res=sock.iObj.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info); - if(res!=KErrNone) - User::Leave(res); - TInt count = 0; - while(res==KErrNone) { - res=sock.iObj.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, next); - - if(info().iName != _L("") && info().iName != _L("loop6") && info().iName != _L("loop4")) { - printf("Interface %d\n", count++); - - printf("Name \"%s\"\n", qt_TNameToQString(info().iName).toLatin1().data()); - printf("NIF tag \"%s\"\n", qt_TNameToQString(info().iTag).toLatin1().data()); - - printf("State "); - switch (info().iState) - { - case EIfPending: - printf("pending\n"); - break; - case EIfUp: - printf("up\n"); - break; - case EIfBusy: - printf("busy\n"); - break; - default: - printf("down\n"); - break; - } - - printf("Mtu %d\n", info().iMtu); - printf("Speed Metric %d\n", info().iSpeedMetric); - - printf("Features:"); - info().iFeatures & KIfIsLoopback ? printf(" loopback") : printf(""); - info().iFeatures & KIfIsDialup ? printf(" dialup") : printf(""); - info().iFeatures & KIfIsPointToPoint ? printf(" pointtopoint") : printf(""); - info().iFeatures & KIfCanBroadcast ? printf(" canbroadcast") : printf(""); - info().iFeatures & KIfCanMulticast ? printf(" canmulticast") : printf(""); - info().iFeatures & KIfCanSetMTU ? printf(" cansetmtu") : printf(""); - info().iFeatures & KIfHasHardwareAddr ? printf(" hardwareaddr") : printf(""); - info().iFeatures & KIfCanSetHardwareAddr ? printf(" cansethardwareaddr") : printf(""); - printf("\n"); - - TName address; - info().iAddress.Output(address); - printf("Addr: %s\n", qt_TNameToQString(address).toLatin1().data()); - - if(info().iAddress.IsLinkLocal()) { - printf(" -link local\n"); - } else if(info().iAddress.IsSiteLocal()) { - printf(" -site local\n"); - } else { - printf(" -global\n"); - } - - info().iNetMask.Output(address); - printf("Netmask %s\n", qt_TNameToQString(address).toLatin1().data()); - - info().iBrdAddr.Output(address); - printf("Broadcast address %s\n", qt_TNameToQString(address).toLatin1().data()); - - info().iDefGate.Output(address); - printf("Gatew: %s\n", qt_TNameToQString(address).toLatin1().data()); - - info().iNameSer1.Output(address); - printf("DNS 1: %s\n", qt_TNameToQString(address).toLatin1().data()); - - info().iNameSer2.Output(address); - printf("DNS 2: %s\n", qt_TNameToQString(address).toLatin1().data()); - - if (info().iHwAddr.Family() != KAFUnspec) { - printf("Hardware address "); - TUint j; - for(j = sizeof(SSockAddr) ; j < sizeof(SSockAddr) + 6 ; ++j) { - if(j < (TUint)info().iHwAddr.Length()) { - printf("%02X", info().iHwAddr[j]); - } else { - printf("??"); - } - if(j < sizeof(SSockAddr) + 5) - printf("-"); - else - printf("\n"); - } - } - } - if(res == KErrNone) { - info = next; - printf("\n"); - } else { - printf("\n"); - } - } - - sock.Pop(); - ss.Pop(); - - return output; -} - -static QString qt_RouteInfoL() { - QString output; - TAutoClose<RSocketServ> ss; - User::LeaveIfError(ss.iObj.Connect()); - ss.PushL(); - - TAutoClose<RSocket> sock; - User::LeaveIfError(sock.iObj.Open(ss.iObj, _L("udp"))); - sock.PushL(); - - TSoInetRouteInfo routeInfo; - TPckg<TSoInetRouteInfo> routeInfoPkg(routeInfo); - - TName destAddr; - TName netMask; - TName gateway; - TName ifAddr; - - // Begins enumeration of routes by setting this option - User::LeaveIfError(sock.iObj.SetOpt(KSoInetEnumRoutes, KSolInetRtCtrl)); - - // The TSoInetRouteInfo contains information for a new route each time GetOpt returns KErrNone - for(TInt i = 0; sock.iObj.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, routeInfoPkg) == KErrNone ; i++) - { - // Extract the destination and netmask - routeInfo.iDstAddr.Output(destAddr); - routeInfo.iNetMask.Output(netMask); - routeInfo.iGateway.Output(gateway); - routeInfo.iIfAddr.Output(ifAddr); -/* - if(destAddr.Length() <= 2) - continue; - - if(netMask.Find(_L("255.255.255.255")) != KErrNotFound - || netMask.Find(_L("0.0.0.0")) != KErrNotFound - || netMask.Find(_L("ffff:ffff:ffff:ffff")) != KErrNotFound) - continue; -*/ - printf("Route Info #[%i]\n", i); - printf("DstAddr %s\n", qt_TNameToQString(destAddr).toLatin1().data()); - printf("NetMask %s\n", qt_TNameToQString(netMask).toLatin1().data()); - printf("Gateway %s\n", qt_TNameToQString(gateway).toLatin1().data()); - printf("IfAddr %s\n", qt_TNameToQString(ifAddr).toLatin1().data()); - printf("\n"); - } - - sock.Pop(); - ss.Pop(); - - return output; -} - -QString qt_TDesC2QStringL(const TDesC& aDescriptor) -{ -#ifdef QT_NO_UNICODE - return QString::fromLocal8Bit(aDescriptor.Ptr(), aDescriptor.Length()); -#else - return QString((const QChar *)aDescriptor.Ptr(), aDescriptor.Length()); -#endif -} - -static bool qt_SetDefaultIapName(const QString &iapName, int &error) { - struct ifreq ifReq; - // clear structure - memset(&ifReq, 0, sizeof(struct ifreq)); - // set IAP name value - // make sure it is in UTF8 - strcpy(ifReq.ifr_name, iapName.toUtf8().data()); - - if(setdefaultif(&ifReq) == 0) { - // OK - error = 0; - return true; - } else { - error = errno; - return false; - } - -} -static bool qt_SetDefaultSnapId(const int snapId, int &error) { - struct ifreq ifReq; - // clear structure - memset(&ifReq, 0, sizeof(struct ifreq)); - // set SNAP ID value - ifReq.ifr_ifru.snap_id = snapId; - - if(setdefaultif(&ifReq) == 0) { - // OK - error = 0; - return true; - } else { - error = errno; - return false; - } - -} - -static void qt_SaveIapName(QSettings& settings, QStringList& iapNames, QString& iapNameValue) { - if(iapNames.contains(iapNameValue) && iapNames.first() == iapNameValue) { - // no need to update - } else { - if(iapNameValue != QString("Easy WLAN")) { - // new selection alway on top - iapNames.removeAll(iapNameValue); - iapNames.prepend(iapNameValue); - writeIapNamesSettings(settings, iapNames); - } else { - // Unbeliveable ... if IAP dodn't exist before - // no matter what you choose from IAP selection list - // you will get "Easy WLAN" as IAP name value - - // somehow commsdb is not in sync - } - } -} - -static QString qt_OfferIapDialog() { - TBuf8<256> iapName; - - RSocketServ socketServ; - CleanupClosePushL(socketServ); - - RConnection connection; - CleanupClosePushL(connection); - - socketServ.Connect(); - - TCommDbConnPref prefs; - prefs.SetDialogPreference(ECommDbDialogPrefPrompt); - - connection.Open(socketServ); - connection.Start(prefs); - - connection.GetDesSetting(TPtrC(KIapNameSetting), iapName); - //connection.Stop(); - - iapName.ZeroTerminate(); - QString strIapName((char*)iapName.Ptr()); - - int error = 0; - if(!strIapName.isEmpty()) { - if(!qt_SetDefaultIapName(strIapName, error)) { - //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error); - strIapName = QString(""); - } - } - - CleanupStack::PopAndDestroy(&connection); - CleanupStack::PopAndDestroy(&socketServ); - - return strIapName; -} - -static QString qt_CheckForActiveConnection() { - TUint count; - - RSocketServ serv; - CleanupClosePushL(serv); - - RConnection conn; - CleanupClosePushL(conn); - - serv.Connect(); - conn.Open(serv); - - TConnectionInfoBuf connInfo; - - TBuf8<256> iapName; - TBuf8<256> iapServiceType; - - QString strIapName; - - if (conn.EnumerateConnections(count) == KErrNone) { - if(count > 0) { - for (TUint i = 1; i <= count; i++) { - if (conn.GetConnectionInfo(i, connInfo) == KErrNone) { - RConnection tempConn; - CleanupClosePushL(tempConn); - tempConn.Open(serv); - if (tempConn.Attach(connInfo, RConnection::EAttachTypeNormal) == KErrNone) { - tempConn.GetDesSetting(TPtrC(KIapNameSetting), iapName); - tempConn.GetDesSetting(TPtrC(KIapServiceType), iapServiceType); - //tempConn.Stop(); - iapName.ZeroTerminate(); - iapServiceType.ZeroTerminate(); - -// if(iapServiceType.Find(_L8("LANService")) != KErrNotFound) { -// activeLanConnectionFound = ETrue; -// break; -// } - strIapName = QString((char*)iapName.Ptr()); - int error = 0; - if(!qt_SetDefaultIapName(strIapName, error)) { - //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error); - strIapName = QString(""); - } - - CleanupStack::PopAndDestroy(&tempConn); - break; - } - } - } - } - } - - //conn.Stop(); - - CleanupStack::PopAndDestroy(&conn); - CleanupStack::PopAndDestroy(&serv); - - return strIapName; -} - -static QString qt_CheckSettingsForConnection(QStringList& iapNames) { - QString strIapName; - for(int index = 0; index < iapNames.size(); ++index) { - strIapName = iapNames.at(index); - int error = 0; - if(!qt_SetDefaultIapName(strIapName, error)) { - //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error); - strIapName = QString(""); - } else { - return strIapName; - } - } - return strIapName; -} - -static void qt_SetDefaultIapL() -{ - // settings @ /c/data/.config/Trolltech.com - QSettings settings(QSettings::UserScope, qtOrganizationTag); - // populate iap name list - QStringList iapNames; - readIapNamesSettings(settings, iapNames); - - QString iapNameValue; - - iapNameValue = qt_CheckForActiveConnection(); - - if(!iapNameValue.isEmpty()) { - qt_SaveIapName(settings, iapNames, iapNameValue); - return; - } - - iapNameValue = qt_CheckSettingsForConnection(iapNames); - - if(!iapNameValue.isEmpty()) { - qt_SaveIapName(settings, iapNames, iapNameValue); - return; - } - - /* - * no active LAN connections yet - * no IAP in settings - * offer IAP dialog to user - */ - iapNameValue = qt_OfferIapDialog(); - qt_SaveIapName(settings, iapNames, iapNameValue); - return; - -} - -static int qt_SetDefaultIap() -{ -#ifndef __WINS__ - TRAPD(err1, qt_SetDefaultIapL()); -// TRAPD(err2, qt_InterfaceInfoL()); -// TRAPD(err3, qt_RouteInfoL()); - return err1; -#else - return 0; // IAP dialog not required for emulator -#endif -} - -#endif // QSYM_IAP_UTIL_H -- cgit v0.12 From f3c53e1ece6af5b7d21e30886dfed3d8fa465320 Mon Sep 17 00:00:00 2001 From: aavit <qt-info@nokia.com> Date: Mon, 19 Jul 2010 14:00:59 +0200 Subject: Remove some more unneeded files from libjpeg, avoiding GPL Task-number: QT-3584 Reviewed-by: Trustme (cherry picked from commit 30341a6f9e57caac3ec19e02ffd67164d43c0453) --- src/3rdparty/libjpeg/ansi2knr.1 | 36 -- src/3rdparty/libjpeg/ansi2knr.c | 739 ---------------------------------------- 2 files changed, 775 deletions(-) delete mode 100644 src/3rdparty/libjpeg/ansi2knr.1 delete mode 100644 src/3rdparty/libjpeg/ansi2knr.c diff --git a/src/3rdparty/libjpeg/ansi2knr.1 b/src/3rdparty/libjpeg/ansi2knr.1 deleted file mode 100644 index f9ee5a6..0000000 --- a/src/3rdparty/libjpeg/ansi2knr.1 +++ /dev/null @@ -1,36 +0,0 @@ -.TH ANSI2KNR 1 "19 Jan 1996" -.SH NAME -ansi2knr \- convert ANSI C to Kernighan & Ritchie C -.SH SYNOPSIS -.I ansi2knr -[--varargs] input_file [output_file] -.SH DESCRIPTION -If no output_file is supplied, output goes to stdout. -.br -There are no error messages. -.sp -.I ansi2knr -recognizes function definitions by seeing a non-keyword identifier at the left -margin, followed by a left parenthesis, with a right parenthesis as the last -character on the line, and with a left brace as the first token on the -following line (ignoring possible intervening comments). It will recognize a -multi-line header provided that no intervening line ends with a left or right -brace or a semicolon. These algorithms ignore whitespace and comments, except -that the function name must be the first thing on the line. -.sp -The following constructs will confuse it: -.br - - Any other construct that starts at the left margin and follows the -above syntax (such as a macro or function call). -.br - - Some macros that tinker with the syntax of the function header. -.sp -The --varargs switch is obsolete, and is recognized only for -backwards compatibility. The present version of -.I ansi2knr -will always attempt to convert a ... argument to va_alist and va_dcl. -.SH AUTHOR -L. Peter Deutsch <ghost@aladdin.com> wrote the original ansi2knr and -continues to maintain the current version; most of the code in the current -version is his work. ansi2knr also includes contributions by Francois -Pinard <pinard@iro.umontreal.ca> and Jim Avera <jima@netcom.com>. diff --git a/src/3rdparty/libjpeg/ansi2knr.c b/src/3rdparty/libjpeg/ansi2knr.c deleted file mode 100644 index e84c210..0000000 --- a/src/3rdparty/libjpeg/ansi2knr.c +++ /dev/null @@ -1,739 +0,0 @@ -/* Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved. */ - -/*$Id: ansi2knr.c,v 1.14 2003/09/06 05:36:56 eggert Exp $*/ -/* Convert ANSI C function definitions to K&R ("traditional C") syntax */ - -/* -ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY. No author or distributor accepts responsibility to anyone for the -consequences of using it or for whether it serves any particular purpose or -works at all, unless he says so in writing. Refer to the GNU General Public -License (the "GPL") for full details. - -Everyone is granted permission to copy, modify and redistribute ansi2knr, -but only under the conditions described in the GPL. A copy of this license -is supposed to have been given to you along with ansi2knr so you can know -your rights and responsibilities. It should be in a file named COPYLEFT, -or, if there is no file named COPYLEFT, a file named COPYING. Among other -things, the copyright notice and this notice must be preserved on all -copies. - -We explicitly state here what we believe is already implied by the GPL: if -the ansi2knr program is distributed as a separate set of sources and a -separate executable file which are aggregated on a storage medium together -with another program, this in itself does not bring the other program under -the GPL, nor does the mere fact that such a program or the procedures for -constructing it invoke the ansi2knr executable bring any other part of the -program under the GPL. -*/ - -/* - * Usage: - ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] - * --filename provides the file name for the #line directive in the output, - * overriding input_file (if present). - * If no input_file is supplied, input is read from stdin. - * If no output_file is supplied, output goes to stdout. - * There are no error messages. - * - * ansi2knr recognizes function definitions by seeing a non-keyword - * identifier at the left margin, followed by a left parenthesis, with a - * right parenthesis as the last character on the line, and with a left - * brace as the first token on the following line (ignoring possible - * intervening comments and/or preprocessor directives), except that a line - * consisting of only - * identifier1(identifier2) - * will not be considered a function definition unless identifier2 is - * the word "void", and a line consisting of - * identifier1(identifier2, <<arbitrary>>) - * will not be considered a function definition. - * ansi2knr will recognize a multi-line header provided that no intervening - * line ends with a left or right brace or a semicolon. These algorithms - * ignore whitespace, comments, and preprocessor directives, except that - * the function name must be the first thing on the line. The following - * constructs will confuse it: - * - Any other construct that starts at the left margin and - * follows the above syntax (such as a macro or function call). - * - Some macros that tinker with the syntax of function headers. - */ - -/* - * The original and principal author of ansi2knr is L. Peter Deutsch - * <ghost@aladdin.com>. Other authors are noted in the change history - * that follows (in reverse chronological order): - - lpd 2000-04-12 backs out Eggert's changes because of bugs: - - concatlits didn't declare the type of its bufend argument; - - concatlits didn't recognize when it was inside a comment; - - scanstring could scan backward past the beginning of the string; when - - the check for \ + newline in scanstring was unnecessary. - - 2000-03-05 Paul Eggert <eggert@twinsun.com> - - Add support for concatenated string literals. - * ansi2knr.c (concatlits): New decl. - (main): Invoke concatlits to concatenate string literals. - (scanstring): Handle backslash-newline correctly. Work with - character constants. Fix bug when scanning backwards through - backslash-quote. Check for unterminated strings. - (convert1): Parse character constants, too. - (appendline, concatlits): New functions. - * ansi2knr.1: Document this. - - lpd 1999-08-17 added code to allow preprocessor directives - wherever comments are allowed - lpd 1999-04-12 added minor fixes from Pavel Roskin - <pavel_roskin@geocities.com> for clean compilation with - gcc -W -Wall - lpd 1999-03-22 added hack to recognize lines consisting of - identifier1(identifier2, xxx) as *not* being procedures - lpd 1999-02-03 made indentation of preprocessor commands consistent - lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an - endless loop; quoted strings within an argument list - confused the parser - lpd 1999-01-24 added a check for write errors on the output, - suggested by Jim Meyering <meyering@ascend.com> - lpd 1998-11-09 added further hack to recognize identifier(void) - as being a procedure - lpd 1998-10-23 added hack to recognize lines consisting of - identifier1(identifier2) as *not* being procedures - lpd 1997-12-08 made input_file optional; only closes input and/or - output file if not stdin or stdout respectively; prints - usage message on stderr rather than stdout; adds - --filename switch (changes suggested by - <ceder@lysator.liu.se>) - lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with - compilers that don't understand void, as suggested by - Tom Lane - lpd 1996-01-15 changed to require that the first non-comment token - on the line following a function header be a left brace, - to reduce sensitivity to macros, as suggested by Tom Lane - <tgl@sss.pgh.pa.us> - lpd 1995-06-22 removed #ifndefs whose sole purpose was to define - undefined preprocessor symbols as 0; changed all #ifdefs - for configuration symbols to #ifs - lpd 1995-04-05 changed copyright notice to make it clear that - including ansi2knr in a program does not bring the entire - program under the GPL - lpd 1994-12-18 added conditionals for systems where ctype macros - don't handle 8-bit characters properly, suggested by - Francois Pinard <pinard@iro.umontreal.ca>; - removed --varargs switch (this is now the default) - lpd 1994-10-10 removed CONFIG_BROKETS conditional - lpd 1994-07-16 added some conditionals to help GNU `configure', - suggested by Francois Pinard <pinard@iro.umontreal.ca>; - properly erase prototype args in function parameters, - contributed by Jim Avera <jima@netcom.com>; - correct error in writeblanks (it shouldn't erase EOLs) - lpd 1989-xx-xx original version - */ - -/* Most of the conditionals here are to make ansi2knr work with */ -/* or without the GNU configure machinery. */ - -#if HAVE_CONFIG_H -# include <config.h> -#endif - -#include <stdio.h> -#include <ctype.h> - -#if HAVE_CONFIG_H - -/* - For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). - This will define HAVE_CONFIG_H and so, activate the following lines. - */ - -# if STDC_HEADERS || HAVE_STRING_H -# include <string.h> -# else -# include <strings.h> -# endif - -#else /* not HAVE_CONFIG_H */ - -/* Otherwise do it the hard way */ - -# ifdef BSD -# include <strings.h> -# else -# ifdef VMS - extern int strlen(), strncmp(); -# else -# include <string.h> -# endif -# endif - -#endif /* not HAVE_CONFIG_H */ - -#if STDC_HEADERS -# include <stdlib.h> -#else -/* - malloc and free should be declared in stdlib.h, - but if you've got a K&R compiler, they probably aren't. - */ -# ifdef MSDOS -# include <malloc.h> -# else -# ifdef VMS - extern char *malloc(); - extern void free(); -# else - extern char *malloc(); - extern int free(); -# endif -# endif - -#endif - -/* Define NULL (for *very* old compilers). */ -#ifndef NULL -# define NULL (0) -#endif - -/* - * The ctype macros don't always handle 8-bit characters correctly. - * Compensate for this here. - */ -#ifdef isascii -# undef HAVE_ISASCII /* just in case */ -# define HAVE_ISASCII 1 -#else -#endif -#if STDC_HEADERS || !HAVE_ISASCII -# define is_ascii(c) 1 -#else -# define is_ascii(c) isascii(c) -#endif - -#define is_space(c) (is_ascii(c) && isspace(c)) -#define is_alpha(c) (is_ascii(c) && isalpha(c)) -#define is_alnum(c) (is_ascii(c) && isalnum(c)) - -/* Scanning macros */ -#define isidchar(ch) (is_alnum(ch) || (ch) == '_') -#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') - -/* Forward references */ -char *ppdirforward(); -char *ppdirbackward(); -char *skipspace(); -char *scanstring(); -int writeblanks(); -int test1(); -int convert1(); - -/* The main program */ -int -main(argc, argv) - int argc; - char *argv[]; -{ FILE *in = stdin; - FILE *out = stdout; - char *filename = 0; - char *program_name = argv[0]; - char *output_name = 0; -#define bufsize 5000 /* arbitrary size */ - char *buf; - char *line; - char *more; - char *usage = - "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; - /* - * In previous versions, ansi2knr recognized a --varargs switch. - * If this switch was supplied, ansi2knr would attempt to convert - * a ... argument to va_alist and va_dcl; if this switch was not - * supplied, ansi2knr would simply drop any such arguments. - * Now, ansi2knr always does this conversion, and we only - * check for this switch for backward compatibility. - */ - int convert_varargs = 1; - int output_error; - - while ( argc > 1 && argv[1][0] == '-' ) { - if ( !strcmp(argv[1], "--varargs") ) { - convert_varargs = 1; - argc--; - argv++; - continue; - } - if ( !strcmp(argv[1], "--filename") && argc > 2 ) { - filename = argv[2]; - argc -= 2; - argv += 2; - continue; - } - fprintf(stderr, "%s: Unrecognized switch: %s\n", program_name, - argv[1]); - fprintf(stderr, usage); - exit(1); - } - switch ( argc ) - { - default: - fprintf(stderr, usage); - exit(0); - case 3: - output_name = argv[2]; - out = fopen(output_name, "w"); - if ( out == NULL ) { - fprintf(stderr, "%s: Cannot open output file %s\n", - program_name, output_name); - exit(1); - } - /* falls through */ - case 2: - in = fopen(argv[1], "r"); - if ( in == NULL ) { - fprintf(stderr, "%s: Cannot open input file %s\n", - program_name, argv[1]); - exit(1); - } - if ( filename == 0 ) - filename = argv[1]; - /* falls through */ - case 1: - break; - } - if ( filename ) - fprintf(out, "#line 1 \"%s\"\n", filename); - buf = malloc(bufsize); - if ( buf == NULL ) - { - fprintf(stderr, "Unable to allocate read buffer!\n"); - exit(1); - } - line = buf; - while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) - { -test: line += strlen(line); - switch ( test1(buf) ) - { - case 2: /* a function header */ - convert1(buf, out, 1, convert_varargs); - break; - case 1: /* a function */ - /* Check for a { at the start of the next line. */ - more = ++line; -f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ - goto wl; - if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) - goto wl; - switch ( *skipspace(ppdirforward(more), 1) ) - { - case '{': - /* Definitely a function header. */ - convert1(buf, out, 0, convert_varargs); - fputs(more, out); - break; - case 0: - /* The next line was blank or a comment: */ - /* keep scanning for a non-comment. */ - line += strlen(line); - goto f; - default: - /* buf isn't a function header, but */ - /* more might be. */ - fputs(buf, out); - strcpy(buf, more); - line = buf; - goto test; - } - break; - case -1: /* maybe the start of a function */ - if ( line != buf + (bufsize - 1) ) /* overflow check */ - continue; - /* falls through */ - default: /* not a function */ -wl: fputs(buf, out); - break; - } - line = buf; - } - if ( line != buf ) - fputs(buf, out); - free(buf); - if ( output_name ) { - output_error = ferror(out); - output_error |= fclose(out); - } else { /* out == stdout */ - fflush(out); - output_error = ferror(out); - } - if ( output_error ) { - fprintf(stderr, "%s: error writing to %s\n", program_name, - (output_name ? output_name : "stdout")); - exit(1); - } - if ( in != stdin ) - fclose(in); - return 0; -} - -/* - * Skip forward or backward over one or more preprocessor directives. - */ -char * -ppdirforward(p) - char *p; -{ - for (; *p == '#'; ++p) { - for (; *p != '\r' && *p != '\n'; ++p) - if (*p == 0) - return p; - if (*p == '\r' && p[1] == '\n') - ++p; - } - return p; -} -char * -ppdirbackward(p, limit) - char *p; - char *limit; -{ - char *np = p; - - for (;; p = --np) { - if (*np == '\n' && np[-1] == '\r') - --np; - for (; np > limit && np[-1] != '\r' && np[-1] != '\n'; --np) - if (np[-1] == 0) - return np; - if (*np != '#') - return p; - } -} - -/* - * Skip over whitespace, comments, and preprocessor directives, - * in either direction. - */ -char * -skipspace(p, dir) - char *p; - int dir; /* 1 for forward, -1 for backward */ -{ - for ( ; ; ) { - while ( is_space(*p) ) - p += dir; - if ( !(*p == '/' && p[dir] == '*') ) - break; - p += dir; p += dir; - while ( !(*p == '*' && p[dir] == '/') ) { - if ( *p == 0 ) - return p; /* multi-line comment?? */ - p += dir; - } - p += dir; p += dir; - } - return p; -} - -/* Scan over a quoted string, in either direction. */ -char * -scanstring(p, dir) - char *p; - int dir; -{ - for (p += dir; ; p += dir) - if (*p == '"' && p[-dir] != '\\') - return p + dir; -} - -/* - * Write blanks over part of a string. - * Don't overwrite end-of-line characters. - */ -int -writeblanks(start, end) - char *start; - char *end; -{ char *p; - for ( p = start; p < end; p++ ) - if ( *p != '\r' && *p != '\n' ) - *p = ' '; - return 0; -} - -/* - * Test whether the string in buf is a function definition. - * The string may contain and/or end with a newline. - * Return as follows: - * 0 - definitely not a function definition; - * 1 - definitely a function definition; - * 2 - definitely a function prototype (NOT USED); - * -1 - may be the beginning of a function definition, - * append another line and look again. - * The reason we don't attempt to convert function prototypes is that - * Ghostscript's declaration-generating macros look too much like - * prototypes, and confuse the algorithms. - */ -int -test1(buf) - char *buf; -{ char *p = buf; - char *bend; - char *endfn; - int contin; - - if ( !isidfirstchar(*p) ) - return 0; /* no name at left margin */ - bend = skipspace(ppdirbackward(buf + strlen(buf) - 1, buf), -1); - switch ( *bend ) - { - case ';': contin = 0 /*2*/; break; - case ')': contin = 1; break; - case '{': return 0; /* not a function */ - case '}': return 0; /* not a function */ - default: contin = -1; - } - while ( isidchar(*p) ) - p++; - endfn = p; - p = skipspace(p, 1); - if ( *p++ != '(' ) - return 0; /* not a function */ - p = skipspace(p, 1); - if ( *p == ')' ) - return 0; /* no parameters */ - /* Check that the apparent function name isn't a keyword. */ - /* We only need to check for keywords that could be followed */ - /* by a left parenthesis (which, unfortunately, is most of them). */ - { static char *words[] = - { "asm", "auto", "case", "char", "const", "double", - "extern", "float", "for", "if", "int", "long", - "register", "return", "short", "signed", "sizeof", - "static", "switch", "typedef", "unsigned", - "void", "volatile", "while", 0 - }; - char **key = words; - char *kp; - unsigned len = endfn - buf; - - while ( (kp = *key) != 0 ) - { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) - return 0; /* name is a keyword */ - key++; - } - } - { - char *id = p; - int len; - /* - * Check for identifier1(identifier2) and not - * identifier1(void), or identifier1(identifier2, xxxx). - */ - - while ( isidchar(*p) ) - p++; - len = p - id; - p = skipspace(p, 1); - if (*p == ',' || - (*p == ')' && (len != 4 || strncmp(id, "void", 4))) - ) - return 0; /* not a function */ - } - /* - * If the last significant character was a ), we need to count - * parentheses, because it might be part of a formal parameter - * that is a procedure. - */ - if (contin > 0) { - int level = 0; - - for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1)) - level += (*p == '(' ? 1 : *p == ')' ? -1 : 0); - if (level > 0) - contin = -1; - } - return contin; -} - -/* Convert a recognized function definition or header to K&R syntax. */ -int -convert1(buf, out, header, convert_varargs) - char *buf; - FILE *out; - int header; /* Boolean */ - int convert_varargs; /* Boolean */ -{ char *endfn; - char *p; - /* - * The breaks table contains pointers to the beginning and end - * of each argument. - */ - char **breaks; - unsigned num_breaks = 2; /* for testing */ - char **btop; - char **bp; - char **ap; - char *vararg = 0; - - /* Pre-ANSI implementations don't agree on whether strchr */ - /* is called strchr or index, so we open-code it here. */ - for ( endfn = buf; *(endfn++) != '('; ) - ; -top: p = endfn; - breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); - if ( breaks == NULL ) - { /* Couldn't allocate break table, give up */ - fprintf(stderr, "Unable to allocate break table!\n"); - fputs(buf, out); - return -1; - } - btop = breaks + num_breaks * 2 - 2; - bp = breaks; - /* Parse the argument list */ - do - { int level = 0; - char *lp = NULL; - char *rp = NULL; - char *end = NULL; - - if ( bp >= btop ) - { /* Filled up break table. */ - /* Allocate a bigger one and start over. */ - free((char *)breaks); - num_breaks <<= 1; - goto top; - } - *bp++ = p; - /* Find the end of the argument */ - for ( ; end == NULL; p++ ) - { switch(*p) - { - case ',': - if ( !level ) end = p; - break; - case '(': - if ( !level ) lp = p; - level++; - break; - case ')': - if ( --level < 0 ) end = p; - else rp = p; - break; - case '/': - if (p[1] == '*') - p = skipspace(p, 1) - 1; - break; - case '"': - p = scanstring(p, 1) - 1; - break; - default: - ; - } - } - /* Erase any embedded prototype parameters. */ - if ( lp && rp ) - writeblanks(lp + 1, rp); - p--; /* back up over terminator */ - /* Find the name being declared. */ - /* This is complicated because of procedure and */ - /* array modifiers. */ - for ( ; ; ) - { p = skipspace(p - 1, -1); - switch ( *p ) - { - case ']': /* skip array dimension(s) */ - case ')': /* skip procedure args OR name */ - { int level = 1; - while ( level ) - switch ( *--p ) - { - case ']': case ')': - level++; - break; - case '[': case '(': - level--; - break; - case '/': - if (p > buf && p[-1] == '*') - p = skipspace(p, -1) + 1; - break; - case '"': - p = scanstring(p, -1) + 1; - break; - default: ; - } - } - if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) - { /* We found the name being declared */ - while ( !isidfirstchar(*p) ) - p = skipspace(p, 1) + 1; - goto found; - } - break; - default: - goto found; - } - } -found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) - { if ( convert_varargs ) - { *bp++ = "va_alist"; - vararg = p-2; - } - else - { p++; - if ( bp == breaks + 1 ) /* sole argument */ - writeblanks(breaks[0], p); - else - writeblanks(bp[-1] - 1, p); - bp--; - } - } - else - { while ( isidchar(*p) ) p--; - *bp++ = p+1; - } - p = end; - } - while ( *p++ == ',' ); - *bp = p; - /* Make a special check for 'void' arglist */ - if ( bp == breaks+2 ) - { p = skipspace(breaks[0], 1); - if ( !strncmp(p, "void", 4) ) - { p = skipspace(p+4, 1); - if ( p == breaks[2] - 1 ) - { bp = breaks; /* yup, pretend arglist is empty */ - writeblanks(breaks[0], p + 1); - } - } - } - /* Put out the function name and left parenthesis. */ - p = buf; - while ( p != endfn ) putc(*p, out), p++; - /* Put out the declaration. */ - if ( header ) - { fputs(");", out); - for ( p = breaks[0]; *p; p++ ) - if ( *p == '\r' || *p == '\n' ) - putc(*p, out); - } - else - { for ( ap = breaks+1; ap < bp; ap += 2 ) - { p = *ap; - while ( isidchar(*p) ) - putc(*p, out), p++; - if ( ap < bp - 1 ) - fputs(", ", out); - } - fputs(") ", out); - /* Put out the argument declarations */ - for ( ap = breaks+2; ap <= bp; ap += 2 ) - (*ap)[-1] = ';'; - if ( vararg != 0 ) - { *vararg = 0; - fputs(breaks[0], out); /* any prior args */ - fputs("va_dcl", out); /* the final arg */ - fputs(bp[0], out); - } - else - fputs(breaks[0], out); - } - free((char *)breaks); - return 0; -} -- cgit v0.12 From 9b142a07a7576afa15ba458e97935aac5921ef8d Mon Sep 17 00:00:00 2001 From: Jason McDonald <jason.mcdonald@nokia.com> Date: Tue, 20 Jul 2010 12:35:00 +1000 Subject: Remove some files as instructed by Legal department. Task-number: QT-3613 (cherry picked from commit 2c574ed1bf9943130fb9af5435b557a47e3c462b) --- .../qimagereader/images/pngwithcompressedtext.png | Bin 757 -> 0 bytes tests/auto/qimagereader/images/pngwithtext.png | Bin 796 -> 0 bytes tests/auto/qimagereader/qimagereader.qrc | 2 - tests/auto/qimagereader/tst_qimagereader.cpp | 56 --------------------- tests/auto/qimagewriter/tst_qimagewriter.cpp | 38 -------------- .../qimagereader/images/pngwithcompressedtext.png | Bin 757 -> 0 bytes .../gui/image/qimagereader/images/pngwithtext.png | Bin 796 -> 0 bytes 7 files changed, 96 deletions(-) delete mode 100644 tests/auto/qimagereader/images/pngwithcompressedtext.png delete mode 100644 tests/auto/qimagereader/images/pngwithtext.png delete mode 100644 tests/benchmarks/gui/image/qimagereader/images/pngwithcompressedtext.png delete mode 100644 tests/benchmarks/gui/image/qimagereader/images/pngwithtext.png diff --git a/tests/auto/qimagereader/images/pngwithcompressedtext.png b/tests/auto/qimagereader/images/pngwithcompressedtext.png deleted file mode 100644 index 01b2270..0000000 Binary files a/tests/auto/qimagereader/images/pngwithcompressedtext.png and /dev/null differ diff --git a/tests/auto/qimagereader/images/pngwithtext.png b/tests/auto/qimagereader/images/pngwithtext.png deleted file mode 100644 index 5d93799..0000000 Binary files a/tests/auto/qimagereader/images/pngwithtext.png and /dev/null differ diff --git a/tests/auto/qimagereader/qimagereader.qrc b/tests/auto/qimagereader/qimagereader.qrc index 278427b..1acc82f 100644 --- a/tests/auto/qimagereader/qimagereader.qrc +++ b/tests/auto/qimagereader/qimagereader.qrc @@ -38,8 +38,6 @@ <file>images/noclearcode.bmp</file> <file>images/noclearcode.gif</file> <file>images/nontransparent.xpm</file> - <file>images/pngwithcompressedtext.png</file> - <file>images/pngwithtext.png</file> <file>images/runners.ppm</file> <file>images/teapot.ppm</file> <file>images/test.ppm</file> diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp index fe2a719..d8071da 100644 --- a/tests/auto/qimagereader/tst_qimagereader.cpp +++ b/tests/auto/qimagereader/tst_qimagereader.cpp @@ -123,9 +123,6 @@ private slots: void supportsAnimation_data(); void supportsAnimation(); - void description_data(); - void description(); - void readFromResources_data(); void readFromResources(); @@ -1236,53 +1233,6 @@ void tst_QImageReader::devicePosition() } -void tst_QImageReader::description_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QStringMap>("description"); - - QMap<QString, QString> willem; - willem["Title"] = "PngSuite"; - willem["Author"] = "Willem A.J. van Schaik (gwillem@ntuvax.ntu.ac.sg)"; - willem["Copyright"] = "Copyright Willem van Schaik, Singapore 1995"; - willem["Description"] = "A compilation of a set of images created to test the " - "various color-types of the PNG format. Included are " - "black&white, color, paletted, with alpha channel, with " - "transparency formats. All bit-depths allowed according " - "to the spec are present."; - willem["Software"] = "Created on a NeXTstation color using \"pnmtopng\"."; - willem["Disclaimer"] = "Freeware."; - - QTest::newRow("PNG") << QString("pngwithtext.png") << willem; - QTest::newRow("PNG Compressed") << QString("pngwithcompressedtext.png") << willem; -} - -void tst_QImageReader::description() -{ - QFETCH(QString, fileName); - QFETCH(QStringMap, description); - - // Sanity check - QVERIFY(!QImage(prefix + fileName).isNull()); - - QImageReader reader(prefix + fileName); - - foreach (QString key, description.keys()) - QCOMPARE(reader.text(key), description.value(key)); - QCOMPARE(reader.textKeys(), QStringList(description.keys())); - - QImage image = reader.read(); - QVERIFY(!image.isNull()); - - foreach (QString key, description.keys()) - QCOMPARE(image.text(key), description.value(key)); - QCOMPARE(image.textKeys(), QStringList(description.keys())); - - foreach (QString key, description.keys()) - QCOMPARE(reader.text(key), description.value(key)); - QCOMPARE(reader.textKeys(), QStringList(description.keys())); -} - void tst_QImageReader::readFromResources_data() { QTest::addColumn<QString>("fileName"); @@ -1388,12 +1338,6 @@ void tst_QImageReader::readFromResources_data() QTest::newRow("image.png") << QString("image.png") << QByteArray("png") << QSize(22, 22) << QString(""); - QTest::newRow("pngwithcompressedtext.png") << QString("pngwithcompressedtext.png") - << QByteArray("png") << QSize(32, 32) - << QString(""); - QTest::newRow("pngwithtext.png") << QString("pngwithtext.png") - << QByteArray("png") << QSize(32, 32) - << QString(""); QTest::newRow("kollada.png") << QString("kollada.png") << QByteArray("png") << QSize(436, 160) << QString(""); diff --git a/tests/auto/qimagewriter/tst_qimagewriter.cpp b/tests/auto/qimagewriter/tst_qimagewriter.cpp index c4860c3..c6ec715 100644 --- a/tests/auto/qimagewriter/tst_qimagewriter.cpp +++ b/tests/auto/qimagewriter/tst_qimagewriter.cpp @@ -93,9 +93,6 @@ private slots: void largeTiff(); #endif - void setDescription_data(); - void setDescription(); - void writeToInvalidDevice(); void supportsOption_data(); @@ -420,41 +417,6 @@ void tst_QImageWriter::readWriteNonDestructive() QCOMPARE(image, image2); } -void tst_QImageWriter::setDescription_data() -{ - QTest::addColumn<QString>("fileName"); - QTest::addColumn<QStringMap>("description"); - - QMap<QString, QString> willem; - willem["Title"] = "PngSuite"; - willem["Author"] = "Willem A.J. van Schaik (willem@schaik.com)"; - willem["Copyright"] = "Copyright Willem van Schaik, Singapore 1995-96"; - willem["Description"] = "A compilation of a set of images created to test the " - "various color-types of the PNG format. Included are " - "black&white, color, paletted, with alpha channel, with " - "transparency formats. All bit-depths allowed according " - "to the spec are present."; - willem["Software"] = "Created on a NeXTstation color using \"pnmtopng\"."; - willem["Disclaimer"] = "Freeware."; - - QTest::newRow("PNG") << prefix + QString("gen-pngwithtext.png") << willem; -} - -void tst_QImageWriter::setDescription() -{ - QFETCH(QString, fileName); - QFETCH(QStringMap, description); - - QImageWriter writer(fileName, "png"); - foreach (QString key, description.keys()) - writer.setText(key, description.value(key)); - QVERIFY(writer.write(QImage(prefix + "kollada.png"))); - - QImageReader reader(fileName); - foreach (QString key, description.keys()) - QCOMPARE(reader.text(key), description.value(key)); -} - void tst_QImageWriter::writeToInvalidDevice() { QLatin1String fileName("/these/directories/do/not/exist/001.png"); diff --git a/tests/benchmarks/gui/image/qimagereader/images/pngwithcompressedtext.png b/tests/benchmarks/gui/image/qimagereader/images/pngwithcompressedtext.png deleted file mode 100644 index 01b2270..0000000 Binary files a/tests/benchmarks/gui/image/qimagereader/images/pngwithcompressedtext.png and /dev/null differ diff --git a/tests/benchmarks/gui/image/qimagereader/images/pngwithtext.png b/tests/benchmarks/gui/image/qimagereader/images/pngwithtext.png deleted file mode 100644 index 5d93799..0000000 Binary files a/tests/benchmarks/gui/image/qimagereader/images/pngwithtext.png and /dev/null differ -- cgit v0.12 From 9d11514cd9a07489b704615e7a8cf41a43a4598d Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Tue, 20 Jul 2010 11:23:25 +0200 Subject: Fix a Headerview layout bug When the sections were moved calling logicalIndex on what was already a logical index messed up the hidden sections. Task-number: QTBUG-12268 Reviewed-by: Gabriel (cherry picked from commit 8517f787b798d9e300438404aab359de2acc0978) --- src/gui/itemviews/qheaderview.cpp | 2 +- tests/auto/qheaderview/tst_qheaderview.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/gui/itemviews/qheaderview.cpp b/src/gui/itemviews/qheaderview.cpp index cd9ee15..67854a3 100644 --- a/src/gui/itemviews/qheaderview.cpp +++ b/src/gui/itemviews/qheaderview.cpp @@ -1871,7 +1871,7 @@ void QHeaderViewPrivate::_q_layoutChanged() for (int i = 0; i < oldSectionHidden.count(); ++i) { if (oldSectionHidden.testBit(i)) - q->setSectionHidden(logicalIndex(i), false); + q->setSectionHidden(i, false); } // the number of sections changed; we need to reread the state of the model diff --git a/tests/auto/qheaderview/tst_qheaderview.cpp b/tests/auto/qheaderview/tst_qheaderview.cpp index f6cd4e3..da0a0bb 100644 --- a/tests/auto/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/qheaderview/tst_qheaderview.cpp @@ -193,6 +193,7 @@ private slots: void QTBUG6058_reset(); void QTBUG7833_sectionClicked(); void QTBUG8650_crashOnInsertSections(); + void QTBUG12268_hiddenMovedSectionSorting(); protected: QHeaderView *view; @@ -2071,5 +2072,25 @@ void tst_QHeaderView::QTBUG8650_crashOnInsertSections() model.insertColumn(0, items); } +void tst_QHeaderView::QTBUG12268_hiddenMovedSectionSorting() +{ + QTableView view; + QStandardItemModel *model = new QStandardItemModel(4,3, &view); + for (int i = 0; i< model->rowCount(); ++i) + for (int j = 0; j< model->columnCount(); ++j) + model->setData(model->index(i,j), QString("item [%1,%2]").arg(i).arg(j)); + view.setModel(model); + view.horizontalHeader()->setMovable(true); + view.setSortingEnabled(true); + view.sortByColumn(1, Qt::AscendingOrder); + view.horizontalHeader()->moveSection(0,2); + view.setColumnHidden(1, true); + view.show(); + QTest::qWaitForWindowShown(&view); + QCOMPARE(view.horizontalHeader()->hiddenSectionCount(), 1); + QTest::mouseClick(view.horizontalHeader()->viewport(), Qt::LeftButton); + QCOMPARE(view.horizontalHeader()->hiddenSectionCount(), 1); +} + QTEST_MAIN(tst_QHeaderView) #include "tst_qheaderview.moc" -- cgit v0.12 From cec1dda330bff7203c128eafb109f4f804897610 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 19 Jul 2010 16:44:26 +0200 Subject: Fixed a QSplashScreen hanging bug in S60 3.1 devices. QSymbianBitmapDataAccess is used to provide access to the bitmap heap in a manner that locks correctly on all platform versions. The heapWasLocked variable was meant to protect against the case where the heap is locked recursively. However, it failed to take into account the case where the same QSymbianBitmapDataAccess object was used to lock recursively. In this case the variable would be changed to true on the second lock, which means that the lock would never be released again. This was fixed by making the access reference counted instead. Since the bitmap heap lock is global, the refcount was made global as well. Task: QTBUG-11129 RevBy: Jason Barron AutoTest: Works again. It was hanging before this fix. (cherry picked from commit d4cc1dcea5b4116767cfee0ec45bfba72dc011ff) --- src/gui/image/qpixmap_s60.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp index a13c8c8..9d571b5 100644 --- a/src/gui/image/qpixmap_s60.cpp +++ b/src/gui/image/qpixmap_s60.cpp @@ -157,10 +157,10 @@ class QSymbianBitmapDataAccess { public: - bool heapWasLocked; + static int heapRefCount; QSysInfo::SymbianVersion symbianVersion; - explicit QSymbianBitmapDataAccess() : heapWasLocked(false) + explicit QSymbianBitmapDataAccess() { symbianVersion = QSysInfo::symbianVersion(); }; @@ -169,16 +169,22 @@ public: inline void beginDataAccess(CFbsBitmap *bitmap) { - if (symbianVersion == QSysInfo::SV_9_2) - heapWasLocked = qt_symbianFbsClient()->lockHeap(); - else + if (symbianVersion == QSysInfo::SV_9_2) { + if (heapRefCount == 0) + qt_symbianFbsClient()->lockHeap(); + } else { bitmap->LockHeap(ETrue); + } + + heapRefCount++; } inline void endDataAccess(CFbsBitmap *bitmap) { + heapRefCount--; + if (symbianVersion == QSysInfo::SV_9_2) { - if (!heapWasLocked) + if (heapRefCount == 0) qt_symbianFbsClient()->unlockHeap(); } else { bitmap->UnlockHeap(ETrue); @@ -186,6 +192,8 @@ public: } }; +int QSymbianBitmapDataAccess::heapRefCount = 0; + #define UPDATE_BUFFER() \ { \ -- cgit v0.12 From 609435eddf02a9321c25f385b91852a47d9152f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com> Date: Tue, 20 Jul 2010 11:40:48 +0200 Subject: Do not crash due to a infinite recursion when using voiceover on MacOS The reason for the infinite recursion was that QAccessibleTitleBar::object() returned the titlebar's dockwidget. This could lead to a problem when the AT client tried to traverse the accessibility hierarchy: As a response to QAXChildrenAttribute (retrieve children) on a dock widget node, it would register it's children in the hierarchy manager. In this case, the object registered for the titlebar interface was the QDockWidget. In order to do further traversal, the bridge could call queryAccessibleInterface on the list of retrieved children to get the QAccessibleInterface for those objects, however, that would return the QAccessibleDockWidget interface that we just had traversed,.... Task-number: QTBUG-6843 Reviewed-by: Carlos Manuel Duclos Vergara (cherry picked from commit 64b9e63f4f9162c1af299b1355e84b0e616ad768) --- src/plugins/accessible/widgets/qaccessiblewidgets.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp index 499eb1d..662663d 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp +++ b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp @@ -984,7 +984,7 @@ int QAccessibleDockWidget::childCount() const int QAccessibleDockWidget::indexOfChild(const QAccessibleInterface *child) const { if (child) { - if (qobject_cast<QDockWidget *>(child->object()) == dockWidget() && child->role(0) == TitleBar) { + if (child->role(0) == TitleBar) { return 1; } else { return 2; //### @@ -1214,7 +1214,7 @@ int QAccessibleTitleBar::childAt(int x, int y) const QObject *QAccessibleTitleBar::object() const { - return m_dockWidget; + return 0; } QDockWidgetLayout *QAccessibleTitleBar::dockWidgetLayout() const -- cgit v0.12 From 39972703212b5580c9f4fbd2c6ce698f52d35ca0 Mon Sep 17 00:00:00 2001 From: Charles Yin <charles.yin@nokia.com> Date: Fri, 16 Jul 2010 11:15:06 +1000 Subject: Fixes the Oracle nchar bug when NLS_CHARSET is different with NLS_NCHAR_CHARSET. If Oracle national char types use different charset(NLS_NCHAR_CHARSET) with the database charset (NLS_CHARSET), the oci client need to set OCI_ATTR_CHARSET_FORM to SQLCS_NCHAR instead of SQLCS_IMPLICIT. Task-number: QTBUG-10919 Reviewed-by: Michael Goddard (cherry picked from commit f8f255553f3640355d3e196e100778256741701c) --- src/sql/drivers/oci/qsql_oci.cpp | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp index c56b995..e11cf75 100644 --- a/src/sql/drivers/oci/qsql_oci.cpp +++ b/src/sql/drivers/oci/qsql_oci.cpp @@ -93,8 +93,17 @@ enum { QOCIEncoding = 2002 }; // AL16UTF16LE enum { QOCIEncoding = 2000 }; // AL16UTF16 #endif -static const ub1 CSID_NCHAR = SQLCS_NCHAR; +// Always set the OCI_ATTR_CHARSET_FORM to SQLCS_NCHAR is safe +// because Oracle server will deal with the implicit Conversion +// Between CHAR and NCHAR. +// see: http://download.oracle.com/docs/cd/A91202_01/901_doc/appdev.901/a89857/oci05bnd.htm#422705 +static const ub1 qOraCharsetForm = SQLCS_NCHAR; + +#if defined (OCI_UTF16ID) +static const ub2 qOraCharset = OCI_UTF16ID; +#else static const ub2 qOraCharset = OCI_UCS2ID; +#endif typedef QVarLengthArray<sb2, 32> IndicatorArray; typedef QVarLengthArray<ub2, 32> SizeArray; @@ -209,12 +218,24 @@ void QOCIResultPrivate::setCharset(OCIBind* hbnd) OCI_HTYPE_BIND, // this const cast is safe since OCI doesn't touch // the charset. + const_cast<void *>(static_cast<const void *>(&qOraCharsetForm)), + 0, + OCI_ATTR_CHARSET_FORM, + err); + if (r != 0) + qOraWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_FORM: ", err); + + r = OCIAttrSet(hbnd, + OCI_HTYPE_BIND, + // this const cast is safe since OCI doesn't touch + // the charset. const_cast<void *>(static_cast<const void *>(&qOraCharset)), 0, OCI_ATTR_CHARSET_ID, err); if (r != 0) qOraWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_ID: ", err); + } int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos, @@ -939,6 +960,17 @@ void QOCICols::setCharset(OCIDefine* dfn) OCI_HTYPE_DEFINE, // this const cast is safe since OCI doesn't touch // the charset. + const_cast<void *>(static_cast<const void *>(&qOraCharsetForm)), + 0, + OCI_ATTR_CHARSET_FORM, + d->err); + if (r != 0) + qOraWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_FORM: ", d->err); + + r = OCIAttrSet(dfn, + OCI_HTYPE_DEFINE, + // this const cast is safe since OCI doesn't touch + // the charset. const_cast<void *>(static_cast<const void *>(&qOraCharset)), 0, OCI_ATTR_CHARSET_ID, -- cgit v0.12 From 451674e6b66cc03853e40878a7548810e3242c7f Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 15 Jul 2010 11:26:14 +0200 Subject: Removed the need to specify -arch symbian when compiling on Linux. Task: QTBUG-11385 RevBy: Jason Barron (cherry picked from commit d9e75d77ac3da86c32d280895beac2936d8869ca) --- configure | 2 ++ doc/src/snippets/code/doc_src_installation.qdoc | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 2b4cb44..921189f 100755 --- a/configure +++ b/configure @@ -2935,6 +2935,8 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then esac elif [ "$XPLATFORM_MINGW" = "yes" ]; then [ -z "$CFG_ARCH" ] && CFG_ARCH="windows" +elif echo "$XPLATFORM" | grep symbian > /dev/null; then + CFG_ARCH=symbian elif [ "$PLATFORM_MAC" = "yes" ] || [ -z "$CFG_ARCH" ]; then CFG_ARCH=$CFG_HOST_ARCH fi diff --git a/doc/src/snippets/code/doc_src_installation.qdoc b/doc/src/snippets/code/doc_src_installation.qdoc index c46159c..0593567 100644 --- a/doc/src/snippets/code/doc_src_installation.qdoc +++ b/doc/src/snippets/code/doc_src_installation.qdoc @@ -250,12 +250,12 @@ export PATH //! [38] cd /home/user/qt/%VERSION% -./configure -platform linux-g++ -xplatform symbian/linux-armcc -arch symbian +./configure -platform linux-g++ -xplatform symbian/linux-armcc //! [38] //! [39] cd /home/user/qt/%VERSION% -./configure -platform linux-g++ -xplatform symbian/linux-gcce -arch symbian -no-webkit +./configure -platform linux-g++ -xplatform symbian/linux-gcce -no-webkit //! [39] //! [40] -- cgit v0.12 From 6055ab433010dfb5b09feac0e523bb161e043a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= <bjorn.nilsen@nokia.com> Date: Tue, 20 Jul 2010 10:32:59 +0200 Subject: QGraphicsItem: Animation leaves drawing artifacts when clipping is used. This only happens when the ItemHasNoContents and ItemClipsChildrenToShape flags are set. Problem is that items with no content are threated as 'dummy' items, which means they are never drawn or 'processed' otherwise, so the cached bounding rect is not reliable/usable. This means that in case of changing the geometry of such items, its children always have to take care of invalidating the occupied areas and the update can not be clipped to the item's bounding rect. Regression after commit: c1c7dbf2 Auto test included. Task-number: QTBUG-11504 Reviewed-by: yoann (cherry picked from commit 4df9c96e2c213c39924e22e02621b0c61e83f8fe) --- src/gui/graphicsview/qgraphicsscene.cpp | 7 ++- tests/auto/qgraphicsview/tst_qgraphicsview.cpp | 73 ++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 4bc7f4c..48a0093 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -5178,7 +5178,12 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool // Process children. if (itemHasChildren && item->d_ptr->dirtyChildren) { const bool itemClipsChildrenToShape = item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape; - if (itemClipsChildrenToShape) { + // Items with no content are threated as 'dummy' items which means they are never drawn and + // 'processed', so the painted view bounding rect is never up-to-date. This means that whenever + // such an item changes geometry, its children have to take care of the update regardless + // of whether the item clips children to shape or not. + const bool bypassUpdateClip = !itemHasContents && wasDirtyParentViewBoundingRects; + if (itemClipsChildrenToShape && !bypassUpdateClip) { // Make sure child updates are clipped to the item's bounding rect. for (int i = 0; i < views.size(); ++i) views.at(i)->d_func()->setUpdateClip(item); diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index b8df7f6..1cce687 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -219,6 +219,7 @@ private slots: void update2_data(); void update2(); void update_ancestorClipsChildrenToShape(); + void update_ancestorClipsChildrenToShape2(); void inputMethodSensitivity(); void inputContextReset(); void indirectPainting(); @@ -3815,6 +3816,78 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape() #endif } +void tst_QGraphicsView::update_ancestorClipsChildrenToShape2() +{ + QGraphicsScene scene(-150, -150, 300, 300); + + /* + Add two rects: + + +------------------+ + | child | + | +--------------+ | + | | parent | | + | | | | + | | | | + | | | | + | +--------------+ | + +------------------+ + + ... where the parent has no contents and clips the child to shape. + */ + QApplication::processEvents(); // Get rid of pending update. + + QGraphicsRectItem *parent = static_cast<QGraphicsRectItem *>(scene.addRect(-50, -50, 100, 100)); + parent->setBrush(QColor(0, 0, 255, 125)); + parent->setFlag(QGraphicsItem::ItemClipsChildrenToShape); + parent->setFlag(QGraphicsItem::ItemHasNoContents); + + QGraphicsRectItem *child = static_cast<QGraphicsRectItem *>(scene.addRect(-100, -100, 200, 200)); + child->setBrush(QColor(255, 0, 0, 125)); + child->setParentItem(parent); + + CustomView view(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(view.painted); + + view.lastUpdateRegions.clear(); + view.painted = false; + + // Call child->update() and make sure the updated area is within its parent's clip. + QRectF expected = child->deviceTransform(view.viewportTransform()).mapRect(child->boundingRect()); + expected &= parent->deviceTransform(view.viewportTransform()).mapRect(parent->boundingRect()); + + child->update(); + QTRY_VERIFY(view.painted); + +#ifndef QT_MAC_USE_COCOA //cocoa doesn't support drawing regions + QTRY_VERIFY(view.painted); + QCOMPARE(view.lastUpdateRegions.size(), 1); + QCOMPARE(view.lastUpdateRegions.at(0), QRegion(expected.toAlignedRect())); +#endif + + QTest::qWait(50); + + view.lastUpdateRegions.clear(); + view.painted = false; + + // Invalidate the parent's geometry and trigger an update. + // The update area should be clipped to the parent's bounding rect for 'normal' items, + // but in this case the item has no contents (ItemHasNoContents) and its geometry + // is invalidated, which means we cannot clip the child update. So, the expected + // area is exactly the same as the child's bounding rect (adjusted for antialiasing). + parent->setRect(parent->rect().adjusted(-10, -10, -10, -10)); + expected = child->deviceTransform(view.viewportTransform()).mapRect(child->boundingRect()); + expected.adjust(-2, -2, 2, 2); // Antialiasing + +#ifndef QT_MAC_USE_COCOA //cocoa doesn't support drawing regions + QTRY_VERIFY(view.painted); + QCOMPARE(view.lastUpdateRegions.size(), 1); + QCOMPARE(view.lastUpdateRegions.at(0), QRegion(expected.toAlignedRect())); +#endif +} + class FocusItem : public QGraphicsRectItem { public: -- cgit v0.12 From 4710ae6730a5fbfc085fdc766a15b94f403f4d27 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Wed, 21 Jul 2010 16:13:58 +0200 Subject: Made developer builds use the build dir as prefix, also on Symbian. Otherwise it is not possible to build projects outside of the Qt tree without installing Qt to the SDK first. Task: QTBUG-11727 RevBy: Trust me (cherry picked from commit 11d626de5fd87fc8cbd9d685bde8217c7ad7fae6) --- configure | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 921189f..3198998 100755 --- a/configure +++ b/configure @@ -3218,25 +3218,21 @@ fi #prefix if [ -z "$QT_INSTALL_PREFIX" ]; then - if [ -d "$EPOCROOT" ]; then + if [ "$CFG_DEV" = "yes" ]; then + QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default + elif [ "$PLATFORM_QWS" = "yes" ]; then + QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}" + if [ "$PLATFORM" != "$XPLATFORM" ]; then + QT_INSTALL_PREFIX="${QT_INSTALL_PREFIX}-${CFG_ARCH}" + fi + elif [ -d "$EPOCROOT" ]; then case "$XPLATFORM" in *symbian*) QT_INSTALL_PREFIX="$EPOCROOT/epoc32/" QT_INSTALL_LIBS="$EPOCROOT/epoc32/release/armv5/lib/" ;; esac - fi - - if [ -z "$QT_INSTALL_PREFIX" ]; then # still empty - if [ "$CFG_DEV" = "yes" ]; then - QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default - elif [ "$PLATFORM_QWS" = "yes" ]; then - QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}" - if [ "$PLATFORM" != "$XPLATFORM" ]; then - QT_INSTALL_PREFIX="${QT_INSTALL_PREFIX}-${CFG_ARCH}" - fi - else - QT_INSTALL_PREFIX="/usr/local/Trolltech/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Trolltech/Qt-$QT_VERSION - fi + else + QT_INSTALL_PREFIX="/usr/local/Trolltech/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Trolltech/Qt-$QT_VERSION fi fi QT_INSTALL_PREFIX=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_PREFIX"` -- cgit v0.12 From cc9a1a316d29993ffbe9b36d923021e66e92a832 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Tue, 20 Jul 2010 12:29:19 +0200 Subject: doc: Fix qdoc errors for text related files QTextBlock::layoutDirection() doesn't exist, and the QStaticText constructor no longer takes a size argument. Task-number: QTBUG-12072 Reviewed-by: Fabien Freling (cherry picked from commit 04bc2b1f37750a2afbb88521001758249a8df383) --- src/gui/text/qstatictext.cpp | 4 +--- src/gui/text/qtextobject.cpp | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp index 91a6612..7dc4355 100644 --- a/src/gui/text/qstatictext.cpp +++ b/src/gui/text/qstatictext.cpp @@ -148,9 +148,7 @@ QStaticText::QStaticText() } /*! - Constructs a QStaticText object with the given \a text and bounded by the given \a size. - - If an invalid size is passed for \a size the text will be unbounded. + Constructs a QStaticText object with the given \a text. */ QStaticText::QStaticText(const QString &text) : data(new QStaticTextPrivate) diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index f386871..5fb3384 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -1148,7 +1148,7 @@ int QTextBlock::charFormatIndex() const direction from the blocks content. Returns either Qt::LeftToRight or Qt::RightToLeft. - \sa QTextBlock::layoutDirection(), QString::isRightToLeft(), Qt::LayoutDirection + \sa QTextFormat::layoutDirection(), QString::isRightToLeft(), Qt::LayoutDirection */ Qt::LayoutDirection QTextBlock::textDirection() const { -- cgit v0.12 From a4cddbb9265e451b89067199001ee2124d833cbb Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Mon, 19 Jul 2010 17:04:06 +0200 Subject: moc: Slot with complex template default value does not compile The way we detect the end of a default argument does not take in account template parametter. It is unfortunatelly not trivial to do it properly without semantic information So we will use heuristics and if the number of < matches the number of > we consider it is a template. Or if we have a '=' we consider it is not a template. Task-number: QTBUG-12260 Reviewed-by: Roberto Raggi (cherry picked from commit 4da1a3b63445c04d4ca4acae448e9b6b046938c3) --- src/tools/moc/moc.cpp | 22 +++++++++++++++++++++- tests/auto/moc/tst_moc.cpp | 15 +++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 10a80f3..84d1567 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -1208,6 +1208,12 @@ bool Moc::until(Token target) { default: break; } } + + //when searching commas within the default argument, we should take care of template depth (anglecount) + // unfortunatelly, we do not have enough semantic information to know if '<' is the operator< or + // the begining of a template type. so we just use heuristics. + int possible = -1; + while (index < symbols.size()) { Token t = symbols.at(index++).token; switch (t) { @@ -1226,8 +1232,16 @@ bool Moc::until(Token target) { && braceCount <= 0 && brackCount <= 0 && parenCount <= 0 - && (target != RANGLE || angleCount <= 0)) + && (target != RANGLE || angleCount <= 0)) { + if (target != COMMA || angleCount <= 0) + return true; + possible = index; + } + + if (target == COMMA && t == EQ && possible != -1) { + index = possible; return true; + } if (braceCount < 0 || brackCount < 0 || parenCount < 0 || (target == RANGLE && angleCount < 0)) { @@ -1235,6 +1249,12 @@ bool Moc::until(Token target) { break; } } + + if(target == COMMA && angleCount != 0 && possible != -1) { + index = possible; + return true; + } + return false; } diff --git a/tests/auto/moc/tst_moc.cpp b/tests/auto/moc/tst_moc.cpp index 19f3677..4fcc7bd 100644 --- a/tests/auto/moc/tst_moc.cpp +++ b/tests/auto/moc/tst_moc.cpp @@ -491,6 +491,7 @@ private slots: void typenameWithUnsigned(); void warnOnVirtualSignal(); void QTBUG5590_dummyProperty(); + void QTBUG12260_defaultTemplate(); signals: void sigWithUnsignedArg(unsigned foo); void sigWithSignedArg(signed foo); @@ -1340,6 +1341,20 @@ signals: void testSignal(TestTemplate2<const int, const short*>); }; +class QTBUG12260_defaultTemplate_Object : public QObject +{ Q_OBJECT +public slots: + void doSomething(QHash<QString, QVariant> values = QHash<QString, QVariant>()) { Q_UNUSED(values); } + void doAnotherThing(bool a = (1 < 3), bool b = (1 > 4)) { Q_UNUSED(a); Q_UNUSED(b); } +}; + + +void tst_Moc::QTBUG12260_defaultTemplate() +{ + QVERIFY(QTBUG12260_defaultTemplate_Object::staticMetaObject.indexOfSlot("doSomething(QHash<QString,QVariant>)") != -1); + QVERIFY(QTBUG12260_defaultTemplate_Object::staticMetaObject.indexOfSlot("doAnotherThing(bool,bool)") != -1); +} + QTEST_APPLESS_MAIN(tst_Moc) #include "tst_moc.moc" -- cgit v0.12 From ff66e4d1dfc9642a6ddc4b2dc596e8f2063ade39 Mon Sep 17 00:00:00 2001 From: Carlos Manuel Duclos Vergara <carlos.duclos@nokia.com> Date: Tue, 20 Jul 2010 10:33:36 +0200 Subject: Qt does not build with qt_namespace on macos The problem was that the QT_BEGIN_NAMESPACE was in the wrong place. I moved it 10 lines before and the problem is gone. Task-number: QTBUG-12262 Reviewed-by: Prasanth (cherry picked from commit b0998a44a5dc384a6cf65c1d5910cb3dd40620cf) --- src/network/ssl/qsslsocket_openssl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index a7340ea..f181206 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -59,6 +59,8 @@ #include <QtCore/qvarlengtharray.h> #include <QLibrary> // for loading the security lib for the CA store +QT_BEGIN_NAMESPACE + #if defined(Q_OS_MAC) #define kSecTrustSettingsDomainSystem 2 // so we do not need to include the header file PtrSecCertificateGetData QSslSocketPrivate::ptrSecCertificateGetData = 0; @@ -72,8 +74,6 @@ #include <QtCore/private/qcore_symbian_p.h> #endif -QT_BEGIN_NAMESPACE - bool QSslSocketPrivate::s_libraryLoaded = false; bool QSslSocketPrivate::s_loadedCiphersAndCerts = false; -- cgit v0.12 From 11ae8cbd75ac407ceaace101165d851e1e33ecbb Mon Sep 17 00:00:00 2001 From: Robert Loehning <robert.loehning@nokia.com> Date: Tue, 20 Jul 2010 17:52:18 +0200 Subject: Removed some translations Reviewed-by: Daniel Molkentin (cherry picked from commit 2fd446db8842e78af22d63acbb03a96ca242bb35) --- translations/qt_hu.ts | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/translations/qt_hu.ts b/translations/qt_hu.ts index 9ee3b32..d9b05d1 100644 --- a/translations/qt_hu.ts +++ b/translations/qt_hu.ts @@ -4970,30 +4970,6 @@ Biztosan törölni akarja?</translation> <translation><h3>Qt névjegye</h3><p>Ez a program a Qt %1 verzióját használja.</p></translation> </message> <message> - <location line="+5"/> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>A Qt egy C++ eszközkészlet keresztplatformos alkalmazások fejlesztéséhez, mely egyetlen, MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, és minden főbb kereskedelmi Unix változat között hordozható forrást ad; valamint elérhető még beágyazott eszközökhöz is, mint Qt beágyazott Linuxhoz és Qt Windows CE-hez.</p> -<p>A Qt három különböző licensz alatt érhető el, hogy illeszkedjen a különbőző felhasználói igényekhez: -<p>A kereskedelmi licenszünk alkalmas saját/kereskedelmi szoftver fejlesztéséhez, ha nem akarja megosztani a forráskódot harmadik partnerrel vagy nem kívánja teljesíteni GNU LGPL v2.1 vagy GNU GPL v3.0 feltételeit.</p> -<p>A GNU LGPL v2.1 alá tartozó Qt licensz alkalmas Qt-n alapuló programok fejlesztéséhez (zárt vagy nyílt forrású), amennyiben betartja a GNU LGPL v2.1 kikötéseit és feltételeit.</p> -<p>A GNU General Public License v3.0 alá tartozó Qt licensz pedig alkalmas Qt-n alapuló programok fejlesztésére, ahol olyan programok kombinációját kívánja használni, melyek megfelelnek a GNU GPL version 3.0 feltételeinek vagy ahol hajlandó teljesíteni a GNU GPL v3.0 feltételeit.</p> -<p>Tekintse át a <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> oldalon a Qt licenszeit.</p> -<p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p> -<p>A Qt a Nokia terméke. További információért látogassa meg a <a href="http://qt.nokia.com/">qt.nokia.com</a> honlapot.</p></translation> - </message> - <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> for more information.</p></source> - <translatorcomment>Needing review, but basically accepted string.</translatorcomment> - <translation type="obsolete"><p>A Qt egy C++ eszközkészlet keresztplatformos alkalmazások fejlesztéséhez, mely egyetlen, MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, és minden főbb kereskedelmi Unix változat között hordozható forrást ad; valamint elérhető még beágyazott eszközökhöz is, mint Qt beágyazott Linuxhoz és Qt Windows CE-hez.</p> -<p>A Qt három különböző licensz alatt érhető el, hogy illeszkedjen a különbőző felhasználói igényekhez: -<p>A kereskedelmi licenszünk alkalmas saját/kereskedelmi szoftver fejlesztéséhez, ha nem akarja megosztani a forráskódot harmadik partnerrel vagy nem kívánja teljesíteni GNU LGPL v2.1 vagy GNU GPL v3.0 feltételeit.</p> -<p>A GNU LGPL v2.1 alá tartozó Qt licensz alkalmas Qt-n alapuló programok fejlesztéséhez (zárt vagy nyílt forrású), amennyiben betartja a GNU LGPL v2.1 kikötéseit és feltételeit.</p> -<p>A GNU General Public License v3.0 alá tartozó Qt licensz pedig alkalmas Qt-n alapuló programok fejlesztésére, ahol olyan programok kombinációját kívánja használni, melyek megfelelnek a GNU GPL version 3.0 feltételeinek vagy ahol hajlandó teljesíteni a GNU GPL v3.0 feltételeit.</p> -<p>Tekintse át a <a href="http://www.qtsoftware.com/products/licensing">www.qtsoftware.com/products/licensing</a> oldalon a Qt licenszeit.</p> -<p>Copyright (C) 2009 Nokia Corporation és/vagy annak leányvállalat(-ai).</p> -<p>A Qt a Nokia terméke. További információért látogassa meg a <a href="http://www.qtsoftware.com/qt/">www.qtsoftware.com/qt</a> honlapot.</p></translation> - </message> - <message> <source><p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> for an overview of Qt licensing.</p></source> <translation type="obsolete"><p>A programa Qt Open Source Edition %1 verziót használja.</p><p>A Qt Open Source Edition az Open Source (nyílt forrású) alkalmazások fejlesztéséhez készült. Zárt forrású alkalmazások fejlesztéséhez a kereskedelmi Qt licenszre van szükség.</p><p>A Qt licenszeléséről további információ a <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> oldalon található.</p></translation> </message> -- cgit v0.12 From ba2d235356b551aab2d07a275069b16b6776c31f Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 22 Jul 2010 19:26:35 +0200 Subject: Fixed compiling with symbian/linux-armcc and configure -silent option Task: QTBUG-11927 RevBy: Trust me (cherry picked from commit f1d92df9ba30c1a7e97b29dd069db8e7bbb25636) --- mkspecs/features/symbian/symbian_building.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index ce124ec..b3e1475 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -154,7 +154,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { DEFINES += __DLL__ } -contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@.*") { +contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { !isEmpty(QMAKE_POST_LINK) { # No way to honor the '@' :-( QMAKE_POST_LINK = $$replace(QMAKE_POST_LINK, "^@", "") -- cgit v0.12 From 0aa77f3afe01de462edf0ee6a0bdf78854431cf1 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 20 Jul 2010 14:07:25 +0200 Subject: Fixed automatic sqlite extraction on Symbian makefile build system. Since we cannot extract to the epocroot (it is considered R/O), we extract the header and the dso to the temporary build directories and include them from there. RevBy: Trust me (cherry picked from commit c578c6c1d6dc2f3bb6cc53abb8da2e706a249f02) --- mkspecs/common/symbian/symbian.conf | 1 + .../sqldrivers/sqlite_symbian/sqlite_symbian.pri | 38 ++++++++++++++++++++++ .../sqldrivers/sqlite_symbian/sqlite_symbian.pro | 2 +- src/sql/drivers/drivers.pri | 2 ++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index c1b31e5..7ec5c6c 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -105,6 +105,7 @@ QMAKE_IDL = midl QMAKE_LIB = ar -ru QMAKE_RC = windres QMAKE_ZIP = zip -r -9 +QMAKE_UNZIP = unzip -o QMAKE_TAR = tar -cf QMAKE_GZIP = gzip -9f diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri new file mode 100644 index 0000000..ab8d846 --- /dev/null +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri @@ -0,0 +1,38 @@ +# We just want to include the sqlite3 binaries for Symbian for platforms that do not have them. +!symbian-abld:!symbian-sbsv2 { + !symbian_no_export_sqlite:!exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso) { + symbian_sqlite3_zip_file = $$PWD/SQLite3_v9.2.zip + + # The QMAKE_COPY section is to update timestamp on the file. + symbian_sqlite3_header.input = symbian_sqlite3_zip_file + symbian_sqlite3_header.output = sqlite3.h + !isEmpty(MOC_DIR):symbian_sqlite3_header.output = $$MOC_DIR/$$symbian_sqlite3_header.output + symbian_sqlite3_header.CONFIG = combine no_link + symbian_sqlite3_header.dependency_type = TYPE_C + symbian_sqlite3_header.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/include/stdapis/${QMAKE_FILE_OUT_BASE}.h \ + && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \ + && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.h \ + && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} + QMAKE_EXTRA_COMPILERS += symbian_sqlite3_header + + # The QMAKE_COPY section is to update timestamp on the file. + symbian_sqlite3_dso.input = symbian_sqlite3_zip_file + symbian_sqlite3_dso.output = sqlite3.dso + !isEmpty(OBJECTS_DIR):symbian_sqlite3_dso.output = $$OBJECTS_DIR/$$symbian_sqlite3_dso.output + symbian_sqlite3_dso.CONFIG = combine no_link target_predeps + symbian_sqlite3_dso.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/release/armv5/lib/${QMAKE_FILE_OUT_BASE}.dso \ + && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \ + && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.dso \ + && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} + QMAKE_EXTRA_COMPILERS += symbian_sqlite3_dso + + symbian_sqlite3_ver_dso.input = symbian_sqlite3_zip_file + symbian_sqlite3_ver_dso.output = sqlite3{00060003}.dso + !isEmpty(OBJECTS_DIR):symbian_sqlite3_ver_dso.output = $$OBJECTS_DIR/$$symbian_sqlite3_ver_dso.output + symbian_sqlite3_ver_dso.CONFIG = $$symbian_sqlite3_dso.CONFIG + symbian_sqlite3_ver_dso.commands = $$symbian_sqlite3_dso.commands + QMAKE_EXTRA_COMPILERS += symbian_sqlite3_ver_dso + + QMAKE_LIBDIR *= $$OBJECTS_DIR + } +} diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro index 691cce1..0d233e6 100644 --- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro @@ -2,7 +2,7 @@ TEMPLATE = subdirs # We just want to export the sqlite3 binaries for Symbian for platforms that do not have them. -symbian { +symbian-abld|symbian-sbsv2 { !symbian_no_export_sqlite:!exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso) { BLD_INF_RULES.prj_exports += ":zip SQLite3_v9.2.zip" } diff --git a/src/sql/drivers/drivers.pri b/src/sql/drivers/drivers.pri index 05e7265..c68442d 100644 --- a/src/sql/drivers/drivers.pri +++ b/src/sql/drivers/drivers.pri @@ -114,6 +114,8 @@ contains(sql-drivers, sqlite) { QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE } + symbian:include(../../plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri) + HEADERS += drivers/sqlite/qsql_sqlite.h SOURCES += drivers/sqlite/qsql_sqlite.cpp } -- cgit v0.12 From 8932980a72653aa9695a6d0f1c8ce6077506d33c Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 22 Jul 2010 19:28:10 +0200 Subject: Added silent behavior to the most important Symbian build steps. Task: QTBUG-11927 RevBy: Trust me (cherry picked from commit 77bd18e7636a65c3a3be5e8e912484e8dc5fee02) --- mkspecs/features/symbian/symbian_building.prf | 5 +++++ src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri | 2 ++ 2 files changed, 7 insertions(+) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index b3e1475..2a96a02 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -131,6 +131,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { $$capability \ $$QMAKE_ELF2E32_FLAGS \ $$QMAKE_POST_LINK + silent:QMAKE_POST_LINK = @echo postlinking $@ && $$QMAKE_POST_LINK QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.sym QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.dso QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.dso @@ -177,6 +178,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { $$QMAKE_ELF2E32_FLAGS \ && ln "$${symbianDestdir}/$${baseTarget}.exe" "$${symbianDestdir}/$${baseTarget}" \ $$QMAKE_POST_LINK + silent:QMAKE_POST_LINK = @echo postlinking $@ && $$QMAKE_POST_LINK QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.sym QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.exe QMAKE_CLEAN += $${symbianDestdir}/$${baseTarget} @@ -243,6 +245,7 @@ symbianresources.commands = cpp -nostdinc -undef \ -o$${symbianDestdir}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsc \ -h$${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsg \ -i${QMAKE_FILE_NAME} +silent:symbianresources.commands = @echo rcomp $< && $$symbianresources.commands symbianresources.dependency_type = TYPE_C symbianresources.CONFIG = no_link target_predeps @@ -266,6 +269,7 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { -o$${symbianDestdir}/$${baseResourceTarget}.rsc \ -h$${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg \ -i$${baseResourceTarget}.rss + silent:symbianGenResource.commands = @echo rcomp $${baseResourceTarget}.rss && $$symbianGenResource.commands symbianGenResource.depends = $${baseResourceTarget}.rss PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg @@ -284,6 +288,7 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { -o$${symbianDestdir}/$${baseResourceTarget}_reg.rsc \ -h$${symbian_resources_RCC_DIR}/$${baseResourceTarget}_reg.rsg \ -i$${baseResourceTarget}_reg.rss + silent:symbianGenRegResource.commands = @echo rcomp $${baseResourceTarget}_reg.rss && $$symbianGenRegResource.commands symbianGenRegResource.depends = $${baseResourceTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}_reg.rsg QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}_reg.rsg diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri index ab8d846..494c64c 100644 --- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri @@ -13,6 +13,7 @@ && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.h \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} + silent:symbian_sqlite3_header.commands = @echo unzipping $@ && $$symbian_sqlite3_header.commands QMAKE_EXTRA_COMPILERS += symbian_sqlite3_header # The QMAKE_COPY section is to update timestamp on the file. @@ -24,6 +25,7 @@ && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.dso \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} + silent:symbian_sqlite3_dso.commands = @echo unzipping $@ && $$symbian_sqlite3_dso.commands QMAKE_EXTRA_COMPILERS += symbian_sqlite3_dso symbian_sqlite3_ver_dso.input = symbian_sqlite3_zip_file -- cgit v0.12 From c6640f44cd782c249b2cb5ae39ad4604c6828094 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 9 Jul 2010 11:28:24 +0200 Subject: qdoc: Marked some missing declarative properties and functions as \internal. (cherry picked from commit e0a102ee171ddcebb1104d98d8a4ff4993e91c1d) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 60 +++++++++++----------- tools/qdoc3/test/qt-cpp-ignore.qdocconf | 3 +- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index e5e7f51..0002042 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1388,26 +1388,6 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec */ /*! - \property QDeclarativeItem::baseline - \internal -*/ - -/*! - \property QDeclarativeItem::focus - \internal -*/ - -/*! - \property QDeclarativeItem::wantsFocus - \internal -*/ - -/*! - \property QDeclarativeItem::transformOrigin - \internal -*/ - -/*! \fn void QDeclarativeItem::childrenRectChanged(const QRectF &) \internal */ @@ -1970,6 +1950,9 @@ QVariant QDeclarativeItem::inputMethodQuery(Qt::InputMethodQuery query) const return v; } +/*! + \internal + */ void QDeclarativeItem::keyPressPreHandler(QKeyEvent *event) { Q_D(QDeclarativeItem); @@ -1980,6 +1963,9 @@ void QDeclarativeItem::keyPressPreHandler(QKeyEvent *event) d->doneEventPreHandler = true; } +/*! + \internal + */ void QDeclarativeItem::keyReleasePreHandler(QKeyEvent *event) { Q_D(QDeclarativeItem); @@ -1990,6 +1976,9 @@ void QDeclarativeItem::keyReleasePreHandler(QKeyEvent *event) d->doneEventPreHandler = true; } +/*! + \internal + */ void QDeclarativeItem::inputMethodPreHandler(QInputMethodEvent *event) { Q_D(QDeclarativeItem); @@ -2000,7 +1989,6 @@ void QDeclarativeItem::inputMethodPreHandler(QInputMethodEvent *event) d->doneEventPreHandler = true; } - /*! \internal */ @@ -2539,11 +2527,6 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi \sa {qmlstates}{States} */ -/*! - \property QDeclarativeItem::state - \internal -*/ - /*! \internal */ QString QDeclarativeItemPrivate::state() const { @@ -2566,11 +2549,6 @@ void QDeclarativeItemPrivate::setState(const QString &state) For more information see \l Transform. */ -/*! - \property QDeclarativeItem::transform - \internal -*/ - /*! \internal */ QDeclarativeListProperty<QGraphicsTransform> QDeclarativeItem::transform() { @@ -2859,6 +2837,26 @@ void QDeclarativeItem::setSmooth(bool smooth) } /*! + \property QDeclarativeItem::focus + \internal +*/ + +/*! + \property QDeclarativeItem::transform + \internal +*/ + +/*! + \property QDeclarativeItem::transformOrigin + \internal +*/ + +/*! + \property QDeclarativeItem::wantsFocus + \internal +*/ + +/*! \internal Return the width of the item */ diff --git a/tools/qdoc3/test/qt-cpp-ignore.qdocconf b/tools/qdoc3/test/qt-cpp-ignore.qdocconf index dcf33dc..8cc4fd9 100644 --- a/tools/qdoc3/test/qt-cpp-ignore.qdocconf +++ b/tools/qdoc3/test/qt-cpp-ignore.qdocconf @@ -90,4 +90,5 @@ Cpp.ignoredirectives = Q_DECLARE_HANDLE \ __attribute__ \ K_DECLARE_PRIVATE \ PHONON_OBJECT \ - PHONON_HEIR + PHONON_HEIR \ + Q_PRIVATE_PROPERTY -- cgit v0.12 From 9a61d3f6c8a443791c1a379e4da80caf82737e9c Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 22 Jul 2010 13:27:43 +0200 Subject: qdoc: Fixed reporting of read-only status for QML properties. Task-number: QTBUG-11512 (cherry picked from commit d8908922f339892fee4275a433e2bf6da87ae055) --- .../graphicsitems/qdeclarativeanchors_p.h | 6 +- .../graphicsitems/qdeclarativeimagebase.cpp | 7 + src/declarative/graphicsitems/qdeclarativeitem.cpp | 20 +- .../graphicsitems/qdeclarativerepeater.cpp | 1 - .../qdeclarativefolderlistmodel.cpp | 2 +- src/imports/particles/qdeclarativeparticles.cpp | 8 +- tools/qdoc3/cppcodeparser.cpp | 32 ++- tools/qdoc3/cppcodeparser.h | 1 + tools/qdoc3/ditaxmlgenerator.cpp | 2 +- tools/qdoc3/htmlgenerator.cpp | 13 +- tools/qdoc3/node.cpp | 218 +++++++++++++++++++-- tools/qdoc3/node.h | 18 +- tools/qdoc3/test/qt-cpp-ignore.qdocconf | 4 +- tools/qdoc3/tokenizer.cpp | 6 +- tools/qdoc3/tokenizer.h | 2 +- tools/qdoc3/tree.cpp | 9 +- 16 files changed, 281 insertions(+), 68 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p.h index 1bd7608..c929797 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors_p.h +++ b/src/declarative/graphicsitems/qdeclarativeanchors_p.h @@ -70,11 +70,11 @@ class Q_DECLARATIVE_EXPORT QDeclarativeAnchors : public QObject Q_PROPERTY(qreal margins READ margins WRITE setMargins NOTIFY marginsChanged) Q_PROPERTY(qreal leftMargin READ leftMargin WRITE setLeftMargin NOTIFY leftMarginChanged) Q_PROPERTY(qreal rightMargin READ rightMargin WRITE setRightMargin NOTIFY rightMarginChanged) - Q_PROPERTY(qreal horizontalCenterOffset READ horizontalCenterOffset WRITE setHorizontalCenterOffset NOTIFY horizontalCenterOffsetChanged()) + Q_PROPERTY(qreal horizontalCenterOffset READ horizontalCenterOffset WRITE setHorizontalCenterOffset NOTIFY horizontalCenterOffsetChanged) Q_PROPERTY(qreal topMargin READ topMargin WRITE setTopMargin NOTIFY topMarginChanged) Q_PROPERTY(qreal bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY bottomMarginChanged) - Q_PROPERTY(qreal verticalCenterOffset READ verticalCenterOffset WRITE setVerticalCenterOffset NOTIFY verticalCenterOffsetChanged()) - Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged()) + Q_PROPERTY(qreal verticalCenterOffset READ verticalCenterOffset WRITE setVerticalCenterOffset NOTIFY verticalCenterOffsetChanged) + Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged) Q_PROPERTY(QGraphicsObject *fill READ fill WRITE setFill RESET resetFill NOTIFY fillChanged) Q_PROPERTY(QGraphicsObject *centerIn READ centerIn WRITE setCenterIn RESET resetCenterIn NOTIFY centerInChanged) diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp index 67f2327..ba40443 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp @@ -50,6 +50,13 @@ QT_BEGIN_NAMESPACE + +/*! + \class QDeclarativeImageBase + \internal + \brief The base class for declarative images. + */ + QDeclarativeImageBase::QDeclarativeImageBase(QDeclarativeImageBasePrivate &dd, QDeclarativeItem *parent) : QDeclarativeItem(dd, parent) { diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 0002042..e5be74c 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -91,7 +91,7 @@ QT_BEGIN_NAMESPACE */ /*! - \qmlclass Translate QGraphicsTranslate + \qmlclass Translate QDeclarativeTranslate \since 4.7 \brief The Translate object provides a way to move an Item without changing its x or y properties. @@ -420,7 +420,7 @@ void QDeclarativeItemKeyFilter::componentComplete() /*! - \qmlclass KeyNavigation + \qmlclass KeyNavigation QDeclarativeKeyNavigationAttached \since 4.7 \brief The KeyNavigation attached property supports key navigation by arrow keys. @@ -714,7 +714,7 @@ void QDeclarativeKeyNavigationAttached::keyReleased(QKeyEvent *event, bool post) } /*! - \qmlclass Keys + \qmlclass Keys QDeclarativeKeysAttached \since 4.7 \brief The Keys attached property provides key handling to Items. @@ -2047,20 +2047,6 @@ QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline() const } /*! - \qmlproperty AnchorLine Item::top - \qmlproperty AnchorLine Item::bottom - \qmlproperty AnchorLine Item::left - \qmlproperty AnchorLine Item::right - \qmlproperty AnchorLine Item::horizontalCenter - \qmlproperty AnchorLine Item::verticalCenter - \qmlproperty AnchorLine Item::baseline - - The anchor lines of the item. - - For more information see \l {anchor-layout}{Anchor Layouts}. -*/ - -/*! \qmlproperty AnchorLine Item::anchors.top \qmlproperty AnchorLine Item::anchors.bottom \qmlproperty AnchorLine Item::anchors.left diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp index 87da904..8ba80ad 100644 --- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp +++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp @@ -138,7 +138,6 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() /*! \internal \class QDeclarativeRepeater - \qmlclass Repeater */ /*! diff --git a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp index 9cf81ca..2f4d1df 100644 --- a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp +++ b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp @@ -93,7 +93,7 @@ public: }; /*! - \qmlclass FolderListModel + \qmlclass FolderListModel QDeclarativeFolderListModel \brief The FolderListModel provides a model of the contents of a folder in a filesystem. FolderListModel provides access to the local filesystem. The \e folder property diff --git a/src/imports/particles/qdeclarativeparticles.cpp b/src/imports/particles/qdeclarativeparticles.cpp index 64cd1e1..cfe848c 100644 --- a/src/imports/particles/qdeclarativeparticles.cpp +++ b/src/imports/particles/qdeclarativeparticles.cpp @@ -153,7 +153,7 @@ void QDeclarativeParticleMotion::destroy(QDeclarativeParticle &particle) } /*! - \qmlclass ParticleMotionLinear + \qmlclass ParticleMotionLinear QDeclarativeParticleMotionLinear \since 4.7 \brief The ParticleMotionLinear object moves particles linearly. @@ -179,7 +179,7 @@ void QDeclarativeParticleMotionLinear::advance(QDeclarativeParticle &p, int inte } /*! - \qmlclass ParticleMotionGravity + \qmlclass ParticleMotionGravity QDeclarativeParticleMotionGravity \since 4.7 \brief The ParticleMotionGravity object moves particles towards a point. @@ -270,7 +270,7 @@ void QDeclarativeParticleMotionGravity::advance(QDeclarativeParticle &p, int int } /*! - \qmlclass ParticleMotionWander + \qmlclass ParticleMotionWander QDeclarativeParticleMotionWander \since 4.7 \brief The ParticleMotionWander object moves particles in a somewhat random fashion. @@ -633,7 +633,7 @@ void QDeclarativeParticlesPrivate::updateOpacity(QDeclarativeParticle &p, int ag } /*! - \qmlclass Particles + \qmlclass Particles QDeclarativeParticles \since 4.7 \brief The Particles object generates and moves particles. \inherits Item diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp index d5108fd..a120e45 100644 --- a/tools/qdoc3/cppcodeparser.cpp +++ b/tools/qdoc3/cppcodeparser.cpp @@ -1120,6 +1120,17 @@ bool CppCodeParser::match(int target) } /*! + Skip to \a target. If \a target is found before the end + of input, return true. Otherwise return false. + */ +bool CppCodeParser::skipTo(int target) +{ + while ((tok != Tok_Eoi) && (tok != target)) + readToken(); + return (tok == target ? true : false); +} + +/*! If the current token is one of the keyword thingees that are used in Qt, skip over it to the next token and return true. Otherwise just return false without reading the @@ -1362,7 +1373,9 @@ bool CppCodeParser::matchFunctionDecl(InnerNode *parent, if (!matchDataType(&returnType)) { if (tokenizer->parsingFnOrMacro() - && (match(Tok_Q_DECLARE_FLAGS) || match(Tok_Q_PROPERTY))) + && (match(Tok_Q_DECLARE_FLAGS) || + match(Tok_Q_PROPERTY) || + match(Tok_Q_PRIVATE_PROPERTY))) returnType = CodeChunk(previousLexeme()); else { return false; @@ -1796,11 +1809,19 @@ bool CppCodeParser::matchTypedefDecl(InnerNode *parent) bool CppCodeParser::matchProperty(InnerNode *parent) { - if (!match(Tok_Q_PROPERTY) && - !match(Tok_Q_OVERRIDE) && - !match(Tok_QDOC_PROPERTY)) + int expected_tok = Tok_LeftParen; + if (match(Tok_Q_PRIVATE_PROPERTY)) { + expected_tok = Tok_Comma; + if (!skipTo(Tok_Comma)) + return false; + } + else if (!match(Tok_Q_PROPERTY) && + !match(Tok_Q_OVERRIDE) && + !match(Tok_QDOC_PROPERTY)) { return false; - if (!match(Tok_LeftParen)) + } + + if (!match(expected_tok)) return false; QString name; @@ -1949,6 +1970,7 @@ bool CppCodeParser::matchDeclList(InnerNode *parent) break; case Tok_Q_OVERRIDE: case Tok_Q_PROPERTY: + case Tok_Q_PRIVATE_PROPERTY: case Tok_QDOC_PROPERTY: matchProperty(parent); break; diff --git a/tools/qdoc3/cppcodeparser.h b/tools/qdoc3/cppcodeparser.h index 3c53f72..55d9ddf 100644 --- a/tools/qdoc3/cppcodeparser.h +++ b/tools/qdoc3/cppcodeparser.h @@ -119,6 +119,7 @@ class CppCodeParser : public CodeParser QString previousLexeme(); QString lexeme(); bool match(int target); + bool skipTo(int target); bool matchCompat(); bool matchTemplateAngles(CodeChunk *type = 0); bool matchTemplateHeader(); diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index d7a9c9e..4789c67 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -4210,7 +4210,7 @@ void DitaXmlGenerator::generateDetailedQmlMember(const Node *node, out() << "<td><p>"; //out() << "<tr><td>"; // old out() << "<a name=\"" + refForNode(qpn) + "\"></a>"; - if (!qpn->isWritable()) + if (!qpn->isWritable(myTree)) out() << "<span class=\"qmlreadonly\">read-only</span>"; if (qpgn->isDefault()) out() << "<span class=\"qmldefault\">default</span>"; diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 043731d..7e081db 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -4094,8 +4094,11 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "<td class=\"tblQmlPropNode\"><p>"; out() << "<a name=\"" + refForNode(qpn) + "\"></a>"; - if (!qpn->isWritable()) + + if (!qpn->isWritable(myTree)) { + qDebug() << "QPN:" << qpn->name(); out() << "<span class=\"qmlreadonly\">read-only</span>"; + } if (qpgn->isDefault()) out() << "<span class=\"qmldefault\">default</span>"; generateQmlItem(qpn, relative, marker, false); @@ -4111,10 +4114,10 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "<div class=\"qmlproto\">"; out() << "<table class=\"qmlname\">"; //out() << "<tr>"; - if (++numTableRows % 2 == 1) - out() << "<tr class=\"odd\">"; - else - out() << "<tr class=\"even\">"; + if (++numTableRows % 2 == 1) + out() << "<tr class=\"odd\">"; + else + out() << "<tr class=\"even\">"; out() << "<td class=\"tblQmlFuncNode\"><p>"; out() << "<a name=\"" + refForNode(qsn) + "\"></a>"; generateSynopsis(qsn,relative,marker,CodeMarker::Detailed,false); diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index da62e29..28347c3 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -44,6 +44,8 @@ */ #include "node.h" +#include "tree.h" +#include "codemarker.h" #include <qdebug.h> QT_BEGIN_NAMESPACE @@ -171,6 +173,32 @@ QString Node::accessString() const return "public"; } +/*! + Extract a class name from the type \a string and return it. + */ +QString Node::extractClassName(const QString &string) const +{ + QString result; + for (int i=0; i<=string.size(); ++i) { + QChar ch; + if (i != string.size()) + ch = string.at(i); + + QChar lower = ch.toLower(); + if ((lower >= QLatin1Char('a') && lower <= QLatin1Char('z')) || + ch.digitValue() >= 0 || + ch == QLatin1Char('_') || + ch == QLatin1Char(':')) { + result += ch; + } + else if (!result.isEmpty()) { + if (result != QLatin1String("const")) + return result; + result.clear(); + } + } + return result; +} /*! Returns a string representing the access specifier. @@ -426,6 +454,9 @@ void InnerNode::setOverload(const FunctionNode *func, bool overlode) } /*! + Mark all child nodes that have no documentation as having + private access and internal status. qdoc will then ignore + them for documentation purposes. */ void InnerNode::makeUndocumentedChildrenInternal() { @@ -831,6 +862,7 @@ NamespaceNode::NamespaceNode(InnerNode *parent, const QString& name) /*! \class ClassNode + \brief This class represents a C++ class. */ /*! @@ -850,8 +882,8 @@ void ClassNode::addBaseClass(Access access, ClassNode *node, const QString &dataTypeWithTemplateArgs) { - bas.append(RelatedClass(access, node, dataTypeWithTemplateArgs)); - node->der.append(RelatedClass(access, this)); + bases.append(RelatedClass(access, node, dataTypeWithTemplateArgs)); + node->derived.append(RelatedClass(access, this)); } /*! @@ -859,16 +891,16 @@ void ClassNode::addBaseClass(Access access, void ClassNode::fixBaseClasses() { int i; - i = 0; - while (i < bas.size()) { - ClassNode *baseClass = bas.at(i).node; - if (baseClass->access() == Node::Private) { - bas.removeAt(i); - - const QList<RelatedClass> &basesBases = baseClass->baseClasses(); - for (int j = basesBases.size() - 1; j >= 0; --j) - bas.insert(i, basesBases.at(j)); + while (i < bases.size()) { + ClassNode* bc = bases.at(i).node; + if (bc->access() == Node::Private) { + RelatedClass rc = bases.at(i); + bases.removeAt(i); + ignoredBases.append(rc); + const QList<RelatedClass> &bb = bc->baseClasses(); + for (int j = bb.size() - 1; j >= 0; --j) + bases.insert(i, bb.at(j)); } else { ++i; @@ -876,15 +908,13 @@ void ClassNode::fixBaseClasses() } i = 0; - while (i < der.size()) { - ClassNode *derivedClass = der.at(i).node; - if (derivedClass->access() == Node::Private) { - der.removeAt(i); - - const QList<RelatedClass> &dersDers = - derivedClass->derivedClasses(); - for (int j = dersDers.size() - 1; j >= 0; --j) - der.insert(i, dersDers.at(j)); + while (i < derived.size()) { + ClassNode* dc = derived.at(i).node; + if (dc->access() == Node::Private) { + derived.removeAt(i); + const QList<RelatedClass> &dd = dc->derivedClasses(); + for (int j = dd.size() - 1; j >= 0; --j) + derived.insert(i, dd.at(j)); } else { ++i; @@ -893,6 +923,16 @@ void ClassNode::fixBaseClasses() } /*! + Search the child list to find the property node with the + specified \a name. + */ +const PropertyNode* ClassNode::findPropertyNode(const QString& name) const +{ + const Node* n = findNode(name,Node::Property); + return (n ? static_cast<const PropertyNode*>(n) : 0); +} + +/*! \class FakeNode */ @@ -1567,6 +1607,144 @@ bool QmlPropertyNode::fromTrool(Trool troolean, bool defaultValue) return defaultValue; } } + +static QString valueType(const QString& n) +{ + if (n == "QPoint") + return "QDeclarativePointValueType"; + if (n == "QPointF") + return "QDeclarativePointFValueType"; + if (n == "QSize") + return "QDeclarativeSizeValueType"; + if (n == "QSizeF") + return "QDeclarativeSizeFValueType"; + if (n == "QRect") + return "QDeclarativeRectValueType"; + if (n == "QRectF") + return "QDeclarativeRectFValueType"; + if (n == "QVector2D") + return "QDeclarativeVector2DValueType"; + if (n == "QVector3D") + return "QDeclarativeVector3DValueType"; + if (n == "QVector4D") + return "QDeclarativeVector4DValueType"; + if (n == "QQuaternion") + return "QDeclarativeQuaternionValueType"; + if (n == "QMatrix4x4") + return "QDeclarativeMatrix4x4ValueType"; + if (n == "QEasingCurve") + return "QDeclarativeEasingValueType"; + if (n == "QFont") + return "QDeclarativeFontValueType"; + return QString(); +} + +/*! + Returns true if a QML property or attached property is + read-only. The algorithm for figuring this out is long + amd tedious and almost certainly will break. It currently + doesn't work for qmlproperty bool PropertyChanges::explicit, + because the tokenized gets confused on "explicit" . + */ +bool QmlPropertyNode::isWritable(const Tree* tree) const +{ + Node* n = parent(); + while (n && n->subType() != Node::QmlClass) + n = n->parent(); + if (n) { + const QmlClassNode* qcn = static_cast<const QmlClassNode*>(n); + const ClassNode* cn = qcn->classNode(); + if (cn) { + QStringList dotSplit = name().split(QChar('.')); + const PropertyNode* pn = cn->findPropertyNode(dotSplit[0]); + if (pn) { + if (dotSplit.size() > 1) { + QStringList path(extractClassName(pn->qualifiedDataType())); + const Node* nn = tree->findNode(path,Class); + if (nn) { + const ClassNode* cn = static_cast<const ClassNode*>(nn); + pn = cn->findPropertyNode(dotSplit[1]); + if (pn) { + return pn->isWritable(); + } + else { + const QList<RelatedClass>& bases = cn->baseClasses(); + if (!bases.isEmpty()) { + for (int i=0; i<bases.size(); ++i) { + const ClassNode* cn = bases[i].node; + pn = cn->findPropertyNode(dotSplit[1]); + if (pn) { + return pn->isWritable(); + } + } + } + const QList<RelatedClass>& ignoredBases = cn->ignoredBaseClasses(); + if (!ignoredBases.isEmpty()) { + for (int i=0; i<ignoredBases.size(); ++i) { + const ClassNode* cn = ignoredBases[i].node; + pn = cn->findPropertyNode(dotSplit[1]); + if (pn) { + return pn->isWritable(); + } + } + } + QString vt = valueType(cn->name()); + if (!vt.isEmpty()) { + QStringList path(vt); + const Node* vtn = tree->findNode(path,Class); + if (vtn) { + const ClassNode* cn = static_cast<const ClassNode*>(vtn); + pn = cn->findPropertyNode(dotSplit[1]); + if (pn) { + return pn->isWritable(); + } + } + } + } + } + } + else { + return pn->isWritable(); + } + } + else { + const QList<RelatedClass>& bases = cn->baseClasses(); + if (!bases.isEmpty()) { + for (int i=0; i<bases.size(); ++i) { + const ClassNode* cn = bases[i].node; + pn = cn->findPropertyNode(dotSplit[0]); + if (pn) { + return pn->isWritable(); + } + } + } + const QList<RelatedClass>& ignoredBases = cn->ignoredBaseClasses(); + if (!ignoredBases.isEmpty()) { + for (int i=0; i<ignoredBases.size(); ++i) { + const ClassNode* cn = ignoredBases[i].node; + pn = cn->findPropertyNode(dotSplit[0]); + if (pn) { + return pn->isWritable(); + } + } + } + if (isAttached()) { + QString classNameAttached = cn->name() + "Attached"; + QStringList path(classNameAttached); + const Node* nn = tree->findNode(path,Class); + const ClassNode* acn = static_cast<const ClassNode*>(nn); + pn = acn->findPropertyNode(dotSplit[0]); + if (pn) { + return pn->isWritable(); + } + } + } + } + } + location().warning(tr("Can't determine read-only status of QML property %1; writable assumed.").arg(name())); + return true; +} + #endif QT_END_NAMESPACE diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index e9f2d74..3cc0f60 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -193,6 +193,7 @@ class Node virtual QString fileBase() const; QUuid guid() const; QString ditaXmlHref(); + QString extractClassName(const QString &string) const; protected: Node(Type type, InnerNode* parent, const QString& name); @@ -326,6 +327,8 @@ struct RelatedClass QString dataTypeWithTemplateArgs; }; +class PropertyNode; + class ClassNode : public InnerNode { public: @@ -337,8 +340,9 @@ class ClassNode : public InnerNode const QString &dataTypeWithTemplateArgs = ""); void fixBaseClasses(); - const QList<RelatedClass> &baseClasses() const { return bas; } - const QList<RelatedClass> &derivedClasses() const { return der; } + const QList<RelatedClass> &baseClasses() const { return bases; } + const QList<RelatedClass> &derivedClasses() const { return derived; } + const QList<RelatedClass> &ignoredBaseClasses() const { return ignoredBases; } bool hideFromMainList() const { return hidden; } void setHideFromMainList(bool value) { hidden = value; } @@ -349,10 +353,12 @@ class ClassNode : public InnerNode void setQmlElement(const QString& value) { qmlelement = value; } virtual bool isAbstract() const { return abstract; } virtual void setAbstract(bool b) { abstract = b; } + const PropertyNode* findPropertyNode(const QString& name) const; private: - QList<RelatedClass> bas; - QList<RelatedClass> der; + QList<RelatedClass> bases; + QList<RelatedClass> derived; + QList<RelatedClass> ignoredBases; bool hidden; bool abstract; QString sname; @@ -436,6 +442,8 @@ class QmlPropGroupNode : public FakeNode bool att; }; +class Tree; + class QmlPropertyNode : public LeafNode { public: @@ -454,7 +462,7 @@ class QmlPropertyNode : public LeafNode QString qualifiedDataType() const { return dt; } bool isStored() const { return fromTrool(sto,true); } bool isDesignable() const { return fromTrool(des,false); } - bool isWritable() const { return fromTrool(wri,true); } + bool isWritable(const Tree* tree) const; bool isAttached() const { return att; } virtual bool isQmlNode() const { return true; } diff --git a/tools/qdoc3/test/qt-cpp-ignore.qdocconf b/tools/qdoc3/test/qt-cpp-ignore.qdocconf index 8cc4fd9..4963b96 100644 --- a/tools/qdoc3/test/qt-cpp-ignore.qdocconf +++ b/tools/qdoc3/test/qt-cpp-ignore.qdocconf @@ -91,4 +91,6 @@ Cpp.ignoredirectives = Q_DECLARE_HANDLE \ K_DECLARE_PRIVATE \ PHONON_OBJECT \ PHONON_HEIR \ - Q_PRIVATE_PROPERTY + Q_PRIVATE_PROPERTY \ + Q_DECLARE_PRIVATE_D \ + Q_CLASSINFO diff --git a/tools/qdoc3/tokenizer.cpp b/tools/qdoc3/tokenizer.cpp index 7c10de6..05ad5ee 100644 --- a/tools/qdoc3/tokenizer.cpp +++ b/tools/qdoc3/tokenizer.cpp @@ -67,7 +67,11 @@ static const char *kwords[] = { "private", "protected", "public", "short", "signals", "signed", "slots", "static", "struct", "template", "typedef", "typename", "union", "unsigned", "using", "virtual", "void", "volatile", - "__int64", "Q_OBJECT", "Q_OVERRIDE", "Q_PROPERTY", + "__int64", + "Q_OBJECT", + "Q_OVERRIDE", + "Q_PROPERTY", + "Q_PRIVATE_PROPERTY", "Q_DECLARE_SEQUENTIAL_ITERATOR", "Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR", "Q_DECLARE_ASSOCIATIVE_ITERATOR", diff --git a/tools/qdoc3/tokenizer.h b/tools/qdoc3/tokenizer.h index f55d2ef..bd35965 100644 --- a/tools/qdoc3/tokenizer.h +++ b/tools/qdoc3/tokenizer.h @@ -75,7 +75,7 @@ enum { Tok_Eoi, Tok_Ampersand, Tok_Aster, Tok_Caret, Tok_LeftParen, Tok_static, Tok_struct, Tok_template, Tok_typedef, Tok_typename, Tok_union, Tok_unsigned, Tok_using, Tok_virtual, Tok_void, Tok_volatile, Tok_int64, Tok_Q_OBJECT, Tok_Q_OVERRIDE, - Tok_Q_PROPERTY, Tok_Q_DECLARE_SEQUENTIAL_ITERATOR, + Tok_Q_PROPERTY, Tok_Q_PRIVATE_PROPERTY, Tok_Q_DECLARE_SEQUENTIAL_ITERATOR, Tok_Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR, Tok_Q_DECLARE_ASSOCIATIVE_ITERATOR, Tok_Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR, diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp index d22a09a..56e3484 100644 --- a/tools/qdoc3/tree.cpp +++ b/tools/qdoc3/tree.cpp @@ -469,8 +469,9 @@ void Tree::resolveInheritance(NamespaceNode *rootNode) for (int pass = 0; pass < 2; pass++) { NodeList::ConstIterator c = rootNode->childNodes().begin(); while (c != rootNode->childNodes().end()) { - if ((*c)->type() == Node::Class) + if ((*c)->type() == Node::Class) { resolveInheritance(pass, (ClassNode *) *c); + } else if ((*c)->type() == Node::Namespace) { NamespaceNode *ns = static_cast<NamespaceNode*>(*c); resolveInheritance(ns); @@ -542,14 +543,16 @@ void Tree::resolveInheritance(int pass, ClassNode *classe) while (b != bounds.end()) { ClassNode *baseClass = (ClassNode*)findNode((*b).basePath, Node::Class); - if (!baseClass && (*b).parent) + if (!baseClass && (*b).parent) { baseClass = (ClassNode*)findNode((*b).basePath, Node::Class, (*b).parent); - if (baseClass) + } + if (baseClass) { classe->addBaseClass((*b).access, baseClass, (*b).dataTypeWithTemplateArgs); + } ++b; } } -- cgit v0.12 From 9b1e68e8ae5578654b1c2a514fef98c5bbea983d Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil <prasanth.ullattil@nokia.com> Date: Thu, 22 Jul 2010 14:52:29 +0200 Subject: Drag & Drop failing in itemviews on Cocoa. While generating the QDragMoveEvent, we were always reusing the last drop action set by the user. This is not correct, we should copy the action only if a valid action set before. This is the behavior on Windows. Task-number: QTBUG-9486 Reviewed-by: Denis (cherry picked from commit 88410105978d5fb4344207cd5d296057ced0f27d) --- src/gui/kernel/qcocoaview_mac.mm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 1935531..a552ce7 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -390,7 +390,10 @@ static int qCocoaViewCount = 0; if (QDragManager::self()->source()) mimeData = QDragManager::self()->dragPrivate()->data; QDragMoveEvent qDMEvent(posDrag, qtAllowed, mimeData, QApplication::mouseButtons(), modifiers); - qDMEvent.setDropAction(QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec).lastAction); + if (QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec).lastAction != Qt::IgnoreAction + && QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec).buttons == qDMEvent.mouseButtons() + && QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec).modifiers == qDMEvent.keyboardModifiers()) + qDMEvent.setDropAction(QT_PREPEND_NAMESPACE(qt_mac_dnd_answer_rec).lastAction); qDMEvent.accept(); QApplication::sendEvent(qwidget, &qDMEvent); -- cgit v0.12 From f136c1fb6747d65e94dfaa219d32f0670a6e4405 Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Mon, 26 Jul 2010 10:19:17 +1000 Subject: Revert "Fixed compiling with symbian/linux-armcc and configure -silent option" This reverts commit ba2d235356b551aab2d07a275069b16b6776c31f. --- mkspecs/features/symbian/symbian_building.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 2a96a02..46b8d24 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -155,7 +155,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { DEFINES += __DLL__ } -contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { +contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@.*") { !isEmpty(QMAKE_POST_LINK) { # No way to honor the '@' :-( QMAKE_POST_LINK = $$replace(QMAKE_POST_LINK, "^@", "") -- cgit v0.12 From e241ce0d27a0d25b2cedbbb24e3ba23ce7aa80eb Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Mon, 26 Jul 2010 10:19:41 +1000 Subject: Revert "Added silent behavior to the most important Symbian build steps." This reverts commit 8932980a72653aa9695a6d0f1c8ce6077506d33c. --- mkspecs/features/symbian/symbian_building.prf | 5 ----- src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri | 2 -- 2 files changed, 7 deletions(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 46b8d24..ce124ec 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -131,7 +131,6 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { $$capability \ $$QMAKE_ELF2E32_FLAGS \ $$QMAKE_POST_LINK - silent:QMAKE_POST_LINK = @echo postlinking $@ && $$QMAKE_POST_LINK QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.sym QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.dso QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.dso @@ -178,7 +177,6 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@.*") { $$QMAKE_ELF2E32_FLAGS \ && ln "$${symbianDestdir}/$${baseTarget}.exe" "$${symbianDestdir}/$${baseTarget}" \ $$QMAKE_POST_LINK - silent:QMAKE_POST_LINK = @echo postlinking $@ && $$QMAKE_POST_LINK QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.sym QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.exe QMAKE_CLEAN += $${symbianDestdir}/$${baseTarget} @@ -245,7 +243,6 @@ symbianresources.commands = cpp -nostdinc -undef \ -o$${symbianDestdir}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsc \ -h$${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsg \ -i${QMAKE_FILE_NAME} -silent:symbianresources.commands = @echo rcomp $< && $$symbianresources.commands symbianresources.dependency_type = TYPE_C symbianresources.CONFIG = no_link target_predeps @@ -269,7 +266,6 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { -o$${symbianDestdir}/$${baseResourceTarget}.rsc \ -h$${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg \ -i$${baseResourceTarget}.rss - silent:symbianGenResource.commands = @echo rcomp $${baseResourceTarget}.rss && $$symbianGenResource.commands symbianGenResource.depends = $${baseResourceTarget}.rss PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg @@ -288,7 +284,6 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { -o$${symbianDestdir}/$${baseResourceTarget}_reg.rsc \ -h$${symbian_resources_RCC_DIR}/$${baseResourceTarget}_reg.rsg \ -i$${baseResourceTarget}_reg.rss - silent:symbianGenRegResource.commands = @echo rcomp $${baseResourceTarget}_reg.rss && $$symbianGenRegResource.commands symbianGenRegResource.depends = $${baseResourceTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseResourceTarget}.rsg PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}_reg.rsg QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseResourceTarget}_reg.rsg diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri index 494c64c..ab8d846 100644 --- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri @@ -13,7 +13,6 @@ && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.h \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} - silent:symbian_sqlite3_header.commands = @echo unzipping $@ && $$symbian_sqlite3_header.commands QMAKE_EXTRA_COMPILERS += symbian_sqlite3_header # The QMAKE_COPY section is to update timestamp on the file. @@ -25,7 +24,6 @@ && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.dso \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} - silent:symbian_sqlite3_dso.commands = @echo unzipping $@ && $$symbian_sqlite3_dso.commands QMAKE_EXTRA_COMPILERS += symbian_sqlite3_dso symbian_sqlite3_ver_dso.input = symbian_sqlite3_zip_file -- cgit v0.12 From 29e69a5b161c25128437c98553df569513694653 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 22 Jul 2010 16:33:12 +0200 Subject: Removed some warnings from armcc that are unneeded. RevBy: Trust me (cherry picked from commit 4280c4c72fcd04e9061e08fb30f73fbd9f88b850) --- mkspecs/features/symbian/armcc_warnings.prf | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mkspecs/features/symbian/armcc_warnings.prf b/mkspecs/features/symbian/armcc_warnings.prf index 72bc996..3331bff 100644 --- a/mkspecs/features/symbian/armcc_warnings.prf +++ b/mkspecs/features/symbian/armcc_warnings.prf @@ -1,13 +1,22 @@ +# 68: integer conversion resulted in a change of sign (sounds useful, but it's +# buggy and is reported even in places where it makes no sense) # 111: Statement is unreachable # 185: Dynamic initialization in unreachable code +# 187: use of "=" where "==" may have been intended # 191: Type qualifier is meaningless on cast type # 368: class "<class>" defines no constructor to initialize the following: <member> # (Disabled because there are other ways of assigning besides constructors) +# 830: function "xxx" has no corresponding operator delete (to be called if an +# exception is thrown during initialization of an allocated object) (used a +# lot in 3rd party code) +# 997: function "xxx" is hidden by "yyy" -- virtual function override intended? +# (used all over the place in the Symbian SDK) # 1293: Assignment in condition # 1294: pre-ANSI C style functions declarations (used a lot in 3rd party code) # 2874: <variable> may be used before being set (this one sounds useful, but # it's output also for class instances, making it useless in practice) -QMAKE_CFLAGS.ARMCC += --diag_suppress 111,185,191,368,1293,1294,2874 +QMAKE_CFLAGS.ARMCC += --diag_suppress 68,111,185,187,191,368,830,997,1293,1294,2874 +QMAKE_CXXFLAGS.ARMCC += --diag_suppress 68,111,185,187,191,368,830,997,1293,1294,2874 # 6780: <origvis> visibility removed from symbol '<symname>' through <impexp> QMAKE_LFLAGS.ARMCC += --diag_suppress 6780 -- cgit v0.12 From 24262b2bf82c2e3e5854326e8fc3c77e3b053162 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 23 Jul 2010 09:54:44 +0200 Subject: doc: Added missing \since 4.7 to effect propertyu. Task-number: QTBUG-12132 (cherry picked from commit d9f5b8742f84124c3c0e2bdbd7b860dce2bc2225) --- src/gui/graphicsview/qgraphicsitem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 5c444f1..479a813 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -7926,6 +7926,7 @@ void QGraphicsItemPrivate::resetHeight() /*! \property QGraphicsObject::effect + \since 4.7 \brief the effect attached to this item \sa QGraphicsItem::setGraphicsEffect(), QGraphicsItem::graphicsEffect() -- cgit v0.12 From 4fb6b49ad20a1636604d40cbdadbec08f8d78e04 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 23 Jul 2010 09:36:36 +0200 Subject: doc: Fixed broken "Getting Started" link. Geir will replace it soon with a link to a new "Getting Started" page. Task-number: QTBUG-12176 (cherry picked from commit eaee97cf48feecc18d6154d3939fd4adb93ba74f) --- doc/src/index.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 657f5d0..7ac5ac2 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -40,8 +40,8 @@ </div> <div class="section sectionlist"> <ul> - <li><a href="">Getting started</a></li> - <li><a href="installation.html">Installation & first steps</a></li> + <li><a href="how-to-learn-qt.html">Getting started</a></li> + <li><a href="installation.html">Installation</a></li> <li><a href="how-to-learn-qt.html">How to learn Qt</a></li> <li><a href="tutorials.html">Tutorials</a></li> <li><a href="examples.html">Examples</a></li> -- cgit v0.12 From 69b746e8be371f40d2b1d7cefe3c8edb5ade596f Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 20 Jul 2010 10:14:38 +1000 Subject: Ensure released VisualItemModel items are removed from the scene. Also parent them back to the VIM to ensure correct destruction. Task-number: QTBUG-12261 (cherry picked from commit 17cc89e918a969d85d2b46631ee8743288c7586d) --- .../graphicsitems/qdeclarativevisualitemmodel.cpp | 8 +++--- .../qdeclarativerepeater/data/itemlist.qml | 29 +++++++++++++++++++--- .../tst_qdeclarativerepeater.cpp | 9 +++++++ 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index cfa1c6d..7952b97 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -77,7 +77,7 @@ public: QDeclarativeVisualItemModelPrivate() : QObjectPrivate() {} static void children_append(QDeclarativeListProperty<QDeclarativeItem> *prop, QDeclarativeItem *item) { - item->QObject::setParent(prop->object); + QDeclarative_setParent_noEvent(item, prop->object); static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->children.append(item); static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->itemAppended(); static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->emitChildrenChanged(); @@ -185,9 +185,11 @@ QDeclarativeItem *QDeclarativeVisualItemModel::item(int index, bool) return d->children.at(index); } -QDeclarativeVisualModel::ReleaseFlags QDeclarativeVisualItemModel::release(QDeclarativeItem *) +QDeclarativeVisualModel::ReleaseFlags QDeclarativeVisualItemModel::release(QDeclarativeItem *item) { - // Nothing to do + if (item->scene()) + item->scene()->removeItem(item); + QDeclarative_setParent_noEvent(item, this); return 0; } diff --git a/tests/auto/declarative/qdeclarativerepeater/data/itemlist.qml b/tests/auto/declarative/qdeclarativerepeater/data/itemlist.qml index e8dd8cc..4810736 100644 --- a/tests/auto/declarative/qdeclarativerepeater/data/itemlist.qml +++ b/tests/auto/declarative/qdeclarativerepeater/data/itemlist.qml @@ -4,21 +4,27 @@ import Qt 4.7 Rectangle { + id: root color: "lightgray" width: 240 height: 320 + property variant itemModel: itemModel1 function checkProperties() { testObject.error = false; - if (testObject.useModel && view.model != itemModel) { + if (testObject.useModel && view.model != root.itemModel) { console.log("model property incorrect"); testObject.error = true; } } + function switchModel() { + root.itemModel = itemModel2 + } + VisualItemModel { - id: itemModel - objectName: "itemModel" + id: itemModel1 + objectName: "itemModel1" Rectangle { objectName: "item1" height: 50; width: 100; color: "#FFFEF0" @@ -36,12 +42,27 @@ Rectangle { } } + VisualItemModel { + id: itemModel2 + objectName: "itemModel2" + Rectangle { + objectName: "item4" + height: 50; width: 100; color: "#FFFEF0" + Text { objectName: "text4"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + Rectangle { + objectName: "item5" + height: 50; width: 100; color: "#F0FFF7" + Text { objectName: "text5"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + } + Column { objectName: "container" Repeater { id: view objectName: "repeater" - model: testObject.useModel ? itemModel : 0 + model: testObject.useModel ? root.itemModel : 0 } } } diff --git a/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp b/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp index 7299a43..623b3d7 100644 --- a/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp +++ b/tests/auto/declarative/qdeclarativerepeater/tst_qdeclarativerepeater.cpp @@ -361,6 +361,15 @@ void tst_QDeclarativeRepeater::itemModel() QVERIFY(qobject_cast<QObject*>(container->childItems().at(2))->objectName() == "item3"); QVERIFY(container->childItems().at(3) == repeater); + QMetaObject::invokeMethod(canvas->rootObject(), "switchModel"); + QCOMPARE(container->childItems().count(), 3); + QVERIFY(qobject_cast<QObject*>(container->childItems().at(0))->objectName() == "item4"); + QVERIFY(qobject_cast<QObject*>(container->childItems().at(1))->objectName() == "item5"); + QVERIFY(container->childItems().at(2) == repeater); + + testObject->setUseModel(false); + QCOMPARE(container->childItems().count(), 1); + delete testObject; delete canvas; } -- cgit v0.12 From 86ee5491b6a6849bd7ed3c398a0d296be9f055b0 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 20 Jul 2010 12:45:10 +1000 Subject: Make Item::transformOriginPoint read-only Using this property on Item will break transformOrigin property. We have never documented it. It should not have been used. Now it is enforced as best we can. Task-number: QTBUG-12265 Reviewed-by: Aaron Kennedy (cherry picked from commit 7fb140b63f03b96064ded4ec6f2ec7c93e87b825) --- src/declarative/graphicsitems/qdeclarativeitem.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.h b/src/declarative/graphicsitems/qdeclarativeitem.h index 4f420f8..8878fa0 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.h +++ b/src/declarative/graphicsitems/qdeclarativeitem.h @@ -90,6 +90,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeItem : public QGraphicsObject, public QDe Q_PROPERTY(bool wantsFocus READ wantsFocus NOTIFY wantsFocusChanged) Q_PROPERTY(QDeclarativeListProperty<QGraphicsTransform> transform READ transform DESIGNABLE false FINAL) Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin NOTIFY transformOriginChanged) + Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint) // transformOriginPoint is read-only for Item Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged) Q_ENUMS(TransformOrigin) Q_CLASSINFO("DefaultProperty", "data") -- cgit v0.12 From f8c618c858bdb8140bcedcb0c70d9ce5a44fedec Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 20 Jul 2010 11:28:36 +1000 Subject: Improve documentation on setting arbitray transform origin points transformOriginPoint is undocumented for a reason. It shouldn't be used by Item. Added some docs to assist find the right way, i.e. Scale and Rotation elements. Task-number: QTBUG-12265 (cherry picked from commit 06ef198e0812b514c261ef8f7c82db754450f1fa) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index e5be74c..44a5a11 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1514,6 +1514,9 @@ QDeclarativeItem::~QDeclarativeItem() \endqml The default transform origin is \c Item.Center. + + To set an arbitrary transform origin point use the \l Scale or \l Rotation + transform elements. */ /*! @@ -2176,6 +2179,8 @@ void QDeclarativeItem::setBaselineOffset(qreal offset) } \endqml \endtable + + \sa transform, Rotation */ /*! @@ -2212,6 +2217,8 @@ void QDeclarativeItem::setBaselineOffset(qreal offset) } \endqml \endtable + + \sa transform, Scale */ /*! -- cgit v0.12 From d28dcae97d2244906d1e2c21f38dc1d33396004a Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Tue, 20 Jul 2010 11:40:37 +1000 Subject: fixes for dynamic object creation docs (cherry picked from commit c95889b7896dc5418841ef72326d99296943e616) --- doc/src/declarative/dynamicobjects.qdoc | 77 ++++++++++++++--------- doc/src/snippets/declarative/componentCreation.js | 63 ++++++++++--------- doc/src/snippets/declarative/createComponent.qml | 4 +- doc/src/snippets/declarative/createQmlObject.qml | 3 +- 4 files changed, 84 insertions(+), 63 deletions(-) diff --git a/doc/src/declarative/dynamicobjects.qdoc b/doc/src/declarative/dynamicobjects.qdoc index a5e53a9..6bce4fa 100644 --- a/doc/src/declarative/dynamicobjects.qdoc +++ b/doc/src/declarative/dynamicobjects.qdoc @@ -39,31 +39,35 @@ QML also supports the dynamic creation of objects from within JavaScript code. This is useful if the existing QML elements do not fit the needs of your application, and there are no C++ components involved. -See the {declarative/toys/dynamicscene}{Dynamic Scene example} for a demonstration +See the \l {declarative/toys/dynamicscene}{Dynamic Scene example} for a demonstration of the concepts discussed on this page. \section1 Creating Objects Dynamically There are two ways to create objects dynamically from JavaScript. You can either call -\l {QML:Qt::createComponent()}{Qt.createComponent()} to create -a component which instantiates items, or use \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()} +\l {QML:Qt::createComponent()}{Qt.createComponent()} to dynamically create +a \l Component object, or use \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()} to create an item from a string of QML. -Creating a component is better if you have a predefined -item, and you want to create dynamic instances of that item; creating an item from -a string of QML is useful when the item QML itself is generated at runtime. +Creating a component is better if you have an existing component defined in a \c .qml +file, and you want to dynamically create instances of that component. Otherwise, +creating an item from a string of QML is useful when the item QML itself is generated +at runtime. -If you have a component specified in a QML file, you can dynamically load it with -the \l {QML:Qt::createComponent()}{Qt.createComponent()} function on the \l{QML Global Object}. -This function takes the URL of the QML file as its only argument and returns -a component object which can be used to create and load that QML file. -Once you have a component you can use its \l {Component::createObject()}{createObject()} method to create an instance of +\section2 Creating a Component dynamically + +To dynamically load a component defined in a QML file, call the +\l {QML:Qt::createComponent()}{Qt.createComponent()} function on the \l{QML Global Object}. +This function takes the URL of the QML file as its only argument and creates +a \l Component object from this URL. + +Once you have a \l Component, you can call its \l {Component::createObject()}{createObject()} method to create an instance of the component. This function takes exactly one argument, which is the parent for the new item. Since graphical items will not appear on the scene without a parent, it is recommended that you set the parent this way. However, if you wish to set -the parent later you can safely pass null to this function. +the parent later you can safely pass \c null to this function. -Here is an example. Here is a \c Sprite.qml, which defines a simple QML component: +Here is an example. First there is \c Sprite.qml, which defines a simple QML component: \snippet doc/src/snippets/declarative/Sprite.qml 0 @@ -72,35 +76,48 @@ that will create \c Sprite objects: \snippet doc/src/snippets/declarative/createComponent.qml 0 -Here is \c componentCreation.js. Remember that QML files that might be loaded -over the network cannot be expected to be ready immediately: +Here is \c componentCreation.js. Notice it checks whether the component \l{Component::status}{status} is +\c Component.Ready before calling \l {Component::createObject()}{createObject()} +in case the QML file is loaded over a network and thus is not ready immediately. -\snippet doc/src/snippets/declarative/componentCreation.js 0 +\snippet doc/src/snippets/declarative/componentCreation.js vars \codeline -\snippet doc/src/snippets/declarative/componentCreation.js 1 +\snippet doc/src/snippets/declarative/componentCreation.js func +\snippet doc/src/snippets/declarative/componentCreation.js remote +\snippet doc/src/snippets/declarative/componentCreation.js func-end +\codeline +\snippet doc/src/snippets/declarative/componentCreation.js finishCreation -If you are certain the files will be local, you could simplify to: +If you are certain the QML file to be loaded is a local file, you could omit the \c finishCreation() +function and call \l {Component::createObject()}{createObject()} immediately: -\snippet doc/src/snippets/declarative/componentCreation.js 2 +\snippet doc/src/snippets/declarative/componentCreation.js func +\snippet doc/src/snippets/declarative/componentCreation.js local +\snippet doc/src/snippets/declarative/componentCreation.js func-end -Notice that once a \c Sprite object is created, its parent is set to \c appWindow (defined -in \c main.qml). After creating an item, you must set its parent to an item within the scene. -Otherwise your dynamically created item will not appear in the scene. +Notice in both instances, \l {Component::createObject()}{createObject()} is called with +\c appWindow passed as an argument so that the created object will become a child of the +\c appWindow item in \c main.qml. Otherwise, the new item will not appear in the scene. When using files with relative paths, the path should be relative to the file where \l {QML:Qt::createComponent()}{Qt.createComponent()} is executed. -If the QML component does not exist until runtime, you can create a QML item from + +\section2 Creating an object from a string of QML + +If the QML is not defined until runtime, you can create a QML item from a string of QML using the \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()} function, as in the following example: \snippet doc/src/snippets/declarative/createQmlObject.qml 0 The first argument is the string of QML to create. Just like in a new file, you will need to -import any types you wish to use. For importing files with relative paths, the path should -be relative to the file where the item in the second argument is defined. Remember to set the parent after -creating the item. The second argument is another item in the scene, and the new item is created -in the same QML Context as this item. The third argument is the file path associated with this -item, which is used for error reporting. +import any types you wish to use. The second argument is the parent item for the new item; +this should be an existing item in the scene. The third argument is the file path to associate +with the new item; this is used for error reporting. + +If the string of QML imports files using relative paths, the path should be relative +to the file in which the parent item (the second argument to the method) is defined. + \section1 Maintaining Dynamically Created Objects @@ -114,9 +131,9 @@ The actual creation context depends on how an item is created: \o If \l {QML:Qt::createComponent()}{Qt.createComponent()} is used, the creation context is the QDeclarativeContext in which this method is called \o If \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()} - if called, it is the context of the item used as the second argument to this method + if called, the creation context is the context of the parent item passed to this method \o If a \c {Component{}} item is defined and \l {Component::createObject()}{createObject()} - is called on that item, it is the context in which the \c Component is defined + is called on that item, the creation context is the context in which the \c Component is defined \endlist Also, note that while dynamically created objects may be used the same as other objects, they diff --git a/doc/src/snippets/declarative/componentCreation.js b/doc/src/snippets/declarative/componentCreation.js index 25bc10c..c29a1f9 100644 --- a/doc/src/snippets/declarative/componentCreation.js +++ b/doc/src/snippets/declarative/componentCreation.js @@ -1,7 +1,39 @@ -//![0] +//![vars] var component; var sprite; +//![vars] +//![func] +function createSpriteObjects() { +//![func] + +//![remote] + component = Qt.createComponent("Sprite.qml"); + if (component.status == Component.Ready) + finishCreation(); + else + component.statusChanged.connect(finishCreation); +//![remote] + +//![local] + component = Qt.createComponent("Sprite.qml"); + sprite = component.createObject(appWindow); + + if (sprite == null) { + // Error Handling + console.log("Error creating object"); + } else { + sprite.x = 100; + sprite.y = 100; + // ... + } +//![local] + +//![func-end] +} +//![func-end] + +//![finishCreation] function finishCreation() { if (component.status == Component.Ready) { sprite = component.createObject(appWindow); @@ -17,31 +49,4 @@ function finishCreation() { console.log("Error loading component:", component.errorString()); } } -//![0] - -function createSpriteObjects() { - -//![1] -component = Qt.createComponent("Sprite.qml"); -if (component.status == Component.Ready) - finishCreation(); -else - component.statusChanged.connect(finishCreation); -//![1] - -//![2] -component = Qt.createComponent("Sprite.qml"); -sprite = component.createObject(appWindow); - -if (sprite == null) { - // Error Handling - console.log("Error loading component:", component.errorString()); -} else { - sprite.x = 100; - sprite.y = 100; - // ... -} -//![2] - -} - +//![finishCreation] diff --git a/doc/src/snippets/declarative/createComponent.qml b/doc/src/snippets/declarative/createComponent.qml index 8bfed07..0f9fad5 100644 --- a/doc/src/snippets/declarative/createComponent.qml +++ b/doc/src/snippets/declarative/createComponent.qml @@ -40,12 +40,12 @@ //![0] import Qt 4.7 -import "componentCreation.js" as MyModule +import "componentCreation.js" as MyScript Rectangle { id: appWindow width: 300; height: 300 - Component.onCompleted: MyModule.createSpriteObjects(); + Component.onCompleted: MyScript.createSpriteObjects(); } //![0] diff --git a/doc/src/snippets/declarative/createQmlObject.qml b/doc/src/snippets/declarative/createQmlObject.qml index 380f6f1..64dd21d 100644 --- a/doc/src/snippets/declarative/createQmlObject.qml +++ b/doc/src/snippets/declarative/createQmlObject.qml @@ -42,14 +42,13 @@ import Qt 4.7 Rectangle { id: parentItem - property QtObject newObject width: 100 height: 100 function createIt() { //![0] -newObject = Qt.createQmlObject('import Qt 4.7; Rectangle {color: "red"; width: 20; height: 20}', +var newObject = Qt.createQmlObject('import Qt 4.7; Rectangle {color: "red"; width: 20; height: 20}', parentItem, "dynamicSnippet1"); //![0] } -- cgit v0.12 From fb065bb1ca4c49194e8a936ec0babba04f8471a1 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 20 Jul 2010 15:14:11 +1000 Subject: Rewinding AnchorChanges should not make target item's implicit width and height explicit Task-number: QTBUG-12273 Reviewed-by: Michael Brasser (cherry picked from commit 164b2b54922d87a44a60efe6dbbe2fa3b7716820) --- .../util/qdeclarativestateoperations.cpp | 8 +++-- .../qdeclarativestates/data/anchorRewindBug.qml | 37 ++++++++++++++++++++++ .../qdeclarativestates/tst_qdeclarativestates.cpp | 35 ++++++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativestates/data/anchorRewindBug.qml diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp index 51e6f99..27d4b2d 100644 --- a/src/declarative/util/qdeclarativestateoperations.cpp +++ b/src/declarative/util/qdeclarativestateoperations.cpp @@ -1501,8 +1501,12 @@ void QDeclarativeAnchorChanges::rewind() d->target->setX(d->rewindX); d->target->setY(d->rewindY); - d->target->setWidth(d->rewindWidth); - d->target->setHeight(d->rewindHeight); + if (targetPrivate->widthValid) { + d->target->setWidth(d->rewindWidth); + } + if (targetPrivate->heightValid) { + d->target->setHeight(d->rewindHeight); + } } void QDeclarativeAnchorChanges::saveCurrentValues() diff --git a/tests/auto/declarative/qdeclarativestates/data/anchorRewindBug.qml b/tests/auto/declarative/qdeclarativestates/data/anchorRewindBug.qml new file mode 100644 index 0000000..e6b6020 --- /dev/null +++ b/tests/auto/declarative/qdeclarativestates/data/anchorRewindBug.qml @@ -0,0 +1,37 @@ +import Qt 4.7 +Rectangle { + id: container + color: "red" + height: 200 + width: 200 + Column { + id: column + objectName: "column" + anchors.left: container.right + anchors.bottom: container.bottom + + Rectangle { + id: rectangle + color: "blue" + height: 100 + width: 200 + } + Rectangle { + color: "blue" + height: 100 + width: 200 + } + } + states: State { + name: "reanchored" + AnchorChanges { + target: column + anchors.left: undefined + anchors.right: container.right + } + PropertyChanges { + target: rectangle + opacity: 0 + } + } +} \ No newline at end of file diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 639b2f3..7bc4fd4 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -121,6 +121,7 @@ private slots: void anchorChanges4(); void anchorChanges5(); void anchorChangesCrash(); + void anchorRewindBug(); void script(); void restoreEntryValues(); void explicitChanges(); @@ -807,6 +808,40 @@ void tst_qdeclarativestates::anchorChangesCrash() delete rect; } +// QTBUG-12273 +void tst_qdeclarativestates::anchorRewindBug() +{ + QDeclarativeEngine engine; + + QDeclarativeComponent rectComponent(&engine, SRCDIR "/data/anchorRewindBug.qml"); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QDeclarativeItem * column = rect->findChild<QDeclarativeItem*>("column"); + + QVERIFY(column != 0); + QVERIFY(!QDeclarativeItemPrivate::get(column)->heightValid); + QVERIFY(!QDeclarativeItemPrivate::get(column)->widthValid); + QCOMPARE(column->height(), 200.0); + QDeclarativeItemPrivate::get(rect)->setState("reanchored"); + + // column height and width should stay implicit + // and column's implicit resizing should still work + QVERIFY(!QDeclarativeItemPrivate::get(column)->heightValid); + QVERIFY(!QDeclarativeItemPrivate::get(column)->widthValid); + QCOMPARE(column->height(), 100.0); + + QDeclarativeItemPrivate::get(rect)->setState(""); + + // column height and width should stay implicit + // and column's implicit resizing should still work + QVERIFY(!QDeclarativeItemPrivate::get(column)->heightValid); + QVERIFY(!QDeclarativeItemPrivate::get(column)->widthValid); + QCOMPARE(column->height(), 200.0); + + delete rect; +} + void tst_qdeclarativestates::script() { QDeclarativeEngine engine; -- cgit v0.12 From df40f6846b509087282178bffe572117d8d3eb33 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 21 Jul 2010 10:36:17 +1000 Subject: font.letterSpacing used percentage rather than absolute values. ... and percentage is useless. Task-number: QTBUG-12282 Reviewed-by: Warwick Allison (cherry picked from commit 78a01438e5a37fd1778924f73ca8bfa55960b0d0) --- src/declarative/QmlChanges.txt | 5 ++++- src/declarative/graphicsitems/qdeclarativetext.cpp | 3 +-- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 3 +-- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 3 +-- src/declarative/qml/qdeclarativevaluetype.cpp | 2 +- tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp | 8 ++++---- .../declarative/qmlvisual/qdeclarativetext/font/plaintext.qml | 4 ++-- .../auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 872f6cb..6a2537b 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -1,9 +1,12 @@ ============================================================================= -The changes below are pre Qt 4.7.0 tech preview +The changes below are pre Qt 4.7.0 RC1 TextInput - copy(), cut() and paste() functions added +Font.letterSpacing + - was percentage based. Now specified in pixels. +============================================================================= The changes below are pre Qt 4.7.0 beta 2 QDeclarativeView diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index ea418cf..cf630c8 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -301,8 +301,7 @@ QDeclarativeTextPrivate::~QDeclarativeTextPrivate() Sets the letter spacing for the font. Letter spacing changes the default spacing between individual letters in the font. - A value of 100 will keep the spacing unchanged; a value of 200 will enlarge the spacing after a character by - the width of the character itself. + A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing. */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index f3eef23..8a411f2 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -212,8 +212,7 @@ QString QDeclarativeTextEdit::text() const Sets the letter spacing for the font. Letter spacing changes the default spacing between individual letters in the font. - A value of 100 will keep the spacing unchanged; a value of 200 will enlarge the spacing after a character by - the width of the character itself. + A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing. */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 2a5d73d..321b121 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -176,8 +176,7 @@ void QDeclarativeTextInput::setText(const QString &s) Sets the letter spacing for the font. Letter spacing changes the default spacing between individual letters in the font. - A value of 100 will keep the spacing unchanged; a value of 200 will enlarge the spacing after a character by - the width of the character itself. + A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing. */ /*! diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp index c17ec95..61e550a 100644 --- a/src/declarative/qml/qdeclarativevaluetype.cpp +++ b/src/declarative/qml/qdeclarativevaluetype.cpp @@ -973,7 +973,7 @@ qreal QDeclarativeFontValueType::letterSpacing() const void QDeclarativeFontValueType::setLetterSpacing(qreal size) { - font.setLetterSpacing(QFont::PercentageSpacing, size); + font.setLetterSpacing(QFont::AbsoluteSpacing, size); } qreal QDeclarativeFontValueType::wordSpacing() const diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 80198eb..a1d9f02 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -847,22 +847,22 @@ void tst_qdeclarativetext::letterSpacing() QCOMPARE(textObject->font().letterSpacing(), 0.0); } { - QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: -50 }"; + QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: -2 }"; QDeclarativeComponent textComponent(&engine); textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create()); QVERIFY(textObject != 0); - QCOMPARE(textObject->font().letterSpacing(), -50.); + QCOMPARE(textObject->font().letterSpacing(), -2.); } { - QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: 200 }"; + QString componentStr = "import Qt 4.7\nText { text: \"Hello world!\"; font.letterSpacing: 3 }"; QDeclarativeComponent textComponent(&engine); textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create()); QVERIFY(textObject != 0); - QCOMPARE(textObject->font().letterSpacing(), 200.); + QCOMPARE(textObject->font().letterSpacing(), 3.); } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml index 73dd4d7..e268a60 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml @@ -34,10 +34,10 @@ Rectangle { text: s.text; font.underline: true; font.overline: true; font.strikeout: true } Text { - text: s.text; font.letterSpacing: 200 + text: s.text; font.letterSpacing: 2 } Text { - text: s.text; font.underline: true; font.letterSpacing: 200; font.capitalization: "AllUppercase"; color: "blue" + text: s.text; font.underline: true; font.letterSpacing: 2; font.capitalization: "AllUppercase"; color: "blue" } Text { text: s.text; font.overline: true; font.wordSpacing: 25; font.capitalization: "Capitalize"; color: "green" diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml index b41b93a..a883b9c 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml @@ -34,10 +34,10 @@ Rectangle { text: s.text; font.underline: true; font.overline: true; font.strikeout: true } Text { - text: s.text; font.letterSpacing: 200 + text: s.text; font.letterSpacing: 2 } Text { - text: s.text; font.underline: true; font.letterSpacing: 200; font.capitalization: "AllUppercase"; color: "blue" + text: s.text; font.underline: true; font.letterSpacing: 2; font.capitalization: "AllUppercase"; color: "blue" } Text { text: s.text; font.overline: true; font.wordSpacing: 25; font.capitalization: "Capitalize"; color: "green" -- cgit v0.12 From 76f4e2387b7c40b177845ac1258b91425a6d059c Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Wed, 21 Jul 2010 10:04:11 +1000 Subject: Fix clock example: make sure hands always moves forward. Task-number: QTBUG-12292 (cherry picked from commit 6d8b3453b6b4b151c777ad541ab25ca6bacc7381) --- examples/declarative/toys/clocks/content/Clock.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/declarative/toys/clocks/content/Clock.qml b/examples/declarative/toys/clocks/content/Clock.qml index 24a07ec..eaa14c6 100644 --- a/examples/declarative/toys/clocks/content/Clock.qml +++ b/examples/declarative/toys/clocks/content/Clock.qml @@ -77,7 +77,7 @@ Item { origin.x: 7.5; origin.y: 73; angle: (clock.hours * 30) + (clock.minutes * 0.5) Behavior on angle { - NumberAnimation{} + RotationAnimation{ direction: RotationAnimation.Clockwise } } } } @@ -91,7 +91,7 @@ Item { origin.x: 6.5; origin.y: 83; angle: clock.minutes * 6 Behavior on angle { - NumberAnimation{} + RotationAnimation{ direction: RotationAnimation.Clockwise } } } } @@ -105,7 +105,7 @@ Item { origin.x: 2.5; origin.y: 80; angle: clock.seconds * 6 Behavior on angle { - NumberAnimation{} + RotationAnimation{ direction: RotationAnimation.Clockwise } } } } -- cgit v0.12 From d76f95d30b1c174323bfca982336d96f3a2cebe2 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 22 Jul 2010 13:23:39 +1000 Subject: Make rootContext and engine pointers in QDeclarativeView API const Task-number: QTBUG-12322 Reviewed-by: Aaron Kennedy (cherry picked from commit 0b83a2161261be525f01359397ab1c8c34827749) --- src/declarative/qml/qdeclarativeengine.cpp | 4 ++-- src/declarative/qml/qdeclarativeengine.h | 2 +- src/declarative/util/qdeclarativeview.cpp | 19 ++++++++++--------- src/declarative/util/qdeclarativeview.h | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 559cad1..a31448f 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -545,9 +545,9 @@ void QDeclarativeEngine::clearComponentCache() component instances should be added to sub-contexts parented to the root context. */ -QDeclarativeContext *QDeclarativeEngine::rootContext() +QDeclarativeContext *QDeclarativeEngine::rootContext() const { - Q_D(QDeclarativeEngine); + Q_D(const QDeclarativeEngine); return d->rootContext; } diff --git a/src/declarative/qml/qdeclarativeengine.h b/src/declarative/qml/qdeclarativeengine.h index 01487f5..d971d80 100644 --- a/src/declarative/qml/qdeclarativeengine.h +++ b/src/declarative/qml/qdeclarativeengine.h @@ -74,7 +74,7 @@ public: QDeclarativeEngine(QObject *p = 0); virtual ~QDeclarativeEngine(); - QDeclarativeContext *rootContext(); + QDeclarativeContext *rootContext() const; void clearComponentCache(); diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp index 12a8d3a..c3948c1 100644 --- a/src/declarative/util/qdeclarativeview.cpp +++ b/src/declarative/util/qdeclarativeview.cpp @@ -132,7 +132,7 @@ class QDeclarativeViewPrivate : public QGraphicsViewPrivate, public QDeclarative public: QDeclarativeViewPrivate() : root(0), declarativeItemRoot(0), graphicsWidgetRoot(0), component(0), resizeMode(QDeclarativeView::SizeViewToRootObject), initialSize(0,0) {} - ~QDeclarativeViewPrivate() { delete root; } + ~QDeclarativeViewPrivate() { delete root; delete engine; } void execute(); void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry); void initResize(); @@ -145,7 +145,7 @@ public: QUrl source; - QDeclarativeEngine engine; + QDeclarativeEngine* engine; QDeclarativeComponent *component; QBasicTimer resizetimer; @@ -170,7 +170,7 @@ void QDeclarativeViewPrivate::execute() component = 0; } if (!source.isEmpty()) { - component = new QDeclarativeComponent(&engine, source, q); + component = new QDeclarativeComponent(engine, source, q); if (!component->isLoading()) { q->continueExecute(); } else { @@ -274,6 +274,7 @@ QDeclarativeView::QDeclarativeView(const QUrl &source, QWidget *parent) void QDeclarativeViewPrivate::init() { Q_Q(QDeclarativeView); + engine = new QDeclarativeEngine(); q->setScene(&scene); q->setOptimizationFlags(QGraphicsView::DontSavePainterState); @@ -337,10 +338,10 @@ QUrl QDeclarativeView::source() const Returns a pointer to the QDeclarativeEngine used for instantiating QML Components. */ -QDeclarativeEngine* QDeclarativeView::engine() +QDeclarativeEngine* QDeclarativeView::engine() const { - Q_D(QDeclarativeView); - return &d->engine; + Q_D(const QDeclarativeView); + return d->engine; } /*! @@ -350,10 +351,10 @@ QDeclarativeEngine* QDeclarativeView::engine() arranged hierarchically and this hierarchy is managed by the QDeclarativeEngine. */ -QDeclarativeContext* QDeclarativeView::rootContext() +QDeclarativeContext* QDeclarativeView::rootContext() const { - Q_D(QDeclarativeView); - return d->engine.rootContext(); + Q_D(const QDeclarativeView); + return d->engine->rootContext(); } /*! diff --git a/src/declarative/util/qdeclarativeview.h b/src/declarative/util/qdeclarativeview.h index cdcf134..d3e4948 100644 --- a/src/declarative/util/qdeclarativeview.h +++ b/src/declarative/util/qdeclarativeview.h @@ -75,8 +75,8 @@ public: QUrl source() const; void setSource(const QUrl&); - QDeclarativeEngine* engine(); - QDeclarativeContext* rootContext(); + QDeclarativeEngine* engine() const; + QDeclarativeContext* rootContext() const; QGraphicsObject *rootObject() const; -- cgit v0.12 From 49d1825841a800ac41d15c5bb6e76628c6bb4859 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 22 Jul 2010 14:50:01 +1000 Subject: Fix TextEdit text attribute and text stored in the internal QTextDocument having different contents Task-number: QTBUG-12339 Reviewed-by: Martin Jones (cherry picked from commit 0767c2ff719a35c16c72fac97e6ff612e8c71e21) --- .../graphicsitems/qdeclarativetextedit.cpp | 5 ++-- .../tst_qdeclarativetextedit.cpp | 34 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 8a411f2..5a42525 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -255,7 +255,6 @@ void QDeclarativeTextEdit::setText(const QString &text) Q_D(QDeclarativeTextEdit); if (QDeclarativeTextEdit::text() == text) return; - d->text = text; d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(text)); if (d->richText) { #ifndef QT_NO_TEXTHTMLPARSER @@ -1290,9 +1289,11 @@ void QDeclarativeTextEditPrivate::init() void QDeclarativeTextEdit::q_textChanged() { + Q_D(QDeclarativeTextEdit); + d->text = text(); updateSize(); updateMicroFocus(); - emit textChanged(text()); + emit textChanged(d->text); } void QDeclarativeTextEdit::moveCursorDelegate() diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index f7285c2..bc814e5 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -97,6 +97,7 @@ private slots: void navigation(); void readOnly(); void copyAndPaste(); + void textInput(); void openInputPanelOnClick(); void openInputPanelOnFocus(); void geometrySignals(); @@ -862,6 +863,12 @@ void tst_qdeclarativetextedit::copyAndPaste() { QCOMPARE(textEdit->text(), QString("Hello world!Hello world!")); QCOMPARE(textEdit->text().length(), 24); + // QTBUG-12339 + // test that document and internal text attribute are in sync + QDeclarativeItemPrivate* pri = QDeclarativeItemPrivate::get(textEdit); + QDeclarativeTextEditPrivate *editPrivate = static_cast<QDeclarativeTextEditPrivate*>(pri); + QCOMPARE(textEdit->text(), editPrivate->text); + // select word textEdit->setCursorPosition(0); textEdit->selectWord(); @@ -941,6 +948,33 @@ public: bool closeInputPanelReceived; }; +void tst_qdeclarativetextedit::textInput() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + QDeclarativeTextEdit edit; + QDeclarativeItemPrivate* pri = QDeclarativeItemPrivate::get(&edit); + QDeclarativeTextEditPrivate *editPrivate = static_cast<QDeclarativeTextEditPrivate*>(pri); + edit.setPos(0, 0); + scene.addItem(&edit); + view.show(); + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); + edit.setFocus(true); + QVERIFY(edit.hasActiveFocus() == true); + + // test that input method event is committed + QInputMethodEvent event; + event.setCommitString( "Hello world!", 0, 0); + QApplication::sendEvent(&view, &event); + QCOMPARE(edit.text(), QString("Hello world!")); + + // QTBUG-12339 + // test that document and internal text attribute are in sync + QCOMPARE(editPrivate->text, QString("Hello world!")); +} + void tst_qdeclarativetextedit::openInputPanelOnClick() { QGraphicsScene scene; -- cgit v0.12 From 19835bd63a99e1b71b80f68fac249f4d207975ec Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Tue, 20 Jul 2010 12:26:13 +1000 Subject: Ensure the boundingRect() of Text is correctly calculated. We need to create our cached image in boundingRect() if it doesn't already exist, to prevents painting errors. Reviewed-by: Warwick Allison (cherry picked from commit 6c3cf7e2c5868bc77ffa66059889eda3132531b3) --- src/declarative/graphicsitems/qdeclarativetext.cpp | 2 ++ tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index cf630c8..9b0391d 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -713,6 +713,8 @@ QRectF QDeclarativeText::boundingRect() const // Could include font max left/right bearings to either side of rectangle. if (d->cache || d->style != Normal) { + QDeclarativeTextPrivate *dd = const_cast<QDeclarativeTextPrivate *>(d); + dd->checkImgCache(); switch (d->hAlign) { case AlignLeft: x = 0; diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index a1d9f02..821394d 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -246,6 +246,7 @@ void tst_qdeclarativetext::width() QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create()); QVERIFY(textObject != 0); + QVERIFY(textObject->boundingRect().width() > 0); QCOMPARE(textObject->width(), qreal(metricWidth)); QVERIFY(textObject->textFormat() == QDeclarativeText::AutoText); // setting text doesn't change format } -- cgit v0.12 From 26a1acf139f7a444bc68d9a1540d418c41aa89ec Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 21 Jul 2010 14:16:34 +1000 Subject: Bounding rect of text was not always calculated correctly. The boundingRect depended upon the image cache which may not become valid until after boundingRect is called. Task-number: QTBUG-12291 Reviewed-by: Michael Brasser (cherry picked from commit 3aeafb4839f49f524f10eae65be27fd189d37060) --- src/declarative/graphicsitems/qdeclarativetext.cpp | 80 ++++++++-------------- .../declarative/qdeclarativetext/data/rotated.qml | 18 +++++ .../qdeclarativetext/tst_qdeclarativetext.cpp | 19 +++++ 3 files changed, 64 insertions(+), 53 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativetext/data/rotated.qml diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 9b0391d..83911cb 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -710,63 +710,37 @@ QRectF QDeclarativeText::boundingRect() const int x = 0; int y = 0; - // Could include font max left/right bearings to either side of rectangle. - - if (d->cache || d->style != Normal) { - QDeclarativeTextPrivate *dd = const_cast<QDeclarativeTextPrivate *>(d); - dd->checkImgCache(); - switch (d->hAlign) { - case AlignLeft: - x = 0; - break; - case AlignRight: - x = w - d->imgCache.width(); - break; - case AlignHCenter: - x = (w - d->imgCache.width()) / 2; - break; - } - - switch (d->vAlign) { - case AlignTop: - y = 0; - break; - case AlignBottom: - y = h - d->imgCache.height(); - break; - case AlignVCenter: - y = (h - d->imgCache.height()) / 2; - break; - } + QSize size = d->cachedLayoutSize; + if (d->style != Normal) + size += QSize(2,2); - return QRectF(x,y,d->imgCache.width(),d->imgCache.height()); - } else { - switch (d->hAlign) { - case AlignLeft: - x = 0; - break; - case AlignRight: - x = w - d->cachedLayoutSize.width(); - break; - case AlignHCenter: - x = (w - d->cachedLayoutSize.width()) / 2; - break; - } + // Could include font max left/right bearings to either side of rectangle. - switch (d->vAlign) { - case AlignTop: - y = 0; - break; - case AlignBottom: - y = h - d->cachedLayoutSize.height(); - break; - case AlignVCenter: - y = (h - d->cachedLayoutSize.height()) / 2; - break; - } + switch (d->hAlign) { + case AlignLeft: + x = 0; + break; + case AlignRight: + x = w - size.width(); + break; + case AlignHCenter: + x = (w - size.width()) / 2; + break; + } - return QRectF(x,y,d->cachedLayoutSize.width(),d->cachedLayoutSize.height()); + switch (d->vAlign) { + case AlignTop: + y = 0; + break; + case AlignBottom: + y = h - size.height(); + break; + case AlignVCenter: + y = (h - size.height()) / 2; + break; } + + return QRectF(x,y,size.width(),size.height()); } void QDeclarativeText::geometryChanged(const QRectF &newGeometry, diff --git a/tests/auto/declarative/qdeclarativetext/data/rotated.qml b/tests/auto/declarative/qdeclarativetext/data/rotated.qml new file mode 100644 index 0000000..01eec44 --- /dev/null +++ b/tests/auto/declarative/qdeclarativetext/data/rotated.qml @@ -0,0 +1,18 @@ +import Qt 4.7 + +Rectangle { + width : 200 + height : 100 + + Text { + objectName: "text" + x: 20 + y: 20 + height : 20 + width : 80 + text : "Something" + rotation : 30 + transformOrigin : Item.TopLeft + } +} + diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 821394d..658f381 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -97,6 +97,8 @@ private slots: void clickLink(); + void QTBUG_12291(); + private: QStringList standard; QStringList richText; @@ -898,6 +900,23 @@ void tst_qdeclarativetext::wordSpacing() } } +void tst_qdeclarativetext::QTBUG_12291() +{ + QDeclarativeView *canvas = createView(SRCDIR "/data/rotated.qml"); + + canvas->show(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + + QObject *ob = canvas->rootObject(); + QVERIFY(ob != 0); + + QDeclarativeText *text = ob->findChild<QDeclarativeText*>("text"); + QVERIFY(text); + QVERIFY(text->boundingRect().isValid()); +} + class EventSender : public QGraphicsItem { public: -- cgit v0.12 From be4b912cb5068db2ba40e85c4857e907768264b8 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Tue, 13 Jul 2010 09:45:30 +1000 Subject: Autotest for QTBUG-5491 (Animation in a Behavior doesn't update running) (cherry picked from commit 5efd577b1aea64f422e08ca8d54e041fa4b20783) --- .../qdeclarativebehaviors/data/runningTrue.qml | 20 ++++++++++++++++++++ .../tst_qdeclarativebehaviors.cpp | 18 ++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativebehaviors/data/runningTrue.qml diff --git a/tests/auto/declarative/qdeclarativebehaviors/data/runningTrue.qml b/tests/auto/declarative/qdeclarativebehaviors/data/runningTrue.qml new file mode 100644 index 0000000..d439875 --- /dev/null +++ b/tests/auto/declarative/qdeclarativebehaviors/data/runningTrue.qml @@ -0,0 +1,20 @@ +import Qt 4.7 + +Rectangle { + id: root + width:200; height:200 + + property real myValue: 0 + + Rectangle { + anchors.centerIn: parent + width: 100 + height: 100 + color: "green" + smooth: true + rotation: myValue + Behavior on rotation { + RotationAnimation { id: rotAnim; objectName: "rotAnim"; direction: RotationAnimation.Shortest } + } + } +} diff --git a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp index 70739fb..5c2c145 100644 --- a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp +++ b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ #include <qtest.h> +#include <qsignalspy.h> #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativecomponent.h> #include <QtDeclarative/qdeclarativeview.h> @@ -78,6 +79,7 @@ private slots: void dontStart(); void startup(); void groupedPropertyCrash(); + void runningTrue(); }; void tst_qdeclarativebehaviors::simpleBehavior() @@ -366,6 +368,22 @@ void tst_qdeclarativebehaviors::groupedPropertyCrash() QVERIFY(rect); //don't crash } +//QTBUG-5491 +void tst_qdeclarativebehaviors::runningTrue() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/runningTrue.qml")); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); + QVERIFY(rect); + + QDeclarativeAbstractAnimation *animation = rect->findChild<QDeclarativeAbstractAnimation*>("rotAnim"); + QVERIFY(animation); + + QSignalSpy runningSpy(animation, SIGNAL(runningChanged(bool))); + rect->setProperty("myValue", 180); + QTRY_VERIFY(runningSpy.count() > 0); +} + QTEST_MAIN(tst_qdeclarativebehaviors) #include "tst_qdeclarativebehaviors.moc" -- cgit v0.12 From 6ff23f2b2d96e852ed1fff0ecef0e8ee28ec82e7 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Wed, 21 Jul 2010 10:52:08 +1000 Subject: Only ignore the same target value for a Behavior when it is running. Otherwise a Behavior may mistakenly not be triggered. This situation can arise when the property in question has been manipulated via the property system, followed by a direct function call (which correctly bypasses the Behavior), followed by a another change via the property system. Task-number: QTBUG-12295 (cherry picked from commit 64833c0a648211f3fe7547436f022edc0ceb51ac) --- src/declarative/util/qdeclarativebehavior.cpp | 2 +- .../qdeclarativebehaviors/data/qtbug12295.qml | 17 ++++++++++++++ .../tst_qdeclarativebehaviors.cpp | 27 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp index 4480e75..525df30 100644 --- a/src/declarative/util/qdeclarativebehavior.cpp +++ b/src/declarative/util/qdeclarativebehavior.cpp @@ -186,7 +186,7 @@ void QDeclarativeBehavior::write(const QVariant &value) return; } - if (value == d->targetValue) + if (d->animation->isRunning() && value == d->targetValue) return; d->currentValue = d->property.read(); diff --git a/tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml b/tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml new file mode 100644 index 0000000..804559c --- /dev/null +++ b/tests/auto/declarative/qdeclarativebehaviors/data/qtbug12295.qml @@ -0,0 +1,17 @@ +import Qt 4.7 + +Rectangle { + width: 200 + height: 200 + color: "blue" + + Rectangle { + id: myRect + objectName: "myRect" + width: 100 + height: 100 + Behavior on x { + NumberAnimation {} + } + } +} diff --git a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp index 5c2c145..bb7fc7b 100644 --- a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp +++ b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp @@ -80,6 +80,7 @@ private slots: void startup(); void groupedPropertyCrash(); void runningTrue(); + void sameValue(); }; void tst_qdeclarativebehaviors::simpleBehavior() @@ -384,6 +385,32 @@ void tst_qdeclarativebehaviors::runningTrue() QTRY_VERIFY(runningSpy.count() > 0); } +//QTBUG-12295 +void tst_qdeclarativebehaviors::sameValue() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/qtbug12295.qml")); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); + QVERIFY(rect); + + QDeclarativeRectangle *target = rect->findChild<QDeclarativeRectangle*>("myRect"); + QVERIFY(target); + + target->setX(100); + QCOMPARE(target->x(), qreal(100)); + + target->setProperty("x", 0); + QTRY_VERIFY(target->x() != qreal(0) && target->x() != qreal(100)); + + target->setX(100); + QCOMPARE(target->x(), qreal(100)); + + //this is the main point of the test -- the behavior needs to be triggered again + //even though we set 0 twice in a row. + target->setProperty("x", 0); + QTRY_VERIFY(target->x() != qreal(0) && target->x() != qreal(100)); +} + QTEST_MAIN(tst_qdeclarativebehaviors) #include "tst_qdeclarativebehaviors.moc" -- cgit v0.12 From 3f0bae81dc23ecec747907cb5525ed383867801a Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Wed, 14 Jul 2010 11:51:22 +1000 Subject: improvements to docs and examples (cherry picked from commit 07ebc9161263c04dc072b9fc2a922b9665cbe7be) --- doc/src/declarative/anchor-layout.qdoc | 5 +- doc/src/declarative/basictypes.qdoc | 3 + doc/src/images/qml-mousearea-example.png | Bin 5527 -> 6969 bytes doc/src/images/qml-xmllistmodel-example.png | Bin 0 -> 5252 bytes doc/src/snippets/declarative/mousearea.qml | 13 +++-- .../cppextensions/imageprovider/imageprovider.cpp | 2 +- .../mousearea/mousearea-example.qml | 64 ++++++++++++--------- .../graphicsitems/qdeclarativeimage.cpp | 59 +++++++++---------- src/declarative/graphicsitems/qdeclarativeitem.cpp | 6 +- .../graphicsitems/qdeclarativemousearea.cpp | 10 +++- src/declarative/qml/qdeclarativeimageprovider.cpp | 16 ++++-- .../util/qdeclarativestateoperations.cpp | 2 +- src/declarative/util/qdeclarativexmllistmodel.cpp | 17 ++++-- 13 files changed, 115 insertions(+), 82 deletions(-) create mode 100644 doc/src/images/qml-xmllistmodel-example.png diff --git a/doc/src/declarative/anchor-layout.qdoc b/doc/src/declarative/anchor-layout.qdoc index 9c217e1..5c025e5 100644 --- a/doc/src/declarative/anchor-layout.qdoc +++ b/doc/src/declarative/anchor-layout.qdoc @@ -33,7 +33,10 @@ In addition to the more traditional \l Grid, \l Row, and \l Column, QML also provides a way to layout items using the concept of \e anchors. Each item can be thought of as having a set of 7 invisible "anchor lines": -\e left, \e horizontalCenter, \e right, \e top, \e verticalCenter, \e baseline, and \e bottom. +\l {Item::anchors.left}{left}, \l {Item::anchors.horizontalCenter}{horizontalCenter}, +\l {Item::anchors.right}{right}, \l {Item::anchors.top}{top}, +\l {Item::anchors.verticalCenter}{verticalCenter}, \l {Item::anchors.baseline}{baseline}, +and \l {Item::anchors.bottom}{bottom}. \image edges_qml.png diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 159f40d..6aa1808 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -107,6 +107,9 @@ Text { text: "Hello world!" } \endqml + Strings have a \c length attribute that holds the number of + characters in the string. + \sa {QML Basic Types} */ diff --git a/doc/src/images/qml-mousearea-example.png b/doc/src/images/qml-mousearea-example.png index c6e52d6..c0eef7f 100644 Binary files a/doc/src/images/qml-mousearea-example.png and b/doc/src/images/qml-mousearea-example.png differ diff --git a/doc/src/images/qml-xmllistmodel-example.png b/doc/src/images/qml-xmllistmodel-example.png new file mode 100644 index 0000000..be2d15d Binary files /dev/null and b/doc/src/images/qml-xmllistmodel-example.png differ diff --git a/doc/src/snippets/declarative/mousearea.qml b/doc/src/snippets/declarative/mousearea.qml index 8e7c737..fb6cba0 100644 --- a/doc/src/snippets/declarative/mousearea.qml +++ b/doc/src/snippets/declarative/mousearea.qml @@ -83,17 +83,18 @@ Rectangle { id: container width: 600; height: 200 - Image { - id: pic - source: "pics/qt.png" - opacity: (600.0 - pic.x) / 600 + Rectangle { + id: rect + width: 50; height: 50 + color: "red" + opacity: (600.0 - rect.x) / 600 MouseArea { anchors.fill: parent - drag.target: pic + drag.target: rect drag.axis: Drag.XAxis drag.minimumX: 0 - drag.maximumX: container.width - pic.width + drag.maximumX: container.width - rect.width } } } diff --git a/examples/declarative/cppextensions/imageprovider/imageprovider.cpp b/examples/declarative/cppextensions/imageprovider/imageprovider.cpp index 995192a..18d027e 100644 --- a/examples/declarative/cppextensions/imageprovider/imageprovider.cpp +++ b/examples/declarative/cppextensions/imageprovider/imageprovider.cpp @@ -54,7 +54,7 @@ class ColorImageProvider : public QDeclarativeImageProvider { public: ColorImageProvider() - : QDeclarativeImageProvider(Pixmap) + : QDeclarativeImageProvider(QDeclarativeImageProvider::Pixmap) { } diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example.qml b/examples/declarative/touchinteraction/mousearea/mousearea-example.qml index 64f72a9..85ea2dc 100644 --- a/examples/declarative/touchinteraction/mousearea/mousearea-example.qml +++ b/examples/declarative/touchinteraction/mousearea/mousearea-example.qml @@ -44,59 +44,69 @@ Rectangle { id: box width: 350; height: 250 - function showInfo(text) { - statusText.text = text - } - Rectangle { + id: redSquare width: 80; height: 80 + anchors.top: parent.top; anchors.left: parent.left; anchors.margins: 10 color: "red" Text { text: "Click"; font.pixelSize: 16; anchors.centerIn: parent } MouseArea { - anchors.fill: parent + anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton - onPressed: box.showInfo('Pressed (x=' + mouse.x + ' y=' + mouse.y + ' button=' - + (mouse.button == Qt.RightButton ? 'right' : 'left') - + ' Shift=' + (mouse.modifiers & Qt.ShiftModifier ? 'true' : 'false') + ')') - onReleased: box.showInfo('Released (x=' + mouse.x + ' y=' + mouse.y - + ' isClick=' + mouse.isClick + ' wasHeld=' + mouse.wasHeld + ')') - onClicked: box.showInfo('Clicked (x=' + mouse.x + ' y=' + mouse.y + ' wasHeld=' + mouse.wasHeld + ')') - onDoubleClicked: box.showInfo('Double clicked (x=' + mouse.x + ' y=' + mouse.y + ')') - onPressAndHold: box.showInfo('Press and hold') - onEntered: box.showInfo('Entered (pressed=' + pressed + ')') - onExited: box.showInfo('Exited (pressed=' + pressed + ')') + onEntered: info.text = 'Entered' + onExited: info.text = 'Exited (pressed=' + pressed + ')' + + onPressed: { + info.text = 'Pressed (button=' + (mouse.button == Qt.RightButton ? 'right' : 'left') + + ' shift=' + (mouse.modifiers & Qt.ShiftModifier ? 'true' : 'false') + ')' + var posInBox = redSquare.mapToItem(box, mouse.x, mouse.y) + posInfo.text = + mouse.x + ',' + mouse.y + ' in square' + + ' (' + posInBox.x + ',' + posInBox.y + ' in window)' + } + + onReleased: { + info.text = 'Released (isClick=' + mouse.isClick + ' wasHeld=' + mouse.wasHeld + ')' + posInfo.text = '' + } + + onPressAndHold: info.text = 'Press and hold' + onClicked: info.text = 'Clicked (wasHeld=' + mouse.wasHeld + ')' + onDoubleClicked: info.text = 'Double clicked' } } Rectangle { - width: 80; height: 80; anchors.right: parent.right + id: blueSquare + width: 80; height: 80 + x: box.width - width - 10; y: 10 // making this item draggable, so don't use anchors color: "blue" Text { text: "Drag"; font.pixelSize: 16; color: "white"; anchors.centerIn: parent } MouseArea { anchors.fill: parent - drag.target: parent - drag.axis: Drag.XAxis + drag.target: blueSquare + drag.axis: Drag.XandYAxis drag.minimumX: 0 - drag.maximumX: 150 - - onPressed: box.showInfo('Pressed') - onReleased: box.showInfo('Released (isClick=' + mouse.isClick + ' wasHeld=' + mouse.wasHeld + ')') - onClicked: box.showInfo('Clicked' + ' (wasHeld=' + mouse.wasHeld + ')') - onDoubleClicked: box.showInfo('Double clicked') - onPressAndHold: box.showInfo('Press and hold') + drag.maximumX: box.width - parent.width + drag.minimumY: 0 + drag.maximumY: box.height - parent.width } } Text { - id: statusText - anchors.bottom: parent.bottom; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 30 + id: info + anchors.bottom: posInfo.top; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 30 onTextChanged: console.log(text) } + + Text { + id: posInfo + anchors.bottom: parent.bottom; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 30 + } } diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 3dde6f7..5146070 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -322,17 +322,34 @@ qreal QDeclarativeImage::paintedHeight() const /*! \qmlproperty QSize Image::sourceSize - This property holds the size of the loaded image, in pixels. + This property holds the actual width and height of the loaded image. - This is used to control the storage used by a loaded image. Unlike - the width and height properties, which scale the painting of the image, this property - affects the number of pixels stored. + Unlike the \l {Item::}{width} and \l {Item::}{height} properties, which scale + the painting of the image, this property sets the actual number of pixels + stored for the loaded image so that large images do not use more + memory than necessary. For example, this ensures the image is memory is no + larger than 1024x1024 pixels, regardless of the Image's \l {Item::}{width} and + \l {Item::}{height} values: + + \code + Rectangle { + width: ... + height: ... + + Image { + anchors.fill: parent + source: "reallyBigImage.jpg" + sourceSize.width: 1024 + sourceSize.height: 1024 + } + } + \endcode If the image's actual size is larger than the sourceSize, the image is scaled down. If only one dimension of the size is set to greater than 0, the other dimension is set in proportion to preserve the source image's aspect ratio. (The \l fillMode is independent of this.) - + If the source is an instrinsically scalable image (eg. SVG), this property determines the size of the loaded image regardless of intrinsic size. Avoid changing this property dynamically; rendering an SVG is \e slow compared @@ -342,34 +359,8 @@ qreal QDeclarativeImage::paintedHeight() const be no greater than this property specifies. For some formats (currently only JPEG), the whole image will never actually be loaded into memory. - \note \e{Changing this property dynamically will lead to the image source being reloaded, - potentially even from the network if it is not in the disk cache.} - - Here is an example that ensures the size of the image in memory is - no larger than 1024x1024 pixels, regardless of the size of the Image element. - - \code - Image { - anchors.fill: parent - source: "images/reallyBigImage.jpg" - sourceSize.width: 1024 - sourceSize.height: 1024 - } - \endcode - - The example below ensures the memory used by the image is no more than necessary - to display the image at the size of the Image element. - Of course if the Image element is resized a costly reload will be required, so - use this technique \e only when the Image size is fixed. - - \code - Image { - anchors.fill: parent - source: "images/reallyBigImage.jpg" - sourceSize.width: width - sourceSize.height: height - } - \endcode + \note \e {Changing this property dynamically causes the image source to be reloaded, + potentially even from the network, if it is not in the disk cache.} */ void QDeclarativeImage::updatePaintedGeometry() @@ -413,6 +404,8 @@ void QDeclarativeImage::geometryChanged(const QRectF &newGeometry, const QRectF Image can handle any image format supported by Qt, loaded from any URL scheme supported by Qt. The URL may be absolute, or relative to the URL of the component. + + \sa QDeclarativeImageProvider */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 44a5a11..14158c8 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2074,7 +2074,7 @@ QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline() const relationship with other items. Margins apply to top, bottom, left, right, and fill anchors. - The margins property can be used to set all of the various margins at once, to the same value. + The \c anchors.margins property can be used to set all of the various margins at once, to the same value. Offsets apply for horizontal center, vertical center, and baseline anchors. @@ -2109,10 +2109,12 @@ QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline() const \endqml \endtable - anchors.fill provides a convenient way for one item to have the + \c anchors.fill provides a convenient way for one item to have the same geometry as another item, and is equivalent to connecting all four directional anchors. + To clear an anchor value, set it to \c undefined. + \note You can only anchor an item to siblings or a parent. For more information see \l {anchor-layout}{Anchor Layouts}. diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 7b65ca7..b7b0c9e 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -767,10 +767,16 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag() \i \c drag.minimum and \c drag.maximum limit how far the target can be dragged along the corresponding axes. \endlist - The following example displays an image that can be dragged along the X-axis. The opacity - of the image is reduced when it is dragged to the right. + The following example displays a \l Rectangle that can be dragged along the X-axis. The opacity + of the rectangle is reduced when it is dragged to the right. \snippet doc/src/snippets/declarative/mousearea.qml drag + + \note Items cannot be dragged if they are anchored for the requested + \c drag.axis. For example, if \c anchors.left or \c anchors.right was set + for \c rect in the above example, it cannot be dragged along the X-axis. + This can be avoided by settng the anchor value to \c undefined in + an \l onPressed handler. */ QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativeimageprovider.cpp b/src/declarative/qml/qdeclarativeimageprovider.cpp index f38da4e..a294c38 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.cpp +++ b/src/declarative/qml/qdeclarativeimageprovider.cpp @@ -180,9 +180,13 @@ QDeclarativeImageProvider::ImageType QDeclarativeImageProvider::imageType() cons Implement this method to return the image with \a id. The default implementation returns an empty image. - If \a requestedSize is a valid size, the image returned should be of that size. + The \a requestedSize corresponds to the \l {Image::sourceSize} requested by + an Image element. If \a requestedSize is a valid size, the image + returned should be of that size. - In all cases, \a size must be set to the original size of the image. + In all cases, \a size must be set to the original size of the image. This + is used to set the \l {Item::}{width} and \l {Item::}{height} of image + elements that should be automatically sized to the loaded image. \note this method may be called by multiple threads, so ensure the implementation of this method is reentrant. @@ -201,9 +205,13 @@ QImage QDeclarativeImageProvider::requestImage(const QString &id, QSize *size, c Implement this method to return the pixmap with \a id. The default implementation returns an empty pixmap. - If \a requestedSize is a valid size, the image returned should be of that size. + The \a requestedSize corresponds to the \l {Image::sourceSize} requested by + an Image element. If \a requestedSize is a valid size, the image + returned should be of that size. - In all cases, \a size must be set to the original size of the image. + In all cases, \a size must be set to the original size of the image. This + is used to set the \l {Item::}{width} and \l {Item::}{height} of image + elements that should be automatically sized to the loaded image. \note this method may be called by multiple threads, so ensure the implementation of this method is reentrant. diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp index 27d4b2d..2291c16 100644 --- a/src/declarative/util/qdeclarativestateoperations.cpp +++ b/src/declarative/util/qdeclarativestateoperations.cpp @@ -1039,7 +1039,7 @@ public: /*! \qmlproperty Item AnchorChanges::target - This property holds the Item whose anchors will change + This property holds the \l Item for which the anchor changes will be applied. */ QDeclarativeAnchorChanges::QDeclarativeAnchorChanges(QObject *parent) diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 5583007..dcb93cf 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -508,8 +508,8 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla \since 4.7 \brief The XmlListModel element is used to specify a model using XPath expressions. - XmlListModel is used to create a model from XML data. XmlListModel can be used as a data source - for the view classes (such as ListView, PathView, GridView) and other classes that interact with model + XmlListModel is used to create a model from XML data. It can be used as a data source + for view elements (such as ListView, PathView, GridView) and other elements that interact with model data (such as \l Repeater). For example, if there is a XML document at http://www.mysite.com/feed.xml like this: @@ -520,11 +520,11 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla ... <channel> <item> - <title>Item A</title> + <title>A blog post</title> <pubDate>Sat, 07 Sep 2010 10:00:01 GMT</pubDate> </item> <item> - <title>Item B</title> + <title>Another blog post</title> <pubDate>Sat, 07 Sep 2010 15:35:01 GMT</pubDate> </item> </channel> @@ -560,10 +560,17 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla ListView { width: 180; height: 300 model: xmlModel - delegate: Text { title + " (" + pubDate + ")" } + delegate: Text { text: title + " (" + pubDate + ")" } } \endqml + \image qml-xmllistmodel-example.png + + The XmlListModel data is loaded asynchronously, and \l status + is set to \l XmlListModel::Ready when loading is complete. + Note this means when XmlListModel is used for a view, the view is not + populated until the model is loaded. + \section2 Using key XML roles -- cgit v0.12 From 789524c44f0c292b3309bbd000831f25e99c1b32 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Tue, 20 Jul 2010 12:20:21 +1000 Subject: Better defaults for MouseArea's drag. Allow essentially unbounded dragging once drag.target is set. The previous default of contraining the dragging to 0,0 (i.e. no drag) was unintuitive for learners. It's rare that unbounded is actually what you want, but it makes it much easier to get started with the element. Task-number: QTBUG-11184 Reviewed-by: Martin Jones (cherry picked from commit b2f90dedbeac285338af07fbffaec97ceaf0876f) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 5 +---- src/declarative/graphicsitems/qdeclarativemousearea.cpp | 3 ++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 14158c8..f6c395f 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -59,16 +59,13 @@ #include <QEvent> #include <QGraphicsSceneMouseEvent> #include <QtCore/qnumeric.h> +#include <QtCore/qmath.h> #include <QtScript/qscriptengine.h> #include <QtGui/qgraphicstransform.h> #include <qlistmodelinterface_p.h> QT_BEGIN_NAMESPACE -#ifndef FLT_MAX -#define FLT_MAX 1E+37 -#endif - /*! \qmlclass Transform QGraphicsTransform \since 4.7 diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index b7b0c9e..7e4a36f 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -45,12 +45,13 @@ #include "private/qdeclarativeevents_p_p.h" #include <QGraphicsSceneMouseEvent> +#include <QtCore/qmath.h> QT_BEGIN_NAMESPACE static const int PressAndHoldDelay = 800; QDeclarativeDrag::QDeclarativeDrag(QObject *parent) -: QObject(parent), _target(0), _axis(XandYAxis), _xmin(0), _xmax(0), _ymin(0), _ymax(0), +: QObject(parent), _target(0), _axis(XandYAxis), _xmin(-FLT_MAX), _xmax(FLT_MAX), _ymin(-FLT_MAX), _ymax(FLT_MAX), _active(false) { } -- cgit v0.12 From bf4cad4793a1d661785b0a53c78adfc6ab6a759a Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 21 Jul 2010 08:46:43 +1000 Subject: Restore the FLT_MAX define. Seems some platforms don't have it. (cherry picked from commit 7725da34a828df00feb289515c11fa8aea1a55d8) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 4 ++++ src/declarative/graphicsitems/qdeclarativemousearea.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index f6c395f..1f97783 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -64,6 +64,10 @@ #include <QtGui/qgraphicstransform.h> #include <qlistmodelinterface_p.h> +#ifndef FLT_MAX +#define FLT_MAX 1E+37 +#endif + QT_BEGIN_NAMESPACE /*! diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 7e4a36f..67de288 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -47,6 +47,10 @@ #include <QGraphicsSceneMouseEvent> #include <QtCore/qmath.h> +#ifndef FLT_MAX +#define FLT_MAX 1E+37 +#endif + QT_BEGIN_NAMESPACE static const int PressAndHoldDelay = 800; -- cgit v0.12 From 6ae73e7d73b29c4ccfb62a9b2bcf42404c96948f Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Wed, 21 Jul 2010 09:18:21 +1000 Subject: Compile: include <float.h> for usage of FLT_MAX. (cherry picked from commit b325c90e5a0e5088aa8723d943f4c38b14048bd7) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 5 +---- src/declarative/graphicsitems/qdeclarativemousearea.cpp | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 1f97783..89484b2 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -59,14 +59,11 @@ #include <QEvent> #include <QGraphicsSceneMouseEvent> #include <QtCore/qnumeric.h> -#include <QtCore/qmath.h> #include <QtScript/qscriptengine.h> #include <QtGui/qgraphicstransform.h> #include <qlistmodelinterface_p.h> -#ifndef FLT_MAX -#define FLT_MAX 1E+37 -#endif +#include <float.h> QT_BEGIN_NAMESPACE diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 67de288..8ee6093 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -45,11 +45,8 @@ #include "private/qdeclarativeevents_p_p.h" #include <QGraphicsSceneMouseEvent> -#include <QtCore/qmath.h> -#ifndef FLT_MAX -#define FLT_MAX 1E+37 -#endif +#include <float.h> QT_BEGIN_NAMESPACE static const int PressAndHoldDelay = 800; -- cgit v0.12 From cae1bb9909e1cdb6963b29f4a93b03aa81c50880 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 22 Jul 2010 13:57:46 +1000 Subject: Allow MouseArea dragging to filter mouse events from descendants This allows dragging a MouseArea that contains a clickable MouseArea, for example. Task-number: QTBUG-12323 Reviewed-by: Michael Brasser (cherry picked from commit 5dd0dfcd7a079065f99c6149c15b58e69f302729) --- .../snippets/declarative/mouseareadragfilter.qml | 72 ++++++++++++++++ .../graphicsitems/qdeclarativeflickable.cpp | 2 +- .../graphicsitems/qdeclarativemousearea.cpp | 96 +++++++++++++++++++++- .../graphicsitems/qdeclarativemousearea_p.h | 10 ++- .../graphicsitems/qdeclarativemousearea_p_p.h | 4 +- .../tst_qdeclarativemousearea.cpp | 11 +++ 6 files changed, 189 insertions(+), 6 deletions(-) create mode 100644 doc/src/snippets/declarative/mouseareadragfilter.qml diff --git a/doc/src/snippets/declarative/mouseareadragfilter.qml b/doc/src/snippets/declarative/mouseareadragfilter.qml new file mode 100644 index 0000000..52ed10c --- /dev/null +++ b/doc/src/snippets/declarative/mouseareadragfilter.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [dragfilter] +import Qt 4.7 + +Rectangle { + width: 480 + height: 320 + Rectangle { + x: 30; y: 30 + width: 300; height: 240 + color: "lightsteelblue" + + MouseArea { + anchors.fill: parent + drag.target: parent; + drag.axis: "XAxis" + drag.minimumX: 30 + drag.maximumX: 150 + drag.filterChildren: true + + Rectangle { + color: "yellow" + x: 50; y : 50 + width: 100; height: 100 + MouseArea { + anchors.fill: parent + onClicked: console.log("Clicked") + } + } + } + } +} +//! [dragfilter] diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 70cbf74..805e623 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1214,6 +1214,7 @@ bool QDeclarativeFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event) d->handleMousePressEvent(&mouseEvent); d->captureDelayedPress(event); + stealThisEvent = d->stealMouse; // Update stealThisEvent in case changed by function call above break; case QEvent::GraphicsSceneMouseRelease: if (d->delayedPressEvent) { @@ -1234,7 +1235,6 @@ bool QDeclarativeFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event) default: break; } - stealThisEvent = d->stealMouse; // Update stealThisEvent and grabber in case changed by function calls above grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()); if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) { d->clearDelayedPress(); diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 8ee6093..40c621a 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -53,7 +53,7 @@ static const int PressAndHoldDelay = 800; QDeclarativeDrag::QDeclarativeDrag(QObject *parent) : QObject(parent), _target(0), _axis(XandYAxis), _xmin(-FLT_MAX), _xmax(FLT_MAX), _ymin(-FLT_MAX), _ymax(FLT_MAX), -_active(false) +_active(false), _filterChildren(false) { } @@ -160,12 +160,24 @@ void QDeclarativeDrag::setActive(bool drag) emit activeChanged(); } +bool QDeclarativeDrag::filterChildren() const +{ + return _filterChildren; +} + +void QDeclarativeDrag::setFilterChildren(bool filter) +{ + if (_filterChildren == filter) + return; + _filterChildren = filter; + emit filterChildrenChanged(); +} + QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate() { delete drag; } - /*! \qmlclass MouseArea QDeclarativeMouseArea \since 4.7 @@ -398,6 +410,7 @@ void QDeclarativeMouseArea::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativeMouseArea); d->moved = false; + d->stealMouse = false; if (!d->absorb) QDeclarativeItem::mousePressEvent(event); else { @@ -456,8 +469,10 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event) const int dragThreshold = QApplication::startDragDistance(); qreal dx = qAbs(curLocalPos.x() - startLocalPos.x()); qreal dy = qAbs(curLocalPos.y() - startLocalPos.y()); - if ((d->dragX && !(dx < dragThreshold)) || (d->dragY && !(dy < dragThreshold))) + if ((d->dragX && !(dx < dragThreshold)) || (d->dragY && !(dy < dragThreshold))) { d->drag->setActive(true); + d->stealMouse = true; + } if (!keepMouseGrab()) { if ((!d->dragY && dy < dragThreshold && d->dragX && dx > dragThreshold) || (!d->dragX && dx < dragThreshold && d->dragY && dy > dragThreshold) @@ -495,6 +510,7 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void QDeclarativeMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativeMouseArea); + d->stealMouse = false; if (!d->absorb) { QDeclarativeItem::mouseReleaseEvent(event); } else { @@ -505,6 +521,8 @@ void QDeclarativeMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) // If we don't accept hover, we need to reset containsMouse. if (!acceptHoverEvents()) setHovered(false); + if (scene()->mouseGrabberItem() == this) + ungrabMouse(); setKeepMouseGrab(false); } } @@ -579,6 +597,71 @@ bool QDeclarativeMouseArea::sceneEvent(QEvent *event) return rv; } +bool QDeclarativeMouseArea::sendMouseEvent(QGraphicsSceneMouseEvent *event) +{ + Q_D(QDeclarativeMouseArea); + QGraphicsSceneMouseEvent mouseEvent(event->type()); + QRectF myRect = mapToScene(QRectF(0, 0, width(), height())).boundingRect(); + + QGraphicsScene *s = scene(); + QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0; + bool stealThisEvent = d->stealMouse; + if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) { + mouseEvent.setAccepted(false); + for (int i = 0x1; i <= 0x10; i <<= 1) { + if (event->buttons() & i) { + Qt::MouseButton button = Qt::MouseButton(i); + mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button))); + } + } + mouseEvent.setScenePos(event->scenePos()); + mouseEvent.setLastScenePos(event->lastScenePos()); + mouseEvent.setPos(mapFromScene(event->scenePos())); + mouseEvent.setLastPos(mapFromScene(event->lastScenePos())); + + switch(mouseEvent.type()) { + case QEvent::GraphicsSceneMouseMove: + mouseMoveEvent(&mouseEvent); + break; + case QEvent::GraphicsSceneMousePress: + mousePressEvent(&mouseEvent); + break; + case QEvent::GraphicsSceneMouseRelease: + mouseReleaseEvent(&mouseEvent); + break; + default: + break; + } + grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()); + if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) + grabMouse(); + + return stealThisEvent; + } + if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) { + d->stealMouse = false; + ungrabMouse(); + } + return false; +} + +bool QDeclarativeMouseArea::sceneEventFilter(QGraphicsItem *i, QEvent *e) +{ + Q_D(QDeclarativeMouseArea); + if (!d->absorb || !isVisible() || !d->drag || !d->drag->filterChildren()) + return QDeclarativeItem::sceneEventFilter(i, e); + switch (e->type()) { + case QEvent::GraphicsSceneMousePress: + case QEvent::GraphicsSceneMouseMove: + case QEvent::GraphicsSceneMouseRelease: + return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e)); + default: + break; + } + + return QDeclarativeItem::sceneEventFilter(i, e); +} + void QDeclarativeMouseArea::timerEvent(QTimerEvent *event) { Q_D(QDeclarativeMouseArea); @@ -759,6 +842,7 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag() \qmlproperty real MouseArea::drag.maximumX \qmlproperty real MouseArea::drag.minimumY \qmlproperty real MouseArea::drag.maximumY + \qmlproperty bool MouseArea::drag.filterChildren \c drag provides a convenient way to make an item draggable. @@ -779,6 +863,12 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag() for \c rect in the above example, it cannot be dragged along the X-axis. This can be avoided by settng the anchor value to \c undefined in an \l onPressed handler. + + If \c drag.filterChildren is set to true, a drag can override descendant MouseAreas. This + enables a parent MouseArea to handle drags, for example, while descendants handle clicks: + + \snippet doc/src/snippets/declarative/mouseareadragfilter.qml dragfilter + */ QT_END_NAMESPACE diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p.h index 4fe3fcb..0da7515 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea_p.h +++ b/src/declarative/graphicsitems/qdeclarativemousearea_p.h @@ -62,6 +62,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeDrag : public QObject Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged) Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged) Q_PROPERTY(bool active READ active NOTIFY activeChanged) + Q_PROPERTY(bool filterChildren READ filterChildren WRITE setFilterChildren NOTIFY filterChildrenChanged) //### consider drag and drop public: @@ -88,6 +89,9 @@ public: bool active() const; void setActive(bool); + bool filterChildren() const; + void setFilterChildren(bool); + Q_SIGNALS: void targetChanged(); void axisChanged(); @@ -96,6 +100,7 @@ Q_SIGNALS: void minimumYChanged(); void maximumYChanged(); void activeChanged(); + void filterChildrenChanged(); private: QGraphicsObject *_target; @@ -104,7 +109,8 @@ private: qreal _xmax; qreal _ymin; qreal _ymax; - bool _active; + bool _active : 1; + bool _filterChildren: 1; Q_DISABLE_COPY(QDeclarativeDrag) }; @@ -177,6 +183,8 @@ protected: void hoverMoveEvent(QGraphicsSceneHoverEvent *event); void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); bool sceneEvent(QEvent *); + bool sendMouseEvent(QGraphicsSceneMouseEvent *event); + bool sceneEventFilter(QGraphicsItem *i, QEvent *e); void timerEvent(QTimerEvent *event); virtual void geometryChanged(const QRectF &newGeometry, diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h index 3d7bd1e..cf9dc18 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h @@ -68,7 +68,7 @@ class QDeclarativeMouseAreaPrivate : public QDeclarativeItemPrivate public: QDeclarativeMouseAreaPrivate() : absorb(true), hovered(false), pressed(false), longPress(false), - moved(false), drag(0) + moved(false), stealMouse(false), drag(0) { } @@ -78,6 +78,7 @@ public: { Q_Q(QDeclarativeMouseArea); q->setAcceptedMouseButtons(Qt::LeftButton); + q->setFiltersChildEvents(true); } void saveEvent(QGraphicsSceneMouseEvent *event) { @@ -101,6 +102,7 @@ public: bool moved : 1; bool dragX : 1; bool dragY : 1; + bool stealMouse : 1; QDeclarativeDrag *drag; QPointF startScene; qreal startX; diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp index 5a10372..c9bb467 100644 --- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp +++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp @@ -137,6 +137,17 @@ void tst_QDeclarativeMouseArea::dragProperties() QCOMPARE(yminSpy.count(),1); QCOMPARE(ymaxSpy.count(),1); + // filterChildren + QSignalSpy filterChildrenSpy(drag, SIGNAL(filterChildrenChanged())); + + drag->setFilterChildren(true); + + QVERIFY(drag->filterChildren()); + QCOMPARE(filterChildrenSpy.count(), 1); + + drag->setFilterChildren(true); + QCOMPARE(filterChildrenSpy.count(), 1); + delete canvas; } -- cgit v0.12 From acebca36dc84677bb0875297b1739e15025323bb Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Mon, 12 Jul 2010 16:21:34 +1000 Subject: wantsFocus should be based on FocusScope chain, not parent chain. Ancestors of the item with focus should only report wantsFocus as true when they are a FocusScope or a top-level item. Reviewed-by: Aaron Kennedy Reviewed-by: Yann Bodson (cherry picked from commit 686fca1c78e6d4d2ba597dd75d982c76647c7707) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 7 +++++- src/declarative/graphicsitems/qdeclarativeitem_p.h | 4 +++- .../qdeclarativefocusscope/data/chain.qml | 28 ++++++++++++++++++++++ .../qdeclarativefocusscope/data/forcefocus.qml | 4 ++-- .../qdeclarativefocusscope/data/test.qml | 2 +- .../qdeclarativefocusscope/data/test5.qml | 2 +- .../tst_qdeclarativefocusscope.cpp | 23 ++++++++++++++---- .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 7 ++---- 8 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativefocusscope/data/chain.qml diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 89484b2..a229d4c 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2397,6 +2397,8 @@ QDeclarativeItem *QDeclarativeItem::childAt(qreal x, qreal y) const void QDeclarativeItemPrivate::focusChanged(bool flag) { Q_Q(QDeclarativeItem); + if (!(flags & QGraphicsItem::ItemIsFocusScope) && parent) + emit q->wantsFocusChanged(flag); //see also QDeclarativeItemPrivate::subFocusItemChange() emit q->focusChanged(flag); } @@ -3098,7 +3100,10 @@ void QDeclarativeItem::setSize(const QSizeF &size) /*! \internal */ bool QDeclarativeItem::wantsFocus() const { - return focusItem() != 0; + Q_D(const QDeclarativeItem); + return focusItem() == this || + (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0) || + (!parentItem() && focusItem() != 0); } /*! diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index fb416c2..84ae4ef 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -286,7 +286,9 @@ public: // Reimplemented from QGraphicsItemPrivate virtual void subFocusItemChange() { - emit q_func()->wantsFocusChanged(subFocusItem != 0); + if (flags & QGraphicsItem::ItemIsFocusScope || !parent) + emit q_func()->wantsFocusChanged(subFocusItem != 0); + //see also QDeclarativeItemPrivate::focusChanged } // Reimplemented from QGraphicsItemPrivate diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/chain.qml b/tests/auto/declarative/qdeclarativefocusscope/data/chain.qml new file mode 100644 index 0000000..6c39f20 --- /dev/null +++ b/tests/auto/declarative/qdeclarativefocusscope/data/chain.qml @@ -0,0 +1,28 @@ +import Qt 4.7 + +Rectangle { + id: root + width:300; height:400 + + property bool focus1: root.wantsFocus + property bool focus2: item1.wantsFocus + property bool focus3: fs1.wantsFocus + property bool focus4: fs2.wantsFocus + property bool focus5: theItem.wantsFocus + + Item { + id: item1 + FocusScope { + id: fs1 + focus: true + FocusScope { + id: fs2 + focus: true + Item { + id: theItem + focus: true + } + } + } + } +} diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml index 5904fd6..af9c420 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml @@ -8,10 +8,10 @@ Rectangle { FocusScope { id: firstScope + objectName: "item0" focus: true Rectangle { - objectName: "item0" height: 120; width: 420 color: "transparent" @@ -44,9 +44,9 @@ Rectangle { FocusScope { id: secondScope + objectName: "item3" Rectangle { - objectName: "item3" y: 160; height: 120; width: 420 color: "transparent" diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml index 6b09c29..aa43ba8 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml @@ -9,12 +9,12 @@ Rectangle { FocusScope { id: myScope + objectName: "item0" focus: true Keys.onDigit9Pressed: console.log("Error - FocusScope") Rectangle { - objectName: "item0" height: 120 width: 420 diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml index d67ec57..cdb5164 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml @@ -9,12 +9,12 @@ Rectangle { FocusScope { id: myScope + objectName: "item0" focus: true Keys.onReturnPressed: console.log("Error - FocusScope") Rectangle { - objectName: "item0" height: 120 width: 420 diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp index 7732e6d..2559087 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp +++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp @@ -68,6 +68,7 @@ private slots: void noFocus(); void textEdit(); void forceFocus(); + void noParentFocus(); }; /* @@ -97,7 +98,7 @@ void tst_qdeclarativefocusscope::basic() QDeclarativeView *view = new QDeclarativeView; view->setSource(QUrl::fromLocalFile(SRCDIR "/data/test.qml")); - QDeclarativeRectangle *item0 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item0")); + QDeclarativeFocusScope *item0 = findItem<QDeclarativeFocusScope>(view->rootObject(), QLatin1String("item0")); QDeclarativeRectangle *item1 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item1")); QDeclarativeRectangle *item2 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item2")); QDeclarativeRectangle *item3 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item3")); @@ -228,7 +229,7 @@ void tst_qdeclarativefocusscope::textEdit() QDeclarativeView *view = new QDeclarativeView; view->setSource(QUrl::fromLocalFile(SRCDIR "/data/test5.qml")); - QDeclarativeRectangle *item0 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item0")); + QDeclarativeFocusScope *item0 = findItem<QDeclarativeFocusScope>(view->rootObject(), QLatin1String("item0")); QDeclarativeTextEdit *item1 = findItem<QDeclarativeTextEdit>(view->rootObject(), QLatin1String("item1")); QDeclarativeRectangle *item2 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item2")); QDeclarativeTextEdit *item3 = findItem<QDeclarativeTextEdit>(view->rootObject(), QLatin1String("item3")); @@ -283,10 +284,10 @@ void tst_qdeclarativefocusscope::forceFocus() QDeclarativeView *view = new QDeclarativeView; view->setSource(QUrl::fromLocalFile(SRCDIR "/data/forcefocus.qml")); - QDeclarativeRectangle *item0 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item0")); + QDeclarativeFocusScope *item0 = findItem<QDeclarativeFocusScope>(view->rootObject(), QLatin1String("item0")); QDeclarativeRectangle *item1 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item1")); QDeclarativeRectangle *item2 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item2")); - QDeclarativeRectangle *item3 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item3")); + QDeclarativeFocusScope *item3 = findItem<QDeclarativeFocusScope>(view->rootObject(), QLatin1String("item3")); QDeclarativeRectangle *item4 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item4")); QDeclarativeRectangle *item5 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item5")); QVERIFY(item0 != 0); @@ -333,6 +334,20 @@ void tst_qdeclarativefocusscope::forceFocus() delete view; } +void tst_qdeclarativefocusscope::noParentFocus() +{ + QDeclarativeView *view = new QDeclarativeView; + view->setSource(QUrl::fromLocalFile(SRCDIR "/data/chain.qml")); + QVERIFY(view->rootObject()); + + QVERIFY(view->rootObject()->property("focus1") == true); + QVERIFY(view->rootObject()->property("focus2") == false); + QVERIFY(view->rootObject()->property("focus3") == true); + QVERIFY(view->rootObject()->property("focus4") == true); + QVERIFY(view->rootObject()->property("focus5") == true); + + delete view; +} QTEST_MAIN(tst_qdeclarativefocusscope) diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 4a57def..ffb2105 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -703,11 +703,8 @@ void tst_QDeclarativeItem::propertyChanges() QCOMPARE(focusArguments.at(0).toBool(), true); QCOMPARE(parentItem->hasFocus(), false); - QCOMPARE(parentItem->wantsFocus(), true); - QCOMPARE(wantsFocusSpy.count(),1); - QList<QVariant> wantsFocusArguments = wantsFocusSpy.first(); - QVERIFY(wantsFocusArguments.count() == 1); - QCOMPARE(wantsFocusArguments.at(0).toBool(), true); + QCOMPARE(parentItem->wantsFocus(), false); + QCOMPARE(wantsFocusSpy.count(),0); delete canvas; } -- cgit v0.12 From 056bbc32fd64f48851e6ad058c5e4c1372a96564 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Wed, 21 Jul 2010 12:23:15 +1000 Subject: QML focus API updates. The wantsFocus property has been renamed to activeFocus, to better reflect its value. Reading and writing the focus property is also now consistent -- this property represents focus within a scope. Other small changes were made to keep things consistent with the new naming. Reviewed-by: Aaron Kennedy (cherry picked from commit 21806ff0921641b4e4d9d39721ab4ebeae74dddc) --- .../photoviewer/PhotoViewerCore/EditableButton.qml | 2 +- demos/declarative/twitter/TwitterCore/Button.qml | 2 +- demos/declarative/webbrowser/content/UrlInput.qml | 2 +- doc/src/declarative/focus.qdoc | 8 +- .../keyinteraction/focus/Core/GridMenu.qml | 6 +- .../keyinteraction/focus/Core/ListViewDelegate.qml | 4 +- .../keyinteraction/focus/Core/ListViews.qml | 8 +- .../declarative/keyinteraction/focus/focus.qml | 4 +- .../declarative/toys/dynamicscene/dynamicscene.qml | 1 - src/declarative/QmlChanges.txt | 7 ++ src/declarative/graphicsitems/qdeclarativeitem.cpp | 95 ++++++++++++--- src/declarative/graphicsitems/qdeclarativeitem.h | 8 +- src/declarative/graphicsitems/qdeclarativeitem_p.h | 9 +- .../graphicsitems/qdeclarativetextedit.cpp | 42 +++---- .../graphicsitems/qdeclarativetextedit_p.h | 4 +- .../graphicsitems/qdeclarativetextinput.cpp | 44 +++---- .../graphicsitems/qdeclarativetextinput_p.h | 4 +- src/gui/graphicsview/qgraphicsitem.cpp | 12 ++ src/gui/graphicsview/qgraphicsitem_p.h | 1 + .../qdeclarativefocusscope/data/chain.qml | 10 +- .../qdeclarativefocusscope/data/forcefocus.qml | 22 ++-- .../qdeclarativefocusscope/data/test.qml | 14 +-- .../qdeclarativefocusscope/data/test2.qml | 10 +- .../qdeclarativefocusscope/data/test3.qml | 2 +- .../qdeclarativefocusscope/data/test4.qml | 14 +-- .../qdeclarativefocusscope/data/test5.qml | 10 +- .../tst_qdeclarativefocusscope.cpp | 131 ++++++++++----------- .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 28 ++--- .../qdeclarativestates/data/propertyErrors.qml | 2 +- .../qdeclarativestates/tst_qdeclarativestates.cpp | 2 +- .../tst_qdeclarativetextedit.cpp | 28 ++--- .../tst_qdeclarativetextinput.cpp | 40 +++---- 32 files changed, 330 insertions(+), 246 deletions(-) diff --git a/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml b/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml index 6109535..568666e 100644 --- a/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml +++ b/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml @@ -77,6 +77,6 @@ Item { MouseArea { anchors { fill: parent; leftMargin: -20; topMargin: -20; rightMargin: -20; bottomMargin: -20 } - onClicked: { textInput.forceFocus(); textInput.openSoftwareInputPanel(); } + onClicked: { textInput.forceActiveFocus(); textInput.openSoftwareInputPanel(); } } } diff --git a/demos/declarative/twitter/TwitterCore/Button.qml b/demos/declarative/twitter/TwitterCore/Button.qml index 9c90c2c..d326c64 100644 --- a/demos/declarative/twitter/TwitterCore/Button.qml +++ b/demos/declarative/twitter/TwitterCore/Button.qml @@ -80,7 +80,7 @@ Item { }, State { name: "Focused" - when: container.focus == true + when: container.activeFocus == true PropertyChanges { target: btnText; color: "#FFFFFF" } } ] diff --git a/demos/declarative/webbrowser/content/UrlInput.qml b/demos/declarative/webbrowser/content/UrlInput.qml index 9992456..4f49821 100644 --- a/demos/declarative/webbrowser/content/UrlInput.qml +++ b/demos/declarative/webbrowser/content/UrlInput.qml @@ -69,7 +69,7 @@ Item { TextInput { id: urlText horizontalAlignment: TextEdit.AlignLeft - font.pixelSize: 14; focusOnPress: true + font.pixelSize: 14; onTextChanged: container.urlChanged() diff --git a/doc/src/declarative/focus.qdoc b/doc/src/declarative/focus.qdoc index cc546c0..661930f 100644 --- a/doc/src/declarative/focus.qdoc +++ b/doc/src/declarative/focus.qdoc @@ -73,12 +73,12 @@ See also the \l {Keys}{Keys attached property} and \l {KeyNavigation}{KeyNavigat \section1 Querying the Active Focus Item Whether or not an \l Item has \e {active focus} can be queried through the -property \c {Item::focus}. For example, here we have a \l Text +property \c {Item::activeFocus}. For example, here we have a \l Text element whose text is determined by whether or not it has \e {active focus}. \code Text { - text: focus ? "I have active focus!" : "I do not have active focus" + text: activeFocus ? "I have active focus!" : "I do not have active focus" } \endcode @@ -174,7 +174,7 @@ Rectangle { The right hand side of the example shows the expanded code - the equivalent QML without the use of the component \c {MyWidget}. From this, the problem is evident - there are no less than three elements that have the \c {Item::focus} -property set to true. Ultimately only one element can have focus, and the +property set to true. Ultimately only one element can have keyboard focus, and the system has to decide which on. In this case the first appearance of the \c {Item::focus} property being set to true on line 4 is selected, and the value of \c {Item::focus} in the other two instances is reverted back to false. This @@ -233,7 +233,7 @@ and the others are unset, just like when there are no \e {focus scopes}. \o When a \e {focus scope} receives \e {active focus}, the contained element with \c {Item::focus} set (if any) also gets \e {active focus}. If this element is also a \l FocusScope, the proxying behaviour continues. Both the -\e {focus scope} and the sub-focused item will have \c {Item::focus} set. +\e {focus scope} and the sub-focused item will have \c {Item::activeFocus} set. \endlist So far the example has the second component statically selected. It is trivial diff --git a/examples/declarative/keyinteraction/focus/Core/GridMenu.qml b/examples/declarative/keyinteraction/focus/Core/GridMenu.qml index 9a8d3f3..19f7235 100644 --- a/examples/declarative/keyinteraction/focus/Core/GridMenu.qml +++ b/examples/declarative/keyinteraction/focus/Core/GridMenu.qml @@ -43,7 +43,7 @@ import Qt 4.7 FocusScope { property alias interactive: gridView.interactive - onWantsFocusChanged: if (wantsFocus) mainView.state = "" + onActiveFocusChanged: if (activeFocus) mainView.state = "" Rectangle { anchors.fill: parent @@ -84,12 +84,12 @@ FocusScope { onClicked: { GridView.view.currentIndex = index - container.forceFocus() + container.forceActiveFocus() } } states: State { - name: "active"; when: container.focus == true + name: "active"; when: container.activeFocus PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 } } diff --git a/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml b/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml index cc13637..602b52b 100644 --- a/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml +++ b/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml @@ -69,12 +69,12 @@ Item { onClicked: { ListView.view.currentIndex = index - container.forceFocus() + container.forceActiveFocus() } } states: State { - name: "active"; when: container.focus == true + name: "active"; when: container.activeFocus PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 } PropertyChanges { target: label; font.pixelSize: 16 } } diff --git a/examples/declarative/keyinteraction/focus/Core/ListViews.qml b/examples/declarative/keyinteraction/focus/Core/ListViews.qml index 6f9ceb4..3d6ceab 100644 --- a/examples/declarative/keyinteraction/focus/Core/ListViews.qml +++ b/examples/declarative/keyinteraction/focus/Core/ListViews.qml @@ -43,11 +43,11 @@ import Qt 4.7 FocusScope { clip: true - onWantsFocusChanged: if (wantsFocus) mainView.state = "showListViews" + onActiveFocusChanged: if (activeFocus) mainView.state = "showListViews" ListView { id: list1 - y: wantsFocus ? 10 : 40; width: parent.width / 3; height: parent.height - 20 + y: activeFocus ? 10 : 40; width: parent.width / 3; height: parent.height - 20 focus: true KeyNavigation.up: gridMenu; KeyNavigation.left: contextMenu; KeyNavigation.right: list2 model: 10; cacheBuffer: 200 @@ -60,7 +60,7 @@ FocusScope { ListView { id: list2 - y: wantsFocus ? 10 : 40; x: parseInt(parent.width / 3); width: parent.width / 3; height: parent.height - 20 + y: activeFocus ? 10 : 40; x: parseInt(parent.width / 3); width: parent.width / 3; height: parent.height - 20 KeyNavigation.up: gridMenu; KeyNavigation.left: list1; KeyNavigation.right: list3 model: 10; cacheBuffer: 200 delegate: ListViewDelegate {} @@ -72,7 +72,7 @@ FocusScope { ListView { id: list3 - y: wantsFocus ? 10 : 40; x: parseInt(2 * parent.width / 3); width: parent.width / 3; height: parent.height - 20 + y: activeFocus ? 10 : 40; x: parseInt(2 * parent.width / 3); width: parent.width / 3; height: parent.height - 20 KeyNavigation.up: gridMenu; KeyNavigation.left: list2 model: 10; cacheBuffer: 200 delegate: ListViewDelegate {} diff --git a/examples/declarative/keyinteraction/focus/focus.qml b/examples/declarative/keyinteraction/focus/focus.qml index 8b2af70..56fdffc 100644 --- a/examples/declarative/keyinteraction/focus/focus.qml +++ b/examples/declarative/keyinteraction/focus/focus.qml @@ -58,7 +58,7 @@ Rectangle { width: parent.width; height: 320 focus: true - interactive: parent.wantsFocus + interactive: parent.activeFocus } ListViews { @@ -98,7 +98,7 @@ Rectangle { states: State { name: "contextMenuOpen" - when: !mainView.wantsFocus + when: !mainView.activeFocus PropertyChanges { target: contextMenu; x: 0; open: true } PropertyChanges { target: mainView; x: 130 } PropertyChanges { target: shade; opacity: 0.25 } diff --git a/examples/declarative/toys/dynamicscene/dynamicscene.qml b/examples/declarative/toys/dynamicscene/dynamicscene.qml index 1edb841..2a22a5f 100644 --- a/examples/declarative/toys/dynamicscene/dynamicscene.qml +++ b/examples/declarative/toys/dynamicscene/dynamicscene.qml @@ -184,7 +184,6 @@ Item { id: qmlText anchors.fill: parent; anchors.margins: 5 readOnly: false - focusOnPress: true font.pixelSize: 14 wrapMode: TextEdit.WordWrap diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt index 6a2537b..6e07330 100644 --- a/src/declarative/QmlChanges.txt +++ b/src/declarative/QmlChanges.txt @@ -5,6 +5,13 @@ TextInput - copy(), cut() and paste() functions added Font.letterSpacing - was percentage based. Now specified in pixels. +Item + - wantsFocus renamed to activeFocus + - forceFocus() renamed to forceActiveFocus() + - focus now returns the scoped focus (i.e. focus read/write now manipulate + the same value) +TextInput and TextEdit: + - focusOnPress renamed to activeFocusOnPress ============================================================================= The changes below are pre Qt 4.7.0 beta 2 diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index a229d4c..23735f2 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1430,7 +1430,7 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec */ /*! - \fn void QDeclarativeItem::wantsFocusChanged(bool) + \fn void QDeclarativeItem::activeFocusChanged(bool) \internal */ @@ -2356,12 +2356,12 @@ QScriptValue QDeclarativeItem::mapToItem(const QScriptValue &item, qreal x, qrea } /*! - \qmlmethod Item::forceFocus() + \qmlmethod Item::forceActiveFocus() - Force the focus on the item. - This method sets the focus on the item and makes sure that all the focus scopes higher in the object hierarchy are given focus. + Force active focus on the item. + This method sets focus on the item and makes sure that all the focus scopes higher in the object hierarchy are also given focus. */ -void QDeclarativeItem::forceFocus() +void QDeclarativeItem::forceActiveFocus() { setFocus(true); QGraphicsItem *parent = parentItem(); @@ -2398,8 +2398,19 @@ void QDeclarativeItemPrivate::focusChanged(bool flag) { Q_Q(QDeclarativeItem); if (!(flags & QGraphicsItem::ItemIsFocusScope) && parent) - emit q->wantsFocusChanged(flag); //see also QDeclarativeItemPrivate::subFocusItemChange() - emit q->focusChanged(flag); + emit q->activeFocusChanged(flag); //see also QDeclarativeItemPrivate::subFocusItemChange() + + bool inScope = false; + QGraphicsItem *p = parent; + while (p) { + if (p->flags() & QGraphicsItem::ItemIsFocusScope) { + inScope = true; + break; + } + p = p->parentItem(); + } + if (!inScope) + emit q->focusChanged(flag); } /*! \internal */ @@ -2676,7 +2687,7 @@ bool QDeclarativeItem::sceneEvent(QEvent *event) if (event->type() == QEvent::FocusIn || event->type() == QEvent::FocusOut) { - d->focusChanged(hasFocus()); + d->focusChanged(hasActiveFocus()); } return rv; } @@ -3090,15 +3101,32 @@ void QDeclarativeItem::setSize(const QSizeF &size) } /*! - \qmlproperty bool Item::wantsFocus + \qmlproperty bool Item::activeFocus + + This property indicates whether the item has active focus. + + An item with active focus will receive keyboard input, + or is a FocusScope ancestor of the item that will receive keyboard input. - This property indicates whether the item has has an active focus request. + Usually, activeFocus is gained by setting focus on an item and its enclosing + FocusScopes. In the following example \c input will have activeFocus. + \qml + Rectangle { + FocusScope { + focus: true + TextInput { + id: input + focus: true + } + } + } + \endqml - \sa {qmlfocus}{Keyboard Focus} + \sa focus, {qmlfocus}{Keyboard Focus} */ /*! \internal */ -bool QDeclarativeItem::wantsFocus() const +bool QDeclarativeItem::hasActiveFocus() const { Q_D(const QDeclarativeItem); return focusItem() == this || @@ -3108,16 +3136,51 @@ bool QDeclarativeItem::wantsFocus() const /*! \qmlproperty bool Item::focus - This property indicates whether the item has keyboard input focus. Set this - property to true to request focus. + This property indicates whether the item has focus within the enclosing focus scope. If true, this item + will gain active focus when the enclosing focus scope gains active focus. + In the following example, \c input will be given active focus when \c scope gains active focus. + \qml + Rectangle { + FocusScope { + id: scope + TextInput { + id: input + focus: true + } + } + } + \endqml - \sa {qmlfocus}{Keyboard Focus} + For the purposes of this property, the top level item in the scene + is assumed to act like a focus scope, and to always have active focus + when the scene has focus. On a practical level, that means the following + QML will give active focus to \c input on startup. + + \qml + Rectangle { + TextInput { + id: input + focus: true + } + } + \endqml + + \sa activeFocus, {qmlfocus}{Keyboard Focus} */ /*! \internal */ bool QDeclarativeItem::hasFocus() const { - return QGraphicsItem::hasFocus(); + Q_D(const QDeclarativeItem); + QGraphicsItem *p = d->parent; + while (p) { + if (p->flags() & QGraphicsItem::ItemIsFocusScope) { + return p->focusScopeItem() == this; + } + p = p->parentItem(); + } + + return hasActiveFocus() ? true : (!QGraphicsItem::parentItem() ? true : false); } /*! \internal */ diff --git a/src/declarative/graphicsitems/qdeclarativeitem.h b/src/declarative/graphicsitems/qdeclarativeitem.h index 8878fa0..cd9b910 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.h +++ b/src/declarative/graphicsitems/qdeclarativeitem.h @@ -87,7 +87,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeItem : public QGraphicsObject, public QDe Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged) Q_PROPERTY(bool clip READ clip WRITE setClip NOTIFY clipChanged) // ### move to QGI/QGO, NOTIFY Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged FINAL) - Q_PROPERTY(bool wantsFocus READ wantsFocus NOTIFY wantsFocusChanged) + Q_PROPERTY(bool activeFocus READ hasActiveFocus NOTIFY activeFocusChanged) Q_PROPERTY(QDeclarativeListProperty<QGraphicsTransform> transform READ transform DESIGNABLE false FINAL) Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin NOTIFY transformOriginChanged) Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint) // transformOriginPoint is read-only for Item @@ -139,7 +139,7 @@ public: QRectF boundingRect() const; virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); - bool wantsFocus() const; + bool hasActiveFocus() const; bool hasFocus() const; void setFocus(bool); @@ -148,7 +148,7 @@ public: Q_INVOKABLE QScriptValue mapFromItem(const QScriptValue &item, qreal x, qreal y) const; Q_INVOKABLE QScriptValue mapToItem(const QScriptValue &item, qreal x, qreal y) const; - Q_INVOKABLE void forceFocus(); + Q_INVOKABLE void forceActiveFocus(); Q_INVOKABLE QDeclarativeItem *childAt(qreal x, qreal y) const; Q_SIGNALS: @@ -157,7 +157,7 @@ Q_SIGNALS: void baselineOffsetChanged(qreal); void stateChanged(const QString &); void focusChanged(bool); - void wantsFocusChanged(bool); + void activeFocusChanged(bool); void parentChanged(QDeclarativeItem *); void transformOriginChanged(TransformOrigin); void smoothChanged(bool); diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index 84ae4ef..84b0f51 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -287,11 +287,18 @@ public: virtual void subFocusItemChange() { if (flags & QGraphicsItem::ItemIsFocusScope || !parent) - emit q_func()->wantsFocusChanged(subFocusItem != 0); + emit q_func()->activeFocusChanged(subFocusItem != 0); //see also QDeclarativeItemPrivate::focusChanged } // Reimplemented from QGraphicsItemPrivate + virtual void focusScopeItemChange(bool isSubFocusItem) + { + emit q_func()->focusChanged(isSubFocusItem); + } + + + // Reimplemented from QGraphicsItemPrivate virtual void siblingOrderChange() { Q_Q(QDeclarativeItem); diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 5a42525..55b802f 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -622,7 +622,7 @@ void QDeclarativeTextEdit::moveCursorSelection(int pos) \qmlproperty bool TextEdit::cursorVisible If true the text edit shows a cursor. - This property is set and unset when the text edit gets focus, but it can also + This property is set and unset when the text edit gets active focus, but it can also be set directly (useful, for example, if a KeyProxy might forward keys to it). */ bool QDeclarativeTextEdit::isCursorVisible() const @@ -781,9 +781,9 @@ QString QDeclarativeTextEdit::selectedText() const } /*! - \qmlproperty bool TextEdit::focusOnPress + \qmlproperty bool TextEdit::activeFocusOnPress - Whether the TextEdit should gain focus on a mouse press. By default this is + Whether the TextEdit should gain active focus on a mouse press. By default this is set to true. */ bool QDeclarativeTextEdit::focusOnPress() const @@ -798,13 +798,13 @@ void QDeclarativeTextEdit::setFocusOnPress(bool on) if (d->focusOnPress == on) return; d->focusOnPress = on; - emit focusOnPressChanged(d->focusOnPress); + emit activeFocusOnPressChanged(d->focusOnPress); } /*! \qmlproperty bool TextEdit::persistentSelection - Whether the TextEdit should keep the selection visible when it loses focus to another + Whether the TextEdit should keep the selection visible when it loses active focus to another item in the scene. By default this is set to true; */ bool QDeclarativeTextEdit::persistentSelection() const @@ -1104,15 +1104,15 @@ void QDeclarativeTextEdit::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativeTextEdit); if (d->focusOnPress){ - bool hadFocus = hasFocus(); - forceFocus(); + bool hadActiveFocus = hasActiveFocus(); + forceActiveFocus(); if (d->showInputPanelOnFocus) { - if (hasFocus() && hadFocus && !isReadOnly()) { + if (hasActiveFocus() && hadActiveFocus && !isReadOnly()) { // re-open input panel on press if already focused openSoftwareInputPanel(); } } else { // show input panel on click - if (hasFocus() && !hadFocus) { + if (hasActiveFocus() && !hadActiveFocus) { d->clickCausedFocus = true; } } @@ -1427,10 +1427,10 @@ void QDeclarativeTextEditPrivate::updateDefaultTextOption() By default the opening of input panels follows the platform style. On Symbian^1 and Symbian^3 -based devices the panels are opened by clicking TextEdit. On other platforms - the panels are automatically opened when TextEdit element gains focus. Input panels are - always closed if no editor owns focus. + the panels are automatically opened when TextEdit element gains active focus. Input panels are + always closed if no editor has active focus. - You can disable the automatic behavior by setting the property \c focusOnPress to false + You can disable the automatic behavior by setting the property \c activeFocusOnPress to false and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement the behavior you want. @@ -1441,12 +1441,12 @@ void QDeclarativeTextEditPrivate::updateDefaultTextOption() TextEdit { id: textEdit text: "Hello world!" - focusOnPress: false + activeFocusOnPress: false MouseArea { anchors.fill: parent onClicked: { - if (!textEdit.focus) { - textEdit.focus = true; + if (!textEdit.activeFocus) { + textEdit.forceActiveFocus(); textEdit.openSoftwareInputPanel(); } else { textEdit.focus = false; @@ -1478,10 +1478,10 @@ void QDeclarativeTextEdit::openSoftwareInputPanel() By default the opening of input panels follows the platform style. On Symbian^1 and Symbian^3 -based devices the panels are opened by clicking TextEdit. On other platforms - the panels are automatically opened when TextEdit element gains focus. Input panels are - always closed if no editor owns focus. + the panels are automatically opened when TextEdit element gains active focus. Input panels are + always closed if no editor has active focus. - You can disable the automatic behavior by setting the property \c focusOnPress to false + You can disable the automatic behavior by setting the property \c activeFocusOnPress to false and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement the behavior you want. @@ -1492,12 +1492,12 @@ void QDeclarativeTextEdit::openSoftwareInputPanel() TextEdit { id: textEdit text: "Hello world!" - focusOnPress: false + activeFocusOnPress: false MouseArea { anchors.fill: parent onClicked: { - if (!textEdit.focus) { - textEdit.focus = true; + if (!textEdit.activeFocus) { + textEdit.forceActiveFocus(); textEdit.openSoftwareInputPanel(); } else { textEdit.focus = false; diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index 279af78..68fde3d 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -85,7 +85,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeTextEdit : public QDeclarativePaintedItem Q_PROPERTY(int selectionStart READ selectionStart NOTIFY selectionStartChanged) Q_PROPERTY(int selectionEnd READ selectionEnd NOTIFY selectionEndChanged) Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectionChanged) - Q_PROPERTY(bool focusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY focusOnPressChanged) + Q_PROPERTY(bool activeFocusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY activeFocusOnPressChanged) Q_PROPERTY(bool persistentSelection READ persistentSelection WRITE setPersistentSelection NOTIFY persistentSelectionChanged) Q_PROPERTY(qreal textMargin READ textMargin WRITE setTextMargin NOTIFY textMarginChanged) Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints) @@ -216,7 +216,7 @@ Q_SIGNALS: void readOnlyChanged(bool isReadOnly); void cursorVisibleChanged(bool isCursorVisible); void cursorDelegateChanged(); - void focusOnPressChanged(bool focusIsPressed); + void activeFocusOnPressChanged(bool activeFocusOnPressed); void persistentSelectionChanged(bool isPersistentSelection); void textMarginChanged(qreal textMargin); void selectByMouseChanged(bool selectByMouse); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 321b121..34f5897 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -375,14 +375,14 @@ void QDeclarativeTextInput::setMaxLength(int ml) \qmlproperty bool TextInput::cursorVisible Set to true when the TextInput shows a cursor. - This property is set and unset when the TextInput gets focus, so that other + This property is set and unset when the TextInput gets active focus, so that other properties can be bound to whether the cursor is currently showing. As it gets set and unset automatically, when you set the value yourself you must keep in mind that your value may be overwritten. It can be set directly in script, for example if a KeyProxy might forward keys to it and you desire it to look active when this happens - (but without actually giving it the focus). + (but without actually giving it active focus). It should not be set directly on the element, like in the below QML, as the specified value will be overridden an lost on focus changes. @@ -395,7 +395,7 @@ void QDeclarativeTextInput::setMaxLength(int ml) \endcode In the above snippet the cursor will still become visible when the - TextInput gains focus. + TextInput gains active focus. */ bool QDeclarativeTextInput::isCursorVisible() const { @@ -510,9 +510,9 @@ QString QDeclarativeTextInput::selectedText() const } /*! - \qmlproperty bool TextInput::focusOnPress + \qmlproperty bool TextInput::activeFocusOnPress - Whether the TextInput should gain focus on a mouse press. By default this is + Whether the TextInput should gain active focus on a mouse press. By default this is set to true. */ bool QDeclarativeTextInput::focusOnPress() const @@ -529,7 +529,7 @@ void QDeclarativeTextInput::setFocusOnPress(bool b) d->focusOnPress = b; - emit focusOnPressChanged(d->focusOnPress); + emit activeFocusOnPressChanged(d->focusOnPress); } /*! @@ -945,15 +945,15 @@ void QDeclarativeTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event) { Q_D(QDeclarativeTextInput); if(d->focusOnPress){ - bool hadFocus = hasFocus(); - forceFocus(); + bool hadActiveFocus = hasActiveFocus(); + forceActiveFocus(); if (d->showInputPanelOnFocus) { - if (hasFocus() && hadFocus && !isReadOnly()) { + if (hasActiveFocus() && hadActiveFocus && !isReadOnly()) { // re-open input panel on press if already focused openSoftwareInputPanel(); } } else { // show input panel on click - if (hasFocus() && !hadFocus) { + if (hasActiveFocus() && !hadActiveFocus) { d->clickCausedFocus = true; } } @@ -1312,10 +1312,10 @@ void QDeclarativeTextInput::moveCursorSelection(int position) By default the opening of input panels follows the platform style. On Symbian^1 and Symbian^3 -based devices the panels are opened by clicking TextInput. On other platforms - the panels are automatically opened when TextInput element gains focus. Input panels are - always closed if no editor owns focus. + the panels are automatically opened when TextInput element gains active focus. Input panels are + always closed if no editor has active focus. - . You can disable the automatic behavior by setting the property \c focusOnPress to false + . You can disable the automatic behavior by setting the property \c activeFocusOnPress to false and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement the behavior you want. @@ -1326,12 +1326,12 @@ void QDeclarativeTextInput::moveCursorSelection(int position) TextInput { id: textInput text: "Hello world!" - focusOnPress: false + activeFocusOnPress: false MouseArea { anchors.fill: parent onClicked: { - if (!textInput.focus) { - textInput.focus = true; + if (!textInput.activeFocus) { + textInput.forceActiveFocus() textInput.openSoftwareInputPanel(); } else { textInput.focus = false; @@ -1363,10 +1363,10 @@ void QDeclarativeTextInput::openSoftwareInputPanel() By default the opening of input panels follows the platform style. On Symbian^1 and Symbian^3 -based devices the panels are opened by clicking TextInput. On other platforms - the panels are automatically opened when TextInput element gains focus. Input panels are - always closed if no editor owns focus. + the panels are automatically opened when TextInput element gains active focus. Input panels are + always closed if no editor has active focus. - . You can disable the automatic behavior by setting the property \c focusOnPress to false + . You can disable the automatic behavior by setting the property \c activeFocusOnPress to false and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement the behavior you want. @@ -1377,12 +1377,12 @@ void QDeclarativeTextInput::openSoftwareInputPanel() TextInput { id: textInput text: "Hello world!" - focusOnPress: false + activeFocusOnPress: false MouseArea { anchors.fill: parent onClicked: { - if (!textInput.focus) { - textInput.focus = true; + if (!textInput.activeFocus) { + textInput.forceActiveFocus(); textInput.openSoftwareInputPanel(); } else { textInput.focus = false; diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index b1862c6..ba3f5b1 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -87,7 +87,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeTextInput : public QDeclarativePaintedItem Q_PROPERTY(bool acceptableInput READ hasAcceptableInput NOTIFY acceptableInputChanged) Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode NOTIFY echoModeChanged) - Q_PROPERTY(bool focusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY focusOnPressChanged) + Q_PROPERTY(bool activeFocusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY activeFocusOnPressChanged) Q_PROPERTY(QString passwordCharacter READ passwordCharacter WRITE setPasswordCharacter NOTIFY passwordCharacterChanged) Q_PROPERTY(QString displayText READ displayText NOTIFY displayTextChanged) Q_PROPERTY(bool autoScroll READ autoScroll WRITE setAutoScroll NOTIFY autoScrollChanged) @@ -211,7 +211,7 @@ Q_SIGNALS: void echoModeChanged(EchoMode echoMode); void passwordCharacterChanged(); void displayTextChanged(); - void focusOnPressChanged(bool focusOnPress); + void activeFocusOnPressChanged(bool activeFocusOnPress); void autoScrollChanged(bool autoScroll); void selectByMouseChanged(bool selectByMouse); diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 479a813..cd03eeb 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -1149,6 +1149,7 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q if (q_ptr == fsi || q_ptr->isAncestorOf(fsi)) { parentFocusScopeItem = fsi; p->d_ptr->focusScopeItem = 0; + fsi->d_ptr->focusScopeItemChange(false); } break; } @@ -1181,6 +1182,7 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q while (p) { if (p->d_ptr->flags & QGraphicsItem::ItemIsFocusScope) { p->d_ptr->focusScopeItem = newFocusScopeItem; + newFocusScopeItem->d_ptr->focusScopeItemChange(true); // Ensure the new item is no longer the subFocusItem. The // only way to set focus on a child of a focus scope is // by setting focus on the scope itself. @@ -5568,6 +5570,16 @@ void QGraphicsItemPrivate::subFocusItemChange() /*! \internal + Subclasses can reimplement this function to be notified when an item + becomes a focusScopeItem (or is no longer a focusScopeItem). +*/ +void QGraphicsItemPrivate::focusScopeItemChange(bool isSubFocusItem) +{ +} + +/*! + \internal + Subclasses can reimplement this function to be notified when its siblingIndex order is changed. */ diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index f9f5d3d..fb6a407 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -482,6 +482,7 @@ public: void clearSubFocus(QGraphicsItem *rootItem = 0); void resetFocusProxy(); virtual void subFocusItemChange(); + virtual void focusScopeItemChange(bool isSubFocusItem); static void children_append(QDeclarativeListProperty<QGraphicsObject> *list, QGraphicsObject *item); static int children_count(QDeclarativeListProperty<QGraphicsObject> *list); diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/chain.qml b/tests/auto/declarative/qdeclarativefocusscope/data/chain.qml index 6c39f20..42b50cf 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/chain.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/chain.qml @@ -4,11 +4,11 @@ Rectangle { id: root width:300; height:400 - property bool focus1: root.wantsFocus - property bool focus2: item1.wantsFocus - property bool focus3: fs1.wantsFocus - property bool focus4: fs2.wantsFocus - property bool focus5: theItem.wantsFocus + property bool focus1: root.activeFocus + property bool focus2: item1.activeFocus + property bool focus3: fs1.activeFocus + property bool focus4: fs2.activeFocus + property bool focus5: theItem.activeFocus Item { id: item1 diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml index af9c420..9144854 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml @@ -15,28 +15,28 @@ Rectangle { height: 120; width: 420 color: "transparent" - border.width: 5; border.color: firstScope.wantsFocus?"blue":"black" + border.width: 5; border.color: firstScope.activeFocus?"blue":"black" Rectangle { id: item1; objectName: "item1" x: 10; y: 10; width: 100; height: 100; color: "green" - border.width: 5; border.color: wantsFocus?"blue":"black" + border.width: 5; border.color: activeFocus?"blue":"black" focus: true Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } Rectangle { id: item2; objectName: "item2" x: 310; y: 10; width: 100; height: 100; color: "green" - border.width: 5; border.color: wantsFocus?"blue":"black" + border.width: 5; border.color: activeFocus?"blue":"black" Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } } @@ -50,32 +50,32 @@ Rectangle { y: 160; height: 120; width: 420 color: "transparent" - border.width: 5; border.color: secondScope.wantsFocus?"blue":"black" + border.width: 5; border.color: secondScope.activeFocus?"blue":"black" Rectangle { id: item4; objectName: "item4" x: 10; y: 10; width: 100; height: 100; color: "green" - border.width: 5; border.color: wantsFocus?"blue":"black" + border.width: 5; border.color: activeFocus?"blue":"black" Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } Rectangle { id: item5; objectName: "item5" x: 310; y: 10; width: 100; height: 100; color: "green" - border.width: 5; border.color: wantsFocus?"blue":"black" + border.width: 5; border.color: activeFocus?"blue":"black" Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } } } } Keys.onDigit4Pressed: item4.focus = true - Keys.onDigit5Pressed: item5.forceFocus() + Keys.onDigit5Pressed: item5.forceActiveFocus() } diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml index aa43ba8..55be103 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml @@ -20,21 +20,21 @@ Rectangle { color: "transparent" border.width: 5 - border.color: myScope.wantsFocus?"blue":"black" + border.color: myScope.activeFocus?"blue":"black" Rectangle { id: item1; objectName: "item1" x: 10; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" Keys.onDigit9Pressed: console.debug("Top Left"); KeyNavigation.right: item2 focus: true Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } @@ -43,13 +43,13 @@ Rectangle { x: 310; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" KeyNavigation.left: item1 Keys.onDigit9Pressed: console.log("Top Right"); Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } } @@ -63,14 +63,14 @@ Rectangle { x: 10; y: 300 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" Keys.onDigit9Pressed: console.log("Bottom Left"); KeyNavigation.up: myScope Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test2.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test2.qml index 216277e..5ed701d 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test2.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test2.qml @@ -10,27 +10,27 @@ Rectangle { FocusScope { y: 100 focus: true; objectName: "item1" - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true; objectName: "item2" - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true; objectName: "item3" - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true; objectName: "item4" - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true; objectName: "item5" - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } } } } diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test3.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test3.qml index 2ac0d18..c6d112f 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test3.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test3.qml @@ -13,7 +13,7 @@ Rectangle { ListElement { name: "4" } ListElement { name: "5" } ListElement { name: "6" } - ListElement { name: "6" } + ListElement { name: "7" } ListElement { name: "8" } ListElement { name: "9" } } diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml index 8862b39..3c6d3bd 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml @@ -19,21 +19,21 @@ Rectangle { color: "transparent" border.width: 5 - border.color: myScope.wantsFocus?"blue":"black" + border.color: myScope.activeFocus?"blue":"black" Rectangle { id: item1; objectName: "item1" x: 10; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" Keys.onDigit9Pressed: console.log("Error - Top Left"); KeyNavigation.right: item2 focus: true Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } @@ -42,13 +42,13 @@ Rectangle { x: 310; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" KeyNavigation.left: item1 Keys.onDigit9Pressed: console.log("Error - Top Right"); Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } } @@ -62,14 +62,14 @@ Rectangle { x: 10; y: 300 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" Keys.onDigit9Pressed: console.log("Error - Bottom Left"); KeyNavigation.up: myScope Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml index cdb5164..4417d5f 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml @@ -20,13 +20,13 @@ Rectangle { color: "transparent" border.width: 5 - border.color: myScope.wantsFocus?"blue":"black" + border.color: myScope.activeFocus?"blue":"black" Rectangle { x: 10; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: item1.wantsFocus?"blue":"black" + border.color: item1.activeFocus?"blue":"black" } TextEdit { @@ -47,13 +47,13 @@ Rectangle { x: 310; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" KeyNavigation.left: item1 Keys.onReturnPressed: console.log("Top Right"); Rectangle { width: 50; height: 50; anchors.centerIn: parent - color: parent.focus?"red":"transparent" + color: parent.activeFocus?"red":"transparent" } } } @@ -66,7 +66,7 @@ Rectangle { x: 10; y: 300 width: 100; height: 100; color: "green" border.width: 5 - border.color: item3.wantsFocus?"blue":"black" + border.color: item3.activeFocus?"blue":"black" } TextEdit { diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp index 2559087..b0c9c03 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp +++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp @@ -118,22 +118,22 @@ void tst_qdeclarativefocusscope::basic() QVERIFY(view->hasFocus()); QVERIFY(view->scene()->hasFocus()); - QVERIFY(item0->wantsFocus() == true); - QVERIFY(item1->hasFocus() == true); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == true); + QVERIFY(item1->hasActiveFocus() == true); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_Right); - QVERIFY(item0->wantsFocus() == true); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == true); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == true); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == true); + QVERIFY(item3->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_Down); - QVERIFY(item0->wantsFocus() == false); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == true); + QVERIFY(item0->hasActiveFocus() == false); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == true); delete view; } @@ -166,16 +166,11 @@ void tst_qdeclarativefocusscope::nested() QVERIFY(view->hasFocus()); QVERIFY(view->scene()->hasFocus()); - QVERIFY(item1->wantsFocus() == true); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->wantsFocus() == true); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->wantsFocus() == true); - QVERIFY(item3->hasFocus() == false); - QVERIFY(item4->wantsFocus() == true); - QVERIFY(item4->hasFocus() == false); - QVERIFY(item5->wantsFocus() == true); - QVERIFY(item5->hasFocus() == true); + QVERIFY(item1->hasActiveFocus() == true); + QVERIFY(item2->hasActiveFocus() == true); + QVERIFY(item3->hasActiveFocus() == true); + QVERIFY(item4->hasActiveFocus() == true); + QVERIFY(item5->hasActiveFocus() == true); delete view; } @@ -204,22 +199,22 @@ void tst_qdeclarativefocusscope::noFocus() QVERIFY(view->hasFocus()); QVERIFY(view->scene()->hasFocus()); - QVERIFY(item0->wantsFocus() == false); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == false); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_Right); - QVERIFY(item0->wantsFocus() == false); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == false); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_Down); - QVERIFY(item0->wantsFocus() == false); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == false); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); delete view; } @@ -249,32 +244,32 @@ void tst_qdeclarativefocusscope::textEdit() QVERIFY(view->hasFocus()); QVERIFY(view->scene()->hasFocus()); - QVERIFY(item0->wantsFocus() == true); - QVERIFY(item1->hasFocus() == true); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == true); + QVERIFY(item1->hasActiveFocus() == true); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_Right); - QVERIFY(item0->wantsFocus() == true); - QVERIFY(item1->hasFocus() == true); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == true); + QVERIFY(item1->hasActiveFocus() == true); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_Right); QTest::keyClick(view, Qt::Key_Right); QTest::keyClick(view, Qt::Key_Right); QTest::keyClick(view, Qt::Key_Right); QTest::keyClick(view, Qt::Key_Right); - QVERIFY(item0->wantsFocus() == true); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == true); - QVERIFY(item3->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == true); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == true); + QVERIFY(item3->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_Down); - QVERIFY(item0->wantsFocus() == false); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->hasFocus() == true); + QVERIFY(item0->hasActiveFocus() == false); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == true); delete view; } @@ -308,28 +303,28 @@ void tst_qdeclarativefocusscope::forceFocus() QVERIFY(view->hasFocus()); QVERIFY(view->scene()->hasFocus()); - QVERIFY(item0->wantsFocus() == true); - QVERIFY(item1->hasFocus() == true); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->wantsFocus() == false); - QVERIFY(item4->hasFocus() == false); - QVERIFY(item5->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == true); + QVERIFY(item1->hasActiveFocus() == true); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); + QVERIFY(item4->hasActiveFocus() == false); + QVERIFY(item5->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_4); - QVERIFY(item0->wantsFocus() == true); - QVERIFY(item1->hasFocus() == true); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->wantsFocus() == false); - QVERIFY(item4->hasFocus() == false); - QVERIFY(item5->hasFocus() == false); + QVERIFY(item0->hasActiveFocus() == true); + QVERIFY(item1->hasActiveFocus() == true); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == false); + QVERIFY(item4->hasActiveFocus() == false); + QVERIFY(item5->hasActiveFocus() == false); QTest::keyClick(view, Qt::Key_5); - QVERIFY(item0->wantsFocus() == false); - QVERIFY(item1->hasFocus() == false); - QVERIFY(item2->hasFocus() == false); - QVERIFY(item3->wantsFocus() == true); - QVERIFY(item4->hasFocus() == false); - QVERIFY(item5->hasFocus() == true); + QVERIFY(item0->hasActiveFocus() == false); + QVERIFY(item1->hasActiveFocus() == false); + QVERIFY(item2->hasActiveFocus() == false); + QVERIFY(item3->hasActiveFocus() == true); + QVERIFY(item4->hasActiveFocus() == false); + QVERIFY(item5->hasActiveFocus() == true); delete view; } diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index ffb2105..345ce38 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -371,7 +371,7 @@ void tst_QDeclarativeItem::keyNavigation() QDeclarativeItem *item = findItem<QDeclarativeItem>(canvas->rootObject(), "item1"); QVERIFY(item); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); // right QKeyEvent key(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier, "", false, 1); @@ -380,7 +380,7 @@ void tst_QDeclarativeItem::keyNavigation() item = findItem<QDeclarativeItem>(canvas->rootObject(), "item2"); QVERIFY(item); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); // down key = QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier, "", false, 1); @@ -389,7 +389,7 @@ void tst_QDeclarativeItem::keyNavigation() item = findItem<QDeclarativeItem>(canvas->rootObject(), "item4"); QVERIFY(item); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); // left key = QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier, "", false, 1); @@ -398,7 +398,7 @@ void tst_QDeclarativeItem::keyNavigation() item = findItem<QDeclarativeItem>(canvas->rootObject(), "item3"); QVERIFY(item); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); // up key = QKeyEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier, "", false, 1); @@ -407,7 +407,7 @@ void tst_QDeclarativeItem::keyNavigation() item = findItem<QDeclarativeItem>(canvas->rootObject(), "item1"); QVERIFY(item); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); // tab key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1); @@ -416,7 +416,7 @@ void tst_QDeclarativeItem::keyNavigation() item = findItem<QDeclarativeItem>(canvas->rootObject(), "item2"); QVERIFY(item); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); // backtab key = QKeyEvent(QEvent::KeyPress, Qt::Key_Backtab, Qt::NoModifier, "", false, 1); @@ -425,7 +425,7 @@ void tst_QDeclarativeItem::keyNavigation() item = findItem<QDeclarativeItem>(canvas->rootObject(), "item1"); QVERIFY(item); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); delete canvas; } @@ -618,21 +618,21 @@ void tst_QDeclarativeItem::mouseFocus() QDeclarativeItem *item = findItem<QDeclarativeItem>(canvas->rootObject(), "declarativeItem"); QVERIFY(item); - QSignalSpy focusSpy(item, SIGNAL(focusChanged(bool))); + QSignalSpy focusSpy(item, SIGNAL(activeFocusChanged(bool))); QTest::mouseClick(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(item->scenePos())); QApplication::processEvents(); QCOMPARE(focusSpy.count(), 1); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); // make sure focusable graphics widget underneath does not steal focus QTest::mouseClick(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(item->scenePos())); QApplication::processEvents(); QCOMPARE(focusSpy.count(), 1); - QVERIFY(item->hasFocus()); + QVERIFY(item->hasActiveFocus()); item->setFocus(false); - QVERIFY(!item->hasFocus()); + QVERIFY(!item->hasActiveFocus()); QCOMPARE(focusSpy.count(), 2); item->setFocus(true); QCOMPARE(focusSpy.count(), 3); @@ -664,7 +664,7 @@ void tst_QDeclarativeItem::propertyChanges() QSignalSpy baselineOffsetSpy(item, SIGNAL(baselineOffsetChanged(qreal))); QSignalSpy childrenRectSpy(parentItem, SIGNAL(childrenRectChanged(QRectF))); QSignalSpy focusSpy(item, SIGNAL(focusChanged(bool))); - QSignalSpy wantsFocusSpy(parentItem, SIGNAL(wantsFocusChanged(bool))); + QSignalSpy wantsFocusSpy(parentItem, SIGNAL(activeFocusChanged(bool))); item->setParentItem(parentItem); item->setWidth(100.0); @@ -696,14 +696,14 @@ void tst_QDeclarativeItem::propertyChanges() QVERIFY(childrenRectArguments.count() == 1); QCOMPARE(parentItem->childrenRect(), childrenRectArguments.at(0).toRectF()); - QCOMPARE(item->hasFocus(), true); + QCOMPARE(item->hasActiveFocus(), true); QCOMPARE(focusSpy.count(),1); QList<QVariant> focusArguments = focusSpy.first(); QVERIFY(focusArguments.count() == 1); QCOMPARE(focusArguments.at(0).toBool(), true); + QCOMPARE(parentItem->hasActiveFocus(), false); QCOMPARE(parentItem->hasFocus(), false); - QCOMPARE(parentItem->wantsFocus(), false); QCOMPARE(wantsFocusSpy.count(),0); delete canvas; diff --git a/tests/auto/declarative/qdeclarativestates/data/propertyErrors.qml b/tests/auto/declarative/qdeclarativestates/data/propertyErrors.qml index 807eec9..8f9a7f2 100644 --- a/tests/auto/declarative/qdeclarativestates/data/propertyErrors.qml +++ b/tests/auto/declarative/qdeclarativestates/data/propertyErrors.qml @@ -5,6 +5,6 @@ Rectangle { color: "red" states: State { name: "blue" - PropertyChanges { target: myRectangle; colr: "blue"; wantsFocus: true } + PropertyChanges { target: myRectangle; colr: "blue"; activeFocus: true } } } diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 7bc4fd4..3b6a420 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -922,7 +922,7 @@ void tst_qdeclarativestates::propertyErrors() QCOMPARE(rect->color(),QColor("red")); QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/propertyErrors.qml") + ":8:9: QML PropertyChanges: Cannot assign to non-existent property \"colr\""); - QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/propertyErrors.qml") + ":8:9: QML PropertyChanges: Cannot assign to read-only property \"wantsFocus\""); + QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/propertyErrors.qml") + ":8:9: QML PropertyChanges: Cannot assign to read-only property \"activeFocus\""); QDeclarativeItemPrivate::get(rect)->setState("blue"); } diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index bc814e5..0723b36 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -597,7 +597,7 @@ void tst_qdeclarativetextedit::persistentSelection() void tst_qdeclarativetextedit::focusOnPress() { { - QString componentStr = "import Qt 4.7\nTextEdit { focusOnPress: true; text: \"Hello World\" }"; + QString componentStr = "import Qt 4.7\nTextEdit { activeFocusOnPress: true; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit*>(texteditComponent.create()); @@ -606,7 +606,7 @@ void tst_qdeclarativetextedit::focusOnPress() } { - QString componentStr = "import Qt 4.7\nTextEdit { focusOnPress: false; text: \"Hello World\" }"; + QString componentStr = "import Qt 4.7\nTextEdit { activeFocusOnPress: false; text: \"Hello World\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit*>(texteditComponent.create()); @@ -833,15 +833,15 @@ void tst_qdeclarativetextedit::navigation() QDeclarativeItem *input = qobject_cast<QDeclarativeItem *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); QVERIFY(input != 0); - QTRY_VERIFY(input->hasFocus() == true); + QTRY_VERIFY(input->hasActiveFocus() == true); simulateKey(canvas, Qt::Key_Left); - QVERIFY(input->hasFocus() == false); + QVERIFY(input->hasActiveFocus() == false); simulateKey(canvas, Qt::Key_Right); - QVERIFY(input->hasFocus() == true); + QVERIFY(input->hasActiveFocus() == true); simulateKey(canvas, Qt::Key_Right); - QVERIFY(input->hasFocus() == false); + QVERIFY(input->hasActiveFocus() == false); simulateKey(canvas, Qt::Key_Left); - QVERIFY(input->hasFocus() == true); + QVERIFY(input->hasActiveFocus() == true); } void tst_qdeclarativetextedit::copyAndPaste() { @@ -895,7 +895,7 @@ void tst_qdeclarativetextedit::readOnly() QDeclarativeTextEdit *edit = qobject_cast<QDeclarativeTextEdit *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); QVERIFY(edit != 0); - QTRY_VERIFY(edit->hasFocus() == true); + QTRY_VERIFY(edit->hasActiveFocus() == true); QVERIFY(edit->isReadOnly() == true); QString initial = edit->text(); for(int k=Qt::Key_0; k<=Qt::Key_Z; k++) @@ -982,7 +982,7 @@ void tst_qdeclarativetextedit::openInputPanelOnClick() MyInputContext ic; view.setInputContext(&ic); QDeclarativeTextEdit edit; - QSignalSpy focusOnPressSpy(&edit, SIGNAL(focusOnPressChanged(bool))); + QSignalSpy focusOnPressSpy(&edit, SIGNAL(activeFocusOnPressChanged(bool))); edit.setText("Hello world"); edit.setPos(0, 0); scene.addItem(&edit); @@ -1030,7 +1030,7 @@ void tst_qdeclarativetextedit::openInputPanelOnFocus() MyInputContext ic; view.setInputContext(&ic); QDeclarativeTextEdit edit; - QSignalSpy focusOnPressSpy(&edit, SIGNAL(focusOnPressChanged(bool))); + QSignalSpy focusOnPressSpy(&edit, SIGNAL(activeFocusOnPressChanged(bool))); edit.setText("Hello world"); edit.setPos(0, 0); scene.addItem(&edit); @@ -1052,7 +1052,7 @@ void tst_qdeclarativetextedit::openInputPanelOnFocus() // focus on press, input panel on focus QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); QApplication::processEvents(); - QVERIFY(edit.hasFocus()); + QVERIFY(edit.hasActiveFocus()); QCOMPARE(ic.openInputPanelReceived, true); ic.openInputPanelReceived = false; @@ -1062,7 +1062,7 @@ void tst_qdeclarativetextedit::openInputPanelOnFocus() ic.openInputPanelReceived = false; // if already focused, input panel can be opened on press - QVERIFY(edit.hasFocus()); + QVERIFY(edit.hasActiveFocus()); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(edit.scenePos())); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, true); @@ -1090,7 +1090,7 @@ void tst_qdeclarativetextedit::openInputPanelOnFocus() QVERIFY(!view.testAttribute(Qt::WA_InputMethodEnabled)); // no automatic input panel events should - // be sent if focusOnPress is false + // be sent if activeFocusOnPress is false edit.setFocusOnPress(false); QCOMPARE(focusOnPressSpy.count(),1); edit.setFocusOnPress(false); @@ -1117,7 +1117,7 @@ void tst_qdeclarativetextedit::openInputPanelOnFocus() QCOMPARE(ic.closeInputPanelReceived, true); ic.closeInputPanelReceived = false; - // set focusOnPress back to true + // set activeFocusOnPress back to true edit.setFocusOnPress(true); QCOMPARE(focusOnPressSpy.count(),2); edit.setFocusOnPress(true); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 05dc50b..aceebf3 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -480,7 +480,7 @@ void tst_qdeclarativetextinput::maxLength() } textinputObject->setText(""); - QTRY_VERIFY(textinputObject->hasFocus() == true); + QTRY_VERIFY(textinputObject->hasActiveFocus() == true); for(int i=0; i<20; i++){ QCOMPARE(textinputObject->text().length(), qMin(i,10)); //simulateKey(canvas, Qt::Key_A); @@ -501,7 +501,7 @@ void tst_qdeclarativetextinput::masks() QVERIFY(canvas->rootObject() != 0); QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); QVERIFY(textinputObject != 0); - QTRY_VERIFY(textinputObject->hasFocus() == true); + QTRY_VERIFY(textinputObject->hasActiveFocus() == true); QVERIFY(textinputObject->text().length() == 0); QCOMPARE(textinputObject->inputMask(), QString("HHHHhhhh; ")); for(int i=0; i<10; i++){ @@ -530,7 +530,7 @@ void tst_qdeclarativetextinput::validators() QDeclarativeTextInput *intInput = qobject_cast<QDeclarativeTextInput *>(qvariant_cast<QObject *>(canvas->rootObject()->property("intInput"))); QVERIFY(intInput); intInput->setFocus(true); - QTRY_VERIFY(intInput->hasFocus()); + QTRY_VERIFY(intInput->hasActiveFocus()); QTest::keyPress(canvas, Qt::Key_1); QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10); QCOMPARE(intInput->text(), QLatin1String("1")); @@ -551,7 +551,7 @@ void tst_qdeclarativetextinput::validators() QDeclarativeTextInput *dblInput = qobject_cast<QDeclarativeTextInput *>(qvariant_cast<QObject *>(canvas->rootObject()->property("dblInput"))); QTRY_VERIFY(dblInput); dblInput->setFocus(true); - QVERIFY(dblInput->hasFocus() == true); + QVERIFY(dblInput->hasActiveFocus() == true); QTest::keyPress(canvas, Qt::Key_1); QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10); QCOMPARE(dblInput->text(), QLatin1String("1")); @@ -580,7 +580,7 @@ void tst_qdeclarativetextinput::validators() QDeclarativeTextInput *strInput = qobject_cast<QDeclarativeTextInput *>(qvariant_cast<QObject *>(canvas->rootObject()->property("strInput"))); QTRY_VERIFY(strInput); strInput->setFocus(true); - QVERIFY(strInput->hasFocus() == true); + QVERIFY(strInput->hasActiveFocus() == true); QTest::keyPress(canvas, Qt::Key_1); QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10); QCOMPARE(strInput->text(), QLatin1String("")); @@ -628,7 +628,7 @@ void tst_qdeclarativetextinput::inputMethods() QVERIFY(canvas->rootObject() != 0); input->setFocus(true); - QVERIFY(input->hasFocus() == true); + QVERIFY(input->hasActiveFocus() == true); // test that input method event is committed QInputMethodEvent event; event.setCommitString( "My ", -12, 0); @@ -655,11 +655,11 @@ void tst_qdeclarativetextinput::navigation() QVERIFY(input != 0); input->setCursorPosition(0); - QTRY_VERIFY(input->hasFocus() == true); + QTRY_VERIFY(input->hasActiveFocus() == true); simulateKey(canvas, Qt::Key_Left); - QVERIFY(input->hasFocus() == false); + QVERIFY(input->hasActiveFocus() == false); simulateKey(canvas, Qt::Key_Right); - QVERIFY(input->hasFocus() == true); + QVERIFY(input->hasActiveFocus() == true); //QT-2944: If text is selected, ensure we deselect upon cursor motion input->setCursorPosition(input->text().length()); input->select(0,input->text().length()); @@ -667,11 +667,11 @@ void tst_qdeclarativetextinput::navigation() simulateKey(canvas, Qt::Key_Right); QVERIFY(input->selectionStart() == input->selectionEnd()); QVERIFY(input->selectionStart() == input->text().length()); - QVERIFY(input->hasFocus() == true); + QVERIFY(input->hasActiveFocus() == true); simulateKey(canvas, Qt::Key_Right); - QVERIFY(input->hasFocus() == false); + QVERIFY(input->hasActiveFocus() == false); simulateKey(canvas, Qt::Key_Left); - QVERIFY(input->hasFocus() == true); + QVERIFY(input->hasActiveFocus() == true); // Up and Down should NOT do Home/End, even on Mac OS X (QTBUG-10438). input->setCursorPosition(2); @@ -758,7 +758,7 @@ void tst_qdeclarativetextinput::readOnly() QDeclarativeTextInput *input = qobject_cast<QDeclarativeTextInput *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); QVERIFY(input != 0); - QTRY_VERIFY(input->hasFocus() == true); + QTRY_VERIFY(input->hasActiveFocus() == true); QVERIFY(input->isReadOnly() == true); QString initial = input->text(); for(int k=Qt::Key_0; k<=Qt::Key_Z; k++) @@ -782,7 +782,7 @@ void tst_qdeclarativetextinput::echoMode() QDeclarativeTextInput *input = qobject_cast<QDeclarativeTextInput *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); QVERIFY(input != 0); - QTRY_VERIFY(input->hasFocus() == true); + QTRY_VERIFY(input->hasActiveFocus() == true); QString initial = input->text(); Qt::InputMethodHints ref; QCOMPARE(initial, QLatin1String("ABCDefgh")); @@ -875,7 +875,7 @@ void tst_qdeclarativetextinput::openInputPanelOnClick() MyInputContext ic; view.setInputContext(&ic); QDeclarativeTextInput input; - QSignalSpy focusOnPressSpy(&input, SIGNAL(focusOnPressChanged(bool))); + QSignalSpy focusOnPressSpy(&input, SIGNAL(activeFocusOnPressChanged(bool))); input.setText("Hello world"); input.setPos(0, 0); scene.addItem(&input); @@ -922,7 +922,7 @@ void tst_qdeclarativetextinput::openInputPanelOnFocus() MyInputContext ic; view.setInputContext(&ic); QDeclarativeTextInput input; - QSignalSpy focusOnPressSpy(&input, SIGNAL(focusOnPressChanged(bool))); + QSignalSpy focusOnPressSpy(&input, SIGNAL(activeFocusOnPressChanged(bool))); input.setText("Hello world"); input.setPos(0, 0); scene.addItem(&input); @@ -944,7 +944,7 @@ void tst_qdeclarativetextinput::openInputPanelOnFocus() // focus on press, input panel on focus QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(input.scenePos())); QApplication::processEvents(); - QVERIFY(input.hasFocus()); + QVERIFY(input.hasActiveFocus()); QCOMPARE(ic.openInputPanelReceived, true); ic.openInputPanelReceived = false; @@ -954,7 +954,7 @@ void tst_qdeclarativetextinput::openInputPanelOnFocus() ic.openInputPanelReceived = false; // if already focused, input panel can be opened on press - QVERIFY(input.hasFocus()); + QVERIFY(input.hasActiveFocus()); QTest::mousePress(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(input.scenePos())); QApplication::processEvents(); QCOMPARE(ic.openInputPanelReceived, true); @@ -982,7 +982,7 @@ void tst_qdeclarativetextinput::openInputPanelOnFocus() QVERIFY(!view.testAttribute(Qt::WA_InputMethodEnabled)); // no automatic input panel events should - // be sent if focusOnPress is false + // be sent if activeFocusOnPress is false input.setFocusOnPress(false); QCOMPARE(focusOnPressSpy.count(),1); input.setFocusOnPress(false); @@ -1009,7 +1009,7 @@ void tst_qdeclarativetextinput::openInputPanelOnFocus() QCOMPARE(ic.closeInputPanelReceived, true); ic.closeInputPanelReceived = false; - // set focusOnPress back to true + // set activeFocusOnPress back to true input.setFocusOnPress(true); QCOMPARE(focusOnPressSpy.count(),2); input.setFocusOnPress(true); -- cgit v0.12 From 18a2e097f09ecd68e9ea2a2a515d9358729188c2 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 22 Jul 2010 15:16:17 +1000 Subject: Remove QDeclarativeItem::childrenChanged() signal overload Broke signal handlers in QML Task-number: QTBUG-12335 Reviewed-by: Aaron Kennedy (cherry picked from commit ddb5e1eef379c7f32a594d91b00ff3514c46b62a) --- src/declarative/graphicsitems/qdeclarativeitem.h | 1 - src/s60installs/bwins/QtDeclarativeu.def | 2 +- src/s60installs/eabi/QtDeclarativeu.def | 2 +- tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp | 5 +++++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.h b/src/declarative/graphicsitems/qdeclarativeitem.h index cd9b910..afb1f2e 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.h +++ b/src/declarative/graphicsitems/qdeclarativeitem.h @@ -152,7 +152,6 @@ public: Q_INVOKABLE QDeclarativeItem *childAt(qreal x, qreal y) const; Q_SIGNALS: - void childrenChanged(); void childrenRectChanged(const QRectF &); void baselineOffsetChanged(qreal); void stateChanged(const QString &); diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 8fdd72c..2cc80a8 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -813,7 +813,7 @@ EXPORTS ??0QDeclarativeView@@QAE@ABVQUrl@@PAVQWidget@@@Z @ 812 NONAME ; QDeclarativeView::QDeclarativeView(class QUrl const &, class QWidget *) ?qt_metacall@QDeclarativePixmapReply@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 813 NONAME ABSENT ; int QDeclarativePixmapReply::qt_metacall(enum QMetaObject::Call, int, void * *) ?valueChanged@QDeclarativeExpression@@IAEXXZ @ 814 NONAME ; void QDeclarativeExpression::valueChanged(void) - ?childrenChanged@QDeclarativeItem@@IAEXXZ @ 815 NONAME ; void QDeclarativeItem::childrenChanged(void) + ?childrenChanged@QDeclarativeItem@@IAEXXZ @ 815 NONAME ABSENT ; void QDeclarativeItem::childrenChanged(void) ??_EQDeclarativeView@@UAE@I@Z @ 816 NONAME ; QDeclarativeView::~QDeclarativeView(unsigned int) ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 817 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *, int) ?tag@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 818 NONAME ; class QByteArray QMetaMethodBuilder::tag(void) const diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index dd5103f..bcb91fa 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -59,7 +59,7 @@ EXPORTS _ZN16QDeclarativeItem13parentChangedEPS_ @ 58 NONAME _ZN16QDeclarativeItem13setParentItemEPS_ @ 59 NONAME _ZN16QDeclarativeItem13smoothChangedEb @ 60 NONAME - _ZN16QDeclarativeItem15childrenChangedEv @ 61 NONAME + _ZN16QDeclarativeItem15childrenChangedEv @ 61 NONAME ABSENT _ZN16QDeclarativeItem15geometryChangedERK6QRectFS2_ @ 62 NONAME _ZN16QDeclarativeItem15keyReleaseEventEP9QKeyEvent @ 63 NONAME _ZN16QDeclarativeItem16inputMethodEventEP17QInputMethodEvent @ 64 NONAME diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 345ce38..d76d360 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -665,6 +665,7 @@ void tst_QDeclarativeItem::propertyChanges() QSignalSpy childrenRectSpy(parentItem, SIGNAL(childrenRectChanged(QRectF))); QSignalSpy focusSpy(item, SIGNAL(focusChanged(bool))); QSignalSpy wantsFocusSpy(parentItem, SIGNAL(activeFocusChanged(bool))); + QSignalSpy childrenChangedSpy(parentItem, SIGNAL(childrenChanged())); item->setParentItem(parentItem); item->setWidth(100.0); @@ -677,6 +678,10 @@ void tst_QDeclarativeItem::propertyChanges() QList<QVariant> parentArguments = parentSpy.first(); QVERIFY(parentArguments.count() == 1); QCOMPARE(item->parentItem(), qvariant_cast<QDeclarativeItem *>(parentArguments.at(0))); + QCOMPARE(childrenChangedSpy.count(),1); + + item->setParentItem(parentItem); + QCOMPARE(childrenChangedSpy.count(),1); QCOMPARE(item->width(), 100.0); QCOMPARE(widthSpy.count(),1); -- cgit v0.12 From a38bfb1807cb36240e0102935b23fe1ac474d035 Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Fri, 23 Jul 2010 14:53:58 +0200 Subject: Fix QLineEdit's Highlight color when inactive. This commit also updates QPalette's documentation regarding the current ColorGroup and operator==. Task-number: QTBUG-697 Reviewed-by: ogoffart (cherry picked from commit 24cdab32de2abd8669f281dd54c8da1124514915) --- src/gui/kernel/qpalette.cpp | 10 ++++++++++ src/gui/widgets/qlineedit.cpp | 3 ++- tests/auto/qlineedit/tst_qlineedit.cpp | 18 +++++++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index 98e8f66..38ec806 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -868,11 +868,21 @@ void QPalette::detach() Returns true (slowly) if this palette is different from \a p; otherwise returns false (usually quickly). + + \note The current ColorGroup is not taken into account when + comparing palettes + + \sa operator== */ /*! Returns true (usually quickly) if this palette is equal to \a p; otherwise returns false (slowly). + + \note The current ColorGroup is not taken into account when + comparing palettes + + \sa operator!= */ bool QPalette::operator==(const QPalette &p) const { diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp index 1bffde1..86e56bc 100644 --- a/src/gui/widgets/qlineedit.cpp +++ b/src/gui/widgets/qlineedit.cpp @@ -1946,7 +1946,8 @@ void QLineEdit::paintEvent(QPaintEvent *) if (d->control->hasSelectedText() || (d->cursorVisible && !d->control->inputMask().isEmpty() && !d->control->isReadOnly())){ flags |= QLineControl::DrawSelections; // Palette only used for selections/mask and may not be in sync - if(d->control->palette() != pal) + if (d->control->palette() != pal + || d->control->palette().currentColorGroup() != pal.currentColorGroup()) d->control->setPalette(pal); } diff --git a/tests/auto/qlineedit/tst_qlineedit.cpp b/tests/auto/qlineedit/tst_qlineedit.cpp index b34e559..e0747f8 100644 --- a/tests/auto/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/qlineedit/tst_qlineedit.cpp @@ -66,7 +66,6 @@ #include <qspinbox.h> #include <qdebug.h> - //TESTED_CLASS= //TESTED_FILES= @@ -275,6 +274,7 @@ private slots: void taskQTBUG_7902_contextMenuCrash(); #endif void taskQTBUG_7395_readOnlyShortcut(); + void QTBUG697_paletteCurrentColorGroup(); #ifdef QT3_SUPPORT void validateAndSet_data(); @@ -3714,5 +3714,21 @@ void tst_QLineEdit::taskQTBUG_7395_readOnlyShortcut() QCOMPARE(spy.count(), 1); } +void tst_QLineEdit::QTBUG697_paletteCurrentColorGroup() +{ + testWidget->setText(" "); + QPalette p = testWidget->palette(); + p.setBrush(QPalette::Active, QPalette::Highlight, Qt::green); + p.setBrush(QPalette::Inactive, QPalette::Highlight, Qt::red); + testWidget->setPalette(p); + testWidget->selectAll(); + QImage img(testWidget->rect().size(),QImage::Format_ARGB32 ); + testWidget->render(&img); + QCOMPARE(img.pixel(10, testWidget->height()/2), QColor(Qt::green).rgb()); + QApplication::setActiveWindow(0); + testWidget->render(&img); + QCOMPARE(img.pixel(10, testWidget->height()/2), QColor(Qt::red).rgb()); +} + QTEST_MAIN(tst_QLineEdit) #include "tst_qlineedit.moc" -- cgit v0.12 From 00df0354e08078b21aaca369ab5f0efa19b27fe2 Mon Sep 17 00:00:00 2001 From: Michael Dominic K <mdk@codethink.co.uk> Date: Wed, 21 Jul 2010 11:17:33 +0200 Subject: Do check after all if we have partialUpdateSupport. Task-number: QTBUG-12266 Merge-request: 752 Reviewed-by: Trond (cherry picked from commit d6203cfeb0e096575c1fc0254dddc07a3d65d24c) --- src/opengl/qwindowsurface_gl.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index e9da452..6b82ed3 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -494,10 +494,9 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & } } #endif - if (d_ptr->paintedRegion.boundingRect() != geometry()) { - // Emits warning if not supported. Should never happen unless - // setPartialUpdateSupport(true) has been called. - context()->d_func()->swapRegion(&d_ptr->paintedRegion); + if (d_ptr->paintedRegion.boundingRect() != geometry() && + hasPartialUpdateSupport()) { + context()->d_func()->swapRegion(&d_ptr->paintedRegion); } else context()->swapBuffers(); -- cgit v0.12 From aa8b52654407668100c2ecc10ba553059ad005da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond.kjernasen@nokia.com> Date: Mon, 26 Jul 2010 15:06:57 +0200 Subject: QGLBuffer::bind()/release() should not be const functions. This is more or less the same as in the QGLFramebufferObject::bind()/release() case. Task-number: QTBUG-12319 Reviewed-by: Kim (cherry picked from commit 3a08c5b1682e211bf664c21850187e2b15e89c23) --- src/opengl/qglbuffer.cpp | 4 ++-- src/opengl/qglbuffer.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/opengl/qglbuffer.cpp b/src/opengl/qglbuffer.cpp index d6e0109..5f0aed4 100644 --- a/src/opengl/qglbuffer.cpp +++ b/src/opengl/qglbuffer.cpp @@ -416,7 +416,7 @@ void QGLBuffer::allocate(const void *data, int count) \sa release(), create() */ -bool QGLBuffer::bind() const +bool QGLBuffer::bind() { #ifndef QT_NO_DEBUG if (!isCreated()) @@ -448,7 +448,7 @@ bool QGLBuffer::bind() const \sa bind() */ -void QGLBuffer::release() const +void QGLBuffer::release() { #ifndef QT_NO_DEBUG if (!isCreated()) diff --git a/src/opengl/qglbuffer.h b/src/opengl/qglbuffer.h index a1b45ff..9867f31 100644 --- a/src/opengl/qglbuffer.h +++ b/src/opengl/qglbuffer.h @@ -101,8 +101,8 @@ public: void destroy(); - bool bind() const; - void release() const; + bool bind(); + void release(); static void release(QGLBuffer::Type type); -- cgit v0.12 From 200bec1d750274f01dffbb281129ffd0926786aa Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Wed, 21 Jul 2010 15:56:21 +0200 Subject: rebuild configure.exe (cherry picked from commit 9c2b396b2b1fefc10b0ff24c9e33b41278c84ca8) --- configure.exe | Bin 1317888 -> 1317888 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/configure.exe b/configure.exe index eea40f9..6dfd14e48 100755 Binary files a/configure.exe and b/configure.exe differ -- cgit v0.12 From 14bbc9fc1482f2f60d6acb5cd35cfe121e9d5b8e Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Wed, 21 Jul 2010 09:57:32 +0200 Subject: Fixed a parsing error during sis and runonphone target creation. RevBy: Trust me (cherry picked from commit ebe6a5238947c30a613b61b521cb0d094efa2d02) --- mkspecs/features/sis_targets.prf | 2 +- mkspecs/features/symbian/run_on_phone.prf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/sis_targets.prf b/mkspecs/features/sis_targets.prf index 19972d7..615bbe5 100644 --- a/mkspecs/features/sis_targets.prf +++ b/mkspecs/features/sis_targets.prf @@ -4,7 +4,7 @@ GENERATE_SIS_TARGETS = false contains(TEMPLATE, app): GENERATE_SIS_TARGETS = true else:!equals(DEPLOYMENT, default_deployment) { for(dep_item, $$list($$DEPLOYMENT)) { - dep_item_sources = $$eval($${dep_item}.sources) + eval(dep_item_sources = $${dep_item}.sources) !isEmpty(dep_item_sources): GENERATE_SIS_TARGETS = true } } diff --git a/mkspecs/features/symbian/run_on_phone.prf b/mkspecs/features/symbian/run_on_phone.prf index 818151a..6fd400a 100644 --- a/mkspecs/features/symbian/run_on_phone.prf +++ b/mkspecs/features/symbian/run_on_phone.prf @@ -5,7 +5,7 @@ GENERATE_RUN_TARGETS = false contains(TEMPLATE, app): GENERATE_RUN_TARGETS = true else:!equals(DEPLOYMENT, default_deployment) { for(dep_item, $$list($$DEPLOYMENT)) { - dep_item_sources = $$eval($${dep_item}.sources) + eval(dep_item_sources = $${dep_item}.sources) !isEmpty(dep_item_sources): GENERATE_RUN_TARGETS = true } } -- cgit v0.12 From 0f989739f4b0ab72c3fa0a25e91edf7641b91fdb Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Tue, 27 Jul 2010 15:37:43 +1000 Subject: Copied Qt QML 4.7 branch to release. Reviewed-by: MArtin Jones --- demos/declarative/flickr/mobile/TitleBar.qml | 1 + .../photoviewer/PhotoViewerCore/EditableButton.qml | 4 + demos/declarative/twitter/TwitterCore/AuthView.qml | 2 + .../twitter/TwitterCore/HomeTitleBar.qml | 1 + demos/declarative/twitter/TwitterCore/TitleBar.qml | 1 + doc/src/declarative/advtutorial.qdoc | 24 +- doc/src/declarative/animation.qdoc | 4 +- doc/src/declarative/basictypes.qdoc | 23 + doc/src/declarative/declarativeui.qdoc | 10 +- doc/src/declarative/examples.qdoc | 14 +- doc/src/declarative/extending-tutorial.qdoc | 356 +++++++++------ doc/src/declarative/extending.qdoc | 43 +- doc/src/declarative/focus.qdoc | 2 +- doc/src/declarative/modules.qdoc | 4 +- doc/src/declarative/network.qdoc | 4 +- .../pics/extending-tutorial-chapter1.png | Bin 0 -> 6687 bytes .../pics/extending-tutorial-chapter2.png | Bin 0 -> 7318 bytes .../pics/extending-tutorial-chapter3.png | Bin 0 -> 8145 bytes .../pics/extending-tutorial-chapter5.png | Bin 0 -> 5557 bytes doc/src/declarative/qdeclarativedebugging.qdoc | 8 +- doc/src/declarative/qdeclarativei18n.qdoc | 8 +- doc/src/declarative/qdeclarativeintro.qdoc | 4 +- doc/src/declarative/qml-intro.qdoc | 10 +- doc/src/declarative/qmlviewer.qdoc | 4 +- doc/src/declarative/tutorial.qdoc | 4 +- .../declarative/cppextensions/plugins/plugin.cpp | 6 + .../declarative/cppextensions/plugins/plugins.qml | 3 +- .../tutorials/extending/chapter1-basics/app.qml | 18 +- .../extending/chapter1-basics/chapter1-basics.pro | 4 +- .../tutorials/extending/chapter1-basics/main.cpp | 4 +- .../extending/chapter1-basics/musician.cpp | 66 --- .../tutorials/extending/chapter1-basics/musician.h | 68 --- .../tutorials/extending/chapter2-methods/app.qml | 24 +- .../chapter2-methods/chapter2-methods.pro | 4 +- .../tutorials/extending/chapter2-methods/main.cpp | 4 +- .../extending/chapter2-methods/musician.cpp | 74 --- .../extending/chapter2-methods/musician.h | 81 ---- .../tutorials/extending/chapter3-bindings/app.qml | 42 +- .../chapter3-bindings/chapter3-bindings.pro | 4 +- .../tutorials/extending/chapter3-bindings/main.cpp | 4 +- .../extending/chapter3-bindings/musician.cpp | 76 ---- .../extending/chapter3-bindings/musician.h | 82 ---- .../extending/chapter4-customPropertyTypes/app.qml | 18 +- .../chapter4-customPropertyTypes.pro | 8 +- .../chapter4-customPropertyTypes/instrument.cpp | 56 --- .../chapter4-customPropertyTypes/instrument.h | 63 --- .../chapter4-customPropertyTypes/main.cpp | 8 +- .../chapter4-customPropertyTypes/musician.cpp | 67 --- .../chapter4-customPropertyTypes/musician.h | 78 ---- .../tutorials/extending/chapter5-plugins/app.qml | 53 --- .../chapter5-plugins/chapter5-plugins.pro | 20 - .../extending/chapter5-plugins/instrument.cpp | 56 --- .../extending/chapter5-plugins/instrument.h | 61 --- .../extending/chapter5-plugins/musician.cpp | 67 --- .../extending/chapter5-plugins/musician.h | 68 --- .../extending/chapter5-plugins/musicplugin.cpp | 54 --- .../extending/chapter5-plugins/musicplugin.h | 55 --- .../tutorials/extending/chapter5-plugins/qmldir | 1 - .../declarative/tutorials/extending/extending.pro | 3 +- .../tutorials/samegame/samegame1/samegame.qml | 2 +- .../ui-components/tabwidget/TabWidget.qml | 7 +- .../debugger/qdeclarativedebugtrace.cpp | 12 + .../graphicsitems/qdeclarativeflickable.cpp | 2 +- .../graphicsitems/qdeclarativegridview.cpp | 16 +- .../graphicsitems/qdeclarativeimage.cpp | 26 +- src/declarative/graphicsitems/qdeclarativeitem.cpp | 30 +- src/declarative/graphicsitems/qdeclarativeitem_p.h | 16 +- .../graphicsitems/qdeclarativeitemsmodule.cpp | 3 +- .../graphicsitems/qdeclarativelistview.cpp | 20 +- .../graphicsitems/qdeclarativeloader.cpp | 7 +- .../graphicsitems/qdeclarativemousearea.cpp | 3 +- .../graphicsitems/qdeclarativepainteditem.cpp | 16 + src/declarative/graphicsitems/qdeclarativepath.cpp | 7 + .../graphicsitems/qdeclarativepathview.cpp | 4 + .../graphicsitems/qdeclarativerepeater.cpp | 38 +- src/declarative/graphicsitems/qdeclarativetext.cpp | 20 +- .../graphicsitems/qdeclarativetext_p_p.h | 3 +- .../graphicsitems/qdeclarativetextedit.cpp | 5 +- .../graphicsitems/qdeclarativetranslate.cpp | 2 +- src/declarative/qml/parser/qdeclarativejslexer.cpp | 10 +- src/declarative/qml/qdeclarative.h | 14 +- src/declarative/qml/qdeclarativebinding.cpp | 145 +++--- src/declarative/qml/qdeclarativebinding_p_p.h | 28 +- src/declarative/qml/qdeclarativecompiler.cpp | 6 +- src/declarative/qml/qdeclarativecomponent.cpp | 65 ++- src/declarative/qml/qdeclarativecontext.cpp | 2 + src/declarative/qml/qdeclarativecontext_p.h | 1 + src/declarative/qml/qdeclarativedom.cpp | 2 +- src/declarative/qml/qdeclarativeengine.cpp | 94 ++-- src/declarative/qml/qdeclarativeengine_p.h | 1 - src/declarative/qml/qdeclarativeenginedebug.cpp | 30 +- src/declarative/qml/qdeclarativeexpression.cpp | 502 ++++++++++++--------- src/declarative/qml/qdeclarativeexpression_p.h | 83 +++- .../qml/qdeclarativeextensionplugin.cpp | 81 +++- src/declarative/qml/qdeclarativeimport.cpp | 6 +- src/declarative/qml/qdeclarativelist.cpp | 2 +- src/declarative/qml/qdeclarativemetatype.cpp | 27 +- src/declarative/qml/qdeclarativemetatype_p.h | 8 +- src/declarative/qml/qdeclarativeprivate.h | 30 +- src/declarative/qml/qdeclarativescriptparser.cpp | 97 ++-- src/declarative/qml/qdeclarativevaluetype.cpp | 2 +- src/declarative/util/qdeclarativeanimation.cpp | 271 +++++------ src/declarative/util/qdeclarativeanimation_p.h | 6 +- src/declarative/util/qdeclarativeanimation_p_p.h | 2 - src/declarative/util/qdeclarativebehavior.cpp | 45 +- src/declarative/util/qdeclarativebehavior_p.h | 1 - src/declarative/util/qdeclarativelistmodel.cpp | 2 + src/declarative/util/qdeclarativepackage.cpp | 4 +- src/declarative/util/qdeclarativepixmapcache.cpp | 60 +-- .../util/qdeclarativesmoothedanimation.cpp | 31 +- .../util/qdeclarativespringanimation.cpp | 39 +- src/declarative/util/qdeclarativestyledtext.cpp | 6 +- src/declarative/util/qdeclarativetransition.cpp | 4 +- src/declarative/util/qdeclarativeview.cpp | 45 +- src/declarative/util/qdeclarativexmllistmodel.cpp | 8 +- src/imports/particles/qdeclarativeparticles.cpp | 2 +- src/s60installs/bwins/QtDeclarativeu.def | 26 +- src/s60installs/eabi/QtDeclarativeu.def | 25 +- tests/auto/declarative/declarative.pro | 3 +- .../tst_qdeclarativeanimations.cpp | 2 +- .../tst_qdeclarativebehaviors.cpp | 1 + .../data/assignBasicTypes.2.qml | 2 +- .../data/assignBasicTypes.qml | 2 +- .../declarative/qdeclarativeecmascript/testtypes.h | 2 +- .../tst_qdeclarativeecmascript.cpp | 46 +- .../qdeclarativeimage/data/heart-arm.png | Bin 0 -> 12596 bytes .../qdeclarativeimage/data/heart200-arm.png | Bin 0 -> 8063 bytes .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 18 +- .../tst_qdeclarativeimageprovider.cpp | 4 +- .../data/importFile.errors.txt | 1 + .../qdeclarativelanguage/data/importFile.qml | 3 + .../data/nestedErrors.errors.txt | 2 +- .../data/wrongType.6.errors.txt | 2 +- .../tst_qdeclarativelanguage.cpp | 1 + .../tst_qdeclarativemetatype.cpp | 3 +- .../data/smoothedfollow1.qml | 3 - .../data/smoothedfollow2.qml | 5 - .../data/smoothedfollow3.qml | 6 - .../data/smoothedfollowDisabled.qml | 13 - .../data/smoothedfollowValueSource.qml | 13 - .../qdeclarativesmoothedfollow.pro | 16 - .../tst_qdeclarativesmoothedfollow.cpp | 194 -------- .../qdeclarativetext/data/alignments.qml | 6 +- .../qdeclarativetextedit/data/alignments.qml | 2 +- .../tst_qdeclarativetextedit.cpp | 64 ++- .../tst_qdeclarativetextinput.cpp | 72 ++- .../tst_qdeclarativevaluetypes.cpp | 16 +- .../qdeclarativeviewer/tst_qdeclarativeviewer.cpp | 36 +- .../tst_qdeclarativeworkerscript.cpp | 2 +- .../auto/declarative/qmlvisual/focusscope/test.qml | 8 +- .../declarative/qmlvisual/focusscope/test2.qml | 10 +- .../smoothedfollow.qml | 20 +- .../qmlvisual/qdeclarativespringfollow/clock.qml | 27 +- .../qmlvisual/qdeclarativespringfollow/follow.qml | 26 +- tools/qml/main.cpp | 17 +- 155 files changed, 1912 insertions(+), 2619 deletions(-) create mode 100644 doc/src/declarative/pics/extending-tutorial-chapter1.png create mode 100644 doc/src/declarative/pics/extending-tutorial-chapter2.png create mode 100644 doc/src/declarative/pics/extending-tutorial-chapter3.png create mode 100644 doc/src/declarative/pics/extending-tutorial-chapter5.png delete mode 100644 examples/declarative/tutorials/extending/chapter1-basics/musician.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter1-basics/musician.h delete mode 100644 examples/declarative/tutorials/extending/chapter2-methods/musician.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter2-methods/musician.h delete mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/musician.h delete mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h delete mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/app.qml delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/instrument.h delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musician.h delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h delete mode 100644 examples/declarative/tutorials/extending/chapter5-plugins/qmldir create mode 100644 tests/auto/declarative/qdeclarativeimage/data/heart-arm.png create mode 100644 tests/auto/declarative/qdeclarativeimage/data/heart200-arm.png create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/importFile.errors.txt create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/importFile.qml delete mode 100644 tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow1.qml delete mode 100644 tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow2.qml delete mode 100644 tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow3.qml delete mode 100644 tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowDisabled.qml delete mode 100644 tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowValueSource.qml delete mode 100644 tests/auto/declarative/qdeclarativesmoothedfollow/qdeclarativesmoothedfollow.pro delete mode 100644 tests/auto/declarative/qdeclarativesmoothedfollow/tst_qdeclarativesmoothedfollow.cpp diff --git a/demos/declarative/flickr/mobile/TitleBar.qml b/demos/declarative/flickr/mobile/TitleBar.qml index c7e1a53..335c315 100644 --- a/demos/declarative/flickr/mobile/TitleBar.qml +++ b/demos/declarative/flickr/mobile/TitleBar.qml @@ -109,6 +109,7 @@ Item { Item { id: returnKey Keys.onReturnPressed: container.accept() + Keys.onEnterPressed: container.accept() Keys.onEscapePressed: titleBar.state = "" } } diff --git a/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml b/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml index 568666e..decc0fe 100644 --- a/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml +++ b/demos/declarative/photoviewer/PhotoViewerCore/EditableButton.qml @@ -64,6 +64,10 @@ Item { container.labelChanged(textInput.text) container.focus = true } + Keys.onEnterPressed: { + container.labelChanged(textInput.text) + container.focus = true + } Keys.onEscapePressed: { textInput.text = container.label container.focus = true diff --git a/demos/declarative/twitter/TwitterCore/AuthView.qml b/demos/declarative/twitter/TwitterCore/AuthView.qml index 4f75777..0d05deb 100644 --- a/demos/declarative/twitter/TwitterCore/AuthView.qml +++ b/demos/declarative/twitter/TwitterCore/AuthView.qml @@ -115,6 +115,7 @@ Item { KeyNavigation.tab: guest KeyNavigation.backtab: passIn Keys.onReturnPressed: login.doLogin(); + Keys.onEnterPressed: login.doLogin(); Keys.onSelectPressed: login.doLogin(); Keys.onSpacePressed: login.doLogin(); onClicked: login.doLogin(); @@ -135,6 +136,7 @@ Item { KeyNavigation.tab: nameIn KeyNavigation.backtab: login Keys.onReturnPressed: guest.doGuest(); + Keys.onEnterPressed: guest.doGuest(); Keys.onSelectPressed: guest.doGuest(); Keys.onSpacePressed: guest.doGuest(); onClicked: guest.doGuest(); diff --git a/demos/declarative/twitter/TwitterCore/HomeTitleBar.qml b/demos/declarative/twitter/TwitterCore/HomeTitleBar.qml index b26f7b3..56f31b1 100644 --- a/demos/declarative/twitter/TwitterCore/HomeTitleBar.qml +++ b/demos/declarative/twitter/TwitterCore/HomeTitleBar.qml @@ -136,6 +136,7 @@ Item { Item { id: returnKey Keys.onReturnPressed: container.accept() + Keys.onEnterPressed: container.accept() Keys.onEscapePressed: titleBar.state = "" } } diff --git a/demos/declarative/twitter/TwitterCore/TitleBar.qml b/demos/declarative/twitter/TwitterCore/TitleBar.qml index 6cd0a50..558bc18 100644 --- a/demos/declarative/twitter/TwitterCore/TitleBar.qml +++ b/demos/declarative/twitter/TwitterCore/TitleBar.qml @@ -98,6 +98,7 @@ Item { Item { id: returnKey Keys.onReturnPressed: container.accept() + Keys.onEnterPressed: container.accept() Keys.onEscapePressed: titleBar.state = "" } } diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc index afedb44..1341bbb 100644 --- a/doc/src/declarative/advtutorial.qdoc +++ b/doc/src/declarative/advtutorial.qdoc @@ -164,14 +164,22 @@ The \c createBlock() function creates a block from the \c Block.qml file and moves the new block to its position on the game canvas. This involves several steps: \list -\o \l {QML:Qt::createComponent()}{Qt.createComponent()} is called to generate an element from \c Block.qml. - If the component is ready, we can call \c createObject() to create an instance of the \c Block item. -\o If \c createObject() returned null (i.e. if there was an error while - loading the object), print the error information. -\o Place the block in its position on the board and set its width and height. - Also, store it in the blocks array for future reference. -\o Finally, print error information to the console if the component could not be - loaded for some reason (for example, if the file is missing). + +\o \l {QML:Qt::createComponent()}{Qt.createComponent()} is called to + generate an element from \c Block.qml. If the component is ready, + we can call \c createObject() to create an instance of the \c Block + item. + +\o If \c createObject() returned null (i.e. if there was an error + while loading the object), print the error information. + +\o Place the block in its position on the board and set its width and + height. Also, store it in the blocks array for future reference. + +\o Finally, print error information to the console if the component + could not be loaded for some reason (for example, if the file is + missing). + \endlist diff --git a/doc/src/declarative/animation.qdoc b/doc/src/declarative/animation.qdoc index c5333df..401cf16 100644 --- a/doc/src/declarative/animation.qdoc +++ b/doc/src/declarative/animation.qdoc @@ -67,7 +67,9 @@ A property animation can also be specified as a resource that is manipulated fro \snippet doc/src/snippets/declarative/animation.qml property-anim-3 As can be seen, when an animation is used like this (as opposed to as a value source) you will need -to explicitly set the \c target and \c property to animate. +to explicitly set the \c target and \c property to animate. This also the only case where +an animation needs to be started explictly by either setting the \c running property to +true or calling the \c start() method. Animations can be joined into a group using SequentialAnimation and ParallelAnimation. diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 6aa1808..e327d4a 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -403,3 +403,26 @@ \sa {QML Basic Types} */ + +/*! + \qmlbasictype enumeration + \ingroup qmlbasictypes + + \brief An enumeration type consists of a set of named values. + + An enumeration type consists of a set of named values. + + An enumeration value may be specifed as either a string: + \qml + Text { horizontalAlignment: "AlignRight" } + \endqml + + or as \c {<Element>.<value>}: + \qml + Text { horizontalAlignment: Text.AlignRight } + \endqml + + The second form is preferred. + + \sa {QML Basic Types} +*/ diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index e9a039b..217e372 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -76,15 +76,15 @@ application or to build completely new applications. QML is fully \l \list \o \l {QML Documents} \o \l {Property Binding} -\o \l {Integrating JavaScript} -\o \l {QML Scope} \o \l {Network Transparency} +\o \l {QML Scope} +\o \l {Integrating JavaScript} \o \l {Data Models} \o \l {anchor-layout.html}{Anchor-based Layout} \o \l {qdeclarativestates.html}{States} \o \l {qdeclarativeanimation.html}{Animation} -\o \l {qdeclarativemodules.html}{Modules} \o \l {qdeclarativefocus.html}{Keyboard Focus} +\o \l {qdeclarativemodules.html}{Modules} \o \l {Extending types from QML} \o \l {qdeclarativedynamicobjects.html}{Dynamic Object Creation} \o \l {qmlruntime.html}{The Qt Declarative Runtime} @@ -92,10 +92,10 @@ application or to build completely new applications. QML is fully \l \section1 Using QML with C++ \list -\o \l {Tutorial: Writing QML extensions with C++} -\o \l {Extending QML in C++} \o \l {Using QML in C++ Applications} \o \l {Integrating QML with existing Qt UI code} +\o \l {Tutorial: Writing QML extensions with C++} +\o \l {Extending QML in C++} \endlist \section1 Reference diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc index 587cdf2..39da323 100644 --- a/doc/src/declarative/examples.qdoc +++ b/doc/src/declarative/examples.qdoc @@ -36,11 +36,18 @@ Qt includes a set of examples and demos that show how to use various aspects of QML. The examples are small demonstrations of particular QML components, while the demos contain more complete and functional applications. -To run the examples and demos, you can use Qt Creator or the included \l {Qt Declarative UI Runtime}{qmlviewer} -command-line application. For example, from your build directory, run: +To run the examples and demos, open them in Qt Creator or use the included +\l {QML Viewer} tool. The \l {QML Viewer} can be run from the command line: \code - bin/qmlviewer $QTDIR/demos/declarative/samegame/samegame.qml + qmlviewer $QTDIR/demos/declarative/samegame/samegame.qml +\endcode + +On Mac OS X, you can run the included "QMLViewer" application from the +Finder, or use the command line: + +\code + QMLViewer.app/Contents/MacOS/QMLViewer $QTDIR/demos/declarative/samegame/samegame.qml \endcode @@ -168,6 +175,7 @@ The examples can be found in Qt's \c examples/declarative directory. \list \o \l{declarative/modelviews/gridview}{GridView} \o \l{declarative/modelviews/listview}{ListView} +\o \l{declarative/modelviews/pathview}{PathView} \o \l{declarative/modelviews/package}{Package} \o \l{declarative/modelviews/parallax}{Parallax} \o \l{declarative/modelviews/visualitemmodel}{VisualItemModel} diff --git a/doc/src/declarative/extending-tutorial.qdoc b/doc/src/declarative/extending-tutorial.qdoc index 0cb3a7d..bc849b0 100644 --- a/doc/src/declarative/extending-tutorial.qdoc +++ b/doc/src/declarative/extending-tutorial.qdoc @@ -48,8 +48,9 @@ Tutorial chapters: \o \l{declarative/tutorials/extending/chapter2-methods}{Connecting to C++ Methods and Signals} \o \l{declarative/tutorials/extending/chapter3-bindings}{Adding Property Bindings} \o \l{declarative/tutorials/extending/chapter4-customPropertyTypes}{Using Custom Property Types} -\o \l{declarative/tutorials/extending/chapter5-plugins}{Writing an Extension Plugin} -\o \l{qml-extending-tutorial6.html}{In Summary} +\o \l{declarative/tutorials/extending/chapter5-listproperties}{Using List Property Types} +\o \l{declarative/tutorials/extending/chapter6-plugins}{Writing an Extension Plugin} +\o \l{qml-extending-tutorial7.html}{In Summary} \endlist */ @@ -59,66 +60,99 @@ Tutorial chapters: \example declarative/tutorials/extending/chapter1-basics -Let's create a new QML type called "Musician" that has two properties: a name -and an instrument. We will make it available in a \l {Modules}{module} called "Music", with +A common task when extending QML is to provide a new QML type that supports some + custom functionality beyond what is provided by the built-in \l {QML Elements}. +For example, this could be done to implement particular data models, or provide +elements with custom painting and drawing capabilities, or access system features +like network programming that are not accessible through built-in QML features. + +In this tutorial, we will show how to use the C++ classes in the QtDeclarative +module to extend QML. The end result will be a simple Pie Chart display implemented by +several custom QML types connected together through QML features like bindings and +signals, and made available to the QML runtime through a plugin. + +To begin with, let's create a new QML type called "PieChart" that has two properties: a name +and a color. We will make it available in a \l {Modules}{module} called "Charts", with a module version of 1.0. -We want this \c Musician type to be usable from QML like this: + +We want this \c PieChart type to be usable from QML like this: \code - import Music 1.0 + import Charts 1.0 - Musician { - name: "Reddy the Rocker" - instrument: "Guitar" + PieChart { + width: 100; height: 100 + name: "A simple pie chart" + color: "red" } \endcode -To do this, we need a C++ class that encapsulates this \c Musician type and its two -properties. Since QML relies heavily on Qt's \l{Meta-Object System}{meta object system}, +To do this, we need a C++ class that encapsulates this \c PieChart type and its two +properties. Since QML makes extensive use of Qt's \l{Meta-Object System}{meta object system}, this new class must: \list -\o inherit from QObject -\o declare its properties using the Q_PROPERTY() macro +\o Inherit from QObject +\o Declare its properties using the Q_PROPERTY macro \endlist -Here is our \c Musician class, defined in \c musician.h: +Here is our \c PieChart class, defined in \c piechart.h: -\snippet declarative/tutorials/extending/chapter1-basics/musician.h 0 +\snippet declarative/tutorials/extending/chapter1-basics/piechart.h 0 -It defines the two properties, \c name and \c instrument, with the Q_PROPERTY() macro. -The class implementation in \c musician.cpp simply sets and returns the \c m_name and -\c m_instrument values as appropriate. +The class inherits from QDeclarativeItem because we want to override +QDeclarativeItem::paint() in order to draw. If the class just represented some +data type and was not an item that actually needed to be displayed, it could simply inherit +from QObject. Or, if we want to extend the functionality of an existing QObject-based +class, it could inherit from that class instead. -Our QML file, \c app.qml, creates a \c Musician item and display the musician's details +The \c PieChart class defines the two properties, \c name and \c color, with the Q_PROPERTY macro, +and overrides QDeclarativeItem::paint(). The class implementation in \c piechart.cpp +simply sets and returns the \c m_name and \c m_color values as appropriate, and +implements \c paint() to draw a simple pie chart. It also turns off the +QGraphicsItem::ItemHasNoContents flag to enable painting: + +\snippet declarative/tutorials/extending/chapter1-basics/piechart.cpp 0 +\dots 0 +\snippet declarative/tutorials/extending/chapter1-basics/piechart.cpp 1 + +Now that we have defined the \c PieChart type, we will use it from QML. The \c app.qml +file creates a \c PieChart item and display the pie chart's details using a standard QML \l Text item: \snippet declarative/tutorials/extending/chapter1-basics/app.qml 0 +Notice that although the color is specified as a string in QML, it is automatically +converted to a QColor object for the PieChart \c color property. Automatic conversions are +provided for various other \l {QML Basic Types}{basic types}; for example, a string +like "640x480" can be automatically converted to a QSize value. + We'll also create a C++ application that uses a QDeclarativeView to run and -display \c app.qml. The application must register the \c Musician type +display \c app.qml. The application must register the \c PieChart type using the qmlRegisterType() function, to allow it to be used from QML. If -you don't register the type, \c app.qml won't be able to create a \c Musician. +you don't register the type, \c app.qml won't be able to create a \c PieChart. Here is the application \c main.cpp: \snippet declarative/tutorials/extending/chapter1-basics/main.cpp 0 -This call to qmlRegisterType() registers the \c Musician type as a type called "Musician", in a module named "Music", +This call to qmlRegisterType() registers the \c PieChart type as a type called "PieChart", in a module named "Charts", with a module version of 1.0. Lastly, we write a \c .pro project file that includes the files and the \c declarative library: \quotefile declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro -Now we can build and run the application. Try it yourself with the code in Qt's \c examples/tutorials/extending/chapter1-basics directory. +Now we can build and run the application: -\example declarative/tutorials/extending/chapter1-basics +\image extending-tutorial-chapter1.png + +Try it yourself with the code in Qt's \c examples/tutorials/extending/chapter1-basics directory. At the moment, the \c app.qml is run from within a C++ application. -This may seem odd if you're used to running QML files with the standard \c qml tool. +This may seem odd if you're used to running QML files with the \l {QML Viewer}. Later on, we'll show how to create a plugin so that you can run \c app.qml using the -\c qml tool instead. +\l {QML Viewer} instead. */ @@ -128,39 +162,40 @@ Later on, we'll show how to create a plugin so that you can run \c app.qml using \example declarative/tutorials/extending/chapter2-methods -Suppose we want \c Musician to have a "perform" method that prints a message -to the console and then emits a "performanceEnded" signal. -Other elements would be able to call \c perform() and receive -\c performanceEnded() signals like this: +Suppose we want \c PieChart to have a "clearChart()" method that erases the +chart and then emits a "chartCleared" signal. Our \c app.qml would be able +to call \c clearChart() and receive \c chartCleared() signals like this: \snippet declarative/tutorials/extending/chapter2-methods/app.qml 0 -To do this, we add a \c perform() method and a \c performanceEnded() signal +\image extending-tutorial-chapter2.png + +To do this, we add a \c clearChart() method and a \c chartCleared() signal to our C++ class: -\snippet declarative/tutorials/extending/chapter2-methods/musician.h 0 +\snippet declarative/tutorials/extending/chapter2-methods/piechart.h 0 \dots -\snippet declarative/tutorials/extending/chapter2-methods/musician.h 1 +\snippet declarative/tutorials/extending/chapter2-methods/piechart.h 1 \dots -\snippet declarative/tutorials/extending/chapter2-methods/musician.h 2 +\snippet declarative/tutorials/extending/chapter2-methods/piechart.h 2 \dots -\snippet declarative/tutorials/extending/chapter2-methods/musician.h 3 +\snippet declarative/tutorials/extending/chapter2-methods/piechart.h 3 -The use of Q_INVOKABLE makes the \c perform() method available to the +The use of Q_INVOKABLE makes the \c clearChart() method available to the Qt Meta-Object system, and in turn, to QML. Note that it could have been declared as as a Qt slot instead of using Q_INVOKABLE, as slots are also callable from QML. Both of these approaches are valid. -The \c perform() method simply prints a message to the console and -then emits \c performanceEnded(): +The \c clearChart() method simply changes the color to Qt::transparent, +repaints the chart, then emits the \c chartCleared() signal: -\snippet declarative/tutorials/extending/chapter2-methods/musician.cpp 0 +\snippet declarative/tutorials/extending/chapter2-methods/piechart.cpp 0 -Now when we run the application and click the window, the application outputs: +Now when we run the application and click the window, the pie chart +disappears, and the application outputs: \code - "Reddy the Rocker" is playing the "Guitar" - The performance has now ended + The chart has been cleared \endcode Try out the example yourself with the updated code in Qt's \c examples/tutorials/extending/chapter2-methods directory. @@ -174,45 +209,49 @@ Try out the example yourself with the updated code in Qt's \c examples/tutorials Property bindings is a powerful feature of QML that allows values of different elements to be synchronized automatically. It uses signals to notify and update -other elements' values when property values change. +other elements' values when property values are changed. -Let's enable property bindings for the \c instrument property. That means +Let's enable property bindings for the \c color property. That means if we have code like this: \snippet declarative/tutorials/extending/chapter3-bindings/app.qml 0 -The "instrument: reddy.instrument" statement binds the \c instrument value of -\c craig to the \c instrument of \c reddy. -Whenever \c reddy's \c instrument value changes, \c craig's \c instrument value -updates to the same value. When the window is clicked, the application outputs: +\image extending-tutorial-chapter3.png -\code - "Reddy the Rocker" is playing the "Guitar" - "Craig the Copycat" is playing the "Guitar" - "Reddy the Rocker" is playing the "Drums" - "Craig the Copycat" is playing the "Drums" -\endcode +The "color: chartA.color" statement binds the \c color value of +\c chartB to the \c color of \c chartA. +Whenever \c chartA's \c color value changes, \c chartB's \c color value +updates to the same value. When the window is clicked, the \c onClicked +handler in the MouseArea changes the color of \c chartA, thereby changing +both charts to the color blue. -It's easy to enable property binding for the \c instrument property. -We add a \l{Qt's Property System}{NOTIFY} feature to its Q_PROPERTY() declaration to indicate that a "instrumentChanged" signal +It's easy to enable property binding for the \c color property. +We add a \l{Qt's Property System}{NOTIFY} feature to its Q_PROPERTY() declaration to indicate that a "colorChanged" signal is emitted whenever the value changes. -\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 0 +\snippet declarative/tutorials/extending/chapter3-bindings/piechart.h 0 \dots -\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 1 +\snippet declarative/tutorials/extending/chapter3-bindings/piechart.h 1 \dots -\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 2 +\snippet declarative/tutorials/extending/chapter3-bindings/piechart.h 2 \dots -\snippet declarative/tutorials/extending/chapter3-bindings/musician.h 3 +\snippet declarative/tutorials/extending/chapter3-bindings/piechart.h 3 -Then, we emit this signal in \c setInstrument(): +Then, we emit this signal in \c setPieSlice(): -\snippet declarative/tutorials/extending/chapter3-bindings/musician.cpp 0 +\snippet declarative/tutorials/extending/chapter3-bindings/piechart.cpp 0 -It's important for \c setInstrument() to check that the instrument value has actually changed -before emitting \c instrumentChanged(). This ensures the signal is not emitted unnecessarily and +It's important for \c setColor() to check that the color value has actually changed +before emitting \c colorChanged(). This ensures the signal is not emitted unnecessarily and also prevents loops when other elements respond to the value change. +The use of bindings is essential to QML. You should always add NOTIFY +signals for properties if they are able to be implemented, so that your +properties can be used in bindings. Properties that cannot be bound cannot be +automatically updated and cannot be used as flexibly in QML. Also, since +bindings are invoked so often and relied upon in QML usage, users of your +custom QML types may see unexpected behavior if bindings are not implemented. + */ /*! @@ -220,21 +259,35 @@ also prevents loops when other elements respond to the value change. \example declarative/tutorials/extending/chapter4-customPropertyTypes -The \c Musician type currently has two properties that are both strings. -It could have all sorts of other properties. For example, we could add an -integer-type property to store the age of each musician: +The \c PieChart type currently has a string-type property and a color-type property. +It could have many other types of properties. For example, it could have an +enum-type property to store a display mode for each chart: \code - class Musician : public QObject + // C++ + class PieChart : public QDeclarativeItem { + Q_ENUMS(DisplayMode) + Q_PROPERTY(DisplayMode displayMode READ displayMode WRITE setDisplayMode) ... - Q_PROPERTY(int age READ age WRITE setAge) + public: - ... - int age() const; - void setAge(int age); + enum DisplayMode { + MultiLevel, + Exploded, + ThreeDimensional + }; + + void setDisplayMode(DisplayMode mode); + DisplayMode displayMode() const; ... }; + + // QML + PieChart { + ... + displayMode: PieChart.Exploded + } \endcode We can also use various other property types. QML has built-in support for the following @@ -257,31 +310,39 @@ types: If we want to create a property whose type is not supported by QML by default, we need to register the type with QML. -For example, let's change the type of the \c instrument property from a string to a -new type called "Instrument". Instead of assigning a string value to \c instrument, -we assign an \c Instrument value: +For example, let's replace the use of the \c property with a type called +"PieSlice" that has a \c color property. Instead of assigning a color, +we assign an \c PieSlice value which itself contains a \c color: \snippet declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml 0 -Like \c Musician, this new \c Instrument type has to inherit from QObject and declare +Like \c PieChart, this new \c PieSlice type inherits from QDeclarativeItem and declares its properties with Q_PROPERTY(): -\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h 0 +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.h 0 -To use it from \c Musician, we modify the \c instrument property declaration +To use it in \c PieChart, we modify the \c color property declaration and associated method signatures: -\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 0 +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h 0 \dots -\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 1 +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h 1 \dots -\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 2 +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h 2 \dots -\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h 3 +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h 3 + +There is one thing to be aware of when implementing \c setPieSlice(). The \c PieSlice +is a visual item, so it must be set as a child of the \c PieChart using +QDeclarativeItem::setParentItem() so that the \c PieChart knows to paint this child +item when its contents are drawn: -Like the \c Musician type, the \c Instrument type has to be registered -using qmlRegisterType() to be used from QML. As with \c Musician, we'll add the -type to the "Music" module, version 1.0: +\snippet declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.cpp 0 + + +Like the \c PieChart type, the \c PieSlice type has to be registered +using qmlRegisterType() to be used from QML. As with \c PieChart, we'll add the +type to the "Charts" module, version 1.0: \snippet declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp 0 \dots @@ -293,16 +354,66 @@ Try it out with the code in Qt's \c examples/tutorials/extending/chapter4-custom */ + /*! -\title Chapter 5: Writing an Extension Plugin +\title Chapter 5: Using List Property Types + +\example declarative/tutorials/extending/chapter5-listproperties + +Right now, a \c PieChart can only have one \c PieSlice. Ideally a chart would +have multiple slices, with different colors and sizes. To do this, we could +have a \c slices property that accepts a list of \c PieSlice items: + +\snippet declarative/tutorials/extending/chapter5-listproperties/app.qml 0 -\example declarative/tutorials/extending/chapter5-plugins +\image extending-tutorial-chapter5.png -Currently the \c Musician and \c Instrument types are used by \c app.qml, +To do this, we replace the \c pieSlice property in \c PieChart with a \c slices property, +declared as a QDeclarativeListProperty type. The QDeclarativeListProperty class enables the +creation of list properties in QML extensions. We replace the \c pieSlice() +function with a \c slices() function that returns a list of slices, and add +an internal \c append_slice() function (discussed below). We also use a QList to +store the internal list of slices as \c m_slices: + +\snippet declarative/tutorials/extending/chapter5-listproperties/piechart.h 0 +\dots +\snippet declarative/tutorials/extending/chapter5-listproperties/piechart.h 1 +\dots +\snippet declarative/tutorials/extending/chapter5-listproperties/piechart.h 2 + +Although the \c slices property does not have an associated \c WRITE function, +it is still modifiable because of the way QDeclarativeListProperty works. +In the \c PieChart implementation, we implement \c PieChart::slices() to +return a QDeclarativeListProperty value and indicate that the internal +\c PieChart::append_slice() function is to be called whenever a request is made from QML +to add items to the list: + +\snippet declarative/tutorials/extending/chapter5-listproperties/piechart.cpp 0 + +The \c append_slice() function simply sets the parent item as before, +and adds the new item to the \c m_slices list. As you can see, the append function for a +QDeclarativeListProperty is called with two arguments: the list property, and +the item that is to be appended. + +The \c PieSlice class has also been modified to include \c fromAngle and \c angleSpan +properties and to draw the slice according to these values. This is a straightforward +modification if you have read the previous pages in this tutorial, so the code is not shown here. + +The complete code can be seen in the updated \c examples/tutorials/extending/chapter5-listproperties directory. + +*/ + + +/*! +\title Chapter 6: Writing an Extension Plugin + +\example declarative/tutorials/extending/chapter6-plugins + +Currently the \c PieChart and \c PieSlice types are used by \c app.qml, which is displayed using a QDeclarativeView in a C++ application. An alternative way to use our QML extension is to create a plugin library to make it available -to the QML engine. This means we could load \c app.qml using the standard \c qml tool -(or some other QML runtime application) instead of writing a \c main.cpp file and +to the QML engine. This allows \c app.qml to be loaded with the \l {QML Viewer} +(or some other QML \l{Qt Declarative UI Runtime}{runtime} application) instead of writing a \c main.cpp file and loading our own C++ application. To create a plugin library, we need: @@ -313,45 +424,48 @@ To create a plugin library, we need: \o A "qmldir" file that tells the QML engine to load the plugin \endlist -First, we create a plugin class named \c MusicPlugin. It subclasses QDeclarativeExtensionPlugin +First, we create a plugin class named \c ChartsPlugin. It subclasses QDeclarativeExtensionPlugin and registers our QML types in the inherited \l{QDeclarativeExtensionPlugin::}{registerTypes()} method. It also calls Q_EXPORT_PLUGIN2 for Qt's \l{How to Create Qt Plugins}{plugin system}. -Here is the \c MusicPlugin definition in \c musicplugin.h: +Here is the \c ChartsPlugin definition in \c chartsplugin.h: -\snippet declarative/tutorials/extending/chapter5-plugins/musicplugin.h 0 +\snippet declarative/tutorials/extending/chapter6-plugins/chartsplugin.h 0 -And its implementation in \c musicplugin.cpp: +And its implementation in \c chartsplugin.cpp: -\snippet declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp 0 +\snippet declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp 0 Then, we write a \c .pro project file that defines the project as a plugin library and specifies with DESTDIR that library files should be built into a "lib" subdirectory: -\quotefile declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro +\quotefile declarative/tutorials/extending/chapter6-plugins/chapter6-plugins.pro Finally, we add a \c qmldir file that is automatically parsed by the QML engine. -Here, we specify that a plugin named "chapter5-plugin" (the name +Here, we specify that a plugin named "chapter6-plugin" (the name of the example project) can be found in the "lib" subdirectory: -\quotefile declarative/tutorials/extending/chapter5-plugins/qmldir +\quotefile declarative/tutorials/extending/chapter6-plugins/qmldir Now we have a plugin, and instead of having a main.cpp and an executable, we can build -the project and then run the QML file directly using the \c qml tool: +the project and then load the QML file in the \l {QML Viewer}: \code - qml app.qml + qmlviewer app.qml \endcode -Notice the "import Music 1.0" statement has disappeared from \c app.qml. This is +(On Mac OS X, you can launch the "QMLViewer" application instead.) + +Notice the "import Charts 1.0" statement has disappeared from \c app.qml. This is because the \c qmldir file is in the same directory as \c app.qml: this is equivalent to -having Musician.qml and Instrument.qml files inside the project directory, which could both +having PieChart.qml and PieSlice.qml files inside the project directory, which could both be used by \c app.qml without import statements. */ + /*! -\page qml-extending-tutorial6.html -\title Chapter 6: In Summary +\page qml-extending-tutorial7.html +\title Chapter 7: In Summary In this tutorial, we've shown the basic steps for creating a QML extension: @@ -360,47 +474,33 @@ In this tutorial, we've shown the basic steps for creating a QML extension: \o Add callable methods using Q_INVOKABLE or Qt slots, and connect to Qt signals with an \c onSignal syntax \o Add property bindings by defining \l{Qt's Property System}{NOTIFY} signals \o Define custom property types if the built-in types are not sufficient +\o Define list property types using QDeclarativeListProperty \o Create a plugin library by defining a Qt plugin and writing a \c qmldir file \endlist The \l {Extending QML in C++} reference documentation shows other useful features that can be added to -QML extensions. For example, we could use \l{Object and List Property Types}{list properties} to allow multiple instruments for a \c Musician: +QML extensions. For example, we could use \l{Default Property}{default properties} to allow +slices to be added without using the \c slices property: \code - Musician { - instruments: [ - Instrument { type: "Guitar" } - Instrument { type: "Drums" } - Instrument { type: "Keyboard" } - ] + PieChart { + PieSlice { ... } + PieSlice { ... } + PieSlice { ... } } \endcode -Or use \l{Default Property}{default properties} and avoid an -\c instruments property altogether: +Or randomly add and remove slices from time to time using \l{Property Value Sources}{property value sources}: \code - Musician { - Instrument { type: "Guitar" } - Instrument { type: "Drums" } - Instrument { type: "Keyboard" } - } -\endcode - -Or even change the \c instrument of a \c Musician from time to time using \l{Property Value Sources}{property value sources}: - -\code - Musician { - InstrumentRandomizer on instrument {} + PieChart { + PieSliceRandomizer on slices {} } \endcode See the \l{Extending QML in C++}{reference documentation} for more information. -Additionally, \l {Integrating QML with existing Qt UI code} shows how to create -and integrate with QML extensions that have drawing and graphical capabilities (through QGraphicsWidget). - */ diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index 2fd6fa8..3acfbdf 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -704,10 +704,6 @@ of some of the types. For the remaining types the default values are undefined. \row \o color \o #000000 (black) \endtable -If specified, the optional "default" attribute marks the new property as the -types default property, overriding any existing default property. Using the -default attribute twice in the same type block is an error. - The following example shows how to declare a new "innerColor" property that controls the color of the inner rectangle. @@ -725,6 +721,9 @@ controls the color of the inner rectangle. } \endcode + +\section3 Property signal handlers + Adding a property to an item automatically adds a \e{value-changed} signal handler to the item. The signal hander is named \c{on<Property_name>Changed}, with the first letter of the property @@ -743,6 +742,42 @@ example shows how to output to a text console a new value of property } \endcode + +\section3 Setting default properties + +The optional \c default attribute for a property marks it as the \e {default property} +for a type. This allows other items to specify the default property's value +as child elements. For example, the \l Item element's default property is its +\l{Item::children}{children} property. This allows the children of an \l Item +to be set like this: + +\qml +Item { + Rectangle {} + Rectangle {} +} +\endqml + +If the \l{Item::children}{children} property was not the default property for +\l Item, its value would have to be set like this instead: + +\qml +Item { + children: [ + Rectangle {} + Rectangle {} + ] +} +\endqml + +See the \l{declarative/ui-components/tabwidget}{TabWidget} example for a +demonstration of using default properties. + +Specifying a default property overrides any existing default property (for +example, any default property inherited from a parent item). Using the +default attribute twice in the same type block is an error. + + \target qml-property-aliases \section2 Property aliases diff --git a/doc/src/declarative/focus.qdoc b/doc/src/declarative/focus.qdoc index 661930f..e3ca963 100644 --- a/doc/src/declarative/focus.qdoc +++ b/doc/src/declarative/focus.qdoc @@ -87,7 +87,7 @@ Text { An \l Item requests focus by setting the \c {Item::focus} property to true. For very simple cases simply setting the \c {Item::focus} property is sometimes -sufficient. If we run the following example with the \l {Qt Declarative UI Runtime}{qml} tool, we see that +sufficient. If we run the following example with the \l {QML Viewer}, we see that the \c {keyHandler} element has \e {active focus} and pressing the 'A', 'B' or 'C' keys modifies the text appropriately. diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index 36570da..938222a 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -72,7 +72,7 @@ The second exception is explained in more detail in the section below on Namespa \section2 The Import Path Installed modules are searched for on the import path. -The \c -I option to the \l {Qt Declarative UI Runtime}{qml} runtime adds paths to the import path. +The \c -I option to the \l {QML Viewer} adds paths to the import path. From C++, the path is available via \l QDeclarativeEngine::importPathList() and can be prepended to using \l QDeclarativeEngine::addImportPath(). @@ -129,7 +129,7 @@ to the module. of the plugin binary, which is platform dependent; e.g. the library MyAppTypes would produce a libMyAppTypes.so on Linux and MyAppTypes.dll on Windows. By default the engine searches for the plugin library in the directory containing the \c qmldir -file. The \c -P option to the \l {Qt Declarative UI Runtime}{qml} runtime adds paths to the +file. The \c -P option to the \l {QML Viewer} adds paths to the plugin search path. From C++, the path is available via \l QDeclarativeEngine::pluginPathList() and can be prepended to using \l QDeclarativeEngine::addPluginPath(). diff --git a/doc/src/declarative/network.qdoc b/doc/src/declarative/network.qdoc index b0d19e2..60359de 100644 --- a/doc/src/declarative/network.qdoc +++ b/doc/src/declarative/network.qdoc @@ -54,7 +54,7 @@ Network transparency is supported throughout QML, for example: \o WebViews - the \c url property of WebView (obviously!) \endlist -Even QML types themselves can be on the network - if the \l {Qt Declarative UI Runtime}{qml} tool is used to load +Even QML types themselves can be on the network - if the \l {QML Viewer} is used to load \tt http://example.com/mystuff/Hello.qml and that content refers to a type "World", the engine will load \tt http://example.com/mystuff/qmldir and resolve the type just as it would for a local file. For example if the qmldir file contains the line "World World.qml", it will load @@ -119,7 +119,7 @@ All network access from QML is managed by a QNetworkAccessManager set on the QDe By default, this is an unmodified Qt QNetworkAccessManager. You may set a different manager by providing a QDeclarativeNetworkAccessManagerFactory and setting it via QDeclarativeEngine::setNetworkAccessManagerFactory(). -For example, the \l {Qt Declarative UI Runtime}{qml} tool sets a QDeclarativeNetworkAccessManagerFactory which +For example, the \l {QML Viewer} sets a QDeclarativeNetworkAccessManagerFactory which creates QNetworkAccessManager that trusts HTTP Expiry headers to avoid network cache checks, allows HTTP Pipelining, adds a persistent HTTP CookieJar, a simple disk cache, and supports proxy settings. diff --git a/doc/src/declarative/pics/extending-tutorial-chapter1.png b/doc/src/declarative/pics/extending-tutorial-chapter1.png new file mode 100644 index 0000000..9f5836b Binary files /dev/null and b/doc/src/declarative/pics/extending-tutorial-chapter1.png differ diff --git a/doc/src/declarative/pics/extending-tutorial-chapter2.png b/doc/src/declarative/pics/extending-tutorial-chapter2.png new file mode 100644 index 0000000..5c8f222 Binary files /dev/null and b/doc/src/declarative/pics/extending-tutorial-chapter2.png differ diff --git a/doc/src/declarative/pics/extending-tutorial-chapter3.png b/doc/src/declarative/pics/extending-tutorial-chapter3.png new file mode 100644 index 0000000..825553f Binary files /dev/null and b/doc/src/declarative/pics/extending-tutorial-chapter3.png differ diff --git a/doc/src/declarative/pics/extending-tutorial-chapter5.png b/doc/src/declarative/pics/extending-tutorial-chapter5.png new file mode 100644 index 0000000..0c2e69e Binary files /dev/null and b/doc/src/declarative/pics/extending-tutorial-chapter5.png differ diff --git a/doc/src/declarative/qdeclarativedebugging.qdoc b/doc/src/declarative/qdeclarativedebugging.qdoc index da6e407..ea21852 100644 --- a/doc/src/declarative/qdeclarativedebugging.qdoc +++ b/doc/src/declarative/qdeclarativedebugging.qdoc @@ -47,7 +47,7 @@ Rectangle { When a transition doesn't look quite right, it can be helpful to view it in slow motion to see what is happening more clearly. This functionality is supported -in the \l {Qt Declarative UI Runtime}{qmlviewer} tool: to enable this, +in the \l {QML Viewer} tool: to enable this, click on the "Debugging" menu, then "Slow Down Animations". @@ -64,7 +64,7 @@ import Qt 4.7 Rectangle { width: 100; height: 100 } \endqml -If you set \c {QML_IMPORT_TRACE=1} before running the \l {Qt Declarative UI Runtime}{qmlviewer} +If you set \c {QML_IMPORT_TRACE=1} before running the \l {QML Viewer} (or your QML C++ application), you will see output similar to this: \code @@ -85,11 +85,11 @@ show QML debugging information and options for your application, including object inspection, property monitoring and application frame-rate analysis. Creator can be used to debug both local and remote QML applications. To -enable remote debugging, start the \l {Qt Declarative UI Runtime}{qml} tool +enable remote debugging, start the \l {QML Viewer} on the remote device with a debugging port defined, like this: \code - QML_DEBUG_SERVER_PORT=3768 qml myqmlfile.qml + QML_DEBUG_SERVER_PORT=3768 qmlviewer myqmlfile.qml \endcode In Creator, open the project settings pane and set the server and port diff --git a/doc/src/declarative/qdeclarativei18n.qdoc b/doc/src/declarative/qdeclarativei18n.qdoc index 40f7919..b6e6c6e 100644 --- a/doc/src/declarative/qdeclarativei18n.qdoc +++ b/doc/src/declarative/qdeclarativei18n.qdoc @@ -49,7 +49,7 @@ capabilities are described more fully in: \o \l {Qt Linguist Manual} \endlist -You can test a translation with the \l {Qt Declarative UI Runtime}{qml} tool using the -translation option. +You can test a translation with the \l {QML Viewer} using the -translation option. \section1 Example @@ -61,8 +61,8 @@ hello.qml: import Qt 4.7 Rectangle { - width: 200; height: 200 - Text { text: qsTr("Hello"); anchors.centerIn: parent } + width: 200; height: 200 + Text { text: qsTr("Hello"); anchors.centerIn: parent } } \endqml @@ -76,7 +76,7 @@ a translation and create the release file \c hello.qm. Finally, we can test the translation: \code -qml -translation hello.qm hello.qml +qmlviewer -translation hello.qm hello.qml \endcode diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc index 9126a79..75055d8 100644 --- a/doc/src/declarative/qdeclarativeintro.qdoc +++ b/doc/src/declarative/qdeclarativeintro.qdoc @@ -129,7 +129,7 @@ Commenting in QML is similar to JavaScript. \o Multiline comments start with /* and finish with *\/ \endlist -\quotefile doc/src/snippets/declarative/comments.qml +\snippet doc/src/snippets/declarative/comments.qml 0 Comments are ignored by the engine. They are useful for explaining what you are doing; for referring back to at a later date, or for others reading @@ -314,7 +314,7 @@ Item { \section2 Signal Handlers -Signal handlers allow actions to be taken in reponse to an event. For instance, +Signal handlers allow actions to be taken in response to an event. For instance, the \l MouseArea element has signal handlers to handle mouse press, release and click: diff --git a/doc/src/declarative/qml-intro.qdoc b/doc/src/declarative/qml-intro.qdoc index a98d0f9..fbab001 100644 --- a/doc/src/declarative/qml-intro.qdoc +++ b/doc/src/declarative/qml-intro.qdoc @@ -105,9 +105,17 @@ This is a valid QML script. To run it, copy it and save it to a file, say myexample.qml, and on the command line run the command \code - qml myexample.qml + qmlviewer myexample.qml \endcode +On Mac OS X, open the "QMLViewer" application instead and open the +\c myexample.qml file, or run it from the command line: + + \code + QMLViewer.app/Contents/MacOS/QMLViewer myexample.qml + \endcode + + It will create a very boring rectangle in its own window. diff --git a/doc/src/declarative/qmlviewer.qdoc b/doc/src/declarative/qmlviewer.qdoc index efff9cc..5efc0ce 100644 --- a/doc/src/declarative/qmlviewer.qdoc +++ b/doc/src/declarative/qmlviewer.qdoc @@ -42,7 +42,7 @@ deployment of QML applications. In those cases, the QML runtime should be invoke from a Qt application instead; see \l {Qt Declarative UI Runtime} for more information. -The viewer is located at QTDIR/bin/qmlviewer. To load a \c .qml file +The viewer is located at \c QTDIR/bin/qmlviewer. To load a \c .qml file with the viewer, run the viewer and select the file to be opened, or provide the file path on the command line: @@ -50,7 +50,7 @@ file path on the command line: qmlviewer myqmlfile.qml \endcode -On Mac OS X, the QML Viewer application is named \c QMLViewer.app instead. You +On Mac OS X, the QML Viewer application is named "QMLViewer" instead. You can launch the viewer by opening the QMLViewer application from the Finder, or from the command line: diff --git a/doc/src/declarative/tutorial.qdoc b/doc/src/declarative/tutorial.qdoc index c884486..7a97eb1 100644 --- a/doc/src/declarative/tutorial.qdoc +++ b/doc/src/declarative/tutorial.qdoc @@ -101,11 +101,11 @@ The \c font.pointSize and \c font.bold properties are related to fonts and use t \section2 Viewing the example -To view what you have created, run the \l{Qt Declarative UI Runtime}{qml} tool (located in the \c bin directory) with your filename as the first argument. +To view what you have created, run the \l{QML Viewer} tool (located in the \c bin directory) with your filename as the first argument. For example, to run the provided completed Tutorial 1 example from the install location, you would type: \code -bin/qml $QTDIR/examples/declarative/tutorials/helloworld/tutorial1.qml +bin/qmlviewer $QTDIR/examples/declarative/tutorials/helloworld/tutorial1.qml \endcode */ diff --git a/examples/declarative/cppextensions/plugins/plugin.cpp b/examples/declarative/cppextensions/plugins/plugin.cpp index 355ca3f..01d5361 100644 --- a/examples/declarative/cppextensions/plugins/plugin.cpp +++ b/examples/declarative/cppextensions/plugins/plugin.cpp @@ -96,11 +96,13 @@ private: QBasicTimer timer; }; +//![0] class TimeModel : public QObject { Q_OBJECT Q_PROPERTY(int hour READ hour NOTIFY timeChanged) Q_PROPERTY(int minute READ minute NOTIFY timeChanged) +//![0] public: TimeModel(QObject *parent=0) : QObject(parent) @@ -135,6 +137,7 @@ private: int TimeModel::instances=0; MinuteTimer *TimeModel::timer=0; +//![plugin] class QExampleQmlPlugin : public QDeclarativeExtensionPlugin { Q_OBJECT @@ -145,7 +148,10 @@ public: qmlRegisterType<TimeModel>(uri, 1, 0, "Time"); } }; +//![plugin] #include "plugin.moc" +//![export] Q_EXPORT_PLUGIN2(qmlqtimeexampleplugin, QExampleQmlPlugin); +//![export] diff --git a/examples/declarative/cppextensions/plugins/plugins.qml b/examples/declarative/cppextensions/plugins/plugins.qml index 1832017..8d1085c 100644 --- a/examples/declarative/cppextensions/plugins/plugins.qml +++ b/examples/declarative/cppextensions/plugins/plugins.qml @@ -37,7 +37,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - +//![0] import com.nokia.TimeExample 1.0 // import types from the plugin Clock { // this class is defined in QML (com/nokia/TimeExample/Clock.qml) @@ -49,3 +49,4 @@ Clock { // this class is defined in QML (com/nokia/TimeExample/Clock.qml) hours: time.hour minutes: time.minute } +//![0] diff --git a/examples/declarative/tutorials/extending/chapter1-basics/app.qml b/examples/declarative/tutorials/extending/chapter1-basics/app.qml index 9af155c..ada088d 100644 --- a/examples/declarative/tutorials/extending/chapter1-basics/app.qml +++ b/examples/declarative/tutorials/extending/chapter1-basics/app.qml @@ -38,21 +38,23 @@ ** ****************************************************************************/ //![0] -import Music 1.0 +import Charts 1.0 import Qt 4.7 -Rectangle { +Item { width: 300; height: 200 - Musician { - id: aMusician - name: "Reddy the Rocker" - instrument: "Guitar" + PieChart { + id: aPieChart + anchors.centerIn: parent + width: 100; height: 100 + name: "A simple pie chart" + color: "red" } Text { - anchors.fill: parent - text: aMusician.name + " plays the " + aMusician.instrument + anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 } + text: aPieChart.name } } //![0] diff --git a/examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro b/examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro index bd05ebe..0f04167 100644 --- a/examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro +++ b/examples/declarative/tutorials/extending/chapter1-basics/chapter1-basics.pro @@ -1,5 +1,5 @@ QT += declarative -HEADERS += musician.h -SOURCES += musician.cpp \ +HEADERS += piechart.h +SOURCES += piechart.cpp \ main.cpp diff --git a/examples/declarative/tutorials/extending/chapter1-basics/main.cpp b/examples/declarative/tutorials/extending/chapter1-basics/main.cpp index 8ef6965..a5dbab3 100644 --- a/examples/declarative/tutorials/extending/chapter1-basics/main.cpp +++ b/examples/declarative/tutorials/extending/chapter1-basics/main.cpp @@ -38,7 +38,7 @@ ** ****************************************************************************/ //![0] -#include "musician.h" +#include "piechart.h" #include <qdeclarative.h> #include <QDeclarativeView> #include <QApplication> @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - qmlRegisterType<Musician>("Music", 1, 0, "Musician"); + qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); QDeclarativeView view; view.setSource(QUrl::fromLocalFile("app.qml")); diff --git a/examples/declarative/tutorials/extending/chapter1-basics/musician.cpp b/examples/declarative/tutorials/extending/chapter1-basics/musician.cpp deleted file mode 100644 index 6c42f31..0000000 --- a/examples/declarative/tutorials/extending/chapter1-basics/musician.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "musician.h" - -Musician::Musician(QObject *parent) - : QObject(parent) -{ -} - -QString Musician::name() const -{ - return m_name; -} - -void Musician::setName(const QString &name) -{ - m_name = name; -} - -QString Musician::instrument() const -{ - return m_instrument; -} - -void Musician::setInstrument(const QString &instrument) -{ - m_instrument = instrument; -} - diff --git a/examples/declarative/tutorials/extending/chapter1-basics/musician.h b/examples/declarative/tutorials/extending/chapter1-basics/musician.h deleted file mode 100644 index f9a0537..0000000 --- a/examples/declarative/tutorials/extending/chapter1-basics/musician.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef MUSICIAN_H -#define MUSICIAN_H - -//![0] -#include <QObject> - -class Musician : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName) - Q_PROPERTY(QString instrument READ instrument WRITE setInstrument) - -public: - Musician(QObject *parent = 0); - - QString name() const; - void setName(const QString &name); - - QString instrument() const; - void setInstrument(const QString &instrument); - -private: - QString m_name; - QString m_instrument; -}; -//![0] - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter2-methods/app.qml b/examples/declarative/tutorials/extending/chapter2-methods/app.qml index 02d33c2..0b55f7c 100644 --- a/examples/declarative/tutorials/extending/chapter2-methods/app.qml +++ b/examples/declarative/tutorials/extending/chapter2-methods/app.qml @@ -38,23 +38,29 @@ ** ****************************************************************************/ //![0] -import Music 1.0 +import Charts 1.0 import Qt 4.7 -Rectangle { - width: 200; height: 200 +Item { + width: 300; height: 200 - Musician { - id: aMusician - name: "Reddy the Rocker" - instrument: "Guitar" + PieChart { + id: aPieChart + anchors.centerIn: parent + width: 100; height: 100 + color: "red" - onPerformanceEnded: console.log("The performance has now ended") + onChartCleared: console.log("The chart has been cleared") } MouseArea { anchors.fill: parent - onClicked: aMusician.perform() + onClicked: aPieChart.clearChart() + } + + Text { + anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 } + text: "Click anywhere to clear the chart" } } //![0] diff --git a/examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro b/examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro index bd05ebe..0f04167 100644 --- a/examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro +++ b/examples/declarative/tutorials/extending/chapter2-methods/chapter2-methods.pro @@ -1,5 +1,5 @@ QT += declarative -HEADERS += musician.h -SOURCES += musician.cpp \ +HEADERS += piechart.h +SOURCES += piechart.cpp \ main.cpp diff --git a/examples/declarative/tutorials/extending/chapter2-methods/main.cpp b/examples/declarative/tutorials/extending/chapter2-methods/main.cpp index 8ef6965..a5dbab3 100644 --- a/examples/declarative/tutorials/extending/chapter2-methods/main.cpp +++ b/examples/declarative/tutorials/extending/chapter2-methods/main.cpp @@ -38,7 +38,7 @@ ** ****************************************************************************/ //![0] -#include "musician.h" +#include "piechart.h" #include <qdeclarative.h> #include <QDeclarativeView> #include <QApplication> @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - qmlRegisterType<Musician>("Music", 1, 0, "Musician"); + qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); QDeclarativeView view; view.setSource(QUrl::fromLocalFile("app.qml")); diff --git a/examples/declarative/tutorials/extending/chapter2-methods/musician.cpp b/examples/declarative/tutorials/extending/chapter2-methods/musician.cpp deleted file mode 100644 index 0ce0022..0000000 --- a/examples/declarative/tutorials/extending/chapter2-methods/musician.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "musician.h" -#include <QDebug> - -Musician::Musician(QObject *parent) - : QObject(parent) -{ -} - -QString Musician::name() const -{ - return m_name; -} - -void Musician::setName(const QString &name) -{ - m_name = name; -} - -QString Musician::instrument() const -{ - return m_instrument; -} - -void Musician::setInstrument(const QString &instrument) -{ - m_instrument = instrument; -} - -//![0] -void Musician::perform() -{ - qWarning() << m_name << "is playing the" << m_instrument; - emit performanceEnded(); -} -//![0] diff --git a/examples/declarative/tutorials/extending/chapter2-methods/musician.h b/examples/declarative/tutorials/extending/chapter2-methods/musician.h deleted file mode 100644 index 86849ba..0000000 --- a/examples/declarative/tutorials/extending/chapter2-methods/musician.h +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef MUSICIAN_H -#define MUSICIAN_H - -#include <QObject> - -//![0] -class Musician : public QObject -{ -//![0] - Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName) - Q_PROPERTY(QString instrument READ instrument WRITE setInstrument) - -//![1] -public: -//![1] - - Musician(QObject *parent = 0); - - QString name() const; - void setName(const QString &name); - - QString instrument() const; - void setInstrument(const QString &instrument); - -//![2] - Q_INVOKABLE void perform(); - -signals: - void performanceEnded(); -//![2] - -private: - QString m_name; - QString m_instrument; - -//![3] -}; -//![3] - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/app.qml b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml index 8bf6ecf..2ff6ae1 100644 --- a/examples/declarative/tutorials/extending/chapter3-bindings/app.qml +++ b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml @@ -38,35 +38,37 @@ ** ****************************************************************************/ //![0] -import Music 1.0 +import Charts 1.0 import Qt 4.7 -Rectangle { - width: 200; height: 200 +Item { + width: 300; height: 200 - Musician { - id: reddy - name: "Reddy the Rocker" - instrument: "Guitar" - } + Row { + anchors.centerIn: parent + spacing: 20 + + PieChart { + id: chartA + width: 100; height: 100 + color: "red" + } - Musician { - id: craig - name: "Craig the Copycat" - instrument: reddy.instrument + PieChart { + id: chartB + width: 100; height: 100 + color: chartA.color + } } MouseArea { anchors.fill: parent - onClicked: { - reddy.perform() - craig.perform() - - reddy.instrument = "Drums" + onClicked: { chartA.color = "blue" } + } - reddy.perform() - craig.perform() - } + Text { + anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 } + text: "Click anywhere to change the chart color" } } //![0] diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro b/examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro index bd05ebe..0f04167 100644 --- a/examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro +++ b/examples/declarative/tutorials/extending/chapter3-bindings/chapter3-bindings.pro @@ -1,5 +1,5 @@ QT += declarative -HEADERS += musician.h -SOURCES += musician.cpp \ +HEADERS += piechart.h +SOURCES += piechart.cpp \ main.cpp diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/main.cpp b/examples/declarative/tutorials/extending/chapter3-bindings/main.cpp index 8ef6965..a5dbab3 100644 --- a/examples/declarative/tutorials/extending/chapter3-bindings/main.cpp +++ b/examples/declarative/tutorials/extending/chapter3-bindings/main.cpp @@ -38,7 +38,7 @@ ** ****************************************************************************/ //![0] -#include "musician.h" +#include "piechart.h" #include <qdeclarative.h> #include <QDeclarativeView> #include <QApplication> @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - qmlRegisterType<Musician>("Music", 1, 0, "Musician"); + qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); QDeclarativeView view; view.setSource(QUrl::fromLocalFile("app.qml")); diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp b/examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp deleted file mode 100644 index 5f9ead4..0000000 --- a/examples/declarative/tutorials/extending/chapter3-bindings/musician.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "musician.h" -#include <QDebug> - -Musician::Musician(QObject *parent) - : QObject(parent) -{ -} - -QString Musician::name() const -{ - return m_name; -} - -void Musician::setName(const QString &name) -{ - m_name = name; -} - -QString Musician::instrument() const -{ - return m_instrument; -} - -//![0] -void Musician::setInstrument(const QString &instrument) -{ - if (instrument != m_instrument) { - m_instrument = instrument; - emit instrumentChanged(); - } -} -//![0] - -void Musician::perform() -{ - qWarning() << m_name << "is playing the" << m_instrument; -} diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/musician.h b/examples/declarative/tutorials/extending/chapter3-bindings/musician.h deleted file mode 100644 index 0b0addb..0000000 --- a/examples/declarative/tutorials/extending/chapter3-bindings/musician.h +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef MUSICIAN_H -#define MUSICIAN_H - -#include <QObject> - -//![0] -class Musician : public QObject -{ -//![0] - Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName) - Q_PROPERTY(QString instrument READ instrument WRITE setInstrument) - -//![1] - Q_PROPERTY(QString instrument READ instrument WRITE setInstrument NOTIFY instrumentChanged) -public: -//![1] - - Musician(QObject *parent = 0); - - QString name() const; - void setName(const QString &name); - - QString instrument() const; - void setInstrument(const QString &instrument); - - Q_INVOKABLE void perform(); - -//![2] -signals: - void instrumentChanged(); -//![2] - -private: - QString m_name; - QString m_instrument; - -//![3] -}; -//![3] - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml index d76f801..fcd3806 100644 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml @@ -38,17 +38,23 @@ ** ****************************************************************************/ //![0] -import Music 1.0 +import Charts 1.0 import Qt 4.7 Item { + width: 300; height: 200 - Musician { - id: reddy - name: "Reddy the Rocker" - instrument: Instrument { type: "Guitar" } + PieChart { + id: chart + anchors.centerIn: parent + width: 100; height: 100 + + pieSlice: PieSlice { + anchors.fill: parent + color: "red" + } } - Component.onCompleted: console.log("Reddy plays the " + reddy.instrument.type) + Component.onCompleted: console.log("The pie is colored " + chart.pieSlice.color) } //![0] diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro index aea07a0..c3f5402 100644 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.pro @@ -1,7 +1,7 @@ QT += declarative -HEADERS += musician.h \ - instrument.h -SOURCES += musician.cpp \ - instrument.cpp \ +HEADERS += piechart.h \ + pieslice.h +SOURCES += piechart.cpp \ + pieslice.cpp \ main.cpp diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp deleted file mode 100644 index 9ca96f6..0000000 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "instrument.h" - -Instrument::Instrument(QObject *parent) - : QObject(parent) -{ -} - -QString Instrument::type() const -{ - return m_type; -} - -void Instrument::setType(const QString &type) -{ - m_type = type; -} - diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h deleted file mode 100644 index 9971207..0000000 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/instrument.h +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef INSTRUMENT_H -#define INSTRUMENT_H - -#include <QObject> - -//![0] -class Instrument : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString type READ type WRITE setType) - -public: - Instrument(QObject *parent = 0); - - QString type() const; - void setType(const QString &type); - -private: - QString m_type; -}; -//![0] - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp index d94cb03..fd518a2 100644 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/main.cpp @@ -37,8 +37,8 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#include "musician.h" -#include "instrument.h" +#include "piechart.h" +#include "pieslice.h" #include <qdeclarative.h> #include <QDeclarativeView> @@ -50,10 +50,10 @@ int main(int argc, char *argv[]) //![0] QApplication app(argc, argv); - qmlRegisterType<Musician>("Music", 1, 0, "Musician"); + qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); //![1] - qmlRegisterType<Instrument>("Music", 1, 0, "Instrument"); + qmlRegisterType<PieSlice>("Charts", 1, 0, "PieSlice"); //![1] QDeclarativeView view; diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp deleted file mode 100644 index e62efb1..0000000 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "musician.h" -#include "instrument.h" - -Musician::Musician(QObject *parent) - : QObject(parent) -{ -} - -QString Musician::name() const -{ - return m_name; -} - -void Musician::setName(const QString &name) -{ - m_name = name; -} - -Instrument *Musician::instrument() const -{ - return m_instrument; -} - -void Musician::setInstrument(Instrument *instrument) -{ - m_instrument = instrument; -} - diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h deleted file mode 100644 index 8f67f61..0000000 --- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/musician.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef MUSICIAN_H -#define MUSICIAN_H - -#include <QObject> - -class Instrument; - -//![0] -class Musician : public QObject -{ - Q_OBJECT - Q_PROPERTY(Instrument* instrument READ instrument WRITE setInstrument) -//![0] - Q_PROPERTY(QString name READ name WRITE setName) - -//![1] -public: -//![1] - - Musician(QObject *parent = 0); - - QString name() const; - void setName(const QString &name); - -//![2] - Instrument *instrument() const; - void setInstrument(Instrument *instrument); -//![2] - -private: - QString m_name; - Instrument *m_instrument; - -//![3] -}; -//![3] - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/app.qml b/examples/declarative/tutorials/extending/chapter5-plugins/app.qml deleted file mode 100644 index 9c050b8..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/app.qml +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import Qt 4.7 - -Item { - - Musician { - id: reddy - name: "Reddy the Rocker" - instrument: Instrument { type: "Guitar" } - } - - Component.onCompleted: console.log("Reddy plays the " + reddy.instrument.type) -} - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro b/examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro deleted file mode 100644 index 483da8f..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/chapter5-plugins.pro +++ /dev/null @@ -1,20 +0,0 @@ -TEMPLATE = lib -CONFIG += qt plugin -QT += declarative - -DESTDIR = lib -OBJECTS_DIR = tmp -MOC_DIR = tmp - -HEADERS += musician.h \ - instrument.h \ - musicplugin.h - -SOURCES += musician.cpp \ - instrument.cpp \ - musicplugin.cpp - -symbian { - include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) - TARGET.EPOCALLOWDLLDATA = 1 -} diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp b/examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp deleted file mode 100644 index 9ca96f6..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/instrument.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "instrument.h" - -Instrument::Instrument(QObject *parent) - : QObject(parent) -{ -} - -QString Instrument::type() const -{ - return m_type; -} - -void Instrument::setType(const QString &type) -{ - m_type = type; -} - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/instrument.h b/examples/declarative/tutorials/extending/chapter5-plugins/instrument.h deleted file mode 100644 index ce1e7ce..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/instrument.h +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef INSTRUMENT_H -#define INSTRUMENT_H - -#include <QObject> - -class Instrument : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString type READ type WRITE setType) - -public: - Instrument(QObject *parent = 0); - - QString type() const; - void setType(const QString &type); - -private: - QString m_type; -}; - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp b/examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp deleted file mode 100644 index e62efb1..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/musician.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "musician.h" -#include "instrument.h" - -Musician::Musician(QObject *parent) - : QObject(parent) -{ -} - -QString Musician::name() const -{ - return m_name; -} - -void Musician::setName(const QString &name) -{ - m_name = name; -} - -Instrument *Musician::instrument() const -{ - return m_instrument; -} - -void Musician::setInstrument(Instrument *instrument) -{ - m_instrument = instrument; -} - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musician.h b/examples/declarative/tutorials/extending/chapter5-plugins/musician.h deleted file mode 100644 index b920631..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/musician.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef MUSICIAN_H -#define MUSICIAN_H - -#include <QObject> - -class Instrument; - -class Musician : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName) - Q_PROPERTY(Instrument* instrument READ instrument WRITE setInstrument) - -public: - Musician(QObject *parent = 0); - - QString name() const; - void setName(const QString &name); - - Instrument *instrument() const; - void setInstrument(Instrument *instrument); - -private: - QString m_name; - Instrument *m_instrument; -}; - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp b/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp deleted file mode 100644 index 76acf01..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "musicplugin.h" -//![0] -#include "musician.h" -#include "instrument.h" -#include <QtDeclarative/qdeclarative.h> - -void MusicPlugin::registerTypes(const char *uri) -{ - qmlRegisterType<Musician>(uri, 1, 0, "Musician"); - qmlRegisterType<Instrument>(uri, 1, 0, "Instrument"); -} - -Q_EXPORT_PLUGIN2(musicplugin, MusicPlugin); -//![0] - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h b/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h deleted file mode 100644 index d6a5392..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/musicplugin.h +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef MUSICPLUGIN_H -#define MUSICPLUGIN_H - -//![0] -#include <QtDeclarative/QDeclarativeExtensionPlugin> - -class MusicPlugin : public QDeclarativeExtensionPlugin -{ - Q_OBJECT -public: - void registerTypes(const char *uri); -}; -//![0] - -#endif - diff --git a/examples/declarative/tutorials/extending/chapter5-plugins/qmldir b/examples/declarative/tutorials/extending/chapter5-plugins/qmldir deleted file mode 100644 index c3afd6b..0000000 --- a/examples/declarative/tutorials/extending/chapter5-plugins/qmldir +++ /dev/null @@ -1 +0,0 @@ -plugin chapter5-plugins lib diff --git a/examples/declarative/tutorials/extending/extending.pro b/examples/declarative/tutorials/extending/extending.pro index 0c86fed..967473f 100644 --- a/examples/declarative/tutorials/extending/extending.pro +++ b/examples/declarative/tutorials/extending/extending.pro @@ -5,5 +5,6 @@ SUBDIRS += \ chapter2-methods \ chapter3-bindings \ chapter4-customPropertyTypes \ - chapter5-plugins + chapter5-listproperties \ + chapter6-plugins diff --git a/examples/declarative/tutorials/samegame/samegame1/samegame.qml b/examples/declarative/tutorials/samegame/samegame1/samegame.qml index 68f8712..80567ef 100644 --- a/examples/declarative/tutorials/samegame/samegame1/samegame.qml +++ b/examples/declarative/tutorials/samegame/samegame1/samegame.qml @@ -55,7 +55,7 @@ Rectangle { Image { id: background anchors.fill: parent - source: "../shared/pics/background.jpg" + source: "../shared/pics/background.png" fillMode: Image.PreserveAspectCrop } } diff --git a/examples/declarative/ui-components/tabwidget/TabWidget.qml b/examples/declarative/ui-components/tabwidget/TabWidget.qml index 9642e04..ce57213 100644 --- a/examples/declarative/ui-components/tabwidget/TabWidget.qml +++ b/examples/declarative/ui-components/tabwidget/TabWidget.qml @@ -43,9 +43,14 @@ import Qt 4.7 Item { id: tabWidget - property int current: 0 + // Setting the default property to stack.children means any child items + // of the TabWidget are actually added to the 'stack' item's children. + // See the "Extending Types from QML" documentation for details on default + // properties. default property alias content: stack.children + property int current: 0 + onCurrentChanged: setOpacities() Component.onCompleted: setOpacities() diff --git a/src/declarative/debugger/qdeclarativedebugtrace.cpp b/src/declarative/debugger/qdeclarativedebugtrace.cpp index 5e6d5e7..b2b0c8a 100644 --- a/src/declarative/debugger/qdeclarativedebugtrace.cpp +++ b/src/declarative/debugger/qdeclarativedebugtrace.cpp @@ -78,6 +78,9 @@ void QDeclarativeDebugTrace::endRange(RangeType t) void QDeclarativeDebugTrace::addEventImpl(EventType event) { + if (!isEnabled()) + return; + QByteArray data; QDataStream ds(&data, QIODevice::WriteOnly); ds << m_timer.elapsed() << (int)Event << (int)event; @@ -86,6 +89,9 @@ void QDeclarativeDebugTrace::addEventImpl(EventType event) void QDeclarativeDebugTrace::startRangeImpl(RangeType range) { + if (!isEnabled()) + return; + QByteArray data; QDataStream ds(&data, QIODevice::WriteOnly); ds << m_timer.elapsed() << (int)RangeStart << (int)range; @@ -94,6 +100,9 @@ void QDeclarativeDebugTrace::startRangeImpl(RangeType range) void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QUrl &u) { + if (!isEnabled()) + return; + QByteArray data; QDataStream ds(&data, QIODevice::WriteOnly); ds << m_timer.elapsed() << (int)RangeData << (int)range << (QString)u.toString(); @@ -102,6 +111,9 @@ void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QUrl &u) void QDeclarativeDebugTrace::endRangeImpl(RangeType range) { + if (!isEnabled()) + return; + QByteArray data; QDataStream ds(&data, QIODevice::WriteOnly); ds << m_timer.elapsed() << (int)RangeEnd << (int)range; diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 805e623..b286e11 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1342,7 +1342,7 @@ bool QDeclarativeFlickable::isFlickingVertically() const This property holds the time to delay (ms) delivering a press to children of the Flickable. This can be useful where reacting - to a press before a flicking action has undesireable effects. + to a press before a flicking action has undesirable effects. If the flickable is dragged/flicked before the delay times out the press event will not be delivered. If the button is released diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 14a4f08..89b3958 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1293,9 +1293,15 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate) \qmlproperty int GridView::currentIndex \qmlproperty Item GridView::currentItem - \c currentIndex holds the index of the current item. - \c currentItem is the current item. Note that the position of the current item - may only be approximate until it becomes visible in the view. + The \c currentIndex property holds the index of the current item, and + \c currentItem holds the current item. + + If highlightFollowsCurrentItem is \c true, setting either of these + properties will smoothly scroll the GridView so that the current + item becomes visible. + + Note that the position of the current item + may only be approximate until it becomes visible in the view. */ int QDeclarativeGridView::currentIndex() const { @@ -1385,7 +1391,7 @@ void QDeclarativeGridView::setHighlight(QDeclarativeComponent *highlight) \qmlproperty bool GridView::highlightFollowsCurrentItem This property sets whether the highlight is managed by the view. - If this property is true, the highlight is moved smoothly + If this property is true (the default value), the highlight is moved smoothly to follow the current item. Otherwise, the highlight is not moved by the view, and any movement must be implemented by the highlight. @@ -1568,6 +1574,8 @@ void QDeclarativeGridView::setFlow(Flow flow) If this is true, key navigation that would move the current item selection past one end of the view instead wraps around and moves the selection to the other end of the view. + + By default, key navigation is not wrapped. */ bool QDeclarativeGridView::isWrapEnabled() const { diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 5146070..37736cc 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -65,18 +65,20 @@ QT_BEGIN_NAMESPACE Image { source: "qtlogo.png" } \endqml \endtable - - If a size is not specified explicitly, the Image element is sized to the loaded image. - Image elements can be stretched and tiled using the \l fillMode property. - If the image \l source is a network resource, the image is loaded asynchronous and the - \l progress and \l status properties are updated appropriately. Otherwise, if the image is - available locally, it is loaded immediately and the user interface is blocked until loading is - complete. (This is typically the correct behavior for user interface elements.) - For large local images, which do not need to be visible immediately, it may be preferable to - enable \l asynchronous loading. This loads the image in the background using a low priority thread. + If the \l {Item::width}{width} and \l{Item::height}{height} properties are not specified, + the Image element is automatically sized to the loaded image. Image elements can be + stretched and tiled using the \l fillMode property. + + By default, locally available images are loaded immediately, and the user interface + is blocked until loading is complete. If a large image is to be loaded, it may be + preferable to load the image in a low priority thread, by enabling the \l asynchronous + property. - Images are cached and shared internally, so if several Image elements have the same source + If the image is from a network rather than a local resource, it is automatically loaded + asynchronously, and the \l progress and \l status properties are updated as appropriate. + + Images are cached and shared internally, so if several Image elements have the same \l source, only one copy of the image will be loaded. \bold Note: Images are often the greatest user of memory in QML user interfaces. It is recommended @@ -84,7 +86,7 @@ QT_BEGIN_NAMESPACE size bounded via the \l sourceSize property. This is especially important for content that is loaded from external sources or provided by the user. - \sa {declarative/imageelements/image}{Image example} + \sa {declarative/imageelements/image}{Image example}, QDeclarativeImageProvider */ /*! @@ -415,7 +417,7 @@ void QDeclarativeImage::geometryChanged(const QRectF &newGeometry, const QRectF asynchronously in a separate thread. The default value is false, causing the user interface thread to block while the image is loaded. Setting \a asynchronous to true is useful where - maintaining a responsive user interface is more desireable + maintaining a responsive user interface is more desirable than having images immediately visible. Note that this property is only valid for images read from the diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 23735f2..83f9b20 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1582,7 +1582,7 @@ QDeclarativeItem *QDeclarativeItem::parentItem() const Returns true if construction of the QML component is complete; otherwise returns false. - It is often desireable to delay some processing until the component is + It is often desirable to delay some processing until the component is completed. \sa componentComplete() @@ -1590,7 +1590,7 @@ QDeclarativeItem *QDeclarativeItem::parentItem() const bool QDeclarativeItem::isComponentComplete() const { Q_D(const QDeclarativeItem); - return d->_componentComplete; + return d->componentComplete; } void QDeclarativeItemPrivate::data_append(QDeclarativeListProperty<QObject> *prop, QObject *o) @@ -1731,7 +1731,7 @@ QRectF QDeclarativeItem::childrenRect() Q_D(QDeclarativeItem); if (!d->_contents) { d->_contents = new QDeclarativeContents(this); - if (d->_componentComplete) + if (d->componentComplete) d->_contents->complete(); } return d->_contents->rectF(); @@ -2131,19 +2131,19 @@ QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline() const qreal QDeclarativeItem::baselineOffset() const { Q_D(const QDeclarativeItem); - if (!d->_baselineOffset.isValid()) { + if (!d->baselineOffset.isValid()) { return 0.0; } else - return d->_baselineOffset; + return d->baselineOffset; } void QDeclarativeItem::setBaselineOffset(qreal offset) { Q_D(QDeclarativeItem); - if (offset == d->_baselineOffset) + if (offset == d->baselineOffset) return; - d->_baselineOffset = offset; + d->baselineOffset = offset; for(int ii = 0; ii < d->changeListeners.count(); ++ii) { const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii); @@ -2276,7 +2276,7 @@ void QDeclarativeItem::setBaselineOffset(qreal offset) bool QDeclarativeItem::keepMouseGrab() const { Q_D(const QDeclarativeItem); - return d->_keepMouse; + return d->keepMouse; } /*! @@ -2300,7 +2300,7 @@ bool QDeclarativeItem::keepMouseGrab() const void QDeclarativeItem::setKeepMouseGrab(bool keep) { Q_D(QDeclarativeItem); - d->_keepMouse = keep; + d->keepMouse = keep; } /*! @@ -2574,7 +2574,7 @@ QDeclarativeListProperty<QGraphicsTransform> QDeclarativeItem::transform() void QDeclarativeItem::classBegin() { Q_D(QDeclarativeItem); - d->_componentComplete = false; + d->componentComplete = false; if (d->_stateGroup) d->_stateGroup->classBegin(); if (d->_anchors) @@ -2585,14 +2585,14 @@ void QDeclarativeItem::classBegin() \internal componentComplete() is called when all items in the component - have been constructed. It is often desireable to delay some + have been constructed. It is often desirable to delay some processing until the component is complete an all bindings in the component have been resolved. */ void QDeclarativeItem::componentComplete() { Q_D(QDeclarativeItem); - d->_componentComplete = true; + d->componentComplete = true; if (d->_stateGroup) d->_stateGroup->componentComplete(); if (d->_anchors) { @@ -2610,7 +2610,7 @@ QDeclarativeStateGroup *QDeclarativeItemPrivate::_states() Q_Q(QDeclarativeItem); if (!_stateGroup) { _stateGroup = new QDeclarativeStateGroup; - if (!_componentComplete) + if (!componentComplete) _stateGroup->classBegin(); QObject::connect(_stateGroup, SIGNAL(stateChanged(QString)), q, SIGNAL(stateChanged(QString))); @@ -2694,7 +2694,7 @@ bool QDeclarativeItem::sceneEvent(QEvent *event) } /*! - \reimp + \internal Note that unlike QGraphicsItems, QDeclarativeItem::itemChange() is \e not called during initial widget polishing. Items wishing to optimize start-up construction @@ -2858,7 +2858,7 @@ void QDeclarativeItem::setSmooth(bool smooth) */ /*! - \property QDeclarativeItem::wantsFocus + \property QDeclarativeItem::activeFocus \internal */ diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index 84b0f51..8c3e084 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -120,11 +120,11 @@ class Q_DECLARATIVE_EXPORT QDeclarativeItemPrivate : public QGraphicsItemPrivate public: QDeclarativeItemPrivate() : _anchors(0), _contents(0), - _baselineOffset(0), + baselineOffset(0), _anchorLines(0), _stateGroup(0), origin(QDeclarativeItem::Center), widthValid(false), heightValid(false), - _componentComplete(true), _keepMouse(false), + componentComplete(true), keepMouse(false), smooth(false), transformOriginDirty(true), doneEventPreHandler(false), keyHandler(0), mWidth(0), mHeight(0), implicitWidth(0), implicitHeight(0) { @@ -144,12 +144,10 @@ public: QDeclarative_setParent_noEvent(q, parent); q->setParentItem(parent); } - _baselineOffset.invalidate(); + baselineOffset.invalidate(); mouseSetsFocus = false; } - QString _id; - // Private Properties qreal width() const; void setWidth(qreal); @@ -203,7 +201,7 @@ public: if (!_anchors) { Q_Q(QDeclarativeItem); _anchors = new QDeclarativeAnchors(q); - if (!_componentComplete) + if (!componentComplete) _anchors->classBegin(); } return _anchors; @@ -211,7 +209,7 @@ public: QDeclarativeAnchors *_anchors; QDeclarativeContents *_contents; - QDeclarativeNullableValue<qreal> _baselineOffset; + QDeclarativeNullableValue<qreal> baselineOffset; struct AnchorLines { AnchorLines(QGraphicsObject *); @@ -260,8 +258,8 @@ public: QDeclarativeItem::TransformOrigin origin:4; bool widthValid:1; bool heightValid:1; - bool _componentComplete:1; - bool _keepMouse:1; + bool componentComplete:1; + bool keepMouse:1; bool smooth:1; bool transformOriginDirty : 1; bool doneEventPreHandler : 1; diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp index b198077..5d623dc 100644 --- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp @@ -95,7 +95,8 @@ static QDeclarativePrivate::AutoParentResult qgraphicsobject_autoParent(QObject void QDeclarativeItemModule::defineModule() { - QDeclarativePrivate::registerAutoParentFunction(qgraphicsobject_autoParent); + QDeclarativePrivate::RegisterAutoParent autoparent = { 0, &qgraphicsobject_autoParent }; + QDeclarativePrivate::qmlregister(QDeclarativePrivate::AutoParentRegistration, &autoparent); #ifdef QT_NO_MOVIE qmlRegisterTypeNotAvailable("Qt",4,7,"AnimatedImage", diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 6d127b5..8b616ce 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1632,8 +1632,14 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate) \qmlproperty int ListView::currentIndex \qmlproperty Item ListView::currentItem - \c currentIndex holds the index of the current item. - \c currentItem is the current item. Note that the position of the current item + The \c currentIndex property holds the index of the current item, and + \c currentItem holds the current item. + + If highlightFollowsCurrentItem is \c true, setting either of these + properties will smoothly scroll the ListView so that the current + item becomes visible. + + Note that the position of the current item may only be approximate until it becomes visible in the view. */ int QDeclarativeListView::currentIndex() const @@ -1727,12 +1733,12 @@ void QDeclarativeListView::setHighlight(QDeclarativeComponent *highlight) \qmlproperty bool ListView::highlightFollowsCurrentItem This property holds whether the highlight is managed by the view. - If this property is true, the highlight is moved smoothly + If this property is true (the default value), the highlight is moved smoothly to follow the current item. Otherwise, the highlight is not moved by the view, and any movement must be implemented by the highlight. - Here is a highlight with its motion defined by a \l {SpringAniamtion} item: + Here is a highlight with its motion defined by a \l {SpringAnimation} item: \snippet doc/src/snippets/declarative/listview/listview.qml highlightFollowsCurrentItem @@ -1848,6 +1854,8 @@ void QDeclarativeListView::setHighlightRangeMode(HighlightRangeMode mode) \qmlproperty real ListView::spacing This property holds the spacing between items. + + The default value is 0. */ qreal QDeclarativeListView::spacing() const { @@ -1914,11 +1922,13 @@ void QDeclarativeListView::setOrientation(QDeclarativeListView::Orientation orie /*! \qmlproperty bool ListView::keyNavigationWraps - This property holds whether the list wraps key navigation. + This property holds whether the list wraps key navigation. If this is true, key navigation that would move the current item selection past the end of the list instead wraps around and moves the selection to the start of the list, and vice-versa. + + By default, key navigation is not wrapped. */ bool QDeclarativeListView::isWrapEnabled() const { diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp index e745ca6..cc7f8e5 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader.cpp +++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp @@ -118,9 +118,9 @@ void QDeclarativeLoaderPrivate::initResize() be instantiated may be specified directly by the \l sourceComponent property, or loaded from a URL via the \l source property. - Loader can be used to delay the creation of a component until it is required. - For example, this loads "Page1.qml" as a component into the Loader element - when the \l MouseArea is clicked: + Loader can be used to delay the creation of a component until it + is required. For example, this loads "Page1.qml" as a component + into the Loader element, when the \l MouseArea is clicked: \code import Qt 4.7 @@ -165,7 +165,6 @@ void QDeclarativeLoaderPrivate::initResize() /*! \internal \class QDeclarativeLoader - \qmlclass Loader */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 40c621a..dcdb9f6 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -521,7 +521,8 @@ void QDeclarativeMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) // If we don't accept hover, we need to reset containsMouse. if (!acceptHoverEvents()) setHovered(false); - if (scene()->mouseGrabberItem() == this) + QGraphicsScene *s = scene(); + if (s && s->mouseGrabberItem() == this) ungrabMouse(); setKeepMouseGrab(false); } diff --git a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp index 3b9b8df..a6db1fa 100644 --- a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp +++ b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp @@ -90,6 +90,8 @@ QT_BEGIN_NAMESPACE static int inpaint=0; static int inpaint_clearcache=0; +extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled; + /*! Marks areas of the cache that intersect with the given \a rect as dirty and in need of being refreshed. @@ -287,7 +289,14 @@ void QDeclarativePaintedItem::paint(QPainter *p, const QStyleOptionGraphicsItem QRectF target(area.x(), area.y(), area.width(), area.height()); if (!d->cachefrozen) { if (!d->imagecache[i]->dirty.isNull() && topaint.contains(d->imagecache[i]->dirty)) { +#ifdef Q_WS_MAC + bool oldSmooth = qt_applefontsmoothing_enabled; + qt_applefontsmoothing_enabled = false; +#endif QPainter qp(&d->imagecache[i]->image); +#ifdef Q_WS_MAC + qt_applefontsmoothing_enabled = oldSmooth; +#endif qp.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform, d->smoothCache); qp.translate(-area.x(), -area.y()); qp.scale(d->contentsScale,d->contentsScale); @@ -349,7 +358,14 @@ void QDeclarativePaintedItem::paint(QPainter *p, const QStyleOptionGraphicsItem if (d->fillColor.isValid()) img.fill(d->fillColor); { +#ifdef Q_WS_MAC + bool oldSmooth = qt_applefontsmoothing_enabled; + qt_applefontsmoothing_enabled = false; +#endif QPainter qp(&img); +#ifdef Q_WS_MAC + qt_applefontsmoothing_enabled = oldSmooth; +#endif qp.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform, d->smoothCache); qp.translate(-r.x(),-r.y()); diff --git a/src/declarative/graphicsitems/qdeclarativepath.cpp b/src/declarative/graphicsitems/qdeclarativepath.cpp index a904869..80196a1 100644 --- a/src/declarative/graphicsitems/qdeclarativepath.cpp +++ b/src/declarative/graphicsitems/qdeclarativepath.cpp @@ -533,6 +533,13 @@ void QDeclarativeCurve::setY(qreal y) /*! \qmlproperty string PathAttribute::name the name of the attribute to change. + + This attribute will be available to the delegate as PathView.<name> + + Note that using an existing Item property name such as "opacity" as an + attribute is allowed. This is because path attributes add a new + \l{qdeclarativeintroduction.html#attached-properties} {Attached Property} + which in no way clashes with existing properties. */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index b23a3c3..acf9827 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -329,6 +329,10 @@ void QDeclarativePathViewPrivate::regenerate() \image pathview.gif + (Note the above example uses PathAttribute to scale and modify the + opacity of the items as they rotate. This additional code can be seen in the + PathAttribute documentation.) + Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp index 8ba80ad..2b268fb 100644 --- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp +++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp @@ -85,6 +85,19 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() The \l model of a Repeater can be any of the supported \l {qmlmodels}{Data Models}. + Items instantiated by the Repeater are inserted, in order, as + children of the Repeater's parent. The insertion starts immediately after + the repeater's position in its parent stacking list. This allows + a Repeater to be used inside a layout. For example, the following Repeater's + items are stacked between a red rectangle and a blue rectangle: + + \snippet doc/src/snippets/declarative/repeater.qml layout + + \image repeater.png + + + \section2 The \c index and \c modelData properties + The index of a delegate is exposed as an accessible \c index property in the delegate. Properties of the model are also available depending upon the type of \l {qmlmodels}{Data Model}. @@ -105,25 +118,22 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() \o \image repeater-modeldata.png \endtable - Items instantiated by the Repeater are inserted, in order, as - children of the Repeater's parent. The insertion starts immediately after - the repeater's position in its parent stacking list. This allows - a Repeater to be used inside a layout. For example, the following Repeater's - items are stacked between a red rectangle and a blue rectangle: - - \snippet doc/src/snippets/declarative/repeater.qml layout - - \image repeater.png A Repeater item owns all items it instantiates. Removing or dynamically destroying an item created by a Repeater results in unpredictable behavior. - Note that if a repeater is - required to instantiate a large number of items, it may be more efficient to - use other view elements such as ListView. - \note Repeater is \l {Item}-based, and can only repeat \l {Item}-derived objects. - For example, it cannot be used to repeat QtObjects. + \section2 Considerations when using Repeater + + The Repeater element creates all of its delegate items when the repeater is first + created. This can be inefficient if there are a large number of delegate items and + not all of the items are required to be visible at the same time. If this is the case, + consider using other view elements like ListView (which only creates delegate items + when they are scrolled into view) or use the \l {Dynamic Object Creation} methods to + create items as they are required. + + Also, note that Repeater is \l {Item}-based, and can only repeat \l {Item}-derived objects. + For example, it cannot be used to repeat QtObjects: \badcode Item { //XXX does not work! Can't repeat QtObject as it doesn't derive from Item. diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 83911cb..ab2be9c 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -57,6 +57,8 @@ QT_BEGIN_NAMESPACE +extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled; + class QTextDocumentWithImageResources : public QTextDocument { Q_OBJECT @@ -747,7 +749,7 @@ void QDeclarativeText::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QDeclarativeText); - if (newGeometry.width() != oldGeometry.width()) { + if (!d->internalWidthUpdate && newGeometry.width() != oldGeometry.width()) { if (d->wrapMode != QDeclarativeText::NoWrap || d->elideMode != QDeclarativeText::ElideNone) { //re-elide if needed if (d->singleline && d->elideMode != QDeclarativeText::ElideNone && @@ -847,7 +849,9 @@ void QDeclarativeTextPrivate::updateSize() q->setBaselineOffset(fm.ascent() + yoff); //### need to comfirm cost of always setting these for richText + internalWidthUpdate = true; q->setImplicitWidth(size.width()); + internalWidthUpdate = false; q->setImplicitHeight(size.height()); emit q->paintedSizeChanged(); } else { @@ -1001,7 +1005,14 @@ QPixmap QDeclarativeTextPrivate::wrappedTextImage(bool drawStyle) QPixmap img(size); if (!size.isEmpty()) { img.fill(Qt::transparent); +#ifdef Q_WS_MAC + bool oldSmooth = qt_applefontsmoothing_enabled; + qt_applefontsmoothing_enabled = false; +#endif QPainter p(&img); +#ifdef Q_WS_MAC + qt_applefontsmoothing_enabled = oldSmooth; +#endif drawWrappedText(&p, QPointF(0,0), drawStyle); } return img; @@ -1024,7 +1035,14 @@ QPixmap QDeclarativeTextPrivate::richTextImage(bool drawStyle) //paint text QPixmap img(size); img.fill(Qt::transparent); +#ifdef Q_WS_MAC + bool oldSmooth = qt_applefontsmoothing_enabled; + qt_applefontsmoothing_enabled = false; +#endif QPainter p(&img); +#ifdef Q_WS_MAC + qt_applefontsmoothing_enabled = oldSmooth; +#endif QAbstractTextDocumentLayout::PaintContext context; diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h index 51a5514..48552a7 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h @@ -72,7 +72,7 @@ public: QDeclarativeTextPrivate() : color((QRgb)0), style(QDeclarativeText::Normal), hAlign(QDeclarativeText::AlignLeft), vAlign(QDeclarativeText::AlignTop), elideMode(QDeclarativeText::ElideNone), - imgDirty(true), dirty(true), richText(false), singleline(false), cache(true), doc(0), + imgDirty(true), dirty(true), richText(false), singleline(false), cache(true), internalWidthUpdate(false), doc(0), format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap) { #if defined(QML_NO_TEXT_CACHE) @@ -119,6 +119,7 @@ public: bool richText:1; bool singleline:1; bool cache:1; + bool internalWidthUpdate:1; QTextDocumentWithImageResources *doc; QTextLayout layout; QSize cachedLayoutSize; diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 55b802f..8117676 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -202,8 +202,9 @@ QString QDeclarativeTextEdit::text() const Sets the font size in pixels. - Using this function makes the font device dependent. - Use \l font.pointSize to set the size of the font in a device independent manner. + Using this function makes the font device dependent. Use + \l{TextEdit::font.pointSize} to set the size of the font in a + device independent manner. */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativetranslate.cpp b/src/declarative/graphicsitems/qdeclarativetranslate.cpp index 17daac7..16a1127 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate.cpp +++ b/src/declarative/graphicsitems/qdeclarativetranslate.cpp @@ -117,7 +117,7 @@ void QDeclarativeTranslate::setY(qreal y) } /*! - \reimp + \internal */ void QDeclarativeTranslate::applyTo(QMatrix4x4 *matrix) const { diff --git a/src/declarative/qml/parser/qdeclarativejslexer.cpp b/src/declarative/qml/parser/qdeclarativejslexer.cpp index fcaaece..65a6af2 100644 --- a/src/declarative/qml/parser/qdeclarativejslexer.cpp +++ b/src/declarative/qml/parser/qdeclarativejslexer.cpp @@ -103,7 +103,7 @@ Lexer::Lexer(Engine *eng, bool tokenizeComments) prohibitAutomaticSemicolon(false), tokenizeComments(tokenizeComments) { - driver->setLexer(this); + if (driver) driver->setLexer(this); // allocate space for read buffers buffer8 = new char[size8]; buffer16 = new QChar[size16]; @@ -677,9 +677,9 @@ int Lexer::lex() setDone(Other); } else state = Start; - driver->addComment(startpos, tokenLength(), startlineno, startcolumn); + if (driver) driver->addComment(startpos, tokenLength(), startlineno, startcolumn); } else if (current == 0) { - driver->addComment(startpos, tokenLength(), startlineno, startcolumn); + if (driver) driver->addComment(startpos, tokenLength(), startlineno, startcolumn); setDone(Eof); } @@ -689,14 +689,14 @@ int Lexer::lex() setDone(Bad); err = UnclosedComment; errmsg = QCoreApplication::translate("QDeclarativeParser", "Unclosed comment at end of file"); - driver->addComment(startpos, tokenLength(), startlineno, startcolumn); + if (driver) driver->addComment(startpos, tokenLength(), startlineno, startcolumn); } else if (isLineTerminator()) { shiftWindowsLineBreak(); yylineno++; } else if (current == '*' && next1 == '/') { state = Start; shift(1); - driver->addComment(startpos, tokenLength(), startlineno, startcolumn); + if (driver) driver->addComment(startpos, tokenLength(), startlineno, startcolumn); } break; diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h index 53ff51c..c6b64ae 100644 --- a/src/declarative/qml/qdeclarative.h +++ b/src/declarative/qml/qdeclarative.h @@ -116,7 +116,7 @@ int qmlRegisterType() 0 }; - return QDeclarativePrivate::registerType(type); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message); @@ -151,7 +151,7 @@ int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMin 0 }; - return QDeclarativePrivate::registerType(type); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } template<typename T> @@ -184,7 +184,7 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c 0 }; - return QDeclarativePrivate::registerType(type); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } template<typename T, typename E> @@ -217,7 +217,7 @@ int qmlRegisterExtendedType() 0 }; - return QDeclarativePrivate::registerType(type); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } template<typename T, typename E> @@ -258,7 +258,7 @@ int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, 0 }; - return QDeclarativePrivate::registerType(type); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } template<typename T> @@ -278,7 +278,7 @@ int qmlRegisterInterface(const char *typeName) qobject_interface_iid<T *>() }; - return QDeclarativePrivate::registerType(interface); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::InterfaceRegistration, &interface); } template<typename T> @@ -312,7 +312,7 @@ int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor, parser }; - return QDeclarativePrivate::registerType(type); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } class QDeclarativeContext; diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp index 882e981..e096305 100644 --- a/src/declarative/qml/qdeclarativebinding.cpp +++ b/src/declarative/qml/qdeclarativebinding.cpp @@ -54,27 +54,20 @@ QT_BEGIN_NAMESPACE -QDeclarativeBindingData::QDeclarativeBindingData() -: updating(false), enabled(false) +void QDeclarativeBindingPrivate::refresh() { + Q_Q(QDeclarativeBinding); + q->update(); } -QDeclarativeBindingData::~QDeclarativeBindingData() -{ - removeError(); -} - -void QDeclarativeBindingData::refresh() +QDeclarativeBindingPrivate::QDeclarativeBindingPrivate() +: updating(false), enabled(false), deleted(0) { - if (enabled && !updating && q) { - QDeclarativeBinding *b = static_cast<QDeclarativeBinding *>(QDeclarativeExpressionPrivate::get(q)); - b->update(); - } } -QDeclarativeBindingPrivate::QDeclarativeBindingPrivate() -: QDeclarativeExpressionPrivate(new QDeclarativeBindingData) +QDeclarativeBindingPrivate::~QDeclarativeBindingPrivate() { + if (deleted) *deleted = true; } QDeclarativeBinding::QDeclarativeBinding(void *data, QDeclarativeRefCount *rc, QObject *obj, @@ -109,7 +102,7 @@ QDeclarativeBinding::~QDeclarativeBinding() void QDeclarativeBinding::setTarget(const QDeclarativeProperty &prop) { Q_D(QDeclarativeBinding); - d->bindingData()->property = prop; + d->property = prop; update(); } @@ -117,50 +110,53 @@ void QDeclarativeBinding::setTarget(const QDeclarativeProperty &prop) QDeclarativeProperty QDeclarativeBinding::property() const { Q_D(const QDeclarativeBinding); - return d->bindingData()->property; + return d->property; } void QDeclarativeBinding::update(QDeclarativePropertyPrivate::WriteFlags flags) { Q_D(QDeclarativeBinding); - QDeclarativeBindingData *data = d->bindingData(); - - if (!data->enabled || !data->context() || !data->context()->isValid()) + if (!d->enabled || !d->context() || !d->context()->isValid()) return; - data->addref(); - - if (!data->updating) { - data->updating = true; + if (!d->updating) { + d->updating = true; + bool wasDeleted = false; + d->deleted = &wasDeleted; - if (data->property.propertyType() == qMetaTypeId<QDeclarativeBinding *>()) { + if (d->property.propertyType() == qMetaTypeId<QDeclarativeBinding *>()) { - int idx = data->property.index(); + int idx = d->property.index(); Q_ASSERT(idx != -1); - QDeclarativeBinding *t = this; int status = -1; void *a[] = { &t, 0, &status, &flags }; - QMetaObject::metacall(data->property.object(), + QMetaObject::metacall(d->property.object(), QMetaObject::WriteProperty, idx, a); + if (wasDeleted) + return; + } else { - QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(data->context()->engine); + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(d->context()->engine); bool isUndefined = false; QVariant value; QScriptValue scriptValue = d->scriptValue(0, &isUndefined); - if (data->property.propertyTypeCategory() == QDeclarativeProperty::List) { + if (wasDeleted) + return; + + if (d->property.propertyTypeCategory() == QDeclarativeProperty::List) { value = ep->scriptValueToVariant(scriptValue, qMetaTypeId<QList<QObject *> >()); } else if (scriptValue.isNull() && - data->property.propertyTypeCategory() == QDeclarativeProperty::Object) { + d->property.propertyTypeCategory() == QDeclarativeProperty::Object) { value = QVariant::fromValue((QObject *)0); } else { - value = ep->scriptValueToVariant(scriptValue, data->property.propertyType()); + value = ep->scriptValueToVariant(scriptValue, d->property.propertyType()); if (value.userType() == QMetaType::QObjectStar && !qvariant_cast<QObject*>(value)) { // If the object is null, we extract the predicted type. While this isn't // 100% reliable, in many cases it gives us better error messages if we @@ -172,73 +168,78 @@ void QDeclarativeBinding::update(QDeclarativePropertyPrivate::WriteFlags flags) } - if (data->error.isValid()) { + if (d->error.isValid()) { - } else if (isUndefined && data->property.isResettable()) { + } else if (isUndefined && d->property.isResettable()) { - data->property.reset(); + d->property.reset(); - } else if (isUndefined && data->property.propertyType() == qMetaTypeId<QVariant>()) { + } else if (isUndefined && d->property.propertyType() == qMetaTypeId<QVariant>()) { - QDeclarativePropertyPrivate::write(data->property, QVariant(), flags); + QDeclarativePropertyPrivate::write(d->property, QVariant(), flags); } else if (isUndefined) { - QUrl url = QUrl(data->url); - int line = data->line; + QUrl url = QUrl(d->url); + int line = d->line; if (url.isEmpty()) url = QUrl(QLatin1String("<Unknown File>")); - data->error.setUrl(url); - data->error.setLine(line); - data->error.setColumn(-1); - data->error.setDescription(QLatin1String("Unable to assign [undefined] to ") - + QLatin1String(QMetaType::typeName(data->property.propertyType())) - + QLatin1String(" ") + data->property.name()); + d->error.setUrl(url); + d->error.setLine(line); + d->error.setColumn(-1); + d->error.setDescription(QLatin1String("Unable to assign [undefined] to ") + + QLatin1String(QMetaType::typeName(d->property.propertyType())) + + QLatin1String(" ") + d->property.name()); } else if (!scriptValue.isRegExp() && scriptValue.isFunction()) { - QUrl url = QUrl(data->url); - int line = data->line; + QUrl url = QUrl(d->url); + int line = d->line; if (url.isEmpty()) url = QUrl(QLatin1String("<Unknown File>")); - data->error.setUrl(url); - data->error.setLine(line); - data->error.setColumn(-1); - data->error.setDescription(QLatin1String("Unable to assign a function to a property.")); + d->error.setUrl(url); + d->error.setLine(line); + d->error.setColumn(-1); + d->error.setDescription(QLatin1String("Unable to assign a function to a property.")); + + } else if (d->property.object() && + !QDeclarativePropertyPrivate::write(d->property, value, flags)) { - } else if (data->property.object() && - !QDeclarativePropertyPrivate::write(data->property, value, flags)) { + if (wasDeleted) + return; - QUrl url = QUrl(data->url); - int line = data->line; + QUrl url = QUrl(d->url); + int line = d->line; if (url.isEmpty()) url = QUrl(QLatin1String("<Unknown File>")); const char *valueType = 0; if (value.userType() == QVariant::Invalid) valueType = "null"; else valueType = QMetaType::typeName(value.userType()); - data->error.setUrl(url); - data->error.setLine(line); - data->error.setColumn(-1); - data->error.setDescription(QLatin1String("Unable to assign ") + - QLatin1String(valueType) + - QLatin1String(" to ") + - QLatin1String(QMetaType::typeName(data->property.propertyType()))); + d->error.setUrl(url); + d->error.setLine(line); + d->error.setColumn(-1); + d->error.setDescription(QLatin1String("Unable to assign ") + + QLatin1String(valueType) + + QLatin1String(" to ") + + QLatin1String(QMetaType::typeName(d->property.propertyType()))); } - if (data->error.isValid()) { - if (!data->addError(ep)) ep->warning(this->error()); + if (wasDeleted) + return; + + if (d->error.isValid()) { + if (!d->addError(ep)) ep->warning(this->error()); } else { - data->removeError(); + d->removeError(); } } - data->updating = false; + d->updating = false; + d->deleted = 0; } else { - qmlInfo(data->property.object()) << tr("Binding loop detected for property \"%1\"").arg(data->property.name()); + qmlInfo(d->property.object()) << tr("Binding loop detected for property \"%1\"").arg(d->property.name()); } - - data->release(); } void QDeclarativeBindingPrivate::emitValueChanged() @@ -250,13 +251,13 @@ void QDeclarativeBindingPrivate::emitValueChanged() void QDeclarativeBinding::setEnabled(bool e, QDeclarativePropertyPrivate::WriteFlags flags) { Q_D(QDeclarativeBinding); - d->bindingData()->enabled = e; + d->enabled = e; setNotifyOnValueChanged(e); QDeclarativeAbstractBinding::setEnabled(e, flags); if (e) { - addToObject(d->bindingData()->property.object()); + addToObject(d->property.object()); update(flags); } else { removeFromObject(); @@ -266,14 +267,14 @@ void QDeclarativeBinding::setEnabled(bool e, QDeclarativePropertyPrivate::WriteF int QDeclarativeBinding::propertyIndex() { Q_D(QDeclarativeBinding); - return QDeclarativePropertyPrivate::bindingIndex(d->bindingData()->property); + return QDeclarativePropertyPrivate::bindingIndex(d->property); } bool QDeclarativeBinding::enabled() const { Q_D(const QDeclarativeBinding); - return d->bindingData()->enabled; + return d->enabled; } QString QDeclarativeBinding::expression() const diff --git a/src/declarative/qml/qdeclarativebinding_p_p.h b/src/declarative/qml/qdeclarativebinding_p_p.h index 617ec4b..6926158 100644 --- a/src/declarative/qml/qdeclarativebinding_p_p.h +++ b/src/declarative/qml/qdeclarativebinding_p_p.h @@ -60,30 +60,24 @@ QT_BEGIN_NAMESPACE -class QDeclarativeBindingData : public QDeclarativeExpressionData -{ -public: - QDeclarativeBindingData(); - virtual ~QDeclarativeBindingData(); - - bool updating:1; - bool enabled:1; - - QDeclarativeProperty property; - - virtual void refresh(); -}; - class QDeclarativeBindingPrivate : public QDeclarativeExpressionPrivate { Q_DECLARE_PUBLIC(QDeclarativeBinding) public: QDeclarativeBindingPrivate(); - - QDeclarativeBindingData *bindingData() { return static_cast<QDeclarativeBindingData *>(data); } - const QDeclarativeBindingData *bindingData() const { return static_cast<const QDeclarativeBindingData *>(data); } + ~QDeclarativeBindingPrivate(); virtual void emitValueChanged(); + +protected: + virtual void refresh(); + +private: + bool updating:1; + bool enabled:1; + QDeclarativeProperty property; + + bool *deleted; }; QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 623e3df..23307c9 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -228,10 +228,10 @@ bool QDeclarativeCompiler::testLiteralAssignment(const QMetaProperty &prop, } break; case QMetaType::Float: - if (!v->value.isNumber()) COMPILE_EXCEPTION(v, tr("Invalid property assignment: float expected")); + if (!v->value.isNumber()) COMPILE_EXCEPTION(v, tr("Invalid property assignment: number expected")); break; case QVariant::Double: - if (!v->value.isNumber()) COMPILE_EXCEPTION(v, tr("Invalid property assignment: double expected")); + if (!v->value.isNumber()) COMPILE_EXCEPTION(v, tr("Invalid property assignment: number expected")); break; case QVariant::Color: { @@ -2449,7 +2449,7 @@ bool QDeclarativeCompiler::buildDynamicMeta(QDeclarativeParser::Object *obj, Dyn for (int ii = 0; ii < obj->dynamicSlots.count(); ++ii) { Object::DynamicSlot &s = obj->dynamicSlots[ii]; QByteArray sig(s.name + '('); - QString funcScript(QLatin1String("(function(")); + QString funcScript(QLatin1String("(function ") + s.name + QLatin1Char('(')); for (int jj = 0; jj < s.parameterNames.count(); ++jj) { if (jj) { diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 9d3032c..36c4b49 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -68,37 +68,85 @@ class QByteArray; /*! \class QDeclarativeComponent \since 4.7 - \brief The QDeclarativeComponent class encapsulates a QML component description. + \brief The QDeclarativeComponent class encapsulates a QML component definition. \mainclass + + Components are reusable, encapsulated QML elements with well-defined interfaces. + They are often defined in \l {qdeclarativedocuments.html}{Component Files}. + + A QDeclarativeComponent instance can be created from a QML file. + For example, if there is a \c main.qml file like this: + + \qml + import Qt 4.7 + + Item { + width: 200 + height: 200 + } + \endqml + + The following code loads this QML file as a component, creates an instance of + this component using create(), and then queries the \l Item's \l {Item::}{width} + value: + + \code + QDeclarativeEngine *engine = new QDeclarativeEngine; + QDeclarativeComponent component(engine, QUrl::fromLocalFile("main.qml")); + + QObject *myObject = component.create(); + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(myObject); + int width = item->width(); // width = 200 + \endcode + + \sa {Using QML in C++ Applications}, {Integrating QML with existing Qt UI code} */ /*! \qmlclass Component QDeclarativeComponent \since 4.7 - \brief The Component element encapsulates a QML component description. + \brief The Component element encapsulates a QML component definition. Components are reusable, encapsulated QML elements with well-defined interfaces. - They are often defined in \l {qdeclarativedocuments.html}{Component Files}. - The \e Component element allows defining components within a QML file. - This can be useful for reusing a small component within a single QML - file, or for defining a component that logically belongs with the - file containing it. + Components are often defined by \l {qdeclarativedocuments.html}{component files} - + that is, \c .qml files. The \e Component element allows components to be defined + within QML items rather than in a separate file. This may be useful for reusing + a small component within a QML file, or for defining a component that logically + belongs with other QML components within a file. + + For example, here is a component that is used by multiple \l Loader objects: \qml Item { Component { id: redSquare + Rectangle { color: "red" width: 10 height: 10 } } + Loader { sourceComponent: redSquare } Loader { sourceComponent: redSquare; x: 20 } } \endqml + + Notice that while a \l Rectangle by itself would be automatically + rendered and displayed, this is not the case for the above rectangle + because it is defined inside a \c Component. The component encapsulates the + QML elements within, as if they were defined in a separate \c .qml + file, and is not loaded until requested (in this case, by the + two \l Loader objects). + + The Component element is commonly used to provide graphical components + for views. For example, the ListView::delegate property requires a Component + to specify how each list item is to be displayed. + + Component objects can also be dynamically generated using + \l{Qt::createComponent}{Qt.createComponent()}. */ /*! @@ -448,7 +496,8 @@ void QDeclarativeComponent::loadUrl(const QUrl &url) d->clear(); - if (url.isRelative() && !url.isEmpty()) + if ((url.isRelative() && !url.isEmpty()) + || url.scheme() == QLatin1String("file")) // Workaround QTBUG-11929 d->url = d->engine->baseUrl().resolved(url); else d->url = url; diff --git a/src/declarative/qml/qdeclarativecontext.cpp b/src/declarative/qml/qdeclarativecontext.cpp index 60e9dd3..3d25291 100644 --- a/src/declarative/qml/qdeclarativecontext.cpp +++ b/src/declarative/qml/qdeclarativecontext.cpp @@ -145,6 +145,8 @@ QDeclarativeContextPrivate::QDeclarativeContextPrivate() has been created in that context is an expensive operation (essentially forcing all bindings to reevaluate). Thus whenever possible you should complete "setup" of the context before using it to create any objects. + + \sa {Using QML in C++ Applications} */ /*! \internal */ diff --git a/src/declarative/qml/qdeclarativecontext_p.h b/src/declarative/qml/qdeclarativecontext_p.h index 1f5aaf1..c5a039a 100644 --- a/src/declarative/qml/qdeclarativecontext_p.h +++ b/src/declarative/qml/qdeclarativecontext_p.h @@ -198,6 +198,7 @@ public: // context QDeclarativeComponentAttached *componentAttached; + // Return the outermost id for obj, if any. QString findObjectId(const QObject *obj) const; static QDeclarativeContextData *get(QDeclarativeContext *context) { diff --git a/src/declarative/qml/qdeclarativedom.cpp b/src/declarative/qml/qdeclarativedom.cpp index a3cddb5..5b30bde 100644 --- a/src/declarative/qml/qdeclarativedom.cpp +++ b/src/declarative/qml/qdeclarativedom.cpp @@ -493,7 +493,7 @@ int QDeclarativeDomDynamicProperty::propertyType() const return QMetaType::type("int"); case QDeclarativeParser::Object::DynamicProperty::Real: - return QMetaType::type("double"); + return sizeof(qreal) == sizeof(double) ? QMetaType::type("double") : QMetaType::type("float"); case QDeclarativeParser::Object::DynamicProperty::String: return QMetaType::type("QString"); diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index a31448f..e3ebca3 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -115,22 +115,55 @@ QT_BEGIN_NAMESPACE /*! \qmlclass QtObject QObject \since 4.7 - \brief The QtObject element is the most basic element in QML + \brief The QtObject element is the most basic element in QML. The QtObject element is a non-visual element which contains only the - objectName property. It is useful for when you need an extremely - lightweight element to place your own custom properties in. + objectName property. + + It can be useful to create a QtObject if you need an extremely + lightweight element to enclose a set of custom properties: + + \snippet doc/src/snippets/declarative/qtobject.qml 0 It can also be useful for C++ integration, as it is just a plain QObject. See the QObject documentation for further details. */ /*! \qmlproperty string QML:QtObject::objectName - This property allows you to give a name to this specific object instance. + This property holds the QObject::objectName for this specific object instance. + + This allows a C++ application to locate an item within a QML component + using the QObject::findChild() method. For example, the following C++ + application locates the child \l Rectangle item and dynamically changes its + \c color value: + + \qml + // MyRect.qml + + import Qt 4.7 + + Item { + width: 200; height: 200 - See \l{scripting.html#accessing-child-qobjects}{Accessing Child QObjects} - in the scripting documentation for details how objectName can be used from - scripts. + Rectangle { + anchors.fill: parent + color: "red" + objectName: "myRect" + } + } + \endqml + + \code + // main.cpp + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile("MyRect.qml")); + view.show(); + + QDeclarativeItem *item = view.rootObject()->findChild<QDeclarativeItem*>("myRect"); + if (item) + item->setProperty("color", QColor(Qt::yellow)); + \endcode */ struct StaticQtMetaObject : public QObject @@ -219,7 +252,7 @@ of their use. QDeclarativeEnginePrivate::QDeclarativeEnginePrivate(QDeclarativeEngine *e) -: captureProperties(false), rootContext(0), currentExpression(0), isDebugging(false), +: captureProperties(false), rootContext(0), isDebugging(false), outputWarningsToStdErr(true), contextClass(0), sharedContext(0), sharedScope(0), objectClass(0), valueTypeClass(0), globalClass(0), cleanup(0), erroredBindings(0), inProgressCreations(0), scriptEngine(this), workerScriptEngine(0), componentAttached(0), @@ -1080,13 +1113,20 @@ Here is an example. Notice it checks whether the component \l{Component::status} \c Component.Ready before calling \l {Component::createObject()}{createObject()} in case the QML file is loaded over a network and thus is not ready immediately. -\snippet doc/src/snippets/declarative/componentCreation.js 0 +\snippet doc/src/snippets/declarative/componentCreation.js vars +\codeline +\snippet doc/src/snippets/declarative/componentCreation.js func +\snippet doc/src/snippets/declarative/componentCreation.js remote +\snippet doc/src/snippets/declarative/componentCreation.js func-end \codeline -\snippet doc/src/snippets/declarative/componentCreation.js 1 +\snippet doc/src/snippets/declarative/componentCreation.js finishCreation -If you are certain the files will be local, you could simplify to: +If you are certain the QML file to be loaded is a local file, you could omit the \c finishCreation() +function and call \l {Component::createObject()}{createObject()} immediately: -\snippet doc/src/snippets/declarative/componentCreation.js 2 +\snippet doc/src/snippets/declarative/componentCreation.js func +\snippet doc/src/snippets/declarative/componentCreation.js local +\snippet doc/src/snippets/declarative/componentCreation.js func-end To create a QML object from an arbitrary string of QML (instead of a file), use \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()}. @@ -1271,11 +1311,12 @@ QScriptValue QDeclarativeEnginePrivate::formatDate(QScriptContext*ctxt, QScriptE QDate date = ctxt->argument(0).toDateTime().date(); Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate; if (argCount == 2) { - if (ctxt->argument(1).isString()) { - QString format = ctxt->argument(1).toString(); + QScriptValue formatArg = ctxt->argument(1); + if (formatArg.isString()) { + QString format = formatArg.toString(); return engine->newVariant(qVariantFromValue(date.toString(format))); - } else if (ctxt->argument(1).isNumber()) { - enumFormat = Qt::DateFormat(ctxt->argument(1).toUInt32()); + } else if (formatArg.isNumber()) { + enumFormat = Qt::DateFormat(formatArg.toUInt32()); } else { return ctxt->throwError(QLatin1String("Qt.formatDate(): Invalid date format")); } @@ -1298,11 +1339,12 @@ QScriptValue QDeclarativeEnginePrivate::formatTime(QScriptContext*ctxt, QScriptE QTime date = ctxt->argument(0).toDateTime().time(); Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate; if (argCount == 2) { - if (ctxt->argument(1).isString()) { - QString format = ctxt->argument(1).toString(); + QScriptValue formatArg = ctxt->argument(1); + if (formatArg.isString()) { + QString format = formatArg.toString(); return engine->newVariant(qVariantFromValue(date.toString(format))); - } else if (ctxt->argument(1).isNumber()) { - enumFormat = Qt::DateFormat(ctxt->argument(1).toUInt32()); + } else if (formatArg.isNumber()) { + enumFormat = Qt::DateFormat(formatArg.toUInt32()); } else { return ctxt->throwError(QLatin1String("Qt.formatTime(): Invalid time format")); } @@ -1388,11 +1430,12 @@ QScriptValue QDeclarativeEnginePrivate::formatDateTime(QScriptContext*ctxt, QScr QDateTime date = ctxt->argument(0).toDateTime(); Qt::DateFormat enumFormat = Qt::DefaultLocaleShortDate; if (argCount == 2) { - if (ctxt->argument(1).isString()) { - QString format = ctxt->argument(1).toString(); + QScriptValue formatArg = ctxt->argument(1); + if (formatArg.isString()) { + QString format = formatArg.toString(); return engine->newVariant(qVariantFromValue(date.toString(format))); - } else if (ctxt->argument(1).isNumber()) { - enumFormat = Qt::DateFormat(ctxt->argument(1).toUInt32()); + } else if (formatArg.isNumber()) { + enumFormat = Qt::DateFormat(formatArg.toUInt32()); } else { return ctxt->throwError(QLatin1String("Qt.formatDateTime(): Invalid datetime format")); } @@ -1740,8 +1783,7 @@ void QDeclarativeEnginePrivate::warning(QDeclarativeEnginePrivate *engine, const /*! \qmlmethod Qt::quit() This function causes the QDeclarativeEngine::quit() signal to be emitted. -Within the \l {Qt Declarative UI Runtime}{qml} application this causes the -launcher application to exit. +Within the \l {QML Viewer}, this causes the launcher application to exit. */ QScriptValue QDeclarativeEnginePrivate::quit(QScriptContext * /*ctxt*/, QScriptEngine *e) diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h index f457b53..a5c8c38 100644 --- a/src/declarative/qml/qdeclarativeengine_p.h +++ b/src/declarative/qml/qdeclarativeengine_p.h @@ -162,7 +162,6 @@ public: QPODVector<CapturedProperty> capturedProperties; QDeclarativeContext *rootContext; - QDeclarativeExpression *currentExpression; bool isDebugging; bool outputWarningsToStdErr; diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp index 008d054..1837366 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/qml/qdeclarativeenginedebug.cpp @@ -485,24 +485,22 @@ void QDeclarativeEngineDebugServer::setBinding(int objectId, if (object && context) { + QDeclarativeProperty property(object, propertyName, context); if (isLiteralValue) { - QDeclarativeProperty literalProperty(object, propertyName, context); - literalProperty.write(expression); + property.write(expression); + } else if (hasValidSignal(object, propertyName)) { + QDeclarativeExpression *declarativeExpression = new QDeclarativeExpression(context, object, expression.toString()); + QDeclarativePropertyPrivate::setSignalExpression(property, declarativeExpression); + } else if (property.isProperty()) { + QDeclarativeBinding *binding = new QDeclarativeBinding(expression.toString(), object, context); + binding->setTarget(property); + binding->setNotifyOnValueChanged(true); + QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(property, binding); + if (oldBinding) + oldBinding->destroy(); + binding->update(); } else { - if (hasValidSignal(object, propertyName)) { - QDeclarativeProperty property(object, propertyName); - QDeclarativeExpression *declarativeExpression = new QDeclarativeExpression(context, object, expression.toString()); - QDeclarativePropertyPrivate::setSignalExpression(property, declarativeExpression); - } else { - QDeclarativeBinding *binding = new QDeclarativeBinding(expression.toString(), object, context); - QDeclarativeProperty property(object, propertyName, context); - binding->setTarget(property); - binding->setNotifyOnValueChanged(true); - QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(property, binding); - if (oldBinding) - oldBinding->destroy(); - binding->update(); - } + qWarning() << "QDeclarativeEngineDebugServer::setBinding: unable to set property" << propertyName << "on object" << object; } } } diff --git a/src/declarative/qml/qdeclarativeexpression.cpp b/src/declarative/qml/qdeclarativeexpression.cpp index 8ae5f2f..9935e38 100644 --- a/src/declarative/qml/qdeclarativeexpression.cpp +++ b/src/declarative/qml/qdeclarativeexpression.cpp @@ -71,109 +71,95 @@ bool QDeclarativeDelayedError::addError(QDeclarativeEnginePrivate *e) return true; } -QDeclarativeExpressionData::QDeclarativeExpressionData() -: q(0), dataRef(0), expressionFunctionValid(false), expressionRewritten(false), me(0), - trackChange(false), isShared(false), line(-1), guardList(0), guardListLength(0) +QDeclarativeQtScriptExpression::QDeclarativeQtScriptExpression() +: dataRef(0), expressionFunctionMode(ExplicitContext), scopeObject(0), trackChange(false), + guardList(0), guardListLength(0), guardObject(0), guardObjectNotifyIndex(-1), deleted(0) { } -QDeclarativeExpressionData::~QDeclarativeExpressionData() +QDeclarativeQtScriptExpression::~QDeclarativeQtScriptExpression() { if (guardList) { delete [] guardList; guardList = 0; } if (dataRef) dataRef->release(); + if (deleted) *deleted = true; } QDeclarativeExpressionPrivate::QDeclarativeExpressionPrivate() -: data(new QDeclarativeExpressionData) +: expressionFunctionValid(true), line(-1) { - data->q = this; -} - -QDeclarativeExpressionPrivate::QDeclarativeExpressionPrivate(QDeclarativeExpressionData *d) -: data(d) -{ - data->q = this; } QDeclarativeExpressionPrivate::~QDeclarativeExpressionPrivate() { - if (data) { - delete [] data->guardList; - data->guardList = 0; - data->guardListLength = 0; - data->q = 0; - data->release(); - data = 0; - } } void QDeclarativeExpressionPrivate::init(QDeclarativeContextData *ctxt, const QString &expr, QObject *me) { - data->expression = expr; + expression = expr; - data->QDeclarativeAbstractExpression::setContext(ctxt); - data->me = me; + QDeclarativeAbstractExpression::setContext(ctxt); + scopeObject = me; + expressionFunctionValid = false; } -void QDeclarativeExpressionPrivate::init(QDeclarativeContextData *ctxt, void *expr, QDeclarativeRefCount *rc, - QObject *me, const QString &url, int lineNumber) +void QDeclarativeExpressionPrivate::init(QDeclarativeContextData *ctxt, void *expr, + QDeclarativeRefCount *rc, + QObject *me, const QString &srcUrl, int lineNumber) { - data->url = url; - data->line = lineNumber; + url = srcUrl; + line = lineNumber; - if (data->dataRef) data->dataRef->release(); - data->dataRef = rc; - if (data->dataRef) data->dataRef->addref(); + if (dataRef) dataRef->release(); + dataRef = rc; + if (dataRef) dataRef->addref(); quint32 *exprData = (quint32 *)expr; QDeclarativeCompiledData *dd = (QDeclarativeCompiledData *)rc; - data->expressionRewritten = true; - data->expression = QString::fromRawData((QChar *)(exprData + 2), exprData[1]); + expression = QString::fromRawData((QChar *)(exprData + 2), exprData[1]); int progIdx = *(exprData); - bool isShared = progIdx & 0x80000000; + bool isSharedProgram = progIdx & 0x80000000; progIdx &= 0x7FFFFFFF; QDeclarativeEngine *engine = ctxt->engine; QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine); - if (isShared) { + if (isSharedProgram) { if (!dd->cachedClosures.at(progIdx)) { QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(scriptEngine); scriptContext->pushScope(ep->contextClass->newSharedContext()); scriptContext->pushScope(ep->globalClass->staticGlobalObject()); - dd->cachedClosures[progIdx] = new QScriptValue(scriptEngine->evaluate(data->expression, data->url, data->line)); + dd->cachedClosures[progIdx] = new QScriptValue(scriptEngine->evaluate(expression, url, line)); scriptEngine->popContext(); } - data->expressionFunction = *dd->cachedClosures.at(progIdx); - data->isShared = true; - data->expressionFunctionValid = true; + expressionFunction = *dd->cachedClosures.at(progIdx); + expressionFunctionMode = SharedContext; + expressionFunctionValid = true; } else { #if !defined(Q_OS_SYMBIAN) //XXX Why doesn't this work? if (!dd->cachedPrograms.at(progIdx)) { - dd->cachedPrograms[progIdx] = - new QScriptProgram(data->expression, data->url, data->line); + dd->cachedPrograms[progIdx] = new QScriptProgram(expression, url, line); } - data->expressionFunction = evalInObjectScope(ctxt, me, *dd->cachedPrograms.at(progIdx), - &data->expressionContext); + expressionFunction = evalInObjectScope(ctxt, me, *dd->cachedPrograms.at(progIdx), + &expressionContext); #else - data->expressionFunction = evalInObjectScope(ctxt, me, data->expression, - &data->expressionContext); + expressionFunction = evalInObjectScope(ctxt, me, expression, &expressionContext); #endif - data->expressionFunctionValid = true; + expressionFunctionMode = ExplicitContext; + expressionFunctionValid = true; } - data->QDeclarativeAbstractExpression::setContext(ctxt); - data->me = me; + QDeclarativeAbstractExpression::setContext(ctxt); + scopeObject = me; } QScriptValue QDeclarativeExpressionPrivate::evalInObjectScope(QDeclarativeContextData *context, QObject *object, @@ -214,10 +200,34 @@ QScriptValue QDeclarativeExpressionPrivate::evalInObjectScope(QDeclarativeContex /*! \class QDeclarativeExpression - \since 4.7 + \since 4.7 \brief The QDeclarativeExpression class evaluates JavaScript in a QML context. + + For example, given a file \c main.qml like this: + + \qml + import Qt 4.7 + + Item { + width: 200; height: 200 + } + \endqml + + The following code evaluates a JavaScript expression in the context of the + above QML: + + \code + QDeclarativeEngine *engine = new QDeclarativeEngine; + QDeclarativeComponent component(engine, QUrl::fromLocalFile("main.qml")); + + QObject *myObject = component.create(); + QDeclarativeExpression *expr = new QDeclarativeExpression(engine->rootContext(), myObject, "width * 2"); + int result = expr->evaluate().toInt(); // result = 400 + \endcode */ +static int QDeclarativeExpression_notifyIdx = -1; + /*! Create an invalid QDeclarativeExpression. @@ -227,6 +237,11 @@ QScriptValue QDeclarativeExpressionPrivate::evalInObjectScope(QDeclarativeContex QDeclarativeExpression::QDeclarativeExpression() : QObject(*new QDeclarativeExpressionPrivate, 0) { + Q_D(QDeclarativeExpression); + + if (QDeclarativeExpression_notifyIdx == -1) + QDeclarativeExpression_notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("_q_notify()"); + d->setNotifyObject(this, QDeclarativeExpression_notifyIdx); } /*! \internal */ @@ -238,6 +253,10 @@ QDeclarativeExpression::QDeclarativeExpression(QDeclarativeContextData *ctxt, vo { Q_D(QDeclarativeExpression); d->init(ctxt, expr, rc, me, url, lineNumber); + + if (QDeclarativeExpression_notifyIdx == -1) + QDeclarativeExpression_notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("_q_notify()"); + d->setNotifyObject(this, QDeclarativeExpression_notifyIdx); } /*! @@ -255,6 +274,10 @@ QDeclarativeExpression::QDeclarativeExpression(QDeclarativeContext *ctxt, { Q_D(QDeclarativeExpression); d->init(QDeclarativeContextData::get(ctxt), expression, scope); + + if (QDeclarativeExpression_notifyIdx == -1) + QDeclarativeExpression_notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("_q_notify()"); + d->setNotifyObject(this, QDeclarativeExpression_notifyIdx); } /*! @@ -266,6 +289,10 @@ QDeclarativeExpression::QDeclarativeExpression(QDeclarativeContextData *ctxt, QO { Q_D(QDeclarativeExpression); d->init(ctxt, expression, scope); + + if (QDeclarativeExpression_notifyIdx == -1) + QDeclarativeExpression_notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("_q_notify()"); + d->setNotifyObject(this, QDeclarativeExpression_notifyIdx); } /*! \internal */ @@ -275,6 +302,10 @@ QDeclarativeExpression::QDeclarativeExpression(QDeclarativeContextData *ctxt, QO { Q_D(QDeclarativeExpression); d->init(ctxt, expression, scope); + + if (QDeclarativeExpression_notifyIdx == -1) + QDeclarativeExpression_notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("_q_notify()"); + d->setNotifyObject(this, QDeclarativeExpression_notifyIdx); } /*! @@ -291,7 +322,7 @@ QDeclarativeExpression::~QDeclarativeExpression() QDeclarativeEngine *QDeclarativeExpression::engine() const { Q_D(const QDeclarativeExpression); - return d->data->context()?d->data->context()->engine:0; + return d->context()?d->context()->engine:0; } /*! @@ -301,7 +332,7 @@ QDeclarativeEngine *QDeclarativeExpression::engine() const QDeclarativeContext *QDeclarativeExpression::context() const { Q_D(const QDeclarativeExpression); - QDeclarativeContextData *data = d->data->context(); + QDeclarativeContextData *data = d->context(); return data?data->asQDeclarativeContext():0; } @@ -311,7 +342,7 @@ QDeclarativeContext *QDeclarativeExpression::context() const QString QDeclarativeExpression::expression() const { Q_D(const QDeclarativeExpression); - return d->data->expression; + return d->expression; } /*! @@ -321,12 +352,10 @@ void QDeclarativeExpression::setExpression(const QString &expression) { Q_D(QDeclarativeExpression); - d->clearGuards(); - - d->data->expression = expression; - d->data->expressionFunctionValid = false; - d->data->expressionRewritten = false; - d->data->expressionFunction = QScriptValue(); + d->resetNotifyOnChange(); + d->expression = expression; + d->expressionFunctionValid = false; + d->expressionFunction = QScriptValue(); } void QDeclarativeExpressionPrivate::exceptionToError(QScriptEngine *scriptEngine, @@ -356,59 +385,108 @@ void QDeclarativeExpressionPrivate::exceptionToError(QScriptEngine *scriptEngine } } -QScriptValue QDeclarativeExpressionPrivate::eval(QObject *secondaryScope, bool *isUndefined) +bool QDeclarativeQtScriptExpression::notifyOnValueChange() const { - QDeclarativeExpressionData *data = this->data; - QDeclarativeEngine *engine = data->context()->engine; - QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); + return trackChange; +} - QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine); +void QDeclarativeQtScriptExpression::setNotifyOnValueChange(bool notify) +{ + trackChange = notify; + if (!notify && guardList) + clearGuards(); +} - if (!data->expressionFunctionValid) { +void QDeclarativeQtScriptExpression::resetNotifyOnChange() +{ + clearGuards(); +} - QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(scriptEngine); - data->expressionContext = ep->contextClass->newContext(data->context(), data->me); - scriptContext->pushScope(data->expressionContext); - scriptContext->pushScope(ep->globalClass->staticGlobalObject()); +void QDeclarativeQtScriptExpression::setNotifyObject(QObject *object, int notifyIndex) +{ + if (guardList) clearGuards(); + + if (!object || notifyIndex == -1) { + guardObject = 0; + notifyIndex = -1; + } else { + guardObject = object; + guardObjectNotifyIndex = notifyIndex; + + } +} + +QScriptValue QDeclarativeQtScriptExpression::scriptValue(QObject *secondaryScope, bool *isUndefined) +{ + Q_ASSERT(context() && context()->engine); + Q_ASSERT(!trackChange || (guardObject && guardObjectNotifyIndex != -1)); + + if (!expressionFunction.isValid()) { + if (isUndefined) *isUndefined = true; + return QScriptValue(); + } + + DeleteWatcher watcher(this); + + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(context()->engine); + + bool lastCaptureProperties = ep->captureProperties; + QPODVector<QDeclarativeEnginePrivate::CapturedProperty> lastCapturedProperties; + ep->captureProperties = trackChange; + ep->capturedProperties.copyAndClear(lastCapturedProperties); + + QScriptValue value = eval(secondaryScope, isUndefined); + + if (!watcher.wasDeleted() && trackChange) { + if (ep->capturedProperties.count() == 0) { + + if (guardList) clearGuards(); - if (data->expressionRewritten) { - data->expressionFunction = scriptEngine->evaluate(data->expression, - data->url, data->line); } else { - QDeclarativeRewrite::RewriteBinding rewriteBinding; - bool ok = true; - const QString code = rewriteBinding(data->expression, &ok); - if (!ok) { - scriptEngine->popContext(); - return QScriptValue(); - } - data->expressionFunction = scriptEngine->evaluate(code, data->url, data->line); - } + updateGuards(ep->capturedProperties); - scriptEngine->popContext(); - data->expressionFunctionValid = true; + } } + lastCapturedProperties.copyAndClear(ep->capturedProperties); + ep->captureProperties = lastCaptureProperties; + + return value; +} + +QScriptValue QDeclarativeQtScriptExpression::eval(QObject *secondaryScope, bool *isUndefined) +{ + Q_ASSERT(context() && context()->engine); + + DeleteWatcher watcher(this); + + QDeclarativeEngine *engine = context()->engine; + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); + + QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine); + QDeclarativeContextData *oldSharedContext = 0; QObject *oldSharedScope = 0; QObject *oldOverride = 0; - if (data->isShared) { + bool isShared = (expressionFunctionMode == SharedContext); + + if (isShared) { oldSharedContext = ep->sharedContext; oldSharedScope = ep->sharedScope; - ep->sharedContext = data->context(); - ep->sharedScope = data->me; + ep->sharedContext = context(); + ep->sharedScope = scopeObject; } else { - oldOverride = ep->contextClass->setOverrideObject(data->expressionContext, secondaryScope); + oldOverride = ep->contextClass->setOverrideObject(expressionContext, secondaryScope); } - QScriptValue svalue = data->expressionFunction.call(); + QScriptValue svalue = expressionFunction.call(); // This could cause this to be deleted - if (data->isShared) { + if (isShared) { ep->sharedContext = oldSharedContext; ep->sharedScope = oldSharedScope; - } else { - ep->contextClass->setOverrideObject(data->expressionContext, oldOverride); + } else if (!watcher.wasDeleted()) { + ep->contextClass->setOverrideObject(expressionContext, oldOverride); } if (isUndefined) @@ -416,63 +494,134 @@ QScriptValue QDeclarativeExpressionPrivate::eval(QObject *secondaryScope, bool * // Handle exception if (scriptEngine->hasUncaughtException()) { - exceptionToError(scriptEngine, data->error); + if (!watcher.wasDeleted()) + QDeclarativeExpressionPrivate::exceptionToError(scriptEngine, error); + scriptEngine->clearExceptions(); return QScriptValue(); } else { - data->error = QDeclarativeError(); + if (!watcher.wasDeleted()) + error = QDeclarativeError(); + return svalue; } } -QScriptValue QDeclarativeExpressionPrivate::scriptValue(QObject *secondaryScope, bool *isUndefined) +void QDeclarativeQtScriptExpression::updateGuards(const QPODVector<QDeclarativeEnginePrivate::CapturedProperty> &properties) { - Q_Q(QDeclarativeExpression); - Q_ASSERT(q->engine()); + Q_ASSERT(guardObject); + Q_ASSERT(guardObjectNotifyIndex != -1); - if (data->expression.isEmpty()) - return QScriptValue(); + if (properties.count() != guardListLength) { + QDeclarativeNotifierEndpoint *newGuardList = new QDeclarativeNotifierEndpoint[properties.count()]; - QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(q->engine()); + for (int ii = 0; ii < qMin(guardListLength, properties.count()); ++ii) + guardList[ii].copyAndClear(newGuardList[ii]); - QDeclarativeExpression *lastCurrentExpression = ep->currentExpression; - bool lastCaptureProperties = ep->captureProperties; - QPODVector<QDeclarativeEnginePrivate::CapturedProperty> lastCapturedProperties; - ep->capturedProperties.copyAndClear(lastCapturedProperties); + delete [] guardList; + guardList = newGuardList; + guardListLength = properties.count(); + } - ep->currentExpression = q; - ep->captureProperties = data->trackChange; + bool outputWarningHeader = false; + bool noChanges = true; + for (int ii = 0; ii < properties.count(); ++ii) { + QDeclarativeNotifierEndpoint &guard = guardList[ii]; + const QDeclarativeEnginePrivate::CapturedProperty &property = properties.at(ii); - // This object might be deleted during the eval - QDeclarativeExpressionData *localData = data; - localData->addref(); + guard.target = guardObject; + guard.targetMethod = guardObjectNotifyIndex; - QScriptValue value = eval(secondaryScope, isUndefined); + if (property.notifier != 0) { - ep->currentExpression = lastCurrentExpression; - ep->captureProperties = lastCaptureProperties; + if (!noChanges && guard.isConnected(property.notifier)) { + // Nothing to do - // Check if we were deleted - if (localData->q) { - if ((!data->trackChange || !ep->capturedProperties.count()) && data->guardList) { - clearGuards(); - } else if(data->trackChange) { - updateGuards(ep->capturedProperties); + } else { + noChanges = false; + + bool existing = false; + for (int jj = 0; !existing && jj < ii; ++jj) + if (guardList[jj].isConnected(property.notifier)) + existing = true; + + if (existing) { + // duplicate + guard.disconnect(); + } else { + guard.connect(property.notifier); + } + } + + + } else if (property.notifyIndex != -1) { + + if (!noChanges && guard.isConnected(property.object, property.notifyIndex)) { + // Nothing to do + + } else { + noChanges = false; + + bool existing = false; + for (int jj = 0; !existing && jj < ii; ++jj) + if (guardList[jj].isConnected(property.object, property.notifyIndex)) + existing = true; + + if (existing) { + // duplicate + guard.disconnect(); + } else { + guard.connect(property.object, property.notifyIndex); + } + } + + } else { + if (!outputWarningHeader) { + outputWarningHeader = true; + qWarning() << "QDeclarativeExpression: Expression" << expression + << "depends on non-NOTIFYable properties:"; + } + + const QMetaObject *metaObj = property.object->metaObject(); + QMetaProperty metaProp = metaObj->property(property.coreIndex); + + qWarning().nospace() << " " << metaObj->className() << "::" << metaProp.name(); } } +} - localData->release(); +QScriptValue QDeclarativeExpressionPrivate::scriptValue(QObject *secondaryScope, bool *isUndefined) +{ + if (!expressionFunctionValid) { + QDeclarativeEngine *engine = context()->engine; + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); - lastCapturedProperties.copyAndClear(ep->capturedProperties); + QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine); - return value; + QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(scriptEngine); + expressionContext = ep->contextClass->newContext(context(), scopeObject); + scriptContext->pushScope(expressionContext); + scriptContext->pushScope(ep->globalClass->staticGlobalObject()); + + QDeclarativeRewrite::RewriteBinding rewriteBinding; + bool ok = true; + const QString code = rewriteBinding(expression, &ok); + if (ok) + expressionFunction = scriptEngine->evaluate(code, url, line); + + scriptEngine->popContext(); + expressionFunctionMode = ExplicitContext; + expressionFunctionValid = true; + } + + return QDeclarativeQtScriptExpression::scriptValue(secondaryScope, isUndefined); } QVariant QDeclarativeExpressionPrivate::value(QObject *secondaryScope, bool *isUndefined) { Q_Q(QDeclarativeExpression); - if (!data || !data->context() || !data->context()->isValid()) { + if (!context() || !context()->isValid()) { qWarning("QDeclarativeExpression: Attempted to evaluate an expression in an invalid context"); return QVariant(); } @@ -504,7 +653,7 @@ value changes. bool QDeclarativeExpression::notifyOnValueChanged() const { Q_D(const QDeclarativeExpression); - return d->data->trackChange; + return d->notifyOnValueChange(); } /*! @@ -526,7 +675,7 @@ bool QDeclarativeExpression::notifyOnValueChanged() const void QDeclarativeExpression::setNotifyOnValueChanged(bool notifyOnChange) { Q_D(QDeclarativeExpression); - d->data->trackChange = notifyOnChange; + d->setNotifyOnValueChange(notifyOnChange); } /*! @@ -536,7 +685,7 @@ void QDeclarativeExpression::setNotifyOnValueChanged(bool notifyOnChange) QString QDeclarativeExpression::sourceFile() const { Q_D(const QDeclarativeExpression); - return d->data->url; + return d->url; } /*! @@ -546,7 +695,7 @@ QString QDeclarativeExpression::sourceFile() const int QDeclarativeExpression::lineNumber() const { Q_D(const QDeclarativeExpression); - return d->data->line; + return d->line; } /*! @@ -556,8 +705,8 @@ int QDeclarativeExpression::lineNumber() const void QDeclarativeExpression::setSourceLocation(const QString &url, int line) { Q_D(QDeclarativeExpression); - d->data->url = url; - d->data->line = line; + d->url = url; + d->line = line; } /*! @@ -569,7 +718,7 @@ void QDeclarativeExpression::setSourceLocation(const QString &url, int line) QObject *QDeclarativeExpression::scopeObject() const { Q_D(const QDeclarativeExpression); - return d->data->me; + return d->scopeObject; } /*! @@ -581,7 +730,7 @@ QObject *QDeclarativeExpression::scopeObject() const bool QDeclarativeExpression::hasError() const { Q_D(const QDeclarativeExpression); - return d->data->error.isValid(); + return d->error.isValid(); } /*! @@ -593,7 +742,7 @@ bool QDeclarativeExpression::hasError() const void QDeclarativeExpression::clearError() { Q_D(QDeclarativeExpression); - d->data->error = QDeclarativeError(); + d->error = QDeclarativeError(); } /*! @@ -606,7 +755,7 @@ void QDeclarativeExpression::clearError() QDeclarativeError QDeclarativeExpression::error() const { Q_D(const QDeclarativeExpression); - return d->data->error; + return d->error; } /*! \internal */ @@ -615,98 +764,11 @@ void QDeclarativeExpressionPrivate::_q_notify() emitValueChanged(); } -void QDeclarativeExpressionPrivate::clearGuards() +void QDeclarativeQtScriptExpression::clearGuards() { - delete [] data->guardList; - data->guardList = 0; - data->guardListLength = 0; -} - -void QDeclarativeExpressionPrivate::updateGuards(const QPODVector<QDeclarativeEnginePrivate::CapturedProperty> &properties) -{ - Q_Q(QDeclarativeExpression); - - static int notifyIdx = -1; - if (notifyIdx == -1) - notifyIdx = QDeclarativeExpression::staticMetaObject.indexOfMethod("_q_notify()"); - - if (properties.count() != data->guardListLength) { - QDeclarativeNotifierEndpoint *newGuardList = - new QDeclarativeNotifierEndpoint[properties.count()]; - - for (int ii = 0; ii < qMin(data->guardListLength, properties.count()); ++ii) - data->guardList[ii].copyAndClear(newGuardList[ii]); - - delete [] data->guardList; - data->guardList = newGuardList; - data->guardListLength = properties.count(); - } - - bool outputWarningHeader = false; - bool noChanges = true; - for (int ii = 0; ii < properties.count(); ++ii) { - QDeclarativeNotifierEndpoint &guard = data->guardList[ii]; - const QDeclarativeEnginePrivate::CapturedProperty &property = properties.at(ii); - - guard.target = q; - guard.targetMethod = notifyIdx; - - if (property.notifier != 0) { - - if (!noChanges && guard.isConnected(property.notifier)) { - // Nothing to do - - } else { - noChanges = false; - - bool existing = false; - for (int jj = 0; !existing && jj < ii; ++jj) - if (data->guardList[jj].isConnected(property.notifier)) - existing = true; - - if (existing) { - // duplicate - guard.disconnect(); - } else { - guard.connect(property.notifier); - } - } - - - } else if (property.notifyIndex != -1) { - - if (!noChanges && guard.isConnected(property.object, property.notifyIndex)) { - // Nothing to do - - } else { - noChanges = false; - - bool existing = false; - for (int jj = 0; !existing && jj < ii; ++jj) - if (data->guardList[jj].isConnected(property.object, property.notifyIndex)) - existing = true; - - if (existing) { - // duplicate - guard.disconnect(); - } else { - guard.connect(property.object, property.notifyIndex); - } - } - - } else { - if (!outputWarningHeader) { - outputWarningHeader = true; - qWarning() << "QDeclarativeExpression: Expression" << q->expression() - << "depends on non-NOTIFYable properties:"; - } - - const QMetaObject *metaObj = property.object->metaObject(); - QMetaProperty metaProp = metaObj->property(property.coreIndex); - - qWarning().nospace() << " " << metaObj->className() << "::" << metaProp.name(); - } - } + delete [] guardList; + guardList = 0; + guardListLength = 0; } /*! diff --git a/src/declarative/qml/qdeclarativeexpression_p.h b/src/declarative/qml/qdeclarativeexpression_p.h index 4ff3162..b629e20 100644 --- a/src/declarative/qml/qdeclarativeexpression_p.h +++ b/src/declarative/qml/qdeclarativeexpression_p.h @@ -107,56 +107,73 @@ private: QDeclarativeDelayedError **prevError; }; -class QDeclarativeExpressionData : public QDeclarativeAbstractExpression, public QDeclarativeDelayedError, public QDeclarativeRefCount +class QDeclarativeQtScriptExpression : public QDeclarativeAbstractExpression, + public QDeclarativeDelayedError { public: - QDeclarativeExpressionData(); - virtual ~QDeclarativeExpressionData(); + enum Mode { SharedContext, ExplicitContext }; - QDeclarativeExpressionPrivate *q; + QDeclarativeQtScriptExpression(); + virtual ~QDeclarativeQtScriptExpression(); QDeclarativeRefCount *dataRef; + QString expression; - bool expressionFunctionValid:1; - bool expressionRewritten:1; + + Mode expressionFunctionMode; QScriptValue expressionFunction; - QScriptValue expressionContext; - QObject *me; - bool trackChange; + QScriptValue expressionContext; // Only used in ExplicitContext + QObject *scopeObject; // Only used in SharedContext - bool isShared; + bool notifyOnValueChange() const; + void setNotifyOnValueChange(bool); + void resetNotifyOnChange(); + void setNotifyObject(QObject *, int ); - QString url; // This is a QString for a reason. QUrls are slooooooow... - int line; + QScriptValue scriptValue(QObject *secondaryScope, bool *isUndefined); + + class DeleteWatcher { + public: + inline DeleteWatcher(QDeclarativeQtScriptExpression *data); + inline ~DeleteWatcher(); + inline bool wasDeleted() const; + private: + bool *m_wasDeleted; + bool m_wasDeletedStorage; + QDeclarativeQtScriptExpression *m_d; + }; + +private: + void clearGuards(); + QScriptValue eval(QObject *secondaryScope, bool *isUndefined); + void updateGuards(const QPODVector<QDeclarativeEnginePrivate::CapturedProperty> &properties); + + bool trackChange; QDeclarativeNotifierEndpoint *guardList; int guardListLength; + + QObject *guardObject; + int guardObjectNotifyIndex; + bool *deleted; }; class QDeclarativeExpression; class QString; -class QDeclarativeExpressionPrivate : public QObjectPrivate +class QDeclarativeExpressionPrivate : public QObjectPrivate, public QDeclarativeQtScriptExpression { Q_DECLARE_PUBLIC(QDeclarativeExpression) public: QDeclarativeExpressionPrivate(); - QDeclarativeExpressionPrivate(QDeclarativeExpressionData *); ~QDeclarativeExpressionPrivate(); void init(QDeclarativeContextData *, const QString &, QObject *); void init(QDeclarativeContextData *, void *, QDeclarativeRefCount *, QObject *, const QString &, int); - QDeclarativeExpressionData *data; - QVariant value(QObject *secondaryScope = 0, bool *isUndefined = 0); QScriptValue scriptValue(QObject *secondaryScope = 0, bool *isUndefined = 0); - QScriptValue eval(QObject *secondaryScope, bool *isUndefined = 0); - - void updateGuards(const QPODVector<QDeclarativeEnginePrivate::CapturedProperty> &properties); - void clearGuards(); - static QDeclarativeExpressionPrivate *get(QDeclarativeExpression *expr) { return static_cast<QDeclarativeExpressionPrivate *>(QObjectPrivate::get(expr)); } @@ -172,8 +189,32 @@ public: int, QScriptValue *); static QScriptValue evalInObjectScope(QDeclarativeContextData *, QObject *, const QScriptProgram &, QScriptValue *); + + bool expressionFunctionValid:1; + + QString url; // This is a QString for a reason. QUrls are slooooooow... + int line; }; +QDeclarativeQtScriptExpression::DeleteWatcher::DeleteWatcher(QDeclarativeQtScriptExpression *data) +: m_wasDeletedStorage(false), m_d(data) +{ + if (!m_d->deleted) + m_d->deleted = &m_wasDeletedStorage; + m_wasDeleted = m_d->deleted; +} + +QDeclarativeQtScriptExpression::DeleteWatcher::~DeleteWatcher() +{ + if (false == *m_wasDeleted && m_wasDeleted == m_d->deleted) + m_d->deleted = 0; +} + +bool QDeclarativeQtScriptExpression::DeleteWatcher::wasDeleted() const +{ + return *m_wasDeleted; +} + QT_END_NAMESPACE #endif // QDECLARATIVEEXPRESSION_P_H diff --git a/src/declarative/qml/qdeclarativeextensionplugin.cpp b/src/declarative/qml/qdeclarativeextensionplugin.cpp index c2e8300..448fde2 100644 --- a/src/declarative/qml/qdeclarativeextensionplugin.cpp +++ b/src/declarative/qml/qdeclarativeextensionplugin.cpp @@ -50,27 +50,78 @@ QT_BEGIN_NAMESPACE \ingroup plugins - QDeclarativeExtensionPlugin is a plugin interface that makes it - possible to offer extensions that can be loaded dynamically into - applications using the QDeclarativeEngine class. - - Writing a QML extension plugin is achieved by subclassing this - base class, reimplementing the pure virtual registerTypes() - function, and exporting the class using the Q_EXPORT_PLUGIN2() - macro. + QDeclarativeExtensionPlugin is a plugin interface that makes it possible to + create QML extensions that can be loaded dynamically into QML applications. + These extensions allow custom QML types to be made available to the QML engine. + + To write a QML extension plugin: + + \list + \o Subclass QDeclarativeExtensionPlugin, implement registerTypes() method + to register types using qmlRegisterType(), and export the class using the Q_EXPORT_PLUGIN2() macro + \o Write an appropriate project file for the plugin + \o Create a \l{The qmldir file}{qmldir file} to describe the plugin + \endlist QML extension plugins can be used to provide either application-specific or library-like plugins. Library plugins should limit themselves to registering types, as any manipulation of the engine's root context may cause conflicts or other issues in the library user's code. - See \l {Tutorial: Writing QML extensions with C++} for details on creating - QML extensions, including how to build a plugin with with QDeclarativeExtensionPlugin. - For a simple overview, see the \l{declarative/cppextensions/plugins}{plugins} example. - - Also see \l {How to Create Qt Plugins} for general Qt plugin documentation. - \sa QDeclarativeEngine::importPlugin() + \section1 An example + + Suppose there is a new \c TimeModel C++ class that should be made available + as a new QML element. It provides the current time through \c hour and \c minute + properties, like this: + + \snippet examples/declarative/cppextensions/plugins/plugin.cpp 0 + \dots + + To make this class available as a QML type, create a plugin that registers + this type using qmlRegisterType(). For this example the plugin + module will be named \c com.nokia.TimeExample (as defined in the project + file further below). + + \snippet examples/declarative/cppextensions/plugins/plugin.cpp plugin + \codeline + \snippet examples/declarative/cppextensions/plugins/plugin.cpp export + + This registers the \c TimeModel class with the 1.0 version of this + plugin library, as a QML type called \c Time. The Q_ASSERT statement + ensures the module is imported correctly by any QML components that use this plugin. + + The project file defines the project as a plugin library and specifies + it should be built into the \c com/nokia/TimeExample directory: + + \code + TEMPLATE = lib + CONFIG += qt plugin + QT += declarative + + DESTDIR = com/nokia/TimeExample + TARGET = qmlqtimeexampleplugin + ... + \endcode + + Finally, a \l{The qmldir file}{qmldir file} is required in the \c com/nokia/TimeExample directory + that describes the plugin. This directory includes a \c Clock.qml file that + should be bundled with the plugin, so it needs to be specified in the \c qmldir + file: + + \quotefile examples/declarative/cppextensions/plugins/com/nokia/TimeExample/qmldir + + Once the project is built and installed, the new \c Time element can be + used by any QML component that imports the \c com.nokia.TimeExample module: + + \snippet examples/declarative/cppextensions/plugins/plugins.qml 0 + + The full source code is available in the \l {declarative/cppextensions/plugins}{plugins example}. + + The \l {Tutorial: Writing QML extensions with C++} also contains a chapter + on creating QML plugins. + + \sa QDeclarativeEngine::importPlugin(), {How to Create Qt Plugins} */ /*! @@ -97,7 +148,7 @@ QDeclarativeExtensionPlugin::QDeclarativeExtensionPlugin(QObject *parent) } /*! - Destroys the plugin. + \internal */ QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin() { diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index e917cf6..8d81b34 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -409,7 +409,8 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp QString localFileOrQrc = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(importUrl); if (!localFileOrQrc.isEmpty()) { QString dir = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(base.resolved(QUrl(uri))); - if (dir.isEmpty() || !QDir().exists(dir)) { + QFileInfo dirinfo(dir); + if (dir.isEmpty() || !dirinfo.exists() || !dirinfo.isDir()) { if (errorString) *errorString = QDeclarativeImportDatabase::tr("\"%1\": no such directory").arg(uri_arg); return false; // local import dirs must exist @@ -425,7 +426,8 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp if (prefix.isEmpty()) { // directory must at least exist for valid import QString localFileOrQrc = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(base.resolved(QUrl(uri))); - if (localFileOrQrc.isEmpty() || !QDir().exists(localFileOrQrc)) { + QFileInfo dirinfo(localFileOrQrc); + if (localFileOrQrc.isEmpty() || !dirinfo.exists() || !dirinfo.isDir()) { if (errorString) { if (localFileOrQrc.isEmpty()) *errorString = QDeclarativeImportDatabase::tr("import \"%1\" has no qmldir and no namespace").arg(uri); diff --git a/src/declarative/qml/qdeclarativelist.cpp b/src/declarative/qml/qdeclarativelist.cpp index 7c89672..9598d98 100644 --- a/src/declarative/qml/qdeclarativelist.cpp +++ b/src/declarative/qml/qdeclarativelist.cpp @@ -306,7 +306,7 @@ int QDeclarativeListReference::count() const /*! \class QDeclarativeListProperty \since 4.7 -\brief The QDeclarativeListProperty class allows applications to explose list-like +\brief The QDeclarativeListProperty class allows applications to expose list-like properties to QML. QML has many list properties, where more than one object value can be assigned. diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index c32cab6..a5c878f 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ +#include <QtDeclarative/qdeclarativeprivate.h> #include "private/qdeclarativemetatype_p.h" #include "private/qdeclarativeproxymetaobject_p.h" @@ -485,17 +486,17 @@ int QDeclarativeType::index() const return d->m_index; } -int QDeclarativePrivate::registerAutoParentFunction(AutoParentFunction function) +int registerAutoParentFunction(QDeclarativePrivate::RegisterAutoParent &autoparent) { QWriteLocker lock(metaTypeDataLock()); QDeclarativeMetaTypeData *data = metaTypeData(); - data->parentFunctions.append(function); + data->parentFunctions.append(autoparent.function); return data->parentFunctions.count() - 1; } -int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterInterface &interface) +int registerInterface(const QDeclarativePrivate::RegisterInterface &interface) { if (interface.version > 0) qFatal("qmlRegisterType(): Cannot mix incompatible QML versions."); @@ -524,7 +525,7 @@ int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterInterfa return index; } -int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &type) +int registerType(const QDeclarativePrivate::RegisterType &type) { if (type.elementName) { for (int ii = 0; type.elementName[ii]; ++ii) { @@ -576,6 +577,22 @@ int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &t } /* +This method is "over generalized" to allow us to (potentially) register more types of things in +the future without adding exported symbols. +*/ +int QDeclarativePrivate::qmlregister(RegistrationType type, void *data) +{ + if (type == TypeRegistration) { + return registerType(*reinterpret_cast<RegisterType *>(data)); + } else if (type == InterfaceRegistration) { + return registerInterface(*reinterpret_cast<RegisterInterface *>(data)); + } else if (type == AutoParentRegistration) { + return registerAutoParentFunction(*reinterpret_cast<RegisterAutoParent *>(data)); + } + return -1; +} + +/* Have any types been registered for \a module with at least versionMajor.versionMinor, and types for \a module with at most versionMajor.versionMinor. @@ -1152,7 +1169,7 @@ bool QDeclarativeMetaType::copy(int type, void *data, const void *copy) *static_cast<float *>(data) = float(0); return true; case QMetaType::Double: - *static_cast<double *>(data) = double(); + *static_cast<double *>(data) = double(0); return true; case QMetaType::QChar: *static_cast<NS(QChar) *>(data) = NS(QChar)(); diff --git a/src/declarative/qml/qdeclarativemetatype_p.h b/src/declarative/qml/qdeclarativemetatype_p.h index 4c98b6f..f410547 100644 --- a/src/declarative/qml/qdeclarativemetatype_p.h +++ b/src/declarative/qml/qdeclarativemetatype_p.h @@ -63,6 +63,8 @@ QT_BEGIN_NAMESPACE class QDeclarativeType; class QDeclarativeCustomParser; +class QDeclarativeTypePrivate; + class Q_DECLARATIVE_EXPORT QDeclarativeMetaType { public: @@ -103,7 +105,6 @@ public: static QList<QDeclarativePrivate::AutoParentFunction> parentFunctions(); }; -class QDeclarativeTypePrivate; class Q_DECLARATIVE_EXPORT QDeclarativeType { public: @@ -144,11 +145,12 @@ public: int propertyValueInterceptorCast() const; int index() const; + private: friend class QDeclarativeTypePrivate; friend struct QDeclarativeMetaTypeData; - friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterInterface &); - friend int QDeclarativePrivate::registerType(const QDeclarativePrivate::RegisterType &); + friend int registerType(const QDeclarativePrivate::RegisterType &); + friend int registerInterface(const QDeclarativePrivate::RegisterInterface &); QDeclarativeType(int, const QDeclarativePrivate::RegisterInterface &); QDeclarativeType(int, const QDeclarativePrivate::RegisterType &); ~QDeclarativeType(); diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h index cd859fe..b2d7451 100644 --- a/src/declarative/qml/qdeclarativeprivate.h +++ b/src/declarative/qml/qdeclarativeprivate.h @@ -42,6 +42,17 @@ #ifndef QDECLARATIVEPRIVATE_H #define QDECLARATIVEPRIVATE_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + #include <QtCore/qglobal.h> #include <QtCore/qvariant.h> #ifndef Q_OS_WIN @@ -177,6 +188,9 @@ namespace QDeclarativePrivate return AttachedPropertySelector<T, has_attachedPropertiesMethod<T, has_attachedPropertiesMember<T>::value>::value>::metaObject(); } + enum AutoParentResult { Parented, IncompatibleObject, IncompatibleParent }; + typedef AutoParentResult (*AutoParentFunction)(QObject *object, QObject *parent); + struct RegisterType { int version; @@ -214,13 +228,19 @@ namespace QDeclarativePrivate const char *iid; }; - enum AutoParentResult { Parented, IncompatibleObject, IncompatibleParent }; - typedef AutoParentResult (*AutoParentFunction)(QObject *object, QObject *parent); + struct RegisterAutoParent { + int version; - int Q_DECLARATIVE_EXPORT registerAutoParentFunction(AutoParentFunction); - int Q_DECLARATIVE_EXPORT registerType(const RegisterType &); - int Q_DECLARATIVE_EXPORT registerType(const RegisterInterface &); + AutoParentFunction function; + }; + + enum RegistrationType { + TypeRegistration = 0, + InterfaceRegistration = 1, + AutoParentRegistration = 2 + }; + int Q_DECLARATIVE_EXPORT qmlregister(RegistrationType, void *); } QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp index 219d759..4d98ca8 100644 --- a/src/declarative/qml/qdeclarativescriptparser.cpp +++ b/src/declarative/qml/qdeclarativescriptparser.cpp @@ -896,6 +896,14 @@ QList<QDeclarativeError> QDeclarativeScriptParser::errors() const return _errors; } +static void replaceWithSpace(QString &str, int idx, int n) +{ + QChar *data = str.data() + idx; + QChar space(' '); + for (int ii = 0; ii < n; ++ii) + *data++ = space; +} + /* Searches for ".pragma <value>" declarations within \a script. Currently supported pragmas are: @@ -905,83 +913,48 @@ QDeclarativeParser::Object::ScriptBlock::Pragmas QDeclarativeScriptParser::extra { QDeclarativeParser::Object::ScriptBlock::Pragmas rv = QDeclarativeParser::Object::ScriptBlock::None; - const QChar forwardSlash(QLatin1Char('/')); - const QChar star(QLatin1Char('*')); - const QChar newline(QLatin1Char('\n')); - const QChar dot(QLatin1Char('.')); - const QChar semicolon(QLatin1Char(';')); - const QChar space(QLatin1Char(' ')); - const QString pragma(QLatin1String(".pragma ")); - - const QChar *pragmaData = pragma.constData(); - - const QChar *data = script.constData(); - const int length = script.count(); - for (int ii = 0; ii < length; ++ii) { - const QChar &c = data[ii]; - - if (c.isSpace()) - continue; - - if (c == forwardSlash) { - ++ii; - if (ii >= length) - return rv; - - const QChar &c = data[ii]; - if (c == forwardSlash) { - // Find next newline - while (ii < length && data[++ii] != newline) {}; - } else if (c == star) { - // Find next star - while (true) { - while (ii < length && data[++ii] != star) {}; - if (ii + 1 >= length) - return rv; - - if (data[ii + 1] == forwardSlash) { - ++ii; - break; - } - } - } else { - return rv; - } - } else if (c == dot) { - // Could be a pragma! - if (ii + pragma.length() >= length || - 0 != ::memcmp(data + ii, pragmaData, sizeof(QChar) * pragma.length())) - return rv; + const QString pragma(QLatin1String("pragma")); + const QString library(QLatin1String("library")); - int pragmaStatementIdx = ii; + QDeclarativeJS::Lexer l(0); + l.setCode(script, 0); - ii += pragma.length(); + int token = l.lex(); - while (ii < length && data[ii].isSpace()) { ++ii; } + while (true) { + if (token != QDeclarativeJSGrammar::T_DOT) + return rv; - int startIdx = ii; + int startOffset = l.tokenOffset(); + int startLine = l.currentLineNo(); - while (ii < length && data[ii].isLetter()) { ++ii; } + token = l.lex(); - int endIdx = ii; + if (token != QDeclarativeJSGrammar::T_IDENTIFIER || + l.currentLineNo() != startLine || + script.mid(l.tokenOffset(), l.tokenLength()) != pragma) + return rv; - if (ii != length && data[ii] != forwardSlash && !data[ii].isSpace() && data[ii] != semicolon) - return rv; + token = l.lex(); - QString p(data + startIdx, endIdx - startIdx); + if (token != QDeclarativeJSGrammar::T_IDENTIFIER || + l.currentLineNo() != startLine) + return rv; - if (p == QLatin1String("library")) - rv |= QDeclarativeParser::Object::ScriptBlock::Shared; - else - return rv; + QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength()); + int endOffset = l.tokenLength() + l.tokenOffset(); - for (int jj = pragmaStatementIdx; jj < endIdx; ++jj) script[jj] = space; + token = l.lex(); + if (l.currentLineNo() == startLine) + return rv; + if (pragmaValue == QLatin1String("library")) { + rv |= QDeclarativeParser::Object::ScriptBlock::Shared; + replaceWithSpace(script, startOffset, endOffset - startOffset); } else { return rv; } } - return rv; } diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp index 61e550a..98e9a58 100644 --- a/src/declarative/qml/qdeclarativevaluetype.cpp +++ b/src/declarative/qml/qdeclarativevaluetype.cpp @@ -74,7 +74,7 @@ int qmlRegisterValueTypeEnums(const char *qmlName) 0 }; - return QDeclarativePrivate::registerType(type); + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } QDeclarativeValueTypeFactory::QDeclarativeValueTypeFactory() diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index e558784..1a223d5 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -142,8 +142,8 @@ bool QDeclarativeAbstractAnimation::isRunning() const return d->running; } -// the behavior connects the animation to this slot -void QDeclarativeAbstractAnimation::behaviorControlRunningChanged(bool running) +// the behavior calls this function +void QDeclarativeAbstractAnimation::notifyRunningChanged(bool running) { Q_D(QDeclarativeAbstractAnimation); if (d->disableUserControl && d->running != running) { @@ -632,17 +632,18 @@ QAbstractAnimation *QDeclarativePauseAnimation::qtAnimation() \qmlclass ColorAnimation QDeclarativeColorAnimation \since 4.7 \inherits PropertyAnimation - \brief The ColorAnimation element allows you to animate color changes. + \brief The ColorAnimation element animates changes in color values. - ColorAnimation defines an animation to be applied when a color value - changes. + ColorAnimation is a specialized PropertyAnimation that defines an + animation to be applied when a color value changes. Here is a ColorAnimation applied to the \c color property of a \l Rectangle - as a property value source: + as a property value source. It animates the \c color property's value from + its current value to a value of "red", over 1000 milliseconds: \snippet doc/src/snippets/declarative/coloranimation.qml 0 - Like any other animation element, a NumberAnimation can be applied in a + Like any other animation element, a ColorAnimation can be applied in a number of ways, including transitions, behaviors and property value sources. The \l PropertyAnimation documentation shows a variety of methods for creating animations. @@ -674,11 +675,12 @@ QDeclarativeColorAnimation::~QDeclarativeColorAnimation() /*! \qmlproperty color ColorAnimation::from - This property holds the starting color. + This property holds the color value at which the animation should begin. For example, the following animation is not applied until a color value has reached "#c0c0c0": + \qml Item { states: [ ... ] @@ -686,6 +688,11 @@ QDeclarativeColorAnimation::~QDeclarativeColorAnimation() NumberAnimation { from: "#c0c0c0"; duration: 2000 } } } + \endqml + + If this value is not set and the ColorAnimation is defined within + a \l Transition, it defaults to the value defined in the starting + state of the \l Transition. */ QColor QDeclarativeColorAnimation::from() const { @@ -700,7 +707,12 @@ void QDeclarativeColorAnimation::setFrom(const QColor &f) /*! \qmlproperty color ColorAnimation::to - This property holds the ending color. + + This property holds the color value at which the animation should end. + + If this value is not set and the ColorAnimation is defined within + a \l Transition or \l Behavior, it defaults to the value defined in the end + state of the \l Transition or \l Behavior. */ QColor QDeclarativeColorAnimation::to() const { @@ -869,18 +881,27 @@ QAbstractAnimation *QDeclarativeScriptAction::qtAnimation() \inherits Animation \brief The PropertyAction element allows immediate property changes during animation. - Explicitly set \c theimage.smooth=true during a transition: + PropertyAction is used to specify an immediate property change + during an animation. The property change is not animated. + + For example, to explicitly set \c {theImage.smooth = true} during a \l Transition: \code - PropertyAction { target: theimage; property: "smooth"; value: true } + transitions: Transition { + ... + PropertyAction { target: theImage; property: "smooth"; value: true } + ... + } \endcode - Set \c thewebview.url to the value set for the destination state: + Or, to set \c theWebView.url to the value set for the destination state: \code - PropertyAction { target: thewebview; property: "url" } + transitions: Transition { + ... + PropertyAction { target: theWebView; property: "url" } + ... + } \endcode - The PropertyAction is immediate - - the target property is not animated to the selected value in any way. \sa QtDeclarative */ @@ -906,14 +927,6 @@ void QDeclarativePropertyActionPrivate::init() QDeclarative_setParent_noEvent(spa, q); } -/*! - \qmlproperty Object PropertyAction::target - This property holds an explicit target object to animate. - - The exact effect of the \c target property depends on how the animation - is being used. Refer to the \l {QML Animation} documentation for details. -*/ - QObject *QDeclarativePropertyAction::target() const { Q_D(const QDeclarativePropertyAction); @@ -945,12 +958,12 @@ void QDeclarativePropertyAction::setProperty(const QString &n) } /*! + \qmlproperty Object PropertyAction::target \qmlproperty list<Object> PropertyAction::targets \qmlproperty string PropertyAction::property \qmlproperty string PropertyAction::properties - \qmlproperty Object PropertyAction::target - These properties are used as a set to determine which properties should be + These properties determine the items and their properties that are affected by this action. The details of how these properties are interpreted in different situations @@ -982,7 +995,7 @@ QDeclarativeListProperty<QObject> QDeclarativePropertyAction::targets() /*! \qmlproperty list<Object> PropertyAction::exclude - This property holds the objects not to be affected by this animation. + This property holds the objects that should not be affected by this action. \sa targets */ @@ -1117,13 +1130,14 @@ void QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions, \qmlclass NumberAnimation QDeclarativeNumberAnimation \since 4.7 \inherits PropertyAnimation - \brief The NumberAnimation element allows you to animate changes in properties of type qreal. + \brief The NumberAnimation element animates changes in qreal-type values. - NumberAnimation defines an animation to be applied when a numerical value - changes. + NumberAnimation is a specialized PropertyAnimation that defines an + animation to be applied when a numerical value changes. Here is a NumberAnimation applied to the \c x property of a \l Rectangle - as a property value source: + as a property value source. It animates the \c x value from its current + value to a value of 50, over 1000 milliseconds: \snippet doc/src/snippets/declarative/numberanimation.qml 0 @@ -1174,6 +1188,7 @@ void QDeclarativeNumberAnimation::init() For example, the following animation is not applied until the \c x value has reached 100: + \qml Item { states: [ ... ] @@ -1181,8 +1196,10 @@ void QDeclarativeNumberAnimation::init() NumberAnimation { properties: "x"; from: 100; duration: 200 } } } + \endqml - If this value is not set, it defaults to the value defined in the start + If this value is not set and the NumberAnimation is defined within + a \l Transition, it defaults to the value defined in the start state of the \l Transition. */ @@ -1201,7 +1218,8 @@ void QDeclarativeNumberAnimation::setFrom(qreal f) \qmlproperty real NumberAnimation::to This property holds the ending number value. - If this value is not set, it defaults to the value defined in the end + If this value is not set and the NumberAnimation is defined within + a \l Transition or \l Behavior, it defaults to the value defined in the end state of the \l Transition or \l Behavior. */ qreal QDeclarativeNumberAnimation::to() const @@ -1221,7 +1239,10 @@ void QDeclarativeNumberAnimation::setTo(qreal t) \qmlclass Vector3dAnimation QDeclarativeVector3dAnimation \since 4.7 \inherits PropertyAnimation - \brief The Vector3dAnimation element allows you to animate changes in properties of type QVector3d. + \brief The Vector3dAnimation element animates changes in QVector3d values. + + Vector3dAnimation is a specialized PropertyAnimation that defines an + animation to be applied when a Vector3d value changes. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -1286,31 +1307,32 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) \qmlclass RotationAnimation QDeclarativeRotationAnimation \since 4.7 \inherits PropertyAnimation - \brief The RotationAnimation element allows you to animate rotations. + \brief The RotationAnimation element animates changes in rotation values. RotationAnimation is a specialized PropertyAnimation that gives control - over the direction of rotation. By default, it will rotate in the direction + over the direction of rotation during an animation. + + By default, it rotates in the direction of the numerical change; a rotation from 0 to 240 will rotate 220 degrees clockwise, while a rotation from 240 to 0 will rotate 220 degrees - counterclockwise. + counterclockwise. The \l direction property can be set to specify the + direction in which the rotation should occur. + + In the following example we use RotationAnimation to animate the rotation + between states via the shortest path: - When used in a transition RotationAnimation will rotate all + \snippet doc/src/snippets/declarative/rotationanimation.qml 0 + + Notice the RotationAnimation did not need to set a \l {RotationAnimation::}{target} + value. As a convenience, when used in a transition, RotationAnimation will rotate all properties named "rotation" or "angle". You can override this by providing your own properties via \l {PropertyAnimation::properties}{properties} or \l {PropertyAnimation::property}{property}. - In the following example we use RotationAnimation to animate the rotation - between states via the shortest path. - \qml - states: { - State { name: "180"; PropertyChanges { target: myItem; rotation: 180 } } - State { name: "90"; PropertyChanges { target: myItem; rotation: 90 } } - State { name: "-90"; PropertyChanges { target: myItem; rotation: -90 } } - } - transition: Transition { - RotationAnimation { direction: RotationAnimation.Shortest } - } - \endqml + Like any other animation element, a RotationAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l PropertyAnimation documentation shows a variety of methods + for creating animations. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -1377,6 +1399,7 @@ QDeclarativeRotationAnimation::~QDeclarativeRotationAnimation() For example, the following animation is not applied until the \c angle value has reached 100: + \qml Item { states: [ ... ] @@ -1384,6 +1407,7 @@ QDeclarativeRotationAnimation::~QDeclarativeRotationAnimation() RotationAnimation { properties: "angle"; from: 100; duration: 2000 } } } + \endqml If this value is not set, it defaults to the value defined in the start state of the \l Transition. @@ -1419,7 +1443,7 @@ void QDeclarativeRotationAnimation::setTo(qreal t) /*! \qmlproperty enumeration RotationAnimation::direction - The direction in which to rotate. + This property holds the direction of the rotation. Possible values are: @@ -1512,19 +1536,26 @@ QDeclarativeListProperty<QDeclarativeAbstractAnimation> QDeclarativeAnimationGro \qmlclass SequentialAnimation QDeclarativeSequentialAnimation \since 4.7 \inherits Animation - \brief The SequentialAnimation element allows you to run animations sequentially. + \brief The SequentialAnimation element allows animations to be run sequentially. - Animations controlled in SequentialAnimation will be run one after the other. + The SequentialAnimation and ParallelAnimation elements allow multiple + animations to be run together. Animations defined in a SequentialAnimation + are run one after the other, while animations defined in a ParallelAnimation + are run at the same time. - The following example chains two numeric animations together. The \c MyItem - object will animate from its current x position to 100, and then back to 0. + The following example runs two number animations in a sequence. The \l Rectangle + animates to a \c x position of 50, then to a \c y position of 50. - \code - SequentialAnimation { - NumberAnimation { target: MyItem; property: "x"; to: 100 } - NumberAnimation { target: MyItem; property: "x"; to: 0 } - } - \endcode + \snippet doc/src/snippets/declarative/sequentialanimation.qml 0 + + Animations defined within a \l Transition are automatically run in parallel, + so SequentialAnimation can be used to enclose the animations in a \l Transition + if this is the preferred behavior. + + Like any other animation element, a SequentialAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l PropertyAnimation documentation shows a variety of methods + for creating animations. \sa ParallelAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -1574,19 +1605,22 @@ void QDeclarativeSequentialAnimation::transition(QDeclarativeStateActions &actio \qmlclass ParallelAnimation QDeclarativeParallelAnimation \since 4.7 \inherits Animation - \brief The ParallelAnimation element allows you to run animations in parallel. + \brief The ParallelAnimation element allows animations to be run in parallel. - Animations contained in ParallelAnimation will be run at the same time. + The SequentialAnimation and ParallelAnimation elements allow multiple + animations to be run together. Animations defined in a SequentialAnimation + are run one after the other, while animations defined in a ParallelAnimation + are run at the same time. - The following animation demonstrates animating the \c MyItem item - to (100,100) by animating the x and y properties in parallel. + The following animation runs two number animations in parallel. The \l Rectangle + moves to (50,50) by animating its \c x and \c y properties at the same time. - \code - ParallelAnimation { - NumberAnimation { target: MyItem; property: "x"; to: 100 } - NumberAnimation { target: MyItem; property: "y"; to: 100 } - } - \endcode + \snippet doc/src/snippets/declarative/parallelanimation.qml 0 + + Like any other animation element, a ParallelAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l PropertyAnimation documentation shows a variety of methods + for creating animations. \sa SequentialAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -1685,7 +1719,7 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int \qmlclass PropertyAnimation QDeclarativePropertyAnimation \since 4.7 \inherits Animation - \brief The PropertyAnimation element allows you to animate property changes. + \brief The PropertyAnimation element animates changes in property values. PropertyAnimation provides a way to animate changes to a property's value. @@ -1736,6 +1770,9 @@ void QDeclarativePropertyAnimationPrivate::convertVariant(QVariant &variant, int different. For more information see the individual property documentation, as well as the \l{QML Animation} introduction. + Note that PropertyAnimation inherits the abstract \l Animation element. + This includes additional properties and methods for controlling the animation. + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -2034,17 +2071,16 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t) QEasingCurve QDeclarativePropertyAnimation::easing() const { Q_D(const QDeclarativePropertyAnimation); - return d->easing; + return d->va->easingCurve(); } void QDeclarativePropertyAnimation::setEasing(const QEasingCurve &e) { Q_D(QDeclarativePropertyAnimation); - if (d->easing == e) + if (d->va->easingCurve() == e) return; - d->easing = e; - d->va->setEasingCurve(d->easing); + d->va->setEasingCurve(e); emit easingChanged(e); } @@ -2350,43 +2386,30 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions \qmlclass ParentAnimation QDeclarativeParentAnimation \since 4.7 \inherits Animation - \brief The ParentAnimation element allows you to animate parent changes. + \brief The ParentAnimation element animates changes in parent values. - ParentAnimation is used in conjunction with NumberAnimation to smoothly - animate changing an item's parent. In the following example, - ParentAnimation wraps a NumberAnimation which animates from the - current position in the old parent to the new position in the new - parent. + ParentAnimation defines an animation to applied when a ParentChange + occurs. This allows parent changes to be smoothly animated. - \qml - ... - State { - //reparent myItem to newParent. myItem's final location - //should be 10,10 in newParent. - ParentChange { - target: myItem - parent: newParent - x: 10; y: 10 - } - } - ... - Transition { - //smoothly reparent myItem and move into new position - ParentAnimation { - target: theItem - NumberAnimation { properties: "x,y" } - } - } - \endqml + For example, the following ParentChange changes \c blueRect to become + a child of \c redRect when it is clicked. The inclusion of the + ParentAnimation, which defines a NumberAnimation to be applied during + the transition, ensures the item animates smoothly as it moves to + its new parent: + + \snippet doc/src/snippets/declarative/parentanimation.qml 0 - ParentAnimation can wrap any number of animations -- those animations will - be run in parallel (like those in a ParallelAnimation group). + A ParentAnimation can contain any number of animations. These animations will + be run in parallel; to run them sequentially, define them within a + SequentialAnimation. - In some cases, such as reparenting between items with clipping, it's useful - to animate the parent change via another item with no clipping. + In some cases, such as when reparenting between items with clipping enabled, it is useful + to animate the parent change via another item that does not have clipping + enabled. Such an item can be set using the \l via property. - When used in a transition, ParentAnimation will by default animate - all ParentChanges. + By default, when used in a transition, ParentAnimation animates all parent + changes. This can be overriden by setting a specific target item using the + \l target property. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -2423,8 +2446,8 @@ QDeclarativeParentAnimation::~QDeclarativeParentAnimation() \qmlproperty Item ParentAnimation::target The item to reparent. - When used in a transition, if no target is specified all - ParentChanges will be animated by the ParentAnimation. + When used in a transition, if no target is specified, all + ParentChange occurrences are animated by the ParentAnimation. */ QDeclarativeItem *QDeclarativeParentAnimation::target() const { @@ -2467,7 +2490,7 @@ void QDeclarativeParentAnimation::setNewParent(QDeclarativeItem *newParent) /*! \qmlproperty Item ParentAnimation::via The item to reparent via. This provides a way to do an unclipped animation - when both the old parent and new parent are clipped + when both the old parent and new parent are clipped. \qml ParentAnimation { @@ -2717,28 +2740,14 @@ QAbstractAnimation *QDeclarativeParentAnimation::qtAnimation() \qmlclass AnchorAnimation QDeclarativeAnchorAnimation \since 4.7 \inherits Animation - \brief The AnchorAnimation element allows you to animate anchor changes. + \brief The AnchorAnimation element animates changes in anchor values. - AnchorAnimation will animated any changes specified by a state's AnchorChanges. - In the following snippet we animate the addition of a right anchor to our item. - \qml - Item { - id: myItem - width: 100 - } - ... - State { - AnchorChanges { - target: myItem - anchors.right: container.right - } - } - ... - Transition { - //smoothly reanchor myItem and move into new position - AnchorAnimation {} - } - \endqml + AnchorAnimation is used to animate an AnchorChange. It will anchor all + anchor changes specified in a \l State. + + In the following snippet we animate the addition of a right anchor to a \l Rectangle: + + \snippet doc/src/snippets/declarative/anchoranimation.qml 0 \sa AnchorChanges */ diff --git a/src/declarative/util/qdeclarativeanimation_p.h b/src/declarative/util/qdeclarativeanimation_p.h index 2279b0e..59bd465 100644 --- a/src/declarative/util/qdeclarativeanimation_p.h +++ b/src/declarative/util/qdeclarativeanimation_p.h @@ -134,10 +134,12 @@ public: private Q_SLOTS: void timelineComplete(); void componentFinalized(); - void behaviorControlRunningChanged(bool running); - private: virtual void setTarget(const QDeclarativeProperty &); + void notifyRunningChanged(bool running); + friend class QDeclarativeBehavior; + + }; class QDeclarativePauseAnimationPrivate; diff --git a/src/declarative/util/qdeclarativeanimation_p_p.h b/src/declarative/util/qdeclarativeanimation_p_p.h index b6d6bbb..e38580c 100644 --- a/src/declarative/util/qdeclarativeanimation_p_p.h +++ b/src/declarative/util/qdeclarativeanimation_p_p.h @@ -311,8 +311,6 @@ public: QVariant from; QVariant to; - QEasingCurve easing; - QObject *target; QString propertyName; QString properties; diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp index 525df30..fadb2ae 100644 --- a/src/declarative/util/qdeclarativebehavior.cpp +++ b/src/declarative/util/qdeclarativebehavior.cpp @@ -75,28 +75,21 @@ public: \since 4.7 \brief The Behavior element allows you to specify a default animation for a property change. - Behaviors provide one way to specify \l{qdeclarativeanimation.html}{animations} in QML. - - In the example below, the rectangle will use a bounce easing curve over 200 millisecond for any changes to its y property: - \code - Rectangle { - width: 20; height: 20 - color: "#00ff00" - y: 200 // initial value - Behavior on y { - NumberAnimation { - easing.type: Easing.OutBounce - easing.amplitude: 100 - duration: 200 - } - } - } - \endcode + A Behavior defines the default animation to be applied whenever a + particular property value changes. + + For example, the following Behavior defines a NumberAnimation to be run + whenever the \l Rectangle's \c width value changes. When the MouseArea + is clicked, the \c width is changed, triggering the behavior's animation: + + \snippet doc/src/snippets/declarative/behavior.qml 0 - Currently only a single Behavior may be specified for a property; - this Behavior can be enabled and disabled via the \l{enabled} property. + To run multiple animations within a Behavior, use ParallelAnimation or + SequentialAnimation. - \sa {declarative/animation/behaviors}{Behavior example}, QtDeclarative + Note that a property cannot have more than one assigned Behavior. + + \sa {Property Behaviors}, {declarative/animation/behaviors}{Behavior example}, QtDeclarative */ @@ -113,7 +106,7 @@ QDeclarativeBehavior::~QDeclarativeBehavior() \qmlproperty Animation Behavior::animation \default - The animation to use when the behavior is triggered. + This property holds the animation to run when the behavior is triggered. */ QDeclarativeAbstractAnimation *QDeclarativeBehavior::animation() @@ -138,10 +131,6 @@ void QDeclarativeBehavior::setAnimation(QDeclarativeAbstractAnimation *animation SIGNAL(stateChanged(QAbstractAnimation::State,QAbstractAnimation::State)), this, SLOT(qtAnimationStateChanged(QAbstractAnimation::State,QAbstractAnimation::State))); - connect(this, - SIGNAL(qtAnimationRunningChanged(bool)), - d->animation, - SLOT(behaviorControlRunningChanged(bool))); } } @@ -150,13 +139,15 @@ void QDeclarativeBehavior::qtAnimationStateChanged(QAbstractAnimation::State new { Q_D(QDeclarativeBehavior); if (!d->blockRunningChanged) - emit qtAnimationRunningChanged(newState == QAbstractAnimation::Running); + d->animation->notifyRunningChanged(newState == QAbstractAnimation::Running); } /*! \qmlproperty bool Behavior::enabled - Whether the Behavior will be triggered when the property it is tracking changes. + + This property holds whether the behavior will be triggered when the tracked + property changes value. By default a Behavior is enabled. */ diff --git a/src/declarative/util/qdeclarativebehavior_p.h b/src/declarative/util/qdeclarativebehavior_p.h index a3132d9..9801fb2 100644 --- a/src/declarative/util/qdeclarativebehavior_p.h +++ b/src/declarative/util/qdeclarativebehavior_p.h @@ -83,7 +83,6 @@ public: Q_SIGNALS: void enabledChanged(); - void qtAnimationRunningChanged(bool running); private Q_SLOTS: void componentFinalized(); diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index deb835d..3ede335 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -1022,6 +1022,8 @@ QVariant NestedListModel::data(int index, int role) const Q_ASSERT(_root && index >= 0 && index < _root->values.count()); checkRoles(); QVariant rv; + if (roleStrings.count() < role) + return rv; ModelNode *node = qvariant_cast<ModelNode *>(_root->values.at(index)); if (!node) diff --git a/src/declarative/util/qdeclarativepackage.cpp b/src/declarative/util/qdeclarativepackage.cpp index 1e49ad9..1a4f2a7 100644 --- a/src/declarative/util/qdeclarativepackage.cpp +++ b/src/declarative/util/qdeclarativepackage.cpp @@ -65,12 +65,12 @@ QT_BEGIN_NAMESPACE \snippet examples/declarative/modelviews/package/Delegate.qml 0 These named items are used as the delegates by the two views who - reference the special VisualDataModel.parts property to select + reference the special \l{VisualDataModel::parts} property to select a model which provides the chosen delegate. \snippet examples/declarative/modelviews/package/view.qml 0 - \sa {declarative/modelviews/package}{Package example}, QtDeclarative + \sa {declarative/modelviews/package}{Package example}, {demos/declarative/photoviewer}{Photo Viewer demo}, QtDeclarative */ /*! diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index f729ced..a83cac8 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -114,6 +114,18 @@ public: static int downloadProgressIndex; }; +class QDeclarativePixmapReaderThreadObject : public QObject { + Q_OBJECT +public: + QDeclarativePixmapReaderThreadObject(QDeclarativePixmapReader *); + void processJobs(); + virtual bool event(QEvent *e); +private slots: + void networkRequestDone(); +private: + QDeclarativePixmapReader *reader; +}; + class QDeclarativePixmapData; class QDeclarativePixmapReader : public QThread { @@ -130,12 +142,11 @@ public: protected: void run(); -private slots: - void networkRequestDone(); - private: + friend class QDeclarativePixmapReaderThreadObject; void processJobs(); void processJob(QDeclarativePixmapReply *); + void networkRequestDone(QNetworkReply *); QList<QDeclarativePixmapReply*> jobs; QList<QDeclarativePixmapReply*> cancelled; @@ -143,14 +154,7 @@ private: QObject *eventLoopQuitHack; QMutex mutex; - class ThreadObject : public QObject { - public: - ThreadObject(QDeclarativePixmapReader *); - void processJobs(); - virtual bool event(QEvent *e); - private: - QDeclarativePixmapReader *reader; - } *threadObject; + QDeclarativePixmapReaderThreadObject *threadObject; QWaitCondition waitCondition; QNetworkAccessManager *networkAccessManager(); @@ -161,7 +165,7 @@ private: static int replyDownloadProgress; static int replyFinished; static int downloadProgress; - static int thisNetworkRequestDone; + static int threadNetworkRequestDone; static QHash<QDeclarativeEngine *,QDeclarativePixmapReader*> readers; static QMutex readerMutex; }; @@ -232,7 +236,7 @@ QMutex QDeclarativePixmapReader::readerMutex; int QDeclarativePixmapReader::replyDownloadProgress = -1; int QDeclarativePixmapReader::replyFinished = -1; int QDeclarativePixmapReader::downloadProgress = -1; -int QDeclarativePixmapReader::thisNetworkRequestDone = -1; +int QDeclarativePixmapReader::threadNetworkRequestDone = -1; void QDeclarativePixmapReply::postReply(ReadError error, const QString &errorString, @@ -317,9 +321,8 @@ QDeclarativePixmapReader::~QDeclarativePixmapReader() wait(); } -void QDeclarativePixmapReader::networkRequestDone() +void QDeclarativePixmapReader::networkRequestDone(QNetworkReply *reply) { - QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); QDeclarativePixmapReply *job = replies.take(reply); if (job) { @@ -335,7 +338,7 @@ void QDeclarativePixmapReader::networkRequestDone() reply = networkAccessManager()->get(req); QMetaObject::connect(reply, replyDownloadProgress, job, downloadProgress); - QMetaObject::connect(reply, replyFinished, this, thisNetworkRequestDone); + QMetaObject::connect(reply, replyFinished, threadObject, threadNetworkRequestDone); replies.insert(reply, job); return; @@ -368,17 +371,17 @@ void QDeclarativePixmapReader::networkRequestDone() threadObject->processJobs(); } -QDeclarativePixmapReader::ThreadObject::ThreadObject(QDeclarativePixmapReader *i) +QDeclarativePixmapReaderThreadObject::QDeclarativePixmapReaderThreadObject(QDeclarativePixmapReader *i) : reader(i) { } -void QDeclarativePixmapReader::ThreadObject::processJobs() +void QDeclarativePixmapReaderThreadObject::processJobs() { QCoreApplication::postEvent(this, new QEvent(QEvent::User)); } -bool QDeclarativePixmapReader::ThreadObject::event(QEvent *e) +bool QDeclarativePixmapReaderThreadObject::event(QEvent *e) { if (e->type() == QEvent::User) { reader->processJobs(); @@ -388,6 +391,12 @@ bool QDeclarativePixmapReader::ThreadObject::event(QEvent *e) } } +void QDeclarativePixmapReaderThreadObject::networkRequestDone() +{ + QNetworkReply *reply = static_cast<QNetworkReply *>(sender()); + reader->networkRequestDone(reply); +} + void QDeclarativePixmapReader::processJobs() { QMutexLocker locker(&mutex); @@ -469,7 +478,7 @@ void QDeclarativePixmapReader::processJob(QDeclarativePixmapReply *runningJob) QNetworkReply *reply = networkAccessManager()->get(req); QMetaObject::connect(reply, replyDownloadProgress, runningJob, downloadProgress); - QMetaObject::connect(reply, replyFinished, this, thisNetworkRequestDone); + QMetaObject::connect(reply, replyFinished, threadObject, threadNetworkRequestDone); replies.insert(reply, runningJob); } @@ -520,15 +529,15 @@ void QDeclarativePixmapReader::run() if (replyDownloadProgress == -1) { const QMetaObject *nr = &QNetworkReply::staticMetaObject; const QMetaObject *pr = &QDeclarativePixmapReply::staticMetaObject; - const QMetaObject *ir = &QDeclarativePixmapReader::staticMetaObject; + const QMetaObject *ir = &QDeclarativePixmapReaderThreadObject::staticMetaObject; replyDownloadProgress = nr->indexOfSignal("downloadProgress(qint64,qint64)"); replyFinished = nr->indexOfSignal("finished()"); downloadProgress = pr->indexOfSignal("downloadProgress(qint64,qint64)"); - thisNetworkRequestDone = ir->indexOfSlot("networkRequestDone()"); + threadNetworkRequestDone = ir->indexOfSlot("networkRequestDone()"); } mutex.lock(); - threadObject = new ThreadObject(this); + threadObject = new QDeclarativePixmapReaderThreadObject(this); mutex.unlock(); processJobs(); @@ -605,7 +614,7 @@ void QDeclarativePixmapStore::unreferencePixmap(QDeclarativePixmapData *data) m_unreferencedCost += data->cost(); if (m_timerId == -1) - startTimer(CACHE_EXPIRE_TIME * 1000); + m_timerId = startTimer(CACHE_EXPIRE_TIME * 1000); } void QDeclarativePixmapStore::referencePixmap(QDeclarativePixmapData *data) @@ -952,10 +961,9 @@ void QDeclarativePixmap::load(QDeclarativeEngine *engine, const QUrl &url, const if (iter == store->m_cache.end()) { if (async) { + // pixmaps can only be loaded synchronously if (url.scheme() == QLatin1String("image") && QDeclarativeEnginePrivate::get(engine)->getImageProviderType(url) == QDeclarativeImageProvider::Pixmap) { - qWarning().nospace() << "Pixmaps must be loaded synchronously, ignoring asynchronous property for Image with source: " - << url.toString(); async = false; } } diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index e0d1097..11c3d4b 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -253,15 +253,22 @@ void QSmoothedAnimation::init() \inherits NumberAnimation \brief The SmoothedAnimation element allows a property to smoothly track a value. - The SmoothedAnimation animates a property's value to a set target value - using an ease in/out quad easing curve. If the animation is restarted - with a different target value, the easing curves used to animate to the old - and the new target values are smoothly spliced together to avoid any obvious - visual glitches by maintaining the current velocity. - - The property animation is configured by setting the velocity at which the - animation should occur, or the duration that the animation should take. - If both a velocity and a duration are specified, the one that results in + A SmoothedAnimation animates a property's value to a set target value + using an ease in/out quad easing curve. When the target value changes, + the easing curves used to animate between the old and new target values + are smoothly spliced together to create a smooth movement to the new + target value that maintains the current velocity. + + The follow example shows one \l Rectangle tracking the position of another + using SmoothedAnimation. The green rectangle's \c x and \c y values are + bound to those of the red rectangle. Whenever these values change, the + green rectangle smoothly animates to its new position: + + \snippet doc/src/snippets/declarative/smoothedanimation.qml 0 + + A SmoothedAnimation can be configured by setting the \l velocity at which the + animation should occur, or the \l duration that the animation should take. + If both the \l velocity and \l duration are specified, the one that results in the quickest animation is chosen for each change in the target value. For example, animating from 0 to 800 will take 4 seconds if a velocity @@ -271,10 +278,6 @@ void QSmoothedAnimation::init() will take 8 seconds with a duration of 8000 set, and will take 8 seconds with both a velocity of 200 and a duration of 8000 set. - The follow example shows one rectangle tracking the position of another. - - \snippet doc/src/snippets/declarative/smoothedanimation.qml 0 - The default velocity of SmoothedAnimation is 200 units/second. Note that if the range of the value being animated is small, then the velocity will need to be adjusted appropriately. For example, the opacity of an item ranges from 0 - 1.0. @@ -287,7 +290,7 @@ void QSmoothedAnimation::init() sources. The \l PropertyAnimation documentation shows a variety of methods for creating animations. - \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} + \sa SpringAnimation, NumberAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} */ QDeclarativeSmoothedAnimation::QDeclarativeSmoothedAnimation(QObject *parent) diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index be0af6d..8ce4832 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -215,7 +215,9 @@ void QDeclarativeSpringAnimationPrivate::updateMode() You can also limit the maximum \l velocity of the animation. The following \l Rectangle moves to the position of the mouse using a - SpringAnimation when the mouse is clicked: + SpringAnimation when the mouse is clicked. The use of the \l Behavior + on the \c x and \c y values indicates that whenever these values are + changed, a SpringAnimation should be applied. \snippet doc/src/snippets/declarative/springanimation.qml 0 @@ -224,7 +226,7 @@ void QDeclarativeSpringAnimationPrivate::updateMode() sources. The \l PropertyAnimation documentation shows a variety of methods for creating animations. - \sa {QML Animation}, {declarative/animation/basics}{Animation basics example}, {declarative/toys/clocks}{Clocks example} + \sa SmoothedAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example}, {declarative/toys/clocks}{Clocks example} */ QDeclarativeSpringAnimation::QDeclarativeSpringAnimation(QObject *parent) @@ -284,8 +286,8 @@ qreal QDeclarativeSpringAnimation::from() const This property holds the value from which the animation will begin. - If not set, the animation will start regardless of the - value being tracked. + If not set, the animation will start whenever the tracked value has + changed, regardless of its value. */ void QDeclarativeSpringAnimation::setFrom(qreal value) @@ -303,7 +305,10 @@ void QDeclarativeSpringAnimation::setFrom(qreal value) /*! \qmlproperty real SpringAnimation::velocity + This property holds the maximum velocity allowed when tracking the source. + + The default value is 0 (no maximum velocity). */ qreal QDeclarativeSpringAnimation::velocity() const @@ -322,13 +327,14 @@ void QDeclarativeSpringAnimation::setVelocity(qreal velocity) /*! \qmlproperty real SpringAnimation::spring - This property holds the spring constant - The spring constant describes how strongly the target is pulled towards the - source. Setting spring to 0 turns off spring tracking. Useful values 0 - 5.0 + This property describes how strongly the target is pulled towards the + source. The default value is 0 (that is, the spring-like motion is disabled). + + The useful value range is 0 - 5.0. - When a spring constant is set and the velocity property is greater than 0, - velocity limits the maximum speed. + When this property is set and the \l velocity value is greater than 0, + the \l velocity limits the maximum speed. */ qreal QDeclarativeSpringAnimation::spring() const { @@ -347,10 +353,11 @@ void QDeclarativeSpringAnimation::setSpring(qreal spring) \qmlproperty real SpringAnimation::damping This property holds the spring damping value. - This value describes how quickly a sprung follower comes to rest. + This value describes how quickly the spring-like motion comes to rest. + The default value is 0. - The useful range is 0 - 1.0. The lower the value, the faster the - follower comes to rest. + The useful value range is 0 - 1.0. The lower the value, the faster it + comes to rest. */ qreal QDeclarativeSpringAnimation::damping() const { @@ -392,7 +399,7 @@ void QDeclarativeSpringAnimation::setEpsilon(qreal epsilon) /*! \qmlproperty real SpringAnimation::modulus - This property holds the modulus value. + This property holds the modulus value. The default value is 0. Setting a \a modulus forces the target value to "wrap around" at the modulus. For example, setting the modulus to 360 will cause a value of 370 to wrap around to 10. @@ -417,8 +424,10 @@ void QDeclarativeSpringAnimation::setModulus(qreal modulus) \qmlproperty real SpringAnimation::mass This property holds the "mass" of the property being moved. - mass is 1.0 by default. Setting a different mass changes the dynamics of - a \l spring follow. + The value is 1.0 by default. + + A greater mass causes slower movement and a greater spring-like + motion when an item comes to rest. */ qreal QDeclarativeSpringAnimation::mass() const { diff --git a/src/declarative/util/qdeclarativestyledtext.cpp b/src/declarative/util/qdeclarativestyledtext.cpp index babd71b..91566bc 100644 --- a/src/declarative/util/qdeclarativestyledtext.cpp +++ b/src/declarative/util/qdeclarativestyledtext.cpp @@ -152,8 +152,6 @@ void QDeclarativeStyledTextPrivate::parse() QTextCharFormat format; if (formatStack.count()) format = formatStack.top(); - else - format.setFont(baseFont); if (parseTag(ch, text, drawText, format)) formatStack.push(format); } @@ -198,8 +196,10 @@ bool QDeclarativeStyledTextPrivate::parseTag(const QChar *&ch, const QString &te if (char0 == QLatin1Char('b')) { if (tagLength == 1) format.setFontWeight(QFont::Bold); - else if (tagLength == 2 && tag.at(1) == QLatin1Char('r')) + else if (tagLength == 2 && tag.at(1) == QLatin1Char('r')) { textOut.append(QChar(QChar::LineSeparator)); + return false; + } } else if (char0 == QLatin1Char('i')) { if (tagLength == 1) format.setFontItalic(true); diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp index 34e1e2b..6561b8c 100644 --- a/src/declarative/util/qdeclarativetransition.cpp +++ b/src/declarative/util/qdeclarativetransition.cpp @@ -66,8 +66,6 @@ QT_BEGIN_NAMESPACE \snippet doc/src/snippets/declarative/transition.qml 0 - Items can have multiple transitions, if - To specify multiple transitions, specify \l Item::transitions as a list: \qml @@ -78,7 +76,7 @@ QT_BEGIN_NAMESPACE Transition { ... } ] } - |endqml + \endqml \sa {declarative/animation/states}{states example}, {qmlstates}{States}, {state-transitions}{Transitions}, {QtDeclarative} */ diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp index c3948c1..7546a50 100644 --- a/src/declarative/util/qdeclarativeview.cpp +++ b/src/declarative/util/qdeclarativeview.cpp @@ -194,45 +194,46 @@ void QDeclarativeViewPrivate::itemGeometryChanged(QDeclarativeItem *resizeItem, \since 4.7 \brief The QDeclarativeView class provides a widget for displaying a Qt Declarative user interface. - Any QGraphicsObject or QDeclarativeItem - created via QML can be placed on a standard QGraphicsScene and viewed with a standard - QGraphicsView. + QDeclarativeItem objects can be placed on a standard QGraphicsScene and + displayed with QGraphicsView. QDeclarativeView is a QGraphicsView subclass + provided as a convenience for displaying QML files, and connecting between + QML and C++ Qt objects. - QDeclarativeView is a QGraphicsView subclass provided as a convenience for displaying QML - files, and connecting between QML and C++ Qt objects. - - QDeclarativeView performs the following functions: + QDeclarativeView provides: \list - \o Manages QDeclarativeComponent loading and object creation. - \o Initializes QGraphicsView for optimal performance with QML: + \o Management of QDeclarativeComponent loading and object creation + \o Initialization of QGraphicsView for optimal performance with QML using these settings: \list - \o QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState); - \o QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); - \o QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex); + \o QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState) + \o QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate) + \o QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex) \endlist - \o Initializes QGraphicsView for QML key handling: + \o Initialization of QGraphicsView for QML key handling using these settings: \list - \o QGraphicsView::viewport()->setFocusPolicy(Qt::NoFocus); - \o QGraphicsView::setFocusPolicy(Qt::StrongFocus); - \o QGraphicsScene::setStickyFocus(true); + \o QGraphicsView::viewport()->setFocusPolicy(Qt::NoFocus) + \o QGraphicsView::setFocusPolicy(Qt::StrongFocus) + \o QGraphicsScene::setStickyFocus(true) \endlist \endlist Typical usage: - \code - ... - QDeclarativeView *view = new QDeclarativeView(this); - vbox->addWidget(view); - QUrl url = QUrl::fromLocalFile(fileName); - view->setSource(url); + \code + QDeclarativeView *view = new QDeclarativeView; + view->setSource(QUrl::fromLocalFile("myqmlfile.qml")); view->show(); \endcode + Since QDeclarativeView is a QWidget-based class, it can be used to + display QML interfaces within QWidget-based GUI applications that do not + use the Graphics View framework. + To receive errors related to loading and executing QML with QDeclarativeView, you can connect to the statusChanged() signal and monitor for QDeclarativeView::Error. The errors are available via QDeclarativeView::errors(). + + \sa {Integrating QML with existing Qt UI code}, {Using QML in C++ Applications} */ diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index dcb93cf..7c1e1fd 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -567,7 +567,7 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla \image qml-xmllistmodel-example.png The XmlListModel data is loaded asynchronously, and \l status - is set to \l XmlListModel::Ready when loading is complete. + is set to \c XmlListModel.Ready when loading is complete. Note this means when XmlListModel is used for a view, the view is not populated until the model is loaded. @@ -596,7 +596,7 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla with a combined value of all key roles that is not already present in the model. - \sa {demos/declarative/rssnews}{RSS News demo} + \sa {RSS News} */ QDeclarativeXmlListModel::QDeclarativeXmlListModel(QObject *parent) @@ -674,7 +674,7 @@ QString QDeclarativeXmlListModel::toString(int role) const \qmlproperty url XmlListModel::source The location of the XML data source. - If both source and xml are set, xml will be used. + If both \c source and \l xml are set, \l xml is used. */ QUrl QDeclarativeXmlListModel::source() const { @@ -699,7 +699,7 @@ void QDeclarativeXmlListModel::setSource(const QUrl &src) The text is assumed to be UTF-8 encoded. - If both \l source and \c xml are set, \c xml will be used. + If both \l source and \c xml are set, \c xml is used. */ QString QDeclarativeXmlListModel::xml() const { diff --git a/src/imports/particles/qdeclarativeparticles.cpp b/src/imports/particles/qdeclarativeparticles.cpp index cfe848c..b842109 100644 --- a/src/imports/particles/qdeclarativeparticles.cpp +++ b/src/imports/particles/qdeclarativeparticles.cpp @@ -1245,7 +1245,7 @@ void QDeclarativeParticles::burst(int count, int emissionRate) void QDeclarativeParticlesPainter::updateSize() { - if (!d->_componentComplete) + if (!d->componentComplete) return; const int parentX = parentItem()->x(); diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 2cc80a8..480d9ff 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -12,7 +12,7 @@ EXPORTS ??0QDeclarativeText@@QAE@PAVQDeclarativeItem@@@Z @ 11 NONAME ; QDeclarativeText::QDeclarativeText(class QDeclarativeItem *) ?trUtf8@QDeclarativePixmapReply@@SA?AVQString@@PBD0H@Z @ 12 NONAME ABSENT ; class QString QDeclarativePixmapReply::trUtf8(char const *, char const *, int) ?propertyTypeName@QDeclarativeProperty@@QBEPBDXZ @ 13 NONAME ; char const * QDeclarativeProperty::propertyTypeName(void) const - ?wantsFocusChanged@QDeclarativeItem@@IAEX_N@Z @ 14 NONAME ; void QDeclarativeItem::wantsFocusChanged(bool) + ?wantsFocusChanged@QDeclarativeItem@@IAEX_N@Z @ 14 NONAME ABSENT ; void QDeclarativeItem::wantsFocusChanged(bool) ?getStaticMetaObject@QDeclarativeDebugService@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & QDeclarativeDebugService::getStaticMetaObject(void) ?setLeft@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 16 NONAME ; void QDeclarativeAnchors::setLeft(class QDeclarativeAnchorLine const &) ?qt_metacall@QDeclarativeExpression@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 17 NONAME ; int QDeclarativeExpression::qt_metacall(enum QMetaObject::Call, int, void * *) @@ -61,7 +61,7 @@ EXPORTS ??0QDeclarativeDomObject@@QAE@XZ @ 60 NONAME ; QDeclarativeDomObject::QDeclarativeDomObject(void) ?errors@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 61 NONAME ; class QList<class QDeclarativeError> QDeclarativeDomDocument::errors(void) const ?toChanged@QDeclarativeTransition@@IAEXXZ @ 62 NONAME ; void QDeclarativeTransition::toChanged(void) - ?registerAutoParentFunction@QDeclarativePrivate@@YAHP6A?AW4AutoParentResult@1@PAVQObject@@0@Z@Z @ 63 NONAME ; int QDeclarativePrivate::registerAutoParentFunction(enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)) + ?registerAutoParentFunction@QDeclarativePrivate@@YAHP6A?AW4AutoParentResult@1@PAVQObject@@0@Z@Z @ 63 NONAME ABSENT ; int QDeclarativePrivate::registerAutoParentFunction(enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)) ?objectOwnership@QDeclarativeEngine@@SA?AW4ObjectOwnership@1@PAVQObject@@@Z @ 64 NONAME ; enum QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(class QObject *) ??0QDeclarativeDebugWatch@@QAE@PAVQObject@@@Z @ 65 NONAME ; QDeclarativeDebugWatch::QDeclarativeDebugWatch(class QObject *) ?value@QDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 66 NONAME ; class QVariant QDeclarativePropertyMap::value(class QString const &) const @@ -79,7 +79,7 @@ EXPORTS ?isInvalid@QDeclarativeDomValue@@QBE_NXZ @ 78 NONAME ; bool QDeclarativeDomValue::isInvalid(void) const ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString QDeclarativeText::trUtf8(char const *, char const *, int) ??0QDeclarativeListReference@@QAE@ABV0@@Z @ 80 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QDeclarativeListReference const &) - ?registerType@QDeclarativePrivate@@YAHABURegisterInterface@1@@Z @ 81 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterInterface const &) + ?registerType@QDeclarativePrivate@@YAHABURegisterInterface@1@@Z @ 81 NONAME ABSENT ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterInterface const &) ?classBegin@QDeclarativeItem@@MAEXXZ @ 82 NONAME ; void QDeclarativeItem::classBegin(void) ?setTransformOrigin@QDeclarativeItem@@QAEXW4TransformOrigin@1@@Z @ 83 NONAME ; void QDeclarativeItem::setTransformOrigin(enum QDeclarativeItem::TransformOrigin) ?request@QDeclarativePixmapCache@@SAPAVQDeclarativePixmapReply@@PAVQDeclarativeEngine@@ABVQUrl@@HH@Z @ 84 NONAME ABSENT ; class QDeclarativePixmapReply * QDeclarativePixmapCache::request(class QDeclarativeEngine *, class QUrl const &, int, int) @@ -265,7 +265,7 @@ EXPORTS ?readyRead@QPacketProtocol@@IAEXXZ @ 264 NONAME ; void QPacketProtocol::readyRead(void) ?qt_metacall@QDeclarativeValueType@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 265 NONAME ; int QDeclarativeValueType::qt_metacall(enum QMetaObject::Call, int, void * *) ?propertyType@QDeclarativePropertyPrivate@@QBEHXZ @ 266 NONAME ; int QDeclarativePropertyPrivate::propertyType(void) const - ?engine@QDeclarativeView@@QAEPAVQDeclarativeEngine@@XZ @ 267 NONAME ; class QDeclarativeEngine * QDeclarativeView::engine(void) + ?engine@QDeclarativeView@@QAEPAVQDeclarativeEngine@@XZ @ 267 NONAME ABSENT ; class QDeclarativeEngine * QDeclarativeView::engine(void) ?inputMethodQuery@QDeclarativeItem@@MBE?AVQVariant@@W4InputMethodQuery@Qt@@@Z @ 268 NONAME ; class QVariant QDeclarativeItem::inputMethodQuery(enum Qt::InputMethodQuery) const ?sizeHint@QDeclarativeView@@UBE?AVQSize@@XZ @ 269 NONAME ; class QSize QDeclarativeView::sizeHint(void) const ?flags@QDeclarativeCustomParser@@QBE?AV?$QFlags@W4Flag@QDeclarativeCustomParser@@@@XZ @ 270 NONAME ; class QFlags<enum QDeclarativeCustomParser::Flag> QDeclarativeCustomParser::flags(void) const @@ -409,7 +409,7 @@ EXPORTS ?addRef@QDeclarativePixmapReply@@AAEXXZ @ 408 NONAME ABSENT ; void QDeclarativePixmapReply::addRef(void) ?mouseReleaseEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 409 NONAME ; void QDeclarativeText::mouseReleaseEvent(class QGraphicsSceneMouseEvent *) ?isCustomType@QDeclarativeDomObject@@QBE_NXZ @ 410 NONAME ; bool QDeclarativeDomObject::isCustomType(void) const - ?registerType@QDeclarativePrivate@@YAHABURegisterType@1@@Z @ 411 NONAME ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterType const &) + ?registerType@QDeclarativePrivate@@YAHABURegisterType@1@@Z @ 411 NONAME ABSENT ; int QDeclarativePrivate::registerType(struct QDeclarativePrivate::RegisterType const &) ?radius@QDeclarativeRectangle@@QBEMXZ @ 412 NONAME ; float QDeclarativeRectangle::radius(void) const ??0QDeclarativeComponent@@AAE@PAVQDeclarativeEngine@@PAVQDeclarativeCompiledData@@HHPAVQObject@@@Z @ 413 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QDeclarativeCompiledData *, int, int, class QObject *) ?resources_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 414 NONAME ; int QDeclarativeItemPrivate::resources_count(class QDeclarativeListProperty<class QObject> *) @@ -877,7 +877,7 @@ EXPORTS ?setWidth@QDeclarativeItemPrivate@@UAEXM@Z @ 876 NONAME ; void QDeclarativeItemPrivate::setWidth(float) ?staticMetaObject@QDeclarativeDebugWatch@@2UQMetaObject@@B @ 877 NONAME ; struct QMetaObject const QDeclarativeDebugWatch::staticMetaObject ??_EQDeclarativeContext@@UAE@I@Z @ 878 NONAME ; QDeclarativeContext::~QDeclarativeContext(unsigned int) - ?rootContext@QDeclarativeView@@QAEPAVQDeclarativeContext@@XZ @ 879 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void) + ?rootContext@QDeclarativeView@@QAEPAVQDeclarativeContext@@XZ @ 879 NONAME ABSENT ; class QDeclarativeContext * QDeclarativeView::rootContext(void) ?staticMetaObject@QDeclarativeDebugQuery@@2UQMetaObject@@B @ 880 NONAME ; struct QMetaObject const QDeclarativeDebugQuery::staticMetaObject ??0QDeclarativeExtensionPlugin@@QAE@PAVQObject@@@Z @ 881 NONAME ; QDeclarativeExtensionPlugin::QDeclarativeExtensionPlugin(class QObject *) ??_EQDeclarativeOpenMetaObject@@UAE@I@Z @ 882 NONAME ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(unsigned int) @@ -1077,7 +1077,7 @@ EXPORTS ??1QDeclarativeEngine@@UAE@XZ @ 1076 NONAME ; QDeclarativeEngine::~QDeclarativeEngine(void) ?debugId@QDeclarativeDebugContextReference@@QBEHXZ @ 1077 NONAME ; int QDeclarativeDebugContextReference::debugId(void) const ?propertyNameParts@QDeclarativeDomProperty@@QBE?AV?$QList@VQByteArray@@@@XZ @ 1078 NONAME ; class QList<class QByteArray> QDeclarativeDomProperty::propertyNameParts(void) const - ?rootContext@QDeclarativeEngine@@QAEPAVQDeclarativeContext@@XZ @ 1079 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) + ?rootContext@QDeclarativeEngine@@QAEPAVQDeclarativeContext@@XZ @ 1079 NONAME ABSENT ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) ?resetWidth@QDeclarativeItemPrivate@@UAEXXZ @ 1080 NONAME ; void QDeclarativeItemPrivate::resetWidth(void) ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@ABVQByteArray@@@Z @ 1081 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](class QByteArray const &) ?bottom@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1082 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::bottom(void) const @@ -1182,7 +1182,7 @@ EXPORTS ??_EQDeclarativeEngineDebug@@UAE@I@Z @ 1181 NONAME ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(unsigned int) ?bottom@QDeclarativeScaleGrid@@QBEHXZ @ 1182 NONAME ; int QDeclarativeScaleGrid::bottom(void) const ?d_func@QDeclarativePropertyMap@@AAEPAVQDeclarativePropertyMapPrivate@@XZ @ 1183 NONAME ; class QDeclarativePropertyMapPrivate * QDeclarativePropertyMap::d_func(void) - ?forceFocus@QDeclarativeItem@@QAEXXZ @ 1184 NONAME ; void QDeclarativeItem::forceFocus(void) + ?forceFocus@QDeclarativeItem@@QAEXXZ @ 1184 NONAME ABSENT ; void QDeclarativeItem::forceFocus(void) ?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1185 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *) ??0QDeclarativeTransition@@QAE@PAVQObject@@@Z @ 1186 NONAME ; QDeclarativeTransition::QDeclarativeTransition(class QObject *) ?horizontalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1187 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::horizontalCenter(void) const @@ -1442,7 +1442,7 @@ EXPORTS ?drawRect@QDeclarativeRectangle@@AAEXAAVQPainter@@@Z @ 1441 NONAME ; void QDeclarativeRectangle::drawRect(class QPainter &) ?read@QDeclarativeProperty@@QBE?AVQVariant@@XZ @ 1442 NONAME ; class QVariant QDeclarativeProperty::read(void) const ?isEmpty@QDeclarativePropertyMap@@QBE_NXZ @ 1443 NONAME ; bool QDeclarativePropertyMap::isEmpty(void) const - ?wantsFocus@QDeclarativeItem@@QBE_NXZ @ 1444 NONAME ; bool QDeclarativeItem::wantsFocus(void) const + ?wantsFocus@QDeclarativeItem@@QBE_NXZ @ 1444 NONAME ABSENT ; bool QDeclarativeItem::wantsFocus(void) const ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 1445 NONAME ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData const &) ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 1446 NONAME ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *, int) ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContext@@1@Z @ 1447 NONAME ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContext *, class QObject *) @@ -1676,4 +1676,12 @@ EXPORTS ??0QDeclarativeImageProvider@@QAE@W4ImageType@0@@Z @ 1675 NONAME ; QDeclarativeImageProvider::QDeclarativeImageProvider(enum QDeclarativeImageProvider::ImageType) ?setMethodBody@QDeclarativeEngineDebug@@QAE_NHABVQString@@0@Z @ 1676 NONAME ; bool QDeclarativeEngineDebug::setMethodBody(int, class QString const &, class QString const &) ?resetBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@@Z @ 1677 NONAME ; bool QDeclarativeEngineDebug::resetBindingForObject(int, class QString const &) + ?forceActiveFocus@QDeclarativeItem@@QAEXXZ @ 1678 NONAME ; void QDeclarativeItem::forceActiveFocus(void) + ?activeFocusChanged@QDeclarativeItem@@IAEX_N@Z @ 1679 NONAME ; void QDeclarativeItem::activeFocusChanged(bool) + ?focusScopeItemChange@QDeclarativeItemPrivate@@UAEX_N@Z @ 1680 NONAME ; void QDeclarativeItemPrivate::focusScopeItemChange(bool) + ?hasActiveFocus@QDeclarativeItem@@QBE_NXZ @ 1681 NONAME ; bool QDeclarativeItem::hasActiveFocus(void) const + ?engine@QDeclarativeView@@QBEPAVQDeclarativeEngine@@XZ @ 1682 NONAME ; class QDeclarativeEngine * QDeclarativeView::engine(void) const + ?rootContext@QDeclarativeView@@QBEPAVQDeclarativeContext@@XZ @ 1683 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void) const + ?rootContext@QDeclarativeEngine@@QBEPAVQDeclarativeContext@@XZ @ 1684 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) const + ?qmlregister@QDeclarativePrivate@@YAHW4RegistrationType@1@PAX@Z @ 1685 NONAME ; int QDeclarativePrivate::qmlregister(enum QDeclarativePrivate::RegistrationType, void *) diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index bcb91fa..9a3cefa 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -44,7 +44,7 @@ EXPORTS _ZN16QDeclarativeInfoD1Ev @ 43 NONAME _ZN16QDeclarativeInfoD2Ev @ 44 NONAME _ZN16QDeclarativeItem10classBeginEv @ 45 NONAME - _ZN16QDeclarativeItem10forceFocusEv @ 46 NONAME + _ZN16QDeclarativeItem10forceFocusEv @ 46 NONAME ABSENT _ZN16QDeclarativeItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 47 NONAME _ZN16QDeclarativeItem10resetWidthEv @ 48 NONAME _ZN16QDeclarativeItem10sceneEventEP6QEvent @ 49 NONAME @@ -69,7 +69,7 @@ EXPORTS _ZN16QDeclarativeItem17componentCompleteEv @ 68 NONAME _ZN16QDeclarativeItem17setBaselineOffsetEf @ 69 NONAME _ZN16QDeclarativeItem17setImplicitHeightEf @ 70 NONAME - _ZN16QDeclarativeItem17wantsFocusChangedEb @ 71 NONAME + _ZN16QDeclarativeItem17wantsFocusChangedEb @ 71 NONAME ABSENT _ZN16QDeclarativeItem18keyPressPreHandlerEP9QKeyEvent @ 72 NONAME _ZN16QDeclarativeItem18setTransformOriginENS_15TransformOriginE @ 73 NONAME _ZN16QDeclarativeItem19childrenRectChangedERK6QRectF @ 74 NONAME @@ -143,7 +143,7 @@ EXPORTS _ZN16QDeclarativeView11qt_metacallEN11QMetaObject4CallEiPPv @ 142 NONAME _ZN16QDeclarativeView11qt_metacastEPKc @ 143 NONAME _ZN16QDeclarativeView11resizeEventEP12QResizeEvent @ 144 NONAME - _ZN16QDeclarativeView11rootContextEv @ 145 NONAME + _ZN16QDeclarativeView11rootContextEv @ 145 NONAME ABSENT _ZN16QDeclarativeView12sceneResizedE5QSize @ 146 NONAME _ZN16QDeclarativeView13setResizeModeENS_10ResizeModeE @ 147 NONAME _ZN16QDeclarativeView13setRootObjectEP7QObject @ 148 NONAME @@ -151,7 +151,7 @@ EXPORTS _ZN16QDeclarativeView15continueExecuteEv @ 150 NONAME _ZN16QDeclarativeView16staticMetaObjectE @ 151 NONAME DATA 16 _ZN16QDeclarativeView19getStaticMetaObjectEv @ 152 NONAME - _ZN16QDeclarativeView6engineEv @ 153 NONAME + _ZN16QDeclarativeView6engineEv @ 153 NONAME ABSENT _ZN16QDeclarativeView9setSourceERK4QUrl @ 154 NONAME _ZN16QDeclarativeViewC1EP7QWidget @ 155 NONAME _ZN16QDeclarativeViewC1ERK4QUrlP7QWidget @ 156 NONAME @@ -202,7 +202,7 @@ EXPORTS _ZN18QDeclarativeEngine10setBaseUrlERK4QUrl @ 201 NONAME _ZN18QDeclarativeEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 202 NONAME _ZN18QDeclarativeEngine11qt_metacastEPKc @ 203 NONAME - _ZN18QDeclarativeEngine11rootContextEv @ 204 NONAME + _ZN18QDeclarativeEngine11rootContextEv @ 204 NONAME ABSENT _ZN18QDeclarativeEngine12importPluginERK7QStringS2_PS0_ @ 205 NONAME _ZN18QDeclarativeEngine13addImportPathERK7QString @ 206 NONAME _ZN18QDeclarativeEngine13addPluginPathERK7QString @ 207 NONAME @@ -385,9 +385,9 @@ EXPORTS _ZN19QDeclarativeDomListD1Ev @ 384 NONAME _ZN19QDeclarativeDomListD2Ev @ 385 NONAME _ZN19QDeclarativeDomListaSERKS_ @ 386 NONAME - _ZN19QDeclarativePrivate12registerTypeERKNS_12RegisterTypeE @ 387 NONAME - _ZN19QDeclarativePrivate12registerTypeERKNS_17RegisterInterfaceE @ 388 NONAME - _ZN19QDeclarativePrivate26registerAutoParentFunctionEPFNS_16AutoParentResultEP7QObjectS2_E @ 389 NONAME + _ZN19QDeclarativePrivate12registerTypeERKNS_12RegisterTypeE @ 387 NONAME ABSENT + _ZN19QDeclarativePrivate12registerTypeERKNS_17RegisterInterfaceE @ 388 NONAME ABSENT + _ZN19QDeclarativePrivate26registerAutoParentFunctionEPFNS_16AutoParentResultEP7QObjectS2_E @ 389 NONAME ABSENT _ZN19QDeclarativePrivate30qdeclarativeelement_destructorEP7QObject @ 390 NONAME _ZN19QListModelInterface10itemsMovedEiii @ 391 NONAME _ZN19QListModelInterface11qt_metacallEN11QMetaObject4CallEiPPv @ 392 NONAME @@ -1075,7 +1075,7 @@ EXPORTS _ZNK15QPacketProtocol17maximumPacketSizeEv @ 1074 NONAME _ZNK16QDeclarativeItem10metaObjectEv @ 1075 NONAME _ZNK16QDeclarativeItem10parentItemEv @ 1076 NONAME - _ZNK16QDeclarativeItem10wantsFocusEv @ 1077 NONAME + _ZNK16QDeclarativeItem10wantsFocusEv @ 1077 NONAME ABSENT _ZNK16QDeclarativeItem10widthValidEv @ 1078 NONAME _ZNK16QDeclarativeItem11heightValidEv @ 1079 NONAME _ZNK16QDeclarativeItem11mapFromItemERK12QScriptValueff @ 1080 NONAME @@ -1707,4 +1707,11 @@ EXPORTS _ZN25QDeclarativeImageProviderC2ENS_9ImageTypeE @ 1706 NONAME _ZNK25QDeclarativeImageProvider9imageTypeEv @ 1707 NONAME _ZN23QDeclarativeEngineDebug21resetBindingForObjectEiRK7QString @ 1708 NONAME + _ZN16QDeclarativeItem16forceActiveFocusEv @ 1709 NONAME + _ZN16QDeclarativeItem18activeFocusChangedEb @ 1710 NONAME + _ZNK16QDeclarativeItem14hasActiveFocusEv @ 1711 NONAME + _ZNK16QDeclarativeView11rootContextEv @ 1712 NONAME + _ZNK16QDeclarativeView6engineEv @ 1713 NONAME + _ZNK18QDeclarativeEngine11rootContextEv @ 1714 NONAME + _ZN19QDeclarativePrivate11qmlregisterENS_16RegistrationTypeEPv @ 1715 NONAME diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index 3d2dbf0..a7fb3b8 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -52,8 +52,7 @@ SUBDIRS += \ qdeclarativeqt \ qdeclarativerepeater \ qdeclarativesmoothedanimation \ - qdeclarativesmoothedfollow\ - qdeclarativespringfollow \ + qdeclarativespringanimation \ qdeclarativesqldatabase \ qdeclarativestates \ qdeclarativestyledtext \ diff --git a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp index a965ef3..3e80c2c 100644 --- a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp +++ b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp @@ -310,7 +310,7 @@ void tst_qdeclarativeanimations::badTypes() c.create(); QVERIFY(c.errors().count() == 1); - QCOMPARE(c.errors().at(0).description(), QLatin1String("Invalid property assignment: double expected")); + QCOMPARE(c.errors().at(0).description(), QLatin1String("Invalid property assignment: number expected")); } //make sure we get a compiler error diff --git a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp index bb7fc7b..174967b 100644 --- a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp +++ b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp @@ -401,6 +401,7 @@ void tst_qdeclarativebehaviors::sameValue() target->setProperty("x", 0); QTRY_VERIFY(target->x() != qreal(0) && target->x() != qreal(100)); + QTRY_VERIFY(target->x() == qreal(0)); //make sure Behavior has finished. target->setX(100); QCOMPARE(target->x(), qreal(100)); diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.2.qml index db7f2b5..2c79729 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.2.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.2.qml @@ -7,7 +7,7 @@ MyTypeObject { uintProperty: if(1) 10 intProperty: if(1) -19 realProperty: if(1) 23.2 - doubleProperty: if(1) -19.7 + doubleProperty: if(1) -19.75 floatProperty: if(1) 8.5 colorProperty: if(1) "red" dateProperty: if(1) "1982-11-25" diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.qml b/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.qml index 72ae865..1cd78a5 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/assignBasicTypes.qml @@ -9,7 +9,7 @@ MyTypeObject { uintProperty = 10 intProperty = -19 realProperty = 23.2 - doubleProperty = -19.7 + doubleProperty = -19.75 floatProperty = 8.5 colorProperty = "red" dateProperty = "1982-11-25" diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h index 849879e..19bfd37 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h @@ -572,7 +572,7 @@ public: Q_INVOKABLE void method_NoArgs() { invoke(0); } Q_INVOKABLE int method_NoArgs_int() { invoke(1); return 6; } - Q_INVOKABLE qreal method_NoArgs_real() { invoke(2); return 19.7; } + Q_INVOKABLE qreal method_NoArgs_real() { invoke(2); return 19.75; } Q_INVOKABLE QPointF method_NoArgs_QPointF() { invoke(3); return QPointF(123, 4.5); } Q_INVOKABLE QObject *method_NoArgs_QObject() { invoke(4); return this; } Q_INVOKABLE MyInvokableObject *method_NoArgs_unknown() { invoke(5); return this; } diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 43900ae..a6d2dac 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -179,7 +179,7 @@ void tst_qdeclarativeecmascript::assignBasicTypes() QCOMPARE(object->uintProperty(), uint(10)); QCOMPARE(object->intProperty(), -19); QCOMPARE((float)object->realProperty(), float(23.2)); - QCOMPARE((float)object->doubleProperty(), float(-19.7)); + QCOMPARE((float)object->doubleProperty(), float(-19.75)); QCOMPARE((float)object->floatProperty(), float(8.5)); QCOMPARE(object->colorProperty(), QColor("red")); QCOMPARE(object->dateProperty(), QDate(1982, 11, 25)); @@ -207,7 +207,7 @@ void tst_qdeclarativeecmascript::assignBasicTypes() QCOMPARE(object->uintProperty(), uint(10)); QCOMPARE(object->intProperty(), -19); QCOMPARE((float)object->realProperty(), float(23.2)); - QCOMPARE((float)object->doubleProperty(), float(-19.7)); + QCOMPARE((float)object->doubleProperty(), float(-19.75)); QCOMPARE((float)object->floatProperty(), float(8.5)); QCOMPARE(object->colorProperty(), QColor("red")); QCOMPARE(object->dateProperty(), QDate(1982, 11, 25)); @@ -280,8 +280,8 @@ void tst_qdeclarativeecmascript::signalAssignment() MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create()); QVERIFY(object != 0); QCOMPARE(object->string(), QString()); - emit object->argumentSignal(19, "Hello world!", 10.3); - QCOMPARE(object->string(), QString("pass 19 Hello world! 10.3")); + emit object->argumentSignal(19, "Hello world!", 10.25); + QCOMPARE(object->string(), QString("pass 19 Hello world! 10.25")); } } @@ -1387,7 +1387,7 @@ void tst_qdeclarativeecmascript::callQtInvokables() QCOMPARE(o.actuals().count(), 0); o.reset(); - QVERIFY(engine->evaluate("object.method_NoArgs_real()").strictlyEquals(QScriptValue(engine, 19.7))); + QVERIFY(engine->evaluate("object.method_NoArgs_real()").strictlyEquals(QScriptValue(engine, 19.75))); QCOMPARE(o.error(), false); QCOMPARE(o.invoked(), 2); QCOMPARE(o.actuals().count(), 0); @@ -1818,7 +1818,7 @@ void tst_qdeclarativeecmascript::scriptConnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toBool(), false); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toBool(), true); delete object; @@ -1831,7 +1831,7 @@ void tst_qdeclarativeecmascript::scriptConnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toBool(), false); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toBool(), true); delete object; @@ -1844,7 +1844,7 @@ void tst_qdeclarativeecmascript::scriptConnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toBool(), false); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toBool(), true); delete object; @@ -1857,7 +1857,7 @@ void tst_qdeclarativeecmascript::scriptConnect() QVERIFY(object != 0); QCOMPARE(object->methodCalled(), false); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->methodCalled(), true); delete object; @@ -1870,7 +1870,7 @@ void tst_qdeclarativeecmascript::scriptConnect() QVERIFY(object != 0); QCOMPARE(object->methodCalled(), false); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->methodCalled(), true); delete object; @@ -1883,7 +1883,7 @@ void tst_qdeclarativeecmascript::scriptConnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toInt(), 0); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 2); delete object; @@ -1899,13 +1899,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toInt(), 0); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 1); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 2); emit object->basicSignal(); QCOMPARE(object->property("test").toInt(), 2); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 2); delete object; @@ -1918,13 +1918,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toInt(), 0); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 1); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 2); emit object->basicSignal(); QCOMPARE(object->property("test").toInt(), 2); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 2); delete object; @@ -1937,13 +1937,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toInt(), 0); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 1); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 2); emit object->basicSignal(); QCOMPARE(object->property("test").toInt(), 2); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 3); delete object; @@ -1955,13 +1955,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect() QVERIFY(object != 0); QCOMPARE(object->property("test").toInt(), 0); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 1); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 2); emit object->basicSignal(); QCOMPARE(object->property("test").toInt(), 2); - emit object->argumentSignal(19, "Hello world!", 10.3); + emit object->argumentSignal(19, "Hello world!", 10.25); QCOMPARE(object->property("test").toInt(), 3); delete object; diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart-arm.png b/tests/auto/declarative/qdeclarativeimage/data/heart-arm.png new file mode 100644 index 0000000..3245027 Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/heart-arm.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart200-arm.png b/tests/auto/declarative/qdeclarativeimage/data/heart200-arm.png new file mode 100644 index 0000000..b16db76 Binary files /dev/null and b/tests/auto/declarative/qdeclarativeimage/data/heart200-arm.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index adee312..b8d2828 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -123,8 +123,8 @@ void tst_qdeclarativeimage::noSource() void tst_qdeclarativeimage::imageSource_data() { QTest::addColumn<QString>("source"); - QTest::addColumn<qreal>("width"); - QTest::addColumn<qreal>("height"); + QTest::addColumn<double>("width"); + QTest::addColumn<double>("height"); QTest::addColumn<bool>("remote"); QTest::addColumn<bool>("async"); QTest::addColumn<QString>("error"); @@ -136,6 +136,7 @@ void tst_qdeclarativeimage::imageSource_data() QTest::newRow("local async not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString() << 0.0 << 0.0 << false << true << "file::2:1: QML Image: Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString(); QTest::newRow("remote") << SERVER_ADDR "/colors.png" << 120.0 << 120.0 << true << false << ""; + QTest::newRow("remote redirected") << SERVER_ADDR "/oldcolors.png" << 120.0 << 120.0 << true << false << ""; QTest::newRow("remote svg") << SERVER_ADDR "/heart.svg" << 550.0 << 500.0 << true << false << ""; QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << 0.0 << 0.0 << true << false << "file::2:1: QML Image: Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found"; @@ -145,8 +146,8 @@ void tst_qdeclarativeimage::imageSource_data() void tst_qdeclarativeimage::imageSource() { QFETCH(QString, source); - QFETCH(qreal, width); - QFETCH(qreal, height); + QFETCH(double, width); + QFETCH(double, height); QFETCH(bool, remote); QFETCH(bool, async); QFETCH(QString, error); @@ -155,6 +156,7 @@ void tst_qdeclarativeimage::imageSource() if (remote) { QVERIFY(server.isValid()); server.serveDirectory(SRCDIR "/data"); + server.addRedirect("oldcolors.png", SERVER_ADDR "/colors.png"); } if (!error.isEmpty()) @@ -177,8 +179,8 @@ void tst_qdeclarativeimage::imageSource() if (error.isEmpty()) { TRY_WAIT(obj->status() == QDeclarativeImage::Ready); - QCOMPARE(obj->width(), width); - QCOMPARE(obj->height(), height); + QCOMPARE(obj->width(), qreal(width)); + QCOMPARE(obj->height(), qreal(height)); QCOMPARE(obj->fillMode(), QDeclarativeImage::Stretch); QCOMPARE(obj->progress(), 1.0); } else { @@ -276,6 +278,8 @@ void tst_qdeclarativeimage::svg() QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart-mac.png")); #elif defined(Q_OS_WIN32) QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart-win32.png")); +#elif defined(QT_ARCH_ARM) + QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart-arm.png")); #else QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart.png")); #endif @@ -290,6 +294,8 @@ void tst_qdeclarativeimage::svg() QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart200-mac.png")); #elif defined(Q_OS_WIN32) QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart200-win32.png")); +#elif defined(QT_ARCH_ARM) + QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart200-arm.png")); #else QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart200.png")); #endif diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp index 9d62f22..e0b46f0 100644 --- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp +++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp @@ -256,9 +256,7 @@ void tst_qdeclarativeimageprovider::requestPixmap_async() engine.addImageProvider("test", provider); QVERIFY(engine.imageProvider("test") != 0); - QTest::ignoreMessage(QtWarningMsg, - "Pixmaps must be loaded synchronously, ignoring asynchronous property for Image with source: \"image://test/pixmap-async-test.png\""); - + // pixmaps are loaded synchronously regardless of 'asynchronous' value QString componentStr = "import Qt 4.7\nImage { asynchronous: true; source: \"image://test/pixmap-async-test.png\" }"; QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); diff --git a/tests/auto/declarative/qdeclarativelanguage/data/importFile.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/importFile.errors.txt new file mode 100644 index 0000000..3fdac09 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/importFile.errors.txt @@ -0,0 +1 @@ +1:1:"MyComponent.qml": no such directory diff --git a/tests/auto/declarative/qdeclarativelanguage/data/importFile.qml b/tests/auto/declarative/qdeclarativelanguage/data/importFile.qml new file mode 100644 index 0000000..a0d8410 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/importFile.qml @@ -0,0 +1,3 @@ +import "MyComponent.qml" 1.0 + +MyComponent { text: "Hello" } diff --git a/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt index 886da55..6e11786 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/nestedErrors.errors.txt @@ -1,2 +1,2 @@ 4:5:Unable to create type NestedErrorsType -4:8:Invalid property assignment: double expected +4:8:Invalid property assignment: number expected diff --git a/tests/auto/declarative/qdeclarativelanguage/data/wrongType.6.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.6.errors.txt index d0a0b00..d2b8c54 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/wrongType.6.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.6.errors.txt @@ -1 +1 @@ -3:19:Invalid property assignment: double expected +3:19:Invalid property assignment: number expected diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index e687ba0..fcdf926 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -289,6 +289,7 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("importNonExistOlder (installed)") << "importNonExistOlder.qml" << "importNonExistOlder.errors.txt" << false; QTest::newRow("importNewerVersion (installed)") << "importNewerVersion.qml" << "importNewerVersion.errors.txt" << false; QTest::newRow("invalidImportID") << "invalidImportID.qml" << "invalidImportID.errors.txt" << false; + QTest::newRow("importFile") << "importFile.qml" << "importFile.errors.txt" << false; QTest::newRow("signal.1") << "signal.1.qml" << "signal.1.errors.txt" << false; QTest::newRow("signal.2") << "signal.2.qml" << "signal.2.errors.txt" << false; diff --git a/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp b/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp index 8964f8a..b06ad7c 100644 --- a/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp +++ b/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp @@ -124,6 +124,7 @@ QML_DECLARE_TYPE(ValueInterceptorTestType); { \ cpptype v = (value); cpptype v2 = (value); \ QVERIFY(QDeclarativeMetaType::copy(QMetaType:: metatype, &v, 0)); \ + QCOMPARE((cpptype)(v),(cpptype)(defaultvalue)); \ QVERIFY(v == (defaultvalue)); \ QVERIFY(QDeclarativeMetaType::copy(QMetaType:: metatype, &v, &v2)); \ QVERIFY(v == (value)); \ @@ -273,7 +274,7 @@ void tst_qdeclarativemetatype::copy() QWidget widgetValue; COPY_TEST(QObject *, QObjectStar, &objectValue, 0); COPY_TEST(QWidget *, QWidgetStar, &widgetValue, 0); - COPY_TEST(qreal, QReal, 10.2, 0); + COPY_TEST(qreal, QReal, 10.5, 0); { QVariant tv = QVariant::fromValue(QVariant(10)); diff --git a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow1.qml b/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow1.qml deleted file mode 100644 index 8c9d8ad..0000000 --- a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow1.qml +++ /dev/null @@ -1,3 +0,0 @@ -import Qt 4.7 - -SmoothedFollow {} diff --git a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow2.qml b/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow2.qml deleted file mode 100644 index a634302..0000000 --- a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow2.qml +++ /dev/null @@ -1,5 +0,0 @@ -import Qt 4.7 - -SmoothedFollow { - to: 10; duration: 300; reversingMode: SmoothedFollow.Immediate -} diff --git a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow3.qml b/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow3.qml deleted file mode 100644 index c60da7f..0000000 --- a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollow3.qml +++ /dev/null @@ -1,6 +0,0 @@ -import Qt 4.7 - -SmoothedFollow { - to: 10; velocity: 250; reversingMode: SmoothedFollow.Sync - maximumEasingTime: 150 -} diff --git a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowDisabled.qml b/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowDisabled.qml deleted file mode 100644 index 486bdee..0000000 --- a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowDisabled.qml +++ /dev/null @@ -1,13 +0,0 @@ -import Qt 4.7 - -Rectangle { - width: 300; height: 300; - Rectangle { - objectName: "theRect" - color: "red" - width: 60; height: 60; - x: 100; y: 100; - SmoothedFollow on x { id: animX; objectName: "animX"; to: 200; enabled: true; duration: 200 } - SmoothedFollow on y { id: animY; objectName: "animY"; to: 200; enabled: false; duration: 200 } - } -} diff --git a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowValueSource.qml b/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowValueSource.qml deleted file mode 100644 index 2e01d74..0000000 --- a/tests/auto/declarative/qdeclarativesmoothedfollow/data/smoothedfollowValueSource.qml +++ /dev/null @@ -1,13 +0,0 @@ -import Qt 4.7 - -Rectangle { - width: 300; height: 300; - Rectangle { - objectName: "theRect" - color: "red" - width: 60; height: 60; - x: 100; y: 100; - SmoothedFollow on x { objectName: "easeX"; to: 200; velocity: 500 } - SmoothedFollow on y { objectName: "easeY"; to: 200; duration: 250; velocity: 500 } - } -} diff --git a/tests/auto/declarative/qdeclarativesmoothedfollow/qdeclarativesmoothedfollow.pro b/tests/auto/declarative/qdeclarativesmoothedfollow/qdeclarativesmoothedfollow.pro deleted file mode 100644 index dff4922..0000000 --- a/tests/auto/declarative/qdeclarativesmoothedfollow/qdeclarativesmoothedfollow.pro +++ /dev/null @@ -1,16 +0,0 @@ -load(qttest_p4) -contains(QT_CONFIG,declarative): QT += declarative gui -macx:CONFIG -= app_bundle - -SOURCES += tst_qdeclarativesmoothedfollow.cpp - -symbian: { - importFiles.sources = data - importFiles.path = . - DEPLOYMENT = importFiles -} else { - DEFINES += SRCDIR=\\\"$$PWD\\\" -} - -CONFIG += parallel_test - diff --git a/tests/auto/declarative/qdeclarativesmoothedfollow/tst_qdeclarativesmoothedfollow.cpp b/tests/auto/declarative/qdeclarativesmoothedfollow/tst_qdeclarativesmoothedfollow.cpp deleted file mode 100644 index b9ac23f..0000000 --- a/tests/auto/declarative/qdeclarativesmoothedfollow/tst_qdeclarativesmoothedfollow.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include <qtest.h> -#include <QtDeclarative/qdeclarativeengine.h> -#include <QtDeclarative/qdeclarativecomponent.h> -#include <QtDeclarative/qdeclarativeview.h> - -#include <private/qdeclarativesmoothedfollow_p.h> -#include <private/qdeclarativerectangle_p.h> -#include <private/qdeclarativevaluetype_p.h> -#include "../../../shared/util.h" - -#ifdef Q_OS_SYMBIAN -// In Symbian OS test data is located in applications private dir -#define SRCDIR "." -#endif - -class tst_qdeclarativesmoothedfollow : public QObject -{ - Q_OBJECT -public: - tst_qdeclarativesmoothedfollow(); - -private slots: - void defaultValues(); - void values(); - void disabled(); - void valueSource(); - void followTo(); - -private: - QDeclarativeEngine engine; -}; - -tst_qdeclarativesmoothedfollow::tst_qdeclarativesmoothedfollow() -{ -} - -void tst_qdeclarativesmoothedfollow::defaultValues() -{ - QDeclarativeEngine engine; - QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/smoothedfollow1.qml")); - QDeclarativeSmoothedFollow *obj = qobject_cast<QDeclarativeSmoothedFollow*>(c.create()); - - QVERIFY(obj != 0); - - QCOMPARE(obj->to(), 0.); - QCOMPARE(obj->velocity(), 200.); - QCOMPARE(obj->duration(), -1); - QCOMPARE(obj->maximumEasingTime(), -1); - QCOMPARE(obj->reversingMode(), QDeclarativeSmoothedFollow::Eased); - - delete obj; -} - -void tst_qdeclarativesmoothedfollow::values() -{ - QDeclarativeEngine engine; - QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/smoothedfollow2.qml")); - QDeclarativeSmoothedFollow *obj = qobject_cast<QDeclarativeSmoothedFollow*>(c.create()); - - QVERIFY(obj != 0); - - QCOMPARE(obj->to(), 10.); - QCOMPARE(obj->velocity(), 200.); - QCOMPARE(obj->duration(), 300); - QCOMPARE(obj->maximumEasingTime(), -1); - QCOMPARE(obj->reversingMode(), QDeclarativeSmoothedFollow::Immediate); - - delete obj; -} - -void tst_qdeclarativesmoothedfollow::disabled() -{ - QDeclarativeEngine engine; - QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/smoothedfollow3.qml")); - QDeclarativeSmoothedFollow *obj = qobject_cast<QDeclarativeSmoothedFollow*>(c.create()); - - QVERIFY(obj != 0); - - QCOMPARE(obj->to(), 10.); - QCOMPARE(obj->velocity(), 250.); - QCOMPARE(obj->maximumEasingTime(), 150); - QCOMPARE(obj->reversingMode(), QDeclarativeSmoothedFollow::Sync); - - delete obj; -} - -void tst_qdeclarativesmoothedfollow::valueSource() -{ - QDeclarativeEngine engine; - - QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/smoothedfollowValueSource.qml")); - - QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); - QVERIFY(rect); - - QDeclarativeRectangle *theRect = rect->findChild<QDeclarativeRectangle*>("theRect"); - QVERIFY(theRect); - - QDeclarativeSmoothedFollow *easeX = rect->findChild<QDeclarativeSmoothedFollow*>("easeX"); - QVERIFY(easeX); - QVERIFY(easeX->enabled()); - - QDeclarativeSmoothedFollow *easeY = rect->findChild<QDeclarativeSmoothedFollow*>("easeY"); - QVERIFY(easeY); - QVERIFY(easeY->enabled()); - - // XXX get the proper duration - QTest::qWait(200); - - QTRY_COMPARE(theRect->x(), easeX->to()); - QTRY_COMPARE(theRect->y(), easeY->to()); - - QTRY_COMPARE(theRect->x(), qreal(200)); - QTRY_COMPARE(theRect->y(), qreal(200)); -} - -void tst_qdeclarativesmoothedfollow::followTo() -{ - QDeclarativeView canvas; - canvas.setFixedSize(240,320); - - canvas.setSource(QUrl::fromLocalFile(SRCDIR "/data/smoothedfollowDisabled.qml")); - canvas.show(); - canvas.setFocus(); - QVERIFY(canvas.rootObject() != 0); - - QDeclarativeRectangle *rect = canvas.rootObject()->findChild<QDeclarativeRectangle*>("theRect"); - QVERIFY(rect != 0); - - QDeclarativeSmoothedFollow *animX = canvas.rootObject()->findChild<QDeclarativeSmoothedFollow*>("animX"); - QVERIFY(animX != 0); - QDeclarativeSmoothedFollow *animY = canvas.rootObject()->findChild<QDeclarativeSmoothedFollow*>("animY"); - QVERIFY(animY != 0); - - QVERIFY(animX->enabled()); - QVERIFY(!animY->enabled()); - - // animX should track 'to' - animX->setTo(50.0); - // animY should not track this 'to' change - animY->setTo(50.0); - - // XXX get the proper duration - QTest::qWait(250); - - QTRY_COMPARE(rect->x(), animX->to()); - - QCOMPARE(rect->x(), 50.0); - QCOMPARE(rect->y(), 100.0); -} - -QTEST_MAIN(tst_qdeclarativesmoothedfollow) - -#include "tst_qdeclarativesmoothedfollow.moc" diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments.qml b/tests/auto/declarative/qdeclarativetext/data/alignments.qml index b1f701b..762e2b6 100644 --- a/tests/auto/declarative/qdeclarativetext/data/alignments.qml +++ b/tests/auto/declarative/qdeclarativetext/data/alignments.qml @@ -20,9 +20,9 @@ Rectangle { id: t anchors.fill: parent - horizontalAlignment: TextEdit.AlignRight - verticalAlignment: TextEdit.AlignBottom - wrapMode: TextEdit.WordWrap + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignBottom + wrapMode: Text.WordWrap text: top.txt } Timer { diff --git a/tests/auto/declarative/qdeclarativetextedit/data/alignments.qml b/tests/auto/declarative/qdeclarativetextedit/data/alignments.qml index b1f701b..9281a06 100644 --- a/tests/auto/declarative/qdeclarativetextedit/data/alignments.qml +++ b/tests/auto/declarative/qdeclarativetextedit/data/alignments.qml @@ -16,7 +16,7 @@ Rectangle { height: 40 color: "green" - Text { + TextEdit { id: t anchors.fill: parent diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 0723b36..57a5e29 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -53,6 +53,7 @@ #include <private/qdeclarativetextedit_p_p.h> #include <QFontMetrics> #include <QDeclarativeView> +#include <QDir> #include <QStyle> #include <QInputContext> #include <private/qapplication_p.h> @@ -63,6 +64,23 @@ #define SRCDIR "." #endif +QString createExpectedFileIfNotFound(const QString& filebasename, const QImage& actual) +{ + // XXX This will be replaced by some clever persistent platform image store. + QString persistent_dir = SRCDIR "/data"; + QString arch = "unknown-architecture"; // QTest needs to help with this. + + QString expectfile = persistent_dir + QDir::separator() + filebasename + "-" + arch + ".png"; + + if (!QFile::exists(expectfile)) { + actual.save(expectfile); + qWarning() << "created" << expectfile; + } + + return expectfile; +} + + class tst_qdeclarativetextedit : public QObject { @@ -309,17 +327,17 @@ void tst_qdeclarativetextedit::alignments_data() QTest::addColumn<int>("vAlign"); QTest::addColumn<QString>("expectfile"); - QTest::newRow("LT") << int(Qt::AlignLeft) << int(Qt::AlignTop) << SRCDIR "/data/alignments_lt.png"; - QTest::newRow("RT") << int(Qt::AlignRight) << int(Qt::AlignTop) << SRCDIR "/data/alignments_rt.png"; - QTest::newRow("CT") << int(Qt::AlignHCenter) << int(Qt::AlignTop) << SRCDIR "/data/alignments_ct.png"; + QTest::newRow("LT") << int(Qt::AlignLeft) << int(Qt::AlignTop) << "alignments_lt"; + QTest::newRow("RT") << int(Qt::AlignRight) << int(Qt::AlignTop) << "alignments_rt"; + QTest::newRow("CT") << int(Qt::AlignHCenter) << int(Qt::AlignTop) << "alignments_ct"; - QTest::newRow("LB") << int(Qt::AlignLeft) << int(Qt::AlignBottom) << SRCDIR "/data/alignments_lb.png"; - QTest::newRow("RB") << int(Qt::AlignRight) << int(Qt::AlignBottom) << SRCDIR "/data/alignments_rb.png"; - QTest::newRow("CB") << int(Qt::AlignHCenter) << int(Qt::AlignBottom) << SRCDIR "/data/alignments_cb.png"; + QTest::newRow("LB") << int(Qt::AlignLeft) << int(Qt::AlignBottom) << "alignments_lb"; + QTest::newRow("RB") << int(Qt::AlignRight) << int(Qt::AlignBottom) << "alignments_rb"; + QTest::newRow("CB") << int(Qt::AlignHCenter) << int(Qt::AlignBottom) << "alignments_cb"; - QTest::newRow("LC") << int(Qt::AlignLeft) << int(Qt::AlignVCenter) << SRCDIR "/data/alignments_lc.png"; - QTest::newRow("RC") << int(Qt::AlignRight) << int(Qt::AlignVCenter) << SRCDIR "/data/alignments_rc.png"; - QTest::newRow("CC") << int(Qt::AlignHCenter) << int(Qt::AlignVCenter) << SRCDIR "/data/alignments_cc.png"; + QTest::newRow("LC") << int(Qt::AlignLeft) << int(Qt::AlignVCenter) << "alignments_lc"; + QTest::newRow("RC") << int(Qt::AlignRight) << int(Qt::AlignVCenter) << "alignments_rc"; + QTest::newRow("CC") << int(Qt::AlignHCenter) << int(Qt::AlignVCenter) << "alignments_cc"; } @@ -329,13 +347,6 @@ void tst_qdeclarativetextedit::alignments() QFETCH(int, vAlign); QFETCH(QString, expectfile); -#ifdef Q_WS_X11 - // Font-specific, but not likely platform-specific, so only test on one platform - QFont fn; - fn.setRawName("-misc-fixed-medium-r-*-*-8-*-*-*-*-*-*-*"); - QApplication::setFont(fn); -#endif - QDeclarativeView *canvas = createView(SRCDIR "/data/alignments.qml"); canvas->show(); @@ -353,14 +364,11 @@ void tst_qdeclarativetextedit::alignments() QPainter p(&actual); canvas->render(&p); + expectfile = createExpectedFileIfNotFound(expectfile, actual); + QImage expect(expectfile); -#ifdef Q_WS_X11 - // Font-specific, but not likely platform-specific, so only test on one platform - if (QApplicationPrivate::graphics_system_name == "raster" || QApplicationPrivate::graphics_system_name == "") { - QCOMPARE(actual,expect); - } -#endif + QCOMPARE(actual,expect); } @@ -846,6 +854,18 @@ void tst_qdeclarativetextedit::navigation() void tst_qdeclarativetextedit::copyAndPaste() { #ifndef QT_NO_CLIPBOARD + +#ifdef Q_WS_MAC + { + PasteboardRef pasteboard; + OSStatus status = PasteboardCreate(0, &pasteboard); + if (status == noErr) + CFRelease(pasteboard); + else + QSKIP("This machine doesn't support the clipboard", SkipAll); + } +#endif + QString componentStr = "import Qt 4.7\nTextEdit { text: \"Hello world!\" }"; QDeclarativeComponent textEditComponent(&engine); textEditComponent.setData(componentStr.toLatin1(), QUrl()); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index aceebf3..6e15a4a 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -47,6 +47,7 @@ #include <private/qdeclarativetextinput_p.h> #include <private/qdeclarativetextinput_p_p.h> #include <QDebug> +#include <QDir> #include <QStyle> #include <QInputContext> #include <private/qapplication_p.h> @@ -56,6 +57,22 @@ #define SRCDIR "." #endif +QString createExpectedFileIfNotFound(const QString& filebasename, const QImage& actual) +{ + // XXX This will be replaced by some clever persistent platform image store. + QString persistent_dir = SRCDIR "/data"; + QString arch = "unknown-architecture"; // QTest needs to help with this. + + QString expectfile = persistent_dir + QDir::separator() + filebasename + "-" + arch + ".png"; + + if (!QFile::exists(expectfile)) { + actual.save(expectfile); + qWarning() << "created" << expectfile; + } + + return expectfile; +} + class tst_qdeclarativetextinput : public QObject { @@ -176,7 +193,8 @@ void tst_qdeclarativetextinput::width() QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput*>(textinputComponent.create()); QVERIFY(textinputObject != 0); - QCOMPARE(textinputObject->width(), qreal(metricWidth) + 1.);//1 for the cursor + int delta = abs(int(textinputObject->width()) - metricWidth); + QVERIFY(delta <= 3.0); // As best as we can hope for cross-platform. delete textinputObject; } @@ -381,9 +399,9 @@ void tst_qdeclarativetextinput::horizontalAlignment_data() QTest::addColumn<int>("hAlign"); QTest::addColumn<QString>("expectfile"); - QTest::newRow("L") << int(Qt::AlignLeft) << SRCDIR "/data/halign_left.png"; - QTest::newRow("R") << int(Qt::AlignRight) << SRCDIR "/data/halign_right.png"; - QTest::newRow("C") << int(Qt::AlignHCenter) << SRCDIR "/data/halign_center.png"; + QTest::newRow("L") << int(Qt::AlignLeft) << "halign_left"; + QTest::newRow("R") << int(Qt::AlignRight) << "halign_right"; + QTest::newRow("C") << int(Qt::AlignHCenter) << "halign_center"; } void tst_qdeclarativetextinput::horizontalAlignment() @@ -391,13 +409,6 @@ void tst_qdeclarativetextinput::horizontalAlignment() QFETCH(int, hAlign); QFETCH(QString, expectfile); -#ifdef Q_WS_X11 - // Font-specific, but not likely platform-specific, so only test on one platform - QFont fn; - fn.setRawName("-misc-fixed-medium-r-*-*-8-*-*-*-*-*-*-*"); - QApplication::setFont(fn); -#endif - QDeclarativeView *canvas = createView(SRCDIR "/data/horizontalAlignment.qml"); canvas->show(); @@ -409,17 +420,18 @@ void tst_qdeclarativetextinput::horizontalAlignment() ob->setProperty("horizontalAlignment",hAlign); QImage actual(canvas->width(), canvas->height(), QImage::Format_RGB32); actual.fill(qRgb(255,255,255)); - QPainter p(&actual); - canvas->render(&p); + { + QPainter p(&actual); + canvas->render(&p); + } + + expectfile = createExpectedFileIfNotFound(expectfile, actual); QImage expect(expectfile); -#ifdef Q_WS_X11 - // Font-specific, but not likely platform-specific, so only test on one platform - if (QApplicationPrivate::graphics_system_name == "raster" || QApplicationPrivate::graphics_system_name == "") { - QCOMPARE(actual,expect); - } -#endif + QCOMPARE(actual,expect); + + delete canvas; } void tst_qdeclarativetextinput::positionAt() @@ -464,11 +476,13 @@ void tst_qdeclarativetextinput::positionAt() void tst_qdeclarativetextinput::maxLength() { - //QString componentStr = "import Qt 4.7\nTextInput { maximumLength: 10; }"; QDeclarativeView *canvas = createView(SRCDIR "/data/maxLength.qml"); + QVERIFY(canvas->rootObject() != 0); canvas->show(); canvas->setFocus(); - QVERIFY(canvas->rootObject() != 0); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); QVERIFY(textinputObject != 0); QVERIFY(textinputObject->text().isEmpty()); @@ -686,6 +700,18 @@ void tst_qdeclarativetextinput::navigation() void tst_qdeclarativetextinput::copyAndPaste() { #ifndef QT_NO_CLIPBOARD + +#ifdef Q_WS_MAC + { + PasteboardRef pasteboard; + OSStatus status = PasteboardCreate(0, &pasteboard); + if (status == noErr) + CFRelease(pasteboard); + else + QSKIP("This machine doesn't support the clipboard", SkipAll); + } +#endif + QString componentStr = "import Qt 4.7\nTextInput { text: \"Hello world!\" }"; QDeclarativeComponent textInputComponent(&engine); textInputComponent.setData(componentStr.toLatin1(), QUrl()); @@ -776,6 +802,9 @@ void tst_qdeclarativetextinput::echoMode() QDeclarativeView *canvas = createView(SRCDIR "/data/echoMode.qml"); canvas->show(); canvas->setFocus(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); QVERIFY(canvas->rootObject() != 0); @@ -823,6 +852,7 @@ void tst_qdeclarativetextinput::echoMode() QCOMPARE(input->text(), QLatin1String("a")); QCOMPARE(input->displayText(), QLatin1String("a")); input->setFocus(false); + QVERIFY(input->hasActiveFocus() == false); QCOMPARE(input->displayText(), QLatin1String("Q")); } diff --git a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp index 81334f2..a4819f3 100644 --- a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp +++ b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp @@ -141,8 +141,8 @@ void tst_qdeclarativevaluetypes::pointf() MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); QVERIFY(object != 0); - QCOMPARE(object->property("p_x").toDouble(), 11.3); - QCOMPARE(object->property("p_y").toDouble(), -10.9); + QCOMPARE(float(object->property("p_x").toDouble()), float(11.3)); + QCOMPARE(float(object->property("p_y").toDouble()), float(-10.9)); QCOMPARE(object->property("copy"), QVariant(QPointF(11.3, -10.9))); delete object; @@ -191,8 +191,8 @@ void tst_qdeclarativevaluetypes::sizef() MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); QVERIFY(object != 0); - QCOMPARE(object->property("s_width").toDouble(), 0.1); - QCOMPARE(object->property("s_height").toDouble(), 100923.2); + QCOMPARE(float(object->property("s_width").toDouble()), float(0.1)); + QCOMPARE(float(object->property("s_height").toDouble()), float(100923.2)); QCOMPARE(object->property("copy"), QVariant(QSizeF(0.1, 100923.2))); delete object; @@ -287,10 +287,10 @@ void tst_qdeclarativevaluetypes::rectf() MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); QVERIFY(object != 0); - QCOMPARE(object->property("r_x").toDouble(), 103.8); - QCOMPARE(object->property("r_y").toDouble(), 99.2); - QCOMPARE(object->property("r_width").toDouble(), 88.1); - QCOMPARE(object->property("r_height").toDouble(), 77.6); + QCOMPARE(float(object->property("r_x").toDouble()), float(103.8)); + QCOMPARE(float(object->property("r_y").toDouble()), float(99.2)); + QCOMPARE(float(object->property("r_width").toDouble()), float(88.1)); + QCOMPARE(float(object->property("r_height").toDouble()), float(77.6)); QCOMPARE(object->property("copy"), QVariant(QRectF(103.8, 99.2, 88.1, 77.6))); delete object; diff --git a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp index 5344698..de8d222 100644 --- a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp +++ b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp @@ -130,6 +130,8 @@ void tst_QDeclarativeViewer::orientation() QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300)); QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), viewer->sizeHint()); + + delete viewer; } void tst_QDeclarativeViewer::loading() @@ -150,16 +152,16 @@ void tst_QDeclarativeViewer::loading() TEST_INITIAL_SIZES(viewer); - viewer->resize(QSize(400, 500)); + viewer->resize(QSize(250, 350)); qApp->processEvents(); // window resized - QTRY_COMPARE(rootItem->width(), 400.0); - QTRY_COMPARE(rootItem->height(), 500.0 - MENUBAR_HEIGHT(viewer)); - QCOMPARE(viewer->view()->size(), QSize(400, 500 - MENUBAR_HEIGHT(viewer))); + QTRY_COMPARE(rootItem->width(), 250.0); + QTRY_COMPARE(rootItem->height(), 350.0 - MENUBAR_HEIGHT(viewer)); + QCOMPARE(viewer->view()->size(), QSize(250, 350 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); - QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(400, 500 - MENUBAR_HEIGHT(viewer))); - QCOMPARE(viewer->size(), QSize(400, 500)); + QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(250, 350 - MENUBAR_HEIGHT(viewer))); + QCOMPARE(viewer->size(), QSize(250, 350)); QCOMPARE(viewer->size(), viewer->sizeHint()); viewer->reload(); @@ -175,16 +177,16 @@ void tst_QDeclarativeViewer::loading() QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), viewer->sizeHint()); - viewer->resize(QSize(400, 500)); + viewer->resize(QSize(250, 350)); qApp->processEvents(); // window resized again - QTRY_COMPARE(rootItem->width(), 400.0); - QTRY_COMPARE(rootItem->height(), 500.0 - MENUBAR_HEIGHT(viewer)); - QCOMPARE(viewer->view()->size(), QSize(400, 500 - MENUBAR_HEIGHT(viewer))); + QTRY_COMPARE(rootItem->width(), 250.0); + QTRY_COMPARE(rootItem->height(), 350.0 - MENUBAR_HEIGHT(viewer)); + QCOMPARE(viewer->view()->size(), QSize(250, 350 - MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->view()->initialSize(), QSize(200, 300)); - QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(400, 500 - MENUBAR_HEIGHT(viewer))); - QCOMPARE(viewer->size(), QSize(400, 500)); + QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(250, 350 - MENUBAR_HEIGHT(viewer))); + QCOMPARE(viewer->size(), QSize(250, 350)); QCOMPARE(viewer->size(), viewer->sizeHint()); viewer->open(SRCDIR "/data/orientation.qml"); @@ -199,6 +201,8 @@ void tst_QDeclarativeViewer::loading() QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300)); QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), viewer->sizeHint()); + + delete viewer; } void tst_QDeclarativeViewer::fileBrowser() @@ -233,6 +237,8 @@ void tst_QDeclarativeViewer::fileBrowser() QVERIFY(viewer->view()); QVERIFY(viewer->menuBar()); QVERIFY(browserItem); + + delete viewer; } void tst_QDeclarativeViewer::resizing() @@ -288,6 +294,8 @@ void tst_QDeclarativeViewer::resizing() rootItem->setWidth(150); rootItem->setHeight(200); QTRY_COMPARE(viewer->size(), QSize(250, 350)); + + delete viewer; } void tst_QDeclarativeViewer::paths() @@ -300,6 +308,8 @@ void tst_QDeclarativeViewer::paths() viewer->addPluginPath("miscPluginPath"); viewer->view()->engine()->pluginPathList().contains("miscPluginPath"); + + delete viewer; } void tst_QDeclarativeViewer::slowMode() @@ -309,6 +319,8 @@ void tst_QDeclarativeViewer::slowMode() viewer->setSlowMode(true); viewer->setSlowMode(false); + + delete viewer; } QTEST_MAIN(tst_QDeclarativeViewer) diff --git a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp index 8e98874..3140265 100644 --- a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp +++ b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp @@ -134,7 +134,7 @@ void tst_QDeclarativeWorkerScript::messaging_data() QTest::newRow("invalid") << QVariant(); QTest::newRow("bool") << qVariantFromValue(true); QTest::newRow("int") << qVariantFromValue(1001); - QTest::newRow("real") << qVariantFromValue(10334.323); + QTest::newRow("real") << qVariantFromValue(10334.375); QTest::newRow("string") << qVariantFromValue(QString("More cheeeese, Gromit!")); QTest::newRow("variant list") << qVariantFromValue((QVariantList() << "a" << "b" << "c")); } diff --git a/tests/auto/declarative/qmlvisual/focusscope/test.qml b/tests/auto/declarative/qmlvisual/focusscope/test.qml index d83bad4..24b4b99 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/test.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/test.qml @@ -19,14 +19,14 @@ Rectangle { color: "transparent" border.width: 5 - border.color: myScope.wantsFocus?"blue":"black" + border.color: myScope.activeFocus?"blue":"black" Rectangle { id: item1 x: 10; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" Keys.onDigit9Pressed: console.log("Top Left"); KeyNavigation.right: item2 focus: true @@ -42,7 +42,7 @@ Rectangle { x: 310; y: 10 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" KeyNavigation.left: item1 Keys.onDigit9Pressed: console.log("Top Right"); @@ -62,7 +62,7 @@ Rectangle { x: 10; y: 300 width: 100; height: 100; color: "green" border.width: 5 - border.color: wantsFocus?"blue":"black" + border.color: activeFocus?"blue":"black" Keys.onDigit9Pressed: console.log("Bottom Left"); KeyNavigation.up: myScope diff --git a/tests/auto/declarative/qmlvisual/focusscope/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/test2.qml index 7a6ed83..19c8bed 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/test2.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/test2.qml @@ -10,27 +10,27 @@ Rectangle { FocusScope { y: 100 focus: true - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } FocusScope { y: 100 focus: true - Rectangle { width: 50; height: 50; color: parent.wantsFocus?"red":"blue" } + Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } } } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedfollow.qml b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedfollow.qml index 7ca0ca5..0df727b 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedfollow.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedfollow.qml @@ -14,27 +14,27 @@ Rectangle { } Rectangle { - width: 50; height: 20; y: 60; color: "red" - SmoothedFollow on x { to: rect.x; velocity: 400; enabled: true } + width: 50; height: 20; x: rect.x; y: 60; color: "red" + Behavior on x { SmoothedAnimation { velocity: 400 } } } Rectangle { - width: 50; height: 20; y: 90; color: "yellow" - SmoothedFollow on x { to: rect.x; velocity: 300; reversingMode: SmoothedAnimation.Immediate; enabled: true } + width: 50; height: 20; x: rect.x; y: 90; color: "yellow" + Behavior on x { SmoothedAnimation { velocity: 300; reversingMode: SmoothedAnimation.Immediate } } } Rectangle { - width: 50; height: 20; y: 120; color: "green" - SmoothedFollow on x { to: rect.x; reversingMode: SmoothedAnimation.Sync; enabled: true } + width: 50; height: 20; x: rect.x; y: 120; color: "green" + Behavior on x { SmoothedAnimation { reversingMode: SmoothedAnimation.Sync } } } Rectangle { - width: 50; height: 20; y: 150; color: "purple" - SmoothedFollow on x { to: rect.x; maximumEasingTime: 200; enabled: true } + width: 50; height: 20; x: rect.x; y: 150; color: "purple" + Behavior on x { SmoothedAnimation { maximumEasingTime: 200 } } } Rectangle { - width: 50; height: 20; y: 180; color: "blue" - SmoothedFollow on x { to: rect.x; duration: 300; enabled: true } + width: 50; height: 20; x: rect.x; y: 180; color: "blue" + Behavior on x { SmoothedAnimation { duration: 300 } } } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml index d981763..c64497a 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml @@ -22,10 +22,11 @@ Rectangle { smooth: true transform: Rotation { id: hourRotation - origin.x: 7.5; origin.y: 73; angle: 0 - SpringFollow on angle { - spring: 2; damping: 0.2; modulus: 360 - to: (clock.hours * 30) + (clock.minutes * 0.5) + origin.x: 7.5; origin.y: 73 + angle: (clock.hours * 30) + (clock.minutes * 0.5) + + Behavior on angle { + SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } } } } @@ -36,10 +37,11 @@ Rectangle { smooth: true transform: Rotation { id: minuteRotation - origin.x: 6.5; origin.y: 83; angle: 0 - SpringFollow on angle { - spring: 2; damping: 0.2; modulus: 360 - to: clock.minutes * 6 + origin.x: 6.5; origin.y: 83 + angle: clock.minutes * 6 + + Behavior on angle { + SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } } } } @@ -50,10 +52,11 @@ Rectangle { smooth: true transform: Rotation { id: secondRotation - origin.x: 2.5; origin.y: 80; angle: 0 - SpringFollow on angle { - spring: 5; damping: 0.25; modulus: 360 - to: clock.seconds * 6 + origin.x: 2.5; origin.y: 80 + angle: clock.seconds * 6 + + Behavior on angle { + SpringAnimation { spring: 5; damping: 0.25; modulus: 360 } } } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml index cabdce7..05b93df 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml @@ -3,6 +3,7 @@ import Qt 4.7 Rectangle { color: "#ffffff" width: 320; height: 240 + Rectangle { id: rect color: "#00ff00" @@ -25,22 +26,22 @@ Rectangle { Rectangle { color: "#ff0000" x: rect.width; width: rect.width; height: 20 - y: 200 - SpringFollow on y { to: rect.y; velocity: 200 } + y: rect.y + Behavior on y { SpringAnimation { velocity: 200 } } } // Spring Rectangle { color: "#ff0000" x: rect.width * 2; width: rect.width/2; height: 20 - y: 200 - SpringFollow on y { to: rect.y; spring: 1.0; damping: 0.2 } + y: rect.y + Behavior on y { SpringAnimation { spring: 1.0; damping: 0.2 } } } Rectangle { color: "#880000" x: rect.width * 2.5; width: rect.width/2; height: 20 - y: 200 - SpringFollow on y { to: rect.y; spring: 1.0; damping: 0.2; mass: 3.0 } // "heavier" object + y: rect.y + Behavior on y { SpringAnimation { spring: 1.0; damping: 0.2; mass: 3.0 } } // "heavier" object } // Follow mouse @@ -49,15 +50,22 @@ Rectangle { anchors.fill: parent Rectangle { id: ball + property int targetX: mouseRegion.mouseX - 10 + property int targetY: mouseRegion.mouseY - 10 + + x: targetX + y: targetY width: 20; height: 20 radius: 10 color: "#0000ff" - SpringFollow on x { id: f1; to: mouseRegion.mouseX-10; spring: 1.0; damping: 0.05; epsilon: 0.25 } - SpringFollow on y { id: f2; to: mouseRegion.mouseY-10; spring: 1.0; damping: 0.05; epsilon: 0.25 } + + Behavior on x { SpringAnimation { spring: 1.0; damping: 0.05; epsilon: 0.25 } } + Behavior on y { SpringAnimation { spring: 1.0; damping: 0.05; epsilon: 0.25 } } + states: [ State { name: "following" - when: !f1.inSync || !f2.inSync + when: ball.x != ball.targetX || ball.y != ball.targetY PropertyChanges { target: ball; color: "#ff0000" } } ] diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index 6461b67..4b1162e 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -49,6 +49,7 @@ #include <QTranslator> #include <QDebug> #include <QMessageBox> +#include <QAtomicInt> #include "qdeclarativetester.h" QT_USE_NAMESPACE @@ -91,19 +92,25 @@ void showWarnings() } } +static QAtomicInt recursiveLock(0); + void myMessageOutput(QtMsgType type, const char *msg) { - if (!logger.isNull()) { - QString strMsg = QString::fromAscii(msg); - QMetaObject::invokeMethod(logger.data(), "append", Q_ARG(QString, strMsg)); + QString strMsg = QString::fromLatin1(msg); + + if (!logger.isNull() && !QCoreApplication::closingDown()) { + if (recursiveLock.testAndSetOrdered(0, 1)) { + QMetaObject::invokeMethod(logger.data(), "append", Q_ARG(QString, strMsg)); + recursiveLock = 0; + } } else { - warnings += msg; + warnings += strMsg; warnings += QLatin1Char('\n'); } if (systemMsgOutput) { // Windows systemMsgOutput(type, msg); } else { // Unix - fprintf(stderr, "%s\n",msg); + fprintf(stderr, "%s\n", msg); fflush(stderr); } } -- cgit v0.12 From 13c752b82c4db6d9a254454060f8404df24a3532 Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Tue, 27 Jul 2010 16:50:43 +1000 Subject: Missed some tutorial files because of .gitignore. Reviewed-by: Martin Jones --- .../modelviews/pathview/pathview-example.qml | 107 +++++++++++++++++++++ .../modelviews/pathview/pathview.qmlproject | 16 +++ .../modelviews/pathview/pics/AddressBook_48.png | Bin 0 -> 3350 bytes .../modelviews/pathview/pics/AudioPlayer_48.png | Bin 0 -> 3806 bytes .../modelviews/pathview/pics/Camera_48.png | Bin 0 -> 3540 bytes .../modelviews/pathview/pics/DateBook_48.png | Bin 0 -> 2610 bytes .../modelviews/pathview/pics/EMail_48.png | Bin 0 -> 3655 bytes .../modelviews/pathview/pics/TodoList_48.png | Bin 0 -> 3429 bytes .../modelviews/pathview/pics/VideoPlayer_48.png | Bin 0 -> 4151 bytes .../extending/chapter1-basics/piechart.cpp | 81 ++++++++++++++++ .../tutorials/extending/chapter1-basics/piechart.h | 71 ++++++++++++++ .../extending/chapter2-methods/piechart.cpp | 87 +++++++++++++++++ .../extending/chapter2-methods/piechart.h | 84 ++++++++++++++++ .../extending/chapter3-bindings/piechart.cpp | 89 +++++++++++++++++ .../extending/chapter3-bindings/piechart.h | 84 ++++++++++++++++ .../chapter4-customPropertyTypes/piechart.cpp | 72 ++++++++++++++ .../chapter4-customPropertyTypes/piechart.h | 78 +++++++++++++++ .../chapter4-customPropertyTypes/pieslice.cpp | 68 +++++++++++++ .../chapter4-customPropertyTypes/pieslice.h | 66 +++++++++++++ .../extending/chapter5-listproperties/app.qml | 70 ++++++++++++++ .../chapter5-listproperties.pro | 7 ++ .../extending/chapter5-listproperties/main.cpp | 58 +++++++++++ .../extending/chapter5-listproperties/piechart.cpp | 72 ++++++++++++++ .../extending/chapter5-listproperties/piechart.h | 75 +++++++++++++++ .../extending/chapter5-listproperties/pieslice.cpp | 88 +++++++++++++++++ .../extending/chapter5-listproperties/pieslice.h | 76 +++++++++++++++ .../tutorials/extending/chapter6-plugins/app.qml | 68 +++++++++++++ .../chapter6-plugins/chapter6-plugins.pro | 20 ++++ .../extending/chapter6-plugins/chartsplugin.cpp | 54 +++++++++++ .../extending/chapter6-plugins/chartsplugin.h | 55 +++++++++++ .../extending/chapter6-plugins/piechart.cpp | 71 ++++++++++++++ .../extending/chapter6-plugins/piechart.h | 69 +++++++++++++ .../extending/chapter6-plugins/pieslice.cpp | 88 +++++++++++++++++ .../extending/chapter6-plugins/pieslice.h | 74 ++++++++++++++ .../tutorials/extending/chapter6-plugins/qmldir | 1 + 35 files changed, 1849 insertions(+) create mode 100644 examples/declarative/modelviews/pathview/pathview-example.qml create mode 100644 examples/declarative/modelviews/pathview/pathview.qmlproject create mode 100644 examples/declarative/modelviews/pathview/pics/AddressBook_48.png create mode 100644 examples/declarative/modelviews/pathview/pics/AudioPlayer_48.png create mode 100644 examples/declarative/modelviews/pathview/pics/Camera_48.png create mode 100644 examples/declarative/modelviews/pathview/pics/DateBook_48.png create mode 100644 examples/declarative/modelviews/pathview/pics/EMail_48.png create mode 100644 examples/declarative/modelviews/pathview/pics/TodoList_48.png create mode 100644 examples/declarative/modelviews/pathview/pics/VideoPlayer_48.png create mode 100644 examples/declarative/tutorials/extending/chapter1-basics/piechart.cpp create mode 100644 examples/declarative/tutorials/extending/chapter1-basics/piechart.h create mode 100644 examples/declarative/tutorials/extending/chapter2-methods/piechart.cpp create mode 100644 examples/declarative/tutorials/extending/chapter2-methods/piechart.h create mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/piechart.cpp create mode 100644 examples/declarative/tutorials/extending/chapter3-bindings/piechart.h create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.cpp create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.cpp create mode 100644 examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.h create mode 100644 examples/declarative/tutorials/extending/chapter5-listproperties/app.qml create mode 100644 examples/declarative/tutorials/extending/chapter5-listproperties/chapter5-listproperties.pro create mode 100644 examples/declarative/tutorials/extending/chapter5-listproperties/main.cpp create mode 100644 examples/declarative/tutorials/extending/chapter5-listproperties/piechart.cpp create mode 100644 examples/declarative/tutorials/extending/chapter5-listproperties/piechart.h create mode 100644 examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.cpp create mode 100644 examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.h create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/app.qml create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/chapter6-plugins.pro create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/piechart.cpp create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/piechart.h create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/pieslice.cpp create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/pieslice.h create mode 100644 examples/declarative/tutorials/extending/chapter6-plugins/qmldir diff --git a/examples/declarative/modelviews/pathview/pathview-example.qml b/examples/declarative/modelviews/pathview/pathview-example.qml new file mode 100644 index 0000000..0a3b34c --- /dev/null +++ b/examples/declarative/modelviews/pathview/pathview-example.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 + +Rectangle { + width: 400; height: 240 + color: "white" + + ListModel { + id: appModel + ListElement { name: "Music"; icon: "pics/AudioPlayer_48.png" } + ListElement { name: "Movies"; icon: "pics/VideoPlayer_48.png" } + ListElement { name: "Camera"; icon: "pics/Camera_48.png" } + ListElement { name: "Calendar"; icon: "pics/DateBook_48.png" } + ListElement { name: "Messaging"; icon: "pics/EMail_48.png" } + ListElement { name: "Todo List"; icon: "pics/TodoList_48.png" } + ListElement { name: "Contacts"; icon: "pics/AddressBook_48.png" } + } + + Component { + id: appDelegate + Item { + width: 100; height: 100 + scale: PathView.iconScale + + Image { + id: myIcon + y: 20; anchors.horizontalCenter: parent.horizontalCenter + source: icon + smooth: true + } + Text { + anchors { top: myIcon.bottom; horizontalCenter: parent.horizontalCenter } + text: name + smooth: true + } + + MouseArea { + anchors.fill: parent + onClicked: view.currentIndex = index + } + } + } + + Component { + id: appHighlight + Rectangle { width: 80; height: 80; color: "lightsteelblue" } + } + + PathView { + id: view + anchors.fill: parent + highlight: appHighlight + preferredHighlightBegin: 0.5 + preferredHighlightEnd: 0.5 + focus: true + model: appModel + delegate: appDelegate + path: Path { + startX: 10 + startY: 50 + PathAttribute { name: "iconScale"; value: 0.5 } + PathQuad { x: 200; y: 150; controlX: 50; controlY: 200 } + PathAttribute { name: "iconScale"; value: 1.0 } + PathQuad { x: 390; y: 50; controlX: 350; controlY: 200 } + PathAttribute { name: "iconScale"; value: 0.5 } + } + } +} diff --git a/examples/declarative/modelviews/pathview/pathview.qmlproject b/examples/declarative/modelviews/pathview/pathview.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/modelviews/pathview/pathview.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/modelviews/pathview/pics/AddressBook_48.png b/examples/declarative/modelviews/pathview/pics/AddressBook_48.png new file mode 100644 index 0000000..1ab7c8e Binary files /dev/null and b/examples/declarative/modelviews/pathview/pics/AddressBook_48.png differ diff --git a/examples/declarative/modelviews/pathview/pics/AudioPlayer_48.png b/examples/declarative/modelviews/pathview/pics/AudioPlayer_48.png new file mode 100644 index 0000000..f4b8689 Binary files /dev/null and b/examples/declarative/modelviews/pathview/pics/AudioPlayer_48.png differ diff --git a/examples/declarative/modelviews/pathview/pics/Camera_48.png b/examples/declarative/modelviews/pathview/pics/Camera_48.png new file mode 100644 index 0000000..c76b524 Binary files /dev/null and b/examples/declarative/modelviews/pathview/pics/Camera_48.png differ diff --git a/examples/declarative/modelviews/pathview/pics/DateBook_48.png b/examples/declarative/modelviews/pathview/pics/DateBook_48.png new file mode 100644 index 0000000..58f5787 Binary files /dev/null and b/examples/declarative/modelviews/pathview/pics/DateBook_48.png differ diff --git a/examples/declarative/modelviews/pathview/pics/EMail_48.png b/examples/declarative/modelviews/pathview/pics/EMail_48.png new file mode 100644 index 0000000..d6d84a6 Binary files /dev/null and b/examples/declarative/modelviews/pathview/pics/EMail_48.png differ diff --git a/examples/declarative/modelviews/pathview/pics/TodoList_48.png b/examples/declarative/modelviews/pathview/pics/TodoList_48.png new file mode 100644 index 0000000..0988448 Binary files /dev/null and b/examples/declarative/modelviews/pathview/pics/TodoList_48.png differ diff --git a/examples/declarative/modelviews/pathview/pics/VideoPlayer_48.png b/examples/declarative/modelviews/pathview/pics/VideoPlayer_48.png new file mode 100644 index 0000000..52638c5 Binary files /dev/null and b/examples/declarative/modelviews/pathview/pics/VideoPlayer_48.png differ diff --git a/examples/declarative/tutorials/extending/chapter1-basics/piechart.cpp b/examples/declarative/tutorials/extending/chapter1-basics/piechart.cpp new file mode 100644 index 0000000..3b9ef71 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter1-basics/piechart.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "piechart.h" +#include <QPainter> + +//![0] +PieChart::PieChart(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + // need to disable this flag to draw inside a QDeclarativeItem + setFlag(QGraphicsItem::ItemHasNoContents, false); +} +//![0] + +QString PieChart::name() const +{ + return m_name; +} + +void PieChart::setName(const QString &name) +{ + m_name = name; +} + +QColor PieChart::color() const +{ + return m_color; +} + +void PieChart::setColor(const QColor &color) +{ + m_color = color; +} + +//![1] +void PieChart::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPen pen(m_color, 2); + painter->setPen(pen); + painter->setRenderHints(QPainter::Antialiasing, true); + painter->drawPie(boundingRect(), 90 * 16, 290 * 16); +} +//![1] + diff --git a/examples/declarative/tutorials/extending/chapter1-basics/piechart.h b/examples/declarative/tutorials/extending/chapter1-basics/piechart.h new file mode 100644 index 0000000..aae7b26 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter1-basics/piechart.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIECHART_H +#define PIECHART_H + +//![0] +#include <QDeclarativeItem> +#include <QColor> + +class PieChart : public QDeclarativeItem +{ + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QColor color READ color WRITE setColor) + +public: + PieChart(QDeclarativeItem *parent = 0); + + QString name() const; + void setName(const QString &name); + + QColor color() const; + void setColor(const QColor &color); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + +private: + QString m_name; + QColor m_color; +}; +//![0] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter2-methods/piechart.cpp b/examples/declarative/tutorials/extending/chapter2-methods/piechart.cpp new file mode 100644 index 0000000..11ff7c8 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter2-methods/piechart.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "piechart.h" +#include <QPainter> +#include <QDebug> + +PieChart::PieChart(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + // need to disable this flag to draw inside a QDeclarativeItem + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + +QString PieChart::name() const +{ + return m_name; +} + +void PieChart::setName(const QString &name) +{ + m_name = name; +} + +QColor PieChart::color() const +{ + return m_color; +} + +void PieChart::setColor(const QColor &color) +{ + m_color = color; +} + +void PieChart::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPen pen(m_color, 2); + painter->setPen(pen); + painter->setRenderHints(QPainter::Antialiasing, true); + painter->drawPie(boundingRect(), 90 * 16, 290 * 16); +} + +//![0] +void PieChart::clearChart() +{ + setColor(QColor(Qt::transparent)); + update(); + + emit chartCleared(); +} +//![0] diff --git a/examples/declarative/tutorials/extending/chapter2-methods/piechart.h b/examples/declarative/tutorials/extending/chapter2-methods/piechart.h new file mode 100644 index 0000000..246fd9f --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter2-methods/piechart.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIECHART_H +#define PIECHART_H + +#include <QDeclarativeItem> +#include <QColor> + +//![0] +class PieChart : public QDeclarativeItem +{ +//![0] + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QColor color READ color WRITE setColor) + +//![1] +public: +//![1] + + PieChart(QDeclarativeItem *parent = 0); + + QString name() const; + void setName(const QString &name); + + QColor color() const; + void setColor(const QColor &color); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + +//![2] + Q_INVOKABLE void clearChart(); + +signals: + void chartCleared(); +//![2] + +private: + QString m_name; + QColor m_color; + +//![3] +}; +//![3] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/piechart.cpp b/examples/declarative/tutorials/extending/chapter3-bindings/piechart.cpp new file mode 100644 index 0000000..85a9762 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter3-bindings/piechart.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "piechart.h" +#include <QPainter> +#include <QDebug> + +PieChart::PieChart(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + // need to disable this flag to draw inside a QDeclarativeItem + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + +QString PieChart::name() const +{ + return m_name; +} + +void PieChart::setName(const QString &name) +{ + m_name = name; +} + +QColor PieChart::color() const +{ + return m_color; +} + +//![0] +void PieChart::setColor(const QColor &color) +{ + if (color != m_color) { + m_color = color; + update(); // repaint with the new color + emit colorChanged(); + } +} +//![0] + +void PieChart::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPen pen(m_color, 2); + painter->setPen(pen); + painter->setRenderHints(QPainter::Antialiasing, true); + painter->drawPie(boundingRect(), 90 * 16, 290 * 16); +} + +void PieChart::clearChart() +{ + setColor(QColor(Qt::transparent)); + update(); +} diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/piechart.h b/examples/declarative/tutorials/extending/chapter3-bindings/piechart.h new file mode 100644 index 0000000..164cebb --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter3-bindings/piechart.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIECHART_H +#define PIECHART_H + +#include <QDeclarativeItem> +#include <QColor> + +//![0] +class PieChart : public QDeclarativeItem +{ +//![0] + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName) + +//![1] + Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) +public: +//![1] + + PieChart(QDeclarativeItem *parent = 0); + + QString name() const; + void setName(const QString &name); + + QColor color() const; + void setColor(const QColor &color); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + + Q_INVOKABLE void clearChart(); + +//![2] +signals: + void colorChanged(); +//![2] + +private: + QString m_name; + QColor m_color; + +//![3] +}; +//![3] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.cpp new file mode 100644 index 0000000..7098854 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "piechart.h" +#include "pieslice.h" + +PieChart::PieChart(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + // this doesn't need to disable QGraphicsItem::ItemHasNoContents + // anymore since the drawing is now done in PieSlice +} + +QString PieChart::name() const +{ + return m_name; +} + +void PieChart::setName(const QString &name) +{ + m_name = name; +} + +PieSlice *PieChart::pieSlice() const +{ + return m_pieSlice; +} + +//![0] +void PieChart::setPieSlice(PieSlice *pieSlice) +{ + m_pieSlice = pieSlice; + pieSlice->setParentItem(this); +} +//![0] + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h new file mode 100644 index 0000000..448ca7b --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/piechart.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIECHART_H +#define PIECHART_H + +#include <QDeclarativeItem> + +class PieSlice; + +//![0] +class PieChart : public QDeclarativeItem +{ + Q_OBJECT + Q_PROPERTY(PieSlice* pieSlice READ pieSlice WRITE setPieSlice) +//![0] + Q_PROPERTY(QString name READ name WRITE setName) + +//![1] +public: +//![1] + + PieChart(QDeclarativeItem *parent = 0); + + QString name() const; + void setName(const QString &name); + +//![2] + PieSlice *pieSlice() const; + void setPieSlice(PieSlice *pieSlice); +//![2] + +private: + QString m_name; + PieSlice *m_pieSlice; + +//![3] +}; +//![3] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.cpp b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.cpp new file mode 100644 index 0000000..7a420fd --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "pieslice.h" + +#include <QPainter> + +PieSlice::PieSlice(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + // need to disable this flag to draw inside a QDeclarativeItem + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + +QColor PieSlice::color() const +{ + return m_color; +} + +void PieSlice::setColor(const QColor &color) +{ + m_color = color; +} + +void PieSlice::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPen pen(m_color, 2); + painter->setPen(pen); + painter->setRenderHints(QPainter::Antialiasing, true); + painter->drawPie(boundingRect(), 90 * 16, 290 * 16); +} + diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.h b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.h new file mode 100644 index 0000000..085a9b8 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/pieslice.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIESLICE_H +#define PIESLICE_H + +#include <QDeclarativeItem> +#include <QColor> + +//![0] +class PieSlice : public QDeclarativeItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor) + +public: + PieSlice(QDeclarativeItem *parent = 0); + + QColor color() const; + void setColor(const QColor &color); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + +private: + QColor m_color; +}; +//![0] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/app.qml b/examples/declarative/tutorials/extending/chapter5-listproperties/app.qml new file mode 100644 index 0000000..f759bc9 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-listproperties/app.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Charts 1.0 +import Qt 4.7 + +Item { + width: 300; height: 200 + + PieChart { + anchors.centerIn: parent + width: 100; height: 100 + + slices: [ + PieSlice { + anchors.fill: parent + color: "red" + fromAngle: 0; angleSpan: 110 + }, + PieSlice { + anchors.fill: parent + color: "black" + fromAngle: 110; angleSpan: 50 + }, + PieSlice { + anchors.fill: parent + color: "blue" + fromAngle: 160; angleSpan: 100 + } + ] + } +} +//![0] diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/chapter5-listproperties.pro b/examples/declarative/tutorials/extending/chapter5-listproperties/chapter5-listproperties.pro new file mode 100644 index 0000000..c3f5402 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-listproperties/chapter5-listproperties.pro @@ -0,0 +1,7 @@ +QT += declarative + +HEADERS += piechart.h \ + pieslice.h +SOURCES += piechart.cpp \ + pieslice.cpp \ + main.cpp diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/main.cpp b/examples/declarative/tutorials/extending/chapter5-listproperties/main.cpp new file mode 100644 index 0000000..f73c49f --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-listproperties/main.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "piechart.h" +#include "pieslice.h" + +#include <qdeclarative.h> +#include <QDeclarativeView> +#include <QApplication> + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + qmlRegisterType<PieChart>("Charts", 1, 0, "PieChart"); + qmlRegisterType<PieSlice>("Charts", 1, 0, "PieSlice"); + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile("app.qml")); + view.show(); + return app.exec(); +} diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/piechart.cpp b/examples/declarative/tutorials/extending/chapter5-listproperties/piechart.cpp new file mode 100644 index 0000000..2515b64 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-listproperties/piechart.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "piechart.h" +#include "pieslice.h" + +PieChart::PieChart(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ +} + +QString PieChart::name() const +{ + return m_name; +} + +void PieChart::setName(const QString &name) +{ + m_name = name; +} + +//![0] +QDeclarativeListProperty<PieSlice> PieChart::slices() +{ + return QDeclarativeListProperty<PieSlice>(this, 0, &PieChart::append_slice); +} + +void PieChart::append_slice(QDeclarativeListProperty<PieSlice> *list, PieSlice *slice) +{ + PieChart *chart = qobject_cast<PieChart *>(list->object); + if (chart) { + slice->setParentItem(chart); + chart->m_slices.append(slice); + } +} +//![0] diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/piechart.h b/examples/declarative/tutorials/extending/chapter5-listproperties/piechart.h new file mode 100644 index 0000000..4424251 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-listproperties/piechart.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIECHART_H +#define PIECHART_H + +#include <QDeclarativeItem> + +class PieSlice; + +//![0] +class PieChart : public QDeclarativeItem +{ + Q_OBJECT + Q_PROPERTY(QDeclarativeListProperty<PieSlice> slices READ slices) +//![0] + Q_PROPERTY(QString name READ name WRITE setName) + +//![1] +public: +//![1] + PieChart(QDeclarativeItem *parent = 0); + + QString name() const; + void setName(const QString &name); + +//![2] + QDeclarativeListProperty<PieSlice> slices(); + +private: + static void append_slice(QDeclarativeListProperty<PieSlice> *list, PieSlice *slice); + + QString m_name; + QList<PieSlice *> m_slices; +}; +//![2] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.cpp b/examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.cpp new file mode 100644 index 0000000..65120f5 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "pieslice.h" + +#include <QPainter> + +PieSlice::PieSlice(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + // need to disable this flag to draw inside a QDeclarativeItem + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + +QColor PieSlice::color() const +{ + return m_color; +} + +void PieSlice::setColor(const QColor &color) +{ + m_color = color; +} + +int PieSlice::fromAngle() const +{ + return m_fromAngle; +} + +void PieSlice::setFromAngle(int angle) +{ + m_fromAngle = angle; +} + +int PieSlice::angleSpan() const +{ + return m_angleSpan; +} + +void PieSlice::setAngleSpan(int angle) +{ + m_angleSpan = angle; +} + +void PieSlice::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPen pen(m_color, 2); + painter->setPen(pen); + painter->setRenderHints(QPainter::Antialiasing, true); + painter->drawPie(boundingRect(), m_fromAngle * 16, m_angleSpan * 16); +} + diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.h b/examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.h new file mode 100644 index 0000000..7cd0c74 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter5-listproperties/pieslice.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIESLICE_H +#define PIESLICE_H + +#include <QDeclarativeItem> +#include <QColor> + +//![0] +class PieSlice : public QDeclarativeItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor) + Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle) + Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan) +//![0] + +public: + PieSlice(QDeclarativeItem *parent = 0); + + QColor color() const; + void setColor(const QColor &color); + + int fromAngle() const; + void setFromAngle(int angle); + + int angleSpan() const; + void setAngleSpan(int span); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + +private: + QColor m_color; + int m_fromAngle; + int m_angleSpan; +}; + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/app.qml b/examples/declarative/tutorials/extending/chapter6-plugins/app.qml new file mode 100644 index 0000000..38ceefa --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/app.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import Qt 4.7 + +Item { + width: 300; height: 200 + + PieChart { + anchors.centerIn: parent + width: 100; height: 100 + + slices: [ + PieSlice { + anchors.fill: parent + color: "red" + fromAngle: 0; angleSpan: 110 + }, + PieSlice { + anchors.fill: parent + color: "black" + fromAngle: 110; angleSpan: 50 + }, + PieSlice { + anchors.fill: parent + color: "blue" + fromAngle: 160; angleSpan: 100 + } + ] + } +} + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/chapter6-plugins.pro b/examples/declarative/tutorials/extending/chapter6-plugins/chapter6-plugins.pro new file mode 100644 index 0000000..1ffbf29 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/chapter6-plugins.pro @@ -0,0 +1,20 @@ +TEMPLATE = lib +CONFIG += qt plugin +QT += declarative + +DESTDIR = lib +OBJECTS_DIR = tmp +MOC_DIR = tmp + +HEADERS += piechart.h \ + pieslice.h \ + chartsplugin.h + +SOURCES += piechart.cpp \ + pieslice.cpp \ + chartsplugin.cpp + +symbian { + include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) + TARGET.EPOCALLOWDLLDATA = 1 +} diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp new file mode 100644 index 0000000..5aa2a4b --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "chartsplugin.h" +//![0] +#include "piechart.h" +#include "pieslice.h" +#include <QtDeclarative/qdeclarative.h> + +void ChartsPlugin::registerTypes(const char *uri) +{ + qmlRegisterType<PieChart>(uri, 1, 0, "PieChart"); + qmlRegisterType<PieSlice>(uri, 1, 0, "PieSlice"); +} + +Q_EXPORT_PLUGIN2(chartsplugin, ChartsPlugin); +//![0] + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h new file mode 100644 index 0000000..797d1e7 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef CHARTSPLUGIN_H +#define CHARTSPLUGIN_H + +//![0] +#include <QtDeclarative/QDeclarativeExtensionPlugin> + +class ChartsPlugin : public QDeclarativeExtensionPlugin +{ + Q_OBJECT +public: + void registerTypes(const char *uri); +}; +//![0] + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/piechart.cpp b/examples/declarative/tutorials/extending/chapter6-plugins/piechart.cpp new file mode 100644 index 0000000..4e6ee5c --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/piechart.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "piechart.h" +#include "pieslice.h" + +PieChart::PieChart(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ +} + +QString PieChart::name() const +{ + return m_name; +} + +void PieChart::setName(const QString &name) +{ + m_name = name; +} + +QDeclarativeListProperty<PieSlice> PieChart::slices() +{ + return QDeclarativeListProperty<PieSlice>(this, 0, &PieChart::append_slice); +} + +void PieChart::append_slice(QDeclarativeListProperty<PieSlice> *list, PieSlice *slice) +{ + PieChart *chart = qobject_cast<PieChart *>(list->object); + if (chart) { + slice->setParentItem(chart); + chart->m_slices.append(slice); + } +} + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/piechart.h b/examples/declarative/tutorials/extending/chapter6-plugins/piechart.h new file mode 100644 index 0000000..d6e4439 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/piechart.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIECHART_H +#define PIECHART_H + +#include <QDeclarativeItem> + +class PieSlice; + +class PieChart : public QDeclarativeItem +{ + Q_OBJECT + Q_PROPERTY(QDeclarativeListProperty<PieSlice> slices READ slices) + Q_PROPERTY(QString name READ name WRITE setName) + +public: + PieChart(QDeclarativeItem *parent = 0); + + QString name() const; + void setName(const QString &name); + + QDeclarativeListProperty<PieSlice> slices(); + +private: + static void append_slice(QDeclarativeListProperty<PieSlice> *list, PieSlice *slice); + + QString m_name; + QList<PieSlice *> m_slices; +}; + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/pieslice.cpp b/examples/declarative/tutorials/extending/chapter6-plugins/pieslice.cpp new file mode 100644 index 0000000..65120f5 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/pieslice.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "pieslice.h" + +#include <QPainter> + +PieSlice::PieSlice(QDeclarativeItem *parent) + : QDeclarativeItem(parent) +{ + // need to disable this flag to draw inside a QDeclarativeItem + setFlag(QGraphicsItem::ItemHasNoContents, false); +} + +QColor PieSlice::color() const +{ + return m_color; +} + +void PieSlice::setColor(const QColor &color) +{ + m_color = color; +} + +int PieSlice::fromAngle() const +{ + return m_fromAngle; +} + +void PieSlice::setFromAngle(int angle) +{ + m_fromAngle = angle; +} + +int PieSlice::angleSpan() const +{ + return m_angleSpan; +} + +void PieSlice::setAngleSpan(int angle) +{ + m_angleSpan = angle; +} + +void PieSlice::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPen pen(m_color, 2); + painter->setPen(pen); + painter->setRenderHints(QPainter::Antialiasing, true); + painter->drawPie(boundingRect(), m_fromAngle * 16, m_angleSpan * 16); +} + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/pieslice.h b/examples/declarative/tutorials/extending/chapter6-plugins/pieslice.h new file mode 100644 index 0000000..a3afd25 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/pieslice.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef PIESLICE_H +#define PIESLICE_H + +#include <QDeclarativeItem> +#include <QColor> + +class PieSlice : public QDeclarativeItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor) + Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle) + Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan) + +public: + PieSlice(QDeclarativeItem *parent = 0); + + QColor color() const; + void setColor(const QColor &color); + + int fromAngle() const; + void setFromAngle(int angle); + + int angleSpan() const; + void setAngleSpan(int span); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + +private: + QColor m_color; + int m_fromAngle; + int m_angleSpan; +}; + +#endif + diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/qmldir b/examples/declarative/tutorials/extending/chapter6-plugins/qmldir new file mode 100644 index 0000000..a83bf85 --- /dev/null +++ b/examples/declarative/tutorials/extending/chapter6-plugins/qmldir @@ -0,0 +1 @@ +plugin chapter6-plugins lib -- cgit v0.12 From fc14f5861e18d2ebc8014bfd750a8c82cf166392 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 12 Jul 2010 20:06:14 +0200 Subject: Fixed a possible hanging bug in the Symbian networking. I haven't seen the bug happening in practice, but I decided to be safe rather than sorry. The rationale is that if a network request comes in, the select thread will signal the active object in the main thread, remove the socket from the set of monitored sockets, and then go to sleep in the waitCond.wait() call, waiting for reactivation by the QSelectMutexGrabber. However, in QEventDispatcherSymbian::socketFired(), if the event causes the socket to be deleted, reactivateSocketNotifier will never be called, and therefore the wait condition will never be terminated. Fixed by only entering the wait condition if a grabber has already written to the pipe, signalling that it wants the lock. AutoTest: Passed RevBy: Markus Goetz (cherry picked from commit fc260f7ce9c139da93e005b2b51ef37c4d23998d) --- src/corelib/kernel/qeventdispatcher_symbian.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index e86efb2..2717780 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -481,7 +481,8 @@ void QSelectThread::run() updateActivatedNotifiers(QSocketNotifier::Write, &writefds); } - m_waitCond.wait(&m_mutex); + if (FD_ISSET(m_pipeEnds[0], &readfds)) + m_waitCond.wait(&m_mutex); } m_mutex.unlock(); -- cgit v0.12 From ed31fe5336f80ecbd025e75ba19308a881eb820d Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 12 Jul 2010 11:32:48 +0200 Subject: Added some asserts to avoid race conditions in networking. Task: QT-3358 RevBy: Markus Goetz (cherry picked from commit c042003a831ace1ffe4cc399668293200ffe829f) --- src/corelib/kernel/qeventdispatcher_symbian.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 2717780..7166778 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -496,6 +496,8 @@ void QSelectThread::requestSocketEvents ( QSocketNotifier *notifier, TRequestSta start(); } + Q_ASSERT(QThread::currentThread() == this->thread()); + QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex); Q_ASSERT(!m_AOStatuses.contains(notifier)); @@ -507,6 +509,8 @@ void QSelectThread::requestSocketEvents ( QSocketNotifier *notifier, TRequestSta void QSelectThread::cancelSocketEvents ( QSocketNotifier *notifier ) { + Q_ASSERT(QThread::currentThread() == this->thread()); + QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex); m_AOStatuses.remove(notifier); @@ -516,6 +520,8 @@ void QSelectThread::cancelSocketEvents ( QSocketNotifier *notifier ) void QSelectThread::restart() { + Q_ASSERT(QThread::currentThread() == this->thread()); + QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex); m_waitCond.wakeAll(); -- cgit v0.12 From 9f60f8f1497b30962c13b2f61c71ee087bc58004 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 12 Jul 2010 19:45:54 +0200 Subject: Fixed a network hanging bug on Symbian. The problem happened because of a race condition in the way Qt cancelled the select call from Open C. Under high network loads, a network request could come in, causing the select call to end. Afterwards, the pipe normally used to cancel the select call would be emptied (although it was already empty). If a context switch happened after the pipe was emptied, but before the lock was released in waitCond.wait(), the main thread could try to grab the lock and write to the pipe because it was unsuccessful. This would in turn cause the next call to select to terminate immediately, and without work to do, the select thread would go straight down to waitCond.wait() and get stuck there. Fixed by moving the pipe draining loop from the select thread to the main thread, right after the lock grab. This guarantees that the select thread is empty when returning to the select call. Task: QT-3358 AutoTest: Passed RevBy: Markus Goetz (cherry picked from commit 61daa2f419696881ccdbc1cde2dc197eaf028ff6) --- src/corelib/kernel/qeventdispatcher_symbian.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 7166778..1b0c31b 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -100,16 +100,19 @@ static inline int qt_socket_select(int nfds, fd_set *readfds, fd_set *writefds, class QSelectMutexGrabber { public: - QSelectMutexGrabber(int fd, QMutex *mutex) + QSelectMutexGrabber(int writeFd, int readFd, QMutex *mutex) : m_mutex(mutex) { if (m_mutex->tryLock()) return; char dummy = 0; - qt_pipe_write(fd, &dummy, 1); + qt_pipe_write(writeFd, &dummy, 1); m_mutex->lock(); + + char buffer; + while (::read(readFd, &buffer, 1) > 0) {} } ~QSelectMutexGrabber() @@ -403,10 +406,6 @@ void QSelectThread::run() ret = qt_socket_select(maxfd, &readfds, &writefds, &exceptionfds, 0); savedSelectErrno = errno; - char buffer; - - while (::read(m_pipeEnds[0], &buffer, 1) > 0) {} - if(ret == 0) { // do nothing } else if (ret < 0) { @@ -498,7 +497,7 @@ void QSelectThread::requestSocketEvents ( QSocketNotifier *notifier, TRequestSta Q_ASSERT(QThread::currentThread() == this->thread()); - QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex); + QSelectMutexGrabber lock(m_pipeEnds[1], m_pipeEnds[0], &m_mutex); Q_ASSERT(!m_AOStatuses.contains(notifier)); @@ -511,7 +510,7 @@ void QSelectThread::cancelSocketEvents ( QSocketNotifier *notifier ) { Q_ASSERT(QThread::currentThread() == this->thread()); - QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex); + QSelectMutexGrabber lock(m_pipeEnds[1], m_pipeEnds[0], &m_mutex); m_AOStatuses.remove(notifier); @@ -522,7 +521,7 @@ void QSelectThread::restart() { Q_ASSERT(QThread::currentThread() == this->thread()); - QSelectMutexGrabber lock(m_pipeEnds[1], &m_mutex); + QSelectMutexGrabber lock(m_pipeEnds[1], m_pipeEnds[0], &m_mutex); m_waitCond.wakeAll(); } -- cgit v0.12 From 1384524eac7527aded4aa4cca0f5fdba7c5e429e Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Wed, 28 Jul 2010 12:38:35 +1000 Subject: Modified Symbian def files to be in line with 4.7 branch Reviewed-by: Joona Petrell --- src/s60installs/bwins/QtGuiu.def | 4 ++++ src/s60installs/eabi/QtGuiu.def | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 296901d..a7223f2 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12879,4 +12879,8 @@ EXPORTS ?PreDocConstructL@QS60MainApplication@@UAEXXZ @ 12878 NONAME ; void QS60MainApplication::PreDocConstructL(void) ?NewAppServerL@QS60MainApplication@@UAEXAAPAVCApaAppServer@@@Z @ 12879 NONAME ; void QS60MainApplication::NewAppServerL(class CApaAppServer * &) ?HandleViewDeactivation@QS60MainAppUi@@UAEXABVTVwsViewId@@0@Z @ 12880 NONAME ; void QS60MainAppUi::HandleViewDeactivation(class TVwsViewId const &, class TVwsViewId const &) + ?timeout@QTapAndHoldGesture@@SAHXZ @ 12881 NONAME ABSENT ; int QTapAndHoldGesture::timeout(void) + ?focusScopeItemChange@QGraphicsItemPrivate@@UAEX_N@Z @ 12882 NONAME ; void QGraphicsItemPrivate::focusScopeItemChange(bool) + ?setTimeout@QTapAndHoldGesture@@SAXH@Z @ 12883 NONAME ABSENT ; void QTapAndHoldGesture::setTimeout(int) + ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@_N@Z @ 12884 NONAME ABSENT ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *, bool) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 018cba2..f152c41 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12084,4 +12084,8 @@ EXPORTS _ZThn24_N13QS60MainAppUi15ProcessCommandLEi @ 12083 NONAME _ZThn40_N13QS60MainAppUi15MopSupplyObjectE8TTypeUid @ 12084 NONAME _ZThn92_N13QS60MainAppUi22HandleViewDeactivationERK10TVwsViewIdS2_ @ 12085 NONAME + _ZN18QTapAndHoldGesture10setTimeoutEi @ 12086 NONAME ABSENT + _ZN18QTapAndHoldGesture7timeoutEv @ 12087 NONAME ABSENT + _ZN20QGraphicsItemPrivate20focusScopeItemChangeEb @ 12088 NONAME + _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFb @ 12089 NONAME ABSENT -- cgit v0.12 From 2ad1b312cd3fc002e4277330bbe7d554a4c704b8 Mon Sep 17 00:00:00 2001 From: Jason Barron <jason.barron@nokia.com> Date: Tue, 27 Jul 2010 16:27:21 +0200 Subject: Fix signal emission of QDesktopWidget on Symbian. QDesktopWidget on Symbian was not properly emitting the resized() and the workAreaResized() signals. Qt was properly translating the system event and sending the QResizeEvent to the widget, but the signal emission is determined solely based on changes in the QVectors of QRects outlining the screen dimensions. On Symbian, these vectors were never being set and as a result the signals were never omitted. The fix is to set the rects correctly in the init() function which is called by the resizeEvent() handler. Also modify the accessor functions to return the rectangles stored in the vector instead of querying for them each time. Task-number: QTBUG-11433 Reviewed-by: axis Autotest: PASSES (cherry picked from commit 61908af46700c7c1f2e59ce98daeadc2529fef1b) --- src/gui/kernel/qdesktopwidget_s60.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qdesktopwidget_s60.cpp b/src/gui/kernel/qdesktopwidget_s60.cpp index e4d0bf3..a07f4a7 100644 --- a/src/gui/kernel/qdesktopwidget_s60.cpp +++ b/src/gui/kernel/qdesktopwidget_s60.cpp @@ -103,6 +103,10 @@ void QDesktopWidgetPrivate::init(QDesktopWidget *that) rects->resize(QDesktopWidgetPrivate::screenCount); workrects->resize(QDesktopWidgetPrivate::screenCount); + + (*rects)[0].setRect(0, 0, S60->screenWidthInPixels, S60->screenHeightInPixels); + QRect wr = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); + (*workrects)[0].setRect(wr.x(), wr.y(), wr.width(), wr.height()); } void QDesktopWidgetPrivate::cleanup() @@ -146,17 +150,23 @@ QWidget *QDesktopWidget::screen(int /* screen */) return this; } -const QRect QDesktopWidget::availableGeometry(int /* screen */) const +const QRect QDesktopWidget::availableGeometry(int screen) const { - TRect clientRect = static_cast<CEikAppUi*>(S60->appUi())->ClientRect(); - return qt_TRect2QRect(clientRect); + Q_D(const QDesktopWidget); + if (screen < 0 || screen >= d->screenCount) + screen = d->primaryScreen; + + return d->workrects->at(screen); } -const QRect QDesktopWidget::screenGeometry(int /* screen */) const +const QRect QDesktopWidget::screenGeometry(int screen) const { Q_D(const QDesktopWidget); - return QRect(0, 0, S60->screenWidthInPixels, S60->screenHeightInPixels); - } + if (screen < 0 || screen >= d->screenCount) + screen = d->primaryScreen; + + return d->rects->at(screen); +} int QDesktopWidget::screenNumber(const QWidget * /* widget */) const { -- cgit v0.12 From ae0507d794c6ee7d8d32c0b30aada8ab51ee2a45 Mon Sep 17 00:00:00 2001 From: Evan Nguyen <evan.nguyen@nokia.com> Date: Mon, 26 Jul 2010 15:05:20 +1000 Subject: fixed QDBUS export error (cherry picked from commit 430243688f6cc84da496c3369bfeb1a8685f1016) --- src/dbus/qdbusintegrator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index efa6744..1f44bd2 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -508,7 +508,7 @@ static bool shouldWatchService(const QString &service) return !service.isEmpty() && !service.startsWith(QLatin1Char(':')); } -extern QDBUS_EXPORT void qDBusAddSpyHook(QDBusSpyHook); +extern Q_DBUS_EXPORT void qDBusAddSpyHook(QDBusSpyHook); void qDBusAddSpyHook(QDBusSpyHook hook) { qDBusSpyHookList()->append(hook); -- cgit v0.12 From e1c2cd233b961bbf4b90437bebce60e29fb20323 Mon Sep 17 00:00:00 2001 From: Evan Nguyen <evan.nguyen@nokia.com> Date: Mon, 26 Jul 2010 14:18:37 +1000 Subject: Q_INVOKABLES added to Qt-DBus Task-number: QTBUG-12397 (cherry picked from commit 3e8597ff6029d33d629191370d9fed7d37d3962a) --- src/dbus/qdbusconnection.h | 3 + src/dbus/qdbusintegrator.cpp | 22 ++-- src/dbus/qdbusinterface.cpp | 2 +- src/dbus/qdbusxmlgenerator.cpp | 8 +- tests/auto/qdbusinterface/tst_qdbusinterface.cpp | 138 +++++++++++++++++++++-- 5 files changed, 153 insertions(+), 20 deletions(-) diff --git a/src/dbus/qdbusconnection.h b/src/dbus/qdbusconnection.h index a8ca551..93c5639 100644 --- a/src/dbus/qdbusconnection.h +++ b/src/dbus/qdbusconnection.h @@ -85,16 +85,19 @@ public: ExportScriptableSlots = 0x10, ExportScriptableSignals = 0x20, ExportScriptableProperties = 0x40, + ExportScriptableInvokables = 0x80, ExportScriptableContents = 0xf0, ExportNonScriptableSlots = 0x100, ExportNonScriptableSignals = 0x200, ExportNonScriptableProperties = 0x400, + ExportNonScriptableInvokables = 0x800, ExportNonScriptableContents = 0xf00, ExportAllSlots = ExportScriptableSlots|ExportNonScriptableSlots, ExportAllSignals = ExportScriptableSignals|ExportNonScriptableSignals, ExportAllProperties = ExportScriptableProperties|ExportNonScriptableProperties, + ExportAllInvokables = ExportScriptableInvokables|ExportNonScriptableInvokables, ExportAllContents = ExportScriptableContents|ExportNonScriptableContents, #ifndef Q_QDOC diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 1f44bd2..e1b90b8 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -508,7 +508,7 @@ static bool shouldWatchService(const QString &service) return !service.isEmpty() && !service.startsWith(QLatin1Char(':')); } -extern Q_DBUS_EXPORT void qDBusAddSpyHook(QDBusSpyHook); +extern QDBUS_EXPORT void qDBusAddSpyHook(QDBusSpyHook); void qDBusAddSpyHook(QDBusSpyHook hook) { qDBusSpyHookList()->append(hook); @@ -618,7 +618,7 @@ static int findSlot(const QMetaObject *mo, const QByteArray &name, int flags, continue; // check type: - if (mm.methodType() != QMetaMethod::Slot) + if (mm.methodType() != QMetaMethod::Slot && mm.methodType() != QMetaMethod::Method) continue; // check name: @@ -682,10 +682,17 @@ static int findSlot(const QMetaObject *mo, const QByteArray &name, int flags, if (isAsync && metaTypes.count() > i + 1) continue; - if (isScriptable && (flags & QDBusConnection::ExportScriptableSlots) == 0) - continue; // not exported - if (!isScriptable && (flags & QDBusConnection::ExportNonScriptableSlots) == 0) - continue; // not exported + if (mm.methodType() == QMetaMethod::Slot) { + if (isScriptable && (flags & QDBusConnection::ExportScriptableSlots) == 0) + continue; // scriptable slots not exported + if (!isScriptable && (flags & QDBusConnection::ExportNonScriptableSlots) == 0) + continue; // non-scriptable slots not exported + } else { + if (isScriptable && (flags & QDBusConnection::ExportScriptableInvokables) == 0) + continue; // scriptable invokables not exported + if (!isScriptable && (flags & QDBusConnection::ExportNonScriptableInvokables) == 0) + continue; // non-scriptable invokables not exported + } // if we got here, this slot matched return idx; @@ -1379,7 +1386,8 @@ void QDBusConnectionPrivate::activateObject(ObjectTreeNode &node, const QDBusMes return; // internal filters have already run or an error has been sent // try the object itself: - if (node.flags & (QDBusConnection::ExportScriptableSlots|QDBusConnection::ExportNonScriptableSlots)) { + if (node.flags & (QDBusConnection::ExportScriptableSlots|QDBusConnection::ExportNonScriptableSlots) || + node.flags & (QDBusConnection::ExportScriptableInvokables|QDBusConnection::ExportNonScriptableInvokables)) { bool interfaceFound = true; if (!msg.interface().isEmpty()) interfaceFound = qDBusInterfaceInObject(node.obj, msg.interface()); diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp index b989cab..248bf65 100644 --- a/src/dbus/qdbusinterface.cpp +++ b/src/dbus/qdbusinterface.cpp @@ -277,7 +277,7 @@ int QDBusInterfacePrivate::metacall(QMetaObject::Call c, int id, void **argv) // signal relay from D-Bus world to Qt world QMetaObject::activate(q, metaObject, id, argv); - } else if (mm.methodType() == QMetaMethod::Slot) { + } else if (mm.methodType() == QMetaMethod::Slot || mm.methodType() == QMetaMethod::Method) { // method call relay from Qt world to D-Bus world // get D-Bus equivalent signature QString methodName = QLatin1String(metaObject->dbusNameForMethod(id)); diff --git a/src/dbus/qdbusxmlgenerator.cpp b/src/dbus/qdbusxmlgenerator.cpp index 463ac73..62b90ff 100644 --- a/src/dbus/qdbusxmlgenerator.cpp +++ b/src/dbus/qdbusxmlgenerator.cpp @@ -133,7 +133,7 @@ static QString generateInterfaceXml(const QMetaObject *mo, int flags, int method if (mm.methodType() == QMetaMethod::Signal) // adding a signal isSignal = true; - else if (mm.methodType() == QMetaMethod::Slot && mm.access() == QMetaMethod::Public) + else if (mm.access() == QMetaMethod::Public && (mm.methodType() == QMetaMethod::Slot || mm.methodType() == QMetaMethod::Method)) isSignal = false; else continue; // neither signal nor public slot @@ -141,9 +141,9 @@ static QString generateInterfaceXml(const QMetaObject *mo, int flags, int method if (isSignal && !(flags & (QDBusConnection::ExportScriptableSignals | QDBusConnection::ExportNonScriptableSignals))) continue; // we're not exporting any signals - if (!isSignal && !(flags & (QDBusConnection::ExportScriptableSlots | - QDBusConnection::ExportNonScriptableSlots))) - continue; // we're not exporting any slots + if (!isSignal && (!(flags & (QDBusConnection::ExportScriptableSlots | QDBusConnection::ExportNonScriptableSlots)) && + !(flags & (QDBusConnection::ExportScriptableInvokables | QDBusConnection::ExportNonScriptableInvokables)))) + continue; // we're not exporting any slots or invokables QString xml = QString::fromLatin1(" <%1 name=\"%2\">\n") .arg(isSignal ? QLatin1String("signal") : QLatin1String("method")) diff --git a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp index d8ff2d3..a870e47 100644 --- a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp +++ b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp @@ -70,18 +70,34 @@ class MyObject: public QObject " <arg direction=\"in\" type=\"v\" name=\"ping\" />\n" " <arg direction=\"out\" type=\"v\" name=\"ping\" />\n" " </method>\n" +" <method name=\"ping_invokable\" >\n" +" <arg direction=\"in\" type=\"v\" name=\"ping_invokable\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"ping_invokable\" />\n" +" </method>\n" " <method name=\"ping\" >\n" " <arg direction=\"in\" type=\"v\" name=\"ping1\" />\n" " <arg direction=\"in\" type=\"v\" name=\"ping2\" />\n" " <arg direction=\"out\" type=\"v\" name=\"pong1\" />\n" " <arg direction=\"out\" type=\"v\" name=\"pong2\" />\n" " </method>\n" +" <method name=\"ping_invokable\" >\n" +" <arg direction=\"in\" type=\"v\" name=\"ping1_invokable\" />\n" +" <arg direction=\"in\" type=\"v\" name=\"ping2_invokable\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"pong1_invokable\" />\n" +" <arg direction=\"out\" type=\"v\" name=\"pong2_invokable\" />\n" +" </method>\n" " <method name=\"ping\" >\n" " <arg direction=\"in\" type=\"ai\" name=\"ping\" />\n" " <arg direction=\"out\" type=\"ai\" name=\"ping\" />\n" " <annotation name=\"com.trolltech.QtDBus.QtTypeName.In0\" value=\"QList<int>\"/>\n" " <annotation name=\"com.trolltech.QtDBus.QtTypeName.Out0\" value=\"QList<int>\"/>\n" " </method>\n" +" <method name=\"ping_invokable\" >\n" +" <arg direction=\"in\" type=\"ai\" name=\"ping_invokable\" />\n" +" <arg direction=\"out\" type=\"ai\" name=\"ping_invokable\" />\n" +" <annotation name=\"com.trolltech.QtDBus.QtTypeName.In0\" value=\"QList<int>\"/>\n" +" <annotation name=\"com.trolltech.QtDBus.QtTypeName.Out0\" value=\"QList<int>\"/>\n" +" </method>\n" " </interface>\n" "") Q_PROPERTY(int prop1 READ prop1 WRITE setProp1) @@ -120,6 +136,20 @@ public: m_complexProp = value; } + Q_INVOKABLE void ping_invokable(QDBusMessage msg) + { + QDBusConnection sender = QDBusConnection::sender(); + if (!sender.isConnected()) + exit(1); + + ++callCount; + callArgs = msg.arguments(); + + msg.setDelayedReply(true); + if (!sender.send(msg.createReply(callArgs))) + exit(1); + } + public slots: void ping(QDBusMessage msg) @@ -220,6 +250,7 @@ void tst_QDBusInterface::initTestCase() con.registerObject("/", &obj, QDBusConnection::ExportAllProperties | QDBusConnection::ExportAllSlots + | QDBusConnection::ExportAllInvokables | QDBusConnection::ExportChildObjects); } @@ -283,7 +314,7 @@ void tst_QDBusInterface::introspect() const QMetaObject *mo = iface.metaObject(); - QCOMPARE(mo->methodCount() - mo->methodOffset(), 4); + QCOMPARE(mo->methodCount() - mo->methodOffset(), 7); QVERIFY(mo->indexOfSignal(TEST_SIGNAL_NAME "(QString)") != -1); QCOMPARE(mo->propertyCount() - mo->propertyOffset(), 2); @@ -298,6 +329,8 @@ void tst_QDBusInterface::callMethod() TEST_INTERFACE_NAME); MyObject::callCount = 0; + + // call a SLOT method QDBusMessage reply = iface.call("ping", qVariantFromValue(QDBusVariant("foo"))); QCOMPARE(MyObject::callCount, 1); QCOMPARE(reply.type(), QDBusMessage::ReplyMessage); @@ -315,6 +348,25 @@ void tst_QDBusInterface::callMethod() dv = qdbus_cast<QDBusVariant>(v); QCOMPARE(dv.variant().type(), QVariant::String); QCOMPARE(dv.variant().toString(), QString("foo")); + + // call an INVOKABLE method + reply = iface.call("ping_invokable", qVariantFromValue(QDBusVariant("bar"))); + QCOMPARE(MyObject::callCount, 2); + QCOMPARE(reply.type(), QDBusMessage::ReplyMessage); + + // verify what the callee received + QCOMPARE(MyObject::callArgs.count(), 1); + v = MyObject::callArgs.at(0); + dv = qdbus_cast<QDBusVariant>(v); + QCOMPARE(dv.variant().type(), QVariant::String); + QCOMPARE(dv.variant().toString(), QString("bar")); + + // verify reply + QCOMPARE(reply.arguments().count(), 1); + v = reply.arguments().at(0); + dv = qdbus_cast<QDBusVariant>(v); + QCOMPARE(dv.variant().type(), QVariant::String); + QCOMPARE(dv.variant().toString(), QString("bar")); } void tst_QDBusInterface::invokeMethod() @@ -323,8 +375,9 @@ void tst_QDBusInterface::invokeMethod() QDBusInterface iface(QDBusConnection::sessionBus().baseService(), QLatin1String("/"), TEST_INTERFACE_NAME); - // make the call without a return type MyObject::callCount = 0; + + // make the SLOT call without a return type QDBusVariant arg("foo"); QVERIFY(QMetaObject::invokeMethod(&iface, "ping", Q_ARG(QDBusVariant, arg))); QCOMPARE(MyObject::callCount, 1); @@ -335,6 +388,18 @@ void tst_QDBusInterface::invokeMethod() QDBusVariant dv = qdbus_cast<QDBusVariant>(v); QCOMPARE(dv.variant().type(), QVariant::String); QCOMPARE(dv.variant().toString(), QString("foo")); + + // make the INVOKABLE call without a return type + QDBusVariant arg2("bar"); + QVERIFY(QMetaObject::invokeMethod(&iface, "ping_invokable", Q_ARG(QDBusVariant, arg2))); + QCOMPARE(MyObject::callCount, 2); + + // verify what the callee received + QCOMPARE(MyObject::callArgs.count(), 1); + v = MyObject::callArgs.at(0); + dv = qdbus_cast<QDBusVariant>(v); + QCOMPARE(dv.variant().type(), QVariant::String); + QCOMPARE(dv.variant().toString(), QString("bar")); } void tst_QDBusInterface::invokeMethodWithReturn() @@ -343,10 +408,11 @@ void tst_QDBusInterface::invokeMethodWithReturn() QDBusInterface iface(QDBusConnection::sessionBus().baseService(), QLatin1String("/"), TEST_INTERFACE_NAME); - // make the call without a return type MyObject::callCount = 0; - QDBusVariant arg("foo"); QDBusVariant retArg; + + // make the SLOT call without a return type + QDBusVariant arg("foo"); QVERIFY(QMetaObject::invokeMethod(&iface, "ping", Q_RETURN_ARG(QDBusVariant, retArg), Q_ARG(QDBusVariant, arg))); QCOMPARE(MyObject::callCount, 1); @@ -359,6 +425,21 @@ void tst_QDBusInterface::invokeMethodWithReturn() // verify that we got the reply as expected QCOMPARE(retArg.variant(), arg.variant()); + + // make the INVOKABLE call without a return type + QDBusVariant arg2("bar"); + QVERIFY(QMetaObject::invokeMethod(&iface, "ping_invokable", Q_RETURN_ARG(QDBusVariant, retArg), Q_ARG(QDBusVariant, arg2))); + QCOMPARE(MyObject::callCount, 2); + + // verify what the callee received + QCOMPARE(MyObject::callArgs.count(), 1); + v = MyObject::callArgs.at(0); + dv = qdbus_cast<QDBusVariant>(v); + QCOMPARE(dv.variant().type(), QVariant::String); + QCOMPARE(dv.variant().toString(), arg2.variant().toString()); + + // verify that we got the reply as expected + QCOMPARE(retArg.variant(), arg2.variant()); } void tst_QDBusInterface::invokeMethodWithMultiReturn() @@ -367,10 +448,11 @@ void tst_QDBusInterface::invokeMethodWithMultiReturn() QDBusInterface iface(QDBusConnection::sessionBus().baseService(), QLatin1String("/"), TEST_INTERFACE_NAME); - // make the call without a return type MyObject::callCount = 0; - QDBusVariant arg("foo"), arg2("bar"); QDBusVariant retArg, retArg2; + + // make the SLOT call without a return type + QDBusVariant arg("foo"), arg2("bar"); QVERIFY(QMetaObject::invokeMethod(&iface, "ping", Q_RETURN_ARG(QDBusVariant, retArg), Q_ARG(QDBusVariant, arg), @@ -393,6 +475,31 @@ void tst_QDBusInterface::invokeMethodWithMultiReturn() // verify that we got the replies as expected QCOMPARE(retArg.variant(), arg.variant()); QCOMPARE(retArg2.variant(), arg2.variant()); + + // make the INVOKABLE call without a return type + QDBusVariant arg3("hello"), arg4("world"); + QVERIFY(QMetaObject::invokeMethod(&iface, "ping_invokable", + Q_RETURN_ARG(QDBusVariant, retArg), + Q_ARG(QDBusVariant, arg3), + Q_ARG(QDBusVariant, arg4), + Q_ARG(QDBusVariant&, retArg2))); + QCOMPARE(MyObject::callCount, 2); + + // verify what the callee received + QCOMPARE(MyObject::callArgs.count(), 2); + v = MyObject::callArgs.at(0); + dv = qdbus_cast<QDBusVariant>(v); + QCOMPARE(dv.variant().type(), QVariant::String); + QCOMPARE(dv.variant().toString(), arg3.variant().toString()); + + v = MyObject::callArgs.at(1); + dv = qdbus_cast<QDBusVariant>(v); + QCOMPARE(dv.variant().type(), QVariant::String); + QCOMPARE(dv.variant().toString(), arg4.variant().toString()); + + // verify that we got the replies as expected + QCOMPARE(retArg.variant(), arg3.variant()); + QCOMPARE(retArg2.variant(), arg4.variant()); } void tst_QDBusInterface::invokeMethodWithComplexReturn() @@ -401,10 +508,11 @@ void tst_QDBusInterface::invokeMethodWithComplexReturn() QDBusInterface iface(QDBusConnection::sessionBus().baseService(), QLatin1String("/"), TEST_INTERFACE_NAME); - // make the call without a return type MyObject::callCount = 0; - QList<int> arg = QList<int>() << 42 << -47; QList<int> retArg; + + // make the SLOT call without a return type + QList<int> arg = QList<int>() << 42 << -47; QVERIFY(QMetaObject::invokeMethod(&iface, "ping", Q_RETURN_ARG(QList<int>, retArg), Q_ARG(QList<int>, arg))); QCOMPARE(MyObject::callCount, 1); @@ -416,6 +524,20 @@ void tst_QDBusInterface::invokeMethodWithComplexReturn() // verify that we got the reply as expected QCOMPARE(retArg, arg); + + // make the INVOKABLE call without a return type + QList<int> arg2 = QList<int>() << 24 << -74; + QVERIFY(QMetaObject::invokeMethod(&iface, "ping", Q_RETURN_ARG(QList<int>, retArg), Q_ARG(QList<int>, arg2))); + QCOMPARE(MyObject::callCount, 2); + + // verify what the callee received + QCOMPARE(MyObject::callArgs.count(), 1); + v = MyObject::callArgs.at(0); + QCOMPARE(v.userType(), qMetaTypeId<QDBusArgument>()); + QCOMPARE(qdbus_cast<QList<int> >(v), arg2); + + // verify that we got the reply as expected + QCOMPARE(retArg, arg2); } void tst_QDBusInterface::signal() -- cgit v0.12 From 1772b199718fd3e113175ffbb5eddfa5fd51656b Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 27 Jul 2010 11:09:43 +0200 Subject: Fixed plugin build key for Symbian builds under Linux. Task: QTBUG-8962 RevBy: Jason Barron (cherry picked from commit 71df0ad5c02365e3baf8f6996d4b258f5da52a2f) --- configure | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 3198998..b8c3565 100755 --- a/configure +++ b/configure @@ -6775,6 +6775,8 @@ fi # turn off exceptions for the compilers that support it if [ "$PLATFORM_QWS" = "yes" ]; then COMPILER=`echo $XPLATFORM | cut -f 3- -d-` +elif [ "$XPLATFORM" != "$PLATFORM" ]; then + COMPILER=`echo $XPLATFORM | cut -f 2- -d-` else COMPILER=`echo $PLATFORM | cut -f 2- -d-` fi @@ -7246,9 +7248,17 @@ rm -f .options BUILD_OPTIONS="$BUILD_CONFIG $BUILD_OPTIONS" # extract the operating system from the XPLATFORM TARGET_OPERATING_SYSTEM=`echo $XPLATFORM | cut -f 2- -d/ | cut -f -1 -d-` +case "$XPLATFORM" in +symbian*) + QT_BUILD_KEY_SYSTEM_PART="Symbian" + ;; +*) + QT_BUILD_KEY_SYSTEM_PART="$CFG_ARCH $TARGET_OPERATING_SYSTEM $COMPILER" + ;; +esac # when cross-compiling, don't include build-host information (build key is target specific) -QT_BUILD_KEY="$CFG_USER_BUILD_KEY $CFG_ARCH $TARGET_OPERATING_SYSTEM $COMPILER $BUILD_OPTIONS" +QT_BUILD_KEY="$CFG_USER_BUILD_KEY $QT_BUILD_KEY_SYSTEM_PART $BUILD_OPTIONS" if [ -n "$QT_NAMESPACE" ]; then QT_BUILD_KEY="$QT_BUILD_KEY $QT_NAMESPACE" fi -- cgit v0.12 From 3a2a18d64f96f54522869495eba33935374c1f1e Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko <denis.dzyubenko@nokia.com> Date: Tue, 27 Jul 2010 10:23:44 +0200 Subject: Check the gesturemanager pointer before accessing it. This fixes a crash when a static QWidget is destroyed after the QApplication object. Task-number: QTBUG-12025 Reviewed-by: Zeno Albisser (cherry picked from commit 475a3c275ba173cb130a838b6053cb45d405887e) --- src/gui/graphicsview/qgraphicsitem.cpp | 7 ++++--- src/gui/kernel/qapplication.cpp | 10 ++++++---- src/gui/kernel/qwidget.cpp | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index cd03eeb..adccd86 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -1437,9 +1437,10 @@ QGraphicsItem::~QGraphicsItem() #ifndef QT_NO_GESTURES if (d_ptr->isObject && !d_ptr->gestureContext.isEmpty()) { QGraphicsObject *o = static_cast<QGraphicsObject *>(this); - QGestureManager *manager = QGestureManager::instance(); - foreach (Qt::GestureType type, d_ptr->gestureContext.keys()) - manager->cleanupCachedGestures(o, type); + if (QGestureManager *manager = QGestureManager::instance()) { + foreach (Qt::GestureType type, d_ptr->gestureContext.keys()) + manager->cleanupCachedGestures(o, type); + } } #endif diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index ccfe88c..5f256d5 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -5786,10 +5786,12 @@ Q_GUI_EXPORT void qt_translateRawTouchEvent(QWidget *window, #ifndef QT_NO_GESTURES QGestureManager* QGestureManager::instance() { - QApplicationPrivate *qAppPriv = QApplicationPrivate::instance(); - if (!qAppPriv->gestureManager) - qAppPriv->gestureManager = new QGestureManager(qApp); - return qAppPriv->gestureManager; + if (QApplicationPrivate *qAppPriv = QApplicationPrivate::instance()) { + if (!qAppPriv->gestureManager) + qAppPriv->gestureManager = new QGestureManager(qApp); + return qAppPriv->gestureManager; + } + return 0; } #endif // QT_NO_GESTURES diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 233df15..1b8c091 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -12047,8 +12047,8 @@ void QWidget::ungrabGesture(Qt::GestureType gesture) { Q_D(QWidget); if (d->gestureContext.remove(gesture)) { - QGestureManager *manager = QGestureManager::instance(); - manager->cleanupCachedGestures(this, gesture); + if (QGestureManager *manager = QGestureManager::instance()) + manager->cleanupCachedGestures(this, gesture); } } #endif // QT_NO_GESTURES -- cgit v0.12 From e50db476e3fb32a68ea3cceab8198ef47613d88a Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 27 Jul 2010 10:30:07 +1000 Subject: Document 'this' as undefined in QML Task-number: QTBUG-12396 Reviewed-by: Aaron Kennedy (cherry picked from commit b4b0bdda668e9845623995c788d88a774dd52d98) --- doc/src/declarative/javascriptblocks.qdoc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/doc/src/declarative/javascriptblocks.qdoc b/doc/src/declarative/javascriptblocks.qdoc index c41e38e..18da3d2 100644 --- a/doc/src/declarative/javascriptblocks.qdoc +++ b/doc/src/declarative/javascriptblocks.qdoc @@ -236,6 +236,31 @@ This restriction exists as the QML environment is not yet fully established. To run code after the environment setup has completed, refer to \l {Running JavaScript at Startup}. +\o The value of \c this is currently undefined in QML + +The value of \c this is undefined in QML. To refer to any element, provide +an \c id. For example: + +\qml +Item { + width: 200; height: 100 + function mouseAreaClicked(area) { + console.log("Clicked in area at: " + area.x + ", " + area.y); + } + // This will not work because this is undefined + MouseArea { + height: 50; width: 200 + onClicked: mouseAreaClicked(this) + } + // This will pass area2 to the function + MouseArea { + id: area2 + y: 50; height: 50; width: 200 + onClicked: mouseAreaClicked(area2) + } +} +\endqml + \endlist */ -- cgit v0.12 From 429566cc2b6feb84c9b41fc918da7cf242e82e64 Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Mon, 31 May 2010 11:03:24 +0200 Subject: Revert the change in applicationShouldTerminate(). It used to fix an issue during logout but it seems to be fine now. Related issue: QTBUG-6296 Task-number: QTBUG-10993 Reviewed-by: Morten Sorvig (cherry picked from commit 4942890f85e5fa74bf8c37cf7f53f6f3eaf40596) --- src/gui/kernel/qcocoaapplicationdelegate_mac.mm | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm index 5dcf613..7a9dc70 100644 --- a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm +++ b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm @@ -196,7 +196,6 @@ static void cleanupCocoaApplicationDelegate() qAppInstance()->quit(); startedQuit = false; } - return NSTerminateNow; } if (qtPrivate->threadData->eventLoops.size() == 0) { -- cgit v0.12 From 7dc58c499fad151977f15d37f3d03ffab2883e76 Mon Sep 17 00:00:00 2001 From: Rohan McGovern <rohan.mcgovern@nokia.com> Date: Tue, 20 Jul 2010 15:19:57 +1000 Subject: Revert "Add the chart utility from qtestlib-tools." This reverts commit 453abe70fec02456aba2219025f5202060eaece1. Task-number: QT-3583 Reviewed-by: Jason McDonald --- src/testlib/qtestcase.cpp | 30 +- tools/qtestlib/chart/3rdparty/excanvas.js | 14 - tools/qtestlib/chart/3rdparty/flotr.js | 2 - tools/qtestlib/chart/3rdparty/prototype.js | 8 - tools/qtestlib/chart/benchmark_template.html | 202 ---------- tools/qtestlib/chart/chart.pro | 16 - tools/qtestlib/chart/chart.qrc | 9 - tools/qtestlib/chart/chart_template.html | 110 ------ tools/qtestlib/chart/database.cpp | 324 --------------- tools/qtestlib/chart/database.h | 105 ----- tools/qtestlib/chart/main.cpp | 82 ---- tools/qtestlib/chart/reportgenerator.cpp | 563 --------------------------- tools/qtestlib/chart/reportgenerator.h | 68 ---- tools/qtestlib/qtestlib.pro | 2 +- 14 files changed, 2 insertions(+), 1533 deletions(-) delete mode 100644 tools/qtestlib/chart/3rdparty/excanvas.js delete mode 100644 tools/qtestlib/chart/3rdparty/flotr.js delete mode 100644 tools/qtestlib/chart/3rdparty/prototype.js delete mode 100644 tools/qtestlib/chart/benchmark_template.html delete mode 100644 tools/qtestlib/chart/chart.pro delete mode 100644 tools/qtestlib/chart/chart.qrc delete mode 100644 tools/qtestlib/chart/chart_template.html delete mode 100644 tools/qtestlib/chart/database.cpp delete mode 100644 tools/qtestlib/chart/database.h delete mode 100644 tools/qtestlib/chart/main.cpp delete mode 100644 tools/qtestlib/chart/reportgenerator.cpp delete mode 100644 tools/qtestlib/chart/reportgenerator.h diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 63e22cc..17f1a6b 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -54,7 +54,6 @@ #include <QtCore/qdir.h> #include <QtCore/qprocess.h> #include <QtCore/qdebug.h> -#include <QtCore/qlibraryinfo.h> #include "QtTest/private/qtestlog_p.h" #include "QtTest/private/qtesttable_p.h" @@ -1008,9 +1007,6 @@ static void qParseArgs(int argc, char *argv[]) " -iterations n : Sets the number of accumulation iterations.\n" " -median n : Sets the number of median iterations.\n" " -vb : Print out verbose benchmarking information.\n" -#if !defined(QT_NO_PROCESS) && !defined(QT_NO_SETTINGS) - " -chart : Create chart based on the benchmark result.\n" -#endif "\n" " -help : This help\n"; @@ -1128,12 +1124,8 @@ static void qParseArgs(int argc, char *argv[]) } else if (strcmp(argv[i], "-vb") == 0) { QBenchmarkGlobalData::current->verboseOutput = true; -#if !defined(QT_NO_PROCESS) && !defined(QT_NO_SETTINGS) } else if (strcmp(argv[i], "-chart") == 0) { - QBenchmarkGlobalData::current->createChart = true; - QTestLog::setLogMode(QTestLog::XML); - QTestLog::redirectOutput("results.xml"); -#endif + fprintf(stderr, "Warning: `-chart' option is not available\n"); } else if (strcmp(argv[i], "-qws") == 0) { // do nothing } else if (strcmp(argv[i], "-graphicssystem") == 0) { @@ -1743,26 +1735,6 @@ int QTest::qExec(QObject *testObject, int argc, char **argv) } #endif - -#if !defined(QT_NO_PROCESS) && !defined(QT_NO_SETTINGS) - if (QBenchmarkGlobalData::current->createChart) { - QString chartLocation = QLibraryInfo::location(QLibraryInfo::BinariesPath); -#ifdef Q_OS_WIN - chartLocation += QLatin1String("/../tools/qtestlib/chart/release/chart.exe"); -#else - chartLocation += QLatin1String("/../tools/qtestlib/chart/chart"); -#endif - if (QFile::exists(chartLocation)) { - QProcess p; - p.setProcessChannelMode(QProcess::ForwardedChannels); - p.start(chartLocation, QStringList() << QLatin1String("results.xml")); - p.waitForFinished(-1); - } else { - qDebug() << QLatin1String("Could not find the chart tool in ") + chartLocation + QLatin1String(", please make sure it is compiled."); - } - } -#endif - #if defined(QTEST_NOEXITCODE) return 0; #else diff --git a/tools/qtestlib/chart/3rdparty/excanvas.js b/tools/qtestlib/chart/3rdparty/excanvas.js deleted file mode 100644 index e77763a..0000000 --- a/tools/qtestlib/chart/3rdparty/excanvas.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2006 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -if(!window.CanvasRenderingContext2D){(function(){var N=Math;var O=N.round;var L=N.sin;var U=N.cos;var A=10;var I=A/2;var G={init:function(W){var X=W||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var V=this;X.attachEvent("onreadystatechange",function(){V.init_(X)})}},init_:function(Y){if(Y.readyState=="complete"){if(!Y.namespaces.g_vml_){Y.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var X=Y.createStyleSheet();X.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}";var W=Y.getElementsByTagName("canvas");for(var V=0;V<W.length;V++){if(!W[V].getContext){this.initElement(W[V])}}}},fixElement_:function(X){var Z=X.outerHTML;var Y=X.ownerDocument.createElement(Z);if(Z.slice(-2)!="/>"){var V="/"+X.tagName;var W;while((W=X.nextSibling)&&W.tagName!=V){W.removeNode()}if(W){W.removeNode()}}X.parentNode.replaceChild(Y,X);return Y},initElement:function(W){W=this.fixElement_(W);W.getContext=function(){if(this.context_){return this.context_}return this.context_=new J(this)};W.attachEvent("onpropertychange",T);W.attachEvent("onresize",B);var V=W.attributes;if(V.width&&V.width.specified){W.style.width=V.width.nodeValue+"px"}else{W.width=W.clientWidth}if(V.height&&V.height.specified){W.style.height=V.height.nodeValue+"px"}else{W.height=W.clientHeight}return W}};function T(W){var V=W.srcElement;switch(W.propertyName){case"width":V.style.width=V.attributes.width.nodeValue+"px";V.getContext().clearRect();break;case"height":V.style.height=V.attributes.height.nodeValue+"px";V.getContext().clearRect();break}}function B(W){var V=W.srcElement;if(V.firstChild){V.firstChild.style.width=V.clientWidth+"px";V.firstChild.style.height=V.clientHeight+"px"}}G.init();var D=[];for(var R=0;R<16;R++){for(var Q=0;Q<16;Q++){D[R*16+Q]=R.toString(16)+Q.toString(16)}}function K(){return[[1,0,0],[0,1,0],[0,0,1]]}function E(Y,X){var W=K();for(var V=0;V<3;V++){for(var b=0;b<3;b++){var Z=0;for(var a=0;a<3;a++){Z+=Y[V][a]*X[a][b]}W[V][b]=Z}}return W}function P(W,V){V.fillStyle=W.fillStyle;V.lineCap=W.lineCap;V.lineJoin=W.lineJoin;V.lineWidth=W.lineWidth;V.miterLimit=W.miterLimit;V.shadowBlur=W.shadowBlur;V.shadowColor=W.shadowColor;V.shadowOffsetX=W.shadowOffsetX;V.shadowOffsetY=W.shadowOffsetY;V.strokeStyle=W.strokeStyle;V.arcScaleX_=W.arcScaleX_;V.arcScaleY_=W.arcScaleY_}function C(W){var Z,Y=1;W=String(W);if(W.substring(0,3)=="rgb"){var b=W.indexOf("(",3);var V=W.indexOf(")",b+1);var a=W.substring(b+1,V).split(",");Z="#";for(var X=0;X<3;X++){Z+=D[Number(a[X])]}if((a.length==4)&&(W.substr(3,1)=="a")){Y=a[3]}}else{Z=W}return[Z,Y]}function M(V){switch(V){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function J(W){this.m_=K();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=A*1;this.globalAlpha=1;this.canvas=W;var V=W.ownerDocument.createElement("div");V.style.width=W.clientWidth+"px";V.style.height=W.clientHeight+"px";V.style.overflow="hidden";V.style.position="absolute";W.appendChild(V);this.element_=V;this.arcScaleX_=1;this.arcScaleY_=1}var H=J.prototype;H.clearRect=function(){this.element_.innerHTML="";this.currentPath_=[]};H.beginPath=function(){this.currentPath_=[]};H.moveTo=function(W,V){this.currentPath_.push({type:"moveTo",x:W,y:V});this.currentX_=W;this.currentY_=V};H.lineTo=function(W,V){this.currentPath_.push({type:"lineTo",x:W,y:V});this.currentX_=W;this.currentY_=V};H.bezierCurveTo=function(X,V,a,Z,Y,W){this.currentPath_.push({type:"bezierCurveTo",cp1x:X,cp1y:V,cp2x:a,cp2y:Z,x:Y,y:W});this.currentX_=Y;this.currentY_=W};H.quadraticCurveTo=function(c,b,a,Z){var W=this.currentX_+2/3*(c-this.currentX_);var V=this.currentY_+2/3*(b-this.currentY_);var Y=W+(a-this.currentX_)/3;var X=V+(Z-this.currentY_)/3;this.bezierCurveTo(W,V,Y,X,a,Z)};H.arc=function(b,Z,a,Y,W,X){a*=A;var f=X?"at":"wa";var c=b+(U(Y)*a)-I;var e=Z+(L(Y)*a)-I;var V=b+(U(W)*a)-I;var d=Z+(L(W)*a)-I;if(c==V&&!X){c+=0.125}this.currentPath_.push({type:f,x:b,y:Z,radius:a,xStart:c,yStart:e,xEnd:V,yEnd:d})};H.rect=function(X,W,V,Y){this.moveTo(X,W);this.lineTo(X+V,W);this.lineTo(X+V,W+Y);this.lineTo(X,W+Y);this.closePath()};H.strokeRect=function(X,W,V,Y){this.beginPath();this.moveTo(X,W);this.lineTo(X+V,W);this.lineTo(X+V,W+Y);this.lineTo(X,W+Y);this.closePath();this.stroke()};H.fillRect=function(X,W,V,Y){this.beginPath();this.moveTo(X,W);this.lineTo(X+V,W);this.lineTo(X+V,W+Y);this.lineTo(X,W+Y);this.closePath();this.fill()};H.createLinearGradient=function(W,Y,V,X){var Z=new S("gradient");return Z};H.createRadialGradient=function(Y,a,X,W,Z,V){var b=new S("gradientradial");b.radius1_=X;b.radius2_=V;b.focus_.x=Y;b.focus_.y=a;return b};H.drawImage=function(n,Y){var f,c,i,u,l,j,p,x;var g=n.runtimeStyle.width;var m=n.runtimeStyle.height;n.runtimeStyle.width="auto";n.runtimeStyle.height="auto";var e=n.width;var s=n.height;n.runtimeStyle.width=g;n.runtimeStyle.height=m;if(arguments.length==3){f=arguments[1];c=arguments[2];l=j=0;p=i=e;x=u=s}else{if(arguments.length==5){f=arguments[1];c=arguments[2];i=arguments[3];u=arguments[4];l=j=0;p=e;x=s}else{if(arguments.length==9){l=arguments[1];j=arguments[2];p=arguments[3];x=arguments[4];f=arguments[5];c=arguments[6];i=arguments[7];u=arguments[8]}else{throw"Invalid number of arguments"}}}var v=this.getCoords_(f,c);var Z=p/2;var X=x/2;var t=[];var V=10;var b=10;t.push(" <g_vml_:group",' coordsize="',A*V,",",A*b,'"',' coordorigin="0,0"',' style="width:',V,";height:",b,";position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var a=[];a.push("M11='",this.m_[0][0],"',","M12='",this.m_[1][0],"',","M21='",this.m_[0][1],"',","M22='",this.m_[1][1],"',","Dx='",O(v.x/A),"',","Dy='",O(v.y/A),"'");var r=v;var q=this.getCoords_(f+i,c);var o=this.getCoords_(f,c+u);var k=this.getCoords_(f+i,c+u);r.x=Math.max(r.x,q.x,o.x,k.x);r.y=Math.max(r.y,q.y,o.y,k.y);t.push("padding:0 ",O(r.x/A),"px ",O(r.y/A),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",a.join(""),", sizingmethod='clip');")}else{t.push("top:",O(v.y/A),"px;left:",O(v.x/A),"px;")}t.push(' ">','<g_vml_:image src="',n.src,'"',' style="width:',A*i,";"," height:",A*u,';"',' cropleft="',l/e,'"',' croptop="',j/s,'"',' cropright="',(e-l-p)/e,'"',' cropbottom="',(s-j-x)/s,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",t.join(""))};H.stroke=function(y){var e=[];var d=false;var AB=C(y?this.fillStyle:this.strokeStyle);var u=AB[0];var Y=AB[1]*this.globalAlpha;var X=10;var j=10;e.push("<g_vml_:shape",' fillcolor="',u,'"',' filled="',Boolean(y),'"',' style="position:absolute;width:',X,";height:",j,';"',' coordorigin="0 0" coordsize="',A*X," ",A*j,'"',' stroked="',!y,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',u,'"',' path="');var h=false;var t={x:null,y:null};var v={x:null,y:null};for(var w=0;w<this.currentPath_.length;w++){var o=this.currentPath_[w];if(o.type=="moveTo"){e.push(" m ");var AA=this.getCoords_(o.x,o.y);e.push(O(AA.x),",",O(AA.y))}else{if(o.type=="lineTo"){e.push(" l ");var AA=this.getCoords_(o.x,o.y);e.push(O(AA.x),",",O(AA.y))}else{if(o.type=="close"){e.push(" x ")}else{if(o.type=="bezierCurveTo"){e.push(" c ");var AA=this.getCoords_(o.x,o.y);var s=this.getCoords_(o.cp1x,o.cp1y);var q=this.getCoords_(o.cp2x,o.cp2y);e.push(O(s.x),",",O(s.y),",",O(q.x),",",O(q.y),",",O(AA.x),",",O(AA.y))}else{if(o.type=="at"||o.type=="wa"){e.push(" ",o.type," ");var AA=this.getCoords_(o.x,o.y);var k=this.getCoords_(o.xStart,o.yStart);var b=this.getCoords_(o.xEnd,o.yEnd);e.push(O(AA.x-this.arcScaleX_*o.radius),",",O(AA.y-this.arcScaleY_*o.radius)," ",O(AA.x+this.arcScaleX_*o.radius),",",O(AA.y+this.arcScaleY_*o.radius)," ",O(k.x),",",O(k.y)," ",O(b.x),",",O(b.y))}}}}}if(AA){if(t.x==null||AA.x<t.x){t.x=AA.x}if(v.x==null||AA.x>v.x){v.x=AA.x}if(t.y==null||AA.y<t.y){t.y=AA.y}if(v.y==null||AA.y>v.y){v.y=AA.y}}}e.push(' ">');if(typeof this.fillStyle=="object"){var n={x:"50%",y:"50%"};var r=(v.x-t.x);var l=(v.y-t.y);var z=(r>l)?r:l;n.x=O((this.fillStyle.focus_.x/r)*100+50)+"%";n.y=O((this.fillStyle.focus_.y/l)*100+50)+"%";var g=[];if(this.fillStyle.type_=="gradientradial"){var x=(this.fillStyle.radius1_/z*100);var m=(this.fillStyle.radius2_/z*100)-x}else{var x=0;var m=100}var V={offset:null,color:null};var Z={offset:null,color:null};this.fillStyle.colors_.sort(function(a,W){return a.offset-W.offset});for(var w=0;w<this.fillStyle.colors_.length;w++){var f=this.fillStyle.colors_[w];g.push((f.offset*m)+x,"% ",f.color,",");if(f.offset>V.offset||V.offset==null){V.offset=f.offset;V.color=f.color}if(f.offset<Z.offset||Z.offset==null){Z.offset=f.offset;Z.color=f.color}}g.pop();e.push("<g_vml_:fill",' color="',Z.color,'"',' color2="',V.color,'"',' type="',this.fillStyle.type_,'"',' focusposition="',n.x,", ",n.y,'"',' colors="',g.join(""),'"',' opacity="',Y,'" />')}else{if(y){e.push('<g_vml_:fill color="',u,'" opacity="',Y,'" />')}else{e.push("<g_vml_:stroke",' opacity="',Y,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',M(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',u,'" />')}}e.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",e.join(""))};H.fill=function(){this.stroke(true)};H.closePath=function(){this.currentPath_.push({type:"close"})};H.getCoords_=function(W,V){return{x:A*(W*this.m_[0][0]+V*this.m_[1][0]+this.m_[2][0])-I,y:A*(W*this.m_[0][1]+V*this.m_[1][1]+this.m_[2][1])-I}};H.save=function(){var V={};P(this,V);this.aStack_.push(V);this.mStack_.push(this.m_);this.m_=E(K(),this.m_)};H.restore=function(){P(this.aStack_.pop(),this);this.m_=this.mStack_.pop()};H.translate=function(X,W){var V=[[1,0,0],[0,1,0],[X,W,1]];this.m_=E(V,this.m_)};H.rotate=function(W){var Y=U(W);var X=L(W);var V=[[Y,X,0],[-X,Y,0],[0,0,1]];this.m_=E(V,this.m_)};H.scale=function(X,W){this.arcScaleX_*=X;this.arcScaleY_*=W;var V=[[X,0,0],[0,W,0],[0,0,1]];this.m_=E(V,this.m_)};H.clip=function(){};H.arcTo=function(){};H.createPattern=function(){return new F};function S(V){this.type_=V;this.radius1_=0;this.radius2_=0;this.colors_=[];this.focus_={x:0,y:0}}S.prototype.addColorStop=function(W,V){V=C(V);this.colors_.push({offset:1-W,color:V})};function F(){}G_vmlCanvasManager=G;CanvasRenderingContext2D=J;CanvasGradient=S;CanvasPattern=F})()}; \ No newline at end of file diff --git a/tools/qtestlib/chart/3rdparty/flotr.js b/tools/qtestlib/chart/3rdparty/flotr.js deleted file mode 100644 index 80bb506..0000000 --- a/tools/qtestlib/chart/3rdparty/flotr.js +++ /dev/null @@ -1,2 +0,0 @@ -//Flotr 0.1.0alpha Copyright (c) 2008 Bas Wenneker, <http://solutoire.com>, MIT License. -var Flotr=(function(){var C=0;function L(M){return M.collect(function(N){return(N.data)?Object.clone(N):{data:N}})}function G(P,N){var M=N||{};for(var O in P){M[O]=(typeof (P[O])=="object"&&!(P[O].constructor==Array||P[O].constructor==RegExp))?G(P[O],N[O]):M[O]=P[O]}return M}function I(Q,P,M,N){var T=(M-P)/Q;var S=H(T);var O=T/S;var R=10;if(O<1.5){R=1}else{if(O<2.25){R=2}else{if(O<3){R=2.5}else{if(O<7.5){R=5}}}}if(R==2.5&&N==0){R=2}R*=S;return R}function E(M){return M.toString()}function F(M){return"("+M.x+", "+M.y+")"}function H(M){return Math.pow(10,Math.floor(Math.log(M)/Math.LN10))}function K(O){var M;if((M=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(O))){return new B(parseInt(M[1]),parseInt(M[2]),parseInt(M[3]))}if((M=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(O))){return new B(parseInt(M[1]),parseInt(M[2]),parseInt(M[3]),parseFloat(M[4]))}if((M=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(O))){return new B(parseFloat(M[1])*2.55,parseFloat(M[2])*2.55,parseFloat(M[3])*2.55)}if((M=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(O))){return new B(parseFloat(M[1])*2.55,parseFloat(M[2])*2.55,parseFloat(M[3])*2.55,parseFloat(M[4]))}if((M=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(O))){return new B(parseInt(M[1],16),parseInt(M[2],16),parseInt(M[3],16))}if((M=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(O))){return new B(parseInt(M[1]+M[1],16),parseInt(M[2]+M[2],16),parseInt(M[3]+M[3],16))}var N=O.strip().toLowerCase();if(N=="transparent"){return new B(255,255,255,0)}M=D[N];return new B(M[0],M[1],M[2])}function A(N){var M;do{M=N.getStyle("background-color").toLowerCase();if(M!=""&&M!="transparent"){break}N=N.up(0)}while(N.nodeName.toLowerCase()!="body");if(M=="rgba(0, 0, 0, 0)"){return"transparent"}return M}function B(S,R,N,P){var Q=["r","g","b","a"];var M=4;while(-1<--M){this[Q[M]]=arguments[M]||((M==3)?1:0)}this.toString=function(){return(this.a>=1)?"rgb("+[this.r,this.g,this.b].join(",")+")":"rgba("+[this.r,this.g,this.b,this.a].join(",")+")"};this.scale=function(V,U,W,T){M=4;while(-1<--M){if(arguments[M]!=null){this[Q[M]]*=arguments[M]}}return this.normalize()};this.adjust=function(V,U,W,T){M=4;while(-1<--M){if(arguments[M]!=null){this[Q[M]]+=arguments[M]}}return this.normalize()};this.clone=function(){return new B(this.r,this.b,this.g,this.a)};var O=function(U,T,V){return Math.max(Math.min(U,V),T)};this.normalize=function(){this.r=O(parseInt(this.r),0,255);this.g=O(parseInt(this.g),0,255);this.b=O(parseInt(this.b),0,255);this.a=O(this.a,0,1);return this};this.normalize()}var D={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]};function J(y,AO,p){var o,S,AL,h,AS;var z="flotr-"+C++;var R=L(AO);var N=y;var u={},c={};var l={left:0,right:0,top:0,bottom:0};var AA=0;var d=0;var AH=0;var U=0;var P=0;var AD=0;var AC=0;var AB=0;g(p);k();AN();q();AK(u,o.xaxis);Z();AK(c,o.yaxis);m(u,o.xaxis);m(c,o.yaxis);Y();AP();AQ();this.getCanvas=function(){return S};this.getPlotOffset=function(){return l};this.clearSelection=M;this.setSelection=AF;function g(AV){o=G(AV,{colors:["#00A8F0","#C0D800","#cb4b4b","#4da74d","#9440ed"],legend:{show:true,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:0.85},xaxis:{ticks:null,noTicks:5,tickFormatter:E,tickDecimals:null,min:null,max:null,autoscaleMargin:0},yaxis:{ticks:null,noTicks:5,tickFormatter:E,tickDecimals:null,min:null,max:null,autoscaleMargin:0},points:{show:false,radius:3,lineWidth:2,fill:true,fillColor:"#ffffff"},lines:{show:false,lineWidth:2,fill:false,fillColor:null},bars:{show:false,lineWidth:2,barWidth:1,fill:true,fillColor:null},grid:{color:"#545454",backgroundColor:null,tickColor:"#dddddd",labelMargin:3},selection:{mode:null,color:"#B6D9FF",fps:10},mouse:{track:null,position:"se",trackFormatter:F,margin:3,color:"#ff3f19",trackDecimals:1,sensibility:2,radius:3},shadowSize:4});var Ah=R.length;var AT=[];var AZ=[];for(var Ac=0;Ac<R.length;++Ac){var Ag=R[Ac].color;if(Ag!=null){--Ah;if(Object.isNumber(Ag)){AZ.push(Ag)}else{AT.push(K(R[Ac].color))}}}for(var Ab=0;Ab<AZ.length;++Ab){Ah=Math.max(Ah,AZ[Ab]+1)}var AU=[];var AY=0;var Aa=0;while(AU.length<Ah){var Af=(o.colors.length==Aa)?new B(100,100,100):K(o.colors[Aa]);var AW=AY%2==1?-1:1;var Ae=1+AW*Math.ceil(AY/2)*0.2;Af.scale(Ae,Ae,Ae);AU.push(Af);if(++Aa>=o.colors.length){Aa=0;++AY}}var Ad=0;for(var AX=0,Ai;AX<R.length;++AX){Ai=R[AX];if(Ai.color==null){Ai.color=AU[Ad].toString();++Ad}else{if(Object.isNumber(Ai.color)){Ai.color=AU[Ai.color].toString()}}Ai.lines=Object.extend(Object.clone(o.lines),Ai.lines);Ai.points=Object.extend(Object.clone(o.points),Ai.points);Ai.bars=Object.extend(Object.clone(o.bars),Ai.bars);Ai.mouse=Object.extend(Object.clone(o.mouse),Ai.mouse);if(Ai.shadowSize==null){Ai.shadowSize=o.shadowSize}}}function k(){AH=N.getWidth();U=N.getHeight();N.innerHTML="";N.setStyle({position:"relative"});if(AH<=0||U<=0){throw"Invalid dimensions for plot, width = "+AH+", height = "+U}S=$(document.createElement("canvas")).writeAttribute({width:AH,height:U});N.appendChild(S);if(Prototype.Browser.IE){S=$(window.G_vmlCanvasManager.initElement(S))}h=S.getContext("2d");AL=$(document.createElement("canvas")).writeAttribute({width:AH,height:U}).setStyle({position:"absolute",left:"0px",top:"0px"});N.setStyle({cursor:"default"}).appendChild(AL);if(Prototype.Browser.IE){AL=$(window.G_vmlCanvasManager.initElement(AL))}AS=AL.getContext("2d")}function AN(){if(o.selection.mode!=null){AL.observe("mousedown",r)}AL.observe("mousemove",e);AL.observe("click",f)}function q(){c.datamin=u.datamin=0;u.datamax=c.datamax=1;if(R.length==0){return }var AY=false;for(var AV=0;AV<R.length;++AV){if(R[AV].data.length>0){u.datamin=u.datamax=R[AV].data[0][0];c.datamin=c.datamax=R[AV].data[0][1];AY=true;break}}if(!AY){return }for(var AU=0;AU<R.length;++AU){var AX=R[AU].data;for(var AW=0;AW<AX.length;++AW){var AT=AX[AW][0];var AZ=AX[AW][1];if(AT<u.datamin){u.datamin=AT}else{if(AT>u.datamax){u.datamax=AT}}if(AZ<c.datamin){c.datamin=AZ}else{if(AZ>c.datamax){c.datamax=AZ}}}}}function AK(AW,AY){var AV=AY.min!=null?AY.min:AW.datamin;var AT=AY.max!=null?AY.max:AW.datamax;if(AT-AV==0){var AU=(AT==0)?1:0.01;AV-=AU;AT+=AU}AW.tickSize=I(AY.noTicks,AV,AT,AY.tickDecimals);var AX;if(AY.min==null){AX=AY.autoscaleMargin;if(AX!=0){AV-=AW.tickSize*AX;if(AV<0&&AW.datamin>=0){AV=0}AV=AW.tickSize*Math.floor(AV/AW.tickSize)}}if(AY.max==null){AX=AY.autoscaleMargin;if(AX!=0){AT+=AW.tickSize*AX;if(AT>0&&AW.datamax<=0){AT=0}AT=AW.tickSize*Math.ceil(AT/AW.tickSize)}}AW.min=AV;AW.max=AT}function Z(){if(o.xaxis.max==null){var AU=u.max;for(var AT=0;AT<R.length;++AT){if(R[AT].bars.show&&R[AT].bars.barWidth+u.datamax>AU){AU=u.max+R[AT].bars.barWidth}}u.max=AU}}function m(AV,AW){AV.ticks=[];if(AW.ticks){var AZ=AW.ticks;if(Object.isFunction(AZ)){AZ=AZ({min:AV.min,max:AV.max})}for(var AX=0,Aa,AY;AX<AZ.length;++AX){var Ab=AZ[AX];if(typeof (Ab)=="object"){Aa=Ab[0];AY=(Ab.length>1)?Ab[1]:AW.tickFormatter(Aa)}else{Aa=Ab;AY=AW.tickFormatter(Aa)}AV.ticks[AX]={v:Aa,label:AY}}}else{var AT=AV.tickSize*Math.ceil(AV.min/AV.tickSize);for(AX=0;AT+AX*AV.tickSize<=AV.max;++AX){Aa=AT+AX*AV.tickSize;var AU=AW.tickDecimals;if(AU==null){AU=1-Math.floor(Math.log(AV.tickSize)/Math.LN10)}if(AU<0){AU=0}Aa=Aa.toFixed(AU);AV.ticks.push({v:Aa,label:AW.tickFormatter(Aa)})}}}function Y(){var AX="";for(var AW=0;AW<c.ticks.length;++AW){var AU=c.ticks[AW].label.length;if(AU>AX.length){AX=c.ticks[AW].label}}var AT=N.insert('<div style="position:absolute;top:-10000px;font-size:smaller" class="flotr-grid-label">'+AX+"</div>").down(0).next(1);AA=AT.getWidth();d=AT.getHeight();AT.remove();var AY=2;if(o.points.show){AY=Math.max(AY,o.points.radius+o.points.lineWidth/2)}for(var AV=0;AV<R.length;++AV){if(R[AV].points.show){AY=Math.max(AY,R[AV].points.radius+R[AV].points.lineWidth/2)}}l.left=l.right=l.top=l.bottom=AY;l.left+=AA+o.grid.labelMargin;l.bottom+=d+o.grid.labelMargin;P=AH-l.left-l.right;AD=U-l.bottom-l.top;AC=P/(u.max-u.min);AB=AD/(c.max-c.min)}function AP(){V();AR();for(var AT=0;AT<R.length;AT++){AI(R[AT])}}function AE(AT){return(AT-u.min)*AC}function j(AT){return AD-(AT-c.min)*AB}function V(){h.save();h.translate(l.left,l.top);if(o.grid.backgroundColor!=null){h.fillStyle=o.grid.backgroundColor;h.fillRect(0,0,P,AD)}h.lineWidth=1;h.strokeStyle=o.grid.tickColor;h.beginPath();for(var AV=0,AT=null;AV<u.ticks.length;++AV){AT=u.ticks[AV].v;if(AT==u.min||AT==u.max){continue}h.moveTo(Math.floor(AE(AT))+h.lineWidth/2,0);h.lineTo(Math.floor(AE(AT))+h.lineWidth/2,AD)}for(var AU=0,AT=null;AU<c.ticks.length;++AU){AT=c.ticks[AU].v;if(AT==c.min||AT==c.max){continue}h.moveTo(0,Math.floor(j(AT))+h.lineWidth/2);h.lineTo(P,Math.floor(j(AT))+h.lineWidth/2)}h.stroke();h.lineWidth=2;h.strokeStyle=o.grid.color;h.lineJoin="round";h.strokeRect(0,0,P,AD);h.restore()}function AR(){var AZ=0;for(var AY=0;AY<u.ticks.length;++AY){if(u.ticks[AY].label){++AZ}}var AU=P/AZ;var AX='<div style="font-size:smaller;color:'+o.grid.color+'">';for(var AV=0,AW=null;AV<u.ticks.length;++AV){AW=u.ticks[AV];if(!AW.label){continue}AX+='<div style="position:absolute;top:'+(l.top+AD+o.grid.labelMargin)+"px;left:"+(l.left+AE(AW.v)-AU/2)+"px;width:"+AU+'px;text-align:center" class="flotr-grid-label">'+AW.label+"</div>"}for(var AT=0,AW=null;AT<c.ticks.length;++AT){AW=c.ticks[AT];if(!AW.label||AW.label.length==0){continue}AX+='<div style="position:absolute;top:'+(l.top+j(AW.v)-d/2)+"px;left:0;width:"+AA+'px;text-align:right" class="flotr-grid-label">'+AW.label+"</div>"}AX+="</div>";N.insert(AX)}function AI(AT){if(AT.lines.show||(!AT.bars.show&&!AT.points.show)){i(AT)}if(AT.bars.show){v(AT)}if(AT.points.show){w(AT)}}function i(AV){function AU(Ad,Ac){if(Ad.length<2){return }var Ab=AE(Ad[0][0]),Aa=j(Ad[0][1])+Ac;h.beginPath();h.moveTo(Ab,Aa);for(var Ae=0;Ae<Ad.length-1;++Ae){var AZ=Ad[Ae][0],Ag=Ad[Ae][1],AY=Ad[Ae+1][0],Af=Ad[Ae+1][1];if(Ag<=Af&&Ag<c.min){if(Af<c.min){continue}AZ=(c.min-Ag)/(Af-Ag)*(AY-AZ)+AZ;Ag=c.min}else{if(Af<=Ag&&Af<c.min){if(Ag<c.min){continue}AY=(c.min-Ag)/(Af-Ag)*(AY-AZ)+AZ;Af=c.min}}if(Ag>=Af&&Ag>c.max){if(Af>c.max){continue}AZ=(c.max-Ag)/(Af-Ag)*(AY-AZ)+AZ;Ag=c.max}else{if(Af>=Ag&&Af>c.max){if(Ag>c.max){continue}AY=(c.max-Ag)/(Af-Ag)*(AY-AZ)+AZ;Af=c.max}}if(AZ<=AY&&AZ<u.min){if(AY<u.min){continue}Ag=(u.min-AZ)/(AY-AZ)*(Af-Ag)+Ag;AZ=u.min}else{if(AY<=AZ&&AY<u.min){if(AZ<u.min){continue}Af=(u.min-AZ)/(AY-AZ)*(Af-Ag)+Ag;AY=u.min}}if(AZ>=AY&&AZ>u.max){if(AY>u.max){continue}Ag=(u.max-AZ)/(AY-AZ)*(Af-Ag)+Ag;AZ=u.max}else{if(AY>=AZ&&AY>u.max){if(AZ>u.max){continue}Af=(u.max-AZ)/(AY-AZ)*(Af-Ag)+Ag;AY=u.max}}if(Ab!=AE(AZ)||Aa!=j(Ag)+Ac){h.moveTo(AE(AZ),j(Ag)+Ac)}Ab=AE(AY);Aa=j(Af)+Ac;h.lineTo(Ab,Aa)}h.stroke()}function AW(Ac){if(Ac.length<2){return }var AY=Math.min(Math.max(0,c.min),c.max);var Ah,Aa=0;var Ae=true;h.beginPath();for(var Ad=0;Ad<Ac.length-1;++Ad){var Ab=Ac[Ad][0],Ai=Ac[Ad][1],AZ=Ac[Ad+1][0],Ag=Ac[Ad+1][1];if(Ab<=AZ&&Ab<u.min){if(AZ<u.min){continue}Ai=(u.min-Ab)/(AZ-Ab)*(Ag-Ai)+Ai;Ab=u.min}else{if(AZ<=Ab&&AZ<u.min){if(Ab<u.min){continue}Ag=(u.min-Ab)/(AZ-Ab)*(Ag-Ai)+Ai;AZ=u.min}}if(Ab>=AZ&&Ab>u.max){if(AZ>u.max){continue}Ai=(u.max-Ab)/(AZ-Ab)*(Ag-Ai)+Ai;Ab=u.max}else{if(AZ>=Ab&&AZ>u.max){if(Ab>u.max){continue}Ag=(u.max-Ab)/(AZ-Ab)*(Ag-Ai)+Ai;AZ=u.max}}if(Ae){h.moveTo(AE(Ab),j(AY));Ae=false}if(Ai>=c.max&&Ag>=c.max){h.lineTo(AE(Ab),j(c.max));h.lineTo(AE(AZ),j(c.max));continue}else{if(Ai<=c.min&&Ag<=c.min){h.lineTo(AE(Ab),j(c.min));h.lineTo(AE(AZ),j(c.min));continue}}var Aj=Ab,Af=AZ;if(Ai<=Ag&&Ai<c.min&&Ag>=c.min){Ab=(c.min-Ai)/(Ag-Ai)*(AZ-Ab)+Ab;Ai=c.min}else{if(Ag<=Ai&&Ag<c.min&&Ai>=c.min){AZ=(c.min-Ai)/(Ag-Ai)*(AZ-Ab)+Ab;Ag=c.min}}if(Ai>=Ag&&Ai>c.max&&Ag<=c.max){Ab=(c.max-Ai)/(Ag-Ai)*(AZ-Ab)+Ab;Ai=c.max}else{if(Ag>=Ai&&Ag>c.max&&Ai<=c.max){AZ=(c.max-Ai)/(Ag-Ai)*(AZ-Ab)+Ab;Ag=c.max}}if(Ab!=Aj){Ah=(Ai<=c.min)?Ah=c.min:c.max;h.lineTo(AE(Aj),j(Ah));h.lineTo(AE(Ab),j(Ah))}h.lineTo(AE(Ab),j(Ai));h.lineTo(AE(AZ),j(Ag));if(AZ!=Af){Ah=(Ag<=c.min)?c.min:c.max;h.lineTo(AE(Af),j(Ah));h.lineTo(AE(AZ),j(Ah))}Aa=Math.max(AZ,Af)}h.lineTo(AE(Aa),j(AY));h.closePath();h.fill()}h.save();h.translate(l.left,l.top);h.lineJoin="round";var AX=AV.lines.lineWidth;var AT=AV.shadowSize;if(AT>0){h.lineWidth=AT/2;h.strokeStyle="rgba(0,0,0,0.1)";AU(AV.data,AX/2+AT/2+h.lineWidth/2);h.lineWidth=AT/2;h.strokeStyle="rgba(0,0,0,0.2)";AU(AV.data,AX/2+h.lineWidth/2)}h.lineWidth=AX;h.strokeStyle=AV.color;if(AV.lines.fill){h.fillStyle=AV.lines.fillColor!=null?AV.lines.fillColor:K(AV.color).scale(null,null,null,0.4).toString();AW(AV.data,0)}AU(AV.data,0);h.restore()}function w(AU){function AX(Ab,AZ,Ac){for(var Aa=0;Aa<Ab.length;++Aa){var AY=Ab[Aa][0],Ad=Ab[Aa][1];if(AY<u.min||AY>u.max||Ad<c.min||Ad>c.max){continue}h.beginPath();h.arc(AE(AY),j(Ad),AZ,0,2*Math.PI,true);if(Ac){h.fill()}h.stroke()}}function AW(Ab,Ac,AZ){for(var Aa=0;Aa<Ab.length;++Aa){var AY=Ab[Aa][0],Ad=Ab[Aa][1];if(AY<u.min||AY>u.max||Ad<c.min||Ad>c.max){continue}h.beginPath();h.arc(AE(AY),j(Ad)+Ac,AZ,0,Math.PI,false);h.stroke()}}h.save();h.translate(l.left,l.top);var AV=AU.lines.lineWidth;var AT=AU.shadowSize;if(AT>0){h.lineWidth=AT/2;h.strokeStyle="rgba(0,0,0,0.1)";AW(AU.data,AT/2+h.lineWidth/2,AU.points.radius);h.lineWidth=AT/2;h.strokeStyle="rgba(0,0,0,0.2)";AW(AU.data,h.lineWidth/2,AU.points.radius)}h.lineWidth=AU.points.lineWidth;h.strokeStyle=AU.color;h.fillStyle=AU.points.fillColor!=null?AU.points.fillColor:AU.color;AX(AU.data,AU.points.radius,AU.points.fill);h.restore()}function v(AU){function AT(Ab,Ak,AZ,Aj){if(Ab.length<2){return }for(var Ac=0;Ac<Ab.length;Ac++){var Ag=Ab[Ac][0],Af=Ab[Ac][1];var Ai=true,Aa=true,Ad=true;var AY=Ag,Ah=Ag+Ak,AX=0,Ae=Af;if(Ah<u.min||AY>u.max||Ae<c.min||AX>c.max){continue}if(AY<u.min){AY=u.min;Ai=false}if(Ah>u.max){Ah=u.max;Ad=false}if(AX<c.min){AX=c.min}if(Ae>c.max){Ae=c.max;Aa=false}if(Aj){h.beginPath();h.moveTo(AE(AY),j(AX)+AZ);h.lineTo(AE(AY),j(Ae)+AZ);h.lineTo(AE(Ah),j(Ae)+AZ);h.lineTo(AE(Ah),j(AX)+AZ);h.fill()}if(Ai||Ad||Aa){h.beginPath();h.moveTo(AE(AY),j(AX)+AZ);if(Ai){h.lineTo(AE(AY),j(Ae)+AZ)}else{h.moveTo(AE(AY),j(Ae)+AZ)}if(Aa){h.lineTo(AE(Ah),j(Ae)+AZ)}else{h.moveTo(AE(Ah),j(Ae)+AZ)}if(Ad){h.lineTo(AE(Ah),j(AX)+AZ)}else{h.moveTo(AE(Ah),j(AX)+AZ)}h.stroke()}}}h.save();h.translate(l.left,l.top);h.lineJoin="round";var AW=AU.bars.barWidth;var AV=Math.min(AU.bars.lineWidth,AW);h.lineWidth=AV;h.strokeStyle=AU.color;if(AU.bars.fill){h.fillStyle=AU.bars.fillColor!=null?AU.bars.fillColor:K(AU.color).scale(null,null,null,0.4).toString()}AT(AU.data,AW,0,AU.bars.fill);h.restore()}function AQ(){if(!o.legend.show){return }var Aa=[];var AY=false;for(var AX=0;AX<R.length;++AX){if(!R[AX].label){continue}if(AX%o.legend.noColumns==0){Aa.push((AY)?"</tr><tr>":"<tr>");AY=true}var Ac=R[AX].label;if(o.legend.labelFormatter!=null){Ac=o.legend.labelFormatter(Ac)}Aa.push('<td class="flotr-legend-color-box"><div style="border:1px solid '+o.legend.labelBoxBorderColor+';padding:1px"><div style="width:14px;height:10px;background-color:'+R[AX].color+'"></div></div></td><td class="flotr-legend-label">'+Ac+"</td>")}if(AY){Aa.push("</tr>")}if(Aa.length>0){var Ad='<table style="font-size:smaller;color:'+o.grid.color+'">'+Aa.join("")+"</table>";if(o.legend.container!=null){o.legend.container.append(Ad)}else{var Ab="";var AU=o.legend.position,AV=o.legend.margin;if(AU.charAt(0)=="n"){Ab+="top:"+(AV+l.top)+"px;"}else{if(AU.charAt(0)=="s"){Ab+="bottom:"+(AV+l.bottom)+"px;"}}if(AU.charAt(1)=="e"){Ab+="right:"+(AV+l.right)+"px;"}else{if(AU.charAt(1)=="w"){Ab+="left:"+(AV+l.bottom)+"px;"}}var AT=N.insert('<div class="flotr-legend" style="position:absolute;z-index:2;'+Ab+'">'+Ad+"</div>").getElementsBySelector("div.flotr-legend").first();if(o.legend.backgroundOpacity!=0){var AZ=o.legend.backgroundColor;if(AZ==null){var AW=(o.grid.backgroundColor!=null)?o.grid.backgroundColor:A(AT);AZ=K(AW).adjust(null,null,null,1).toString()}N.insert('<div class="flotr-legend-bg" style="position:absolute;width:'+AT.getWidth()+"px;height:"+AT.getHeight()+"px;"+Ab+"background-color:"+AZ+';"> </div>').select("div.flotr-legend-bg").first().setStyle({opacity:o.legend.backgroundOpacity})}}}}var AG={pageX:null,pageY:null};var b={first:{x:-1,y:-1},second:{x:-1,y:-1}};var T=null;var x=null;var t=false;var Q=null;function f(AT){if(t){t=false;return }var AU=AL.cumulativeOffset();N.fire("flotr:click",[{x:u.min+(AT.pageX-AU.left-l.left)/AC,y:c.max-(AT.pageY-AU.top-l.top)/AB}])}function e(AU){if(AU.pageX==null&&AU.clientX!=null){var AX=document.documentElement,AT=document.body;AG.pageX=AU.clientX+(AX&&AX.scrollLeft||AT.scrollLeft||0);AG.pageY=AU.clientY+(AX&&AX.scrollTop||AT.scrollTop||0)}else{AG.pageX=AU.pageX;AG.pageY=AU.pageY}var AV=AL.cumulativeOffset();var AW={x:u.min+(AU.pageX-AV.left-l.left)/AC,y:c.max-(AU.pageY-AV.top-l.top)/AB};if(o.mouse.track&&x==null){n(AW)}N.fire("flotr:mousemove",[AU,AW])}function r(AT){if(!AT.isLeftClick()){return }AM(b.first,AT);if(x!=null){clearInterval(x)}AG.pageX=null;x=setInterval(AJ,1000/o.selection.fps);$(document).observe("mouseup",O)}function a(){var AU=(b.first.x<=b.second.x)?b.first.x:b.second.x;var AT=(b.first.x<=b.second.x)?b.second.x:b.first.x;var AW=(b.first.y>=b.second.y)?b.first.y:b.second.y;var AV=(b.first.y>=b.second.y)?b.second.y:b.first.y;AU=u.min+AU/AC;AT=u.min+AT/AC;AW=c.max-AW/AB;AV=c.max-AV/AB;N.fire("flotr:select",[{x1:AU,y1:AW,x2:AT,y2:AV}])}function O(AT){$(document).stopObserving("mouseup",O);if(x!=null){clearInterval(x);x=null}AM(b.second,AT);M();if(W()||AT.isLeftClick()){X();a();t=true}Event.stop(AT)}function AM(AV,AT){var AU=$(AL).cumulativeOffset();if(o.selection.mode=="y"){AV.x=(AV==b.first)?0:P}else{AV.x=AT.pageX-AU.left-l.left;AV.x=Math.min(Math.max(0,AV.x),P)}if(o.selection.mode=="x"){AV.y=(AV==b.first)?0:AD}else{AV.y=AT.pageY-AU.top-l.top;AV.y=Math.min(Math.max(0,AV.y),AD)}}function AJ(){if(AG.pageX==null){return }AM(b.second,AG);M();if(W()){X()}}function M(){if(T==null){return }var AT=Math.min(T.first.x,T.second.x),AW=Math.min(T.first.y,T.second.y),AU=Math.abs(T.second.x-T.first.x),AV=Math.abs(T.second.y-T.first.y);AS.clearRect(AT+l.left-AS.lineWidth,AW+l.top-AS.lineWidth,AU+AS.lineWidth*2,AV+AS.lineWidth*2);T=null}function AF(AT){M();b.first.y=(o.selection.mode=="x")?0:(c.max-AT.y1)*AB;b.second.y=(o.selection.mode=="x")?AD:(c.max-AT.y2)*AB;b.first.x=(o.selection.mode=="y")?0:(AT.x1-u.min)*AC;b.second.x=(o.selection.mode=="y")?P:(AT.x2-u.min)*AC;X();a()}function X(){if(T!=null&&b.first.x==T.first.x&&b.first.y==T.first.y&&b.second.x==T.second.x&&b.second.y==T.second.y){return }AS.strokeStyle=K(o.selection.color).scale(null,null,null,0.8).toString();AS.lineWidth=1;h.lineJoin="round";AS.fillStyle=K(o.selection.color).scale(null,null,null,0.4).toString();T={first:{x:b.first.x,y:b.first.y},second:{x:b.second.x,y:b.second.y}};var AT=Math.min(b.first.x,b.second.x),AW=Math.min(b.first.y,b.second.y),AU=Math.abs(b.second.x-b.first.x),AV=Math.abs(b.second.y-b.first.y);AS.fillRect(AT+l.left,AW+l.top,AU,AV);AS.strokeRect(AT+l.left,AW+l.top,AU,AV)}function W(){var AT=5;return Math.abs(b.second.x-b.first.x)>=AT&&Math.abs(b.second.y-b.first.y)>=AT}function s(){if(Q){AS.clearRect(AE(Q.x)+l.left-o.points.radius*2,j(Q.y)+l.top-o.points.radius*2,o.points.radius*3+o.points.lineWidth*3,o.points.radius*3+o.points.lineWidth*3);Q=null}}function n(Ae){var AX={dist:Number.MAX_VALUE,x:null,y:null,mouse:null};for(var Ad=0,Ac,AZ,AV;Ad<R.length;Ad++){if(!R[Ad].mouse.track){continue}Ac=R[Ad].data;AZ=(AC*R[Ad].mouse.sensibility);AV=(AB*R[Ad].mouse.sensibility);for(var Aa=0,Af,Ab;Aa<Ac.length;Aa++){Af=AC*Math.abs(Ac[Aa][0]-Ae.x);Ab=AB*Math.abs(Ac[Aa][1]-Ae.y);if(Af<AZ&&Ab<AV&&(Af+Ab)<AX.dist){AX.dist=(Af+Ab);AX.x=Ac[Aa][0];AX.y=Ac[Aa][1];AX.mouse=R[Ad].mouse}}}if(AX.mouse&&AX.mouse.track&&!Q||(Q&&AX.x!=Q.x&&AX.y!=Q.y)){var AU=N.select(".flotr-mouse-value").first();if(!AU){var Ag="",AT=o.mouse.position,AY=o.mouse.margin;if(AT.charAt(0)=="n"){Ag+="top:"+(AY+l.top)+"px;"}else{if(AT.charAt(0)=="s"){Ag+="bottom:"+(AY+l.bottom)+"px;"}}if(AT.charAt(1)=="e"){Ag+="right:"+(AY+l.right)+"px;"}else{if(AT.charAt(1)=="w"){Ag+="left:"+(AY+l.bottom)+"px;"}}N.insert('<div class="flotr-mouse-value" style="opacity:0.7;background-color:#000;color:#fff;display:none;position:absolute;'+Ag+'"></div>');return }if(AX.x!==null&&AX.y!==null){AU.setStyle({display:"block"});s();if(AX.mouse.lineColor!=null){AS.save();AS.translate(l.left,l.top);AS.lineWidth=o.points.lineWidth;AS.strokeStyle=AX.mouse.lineColor;AS.fillStyle="#ffffff";AS.beginPath();AS.arc(AE(AX.x),j(AX.y),o.points.radius,0,2*Math.PI,true);AS.fill();AS.stroke();AS.restore()}Q=AX;var AW=AX.mouse.trackDecimals;if(AW==null||AW<0){AW=0}AU.innerHTML=AX.mouse.trackFormatter({x:AX.x.toFixed(AW),y:AX.y.toFixed(AW)});N.fire("flotr:hit",[AX])}else{if(Q){AU.setStyle({display:"none"});s()}}}}}return{clean:function(M){M.innerHTML=""},draw:function(P,N,M){var O=new J(P,N,M);return O}}})(); \ No newline at end of file diff --git a/tools/qtestlib/chart/3rdparty/prototype.js b/tools/qtestlib/chart/3rdparty/prototype.js deleted file mode 100644 index e580ae5..0000000 --- a/tools/qtestlib/chart/3rdparty/prototype.js +++ /dev/null @@ -1,8 +0,0 @@ -/* Prototype JavaScript framework, version 1.6.0.2 - * (c) 2005-2008 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://www.prototypejs.org/ - * - *--------------------------------------------------------------------------*/ -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('G 1g={9D:\'1.6.0.2\',1W:{3X:!!(1A.7b&&!1A.9e),58:!!1A.9e,4u:5e.5d.47(\'hE/\')>-1,7H:5e.5d.47(\'7H\')>-1&&5e.5d.47(\'ch\')==-1,d5:!!5e.5d.1f(/hD.*hC.*ci/)},3U:{72:!!1b.2S,6H:!!1A.6G,7x:1b.43(\'1T\').4U&&1b.43(\'1T\').4U!==1b.43(\'1x\').4U},84:\'<4S[^>]*>([\\\\S\\\\s]*?)<\\/4S>\',cM:/^\\/\\*-hB-([\\s\\S]*)\\*\\/\\s*$/,3q:q(){},K:q(x){o x}};E(1g.1W.d5)1g.3U.7x=1r;G 2b={2p:q(){G 2T=1k,3k=$A(1p);E(M.2w(3k[0]))2T=3k.5i();q 1N(){C.2I.3R(C,1p)}M.15(1N,2b.1d);1N.9Z=2T;1N.d4=[];E(2T){G a0=q(){};a0.1l=2T.1l;1N.1l=1s a0;2T.d4.1h(1N)}17(G i=0;i<3k.O;i++)1N.6a(3k[i]);E(!1N.1l.2I)1N.1l.2I=1g.3q;1N.1l.hA=1N;o 1N}};2b.1d={6a:q(22){G 3b=C.9Z&&C.9Z.1l;G 3k=M.4b(22);E(!M.4b({2H:1u}).O)3k.1h("2H","d3");17(G i=0,O=3k.O;i<O;i++){G 1y=3k[i],I=22[1y];E(3b&&M.2w(I)&&I.d1().3K()=="$4d"){G 1F=I,I=M.15((q(m){o q(){o 3b[m].3R(C,1p)}})(1y).5g(1F),{d3:q(){o 1F},2H:q(){o 1F.2H()}})}C.1l[1y]=I}o C}};G 4Y={};M.15=q(5L,22){17(G 1y 1Q 22)5L[1y]=22[1y];o 5L};M.15(M,{2C:q(Y){2s{E(M.2D(Y))o\'4z\';E(Y===1k)o\'1k\';o Y.2C?Y.2C():24(Y)}2E(e){E(e d2 hz)o\'...\';4q e}},3D:q(Y){G 1B=3Z Y;5y(1B){2r\'4z\':2r\'q\':2r\'hy\':o;2r\'hx\':o Y.2H()}E(Y===1k)o\'1k\';E(Y.3D)o Y.3D();E(M.4j(Y))o;G V=[];17(G 1y 1Q Y){G I=M.3D(Y[1y]);E(!M.2D(I))V.1h(1y.3D()+\': \'+I)}o\'{\'+V.2o(\', \')+\'}\'},4r:q(Y){o $H(Y).4r()},4i:q(Y){o Y&&Y.4i?Y.4i():24.62(Y)},4b:q(Y){G 4b=[];17(G 1y 1Q Y)4b.1h(1y);o 4b},1S:q(Y){G 1S=[];17(G 1y 1Q Y)1S.1h(Y[1y]);o 1S},2A:q(Y){o M.15({},Y)},4j:q(Y){o Y&&Y.3r==1},4x:q(Y){o Y!=1k&&3Z Y=="Y"&&\'hw\'1Q Y&&\'2o\'1Q Y},9G:q(Y){o Y d2 3V},2w:q(Y){o 3Z Y=="q"},3f:q(Y){o 3Z Y=="3h"},53:q(Y){o 3Z Y=="4M"},2D:q(Y){o 3Z Y=="4z"}});M.15(9X.1l,{d1:q(){G 3A=C.2H().1f(/^[\\s\\(]*q[^(]*\\((.*?)\\)/)[1].49(",").7k("3T");o 3A.O==1&&!3A[0]?[]:3A},1L:q(){E(1p.O<2&&M.2D(1p[0]))o C;G 3n=C,21=$A(1p),Y=21.5i();o q(){o 3n.3R(Y,21.20($A(1p)))}},hv:q(){G 3n=C,21=$A(1p),Y=21.5i();o q(1c){o 3n.3R(Y,[1c||1A.1c].20(21))}},7T:q(){E(!1p.O)o C;G 3n=C,21=$A(1p);o q(){o 3n.3R(C,21.20($A(1p)))}},9l:q(){G 3n=C,21=$A(1p),d0=21.5i()*cY;o 1A.hu(q(){o 3n.3R(3n,21)},d0)},5g:q(1K){G 3n=C;o q(){o 1K.3R(C,[3n.1L(C)].20($A(1p)))}},4v:q(){E(C.9Y)o C.9Y;G 3n=C;o C.9Y=q(){o 3n.3R(1k,[C].20($A(1p)))}}});9X.1l.4s=9X.1l.9l.7T(0.ht);hs.1l.3D=q(){o\'"\'+C.hr()+\'-\'+(C.hq()+1).4L(2)+\'-\'+C.hp().4L(2)+\'T\'+C.ho().4L(2)+\':\'+C.hn().4L(2)+\':\'+C.hm().4L(2)+\'Z"\'};G cp={co:q(){G 7d;17(G i=0,O=1p.O;i<O;i++){G cZ=1p[i];2s{7d=cZ();2d}2E(e){}}o 7d}};4k.1l.1f=4k.1l.2L;4k.c3=q(68){o 24(68).1Y(/([.*+?^=!:${}()|[\\]\\/\\\\])/g,\'\\\\$1\')};G aB=2b.2p({2I:q(2X,4c){C.2X=2X;C.4c=4c;C.85=1r;C.6s()},6s:q(){C.3W=ae(C.6N.1L(C),C.4c*cY)},8t:q(){C.2X(C)},8p:q(){E(!C.3W)o;af(C.3W);C.3W=1k},6N:q(){E(!C.85){2s{C.85=1u;C.8t()}hl{C.85=1r}}}});M.15(24,{62:q(I){o I==1k?\'\':24(I)},cQ:{\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'\\\\\':\'\\\\\\\\\'}});M.15(24.1l,{3m:q(28,3F){G 1q=\'\',22=C,1f;3F=1p.5v.9S(3F);1P(22.O>0){E(1f=22.1f(28)){1q+=22.3B(0,1f.1i);1q+=24.62(3F(1f));22=22.3B(1f.1i+1f[0].O)}1m{1q+=22,22=\'\'}}o 1q},cN:q(28,3F,3x){3F=C.3m.9S(3F);3x=M.2D(3x)?1:3x;o C.3m(28,q(1f){E(--3x<0)o 1f[0];o 3F(1f)})},aN:q(28,W){C.3m(28,W);o 24(C)},hk:q(O,69){O=O||30;69=M.2D(69)?\'...\':69;o C.O>O?C.3B(0,O-69.O)+69:24(C)},3T:q(){o C.1Y(/^\\s+/,\'\').1Y(/\\s+$/,\'\')},cS:q(){o C.1Y(/<\\/?[^>]+>/gi,\'\')},4h:q(){o C.1Y(1s 4k(1g.84,\'cX\'),\'\')},cT:q(){G cW=1s 4k(1g.84,\'cX\');G cU=1s 4k(1g.84,\'hj\');o(C.1f(cW)||[]).2M(q(cV){o(cV.1f(cU)||[\'\',\'\'])[1]})},59:q(){o C.cT().2M(q(4S){o 7u(4S)})},82:q(){G 5J=1p.5v;5J.3Y.7n=C;o 5J.1T.4C},cJ:q(){G 1T=1s J(\'1T\');1T.4C=C.cS();o 1T.3g[0]?(1T.3g.O>1?$A(1T.3g).3H(\'\',q(2O,L){o 2O+L.4f}):1T.3g[0].4f):\'\'},7g:q(cR){G 1f=C.3T().1f(/([^?#]*)(#.*)?$/);E(!1f)o{};o 1f[1].49(cR||\'&\').3H({},q(3w,1H){E((1H=1H.49(\'=\'))[0]){G 1w=9p(1H.5i());G I=1H.O>1?1H.2o(\'=\'):1H[0];E(I!=4z)I=9p(I);E(1w 1Q 3w){E(!M.4x(3w[1w]))3w[1w]=[3w[1w]];3w[1w].1h(I)}1m 3w[1w]=I}o 3w})},3E:q(){o C.49(\'\')},9I:q(){o C.3B(0,C.O-1)+24.hi(C.cP(C.O-1)+1)},7E:q(3x){o 3x<1?\'\':1s 2m(3x+1).2o(C)},95:q(){G 4N=C.49(\'-\'),9W=4N.O;E(9W==1)o 4N[0];G 9V=C.83(0)==\'-\'?4N[0].83(0).2R()+4N[0].5H(1):4N[0];17(G i=1;i<9W;i++)9V+=4N[i].83(0).2R()+4N[i].5H(1);o 9V},6F:q(){o C.83(0).2R()+C.5H(1).2e()},hh:q(){o C.3m(/::/,\'/\').3m(/([A-Z]+)([A-Z][a-z])/,\'#{1}6T#{2}\').3m(/([a-z\\d])([A-Z])/,\'#{1}6T#{2}\').3m(/-/,\'6T\').2e()},hg:q(){o C.3m(/6T/,\'-\')},2C:q(cO){G 9T=C.3m(/[\\hf-\\he\\\\]/,q(1f){G 9U=24.cQ[1f[0]];o 9U?9U:\'\\\\hd\'+1f[0].cP().4L(2,16)});E(cO)o\'"\'+9T.1Y(/"/g,\'\\\\"\')+\'"\';o"\'"+9T.1Y(/\'/g,\'\\\\\\\'\')+"\'"},3D:q(){o C.2C(1u)},9w:q(2h){o C.cN(2h||1g.cM,\'#{1}\')},cK:q(){G 68=C;E(68.4O())o 1r;68=C.1Y(/\\\\./g,\'@\').1Y(/"[^"\\\\\\n\\r]*"/g,\'\');o(/^[,:{}\\[\\]0-9.\\-+hc-u \\n\\r\\t]*$/).2L(68)},60:q(cL){G 3l=C.9w();2s{E(!cL||3l.cK())o 7u(\'(\'+3l+\')\')}2E(e){}4q 1s hb(\'ha h9 c4 3h: \'+C.2C())},1J:q(28){o C.47(28)>-1},8F:q(28){o C.47(28)===0},aO:q(28){G d=C.O-28.O;o d>=0&&C.9L(28)===d},5E:q(){o C==\'\'},4O:q(){o/^\\s*$/.2L(C)},cb:q(Y,28){o 1s 32(C,28).2S(Y)}});E(1g.1W.4u||1g.1W.3X)M.15(24.1l,{82:q(){o C.1Y(/&/g,\'&cI;\').1Y(/</g,\'&cH;\').1Y(/>/g,\'>\')},cJ:q(){o C.1Y(/&cI;/g,\'&\').1Y(/&cH;/g,\'<\').1Y(/>/g,\'>\')}});24.1l.3m.9S=q(3F){E(M.2w(3F))o 3F;G 67=1s 32(3F);o q(1f){o 67.2S(1f)}};24.1l.h8=24.1l.7g;M.15(24.1l.82,{1T:1b.43(\'1T\'),3Y:1b.bm(\'\')});b0(24.1l.82)1T.5O(3Y);G 32=2b.2p({2I:q(67,28){C.67=67.2H();C.28=28||32.cE},2S:q(Y){E(M.2w(Y.9J))Y=Y.9J();o C.67.3m(C.28,q(1f){E(Y==1k)o\'\';G 4R=1f[1]||\'\';E(4R==\'\\\\\')o 1f[2];G 6X=Y,6Y=1f[3];G 28=/^([^.[]+|\\[((?:.*?[^\\\\])?)\\])(\\.|\\[|$)/;1f=28.cF(6Y);E(1f==1k)o 4R;1P(1f!=1k){G cG=1f[1].8F(\'[\')?1f[2].3m(\'\\\\\\\\]\',\']\'):1f[1];6X=6X[cG];E(1k==6X||\'\'==1f[3])2d;6Y=6Y.5H(\'[\'==1f[3]?1f[1].O:1f[0].O);1f=28.cF(6Y)}o 4R+24.62(6X)})}});32.cE=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;G $2d={};G 2G={1E:q(W,1M){G 1i=0;W=W.1L(1M);2s{C.48(q(I){W(I,1i++)})}2E(e){E(e!=$2d)4q e}o C},cD:q(4M,W,1M){W=W?W.1L(1M):1g.K;G 1i=-4M,9R=[],2F=C.3E();1P((1i+=4M)<2F.O)9R.1h(2F.3B(1i,1i+4M));o 9R.9N(W,1M)},88:q(W,1M){W=W?W.1L(1M):1g.K;G 1q=1u;C.1E(q(I,1i){1q=1q&&!!W(I,1i);E(!1q)4q $2d});o 1q},cB:q(W,1M){W=W?W.1L(1M):1g.K;G 1q=1r;C.1E(q(I,1i){E(1q=!!W(I,1i))4q $2d});o 1q},9N:q(W,1M){W=W?W.1L(1M):1g.K;G V=[];C.1E(q(I,1i){V.1h(W(I,1i))});o V},81:q(W,1M){W=W.1L(1M);G 1q;C.1E(q(I,1i){E(W(I,1i)){1q=I;4q $2d}});o 1q},5C:q(W,1M){W=W.1L(1M);G V=[];C.1E(q(I,1i){E(W(I,1i))V.1h(I)});o V},h7:q(2h,W,1M){W=W?W.1L(1M):1g.K;G V=[];E(M.3f(2h))2h=1s 4k(2h);C.1E(q(I,1i){E(2h.1f(I))V.1h(W(I,1i))});o V},1J:q(Y){E(M.2w(C.47))E(C.47(Y)!=-1)o 1u;G 9Q=1r;C.1E(q(I){E(I==Y){9Q=1u;4q $2d}});o 9Q},h6:q(4M,6W){6W=M.2D(6W)?1k:6W;o C.cD(4M,q(3B){1P(3B.O<4M)3B.1h(6W);o 3B})},3H:q(2O,W,1M){W=W.1L(1M);C.1E(q(I,1i){2O=W(2O,I,1i)});o 2O},7k:q(1F){G 21=$A(1p).3B(1);o C.2M(q(I){o I[1F].3R(I,21)})},h5:q(W,1M){W=W?W.1L(1M):1g.K;G 1q;C.1E(q(I,1i){I=W(I,1i);E(1q==1k||I>=1q)1q=I});o 1q},h4:q(W,1M){W=W?W.1L(1M):1g.K;G 1q;C.1E(q(I,1i){I=W(I,1i);E(1q==1k||I<1q)1q=I});o 1q},h3:q(W,1M){W=W?W.1L(1M):1g.K;G 9P=[],9O=[];C.1E(q(I,1i){(W(I,1i)?9P:9O).1h(I)});o[9P,9O]},5u:q(1y){G V=[];C.1E(q(I){V.1h(I[1y])});o V},h2:q(W,1M){W=W.1L(1M);G V=[];C.1E(q(I,1i){E(!W(I,1i))V.1h(I)});o V},aK:q(W,1M){W=W.1L(1M);o C.2M(q(I,1i){o{I:I,6D:W(I,1i)}}).h1(q(2x,5U){G a=2x.6D,b=5U.6D;o a<b?-1:a>b?1:0}).5u(\'I\')},3E:q(){o C.2M()},h0:q(){G W=1g.K,21=$A(1p);E(M.2w(21.2u()))W=21.gZ();G cC=[C].20(21).2M($A);o C.2M(q(I,1i){o W(cC.5u(1i))})},cw:q(){o C.3E().O},2C:q(){o\'#<2G:\'+C.3E().2C()+\'>\'}};M.15(2G,{2M:2G.9N,8l:2G.81,2z:2G.5C,2h:2G.5C,gY:2G.1J,gX:2G.3E,gW:2G.88,gV:2G.cB});q $A(3d){E(!3d)o[];E(3d.3E)o 3d.3E();G O=3d.O||0,V=1s 2m(O);1P(O--)V[O]=3d[O];o V}E(1g.1W.4u){$A=q(3d){E(!3d)o[];E(!(M.2w(3d)&&3d==\'[Y gU]\')&&3d.3E)o 3d.3E();G O=3d.O||0,V=1s 2m(O);1P(O--)V[O]=3d[O];o V}}2m.cr=$A;M.15(2m.1l,2G);E(!2m.1l.9M)2m.1l.9M=2m.1l.4e;M.15(2m.1l,{48:q(W){17(G i=0,O=C.O;i<O;i++)W(C[i])},aH:q(){C.O=0;o C},3K:q(){o C[0]},2u:q(){o C[C.O-1]},gT:q(){o C.2z(q(I){o I!=1k})},cA:q(){o C.3H([],q(2F,I){o 2F.20(M.4x(I)?I.cA():[I])})},6b:q(){G 1S=$A(1p);o C.2z(q(I){o!1S.1J(I)})},4e:q(cz){o(cz!==1r?C:C.3E()).9M()},gS:q(){o C.O>1?C:C[0]},cx:q(cy){o C.3H([],q(2F,I,1i){E(0==1i||(cy?2F.2u()!=I:!2F.1J(I)))2F.1h(I);o 2F})},gR:q(2F){o C.cx().5C(q(66){o 2F.81(q(I){o 66===I})})},2A:q(){o[].20(C)},cw:q(){o C.O},2C:q(){o\'[\'+C.2M(M.2C).2o(\', \')+\']\'},3D:q(){G V=[];C.1E(q(Y){G I=M.3D(Y);E(!M.2D(I))V.1h(I)});o\'[\'+V.2o(\', \')+\']\'}});E(M.2w(2m.1l.cv))2m.1l.48=2m.1l.cv;E(!2m.1l.47)2m.1l.47=q(66,i){i||(i=0);G O=C.O;E(i<0)i=O+i;17(;i<O;i++)E(C[i]===66)o i;o-1};E(!2m.1l.9L)2m.1l.9L=q(66,i){i=gQ(i)?C.O:(i<0?C.O+i:i)+1;G n=C.3B(0,i).4e().47(66);o(n<0)?n:i-n-1};2m.1l.3E=2m.1l.2A;q $w(3h){E(!M.3f(3h))o[];3h=3h.3T();o 3h?3h.49(/\\s+/):[]}E(1g.1W.58){2m.1l.20=q(){G 2F=[];17(G i=0,O=C.O;i<O;i++)2F.1h(C[i]);17(G i=0,O=1p.O;i<O;i++){E(M.4x(1p[i])){17(G j=0,cu=1p[i].O;j<cu;j++)2F.1h(1p[i][j])}1m{2F.1h(1p[i])}}o 2F}}M.15(54.1l,{gP:q(){o C.4L(2,16)},9I:q(){o C+1},7E:q(W){$R(0,C,1u).1E(W);o C},4L:q(O,ct){G 3h=C.2H(ct||10);o\'0\'.7E(O-3h.O)+3h},3D:q(){o gO(C)?C.2H():\'1k\'}});$w(\'gN gM gL gK\').1E(q(1F){54.1l[1F]=gJ[1F].4v()});q $H(Y){o 1s 3V(Y)};G 3V=2b.2p(2G,(q(){q 9K(1w,I){E(M.2D(I))o 1w;o 1w+\'=\'+cs(24.62(I))}o{2I:q(Y){C.4K=M.9G(Y)?Y.6U():M.2A(Y)},48:q(W){17(G 1w 1Q C.4K){G I=C.4K[1w],1H=[1w,I];1H.1w=1w;1H.I=I;W(1H)}},6c:q(1w,I){o C.4K[1w]=I},9F:q(1w){o C.4K[1w]},gI:q(1w){G I=C.4K[1w];8R C.4K[1w];o I},6U:q(){o M.2A(C.4K)},4b:q(){o C.5u(\'1w\')},1S:q(){o C.5u(\'I\')},1i:q(I){G 1f=C.81(q(1H){o 1H.I===I});o 1f&&1f.1w},gH:q(Y){o C.2A().5a(Y)},5a:q(Y){o 1s 3V(Y).3H(C,q(1q,1H){1q.6c(1H.1w,1H.I);o 1q})},4r:q(){o C.2M(q(1H){G 1w=cs(1H.1w),1S=1H.I;E(1S&&3Z 1S==\'Y\'){E(M.4x(1S))o 1S.2M(9K.7T(1w)).2o(\'&\')}o 9K(1w,1S)}).2o(\'&\')},2C:q(){o\'#<3V:{\'+C.2M(q(1H){o 1H.2M(M.2C).2o(\': \')}).2o(\', \')+\'}>\'},3D:q(){o M.3D(C.6U())},2A:q(){o 1s 3V(C)}}})());3V.1l.9J=3V.1l.6U;3V.cr=$H;G cq=2b.2p(2G,{2I:q(4l,5o,65){C.4l=4l;C.5o=5o;C.65=65},48:q(W){G I=C.4l;1P(C.1J(I)){W(I);I=I.9I()}},1J:q(I){E(I<C.4l)o 1r;E(C.65)o I<C.5o;o I<=C.5o}});G $R=q(4l,5o,65){o 1s cq(4l,5o,65)};G 1R={cj:q(){o cp.co(q(){o 1s cf()},q(){o 1s cm(\'gG.cl\')},q(){o 1s cm(\'gF.cl\')})||1r},9H:0};1R.63={6V:[],48:q(W){C.6V.48(W)},ck:q(4m){E(!C.1J(4m))C.6V.1h(4m)},gE:q(4m){C.6V=C.6V.6b(4m)},7X:q(2X,2Q,1Z,3l){C.1E(q(4m){E(M.2w(4m[2X])){2s{4m[2X].3R(4m,[2Q,1Z,3l])}2E(e){}}})}};M.15(1R.63,2G);1R.63.ck({80:q(){1R.9H++},3S:q(){1R.9H--}});1R.9m=2b.2p({2I:q(U){C.U={1F:\'6S\',7Z:1u,6R:\'7V/x-gD-1x-gC\',9C:\'gB-8\',3v:\'\',60:1u,9z:1u};M.15(C.U,U||{});C.U.1F=C.U.1F.2e();E(M.3f(C.U.3v))C.U.3v=C.U.3v.7g();1m E(M.9G(C.U.3v))C.U.3v=C.U.3v.6U()}});1R.50=2b.2p(1R.9m,{9A:1r,2I:q($4d,2U,U){$4d(U);C.1Z=1R.cj();C.2Q(2U)},2Q:q(2U){C.2U=2U;C.1F=C.U.1F;G 2Y=M.2A(C.U.3v);E(![\'9F\',\'6S\'].1J(C.1F)){2Y[\'gA\']=C.1F;C.1F=\'6S\'}C.3v=2Y;E(2Y=M.4r(2Y)){E(C.1F==\'9F\')C.2U+=(C.2U.1J(\'?\')?\'&\':\'?\')+2Y;1m E(/gz|ci|ch/.2L(5e.5d))2Y+=\'&6T=\'}2s{G 2y=1s 1R.9t(C);E(C.U.80)C.U.80(2y);1R.63.7X(\'80\',C,2y);C.1Z.gy(C.1F.2R(),C.2U,C.U.7Z);E(C.U.7Z)C.9B.1L(C).4s(1);C.1Z.77=C.9E.1L(C);C.cg();C.2q=C.1F==\'6S\'?(C.U.gx||2Y):1k;C.1Z.gw(C.2q);E(!C.U.7Z&&C.1Z.ce)C.9E()}2E(e){C.5m(e)}},9E:q(){G 2N=C.1Z.2N;E(2N>1&&!((2N==4)&&C.9A))C.9B(C.1Z.2N)},cg:q(){G 5n={\'X-gv-gu\':\'cf\',\'X-1g-9D\':1g.9D,\'gs\':\'3Y/gr, 3Y/7D, 7V/6P, 3Y/6P, */*\'};E(C.1F==\'6S\'){5n[\'9o-1B\']=C.U.6R+(C.U.9C?\'; gq=\'+C.U.9C:\'\');E(C.1Z.ce&&(5e.5d.1f(/7H\\/(\\d{4})/)||[0,cd])[1]<cd)5n[\'gp\']=\'go\'}E(3Z C.U.cc==\'Y\'){G 64=C.U.cc;E(M.2w(64.1h))17(G i=0,O=64.O;i<O;i+=2)5n[64[i]]=64[i+1];1m $H(64).1E(q(1H){5n[1H.1w]=1H.I})}17(G 1e 1Q 5n)C.1Z.gn(1e,5n[1e])},5l:q(){G 4J=C.6O();o!4J||(4J>=gm&&4J<gl)},6O:q(){2s{o C.1Z.4J||0}2E(e){o 0}},9B:q(2N){G 6Q=1R.50.c8[2N],2y=1s 1R.9t(C);E(6Q==\'9u\'){2s{C.9A=1u;(C.U[\'5t\'+2y.4J]||C.U[\'5t\'+(C.5l()?\'gk\':\'gj\')]||1g.3q)(2y,2y.7W)}2E(e){C.5m(e)}G 6R=2y.61(\'9o-1B\');E(C.U.9z==\'c1\'||(C.U.9z&&C.7U()&&6R&&6R.1f(/^\\s*(3Y|7V)\\/(x-)?(gh|gg)4S(;.*)?\\s*$/i)))C.ca()}2s{(C.U[\'5t\'+6Q]||1g.3q)(2y,2y.7W);1R.63.7X(\'5t\'+6Q,C,2y,2y.7W)}2E(e){C.5m(e)}E(6Q==\'9u\'){C.1Z.77=1g.3q}},7U:q(){G m=C.2U.1f(/^\\s*gf?:\\/\\/[^\\/]*/);o!m||(m[0]==\'#{9y}//#{9x}#{7Y}\'.cb({9y:7h.9y,9x:1b.9x,7Y:7h.7Y?\':\'+7h.7Y:\'\'}))},61:q(1e){2s{o C.1Z.9r(1e)||1k}2E(e){o 1k}},ca:q(){2s{o 7u((C.1Z.3c||\'\').9w())}2E(e){C.5m(e)}},5m:q(9v){(C.U.c9||1g.3q)(C,9v);1R.63.7X(\'c9\',C,9v)}});1R.50.c8=[\'ge\',\'gd\',\'gc\',\'gb\',\'9u\'];1R.9t=2b.2p({2I:q(2Q){C.2Q=2Q;G 1Z=C.1Z=2Q.1Z,2N=C.2N=1Z.2N;E((2N>2&&!1g.1W.3X)||2N==4){C.4J=C.6O();C.9s=C.c6();C.3c=24.62(1Z.3c);C.7W=C.c5()}E(2N==4){G 6P=1Z.c7;C.c7=M.2D(6P)?1k:6P;C.ga=C.c2()}},4J:0,9s:\'\',6O:1R.50.1l.6O,c6:q(){2s{o C.1Z.9s||\'\'}2E(e){o\'\'}},61:1R.50.1l.61,g9:q(){2s{o C.9q()}2E(e){o 1k}},9r:q(1e){o C.1Z.9r(1e)},9q:q(){o C.1Z.9q()},c5:q(){G 3l=C.61(\'X-c4\');E(!3l)o 1k;3l=9p(c3(3l));2s{o 3l.60(C.2Q.U.c0||!C.2Q.7U())}2E(e){C.2Q.5m(e)}},c2:q(){G U=C.2Q.U;E(!U.60||(U.60!=\'c1\'&&!(C.61(\'9o-1B\')||\'\').1J(\'7V/3l\'))||C.3c.4O())o 1k;2s{o C.3c.60(U.c0||!C.2Q.7U())}2E(e){C.2Q.5m(e)}}});1R.bW=2b.2p(1R.50,{2I:q($4d,3C,2U,U){C.3C={5l:(3C.5l||3C),9n:(3C.9n||(3C.5l?1k:3C))};U=M.2A(U);G 3S=U.3S;U.3S=(q(2y,3l){C.bZ(2y.3c);E(M.2w(3S))3S(2y,3l)}).1L(C);$4d(2U,U)},bZ:q(3c){G 5Z=C.3C[C.5l()?\'5l\':\'9n\'],U=C.U;E(!U.59)3c=3c.4h();E(5Z=$(5Z)){E(U.5k){E(M.3f(U.5k)){G 5k={};5k[U.5k]=3c;5Z.3o(5k)}1m U.5k(5Z,3c)}1m 5Z.5a(3c)}}});1R.g8=2b.2p(1R.9m,{2I:q($4d,3C,2U,U){$4d(U);C.3S=C.U.3S;C.4c=(C.U.4c||2);C.5j=(C.U.5j||1);C.9k={};C.3C=3C;C.2U=2U;C.4l()},4l:q(){C.U.3S=C.bY.1L(C);C.6N()},8p:q(){C.9k.U.3S=4z;g7(C.3W);(C.3S||1g.3q).3R(C,1p)},bY:q(2y){E(C.U.5j){C.5j=(2y.3c==C.bX?C.5j*C.U.5j:1);C.bX=2y.3c}C.3W=C.6N.1L(C).9l(C.5j*C.4c)},6N:q(){C.9k=1s 1R.bW(C.3C,C.2U,C.U)}});q $(k){E(1p.O>1){17(G i=0,1V=[],O=1p.O;i<O;i++)1V.1h($(1p[i]));o 1V}E(M.3f(k))k=1b.g6(k);o J.15(k)}E(1g.3U.72){1b.8a=q(1t,71){G V=[];G 9j=1b.2S(1t,$(71)||1b,1k,g5.g4,1k);17(G i=0,O=9j.g3;i<O;i++)V.1h(J.15(9j.g2(i)));o V}}E(!1A.6o)G 6o={};E(!6o.bV){M.15(6o,{bV:1,g1:2,au:3,g0:4,fZ:5,fY:6,fX:7,fW:8,fV:9,fU:10,fT:11,fS:12})}(q(){G k=C.J;C.J=q(1a,2l){2l=2l||{};1a=1a.2e();G 2P=J.2P;E(1g.1W.3X&&2l.1e){1a=\'<\'+1a+\' 1e="\'+2l.1e+\'">\';8R 2l.1e;o J.6M(1b.43(1a),2l)}E(!2P[1a])2P[1a]=J.15(1b.43(1a));o J.6M(2P[1a].fR(1r),2l)};M.15(C.J,k||{})}).8m(1A);J.2P={};J.1d={99:q(k){o $(k).14.3p!=\'7L\'},aa:q(k){k=$(k);J[J.99(k)?\'bU\':\'bT\'](k);o k},bU:q(k){$(k).14.3p=\'7L\';o k},bT:q(k){$(k).14.3p=\'\';o k},a1:q(k){k=$(k);k.1O.6I(k);o k},5a:q(k,18){k=$(k);E(18&&18.3s)18=18.3s();E(M.4j(18))o k.5a().3o(18);18=M.4i(18);k.4C=18.4h();18.59.1L(18).4s();o k},1Y:q(k,18){k=$(k);E(18&&18.3s)18=18.3s();1m E(!M.4j(18)){18=M.4i(18);G 9i=k.fQ.fP();9i.fO(k);18.59.1L(18).4s();18=9i.fN(18.4h())}k.1O.8Z(18,k);o k},3o:q(k,3Q){k=$(k);E(M.3f(3Q)||M.53(3Q)||M.4j(3Q)||(3Q&&(3Q.3s||3Q.4i)))3Q={4Q:3Q};G 18,3o,1a,3g;17(G 1v 1Q 3Q){18=3Q[1v];1v=1v.2e();3o=J.5M[1v];E(18&&18.3s)18=18.3s();E(M.4j(18)){3o(k,18);3G}18=M.4i(18);1a=((1v==\'4R\'||1v==\'75\')?k.1O:k).1a.2R();3g=J.7F(1a,18.4h());E(1v==\'2i\'||1v==\'75\')3g.4e();3g.1E(3o.7T(k));18.59.1L(18).4s()}o k},5g:q(k,1K,2l){k=$(k);E(M.4j(1K))$(1K).6M(2l||{});1m E(M.3f(1K))1K=1s J(1K,2l);1m 1K=1s J(\'1T\',1K);E(k.1O)k.1O.8Z(1K,k);1K.5O(k);o 1K},2C:q(k){k=$(k);G 1q=\'<\'+k.1a.2e();$H({\'1o\':\'1o\',\'1j\':\'6e\'}).1E(q(1H){G 1y=1H.3K(),1U=1H.2u();G I=(k[1y]||\'\').2H();E(I)1q+=\' \'+1U+\'=\'+I.2C(1u)});o 1q+\'>\'},7S:q(k,1y){k=$(k);G 1V=[];1P(k=k[1y])E(k.3r==1)1V.1h(J.15(k));o 1V},5x:q(k){o $(k).7S(\'1O\')},bR:q(k){o $(k).2z("*")},bS:q(k){k=$(k).5D;1P(k&&k.3r!=1)k=k.3M;o $(k)},br:q(k){E(!(k=$(k).5D))o[];1P(k&&k.3r!=1)k=k.3M;E(k)o[k].20($(k).4E());o[]},5Y:q(k){o $(k).7S(\'aY\')},4E:q(k){o $(k).7S(\'3M\')},fM:q(k){k=$(k);o k.5Y().4e().20(k.4E())},1f:q(k,41){E(M.3f(41))41=1s 19(41);o 41.1f($(k))},fL:q(k,1t,1i){k=$(k);E(1p.O==1)o $(k.1O);G 5x=k.5x();o M.53(1t)?5x[1t]:19.5w(5x,1t,1i)},fK:q(k,1t,1i){k=$(k);E(1p.O==1)o k.bS();o M.53(1t)?k.bR()[1t]:k.2z(1t)[1i||0]},fJ:q(k,1t,1i){k=$(k);E(1p.O==1)o $(19.25.6x(k));G 5Y=k.5Y();o M.53(1t)?5Y[1t]:19.5w(5Y,1t,1i)},6B:q(k,1t,1i){k=$(k);E(1p.O==1)o $(19.25.6w(k));G 4E=k.4E();o M.53(1t)?4E[1t]:19.5w(4E,1t,1i)},2z:q(){G 21=$A(1p),k=$(21.5i());o 19.7o(k,21)},55:q(){G 21=$A(1p),k=$(21.5i());o 19.7o(k.1O,21).6b(k)},bt:q(k){k=$(k);G 1o=k.51(\'1o\'),5J=1p.5v;E(1o)o 1o;do{1o=\'fI\'+5J.bs++}1P($(1o));k.6M(\'1o\',1o);o 1o},51:q(k,1e){k=$(k);E(1g.1W.3X){G t=J.3O.7I;E(t.1S[1e])o t.1S[1e](k,1e);E(t.3A[1e])1e=t.3A[1e];E(1e.1J(\':\')){o(!k.2l||!k.2l[1e])?1k:k.2l[1e].I}}o k.91(1e)},6M:q(k,1e,I){k=$(k);G 2l={},t=J.3O.6l;E(3Z 1e==\'Y\')2l=1e;1m 2l[1e]=M.2D(I)?1u:I;17(G 29 1Q 2l){1e=t.3A[29]||29;I=2l[29];E(t.1S[29])1e=t.1S[29](k,I);E(I===1r||I===1k)k.8D(1e);1m E(I===1u)k.bQ(1e,1e);1m k.bQ(1e,I)}o k},b5:q(k){o $(k).5I().3a},b6:q(k){o $(k).5I().2g},6d:q(k){o 1s J.6Z(k)},7s:q(k,1j){E(!(k=$(k)))o;G 7R=k.1j;o(7R.O>0&&(7R==1j||1s 4k("(^|\\\\s)"+1j+"(\\\\s|$)").2L(7R)))},bO:q(k,1j){E(!(k=$(k)))o;E(!k.7s(1j))k.1j+=(k.1j?\' \':\'\')+1j;o k},bP:q(k,1j){E(!(k=$(k)))o;k.1j=k.1j.1Y(1s 4k("(^|\\\\s+)"+1j+"(\\\\s+|$)"),\' \').3T();o k},fH:q(k,1j){E(!(k=$(k)))o;o k[k.7s(1j)?\'bP\':\'bO\'](1j)},fG:q(k){k=$(k);G L=k.5D;1P(L){G bN=L.3M;E(L.3r==3&&!/\\S/.2L(L.4f))k.6I(L);L=bN}o k},5E:q(k){o $(k).4C.4O()},76:q(k,3b){k=$(k),3b=$(3b);G bL=3b;E(k.bM)o(k.bM(3b)&8)===8;E(k.6L&&!1g.1W.58){G e=k.6L,a=3b.6L,5X=3b.3M;E(!5X){do{3b=3b.1O}1P(!(5X=3b.3M)&&3b.1O)}E(5X&&5X.6L)o(e>a&&e<5X.6L)}1P(k=k.1O)E(k==bL)o 1u;o 1r},bK:q(k){k=$(k);G 5W=k.4P();1A.bK(5W[0],5W[1]);o k},2a:q(k,14){k=$(k);14=14==\'97\'?\'7N\':14.95();G I=k.14[14];E(!I){G 9h=1b.fF.fE(k,1k);I=9h?9h[14]:1k}E(14==\'3P\')o I?5R(I):1.0;o I==\'7M\'?1k:I},fD:q(k){o $(k).2a(\'3P\')},5S:q(k,4I){k=$(k);G 9g=k.14,1f;E(M.3f(4I)){k.14.90+=\';\'+4I;o 4I.1J(\'3P\')?k.5Q(4I.1f(/3P:\\s*(\\d?\\.?\\d*)/)[1]):k}17(G 1y 1Q 4I)E(1y==\'3P\')k.5Q(4I[1y]);1m 9g[(1y==\'97\'||1y==\'7N\')?(M.2D(9g.96)?\'7N\':\'96\'):1y]=4I[1y];o k},5Q:q(k,I){k=$(k);k.14.3P=(I==1||I===\'\')?\'\':(I<0.7G)?0:I;o k},5I:q(k){k=$(k);G 3p=$(k).2a(\'3p\');E(3p!=\'7L\'&&3p!=1k)o{2g:k.5q,3a:k.5r};G 44=k.14;G bH=44.9f;G bI=44.1v;G bJ=44.3p;44.9f=\'7j\';44.1v=\'5P\';44.3p=\'fC\';G bG=k.bE;G bF=k.bD;44.3p=bJ;44.1v=bI;44.9f=bH;o{2g:bG,3a:bF}},fB:q(k){k=$(k);G 5W=J.2a(k,\'1v\');E(5W==\'5T\'||!5W){k.9d=1u;k.14.1v=\'6K\';E(1A.9e){k.14.2i=0;k.14.2x=0}}o k},fA:q(k){k=$(k);E(k.9d){k.9d=4z;k.14.1v=k.14.2i=k.14.2x=k.14.4Q=k.14.5U=\'\'}o k},fz:q(k){k=$(k);E(k.5h)o k;k.5h=J.2a(k,\'9c\')||\'7M\';E(k.5h!==\'7j\')k.14.9c=\'7j\';o k},fy:q(k){k=$(k);E(!k.5h)o k;k.14.9c=k.5h==\'7M\'?\'\':k.5h;k.5h=1k;o k},4P:q(k){G 2J=0,2K=0;do{2J+=k.5c||0;2K+=k.5b||0;k=k.3e}1P(k);o J.57(2K,2J)},6h:q(k){G 2J=0,2K=0;do{2J+=k.5c||0;2K+=k.5b||0;k=k.3e;E(k){E(k.1a==\'by\')2d;G p=J.2a(k,\'1v\');E(p!==\'5T\')2d}}1P(k);o J.57(2K,2J)},8g:q(k){k=$(k);E(k.2a(\'1v\')==\'5P\')o;G 9b=k.6h();G 2i=9b[1];G 2x=9b[0];G 2g=k.bE;G 3a=k.bD;k.bB=2x-5R(k.14.2x||0);k.bC=2i-5R(k.14.2i||0);k.bz=k.14.2g;k.bA=k.14.3a;k.14.1v=\'5P\';k.14.2i=2i+\'3i\';k.14.2x=2x+\'3i\';k.14.2g=2g+\'3i\';k.14.3a=3a+\'3i\';o k},8d:q(k){k=$(k);E(k.2a(\'1v\')==\'6K\')o;k.14.1v=\'6K\';G 2i=5R(k.14.2i||0)-(k.bC||0);G 2x=5R(k.14.2x||0)-(k.bB||0);k.14.2i=2i+\'3i\';k.14.2x=2x+\'3i\';k.14.3a=k.bA;k.14.2g=k.bz;o k},8c:q(k){G 2J=0,2K=0;do{2J+=k.4n||0;2K+=k.4p||0;k=k.1O}1P(k);o J.57(2K,2J)},5p:q(k){E(k.3e)o $(k.3e);E(k==1b.2q)o $(k);1P((k=k.1O)&&k!=1b.2q)E(J.2a(k,\'1v\')!=\'5T\')o $(k);o $(1b.2q)},6g:q(9a){G 2J=0,2K=0;G k=9a;do{2J+=k.5c||0;2K+=k.5b||0;E(k.3e==1b.2q&&J.2a(k,\'1v\')==\'5P\')2d}1P(k=k.3e);k=9a;do{E(!1g.1W.58||k.1a==\'by\'){2J-=k.4n||0;2K-=k.4p||0}}1P(k=k.1O);o J.57(2K,2J)},a3:q(k,22){G U=M.15({bx:1u,bw:1u,bv:1u,bu:1u,5c:0,5b:0},1p[2]||{});22=$(22);G p=22.6g();k=$(k);G 5V=[0,0];G 2T=1k;E(J.2a(k,\'1v\')==\'5P\'){2T=k.5p();5V=2T.6g()}E(2T==1b.2q){5V[0]-=1b.2q.5b;5V[1]-=1b.2q.5c}E(U.bx)k.14.2x=(p[0]-5V[0]+U.5b)+\'3i\';E(U.bw)k.14.2i=(p[1]-5V[1]+U.5c)+\'3i\';E(U.bv)k.14.2g=22.5q+\'3i\';E(U.bu)k.14.3a=22.5r+\'3i\';o k}};J.1d.bt.bs=1;M.15(J.1d,{fx:J.1d.2z,fw:J.1d.br});J.3O={6l:{3A:{1j:\'6e\',bo:\'17\'},1S:{}}};E(1g.1W.58){J.1d.2a=J.1d.2a.5g(q(3j,k,14){5y(14){2r\'2x\':2r\'2i\':2r\'5U\':2r\'4Q\':E(3j(k,\'1v\')===\'5T\')o 1k;2r\'3a\':2r\'2g\':E(!J.99(k))o 1k;G 7O=bq(3j(k,14),10);E(7O!==k[\'2V\'+14.6F()])o 7O+\'3i\';G 3k;E(14===\'3a\'){3k=[\'7P-2i-2g\',\'7Q-2i\',\'7Q-4Q\',\'7P-4Q-2g\']}1m{3k=[\'7P-2x-2g\',\'7Q-2x\',\'7Q-5U\',\'7P-5U-2g\']}o 3k.3H(7O,q(2O,1y){G 98=3j(k,1y);o 98===1k?2O:2O-bq(98,10)})+\'3i\';6p:o 3j(k,14)}});J.1d.51=J.1d.51.5g(q(3j,k,1U){E(1U===\'7K\')o k.7K;o 3j(k,1U)})}1m E(1g.1W.3X){J.1d.5p=J.1d.5p.5g(q(3j,k){k=$(k);G 1v=k.2a(\'1v\');E(1v!==\'5T\')o 3j(k);k.5S({1v:\'6K\'});G I=3j(k);k.5S({1v:1v});o I});$w(\'6h 6g\').1E(q(1F){J.1d[1F]=J.1d[1F].5g(q(3j,k){k=$(k);G 1v=k.2a(\'1v\');E(1v!==\'5T\')o 3j(k);G 3e=k.5p();E(3e&&3e.2a(\'1v\')===\'fv\')3e.5S({94:1});k.5S({1v:\'6K\'});G I=3j(k);k.5S({1v:1v});o I})});J.1d.2a=q(k,14){k=$(k);14=(14==\'97\'||14==\'7N\')?\'96\':14.95();G I=k.14[14];E(!I&&k.5f)I=k.5f[14];E(14==\'3P\'){E(I=(k.2a(\'2h\')||\'\').1f(/92\\(3P=(.*)\\)/))E(I[1])o 5R(I[1])/bp;o 1.0}E(I==\'7M\'){E((14==\'2g\'||14==\'3a\')&&(k.2a(\'3p\')!=\'7L\'))o k[\'2V\'+14.6F()]+\'3i\';o 1k}o I};J.1d.5Q=q(k,I){q 93(2h){o 2h.1Y(/92\\([^\\)]*\\)/gi,\'\')}k=$(k);G 5f=k.5f;E((5f&&!5f.fu)||(!5f&&k.14.94==\'ft\'))k.14.94=1;G 2h=k.2a(\'2h\'),14=k.14;E(I==1||I===\'\'){(2h=93(2h))?14.2h=2h:14.8D(\'2h\');o k}1m E(I<0.7G)I=0;14.2h=93(2h)+\'92(3P=\'+(I*bp)+\')\';o k};J.3O={7I:{3A:{\'6e\':\'1j\',\'17\':\'bo\'},1S:{7J:q(k,1U){o k.91(1U,2)},bn:q(k,1U){G L=k.bj(1U);o L?L.I:""},2k:q(k,1U){1U=k.91(1U);o 1U?1U.2H().3B(23,-2):1k},6J:q(k,1U){o $(k).3I(1U)?1U:1k},14:q(k){o k.14.90.2e()},7K:q(k){o k.7K}}}};J.3O.6l={3A:M.15({fs:\'fr\',fq:\'fp\'},J.3O.7I.3A),1S:{3J:q(k,I){k.3J=!!I},14:q(k,I){k.14.90=I?I:\'\'}}};J.3O.8X={};$w(\'fo fn fm fl fk 7i \'+\'fj fi fh fg\').1E(q(29){J.3O.6l.3A[29.2e()]=29;J.3O.8X[29.2e()]=29});(q(v){M.15(v,{aI:v.7J,ad:v.7J,1B:v.7J,5B:v.bn,3u:v.6J,3J:v.6J,ff:v.6J,fe:v.6J,fd:v.2k,ao:v.2k,fc:v.2k,fb:v.2k,fa:v.2k,f9:v.2k,f8:v.2k,f7:v.2k,f6:v.2k,f5:v.2k,f4:v.2k,f3:v.2k,f2:v.2k,f1:v.2k,f0:v.2k,eZ:v.2k,eY:v.2k,eX:v.2k})})(J.3O.7I.1S)}1m E(1g.1W.7H&&/eW:1\\.8\\.0/.2L(5e.5d)){J.1d.5Q=q(k,I){k=$(k);k.14.3P=(I==1)?0.eV:(I===\'\')?\'\':(I<0.7G)?0:I;o k}}1m E(1g.1W.4u){J.1d.5Q=q(k,I){k=$(k);k.14.3P=(I==1||I===\'\')?\'\':(I<0.7G)?0:I;E(I==1)E(k.1a==\'bf\'&&k.2g){k.2g++;k.2g--}1m 2s{G n=1b.bm(\' \');k.5O(n);k.6I(n)}2E(e){}o k};J.1d.4P=q(k){G 2J=0,2K=0;do{2J+=k.5c||0;2K+=k.5b||0;E(k.3e==1b.2q)E(J.2a(k,\'1v\')==\'5P\')2d;k=k.3e}1P(k);o J.57(2K,2J)}}E(1g.1W.3X||1g.1W.58){J.1d.5a=q(k,18){k=$(k);E(18&&18.3s)18=18.3s();E(M.4j(18))o k.5a().3o(18);18=M.4i(18);G 1a=k.1a.2R();E(1a 1Q J.5M.4G){$A(k.3g).1E(q(L){k.6I(L)});J.7F(1a,18.4h()).1E(q(L){k.5O(L)})}1m k.4C=18.4h();18.59.1L(18).4s();o k}}E(\'bl\'1Q 1b.43(\'1T\')){J.1d.1Y=q(k,18){k=$(k);E(18&&18.3s)18=18.3s();E(M.4j(18)){k.1O.8Z(18,k);o k}18=M.4i(18);G 2T=k.1O,1a=2T.1a.2R();E(J.5M.4G[1a]){G 3M=k.6B();G 8Y=J.7F(1a,18.4h());2T.6I(k);E(3M)8Y.1E(q(L){2T.7C(L,3M)});1m 8Y.1E(q(L){2T.5O(L)})}1m k.bl=18.4h();18.59.1L(18).4s();o k}}J.57=q(l,t){G 1q=[l,t];1q.2x=l;1q.2i=t;o 1q};J.7F=q(1a,7D){G 1T=1s J(\'1T\'),t=J.5M.4G[1a];E(t){1T.4C=t[0]+7D+t[1];t[2].7E(q(){1T=1T.5D})}1m 1T.4C=7D;o $A(1T.3g)};J.5M={4R:q(k,L){k.1O.7C(L,k)},2i:q(k,L){k.7C(L,k.5D)},4Q:q(k,L){k.5O(L)},75:q(k,L){k.1O.7C(L,k.3M)},4G:{eU:[\'<4H>\',\'</4H>\',1],7z:[\'<4H><5N>\',\'</5N></4H>\',2],bb:[\'<4H><5N><7B>\',\'</7B></5N></4H>\',3],8V:[\'<4H><5N><7B><bk>\',\'</bk></7B></5N></4H>\',4],bi:[\'<2z>\',\'</2z>\',1]}};(q(){M.15(C.4G,{bd:C.4G.7z,bc:C.4G.7z,ba:C.4G.8V})}).8m(J.5M);J.1d.7y={3I:q(k,1U){1U=J.3O.8X[1U]||1U;G L=$(k).bj(1U);o L&&L.eT}};J.1d.3z={};M.15(J,J.1d);E(!1g.3U.6H&&1b.43(\'1T\').4U){1A.6G={};1A.6G.1l=1b.43(\'1T\').4U;1g.3U.6H=1u}J.15=(q(){E(1g.3U.7x)o 1g.K;G 1d={},3z=J.1d.3z;G 15=M.15(q(k){E(!k||k.7c||k.3r!=1||k==1A)o k;G 2B=M.2A(1d),1a=k.1a,1y,I;E(3z[1a])M.15(2B,3z[1a]);17(1y 1Q 2B){I=2B[1y];E(M.2w(I)&&!(1y 1Q k))k[1y]=I.4v()}k.7c=1g.3q;o k},{7v:q(){E(!1g.3U.6H){M.15(1d,J.1d);M.15(1d,J.1d.7y)}}});15.7v();o 15})();J.3I=q(k,1U){E(k.3I)o k.3I(1U);o J.1d.7y.3I(k,1U)};J.6a=q(2B){G F=1g.3U,T=J.1d.3z;E(!2B){M.15(1C,1C.1d);M.15(1C.J,1C.J.1d);M.15(J.1d.3z,{"eS":M.2A(1C.1d),"eR":M.2A(1C.J.1d),"bi":M.2A(1C.J.1d),"bh":M.2A(1C.J.1d)})}E(1p.O==2){G 1a=2B;2B=1p[1]}E(!1a)M.15(J.1d,2B||{});1m{E(M.4x(1a))1a.1E(15);1m 15(1a)}q 15(1a){1a=1a.2R();E(!J.1d.3z[1a])J.1d.3z[1a]={};M.15(J.1d.3z[1a],2B)}q 7w(2B,5L,7A){7A=7A||1r;17(G 1y 1Q 2B){G I=2B[1y];E(!M.2w(I))3G;E(!7A||!(1y 1Q 5L))5L[1y]=I.4v()}}q b8(1a){G 1N;G 8U={"eQ":"eP","bh":"eO","P":"eN","eM":"eL","eK":"eJ","eI":"eH","eG":"eF","eE":"eD","eC":"5K","eB":"5K","eA":"5K","ez":"5K","ey":"5K","ex":"5K","Q":"ew","ev":"bg","eu":"bg","A":"et","bf":"es","er":"eq","ep":"be","eo":"be","bd":"8W","bc":"8W","7z":"8W","bb":"em","ba":"b9","8V":"b9","el":"ek","ej":"ei"};E(8U[1a])1N=\'8T\'+8U[1a]+\'J\';E(1A[1N])o 1A[1N];1N=\'8T\'+1a+\'J\';E(1A[1N])o 1A[1N];1N=\'8T\'+1a.6F()+\'J\';E(1A[1N])o 1A[1N];1A[1N]={};1A[1N].1l=1b.43(1a).4U;o 1A[1N]}E(F.6H){7w(J.1d,6G.1l);7w(J.1d.7y,6G.1l,1u)}E(F.7x){17(G 8S 1Q J.1d.3z){G 1N=b8(8S);E(M.2D(1N))3G;7w(T[8S],1N.1l)}}M.15(J,J.1d);8R J.3z;E(J.15.7v)J.15.7v();J.2P={}};1b.eh={5I:q(){G 8Q={};G B=1g.1W;$w(\'2g 3a\').1E(q(d){G D=d.6F();8Q[d]=(B.4u&&!1b.2S)?5J[\'eg\'+D]:(B.58)?1b.2q[\'b7\'+D]:1b.4o[\'b7\'+D]});o 8Q},b6:q(){o C.5I().2g},b5:q(){o C.5I().3a},ef:q(){o J.57(1A.a9||1b.4o.4p||1b.2q.4p,1A.a8||1b.4o.4n||1b.2q.4n)}};G 19=2b.2p({2I:q(1t){C.1t=1t.3T();C.b4()},b3:q(){E(!1g.3U.72)o 1r;G e=C.1t;E(1g.1W.4u&&(e.1J("-2t-1B")||e.1J(":5E")))o 1r;E((/(\\[[\\w-]*?:|:3J)/).2L(C.1t))o 1r;o 1u},b4:q(){E(C.b3())o C.b2();G e=C.1t,4g=19.6C,h=19.25,c=19.6D,3y,p,m;E(19.56[e]){C.3N=19.56[e];o}C.3N=["C.3N = q(1n) {","G r = 1n, h = 19.25, c = 1r, n;"];1P(e&&3y!=e&&(/\\S/).2L(e)){3y=e;17(G i 1Q 4g){p=4g[i];E(m=e.1f(p)){C.3N.1h(M.2w(c[i])?c[i](m):1s 32(c[i]).2S(m));e=e.1Y(m[0],\'\');2d}}}C.3N.1h("o h.8E(n);\\n}");7u(C.3N.2o(\'\\n\'));19.56[C.1t]=C.3N},b2:q(){G e=C.1t,4g=19.6C,x=19.2v,3y,m;E(19.56[e]){C.2v=19.56[e];o}C.3N=[\'.//*\'];1P(e&&3y!=e&&(/\\S/).2L(e)){3y=e;17(G i 1Q 4g){E(m=e.1f(4g[i])){C.3N.1h(M.2w(x[i])?x[i](m):1s 32(x[i]).2S(m));e=e.1Y(m[0],\'\');2d}}}C.2v=C.3N.2o(\'\');19.56[C.1t]=C.2v},7p:q(1n){1n=1n||1b;E(C.2v)o 1b.8a(C.2v,1n);o C.3N(1n)},1f:q(k){C.8P=[];G e=C.1t,4g=19.6C,as=19.8J;G 3y,p,m;1P(e&&3y!==e&&(/\\S/).2L(e)){3y=e;17(G i 1Q 4g){p=4g[i];E(m=e.1f(p)){E(as[i]){C.8P.1h([i,M.2A(m)]);e=e.1Y(m[0],\'\')}1m{o C.7p(1b).1J(k)}}}}G 1f=1u,1e,2j;17(G i=0,7t;7t=C.8P[i];i++){1e=7t[0],2j=7t[1];E(!19.8J[1e](k,2j)){1f=1r;2d}}o 1f},2H:q(){o C.1t},2C:q(){o"#<19:"+C.1t.2C()+">"}});M.15(19,{56:{},2v:{4D:"//*",1G:"/*",55:"/6E-4F::*[1]",6A:\'/6E-4F::*\',1a:q(m){E(m[1]==\'*\')o\'\';o"[b1-1e()=\'"+m[1].2e()+"\' 8O b1-1e()=\'"+m[1].2R()+"\']"},1j:"[6f(20(\' \', @6e, \' \'), \' #{1} \')]",1o:"[@1o=\'#{1}\']",5F:q(m){m[1]=m[1].2e();o 1s 32("[@#{1}]").2S(m)},29:q(m){m[1]=m[1].2e();m[3]=m[5]||m[6];o 1s 32(19.2v.6t[m[2]]).2S(m)},6y:q(m){G h=19.2v.2f[m[1]];E(!h)o\'\';E(M.2w(h))o h(m);o 1s 32(19.2v.2f[m[1]]).2S(m)},6t:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[ee-b0(@#{1}, \'#{3}\')]",\'$=\':"[5H(@#{1}, (3h-O(@#{1}) - 3h-O(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[6f(@#{1}, \'#{3}\')]",\'~=\':"[6f(20(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[6f(20(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},2f:{\'3K-1G\':\'[4B(8M-4F::*)]\',\'2u-1G\':\'[4B(6E-4F::*)]\',\'6v-1G\':\'[4B(8M-4F::* 8O 6E-4F::*)]\',\'5E\':"[3x(*) = 0 8L (3x(3Y()) = 0 8O ed(3Y(), \' \\t\\r\\n\', \'\') = \'\')]",\'3J\':"[@3J]",\'3u\':"[@3u]",\'aP\':"[4B(@3u)]",\'4B\':q(m){G e=m[6],p=19.6C,x=19.2v,3y,v;G 8N=[];1P(e&&3y!=e&&(/\\S/).2L(e)){3y=e;17(G i 1Q p){E(m=e.1f(p[i])){v=M.2w(x[i])?x[i](m):1s 32(x[i]).2S(m);8N.1h("("+v.5H(1,v.O-1)+")");e=e.1Y(m[0],\'\');2d}}}o"[4B("+8N.2o(" 8L ")+")]"},\'1X-1G\':q(m){o 19.2v.2f.1X("(3x(./8M-4F::*) + 1) ",m)},\'1X-2u-1G\':q(m){o 19.2v.2f.1X("(3x(./6E-4F::*) + 1) ",m)},\'1X-2t-1B\':q(m){o 19.2v.2f.1X("1v() ",m)},\'1X-2u-2t-1B\':q(m){o 19.2v.2f.1X("(2u() + 1 - 1v()) ",m)},\'3K-2t-1B\':q(m){m[6]="1";o 19.2v.2f[\'1X-2t-1B\'](m)},\'2u-2t-1B\':q(m){m[6]="1";o 19.2v.2f[\'1X-2u-2t-1B\'](m)},\'6v-2t-1B\':q(m){G p=19.2v.2f;o p[\'3K-2t-1B\'](m)+p[\'2u-2t-1B\'](m)},1X:q(5G,m){G 42,1I=m[6],8K;E(1I==\'aS\')1I=\'2n+0\';E(1I==\'aR\')1I=\'2n+1\';E(42=1I.1f(/^(\\d+)$/))o\'[\'+5G+"= "+42[1]+\']\';E(42=1I.1f(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(42[1]=="-")42[1]=-1;G a=42[1]?54(42[1]):1;G b=42[2]?54(42[2]):0;8K="[((#{5G} - #{b}) ec #{a} = 0) 8L "+"((#{5G} - #{b}) 1T #{a} >= 0)]";o 1s 32(8K).2S({5G:5G,a:a,b:b})}}}},6D:{1a:\'n = h.1a(n, r, "#{1}", c); c = 1r;\',1j:\'n = h.1j(n, r, "#{1}", c); c = 1r;\',1o:\'n = h.1o(n, r, "#{1}", c); c = 1r;\',5F:\'n = h.5F(n, r, "#{1}", c); c = 1r;\',29:q(m){m[3]=(m[5]||m[6]);o 1s 32(\'n = h.29(n, r, "#{1}", "#{3}", "#{2}", c); c = 1r;\').2S(m)},6y:q(m){E(m[6])m[6]=m[6].1Y(/"/g,\'\\\\"\');o 1s 32(\'n = h.6y(n, "#{1}", "#{6}", r, c); c = 1r;\').2S(m)},4D:\'c = "4D";\',1G:\'c = "1G";\',55:\'c = "55";\',6A:\'c = "6A";\'},6C:{6A:/^\\s*~\\s*/,1G:/^\\s*>\\s*/,55:/^\\s*\\+\\s*/,4D:/^\\s/,1a:/^\\s*(\\*|[\\w\\-]+)(\\b|$)?/,1o:/^#([\\w\\-\\*]+)(\\b|$)/,1j:/^\\.([\\w\\-\\*]+)(\\b|$)/,6y:/^:((3K|2u|1X|1X-2u|6v)(-1G|-2t-1B)|5E|3J|(en|eb)ea|4B)(\\((.*?)\\))?(\\b|$|(?=\\s|[:+~>]))/,5F:/^\\[([\\w]+)\\]/,29:/\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*(([\'"])([^\\4]*?)\\4|([^\'"][^\\]]*?)))?\\]/},8J:{1a:q(k,2j){o 2j[1].2R()==k.1a.2R()},1j:q(k,2j){o J.7s(k,2j[1])},1o:q(k,2j){o k.1o===2j[1]},5F:q(k,2j){o J.3I(k,2j[1])},29:q(k,2j){G 4f=J.51(k,2j[1]);o 4f&&19.6t[2j[2]](4f,2j[5]||2j[6])}},25:{20:q(a,b){17(G i=0,L;L=b[i];i++)a.1h(L);o a},7q:q(N){G aZ=1g.3q;17(G i=0,L;L=N[i];i++)L.3L=aZ;o N},52:q(N){17(G i=0,L;L=N[i];i++)L.3L=4z;o N},1i:q(1O,4e,6u){1O.3L=1g.3q;E(4e){17(G N=1O.3g,i=N.O-1,j=1;i>=0;i--){G L=N[i];E(L.3r==1&&(!6u||L.3L))L.7r=j++}}1m{17(G i=0,j=1,N=1O.3g;L=N[i];i++)E(L.3r==1&&(!6u||L.3L))L.7r=j++}},8E:q(N){E(N.O==0)o N;G V=[],n;17(G i=0,l=N.O;i<l;i++)E(!(n=N[i]).3L){n.3L=1g.3q;V.1h(J.15(n))}o 19.25.52(V)},4D:q(N){G h=19.25;17(G i=0,V=[],L;L=N[i];i++)h.20(V,L.4a(\'*\'));o V},1G:q(N){G h=19.25;17(G i=0,V=[],L;L=N[i];i++){17(G j=0,1G;1G=L.3g[j];j++)E(1G.3r==1&&1G.1a!=\'!\')V.1h(1G)}o V},55:q(N){17(G i=0,V=[],L;L=N[i];i++){G 6B=C.6w(L);E(6B)V.1h(6B)}o V},6A:q(N){G h=19.25;17(G i=0,V=[],L;L=N[i];i++)h.20(V,J.4E(L));o V},6w:q(L){1P(L=L.3M)E(L.3r==1)o L;o 1k},6x:q(L){1P(L=L.aY)E(L.3r==1)o L;o 1k},1a:q(N,1n,1a,26){G aX=1a.2R();G V=[],h=19.25;E(N){E(26){E(26=="4D"){17(G i=0,L;L=N[i];i++)h.20(V,L.4a(1a));o V}1m N=C[26](N);E(1a=="*")o N}17(G i=0,L;L=N[i];i++)E(L.1a.2R()===aX)V.1h(L);o V}1m o 1n.4a(1a)},1o:q(N,1n,1o,26){G 31=$(1o),h=19.25;E(!31)o[];E(!N&&1n==1b)o[31];E(N){E(26){E(26==\'1G\'){17(G i=0,L;L=N[i];i++)E(31.1O==L)o[31]}1m E(26==\'4D\'){17(G i=0,L;L=N[i];i++)E(J.76(31,L))o[31]}1m E(26==\'55\'){17(G i=0,L;L=N[i];i++)E(19.25.6x(31)==L)o[31]}1m N=h[26](N)}17(G i=0,L;L=N[i];i++)E(L==31)o[31];o[]}o(31&&J.76(31,1n))?[31]:[]},1j:q(N,1n,1j,26){E(N&&26)N=C[26](N);o 19.25.aW(N,1n,1j)},aW:q(N,1n,1j){E(!N)N=19.25.4D([1n]);G aV=\' \'+1j+\' \';17(G i=0,V=[],L,6z;L=N[i];i++){6z=L.1j;E(6z.O==0)3G;E(6z==1j||(\' \'+6z+\' \').1J(aV))V.1h(L)}o V},5F:q(N,1n,29,26){E(!N)N=1n.4a("*");E(N&&26)N=C[26](N);G V=[];17(G i=0,L;L=N[i];i++)E(J.3I(L,29))V.1h(L);o V},29:q(N,1n,29,I,aU,26){E(!N)N=1n.4a("*");E(N&&26)N=C[26](N);G 2c=19.6t[aU],V=[];17(G i=0,L;L=N[i];i++){G 4f=J.51(L,29);E(4f===1k)3G;E(2c(4f,I))V.1h(L)}o V},6y:q(N,1e,I,1n,26){E(N&&26)N=C[26](N);E(!N)N=1n.4a("*");o 19.2f[1e](N,I,1n)}},2f:{\'3K-1G\':q(N,I,1n){17(G i=0,V=[],L;L=N[i];i++){E(19.25.6x(L))3G;V.1h(L)}o V},\'2u-1G\':q(N,I,1n){17(G i=0,V=[],L;L=N[i];i++){E(19.25.6w(L))3G;V.1h(L)}o V},\'6v-1G\':q(N,I,1n){G h=19.25;17(G i=0,V=[],L;L=N[i];i++)E(!h.6x(L)&&!h.6w(L))V.1h(L);o V},\'1X-1G\':q(N,1I,1n){o 19.2f.1X(N,1I,1n)},\'1X-2u-1G\':q(N,1I,1n){o 19.2f.1X(N,1I,1n,1u)},\'1X-2t-1B\':q(N,1I,1n){o 19.2f.1X(N,1I,1n,1r,1u)},\'1X-2u-2t-1B\':q(N,1I,1n){o 19.2f.1X(N,1I,1n,1u,1u)},\'3K-2t-1B\':q(N,1I,1n){o 19.2f.1X(N,"1",1n,1r,1u)},\'2u-2t-1B\':q(N,1I,1n){o 19.2f.1X(N,"1",1n,1u,1u)},\'6v-2t-1B\':q(N,1I,1n){G p=19.2f;o p[\'2u-2t-1B\'](p[\'3K-2t-1B\'](N,1I,1n),1I,1n)},aQ:q(a,b,aT){E(a==0)o b>0?[b]:[];o $R(1,aT).3H([],q(2O,i){E(0==(i-b)%a&&(i-b)/a>=0)2O.1h(i);o 2O})},1X:q(N,1I,1n,4e,6u){E(N.O==0)o[];E(1I==\'aS\')1I=\'2n+0\';E(1I==\'aR\')1I=\'2n+1\';G h=19.25,V=[],8H=[],m;h.7q(N);17(G i=0,L;L=N[i];i++){E(!L.1O.3L){h.1i(L.1O,4e,6u);8H.1h(L.1O)}}E(1I.1f(/^\\d+$/)){1I=54(1I);17(G i=0,L;L=N[i];i++)E(L.7r==1I)V.1h(L)}1m E(m=1I.1f(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(m[1]=="-")m[1]=-1;G a=m[1]?54(m[1]):1;G b=m[2]?54(m[2]):0;G 8I=19.2f.aQ(a,b,N.O);17(G i=0,L,l=8I.O;L=N[i];i++){17(G j=0;j<l;j++)E(L.7r==8I[j])V.1h(L)}}h.52(N);h.52(8H);o V},\'5E\':q(N,I,1n){17(G i=0,V=[],L;L=N[i];i++){E(L.1a==\'!\'||(L.5D&&!L.4C.1f(/^\\s*$/)))3G;V.1h(L)}o V},\'4B\':q(N,41,1n){G h=19.25,e9,m;G 8G=1s 19(41).7p(1n);h.7q(8G);17(G i=0,V=[],L;L=N[i];i++)E(!L.3L)V.1h(L);h.52(8G);o V},\'aP\':q(N,I,1n){17(G i=0,V=[],L;L=N[i];i++)E(!L.3u)V.1h(L);o V},\'3u\':q(N,I,1n){17(G i=0,V=[],L;L=N[i];i++)E(L.3u)V.1h(L);o V},\'3J\':q(N,I,1n){17(G i=0,V=[],L;L=N[i];i++)E(L.3J)V.1h(L);o V}},6t:{\'=\':q(2Z,v){o 2Z==v},\'!=\':q(2Z,v){o 2Z!=v},\'^=\':q(2Z,v){o 2Z.8F(v)},\'$=\':q(2Z,v){o 2Z.aO(v)},\'*=\':q(2Z,v){o 2Z.1J(v)},\'~=\':q(2Z,v){o(\' \'+2Z+\' \').1J(\' \'+v+\' \')},\'|=\':q(2Z,v){o(\'-\'+2Z.2R()+\'-\').1J(\'-\'+v.2R()+\'-\')}},49:q(1t){G 4A=[];1t.aN(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,q(m){4A.1h(m[1].3T())});o 4A},aM:q(1V,1t){G 2j=$$(1t),h=19.25;h.7q(2j);17(G i=0,V=[],k;k=1V[i];i++)E(k.3L)V.1h(k);h.52(2j);o V},5w:q(1V,1t,1i){E(M.53(1t)){1i=1t;1t=1r}o 19.aM(1V,1t||\'*\')[1i||0]},7o:q(k,4A){4A=19.49(4A.2o(\',\'));G V=[],h=19.25;17(G i=0,l=4A.O,41;i<l;i++){41=1s 19(4A[i].3T());h.20(V,41.7p(k))}o(l>1)?h.8E(V):V}});E(1g.1W.3X){M.15(19.25,{20:q(a,b){17(G i=0,L;L=b[i];i++)E(L.1a!=="!")a.1h(L);o a},52:q(N){17(G i=0,L;L=N[i];i++)L.8D(\'3L\');o N}})}q $$(){o 19.7o(1b,$A(1p))}G 1C={8y:q(1x){$(1x).8y();o 1x},aL:q(1V,U){E(3Z U!=\'Y\')U={3w:!!U};1m E(M.2D(U.3w))U.3w=1u;G 1w,I,8C=1r,4Z=U.4Z;G 7n=1V.3H({},q(1q,k){E(!k.3u&&k.1e){1w=k.1e;I=$(k).2W();E(I!=1k&&(k.1B!=\'4Z\'||(!8C&&4Z!==1r&&(!4Z||1w==4Z)&&(8C=1u)))){E(1w 1Q 1q){E(!M.4x(1q[1w]))1q[1w]=[1q[1w]];1q[1w].1h(I)}1m 1q[1w]=I}}o 1q});o U.3w?7n:M.4r(7n)}};1C.1d={6q:q(1x,U){o 1C.aL(1C.5z(1x),U)},5z:q(1x){o $A($(1x).4a(\'*\')).3H([],q(1V,1G){E(1C.J.5A[1G.1a.2e()])1V.1h(J.15(1G));o 1V})},e8:q(1x,7l,1e){1x=$(1x);G 7m=1x.4a(\'4y\');E(!7l&&!1e)o $A(7m).2M(J.15);17(G i=0,8B=[],O=7m.O;i<O;i++){G 4y=7m[i];E((7l&&4y.1B!=7l)||(1e&&4y.1e!=1e))3G;8B.1h(J.15(4y))}o 8B},8x:q(1x){1x=$(1x);1C.5z(1x).7k(\'8x\');o 1x},8w:q(1x){1x=$(1x);1C.5z(1x).7k(\'8w\');o 1x},aJ:q(1x){G 1V=$(1x).5z().5C(q(k){o\'7j\'!=k.1B&&!k.3u});G 8A=1V.5C(q(k){o k.3I(\'7i\')&&k.7i>=0}).aK(q(k){o k.7i}).3K();o 8A?8A:1V.8l(q(k){o[\'4y\',\'2z\',\'8v\'].1J(k.1a.2e())})},e7:q(1x){1x=$(1x);1x.aJ().aG();o 1x},2Q:q(1x,U){1x=$(1x),U=M.2A(U||{});G 2Y=U.3v,5B=1x.51(\'5B\')||\'\';E(5B.4O())5B=1A.7h.aI;U.3v=1x.6q(1u);E(2Y){E(M.3f(2Y))2Y=2Y.7g();M.15(U.3v,2Y)}E(1x.3I(\'1F\')&&!U.1F)U.1F=1x.1F;o 1s 1R.50(5B,U)}};1C.J={8z:q(k){$(k).8z();o k},2z:q(k){$(k).2z();o k}};1C.J.1d={6q:q(k){k=$(k);E(!k.3u&&k.1e){G I=k.2W();E(I!=4z){G 1H={};1H[k.1e]=I;o M.4r(1H)}}o\'\'},2W:q(k){k=$(k);G 1F=k.1a.2e();o 1C.J.5A[1F](k)},e6:q(k,I){k=$(k);G 1F=k.1a.2e();1C.J.5A[1F](k,I);o k},aH:q(k){$(k).I=\'\';o k},e5:q(k){o $(k).I!=\'\'},aG:q(k){k=$(k);2s{k.8z();E(k.2z&&(k.1a.2e()!=\'4y\'||![\'8q\',\'8y\',\'4Z\'].1J(k.1B)))k.2z()}2E(e){}o k},8x:q(k){k=$(k);k.e4();k.3u=1u;o k},8w:q(k){k=$(k);k.3u=1r;o k}};G e3=1C.J;G $F=1C.J.1d.2W;1C.J.5A={4y:q(k,I){5y(k.1B.2e()){2r\'ay\':2r\'ax\':o 1C.J.5A.aF(k,I);6p:o 1C.J.5A.8v(k,I)}},aF:q(k,I){E(M.2D(I))o k.3J?k.I:1k;1m k.3J=!!I},8v:q(k,I){E(M.2D(I))o k.I;1m k.I=I},2z:q(k,1i){E(M.2D(1i))o C[k.1B==\'2z-e2\'?\'aD\':\'aC\'](k);1m{G 3t,I,aE=!M.4x(1i);17(G i=0,O=k.O;i<O;i++){3t=k.U[i];I=C.7f(3t);E(aE){E(I==1i){3t.8u=1u;o}}1m 3t.8u=1i.1J(I)}}},aD:q(k){G 1i=k.e1;o 1i>=0?C.7f(k.U[1i]):1k},aC:q(k){G 1S,O=k.O;E(!O)o 1k;17(G i=0,1S=[];i<O;i++){G 3t=k.U[i];E(3t.8u)1S.1h(C.7f(3t))}o 1S},7f:q(3t){o J.15(3t).3I(\'I\')?3t.I:3t.3Y}};4Y.8s=2b.2p(aB,{2I:q($4d,k,4c,2X){$4d(2X,4c);C.k=$(k);C.4w=C.2W()},8t:q(){G I=C.2W();E(M.3f(C.4w)&&M.3f(I)?C.4w!=I:24(C.4w)!=24(I)){C.2X(C.k,I);C.4w=I}}});1C.J.aA=2b.2p(4Y.8s,{2W:q(){o 1C.J.2W(C.k)}});1C.aA=2b.2p(4Y.8s,{2W:q(){o 1C.6q(C.k)}});4Y.6r=2b.2p({2I:q(k,2X){C.k=$(k);C.2X=2X;C.4w=C.2W();E(C.k.1a.2e()==\'1x\')C.az();1m C.6s(C.k)},8r:q(){G I=C.2W();E(C.4w!=I){C.2X(C.k,I);C.4w=I}},az:q(){1C.5z(C.k).1E(C.6s,C)},6s:q(k){E(k.1B){5y(k.1B.2e()){2r\'ay\':2r\'ax\':1D.4t(k,\'e0\',C.8r.1L(C));2d;6p:1D.4t(k,\'dZ\',C.8r.1L(C));2d}}}});1C.J.6r=2b.2p(4Y.6r,{2W:q(){o 1C.J.2W(C.k)}});1C.6r=2b.2p(4Y.6r,{2W:q(){o 1C.6q(C.k)}});E(!1A.1D)G 1D={};M.15(1D,{dY:8,dX:9,dW:13,dV:27,dU:37,dT:38,dS:39,dR:40,dQ:46,dP:36,dO:35,dN:33,dM:34,dL:45,2P:{},8o:q(1c){G k;5y(1c.1B){2r\'dK\':k=1c.dJ;2d;2r\'dI\':k=1c.3s;2d;6p:o 1k}o J.15(k)}});1D.1d=(q(){G 4W;E(1g.1W.3X){G aw={0:1,1:4,2:2};4W=q(1c,4X){o 1c.8q==aw[4X]}}1m E(1g.1W.4u){4W=q(1c,4X){5y(4X){2r 0:o 1c.7e==1&&!1c.av;2r 1:o 1c.7e==1&&1c.av;6p:o 1r}}}1m{4W=q(1c,4X){o 1c.7e?(1c.7e===4X+1):(1c.8q===4X)}}o{dH:q(1c){o 4W(1c,0)},dG:q(1c){o 4W(1c,1)},dF:q(1c){o 4W(1c,2)},k:q(1c){G L=1D.15(1c).73;o J.15(L.3r==6o.au?L.1O:L)},5w:q(1c,1t){G k=1D.k(1c);E(!1t)o k;G 1V=[k].20(k.5x());o 19.5w(1V,1t,0)},4V:q(1c){o{x:1c.aq||(1c.dE+(1b.4o.4p||1b.2q.4p)),y:1c.ap||(1c.dD+(1b.4o.4n||1b.2q.4n))}},dC:q(1c){o 1D.4V(1c).x},dB:q(1c){o 1D.4V(1c).y},8p:q(1c){1D.15(1c);1c.ar();1c.at();1c.dA=1u}}})();1D.15=(q(){G 2B=M.4b(1D.1d).3H({},q(m,1e){m[1e]=1D.1d[1e].4v();o m});E(1g.1W.3X){M.15(2B,{at:q(){C.dz=1u},ar:q(){C.7d=1r},2C:q(){o"[Y 1D]"}});o q(1c){E(!1c)o 1r;E(1c.7c)o 1c;1c.7c=1g.3q;G 4V=1D.4V(1c);M.15(1c,{73:1c.dy,8o:1D.8o(1c),aq:4V.x,ap:4V.y});o M.15(1c,2B)}}1m{1D.1l=1D.1l||1b.6n("aj").4U;M.15(1D.1l,2B);o 1g.K}})();M.15(1D,(q(){G 2P=1D.2P;q 8k(k){E(k.8n)o k.8n[0];1p.5v.1o=1p.5v.1o||1;o k.8n=[++1p.5v.1o]}q 8j(1z){E(1z&&1z.1J(\':\'))o"ai";o 1z}q 79(1o){o 2P[1o]=2P[1o]||{}}q 7a(1o,1z){G c=79(1o);o c[1z]=c[1z]||[]}q am(k,1z,2c){G 1o=8k(k);G c=7a(1o,1z);E(c.5u("2c").1J(2c))o 1r;G 1K=q(1c){E(!1D||!1D.15||(1c.1z&&1c.1z!=1z))o 1r;1D.15(1c);2c.8m(k,1c)};1K.2c=2c;c.1h(1K);o 1K}q 8i(1o,1z,2c){G c=7a(1o,1z);o c.8l(q(1K){o 1K.2c==2c})}q ak(1o,1z,2c){G c=79(1o);E(!c[1z])o 1r;c[1z]=c[1z].6b(8i(1o,1z,2c))}q an(){17(G 1o 1Q 2P)17(G 1z 1Q 2P[1o])2P[1o][1z]=1k}E(1A.7b){1A.7b("ao",an)}o{4t:q(k,1z,2c){k=$(k);G 1e=8j(1z);G 1K=am(k,1z,2c);E(!1K)o k;E(k.78){k.78(1e,1K,1r)}1m{k.7b("5t"+1e,1K)}o k},4T:q(k,1z,2c){k=$(k);G 1o=8k(k),1e=8j(1z);E(!2c&&1z){7a(1o,1z).1E(q(1K){k.4T(1z,1K.2c)});o k}1m E(!1z){M.4b(79(1o)).1E(q(1z){k.4T(1z)});o k}G 1K=8i(1o,1z,2c);E(!1K)o k;E(k.al){k.al(1e,1K,1r)}1m{k.dx("5t"+1e,1K)}ak(1o,1z,2c);o k},5s:q(k,1z,2O){k=$(k);E(k==1b&&1b.6n&&!k.ah)k=1b.4o;G 1c;E(1b.6n){1c=1b.6n("aj");1c.dw("ai",1u,1u)}1m{1c=1b.dv();1c.ag="du"}1c.1z=1z;1c.2O=2O||{};E(1b.6n){k.ah(1c)}1m{k.dt(1c.ag,1c)}o 1D.15(1c)}}})());M.15(1D,1D.1d);J.6a({5s:1D.5s,4t:1D.4t,4T:1D.4T});M.15(1b,{5s:J.1d.5s.4v(),4t:J.1d.4t.4v(),4T:J.1d.4T.4v(),6m:1r});(q(){G 3W;q 6k(){E(1b.6m)o;E(3W)1A.af(3W);1b.5s("ds:6m");1b.6m=1u}E(1b.78){E(1g.1W.4u){3W=1A.ae(q(){E(/6m|ab/.2L(1b.2N))6k()},0);1D.4t(1A,"dr",6k)}1m{1b.78("dq",6k,1r)}}1m{1b.6l("<4S 1o=ac 4s ad=//:><\\/4S>");$("ac").77=q(){E(C.2N=="ab"){C.77=1k;6k()}}}})();3V.4r=M.4r;G dp={3p:J.aa};J.1d.dn=J.1d.76;G dm={dl:q(k,18){o J.3o(k,{4R:18})},dk:q(k,18){o J.3o(k,{2i:18})},dj:q(k,18){o J.3o(k,{4Q:18})},di:q(k,18){o J.3o(k,{75:18})}};G $3G=1s dh(\'"4q $3G" dg df, de "o" dd\');G 8f={a7:1r,8e:q(){C.a5=1A.a9||1b.4o.4p||1b.2q.4p||0;C.a4=1A.a8||1b.4o.4n||1b.2q.4n||0},dc:q(k,x,y){E(C.a7)o C.a6(k,x,y);C.6i=x;C.6j=y;C.2V=J.4P(k);o(y>=C.2V[1]&&y<C.2V[1]+k.5r&&x>=C.2V[0]&&x<C.2V[0]+k.5q)},a6:q(k,x,y){G 8h=J.8c(k);C.6i=x+8h[0]-C.a5;C.6j=y+8h[1]-C.a4;C.2V=J.4P(k);o(C.6j>=C.2V[1]&&C.6j<C.2V[1]+k.5r&&C.6i>=C.2V[0]&&C.6i<C.2V[0]+k.5q)},db:q(74,k){E(!74)o 0;E(74==\'da\')o((C.2V[1]+k.5r)-C.6j)/k.5r;E(74==\'d9\')o((C.2V[0]+k.5q)-C.6i)/k.5q},4P:J.1d.4P,6h:J.1d.6h,8g:q(k){8f.8e();o J.8g(k)},8d:q(k){8f.8e();o J.8d(k)},d8:J.1d.8c,3e:J.1d.5p,d7:J.1d.6g,2A:q(22,73,U){U=U||{};o J.a3(73,22,U)}};E(!1b.70)1b.70=q(a2){q 8b(1e){o 1e.4O()?1k:"[6f(20(\' \', @6e, \' \'), \' "+1e+" \')]"}a2.70=1g.3U.72?q(k,1j){1j=1j.2H().3T();G 89=/\\s/.2L(1j)?$w(1j).2M(8b).2o(\'\'):8b(1j);o 89?1b.8a(\'.//*\'+89,k):[]}:q(k,1j){1j=1j.2H().3T();G 1V=[],6d=(/\\s/.2L(1j)?$w(1j):1k);E(!6d&&!1j)o 1V;G N=$(k).4a(\'*\');1j=\' \'+1j+\' \';17(G i=0,1G,cn;1G=N[i];i++){E(1G.1j&&(cn=\' \'+1G.1j+\' \')&&(cn.1J(1j)||(6d&&6d.88(q(1e){o!1e.2H().4O()&&cn.1J(\' \'+1e+\' \')}))))1V.1h(J.15(1G))}o 1V};o q(1j,71){o $(71||1b.2q).70(1j)}}(J.1d);J.6Z=2b.2p();J.6Z.1l={2I:q(k){C.k=$(k)},48:q(W){C.k.1j.49(/\\s+/).2z(q(1e){o 1e.O>0}).48(W)},6c:q(1j){C.k.1j=1j},d6:q(87){E(C.1J(87))o;C.6c($A(C).20(87).2o(\' \'))},a1:q(86){E(!C.1J(86))o;C.6c($A(C).6b(86).2o(\' \'))},2H:q(){o $A(C).2o(\' \')}};M.15(J.6Z.1l,2G);J.6a();',62,1095,'||||||||||||||||||||element||||return||function||||||||||||this||if||var||value|Element||node|Object|nodes|length||||||options|results|iterator||object||||||style|extend||for|content|Selector|tagName|document|event|Methods|name|match|Prototype|push|index|className|null|prototype|else|root|id|arguments|result|false|new|expression|true|position|key|form|property|eventName|window|type|Form|Event|each|method|child|pair|formula|include|wrapper|bind|context|klass|parentNode|while|in|Ajax|values|div|attribute|elements|Browser|nth|replace|transport|concat|args|source||String|handlers|combinator||pattern|attr|getStyle|Class|handler|break|toLowerCase|pseudos|width|filter|top|matches|_getEv|attributes|Array||join|create|body|case|try|of|last|xpath|isFunction|left|response|select|clone|methods|inspect|isUndefined|catch|array|Enumerable|toString|initialize|valueT|valueL|test|map|readyState|memo|cache|request|toUpperCase|evaluate|parent|url|offset|getValue|callback|params|nv||targetNode|Template||||||||height|ancestor|responseText|iterable|offsetParent|isString|childNodes|string|px|proceed|properties|json|gsub|__method|insert|display|emptyFunction|nodeType|toElement|opt|disabled|parameters|hash|count|le|ByTag|names|slice|container|toJSON|toArray|replacement|continue|inject|hasAttribute|checked|first|_countedByPrototype|nextSibling|matcher|_attributeTranslations|opacity|insertions|apply|onComplete|strip|BrowserFeatures|Hash|timer|IE|text|typeof||selector|mm|createElement|els|||indexOf|_each|split|getElementsByTagName|keys|frequency|super|reverse|nodeValue|ps|stripScripts|toHTML|isElement|RegExp|start|responder|scrollTop|documentElement|scrollLeft|throw|toQueryString|defer|observe|WebKit|methodize|lastValue|isArray|input|undefined|expressions|not|innerHTML|descendant|nextSiblings|sibling|tags|table|styles|status|_object|toPaddedString|number|parts|blank|cumulativeOffset|bottom|before|script|stopObserving|__proto__|pointer|isButton|code|Abstract|submit|Request|readAttribute|unmark|isNumber|Number|adjacent|_cache|_returnOffset|Opera|evalScripts|update|offsetLeft|offsetTop|userAgent|navigator|currentStyle|wrap|_overflow|shift|decay|insertion|success|dispatchException|headers|end|getOffsetParent|offsetWidth|offsetHeight|fire|on|pluck|callee|findElement|ancestors|switch|getElements|Serializers|action|findAll|firstChild|empty|attrPresence|fragment|substring|getDimensions|self|Heading|destination|_insertionTranslations|tbody|appendChild|absolute|setOpacity|parseFloat|setStyle|static|right|delta|pos|nextAncestor|previousSiblings|receiver|evalJSON|getHeader|interpret|Responders|extras|exclusive|item|template|str|truncation|addMethods|without|set|classNames|class|contains|viewportOffset|positionedOffset|xcomp|ycomp|fireContentLoadedEvent|write|loaded|createEvent|Node|default|serialize|EventObserver|registerCallback|operators|ofType|only|nextElementSibling|previousElementSibling|pseudo|nodeClassName|laterSibling|next|patterns|criteria|following|capitalize|HTMLElement|ElementExtensions|removeChild|_flag|relative|sourceIndex|writeAttribute|onTimerEvent|getStatus|xml|state|contentType|post|_|toObject|responders|fillWith|ctx|expr|ClassNames|getElementsByClassName|parentElement|XPath|target|mode|after|descendantOf|onreadystatechange|addEventListener|getCacheForID|getWrappersForEventName|attachEvent|_extendedByPrototype|returnValue|which|optionValue|toQueryParams|location|tabIndex|hidden|invoke|typeName|inputs|data|findChildElements|findElements|mark|nodeIndex|hasClassName|token|eval|refresh|copy|SpecificElementExtensions|Simulated|TBODY|onlyIfAbsent|tr|insertBefore|html|times|_getContentFromAnonymousElement|00001|Gecko|read|_getAttr|title|none|auto|cssFloat|dim|border|padding|elementClassName|recursivelyCollect|curry|isSameOrigin|application|headerJSON|dispatch|port|asynchronous|onCreate|detect|escapeHTML|charAt|ScriptFragment|currentlyExecuting|classNameToRemove|classNameToAdd|all|cond|_getElementsByXPath|iter|cumulativeScrollOffset|relativize|prepare|Position|absolutize|offsetcache|findWrapper|getDOMEventName|getEventID|find|call|_prototypeEventID|relatedTarget|stop|button|onElementEvent|TimedObserver|execute|selected|textarea|enable|disable|reset|focus|firstByIndex|matchingInputs|submitted|removeAttribute|unique|startsWith|exclusions|indexed|indices|assertions|predicate|and|preceding|exclusion|or|tokens|dimensions|delete|tag|HTML|trans|TD|TableSection|has|fragments|replaceChild|cssText|getAttribute|alpha|stripAlpha|zoom|camelize|styleFloat|float|val|visible|forElement|offsets|overflow|_madePositioned|opera|visibility|elementStyle|css|range|query|updater|delay|Base|failure|Content|decodeURIComponent|getAllResponseHeaders|getResponseHeader|statusText|Response|Complete|exception|unfilterJSON|domain|protocol|evalJS|_complete|respondToReadyState|encoding|Version|onStateChange|get|isHash|activeRequestCount|succ|toTemplateReplacements|toQueryPair|lastIndexOf|_reverse|collect|falses|trues|found|slices|prepareReplacement|escapedString|character|camelized|len|Function|_methodized|superclass|subclass|remove|instanceMethods|clonePosition|deltaY|deltaX|withinIncludingScrolloffsets|includeScrollOffsets|pageYOffset|pageXOffset|toggle|complete|__onDOMContentLoaded|src|setInterval|clearInterval|eventType|dispatchEvent|dataavailable|HTMLEvents|destroyWrapper|removeEventListener|createWrapper|destroyCache|onunload|pageY|pageX|preventDefault||stopPropagation|TEXT_NODE|metaKey|buttonMap|radio|checkbox|registerFormCallbacks|Observer|PeriodicalExecuter|selectMany|selectOne|single|inputSelector|activate|clear|href|findFirstElement|sortBy|serializeElements|matchElements|scan|endsWith|enabled|getIndices|odd|even|total|operator|needle|byClassName|uTagName|previousSibling|_true|with|local|compileXPathMatcher|shouldUseXPath|compileMatcher|getHeight|getWidth|client|findDOMClass|TableCell|TH|TR|TFOOT|THEAD|TableCol|IMG|Mod|TEXTAREA|SELECT|getAttributeNode|td|outerHTML|createTextNode|_getAttrNode|htmlFor|100|parseInt|immediateDescendants|counter|identify|setHeight|setWidth|setTop|setLeft|BODY|_originalWidth|_originalHeight|_originalLeft|_originalTop|clientHeight|clientWidth|originalHeight|originalWidth|originalVisibility|originalPosition|originalDisplay|scrollTo|originalAncestor|compareDocumentPosition|nextNode|addClassName|removeClassName|setAttribute|descendants|firstDescendant|show|hide|ELEMENT_NODE|Updater|lastText|updateComplete|updateContent|sanitizeJSON|force|_getResponseJSON|escape|JSON|_getHeaderJSON|getStatusText|responseXML|Events|onException|evalResponse|interpolate|requestHeaders|2005|overrideMimeType|XMLHttpRequest|setRequestHeaders|KHTML|Safari|getTransport|register|XMLHTTP|ActiveXObject||these|Try|ObjectRange|from|encodeURIComponent|radix|arrayLength|forEach|size|uniq|sorted|inline|flatten|any|collections|eachSlice|Pattern|exec|comp|lt|amp|unescapeHTML|isJSON|sanitize|JSONFilter|sub|useDoubleQuotes|charCodeAt|specialChar|separator|stripTags|extractScripts|matchOne|scriptTag|matchAll|img|1000|lambda|timeout|argumentNames|instanceof|valueOf|subclasses|MobileSafari|add|page|realOffset|horizontal|vertical|overlap|within|instead|use|deprecated|is|Error|After|Bottom|Top|Before|Insertion|childOf||Toggle|DOMContentLoaded|load|dom|fireEvent|ondataavailable|createEventObject|initEvent|detachEvent|srcElement|cancelBubble|stopped|pointerY|pointerX|clientY|clientX|isRightClick|isMiddleClick|isLeftClick|mouseout|fromElement|mouseover|KEY_INSERT|KEY_PAGEDOWN|KEY_PAGEUP|KEY_END|KEY_HOME|KEY_DELETE|KEY_DOWN|KEY_RIGHT|KEY_UP|KEY_LEFT|KEY_ESC|KEY_RETURN|KEY_TAB|KEY_BACKSPACE|change|click|selectedIndex|one|Field|blur|present|setValue|focusFirstElement|getInputs|selectorType|abled|dis|mod|translate|starts|getScrollOffsets|inner|viewport|IFrame|IFRAME|FrameSet|FRAMESET|TableRow||COLGROUP|COL|TableCaption|CAPTION|Image|Anchor|DEL|INS|Quote|H6|H5|H4|H3|H2|H1|Directory|DIR|DList|DL|OList|OL|UList|UL|FieldSet|FIELDSET|Paragraph|TextArea|OptGroup|OPTGROUP|INPUT|FORM|specified|TABLE|999999|rv|onchange|onselect|onreset|onsubmit|onkeyup|onkeydown|onkeypress|onblur|onfocus|onmouseout|onmousemove|onmouseover|onmouseup|onmousedown|ondblclick|onclick|onload|multiple|readonly|longDesc|readOnly|maxLength|encType|accessKey|dateTime|vAlign|rowSpan|colSpan|cellSpacing|cellspacing|cellPadding|cellpadding|normal|hasLayout|fixed|childElements|getElementsBySelector|undoClipping|makeClipping|undoPositioned|makePositioned|block|getOpacity|getComputedStyle|defaultView|cleanWhitespace|toggleClassName|anonymous_element_|previous|down|up|siblings|createContextualFragment|selectNode|createRange|ownerDocument|cloneNode|NOTATION_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_NODE|COMMENT_NODE|PROCESSING_INSTRUCTION_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|CDATA_SECTION_NODE|ATTRIBUTE_NODE|snapshotItem|snapshotLength|ORDERED_NODE_SNAPSHOT_TYPE|XPathResult|getElementById|clearTimeout|PeriodicalUpdater|getAllHeaders|responseJSON|Interactive|Loaded|Loading|Uninitialized|https|ecma|java||Failure|Success|300|200|setRequestHeader|close|Connection|charset|javascript|Accept||With|Requested|send|postBody|open|Konqueror|_method|UTF|urlencoded|www|unregister|Microsoft|Msxml2|merge|unset|Math|floor|ceil|round|abs|isFinite|toColorPart|isNaN|intersect|reduce|compact|NodeList|some|every|entries|member|pop|zip|sort|reject|partition|min|max|inGroupsOf|grep|parseQuery|formed|Badly|SyntaxError|Eaeflnr|u00|x1f|x00|dasherize|underscore|fromCharCode|im|truncate|finally|getUTCSeconds|getUTCMinutes|getUTCHours|getUTCDate|getUTCMonth|getUTCFullYear|Date|01|setTimeout|bindAsEventListener|splice|boolean|unknown|RangeError|constructor|secure|Mobile|Apple|AppleWebKit'.split('|'),0,{})) \ No newline at end of file diff --git a/tools/qtestlib/chart/benchmark_template.html b/tools/qtestlib/chart/benchmark_template.html deleted file mode 100644 index a7e48be..0000000 --- a/tools/qtestlib/chart/benchmark_template.html +++ /dev/null @@ -1,202 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title>Title</title> - <! Javascript Here> - - <script type="text/javascript"> - -function offsetLabels(labels, offset) -{ - var copy = new Array(); - for (key in labels) { - copy[key] = new Array(labels[key][0] + 0.25, labels[key][1]); - } - return copy; -} - -function createLogDataSet(inDataSet) -{ - var logDataSet = {}; - logDataSet.label = inDataSet.label; - logDataSet.data = []; - - if (!inDataSet.data) - return logDataSet; - - var length = inDataSet.data.length; - - for (var i = 0; i < length; i++) { - logDataSet.data[i] = []; - logDataSet.data[i][0] = inDataSet.data[i][0]; - logDataSet.data[i][1] = Math.log(inDataSet.data[i][1]); - } - return logDataSet; -} - - -function createLogData(inData) -{ - var logData = []; - - // foreach data set; - var length = inData.length; - for (var i = 0; i < length; ++i) { - logData[i] = createLogDataSet(inData[i]); - } - return logData; -} - -function createChart() { -// alert("create chart" + this.chartId) - - var dataSet; - - if (this.useLinearScale) - dataSet = this.selectedDataset; - else - dataSet = createLogData(this.selectedDataset); - - if (this.useLineChart) { - var f = Flotr.draw($(this.chartId), - dataSet, - { legend:{ backgroundColor: '#D2E8FF' } - , xaxis: { ticks: this.labels, noTicks : 10 } - , mouse: { - track: true, - lineColor: 'purple', - sensibility: 1, - trackDecimals: 2, - trackFormatter: function(obj){ return 'x = ' + obj.x +', y = ' + obj.y; } - } - }); - - } else { - var f = Flotr.draw($(this.chartId), - dataSet, - { legend:{ backgroundColor: '#D2E8FF'} - , bars: { show: true, lineWidth: 1, barWidth: this.barWidth } - , xaxis: { ticks: offsetLabels(this.labels, chartOptions.tickOffset), noTicks : 10 } - }); - } -} - -function checkform() -{ -// alert("check form " + this.form.id + " " + this.chartId); - var field = this.form.list - - // Apparently list of lenght one is not a list... - // Display the entire chart if there is only one data series. - if (!field.length) { - this.createChart(); - return; - } - - this.selectedDataset = []; - var data = []; - var index = 0; - - for (i = 0; i < field.length; i++) { - if (field[i].checked == true) { - this.selectedDataset[index++] = this.dataset[i]; - } else { - this.selectedDataset[index++] = []; - } - } - this.createChart(); -} - -function createElement(nodeName, name) { - var node; - try { - node = document.createElement("<"+nodeName+" name="+name+">"); - } catch (e) { - node = document.createElement(nodeName); - node.name = name; - } - return node; -} - -function createFormSelector(form, value, text, type) -{ - var selector = createElement('input', 'list'); - selector.type = type; - selector.defaultChecked = true; - selector.value = value; - - form.appendChild(selector); - form.appendChild(document.createTextNode(text)); - form.appendChild(document.createElement("BR")); -} - -function createCheckBox(form, value, text) -{ - createFormSelector(form, value, text, "checkbox"); -} - -function createRadioButton(form, value, text) -{ - createFormSelector(form, value, text, "radio"); -} - -function buildSeriesSelector(form, chartOptions) -{ -// alert("form" + form.id + " " + chartOptions.chartId); - var series = chartOptions.seriesLabels; - form.onclick = function() { /*alert("fn " + chartOptions.chartId);*/ chartOptions.checkform() }; - for (s = 0; s < series.length; ++s) { - createCheckBox(form, s, series[s]); - } -} - -function buildChartTypeSelector() -{ - createRadioButton(this.chartTypeForm, 0, "Bar Chart"); - createRadioButton(this.chartTypeForm, 1, "Line Chart"); - - var field = this.chartTypeForm.list; - if (this.useLineChart) - field[1].checked = true; - else - field[0].checked = true; - - var chartOptions = this; - this.chartTypeForm.onclick = function() { - var field = chartOptions.chartTypeForm.list; - - chartOptions.useLineChart = (field[1].checked == true); - chartOptions.checkform(); - }; -} - -function buildScaleSelector() -{ - createRadioButton(this.scaleForm, 0, "Linear Scale"); - createRadioButton(this.scaleForm, 1, "Logarithmic Scale"); - - var field = this.scaleForm.list; - field[0].checked = true; - field[1].checked = false; - - var chartOptions = this; - this.scaleForm.onclick = function() { - var field = chartOptions.scaleForm.list; - - chartOptions.useLinearScale = (field[0].checked == true); - chartOptions.checkform(); - }; -} - - - </script> - </head> - <body> - <h2> - <! Title Here> - </h2> - <! Description Here> - <! Chart Here> - </body> -</html> diff --git a/tools/qtestlib/chart/chart.pro b/tools/qtestlib/chart/chart.pro deleted file mode 100644 index 7328e5d..0000000 --- a/tools/qtestlib/chart/chart.pro +++ /dev/null @@ -1,16 +0,0 @@ -HEADERS += $$PWD/database.h $$PWD/reportgenerator.h -SOURCES += $$PWD/database.cpp $$PWD/reportgenerator.cpp -SOURCES += main.cpp -RESOURCES = $$PWD/chart.qrc - -QT += sql xml -CONFIG += console -CONFIG -= app_bundle - - -TEMPLATE = app -DEPENDPATH += . -INCLUDEPATH += . -TARGET = chart - - diff --git a/tools/qtestlib/chart/chart.qrc b/tools/qtestlib/chart/chart.qrc deleted file mode 100644 index 90f782e..0000000 --- a/tools/qtestlib/chart/chart.qrc +++ /dev/null @@ -1,9 +0,0 @@ - <!DOCTYPE RCC><RCC version="1.0"> - <qresource> - <file>chart_template.html</file> - <file>benchmark_template.html</file> - <file>3rdparty/excanvas.js</file> - <file>3rdparty/flotr.js</file> - <file>3rdparty/prototype.js</file> - </qresource> - </RCC> \ No newline at end of file diff --git a/tools/qtestlib/chart/chart_template.html b/tools/qtestlib/chart/chart_template.html deleted file mode 100644 index 0a4b81a..0000000 --- a/tools/qtestlib/chart/chart_template.html +++ /dev/null @@ -1,110 +0,0 @@ - <div> - <h3> - <! Test Name Here> - </h3> - <div id= - <! Chart ID Here> - style="width:900px;height:350px;"></div> - - <table cellspacing = "10"><tr> - - <td valign = "top"> - <form id= - <! Form ID Here> - <b> Data series </b><br> - </form> - </td> - - <td valign = "top"> - <form id= - <! ChartTypeForm ID Here> - <b> Chart Type </b><br> - </form> - </td> - - <td valign = "top"> - <form id= - <! ScaleForm ID Here> - <b> Scale </b><br> - </form> - </td> - - </tr></table> - - </div> - <script type="text/javascript"> - var chartId = - <! Chart ID Here> - ; - - var chartType = - <! Chart Type Here> - ; - - var seriesLabels = - <! Series Labels Here> - - var dataset = []; - <! Data Goes Here> - - var labels = [ - <! Labels Go Here> - ]; - - var colors = new Hash({ - <! ColorScheme Here> - }); - - var shouldFill = - <! Fill Setting Here> - ; - - var form = document.getElementById( - <! Form ID Here> - ); - - var chartTypeForm = document.getElementById( - <! ChartTypeForm ID Here> - ); - - var scaleForm = document.getElementById( - <! ScaleForm ID Here> - ); - - - - var chartOptions = new Object(); - chartOptions.chartId = chartId; - chartOptions.chartType = chartType; - chartOptions.dataset = dataset; - chartOptions.colors = colors; - chartOptions.shouldFill = shouldFill; - chartOptions.labels = labels; - chartOptions.seriesLabels = seriesLabels; - chartOptions.useLineChart = true; - chartOptions.useLinearScale = true; - chartOptions.createChart = createChart; - - chartOptions.ticks = labels; - chartOptions.barWidth = 0.5; - chartOptions.tickOffset = 0.25; - - chartOptions.useLineChart = - <! Use Line Chart Here> - - chartOptions.chartTypeForm = chartTypeForm; - chartOptions.buildChartTypeSelector = buildChartTypeSelector; - chartOptions.buildChartTypeSelector(); - - chartOptions.scaleForm = scaleForm; - chartOptions.buildScaleSelector = buildScaleSelector; - chartOptions.buildScaleSelector(); - - chartOptions.selectedDataset = dataset; - chartOptions.checkform = checkform; - chartOptions.form = form; - chartOptions.buildSeriesSelector = buildSeriesSelector; - chartOptions.buildSeriesSelector(form, chartOptions); - chartOptions.checkform(); - </script> - diff --git a/tools/qtestlib/chart/database.cpp b/tools/qtestlib/chart/database.cpp deleted file mode 100644 index 1f1f7da..0000000 --- a/tools/qtestlib/chart/database.cpp +++ /dev/null @@ -1,324 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "database.h" -#include <QtGui> -#include <QtXml> - -QT_BEGIN_NAMESPACE -// Database schema definition and open/create functions - -QString resultsTable = QString("(TestName varchar, TestCaseName varchar, Series varchar, Idx varchar, ") + - QString("Result varchar, ChartType varchar, Title varchar, ChartWidth varchar, ") + - QString("ChartHeight varchar, TestTitle varchar, QtVersion varchar, Iterations varchar") + - QString(")"); - -void execQuery(QSqlQuery query, bool warnOnFail) -{ - bool ok = query.exec(); - if (!ok && warnOnFail) { - qDebug() << "FAIL:" << query.lastQuery() << query.lastError().text(); - } -} - -void execQuery(const QString &spec, bool warnOnFail) -{ - QSqlQuery query; - query.prepare(spec); - execQuery(query, warnOnFail); -} - -QSqlDatabase openDataBase(const QString &databaseFile) -{ -// qDebug() << "open data base"; - QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); - db.setDatabaseName(databaseFile); - bool ok = db.open(); - if (!ok) - qDebug() << "FAIL: could not open database"; - return db; -} - -QSqlDatabase createDataBase(const QString &databaseFile) -{ -// qDebug() << "create data base"; - QSqlDatabase db = openDataBase(databaseFile); - - execQuery("DROP TABLE Results", false); - execQuery("CREATE TABLE Results " + resultsTable); - - return db; -} - -struct Tag -{ - Tag(QString key, QString value) - : key(key.trimmed()), value(value.trimmed()) - { - - } - - QString key; - QString value; -}; - -QList<Tag> parseTag(const QString &tag) -{ - // Format: key1=value ; key2=value - // key1=value key2=value - // value--value - - QList<Tag> keyValues; - - QString keyValuePairSeparator(""); - if (tag.contains(";")) - keyValuePairSeparator = ';'; - if (tag.contains("--")) - keyValuePairSeparator = "--"; - - foreach (QString keyValue, tag.split(keyValuePairSeparator)) { - if (keyValue.contains("=")) { - QStringList parts = keyValue.split("="); - keyValues.append(Tag(parts.at(0), parts.at(1))); - } else { - keyValues.append(Tag(QString(), keyValue)); // no key, just a value. - } - } - - return keyValues; -} - -void loadXml(const QStringList &fileNames) -{ - foreach(const QString &fileName, fileNames) { - QFileInfo fi( fileName ); - loadXml(fileName, fi.fileName()); - } -} - -void loadXml(const QString &fileName, const QString &context) -{ - QFile f(fileName); - f.open(QIODevice::ReadOnly); - loadXml(f.readAll(), context); -} - -void loadXml(const QByteArray &xml, const QString& context) -{ - QDomDocument doc; - - int line; - int col; - QString errorMsg; - if (doc.setContent(xml, &errorMsg, &line, &col) == false) { - qDebug() << "dom setContent failed" << line << col << errorMsg; - } - - // Grab "Value" from <Environment><QtVersion>Value</QtVersion></Environment> - QString qtVersion = doc.elementsByTagName("Environment").at(0).toElement().elementsByTagName("QtVersion") - .at(0).toElement().childNodes().at(0).nodeValue(); - QString testCase = doc.elementsByTagName("TestCase").at(0).toElement().attributeNode("name").value(); - -// qDebug() << "qt version" << qtVersion; -// qDebug() << "test case" << testCase; - - DataBaseWriter writer; - writer.testName = testCase; // testCaseName and testName is mixed up in the database writer class - writer.qtVersion = qtVersion; - - QDomNodeList testFunctions = doc.elementsByTagName("TestFunction"); - for (int i = 0; i < testFunctions.count(); ++i) { - QDomElement function = testFunctions.at(i).toElement(); - QString functionName = function.attributeNode("name").value(); - writer.testCaseName = functionName; // testCaseName and testName is mixed up in the database writer class - -// qDebug() << "fn" << functionName; - - QDomNodeList results = function.elementsByTagName("BenchmarkResult"); - for (int j = 0; j < results.count(); ++j) { - QDomElement result = results.at(j).toElement(); - QString tag = result.attributeNode("tag").value(); - - Q_UNUSED(context); -// if (!context.isEmpty()) -// tag += QString(" (%1)").arg(context); - - QString series; - QString index; - - // By convention, "--" separates series and indexes in tags. - if (tag.contains("--")) { - QStringList parts = tag.split("--"); - series = parts.at(0); - index = parts.at(1); - } else { - series = tag; - } - - QString resultString = result.attributeNode("value").value(); - QString iterationCount = result.attributeNode("iterations").value(); - double resultNumber = resultString.toDouble() / iterationCount.toDouble(); - writer.addResult(series, index, QString::number(resultNumber), iterationCount); -// qDebug() << "result" << series << index << tag << resultString << iterationCount; - } - } -} - -void displayTable(const QString &table) -{ - QSqlTableModel *model = new QSqlTableModel(); - model->setTable(table); - model->select(); - QTableView *view = new QTableView(); - view->setModel(model); - view->show(); -} - -void printDataBase() -{ - QSqlQuery query; - query.prepare("SELECT TestName, TestCaseName, Result FROM Results;"); - bool ok = query.exec(); - qDebug() << "printDataBase ok?" << ok; - - query.next(); - qDebug() << ""; - qDebug() << "Benchmark" << query.value(0).toString(); - query.previous(); - - while (query.next()) { - // QString country = query.value(fieldNo).toString(); - // doSomething(country); - qDebug() << "result for" << query.value(1).toString() << query.value(2).toString(); - } -} - -// TempTable implementation - -static int tempTableIdentifier = 0; -TempTable::TempTable(const QString &spec) -{ - m_name = "TempTable" + QString::number(tempTableIdentifier++); - execQuery("CREATE TEMP TABLE " + m_name + " " + spec); -} - -TempTable::~TempTable() -{ - // ref count and drop it? -} - -QString TempTable::name() -{ - return m_name; -} - -// DataBaseWriter implementation - -DataBaseWriter::DataBaseWriter() -{ - disable = false; - chartSize = QSize(800, 400); - databaseFileName = ":memory:"; - qtVersion = QT_VERSION_STR; -} - -void DataBaseWriter::openDatabase() -{ - db = openDataBase(databaseFileName); -} - -void DataBaseWriter::createDatabase() -{ - db = createDataBase(databaseFileName); -} - -void DataBaseWriter::beginTransaction() -{ - if (db.transaction() == false) { - qDebug() << db.lastError(); - qFatal("no transaction support"); - } -} - -void DataBaseWriter::commitTransaction() -{ - db.commit(); -} - -void DataBaseWriter::rollbackTransaction() -{ - db.rollback(); -} - -void DataBaseWriter::addResult(const QString &result) -{ - return addResult(QString(), QString(), result); -} - -void DataBaseWriter::addResult(const QString &series, const QString &index, const QString &result, const QString &iterations) -{ - if (disable) - return; - - QSqlQuery query; - - query.prepare("INSERT INTO Results (TestName, TestCaseName, Series, Idx, Result, ChartWidth, ChartHeight, Title, TestTitle, ChartType, QtVersion, Iterations) " - "VALUES (:TestName, :TestCaseName, :Series, :Idx, :Result, :ChartWidth, :ChartHeight, :Title, :TestTitle, :ChartType, :QtVersion, :Iterations)"); - query.bindValue(":TestName", testName); - query.bindValue(":TestCaseName", testCaseName); - query.bindValue(":Series", series); - query.bindValue(":Idx", index); - query.bindValue(":Result", result); - query.bindValue(":ChartWidth", chartSize.width()); - query.bindValue(":ChartHeight", chartSize.height()); - query.bindValue(":Title", chartTitle); - query.bindValue(":TestTitle", testTitle); - query.bindValue(":QtVersion", qtVersion); - query.bindValue(":Iterations", iterations); - - - if (chartType == LineChart) - query.bindValue(":ChartType", "LineChart"); - else - query.bindValue(":ChartType", "BarChart"); - execQuery(query); -} - -QT_END_NAMESPACE diff --git a/tools/qtestlib/chart/database.h b/tools/qtestlib/chart/database.h deleted file mode 100644 index 9a67490..0000000 --- a/tools/qtestlib/chart/database.h +++ /dev/null @@ -1,105 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef DATABASE_H -#define DATABASE_H - -#include <QtCore> -#include <QtSql> -#include <QtCore/qglobal.h> - -QT_BEGIN_NAMESPACE - -extern QString resultsTable; -QSqlDatabase openDataBase(const QString &databaseFile = "database"); -QSqlDatabase createDataBase(const QString &databaseFile = "database"); - -void loadXml(const QStringList &fileNames); -void loadXml(const QString &fileName, const QString &context=QString::null); -void loadXml(const QByteArray &xml, const QString &context=QString::null); - -void execQuery(QSqlQuery query, bool warnOnFail = true); -void execQuery(const QString &spec, bool warnOnFail = true); -void printDataBase(); -void displayTable(const QString &table); - - -class TempTable -{ -public: - TempTable(const QString &spec); - ~TempTable(); - QString name(); -private: - QString m_name; -}; - -enum ChartType { BarChart, LineChart }; -class DataBaseWriter -{ -public: - DataBaseWriter(); - QString databaseFileName; - QString testTitle; - QString testName; - QString testCaseName; - ChartType chartType; - QSize chartSize; - QString chartTitle; - QString qtVersion; - bool disable; - - void openDatabase(); - void createDatabase(); - - void beginTransaction(); - void commitTransaction(); - void rollbackTransaction(); - - void addResult(const QString &result); - void addResult(const QString &series , const QString &index, const QString &result, const QString &iterations = QLatin1String("1")); - - QSqlDatabase db; -}; - -QT_END_NAMESPACE - -#endif - diff --git a/tools/qtestlib/chart/main.cpp b/tools/qtestlib/chart/main.cpp deleted file mode 100644 index 14734d9..0000000 --- a/tools/qtestlib/chart/main.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include <QtCore> -#include <QtSql> -#include <database.h> -#include <reportgenerator.h> - -int main(int argc, char **argv) -{ - QCoreApplication app(argc, argv); - - QSqlDatabase db = createDataBase(":memory:"); - - if (argc < 2) { - - // Try stdin - QFile in; - in.open(stdin, QIODevice::ReadOnly); - QByteArray xml = in.readAll(); - - if (xml.isEmpty()) { - qDebug() << "Usage: chart xml-file [xml-file2 xml-file3 ...]"; - qDebug() << "See also QTestLib's \"-chart\" option"; - return 0; - } else { - loadXml(xml, QString()); - } - } - - QStringList files; - for (int i = 1; i < argc; i++) { - QString file = QString::fromLocal8Bit(argv[i]); - files += file; - } - - if (files.isEmpty() == false) - loadXml(files); - - ReportGenerator reportGenerator; - reportGenerator.writeReports(); - - db.close(); -} - diff --git a/tools/qtestlib/chart/reportgenerator.cpp b/tools/qtestlib/chart/reportgenerator.cpp deleted file mode 100644 index c3b42a0..0000000 --- a/tools/qtestlib/chart/reportgenerator.cpp +++ /dev/null @@ -1,563 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "reportgenerator.h" - -// Report generator file utility functions -QT_BEGIN_NAMESPACE - -QList<QByteArray> readLines(const QString &fileName) -{ - QList<QByteArray> lines; - QFile f(fileName); - f.open(QIODevice::ReadOnly | QIODevice::Text); - while(!f.atEnd()) - lines.append(f.readLine()); - return lines; -} - -void writeLines(const QString &fileName, const QList<QByteArray> &lines) -{ - QFile f(fileName); - f.open(QIODevice::WriteOnly | QIODevice::Text); - foreach(const QByteArray line, lines) - f.write(line); -} - -void writeFile(const QString &fileName, const QByteArray &contents) -{ - QFile f(fileName); - f.open(QIODevice::WriteOnly | QIODevice::Append); - f.write(contents); -} - -// Report generator database utility functions - -QStringList select(const QString &field, const QString &tableName) -{ - QSqlQuery query; - query.prepare("SELECT DISTINCT " + field +" FROM " + tableName); - bool ok = query.exec(); - Q_UNUSED(ok); -// if (!ok) -// qDebug() << "select unique ok" << ok; - - QStringList values; - while (query.next()) { - values += query.value(0).toString(); - } - return values; -} - -QStringList selectUnique(const QString &field, const QString &tableName) -{ - QSqlQuery query; - query.prepare("SELECT DISTINCT " + field +" FROM " + tableName); - bool ok = query.exec(); - Q_UNUSED(ok); -// if (!ok) -// qDebug() << "select unique ok" << ok; - - QStringList values; - while (query.next()) { - values += query.value(0).toString(); - } - return values; -} - -QSqlQuery selectFromSeries(const QString &serie, const QString &column, const QString &tableName, const QString &seriesName) -{ - QSqlQuery query; - if (serie == QString()) - query.prepare("SELECT " + column + " FROM " + tableName); - else - query.prepare("SELECT " + column + " FROM " + tableName + " WHERE " + seriesName + "='" + serie + "'"); - /*bool ok =*/ query.exec(); - - -// qDebug() << "selectDataFromSeries ok?" << ok << query.size(); - return query; -} - -int countDataFromSeries(const QString &serie, const QString &tableName, const QString &seriesName) -{ -// qDebug() << "count" << serie << "in" << tableName; - QSqlQuery query; - query.prepare("SELECT COUNT(Result) FROM " + tableName + " WHERE" + seriesName + "='" + serie + "'"); - bool ok = query.exec(); - if (!ok) { - qDebug() << "query fail" << query.lastError(); - } - - qDebug() << "countDataFromSeries ok?" << ok << query.size(); - query.next(); - return query.value(0).toInt(); -} - -// Report generator output utility functions - -QList<QByteArray> printData(const QString &tableName, const QString &seriesName, const QString &indexName) -{ - QList<QByteArray> output; - QStringList series = selectUnique(seriesName, tableName); -// qDebug() << "series" << series; - if (series.isEmpty()) - series+=QString(); - - foreach (QString serie, series) { - QSqlQuery data = selectFromSeries(serie, "Result", tableName, seriesName); - QSqlQuery labels = selectFromSeries(serie, indexName, tableName, seriesName); - - QByteArray dataLine = "dataset.push({ data: ["; - int i = 0; - while (data.next() && labels.next()) { - QString label = labels.value(0).toString(); - - QString labelString; - bool ok; - label.toInt(&ok); - if (ok) - labelString = label; - // else - labelString = QString::number(i); - - dataLine += ("[" + labelString + ", " + data.value(0).toString() + "]"); - - ++i; - if (data.next()) { - dataLine += ", "; - data.previous(); - } - } - dataLine += "], label : \"" + serie + "\" });\n"; - output.append(dataLine); - } - return output; -} - -// Determines if a line chart should be used. Returns true if the first label is numerical. -bool useLineChart(const QString &tableName, const QString &seriesName, const QString &indexName) -{ - QList<QByteArray> output; - QStringList series = selectUnique(seriesName, tableName); - if (series.isEmpty()) - return false; - - QSqlQuery data = selectFromSeries(series[0], indexName, tableName, seriesName); - - if (data.next()) { - QString label = data.value(0).toString(); - bool ok; - label.toDouble(&ok); - return ok; - } - - return false; -} - -int countLabels(const QString &tableName, const QString &seriesName, const QString &indexName) -{ - QStringList series = selectUnique(seriesName, tableName); - if (series.isEmpty()) - return 0; - QSqlQuery data = selectFromSeries(series[0], indexName, tableName, seriesName); - int count = 0; - while (data.next()) - count++; - - return count; -} - - -QList<QByteArray> printLabels(const QString &tableName, const QString &seriesName, const QString &indexName) -{ - QList<QByteArray> output; - QStringList series = selectUnique(seriesName, tableName); - if (series.isEmpty()) - return QList<QByteArray>(); - - QSqlQuery data = selectFromSeries(series[0], indexName, tableName, seriesName); - - int count = 0; - while (data.next()) - count++; - - data.first(); data.previous(); - - const int labelCount = 10; - int skip = count / labelCount; - - QByteArray dataLine; - int i = 0; - while (data.next()) { - dataLine += ("[" + QByteArray::number(i) + ",\"" + data.value(0).toString() + "\"]"); - ++i; - if (data.next()) { - dataLine += ", "; - data.previous(); - } - - // skip labels. - i += skip; - for (int j = 0; j < skip; ++j) - data.next(); - } - dataLine += "\n"; - output.append(dataLine); - return output; -} - -QByteArray printSeriesLabels(const QString &tableName, const QString &seriesColumnName) -{ - QByteArray output; - QStringList series = selectUnique(seriesColumnName, tableName); - if (series.isEmpty()) - return "[];\n"; - - output += "["; - - foreach(const QString &serie, series) { - output += "\"" + serie.toLocal8Bit() + "\","; - } - output.chop(1); //remove last comma - output += "]\n"; - return output; -} - -void addJavascript(QList<QByteArray> *output, const QString &fileName) -{ - output->append("<script type=\"text/javascript\">\n"); - (*output) += readLines(fileName); - output->append("</script>\n"); -} - -void addJavascript(QList<QByteArray> *output) -{ - addJavascript(output, ":3rdparty/prototype.js"); - addJavascript(output, ":3rdparty/excanvas.js"); - addJavascript(output, ":3rdparty/flotr.js"); -} - -TempTable selectRows(const QString &sourceTable, const QString &column, const QString &value) -{ - TempTable tempTable(resultsTable); - - QSqlQuery query; - query.prepare("INSERT INTO " + tempTable.name() + " SELECT * FROM " + sourceTable + - " WHERE " + column + "='" + value + "'"); - execQuery(query); - -// displayTable(tempTable.name()); - - return tempTable; -} - -TempTable mergeVersions(const QString &) -{ - -// QtVersion - As series -// Result - (free) -// Idx - match -// TestName - match -// CaseName - match - -// (Series - average) -/* - TempTable tempTable(resultsTable); - QStringlist versions = selectUnique("QtVersions", sourceTable); - - QSqlQuery oneVersion = select(WHERE QtVersions = versions.at(0)) - while (oneVersion.next) { - QSqlQuery otherversions = selectMatches(QStringList() << "TestName" << "TestCaseName" << "Idx") - while (otherversions.next) { - insert(temptable - } - } -*/ - return TempTable(""); -} - -QStringList fieldPriorityList = QStringList() << "Idx" << "Series" << "QtVersion"; - -struct IndexSeriesFields -{ - QString index; - QString series; -}; - -IndexSeriesFields selectFields(const QString &table) -{ - IndexSeriesFields fields; - foreach (QString field, fieldPriorityList) { -// qDebug() << "unique" << field << selectUnique(field, table).count(); - QStringList rows = selectUnique(field, table); - - if (rows.count() <= 1 && rows.join("") == QString("")) - continue; - - if (fields.index.isEmpty()) { - fields.index = field; - continue; - } - - if (fields.series.isEmpty()) { - fields.series = field; - break; - } - } - return fields; -} - -TempTable selectTestCase(const QString &testCase, const QString &sourceTable) -{ - return selectRows(sourceTable, QLatin1String("TestCaseName"), testCase); -} - -QString field(const QSqlQuery &query, const QString &name) -{ - return query.value(query.record().indexOf(name)).toString(); -} - -QSqlQuery selectAllResults(const QString &tableName) -{ - QSqlQuery query; - query.prepare("SELECT * FROM " + tableName); - execQuery(query); - return query; -} - -void printTestCaseResults(const QString &testCaseName) -{ -// QStringList testCases = selectUnique("TestCaseName", "Results"); - qDebug() << ""; - qDebug() << "Results for benchmark" << testCaseName; - TempTable temptable = selectTestCase(testCaseName, "Results"); - QSqlQuery query = selectAllResults(temptable.name()); - if (query.isActive() == false) { - qDebug() << "No results"; - return; - } - - query.next(); - - if (field(query, "Idx") == QString()) { - do { - qDebug() << "Result:" << field(query, "result"); - } while (query.next()); - } else if (field(query, "Series") == QString()) { - do { - qDebug() << field(query, "Idx") << " : " << field(query, "result"); - } while (query.next()); - } else { - do { - qDebug() << field(query, "Series") << " - " << field(query, "Idx") << " : " << field(query, "result"); - } while (query.next()); - } - - qDebug() << ""; -} - - -// ReportGenerator implementation - -ReportGenerator::ReportGenerator() -{ - m_colorScheme = QList<QByteArray>() << "#a03b3c" << "#3ba03a" << "#3a3ba0" << "#3aa09f" << "#39a06b" << "#a09f39"; -} - - -void ReportGenerator::writeReport(const QString &tableName, const QString &fileName, bool combineQtVersions) -{ - QStringList testCases = selectUnique("TestCaseName", tableName); - QList<QByteArray> lines = readLines(":benchmark_template.html"); - QList<QByteArray> output; - - foreach(QByteArray line, lines) { - if (line.contains("<! Chart Here>")) { - foreach (const QString testCase, testCases) { - TempTable testCaseTable = selectTestCase(testCase, tableName); - output += writeChart(testCaseTable.name(), combineQtVersions); - } - } else if (line.contains("<! Title Here>")) { - QStringList name = selectUnique("TestName", tableName); - output += "Test: " + name.join("").toLocal8Bit(); - } else if (line.contains("<! Description Here>")) { - output += selectUnique("TestTitle", tableName).join("").toLocal8Bit(); - } else if (line.contains("<! Javascript Here>")){ - addJavascript(&output); - } else { - output.append(line); - } - } - - m_fileName = fileName; - - writeLines(m_fileName, output); - qDebug() << "Wrote report to" << m_fileName; -} - -void ReportGenerator::writeReports() -{ -/* - QStringList versions = selectUnique("QtVersion", "Results"); - - // qDebug() << "versions" << versions; - - foreach (QString version, versions) { - QString fileName = "results-" + version + ".html"; - TempTable versionTable = selectRows("Results", "QtVersion", version); - writeReport(versionTable.name(), fileName, false); - } -*/ - writeReport("Results", "results.html", false); -} - -QString ReportGenerator::fileName() -{ - return m_fileName; -} - -QList<QByteArray> ReportGenerator::writeChart(const QString &tableName, bool combineQtVersions) -{ - QSqlQuery query; - query.prepare("SELECT TestName, Series, Idx, Result, ChartWidth, ChartHeight, Title, TestCaseName, ChartType, QtVersion FROM " + tableName); - execQuery(query); - - QString seriesName; - QString indexName; - - if (combineQtVersions) { - IndexSeriesFields fields = selectFields(tableName); - seriesName = fields.series; - indexName = fields.index; - } else { - seriesName = "Series"; - indexName = "Idx"; - } - - QList<QByteArray> data = printData(tableName, seriesName, indexName); - QList<QByteArray> labels = printLabels(tableName, seriesName, indexName); - QByteArray seriesLabels = printSeriesLabels(tableName, seriesName); - QByteArray useLineChartString = useLineChart(tableName, seriesName, indexName) ? "true" : "false" ; - - query.next(); - QString testName = query.value(0).toString(); - QSize size(query.value(4).toInt(), query.value(5).toInt()); -// QString title = "Test Function: " + query.value(7).toString() + " - " + query.value(6).toString(); - QString title = "Test Function: " + query.value(7).toString(); - QString chartId = "\"" + query.value(7).toString() + "\""; - QString formId = "\"" + query.value(7).toString() + "form\""; - QString chartTypeFormId = "\"" + query.value(7).toString() + "chartTypeform\""; - QString scaleFormId = "\"" + query.value(7).toString() + "scaleform\""; - QString type = query.value(8).toString(); - - // Skip chart generation if there isn't enough data. - if (countLabels(tableName, seriesName, indexName) < 2) { - qDebug() << title.toAscii() << "No chartable data. (See the \"series\" test function" - << "in examples/qtestlib/tutorial5 for an example.) "; - return QList<QByteArray>() << title.toAscii() << " (no chartable data)"; // TODO: genrate text table here. - } - -// QString qtVersion = query.value(9).toString(); - query.previous(); - - QString sizeString = "height=\"" + QString::number(size.height()) + "\" width=\"" + QString::number(size.width()) + "\""; - - QString fillString; - if (type == "LineChart") - fillString = "false"; - else - fillString = "true"; - - QByteArray colors = printColors(tableName, seriesName); - - QList<QByteArray> lines = readLines(":chart_template.html"); - QList<QByteArray> output; - - foreach(QByteArray line, lines) { - if (line.contains("<! Test Name Here>")) { - output.append(title.toLocal8Bit()); - } else if (line.contains("<! Chart ID Here>")) { - output += chartId.toLocal8Bit(); - } else if (line.contains("<! Form ID Here>")) { - output += formId.toLocal8Bit(); - } else if (line.contains("<! ChartTypeForm ID Here>")) { - output += chartTypeFormId.toLocal8Bit(); - } else if (line.contains("<! ScaleForm ID Here>")) { - output += scaleFormId.toLocal8Bit(); - } else if (line.contains("<! Size>")) { - output += sizeString.toLocal8Bit(); - } else if (line.contains("<! ColorScheme Here>")) { - output += colors; - } else if (line.contains("<! Data Goes Here>")) { - output += data; - } else if (line.contains("<! Labels Go Here>")) { - output += labels; - } else if (line.contains("<! Use Line Chart Here>")) { - output += useLineChartString + ";"; - } else if (line.contains("<! Chart Type Here>")) { - output += "\"" + type.toLocal8Bit() + "\""; - } else if (line.contains("<! Fill Setting Here>")) { - output += fillString.toLocal8Bit(); - } else if (line.contains("<! Series Labels Here>")) { - output += seriesLabels; - } else { - output.append(line); - } - } - - return output; -} - -QByteArray ReportGenerator::printColors(const QString &tableName, const QString &seriesName) -{ - QByteArray colors; - int i = 0; - QStringList series = selectUnique(seriesName, tableName); - foreach (const QString &serie, series) { - colors.append("'" + serie.toLocal8Bit() + "': '" + m_colorScheme.at(i % m_colorScheme.count()) + "',\n"); - ++ i; - } - colors.chop(2); // remove last comma - colors.append("\n"); - return colors; -} - -QT_END_NAMESPACE diff --git a/tools/qtestlib/chart/reportgenerator.h b/tools/qtestlib/chart/reportgenerator.h deleted file mode 100644 index 1f075bd..0000000 --- a/tools/qtestlib/chart/reportgenerator.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef REPORTGENERATOR_H -#define REPORTGENERATOR_H - -#include "database.h" -#include <QtCore/qglobal.h> - -QT_BEGIN_NAMESPACE - -class ReportGenerator -{ -public: - ReportGenerator(); - QByteArray printColors(const QString &tableName, const QString &seriesName); - QList<QByteArray> writeChart(const QString &tableName, bool combineVersions); - void writeReport(const QString &tableName, const QString &filename, bool combineVersions = false); - void writeReports(); - QString fileName(); -private: - QList<QByteArray> m_colorScheme; - QString m_fileName; -}; - -void printTestCaseResults(const QString &testCaseName); - -QT_END_NAMESPACE - -#endif - diff --git a/tools/qtestlib/qtestlib.pro b/tools/qtestlib/qtestlib.pro index 9ff7360..da94e81 100644 --- a/tools/qtestlib/qtestlib.pro +++ b/tools/qtestlib/qtestlib.pro @@ -1,4 +1,4 @@ TEMPLATE = subdirs -!wince*: SUBDIRS += updater chart +!wince*: SUBDIRS += updater wince*: contains(QT_CONFIG, cetest): SUBDIRS += wince CONFIG += ordered -- cgit v0.12 From 21629ac069349f29ec9e329f96934dbdd3a84745 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Mon, 26 Jul 2010 10:33:51 +1000 Subject: Cherry pick fix for MOBILITY-1144 from Qt Mobility. 426ff79e49d4abb659167541bb67846443b9707e (cherry picked from commit a0ae434a452deea022e3b7117e946e95542aa884) --- src/plugins/bearer/symbian/qnetworksession_impl.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index f89ed0a..99737d7 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -1044,6 +1044,11 @@ void QNetworkSessionPrivateImpl::RunL() TInt error = KErrNone; QNetworkConfiguration newActiveConfig = activeConfiguration(); if (!newActiveConfig.isValid()) { + // RConnection startup was successfull but no configuration + // was found. That indicates that user has chosen to create a + // new WLAN configuration (from scan results), but that new + // configuration does not have access to Internet (Internet + // Connectivity Test, ICT, failed). error = KErrGeneral; } else { // Use name of the IAP to open global 'Open C' RConnection @@ -1053,16 +1058,24 @@ void QNetworkSessionPrivateImpl::RunL() strcpy(ifr.ifr_name, nameAsByteArray.constData()); error = setdefaultif(&ifr); } - if (error != KErrNone) { isOpen = false; isOpening = false; iError = QNetworkSession::UnknownSessionError; QT_TRYCATCH_LEAVING(emit QNetworkSessionPrivate::error(iError)); - Cancel(); if (ipConnectionNotifier) { ipConnectionNotifier->StopNotifications(); } + if (!newActiveConfig.isValid()) { + // No valid configuration, bail out. + // Status updates from QNCM won't be received correctly + // because there is no configuration to associate them with so transit here. + iConnection.Close(); + newState(QNetworkSession::Closing); + newState(QNetworkSession::Disconnected); + } else { + Cancel(); + } QT_TRYCATCH_LEAVING(syncStateWithInterface()); return; } -- cgit v0.12 From ab394977cfc525b49f84013ded4f4c5162e104b3 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Mon, 26 Jul 2010 12:02:36 +1000 Subject: Cherry pick fix for MOBILITY-1145 from Qt Mobility. f17d8a5dbef076046ff504fecb1fd445c9b785ac (cherry picked from commit 0664d3ad029b4d80d9ffac75f4f1c6c47bac2641) --- src/plugins/bearer/symbian/qnetworksession_impl.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index 99737d7..d6b4975 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -1130,7 +1130,9 @@ void QNetworkSessionPrivateImpl::RunL() isOpening = false; activeConfig = QNetworkConfiguration(); serviceConfig = QNetworkConfiguration(); - if (publicConfig.state() == QNetworkConfiguration::Undefined || + if (statusCode == KErrCancel) { + iError = QNetworkSession::SessionAbortedError; + } else if (publicConfig.state() == QNetworkConfiguration::Undefined || publicConfig.state() == QNetworkConfiguration::Defined) { iError = QNetworkSession::InvalidConfigurationError; } else { -- cgit v0.12 From 94910720169dd3c2bcccfd9554ea6ac5a31ab48d Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Mon, 26 Jul 2010 12:11:03 +1000 Subject: Fix typo in docs. (cherry picked from commit e9e0a82b1a5a71cefdd1711c51b786088b40bafd) --- doc/src/network-programming/bearermanagement.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/network-programming/bearermanagement.qdoc b/doc/src/network-programming/bearermanagement.qdoc index 67c13f2..bc016df 100644 --- a/doc/src/network-programming/bearermanagement.qdoc +++ b/doc/src/network-programming/bearermanagement.qdoc @@ -191,7 +191,7 @@ closed via \l{QNetworkSession::close()}, respectively. If the session is \l{QNetworkSession::Disconnected}{disconnected} at the time of the \l{QNetworkSession::open()}{open()} call the underlying interface is started; otherwise only the reference counter against the global session is -incremeted. The opposite behavior can be observed when using +incremented. The opposite behavior can be observed when using \l{QNetworkSession::close()}{close()}. In some use cases it may be necessary to turn the interface off despite of -- cgit v0.12 From 57453beaaa22cf184c721e7813f933b0eb41faa8 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Mon, 26 Jul 2010 12:42:06 +1000 Subject: Cherry pick fix for MOBILITY-1077 from Qt Mobility. 7ef45318255c5cf1f10508753c9a2c55fc2cb8c0 321bd8b7b54e34a983b1ba142af836cf3e153a66 (cherry picked from commit c16f0a839743af36b36aea9c35f0d5ddfda3d6ac) --- examples/network/bearercloud/cloud.cpp | 5 +++++ src/network/bearer/qnetworksession.cpp | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/examples/network/bearercloud/cloud.cpp b/examples/network/bearercloud/cloud.cpp index 2856c71..980efbf 100644 --- a/examples/network/bearercloud/cloud.cpp +++ b/examples/network/bearercloud/cloud.cpp @@ -245,6 +245,8 @@ void Cloud::stateChanged(QNetworkSession::State state) else finalOpacity = 1.0; +#if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6) && \ + !defined(Q_OS_SYMBIAN) && !defined(Q_OS_WINCE) QString tooltip; if (configuration.name().isEmpty()) @@ -302,6 +304,9 @@ void Cloud::stateChanged(QNetworkSession::State state) tooltip += tr("<br>Sent data: %1 bytes").arg(session->bytesWritten()); setToolTip(tooltip); +#else + Q_UNUSED(state); +#endif } //! [2] diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp index 1ed6cbb..65de539 100644 --- a/src/network/bearer/qnetworksession.cpp +++ b/src/network/bearer/qnetworksession.cpp @@ -629,8 +629,10 @@ void QNetworkSession::reject() If the session is based on a service network configuration the number of sent bytes across all active member configurations are returned. - This function may not always be supported on all platforms and returns - 0. The platform capability can be detected via QNetworkConfigurationManager::DataStatistics. + This function may not always be supported on all platforms and returns 0. + The platform capability can be detected via QNetworkConfigurationManager::DataStatistics. + + \note On some platforms this function may run the main event loop. */ quint64 QNetworkSession::bytesWritten() const { @@ -646,8 +648,10 @@ quint64 QNetworkSession::bytesWritten() const If the session is based on a service network configuration the number of sent bytes across all active member configurations are returned. - This function may not always be supported on all platforms and returns - 0. The platform capability can be detected via QNetworkConfigurationManager::DataStatistics. + This function may not always be supported on all platforms and returns 0. + The platform capability can be detected via QNetworkConfigurationManager::DataStatistics. + + \note On some platforms this function may run the main event loop. */ quint64 QNetworkSession::bytesReceived() const { -- cgit v0.12 From c0c08e4efa42981e0e23b94ad032cdf86cc280cd Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Mon, 26 Jul 2010 12:48:44 +1000 Subject: Cherry pick fix for MOBILITY-1194 from Qt Mobility. 2f582953ecfc53f217317f58e4fc75b5b51a1126 (cherry picked from commit 34691d27d03abc0c8f940b4a0a3cda4cd308642e) --- .../bearer/symbian/qnetworksession_impl.cpp | 74 ++++++++++------------ src/plugins/bearer/symbian/symbianengine.cpp | 66 +++++++++++++++++-- src/plugins/bearer/symbian/symbianengine.h | 1 + .../qnetworksession/test/tst_qnetworksession.cpp | 11 +++- tests/manual/bearerex/bearerex.cpp | 3 +- tests/manual/bearerex/bearerex.pro | 2 +- 6 files changed, 104 insertions(+), 53 deletions(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index d6b4975..f7a52c2 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -146,12 +146,14 @@ void QNetworkSessionPrivateImpl::configurationRemoved(QNetworkConfigurationPriva } } +// Function sets the state of the session to match the state +// of the underlying interface (the configuration this session is based on) void QNetworkSessionPrivateImpl::syncStateWithInterface() { if (!publicConfig.isValid()) return; - if (iFirstSync && publicConfig.isValid()) { + if (iFirstSync) { QObject::connect(engine, SIGNAL(configurationStateChanged(TUint32, TUint32, QNetworkSession::State)), this, SLOT(configurationStateChanged(TUint32, TUint32, QNetworkSession::State))); // Listen to configuration removals, so that in case the configuration @@ -162,46 +164,25 @@ void QNetworkSessionPrivateImpl::syncStateWithInterface() // Start listening IAP state changes from QNetworkConfigurationManagerPrivate iHandleStateNotificationsFromManager = true; - // Check open connections to see if there is already - // an open connection to selected IAP or SNAP - TUint count; - TRequestStatus status; - iConnectionMonitor.GetConnectionCount(count, status); - User::WaitForRequest(status); - if (status.Int() != KErrNone) { - return; - } - - TUint numSubConnections; - TUint connectionId; - for (TUint i = 1; i <= count; i++) { - TInt ret = iConnectionMonitor.GetConnectionInfo(i, connectionId, numSubConnections); - if (ret == KErrNone) { - TUint apId; - iConnectionMonitor.GetUintAttribute(connectionId, 0, KIAPId, apId, status); - User::WaitForRequest(status); - if (status.Int() == KErrNone) { - TInt connectionStatus; - iConnectionMonitor.GetIntAttribute(connectionId, 0, KConnectionStatus, connectionStatus, status); - User::WaitForRequest(status); - if (connectionStatus == KLinkLayerOpen) { - if (state != QNetworkSession::Closing) { - if (newState(QNetworkSession::Connected, apId)) { - return; - } - } - } - } - } - } - - if (state != QNetworkSession::Connected) { - if ((publicConfig.state() & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - newState(QNetworkSession::Disconnected); - } else { - newState(QNetworkSession::NotAvailable); - } + // Check what is the state of the configuration this session is based on + // and set the session in appropriate state. +#ifdef QT_BEARERMGMT_SYMBIAN_DEBUG + qDebug() << "QNS this : " << QString::number((uint)this) << " - " + << "syncStateWithInterface() state of publicConfig is: " << publicConfig.state(); +#endif + switch (publicConfig.state()) { + case QNetworkConfiguration::Active: + newState(QNetworkSession::Connected); + break; + case QNetworkConfiguration::Discovered: + newState(QNetworkSession::Disconnected); + break; + case QNetworkConfiguration::Defined: + newState(QNetworkSession::NotAvailable); + break; + case QNetworkConfiguration::Undefined: + default: + newState(QNetworkSession::Invalid); } } @@ -253,7 +234,8 @@ QNetworkInterface QNetworkSessionPrivateImpl::currentInterface() const << "currentInterface() requested, state: " << state << "publicConfig validity: " << publicConfig.isValid(); if (activeInterface.isValid()) - qDebug() << "interface is: " << activeInterface.humanReadableName(); + qDebug() << "QNS this : " << QString::number((uint)this) << " - " + << "interface is: " << activeInterface.humanReadableName(); #endif if (!publicConfig.isValid() || state != QNetworkSession::Connected) { @@ -906,6 +888,14 @@ QNetworkConfiguration QNetworkSessionPrivateImpl::activeConfiguration(TUint32 ia if (iapId == 0) { _LIT(KSetting, "IAP\\Id"); iConnection.GetIntSetting(KSetting, iapId); +#ifdef OCC_FUNCTIONALITY_AVAILABLE + // Check if this is an Easy WLAN configuration. On Symbian^3 RConnection may report + // the used configuration as 'EasyWLAN' IAP ID if someone has just opened the configuration + // from WLAN Scan dialog, _and_ that connection is still up. We need to find the + // real matching configuration. Function alters the Easy WLAN ID to real IAP ID (only if + // easy WLAN): + engine->easyWlanTrueIapId(iapId); +#endif } #ifdef SNAP_FUNCTIONALITY_AVAILABLE diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index ca444c1..8486fa9 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -270,7 +270,7 @@ void SymbianEngine::updateConfigurationsL() QList<QString> knownConfigs = accessPointConfigurations.keys(); QList<QString> knownSnapConfigs = snapConfigurations.keys(); -#ifdef SNAP_FUNCTIONALITY_AVAILABLE +#ifdef SNAP_FUNCTIONALITY_AVAILABLE // S60 version is >= Series60 3rd Edition Feature Pack 2 TInt error = KErrNone; @@ -311,7 +311,17 @@ void SymbianEngine::updateConfigurationsL() iCmManager.AllDestinationsL(destinations); for(int i = 0; i < destinations.Count(); i++) { RCmDestination destination; - destination = iCmManager.DestinationL(destinations[i]); + + // Some destinatsions require ReadDeviceData -capability (MMS/WAP) + // The below function will leave in these cases. Don't. Proceed to + // next destination (if any). + TRAPD(error, destination = iCmManager.DestinationL(destinations[i])); + if (error == KErrPermissionDenied) { + continue; + } else { + User::LeaveIfError(error); + } + CleanupClosePushL(destination); QString ident = QT_BEARERMGMT_CONFIGURATION_SNAP_PREFIX + QString::number(qHash(destination.Id())); @@ -319,12 +329,12 @@ void SymbianEngine::updateConfigurationsL() knownSnapConfigs.removeOne(ident); } else { SymbianNetworkConfigurationPrivate *cpPriv = new SymbianNetworkConfigurationPrivate; - + HBufC *pName = destination.NameLC(); QT_TRYCATCH_LEAVING(cpPriv->name = QString::fromUtf16(pName->Ptr(),pName->Length())); CleanupStack::PopAndDestroy(pName); pName = NULL; - + cpPriv->isValid = true; cpPriv->id = ident; cpPriv->numericId = destination.Id(); @@ -393,7 +403,6 @@ void SymbianEngine::updateConfigurationsL() CleanupStack::PopAndDestroy(&destination); } CleanupStack::PopAndDestroy(&destinations); - #else // S60 version is < Series60 3rd Edition Feature Pack 2 CCommsDbTableView* pDbTView = ipCommsDB->OpenTableLC(TPtrC(IAP)); @@ -423,8 +432,9 @@ void SymbianEngine::updateConfigurationsL() } CleanupStack::PopAndDestroy(pDbTView); #endif + QT_TRYCATCH_LEAVING(updateActiveAccessPoints()); - + foreach (const QString &oldIface, knownConfigs) { //remove non existing IAP QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(oldIface); @@ -687,6 +697,11 @@ void SymbianEngine::updateActiveAccessPoints() if (!ptr) { // If IAP was not found, check if the update was about EasyWLAN ptr = configurationFromEasyWlan(apId, connectionId); + // Change the ident correspondingly + if (ptr) { + ident = QT_BEARERMGMT_CONFIGURATION_IAP_PREFIX + + QString::number(qHash(toSymbianConfig(ptr)->numericIdentifier())); + } } #endif if (ptr) { @@ -1224,6 +1239,45 @@ QNetworkConfigurationPrivatePointer SymbianEngine::configurationFromEasyWlan(TUi } return QNetworkConfigurationPrivatePointer(); } + +bool SymbianEngine::easyWlanTrueIapId(TUint32& trueIapId) +{ + // Check if this is easy wlan id in the first place + if (trueIapId != iCmManager.EasyWlanIdL()) + return false; + + // Loop through all connections that connection monitor is aware + // and check for IAPs based on easy WLAN + TRequestStatus status; + TUint connectionCount; + iConnectionMonitor.GetConnectionCount(connectionCount, status); + User::WaitForRequest(status); + TUint connectionId; + TUint subConnectionCount; + TUint apId; + if (status.Int() == KErrNone) { + for (TUint i = 1; i <= connectionCount; i++) { + iConnectionMonitor.GetConnectionInfo(i, connectionId, subConnectionCount); + iConnectionMonitor.GetUintAttribute(connectionId, subConnectionCount, + KIAPId, apId, status); + User::WaitForRequest(status); + if (apId == trueIapId) { + QNetworkConfigurationPrivatePointer ptr = + configurationFromEasyWlan(apId, connectionId); + if (ptr) { +#ifdef QT_BEARERMGMT_SYMBIAN_DEBUG + qDebug() << "QNCM easyWlanTrueIapId(), found true IAP ID: " + << toSymbianConfig(ptr)->numericIdentifier(); +#endif + trueIapId = toSymbianConfig(ptr)->numericIdentifier(); + return true; + } + } + } + } + return false; +} + #endif // Sessions may use this function to report configuration state changes, diff --git a/src/plugins/bearer/symbian/symbianengine.h b/src/plugins/bearer/symbian/symbianengine.h index cfddc29..ecd858d 100644 --- a/src/plugins/bearer/symbian/symbianengine.h +++ b/src/plugins/bearer/symbian/symbianengine.h @@ -208,6 +208,7 @@ private: QNetworkSession::State newState); #ifdef OCC_FUNCTIONALITY_AVAILABLE QNetworkConfigurationPrivatePointer configurationFromEasyWlan(TUint32 apId, TUint connectionId); + bool easyWlanTrueIapId(TUint32& trueIapId); #endif private: // Data diff --git a/tests/auto/qnetworksession/test/tst_qnetworksession.cpp b/tests/auto/qnetworksession/test/tst_qnetworksession.cpp index 24f6e52..3388cd5 100644 --- a/tests/auto/qnetworksession/test/tst_qnetworksession.cpp +++ b/tests/auto/qnetworksession/test/tst_qnetworksession.cpp @@ -88,7 +88,7 @@ private slots: void sessionStop(); void roamingErrorCodes(); - + void sessionProperties_data(); void sessionProperties(); @@ -918,6 +918,10 @@ void tst_QNetworkSession::sessionOpenCloseStop() session.waitForOpened(); #endif + // Wait until the configuration is uptodate as well, it may be signaled 'connected' + // bit later than the session + QTRY_VERIFY(configuration.state() == QNetworkConfiguration::Active); + if (session.isOpen()) QVERIFY(!sessionOpenedSpy.isEmpty() || !errorSpy.isEmpty()); if (!errorSpy.isEmpty()) { @@ -1131,8 +1135,9 @@ void tst_QNetworkSession::sessionOpenCloseStop() roamedSuccessfully = true; } else if (state == QNetworkSession::Closing) { QTRY_VERIFY(session2.state() == QNetworkSession::Disconnected); - QTRY_VERIFY(session.state() == QNetworkSession::Connected); - roamedSuccessfully = true; + QTRY_VERIFY(session.state() == QNetworkSession::Connected || + session.state() == QNetworkSession::Disconnected); + roamedSuccessfully = false; } else if (state == QNetworkSession::Disconnected) { QTRY_VERIFY(!errorSpy.isEmpty()); QTRY_VERIFY(session2.state() == QNetworkSession::Disconnected); diff --git a/tests/manual/bearerex/bearerex.cpp b/tests/manual/bearerex/bearerex.cpp index 6f280db..2f90837 100644 --- a/tests/manual/bearerex/bearerex.cpp +++ b/tests/manual/bearerex/bearerex.cpp @@ -433,6 +433,7 @@ void SessionTab::opened() iapLineEdit->setText(config.name()+" ("+config.identifier()+")"); } } + newState(m_NetworkSession->state()); // Update the "(open)" if (m_NetworkSession->configuration().type() == QNetworkConfiguration::UserChoice) { QVariant identifier = m_NetworkSession->sessionProperty("UserChoiceConfiguration"); @@ -523,7 +524,7 @@ void SessionTab::newState(QNetworkSession::State state) QString active; if (m_NetworkSession->isOpen()) { - active = " (O)"; + active = " (open)"; } stateLineEdit->setText(stateString(state)+active); } diff --git a/tests/manual/bearerex/bearerex.pro b/tests/manual/bearerex/bearerex.pro index df39c85..397261d 100644 --- a/tests/manual/bearerex/bearerex.pro +++ b/tests/manual/bearerex/bearerex.pro @@ -25,4 +25,4 @@ SOURCES += bearerex.cpp \ xqlistwidget.cpp \ datatransferer.cpp -symbian:TARGET.CAPABILITY = NetworkServices NetworkControl ReadUserData +symbian:TARGET.CAPABILITY = NetworkServices NetworkControl ReadUserData WriteDeviceData ReadDeviceData -- cgit v0.12 From 5342724a8b664296e856792be1a03d84fe0d03ec Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Wed, 28 Jul 2010 11:55:28 +1000 Subject: Fix detection of OCC functionality. (cherry picked from commit ce7ccc93275043a41648a8887525be92420c3acb) --- src/plugins/bearer/symbian/symbian_3/symbian_3.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro index 25f18f2..ff0f11c 100644 --- a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro +++ b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro @@ -6,7 +6,7 @@ symbian { DEFINES += SNAP_FUNCTIONALITY_AVAILABLE LIBS += -lcmmanager - exists($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h)) { + exists($$prependEpocroot($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h))) { DEFINES += OCC_FUNCTIONALITY_AVAILABLE LIBS += -lextendedconnpref } -- cgit v0.12 From 9645c2170e3daddd6317e1a568db3337ff87b3f3 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Wed, 28 Jul 2010 10:40:05 +1000 Subject: Fix compilation error on Symbian^4. The root cause is failing compilation test for SNAP when it shouldn't, but it should still not result in compilation errors in code. (cherry picked from commit 6ca74af0121f6038a20bca363deaf5c3e2d760f9) --- src/plugins/bearer/symbian/qnetworksession_impl.cpp | 12 ++++++------ src/plugins/bearer/symbian/qnetworksession_impl.h | 2 +- src/plugins/bearer/symbian/symbianengine.cpp | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index f7a52c2..225161d 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -364,7 +364,7 @@ void QNetworkSessionPrivateImpl::open() SymbianNetworkConfigurationPrivate *symbianConfig = toSymbianConfig(privateConfiguration(publicConfig)); -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) // With One Click Connectivity (Symbian^3 onwards) it is possible // to connect silently, without any popups. TConnPrefList pref; @@ -394,7 +394,7 @@ void QNetworkSessionPrivateImpl::open() SymbianNetworkConfigurationPrivate *symbianConfig = toSymbianConfig(privateConfiguration(publicConfig)); -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) // On Symbian^3 if service network is not reachable, it triggers a UI (aka EasyWLAN) where // user can create new IAPs. To detect this, we need to store the number of IAPs // there was before connection was started. @@ -888,7 +888,7 @@ QNetworkConfiguration QNetworkSessionPrivateImpl::activeConfiguration(TUint32 ia if (iapId == 0) { _LIT(KSetting, "IAP\\Id"); iConnection.GetIntSetting(KSetting, iapId); -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) // Check if this is an Easy WLAN configuration. On Symbian^3 RConnection may report // the used configuration as 'EasyWLAN' IAP ID if someone has just opened the configuration // from WLAN Scan dialog, _and_ that connection is still up. We need to find the @@ -934,7 +934,7 @@ QNetworkConfiguration QNetworkSessionPrivateImpl::activeConfiguration(TUint32 ia } } } else { -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) // On Symbian^3 (only, not earlier or Symbian^4) if the SNAP was not reachable, it triggers // user choice type of activity (EasyWLAN). As a result, a new IAP may be created, and // hence if was not found yet. Therefore update configurations and see if there is something new. @@ -972,7 +972,7 @@ QNetworkConfiguration QNetworkSessionPrivateImpl::activeConfiguration(TUint32 ia qDebug() << "QNS this : " << QString::number((uint)this) << " - " << "configuration was not found, returning invalid."; #endif -#endif // OCC_FUNCTIONALITY_AVAILABLE +#endif // Given IAP Id was not found from known IAPs array return QNetworkConfiguration(); } @@ -1305,7 +1305,7 @@ bool QNetworkSessionPrivateImpl::newState(QNetworkSession::State newState, TUint } } } -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) // If the retVal is not true here, it means that the status update may apply to an IAP outside of // SNAP (session is based on SNAP but follows IAP outside of it), which may occur on Symbian^3 EasyWlan. if (retVal == false && activeConfig.isValid() && diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.h b/src/plugins/bearer/symbian/qnetworksession_impl.h index 0754ace..73e6cab 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.h +++ b/src/plugins/bearer/symbian/qnetworksession_impl.h @@ -64,7 +64,7 @@ #ifdef SNAP_FUNCTIONALITY_AVAILABLE #include <comms-infras/cs_mobility_apiext.h> #endif -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) #include <extendedconnpref.h> #endif diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 8486fa9..87331f7 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -693,7 +693,7 @@ void SymbianEngine::updateActiveAccessPoints() User::WaitForRequest(status); QString ident = QT_BEARERMGMT_CONFIGURATION_IAP_PREFIX+QString::number(qHash(apId)); QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(ident); -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) if (!ptr) { // If IAP was not found, check if the update was about EasyWLAN ptr = configurationFromEasyWlan(apId, connectionId); @@ -1050,7 +1050,7 @@ void SymbianEngine::EventL(const CConnMonEventBase& aEvent) QString ident = QT_BEARERMGMT_CONFIGURATION_IAP_PREFIX+QString::number(qHash(apId)); QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(ident); -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) if (!ptr) { // Check if status was regarding EasyWLAN ptr = configurationFromEasyWlan(apId, connectionId); @@ -1075,7 +1075,7 @@ void SymbianEngine::EventL(const CConnMonEventBase& aEvent) User::WaitForRequest(status); QString ident = QT_BEARERMGMT_CONFIGURATION_IAP_PREFIX+QString::number(qHash(apId)); QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(ident); -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) if (!ptr) { // Check for EasyWLAN ptr = configurationFromEasyWlan(apId, connectionId); @@ -1183,7 +1183,7 @@ void SymbianEngine::EventL(const CConnMonEventBase& aEvent) User::WaitForRequest(status); QString ident = QT_BEARERMGMT_CONFIGURATION_IAP_PREFIX+QString::number(qHash(apId)); QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(ident); -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) if (!ptr) { // If IAP was not found, check if the update was about EasyWLAN ptr = configurationFromEasyWlan(apId, connectionId); @@ -1204,7 +1204,7 @@ void SymbianEngine::EventL(const CConnMonEventBase& aEvent) } } -#ifdef OCC_FUNCTIONALITY_AVAILABLE +#if defined(OCC_FUNCTIONALITY_AVAILABLE) && defined(SNAP_FUNCTIONALITY_AVAILABLE) // Tries to derive configuration from EasyWLAN. // First checks if the interface brought up was EasyWLAN, then derives the real SSID, // and looks up configuration based on that one. -- cgit v0.12 From 09ff0fb02378fa3aca92e9141d746880e11d7938 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Fri, 23 Jul 2010 15:16:30 +1000 Subject: Order network configurations in service networks in priority order. It is useful to know the priority order of the sub configurations of a service network. Task-number: QTBUG-11678 RevBy: juhvu <qt-info@nokia.com> (cherry picked from commit 959efa8daab2715d18440ed8b890b9dd2b501fc7) --- src/network/bearer/qnetworkconfiguration.cpp | 19 ++++--- src/network/bearer/qnetworkconfiguration_p.h | 3 +- src/plugins/bearer/symbian/symbianengine.cpp | 83 +++++++++++++++------------- 3 files changed, 59 insertions(+), 46 deletions(-) diff --git a/src/network/bearer/qnetworkconfiguration.cpp b/src/network/bearer/qnetworkconfiguration.cpp index 4108fee..d7fceba 100644 --- a/src/network/bearer/qnetworkconfiguration.cpp +++ b/src/network/bearer/qnetworkconfiguration.cpp @@ -343,9 +343,11 @@ bool QNetworkConfiguration::isRoamingAvailable() const } /*! - Returns all sub configurations of this network configuration. - Only network configurations of type \l ServiceNetwork can have children. Otherwise - this function returns an empty list. + Returns all sub configurations of this network configuration in priority order. The first sub + configuration in the list has the highest priority. + + Only network configurations of type \l ServiceNetwork can have children. Otherwise this + function returns an empty list. */ QList<QNetworkConfiguration> QNetworkConfiguration::children() const { @@ -356,16 +358,18 @@ QList<QNetworkConfiguration> QNetworkConfiguration::children() const QMutexLocker locker(&d->mutex); - QMutableListIterator<QNetworkConfigurationPrivatePointer> iter(d->serviceNetworkMembers); - while (iter.hasNext()) { - QNetworkConfigurationPrivatePointer p = iter.next(); + QMutableMapIterator<unsigned int, QNetworkConfigurationPrivatePointer> i(d->serviceNetworkMembers); + while (i.hasNext()) { + i.next(); + + QNetworkConfigurationPrivatePointer p = i.value(); //if we have an invalid member get rid of it -> was deleted earlier on { QMutexLocker childLocker(&p->mutex); if (!p->isValid) { - iter.remove(); + i.remove(); continue; } } @@ -428,6 +432,5 @@ QString QNetworkConfiguration::bearerName() const return d->bearerName(); } - QT_END_NAMESPACE diff --git a/src/network/bearer/qnetworkconfiguration_p.h b/src/network/bearer/qnetworkconfiguration_p.h index 6e146e0..966dfb2 100644 --- a/src/network/bearer/qnetworkconfiguration_p.h +++ b/src/network/bearer/qnetworkconfiguration_p.h @@ -57,6 +57,7 @@ #include <QtCore/qshareddata.h> #include <QtCore/qmutex.h> +#include <QtCore/qmap.h> QT_BEGIN_NAMESPACE @@ -84,7 +85,7 @@ public: return bearer; } - QList<QNetworkConfigurationPrivatePointer> serviceNetworkMembers; + QMap<unsigned int, QNetworkConfigurationPrivatePointer> serviceNetworkMembers; mutable QMutex mutex; diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 87331f7..664cb6e 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -351,55 +351,57 @@ void SymbianEngine::updateConfigurationsL() QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); mutex.lock(); } - QNetworkConfigurationPrivatePointer privSNAP = snapConfigurations.value(ident); - + + // Loop through all connection methods in this SNAP + QMap<unsigned int, QNetworkConfigurationPrivatePointer> connections; for (int j=0; j < destination.ConnectionMethodCount(); j++) { RCmConnectionMethod connectionMethod = destination.ConnectionMethodL(j); CleanupClosePushL(connectionMethod); - + TUint32 iapId = connectionMethod.GetIntAttributeL(CMManager::ECmIapId); QString iface = QT_BEARERMGMT_CONFIGURATION_IAP_PREFIX+QString::number(qHash(iapId)); // Check that IAP can be found from accessPointConfigurations list - QNetworkConfigurationPrivatePointer priv = accessPointConfigurations.value(iface); - if (!priv) { + QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(iface); + if (ptr) { + knownConfigs.removeOne(iface); + } else { SymbianNetworkConfigurationPrivate *cpPriv = NULL; TRAP(error, cpPriv = configFromConnectionMethodL(connectionMethod)); if (error == KErrNone) { - QNetworkConfigurationPrivatePointer ptr(cpPriv); + ptr = QNetworkConfigurationPrivatePointer(cpPriv); accessPointConfigurations.insert(ptr->id, ptr); mutex.unlock(); QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); mutex.lock(); - - QMutexLocker configLocker(&privSNAP->mutex); - privSNAP->serviceNetworkMembers.append(ptr); - } - } else { - knownConfigs.removeOne(iface); - // Check that IAP can be found from related SNAP's configuration list - bool iapFound = false; - QMutexLocker snapConfigLocker(&privSNAP->mutex); - for (int i = 0; i < privSNAP->serviceNetworkMembers.count(); i++) { - if (toSymbianConfig(privSNAP->serviceNetworkMembers[i])->numericIdentifier() == - iapId) { - iapFound = true; - break; - } } - if (!iapFound) - privSNAP->serviceNetworkMembers.append(priv); } - + + if (ptr) { + unsigned int priority; + TRAPD(error, priority = destination.PriorityL(connectionMethod)); + if (!error) + connections.insert(priority, ptr); + } + CleanupStack::PopAndDestroy(&connectionMethod); } - + + QNetworkConfigurationPrivatePointer privSNAP = snapConfigurations.value(ident); QMutexLocker snapConfigLocker(&privSNAP->mutex); - if (privSNAP->serviceNetworkMembers.count() > 1) { + + if (privSNAP->serviceNetworkMembers != connections) { + privSNAP->serviceNetworkMembers = connections; + // Roaming is supported only if SNAP contains more than one IAP - privSNAP->roamingSupported = true; + privSNAP->roamingSupported = privSNAP->serviceNetworkMembers.count() > 1; + + snapConfigLocker.unlock(); + mutex.unlock(); + QT_TRYCATCH_LEAVING(emit configurationChanged(privSNAP)); + mutex.lock(); } - + CleanupStack::PopAndDestroy(&destination); } CleanupStack::PopAndDestroy(&destinations); @@ -449,10 +451,13 @@ void SymbianEngine::updateConfigurationsL() QNetworkConfigurationPrivatePointer ptr2 = snapConfigurations.value(iface); // => Check if one of the IAPs of the SNAP is active QMutexLocker snapConfigLocker(&ptr2->mutex); - for (int i = 0; i < ptr2->serviceNetworkMembers.count(); ++i) { - if (toSymbianConfig(ptr2->serviceNetworkMembers[i])->numericIdentifier() == + QMutableMapIterator<unsigned int, QNetworkConfigurationPrivatePointer> i(ptr2->serviceNetworkMembers); + while (i.hasNext()) { + i.next(); + + if (toSymbianConfig(i.value())->numericIdentifier() == toSymbianConfig(ptr)->numericIdentifier()) { - ptr2->serviceNetworkMembers.removeAt(i); + i.remove(); break; } } @@ -806,15 +811,19 @@ void SymbianEngine::updateStatesToSnaps() // => Check if one of the IAPs of the SNAP is discovered or active // => If one of IAPs is active, also SNAP is active // => If one of IAPs is discovered but none of the IAPs is active, SNAP is discovered - for (int i=0; i<ptr->serviceNetworkMembers.count(); i++) { - QMutexLocker configLocker(&ptr->serviceNetworkMembers[i]->mutex); + QMapIterator<unsigned int, QNetworkConfigurationPrivatePointer> i(ptr->serviceNetworkMembers); + while (i.hasNext()) { + i.next(); + + const QNetworkConfigurationPrivatePointer child = i.value(); + + QMutexLocker configLocker(&child->mutex); - if ((ptr->serviceNetworkMembers[i]->state & QNetworkConfiguration::Active) - == QNetworkConfiguration::Active) { + if ((child->state & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { active = true; break; - } else if ((ptr->serviceNetworkMembers[i]->state & QNetworkConfiguration::Discovered) - == QNetworkConfiguration::Discovered) { + } else if ((child->state & QNetworkConfiguration::Discovered) == + QNetworkConfiguration::Discovered) { discovered = true; } } -- cgit v0.12 From 8bc698aaad002286270639fe15f80815bc4df878 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Fri, 23 Jul 2010 15:17:08 +1000 Subject: Show Service Network members in priority order. The configurations returned from QNetworkConfiguration::children() are guaranteed to be in priority order. Ensure that this order is reflected in the tree view. Task-number: QTBUG-11678 RevBy: juhvu <qt-info@nokia.com> (cherry picked from commit 88d721fa8d28519e98207ca0249ff057faef8af0) --- examples/network/bearermonitor/bearermonitor.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/examples/network/bearermonitor/bearermonitor.cpp b/examples/network/bearermonitor/bearermonitor.cpp index 98869ea..1959919 100644 --- a/examples/network/bearermonitor/bearermonitor.cpp +++ b/examples/network/bearermonitor/bearermonitor.cpp @@ -180,10 +180,8 @@ void BearerMonitor::configurationChanged(const QNetworkConfiguration &config) void BearerMonitor::updateSnapConfiguration(QTreeWidgetItem *parent, const QNetworkConfiguration &snap) { QMap<QString, QTreeWidgetItem *> itemMap; - for (int i = 0; i < parent->childCount(); ++i) { - QTreeWidgetItem *item = parent->child(i); + foreach (QTreeWidgetItem *item, parent->takeChildren()) itemMap.insert(item->data(0, Qt::UserRole).toString(), item); - } QList<QNetworkConfiguration> allConfigurations = snap.children(); @@ -194,6 +192,8 @@ void BearerMonitor::updateSnapConfiguration(QTreeWidgetItem *parent, const QNetw if (item) { updateItem(item, config); + parent->addChild(item); + if (config.type() == QNetworkConfiguration::ServiceNetwork) updateSnapConfiguration(item, config); } else { @@ -201,10 +201,7 @@ void BearerMonitor::updateSnapConfiguration(QTreeWidgetItem *parent, const QNetw } } - foreach (const QString &id, itemMap.keys()) - delete itemMap.value(id); - - itemMap.clear(); + qDeleteAll(itemMap); } void BearerMonitor::updateConfigurations() @@ -239,8 +236,7 @@ void BearerMonitor::updateConfigurations() } } - foreach (const QString &id, itemMap.keys()) - delete itemMap.value(id); + qDeleteAll(itemMap); } void BearerMonitor::onlineStateChanged(bool isOnline) -- cgit v0.12 From d05833f72478091b4e1a71a3209d8f9006a07692 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Wed, 28 Jul 2010 12:12:06 +1000 Subject: Cherry pick fix for MOBILITY-1194 from Qt Mobility. f84bb604d745c512db8d53410c5fec835309f85e (cherry picked from commit a259bd2841b3ce7e34bb18990332bd497f97cdd0) --- .../bearer/symbian/qnetworksession_impl.cpp | 22 +++++++ src/plugins/bearer/symbian/qnetworksession_impl.h | 3 +- src/plugins/bearer/symbian/symbianengine.cpp | 67 ++++++++++++++-------- 3 files changed, 68 insertions(+), 24 deletions(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index 225161d..1de4c0f 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -146,6 +146,23 @@ void QNetworkSessionPrivateImpl::configurationRemoved(QNetworkConfigurationPriva } } +void QNetworkSessionPrivateImpl::configurationAdded(QNetworkConfigurationPrivatePointer config) +{ + Q_UNUSED(config); + // If session is based on service network, some other app may create new access points + // to the SNAP --> synchronize session's state with that of interface's. + if (!publicConfig.isValid() || publicConfig.type() != QNetworkConfiguration::ServiceNetwork) + return; + +#ifdef QT_BEARERMGMT_SYMBIAN_DEBUG + qDebug() << "QNS this : " << QString::number((uint)this) << " - " + << "configurationAdded IAP: " + << toSymbianConfig(privateConfiguration(config))->numericIdentifier(); +#endif + + syncStateWithInterface(); +} + // Function sets the state of the session to match the state // of the underlying interface (the configuration this session is based on) void QNetworkSessionPrivateImpl::syncStateWithInterface() @@ -160,6 +177,11 @@ void QNetworkSessionPrivateImpl::syncStateWithInterface() // this session is based on is removed, session knows to enter Invalid -state. QObject::connect(engine, SIGNAL(configurationRemoved(QNetworkConfigurationPrivatePointer)), this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer))); + // Connect to configuration additions, so that in case a configuration is added + // in a SNAP this session is based on, the session knows to synch its state with its + // interface. + QObject::connect(engine, SIGNAL(configurationAdded(QNetworkConfigurationPrivatePointer)), + this, SLOT(configurationAdded(QNetworkConfigurationPrivatePointer))); } // Start listening IAP state changes from QNetworkConfigurationManagerPrivate iHandleStateNotificationsFromManager = true; diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.h b/src/plugins/bearer/symbian/qnetworksession_impl.h index 73e6cab..aac9321 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.h +++ b/src/plugins/bearer/symbian/qnetworksession_impl.h @@ -134,7 +134,8 @@ protected: // From CActive private Q_SLOTS: void configurationStateChanged(TUint32 accessPointId, TUint32 connMonId, QNetworkSession::State newState); void configurationRemoved(QNetworkConfigurationPrivatePointer config); - + void configurationAdded(QNetworkConfigurationPrivatePointer config); + private: TUint iapClientCount(TUint aIAPId) const; quint64 transferredData(TUint dataType) const; diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 664cb6e..f87ea3c 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -291,14 +291,17 @@ void SymbianEngine::updateConfigurationsL() if (error == KErrNone) { QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(ptr->id, ptr); - - mutex.unlock(); - // Emit configuration added. Connected slots may throw execptions - // which propagate here --> must be converted to leaves (standard - // std::exception would cause any TRAP trapping this function to terminate - // program). - QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); - mutex.lock(); + if (!iFirstUpdate) { + // Emit configuration added. Connected slots may throw execptions + // which propagate here --> must be converted to leaves (standard + // std::exception would cause any TRAP trapping this function to terminate + // program). + QT_TRYCATCH_LEAVING(updateActiveAccessPoints()); + updateStatesToSnaps(); + mutex.unlock(); + QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); + mutex.lock(); + } } } CleanupStack::PopAndDestroy(&connectionMethod); @@ -346,10 +349,13 @@ void SymbianEngine::updateConfigurationsL() QNetworkConfigurationPrivatePointer ptr(cpPriv); snapConfigurations.insert(ident, ptr); - - mutex.unlock(); - QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); - mutex.lock(); + if (!iFirstUpdate) { + QT_TRYCATCH_LEAVING(updateActiveAccessPoints()); + updateStatesToSnaps(); + mutex.unlock(); + QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); + mutex.lock(); + } } // Loop through all connection methods in this SNAP @@ -362,19 +368,23 @@ void SymbianEngine::updateConfigurationsL() QString iface = QT_BEARERMGMT_CONFIGURATION_IAP_PREFIX+QString::number(qHash(iapId)); // Check that IAP can be found from accessPointConfigurations list QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(iface); - if (ptr) { - knownConfigs.removeOne(iface); - } else { + if (!ptr) { SymbianNetworkConfigurationPrivate *cpPriv = NULL; TRAP(error, cpPriv = configFromConnectionMethodL(connectionMethod)); if (error == KErrNone) { ptr = QNetworkConfigurationPrivatePointer(cpPriv); accessPointConfigurations.insert(ptr->id, ptr); - mutex.unlock(); - QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); - mutex.lock(); + if (!iFirstUpdate) { + QT_TRYCATCH_LEAVING(updateActiveAccessPoints()); + updateStatesToSnaps(); + mutex.unlock(); + QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); + mutex.lock(); + } } + } else { + knownConfigs.removeOne(iface); } if (ptr) { @@ -397,6 +407,9 @@ void SymbianEngine::updateConfigurationsL() privSNAP->roamingSupported = privSNAP->serviceNetworkMembers.count() > 1; snapConfigLocker.unlock(); + + updateStatesToSnaps(); + mutex.unlock(); QT_TRYCATCH_LEAVING(emit configurationChanged(privSNAP)); mutex.lock(); @@ -422,10 +435,13 @@ void SymbianEngine::updateConfigurationsL() if (readNetworkConfigurationValuesFromCommsDb(apId, cpPriv)) { QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(ident, ptr); - - mutex.unlock(); - QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); - mutex.lock(); + if (!iFirstUpdate) { + QT_TRYCATCH_LEAVING(updateActiveAccessPoints()); + updateStatesToSnaps(); + mutex.unlock(); + QT_TRYCATCH_LEAVING(emit configurationAdded(ptr)); + mutex.lock(); + } } else { delete cpPriv; } @@ -478,6 +494,10 @@ void SymbianEngine::updateConfigurationsL() stopCommsDatabaseNotifications(); TRAP_IGNORE(defaultConfig = defaultConfigurationL()); startCommsDatabaseNotifications(); + +#ifdef SNAP_FUNCTIONALITY_AVAILABLE + updateStatesToSnaps(); +#endif } #ifdef SNAP_FUNCTIONALITY_AVAILABLE @@ -711,7 +731,8 @@ void SymbianEngine::updateActiveAccessPoints() #endif if (ptr) { iConnectionMonitor.GetIntAttribute(connectionId, subConnectionCount, KConnectionStatus, connectionStatus, status); - User::WaitForRequest(status); + User::WaitForRequest(status); + if (connectionStatus == KLinkLayerOpen) { online = true; inactiveConfigs.removeOne(ident); -- cgit v0.12 From 4f0f36b0cc28a7620d8292c9248831176ab2b640 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Wed, 28 Jul 2010 14:12:30 +1000 Subject: Cherry pick fix for QTMOBILITY-408 from Qt Mobility. 7f9a8ebcfe86d3df428707888c3ab5fcd10226a4 (cherry picked from commit 71ef5269c03d6230e6ebbf6f3c0b6f8836739ec3) --- src/plugins/bearer/icd/qnetworksession_impl.cpp | 59 +++++++++++-------------- src/plugins/bearer/icd/qnetworksession_impl.h | 8 +++- 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp index e375b4f..7af9962 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.cpp +++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp @@ -235,7 +235,7 @@ void QNetworkSessionPrivateImpl::updateIdentifier(const QString &newId) } -quint64 QNetworkSessionPrivateImpl::getStatistics(bool sent) const +QNetworkSessionPrivateImpl::Statistics QNetworkSessionPrivateImpl::getStatistics() const { /* This could be also implemented by using the Maemo::Icd::statistics() * that gets the statistics data for a specific IAP. Change if @@ -243,56 +243,51 @@ quint64 QNetworkSessionPrivateImpl::getStatistics(bool sent) const */ Maemo::Icd icd; QList<Maemo::IcdStatisticsResult> stats_results; - quint64 counter_rx = 0, counter_tx = 0; + Statistics stats = { 0, 0, 0}; - if (!icd.statistics(stats_results)) { - return 0; - } + if (!icd.statistics(stats_results)) + return stats; foreach (const Maemo::IcdStatisticsResult &res, stats_results) { - if (res.params.network_attrs & ICD_NW_ATTR_IAPNAME) { - /* network_id is the IAP UUID */ - if (QString(res.params.network_id.data()) == activeConfig.identifier()) { - counter_tx = res.bytes_sent; - counter_rx = res.bytes_received; - } - } else { - /* We probably will never get to this branch */ - IcdNetworkConfigurationPrivate *icdConfig = - toIcdConfig(privateConfiguration(activeConfig)); + if (res.params.network_attrs & ICD_NW_ATTR_IAPNAME) { + /* network_id is the IAP UUID */ + if (QString(res.params.network_id.data()) == activeConfig.identifier()) { + stats.txData = res.bytes_sent; + stats.rxData = res.bytes_received; + stats.activeTime = res.time_active; + } + } else { + /* We probably will never get to this branch */ + IcdNetworkConfigurationPrivate *icdConfig = + toIcdConfig(privateConfiguration(activeConfig)); - icdConfig->mutex.lock(); - if (res.params.network_id == icdConfig->network_id) { - counter_tx = res.bytes_sent; - counter_rx = res.bytes_received; - } - icdConfig->mutex.unlock(); - } + icdConfig->mutex.lock(); + if (res.params.network_id == icdConfig->network_id) { + stats.txData = res.bytes_sent; + stats.rxData = res.bytes_received; + stats.activeTime = res.time_active; + } + icdConfig->mutex.unlock(); + } } - if (sent) - return counter_tx; - else - return counter_rx; + return stats; } quint64 QNetworkSessionPrivateImpl::bytesWritten() const { - return getStatistics(true); + return getStatistics().txData; } quint64 QNetworkSessionPrivateImpl::bytesReceived() const { - return getStatistics(false); + return getStatistics().rxData; } quint64 QNetworkSessionPrivateImpl::activeTime() const { - if (startTime.isNull()) { - return 0; - } - return startTime.secsTo(QDateTime::currentDateTime()); + return getStatistics().activeTime; } diff --git a/src/plugins/bearer/icd/qnetworksession_impl.h b/src/plugins/bearer/icd/qnetworksession_impl.h index c43b1f0..390e508 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.h +++ b/src/plugins/bearer/icd/qnetworksession_impl.h @@ -170,6 +170,12 @@ private: QNetworkConfigurationManager manager; QIcdEngine *engine; + struct Statistics { + quint64 txData; + quint64 rxData; + quint64 activeTime; + }; + // The config set on QNetworkSession. QNetworkConfiguration config; @@ -186,7 +192,7 @@ private: friend class IcdListener; void updateState(QNetworkSession::State); void updateIdentifier(const QString &newId); - quint64 getStatistics(bool sent) const; + Statistics getStatistics() const; void cleanupSession(void); void updateProxyInformation(); -- cgit v0.12 From aa2039086c3c165b8c5655d58f8673536160002d Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Wed, 28 Jul 2010 14:23:16 +1000 Subject: Cherry pick fix for MOBILITY-1234 from Qt Mobility. e51af0d74f8bb6ca6100d2338671d2d053bfed01 (cherry picked from commit 9814b2225b70d6b2f758e9dbe98f8e1662049b37) --- src/plugins/bearer/symbian/symbianengine.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index f87ea3c..4bd6d2f 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -1197,6 +1197,8 @@ void SymbianEngine::EventL(const CConnMonEventBase& aEvent) QT_TRYCATCH_LEAVING(changeConfigurationStateAtMaxTo(ptr, QNetworkConfiguration::Defined)); } } + // Something has in IAPs, update states to SNAPs + updateStatesToSnaps(); } break; -- cgit v0.12 From 5c0d4e26cc31d18c8db1f2a01a10a994836101f2 Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Wed, 28 Jul 2010 16:53:14 +0200 Subject: QMenu and QStyleSheetStyle: fix setting a border. The native border would be drawn over the one drawn by the QStyleSheetStyle Regression since 68a498284e206e2bb000bc35331c966f3790f607 Reviewed-by: Gabriel Task-number: QTBUG-10785 (cherry picked from commit 0318f0d5a43a78831f3bf4cb043d0b2b41cd9987) --- src/gui/styles/qstylesheetstyle.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 43fa4b9..dff525e 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -4283,6 +4283,13 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op } break; + case PE_FrameMenu: + if (rule.hasDrawable()) { + // Drawn by PE_PanelMenu + return; + } + break; + case PE_PanelMenuBar: if (rule.hasDrawable()) { // Drawn by PE_Widget -- cgit v0.12 From 3557e6b68774d2fc0c9d80bb7250808ea662b1ac Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Wed, 21 Jul 2010 15:52:40 +0200 Subject: make "configure -qt-gif" work again on Windows The value for GIF must be "plugin" and not "yes". Reviewed-by: danimo (cherry picked from commit d8fbc4e0264f8bfabc12bc49ed7724eb2c96c93e) --- tools/configure/configureapp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index c3498e3..f7dac93 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -581,8 +581,8 @@ void Configure::parseCmdLine() // Image formats -------------------------------------------- else if (configCmdLine.at(i) == "-no-gif") dictionary[ "GIF" ] = "no"; - else if (configCmdLine.at(i) == "-qt-gif") - dictionary[ "GIF" ] = "yes"; + else if (configCmdLine.at(i) == "-qt-gif") + dictionary[ "GIF" ] = "plugin"; else if (configCmdLine.at(i) == "-no-libtiff") { dictionary[ "TIFF"] = "no"; -- cgit v0.12 From c8f85c4e94eaf894ecdb7ef854c194fe9f478d2d Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Wed, 28 Jul 2010 14:21:35 +1000 Subject: Update Symbian emulator QtOpenVGu.def, QtNetworku.def, QtCoreu.def files for Qt 4.7 to be in sync between respective def files in Qt 4.6.3 Task-number: QTBUG-12468 Reviewed-by: Jason Barron (cherry picked from commit 87c135ace11236fb33ebb0112f219b81425ed6f8) --- src/s60installs/bwins/QtCoreu.def | 132 +++++++------ src/s60installs/bwins/QtNetworku.def | 364 +++++++++++++++++------------------ src/s60installs/bwins/QtOpenVGu.def | 15 +- 3 files changed, 252 insertions(+), 259 deletions(-) diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index 94be1bb..1a79f63 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -3122,7 +3122,7 @@ EXPORTS ?reset@QIODevice@@UAE_NXZ @ 3121 NONAME ; bool QIODevice::reset(void) ?reset@QMetaProperty@@QBE_NPAVQObject@@@Z @ 3122 NONAME ; bool QMetaProperty::reset(class QObject *) const ?reset@QTextStream@@QAEXXZ @ 3123 NONAME ; void QTextStream::reset(void) - ?resetCurrentSender@QObjectPrivate@@SAXPAVQObject@@PAUSender@1@1@Z @ 3124 NONAME ABSENT ; void QObjectPrivate::resetCurrentSender(class QObject *, struct QObjectPrivate::Sender *, struct QObjectPrivate::Sender *) + ?resetCurrentSender@QObjectPrivate@@SAXPAVQObject@@PAUSender@1@1@Z @ 3124 NONAME ; void QObjectPrivate::resetCurrentSender(class QObject *, struct QObjectPrivate::Sender *, struct QObjectPrivate::Sender *) ?resetDeleteWatch@QObjectPrivate@@SAXPAV1@PAHH@Z @ 3125 NONAME ; void QObjectPrivate::resetDeleteWatch(class QObjectPrivate *, int *, int) ?resetStatus@QDataStream@@QAEXXZ @ 3126 NONAME ; void QDataStream::resetStatus(void) ?resetStatus@QTextStream@@QAEXXZ @ 3127 NONAME ; void QTextStream::resetStatus(void) @@ -3281,7 +3281,7 @@ EXPORTS ?setCoords@QRectF@@QAEXMMMM@Z @ 3280 NONAME ; void QRectF::setCoords(float, float, float, float) ?setCurrent@QDir@@SA_NABVQString@@@Z @ 3281 NONAME ; bool QDir::setCurrent(class QString const &) ?setCurrentPath@QFSFileEngine@@SA_NABVQString@@@Z @ 3282 NONAME ; bool QFSFileEngine::setCurrentPath(class QString const &) - ?setCurrentSender@QObjectPrivate@@SAPAUSender@1@PAVQObject@@PAU21@@Z @ 3283 NONAME ABSENT ; struct QObjectPrivate::Sender * QObjectPrivate::setCurrentSender(class QObject *, struct QObjectPrivate::Sender *) + ?setCurrentSender@QObjectPrivate@@SAPAUSender@1@PAVQObject@@PAU21@@Z @ 3283 NONAME ; struct QObjectPrivate::Sender * QObjectPrivate::setCurrentSender(class QObject *, struct QObjectPrivate::Sender *) ?setCurrentTime@QAbstractAnimation@@QAEXH@Z @ 3284 NONAME ; void QAbstractAnimation::setCurrentTime(int) ?setCurrentTime@QTimeLine@@QAEXH@Z @ 3285 NONAME ; void QTimeLine::setCurrentTime(int) ?setCurveShape@QTimeLine@@QAEXW4CurveShape@1@@Z @ 3286 NONAME ; void QTimeLine::setCurveShape(enum QTimeLine::CurveShape) @@ -4417,71 +4417,69 @@ EXPORTS ?QBasicAtomicInt_testAndSetRelease@@YA_NPCHHH@Z @ 4416 NONAME ; bool QBasicAtomicInt_testAndSetRelease(int volatile *, int, int) ?QBasicAtomicInt_fetchAndStoreAcquire@@YAHPCHH@Z @ 4417 NONAME ; int QBasicAtomicInt_fetchAndStoreAcquire(int volatile *, int) ?QBasicAtomicInt_fetchAndAddAcquire@@YAHPCHH@Z @ 4418 NONAME ; int QBasicAtomicInt_fetchAndAddAcquire(int volatile *, int) - ??0QString@@QAE@PBVQChar@@@Z @ 4419 NONAME ; QString::QString(class QChar const *) - ??0QTextDecoder@@QAE@PBVQTextCodec@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4420 NONAME ; QTextDecoder::QTextDecoder(class QTextCodec const *, class QFlags<enum QTextCodec::ConversionFlag>) - ??0QTextEncoder@@QAE@PBVQTextCodec@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4421 NONAME ; QTextEncoder::QTextEncoder(class QTextCodec const *, class QFlags<enum QTextCodec::ConversionFlag>) - ??0QVariant@@QAE@ABVQEasingCurve@@@Z @ 4422 NONAME ; QVariant::QVariant(class QEasingCurve const &) - ??5@YAAAVQDataStream@@AAV0@AAVQEasingCurve@@@Z @ 4423 NONAME ; class QDataStream & operator>>(class QDataStream &, class QEasingCurve &) - ??6@YAAAVQDataStream@@AAV0@ABVQEasingCurve@@@Z @ 4424 NONAME ; class QDataStream & operator<<(class QDataStream &, class QEasingCurve const &) - ??8QElapsedTimer@@QBE_NABV0@@Z @ 4425 NONAME ; bool QElapsedTimer::operator==(class QElapsedTimer const &) const - ??9QElapsedTimer@@QBE_NABV0@@Z @ 4426 NONAME ; bool QElapsedTimer::operator!=(class QElapsedTimer const &) const - ??M@YA_NABVQElapsedTimer@@0@Z @ 4427 NONAME ; bool operator<(class QElapsedTimer const &, class QElapsedTimer const &) - ?append@QListData@@QAEPAPAXH@Z @ 4428 NONAME ; void * * QListData::append(int) - ?clearHistory@QStateMachinePrivate@@QAEXXZ @ 4429 NONAME ; void QStateMachinePrivate::clearHistory(void) - ?clockType@QElapsedTimer@@SA?AW4ClockType@1@XZ @ 4430 NONAME ; enum QElapsedTimer::ClockType QElapsedTimer::clockType(void) - ?currentDateTimeUtc@QDateTime@@SA?AV1@XZ @ 4431 NONAME ; class QDateTime QDateTime::currentDateTimeUtc(void) - ?currentMSecsSinceEpoch@QDateTime@@SA_JXZ @ 4432 NONAME ; long long QDateTime::currentMSecsSinceEpoch(void) - ?detach@QListData@@QAEPAUData@1@H@Z @ 4433 NONAME ; struct QListData::Data * QListData::detach(int) - ?detach_grow@QListData@@QAEPAUData@1@PAHH@Z @ 4434 NONAME ; struct QListData::Data * QListData::detach_grow(int *, int) - ?elapsed@QElapsedTimer@@QBE_JXZ @ 4435 NONAME ; long long QElapsedTimer::elapsed(void) const - ?fromMSecsSinceEpoch@QDateTime@@SA?AV1@_J@Z @ 4436 NONAME ; class QDateTime QDateTime::fromMSecsSinceEpoch(long long) - ?hasExpired@QElapsedTimer@@QBE_N_J@Z @ 4437 NONAME ; bool QElapsedTimer::hasExpired(long long) const - ?invalidate@QElapsedTimer@@QAEXXZ @ 4438 NONAME ; void QElapsedTimer::invalidate(void) - ?isMonotonic@QElapsedTimer@@SA_NXZ @ 4439 NONAME ; bool QElapsedTimer::isMonotonic(void) - ?isSharedWith@QByteArray@@QBE_NABV1@@Z @ 4440 NONAME ; bool QByteArray::isSharedWith(class QByteArray const &) const - ?isSharedWith@QString@@QBE_NABV1@@Z @ 4441 NONAME ; bool QString::isSharedWith(class QString const &) const - ?isValid@QElapsedTimer@@QBE_NXZ @ 4442 NONAME ; bool QElapsedTimer::isValid(void) const - ?makeDecoder@QTextCodec@@QBEPAVQTextDecoder@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4443 NONAME ; class QTextDecoder * QTextCodec::makeDecoder(class QFlags<enum QTextCodec::ConversionFlag>) const - ?makeEncoder@QTextCodec@@QBEPAVQTextEncoder@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4444 NONAME ; class QTextEncoder * QTextCodec::makeEncoder(class QFlags<enum QTextCodec::ConversionFlag>) const - ?msecsSinceReference@QElapsedTimer@@QBE_JXZ @ 4445 NONAME ; long long QElapsedTimer::msecsSinceReference(void) const - ?msecsTo@QElapsedTimer@@QBE_JABV1@@Z @ 4446 NONAME ; long long QElapsedTimer::msecsTo(class QElapsedTimer const &) const - ?qDecodeDataUrl@@YA?AU?$QPair@VQString@@VQByteArray@@@@ABVQUrl@@@Z @ 4447 NONAME ; struct QPair<class QString, class QByteArray> qDecodeDataUrl(class QUrl const &) - ?qDetectCPUFeatures@@YAIXZ @ 4448 NONAME ; unsigned int qDetectCPUFeatures(void) + ?validCodecs@QTextCodec@@CA_NXZ @ 4419 NONAME ; bool QTextCodec::validCodecs(void) + ?clearHistory@QStateMachinePrivate@@QAEXXZ @ 4420 NONAME ; void QStateMachinePrivate::clearHistory(void) + ?nativeArguments@QProcess@@QBE?AVQString@@XZ @ 4421 NONAME ; class QString QProcess::nativeArguments(void) const + ?detach@QListData@@QAEPAUData@1@H@Z @ 4422 NONAME ; struct QListData::Data * QListData::detach(int) + ?trUtf8@QEventDispatcherSymbian@@SA?AVQString@@PBD0H@Z @ 4423 NONAME ; class QString QEventDispatcherSymbian::trUtf8(char const *, char const *, int) + ?destroyed@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4424 NONAME ; void (*QAbstractDeclarativeData::destroyed)(class QAbstractDeclarativeData *, class QObject *) + ??M@YA_NABVQElapsedTimer@@0@Z @ 4425 NONAME ; bool operator<(class QElapsedTimer const &, class QElapsedTimer const &) + ?clockType@QElapsedTimer@@SA?AW4ClockType@1@XZ @ 4426 NONAME ; enum QElapsedTimer::ClockType QElapsedTimer::clockType(void) + ?isHighSurrogate@QChar@@SA_NI@Z @ 4427 NONAME ; bool QChar::isHighSurrogate(unsigned int) + ?start@QElapsedTimer@@QAEXXZ @ 4428 NONAME ; void QElapsedTimer::start(void) + ??0QVariant@@QAE@ABVQEasingCurve@@@Z @ 4429 NONAME ; QVariant::QVariant(class QEasingCurve const &) + ?isValid@QElapsedTimer@@QBE_NXZ @ 4430 NONAME ; bool QElapsedTimer::isValid(void) const + ?qt_metacast@QEventDispatcherSymbian@@UAEPAXPBD@Z @ 4431 NONAME ; void * QEventDispatcherSymbian::qt_metacast(char const *) + ?toMSecsSinceEpoch@QDateTime@@QBE_JXZ @ 4432 NONAME ; long long QDateTime::toMSecsSinceEpoch(void) const + ?hasExpired@QElapsedTimer@@QBE_N_J@Z @ 4433 NONAME ; bool QElapsedTimer::hasExpired(long long) const + ?makeEncoder@QTextCodec@@QBEPAVQTextEncoder@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4434 NONAME ; class QTextEncoder * QTextCodec::makeEncoder(class QFlags<enum QTextCodec::ConversionFlag>) const + ??9QElapsedTimer@@QBE_NABV0@@Z @ 4435 NONAME ; bool QElapsedTimer::operator!=(class QElapsedTimer const &) const + ?setRawData@QString@@QAEAAV1@PBVQChar@@H@Z @ 4436 NONAME ; class QString & QString::setRawData(class QChar const *, int) + ?registerTypedef@QMetaType@@SAHPBDH@Z @ 4437 NONAME ; int QMetaType::registerTypedef(char const *, int) + ??8QElapsedTimer@@QBE_NABV0@@Z @ 4438 NONAME ; bool QElapsedTimer::operator==(class QElapsedTimer const &) const + ?makeDecoder@QTextCodec@@QBEPAVQTextDecoder@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4439 NONAME ; class QTextDecoder * QTextCodec::makeDecoder(class QFlags<enum QTextCodec::ConversionFlag>) const + ?metaObject@QEventDispatcherSymbian@@UBEPBUQMetaObject@@XZ @ 4440 NONAME ; struct QMetaObject const * QEventDispatcherSymbian::metaObject(void) const + ?transitions@QState@@QBE?AV?$QList@PAVQAbstractTransition@@@@XZ @ 4441 NONAME ; class QList<class QAbstractTransition *> QState::transitions(void) const + ?qDetectCPUFeatures@@YAIXZ @ 4442 NONAME ; unsigned int qDetectCPUFeatures(void) + ?isSharedWith@QString@@QBE_NABV1@@Z @ 4443 NONAME ; bool QString::isSharedWith(class QString const &) const + ?parentChanged@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@1@ZA @ 4444 NONAME ; void (*QAbstractDeclarativeData::parentChanged)(class QAbstractDeclarativeData *, class QObject *, class QObject *) + ?currentMSecsSinceEpoch@QDateTime@@SA_JXZ @ 4445 NONAME ; long long QDateTime::currentMSecsSinceEpoch(void) + ?staticMetaObject@QEventDispatcherSymbian@@2UQMetaObject@@B @ 4446 NONAME ; struct QMetaObject const QEventDispatcherSymbian::staticMetaObject + ?msecsTo@QElapsedTimer@@QBE_JABV1@@Z @ 4447 NONAME ; long long QElapsedTimer::msecsTo(class QElapsedTimer const &) const + ?toEasingCurve@QVariant@@QBE?AVQEasingCurve@@XZ @ 4448 NONAME ; class QEasingCurve QVariant::toEasingCurve(void) const ?registerStreamOperators@QMetaType@@SAXHP6AXAAVQDataStream@@PBX@ZP6AX0PAX@Z@Z @ 4449 NONAME ; void QMetaType::registerStreamOperators(int, void (*)(class QDataStream &, void const *), void (*)(class QDataStream &, void *)) - ?registerTypedef@QMetaType@@SAHPBDH@Z @ 4450 NONAME ; int QMetaType::registerTypedef(char const *, int) - ?replace@QByteArray@@QAEAAV1@HHPBDH@Z @ 4451 NONAME ; class QByteArray & QByteArray::replace(int, int, char const *, int) - ?restart@QElapsedTimer@@QAE_JXZ @ 4452 NONAME ; long long QElapsedTimer::restart(void) - ?secsTo@QElapsedTimer@@QBE_JABV1@@Z @ 4453 NONAME ; long long QElapsedTimer::secsTo(class QElapsedTimer const &) const - ?setMSecsSinceEpoch@QDateTime@@QAEX_J@Z @ 4454 NONAME ; void QDateTime::setMSecsSinceEpoch(long long) - ?start@QElapsedTimer@@QAEXXZ @ 4455 NONAME ; void QElapsedTimer::start(void) - ?toEasingCurve@QVariant@@QBE?AVQEasingCurve@@XZ @ 4456 NONAME ; class QEasingCurve QVariant::toEasingCurve(void) const - ?toMSecsSinceEpoch@QDateTime@@QBE_JXZ @ 4457 NONAME ; long long QDateTime::toMSecsSinceEpoch(void) const - ?transitions@QState@@QBE?AV?$QList@PAVQAbstractTransition@@@@XZ @ 4458 NONAME ; class QList<class QAbstractTransition *> QState::transitions(void) const - ?validCodecs@QTextCodec@@CA_NXZ @ 4459 NONAME ; bool QTextCodec::validCodecs(void) - ?destroyed@QDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4460 NONAME ABSENT ; void (*QDeclarativeData::destroyed)(class QDeclarativeData *, class QObject *) - ?parentChanged@QDeclarativeData@@2P6AXPAV1@PAVQObject@@1@ZA @ 4461 NONAME ABSENT ; void (*QDeclarativeData::parentChanged)(class QDeclarativeData *, class QObject *, class QObject *) - ?parentChanged@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@1@ZA @ 4462 NONAME ; void (*QAbstractDeclarativeData::parentChanged)(class QAbstractDeclarativeData *, class QObject *, class QObject *) - ?destroyed@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4463 NONAME ; void (*QAbstractDeclarativeData::destroyed)(class QAbstractDeclarativeData *, class QObject *) - ?selectThread@QEventDispatcherSymbian@@AAEAAVQSelectThread@@XZ @ 4464 NONAME ; class QSelectThread & QEventDispatcherSymbian::selectThread(void) - ?setRawData@QByteArray@@QAEAAV1@PBDI@Z @ 4465 NONAME ; class QByteArray & QByteArray::setRawData(char const *, unsigned int) - ?setRawData@QString@@QAEAAV1@PBVQChar@@H@Z @ 4466 NONAME ; class QString & QString::setRawData(class QChar const *, int) - ?getStaticMetaObject@QEventDispatcherSymbian@@SAABUQMetaObject@@XZ @ 4467 NONAME ; struct QMetaObject const & QEventDispatcherSymbian::getStaticMetaObject(void) - ?isHighSurrogate@QChar@@SA_NI@Z @ 4468 NONAME ; bool QChar::isHighSurrogate(unsigned int) - ?isLowSurrogate@QChar@@SA_NI@Z @ 4469 NONAME ; bool QChar::isLowSurrogate(unsigned int) - ?metaObject@QEventDispatcherSymbian@@UBEPBUQMetaObject@@XZ @ 4470 NONAME ; struct QMetaObject const * QEventDispatcherSymbian::metaObject(void) const - ?msecsTo@QDateTime@@QBE_JABV1@@Z @ 4471 NONAME ; long long QDateTime::msecsTo(class QDateTime const &) const - ?qt_metacall@QEventDispatcherSymbian@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 4472 NONAME ; int QEventDispatcherSymbian::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacast@QEventDispatcherSymbian@@UAEPAXPBD@Z @ 4473 NONAME ; void * QEventDispatcherSymbian::qt_metacast(char const *) - ?requiresSurrogates@QChar@@SA_NI@Z @ 4474 NONAME ; bool QChar::requiresSurrogates(unsigned int) - ?symbianInit@QCoreApplicationPrivate@@QAEXXZ @ 4475 NONAME ; void QCoreApplicationPrivate::symbianInit(void) - ?tr@QEventDispatcherSymbian@@SA?AVQString@@PBD0@Z @ 4476 NONAME ; class QString QEventDispatcherSymbian::tr(char const *, char const *) - ?tr@QEventDispatcherSymbian@@SA?AVQString@@PBD0H@Z @ 4477 NONAME ; class QString QEventDispatcherSymbian::tr(char const *, char const *, int) - ?trUtf8@QEventDispatcherSymbian@@SA?AVQString@@PBD0@Z @ 4478 NONAME ; class QString QEventDispatcherSymbian::trUtf8(char const *, char const *) - ?trUtf8@QEventDispatcherSymbian@@SA?AVQString@@PBD0H@Z @ 4479 NONAME ; class QString QEventDispatcherSymbian::trUtf8(char const *, char const *, int) - ?staticMetaObject@QEventDispatcherSymbian@@2UQMetaObject@@B @ 4480 NONAME ; struct QMetaObject const QEventDispatcherSymbian::staticMetaObject + ?replace@QByteArray@@QAEAAV1@HHPBDH@Z @ 4450 NONAME ; class QByteArray & QByteArray::replace(int, int, char const *, int) + ?elapsed@QElapsedTimer@@QBE_JXZ @ 4451 NONAME ; long long QElapsedTimer::elapsed(void) const + ??0QTextEncoder@@QAE@PBVQTextCodec@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4452 NONAME ; QTextEncoder::QTextEncoder(class QTextCodec const *, class QFlags<enum QTextCodec::ConversionFlag>) + ??6@YAAAVQDataStream@@AAV0@ABVQEasingCurve@@@Z @ 4453 NONAME ; class QDataStream & operator<<(class QDataStream &, class QEasingCurve const &) + ?qDecodeDataUrl@@YA?AU?$QPair@VQString@@VQByteArray@@@@ABVQUrl@@@Z @ 4454 NONAME ; struct QPair<class QString, class QByteArray> qDecodeDataUrl(class QUrl const &) + ?trUtf8@QEventDispatcherSymbian@@SA?AVQString@@PBD0@Z @ 4455 NONAME ; class QString QEventDispatcherSymbian::trUtf8(char const *, char const *) + ?setNativeArguments@QProcess@@QAEXABVQString@@@Z @ 4456 NONAME ; void QProcess::setNativeArguments(class QString const &) + ?msecsTo@QDateTime@@QBE_JABV1@@Z @ 4457 NONAME ; long long QDateTime::msecsTo(class QDateTime const &) const + ?tr@QEventDispatcherSymbian@@SA?AVQString@@PBD0H@Z @ 4458 NONAME ; class QString QEventDispatcherSymbian::tr(char const *, char const *, int) + ?setMSecsSinceEpoch@QDateTime@@QAEX_J@Z @ 4459 NONAME ; void QDateTime::setMSecsSinceEpoch(long long) + ?tr@QEventDispatcherSymbian@@SA?AVQString@@PBD0@Z @ 4460 NONAME ; class QString QEventDispatcherSymbian::tr(char const *, char const *) + ?isSharedWith@QByteArray@@QBE_NABV1@@Z @ 4461 NONAME ; bool QByteArray::isSharedWith(class QByteArray const &) const + ?secsTo@QElapsedTimer@@QBE_JABV1@@Z @ 4462 NONAME ; long long QElapsedTimer::secsTo(class QElapsedTimer const &) const + ??5@YAAAVQDataStream@@AAV0@AAVQEasingCurve@@@Z @ 4463 NONAME ; class QDataStream & operator>>(class QDataStream &, class QEasingCurve &) + ??0QString@@QAE@PBVQChar@@@Z @ 4464 NONAME ; QString::QString(class QChar const *) + ?append@QListData@@QAEPAPAXH@Z @ 4465 NONAME ; void * * QListData::append(int) + ?getStaticMetaObject@QEventDispatcherSymbian@@SAABUQMetaObject@@XZ @ 4466 NONAME ; struct QMetaObject const & QEventDispatcherSymbian::getStaticMetaObject(void) + ?peek@QIODevicePrivate@@UAE?AVQByteArray@@_J@Z @ 4467 NONAME ; class QByteArray QIODevicePrivate::peek(long long) + ?detach_grow@QListData@@QAEPAUData@1@PAHH@Z @ 4468 NONAME ; struct QListData::Data * QListData::detach_grow(int *, int) + ?symbianInit@QCoreApplicationPrivate@@QAEXXZ @ 4469 NONAME ; void QCoreApplicationPrivate::symbianInit(void) + ??0QTextDecoder@@QAE@PBVQTextCodec@@V?$QFlags@W4ConversionFlag@QTextCodec@@@@@Z @ 4470 NONAME ; QTextDecoder::QTextDecoder(class QTextCodec const *, class QFlags<enum QTextCodec::ConversionFlag>) + ?requiresSurrogates@QChar@@SA_NI@Z @ 4471 NONAME ; bool QChar::requiresSurrogates(unsigned int) + ?isLowSurrogate@QChar@@SA_NI@Z @ 4472 NONAME ; bool QChar::isLowSurrogate(unsigned int) + ?qt_metacall@QEventDispatcherSymbian@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 4473 NONAME ; int QEventDispatcherSymbian::qt_metacall(enum QMetaObject::Call, int, void * *) + ?setRawData@QByteArray@@QAEAAV1@PBDI@Z @ 4474 NONAME ; class QByteArray & QByteArray::setRawData(char const *, unsigned int) + ?fromMSecsSinceEpoch@QDateTime@@SA?AV1@_J@Z @ 4475 NONAME ; class QDateTime QDateTime::fromMSecsSinceEpoch(long long) + ?invalidate@QElapsedTimer@@QAEXXZ @ 4476 NONAME ; void QElapsedTimer::invalidate(void) + ?restart@QElapsedTimer@@QAE_JXZ @ 4477 NONAME ; long long QElapsedTimer::restart(void) + ?currentDateTimeUtc@QDateTime@@SA?AV1@XZ @ 4478 NONAME ; class QDateTime QDateTime::currentDateTimeUtc(void) + ?isMonotonic@QElapsedTimer@@SA_NXZ @ 4479 NONAME ; bool QElapsedTimer::isMonotonic(void) + ?peek@QIODevicePrivate@@UAE_JPAD_J@Z @ 4480 NONAME ; long long QIODevicePrivate::peek(char *, long long) ?textDirection@QLocale@@QBE?AW4LayoutDirection@Qt@@XZ @ 4481 NONAME ; enum Qt::LayoutDirection QLocale::textDirection(void) const - ?peek@QIODevicePrivate@@UAE_JPAD_J@Z @ 4482 NONAME ; long long QIODevicePrivate::peek(char *, long long) - ?peek@QIODevicePrivate@@UAE?AVQByteArray@@_J@Z @ 4483 NONAME ; class QByteArray QIODevicePrivate::peek(long long) - ?nativeArguments@QProcess@@QBE?AVQString@@XZ @ 4484 NONAME ; class QString QProcess::nativeArguments(void) const - ?setNativeArguments@QProcess@@QAEXABVQString@@@Z @ 4485 NONAME ; void QProcess::setNativeArguments(class QString const &) + ?msecsSinceReference@QElapsedTimer@@QBE_JXZ @ 4482 NONAME ; long long QElapsedTimer::msecsSinceReference(void) const + ?selectThread@QEventDispatcherSymbian@@AAEAAVQSelectThread@@XZ @ 4483 NONAME ; class QSelectThread & QEventDispatcherSymbian::selectThread(void) diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def index 9911b36..48af60c 100644 --- a/src/s60installs/bwins/QtNetworku.def +++ b/src/s60installs/bwins/QtNetworku.def @@ -962,189 +962,185 @@ EXPORTS ?staticMetaObject@QTcpServer@@2UQMetaObject@@B @ 961 NONAME ; struct QMetaObject const QTcpServer::staticMetaObject ?staticMetaObject@QUdpSocket@@2UQMetaObject@@B @ 962 NONAME ; struct QMetaObject const QUdpSocket::staticMetaObject ?staticMetaObject@QAbstractSocket@@2UQMetaObject@@B @ 963 NONAME ; struct QMetaObject const QAbstractSocket::staticMetaObject - ??0QBearerEngine@@QAE@PAVQObject@@@Z @ 964 NONAME ; QBearerEngine::QBearerEngine(class QObject *) - ??0QBearerEnginePlugin@@QAE@PAVQObject@@@Z @ 965 NONAME ; QBearerEnginePlugin::QBearerEnginePlugin(class QObject *) - ??0QNetworkConfiguration@@QAE@ABV0@@Z @ 966 NONAME ; QNetworkConfiguration::QNetworkConfiguration(class QNetworkConfiguration const &) - ??0QNetworkConfiguration@@QAE@XZ @ 967 NONAME ; QNetworkConfiguration::QNetworkConfiguration(void) - ??0QNetworkConfigurationManager@@QAE@PAVQObject@@@Z @ 968 NONAME ; QNetworkConfigurationManager::QNetworkConfigurationManager(class QObject *) - ??0QNetworkConfigurationManagerPrivate@@QAE@XZ @ 969 NONAME ; QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate(void) - ??0QNetworkSession@@QAE@ABVQNetworkConfiguration@@PAVQObject@@@Z @ 970 NONAME ; QNetworkSession::QNetworkSession(class QNetworkConfiguration const &, class QObject *) - ??0QNetworkSessionPrivate@@QAE@XZ @ 971 NONAME ; QNetworkSessionPrivate::QNetworkSessionPrivate(void) - ??1QBearerEngine@@UAE@XZ @ 972 NONAME ; QBearerEngine::~QBearerEngine(void) - ??1QBearerEngineFactoryInterface@@UAE@XZ @ 973 NONAME ; QBearerEngineFactoryInterface::~QBearerEngineFactoryInterface(void) - ??1QBearerEnginePlugin@@UAE@XZ @ 974 NONAME ; QBearerEnginePlugin::~QBearerEnginePlugin(void) - ??1QNetworkConfiguration@@QAE@XZ @ 975 NONAME ; QNetworkConfiguration::~QNetworkConfiguration(void) - ??1QNetworkConfigurationManager@@UAE@XZ @ 976 NONAME ; QNetworkConfigurationManager::~QNetworkConfigurationManager(void) - ??1QNetworkConfigurationManagerPrivate@@UAE@XZ @ 977 NONAME ; QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate(void) - ??1QNetworkSession@@UAE@XZ @ 978 NONAME ; QNetworkSession::~QNetworkSession(void) - ??1QNetworkSessionPrivate@@UAE@XZ @ 979 NONAME ; QNetworkSessionPrivate::~QNetworkSessionPrivate(void) - ??4QNetworkConfiguration@@QAEAAV0@ABV0@@Z @ 980 NONAME ; class QNetworkConfiguration & QNetworkConfiguration::operator=(class QNetworkConfiguration const &) - ??8QNetworkConfiguration@@QBE_NABV0@@Z @ 981 NONAME ; bool QNetworkConfiguration::operator==(class QNetworkConfiguration const &) const - ??9QNetworkConfiguration@@QBE_NABV0@@Z @ 982 NONAME ; bool QNetworkConfiguration::operator!=(class QNetworkConfiguration const &) const - ??_EQBearerEngine@@UAE@I@Z @ 983 NONAME ; QBearerEngine::~QBearerEngine(unsigned int) - ??_EQBearerEngineFactoryInterface@@UAE@I@Z @ 984 NONAME ; QBearerEngineFactoryInterface::~QBearerEngineFactoryInterface(unsigned int) - ??_EQBearerEnginePlugin@@UAE@I@Z @ 985 NONAME ; QBearerEnginePlugin::~QBearerEnginePlugin(unsigned int) - ??_EQNetworkConfigurationManager@@UAE@I@Z @ 986 NONAME ; QNetworkConfigurationManager::~QNetworkConfigurationManager(unsigned int) - ??_EQNetworkConfigurationManagerPrivate@@UAE@I@Z @ 987 NONAME ; QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate(unsigned int) - ??_EQNetworkSession@@UAE@I@Z @ 988 NONAME ; QNetworkSession::~QNetworkSession(unsigned int) - ??_EQNetworkSessionPrivate@@UAE@I@Z @ 989 NONAME ; QNetworkSessionPrivate::~QNetworkSessionPrivate(unsigned int) - ?abort@QNetworkConfigurationManagerPrivate@@IAEXXZ @ 990 NONAME ; void QNetworkConfigurationManagerPrivate::abort(void) - ?accept@QNetworkSession@@QAEXXZ @ 991 NONAME ; void QNetworkSession::accept(void) - ?activeConfiguration@QNetworkAccessManager@@QBE?AVQNetworkConfiguration@@XZ @ 992 NONAME ; class QNetworkConfiguration QNetworkAccessManager::activeConfiguration(void) const - ?activeTime@QNetworkSession@@QBE_KXZ @ 993 NONAME ; unsigned long long QNetworkSession::activeTime(void) const - ?allConfigurations@QNetworkConfigurationManager@@QBE?AV?$QList@VQNetworkConfiguration@@@@V?$QFlags@W4StateFlag@QNetworkConfiguration@@@@@Z @ 994 NONAME ; class QList<class QNetworkConfiguration> QNetworkConfigurationManager::allConfigurations(class QFlags<enum QNetworkConfiguration::StateFlag>) const - ?bearerName@QNetworkConfiguration@@QBE?AVQString@@XZ @ 995 NONAME ; class QString QNetworkConfiguration::bearerName(void) const - ?bytesReceived@QNetworkSession@@QBE_KXZ @ 996 NONAME ; unsigned long long QNetworkSession::bytesReceived(void) const - ?bytesWritten@QNetworkSession@@QBE_KXZ @ 997 NONAME ; unsigned long long QNetworkSession::bytesWritten(void) const - ?capabilities@QNetworkConfigurationManager@@QBE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 998 NONAME ; class QFlags<enum QNetworkConfigurationManager::Capability> QNetworkConfigurationManager::capabilities(void) const - ?children@QNetworkConfiguration@@QBE?AV?$QList@VQNetworkConfiguration@@@@XZ @ 999 NONAME ; class QList<class QNetworkConfiguration> QNetworkConfiguration::children(void) const - ?close@QNetworkSession@@QAEXXZ @ 1000 NONAME ; void QNetworkSession::close(void) - ?closed@QNetworkSession@@IAEXXZ @ 1001 NONAME ; void QNetworkSession::closed(void) - ?closed@QNetworkSessionPrivate@@IAEXXZ @ 1002 NONAME ; void QNetworkSessionPrivate::closed(void) - ?configuration@QNetworkAccessManager@@QBE?AVQNetworkConfiguration@@XZ @ 1003 NONAME ; class QNetworkConfiguration QNetworkAccessManager::configuration(void) const - ?configuration@QNetworkSession@@QBE?AVQNetworkConfiguration@@XZ @ 1004 NONAME ; class QNetworkConfiguration QNetworkSession::configuration(void) const - ?configurationAdded@QBearerEngine@@IAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1005 NONAME ; void QBearerEngine::configurationAdded(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) - ?configurationAdded@QNetworkConfigurationManager@@IAEXABVQNetworkConfiguration@@@Z @ 1006 NONAME ; void QNetworkConfigurationManager::configurationAdded(class QNetworkConfiguration const &) - ?configurationAdded@QNetworkConfigurationManagerPrivate@@AAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1007 NONAME ; void QNetworkConfigurationManagerPrivate::configurationAdded(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) - ?configurationAdded@QNetworkConfigurationManagerPrivate@@IAEXABVQNetworkConfiguration@@@Z @ 1008 NONAME ; void QNetworkConfigurationManagerPrivate::configurationAdded(class QNetworkConfiguration const &) - ?configurationChanged@QBearerEngine@@IAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1009 NONAME ; void QBearerEngine::configurationChanged(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) - ?configurationChanged@QNetworkConfigurationManager@@IAEXABVQNetworkConfiguration@@@Z @ 1010 NONAME ; void QNetworkConfigurationManager::configurationChanged(class QNetworkConfiguration const &) - ?configurationChanged@QNetworkConfigurationManagerPrivate@@AAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1011 NONAME ; void QNetworkConfigurationManagerPrivate::configurationChanged(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) - ?configurationChanged@QNetworkConfigurationManagerPrivate@@IAEXABVQNetworkConfiguration@@@Z @ 1012 NONAME ; void QNetworkConfigurationManagerPrivate::configurationChanged(class QNetworkConfiguration const &) - ?configurationFromIdentifier@QNetworkConfigurationManager@@QBE?AVQNetworkConfiguration@@ABVQString@@@Z @ 1013 NONAME ; class QNetworkConfiguration QNetworkConfigurationManager::configurationFromIdentifier(class QString const &) const - ?configurationRemoved@QBearerEngine@@IAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1014 NONAME ; void QBearerEngine::configurationRemoved(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) - ?configurationRemoved@QNetworkConfigurationManager@@IAEXABVQNetworkConfiguration@@@Z @ 1015 NONAME ; void QNetworkConfigurationManager::configurationRemoved(class QNetworkConfiguration const &) - ?configurationRemoved@QNetworkConfigurationManagerPrivate@@AAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1016 NONAME ; void QNetworkConfigurationManagerPrivate::configurationRemoved(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) - ?configurationRemoved@QNetworkConfigurationManagerPrivate@@IAEXABVQNetworkConfiguration@@@Z @ 1017 NONAME ; void QNetworkConfigurationManagerPrivate::configurationRemoved(class QNetworkConfiguration const &) - ?configurationUpdateComplete@QNetworkConfigurationManagerPrivate@@IAEXXZ @ 1018 NONAME ; void QNetworkConfigurationManagerPrivate::configurationUpdateComplete(void) - ?connectNotify@QNetworkSession@@MAEXPBD@Z @ 1019 NONAME ; void QNetworkSession::connectNotify(char const *) - ?defaultConfiguration@QNetworkConfigurationManager@@QBE?AVQNetworkConfiguration@@XZ @ 1020 NONAME ; class QNetworkConfiguration QNetworkConfigurationManager::defaultConfiguration(void) const - ?disconnectNotify@QNetworkSession@@MAEXPBD@Z @ 1021 NONAME ; void QNetworkSession::disconnectNotify(char const *) - ?engines@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@PAVQBearerEngine@@@@XZ @ 1022 NONAME ; class QList<class QBearerEngine *> QNetworkConfigurationManagerPrivate::engines(void) - ?error@QNetworkSession@@IAEXW4SessionError@1@@Z @ 1023 NONAME ; void QNetworkSession::error(enum QNetworkSession::SessionError) - ?error@QNetworkSession@@QBE?AW4SessionError@1@XZ @ 1024 NONAME ; enum QNetworkSession::SessionError QNetworkSession::error(void) const - ?error@QNetworkSessionPrivate@@IAEXW4SessionError@QNetworkSession@@@Z @ 1025 NONAME ; void QNetworkSessionPrivate::error(enum QNetworkSession::SessionError) - ?errorString@QNetworkSession@@QBE?AVQString@@XZ @ 1026 NONAME ; class QString QNetworkSession::errorString(void) const - ?getStaticMetaObject@QBearerEngine@@SAABUQMetaObject@@XZ @ 1027 NONAME ; struct QMetaObject const & QBearerEngine::getStaticMetaObject(void) - ?getStaticMetaObject@QBearerEnginePlugin@@SAABUQMetaObject@@XZ @ 1028 NONAME ; struct QMetaObject const & QBearerEnginePlugin::getStaticMetaObject(void) - ?getStaticMetaObject@QNetworkConfigurationManager@@SAABUQMetaObject@@XZ @ 1029 NONAME ; struct QMetaObject const & QNetworkConfigurationManager::getStaticMetaObject(void) - ?getStaticMetaObject@QNetworkConfigurationManagerPrivate@@SAABUQMetaObject@@XZ @ 1030 NONAME ; struct QMetaObject const & QNetworkConfigurationManagerPrivate::getStaticMetaObject(void) - ?getStaticMetaObject@QNetworkSession@@SAABUQMetaObject@@XZ @ 1031 NONAME ; struct QMetaObject const & QNetworkSession::getStaticMetaObject(void) - ?getStaticMetaObject@QNetworkSessionPrivate@@SAABUQMetaObject@@XZ @ 1032 NONAME ; struct QMetaObject const & QNetworkSessionPrivate::getStaticMetaObject(void) - ?identifier@QNetworkConfiguration@@QBE?AVQString@@XZ @ 1033 NONAME ; class QString QNetworkConfiguration::identifier(void) const - ?ignore@QNetworkSession@@QAEXXZ @ 1034 NONAME ; void QNetworkSession::ignore(void) - ?interface@QNetworkSession@@QBE?AVQNetworkInterface@@XZ @ 1035 NONAME ; class QNetworkInterface QNetworkSession::interface(void) const - ?isOnline@QNetworkConfigurationManager@@QBE_NXZ @ 1036 NONAME ; bool QNetworkConfigurationManager::isOnline(void) const - ?isOpen@QNetworkSession@@QBE_NXZ @ 1037 NONAME ; bool QNetworkSession::isOpen(void) const - ?isRoamingAvailable@QNetworkConfiguration@@QBE_NXZ @ 1038 NONAME ; bool QNetworkConfiguration::isRoamingAvailable(void) const - ?isValid@QNetworkConfiguration@@QBE_NXZ @ 1039 NONAME ; bool QNetworkConfiguration::isValid(void) const - ?metaObject@QBearerEngine@@UBEPBUQMetaObject@@XZ @ 1040 NONAME ; struct QMetaObject const * QBearerEngine::metaObject(void) const - ?metaObject@QBearerEnginePlugin@@UBEPBUQMetaObject@@XZ @ 1041 NONAME ; struct QMetaObject const * QBearerEnginePlugin::metaObject(void) const - ?metaObject@QNetworkConfigurationManager@@UBEPBUQMetaObject@@XZ @ 1042 NONAME ; struct QMetaObject const * QNetworkConfigurationManager::metaObject(void) const - ?metaObject@QNetworkConfigurationManagerPrivate@@UBEPBUQMetaObject@@XZ @ 1043 NONAME ; struct QMetaObject const * QNetworkConfigurationManagerPrivate::metaObject(void) const - ?metaObject@QNetworkSession@@UBEPBUQMetaObject@@XZ @ 1044 NONAME ; struct QMetaObject const * QNetworkSession::metaObject(void) const - ?metaObject@QNetworkSessionPrivate@@UBEPBUQMetaObject@@XZ @ 1045 NONAME ; struct QMetaObject const * QNetworkSessionPrivate::metaObject(void) const - ?migrate@QNetworkSession@@QAEXXZ @ 1046 NONAME ; void QNetworkSession::migrate(void) - ?name@QNetworkConfiguration@@QBE?AVQString@@XZ @ 1047 NONAME ; class QString QNetworkConfiguration::name(void) const - ?networkAccessChanged@QNetworkAccessManager@@IAEX_N@Z @ 1048 NONAME ABSENT ; void QNetworkAccessManager::networkAccessChanged(bool) - ?networkAccessEnabled@QNetworkAccessManager@@QBE_NXZ @ 1049 NONAME ABSENT ; bool QNetworkAccessManager::networkAccessEnabled(void) const - ?networkSessionOnline@QNetworkAccessManager@@IAEXXZ @ 1050 NONAME ABSENT ; void QNetworkAccessManager::networkSessionOnline(void) - ?newConfigurationActivated@QNetworkSession@@IAEXXZ @ 1051 NONAME ; void QNetworkSession::newConfigurationActivated(void) - ?newConfigurationActivated@QNetworkSessionPrivate@@IAEXXZ @ 1052 NONAME ; void QNetworkSessionPrivate::newConfigurationActivated(void) - ?onlineStateChanged@QNetworkConfigurationManager@@IAEX_N@Z @ 1053 NONAME ; void QNetworkConfigurationManager::onlineStateChanged(bool) - ?onlineStateChanged@QNetworkConfigurationManagerPrivate@@IAEX_N@Z @ 1054 NONAME ; void QNetworkConfigurationManagerPrivate::onlineStateChanged(bool) - ?open@QNetworkSession@@QAEXXZ @ 1055 NONAME ; void QNetworkSession::open(void) - ?opened@QNetworkSession@@IAEXXZ @ 1056 NONAME ; void QNetworkSession::opened(void) - ?performAsyncConfigurationUpdate@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1057 NONAME ; void QNetworkConfigurationManagerPrivate::performAsyncConfigurationUpdate(void) - ?preferredConfigurationChanged@QNetworkSession@@IAEXABVQNetworkConfiguration@@_N@Z @ 1058 NONAME ; void QNetworkSession::preferredConfigurationChanged(class QNetworkConfiguration const &, bool) - ?preferredConfigurationChanged@QNetworkSessionPrivate@@IAEXABVQNetworkConfiguration@@_N@Z @ 1059 NONAME ; void QNetworkSessionPrivate::preferredConfigurationChanged(class QNetworkConfiguration const &, bool) - ?priority@QNetworkRequest@@QBE?AW4Priority@1@XZ @ 1060 NONAME ; enum QNetworkRequest::Priority QNetworkRequest::priority(void) const - ?privateConfiguration@QNetworkSessionPrivate@@IBE?AV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@ABVQNetworkConfiguration@@@Z @ 1061 NONAME ; class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate> QNetworkSessionPrivate::privateConfiguration(class QNetworkConfiguration const &) const - ?purpose@QNetworkConfiguration@@QBE?AW4Purpose@1@XZ @ 1062 NONAME ; enum QNetworkConfiguration::Purpose QNetworkConfiguration::purpose(void) const - ?qNetworkConfigurationManagerPrivate@@YAPAVQNetworkConfigurationManagerPrivate@@XZ @ 1063 NONAME ; class QNetworkConfigurationManagerPrivate * qNetworkConfigurationManagerPrivate(void) - ?qt_metacall@QBearerEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1064 NONAME ; int QBearerEngine::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@QBearerEnginePlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1065 NONAME ; int QBearerEnginePlugin::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@QNetworkConfigurationManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1066 NONAME ; int QNetworkConfigurationManager::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@QNetworkConfigurationManagerPrivate@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1067 NONAME ; int QNetworkConfigurationManagerPrivate::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@QNetworkSession@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1068 NONAME ; int QNetworkSession::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@QNetworkSessionPrivate@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1069 NONAME ; int QNetworkSessionPrivate::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacast@QBearerEngine@@UAEPAXPBD@Z @ 1070 NONAME ; void * QBearerEngine::qt_metacast(char const *) - ?qt_metacast@QBearerEnginePlugin@@UAEPAXPBD@Z @ 1071 NONAME ; void * QBearerEnginePlugin::qt_metacast(char const *) - ?qt_metacast@QNetworkConfigurationManager@@UAEPAXPBD@Z @ 1072 NONAME ; void * QNetworkConfigurationManager::qt_metacast(char const *) - ?qt_metacast@QNetworkConfigurationManagerPrivate@@UAEPAXPBD@Z @ 1073 NONAME ; void * QNetworkConfigurationManagerPrivate::qt_metacast(char const *) - ?qt_metacast@QNetworkSession@@UAEPAXPBD@Z @ 1074 NONAME ; void * QNetworkSession::qt_metacast(char const *) - ?qt_metacast@QNetworkSessionPrivate@@UAEPAXPBD@Z @ 1075 NONAME ; void * QNetworkSessionPrivate::qt_metacast(char const *) - ?quitPendingWaitsForOpened@QNetworkSessionPrivate@@IAEXXZ @ 1076 NONAME ; void QNetworkSessionPrivate::quitPendingWaitsForOpened(void) - ?rawHeaderPairs@QNetworkReply@@QBEABV?$QList@U?$QPair@VQByteArray@@V1@@@@@XZ @ 1077 NONAME ; class QList<struct QPair<class QByteArray, class QByteArray> > const & QNetworkReply::rawHeaderPairs(void) const - ?reject@QNetworkSession@@QAEXXZ @ 1078 NONAME ; void QNetworkSession::reject(void) - ?sendCustomRequest@QNetworkAccessManager@@QAEPAVQNetworkReply@@ABVQNetworkRequest@@ABVQByteArray@@PAVQIODevice@@@Z @ 1079 NONAME ; class QNetworkReply * QNetworkAccessManager::sendCustomRequest(class QNetworkRequest const &, class QByteArray const &, class QIODevice *) - ?sessionProperty@QNetworkSession@@QBE?AVQVariant@@ABVQString@@@Z @ 1080 NONAME ; class QVariant QNetworkSession::sessionProperty(class QString const &) const - ?setALREnabled@QNetworkSessionPrivate@@UAEX_N@Z @ 1081 NONAME ; void QNetworkSessionPrivate::setALREnabled(bool) - ?setConfiguration@QNetworkAccessManager@@QAEXABVQNetworkConfiguration@@@Z @ 1082 NONAME ; void QNetworkAccessManager::setConfiguration(class QNetworkConfiguration const &) - ?setNetworkAccessEnabled@QNetworkAccessManager@@QAEX_N@Z @ 1083 NONAME ABSENT ; void QNetworkAccessManager::setNetworkAccessEnabled(bool) - ?setPriority@QNetworkRequest@@QAEXW4Priority@1@@Z @ 1084 NONAME ; void QNetworkRequest::setPriority(enum QNetworkRequest::Priority) - ?setPrivateConfiguration@QNetworkSessionPrivate@@IBEXAAVQNetworkConfiguration@@V?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1085 NONAME ; void QNetworkSessionPrivate::setPrivateConfiguration(class QNetworkConfiguration &, class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) const - ?setSessionProperty@QNetworkSession@@QAEXABVQString@@ABVQVariant@@@Z @ 1086 NONAME ; void QNetworkSession::setSessionProperty(class QString const &, class QVariant const &) - ?state@QNetworkConfiguration@@QBE?AV?$QFlags@W4StateFlag@QNetworkConfiguration@@@@XZ @ 1087 NONAME ; class QFlags<enum QNetworkConfiguration::StateFlag> QNetworkConfiguration::state(void) const - ?state@QNetworkSession@@QBE?AW4State@1@XZ @ 1088 NONAME ; enum QNetworkSession::State QNetworkSession::state(void) const - ?stateChanged@QNetworkSession@@IAEXW4State@1@@Z @ 1089 NONAME ; void QNetworkSession::stateChanged(enum QNetworkSession::State) - ?stateChanged@QNetworkSessionPrivate@@IAEXW4State@QNetworkSession@@@Z @ 1090 NONAME ; void QNetworkSessionPrivate::stateChanged(enum QNetworkSession::State) - ?stop@QNetworkSession@@QAEXXZ @ 1091 NONAME ; void QNetworkSession::stop(void) - ?tr@QBearerEngine@@SA?AVQString@@PBD0@Z @ 1092 NONAME ; class QString QBearerEngine::tr(char const *, char const *) - ?tr@QBearerEngine@@SA?AVQString@@PBD0H@Z @ 1093 NONAME ; class QString QBearerEngine::tr(char const *, char const *, int) - ?tr@QBearerEnginePlugin@@SA?AVQString@@PBD0@Z @ 1094 NONAME ; class QString QBearerEnginePlugin::tr(char const *, char const *) - ?tr@QBearerEnginePlugin@@SA?AVQString@@PBD0H@Z @ 1095 NONAME ; class QString QBearerEnginePlugin::tr(char const *, char const *, int) - ?tr@QNetworkConfigurationManager@@SA?AVQString@@PBD0@Z @ 1096 NONAME ; class QString QNetworkConfigurationManager::tr(char const *, char const *) - ?tr@QNetworkConfigurationManager@@SA?AVQString@@PBD0H@Z @ 1097 NONAME ; class QString QNetworkConfigurationManager::tr(char const *, char const *, int) - ?tr@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0@Z @ 1098 NONAME ; class QString QNetworkConfigurationManagerPrivate::tr(char const *, char const *) - ?tr@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0H@Z @ 1099 NONAME ; class QString QNetworkConfigurationManagerPrivate::tr(char const *, char const *, int) - ?tr@QNetworkSession@@SA?AVQString@@PBD0@Z @ 1100 NONAME ; class QString QNetworkSession::tr(char const *, char const *) - ?tr@QNetworkSession@@SA?AVQString@@PBD0H@Z @ 1101 NONAME ; class QString QNetworkSession::tr(char const *, char const *, int) - ?tr@QNetworkSessionPrivate@@SA?AVQString@@PBD0@Z @ 1102 NONAME ; class QString QNetworkSessionPrivate::tr(char const *, char const *) - ?tr@QNetworkSessionPrivate@@SA?AVQString@@PBD0H@Z @ 1103 NONAME ; class QString QNetworkSessionPrivate::tr(char const *, char const *, int) - ?trUtf8@QBearerEngine@@SA?AVQString@@PBD0@Z @ 1104 NONAME ; class QString QBearerEngine::trUtf8(char const *, char const *) - ?trUtf8@QBearerEngine@@SA?AVQString@@PBD0H@Z @ 1105 NONAME ; class QString QBearerEngine::trUtf8(char const *, char const *, int) - ?trUtf8@QBearerEnginePlugin@@SA?AVQString@@PBD0@Z @ 1106 NONAME ; class QString QBearerEnginePlugin::trUtf8(char const *, char const *) - ?trUtf8@QBearerEnginePlugin@@SA?AVQString@@PBD0H@Z @ 1107 NONAME ; class QString QBearerEnginePlugin::trUtf8(char const *, char const *, int) - ?trUtf8@QNetworkConfigurationManager@@SA?AVQString@@PBD0@Z @ 1108 NONAME ; class QString QNetworkConfigurationManager::trUtf8(char const *, char const *) - ?trUtf8@QNetworkConfigurationManager@@SA?AVQString@@PBD0H@Z @ 1109 NONAME ; class QString QNetworkConfigurationManager::trUtf8(char const *, char const *, int) - ?trUtf8@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0@Z @ 1110 NONAME ; class QString QNetworkConfigurationManagerPrivate::trUtf8(char const *, char const *) - ?trUtf8@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0H@Z @ 1111 NONAME ; class QString QNetworkConfigurationManagerPrivate::trUtf8(char const *, char const *, int) - ?trUtf8@QNetworkSession@@SA?AVQString@@PBD0@Z @ 1112 NONAME ; class QString QNetworkSession::trUtf8(char const *, char const *) - ?trUtf8@QNetworkSession@@SA?AVQString@@PBD0H@Z @ 1113 NONAME ; class QString QNetworkSession::trUtf8(char const *, char const *, int) - ?trUtf8@QNetworkSessionPrivate@@SA?AVQString@@PBD0@Z @ 1114 NONAME ; class QString QNetworkSessionPrivate::trUtf8(char const *, char const *) - ?trUtf8@QNetworkSessionPrivate@@SA?AVQString@@PBD0H@Z @ 1115 NONAME ; class QString QNetworkSessionPrivate::trUtf8(char const *, char const *, int) - ?type@QNetworkConfiguration@@QBE?AW4Type@1@XZ @ 1116 NONAME ; enum QNetworkConfiguration::Type QNetworkConfiguration::type(void) const - ?updateCompleted@QBearerEngine@@IAEXXZ @ 1117 NONAME ; void QBearerEngine::updateCompleted(void) - ?updateCompleted@QNetworkConfigurationManager@@IAEXXZ @ 1118 NONAME ; void QNetworkConfigurationManager::updateCompleted(void) - ?updateConfigurations@QNetworkConfigurationManager@@QAEXXZ @ 1119 NONAME ; void QNetworkConfigurationManager::updateConfigurations(void) - ?updateConfigurations@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1120 NONAME ; void QNetworkConfigurationManagerPrivate::updateConfigurations(void) - ?waitForOpened@QNetworkSession@@QAE_NH@Z @ 1121 NONAME ; bool QNetworkSession::waitForOpened(int) - ?staticMetaObject@QNetworkSessionPrivate@@2UQMetaObject@@B @ 1122 NONAME ; struct QMetaObject const QNetworkSessionPrivate::staticMetaObject - ?staticMetaObject@QBearerEngine@@2UQMetaObject@@B @ 1123 NONAME ; struct QMetaObject const QBearerEngine::staticMetaObject - ?staticMetaObject@QNetworkSession@@2UQMetaObject@@B @ 1124 NONAME ; struct QMetaObject const QNetworkSession::staticMetaObject - ?staticMetaObject@QNetworkConfigurationManager@@2UQMetaObject@@B @ 1125 NONAME ; struct QMetaObject const QNetworkConfigurationManager::staticMetaObject - ?staticMetaObject@QBearerEnginePlugin@@2UQMetaObject@@B @ 1126 NONAME ; struct QMetaObject const QBearerEnginePlugin::staticMetaObject - ?staticMetaObject@QNetworkConfigurationManagerPrivate@@2UQMetaObject@@B @ 1127 NONAME ; struct QMetaObject const QNetworkConfigurationManagerPrivate::staticMetaObject - ?allConfigurations@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@VQNetworkConfiguration@@@@V?$QFlags@W4StateFlag@QNetworkConfiguration@@@@@Z @ 1128 NONAME ; class QList<class QNetworkConfiguration> QNetworkConfigurationManagerPrivate::allConfigurations(class QFlags<enum QNetworkConfiguration::StateFlag>) - ?configurationFromIdentifier@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@ABVQString@@@Z @ 1129 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::configurationFromIdentifier(class QString const &) - ?configurationsInUse@QBearerEngine@@QBE_NXZ @ 1130 NONAME ; bool QBearerEngine::configurationsInUse(void) const - ?defaultConfiguration@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@XZ @ 1131 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration(void) - ?disablePolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1132 NONAME ; void QNetworkConfigurationManagerPrivate::disablePolling(void) - ?enablePolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1133 NONAME ; void QNetworkConfigurationManagerPrivate::enablePolling(void) - ?isOnline@QNetworkConfigurationManagerPrivate@@QAE_NXZ @ 1134 NONAME ; bool QNetworkConfigurationManagerPrivate::isOnline(void) - ?networkAccessible@QNetworkAccessManager@@QBE?AW4NetworkAccessibility@1@XZ @ 1135 NONAME ; enum QNetworkAccessManager::NetworkAccessibility QNetworkAccessManager::networkAccessible(void) const - ?networkAccessibleChanged@QNetworkAccessManager@@IAEXW4NetworkAccessibility@1@@Z @ 1136 NONAME ; void QNetworkAccessManager::networkAccessibleChanged(enum QNetworkAccessManager::NetworkAccessibility) - ?networkSessionConnected@QNetworkAccessManager@@IAEXXZ @ 1137 NONAME ; void QNetworkAccessManager::networkSessionConnected(void) - ?pollEngines@QNetworkConfigurationManagerPrivate@@AAEXXZ @ 1138 NONAME ; void QNetworkConfigurationManagerPrivate::pollEngines(void) - ?qt_qhostinfo_clear_cache@@YAXXZ @ 1139 NONAME ABSENT ; void qt_qhostinfo_clear_cache(void) - ?qt_qhostinfo_lookup@@YA?AVQHostInfo@@ABVQString@@PAVQObject@@PBDPA_NPAH@Z @ 1140 NONAME ; class QHostInfo qt_qhostinfo_lookup(class QString const &, class QObject *, char const *, bool *, int *) - ?requiresPolling@QBearerEngine@@UBE_NXZ @ 1141 NONAME ; bool QBearerEngine::requiresPolling(void) const + ?qt_qhostinfo_clear_cache@@YAXXZ @ 964 NONAME ABSENT ; void qt_qhostinfo_clear_cache(void) + ?qt_qhostinfo_lookup@@YA?AVQHostInfo@@ABVQString@@PAVQObject@@PBDPA_NPAH@Z @ 965 NONAME ; class QHostInfo qt_qhostinfo_lookup(class QString const &, class QObject *, char const *, bool *, int *) + ?rawHeaderPairs@QNetworkReply@@QBEABV?$QList@U?$QPair@VQByteArray@@V1@@@@@XZ @ 966 NONAME ; class QList<struct QPair<class QByteArray, class QByteArray> > const & QNetworkReply::rawHeaderPairs(void) const + ?tr@QBearerEnginePlugin@@SA?AVQString@@PBD0H@Z @ 967 NONAME ; class QString QBearerEnginePlugin::tr(char const *, char const *, int) + ?qt_metacall@QNetworkConfigurationManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 968 NONAME ; int QNetworkConfigurationManager::qt_metacall(enum QMetaObject::Call, int, void * *) + ?configurationAdded@QNetworkConfigurationManagerPrivate@@AAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 969 NONAME ; void QNetworkConfigurationManagerPrivate::configurationAdded(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) + ?metaObject@QNetworkConfigurationManagerPrivate@@UBEPBUQMetaObject@@XZ @ 970 NONAME ; struct QMetaObject const * QNetworkConfigurationManagerPrivate::metaObject(void) const + ??1QBearerEngineFactoryInterface@@UAE@XZ @ 971 NONAME ; QBearerEngineFactoryInterface::~QBearerEngineFactoryInterface(void) + ?setConfiguration@QNetworkAccessManager@@QAEXABVQNetworkConfiguration@@@Z @ 972 NONAME ; void QNetworkAccessManager::setConfiguration(class QNetworkConfiguration const &) + ?identifier@QNetworkConfiguration@@QBE?AVQString@@XZ @ 973 NONAME ; class QString QNetworkConfiguration::identifier(void) const + ??0QBearerEngine@@QAE@PAVQObject@@@Z @ 974 NONAME ; QBearerEngine::QBearerEngine(class QObject *) + ?isRoamingAvailable@QNetworkConfiguration@@QBE_NXZ @ 975 NONAME ; bool QNetworkConfiguration::isRoamingAvailable(void) const + ?quitPendingWaitsForOpened@QNetworkSessionPrivate@@IAEXXZ @ 976 NONAME ; void QNetworkSessionPrivate::quitPendingWaitsForOpened(void) + ?trUtf8@QNetworkSessionPrivate@@SA?AVQString@@PBD0H@Z @ 977 NONAME ; class QString QNetworkSessionPrivate::trUtf8(char const *, char const *, int) + ?setPrivateConfiguration@QNetworkSessionPrivate@@IBEXAAVQNetworkConfiguration@@V?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 978 NONAME ; void QNetworkSessionPrivate::setPrivateConfiguration(class QNetworkConfiguration &, class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) const + ?trUtf8@QNetworkConfigurationManager@@SA?AVQString@@PBD0H@Z @ 979 NONAME ; class QString QNetworkConfigurationManager::trUtf8(char const *, char const *, int) + ?stateChanged@QNetworkSession@@IAEXW4State@1@@Z @ 980 NONAME ; void QNetworkSession::stateChanged(enum QNetworkSession::State) + ??1QNetworkConfigurationManagerPrivate@@UAE@XZ @ 981 NONAME ; QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate(void) + ?getStaticMetaObject@QBearerEnginePlugin@@SAABUQMetaObject@@XZ @ 982 NONAME ; struct QMetaObject const & QBearerEnginePlugin::getStaticMetaObject(void) + ?getStaticMetaObject@QNetworkConfigurationManagerPrivate@@SAABUQMetaObject@@XZ @ 983 NONAME ; struct QMetaObject const & QNetworkConfigurationManagerPrivate::getStaticMetaObject(void) + ??_EQNetworkConfigurationManagerPrivate@@UAE@I@Z @ 984 NONAME ; QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate(unsigned int) + ?metaObject@QBearerEnginePlugin@@UBEPBUQMetaObject@@XZ @ 985 NONAME ; struct QMetaObject const * QBearerEnginePlugin::metaObject(void) const + ??4QNetworkConfiguration@@QAEAAV0@ABV0@@Z @ 986 NONAME ; class QNetworkConfiguration & QNetworkConfiguration::operator=(class QNetworkConfiguration const &) + ?metaObject@QBearerEngine@@UBEPBUQMetaObject@@XZ @ 987 NONAME ; struct QMetaObject const * QBearerEngine::metaObject(void) const + ?getStaticMetaObject@QBearerEngine@@SAABUQMetaObject@@XZ @ 988 NONAME ; struct QMetaObject const & QBearerEngine::getStaticMetaObject(void) + ?waitForOpened@QNetworkSession@@QAE_NH@Z @ 989 NONAME ; bool QNetworkSession::waitForOpened(int) + ??_EQBearerEngine@@UAE@I@Z @ 990 NONAME ; QBearerEngine::~QBearerEngine(unsigned int) + ?error@QNetworkSession@@IAEXW4SessionError@1@@Z @ 991 NONAME ; void QNetworkSession::error(enum QNetworkSession::SessionError) + ?stop@QNetworkSession@@QAEXXZ @ 992 NONAME ; void QNetworkSession::stop(void) + ?accept@QNetworkSession@@QAEXXZ @ 993 NONAME ; void QNetworkSession::accept(void) + ?qNetworkConfigurationManagerPrivate@@YAPAVQNetworkConfigurationManagerPrivate@@XZ @ 994 NONAME ; class QNetworkConfigurationManagerPrivate * qNetworkConfigurationManagerPrivate(void) + ?open@QNetworkSession@@QAEXXZ @ 995 NONAME ; void QNetworkSession::open(void) + ?newConfigurationActivated@QNetworkSession@@IAEXXZ @ 996 NONAME ; void QNetworkSession::newConfigurationActivated(void) + ?staticMetaObject@QNetworkSessionPrivate@@2UQMetaObject@@B @ 997 NONAME ; struct QMetaObject const QNetworkSessionPrivate::staticMetaObject + ?error@QNetworkSession@@QBE?AW4SessionError@1@XZ @ 998 NONAME ; enum QNetworkSession::SessionError QNetworkSession::error(void) const + ?qt_metacast@QBearerEngine@@UAEPAXPBD@Z @ 999 NONAME ; void * QBearerEngine::qt_metacast(char const *) + ?staticMetaObject@QNetworkSession@@2UQMetaObject@@B @ 1000 NONAME ; struct QMetaObject const QNetworkSession::staticMetaObject + ?trUtf8@QBearerEngine@@SA?AVQString@@PBD0@Z @ 1001 NONAME ; class QString QBearerEngine::trUtf8(char const *, char const *) + ?privateConfiguration@QNetworkSessionPrivate@@IBE?AV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@ABVQNetworkConfiguration@@@Z @ 1002 NONAME ; class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate> QNetworkSessionPrivate::privateConfiguration(class QNetworkConfiguration const &) const + ?isOnline@QNetworkConfigurationManagerPrivate@@QAE_NXZ @ 1003 NONAME ; bool QNetworkConfigurationManagerPrivate::isOnline(void) + ?state@QNetworkConfiguration@@QBE?AV?$QFlags@W4StateFlag@QNetworkConfiguration@@@@XZ @ 1004 NONAME ; class QFlags<enum QNetworkConfiguration::StateFlag> QNetworkConfiguration::state(void) const + ?configurationAdded@QNetworkConfigurationManagerPrivate@@IAEXABVQNetworkConfiguration@@@Z @ 1005 NONAME ; void QNetworkConfigurationManagerPrivate::configurationAdded(class QNetworkConfiguration const &) + ?defaultConfiguration@QNetworkConfigurationManager@@QBE?AVQNetworkConfiguration@@XZ @ 1006 NONAME ; class QNetworkConfiguration QNetworkConfigurationManager::defaultConfiguration(void) const + ?bytesReceived@QNetworkSession@@QBE_KXZ @ 1007 NONAME ; unsigned long long QNetworkSession::bytesReceived(void) const + ?updateConfigurations@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1008 NONAME ; void QNetworkConfigurationManagerPrivate::updateConfigurations(void) + ?errorString@QNetworkSession@@QBE?AVQString@@XZ @ 1009 NONAME ; class QString QNetworkSession::errorString(void) const + ?tr@QNetworkSession@@SA?AVQString@@PBD0H@Z @ 1010 NONAME ; class QString QNetworkSession::tr(char const *, char const *, int) + ??1QNetworkConfigurationManager@@UAE@XZ @ 1011 NONAME ; QNetworkConfigurationManager::~QNetworkConfigurationManager(void) + ?isOpen@QNetworkSession@@QBE_NXZ @ 1012 NONAME ; bool QNetworkSession::isOpen(void) const + ?configurationChanged@QNetworkConfigurationManager@@IAEXABVQNetworkConfiguration@@@Z @ 1013 NONAME ; void QNetworkConfigurationManager::configurationChanged(class QNetworkConfiguration const &) + ?configurationChanged@QNetworkConfigurationManagerPrivate@@AAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1014 NONAME ; void QNetworkConfigurationManagerPrivate::configurationChanged(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) + ?configurationRemoved@QBearerEngine@@IAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1015 NONAME ; void QBearerEngine::configurationRemoved(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) + ?qt_metacall@QBearerEnginePlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1016 NONAME ; int QBearerEnginePlugin::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QBearerEnginePlugin@@QAE@PAVQObject@@@Z @ 1017 NONAME ; QBearerEnginePlugin::QBearerEnginePlugin(class QObject *) + ?trUtf8@QNetworkSession@@SA?AVQString@@PBD0@Z @ 1018 NONAME ; class QString QNetworkSession::trUtf8(char const *, char const *) + ?metaObject@QNetworkSessionPrivate@@UBEPBUQMetaObject@@XZ @ 1019 NONAME ; struct QMetaObject const * QNetworkSessionPrivate::metaObject(void) const + ??_EQNetworkConfigurationManager@@UAE@I@Z @ 1020 NONAME ; QNetworkConfigurationManager::~QNetworkConfigurationManager(unsigned int) + ?trUtf8@QNetworkSessionPrivate@@SA?AVQString@@PBD0@Z @ 1021 NONAME ; class QString QNetworkSessionPrivate::trUtf8(char const *, char const *) + ?bearerName@QNetworkConfiguration@@QBE?AVQString@@XZ @ 1022 NONAME ; class QString QNetworkConfiguration::bearerName(void) const + ?trUtf8@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0H@Z @ 1023 NONAME ; class QString QNetworkConfigurationManagerPrivate::trUtf8(char const *, char const *, int) + ?setSessionProperty@QNetworkSession@@QAEXABVQString@@ABVQVariant@@@Z @ 1024 NONAME ; void QNetworkSession::setSessionProperty(class QString const &, class QVariant const &) + ?qt_metacall@QNetworkSession@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1025 NONAME ; int QNetworkSession::qt_metacall(enum QMetaObject::Call, int, void * *) + ?staticMetaObject@QBearerEngine@@2UQMetaObject@@B @ 1026 NONAME ; struct QMetaObject const QBearerEngine::staticMetaObject + ?networkSessionConnected@QNetworkAccessManager@@IAEXXZ @ 1027 NONAME ; void QNetworkAccessManager::networkSessionConnected(void) + ??1QBearerEngine@@UAE@XZ @ 1028 NONAME ; QBearerEngine::~QBearerEngine(void) + ?capabilities@QNetworkConfigurationManagerPrivate@@QAE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1029 NONAME ; class QFlags<enum QNetworkConfigurationManager::Capability> QNetworkConfigurationManagerPrivate::capabilities(void) + ??1QNetworkConfiguration@@QAE@XZ @ 1030 NONAME ; QNetworkConfiguration::~QNetworkConfiguration(void) + ??0QNetworkConfigurationManagerPrivate@@QAE@XZ @ 1031 NONAME ; QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate(void) + ?preferredConfigurationChanged@QNetworkSession@@IAEXABVQNetworkConfiguration@@_N@Z @ 1032 NONAME ; void QNetworkSession::preferredConfigurationChanged(class QNetworkConfiguration const &, bool) + ?isValid@QNetworkConfiguration@@QBE_NXZ @ 1033 NONAME ; bool QNetworkConfiguration::isValid(void) const + ?configurationAdded@QBearerEngine@@IAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1034 NONAME ; void QBearerEngine::configurationAdded(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) + ??1QNetworkSession@@UAE@XZ @ 1035 NONAME ; QNetworkSession::~QNetworkSession(void) + ?qt_metacast@QBearerEnginePlugin@@UAEPAXPBD@Z @ 1036 NONAME ; void * QBearerEnginePlugin::qt_metacast(char const *) + ??0QNetworkSession@@QAE@ABVQNetworkConfiguration@@PAVQObject@@@Z @ 1037 NONAME ; QNetworkSession::QNetworkSession(class QNetworkConfiguration const &, class QObject *) + ?error@QNetworkSessionPrivate@@IAEXW4SessionError@QNetworkSession@@@Z @ 1038 NONAME ; void QNetworkSessionPrivate::error(enum QNetworkSession::SessionError) + ?name@QNetworkConfiguration@@QBE?AVQString@@XZ @ 1039 NONAME ; class QString QNetworkConfiguration::name(void) const + ?close@QNetworkSession@@QAEXXZ @ 1040 NONAME ; void QNetworkSession::close(void) + ?sessionProperty@QNetworkSession@@QBE?AVQVariant@@ABVQString@@@Z @ 1041 NONAME ; class QVariant QNetworkSession::sessionProperty(class QString const &) const + ?engines@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@PAVQBearerEngine@@@@XZ @ 1042 NONAME ; class QList<class QBearerEngine *> QNetworkConfigurationManagerPrivate::engines(void) + ?isOnline@QNetworkConfigurationManager@@QBE_NXZ @ 1043 NONAME ; bool QNetworkConfigurationManager::isOnline(void) const + ?capabilities@QNetworkConfigurationManager@@QBE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1044 NONAME ; class QFlags<enum QNetworkConfigurationManager::Capability> QNetworkConfigurationManager::capabilities(void) const + ?configurationRemoved@QNetworkConfigurationManagerPrivate@@AAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1045 NONAME ; void QNetworkConfigurationManagerPrivate::configurationRemoved(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) + ??0QNetworkConfiguration@@QAE@ABV0@@Z @ 1046 NONAME ; QNetworkConfiguration::QNetworkConfiguration(class QNetworkConfiguration const &) + ?setPriority@QNetworkRequest@@QAEXW4Priority@1@@Z @ 1047 NONAME ; void QNetworkRequest::setPriority(enum QNetworkRequest::Priority) + ?disconnectNotify@QNetworkSession@@MAEXPBD@Z @ 1048 NONAME ; void QNetworkSession::disconnectNotify(char const *) + ?metaObject@QNetworkSession@@UBEPBUQMetaObject@@XZ @ 1049 NONAME ; struct QMetaObject const * QNetworkSession::metaObject(void) const + ?trUtf8@QBearerEngine@@SA?AVQString@@PBD0H@Z @ 1050 NONAME ; class QString QBearerEngine::trUtf8(char const *, char const *, int) + ?configuration@QNetworkSession@@QBE?AVQNetworkConfiguration@@XZ @ 1051 NONAME ; class QNetworkConfiguration QNetworkSession::configuration(void) const + ?closed@QNetworkSessionPrivate@@IAEXXZ @ 1052 NONAME ; void QNetworkSessionPrivate::closed(void) + ??1QNetworkSessionPrivate@@UAE@XZ @ 1053 NONAME ; QNetworkSessionPrivate::~QNetworkSessionPrivate(void) + ?staticMetaObject@QNetworkConfigurationManager@@2UQMetaObject@@B @ 1054 NONAME ; struct QMetaObject const QNetworkConfigurationManager::staticMetaObject + ?tr@QNetworkConfigurationManager@@SA?AVQString@@PBD0H@Z @ 1055 NONAME ; class QString QNetworkConfigurationManager::tr(char const *, char const *, int) + ?tr@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0H@Z @ 1056 NONAME ; class QString QNetworkConfigurationManagerPrivate::tr(char const *, char const *, int) + ?configurationChanged@QBearerEngine@@IAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1057 NONAME ; void QBearerEngine::configurationChanged(class QExplicitlySharedDataPointer<class QNetworkConfigurationPrivate>) + ?tr@QBearerEngine@@SA?AVQString@@PBD0@Z @ 1058 NONAME ; class QString QBearerEngine::tr(char const *, char const *) + ??0QNetworkConfiguration@@QAE@XZ @ 1059 NONAME ; QNetworkConfiguration::QNetworkConfiguration(void) + ?configurationRemoved@QNetworkConfigurationManager@@IAEXABVQNetworkConfiguration@@@Z @ 1060 NONAME ; void QNetworkConfigurationManager::configurationRemoved(class QNetworkConfiguration const &) + ?preferredConfigurationChanged@QNetworkSessionPrivate@@IAEXABVQNetworkConfiguration@@_N@Z @ 1061 NONAME ; void QNetworkSessionPrivate::preferredConfigurationChanged(class QNetworkConfiguration const &, bool) + ??1QBearerEnginePlugin@@UAE@XZ @ 1062 NONAME ; QBearerEnginePlugin::~QBearerEnginePlugin(void) + ?tr@QNetworkSession@@SA?AVQString@@PBD0@Z @ 1063 NONAME ; class QString QNetworkSession::tr(char const *, char const *) + ??0QNetworkConfigurationManager@@QAE@PAVQObject@@@Z @ 1064 NONAME ; QNetworkConfigurationManager::QNetworkConfigurationManager(class QObject *) + ?qt_metacall@QNetworkConfigurationManagerPrivate@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1065 NONAME ; int QNetworkConfigurationManagerPrivate::qt_metacall(enum QMetaObject::Call, int, void * *) + ??_EQNetworkSession@@UAE@I@Z @ 1066 NONAME ; QNetworkSession::~QNetworkSession(unsigned int) + ??9QNetworkConfiguration@@QBE_NABV0@@Z @ 1067 NONAME ; bool QNetworkConfiguration::operator!=(class QNetworkConfiguration const &) const + ?configurationsInUse@QBearerEngine@@QBE_NXZ @ 1068 NONAME ; bool QBearerEngine::configurationsInUse(void) const + ?tr@QBearerEngine@@SA?AVQString@@PBD0H@Z @ 1069 NONAME ; class QString QBearerEngine::tr(char const *, char const *, int) + ?configuration@QNetworkAccessManager@@QBE?AVQNetworkConfiguration@@XZ @ 1070 NONAME ; class QNetworkConfiguration QNetworkAccessManager::configuration(void) const + ?tr@QNetworkSessionPrivate@@SA?AVQString@@PBD0@Z @ 1071 NONAME ; class QString QNetworkSessionPrivate::tr(char const *, char const *) + ?activeTime@QNetworkSession@@QBE_KXZ @ 1072 NONAME ; unsigned long long QNetworkSession::activeTime(void) const + ?state@QNetworkSession@@QBE?AW4State@1@XZ @ 1073 NONAME ; enum QNetworkSession::State QNetworkSession::state(void) const + ?disablePolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1074 NONAME ; void QNetworkConfigurationManagerPrivate::disablePolling(void) + ?getStaticMetaObject@QNetworkSessionPrivate@@SAABUQMetaObject@@XZ @ 1075 NONAME ; struct QMetaObject const & QNetworkSessionPrivate::getStaticMetaObject(void) + ?configurationAdded@QNetworkConfigurationManager@@IAEXABVQNetworkConfiguration@@@Z @ 1076 NONAME ; void QNetworkConfigurationManager::configurationAdded(class QNetworkConfiguration const &) + ?tr@QNetworkSessionPrivate@@SA?AVQString@@PBD0H@Z @ 1077 NONAME ; class QString QNetworkSessionPrivate::tr(char const *, char const *, int) + ?performAsyncConfigurationUpdate@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1078 NONAME ; void QNetworkConfigurationManagerPrivate::performAsyncConfigurationUpdate(void) + ?trUtf8@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0@Z @ 1079 NONAME ; class QString QNetworkConfigurationManagerPrivate::trUtf8(char const *, char const *) + ?networkAccessible@QNetworkAccessManager@@QBE?AW4NetworkAccessibility@1@XZ @ 1080 NONAME ; enum QNetworkAccessManager::NetworkAccessibility QNetworkAccessManager::networkAccessible(void) const + ?setOption@QAuthenticator@@QAEXABVQString@@ABVQVariant@@@Z @ 1081 NONAME ; void QAuthenticator::setOption(class QString const &, class QVariant const &) + ?trUtf8@QBearerEnginePlugin@@SA?AVQString@@PBD0H@Z @ 1082 NONAME ; class QString QBearerEnginePlugin::trUtf8(char const *, char const *, int) + ?trUtf8@QNetworkConfigurationManager@@SA?AVQString@@PBD0@Z @ 1083 NONAME ; class QString QNetworkConfigurationManager::trUtf8(char const *, char const *) + ?allConfigurations@QNetworkConfigurationManager@@QBE?AV?$QList@VQNetworkConfiguration@@@@V?$QFlags@W4StateFlag@QNetworkConfiguration@@@@@Z @ 1084 NONAME ; class QList<class QNetworkConfiguration> QNetworkConfigurationManager::allConfigurations(class QFlags<enum QNetworkConfiguration::StateFlag>) const + ?requiresPolling@QBearerEngine@@UBE_NXZ @ 1085 NONAME ; bool QBearerEngine::requiresPolling(void) const + ?priority@QNetworkRequest@@QBE?AW4Priority@1@XZ @ 1086 NONAME ; enum QNetworkRequest::Priority QNetworkRequest::priority(void) const + ?networkAccessibleChanged@QNetworkAccessManager@@IAEXW4NetworkAccessibility@1@@Z @ 1087 NONAME ; void QNetworkAccessManager::networkAccessibleChanged(enum QNetworkAccessManager::NetworkAccessibility) + ??8QNetworkConfiguration@@QBE_NABV0@@Z @ 1088 NONAME ; bool QNetworkConfiguration::operator==(class QNetworkConfiguration const &) const + ?option@QAuthenticator@@QBE?AVQVariant@@ABVQString@@@Z @ 1089 NONAME ; class QVariant QAuthenticator::option(class QString const &) const + ?tr@QBearerEnginePlugin@@SA?AVQString@@PBD0@Z @ 1090 NONAME ; class QString QBearerEnginePlugin::tr(char const *, char const *) + ?configurationFromIdentifier@QNetworkConfigurationManager@@QBE?AVQNetworkConfiguration@@ABVQString@@@Z @ 1091 NONAME ; class QNetworkConfiguration QNetworkConfigurationManager::configurationFromIdentifier(class QString const &) const + ??_EQBearerEnginePlugin@@UAE@I@Z @ 1092 NONAME ; QBearerEnginePlugin::~QBearerEnginePlugin(unsigned int) + ?children@QNetworkConfiguration@@QBE?AV?$QList@VQNetworkConfiguration@@@@XZ @ 1093 NONAME ; class QList<class QNetworkConfiguration> QNetworkConfiguration::children(void) const + ?activeConfiguration@QNetworkAccessManager@@QBE?AVQNetworkConfiguration@@XZ @ 1094 NONAME ; class QNetworkConfiguration QNetworkAccessManager::activeConfiguration(void) const + ?defaultConfiguration@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@XZ @ 1095 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration(void) + ?getStaticMetaObject@QNetworkSession@@SAABUQMetaObject@@XZ @ 1096 NONAME ; struct QMetaObject const & QNetworkSession::getStaticMetaObject(void) + ?qt_metacast@QNetworkSession@@UAEPAXPBD@Z @ 1097 NONAME ; void * QNetworkSession::qt_metacast(char const *) + ?updateCompleted@QBearerEngine@@IAEXXZ @ 1098 NONAME ; void QBearerEngine::updateCompleted(void) + ?qt_metacall@QNetworkSessionPrivate@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1099 NONAME ; int QNetworkSessionPrivate::qt_metacall(enum QMetaObject::Call, int, void * *) + ?onlineStateChanged@QNetworkConfigurationManager@@IAEX_N@Z @ 1100 NONAME ; void QNetworkConfigurationManager::onlineStateChanged(bool) + ?getStaticMetaObject@QNetworkConfigurationManager@@SAABUQMetaObject@@XZ @ 1101 NONAME ; struct QMetaObject const & QNetworkConfigurationManager::getStaticMetaObject(void) + ??0QNetworkSessionPrivate@@QAE@XZ @ 1102 NONAME ; QNetworkSessionPrivate::QNetworkSessionPrivate(void) + ?qt_metacast@QNetworkConfigurationManager@@UAEPAXPBD@Z @ 1103 NONAME ; void * QNetworkConfigurationManager::qt_metacast(char const *) + ?configurationChanged@QNetworkConfigurationManagerPrivate@@IAEXABVQNetworkConfiguration@@@Z @ 1104 NONAME ; void QNetworkConfigurationManagerPrivate::configurationChanged(class QNetworkConfiguration const &) + ?staticMetaObject@QBearerEnginePlugin@@2UQMetaObject@@B @ 1105 NONAME ; struct QMetaObject const QBearerEnginePlugin::staticMetaObject + ?qt_metacast@QNetworkConfigurationManagerPrivate@@UAEPAXPBD@Z @ 1106 NONAME ; void * QNetworkConfigurationManagerPrivate::qt_metacast(char const *) + ?newConfigurationActivated@QNetworkSessionPrivate@@IAEXXZ @ 1107 NONAME ; void QNetworkSessionPrivate::newConfigurationActivated(void) + ?qt_metacast@QNetworkSessionPrivate@@UAEPAXPBD@Z @ 1108 NONAME ; void * QNetworkSessionPrivate::qt_metacast(char const *) + ?startPolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1109 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void) + ?allConfigurations@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@VQNetworkConfiguration@@@@V?$QFlags@W4StateFlag@QNetworkConfiguration@@@@@Z @ 1110 NONAME ; class QList<class QNetworkConfiguration> QNetworkConfigurationManagerPrivate::allConfigurations(class QFlags<enum QNetworkConfiguration::StateFlag>) + ?connectNotify@QNetworkSession@@MAEXPBD@Z @ 1111 NONAME ; void QNetworkSession::connectNotify(char const *) + ?onlineStateChanged@QNetworkConfigurationManagerPrivate@@IAEX_N@Z @ 1112 NONAME ; void QNetworkConfigurationManagerPrivate::onlineStateChanged(bool) + ?bytesWritten@QNetworkSession@@QBE_KXZ @ 1113 NONAME ; unsigned long long QNetworkSession::bytesWritten(void) const + ?sendCustomRequest@QNetworkAccessManager@@QAEPAVQNetworkReply@@ABVQNetworkRequest@@ABVQByteArray@@PAVQIODevice@@@Z @ 1114 NONAME ; class QNetworkReply * QNetworkAccessManager::sendCustomRequest(class QNetworkRequest const &, class QByteArray const &, class QIODevice *) + ?addPendingConnection@QTcpServer@@IAEXPAVQTcpSocket@@@Z @ 1115 NONAME ; void QTcpServer::addPendingConnection(class QTcpSocket *) + ?ignore@QNetworkSession@@QAEXXZ @ 1116 NONAME ; void QNetworkSession::ignore(void) + ?updateConfigurations@QNetworkConfigurationManager@@QAEXXZ @ 1117 NONAME ; void QNetworkConfigurationManager::updateConfigurations(void) + ?stateChanged@QNetworkSessionPrivate@@IAEXW4State@QNetworkSession@@@Z @ 1118 NONAME ; void QNetworkSessionPrivate::stateChanged(enum QNetworkSession::State) + ?setALREnabled@QNetworkSessionPrivate@@UAEX_N@Z @ 1119 NONAME ; void QNetworkSessionPrivate::setALREnabled(bool) + ?configurationRemoved@QNetworkConfigurationManagerPrivate@@IAEXABVQNetworkConfiguration@@@Z @ 1120 NONAME ; void QNetworkConfigurationManagerPrivate::configurationRemoved(class QNetworkConfiguration const &) + ?qt_metacall@QBearerEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1121 NONAME ; int QBearerEngine::qt_metacall(enum QMetaObject::Call, int, void * *) + ?interface@QNetworkSession@@QBE?AVQNetworkInterface@@XZ @ 1122 NONAME ; class QNetworkInterface QNetworkSession::interface(void) const + ?opened@QNetworkSession@@IAEXXZ @ 1123 NONAME ; void QNetworkSession::opened(void) + ?type@QNetworkConfiguration@@QBE?AW4Type@1@XZ @ 1124 NONAME ; enum QNetworkConfiguration::Type QNetworkConfiguration::type(void) const + ?migrate@QNetworkSession@@QAEXXZ @ 1125 NONAME ; void QNetworkSession::migrate(void) + ?closed@QNetworkSession@@IAEXXZ @ 1126 NONAME ; void QNetworkSession::closed(void) + ?pollEngines@QNetworkConfigurationManagerPrivate@@AAEXXZ @ 1127 NONAME ; void QNetworkConfigurationManagerPrivate::pollEngines(void) + ?staticMetaObject@QNetworkConfigurationManagerPrivate@@2UQMetaObject@@B @ 1128 NONAME ; struct QMetaObject const QNetworkConfigurationManagerPrivate::staticMetaObject + ?reject@QNetworkSession@@QAEXXZ @ 1129 NONAME ; void QNetworkSession::reject(void) + ?options@QAuthenticator@@QBE?AV?$QHash@VQString@@VQVariant@@@@XZ @ 1130 NONAME ; class QHash<class QString, class QVariant> QAuthenticator::options(void) const + ?purpose@QNetworkConfiguration@@QBE?AW4Purpose@1@XZ @ 1131 NONAME ; enum QNetworkConfiguration::Purpose QNetworkConfiguration::purpose(void) const + ?configurationFromIdentifier@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@ABVQString@@@Z @ 1132 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::configurationFromIdentifier(class QString const &) + ?abort@QNetworkConfigurationManagerPrivate@@IAEXXZ @ 1133 NONAME ; void QNetworkConfigurationManagerPrivate::abort(void) + ?tr@QNetworkConfigurationManager@@SA?AVQString@@PBD0@Z @ 1134 NONAME ; class QString QNetworkConfigurationManager::tr(char const *, char const *) + ?trUtf8@QNetworkSession@@SA?AVQString@@PBD0H@Z @ 1135 NONAME ; class QString QNetworkSession::trUtf8(char const *, char const *, int) + ?trUtf8@QBearerEnginePlugin@@SA?AVQString@@PBD0@Z @ 1136 NONAME ; class QString QBearerEnginePlugin::trUtf8(char const *, char const *) + ??_EQNetworkSessionPrivate@@UAE@I@Z @ 1137 NONAME ; QNetworkSessionPrivate::~QNetworkSessionPrivate(unsigned int) + ?configurationUpdateComplete@QNetworkConfigurationManagerPrivate@@IAEXXZ @ 1138 NONAME ; void QNetworkConfigurationManagerPrivate::configurationUpdateComplete(void) + ?metaObject@QNetworkConfigurationManager@@UBEPBUQMetaObject@@XZ @ 1139 NONAME ; struct QMetaObject const * QNetworkConfigurationManager::metaObject(void) const + ?tr@QNetworkConfigurationManagerPrivate@@SA?AVQString@@PBD0@Z @ 1140 NONAME ; class QString QNetworkConfigurationManagerPrivate::tr(char const *, char const *) + ?updateCompleted@QNetworkConfigurationManager@@IAEXXZ @ 1141 NONAME ; void QNetworkConfigurationManager::updateCompleted(void) ?setNetworkAccessible@QNetworkAccessManager@@QAEXW4NetworkAccessibility@1@@Z @ 1142 NONAME ; void QNetworkAccessManager::setNetworkAccessible(enum QNetworkAccessManager::NetworkAccessibility) - ?startPolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1143 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void) - ?capabilities@QNetworkConfigurationManagerPrivate@@QAE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1144 NONAME ; class QFlags<enum QNetworkConfigurationManager::Capability> QNetworkConfigurationManagerPrivate::capabilities(void) - ?addPendingConnection@QTcpServer@@IAEXPAVQTcpSocket@@@Z @ 1145 NONAME ; void QTcpServer::addPendingConnection(class QTcpSocket *) - ?option@QAuthenticator@@QBE?AVQVariant@@ABVQString@@@Z @ 1146 NONAME ; class QVariant QAuthenticator::option(class QString const &) const - ?options@QAuthenticator@@QBE?AV?$QHash@VQString@@VQVariant@@@@XZ @ 1147 NONAME ; class QHash<class QString, class QVariant> QAuthenticator::options(void) const - ?setOption@QAuthenticator@@QAEXABVQString@@ABVQVariant@@@Z @ 1148 NONAME ; void QAuthenticator::setOption(class QString const &, class QVariant const &) + ??_EQBearerEngineFactoryInterface@@UAE@I@Z @ 1143 NONAME ; QBearerEngineFactoryInterface::~QBearerEngineFactoryInterface(unsigned int) + ?enablePolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1144 NONAME ; void QNetworkConfigurationManagerPrivate::enablePolling(void) diff --git a/src/s60installs/bwins/QtOpenVGu.def b/src/s60installs/bwins/QtOpenVGu.def index f398055..1452383 100644 --- a/src/s60installs/bwins/QtOpenVGu.def +++ b/src/s60installs/bwins/QtOpenVGu.def @@ -164,12 +164,11 @@ EXPORTS ?qt_vg_create_context@@YAPAVQEglContext@@PAVQPaintDevice@@H@Z @ 163 NONAME ; class QEglContext * qt_vg_create_context(class QPaintDevice *, int) ?reclaimImages@QVGPixmapData@@UAEXXZ @ 164 NONAME ; void QVGPixmapData::reclaimImages(void) ?hibernate@QVGPixmapData@@UAEXXZ @ 165 NONAME ; void QVGPixmapData::hibernate(void) - ?drawStaticTextItem@QVGPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 166 NONAME ; void QVGPaintEngine::drawStaticTextItem(class QStaticTextItem *) - ?drawPixmapFragments@QVGPaintEngine@@UAEXPBVPixmapFragment@QPainter@@HABVQPixmap@@V?$QFlags@W4PixmapFragmentHint@QPainter@@@@@Z @ 167 NONAME ; void QVGPaintEngine::drawPixmapFragments(class QPainter::PixmapFragment const *, int, class QPixmap const &, class QFlags<enum QPainter::PixmapFragmentHint>) - ?drawCachedGlyphs@QVGPaintEngine@@QAE_NHPBIABVQFont@@PAVQFontEngine@@ABVQPointF@@@Z @ 168 NONAME ABSENT ; bool QVGPaintEngine::drawCachedGlyphs(int, unsigned int const *, class QFont const &, class QFontEngine *, class QPointF const &) - ?supportsStaticContents@QVGEGLWindowSurfaceDirect@@UBE_NXZ @ 169 NONAME ; bool QVGEGLWindowSurfaceDirect::supportsStaticContents(void) const - ?scroll@QVGEGLWindowSurfacePrivate@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 170 NONAME ; bool QVGEGLWindowSurfacePrivate::scroll(class QWidget *, class QRegion const &, int, int) - ?scroll@QVGEGLWindowSurfaceDirect@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 171 NONAME ; bool QVGEGLWindowSurfaceDirect::scroll(class QWidget *, class QRegion const &, int, int) - ?supportsStaticContents@QVGEGLWindowSurfacePrivate@@UBE_NXZ @ 172 NONAME ; bool QVGEGLWindowSurfacePrivate::supportsStaticContents(void) const - ?drawCachedGlyphs@QVGPaintEngine@@QAE_NHPBIABVQFont@@PAVQFontEngine@@ABVQPointF@@PBUQFixedPoint@@@Z @ 173 NONAME ; bool QVGPaintEngine::drawCachedGlyphs(int, unsigned int const *, class QFont const &, class QFontEngine *, class QPointF const &, struct QFixedPoint const *) + ?supportsStaticContents@QVGEGLWindowSurfaceDirect@@UBE_NXZ @ 166 NONAME ; bool QVGEGLWindowSurfaceDirect::supportsStaticContents(void) const + ?scroll@QVGEGLWindowSurfacePrivate@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 167 NONAME ; bool QVGEGLWindowSurfacePrivate::scroll(class QWidget *, class QRegion const &, int, int) + ?scroll@QVGEGLWindowSurfaceDirect@@UAE_NPAVQWidget@@ABVQRegion@@HH@Z @ 168 NONAME ; bool QVGEGLWindowSurfaceDirect::scroll(class QWidget *, class QRegion const &, int, int) + ?supportsStaticContents@QVGEGLWindowSurfacePrivate@@UBE_NXZ @ 169 NONAME ; bool QVGEGLWindowSurfacePrivate::supportsStaticContents(void) const + ?drawCachedGlyphs@QVGPaintEngine@@QAE_NHPBIABVQFont@@PAVQFontEngine@@ABVQPointF@@PBUQFixedPoint@@@Z @ 170 NONAME ; bool QVGPaintEngine::drawCachedGlyphs(int, unsigned int const *, class QFont const &, class QFontEngine *, class QPointF const &, struct QFixedPoint const *) + ?drawPixmapFragments@QVGPaintEngine@@UAEXPBVPixmapFragment@QPainter@@HABVQPixmap@@V?$QFlags@W4PixmapFragmentHint@QPainter@@@@@Z @ 171 NONAME ; void QVGPaintEngine::drawPixmapFragments(class QPainter::PixmapFragment const *, int, class QPixmap const &, class QFlags<enum QPainter::PixmapFragmentHint>) + ?drawStaticTextItem@QVGPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 172 NONAME ; void QVGPaintEngine::drawStaticTextItem(class QStaticTextItem *) -- cgit v0.12 From 7a8f837ab4ec682632d78de333f682bf9c057d4d Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 19 Jul 2010 13:26:10 +1000 Subject: PathView doc clarification. (cherry picked from commit 931222b7d665e101ada070afb51b82f9bb85db6d) --- doc/src/examples/qml-examples.qdoc | 9 +++++++++ doc/src/snippets/declarative/pathview/pathattributes.qml | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index 9e0d6f1..3f90fc6 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -314,6 +314,15 @@ */ /*! + \title Models and Views: PathView + \example declarative/modelviews/pathview + + This example shows how to use the PathView element. + + \image qml-pathview-example.png +*/ + +/*! \title Models and Views: Object ListModel \example declarative/modelviews/objectlistmodel diff --git a/doc/src/snippets/declarative/pathview/pathattributes.qml b/doc/src/snippets/declarative/pathview/pathattributes.qml index 8d424a8..4daee63 100644 --- a/doc/src/snippets/declarative/pathview/pathattributes.qml +++ b/doc/src/snippets/declarative/pathview/pathattributes.qml @@ -49,8 +49,8 @@ Rectangle { id: delegate Item { width: 80; height: 80 - scale: PathView.scale - opacity: PathView.opacity + scale: PathView.iconScale + opacity: PathView.iconOpacity Column { Image { anchors.horizontalCenter: name.horizontalCenter; width: 64; height: 64; source: icon } Text { text: name; font.pointSize: 16} @@ -66,11 +66,11 @@ Rectangle { delegate: delegate path: Path { startX: 120; startY: 100 - PathAttribute { name: "scale"; value: 1.0 } - PathAttribute { name: "opacity"; value: 1.0 } + PathAttribute { name: "iconScale"; value: 1.0 } + PathAttribute { name: "iconOpacity"; value: 1.0 } PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 } - PathAttribute { name: "scale"; value: 0.3 } - PathAttribute { name: "opacity"; value: 0.5 } + PathAttribute { name: "iconScale"; value: 0.3 } + PathAttribute { name: "iconOpacity"; value: 0.5 } PathQuad { x: 120; y: 100; controlX: -20; controlY: 75 } } } -- cgit v0.12 From 473c8197f537346b9e6c46d55585d35ade942dec Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Wed, 28 Jul 2010 17:23:33 +1000 Subject: Append 'Example' to titles of example pages Task-number: QTBUG-12427 (cherry picked from commit 26d5ee6ecd9c2896427e3b40d923b603c30a1bf6) --- doc/src/examples/qml-examples.qdoc | 96 +++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index 3f90fc6..505a560 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -26,7 +26,7 @@ ****************************************************************************/ /*! - \title Animation: Basics + \title Animation: Basics Example \example declarative/animation/basics This example shows how to create and combine \l{QML Animation}{animations} in QML. @@ -47,7 +47,7 @@ */ /*! - \title Animation: Behaviors + \title Animation: Behavior Examples \example declarative/animation/behaviors This example shows how to use QML behaviors. @@ -56,7 +56,7 @@ */ /*! - \title Animation: Easing + \title Animation: Easing Example \example declarative/animation/easing This example shows the different easing modes available for \l{QML Animation}{animations}. @@ -65,7 +65,7 @@ */ /*! - \title Animation: States + \title Animation: States Example \example declarative/animation/states These examples show how to use \l{States}{states} and \l{Transitions}{transitions}. @@ -89,7 +89,7 @@ */ /*! - \title Image Elements: Border Image + \title Image Elements: Border Image Example \example declarative/imageelements/borderimage These examples show how to use the BorderImage element. @@ -110,7 +110,7 @@ */ /*! - \title Image Elements: Image + \title Image Elements: Image Example \example declarative/imageelements/image This example shows how to use the \l Image element and its \l{Image::fillMode}{fillModes}. @@ -147,7 +147,7 @@ */ /*! - \title C++ Extensions: Plugins + \title C++ Extensions: Plugins Example \example declarative/cppextensions/plugins This example shows how to create a C++ plugin extension by subclassing QDeclarativeExtensionPlugin. @@ -156,7 +156,7 @@ */ /*! - \title LayoutItem + \title LayoutItem Example \example declarative/cppextensions/qgraphicslayouts/layoutitem This example show how to use the LayoutItem element to integrate QML items into an existing @@ -165,7 +165,7 @@ \image qml-layoutitem-example.png */ /*! - \title QGraphicsGridLayout + \title QGraphicsGridLayout Example \example declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout This example shows how to use QGraphicsGridLayout to lay out QML items. This is @@ -175,7 +175,7 @@ \image qml-qgraphicsgridlayout-example.png */ /*! - \title QGraphicsLinearLayout + \title QGraphicsLinearLayout Example \example declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout This example shows how to use QGraphicsLinearLayout to lay out QML items. This is @@ -185,8 +185,8 @@ \image qml-qgraphicslinearlayout-example.png */ /*! + \title C++ Extensions: QGraphicsLayouts examples \page declarative-cppextensions-qgraphicslayouts.html - \title C++ Extensions: QGraphicsLayouts These examples show how to integrate \l{Graphics View Framework}{Graphics View} layout components with QML: @@ -199,7 +199,7 @@ */ /*! - \title C++ Extensions: QWidgets + \title C++ Extensions: QWidgets Example \example declarative/cppextensions/qwidgets This example shows how to embed QWidget-based objects into QML using QGraphicsProxyWidget. @@ -208,7 +208,7 @@ */ /*! - \title C++ Extensions: Image Provider + \title C++ Extensions: Image Provider Example \example declarative/cppextensions/imageprovider This examples shows how to use QDeclarativeImageProvider to serve images @@ -218,7 +218,7 @@ */ /*! - \title C++ Extensions: Network access manager factory + \title C++ Extensions: Network Access Manager Factory Example \example declarative/cppextensions/networkaccessmanagerfactory This example shows how to use QDeclarativeNetworkAccessManagerFactory to create a QNetworkAccessManager @@ -226,7 +226,7 @@ */ /*! - \title Internationlization + \title Internationlization Example \example declarative/i18n This example shows how to enable text translation in QML. @@ -235,7 +235,7 @@ */ /*! - \title Positioners + \title Positioners Example \example declarative/positioners This example shows how to use positioner elements such as \l Row, \l Column, @@ -245,7 +245,7 @@ */ /*! - \title Key Interaction: Focus + \title Key Interaction: Focus Example \example declarative/keyinteraction/focus This example shows how to handle keyboard input and focus in QML. @@ -254,7 +254,7 @@ */ /*! - \title Models and Views: AbstractItemModel + \title Models and Views: AbstractItemModel Example \example declarative/modelviews/abstractitemmodel This example shows how to use a QAbstractItemModel subclass as a model in QML. @@ -263,7 +263,7 @@ */ /*! - \title Models and Views: GridView + \title Models and Views: GridView Example \example declarative/modelviews/gridview This example shows how to use the GridView element. @@ -272,7 +272,7 @@ */ /*! - \title Models and Views: ListView + \title Models and Views: ListView Example \example declarative/modelviews/listview These examples show how to use the ListView element. @@ -314,7 +314,7 @@ */ /*! - \title Models and Views: PathView + \title Models and Views: PathView Example \example declarative/modelviews/pathview This example shows how to use the PathView element. @@ -323,7 +323,7 @@ */ /*! - \title Models and Views: Object ListModel + \title Models and Views: Object ListModel Example \example declarative/modelviews/objectlistmodel This example shows how to use a QList<QObject*> as a model in QML. @@ -332,7 +332,7 @@ */ /*! - \title Models and Views: Package + \title Models and Views: Package Example \example declarative/modelviews/package This example shows how to use the \l Package element. @@ -341,7 +341,7 @@ */ /*! - \title Models and Views: Parallax + \title Models and Views: Parallax Example \example declarative/modelviews/parallax This example shows how to combine and switch between views. @@ -350,7 +350,7 @@ */ /*! - \title Models and Views: String ListModel + \title Models and Views: String ListModel Example \example declarative/modelviews/stringlistmodel This example shows how to use a QStringList as a model in QML. @@ -359,7 +359,7 @@ */ /*! - \title Models and Views: VisualItemModel + \title Models and Views: VisualItemModel Example \example declarative/modelviews/visualitemmodel This example shows how to use the VisualItemModel element. @@ -368,7 +368,7 @@ */ /*! - \title Models and Views: WebView + \title Models and Views: WebView Example \example declarative/modelviews/webview These examples shows how to use the WebView element. @@ -410,14 +410,14 @@ */ /*! - \title SQL Local Storage + \title SQL Local Storage Example \example declarative/sqllocalstorage This example shows how to use the SQL Local Storage API in QML. */ /*! - \title Text: Fonts + \title Text: Fonts Example \example declarative/text/fonts These examples show how to discover available fonts from QML and manipulate @@ -453,7 +453,7 @@ */ /*! - \title Text: Text Selection + \title Text: Text Selection Example \example declarative/text/textselection This example shows how text selection, copy and paste operations @@ -463,7 +463,7 @@ */ /*! - \title Threading: Threaded ListModel + \title Threading: Threaded ListModel Example \example declarative/threading/threadedlistmodel This example shows how to use a ListModel from multiple threads using @@ -471,14 +471,14 @@ */ /*! - \title Threading: WorkerScript + \title Threading: WorkerScript Example \example declarative/threading/workerscript This example shows how to use the WorkerScript element for threading in QML. */ /*! - \title Toys: Clocks + \title Toys: Clocks Example \example declarative/toys/clocks This example displays a set of clocks with different times for different cities. @@ -489,7 +489,7 @@ */ /*! - \title Toys: Corkboards + \title Toys: Corkboards Example \example declarative/toys/corkboards This example presents a flickable set of interactive corkboards. It is created @@ -500,7 +500,7 @@ */ /*! - \title Toys: Dynamic Scene + \title Toys: Dynamic Scene Example \example declarative/toys/dynamicscene This example presents an interactive drag-and-drop scene. It demonstrates @@ -511,7 +511,7 @@ */ /*! - \title Toys: Tic-Tac-Toe + \title Toys: Tic-Tac-Toe Example \example declarative/toys/tic-tac-toe This example presents a simple implementation of Tic Tac Toe. @@ -520,7 +520,7 @@ */ /*! - \title Toys: TV Tennis + \title Toys: TV Tennis Example \example declarative/toys/tvtennis This example shows how to use animation components such as \l SpringAnimation, @@ -530,14 +530,14 @@ */ /*! - \title Touch Interaction: Gestures + \title Touch Interaction: Gestures Example \example declarative/touchinteraction/gestures This example shows how to use the GestureArea element. */ /*! - \title Touch Interaction: MouseArea + \title Touch Interaction: MouseArea Example \example declarative/touchinteraction/mousearea This example shows how to use the MouseArea element to access information @@ -547,7 +547,7 @@ */ /*! - \title UI Components: Dial + \title UI Components: Dial Control Example \example declarative/ui-components/dialcontrol This example shows how to create a dial-type control. It combines @@ -559,7 +559,7 @@ /*! - \title UI Components: Flipable + \title UI Components: Flipable Example \example declarative/ui-components/flipable This example shows how to use the \l Flipable element. @@ -568,7 +568,7 @@ */ /*! - \title UI Components: Progress Bars + \title UI Components: Progress Bars Example \example declarative/ui-components/progressbar This example shows how to create a progress bar. @@ -577,7 +577,7 @@ */ /*! - \title UI Components: Scroll Bar + \title UI Components: Scroll Bar Example \example declarative/ui-components/scrollbar This example shows how to create scroll bars for a \l Flickable element @@ -588,7 +588,7 @@ */ /*! - \title UI Components: Search Box + \title UI Components: Search Box Example \example declarative/ui-components/searchbox This example shows how to combine TextInput, FocusScope and BorderImage @@ -598,7 +598,7 @@ */ /*! - \title UI Components: Slide Switch + \title UI Components: Slide Switch Example \example declarative/ui-components/slideswitch This example shows how to create a slide switch control. @@ -607,7 +607,7 @@ */ /*! - \title UI Components: Spinner + \title UI Components: Spinner Example \example declarative/ui-components/spinner This example shows how to create a spinner-type component using the PathView element. @@ -616,7 +616,7 @@ */ /*! - \title UI Components: Tab Widget + \title UI Components: Tab Widget Example \example declarative/ui-components/tabwidget This example shows how to create a tab widget. @@ -625,7 +625,7 @@ */ /*! - \title XML: XMLHttpRequest + \title XML: XMLHttpRequest Example \example declarative/xml/xmlhttprequest This example shows how to use the \l XmlHttpRequest API in QML. -- cgit v0.12 From f897bee4ef26c88203b066809b221711aca90e2a Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Wed, 28 Jul 2010 17:01:30 +1000 Subject: Improvements to Modules docs Task-number: QTBUG-12430 (cherry picked from commit 63920a41b8dde3b9fa2c47efe95fcbaf83a1178f) --- doc/src/declarative/extending-tutorial.qdoc | 6 +- doc/src/declarative/modules.qdoc | 293 +++++++++++++++------ doc/src/declarative/qtdeclarative.qdoc | 16 +- .../qml/qdeclarativeextensionplugin.cpp | 6 +- 4 files changed, 228 insertions(+), 93 deletions(-) diff --git a/doc/src/declarative/extending-tutorial.qdoc b/doc/src/declarative/extending-tutorial.qdoc index bc849b0..d128d0f 100644 --- a/doc/src/declarative/extending-tutorial.qdoc +++ b/doc/src/declarative/extending-tutorial.qdoc @@ -421,7 +421,7 @@ To create a plugin library, we need: \list \o A plugin class that registers our QML types \o A project file that describes the plugin -\o A "qmldir" file that tells the QML engine to load the plugin +\o A \l{Writing a qmldir file}{qmldir} file that tells the QML engine to load the plugin \endlist First, we create a plugin class named \c ChartsPlugin. It subclasses QDeclarativeExtensionPlugin @@ -441,8 +441,8 @@ and specifies with DESTDIR that library files should be built into a "lib" subdi \quotefile declarative/tutorials/extending/chapter6-plugins/chapter6-plugins.pro -Finally, we add a \c qmldir file that is automatically parsed by the QML engine. -Here, we specify that a plugin named "chapter6-plugin" (the name +Finally, we add a \l{Writing a qmldir file}{qmldir} file that is automatically parsed by the QML engine. +In this file, we specify that a plugin named "chapter6-plugin" (the name of the example project) can be found in the "lib" subdirectory: \quotefile declarative/tutorials/extending/chapter6-plugins/qmldir diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index 938222a..9e51a40 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -30,152 +30,277 @@ \title Modules \section1 QML Modules -A \bold {QML module} is a collection of QML types. They allow you to organize your QML content -into independent units. Modules have an optional versioning mechanism that allows for independent + +A module is a set of QML content files that can be imported as a unit into a QML +application. Modules can be used to organize QML content into independent units, +and they can use a versioning mechanism that allows for independent upgradability of the modules. -There are two types of modules: -location modules (defined by a URL), -and -installed modules (defined by a URI). +While QML component files within the same directory are automatically accessible +within the global namespace, components defined elsewhere must be imported +explicitly using the \c import statement to import them as modules. For +example, an \c import statement is required to use: + +\list +\o A component defined in another QML file that is not in the same directory +\o A component defined in a QML file located on a remote server +\o A \l{QDeclarativeExtensionPlugin}{QML C++ plugin} library (unless the plugin is installed in the same directory) +\o A JavaScript file (note this must be imported using \l {#namespaces}{named imports}) +\endlist + +An \c import statement includes the module name, and possibly a version number. +This can be seen in the snippet commonly found at the top of QML files: + +\qml + import Qt 4.7 +\endqml + +This imports version 4.7 of the "Qt" module into the global namespace. (The QML +library itself must be imported to use any of the \l {QML Elements}, as they +are not included in the global namespace by default.) + +The \c Qt module is an \e installed module; it is found in the +\l{The QML import path}{import path}. There are two types of QML modules: +location modules (defined by a URL) and installed modules (defined by a URI). + + +\section1 Location Modules + +Location modules can reside on the local filesystem or a network resource, +and are referred to by a quoted location URL that specifies the filesystem +or network URL. They allow any directory with QML content to be imported +as a module, whether the directory is on the local filesystem or a remote +server. + +For example, a QML project may have a separate directory for a set of +custom UI components. These components can be accessed by importing the +directory using a relative or absolute path, like this: + +\table +\row +\o Directory structure +\o Contents of application.qml + +\row +\o +\code +MyQMLProject + |- MyComponents + |- Slider.qml + |- CheckBox.qml + |- Main + |- application.qml +\endcode + +\o +\code +import "../MyComponents" + +Slider { ... } +CheckBox { ... } +\endcode + +\endtable -Location modules types are defined in QML files and \l{QDeclarativeExtensionPlugin}{QML C++ plugins} -in a directory refered to directly by -the location URL, either on the local filesystem, or as a network resource. The URL that locates them -can be relative, in which case they actual URL is resolved by the QML file containing the import. -When importing a location module, a quoted URL is used: +Similarly, if the directory resided on a network source, it could +be imported like this: \code -import "https://qml.nokia.com/qml/example" 1.0 -import "https://qml.nokia.com/qml/example" as NokiaExample -import "mymodule" 1.0 -import "mymodule" + import "https://qml.nokia.com/qml/qmlcomponents" + import "https://qml.nokia.com/qml/qmlcomponents" 1.0 \endcode -Installed modules can \e only be on the local file system or in application C++ code. Again they -are defined in QML files and \l{QDeclarativeExtensionPlugin}{QML C++ plugins} in a directory, -but the directory is indirectly referred to by the URI. The mapping to actual content is either -by application C++ code registering a C++ type to a module URI (see \l{Extending QML in C++}), -or in the referenced subdirectory of a path on the import path (see below). -When importing a location module, an un-quoted URI is used: +Remote location modules must have a \l{Writing a qmldir file}{qmldir file} in the +same directory to specify which QML files should be made available. See the +\l {#qmldirexample}{example} below. The qmldir file is optional for modules on +the local filesystem. + + + +\section1 Installed modules + + +Installed modules are modules that are installed on the +local filesystem within the QML import path, or modules defined in C++ +application code. When importing an installed module, an un-quoted URI is +used, with a mandatory version number: \code -import com.nokia.qml.mymodule 1.0 -import com.nokia.qml.mymodule as MyModule + import Qt 4.7 + import com.nokia.qml.mymodule 1.0 \endcode +Installed modules that are installed into the import path or created +as a \l{QDeclarativeExtensionPlugin}{QML C++ plugin} must define a +\l{Writing a qmldir file}{qmldir file}. + + +\section2 The QML import path -For either type of module, a \c qmldir file in the module directory defines the content of the module. This file is -optional for location modules, but only for local filesystem content or a single remote content with a namespace. -The second exception is explained in more detail in the section below on Namespaces. +The QML engine will search the import path for a requested installed module. +The default import path includes: -\section2 The Import Path +\list +\o The directory of the current file +\o The location specified by QLibraryInfo::ImportsPath +\o Paths specified by the \c QML_IMPORT_PATH environment variable +\endlist -Installed modules are searched for on the import path. -The \c -I option to the \l {QML Viewer} adds paths to the import path. +The import path can be queried using QDeclarativeEngine::importPathList() and modified using QDeclarativeEngine::addImportPath(). -From C++, the path is available via \l QDeclarativeEngine::importPathList() and can be prepended to -using \l QDeclarativeEngine::addImportPath(). +When running the \l {QML Viewer}, use the \c -I option to add paths to the import path. -\section2 The \c qmldir File -Installed QML modules and remote content without a namespace require a file \c qmldir which -specifies the mapping from all type names to versioned QML files. It is a list of lines of the form: +\section2 Creating installed modules in C++ + +C++ applications can dynamically define installed modules using +qmlRegisterType(). + +For \l{QDeclarativeExtensionPlugin}{QML C++ plugins}, the +module URI is automatically passed to QDeclarativeExtensionPlugin::registerTypes(). +The QDeclarativeExtensionPlugin documentation shows how to use this URI +to call qmlRegisterType() to enable the plugin library to be built as +an installed module. Once the plugin is built and installed, the module is importable +in QML, like this: + +\code +import com.nokia.TimeExample 1.0 +\endcode + +A \l{QDeclarativeExtensionPlugin}{QML C++ plugin} also requires a +\l{Writing a qmldir file}{qmldir file} to make it available to the +QML engine. + + + +\target namespaces +\section1 Namespaces: Using Named Imports + +By default, when a module is imported, its contents are imported into the global namespace. You may choose to import the module into another namespace, either to allow identically-named types to be referenced, or purely for readability. + +To import a module into a specific namespace, use the \e as keyword: + +\qml + import Qt 4.7 as QtLibrary + import "../MyComponents" as MyComponents + import com.nokia.qml.mymodule 1.0 as MyModule +\endqml + +Types from these modules can then only be used when qualified by the namespace: + +\qml + QtLibrary.Rectangle { ... } + + MyComponents.Slider { ... } + + MyModule.SomeComponent { ... } +\endqml + +Multiple modules can be imported into the same namespace in the same way that multiple modules can be imported into the global namespace: + +\qml + import Qt 4.7 as Nokia + import Ovi 1.0 as Nokia +\endqml + +\section2 JavaScript files + +JavaScript files must always be imported with a named import: + +\qml + import "somescript.js" as MyScript + + Item { + //... + Component.onCompleted: MyScript.doSomething() + } +\endqml + + + +\section1 Writing a qmldir file + +A \c qmldir file is a metadata file for a module that maps all type names in +the module to versioned QML files. It is required for installed modules, and +location modules that are loaded from a network source. + +It is defined by a plain text file named "qmldir" that contains one or more lines of the form: \code # <Comment> <TypeName> [<InitialVersion>] <File> -internal <Name> <File> +internal <TypeName> <File> plugin <Name> [<Path>] \endcode -# <Comment> lines are ignored, and can be used for comments. +\bold {# <Commment>} lines are used for comments. They are ignored by the QML engine. -<TypeName> <InitialVersion> <File> lines are used to add QML files as types. -<TypeName> is the type being made available; the optional <InitialVersion> is a version -number like \c 4.0; <File> is the (relative) -file name of the QML file defining the type. +\bold {<TypeName> [<InitialVersion>] <File>} lines are used to add QML files as types. +<TypeName> is the type being made available, the optional <InitialVersion> is a version +number, and <File> is the (relative) file name of the QML file defining the type. Installed files do not need to import the module of which they are a part, as they can refer to the other QML files in the module as relative (local) files, but if the module is imported from a remote location, those files must nevertheless be listed in the \c qmldir file. Types which you do not wish to export to users of your module -may be marked with the \c internal keyword: \c internal <TypeName> <File>. +may be marked with the \c internal keyword: \bold {internal <TypeName> <File>}. The same type can be provided by different files in different versions, in which case later versions (eg. 1.2) must precede earlier versions (eg. 1.0), since the \e first name-version match is used and a request for a version of a type can be fulfilled by one defined in an earlier version of the module. If a user attempts to import a version earlier than the earliest provided or later than the latest provided, -an error results, but if the user imports a version within the range of versions provided, -even if no type is specific to that version, no error results. +the import produces a runtime error, but if the user imports a version within the range of versions provided, +even if no type is specific to that version, no error will occur. A single module, in all versions, may only be provided in a single directory (and a single \c qmldir file). If multiple are provided, only the first in the search path will be used (regardless of whether other versions are provided by directories later in the search path). -Installed and remote files without a namespace \e must be referred to by version information described above, -local files \e may have it. - The versioning system ensures that a given QML file will work regardless of the version of installed software, since a versioned import \e only imports types for that version, leaving other identifiers available, even if the actual installed version might otherwise provide those identifiers. -\c plugin <Name> [<Path>] lines are used to add \l{QDeclarativeExtensionPlugin}{QML C++ plugins} -to the module. - -<Name> is the name of the library. It is usually not the same as the file name -of the plugin binary, which is platform dependent; e.g. the library MyAppTypes would produce -a libMyAppTypes.so on Linux and MyAppTypes.dll on Windows. -By default the engine searches for the plugin library in the directory containing the \c qmldir -file. The \c -P option to the \l {QML Viewer} adds paths to the -plugin search path. -From C++, the path is available via \l QDeclarativeEngine::pluginPathList() and can be prepended to -using \l QDeclarativeEngine::addPluginPath(). +\bold {plugin <Name> [<Path>]} lines are used to add \l{QDeclarativeExtensionPlugin}{QML C++ plugins} to the module. <Name> is the name of the library. It is usually not the same as the file name +of the plugin binary, which is platform dependent; e.g. the library \c MyAppTypes would produce +\c libMyAppTypes.so on Linux and \c MyAppTypes.dll on Windows. <Path> is an optional argument specifying either an absolute path to the directory containing the plugin file, or a relative path from the directory containing the \c qmldir file to the directory -containing the plugin file. - +containing the plugin file. By default the engine searches for the plugin library in the directory that contains the \c qmldir +file. The plugin search path can be queried with QDeclarativeEngine::pluginPathList() and modified using QDeclarativeEngine::addPluginPath(). When running the \l {QML Viewer}, use the \c -P option to add paths to the plugin search path. -\section2 Namespaces - Named Imports -When importing content it by default imports types into the global namespace. -You may choose to import the module into another namespace, either to allow identically-named -types to be referenced, or purely for readability. +\target qmldirexample +\section2 Example -To import a module into a namespace: +If the components in the \c MyComponents directory from the +\l{Location Modules}{earlier example} were to be made available as a network resource, +the directory would need to contain a \c qmldir file similar to this: \code -import Qt 4.7 as TheQtLibrary +ComponentA 1.0 ComponentA.qml +ComponentB 1.0 ComponentB.qml \endcode -Types from the Qt 4.7 module may then be used, but only by qualifying them with the namespace: +The \c MyComponents directory could then be imported as a module using: \code -TheQtLibrary.Rectangle { ... } -\endcode - -Multiple modules can be imported into the same namespace in the same way that multiple -modules can be imported into the global namespace: +import "http://the-server-name.com/MyComponents" -\code -import Qt 4.7 as Nokia -import Ovi 1.0 as Nokia +Slider { ... } +CheckBox { ... } \endcode -While import statements are needed to make any types available in QML, the directory of the -current file is implicitly loaded. This is the exact same as if you had added 'import "."' to -the start of every QML file. The effect of this is that you can automatically use types defined in C++ plugins -or QML files if they reside in the same directory. This is the last location searched for types - so if you -happen to have a "Text.qml" file, or "text.qml" on case-insensitive file systems, it will not override -the one from Qt if you import Qt. - -*/ +with an optional "1.0" version specification. Notice the import fails if +a later version is used, as the \c qmldir file specifies that these elements +are only available in the 1.0 version. -/* -Original requirement is QT-558. +For examples of \c qmldir files for plugins, see the +\l {declarative/cppextensions/plugins}{Plugins} example and +\l {Tutorial: Writing QML extensions with C++}. */ +/ diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc index fb50286..413eb59 100644 --- a/doc/src/declarative/qtdeclarative.qdoc +++ b/doc/src/declarative/qtdeclarative.qdoc @@ -70,13 +70,23 @@ Returns the QML type id. - Example: Register the C++ class \c MinehuntGame as the QML type - named \c Game for version 0.1 in the import library \c MinehuntCore: + For example, this registers a C++ class \c MySliderItem as a QML type + named \c Slider for version 1.0 of a \l{QML Modules}{module} called + "com.mycompany.qmlcomponents": \code - qmlRegisterType<MinehuntGame>("MinehuntCore", 0, 1, "Game"); + qmlRegisterType<MySliderItem>("com.mycompany.qmlcomponents", 1, 0, "Slider"); \endcode + Once this is registered, the type can be used in QML by importing the + specified module name and version number: + + \qml + imoprt com.mycompany.qmlcomponents 1.0 + + Slider { ... } + \endqml + Note that it's perfectly reasonable for a library to register types to older versions than the actual version of the library. Indeed, it is normal for the new library to allow QML written to previous versions to continue to work, even if more advanced versions of diff --git a/src/declarative/qml/qdeclarativeextensionplugin.cpp b/src/declarative/qml/qdeclarativeextensionplugin.cpp index 448fde2..9b5eb61 100644 --- a/src/declarative/qml/qdeclarativeextensionplugin.cpp +++ b/src/declarative/qml/qdeclarativeextensionplugin.cpp @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE \o Subclass QDeclarativeExtensionPlugin, implement registerTypes() method to register types using qmlRegisterType(), and export the class using the Q_EXPORT_PLUGIN2() macro \o Write an appropriate project file for the plugin - \o Create a \l{The qmldir file}{qmldir file} to describe the plugin + \o Create a \l{Writing a qmldir file}{qmldir file} to describe the plugin \endlist QML extension plugins can be used to provide either application-specific or @@ -79,7 +79,7 @@ QT_BEGIN_NAMESPACE \dots To make this class available as a QML type, create a plugin that registers - this type using qmlRegisterType(). For this example the plugin + this type with a specific \l {QML Modules}{module} using qmlRegisterType(). For this example the plugin module will be named \c com.nokia.TimeExample (as defined in the project file further below). @@ -104,7 +104,7 @@ QT_BEGIN_NAMESPACE ... \endcode - Finally, a \l{The qmldir file}{qmldir file} is required in the \c com/nokia/TimeExample directory + Finally, a \l{Writing a qmldir file}{qmldir file} is required in the \c com/nokia/TimeExample directory that describes the plugin. This directory includes a \c Clock.qml file that should be bundled with the plugin, so it needs to be specified in the \c qmldir file: -- cgit v0.12 From aca0fb5feed92623e1aa3f266059aa39d42ce7d9 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 29 Jul 2010 10:54:43 +1000 Subject: Avoid binding loop warnings Task-number: QTBUG-12469 (cherry picked from commit f3f50543beebc41c69ac3a3fb296275fab12b604) --- examples/declarative/toys/dynamicscene/dynamicscene.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/declarative/toys/dynamicscene/dynamicscene.qml b/examples/declarative/toys/dynamicscene/dynamicscene.qml index 2a22a5f..d1055cd 100644 --- a/examples/declarative/toys/dynamicscene/dynamicscene.qml +++ b/examples/declarative/toys/dynamicscene/dynamicscene.qml @@ -136,10 +136,11 @@ Item { Text { text: "Drag an item into the scene." } Rectangle { - width: childrenRect.width + 10; height: childrenRect.height + 10 + width: palette.width + 10; height: palette.height + 10 border.color: "black" Row { + id: palette anchors.centerIn: parent spacing: 8 -- cgit v0.12 From 6b77c529858d13f4a11fc1e5246b2409f8e0e449 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 29 Jul 2010 10:59:26 +1000 Subject: Don't emit movementEnded if mouse press is a continuation of a flick. When the mouse is pressed the flick is stopped, but this may be a continuation of a previous flick, in which case we don't want to emit movementEnded since this can cause stutters in animations triggered by movementEnded, for example. Task-number: QTBUG-12492 Reviewed-by: Warwick Allison (cherry picked from commit 1188c199beaacd0ffc3ef39716dd648d41f4d3d2) --- .../graphicsitems/qdeclarativeflickable.cpp | 32 ++++++++++++---------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index b286e11..998b33a 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1426,21 +1426,23 @@ void QDeclarativeFlickable::movementEnding() if (!d->flickingHorizontally) emit flickEnded(); } - if (d->movingHorizontally) { - d->movingHorizontally = false; - d->hMoved = false; - emit movingChanged(); - emit movingHorizontallyChanged(); - if (!d->movingVertically) - emit movementEnded(); - } - if (d->movingVertically) { - d->movingVertically = false; - d->vMoved = false; - emit movingChanged(); - emit movingVerticallyChanged(); - if (!d->movingHorizontally) - emit movementEnded(); + if (!d->pressed && !d->stealMouse) { + if (d->movingHorizontally) { + d->movingHorizontally = false; + d->hMoved = false; + emit movingChanged(); + emit movingHorizontallyChanged(); + if (!d->movingVertically) + emit movementEnded(); + } + if (d->movingVertically) { + d->movingVertically = false; + d->vMoved = false; + emit movingChanged(); + emit movingVerticallyChanged(); + if (!d->movingHorizontally) + emit movementEnded(); + } } d->hData.smoothVelocity.setValue(0); d->vData.smoothVelocity.setValue(0); -- cgit v0.12 From e88500374d6299e2ed7c5a8cc5815eb8f3c8e3a0 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 29 Jul 2010 11:11:24 +1000 Subject: Fix image source Task-number: QTBUG-12493 (cherry picked from commit 0ab3b6fea13aad50a70890925659158eb662df2e) --- examples/declarative/tutorials/samegame/samegame1/samegame.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/declarative/tutorials/samegame/samegame1/samegame.qml b/examples/declarative/tutorials/samegame/samegame1/samegame.qml index 80567ef..68f8712 100644 --- a/examples/declarative/tutorials/samegame/samegame1/samegame.qml +++ b/examples/declarative/tutorials/samegame/samegame1/samegame.qml @@ -55,7 +55,7 @@ Rectangle { Image { id: background anchors.fill: parent - source: "../shared/pics/background.png" + source: "../shared/pics/background.jpg" fillMode: Image.PreserveAspectCrop } } -- cgit v0.12 From ece2f52e7a2b9cc9d54d96aa73cc87385205d0f3 Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Thu, 29 Jul 2010 11:31:59 +1000 Subject: Remove warnings in photoviewer demo. Task-number: QTBUG-12494 (cherry picked from commit 155f99502be75ff400bbae550328dbc79801d6c8) --- demos/declarative/photoviewer/PhotoViewerCore/Button.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/declarative/photoviewer/PhotoViewerCore/Button.qml b/demos/declarative/photoviewer/PhotoViewerCore/Button.qml index a60d5ca..47b90c8 100644 --- a/demos/declarative/photoviewer/PhotoViewerCore/Button.qml +++ b/demos/declarative/photoviewer/PhotoViewerCore/Button.qml @@ -45,7 +45,7 @@ Item { id: container property alias label: labelText.text - property string tint: "" + property color tint: "transparent" signal clicked width: labelText.width + 70 ; height: labelText.height + 18 -- cgit v0.12 From 9d50c8da311500b0e083134b965a968e220722a2 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Tue, 27 Jul 2010 09:59:59 +1000 Subject: various doc fixes (cherry picked from commit 9ea7bb34e4b41e1263acb8a175f61566046f9bf6) --- doc/src/declarative/dynamicobjects.qdoc | 2 +- .../tutorials/extending/chapter6-plugins/chartsplugin.cpp | 2 +- .../tutorials/extending/chapter6-plugins/chartsplugin.h | 2 +- src/declarative/qml/qdeclarativecomponent.cpp | 4 +++- src/declarative/qml/qdeclarativeengine.cpp | 2 +- src/declarative/qml/qdeclarativeimageprovider.cpp | 3 --- src/declarative/util/qdeclarativetimer.cpp | 11 +++++------ src/declarative/util/qdeclarativetransition.cpp | 4 ++-- 8 files changed, 14 insertions(+), 16 deletions(-) diff --git a/doc/src/declarative/dynamicobjects.qdoc b/doc/src/declarative/dynamicobjects.qdoc index 6bce4fa..300799c 100644 --- a/doc/src/declarative/dynamicobjects.qdoc +++ b/doc/src/declarative/dynamicobjects.qdoc @@ -148,7 +148,7 @@ lots of dynamically created items, however, you may receive a worthwhile performance benefit if unused items are deleted. Note that you should never manually delete items that were dynamically created -by QML elements (such as \l Loader). Also, you should generally avoid deleting +by QML elements (such as \l Loader and \l Repeater). Also, you should generally avoid deleting items that you did not dynamically create yourself. Items can be deleted using the \c destroy() method. This method has an optional diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp index 5aa2a4b..c4d8b61 100644 --- a/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp +++ b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.cpp @@ -41,7 +41,7 @@ //![0] #include "piechart.h" #include "pieslice.h" -#include <QtDeclarative/qdeclarative.h> +#include <qdeclarative.h> void ChartsPlugin::registerTypes(const char *uri) { diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h index 797d1e7..c055e8b 100644 --- a/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h +++ b/examples/declarative/tutorials/extending/chapter6-plugins/chartsplugin.h @@ -41,7 +41,7 @@ #define CHARTSPLUGIN_H //![0] -#include <QtDeclarative/QDeclarativeExtensionPlugin> +#include <QDeclarativeExtensionPlugin> class ChartsPlugin : public QDeclarativeExtensionPlugin { diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 36c4b49..7bc6184 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -119,6 +119,8 @@ class QByteArray; \qml Item { + width: 100; height: 100 + Component { id: redSquare @@ -146,7 +148,7 @@ class QByteArray; to specify how each list item is to be displayed. Component objects can also be dynamically generated using - \l{Qt::createComponent}{Qt.createComponent()}. + \l{Qt::createComponent()}{Qt.createComponent()}. */ /*! diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index e3ebca3..e313c97 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -228,7 +228,7 @@ There are also string based constructors for these types. See \l{qdeclarativebas \section1 Date/Time Formatters -The Qt object contains several functions for formatting dates and times. +The Qt object contains several functions for formatting QDateTime, QDate and QTime values. \list \o \l{QML:Qt::formatDateTime}{string Qt.formatDateTime(datetime date, variant format)} diff --git a/src/declarative/qml/qdeclarativeimageprovider.cpp b/src/declarative/qml/qdeclarativeimageprovider.cpp index a294c38..241df87 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.cpp +++ b/src/declarative/qml/qdeclarativeimageprovider.cpp @@ -212,9 +212,6 @@ QImage QDeclarativeImageProvider::requestImage(const QString &id, QSize *size, c In all cases, \a size must be set to the original size of the image. This is used to set the \l {Item::}{width} and \l {Item::}{height} of image elements that should be automatically sized to the loaded image. - - \note this method may be called by multiple threads, so ensure the - implementation of this method is reentrant. */ QPixmap QDeclarativeImageProvider::requestPixmap(const QString &id, QSize *size, const QSize& requestedSize) { diff --git a/src/declarative/util/qdeclarativetimer.cpp b/src/declarative/util/qdeclarativetimer.cpp index 576995f..838a8f3 100644 --- a/src/declarative/util/qdeclarativetimer.cpp +++ b/src/declarative/util/qdeclarativetimer.cpp @@ -73,11 +73,12 @@ public: \since 4.7 \brief The Timer item triggers a handler at a specified interval. - A timer can be used to trigger an action either once, or repeatedly + A Timer can be used to trigger an action either once, or repeatedly at a given interval. - Here is a timer that shows the current date and time, and updates - the text every 500 milliseconds: + Here is a Timer that shows the current date and time, and updates + the text every 500 milliseconds. It uses the JavaScript \c Date + object to access the current time. \qml import Qt 4.7 @@ -88,9 +89,7 @@ public: onTriggered: time.text = Date().toString() } - Text { - id: time - } + Text { id: time } } \endqml diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp index 6561b8c..582191b 100644 --- a/src/declarative/util/qdeclarativetransition.cpp +++ b/src/declarative/util/qdeclarativetransition.cpp @@ -66,13 +66,13 @@ QT_BEGIN_NAMESPACE \snippet doc/src/snippets/declarative/transition.qml 0 - To specify multiple transitions, specify \l Item::transitions as a list: + To define multiple transitions, specify \l Item::transitions as a list: \qml Item { ... transitions: [ - Transition { ... } + Transition { ... }, Transition { ... } ] } -- cgit v0.12 From c9c5ea84cdc85110ed096f51e51315b364cd3a0d Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Wed, 28 Jul 2010 16:21:42 +1000 Subject: Fixes for Dynamic Object Management docs. Also adds links to this page from other documentation. Task-number: QTBUG-12446 (cherry picked from commit ceeb0fc0327c99de55d4dd6114908ec389dc58eb) --- doc/src/declarative/dynamicobjects.qdoc | 42 +++++++++++-- .../declarative/createComponent-simple.qml | 57 ++++++++++++++++++ doc/src/snippets/declarative/createQmlObject.qml | 4 ++ .../declarative/dynamicObjects-destroy.qml | 55 +++++++++++++++++ doc/src/snippets/declarative/dynamicObjects.qml | 69 ---------------------- src/declarative/qml/qdeclarativecomponent.cpp | 3 + src/declarative/qml/qdeclarativeengine.cpp | 27 ++++----- 7 files changed, 165 insertions(+), 92 deletions(-) create mode 100644 doc/src/snippets/declarative/createComponent-simple.qml create mode 100644 doc/src/snippets/declarative/dynamicObjects-destroy.qml delete mode 100644 doc/src/snippets/declarative/dynamicObjects.qml diff --git a/doc/src/declarative/dynamicobjects.qdoc b/doc/src/declarative/dynamicobjects.qdoc index 300799c..997f601 100644 --- a/doc/src/declarative/dynamicobjects.qdoc +++ b/doc/src/declarative/dynamicobjects.qdoc @@ -148,17 +148,47 @@ lots of dynamically created items, however, you may receive a worthwhile performance benefit if unused items are deleted. Note that you should never manually delete items that were dynamically created -by QML elements (such as \l Loader and \l Repeater). Also, you should generally avoid deleting +by QML elements (such as \l Loader and \l Repeater). Also, you should avoid deleting items that you did not dynamically create yourself. Items can be deleted using the \c destroy() method. This method has an optional argument (which defaults to 0) that specifies the approximate delay in milliseconds -before the object is to be destroyed. This allows you to wait until the completion of -an animation or transition. An example: +before the object is to be destroyed. -\snippet doc/src/snippets/declarative/dynamicObjects.qml 0 +Here is an example. The \c application.qml creates five instances of the \c SelfDestroyingRect.qml +component. Each instance runs a NumberAnimation, and when the animation has finished, calls +\c destroy() on its root item to destroy itself: + +\table +\row +\o \c application.qml +\o \c SelfDestroyingRect.qml + +\row +\o \snippet doc/src/snippets/declarative/dynamicObjects-destroy.qml 0 +\o \snippet doc/src/snippets/declarative/SelfDestroyingRect.qml 0 + +\endtable + +Alternatively, the \c application.qml could have destroyed the created object +by calling \c object.destroy(). + +Notice that if a \c SelfDestroyingRect instance was created statically like this: + +\qml +Item { + SelfDestroyingRect { ... } +} +\endqml + +This would result in an error, since items can only be dynamically +destroyed if they were dynamically created. + +Objects created with \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()} +can similarly be destroyed using \c destroy(): + +\snippet doc/src/snippets/declarative/createQmlObject.qml 0 +\snippet doc/src/snippets/declarative/createQmlObject.qml destroy -Here, \c Rectangle objects are destroyed one second after they are created, which is long -enough for the \c NumberAnimation to be played before the object is destroyed. */ diff --git a/doc/src/snippets/declarative/createComponent-simple.qml b/doc/src/snippets/declarative/createComponent-simple.qml new file mode 100644 index 0000000..9669580 --- /dev/null +++ b/doc/src/snippets/declarative/createComponent-simple.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Item { + id: container + width: 300; height: 300 + + function loadButton() { + var component = Qt.createComponent("Button.qml"); + if (component.status == Component.Ready) { + var button = component.createObject(container); + button.color = "red"; + } + } + + Component.onCompleted: loadButton() +} +//![0] diff --git a/doc/src/snippets/declarative/createQmlObject.qml b/doc/src/snippets/declarative/createQmlObject.qml index 64dd21d..a5f15f4 100644 --- a/doc/src/snippets/declarative/createQmlObject.qml +++ b/doc/src/snippets/declarative/createQmlObject.qml @@ -51,6 +51,10 @@ Rectangle { var newObject = Qt.createQmlObject('import Qt 4.7; Rectangle {color: "red"; width: 20; height: 20}', parentItem, "dynamicSnippet1"); //![0] + +//![destroy] +newObject.destroy(1000); +//![destroy] } Component.onCompleted: createIt() diff --git a/doc/src/snippets/declarative/dynamicObjects-destroy.qml b/doc/src/snippets/declarative/dynamicObjects-destroy.qml new file mode 100644 index 0000000..2c0c2fb --- /dev/null +++ b/doc/src/snippets/declarative/dynamicObjects-destroy.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Item { + id: container + width: 500; height: 100 + + Component.onCompleted: { + var component = Qt.createComponent("SelfDestroyingRect.qml"); + for (var i=0; i<5; i++) { + var object = component.createObject(container); + object.x = (object.width + 10) * i; + } + } +} +//![0] diff --git a/doc/src/snippets/declarative/dynamicObjects.qml b/doc/src/snippets/declarative/dynamicObjects.qml deleted file mode 100644 index 3698499..0000000 --- a/doc/src/snippets/declarative/dynamicObjects.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import Qt 4.7 - -//![0] -Rectangle { - id: rootItem - width: 300 - height: 300 - - Component { - id: rectComponent - - Rectangle { - id: rect - width: 40; height: 40; - color: "red" - - NumberAnimation on opacity { from: 1; to: 0; duration: 1000 } - - Component.onCompleted: rect.destroy(1000); - } - } - - function createRectangle() { - var object = rectComponent.createObject(rootItem); - } - - Component.onCompleted: createRectangle() -} -//![0] diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 7bc6184..e8e237f 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -609,6 +609,9 @@ QDeclarativeComponent::QDeclarativeComponent(QDeclarativeComponentPrivate &dd, Q the \a parent value. Note that if the returned object is to be displayed, you must provide a valid \a parent value or set the returned object's \l{Item::parent}{parent} property, or else the object will not be visible. + + Dynamically created instances can be deleted with the \c destroy() method. + See \l {Dynamic Object Management} for more information. */ /*! diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index e313c97..cba4671 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -1104,29 +1104,20 @@ QString QDeclarativeEnginePrivate::urlToLocalFileOrQrc(const QUrl& url) \qmlmethod object Qt::createComponent(url) Returns a \l Component object created using the QML file at the specified \a url, -or \c null if there was an error in creating the component. +or \c null if an empty string was given. + +The returned component's \l Component::status property indicates whether the +component was successfully created. If the status is \c Component.Error, +see \l Component::errorString() for an error description. Call \l {Component::createObject()}{Component.createObject()} on the returned component to create an object instance of the component. -Here is an example. Notice it checks whether the component \l{Component::status}{status} is -\c Component.Ready before calling \l {Component::createObject()}{createObject()} -in case the QML file is loaded over a network and thus is not ready immediately. - -\snippet doc/src/snippets/declarative/componentCreation.js vars -\codeline -\snippet doc/src/snippets/declarative/componentCreation.js func -\snippet doc/src/snippets/declarative/componentCreation.js remote -\snippet doc/src/snippets/declarative/componentCreation.js func-end -\codeline -\snippet doc/src/snippets/declarative/componentCreation.js finishCreation +For example: -If you are certain the QML file to be loaded is a local file, you could omit the \c finishCreation() -function and call \l {Component::createObject()}{createObject()} immediately: +\snippet doc/src/snippets/declarative/createComponent-simple.qml 0 -\snippet doc/src/snippets/declarative/componentCreation.js func -\snippet doc/src/snippets/declarative/componentCreation.js local -\snippet doc/src/snippets/declarative/componentCreation.js func-end +See \l {Dynamic Object Management} for more information on using this function. To create a QML object from an arbitrary string of QML (instead of a file), use \l{QML:Qt::createQmlObject()}{Qt.createQmlObject()}. @@ -1177,6 +1168,8 @@ Each object in this array has the members \c lineNumber, \c columnNumber, \c fil Note that this function returns immediately, and therefore may not work if the \a qml string loads new components (that is, external QML files that have not yet been loaded). If this is the case, consider using \l{QML:Qt::createComponent()}{Qt.createComponent()} instead. + +See \l {Dynamic Object Management} for more information on using this function. */ QScriptValue QDeclarativeEnginePrivate::createQmlObject(QScriptContext *ctxt, QScriptEngine *engine) -- cgit v0.12 From 999b06a069cccfc968ad0d425132fa327ba63faf Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Wed, 28 Jul 2010 16:54:38 +1000 Subject: Component docs Task-number: QTBUG-12447 (cherry picked from commit dd871bf6208821ab9852680a338133accbfdedd7) --- doc/src/snippets/declarative/component.qml | 60 +++++++++++++++++++++++++++ src/declarative/qml/qdeclarativecomponent.cpp | 30 ++++---------- 2 files changed, 69 insertions(+), 21 deletions(-) create mode 100644 doc/src/snippets/declarative/component.qml diff --git a/doc/src/snippets/declarative/component.qml b/doc/src/snippets/declarative/component.qml new file mode 100644 index 0000000..09c4aa2 --- /dev/null +++ b/doc/src/snippets/declarative/component.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Item { + width: 100; height: 100 + + Component { + id: redSquare + + Rectangle { + color: "red" + width: 10 + height: 10 + } + } + + Loader { sourceComponent: redSquare } + Loader { sourceComponent: redSquare; x: 20 } +} +//![0] diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index e8e237f..1d48b1a 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -115,26 +115,10 @@ class QByteArray; a small component within a QML file, or for defining a component that logically belongs with other QML components within a file. - For example, here is a component that is used by multiple \l Loader objects: + For example, here is a component that is used by multiple \l Loader objects. + It contains a top level \l Rectangle item: - \qml - Item { - width: 100; height: 100 - - Component { - id: redSquare - - Rectangle { - color: "red" - width: 10 - height: 10 - } - } - - Loader { sourceComponent: redSquare } - Loader { sourceComponent: redSquare; x: 20 } - } - \endqml + \snippet doc/src/snippets/declarative/component.qml 0 Notice that while a \l Rectangle by itself would be automatically rendered and displayed, this is not the case for the above rectangle @@ -143,12 +127,16 @@ class QByteArray; file, and is not loaded until requested (in this case, by the two \l Loader objects). + A Component cannot contain anything other + than an \c id and a single top level item. While the \c id is optional, + the top level item is not; you cannot define an empty component. + The Component element is commonly used to provide graphical components for views. For example, the ListView::delegate property requires a Component to specify how each list item is to be displayed. - Component objects can also be dynamically generated using - \l{Qt::createComponent()}{Qt.createComponent()}. + Component objects can also be dynamically created using + \l{QML:Qt::createComponent()}{Qt.createComponent()}. */ /*! -- cgit v0.12 From e19e786ef29654631c186f1ea31f82524d34627c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Thu, 15 Jul 2010 11:20:07 +0200 Subject: Revert BIC change "Build Qt with option -Zc:wchar_t under MSVC" This reverts commit a9c8decc741d8c2b340f38d7a854ef206672ab3e. Postponed for Qt5. Or different makespecs. (cherry picked from commit 73473634b706548d603dafe22c9424a007d1bf3b) --- mkspecs/win32-msvc2005/qmake.conf | 2 +- mkspecs/win32-msvc2008/qmake.conf | 2 +- mkspecs/win32-msvc2010/qmake.conf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf index a5999cc..0406fd0 100644 --- a/mkspecs/win32-msvc2005/qmake.conf +++ b/mkspecs/win32-msvc2005/qmake.conf @@ -16,7 +16,7 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t +QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t- QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = -O2 -MD diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf index 1aab8e1..9805e90 100644 --- a/mkspecs/win32-msvc2008/qmake.conf +++ b/mkspecs/win32-msvc2008/qmake.conf @@ -16,7 +16,7 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t +QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t- QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = -O2 -MD diff --git a/mkspecs/win32-msvc2010/qmake.conf b/mkspecs/win32-msvc2010/qmake.conf index 34a7782..28d4d3c 100644 --- a/mkspecs/win32-msvc2010/qmake.conf +++ b/mkspecs/win32-msvc2010/qmake.conf @@ -16,7 +16,7 @@ QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t +QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t- QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 QMAKE_CFLAGS_RELEASE = -O2 -MD -- cgit v0.12 From 53e22aea5d2424cbd34f961c4e42364ee2aed4c5 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Thu, 29 Jul 2010 11:18:36 +1000 Subject: Uncomment code accidentally removed with 1937adaab5861ced44813c6a4b0bff1c3750ecd3 QTBUG-3620 (cherry picked from commit 63ac81df760f9b563ced098386cd4bb24439beb3) --- demos/declarative/snake/content/Link.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/demos/declarative/snake/content/Link.qml b/demos/declarative/snake/content/Link.qml index f4d7165..9aa6006 100644 --- a/demos/declarative/snake/content/Link.qml +++ b/demos/declarative/snake/content/Link.qml @@ -73,14 +73,12 @@ Item { id:link } } - /* transform: Rotation { id: actualImageRotation origin.x: width/2; origin.y: height/2; angle: rotation * 90 Behavior on angle { NumberAnimation { duration: spawned ? 200 : 0} } } - */ } Image { -- cgit v0.12 From 9710c075226aa441f108866521d095c740f2d298 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Thu, 29 Jul 2010 16:20:48 +1000 Subject: Improve utility of QMLViewer Adds a startup animation for all platforms, and adds support for file associated and drag and drop on Mac OS X QTBUG-12496 (cherry picked from commit 688791b4d39ed4e96c43621e28c6bb3098d3b70c) --- tools/qml/Info_mac.plist | 31 +++ tools/qml/browser/Browser.qml | 284 ++++++++++++++++++++ tools/qml/browser/browser.qrc | 9 + tools/qml/browser/images/folder.png | Bin 0 -> 1841 bytes tools/qml/browser/images/titlebar.png | Bin 0 -> 1436 bytes tools/qml/browser/images/titlebar.sci | 5 + tools/qml/browser/images/up.png | Bin 0 -> 662 bytes tools/qml/content/Browser.qml | 284 -------------------- tools/qml/content/images/folder.png | Bin 1841 -> 0 bytes tools/qml/content/images/titlebar.png | Bin 1436 -> 0 bytes tools/qml/content/images/titlebar.sci | 5 - tools/qml/content/images/up.png | Bin 662 -> 0 bytes tools/qml/main.cpp | 476 +++++++++++++++++++++------------- tools/qml/qml.pri | 4 +- tools/qml/qmlruntime.cpp | 62 ++++- tools/qml/qmlruntime.h | 1 + tools/qml/qmlruntime.qrc | 9 - tools/qml/startup/Logo.qml | 138 ++++++++++ tools/qml/startup/qt-back.png | Bin 0 -> 3549 bytes tools/qml/startup/qt-blue.jpg | Bin 0 -> 20900 bytes tools/qml/startup/qt-front.png | Bin 0 -> 3318 bytes tools/qml/startup/qt-sketch.jpg | Bin 0 -> 17048 bytes tools/qml/startup/qt-text.png | Bin 0 -> 14565 bytes tools/qml/startup/quick-blur.png | Bin 0 -> 2826 bytes tools/qml/startup/quick-regular.png | Bin 0 -> 1399 bytes tools/qml/startup/shadow.png | Bin 0 -> 1592 bytes tools/qml/startup/startup.qml | 126 +++++++++ tools/qml/startup/startup.qrc | 16 ++ tools/qml/startup/white-star.png | Bin 0 -> 2651 bytes 29 files changed, 968 insertions(+), 482 deletions(-) create mode 100644 tools/qml/browser/Browser.qml create mode 100644 tools/qml/browser/browser.qrc create mode 100644 tools/qml/browser/images/folder.png create mode 100644 tools/qml/browser/images/titlebar.png create mode 100644 tools/qml/browser/images/titlebar.sci create mode 100644 tools/qml/browser/images/up.png delete mode 100644 tools/qml/content/Browser.qml delete mode 100644 tools/qml/content/images/folder.png delete mode 100644 tools/qml/content/images/titlebar.png delete mode 100644 tools/qml/content/images/titlebar.sci delete mode 100644 tools/qml/content/images/up.png delete mode 100644 tools/qml/qmlruntime.qrc create mode 100644 tools/qml/startup/Logo.qml create mode 100644 tools/qml/startup/qt-back.png create mode 100644 tools/qml/startup/qt-blue.jpg create mode 100644 tools/qml/startup/qt-front.png create mode 100644 tools/qml/startup/qt-sketch.jpg create mode 100644 tools/qml/startup/qt-text.png create mode 100644 tools/qml/startup/quick-blur.png create mode 100644 tools/qml/startup/quick-regular.png create mode 100644 tools/qml/startup/shadow.png create mode 100644 tools/qml/startup/startup.qml create mode 100644 tools/qml/startup/startup.qrc create mode 100644 tools/qml/startup/white-star.png diff --git a/tools/qml/Info_mac.plist b/tools/qml/Info_mac.plist index 80ca6a3..0877547 100644 --- a/tools/qml/Info_mac.plist +++ b/tools/qml/Info_mac.plist @@ -14,5 +14,36 @@ <string>@TYPEINFO@</string> <key>CFBundleExecutable</key> <string>@EXECUTABLE@</string> + <key>UTExportedTypeDeclarations</key> + <array> + <dict> + <key>UTTypeIdentifier</key> + <string>com.nokia.qt.qml</string> + <key>UTTypeDescription</key> + <string>Qt Markup Language</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.plain-text</string> + </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>qml</string> + </array> + </dict> + </dict> + </array> + <key>CFBundleDocumentTypes</key> + <array> + <dict> + <key>LSItemContentTypes</key> + <array> + <string>com.nokia.qt.qml</string> + </array> + <key>CFBundleTypeRole</key> + <string>Viewer</string> + </dict> + </array> </dict> </plist> diff --git a/tools/qml/browser/Browser.qml b/tools/qml/browser/Browser.qml new file mode 100644 index 0000000..ff2bb47 --- /dev/null +++ b/tools/qml/browser/Browser.qml @@ -0,0 +1,284 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +import Qt.labs.folderlistmodel 1.0 + +Rectangle { + id: root + property bool keyPressed: false + property variant folders: folders1 + property variant view: view1 + width: 320 + height: 480 + color: palette.window + + FolderListModel { + id: folders1 + nameFilters: [ "*.qml" ] + folder: qmlViewerFolder + } + FolderListModel { + id: folders2 + nameFilters: [ "*.qml" ] + folder: qmlViewerFolder + } + + SystemPalette { id: palette } + + function down(path) { + if (folders == folders1) { + view = view2 + folders = folders2; + view1.state = "exitLeft"; + } else { + view = view1 + folders = folders1; + view2.state = "exitLeft"; + } + view.x = root.width; + view.state = "current"; + view.focus = true; + folders.folder = path; + } + function up() { + var path = folders.parentFolder; + if (folders == folders1) { + view = view2 + folders = folders2; + view1.state = "exitRight"; + } else { + view = view1 + folders = folders1; + view2.state = "exitRight"; + } + view.x = -root.width; + view.state = "current"; + view.focus = true; + folders.folder = path; + } + + Component { + id: folderDelegate + Rectangle { + id: wrapper + function launch() { + if (folders.isFolder(index)) { + down(filePath); + } else { + qmlViewer.launch(filePath); + } + } + width: root.width + height: 52 + color: "transparent" + Rectangle { + id: highlight; visible: false + anchors.fill: parent + gradient: Gradient { + GradientStop { id: t1; position: 0.0; color: palette.highlight } + GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) } + } + } + Item { + width: 48; height: 48 + Image { source: "images/folder.png"; anchors.centerIn: parent; visible: folders.isFolder(index)} + } + Text { + id: nameText + anchors.fill: parent; verticalAlignment: Text.AlignVCenter + text: fileName + anchors.leftMargin: 54 + font.pixelSize: 32 + color: (wrapper.ListView.isCurrentItem && root.keyPressed) ? palette.highlightedText : palette.windowText + elide: Text.ElideRight + } + MouseArea { + id: mouseRegion + anchors.fill: parent + onClicked: { if (folders == wrapper.ListView.view.model) launch() } + } + states: [ + State { + name: "pressed" + when: mouseRegion.pressed + PropertyChanges { target: highlight; visible: true } + PropertyChanges { target: nameText; color: palette.highlightedText } + } + ] + } + } + + ListView { + id: view1 + anchors.top: titleBar.bottom + anchors.bottom: parent.bottom + x: 0 + width: parent.width + model: folders1 + delegate: folderDelegate + highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view1.count != 0 } + highlightMoveSpeed: 1000 + pressDelay: 100 + focus: true + state: "current" + states: [ + State { + name: "current" + PropertyChanges { target: view1; x: 0 } + }, + State { + name: "exitLeft" + PropertyChanges { target: view1; x: -root.width } + }, + State { + name: "exitRight" + PropertyChanges { target: view1; x: root.width } + } + ] + transitions: [ + Transition { + to: "current" + SequentialAnimation { + NumberAnimation { properties: "x"; duration: 250 } + } + }, + Transition { + NumberAnimation { properties: "x"; duration: 250 } + NumberAnimation { properties: "x"; duration: 250 } + } + ] + Keys.onPressed: { root.keyPressed = true; } + } + + ListView { + id: view2 + anchors.top: titleBar.bottom + anchors.bottom: parent.bottom + x: parent.width + width: parent.width + model: folders2 + delegate: folderDelegate + highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view2.count != 0 } + highlightMoveSpeed: 1000 + pressDelay: 100 + states: [ + State { + name: "current" + PropertyChanges { target: view2; x: 0 } + }, + State { + name: "exitLeft" + PropertyChanges { target: view2; x: -root.width } + }, + State { + name: "exitRight" + PropertyChanges { target: view2; x: root.width } + } + ] + transitions: [ + Transition { + to: "current" + SequentialAnimation { + NumberAnimation { properties: "x"; duration: 250 } + } + }, + Transition { + NumberAnimation { properties: "x"; duration: 250 } + } + ] + Keys.onPressed: { root.keyPressed = true; } + } + + Keys.onPressed: { + root.keyPressed = true; + if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) { + view.currentItem.launch(); + event.accepted = true; + } else if (event.key == Qt.Key_Left) { + up(); + } + } + + BorderImage { + source: "images/titlebar.sci"; + width: parent.width; + height: 52 + y: -7 + id: titleBar + + Rectangle { + id: upButton + width: 48 + height: titleBar.height - 7 + color: "transparent" + + Image { anchors.centerIn: parent; source: "images/up.png" } + MouseArea { id: upRegion; anchors.centerIn: parent + width: 56 + height: 56 + onClicked: if (folders.parentFolder != "") up() + } + states: [ + State { + name: "pressed" + when: upRegion.pressed + PropertyChanges { target: upButton; color: palette.highlight } + } + ] + } + Rectangle { + color: "gray" + x: 48 + width: 1 + height: 44 + } + + Text { + anchors.left: upButton.right; anchors.right: parent.right; height: parent.height + anchors.leftMargin: 4; anchors.rightMargin: 4 + text: folders.folder + color: "white" + elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter + font.pixelSize: 32 + } + } +} diff --git a/tools/qml/browser/browser.qrc b/tools/qml/browser/browser.qrc new file mode 100644 index 0000000..9c688e7 --- /dev/null +++ b/tools/qml/browser/browser.qrc @@ -0,0 +1,9 @@ +<RCC> + <qresource prefix="/browser"> + <file>Browser.qml</file> + <file>images/up.png</file> + <file>images/folder.png</file> + <file>images/titlebar.sci</file> + <file>images/titlebar.png</file> + </qresource> +</RCC> diff --git a/tools/qml/browser/images/folder.png b/tools/qml/browser/images/folder.png new file mode 100644 index 0000000..e53e2ad Binary files /dev/null and b/tools/qml/browser/images/folder.png differ diff --git a/tools/qml/browser/images/titlebar.png b/tools/qml/browser/images/titlebar.png new file mode 100644 index 0000000..51c9008 Binary files /dev/null and b/tools/qml/browser/images/titlebar.png differ diff --git a/tools/qml/browser/images/titlebar.sci b/tools/qml/browser/images/titlebar.sci new file mode 100644 index 0000000..0418d94 --- /dev/null +++ b/tools/qml/browser/images/titlebar.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 12 +border.bottom: 12 +border.right: 10 +source: titlebar.png diff --git a/tools/qml/browser/images/up.png b/tools/qml/browser/images/up.png new file mode 100644 index 0000000..b05f802 Binary files /dev/null and b/tools/qml/browser/images/up.png differ diff --git a/tools/qml/content/Browser.qml b/tools/qml/content/Browser.qml deleted file mode 100644 index ff2bb47..0000000 --- a/tools/qml/content/Browser.qml +++ /dev/null @@ -1,284 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import Qt 4.7 -import Qt.labs.folderlistmodel 1.0 - -Rectangle { - id: root - property bool keyPressed: false - property variant folders: folders1 - property variant view: view1 - width: 320 - height: 480 - color: palette.window - - FolderListModel { - id: folders1 - nameFilters: [ "*.qml" ] - folder: qmlViewerFolder - } - FolderListModel { - id: folders2 - nameFilters: [ "*.qml" ] - folder: qmlViewerFolder - } - - SystemPalette { id: palette } - - function down(path) { - if (folders == folders1) { - view = view2 - folders = folders2; - view1.state = "exitLeft"; - } else { - view = view1 - folders = folders1; - view2.state = "exitLeft"; - } - view.x = root.width; - view.state = "current"; - view.focus = true; - folders.folder = path; - } - function up() { - var path = folders.parentFolder; - if (folders == folders1) { - view = view2 - folders = folders2; - view1.state = "exitRight"; - } else { - view = view1 - folders = folders1; - view2.state = "exitRight"; - } - view.x = -root.width; - view.state = "current"; - view.focus = true; - folders.folder = path; - } - - Component { - id: folderDelegate - Rectangle { - id: wrapper - function launch() { - if (folders.isFolder(index)) { - down(filePath); - } else { - qmlViewer.launch(filePath); - } - } - width: root.width - height: 52 - color: "transparent" - Rectangle { - id: highlight; visible: false - anchors.fill: parent - gradient: Gradient { - GradientStop { id: t1; position: 0.0; color: palette.highlight } - GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) } - } - } - Item { - width: 48; height: 48 - Image { source: "images/folder.png"; anchors.centerIn: parent; visible: folders.isFolder(index)} - } - Text { - id: nameText - anchors.fill: parent; verticalAlignment: Text.AlignVCenter - text: fileName - anchors.leftMargin: 54 - font.pixelSize: 32 - color: (wrapper.ListView.isCurrentItem && root.keyPressed) ? palette.highlightedText : palette.windowText - elide: Text.ElideRight - } - MouseArea { - id: mouseRegion - anchors.fill: parent - onClicked: { if (folders == wrapper.ListView.view.model) launch() } - } - states: [ - State { - name: "pressed" - when: mouseRegion.pressed - PropertyChanges { target: highlight; visible: true } - PropertyChanges { target: nameText; color: palette.highlightedText } - } - ] - } - } - - ListView { - id: view1 - anchors.top: titleBar.bottom - anchors.bottom: parent.bottom - x: 0 - width: parent.width - model: folders1 - delegate: folderDelegate - highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view1.count != 0 } - highlightMoveSpeed: 1000 - pressDelay: 100 - focus: true - state: "current" - states: [ - State { - name: "current" - PropertyChanges { target: view1; x: 0 } - }, - State { - name: "exitLeft" - PropertyChanges { target: view1; x: -root.width } - }, - State { - name: "exitRight" - PropertyChanges { target: view1; x: root.width } - } - ] - transitions: [ - Transition { - to: "current" - SequentialAnimation { - NumberAnimation { properties: "x"; duration: 250 } - } - }, - Transition { - NumberAnimation { properties: "x"; duration: 250 } - NumberAnimation { properties: "x"; duration: 250 } - } - ] - Keys.onPressed: { root.keyPressed = true; } - } - - ListView { - id: view2 - anchors.top: titleBar.bottom - anchors.bottom: parent.bottom - x: parent.width - width: parent.width - model: folders2 - delegate: folderDelegate - highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view2.count != 0 } - highlightMoveSpeed: 1000 - pressDelay: 100 - states: [ - State { - name: "current" - PropertyChanges { target: view2; x: 0 } - }, - State { - name: "exitLeft" - PropertyChanges { target: view2; x: -root.width } - }, - State { - name: "exitRight" - PropertyChanges { target: view2; x: root.width } - } - ] - transitions: [ - Transition { - to: "current" - SequentialAnimation { - NumberAnimation { properties: "x"; duration: 250 } - } - }, - Transition { - NumberAnimation { properties: "x"; duration: 250 } - } - ] - Keys.onPressed: { root.keyPressed = true; } - } - - Keys.onPressed: { - root.keyPressed = true; - if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) { - view.currentItem.launch(); - event.accepted = true; - } else if (event.key == Qt.Key_Left) { - up(); - } - } - - BorderImage { - source: "images/titlebar.sci"; - width: parent.width; - height: 52 - y: -7 - id: titleBar - - Rectangle { - id: upButton - width: 48 - height: titleBar.height - 7 - color: "transparent" - - Image { anchors.centerIn: parent; source: "images/up.png" } - MouseArea { id: upRegion; anchors.centerIn: parent - width: 56 - height: 56 - onClicked: if (folders.parentFolder != "") up() - } - states: [ - State { - name: "pressed" - when: upRegion.pressed - PropertyChanges { target: upButton; color: palette.highlight } - } - ] - } - Rectangle { - color: "gray" - x: 48 - width: 1 - height: 44 - } - - Text { - anchors.left: upButton.right; anchors.right: parent.right; height: parent.height - anchors.leftMargin: 4; anchors.rightMargin: 4 - text: folders.folder - color: "white" - elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter - font.pixelSize: 32 - } - } -} diff --git a/tools/qml/content/images/folder.png b/tools/qml/content/images/folder.png deleted file mode 100644 index e53e2ad..0000000 Binary files a/tools/qml/content/images/folder.png and /dev/null differ diff --git a/tools/qml/content/images/titlebar.png b/tools/qml/content/images/titlebar.png deleted file mode 100644 index 51c9008..0000000 Binary files a/tools/qml/content/images/titlebar.png and /dev/null differ diff --git a/tools/qml/content/images/titlebar.sci b/tools/qml/content/images/titlebar.sci deleted file mode 100644 index 0418d94..0000000 --- a/tools/qml/content/images/titlebar.sci +++ /dev/null @@ -1,5 +0,0 @@ -border.left: 10 -border.top: 12 -border.bottom: 12 -border.right: 10 -source: titlebar.png diff --git a/tools/qml/content/images/up.png b/tools/qml/content/images/up.png deleted file mode 100644 index b05f802..0000000 Binary files a/tools/qml/content/images/up.png and /dev/null differ diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index 4b1162e..7421b5e 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -56,7 +56,8 @@ QT_USE_NAMESPACE QtMsgHandler systemMsgOutput = 0; - +static QDeclarativeViewer *openFile(const QString &fileName); +static void showViewer(QDeclarativeViewer *viewer); #if defined (Q_OS_SYMBIAN) #include <unistd.h> @@ -117,6 +118,11 @@ void myMessageOutput(QtMsgType type, const char *msg) #endif +static QDeclarativeViewer* globalViewer = 0; + +// The qml file that is shown if the user didn't specify a QML file +QString initialFile = "qrc:/startup/startup.qml"; + void usage() { qWarning("Usage: qmlviewer [options] <filename>"); @@ -175,135 +181,200 @@ void scriptOptsUsage() enum WarningsConfig { ShowWarnings, HideWarnings, DefaultWarnings }; -int main(int argc, char ** argv) +struct ViewerOptions { -#if defined (Q_OS_SYMBIAN) - qInstallMsgHandler(myMessageOutput); -#else - systemMsgOutput = qInstallMsgHandler(myMessageOutput); + ViewerOptions() + : frameless(false), + fps(0.0), + autorecord_from(0), + autorecord_to(0), + dither("none"), + runScript(false), + devkeys(false), + cache(0), + useGL(false), + fullScreen(false), + stayOnTop(false), + maximized(false), + useNativeFileBrowser(true), + experimentalGestures(false), + warningsConfig(DefaultWarnings), + sizeToView(true) + { +#if defined(Q_OS_SYMBIAN) + maximized = true; + useNativeFileBrowser = false; #endif -#if defined (Q_OS_WIN) - // Debugging output is not visible by default on Windows - - // therefore show modal dialog with errors instad. - atexit(showWarnings); +#if defined(Q_WS_MAC) + useGL = true; #endif - -#if defined (Q_WS_X11) || defined (Q_WS_MAC) - //### default to using raster graphics backend for now - bool gsSpecified = false; - for (int i = 0; i < argc; ++i) { - QString arg = argv[i]; - if (arg == "-graphicssystem") { - gsSpecified = true; - break; - } } - if (!gsSpecified) - QApplication::setGraphicsSystem("raster"); -#endif - - QApplication app(argc, argv); - app.setApplicationName("QtQmlViewer"); - app.setOrganizationName("Nokia"); - app.setOrganizationDomain("nokia.com"); - - - - QDeclarativeViewer::registerTypes(); - QDeclarativeTester::registerTypes(); - - bool frameless = false; - QString fileName; - double fps = 0; - int autorecord_from = 0; - int autorecord_to = 0; - QString dither = "none"; + bool frameless; + double fps; + int autorecord_from; + int autorecord_to; + QString dither; QString recordfile; QStringList recordargs; QStringList imports; QStringList plugins; QString script; QString scriptopts; - bool runScript = false; - bool devkeys = false; - int cache = 0; + bool runScript; + bool devkeys; + int cache; QString translationFile; - bool useGL = false; - bool fullScreen = false; - bool stayOnTop = false; - bool maximized = false; - bool useNativeFileBrowser = true; - bool experimentalGestures = false; + bool useGL; + bool fullScreen; + bool stayOnTop; + bool maximized; + bool useNativeFileBrowser; + bool experimentalGestures; - WarningsConfig warningsConfig = DefaultWarnings; - bool sizeToView = true; + WarningsConfig warningsConfig; + bool sizeToView; -#if defined(Q_OS_SYMBIAN) - maximized = true; - useNativeFileBrowser = false; -#endif + QDeclarativeViewer::ScriptOptions scriptOptions; +}; -#if defined(Q_WS_MAC) - useGL = true; -#endif +static ViewerOptions opts; +static QStringList fileNames; - for (int i = 1; i < argc; ++i) { - bool lastArg = (i == argc - 1); - QString arg = argv[i]; +class Application : public QApplication +{ + Q_OBJECT +public: + Application(int &argc, char **&argv) + : QApplication(argc, argv) + {} + +protected: + bool event(QEvent *ev) + { + if (ev->type() != QEvent::FileOpen) + return QApplication::event(ev); + + QFileOpenEvent *fev = static_cast<QFileOpenEvent *>(ev); + + globalViewer->open(fev->file()); + if (!globalViewer->isVisible()) + showViewer(globalViewer); + + return true; + } + +private Q_SLOTS: + void showInitialViewer() + { + QApplication::processEvents(); + + QDeclarativeViewer *viewer = globalViewer; + if (!viewer) + return; + if (viewer->currentFile().isEmpty()) { + if(opts.useNativeFileBrowser) + viewer->open(initialFile); + else + viewer->openFile(); + } + if (!viewer->isVisible()) + showViewer(viewer); + } +}; + +static void parseScriptOptions() +{ + QStringList options = + opts.scriptopts.split(QLatin1Char(','), QString::SkipEmptyParts); + + QDeclarativeViewer::ScriptOptions scriptOptions = 0; + for (int i = 0; i < options.count(); ++i) { + const QString &option = options.at(i); + if (option == QLatin1String("help")) { + scriptOptsUsage(); + } else if (option == QLatin1String("play")) { + scriptOptions |= QDeclarativeViewer::Play; + } else if (option == QLatin1String("record")) { + scriptOptions |= QDeclarativeViewer::Record; + } else if (option == QLatin1String("testimages")) { + scriptOptions |= QDeclarativeViewer::TestImages; + } else if (option == QLatin1String("testerror")) { + scriptOptions |= QDeclarativeViewer::TestErrorProperty; + } else if (option == QLatin1String("exitoncomplete")) { + scriptOptions |= QDeclarativeViewer::ExitOnComplete; + } else if (option == QLatin1String("exitonfailure")) { + scriptOptions |= QDeclarativeViewer::ExitOnFailure; + } else if (option == QLatin1String("saveonexit")) { + scriptOptions |= QDeclarativeViewer::SaveOnExit; + } else if (option == QLatin1String("snapshot")) { + scriptOptions |= QDeclarativeViewer::Snapshot; + } else { + scriptOptsUsage(); + } + } + + opts.scriptOptions = scriptOptions; +} + +static void parseCommandLineOptions(const QStringList &arguments) +{ + for (int i = 1; i < arguments.count(); ++i) { + bool lastArg = (i == arguments.count() - 1); + QString arg = arguments.at(i); if (arg == "-frameless") { - frameless = true; + opts.frameless = true; } else if (arg == "-maximized") { - maximized = true; + opts.maximized = true; } else if (arg == "-fullscreen") { - fullScreen = true; + opts.fullScreen = true; } else if (arg == "-stayontop") { - stayOnTop = true; + opts.stayOnTop = true; } else if (arg == "-netcache") { if (lastArg) usage(); - cache = QString(argv[++i]).toInt(); + opts.cache = arguments.at(++i).toInt(); } else if (arg == "-recordrate") { if (lastArg) usage(); - fps = QString(argv[++i]).toDouble(); + opts.fps = arguments.at(++i).toDouble(); } else if (arg == "-recordfile") { if (lastArg) usage(); - recordfile = QString(argv[++i]); + opts.recordfile = arguments.at(++i); } else if (arg == "-record") { if (lastArg) usage(); - recordargs << QString(argv[++i]); + opts.recordargs << arguments.at(++i); } else if (arg == "-recorddither") { if (lastArg) usage(); - dither = QString(argv[++i]); + opts.dither = arguments.at(++i); } else if (arg == "-autorecord") { if (lastArg) usage(); - QString range = QString(argv[++i]); + QString range = arguments.at(++i); int dash = range.indexOf('-'); if (dash > 0) - autorecord_from = range.left(dash).toInt(); - autorecord_to = range.mid(dash+1).toInt(); + opts.autorecord_from = range.left(dash).toInt(); + opts.autorecord_to = range.mid(dash+1).toInt(); } else if (arg == "-devicekeys") { - devkeys = true; + opts.devkeys = true; } else if (arg == "-dragthreshold") { if (lastArg) usage(); - app.setStartDragDistance(QString(argv[++i]).toInt()); + qApp->setStartDragDistance(arguments.at(++i).toInt()); } else if (arg == QLatin1String("-v") || arg == QLatin1String("-version")) { qWarning("Qt QML Viewer version %s", QT_VERSION_STR); exit(0); } else if (arg == "-translation") { if (lastArg) usage(); - translationFile = argv[++i]; + opts.translationFile = arguments.at(++i); } else if (arg == "-opengl") { - useGL = true; + opts.useGL = true; } else if (arg == "-qmlbrowser") { - useNativeFileBrowser = false; + opts.useNativeFileBrowser = false; } else if (arg == "-warnings") { if (lastArg) usage(); - QString warningsStr = QString(argv[++i]); + QString warningsStr = arguments.at(++i); if (warningsStr == QLatin1String("show")) { - warningsConfig = ShowWarnings; + opts.warningsConfig = ShowWarnings; } else if (warningsStr == QLatin1String("hide")) { - warningsConfig = HideWarnings; + opts.warningsConfig = HideWarnings; } else { usage(); } @@ -316,152 +387,203 @@ int main(int argc, char ** argv) qWarning("Current search path: %s", paths.toLocal8Bit().constData()); exit(0); } - imports << QString(argv[++i]); + opts.imports << arguments.at(++i); } else if (arg == "-P") { if (lastArg) usage(); - plugins << QString(argv[++i]); + opts.plugins << arguments.at(++i); } else if (arg == "-script") { if (lastArg) usage(); - script = QString(argv[++i]); + opts.script = arguments.at(++i); } else if (arg == "-scriptopts") { if (lastArg) usage(); - scriptopts = QString(argv[++i]); + opts.scriptopts = arguments.at(++i); } else if (arg == "-savescript") { if (lastArg) usage(); - script = QString(argv[++i]); - runScript = false; + opts.script = arguments.at(++i); + opts.runScript = false; } else if (arg == "-playscript") { if (lastArg) usage(); - script = QString(argv[++i]); - runScript = true; + opts.script = arguments.at(++i); + opts.runScript = true; } else if (arg == "-sizeviewtorootobject") { - sizeToView = false; + opts.sizeToView = false; } else if (arg == "-sizerootobjecttoview") { - sizeToView = true; + opts.sizeToView = true; } else if (arg == "-experimentalgestures") { - experimentalGestures = true; - } else if (arg[0] != '-') { - fileName = arg; - } else if (1 || arg == "-help") { + opts.experimentalGestures = true; + } else if (!arg.startsWith('-')) { + fileNames.append(arg); + } else if (true || arg == "-help") { usage(); } } - QTranslator qmlTranslator; - if (!translationFile.isEmpty()) { - qmlTranslator.load(translationFile); - app.installTranslator(&qmlTranslator); + if (!opts.scriptopts.isEmpty()) { + + parseScriptOptions(); + + if (opts.script.isEmpty()) + usage(); + + if (!(opts.scriptOptions & QDeclarativeViewer::Record) && !(opts.scriptOptions & QDeclarativeViewer::Play)) + scriptOptsUsage(); + } else if (!opts.script.isEmpty()) { + usage(); } - Qt::WFlags wflags = (frameless ? Qt::FramelessWindowHint : Qt::Widget); - if (stayOnTop) +} + +static QDeclarativeViewer *createViewer() +{ + Qt::WFlags wflags = (opts.frameless ? Qt::FramelessWindowHint : Qt::Widget); + if (opts.stayOnTop) wflags |= Qt::WindowStaysOnTopHint; QDeclarativeViewer *viewer = new QDeclarativeViewer(0, wflags); viewer->setAttribute(Qt::WA_DeleteOnClose, true); - if (!scriptopts.isEmpty()) { - QStringList options = - scriptopts.split(QLatin1Char(','), QString::SkipEmptyParts); - - QDeclarativeViewer::ScriptOptions scriptOptions = 0; - for (int i = 0; i < options.count(); ++i) { - const QString &option = options.at(i); - if (option == QLatin1String("help")) { - scriptOptsUsage(); - } else if (option == QLatin1String("play")) { - scriptOptions |= QDeclarativeViewer::Play; - } else if (option == QLatin1String("record")) { - scriptOptions |= QDeclarativeViewer::Record; - } else if (option == QLatin1String("testimages")) { - scriptOptions |= QDeclarativeViewer::TestImages; - } else if (option == QLatin1String("testerror")) { - scriptOptions |= QDeclarativeViewer::TestErrorProperty; - } else if (option == QLatin1String("exitoncomplete")) { - scriptOptions |= QDeclarativeViewer::ExitOnComplete; - } else if (option == QLatin1String("exitonfailure")) { - scriptOptions |= QDeclarativeViewer::ExitOnFailure; - } else if (option == QLatin1String("saveonexit")) { - scriptOptions |= QDeclarativeViewer::SaveOnExit; - } else if (option == QLatin1String("snapshot")) { - scriptOptions |= QDeclarativeViewer::Snapshot; - } else { - scriptOptsUsage(); - } - } - - if (script.isEmpty()) - usage(); - if (!(scriptOptions & QDeclarativeViewer::Record) && !(scriptOptions & QDeclarativeViewer::Play)) - scriptOptsUsage(); - viewer->setScriptOptions(scriptOptions); - viewer->setScript(script); - } else if (!script.isEmpty()) { - usage(); + if (!opts.scriptopts.isEmpty()) { + viewer->setScriptOptions(opts.scriptOptions); + viewer->setScript(opts.script); } #if !defined(Q_OS_SYMBIAN) logger = viewer->warningsWidget(); - if (warningsConfig == ShowWarnings) { + if (opts.warningsConfig == ShowWarnings) { logger.data()->setDefaultVisibility(LoggerWidget::ShowWarnings); logger.data()->show(); - } else if (warningsConfig == HideWarnings){ + } else if (opts.warningsConfig == HideWarnings){ logger.data()->setDefaultVisibility(LoggerWidget::HideWarnings); } #endif - if (experimentalGestures) + if (opts.experimentalGestures) viewer->enableExperimentalGestures(); - foreach (QString lib, imports) + foreach (QString lib, opts.imports) viewer->addLibraryPath(lib); - foreach (QString plugin, plugins) + foreach (QString plugin, opts.plugins) viewer->addPluginPath(plugin); - viewer->setNetworkCacheSize(cache); - viewer->setRecordFile(recordfile); - viewer->setSizeToView(sizeToView); - if (fps>0) - viewer->setRecordRate(fps); - if (autorecord_to) - viewer->setAutoRecord(autorecord_from,autorecord_to); - if (devkeys) + viewer->setNetworkCacheSize(opts.cache); + viewer->setRecordFile(opts.recordfile); + viewer->setSizeToView(opts.sizeToView); + if (opts.fps > 0) + viewer->setRecordRate(opts.fps); + if (opts.autorecord_to) + viewer->setAutoRecord(opts.autorecord_from, opts.autorecord_to); + if (opts.devkeys) viewer->setDeviceKeys(true); - viewer->setRecordDither(dither); - if (recordargs.count()) - viewer->setRecordArgs(recordargs); + viewer->setRecordDither(opts.dither); + if (opts.recordargs.count()) + viewer->setRecordArgs(opts.recordargs); + + viewer->setUseNativeFileBrowser(opts.useNativeFileBrowser); - viewer->setUseNativeFileBrowser(useNativeFileBrowser); - if (fullScreen && maximized) + return viewer; +} + +void showViewer(QDeclarativeViewer *viewer) +{ + if (opts.fullScreen) + viewer->showFullScreen(); + else if (opts.maximized) + viewer->showMaximized(); + else + viewer->show(); + + viewer->setUseGL(opts.useGL); + viewer->raise(); +} + +QDeclarativeViewer *openFile(const QString &fileName) +{ + QDeclarativeViewer *viewer = globalViewer; + + viewer->open(fileName); + showViewer(viewer); + + return viewer; +} + +int main(int argc, char ** argv) +{ +#if defined (Q_OS_SYMBIAN) + qInstallMsgHandler(myMessageOutput); +#else + systemMsgOutput = qInstallMsgHandler(myMessageOutput); +#endif + +#if defined (Q_OS_WIN) + // Debugging output is not visible by default on Windows - + // therefore show modal dialog with errors instad. + atexit(showWarnings); +#endif + +#if defined (Q_WS_X11) || defined (Q_WS_MAC) + //### default to using raster graphics backend for now + bool gsSpecified = false; + for (int i = 0; i < argc; ++i) { + QString arg = argv[i]; + if (arg == "-graphicssystem") { + gsSpecified = true; + break; + } + } + + if (!gsSpecified) + QApplication::setGraphicsSystem("raster"); +#endif + + Application app(argc, argv); + app.setApplicationName("QtQmlViewer"); + app.setOrganizationName("Nokia"); + app.setOrganizationDomain("nokia.com"); + + QDeclarativeViewer::registerTypes(); + QDeclarativeTester::registerTypes(); + + parseCommandLineOptions(app.arguments()); + + QTranslator qmlTranslator; + if (!opts.translationFile.isEmpty()) { + qmlTranslator.load(opts.translationFile); + app.installTranslator(&qmlTranslator); + } + + if (opts.fullScreen && opts.maximized) qWarning() << "Both -fullscreen and -maximized specified. Using -fullscreen."; - if (fileName.isEmpty()) { + if (fileNames.isEmpty()) { QFile qmlapp(QLatin1String("qmlapp")); if (qmlapp.exists() && qmlapp.open(QFile::ReadOnly)) { - QString content = QString::fromUtf8(qmlapp.readAll()); - qmlapp.close(); - - int newline = content.indexOf(QLatin1Char('\n')); - if (newline >= 0) - fileName = content.left(newline); - else - fileName = content; - } + QString content = QString::fromUtf8(qmlapp.readAll()); + qmlapp.close(); + + int newline = content.indexOf(QLatin1Char('\n')); + if (newline >= 0) + fileNames += content.left(newline); + else + fileNames += content; + } } - if (!fileName.isEmpty()) { - viewer->open(fileName); - fullScreen ? viewer->showFullScreen() : maximized ? viewer->showMaximized() : viewer->show(); + globalViewer = createViewer(); + + if (fileNames.isEmpty()) { + // show the initial viewer delayed. + // This prevents an initial viewer popping up while there + // are FileOpen events coming through the event queue + QTimer::singleShot(1, &app, SLOT(showInitialViewer())); } else { - if (!useNativeFileBrowser) - viewer->openFile(); - fullScreen ? viewer->showFullScreen() : maximized ? viewer->showMaximized() : viewer->show(); - if (useNativeFileBrowser) - viewer->openFile(); + foreach (const QString &fileName, fileNames) + openFile(fileName); } - viewer->setUseGL(useGL); - viewer->raise(); + + QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); return app.exec(); } + +#include "main.moc" diff --git a/tools/qml/qml.pri b/tools/qml/qml.pri index 80afb45..e5b2c7f 100644 --- a/tools/qml/qml.pri +++ b/tools/qml/qml.pri @@ -16,7 +16,9 @@ SOURCES += $$PWD/qmlruntime.cpp \ $$PWD/qdeclarativetester.cpp \ $$PWD/loggerwidget.cpp -RESOURCES = $$PWD/qmlruntime.qrc +RESOURCES = $$PWD/browser/browser.qrc \ + $$PWD/startup/startup.qrc + symbian:!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { SOURCES += $$PWD/deviceorientation_symbian.cpp FORMS = $$PWD/recopts.ui \ diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index 951b187..08a578c 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -102,6 +102,49 @@ QT_BEGIN_NAMESPACE +class DragAndDropView : public QDeclarativeView +{ + Q_OBJECT +public: + DragAndDropView(QDeclarativeViewer *parent = 0) + : QDeclarativeView(parent) + { + setAcceptDrops(true); + } + + void dragEnterEvent(QDragEnterEvent *event) + { + const QMimeData *mimeData = event->mimeData(); + if (mimeData->hasUrls()) + event->acceptProposedAction(); + } + + void dragMoveEvent(QDragMoveEvent *event) + { + event->acceptProposedAction(); + } + + void dragLeaveEvent(QDragLeaveEvent *event) + { + event->accept(); + } + + void dropEvent(QDropEvent *event) + { + const QMimeData *mimeData = event->mimeData(); + if (!mimeData->hasUrls()) + return; + const QList<QUrl> urlList = mimeData->urls(); + foreach (const QUrl &url, urlList) { + if (url.scheme() == QLatin1String("file")) { + static_cast<QDeclarativeViewer *>(parent())->open(url.toLocalFile()); + event->accept(); + return; + } + } + } +}; + class Runtime : public QObject { Q_OBJECT @@ -596,7 +639,7 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags) recdlg->warning->hide(); } - canvas = new QDeclarativeView(this); + canvas = new DragAndDropView(this); canvas->setAttribute(Qt::WA_OpaquePaintEvent); canvas->setAttribute(Qt::WA_NoSystemBackground); @@ -605,7 +648,7 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags) QObject::connect(canvas, SIGNAL(sceneResized(QSize)), this, SLOT(sceneResized(QSize))); QObject::connect(canvas, SIGNAL(statusChanged(QDeclarativeView::Status)), this, SLOT(statusChanged())); - QObject::connect(canvas->engine(), SIGNAL(quit()), QCoreApplication::instance (), SLOT(quit())); + QObject::connect(canvas->engine(), SIGNAL(quit()), this, SLOT(close())); QObject::connect(warningsWidget(), SIGNAL(opened()), this, SLOT(warningsWidgetOpened())); QObject::connect(warningsWidget(), SIGNAL(closed()), this, SLOT(warningsWidgetClosed())); @@ -664,11 +707,11 @@ LoggerWidget *QDeclarativeViewer::warningsWidget() const void QDeclarativeViewer::createMenu() { QAction *openAction = new QAction(tr("&Open..."), this); - openAction->setShortcut(QKeySequence("Ctrl+O")); + openAction->setShortcuts(QKeySequence::Open); connect(openAction, SIGNAL(triggered()), this, SLOT(openFile())); QAction *reloadAction = new QAction(tr("&Reload"), this); - reloadAction->setShortcut(QKeySequence("Ctrl+R")); + reloadAction->setShortcuts(QKeySequence::Refresh); connect(reloadAction, SIGNAL(triggered()), this, SLOT(reload())); QAction *snapshotAction = new QAction(tr("&Take Snapshot"), this); @@ -717,10 +760,16 @@ void QDeclarativeViewer::createMenu() landscapeInvAction->setCheckable(true); QAction *aboutAction = new QAction(tr("&About Qt..."), this); + aboutAction->setMenuRole(QAction::AboutQtRole); connect(aboutAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + QAction *closeAction = new QAction(tr("&Close"), this); + closeAction->setShortcuts(QKeySequence::Close); + connect(closeAction, SIGNAL(triggered()), this, SLOT(close())); + QAction *quitAction = new QAction(tr("&Quit"), this); - quitAction->setShortcut(QKeySequence("Ctrl+Q")); + quitAction->setMenuRole(QAction::QuitRole); + quitAction->setShortcuts(QKeySequence::Quit); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); QMenuBar *menu = menuBar(); @@ -751,6 +800,7 @@ void QDeclarativeViewer::createMenu() fileMenu->addAction(openAction); fileMenu->addAction(reloadAction); fileMenu->addSeparator(); + fileMenu->addAction(closeAction); fileMenu->addAction(quitAction); #if !defined(Q_OS_SYMBIAN) @@ -927,7 +977,7 @@ void QDeclarativeViewer::openFile() { QString cur = canvas->source().toLocalFile(); if (useQmlFileBrowser) { - open("qrc:/content/Browser.qml"); + open("qrc:/browser/Browser.qml"); } else { QString fileName = QFileDialog::getOpenFileName(this, tr("Open QML file"), cur, tr("QML Files (*.qml)")); if (!fileName.isEmpty()) { diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index 68d3452..7385b14 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -105,6 +105,7 @@ public: QDeclarativeView *view() const; LoggerWidget *warningsWidget() const; + QString currentFile() const { return currentFileOrUrl; } void enableExperimentalGestures(); diff --git a/tools/qml/qmlruntime.qrc b/tools/qml/qmlruntime.qrc deleted file mode 100644 index 3a9e608..0000000 --- a/tools/qml/qmlruntime.qrc +++ /dev/null @@ -1,9 +0,0 @@ -<RCC> - <qresource prefix="/" > - <file>content/Browser.qml</file> - <file>content/images/up.png</file> - <file>content/images/folder.png</file> - <file>content/images/titlebar.sci</file> - <file>content/images/titlebar.png</file> - </qresource> -</RCC> diff --git a/tools/qml/startup/Logo.qml b/tools/qml/startup/Logo.qml new file mode 100644 index 0000000..9252223 --- /dev/null +++ b/tools/qml/startup/Logo.qml @@ -0,0 +1,138 @@ +import Qt 4.7 + +Rectangle { + id: myApp + width: 411 + height: 411 + color: "transparent" + property alias logoState : myApp.state + signal animationFinished + + Item { + id: sketchBlueHolder + width: sketchLogo.width + height: sketchLogo.height + Image { + id: image1 + x: -44 + y: -45 + smooth: true + source: "shadow.png" + } + Item { + clip: true + width: sketchLogo.width + height: sketchLogo.height + Image { + id: sketchLogo + smooth: true + source: "qt-sketch.jpg" + } + Image { + id: blueLogo + y: -420 + smooth: true + source: "qt-blue.jpg" + } + } + } + + states: [ + State { + name: "showBlueprint" + PropertyChanges { + target: blueLogo + y: 0 + } + PropertyChanges { + target: sketchLogo + opacity: 0 + } + }, + State { + extend: "showBlueprint" + name: "finale" + PropertyChanges { + target: fullLogo + opacity: 1 + } + PropertyChanges { + target: backLogo + opacity: 1 + scale: 1 + } + PropertyChanges { + target: frontLogo + opacity: 1 + scale: 1 + } + PropertyChanges { + target: qtText + opacity: 1 + scale: 1 + } + PropertyChanges { + target: sketchBlueHolder + opacity: 0 + scale: 1.4 + } + } + ] + + transitions: [ + Transition { + to: "showBlueprint" + SequentialAnimation { + NumberAnimation { property: "y"; duration: 600; easing.type: "OutBounce" } + PropertyAction { target: sketchLogo; property: "opacity" } + } + }, + Transition { + to: "finale" + PropertyAction { target: fullLogo; property: "opacity" } + SequentialAnimation { + NumberAnimation { target: backLogo; properties: "scale, opacity"; duration: 300 } + NumberAnimation { target: frontLogo; properties: "scale, opacity"; duration: 300 } + ParallelAnimation { + NumberAnimation { target: qtText; properties: "opacity, scale"; duration: 400; easing.type: "OutQuad" } + NumberAnimation { target: sketchBlueHolder; property: "opacity"; duration: 300; easing.type: "OutQuad" } + NumberAnimation { target: sketchBlueHolder; property: "scale"; duration: 320; easing.type: "OutQuad" } + } + PauseAnimation { duration: 1000 } + ScriptAction { script: myApp.animationFinished() } + } + } + ] + + Item { + id: fullLogo + opacity: 0 + Image { + id: backLogo + x: -16 + y: -41 + opacity: 0 + scale: 0.7 + smooth: true + source: "qt-back.png" + } + Image { + id: frontLogo + x: -17 + y: -41 + opacity: 0 + scale: 1.2 + smooth: true + source: "qt-front.png" + } + Image { + id: qtText + x: -10 + y: -41 + opacity: 0 + scale: 1.2 + smooth: true + source: "qt-text.png" + } + } +} diff --git a/tools/qml/startup/qt-back.png b/tools/qml/startup/qt-back.png new file mode 100644 index 0000000..077215f Binary files /dev/null and b/tools/qml/startup/qt-back.png differ diff --git a/tools/qml/startup/qt-blue.jpg b/tools/qml/startup/qt-blue.jpg new file mode 100644 index 0000000..b204896 Binary files /dev/null and b/tools/qml/startup/qt-blue.jpg differ diff --git a/tools/qml/startup/qt-front.png b/tools/qml/startup/qt-front.png new file mode 100644 index 0000000..dbfb43e Binary files /dev/null and b/tools/qml/startup/qt-front.png differ diff --git a/tools/qml/startup/qt-sketch.jpg b/tools/qml/startup/qt-sketch.jpg new file mode 100644 index 0000000..1ede6f0 Binary files /dev/null and b/tools/qml/startup/qt-sketch.jpg differ diff --git a/tools/qml/startup/qt-text.png b/tools/qml/startup/qt-text.png new file mode 100644 index 0000000..d44995c Binary files /dev/null and b/tools/qml/startup/qt-text.png differ diff --git a/tools/qml/startup/quick-blur.png b/tools/qml/startup/quick-blur.png new file mode 100644 index 0000000..29ec243 Binary files /dev/null and b/tools/qml/startup/quick-blur.png differ diff --git a/tools/qml/startup/quick-regular.png b/tools/qml/startup/quick-regular.png new file mode 100644 index 0000000..38321cb Binary files /dev/null and b/tools/qml/startup/quick-regular.png differ diff --git a/tools/qml/startup/shadow.png b/tools/qml/startup/shadow.png new file mode 100644 index 0000000..44f92fe Binary files /dev/null and b/tools/qml/startup/shadow.png differ diff --git a/tools/qml/startup/startup.qml b/tools/qml/startup/startup.qml new file mode 100644 index 0000000..6792150 --- /dev/null +++ b/tools/qml/startup/startup.qml @@ -0,0 +1,126 @@ +import Qt 4.7 + +Rectangle { + id: treatsApp + width: 800 + height: 480 + color: "darkgrey" + Component.onCompleted: treatsApp.state = "part1" + signal animationFinished + + Logo { + id: logo + x: 165 + y: 35 + rotation: -15 + scale: 0.6 + opacity: 0 + onAnimationFinished: treatsApp.animationFinished(); + } + + states: [ + State { + name: "part1" + PropertyChanges { + target: logo + scale: 0.8 + opacity: 1 + rotation: 0 + } + PropertyChanges { + target: treatsApp + color: "black" + } + PropertyChanges { + target: logo + y: 10 + } + PropertyChanges { + target: quickblur + x: logo.x + 145 + } + PropertyChanges { + target: blurText + opacity: 0 + } + PropertyChanges { + target: quickregular + opacity: 1 + } + PropertyChanges { + target: star + x: -7 + y: -37 + } + } + ] + + + Item { + id: quickblur + x: 800//325 + y: 344 + Image { + id: blurText + source: "quick-blur.png" + } + Image { + id: quickregular + x: -1 + y: 0 + opacity: 0 + source: "quick-regular.png" + } + Image { + id: star + x: -1 + y: 0 + opacity: 0 + source: "white-star.png" + smooth: true + NumberAnimation on rotation { + from: 0 + to: 360 + loops: NumberAnimation.Infinite + running: true + duration: 2000 + } + } + } + + transitions: [ + Transition { + ParallelAnimation { + NumberAnimation { target: logo; property: "opacity"; duration: 500 } + NumberAnimation { target: logo; property: "scale"; duration: 4000; } + NumberAnimation { target: logo; property: "rotation"; duration: 2000; easing.type: "OutBack"} + ColorAnimation { duration: 3000} + SequentialAnimation { + PauseAnimation { duration: 1000 } + ScriptAction { script: logo.logoState = "showBlueprint" } + PauseAnimation { duration: 800 } + ScriptAction { script: logo.logoState = "finale" } + PauseAnimation { duration: 800 } + ParallelAnimation { + NumberAnimation { target: quickblur; property: "x"; duration: 200;} + SequentialAnimation { + PauseAnimation { duration: 200} + ParallelAnimation { + NumberAnimation { target: blurText; property: "opacity"; duration: 300;} + NumberAnimation { target: quickregular; property: "opacity"; duration: 300;} + } + NumberAnimation { target: star; property: "opacity"; from: 0; to: 1; duration: 500 } + PauseAnimation { duration: 200 } + NumberAnimation { target: star; property: "opacity"; from: 1; to: 0; duration: 500 } + } + SequentialAnimation { + PauseAnimation { duration: 150} + NumberAnimation { target: logo; property: "y"; duration: 300; easing.type: "OutBounce" } + } + } + } + } + } + ] + +} // treatsApp diff --git a/tools/qml/startup/startup.qrc b/tools/qml/startup/startup.qrc new file mode 100644 index 0000000..52e6705 --- /dev/null +++ b/tools/qml/startup/startup.qrc @@ -0,0 +1,16 @@ +<RCC> + <qresource prefix="/startup"> + <file>Logo.qml</file> + <file>qt-back.png</file> + <file>qt-blue.jpg</file> + <file>qt-front.png</file> + <file>qt-sketch.jpg</file> + <file>qt-text.png</file> + <file>quick-blur.png</file> + <file>quick-regular.png</file> + <file>shadow.png</file> + <file>startup.qml</file> + <file>startup.qrc</file> + <file>white-star.png</file> + </qresource> +</RCC> diff --git a/tools/qml/startup/white-star.png b/tools/qml/startup/white-star.png new file mode 100644 index 0000000..f467c94 Binary files /dev/null and b/tools/qml/startup/white-star.png differ -- cgit v0.12 From 8340e96ee951efe9ef876ce134d9cdb6a521446f Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Thu, 29 Jul 2010 14:59:55 +0200 Subject: Fixed spelling mistakes in documented functions, classes, etc. Part of QTBUG-11938 and QTBUG-10801 (cherry picked from commit 5bdb85e3b21bcf624eb1830aa32d027e0c6870fe) --- demos/embedded/desktopservices/contenttab.cpp | 2 +- demos/embedded/desktopservices/desktopwidget.cpp | 2 +- demos/embedded/fluidlauncher/fluidlauncher.cpp | 2 +- demos/embedded/fluidlauncher/pictureflow.cpp | 2 +- demos/embedded/raycasting/raycasting.cpp | 2 +- examples/animation/stickman/lifecycle.cpp | 2 +- .../referenceexamples/adding/main.cpp | 2 +- .../referenceexamples/attached/main.cpp | 2 +- .../referenceexamples/binding/main.cpp | 2 +- .../referenceexamples/coercion/main.cpp | 2 +- .../referenceexamples/default/main.cpp | 2 +- .../referenceexamples/extended/main.cpp | 2 +- .../referenceexamples/grouped/main.cpp | 2 +- .../referenceexamples/properties/main.cpp | 2 +- .../referenceexamples/signal/main.cpp | 2 +- .../referenceexamples/valuesource/main.cpp | 2 +- examples/network/download/main.cpp | 2 +- examples/network/http/httpwindow.cpp | 2 +- examples/network/torrent/torrentclient.cpp | 22 +++++++++++----------- examples/opengl/shared/qtlogo.cpp | 2 +- examples/tools/customcompleter/textedit.cpp | 2 +- examples/xml/htmlinfo/main.cpp | 2 +- src/corelib/concurrent/qtconcurrentexception.cpp | 2 +- src/corelib/global/qglobal.cpp | 6 +++--- src/corelib/io/qtextstream.cpp | 2 +- src/corelib/kernel/qeventdispatcher_symbian.cpp | 2 +- src/corelib/kernel/qmetatype.cpp | 2 +- src/corelib/tools/qbytearray.cpp | 2 +- src/corelib/tools/qsharedpointer.cpp | 2 +- src/corelib/tools/qtextboundaryfinder.cpp | 2 +- src/dbus/qdbusconnection.cpp | 2 +- src/dbus/qdbusserver.cpp | 2 +- src/declarative/debugger/qpacketprotocol.cpp | 2 +- src/declarative/graphicsitems/qdeclarativeitem.cpp | 4 ++-- src/declarative/util/qdeclarativeanimation.cpp | 14 +++++++------- .../util/qdeclarativesmoothedanimation.cpp | 2 +- src/declarative/util/qdeclarativetimeline.cpp | 4 ++-- src/declarative/util/qdeclarativeview.cpp | 4 ++-- src/declarative/util/qlistmodelinterface.cpp | 2 +- src/gui/graphicsview/qgraphicsitem.cpp | 6 +++--- tools/assistant/lib/qhelpsearchengine.cpp | 10 +++++----- tools/porting/src/semantic.cpp | 6 +++--- 42 files changed, 71 insertions(+), 71 deletions(-) diff --git a/demos/embedded/desktopservices/contenttab.cpp b/demos/embedded/desktopservices/contenttab.cpp index fa9c586..8b344ce 100644 --- a/demos/embedded/desktopservices/contenttab.cpp +++ b/demos/embedded/desktopservices/contenttab.cpp @@ -125,7 +125,7 @@ void ContentTab::keyPressEvent(QKeyEvent *event) void ContentTab::handleErrorInOpen(QListWidgetItem *item) { Q_UNUSED(item); - QMessageBox::warning(this, tr("Operation Failed"), tr("Unkown error!"), QMessageBox::Close); + QMessageBox::warning(this, tr("Operation Failed"), tr("Unknown error!"), QMessageBox::Close); } // NEW SLOTS diff --git a/demos/embedded/desktopservices/desktopwidget.cpp b/demos/embedded/desktopservices/desktopwidget.cpp index 39a56a4..ff3cb09 100644 --- a/demos/embedded/desktopservices/desktopwidget.cpp +++ b/demos/embedded/desktopservices/desktopwidget.cpp @@ -73,7 +73,7 @@ DesktopWidget::DesktopWidget(QWidget *parent) : QWidget(parent) // Links LinkTab* othersTab = new LinkTab(tabWidget);; - // Given icon file will be overriden by LinkTab + // Given icon file will be overridden by LinkTab othersTab->init(QDesktopServices::PicturesLocation, "", ""); tabWidget->addTab(othersTab, tr("Links")); diff --git a/demos/embedded/fluidlauncher/fluidlauncher.cpp b/demos/embedded/fluidlauncher/fluidlauncher.cpp index 1fb2376..19eb8d2 100644 --- a/demos/embedded/fluidlauncher/fluidlauncher.cpp +++ b/demos/embedded/fluidlauncher/fluidlauncher.cpp @@ -154,7 +154,7 @@ void FluidLauncher::parseDemos(QXmlStreamReader& reader) DemoApplication* newDemo = new DemoApplication( filename.toString(), - name.isEmpty() ? "Unamed Demo" : name.toString(), + name.isEmpty() ? "Unnamed Demo" : name.toString(), image.toString(), args.toString().split(" ")); demoList.append(newDemo); diff --git a/demos/embedded/fluidlauncher/pictureflow.cpp b/demos/embedded/fluidlauncher/pictureflow.cpp index 8435c8f..d606269 100644 --- a/demos/embedded/fluidlauncher/pictureflow.cpp +++ b/demos/embedded/fluidlauncher/pictureflow.cpp @@ -603,7 +603,7 @@ static QImage prepareSurface(QImage img, int w, int h) Qt::TransformationMode mode = Qt::SmoothTransformation; img = img.scaled(w, h, Qt::IgnoreAspectRatio, mode); - // slightly larger, to accomodate for the reflection + // slightly larger, to accommodate for the reflection int hs = h * 2; int hofs = h / 3; diff --git a/demos/embedded/raycasting/raycasting.cpp b/demos/embedded/raycasting/raycasting.cpp index 75ba147..21aa2c3 100644 --- a/demos/embedded/raycasting/raycasting.cpp +++ b/demos/embedded/raycasting/raycasting.cpp @@ -142,7 +142,7 @@ public: qreal dv = -2 * cosa / bufw; for (int ray = 0; ray < bufw; ++ray, u += du, v += dv) { - // everytime this ray advances 'u' units in x direction, + // every time this ray advances 'u' units in x direction, // it also advanced 'v' units in y direction qreal uu = (u < 0) ? -u : u; qreal vv = (v < 0) ? -v : v; diff --git a/examples/animation/stickman/lifecycle.cpp b/examples/animation/stickman/lifecycle.cpp index 8778046..02cdb71 100644 --- a/examples/animation/stickman/lifecycle.cpp +++ b/examples/animation/stickman/lifecycle.cpp @@ -103,7 +103,7 @@ LifeCycle::LifeCycle(StickMan *stickMan, GraphicsView *keyReceiver) m_animationGroup->addAnimation(pa); } - // Set up intial state graph + // Set up initial state graph //! [3] m_machine = new QStateMachine(); m_machine->addDefaultAnimation(m_animationGroup); diff --git a/examples/declarative/cppextensions/referenceexamples/adding/main.cpp b/examples/declarative/cppextensions/referenceexamples/adding/main.cpp index f429b6e..391113c 100644 --- a/examples/declarative/cppextensions/referenceexamples/adding/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/adding/main.cpp @@ -57,7 +57,7 @@ int main(int argc, char ** argv) qWarning() << "The person's name is" << person->name(); qWarning() << "They wear a" << person->shoeSize() << "sized shoe"; } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return 0; diff --git a/examples/declarative/cppextensions/referenceexamples/attached/main.cpp b/examples/declarative/cppextensions/referenceexamples/attached/main.cpp index 22e844f..5a39a98 100644 --- a/examples/declarative/cppextensions/referenceexamples/attached/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/attached/main.cpp @@ -83,7 +83,7 @@ int main(int argc, char ** argv) } } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return 0; diff --git a/examples/declarative/cppextensions/referenceexamples/binding/main.cpp b/examples/declarative/cppextensions/referenceexamples/binding/main.cpp index 29da994..fe1bbc8 100644 --- a/examples/declarative/cppextensions/referenceexamples/binding/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/binding/main.cpp @@ -85,7 +85,7 @@ int main(int argc, char ** argv) party->startParty(); } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return app.exec(); diff --git a/examples/declarative/cppextensions/referenceexamples/coercion/main.cpp b/examples/declarative/cppextensions/referenceexamples/coercion/main.cpp index 9b32c8b..5c53368 100644 --- a/examples/declarative/cppextensions/referenceexamples/coercion/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/coercion/main.cpp @@ -70,7 +70,7 @@ int main(int argc, char ** argv) for (int ii = 0; ii < party->guestCount(); ++ii) qWarning() << " " << party->guest(ii)->name(); } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return 0; diff --git a/examples/declarative/cppextensions/referenceexamples/default/main.cpp b/examples/declarative/cppextensions/referenceexamples/default/main.cpp index f3a7068..f611bc4 100644 --- a/examples/declarative/cppextensions/referenceexamples/default/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/default/main.cpp @@ -68,7 +68,7 @@ int main(int argc, char ** argv) for (int ii = 0; ii < party->guestCount(); ++ii) qWarning() << " " << party->guest(ii)->name(); } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return 0; diff --git a/examples/declarative/cppextensions/referenceexamples/extended/main.cpp b/examples/declarative/cppextensions/referenceexamples/extended/main.cpp index fb7ce1a..65527c3 100644 --- a/examples/declarative/cppextensions/referenceexamples/extended/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/extended/main.cpp @@ -58,7 +58,7 @@ int main(int argc, char ** argv) edit->show(); return app.exec(); } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; return 0; } } diff --git a/examples/declarative/cppextensions/referenceexamples/grouped/main.cpp b/examples/declarative/cppextensions/referenceexamples/grouped/main.cpp index f2e0f55..e56a14d 100644 --- a/examples/declarative/cppextensions/referenceexamples/grouped/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/grouped/main.cpp @@ -78,7 +78,7 @@ int main(int argc, char ** argv) qWarning() << bestShoe->name() << "is wearing the best shoes!"; } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return 0; diff --git a/examples/declarative/cppextensions/referenceexamples/properties/main.cpp b/examples/declarative/cppextensions/referenceexamples/properties/main.cpp index b5dafe2..80237ef 100644 --- a/examples/declarative/cppextensions/referenceexamples/properties/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/properties/main.cpp @@ -61,7 +61,7 @@ int main(int argc, char ** argv) for (int ii = 0; ii < party->guestCount(); ++ii) qWarning() << " " << party->guest(ii)->name(); } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return 0; diff --git a/examples/declarative/cppextensions/referenceexamples/signal/main.cpp b/examples/declarative/cppextensions/referenceexamples/signal/main.cpp index 6add975..56c0809 100644 --- a/examples/declarative/cppextensions/referenceexamples/signal/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/signal/main.cpp @@ -84,7 +84,7 @@ int main(int argc, char ** argv) party->startParty(); } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return 0; diff --git a/examples/declarative/cppextensions/referenceexamples/valuesource/main.cpp b/examples/declarative/cppextensions/referenceexamples/valuesource/main.cpp index 5752af7..40dc3cb 100644 --- a/examples/declarative/cppextensions/referenceexamples/valuesource/main.cpp +++ b/examples/declarative/cppextensions/referenceexamples/valuesource/main.cpp @@ -86,7 +86,7 @@ int main(int argc, char ** argv) party->startParty(); } else { - qWarning() << "An error occured"; + qWarning() << "An error occurred"; } return app.exec(); diff --git a/examples/network/download/main.cpp b/examples/network/download/main.cpp index c322a44..0fb9137 100644 --- a/examples/network/download/main.cpp +++ b/examples/network/download/main.cpp @@ -150,7 +150,7 @@ void DownloadManager::downloadFinished(QNetworkReply *reply) } else { QString filename = saveFileName(url); if (saveToDisk(filename, reply)) - printf("Download of %s succeded (saved to %s)\n", + printf("Download of %s succeeded (saved to %s)\n", url.toEncoded().constData(), qPrintable(filename)); } diff --git a/examples/network/http/httpwindow.cpp b/examples/network/http/httpwindow.cpp index b1ea98c..ea48546 100644 --- a/examples/network/http/httpwindow.cpp +++ b/examples/network/http/httpwindow.cpp @@ -206,7 +206,7 @@ void HttpWindow::httpFinished() void HttpWindow::httpReadyRead() { - // this slot gets called everytime the QNetworkReply has new data. + // this slot gets called every time the QNetworkReply has new data. // We read all of its new data and write it into the file. // That way we use less RAM than when reading it at the finished() // signal of the QNetworkReply diff --git a/examples/network/torrent/torrentclient.cpp b/examples/network/torrent/torrentclient.cpp index 5e25b9a..b7607a6 100644 --- a/examples/network/torrent/torrentclient.cpp +++ b/examples/network/torrent/torrentclient.cpp @@ -1243,8 +1243,8 @@ void TorrentClient::schedulePieceForClient(PeerWireClient *client) // depending on the state we're in. int pieceIndex = 0; if (d->state == WarmingUp || (qrand() & 4) == 0) { - int *occurrances = new int[d->pieceCount]; - memset(occurrances, 0, d->pieceCount * sizeof(int)); + int *occurrences = new int[d->pieceCount]; + memset(occurrences, 0, d->pieceCount * sizeof(int)); // Count how many of each piece are available. foreach (PeerWireClient *peer, d->connections) { @@ -1252,38 +1252,38 @@ void TorrentClient::schedulePieceForClient(PeerWireClient *client) int peerPiecesSize = peerPieces.size(); for (int i = 0; i < peerPiecesSize; ++i) { if (peerPieces.testBit(i)) - ++occurrances[i]; + ++occurrences[i]; } } // Find the rarest or most common pieces. - int numOccurrances = d->state == WarmingUp ? 0 : 99999; + int numOccurrences = d->state == WarmingUp ? 0 : 99999; QList<int> piecesReadyForDownload; for (int i = 0; i < d->pieceCount; ++i) { if (d->state == WarmingUp) { // Add common pieces - if (occurrances[i] >= numOccurrances + if (occurrences[i] >= numOccurrences && incompletePiecesAvailableToClient.testBit(i)) { - if (occurrances[i] > numOccurrances) + if (occurrences[i] > numOccurrences) piecesReadyForDownload.clear(); piecesReadyForDownload.append(i); - numOccurrances = occurrances[i]; + numOccurrences = occurrences[i]; } } else { // Add rare pieces - if (occurrances[i] <= numOccurrances + if (occurrences[i] <= numOccurrences && incompletePiecesAvailableToClient.testBit(i)) { - if (occurrances[i] < numOccurrances) + if (occurrences[i] < numOccurrences) piecesReadyForDownload.clear(); piecesReadyForDownload.append(i); - numOccurrances = occurrances[i]; + numOccurrences = occurrences[i]; } } } // Select one piece randomly pieceIndex = piecesReadyForDownload.at(qrand() % piecesReadyForDownload.size()); - delete [] occurrances; + delete [] occurrences; } else { // Make up a list of available piece indices, and pick // a random one. diff --git a/examples/opengl/shared/qtlogo.cpp b/examples/opengl/shared/qtlogo.cpp index 0352d29..0165032 100644 --- a/examples/opengl/shared/qtlogo.cpp +++ b/examples/opengl/shared/qtlogo.cpp @@ -327,7 +327,7 @@ RectTorus::RectTorus(Geometry *g, qreal iRad, qreal oRad, qreal depth, int k) QVector<QVector3D> in_back = extrude(inside, depth); QVector<QVector3D> out_back = extrude(outside, depth); - // Create front, back and sides as seperate patches so that smooth normals + // Create front, back and sides as separate patches so that smooth normals // are generated for the curving sides, but a faceted edge is created between // sides and front/back Patch *front = new Patch(g); diff --git a/examples/tools/customcompleter/textedit.cpp b/examples/tools/customcompleter/textedit.cpp index 5467e53..77699e0 100644 --- a/examples/tools/customcompleter/textedit.cpp +++ b/examples/tools/customcompleter/textedit.cpp @@ -141,7 +141,7 @@ void TextEdit::keyPressEvent(QKeyEvent *e) } bool isShortcut = ((e->modifiers() & Qt::ControlModifier) && e->key() == Qt::Key_E); // CTRL+E - if (!c || !isShortcut) // dont process the shortcut when we have a completer + if (!c || !isShortcut) // do not process the shortcut when we have a completer QTextEdit::keyPressEvent(e); //! [7] diff --git a/examples/xml/htmlinfo/main.cpp b/examples/xml/htmlinfo/main.cpp index 066edb6..06fc33d 100644 --- a/examples/xml/htmlinfo/main.cpp +++ b/examples/xml/htmlinfo/main.cpp @@ -94,7 +94,7 @@ void parseHtmlFile(QTextStream &out, const QString &fileName) { int main(int argc, char **argv) { - // intialize QtCore application + // initialize QtCore application QCoreApplication app(argc, argv); // get a list of all html files in the current directory diff --git a/src/corelib/concurrent/qtconcurrentexception.cpp b/src/corelib/concurrent/qtconcurrentexception.cpp index e7f4674..fad04a6 100644 --- a/src/corelib/concurrent/qtconcurrentexception.cpp +++ b/src/corelib/concurrent/qtconcurrentexception.cpp @@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE the Qt Concurrent functions will throw a QtConcurrent::UnhandledException in the receiver thread. - When using QFuture, transferred exceptions willl be thrown when calling the following functions: + When using QFuture, transferred exceptions will be thrown when calling the following functions: \list \o QFuture::waitForFinished() \o QFuture::result() diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index c956b85..861d77d 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -2374,7 +2374,7 @@ void qDebug(const char *msg, ...) This syntax inserts a space between each item, and appends a newline at the end. - To supress the output at runtime, install your own message handler + To suppress the output at runtime, install your own message handler with qInstallMsgHandler(). \sa qDebug(), qCritical(), qFatal(), qInstallMsgHandler(), @@ -2410,7 +2410,7 @@ void qWarning(const char *msg, ...) A space is inserted between the items, and a newline is appended at the end. - To supress the output at runtime, install your own message handler + To suppress the output at runtime, install your own message handler with qInstallMsgHandler(). \sa qDebug(), qWarning(), qFatal(), qInstallMsgHandler(), @@ -2475,7 +2475,7 @@ void qErrnoWarning(int code, const char *msg, ...) Example: \snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 30 - To supress the output at runtime, install your own message handler + To suppress the output at runtime, install your own message handler with qInstallMsgHandler(). \sa qDebug(), qCritical(), qWarning(), qInstallMsgHandler(), diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index b1c403f..eab0662 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -1991,7 +1991,7 @@ bool QTextStreamPrivate::getReal(double *f) return true; buf[i] = '\0'; - // backward-compatibility. Old implmentation supported +nan/-nan + // backward-compatibility. Old implementation supported +nan/-nan // for some reason. QLocale only checks for lower-case // nan/+inf/-inf, so here we also check for uppercase and mixed // case versions. diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 1b0c31b..fb2662f 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -425,7 +425,7 @@ void QSelectThread::run() // ones that return -1 in select // after loop update notifiers for all of them - // as we dont have "exception" notifier type + // as we don't have "exception" notifier type // we should force monitoring fd_set of this // type as well diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 6ebaaa3..fef02cf 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -1415,7 +1415,7 @@ void QMetaType::destroy(int type, void *data) \snippet doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp 4 - This function is usefull to register typedefs so they can be used + This function is useful to register typedefs so they can be used by QMetaProperty, or in QueuedConnections \snippet doc/src/snippets/code/src_corelib_kernel_qmetatype.cpp 9 diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp index b46af1f..9006425 100644 --- a/src/corelib/tools/qbytearray.cpp +++ b/src/corelib/tools/qbytearray.cpp @@ -1809,7 +1809,7 @@ QByteArray &QByteArray::replace(int pos, int len, const QByteArray &after) Replaces \a len bytes from index position \a pos with the zero terminated string \a after. - Notice: this can change the lenght of the byte array. + Notice: this can change the length of the byte array. */ QByteArray &QByteArray::replace(int pos, int len, const char *after) { diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp index 1b4b356..f102598 100644 --- a/src/corelib/tools/qsharedpointer.cpp +++ b/src/corelib/tools/qsharedpointer.cpp @@ -482,7 +482,7 @@ becomes managed by this QSharedPointer and must not be passed to another QSharedPointer object or deleted outside this object. - The \a deleter paramter specifies the custom deleter for this + The \a deleter parameter specifies the custom deleter for this object. The custom deleter is called when the strong reference count drops to 0 instead of the operator delete(). This is useful, for instance, for calling deleteLater() in a QObject instead: diff --git a/src/corelib/tools/qtextboundaryfinder.cpp b/src/corelib/tools/qtextboundaryfinder.cpp index bcddcb2..0428782 100644 --- a/src/corelib/tools/qtextboundaryfinder.cpp +++ b/src/corelib/tools/qtextboundaryfinder.cpp @@ -244,7 +244,7 @@ QTextBoundaryFinder::QTextBoundaryFinder(BoundaryType type, const QString &strin data required, it will use this instead of allocating its own buffer. \warning QTextBoundaryFinder does not create a copy of \a chars. It is the - application programmer's responsability to ensure the array is allocated for + application programmer's responsibility to ensure the array is allocated for as long as the QTextBoundaryFinder object stays alive. The same applies to \a buffer. */ diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index 4382032..5c6659f 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -916,7 +916,7 @@ QString QDBusConnection::name() const /*! Attempts to register the \a serviceName on the D-Bus server and - returns true if the registration succeded. The registration will + returns true if the registration succeeded. The registration will fail if the name is already registered by another application. \sa unregisterService(), QDBusConnectionInterface::registerService() diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp index 2377795..6a4553c 100644 --- a/src/dbus/qdbusserver.cpp +++ b/src/dbus/qdbusserver.cpp @@ -100,7 +100,7 @@ QDBusError QDBusServer::lastError() const } /*! - Returns the address this server is assosiated with. + Returns the address this server is associated with. */ QString QDBusServer::address() const { diff --git a/src/declarative/debugger/qpacketprotocol.cpp b/src/declarative/debugger/qpacketprotocol.cpp index 6241922..878f42f 100644 --- a/src/declarative/debugger/qpacketprotocol.cpp +++ b/src/declarative/debugger/qpacketprotocol.cpp @@ -422,7 +422,7 @@ QPacket::~QPacket() /*! Creates a copy of \a other. The initial stream positions are shared, but the - two packets are otherwise independant. + two packets are otherwise independent. */ QPacket::QPacket(const QPacket & other) : QDataStream(), b(other.b), buf(0) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 83f9b20..c80fc2f 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -423,7 +423,7 @@ void QDeclarativeItemKeyFilter::componentComplete() \brief The KeyNavigation attached property supports key navigation by arrow keys. It is common in key-based UIs to use arrow keys to navigate - between focussed items. The KeyNavigation property provides a + between focused items. The KeyNavigation property provides a convenient way of specifying which item will gain focus when an arrow key is pressed. The following example provides key navigation for a 2x2 grid of items. @@ -2482,7 +2482,7 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi Item { filter: [ Blur { ... }, - Relection { ... } + Reflection { ... } ... ] } diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 1a223d5..bbd6535 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -1929,15 +1929,15 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t) \o \inlineimage qeasingcurve-inquart.png \row \o \c Easing.OutQuart - \o Easing curve for a cubic (t^4) function: decelerating from zero velocity. + \o Easing curve for a quartic (t^4) function: decelerating from zero velocity. \o \inlineimage qeasingcurve-outquart.png \row \o \c Easing.InOutQuart - \o Easing curve for a cubic (t^4) function: acceleration until halfway, then deceleration. + \o Easing curve for a quartic (t^4) function: acceleration until halfway, then deceleration. \o \inlineimage qeasingcurve-inoutquart.png \row \o \c Easing.OutInQuart - \o Easing curve for a cubic (t^4) function: deceleration until halfway, then acceleration. + \o Easing curve for a quartic (t^4) function: deceleration until halfway, then acceleration. \o \inlineimage qeasingcurve-outinquart.png \row \o \c Easing.InQuint @@ -1945,15 +1945,15 @@ void QDeclarativePropertyAnimation::setTo(const QVariant &t) \o \inlineimage qeasingcurve-inquint.png \row \o \c Easing.OutQuint - \o Easing curve for a cubic (t^5) function: decelerating from zero velocity. + \o Easing curve for a quintic (t^5) function: decelerating from zero velocity. \o \inlineimage qeasingcurve-outquint.png \row \o \c Easing.InOutQuint - \o Easing curve for a cubic (t^5) function: acceleration until halfway, then deceleration. + \o Easing curve for a quintic (t^5) function: acceleration until halfway, then deceleration. \o \inlineimage qeasingcurve-inoutquint.png \row \o \c Easing.OutInQuint - \o Easing curve for a cubic (t^5) function: deceleration until halfway, then acceleration. + \o Easing curve for a quintic (t^5) function: deceleration until halfway, then acceleration. \o \inlineimage qeasingcurve-outinquint.png \row \o \c Easing.InSine @@ -2408,7 +2408,7 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions enabled. Such an item can be set using the \l via property. By default, when used in a transition, ParentAnimation animates all parent - changes. This can be overriden by setting a specific target item using the + changes. This can be overridden by setting a specific target item using the \l target property. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index 11c3d4b..727f427 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -375,7 +375,7 @@ void QDeclarativeSmoothedAnimation::transition(QDeclarativeStateActions &actions \list \o SmoothedAnimation.Eased (default) - the animation will smoothly decelerate, and then reverse direction - \o SmoothedAnimation.Immediate - the animation will immediately begin accelerating in the reverse direction, begining with a velocity of 0 + \o SmoothedAnimation.Immediate - the animation will immediately begin accelerating in the reverse direction, beginning with a velocity of 0 \o SmoothedAnimation.Sync - the property is immediately set to the target value \endlist */ diff --git a/src/declarative/util/qdeclarativetimeline.cpp b/src/declarative/util/qdeclarativetimeline.cpp index 0258b3c..378c539 100644 --- a/src/declarative/util/qdeclarativetimeline.cpp +++ b/src/declarative/util/qdeclarativetimeline.cpp @@ -524,7 +524,7 @@ int QDeclarativeTimeLine::duration() const Following operations on \a timeLineValue in this timeline will be scheduled after all the currently scheduled actions on \a syncTo are complete. In - psuedo-code this is equivalent to: + pseudo-code this is equivalent to: \code QDeclarativeTimeLine::pause(timeLineValue, min(0, length_of(syncTo) - length_of(timeLineValue))) \endcode @@ -549,7 +549,7 @@ void QDeclarativeTimeLine::sync(QDeclarativeTimeLineValue &timeLineValue, QDecla Synchronize the end point of \a timeLineValue to the endpoint of the longest action cursrently scheduled in the timeline. - In psuedo-code, this is equivalent to: + In pseudo-code, this is equivalent to: \code QDeclarativeTimeLine::pause(timeLineValue, length_of(timeline) - length_of(timeLineValue)) \endcode diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp index 7546a50..8f06858 100644 --- a/src/declarative/util/qdeclarativeview.cpp +++ b/src/declarative/util/qdeclarativeview.cpp @@ -365,7 +365,7 @@ QDeclarativeContext* QDeclarativeView::rootContext() const \value Null This QDeclarativeView has no source set. \value Ready This QDeclarativeView has loaded and created the QML component. \value Loading This QDeclarativeView is loading network data. - \value Error An error has occured. Call errorDescription() to retrieve a description. + \value Error An error has occurred. Call errorDescription() to retrieve a description. */ /*! \enum QDeclarativeView::ResizeMode @@ -391,7 +391,7 @@ QDeclarativeView::Status QDeclarativeView::status() const } /*! - Return the list of errors that occured during the last compile or create + Return the list of errors that occurred during the last compile or create operation. An empty list is returned if isError() is not set. */ QList<QDeclarativeError> QDeclarativeView::errors() const diff --git a/src/declarative/util/qlistmodelinterface.cpp b/src/declarative/util/qlistmodelinterface.cpp index 98d6a5b..acf4dd6 100644 --- a/src/declarative/util/qlistmodelinterface.cpp +++ b/src/declarative/util/qlistmodelinterface.cpp @@ -71,7 +71,7 @@ QT_BEGIN_NAMESPACE */ /*! \fn QHash<int,QVariant> QListModelInterface::data(int index, const QList<int>& roles) const - Returns the data at the given \a index for the specifed \a roles. + Returns the data at the given \a index for the specified \a roles. */ /*! \fn bool QListModelInterface::setData(int index, const QHash<int,QVariant>& values) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index adccd86..8b46e8c 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -3915,7 +3915,7 @@ void QGraphicsItem::setScale(qreal factor) Returns a list of graphics transforms that currently apply to this item. QGraphicsTransform is for applying and controlling a chain of individual - transformation operations on an item. It's particularily useful in + transformation operations on an item. It's particularly useful in animations, where each transform operation needs to be interpolated independently, or differently. @@ -3942,7 +3942,7 @@ QList<QGraphicsTransform *> QGraphicsItem::transformations() const an item, you can call setTransform(). QGraphicsTransform is for applying and controlling a chain of individual - transformation operations on an item. It's particularily useful in + transformation operations on an item. It's particularly useful in animations, where each transform operation needs to be interpolated independently, or differently. @@ -5136,7 +5136,7 @@ QPainterPath QGraphicsItem::opaqueArea() const The bounding region describes a coarse outline of the item's visual contents. Although it's expensive to calculate, it's also more precise than boundingRect(), and it can help to avoid unnecessary repainting when - an item is updated. This is particularily efficient for thin items (e.g., + an item is updated. This is particularly efficient for thin items (e.g., lines or simple polygons). You can tune the granularity for the bounding region by calling setBoundingRegionGranularity(). The default granularity is 0; in which the item's bounding region is the same as its bounding diff --git a/tools/assistant/lib/qhelpsearchengine.cpp b/tools/assistant/lib/qhelpsearchengine.cpp index 9914efa..164163a 100644 --- a/tools/assistant/lib/qhelpsearchengine.cpp +++ b/tools/assistant/lib/qhelpsearchengine.cpp @@ -263,17 +263,17 @@ private: engines setupFinished() signal to know when it can start to index documentation. After starting the indexing process the signal indexingStarted() is emitted and - on the end of the indexing process the indexingFinished() is emited. To stop + on the end of the indexing process the indexingFinished() is emitted. To stop the indexing one can call cancelIndexing(). While the indexing process has finished, the search engine can now be used to search thru its index for a given term. To do this one may use the possibility of creating the QHelpSearchQuery list by self or reuse the QHelpSearchQueryWidget which has the inbuild - functionality to set up a proper search querys list that get's passed to the search engines + functionality to set up a proper search queries list that get's passed to the search engines search() function. After the list of querys has been passed to the search engine, the signal searchingStarted() - is emited and after the search has finished the searchingFinished() signal is emited. The + is emitted and after the search has finished the searchingFinished() signal is emitted. The search process can be stopped by calling cancelSearching(). If the search succeeds, the searchingFinished() will be called with the search hits count, @@ -318,7 +318,7 @@ private: uses the given \a helpEngine to access the documentation that needs to be indexed. The QHelpEngine's setupFinished() signal is automatically connected to the QHelpSearchEngine's indexing function, so that new documentation will be indexed - after the signal is emited. + after the signal is emitted. */ QHelpSearchEngine::QHelpSearchEngine(QHelpEngineCore *helpEngine, QObject *parent) : QObject(parent) @@ -434,7 +434,7 @@ void QHelpSearchEngine::cancelSearching() } /*! - Starts the search process using the given list of querys \a queryList + Starts the search process using the given list of queries \a queryList build by the search field name and the values to search for. */ void QHelpSearchEngine::search(const QList<QHelpSearchQuery> &queryList) diff --git a/tools/porting/src/semantic.cpp b/tools/porting/src/semantic.cpp index 268e037..cf0b141 100644 --- a/tools/porting/src/semantic.cpp +++ b/tools/porting/src/semantic.cpp @@ -768,7 +768,7 @@ void Semantic::parseTypedef(TypedefAST *ast) void Semantic::parseTypeSpecifier(TypeSpecifierAST *ast) { // If this is a classSpecifier or a EnumSpecifier we skip the name lookup, - // becuase looking up the name "E" in a class definition like + // because looking up the name "E" in a class definition like // "class E { ..." makes no sense. (There might be a variable named E // already declared, but that variable is now shadowed by the class type.) if( ast->nodeType() != NodeType_EnumSpecifier @@ -807,7 +807,7 @@ void Semantic::parseNameUse(NameAST* name) /* looks up name used in basescope. If name->isGlobal() is true or if classOrNamespaceList() - returns a non-emty list, the C++ qualified name lookup rules are used. Otherwise the + returns a non-empty list, the C++ qualified name lookup rules are used. Otherwise the unquialified name lookup rules are used. Returns the a list of members that was found, In most cases this list will contain zero or one element, exept in the case of overloaded functions. TODO: Argument-dependent name lookup @@ -975,7 +975,7 @@ FunctionMember *Semantic::functionLookup(CodeModel::Scope *baseScope, */ FunctionMember *Semantic::selectFunction(QList<CodeModel::Member*> candidatateList, const DeclaratorAST *functionDeclarator) { - // get arguments for funciton we are looking for + // get arguments for function we are looking for FunctionMember testFunction; parseFunctionArguments(functionDeclarator, &testFunction); const ArgumentCollection testArgumentCollection = testFunction.arguments(); -- cgit v0.12 From 5dbd50217149383f9ed8093b3f9e4b1f2e9be365 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Wed, 28 Jul 2010 11:24:59 +0200 Subject: Refactored the virtual mouse handling code into its own function. RevBy: Trust me (cherry picked from commit 998ba966215482048f7fa93908212b1ee4a0c357) --- src/gui/kernel/qapplication_s60.cpp | 351 ++++++++++++++++++------------------ src/gui/kernel/qt_s60_p.h | 1 + 2 files changed, 181 insertions(+), 171 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 0d65811..d7400bc 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -626,178 +626,9 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod case EEventKeyUp: case EEventKey: { -#ifndef QT_NO_CURSOR - if (S60->mouseInteractionEnabled && S60->virtualMouseRequired) { - //translate keys to pointer - if ((keyEvent.iScanCode >= EStdKeyLeftArrow && keyEvent.iScanCode <= EStdKeyDownArrow) || - (keyEvent.iScanCode >= EStdKeyDevice10 && keyEvent.iScanCode <= EStdKeyDevice13) || - keyEvent.iScanCode == EStdKeyDevice3) { - QPoint pos = QCursor::pos(); - TPointerEvent fakeEvent; - fakeEvent.iType = (TPointerEvent::TType)(-1); - fakeEvent.iModifiers = keyEvent.iModifiers; - TInt x = pos.x(); - TInt y = pos.y(); - if (type == EEventKeyUp) { - S60->virtualMouseAccelTimeout.start(); - switch (keyEvent.iScanCode) { - case EStdKeyLeftArrow: - S60->virtualMousePressedKeys &= ~QS60Data::Left; - break; - case EStdKeyRightArrow: - S60->virtualMousePressedKeys &= ~QS60Data::Right; - break; - case EStdKeyUpArrow: - S60->virtualMousePressedKeys &= ~QS60Data::Up; - break; - case EStdKeyDownArrow: - S60->virtualMousePressedKeys &= ~QS60Data::Down; - break; - // diagonal keys (named aliases don't exist in 3.1 SDK) - case EStdKeyDevice10: - S60->virtualMousePressedKeys &= ~QS60Data::LeftUp; - break; - case EStdKeyDevice11: - S60->virtualMousePressedKeys &= ~QS60Data::RightUp; - break; - case EStdKeyDevice12: - S60->virtualMousePressedKeys &= ~QS60Data::RightDown; - break; - case EStdKeyDevice13: - S60->virtualMousePressedKeys &= ~QS60Data::LeftDown; - break; - case EStdKeyDevice3: //select - if (S60->virtualMousePressedKeys & QS60Data::Select) - fakeEvent.iType = TPointerEvent::EButton1Up; - S60->virtualMousePressedKeys &= ~QS60Data::Select; - break; - } - } - else if (type == EEventKey) { - int dx = 0; - int dy = 0; - if (keyEvent.iScanCode != EStdKeyDevice3) { - m_doubleClickTimer.invalidate(); - //reset mouse accelleration after a short time with no moves - const int maxTimeBetweenKeyEventsMs = 500; - if (S60->virtualMouseAccelTimeout.isValid() && - S60->virtualMouseAccelTimeout.hasExpired(maxTimeBetweenKeyEventsMs)) { - S60->virtualMouseAccelDX = 0; - S60->virtualMouseAccelDY = 0; - } - S60->virtualMouseAccelTimeout.invalidate(); - } - switch (keyEvent.iScanCode) { - case EStdKeyLeftArrow: - S60->virtualMousePressedKeys |= QS60Data::Left; - dx = -1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyRightArrow: - S60->virtualMousePressedKeys |= QS60Data::Right; - dx = 1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyUpArrow: - S60->virtualMousePressedKeys |= QS60Data::Up; - dy = -1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyDownArrow: - S60->virtualMousePressedKeys |= QS60Data::Down; - dy = 1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyDevice10: - S60->virtualMousePressedKeys |= QS60Data::LeftUp; - dx = -1; - dy = -1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyDevice11: - S60->virtualMousePressedKeys |= QS60Data::RightUp; - dx = 1; - dy = -1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyDevice12: - S60->virtualMousePressedKeys |= QS60Data::RightDown; - dx = 1; - dy = 1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyDevice13: - S60->virtualMousePressedKeys |= QS60Data::LeftDown; - dx = -1; - dy = 1; - fakeEvent.iType = TPointerEvent::EMove; - break; - case EStdKeyDevice3: - // Platform bug. If you start pressing several keys simultaneously (for - // example for drag'n'drop), Symbian starts producing spurious up and - // down messages for some keys. Therefore, make sure we have a clean slate - // of pressed keys before starting a new button press. - if (S60->virtualMousePressedKeys & QS60Data::Select) { - return EKeyWasConsumed; - } else { - S60->virtualMousePressedKeys |= QS60Data::Select; - fakeEvent.iType = TPointerEvent::EButton1Down; - if (m_doubleClickTimer.isValid() - && !m_doubleClickTimer.hasExpired(QApplication::doubleClickInterval())) { - fakeEvent.iModifiers |= EModifierDoubleClick; - m_doubleClickTimer.invalidate(); - } else { - m_doubleClickTimer.start(); - } - } - break; - } - if (dx) { - int cdx = S60->virtualMouseAccelDX; - //reset accel on change of sign, else double accel - if (dx * cdx <= 0) - cdx = dx; - else - cdx *= 4; - //cap accelleration - if (dx * cdx > S60->virtualMouseMaxAccel) - cdx = dx * S60->virtualMouseMaxAccel; - //move mouse position - x += cdx; - S60->virtualMouseAccelDX = cdx; - } + if (handleVirtualMouse(keyEvent, type) == EKeyWasConsumed) + return EKeyWasConsumed; - if (dy) { - int cdy = S60->virtualMouseAccelDY; - if (dy * cdy <= 0) - cdy = dy; - else - cdy *= 4; - if (dy * cdy > S60->virtualMouseMaxAccel) - cdy = dy * S60->virtualMouseMaxAccel; - y += cdy; - S60->virtualMouseAccelDY = cdy; - } - } - //clip to screen size (window server allows a sprite hotspot to be outside the screen) - if (x < 0) - x = 0; - else if (x >= S60->screenWidthInPixels) - x = S60->screenWidthInPixels - 1; - if (y < 0) - y = 0; - else if (y >= S60->screenHeightInPixels) - y = S60->screenHeightInPixels - 1; - TPoint epos(x, y); - TPoint cpos = epos - PositionRelativeToScreen(); - fakeEvent.iPosition = cpos; - fakeEvent.iParentPosition = epos; - if(fakeEvent.iType != -1) - HandlePointerEvent(fakeEvent); - return EKeyWasConsumed; - } - } -#endif // S60 has a confusing way of delivering key events. There are three types of // events: EKeyEvent, EKeyEventDown and EKeyEventUp. When a key is pressed, the // two first events are generated. When releasing the key, the last one is @@ -869,6 +700,184 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod return EKeyWasNotConsumed; } +TKeyResponse QSymbianControl::handleVirtualMouse(const TKeyEvent& keyEvent,TEventCode type) +{ +#ifndef QT_NO_CURSOR + if (S60->mouseInteractionEnabled && S60->virtualMouseRequired) { + //translate keys to pointer + if ((keyEvent.iScanCode >= EStdKeyLeftArrow && keyEvent.iScanCode <= EStdKeyDownArrow) || + (keyEvent.iScanCode >= EStdKeyDevice10 && keyEvent.iScanCode <= EStdKeyDevice13) || + keyEvent.iScanCode == EStdKeyDevice3) { + QPoint pos = QCursor::pos(); + TPointerEvent fakeEvent; + fakeEvent.iType = (TPointerEvent::TType)(-1); + fakeEvent.iModifiers = keyEvent.iModifiers; + TInt x = pos.x(); + TInt y = pos.y(); + if (type == EEventKeyUp) { + S60->virtualMouseAccelTimeout.start(); + switch (keyEvent.iScanCode) { + case EStdKeyLeftArrow: + S60->virtualMousePressedKeys &= ~QS60Data::Left; + break; + case EStdKeyRightArrow: + S60->virtualMousePressedKeys &= ~QS60Data::Right; + break; + case EStdKeyUpArrow: + S60->virtualMousePressedKeys &= ~QS60Data::Up; + break; + case EStdKeyDownArrow: + S60->virtualMousePressedKeys &= ~QS60Data::Down; + break; + // diagonal keys (named aliases don't exist in 3.1 SDK) + case EStdKeyDevice10: + S60->virtualMousePressedKeys &= ~QS60Data::LeftUp; + break; + case EStdKeyDevice11: + S60->virtualMousePressedKeys &= ~QS60Data::RightUp; + break; + case EStdKeyDevice12: + S60->virtualMousePressedKeys &= ~QS60Data::RightDown; + break; + case EStdKeyDevice13: + S60->virtualMousePressedKeys &= ~QS60Data::LeftDown; + break; + case EStdKeyDevice3: //select + if (S60->virtualMousePressedKeys & QS60Data::Select) + fakeEvent.iType = TPointerEvent::EButton1Up; + S60->virtualMousePressedKeys &= ~QS60Data::Select; + break; + } + } + else if (type == EEventKey) { + int dx = 0; + int dy = 0; + if (keyEvent.iScanCode != EStdKeyDevice3) { + m_doubleClickTimer.invalidate(); + //reset mouse accelleration after a short time with no moves + const int maxTimeBetweenKeyEventsMs = 500; + if (S60->virtualMouseAccelTimeout.isValid() && + S60->virtualMouseAccelTimeout.hasExpired(maxTimeBetweenKeyEventsMs)) { + S60->virtualMouseAccelDX = 0; + S60->virtualMouseAccelDY = 0; + } + S60->virtualMouseAccelTimeout.invalidate(); + } + switch (keyEvent.iScanCode) { + case EStdKeyLeftArrow: + S60->virtualMousePressedKeys |= QS60Data::Left; + dx = -1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyRightArrow: + S60->virtualMousePressedKeys |= QS60Data::Right; + dx = 1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyUpArrow: + S60->virtualMousePressedKeys |= QS60Data::Up; + dy = -1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyDownArrow: + S60->virtualMousePressedKeys |= QS60Data::Down; + dy = 1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyDevice10: + S60->virtualMousePressedKeys |= QS60Data::LeftUp; + dx = -1; + dy = -1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyDevice11: + S60->virtualMousePressedKeys |= QS60Data::RightUp; + dx = 1; + dy = -1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyDevice12: + S60->virtualMousePressedKeys |= QS60Data::RightDown; + dx = 1; + dy = 1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyDevice13: + S60->virtualMousePressedKeys |= QS60Data::LeftDown; + dx = -1; + dy = 1; + fakeEvent.iType = TPointerEvent::EMove; + break; + case EStdKeyDevice3: + // Platform bug. If you start pressing several keys simultaneously (for + // example for drag'n'drop), Symbian starts producing spurious up and + // down messages for some keys. Therefore, make sure we have a clean slate + // of pressed keys before starting a new button press. + if (S60->virtualMousePressedKeys & QS60Data::Select) { + return EKeyWasConsumed; + } else { + S60->virtualMousePressedKeys |= QS60Data::Select; + fakeEvent.iType = TPointerEvent::EButton1Down; + if (m_doubleClickTimer.isValid() + && !m_doubleClickTimer.hasExpired(QApplication::doubleClickInterval())) { + fakeEvent.iModifiers |= EModifierDoubleClick; + m_doubleClickTimer.invalidate(); + } else { + m_doubleClickTimer.start(); + } + } + break; + } + if (dx) { + int cdx = S60->virtualMouseAccelDX; + //reset accel on change of sign, else double accel + if (dx * cdx <= 0) + cdx = dx; + else + cdx *= 4; + //cap accelleration + if (dx * cdx > S60->virtualMouseMaxAccel) + cdx = dx * S60->virtualMouseMaxAccel; + //move mouse position + x += cdx; + S60->virtualMouseAccelDX = cdx; + } + + if (dy) { + int cdy = S60->virtualMouseAccelDY; + if (dy * cdy <= 0) + cdy = dy; + else + cdy *= 4; + if (dy * cdy > S60->virtualMouseMaxAccel) + cdy = dy * S60->virtualMouseMaxAccel; + y += cdy; + S60->virtualMouseAccelDY = cdy; + } + } + //clip to screen size (window server allows a sprite hotspot to be outside the screen) + if (x < 0) + x = 0; + else if (x >= S60->screenWidthInPixels) + x = S60->screenWidthInPixels - 1; + if (y < 0) + y = 0; + else if (y >= S60->screenHeightInPixels) + y = S60->screenHeightInPixels - 1; + TPoint epos(x, y); + TPoint cpos = epos - PositionRelativeToScreen(); + fakeEvent.iPosition = cpos; + fakeEvent.iParentPosition = epos; + if(fakeEvent.iType != -1) + HandlePointerEvent(fakeEvent); + return EKeyWasConsumed; + } + } +#endif + + return EKeyWasNotConsumed; +} + void QSymbianControl::sendInputEvent(QWidget *widget, QInputEvent *inputEvent) { switch (inputEvent->type()) { diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index d8ef67d..26ffe4d 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -224,6 +224,7 @@ private: void HandlePointerEvent(const TPointerEvent& aPointerEvent); TKeyResponse OfferKeyEvent(const TKeyEvent& aKeyEvent,TEventCode aType); TKeyResponse sendKeyEvent(QWidget *widget, QKeyEvent *keyEvent); + TKeyResponse handleVirtualMouse(const TKeyEvent& keyEvent,TEventCode type); bool sendMouseEvent(QWidget *widget, QMouseEvent *mEvent); void sendMouseEvent( QWidget *receiver, -- cgit v0.12 From fb1e05fb3a2b0ab368e9844869afda43a1374c40 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Wed, 28 Jul 2010 11:30:24 +0200 Subject: Cleaned up old comments. (cherry picked from commit 5a3246b198ced3634bd974919e78310d536be27e) --- src/gui/kernel/qapplication_s60.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index d7400bc..1af1fb1 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -640,14 +640,6 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod // the EKeyEvent events. This is what resolveS60ScanCode does. - // ### hackish way to send Qt application to background when pressing right softkey - /* - if( keyEvent.iScanCode == EStdKeyDevice1 ) { - S60->window_group->SetOrdinalPosition(-1); - qApp->setActiveWindow(0); - return EKeyWasNotConsumed; - } - */ TUint s60Keysym = QApplicationPrivate::resolveS60ScanCode(keyEvent.iScanCode, keyEvent.iCode); @@ -666,10 +658,6 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod QKeyEventEx qKeyEvent(type == EEventKeyUp ? QEvent::KeyRelease : QEvent::KeyPress, keyCode, mods, qt_keymapper_private()->translateKeyEvent(keyCode, mods), (keyEvent.iRepeats != 0), 1, keyEvent.iScanCode, s60Keysym, keyEvent.iModifiers); -// WId wid = reinterpret_cast<RWindowGroup *>(keyEvent.Handle())->Child(); -// if (!wid) -// Could happen if window isn't shown yet. -// return EKeyWasNotConsumed; QWidget *widget; widget = QWidget::keyboardGrabber(); if (!widget) { -- cgit v0.12 From 264d4c39035744c5ad073e723088b36df9cd5532 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 29 Jul 2010 10:25:40 +0200 Subject: Fixed key event handling on Symbian. After looking at QTBUG-11338 and Qt's behavior, it became clear that we needed more state tracking in the key event handling code, to be able to handle all the different ways that we can get key events. This inspired having three states for each used scan code, instead of the old code, which only took the current scan code into account. This should make Symbian behave identically to Linux. Task: QTBUG-11338 AutoTest: N/A, platform specific code. There was lots of manual testing on 5800, N97 and N95. RevBy: Jason Barron (cherry picked from commit 041570ca54824ee358593f112b38e26632c3ebbf) --- src/gui/kernel/qapplication_s60.cpp | 164 ++++++++++++++++++++++++------------ src/gui/kernel/qt_s60_p.h | 9 ++ 2 files changed, 118 insertions(+), 55 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 1af1fb1..8d37c5c 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -621,71 +621,125 @@ TKeyResponse QSymbianControl::OfferKeyEventL(const TKeyEvent& keyEvent, TEventCo TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCode type) { - switch (type) { - //case EEventKeyDown: // <-- Intentionally left out. See below. - case EEventKeyUp: - case EEventKey: - { + /* + S60 has a confusing way of delivering key events. There are three types of + events: EEventKey, EEventKeyDown and EEventKeyUp. When a key is pressed, + EEventKeyDown is first generated, followed by EEventKey. Then, when the key is + released, EEventKeyUp is generated. + However, it is possible that only the EEventKey is generated alone, typically + in relation to virtual keyboards. In that case we need to take care to + generate both press and release events in Qt, since applications expect that. + We do this by having three states for each used scan code, depending on the + events received. See the switch below for what happens in each state + transition. + */ + + if (type != EEventKeyDown) if (handleVirtualMouse(keyEvent, type) == EKeyWasConsumed) return EKeyWasConsumed; - // S60 has a confusing way of delivering key events. There are three types of - // events: EKeyEvent, EKeyEventDown and EKeyEventUp. When a key is pressed, the - // two first events are generated. When releasing the key, the last one is - // generated. - // Because S60 does not generate keysyms for EKeyEventDown and EKeyEventUp events, - // we need to do some special tricks to map it to the Qt way. First, we completely - // discard EKeyEventDown events, since they are redundant. Second, since - // EKeyEventUp does not give us a keysym, we need to cache the keysyms from - // the EKeyEvent events. This is what resolveS60ScanCode does. - - - - TUint s60Keysym = QApplicationPrivate::resolveS60ScanCode(keyEvent.iScanCode, - keyEvent.iCode); - int keyCode; - if (s60Keysym == EKeyNull){ //some key events have 0 in iCode, for them iScanCode should be used - keyCode = qt_keymapper_private()->mapS60ScanCodesToQt(keyEvent.iScanCode); - } else if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) { - // Normal characters keys. - keyCode = s60Keysym; - } else { - // Special S60 keys. - keyCode = qt_keymapper_private()->mapS60KeyToQt(s60Keysym); + TKeyResponse ret = EKeyWasNotConsumed; +#define GET_RETURN(x) (ret = ((x) == EKeyWasConsumed) ? EKeyWasConsumed : ret) + + // This top level switch corresponds to the states, and the inner switches + // correspond to the transitions. + QS60Data::ScanCodeState &scanCodeState = S60->scanCodeStates[keyEvent.iScanCode]; + switch (scanCodeState) { + case QS60Data::Unpressed: + switch (type) { + case EEventKeyDown: + scanCodeState = QS60Data::KeyDown; + break; + case EEventKey: + GET_RETURN(sendSymbianKeyEvent(keyEvent, QEvent::KeyPress)); + GET_RETURN(sendSymbianKeyEvent(keyEvent, QEvent::KeyRelease)); + break; + case EEventKeyUp: + // No action. + break; } - - Qt::KeyboardModifiers mods = mapToQtModifiers(keyEvent.iModifiers); - QKeyEventEx qKeyEvent(type == EEventKeyUp ? QEvent::KeyRelease : QEvent::KeyPress, keyCode, - mods, qt_keymapper_private()->translateKeyEvent(keyCode, mods), - (keyEvent.iRepeats != 0), 1, keyEvent.iScanCode, s60Keysym, keyEvent.iModifiers); - QWidget *widget; - widget = QWidget::keyboardGrabber(); - if (!widget) { - if (QApplicationPrivate::popupWidgets != 0) { - widget = QApplication::activePopupWidget()->focusWidget(); - if (!widget) { - widget = QApplication::activePopupWidget(); - } - } else { - widget = QApplicationPrivate::focus_widget; - if (!widget) { - widget = qwidget; - } - } + break; + case QS60Data::KeyDown: + switch (type) { + case EEventKeyDown: + // This should never happen, just stay in this state to be safe. + break; + case EEventKey: + GET_RETURN(sendSymbianKeyEvent(keyEvent, QEvent::KeyPress)); + scanCodeState = QS60Data::KeyDownAndKey; + break; + case EEventKeyUp: + scanCodeState = QS60Data::Unpressed; + break; + } + break; + case QS60Data::KeyDownAndKey: + switch (type) { + case EEventKeyDown: + // This should never happen, just stay in this state to be safe. + break; + case EEventKey: + GET_RETURN(sendSymbianKeyEvent(keyEvent, QEvent::KeyRelease)); + GET_RETURN(sendSymbianKeyEvent(keyEvent, QEvent::KeyPress)); + break; + case EEventKeyUp: + GET_RETURN(sendSymbianKeyEvent(keyEvent, QEvent::KeyRelease)); + scanCodeState = QS60Data::Unpressed; + break; } + break; + } + return ret; - QEventDispatcherS60 *dispatcher; - // It is theoretically possible for someone to install a different event dispatcher. - if ((dispatcher = qobject_cast<QEventDispatcherS60 *>(widget->d_func()->threadData->eventDispatcher)) != 0) { - if (dispatcher->excludeUserInputEvents()) { - dispatcher->saveInputEvent(this, widget, new QKeyEventEx(qKeyEvent)); - return EKeyWasConsumed; +#undef GET_RETURN +} + +TKeyResponse QSymbianControl::sendSymbianKeyEvent(const TKeyEvent &keyEvent, QEvent::Type type) +{ + // Because S60 does not generate keysyms for EKeyEventDown and EKeyEventUp + // events, we need to cache the keysyms from the EKeyEvent events. This is what + // resolveS60ScanCode does. + TUint s60Keysym = QApplicationPrivate::resolveS60ScanCode(keyEvent.iScanCode, + keyEvent.iCode); + int keyCode; + if (s60Keysym == EKeyNull){ //some key events have 0 in iCode, for them iScanCode should be used + keyCode = qt_keymapper_private()->mapS60ScanCodesToQt(keyEvent.iScanCode); + } else if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) { + // Normal characters keys. + keyCode = s60Keysym; + } else { + // Special S60 keys. + keyCode = qt_keymapper_private()->mapS60KeyToQt(s60Keysym); + } + + Qt::KeyboardModifiers mods = mapToQtModifiers(keyEvent.iModifiers); + QKeyEventEx qKeyEvent(type, keyCode, mods, qt_keymapper_private()->translateKeyEvent(keyCode, mods), + (keyEvent.iRepeats != 0), 1, keyEvent.iScanCode, s60Keysym, keyEvent.iModifiers); + QWidget *widget; + widget = QWidget::keyboardGrabber(); + if (!widget) { + if (QApplicationPrivate::popupWidgets != 0) { + widget = QApplication::activePopupWidget()->focusWidget(); + if (!widget) { + widget = QApplication::activePopupWidget(); + } + } else { + widget = QApplicationPrivate::focus_widget; + if (!widget) { + widget = qwidget; } } - return sendKeyEvent(widget, &qKeyEvent); } + + QEventDispatcherS60 *dispatcher; + // It is theoretically possible for someone to install a different event dispatcher. + if ((dispatcher = qobject_cast<QEventDispatcherS60 *>(widget->d_func()->threadData->eventDispatcher)) != 0) { + if (dispatcher->excludeUserInputEvents()) { + dispatcher->saveInputEvent(this, widget, new QKeyEventEx(qKeyEvent)); + return EKeyWasConsumed; + } } - return EKeyWasNotConsumed; + return sendKeyEvent(widget, &qKeyEvent); } TKeyResponse QSymbianControl::handleVirtualMouse(const TKeyEvent& keyEvent,TEventCode type) diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 26ffe4d..da78e38 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -143,6 +143,14 @@ public: int menuBeingConstructed : 1; int memoryLimitForHwRendering; QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type + + enum ScanCodeState { + Unpressed, + KeyDown, + KeyDownAndKey + }; + QHash<TInt, ScanCodeState> scanCodeStates; + static inline void updateScreenSize(); inline RWsSession& wsSession(); static inline RWindowGroup& windowGroup(); @@ -223,6 +231,7 @@ protected: private: void HandlePointerEvent(const TPointerEvent& aPointerEvent); TKeyResponse OfferKeyEvent(const TKeyEvent& aKeyEvent,TEventCode aType); + TKeyResponse sendSymbianKeyEvent(const TKeyEvent &keyEvent, QEvent::Type type); TKeyResponse sendKeyEvent(QWidget *widget, QKeyEvent *keyEvent); TKeyResponse handleVirtualMouse(const TKeyEvent& keyEvent,TEventCode type); bool sendMouseEvent(QWidget *widget, QMouseEvent *mEvent); -- cgit v0.12 From 79133f1dbe0150777abbd5dfb268e895b2b2ddbc Mon Sep 17 00:00:00 2001 From: Jason Barron <jason.barron@nokia.com> Date: Wed, 14 Jul 2010 16:12:04 +0200 Subject: Avoid a crash in the OpenVG paint engine when clipping to an empty path The convertToPainterPath() function assumes that the QVectorPath contains at least one path element when creating the QPainterPath. This is not necessarily the case here though because if QVG_SCISSOR_CLIP is defined and setClipPath() is called with an empty QPainterPath, this is then converted to an empty QVectorPath in QPaintEngineEx::clip() which then calls QVGPaintEngine::clip(). This function then goes on to convert the QVectorPath back into a QPainterPath using the aforementioned function which crashes when attempting to access the first element of the path. In case you are wondering why this seemingly redundant conversion happens at all, it happens because when QVG_SCISSOR_CLIP is defined, we attempt to convert the path to a series of rects for scissor clipping and this conversion function operates on QPainterPath instead of QVectorPath which is what this clip() function was designed to deal with. The fix is to skip over the path conversion for empty paths and go directly to an empty QRegion. Reviewed-by: Alessandro Portale (cherry picked from commit 6d29bcc28c4ee9b7583a62d23a931b9389004966) --- src/openvg/qpaintengine_vg.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index 4b22d5e..b8c60a4 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -1627,7 +1627,10 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) // Try converting the path into a QRegion that tightly follows // the outline of the path we want to clip with. - QRegion region(path.convertToPainterPath().toFillPolygon(QTransform()).toPolygon()); + QRegion region; + if (!path.isEmpty()) + region = QRegion(path.convertToPainterPath().toFillPolygon(QTransform()).toPolygon()); + switch (op) { case Qt::NoClip: { -- cgit v0.12 From 0a174ad2cd736440a8c5bd22cb531a3b9c05a5db Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 29 Jul 2010 13:55:48 +1000 Subject: Remove use of shared NOTIFY signals Sharing a NOTIFY signal can cause binding loop warnings with no apparent cause. Task-number: QTBUG-12333 Reviewed-by: Aaron Kennedy Reviewed-by: Michael Brasser (cherry picked from commit cd813f93530512ffcedef6376e8c9266162c8714) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 24 +++++++++---- src/declarative/graphicsitems/qdeclarativeitem_p.h | 19 ++++++---- .../graphicsitems/qdeclarativelistview.cpp | 4 +-- .../graphicsitems/qdeclarativelistview_p.h | 7 ++-- src/declarative/graphicsitems/qdeclarativepath.cpp | 9 +++++ src/declarative/graphicsitems/qdeclarativepath_p.h | 41 +++++++++++++++------- .../graphicsitems/qdeclarativetranslate.cpp | 4 +-- .../graphicsitems/qdeclarativetranslate_p.h | 7 ++-- src/declarative/util/qdeclarativeanimation.cpp | 8 ++--- src/declarative/util/qdeclarativeanimation_p.h | 10 +++--- 10 files changed, 89 insertions(+), 44 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index c80fc2f..2c295cd 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -511,8 +511,10 @@ QDeclarativeItem *QDeclarativeKeyNavigationAttached::left() const void QDeclarativeKeyNavigationAttached::setLeft(QDeclarativeItem *i) { Q_D(QDeclarativeKeyNavigationAttached); + if (d->left == i) + return; d->left = i; - emit changed(); + emit leftChanged(); } QDeclarativeItem *QDeclarativeKeyNavigationAttached::right() const @@ -524,8 +526,10 @@ QDeclarativeItem *QDeclarativeKeyNavigationAttached::right() const void QDeclarativeKeyNavigationAttached::setRight(QDeclarativeItem *i) { Q_D(QDeclarativeKeyNavigationAttached); + if (d->right == i) + return; d->right = i; - emit changed(); + emit rightChanged(); } QDeclarativeItem *QDeclarativeKeyNavigationAttached::up() const @@ -537,8 +541,10 @@ QDeclarativeItem *QDeclarativeKeyNavigationAttached::up() const void QDeclarativeKeyNavigationAttached::setUp(QDeclarativeItem *i) { Q_D(QDeclarativeKeyNavigationAttached); + if (d->up == i) + return; d->up = i; - emit changed(); + emit upChanged(); } QDeclarativeItem *QDeclarativeKeyNavigationAttached::down() const @@ -550,8 +556,10 @@ QDeclarativeItem *QDeclarativeKeyNavigationAttached::down() const void QDeclarativeKeyNavigationAttached::setDown(QDeclarativeItem *i) { Q_D(QDeclarativeKeyNavigationAttached); + if (d->down == i) + return; d->down = i; - emit changed(); + emit downChanged(); } QDeclarativeItem *QDeclarativeKeyNavigationAttached::tab() const @@ -563,8 +571,10 @@ QDeclarativeItem *QDeclarativeKeyNavigationAttached::tab() const void QDeclarativeKeyNavigationAttached::setTab(QDeclarativeItem *i) { Q_D(QDeclarativeKeyNavigationAttached); + if (d->tab == i) + return; d->tab = i; - emit changed(); + emit tabChanged(); } QDeclarativeItem *QDeclarativeKeyNavigationAttached::backtab() const @@ -576,8 +586,10 @@ QDeclarativeItem *QDeclarativeKeyNavigationAttached::backtab() const void QDeclarativeKeyNavigationAttached::setBacktab(QDeclarativeItem *i) { Q_D(QDeclarativeKeyNavigationAttached); + if (d->backtab == i) + return; d->backtab = i; - emit changed(); + emit backtabChanged(); } /*! diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index 8c3e084..fffb4f7 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -363,12 +363,12 @@ class QDeclarativeKeyNavigationAttached : public QObject, public QDeclarativeIte Q_OBJECT Q_DECLARE_PRIVATE(QDeclarativeKeyNavigationAttached) - Q_PROPERTY(QDeclarativeItem *left READ left WRITE setLeft NOTIFY changed) - Q_PROPERTY(QDeclarativeItem *right READ right WRITE setRight NOTIFY changed) - Q_PROPERTY(QDeclarativeItem *up READ up WRITE setUp NOTIFY changed) - Q_PROPERTY(QDeclarativeItem *down READ down WRITE setDown NOTIFY changed) - Q_PROPERTY(QDeclarativeItem *tab READ tab WRITE setTab NOTIFY changed) - Q_PROPERTY(QDeclarativeItem *backtab READ backtab WRITE setBacktab NOTIFY changed) + Q_PROPERTY(QDeclarativeItem *left READ left WRITE setLeft NOTIFY leftChanged) + Q_PROPERTY(QDeclarativeItem *right READ right WRITE setRight NOTIFY rightChanged) + Q_PROPERTY(QDeclarativeItem *up READ up WRITE setUp NOTIFY upChanged) + Q_PROPERTY(QDeclarativeItem *down READ down WRITE setDown NOTIFY downChanged) + Q_PROPERTY(QDeclarativeItem *tab READ tab WRITE setTab NOTIFY tabChanged) + Q_PROPERTY(QDeclarativeItem *backtab READ backtab WRITE setBacktab NOTIFY backtabChanged) Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged) Q_ENUMS(Priority) @@ -396,7 +396,12 @@ public: static QDeclarativeKeyNavigationAttached *qmlAttachedProperties(QObject *); Q_SIGNALS: - void changed(); + void leftChanged(); + void rightChanged(); + void upChanged(); + void downChanged(); + void tabChanged(); + void backtabChanged(); void priorityChanged(); private: diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 8b616ce..b3e1dc0 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -60,7 +60,7 @@ void QDeclarativeViewSection::setProperty(const QString &property) { if (property != m_property) { m_property = property; - emit changed(); + emit propertyChanged(); } } @@ -68,7 +68,7 @@ void QDeclarativeViewSection::setCriteria(QDeclarativeViewSection::SectionCriter { if (criteria != m_criteria) { m_criteria = criteria; - emit changed(); + emit criteriaChanged(); } } diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h index 9941040..b264861 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview_p.h +++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h @@ -53,8 +53,8 @@ QT_MODULE(Declarative) class Q_AUTOTEST_EXPORT QDeclarativeViewSection : public QObject { Q_OBJECT - Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY changed) - Q_PROPERTY(SectionCriteria criteria READ criteria WRITE setCriteria NOTIFY changed) + Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY propertyChanged) + Q_PROPERTY(SectionCriteria criteria READ criteria WRITE setCriteria NOTIFY criteriaChanged) Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged) Q_ENUMS(SectionCriteria) public: @@ -73,7 +73,8 @@ public: QString sectionString(const QString &value); Q_SIGNALS: - void changed(); + void propertyChanged(); + void criteriaChanged(); void delegateChanged(); private: diff --git a/src/declarative/graphicsitems/qdeclarativepath.cpp b/src/declarative/graphicsitems/qdeclarativepath.cpp index 80196a1..c48011d3 100644 --- a/src/declarative/graphicsitems/qdeclarativepath.cpp +++ b/src/declarative/graphicsitems/qdeclarativepath.cpp @@ -474,6 +474,7 @@ void QDeclarativeCurve::setX(qreal x) { if (_x != x) { _x = x; + emit xChanged(); emit changed(); } } @@ -487,6 +488,7 @@ void QDeclarativeCurve::setY(qreal y) { if (_y != y) { _y = y; + emit yChanged(); emit changed(); } } @@ -576,6 +578,7 @@ void QDeclarativePathAttribute::setValue(qreal value) { if (_value != value) { _value = value; + emit valueChanged(); emit changed(); } } @@ -678,6 +681,7 @@ void QDeclarativePathQuad::setControlX(qreal x) { if (_controlX != x) { _controlX = x; + emit controlXChanged(); emit changed(); } } @@ -695,6 +699,7 @@ void QDeclarativePathQuad::setControlY(qreal y) { if (_controlY != y) { _controlY = y; + emit controlYChanged(); emit changed(); } } @@ -761,6 +766,7 @@ void QDeclarativePathCubic::setControl1X(qreal x) { if (_control1X != x) { _control1X = x; + emit control1XChanged(); emit changed(); } } @@ -774,6 +780,7 @@ void QDeclarativePathCubic::setControl1Y(qreal y) { if (_control1Y != y) { _control1Y = y; + emit control1YChanged(); emit changed(); } } @@ -793,6 +800,7 @@ void QDeclarativePathCubic::setControl2X(qreal x) { if (_control2X != x) { _control2X = x; + emit control2XChanged(); emit changed(); } } @@ -806,6 +814,7 @@ void QDeclarativePathCubic::setControl2Y(qreal y) { if (_control2Y != y) { _control2Y = y; + emit control2YChanged(); emit changed(); } } diff --git a/src/declarative/graphicsitems/qdeclarativepath_p.h b/src/declarative/graphicsitems/qdeclarativepath_p.h index 001bcdf..5ab5cfd 100644 --- a/src/declarative/graphicsitems/qdeclarativepath_p.h +++ b/src/declarative/graphicsitems/qdeclarativepath_p.h @@ -68,7 +68,7 @@ class Q_AUTOTEST_EXPORT QDeclarativePathAttribute : public QDeclarativePathEleme Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) - Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY changed) + Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged) public: QDeclarativePathAttribute(QObject *parent=0) : QDeclarativePathElement(parent), _value(0) {} @@ -81,6 +81,7 @@ public: Q_SIGNALS: void nameChanged(); + void valueChanged(); private: QString _name; @@ -91,8 +92,8 @@ class Q_AUTOTEST_EXPORT QDeclarativeCurve : public QDeclarativePathElement { Q_OBJECT - Q_PROPERTY(qreal x READ x WRITE setX NOTIFY changed) - Q_PROPERTY(qreal y READ y WRITE setY NOTIFY changed) + Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged) + Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged) public: QDeclarativeCurve(QObject *parent=0) : QDeclarativePathElement(parent), _x(0), _y(0) {} @@ -104,6 +105,10 @@ public: virtual void addToPath(QPainterPath &) {} +Q_SIGNALS: + void xChanged(); + void yChanged(); + private: qreal _x; qreal _y; @@ -122,8 +127,8 @@ class Q_AUTOTEST_EXPORT QDeclarativePathQuad : public QDeclarativeCurve { Q_OBJECT - Q_PROPERTY(qreal controlX READ controlX WRITE setControlX NOTIFY changed) - Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY changed) + Q_PROPERTY(qreal controlX READ controlX WRITE setControlX NOTIFY controlXChanged) + Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY controlYChanged) public: QDeclarativePathQuad(QObject *parent=0) : QDeclarativeCurve(parent), _controlX(0), _controlY(0) {} @@ -135,6 +140,10 @@ public: void addToPath(QPainterPath &path); +Q_SIGNALS: + void controlXChanged(); + void controlYChanged(); + private: qreal _controlX; qreal _controlY; @@ -144,10 +153,10 @@ class Q_AUTOTEST_EXPORT QDeclarativePathCubic : public QDeclarativeCurve { Q_OBJECT - Q_PROPERTY(qreal control1X READ control1X WRITE setControl1X NOTIFY changed) - Q_PROPERTY(qreal control1Y READ control1Y WRITE setControl1Y NOTIFY changed) - Q_PROPERTY(qreal control2X READ control2X WRITE setControl2X NOTIFY changed) - Q_PROPERTY(qreal control2Y READ control2Y WRITE setControl2Y NOTIFY changed) + Q_PROPERTY(qreal control1X READ control1X WRITE setControl1X NOTIFY control1XChanged) + Q_PROPERTY(qreal control1Y READ control1Y WRITE setControl1Y NOTIFY control1YChanged) + Q_PROPERTY(qreal control2X READ control2X WRITE setControl2X NOTIFY control2XChanged) + Q_PROPERTY(qreal control2Y READ control2Y WRITE setControl2Y NOTIFY control2YChanged) public: QDeclarativePathCubic(QObject *parent=0) : QDeclarativeCurve(parent), _control1X(0), _control1Y(0), _control2X(0), _control2Y(0) {} @@ -165,11 +174,17 @@ public: void addToPath(QPainterPath &path); +Q_SIGNALS: + void control1XChanged(); + void control1YChanged(); + void control2XChanged(); + void control2YChanged(); + private: - int _control1X; - int _control1Y; - int _control2X; - int _control2Y; + qreal _control1X; + qreal _control1Y; + qreal _control2X; + qreal _control2Y; }; class Q_AUTOTEST_EXPORT QDeclarativePathPercent : public QDeclarativePathElement diff --git a/src/declarative/graphicsitems/qdeclarativetranslate.cpp b/src/declarative/graphicsitems/qdeclarativetranslate.cpp index 16a1127..be9b3f3 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate.cpp +++ b/src/declarative/graphicsitems/qdeclarativetranslate.cpp @@ -90,7 +90,7 @@ void QDeclarativeTranslate::setX(qreal x) return; d->x = x; update(); - emit positionChanged(); + emit xChanged(); } /*! @@ -113,7 +113,7 @@ void QDeclarativeTranslate::setY(qreal y) return; d->y = y; update(); - emit positionChanged(); + emit yChanged(); } /*! diff --git a/src/declarative/graphicsitems/qdeclarativetranslate_p.h b/src/declarative/graphicsitems/qdeclarativetranslate_p.h index 0207dce..b871518 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate_p.h +++ b/src/declarative/graphicsitems/qdeclarativetranslate_p.h @@ -56,8 +56,8 @@ class Q_AUTOTEST_EXPORT QDeclarativeTranslate : public QGraphicsTransform { Q_OBJECT - Q_PROPERTY(qreal x READ x WRITE setX NOTIFY positionChanged) - Q_PROPERTY(qreal y READ y WRITE setY NOTIFY positionChanged) + Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged) + Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged) public: QDeclarativeTranslate(QObject *parent = 0); @@ -72,7 +72,8 @@ public: void applyTo(QMatrix4x4 *matrix) const; Q_SIGNALS: - void positionChanged(); + void xChanged(); + void yChanged(); private: Q_DECLARE_PRIVATE(QDeclarativeTranslate) diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index bbd6535..61bcd8a 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -939,7 +939,7 @@ void QDeclarativePropertyAction::setTarget(QObject *o) if (d->target == o) return; d->target = o; - emit targetChanged(d->target, d->propertyName); + emit targetChanged(); } QString QDeclarativePropertyAction::property() const @@ -954,7 +954,7 @@ void QDeclarativePropertyAction::setProperty(const QString &n) if (d->propertyName == n) return; d->propertyName = n; - emit targetChanged(d->target, d->propertyName); + emit propertyChanged(); } /*! @@ -2096,7 +2096,7 @@ void QDeclarativePropertyAnimation::setTarget(QObject *o) if (d->target == o) return; d->target = o; - emit targetChanged(d->target, d->propertyName); + emit targetChanged(); } QString QDeclarativePropertyAnimation::property() const @@ -2111,7 +2111,7 @@ void QDeclarativePropertyAnimation::setProperty(const QString &n) if (d->propertyName == n) return; d->propertyName = n; - emit targetChanged(d->target, d->propertyName); + emit propertyChanged(); } QString QDeclarativePropertyAnimation::properties() const diff --git a/src/declarative/util/qdeclarativeanimation_p.h b/src/declarative/util/qdeclarativeanimation_p.h index 59bd465..481c36c 100644 --- a/src/declarative/util/qdeclarativeanimation_p.h +++ b/src/declarative/util/qdeclarativeanimation_p.h @@ -197,7 +197,7 @@ class QDeclarativePropertyAction : public QDeclarativeAbstractAnimation Q_DECLARE_PRIVATE(QDeclarativePropertyAction) Q_PROPERTY(QObject *target READ target WRITE setTarget NOTIFY targetChanged) - Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY targetChanged) + Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY propertyChanged) Q_PROPERTY(QString properties READ properties WRITE setProperties NOTIFY propertiesChanged) Q_PROPERTY(QDeclarativeListProperty<QObject> targets READ targets) Q_PROPERTY(QDeclarativeListProperty<QObject> exclude READ exclude) @@ -225,7 +225,8 @@ public: Q_SIGNALS: void valueChanged(const QVariant &); void propertiesChanged(const QString &); - void targetChanged(QObject *, const QString &); + void targetChanged(); + void propertyChanged(); protected: virtual void transition(QDeclarativeStateActions &actions, @@ -246,7 +247,7 @@ class Q_AUTOTEST_EXPORT QDeclarativePropertyAnimation : public QDeclarativeAbstr Q_PROPERTY(QVariant to READ to WRITE setTo NOTIFY toChanged) Q_PROPERTY(QEasingCurve easing READ easing WRITE setEasing NOTIFY easingChanged) Q_PROPERTY(QObject *target READ target WRITE setTarget NOTIFY targetChanged) - Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY targetChanged) + Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY propertyChanged) Q_PROPERTY(QString properties READ properties WRITE setProperties NOTIFY propertiesChanged) Q_PROPERTY(QDeclarativeListProperty<QObject> targets READ targets) Q_PROPERTY(QDeclarativeListProperty<QObject> exclude READ exclude) @@ -292,7 +293,8 @@ Q_SIGNALS: void toChanged(QVariant); void easingChanged(const QEasingCurve &); void propertiesChanged(const QString &); - void targetChanged(QObject *, const QString &); + void targetChanged(); + void propertyChanged(); }; class Q_AUTOTEST_EXPORT QDeclarativeColorAnimation : public QDeclarativePropertyAnimation -- cgit v0.12 From c968152d4c1cee2246ee0d9db121da81112a963d Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 29 Jul 2010 13:59:59 +1000 Subject: Remove use of shared NOTIFY signals in QGraphicsScale Sharing a NOTIFY signal can cause binding loop warnings with no apparent cause. Task-number: QTBUG-12333 Reviewed-by: Aaron Kennedy Reviewed-by: Michael Brasser (cherry picked from commit 5d5feaa86f3933a1e89b53267953b86e2b0459ed) --- src/gui/graphicsview/qgraphicstransform.cpp | 3 +++ src/gui/graphicsview/qgraphicstransform.h | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gui/graphicsview/qgraphicstransform.cpp b/src/gui/graphicsview/qgraphicstransform.cpp index 4ab6975..986bee6 100644 --- a/src/gui/graphicsview/qgraphicstransform.cpp +++ b/src/gui/graphicsview/qgraphicstransform.cpp @@ -267,6 +267,7 @@ void QGraphicsScale::setXScale(qreal scale) return; d->xScale = scale; update(); + emit xScaleChanged(); emit scaleChanged(); } @@ -293,6 +294,7 @@ void QGraphicsScale::setYScale(qreal scale) return; d->yScale = scale; update(); + emit yScaleChanged(); emit scaleChanged(); } @@ -319,6 +321,7 @@ void QGraphicsScale::setZScale(qreal scale) return; d->zScale = scale; update(); + emit zScaleChanged(); emit scaleChanged(); } diff --git a/src/gui/graphicsview/qgraphicstransform.h b/src/gui/graphicsview/qgraphicstransform.h index 58b201a..d8c9654 100644 --- a/src/gui/graphicsview/qgraphicstransform.h +++ b/src/gui/graphicsview/qgraphicstransform.h @@ -85,9 +85,9 @@ class Q_GUI_EXPORT QGraphicsScale : public QGraphicsTransform Q_OBJECT Q_PROPERTY(QVector3D origin READ origin WRITE setOrigin NOTIFY originChanged) - Q_PROPERTY(qreal xScale READ xScale WRITE setXScale NOTIFY scaleChanged) - Q_PROPERTY(qreal yScale READ yScale WRITE setYScale NOTIFY scaleChanged) - Q_PROPERTY(qreal zScale READ zScale WRITE setZScale NOTIFY scaleChanged) + Q_PROPERTY(qreal xScale READ xScale WRITE setXScale NOTIFY xScaleChanged) + Q_PROPERTY(qreal yScale READ yScale WRITE setYScale NOTIFY yScaleChanged) + Q_PROPERTY(qreal zScale READ zScale WRITE setZScale NOTIFY zScaleChanged) public: QGraphicsScale(QObject *parent = 0); ~QGraphicsScale(); @@ -108,6 +108,9 @@ public: Q_SIGNALS: void originChanged(); + void xScaleChanged(); + void yScaleChanged(); + void zScaleChanged(); void scaleChanged(); private: -- cgit v0.12 From fd0720bf1e9ce56515fdf1247ee0a7fcae3c3107 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Fri, 30 Jul 2010 14:48:28 +0200 Subject: Fixed the incorrect diagram for bug QTBUG-12385. (cherry picked from commit 07e74a963dbd2bf597dbea231d7b2cefba05fde2) --- .../addressbook-tutorial-part1-labeled-layout.png | Bin 20739 -> 19114 bytes ...ddressbook-tutorial-part1-labeled-screenshot.png | Bin 26594 -> 23223 bytes .../addressbook-tutorial-part1-screenshot.png | Bin 7180 -> 9872 bytes .../addressbook-tutorial-part2-add-contact.png | Bin 10255 -> 12936 bytes .../addressbook-tutorial-part2-add-successful.png | Bin 8089 -> 10825 bytes .../addressbook-tutorial-part2-labeled-layout.png | Bin 31947 -> 27103 bytes .../addressbook-tutorial-part3-labeled-layout.png | Bin 39500 -> 27467 bytes .../addressbook-tutorial-part3-screenshot.png | Bin 10460 -> 14041 bytes .../images/addressbook-tutorial-part4-remove.png | Bin 13860 -> 22248 bytes .../addressbook-tutorial-part5-finddialog.png | Bin 6982 -> 10046 bytes .../images/addressbook-tutorial-part5-notfound.png | Bin 8177 -> 10789 bytes .../addressbook-tutorial-part5-screenshot.png | Bin 12557 -> 15849 bytes doc/src/images/addressbook-tutorial-part6-load.png | Bin 40623 -> 24797 bytes doc/src/images/addressbook-tutorial-part6-save.png | Bin 40406 -> 24747 bytes .../addressbook-tutorial-part6-screenshot.png | Bin 13598 -> 16819 bytes .../addressbook-tutorial-part7-screenshot.png | Bin 14822 -> 18369 bytes doc/src/images/addressbook-tutorial-screenshot.png | Bin 11916 -> 15275 bytes doc/src/images/addressbook-tutorial.png | Bin 11481 -> 6200 bytes 18 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/src/images/addressbook-tutorial-part1-labeled-layout.png b/doc/src/images/addressbook-tutorial-part1-labeled-layout.png index ef514c8..b19cb36 100644 Binary files a/doc/src/images/addressbook-tutorial-part1-labeled-layout.png and b/doc/src/images/addressbook-tutorial-part1-labeled-layout.png differ diff --git a/doc/src/images/addressbook-tutorial-part1-labeled-screenshot.png b/doc/src/images/addressbook-tutorial-part1-labeled-screenshot.png index 4381079..f9b91ee 100644 Binary files a/doc/src/images/addressbook-tutorial-part1-labeled-screenshot.png and b/doc/src/images/addressbook-tutorial-part1-labeled-screenshot.png differ diff --git a/doc/src/images/addressbook-tutorial-part1-screenshot.png b/doc/src/images/addressbook-tutorial-part1-screenshot.png index cf15627..454b095 100644 Binary files a/doc/src/images/addressbook-tutorial-part1-screenshot.png and b/doc/src/images/addressbook-tutorial-part1-screenshot.png differ diff --git a/doc/src/images/addressbook-tutorial-part2-add-contact.png b/doc/src/images/addressbook-tutorial-part2-add-contact.png index 330858d..6f2b947 100644 Binary files a/doc/src/images/addressbook-tutorial-part2-add-contact.png and b/doc/src/images/addressbook-tutorial-part2-add-contact.png differ diff --git a/doc/src/images/addressbook-tutorial-part2-add-successful.png b/doc/src/images/addressbook-tutorial-part2-add-successful.png index 3b108fb..99a2154 100644 Binary files a/doc/src/images/addressbook-tutorial-part2-add-successful.png and b/doc/src/images/addressbook-tutorial-part2-add-successful.png differ diff --git a/doc/src/images/addressbook-tutorial-part2-labeled-layout.png b/doc/src/images/addressbook-tutorial-part2-labeled-layout.png index 73f6dfb..1e000c8 100644 Binary files a/doc/src/images/addressbook-tutorial-part2-labeled-layout.png and b/doc/src/images/addressbook-tutorial-part2-labeled-layout.png differ diff --git a/doc/src/images/addressbook-tutorial-part3-labeled-layout.png b/doc/src/images/addressbook-tutorial-part3-labeled-layout.png index 662fa7f..1981ba8 100644 Binary files a/doc/src/images/addressbook-tutorial-part3-labeled-layout.png and b/doc/src/images/addressbook-tutorial-part3-labeled-layout.png differ diff --git a/doc/src/images/addressbook-tutorial-part3-screenshot.png b/doc/src/images/addressbook-tutorial-part3-screenshot.png index 97d1357..75159b4 100644 Binary files a/doc/src/images/addressbook-tutorial-part3-screenshot.png and b/doc/src/images/addressbook-tutorial-part3-screenshot.png differ diff --git a/doc/src/images/addressbook-tutorial-part4-remove.png b/doc/src/images/addressbook-tutorial-part4-remove.png index 42b0f92..8eb259e 100644 Binary files a/doc/src/images/addressbook-tutorial-part4-remove.png and b/doc/src/images/addressbook-tutorial-part4-remove.png differ diff --git a/doc/src/images/addressbook-tutorial-part5-finddialog.png b/doc/src/images/addressbook-tutorial-part5-finddialog.png index 18e5451..743d92e 100644 Binary files a/doc/src/images/addressbook-tutorial-part5-finddialog.png and b/doc/src/images/addressbook-tutorial-part5-finddialog.png differ diff --git a/doc/src/images/addressbook-tutorial-part5-notfound.png b/doc/src/images/addressbook-tutorial-part5-notfound.png index be7172e..2d35766 100644 Binary files a/doc/src/images/addressbook-tutorial-part5-notfound.png and b/doc/src/images/addressbook-tutorial-part5-notfound.png differ diff --git a/doc/src/images/addressbook-tutorial-part5-screenshot.png b/doc/src/images/addressbook-tutorial-part5-screenshot.png index ea4a66c..3abe277 100644 Binary files a/doc/src/images/addressbook-tutorial-part5-screenshot.png and b/doc/src/images/addressbook-tutorial-part5-screenshot.png differ diff --git a/doc/src/images/addressbook-tutorial-part6-load.png b/doc/src/images/addressbook-tutorial-part6-load.png index 95fdcaf..a027a1d 100644 Binary files a/doc/src/images/addressbook-tutorial-part6-load.png and b/doc/src/images/addressbook-tutorial-part6-load.png differ diff --git a/doc/src/images/addressbook-tutorial-part6-save.png b/doc/src/images/addressbook-tutorial-part6-save.png index c0deb70..757feeb 100644 Binary files a/doc/src/images/addressbook-tutorial-part6-save.png and b/doc/src/images/addressbook-tutorial-part6-save.png differ diff --git a/doc/src/images/addressbook-tutorial-part6-screenshot.png b/doc/src/images/addressbook-tutorial-part6-screenshot.png index f77bf03..7bb2f74 100644 Binary files a/doc/src/images/addressbook-tutorial-part6-screenshot.png and b/doc/src/images/addressbook-tutorial-part6-screenshot.png differ diff --git a/doc/src/images/addressbook-tutorial-part7-screenshot.png b/doc/src/images/addressbook-tutorial-part7-screenshot.png index d6b0a50..3e7b3ca 100644 Binary files a/doc/src/images/addressbook-tutorial-part7-screenshot.png and b/doc/src/images/addressbook-tutorial-part7-screenshot.png differ diff --git a/doc/src/images/addressbook-tutorial-screenshot.png b/doc/src/images/addressbook-tutorial-screenshot.png index d6727dc..3fba6e8 100644 Binary files a/doc/src/images/addressbook-tutorial-screenshot.png and b/doc/src/images/addressbook-tutorial-screenshot.png differ diff --git a/doc/src/images/addressbook-tutorial.png b/doc/src/images/addressbook-tutorial.png index 495edda..f80b42d 100644 Binary files a/doc/src/images/addressbook-tutorial.png and b/doc/src/images/addressbook-tutorial.png differ -- cgit v0.12 From b06e5859a9c001a1c8afa30b88362622aa2d852d Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Thu, 29 Jul 2010 15:12:17 +1000 Subject: Document elements that are focus scopes. Task-number: QTBUG-12404 (cherry picked from commit d27e7484c8fcb08e0c533b9a8bf5af8d527b1de3) --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 8 +++++--- src/declarative/graphicsitems/qdeclarativelistview.cpp | 10 ++++++---- src/declarative/graphicsitems/qdeclarativeloader.cpp | 3 +++ src/declarative/graphicsitems/qdeclarativepathview.cpp | 5 ++++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 89b3958..f02ef6b 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1085,13 +1085,15 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m \c portrait data directly. An improved grid view is shown below. The delegate is visually improved and is moved - into a separate \c contactDelegate component. Also, the currently selected item is highlighted - with a blue \l Rectangle using the \l highlight property, and \c focus is set to \c true - to enable keyboard navigation for the grid view. + into a separate \c contactDelegate component. \snippet doc/src/snippets/declarative/gridview/gridview.qml classdocs advanced \image gridview-highlight.png + The currently selected item is highlighted with a blue \l Rectangle using the \l highlight property, + and \c focus is set to \c true to enable keyboard navigation for the grid view. + The grid view itself is a focus scope (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details). + Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index b3e1dc0..b0a11b9 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1385,14 +1385,16 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m the delegate is able to access the model's \c name and \c number data directly. An improved list view is shown below. The delegate is visually improved and is moved - into a separate \c contactDelegate component. Also, the currently selected item is highlighted - with a blue \l Rectangle using the \l highlight property, and \c focus is set to \c true - to enable keyboard navigation for the list view. + into a separate \c contactDelegate component. \snippet doc/src/snippets/declarative/listview/listview.qml classdocs advanced \image listview-highlight.png - In a GridView, delegates are instantiated as needed and may be destroyed at any time. + The currently selected item is highlighted with a blue \l Rectangle using the \l highlight property, + and \c focus is set to \c true to enable keyboard navigation for the list view. + The list view itself is a focus scope (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details). + + Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. \note Views do not enable \e clip automatically. If the view diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp index cc7f8e5..d28181e 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader.cpp +++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp @@ -159,6 +159,9 @@ void QDeclarativeLoaderPrivate::initResize() unloads "Page1.qml" and frees resources consumed by it. + Note that Loader is a focus scope. Its \c focus property must be set to \c true for any of its children + to get the \e {active focus} (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details). + \sa {dynamic-object-creation}{Dynamic Object Creation} */ diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index acf9827..3ad8fb38 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -314,7 +314,7 @@ void QDeclarativePathViewPrivate::regenerate() and XmlListModel, or custom model classes defined in C++ that inherit from QAbstractListModel. - A ListView has a \l model, which defines the data to be displayed, and + The view has a \l model, which defines the data to be displayed, and a \l delegate, which defines how the data should be displayed. The \l delegate is instantiated for each item on the \l path. The items may be flicked to move them along the path. @@ -333,6 +333,9 @@ void QDeclarativePathViewPrivate::regenerate() opacity of the items as they rotate. This additional code can be seen in the PathAttribute documentation.) + The \c focus can be set to \c true to enable keyboard navigation. + The path view itself is a focus scope (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details). + Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. -- cgit v0.12 From b0d3cbe8cdad8289ab49f6b8d9af2c83848ad59d Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil <prasanth.ullattil@nokia.com> Date: Fri, 30 Jul 2010 13:00:34 +0200 Subject: QFileDialog crashes when empty selectedFilter is set on Carbon. We were making the wrong assumption that the selectedFilter string will be valid always, when calling functions like getSaveFileName(). Task-number: QTBUG-12461 Reviewed-by: Denis (cherry picked from commit fb47a99e1d0020e8dcc4cc4f9c188ccd2fd5ee3e) --- src/gui/dialogs/qfiledialog_mac.mm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm index f1afaa9..64fc0ee 100644 --- a/src/gui/dialogs/qfiledialog_mac.mm +++ b/src/gui/dialogs/qfiledialog_mac.mm @@ -782,9 +782,11 @@ void QFileDialogPrivate::qt_mac_filedialog_event_proc(const NavEventCallbackMess const QtMacFilterName &fn = fileDialogPrivate->filterInfo.filters.at( fileDialogPrivate->filterInfo.currentSelection); QStringList reg = fn.regexp.split(QLatin1String(";"), QString::SkipEmptyParts); - QString r = reg.first(); - r = r.right(r.length()-1); // Strip the * - base += r; //"." + QString::number(s->menuType); + if (reg.count()) { + QString r = reg.first(); + r = r.right(r.length()-1); // Strip the * + base += r; //"." + QString::number(s->menuType); + } NavDialogSetSaveFileName(p->context, QCFString::toCFStringRef(base)); } #ifdef DEBUG_FILEDIALOG_FILTERS -- cgit v0.12 From eb14a4082bad06d89397528453e914ade4510ac9 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 29 Jul 2010 16:36:46 +1000 Subject: Add moving and flicking properties to PathView PathView handles its own mouse interaction, but lacked properties similar to those in Flickable to determine when it is stationary. This made it impossible to start an animation when the view stops moving, for example. Task-number: QTBUG-12497 Reviewed-by: Warwick Allison (cherry picked from commit eae48b410cc28b83433b7dcba379a31aae2ce2df) --- .../graphicsitems/qdeclarativepathview.cpp | 108 +- .../graphicsitems/qdeclarativepathview_p.h | 13 + .../graphicsitems/qdeclarativepathview_p_p.h | 13 +- .../qdeclarativepathview/data/test-pathview.0.png | Bin 2321 -> 2412 bytes .../qdeclarativepathview/data/test-pathview.1.png | Bin 2380 -> 2443 bytes .../qdeclarativepathview/data/test-pathview.2.png | Bin 2315 -> 2398 bytes .../qdeclarativepathview/data/test-pathview.3.png | Bin 2372 -> 2390 bytes .../qdeclarativepathview/data/test-pathview.4.png | Bin 2327 -> 2416 bytes .../qdeclarativepathview/data/test-pathview.5.png | Bin 0 -> 2395 bytes .../qdeclarativepathview/data/test-pathview.qml | 1280 +++++++++++++------- .../qdeclarativepathview/test-pathview.qml | 5 + 11 files changed, 939 insertions(+), 480 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 3ad8fb38..5dcf1b7 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -90,6 +90,26 @@ void QDeclarativePathViewAttached::setValue(const QByteArray &name, const QVaria m_metaobject->setValue(name, val); } + +void QDeclarativePathViewPrivate::init() +{ + Q_Q(QDeclarativePathView); + offset = 0; + q->setAcceptedMouseButtons(Qt::LeftButton); + q->setFlag(QGraphicsItem::ItemIsFocusScope); + q->setFiltersChildEvents(true); + q->connect(&tl, SIGNAL(updated()), q, SLOT(ticked())); + lastPosTime.invalidate(); + static int timelineCompletedIdx = -1; + static int movementEndingIdx = -1; + if (timelineCompletedIdx == -1) { + timelineCompletedIdx = QDeclarativeTimeLine::staticMetaObject.indexOfSignal("completed()"); + movementEndingIdx = QDeclarativePathView::staticMetaObject.indexOfSlot("movementEnding()"); + } + QMetaObject::connect(&tl, timelineCompletedIdx, + q, movementEndingIdx, Qt::DirectConnection); +} + QDeclarativeItem *QDeclarativePathViewPrivate::getItem(int modelIndex) { Q_Q(QDeclarativePathView); @@ -851,6 +871,61 @@ void QDeclarativePathView::setInteractive(bool interactive) } /*! + \qmlproperty bool PathView::moving + + This property holds whether the view is currently moving + due to the user either dragging or flicking the view. +*/ +bool QDeclarativePathView::isMoving() const +{ + Q_D(const QDeclarativePathView); + return d->moving; +} + +/*! + \qmlproperty bool PathView::flicking + + This property holds whether the view is currently moving + due to the user flicking the view. +*/ +bool QDeclarativePathView::isFlicking() const +{ + Q_D(const QDeclarativePathView); + return d->flicking; +} + +/*! + \qmlsignal PathView::onMovementStarted() + + This handler is called when the view begins moving due to user + interaction. +*/ + +/*! + \qmlsignal PathView::onMovementEnded() + + This handler is called when the view stops moving due to user + interaction. If a flick was generated, this handler will + be triggered once the flick stops. If a flick was not + generated, the handler will be triggered when the + user stops dragging - i.e. a mouse or touch release. +*/ + +/*! + \qmlsignal PathView::onFlickStarted() + + This handler is called when the view is flicked. A flick + starts from the point that the mouse or touch is released, + while still in motion. +*/ + +/*! + \qmlsignal PathView::onFlickEnded() + + This handler is called when the view stops moving due to a flick. +*/ + +/*! \qmlproperty Component PathView::delegate The delegate provides a template defining each item instantiated by the view. @@ -967,7 +1042,11 @@ void QDeclarativePathView::mousePressEvent(QGraphicsSceneMouseEvent *event) return; } - d->stealMouse = false; + if (d->tl.isActive() && d->flicking) + d->stealMouse = true; // If we've been flicked then steal the click. + else + d->stealMouse = false; + d->lastElapsed = 0; d->lastDist = 0; QDeclarativeItemPrivate::start(d->lastPosTime); @@ -1003,6 +1082,11 @@ void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) d->lastDist = diff; d->startPc = newPc; } + if (!d->moving) { + d->moving = true; + emit movingChanged(); + emit movementStarted(); + } } } @@ -1042,12 +1126,19 @@ void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *) d->moveOffset.setValue(d->offset); d->tl.accel(d->moveOffset, velocity, accel, dist); d->tl.callback(QDeclarativeTimeLineCallback(&d->moveOffset, d->fixOffsetCallback, d)); + if (!d->flicking) { + d->flicking = true; + emit flickingChanged(); + emit flickStarted(); + } } else { d->fixOffset(); } d->lastPosTime.invalidate(); ungrabMouse(); + if (!d->tl.isActive()) + movementEnding(); } bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event) @@ -1375,6 +1466,21 @@ void QDeclarativePathView::ticked() d->updateCurrent(); } +void QDeclarativePathView::movementEnding() +{ + Q_D(QDeclarativePathView); + if (d->flicking) { + d->flicking = false; + emit flickingChanged(); + emit flickEnded(); + } + if (d->moving && !d->stealMouse) { + d->moving = false; + emit movingChanged(); + emit movementEnded(); + } +} + // find the item closest to the snap position int QDeclarativePathViewPrivate::calcCurrentIndex() { diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p.h index d2980c6..035a64b 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p.h @@ -74,6 +74,9 @@ class Q_AUTOTEST_EXPORT QDeclarativePathView : public QDeclarativeItem Q_PROPERTY(qreal flickDeceleration READ flickDeceleration WRITE setFlickDeceleration NOTIFY flickDecelerationChanged) Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged) + Q_PROPERTY(bool moving READ isMoving NOTIFY movingChanged) + Q_PROPERTY(bool flicking READ isFlicking NOTIFY flickingChanged) + Q_PROPERTY(int count READ count NOTIFY countChanged) Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged) Q_PROPERTY(int pathItemCount READ pathItemCount WRITE setPathItemCount NOTIFY pathItemCountChanged) @@ -122,6 +125,9 @@ public: bool isInteractive() const; void setInteractive(bool); + bool isMoving() const; + bool isFlicking() const; + int count() const; QDeclarativeComponent *delegate() const; @@ -151,9 +157,15 @@ Q_SIGNALS: void pathItemCountChanged(); void flickDecelerationChanged(); void interactiveChanged(); + void movingChanged(); + void flickingChanged(); void highlightChanged(); void highlightItemChanged(); void highlightMoveDurationChanged(); + void movementStarted(); + void movementEnded(); + void flickStarted(); + void flickEnded(); protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); @@ -167,6 +179,7 @@ protected: private Q_SLOTS: void refill(); void ticked(); + void movementEnding(); void itemsInserted(int index, int count); void itemsRemoved(int index, int count); void itemsMoved(int,int,int); diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h index a0d2610..9abec2e 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h @@ -78,6 +78,7 @@ public: , lastElapsed(0), mappedRange(1.0) , stealMouse(false), ownModel(false), interactive(true), haveHighlightRange(true) , autoHighlight(true), highlightUp(false), layoutScheduled(false) + , moving(false), flicking(false) , dragMargin(0), deceleration(100) , moveOffset(this, &QDeclarativePathViewPrivate::setOffset) , firstIndex(-1), pathItems(-1), requestedIndex(-1) @@ -90,15 +91,7 @@ public: { } - void init() { - Q_Q(QDeclarativePathView); - offset = 0; - q->setAcceptedMouseButtons(Qt::LeftButton); - q->setFlag(QGraphicsItem::ItemIsFocusScope); - q->setFiltersChildEvents(true); - q->connect(&tl, SIGNAL(updated()), q, SLOT(ticked())); - lastPosTime.invalidate(); - } + void init(); void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) { if ((newGeometry.size() != oldGeometry.size()) @@ -155,6 +148,8 @@ public: bool autoHighlight : 1; bool highlightUp : 1; bool layoutScheduled : 1; + bool moving : 1; + bool flicking : 1; QElapsedTimer lastPosTime; QPointF lastPos; qreal dragMargin; diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png index 442ba9f..16a7e10 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png index a9ff20f..116ce88 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png index 157bb99..13896d4 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png index 8c49acb..5d18003 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png index eb2bf54..cd3387f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png new file mode 100644 index 0000000..9f31c69 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml index 9595a5c..06d32b6 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml @@ -6,409 +6,437 @@ VisualTest { } Frame { msec: 16 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 32 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 48 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 64 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 80 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 96 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 112 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 128 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 144 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 160 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 176 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 192 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 208 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 224 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 240 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 256 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 272 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 288 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 304 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 320 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 336 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 352 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 368 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 384 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 400 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 416 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 432 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 448 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 464 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 480 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 496 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 512 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 528 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 544 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 560 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 576 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 592 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 608 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 624 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 640 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 656 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 672 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 688 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 704 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 720 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 736 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 752 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 768 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 784 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 800 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 816 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 832 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 848 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 864 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 880 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" } Frame { msec: 896 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "01b9c877f51b878ed262943aedcf89b4" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 623; y: 222 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 621; y: 222 + modifiers: 0 + sendToViewport: true } Frame { msec: 912 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "1c2d4a99e7e2f5e945c05857d6a463a2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 609; y: 230 + modifiers: 0 + sendToViewport: true } Frame { msec: 928 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "d69c0678ce2025a8921b089311d219ea" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 583; y: 248 + modifiers: 0 + sendToViewport: true } Frame { msec: 944 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "55a852b268151d660e4945da88b04022" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 559; y: 258 + modifiers: 0 + sendToViewport: true } Frame { msec: 960 image: "test-pathview.0.png" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 547; y: 264 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 547; y: 264 + modifiers: 0 + sendToViewport: true + } Frame { msec: 976 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "55ab61911405e762b39b38d1371ef845" } Frame { msec: 992 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "be3de45165f2f0916f734fecf3f48c47" } Frame { msec: 1008 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "0a523daec6b591a2b5030c6c0b95cb24" } Frame { msec: 1024 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "22da168e523fa385cce1f2e6a05e1332" } Frame { msec: 1040 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "464cb37780cf126df6dad4169445c7bc" } Frame { msec: 1056 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "666b06a0fbe2d10fbf3e15883a166c60" } Frame { msec: 1072 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "223732cd526e09155ca99c80780bc3fa" } Frame { msec: 1088 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "c74cc48188b05c5426a6b955ed9f09a3" } Frame { msec: 1104 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "8d09a95ab09f87277fcc727e9c5da0fb" } Frame { msec: 1120 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "71b7d4ec45270158ba4ca96817d8f231" } Frame { msec: 1136 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 734; y: 177 - modifiers: 0 - sendToViewport: true + hash: "4847a1e7d792ed58e3476112b02c6fab" } Frame { msec: 1152 - hash: "89bb697bb7b7fab38d3ff56e23e43959" + hash: "ef444a3a960bdc176e004b949e5c89ce" } Frame { msec: 1168 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 732; y: 177 - modifiers: 0 - sendToViewport: true + hash: "1ebf4badb7f4ef3938868a74740fcbce" } Frame { msec: 1184 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 726; y: 179 - modifiers: 0 - sendToViewport: true + hash: "022918cd4b54750b0ad28bcb00108f51" } Frame { msec: 1200 - hash: "89bb697bb7b7fab38d3ff56e23e43959" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 716; y: 183 - modifiers: 0 - sendToViewport: true + hash: "1ea398b2b7c52b35981c98b60d5d7a02" } Frame { msec: 1216 - hash: "42c141399fda1cbb2ae117788d87092a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 700; y: 190 - modifiers: 0 - sendToViewport: true + hash: "05d7619ed0154fa414686522a7ca86c4" } Frame { msec: 1232 - hash: "4d44343eb91838e3eb73e2e5326b5ac2" + hash: "03274e26ea57d1264f21d306533476ef" } Frame { msec: 1248 - hash: "4d44343eb91838e3eb73e2e5326b5ac2" + hash: "5109372d6c62225aaf971aa53c708bee" + } + Frame { + msec: 1264 + hash: "71f10446437963eccb87dd40c172118f" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 708; y: 240 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 677; y: 200 + x: 707; y: 240 modifiers: 0 sendToViewport: true } Frame { - msec: 1264 - hash: "15aaccb4f7961a4e3e6fe57260779d00" + msec: 1280 + hash: "e47426491548162622f9a281c3d062ec" } Mouse { type: 5 button: 0 buttons: 1 - x: 651; y: 209 + x: 685; y: 252 modifiers: 0 sendToViewport: true } Frame { - msec: 1280 - hash: "5628fa3ac9893f5c9690013aad4b881a" + msec: 1296 + hash: "e889fba64d9f94fe18c3750dd6ad9d00" } Mouse { type: 5 button: 0 buttons: 1 - x: 619; y: 219 + x: 635; y: 264 modifiers: 0 sendToViewport: true } Frame { - msec: 1296 - hash: "384db58b6de773ac39ae81e6af4d547d" + msec: 1312 + hash: "7fe200757a6bf752906d195fe341be14" } Mouse { type: 5 button: 0 buttons: 1 - x: 579; y: 229 + x: 569; y: 280 modifiers: 0 sendToViewport: true } Frame { - msec: 1312 - hash: "2a15a27a138b9d3d646b827d026e8843" + msec: 1328 + hash: "aa1f4147dc3fd66f6d9e2605d0759951" } Mouse { type: 5 button: 0 buttons: 1 - x: 535; y: 237 + x: 533; y: 294 modifiers: 0 sendToViewport: true } @@ -416,157 +444,193 @@ VisualTest { type: 3 button: 1 buttons: 0 - x: 535; y: 237 + x: 533; y: 294 modifiers: 0 sendToViewport: true } Frame { - msec: 1328 - hash: "098176f48a148eb2bc5ef67c307baa1c" - } - Frame { msec: 1344 - hash: "f838ab4301bf9d3106cec529f855cecd" + hash: "2b7163ea45860cf81f208c2b68c418b5" } Frame { msec: 1360 - hash: "9725322067a04f83717b059d4970d610" + hash: "a89bd1204fb17d9d8ce7b7f4279e9b1f" } Frame { msec: 1376 - hash: "3605cfbebc3a9eb4460efb2d4b9b6da2" + hash: "683e52637fd5d96ded35f5ade9679822" } Frame { msec: 1392 - hash: "4503a368d8db25d112503dbc3934541d" + hash: "2aa16f06e8bed201746558b1003f7d63" } Frame { msec: 1408 - hash: "80894cc06c82264bf527398ea235da12" + hash: "f2e40e75ddb8004917ae5b8cf144a322" } Frame { msec: 1424 - hash: "d4f9b90f886fc667309b33c9a296410c" + hash: "0f7f64373b065a454c02c32c52a5ef79" } Frame { msec: 1440 - hash: "889d01025cff679b61bff182a1ac9cbc" + hash: "fb4fbd2b3696bfb6135797b1f0158b5c" } Frame { msec: 1456 - hash: "6147bc4455e7cb5ae55cd47be8dc4ad6" + hash: "7a8eafad65ff191a97dcf910393ba4e4" } Frame { msec: 1472 - hash: "ddd10a294eb6b19698c4e9fe4f1508fe" + hash: "3362deae62ba96853d85827f21cec589" } Frame { msec: 1488 - hash: "748e8d9c1971f6258acee5133b7f114b" + hash: "0653838fa3fb5b32e561adc20becc9d2" } Frame { msec: 1504 - hash: "1ef3f32ec9ef950588266bacbe3554a0" + hash: "482e78e6b54cabe007f7e7f4f27a07ee" } Frame { msec: 1520 - hash: "57853ff47b65aba9e76f90b2efec4f8f" + hash: "b51f60864896808c6e41d8a0a990676d" } Frame { msec: 1536 - hash: "3985fea21d89d223c1461d5e96364c76" + hash: "d77e59d69b7c21c82bce9a25d548358c" } Frame { msec: 1552 - hash: "cb5f6a3caeeaed12e91efe43867f2c1f" + hash: "b3dddbb1eee0e2f222434511073c4620" } Frame { msec: 1568 - hash: "cdd4176776d5969373e0fc9a117e3c87" + hash: "d5e0d191582291b269b9e93241d9ac03" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 637; y: 218 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 621; y: 240 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 613; y: 248 + modifiers: 0 + sendToViewport: true } Frame { msec: 1584 - hash: "3bac2e7506472db2ae11734240f1c3f4" + hash: "8c12000da88abb70cbc370d2a2ca21d7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 551; y: 288 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 551; y: 288 + modifiers: 0 + sendToViewport: true } Frame { msec: 1600 - hash: "bb572659d79ebda7134c039e40cf2633" + hash: "2854533fd50f5ebb8fc43cf0041883e4" } Frame { msec: 1616 - hash: "e610181bfa17a85281f9c7417088f04f" + hash: "0b3782e842a6c54585d6a266314025d8" } Frame { msec: 1632 - hash: "eb23ff021909589b6d8ce47ebff2c3ed" + hash: "02409885b82ebac931df18d8e23238d7" } Frame { msec: 1648 - hash: "c321dda3878c4b97cc63246c47368224" + hash: "edcbd91ad267c125c431367be3e4a8a3" } Frame { msec: 1664 - hash: "6a65cdfd50e1455356040d4cbc09905e" + hash: "47641fd7ec919b3c041c5acc04b0d083" } Frame { msec: 1680 - hash: "f2a44b12e4e5bae8283c4d227949e4e8" + hash: "ea8f026fee0fba2c27a8df1e1e531acb" } Frame { msec: 1696 - hash: "55418d661f3257b5b79a7dbb172b5b70" + hash: "e2e8a398760be380f9b2b7dbcb03c0e8" } Frame { msec: 1712 - hash: "483d7111c86951918746d6ebe0dd9655" + hash: "a1767f2e10f9ab87050ef246a4a29bbb" } Frame { msec: 1728 - hash: "85c83ac3a294a9320bb04a6721ecf7d5" + hash: "f60cccf793bd6d356d69b1394638a201" } Frame { msec: 1744 - hash: "0d658b897b8e03397ddd8ffe475c2fc0" + hash: "31dc8c50a99164c19445a089223c8813" } Frame { msec: 1760 - hash: "6ed9d7ea344b3c1b1d9196ee36b2f89a" + hash: "78ff726b7da5ba03fa74f66b39bf1006" } Frame { msec: 1776 - hash: "6a1e7f6c03769c2c88e6343fb6c1a2a4" + hash: "6f8a540dccf7182f6aed8903a0afb109" } Frame { msec: 1792 - hash: "9dc51f46e072eac4494d7318f2ecb39b" + hash: "c914c500507b9c7180dcf25e985135e9" } Frame { msec: 1808 - hash: "59e833981c3fcd8a71f4a16d1c454b3a" + hash: "39702ce38bcfca46ef3a8dbb7299c725" } Frame { msec: 1824 - hash: "29b953efdda00548d8cf6fb49fa60d13" + hash: "969b71ee88a1d244e62af1cecc105234" } Frame { msec: 1840 - hash: "fd4611f703f94ebefcc64781993ca85c" + hash: "11c8397fb9d7b993761b08ba8c9958e5" } Frame { msec: 1856 - hash: "aa4789ede618963157b40f099ce84987" + hash: "79ad4a90ab449e3232db993b30786d89" } Frame { msec: 1872 - hash: "8a326b46ec536a67626ee2d2bc06aa9f" + hash: "daf979fd50e0860bf30f377a059d89dc" } Frame { msec: 1888 - hash: "011ff557672d47591e4f0f5c5ee418f1" + hash: "5412e7524dc22e8064c8a8c684092802" } Frame { msec: 1904 - hash: "d72fba857bdc128ddcb5971b86aadcb2" + hash: "2c3bea8bf10ecf6c19b93e94cb7ac0ea" } Frame { msec: 1920 @@ -574,807 +638,919 @@ VisualTest { } Frame { msec: 1936 - hash: "49182b7ae9ef5fb4b9234969abd05960" + hash: "bbfa2f8aaab0abaff9d771d5ec546d96" } Frame { msec: 1952 - hash: "53de60f682574b7a9e6ffaee175fc9ff" + hash: "be2811bf369bc9dd8c5d9deec3b84788" } Frame { msec: 1968 - hash: "2de74fe5b8848c5c781b796146871f45" + hash: "779838915f48eb917d36c3f2b65eedae" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 595; y: 236 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 565; y: 256 + modifiers: 0 + sendToViewport: true } Frame { msec: 1984 - hash: "33c87146d8c24dd9c2271d16a8ff5b53" + hash: "d20b5fe14b47dfb1e73f8ef44802da11" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 507; y: 286 + modifiers: 0 + sendToViewport: true } Frame { msec: 2000 - hash: "fdb29214e20d744d9776907061f50358" + hash: "5312dd1f9d309ab5134b8bb67685488e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 461; y: 288 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 461; y: 288 + modifiers: 0 + sendToViewport: true } Frame { msec: 2016 - hash: "8c7c920416c9b775e790e6da24c32927" + hash: "8d6b6cbb74cc654bc5aff10a807dd3cb" } Frame { msec: 2032 - hash: "86b456059e4701379447fffaf9e072f0" + hash: "dee717869177d1de4a26599b120f1c3d" } Frame { msec: 2048 - hash: "f92cc485ee03ef5bce3c4cdc35e00318" + hash: "2b2c60f42024784ceed5c68505dfa5ca" } Frame { msec: 2064 - hash: "2fad58883cb20273cfd79ebca345a66d" + hash: "1a6a108fd6cf607ec08dbedd804d12f7" } Frame { msec: 2080 - hash: "84505ebbc6e12817f11f64aa6f61a0bf" + hash: "10bc4d0a1dc400fedc9a68b68c6525fd" } Frame { msec: 2096 - hash: "ded83cacb89838cc0f3ba14bcc69b66b" + hash: "dc6a4abfbfb38e90af2308320d0f795b" } Frame { msec: 2112 - hash: "5bb37e75bb45eaa6067c604b83ae13d7" + hash: "82c61d8461001c19af7c2b458d427e0b" } Frame { msec: 2128 - hash: "4ee9e4c90c40dbc25a0ce884d9c2c37f" + hash: "e455d9ccffedaa708532bb69ad15871e" } Frame { msec: 2144 - hash: "cb7148ff6f611038c29af36c8552b8c2" + hash: "b9c6169ad08724fc70df30668dfe7509" } Frame { msec: 2160 - hash: "a591d8cb42570272dd264d5f1ce595ab" + hash: "a3fe5862be470470854d4157c1c027db" } Frame { msec: 2176 - hash: "4e61657405d32dbcd39d3637f8af0958" + hash: "6a3804bd5f4fd5f1c424615ceb620525" } Frame { msec: 2192 - hash: "9c7c1411dd5d3c1c8fb78e63e14061fe" + hash: "df0d72248310654a9cf47e707fe9e414" } Frame { msec: 2208 - hash: "ae83a37e99b578fa0872ed6bc2776bc0" + hash: "beb19f2b2979ab40b5ccf8c0fbe9b72f" } Frame { msec: 2224 - hash: "e8cb5a8a40c1e78c87c616f77d8de270" + hash: "be3449b49048b764bea68a76baa0fc75" } Frame { msec: 2240 - hash: "9df093e4bcfa32be5924a0ca70bdaa3b" + hash: "4a615cae9c8f85e7b8aecd4c9014f1eb" } Frame { msec: 2256 - hash: "40c358066d508143bee1446d12fe7b89" + hash: "b3c274f1a9d65684c0a55a544bf77810" } Frame { msec: 2272 - hash: "a929ed6efc7fc68b38635f3c74242f52" + hash: "31456b01fcfb60a77d2b9662c2fff7b6" } Frame { msec: 2288 - hash: "86ff721a3178b689ea47b6bc274a2b41" + hash: "2be5cf3f6158bf09659acc68b134846f" } Frame { msec: 2304 - hash: "ed1f680f6d05f54ceb75c9bae3a0716a" + hash: "5f9c725a11305f3e6c48ab332faabf50" } Frame { msec: 2320 - hash: "3f09a565df2beb51f366a1b3fb6adfe9" + hash: "277c2733c7245d045665198984b74224" } Frame { msec: 2336 - hash: "13468347bd26bab60f1db826fb17631c" + hash: "265b8342bc747fb43a5291df0f4ce48b" } Frame { msec: 2352 - hash: "9f7d085fea5788a457098973f17c36cb" + hash: "803b49ec31955b481009a51c64bcce65" } Frame { msec: 2368 - hash: "4114b93246155b3434200831b2995330" + hash: "a717b30ad50746cdf0fae82212ac88f0" } Frame { msec: 2384 - hash: "487171bd1430f74e3d51b5e215c34b5c" + hash: "65f46c8e69f24d060b5da6f866867f51" } Frame { msec: 2400 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "52f9e5d1106d00a950470076a50e4239" } Frame { msec: 2416 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "058a787aae2845308e68bb93f6a811e4" } Frame { msec: 2432 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "621985111c25994c0c0fe3635be67c1d" } Frame { msec: 2448 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2949b8185cefbaaf587a043d805cc670" } Frame { msec: 2464 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "d4a03127ae5047184c736617deeac92d" } Frame { msec: 2480 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "876c6c5ac4500de6234423bf6f3511d6" } Frame { msec: 2496 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "eb08aa172cfbdb696b6f672dfa7b6fff" } Frame { msec: 2512 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a60c13b8f46faa0a35dbb539010550d4" } Frame { msec: 2528 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "c6f8786506e0326a5734ab8aea782f95" } Frame { msec: 2544 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a49927f2aae24e692fc379f0ab6f4ee9" } Frame { msec: 2560 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2f1a2d50e1090b34ad1ea6a36eec4fe0" } Frame { msec: 2576 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a5ee24d37be960a88684748b73dc75fe" } Frame { msec: 2592 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "28682389395b47ae33ceec1ba3beef4e" } Frame { msec: 2608 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "1869667b50b76d99716dd0d7849901fa" } Frame { msec: 2624 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2806ee1005193f55825aa6147583985f" } Frame { msec: 2640 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "c00589dce90e3ab2f2c8890f30f80d3d" } Frame { msec: 2656 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "1f1881f0a29525e380ecbcce15499fa4" } Frame { msec: 2672 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2a4c3ff764545a3899c864680f22f0a3" } Frame { msec: 2688 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2704 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2720 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2736 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2752 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2768 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2784 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2800 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2816 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2832 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2848 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2864 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "2685820514ce5d5729f3761b1eaa1682" } Frame { msec: 2880 image: "test-pathview.2.png" } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 310; y: 277 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 324; y: 279 + modifiers: 0 + sendToViewport: true + } Frame { msec: 2896 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "ce00c77e8ff1768b41f5585344af1c58" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 330; y: 281 + modifiers: 0 + sendToViewport: true } Frame { msec: 2912 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "24f401275fa6ec7d26234609792fe0b8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 346; y: 283 + modifiers: 0 + sendToViewport: true } Frame { msec: 2928 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "d3c74863c627a1b922a6b6c4a24f8c40" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 358; y: 285 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 358; y: 285 + modifiers: 0 + sendToViewport: true } Frame { msec: 2944 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "64a3209e6adc737065e5d5c3202a7283" } Frame { msec: 2960 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "cf936ffe4330edefddb31c59368491fc" } Frame { msec: 2976 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "a67213db044bb876f737cd355fe54444" } Frame { msec: 2992 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "0f9e97057cbbd8071e0f5f61318bdf9c" } Frame { msec: 3008 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "c5f38d334df86ebb6ac4600c83eced20" } Frame { msec: 3024 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "6d8e6049a36eac4136dbdb5fb18d0650" } Frame { msec: 3040 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "8ee97cff4a632e6e297bd3bdac27b8d4" } Frame { msec: 3056 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "aca1fcd005d211d35245e64a44002c01" } Frame { msec: 3072 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "7076180bf0eb14a5e733be9320f1f009" } Frame { msec: 3088 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 728; y: 181 - modifiers: 0 - sendToViewport: true + hash: "e0a0545b3a0b6a0b07d3fa987e1d58b6" } Frame { msec: 3104 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "0294b098ce7f0d381542776320e52d2e" } Frame { msec: 3120 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" + hash: "36f8bcc42add38fe149e34a703cf8a02" } Frame { msec: 3136 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 727; y: 181 - modifiers: 0 - sendToViewport: true + hash: "631426bde50fd35d1da1c30d9878253e" } Frame { msec: 3152 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 723; y: 181 - modifiers: 0 - sendToViewport: true + hash: "a4d64c9d378138bedf63389e58d8f1d6" } Frame { msec: 3168 - hash: "7ba9783ce63db6ad6b5f725a4ecd4eb8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 717; y: 184 - modifiers: 0 - sendToViewport: true + hash: "17fdf61bffd947c2e9898f5c4517fdf8" } Frame { msec: 3184 - hash: "6dcec6cdaa35eba74607ba64d6ea2ec0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 705; y: 188 - modifiers: 0 - sendToViewport: true + hash: "653b8c7a55bc4ca763238098711eafa1" } Frame { msec: 3200 - hash: "16b7b4847fe86b25d8d6136106a4c400" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 686; y: 197 - modifiers: 0 - sendToViewport: true + hash: "89e15b3ee1b1fc945801e08cfcdba62c" } Frame { msec: 3216 - hash: "d946d55b19c99fa25bf1c04f2b71026a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 661; y: 207 - modifiers: 0 - sendToViewport: true + hash: "7ea615af67336895e6cee6d3a39ff7de" } Frame { msec: 3232 - hash: "96f40f5071365cde769c733fd1ef5a24" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 626; y: 221 - modifiers: 0 - sendToViewport: true + hash: "88faee45db80f04ef1120c35057a5f7d" } Frame { msec: 3248 - hash: "7004058b95b7eab3ebba5c80c0923982" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 582; y: 235 - modifiers: 0 - sendToViewport: true + hash: "8cfe34047b29ac85e58d55e0f6e0b195" } Frame { msec: 3264 - hash: "2c78880237c414182f97f1709f1eef0f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 532; y: 246 - modifiers: 0 - sendToViewport: true + hash: "39255546502fcb882005fe4c38c21fb0" } Frame { msec: 3280 - hash: "c90a15ec9f88008ca8b0ec0185444d71" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 532; y: 246 - modifiers: 0 - sendToViewport: true + hash: "6bf7a959a05fc27f651b2a3ba07de30d" } Frame { msec: 3296 - hash: "c90a15ec9f88008ca8b0ec0185444d71" + hash: "c2c61cb8dbbbd38827277ab32579c6da" } Frame { msec: 3312 - hash: "36461e2a4cd860cac32223b8ee73c657" + hash: "ff370d4b4e44c4cbacca96107105df21" } Frame { msec: 3328 - hash: "5f9b3ad9202fb02a4c6fea28c248ad22" + hash: "ccadd9e070d54de21c76397d18ad3de8" } Frame { msec: 3344 - hash: "d0d23c4e1ddb2d9ffa0ecc38030ae15c" + hash: "6302c39de00070b0a23f9dc87f74dd8d" } Frame { msec: 3360 - hash: "8e2e2d3eaf557c453f34016b6614e495" + hash: "7ab69e6d9809c78dc723609bd2761206" } Frame { msec: 3376 - hash: "7402c747fa7276293a0a72d48d342782" + hash: "c429cc724b39891805cf4c1448de60b3" } Frame { msec: 3392 - hash: "6090c30e4d722a32c083a25171fb11ff" + hash: "396ddf0b01e9fe7c2bfb220e64a0c7ec" } Frame { msec: 3408 - hash: "f770d940cf287fec4b0803f7310292a8" + hash: "7a519a4efeecef5e7623a270e458fb13" } Frame { msec: 3424 - hash: "558e4ce32df69357b70a8285b00fe347" + hash: "869d174a939e0638a1a22d5c8a010c14" } Frame { msec: 3440 - hash: "8814168503c9a72ea8d3fa1e503f33d9" + hash: "9ecd2cf4e3b42ff93bcbf4db9829666c" } Frame { msec: 3456 - hash: "6f5513d22e545096fadc6f5c4112902e" + hash: "b06b58b250d3df365806a3f8991d57f3" } Frame { msec: 3472 - hash: "43f11d8ac16fd3e8199e555528817e14" + hash: "7a6fb03feb2ae0af1f143daedd22a88b" } Frame { msec: 3488 - hash: "d64bafdbd26878a323dae918d5e0a36d" + hash: "e9fe338dbe7afb69f3870743b0a18805" } Frame { msec: 3504 - hash: "1c70bdddfc3751ae3864f008170f8b06" + hash: "04b8def2085e9ce4065b02b938915557" } Frame { msec: 3520 - hash: "bb7a18691fcd371e9d382b5bba4a0573" + hash: "7e6942f72012875ba83a1c9121e1f786" } Frame { msec: 3536 - hash: "547e15f5dea2d9aa3ed44640b25028b9" + hash: "291e2d79a79959d9c8c586b6bdc31689" } Frame { msec: 3552 - hash: "c11b86a256fac6be10b9a54564903d6f" + hash: "e490bc7fd92f486b964cca967bd33b38" } Frame { msec: 3568 - hash: "0ada2dc586894d5e37de2632d2b37b15" + hash: "0c9858e0445e25d2b12c84801de441cb" } Frame { msec: 3584 - hash: "0ae1a39ea196a0e734d80dbdea67b285" + hash: "72ba7a4aacb150e1e9c6de72cff82258" } Frame { msec: 3600 - hash: "3cb70e64f9ab8aad841326dc2d2f1615" + hash: "1daca95256842545a5b77bcc46782478" } Frame { msec: 3616 - hash: "a8f8b5ff19df9163ea628b589b675a5e" + hash: "869f3d16e203ad47f1ae7ca83e369b75" } Frame { msec: 3632 - hash: "26fcc73f477db0ea731bc18b00b4c791" + hash: "9cc9cb20aab3369f4e3c5259d291708c" } Frame { msec: 3648 - hash: "8702e49f3f26e1e21970e78c8aa4040a" + hash: "a507b957bab3efe2023a65f8c8b3540a" } Frame { msec: 3664 - hash: "1a482a39d02779d8733e348b713f2312" + hash: "9fce2a6cddd8b06a80ce16599b56caa6" } Frame { msec: 3680 - hash: "c728cc4a8e4d0a8d983514f86a92eae0" + hash: "2f85d3064968e3e7b669f733fad58459" } Frame { msec: 3696 - hash: "82360ab373b08bf6a5d9e9ea9d0d18aa" + hash: "6dd6fad85dc5317a22a05a8486317767" } Frame { msec: 3712 - hash: "6231a4bce6cfc1e26a9606cc041acdbc" + hash: "b0faa2ec225cd96fb6d2fd05dc66bed1" } Frame { msec: 3728 - hash: "6e3b48862fc749f15aa2dec1c17d1de0" + hash: "3188219f095c2a9ac7c0f6034463d769" } Frame { msec: 3744 - hash: "6c9e79a5692a3810b2a9058790f54cd7" + hash: "b269e9fe4d14537c8bef0b66effe7319" } Frame { msec: 3760 - hash: "0652c67fedda0d5e55858ddefff2da9e" + hash: "b269e9fe4d14537c8bef0b66effe7319" } Frame { msec: 3776 - hash: "3b058c0efeb3a9da54a1de72a1792a83" + hash: "b269e9fe4d14537c8bef0b66effe7319" } Frame { msec: 3792 - hash: "96e6fb39c8dbfe4a00bf116bf80aac4d" + hash: "b269e9fe4d14537c8bef0b66effe7319" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 174; y: 234 + modifiers: 0 + sendToViewport: true } Frame { msec: 3808 - hash: "979c0c78c41e0f337cfe1b384fbbe51a" + hash: "9480eb8761d4ce90971903fcfab1e09e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 176; y: 236 + modifiers: 0 + sendToViewport: true } Frame { msec: 3824 - hash: "8be0d6987a6d12864f30336b249e4b16" + hash: "30a6ac631e1a3433f252f56ee4337cdc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 179; y: 238 + modifiers: 0 + sendToViewport: true } Frame { msec: 3840 image: "test-pathview.3.png" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 184; y: 243 + modifiers: 0 + sendToViewport: true + } Frame { msec: 3856 - hash: "31e665f804a52a4dc88eab5dba78ae5a" + hash: "ed07f9eea6cd2cd78a3e2479137f843d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 185; y: 244 + modifiers: 0 + sendToViewport: true } Frame { msec: 3872 - hash: "b7d4cf5a6a3ac79da3be101b50b38bc2" + hash: "7a5b201cc8725dbf15d89907fffd4ee3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 250 + modifiers: 0 + sendToViewport: true } Frame { msec: 3888 - hash: "559b1b8467b611cdeb7f2ae660e3bf51" + hash: "bc2433b9e5f03cdbd35922d145a4ce59" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 213; y: 256 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 213; y: 256 + modifiers: 0 + sendToViewport: true } Frame { msec: 3904 - hash: "66abb5af85e793569382efb04744d0de" + hash: "d443f23aa5449d5f2b11c47feab5a0ae" } Frame { msec: 3920 - hash: "b64eff8bbea5a953d146333363825724" + hash: "c43f00d3ae4c8abbd20fc7157363b19d" } Frame { msec: 3936 - hash: "47b794c971c4d47baf15e1d63d65ac03" + hash: "22d6f5e9fdfe44e73020e6f504002b7c" } Frame { msec: 3952 - hash: "b3882fa14f3cb7428c660737656d7ea2" + hash: "4a9a285834aad5795adbefbe167028e2" } Frame { msec: 3968 - hash: "a6bd71c7d3a0f3f53674ea8e1334e560" + hash: "561a6c005950830acf2a45ab9a207346" } Frame { msec: 3984 - hash: "0926d3cd53aabb789686e34d91ef23dc" + hash: "b0387e3cfd455e1144d0bce9b51d6767" } Frame { msec: 4000 - hash: "914c4fa7264111b4a42c82a60701d652" + hash: "610237f67aa7e5f8d5b363b1612b4966" } Frame { msec: 4016 - hash: "84c1fa22440a61126b79c38605b6f9ca" + hash: "8034a5a7e0558d73051ea6c5bc750866" } Frame { msec: 4032 - hash: "b684fcf9f4725cfc02af0187454dfaf8" + hash: "0e4dc8a9c124b51c5f1225f4c6a9ec63" } Frame { msec: 4048 - hash: "2e94c1ca74af4eb836a0c505d131f263" + hash: "dc4e94522e8c64e9f2dbbf12a1f1aa3e" } Frame { msec: 4064 - hash: "5f04912674e1bcdb16176976d10ce995" + hash: "7466c076a95f2f6bbc2b6ce306773337" } Frame { msec: 4080 - hash: "aaf0bcef4a15aa1c699eaa1ce817c8ed" + hash: "787e2749905b97159fd0922c6cb388e2" } Frame { msec: 4096 - hash: "97fd5bdcfa367191fbd3689658ab3273" + hash: "1e510d01afad190ec21de253bd8b4821" } Frame { msec: 4112 - hash: "d76d6c59411636a0e9ac2e0c847b3fe3" + hash: "d740f40eb21be71ec70c00411d2ee76b" } Frame { msec: 4128 - hash: "9cb88a76c962623b1a9cf4e7093d6e54" + hash: "887a6f445af8fccf4932eed575a09cbb" } Frame { msec: 4144 - hash: "ec3d7075680296905b1bdd6fdd9fcc40" + hash: "fbb7e1d8cb9dd9016df0c33c69b1451a" } Frame { msec: 4160 - hash: "43c70dabc45ed059e8b876eb2ba5c66e" + hash: "5025e5f04a0807cb298037d6dda8c3af" } Frame { msec: 4176 - hash: "8f97ca5c3092a20009c5d00139105a22" + hash: "b9924f24f60c24087be165e8e385ebb0" } Frame { msec: 4192 - hash: "d0f225d4b03495218f7916698e254338" + hash: "2bab970787ac8b056401c8a73cb1a3c5" } Frame { msec: 4208 - hash: "f8725467353a8f27bc5570af157c93c7" + hash: "bda954bfafaa2915d760cf7a602b326f" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 187; y: 242 + modifiers: 0 + sendToViewport: true } Frame { msec: 4224 - hash: "749c8ca5c0a7774c81805b792e6b70e3" + hash: "9b109bb9e786a45a78849436ea32a484" } Frame { msec: 4240 - hash: "d353c4a8a5eecb1dce30f4a5b85b1ef4" + hash: "9b109bb9e786a45a78849436ea32a484" } Frame { msec: 4256 - hash: "a7105f3f1ddace730d0b4a12a3560208" + hash: "9b109bb9e786a45a78849436ea32a484" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 243 + modifiers: 0 + sendToViewport: true } Frame { msec: 4272 - hash: "918f480af8a35f6074ff1e202dae2660" + hash: "9b109bb9e786a45a78849436ea32a484" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 199; y: 252 + modifiers: 0 + sendToViewport: true } Frame { msec: 4288 - hash: "ed98d08eb30db1b41aaf2a58f3b59398" + hash: "cc3c61f49a7b3c395670b86c8078a337" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 223; y: 262 + modifiers: 0 + sendToViewport: true } Frame { msec: 4304 - hash: "c362cf053b3749a44d1fc33483f9952b" + hash: "464d09b53b78fe5474d9c1d022bee9fd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 251; y: 272 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 251; y: 272 + modifiers: 0 + sendToViewport: true } Frame { msec: 4320 - hash: "9b01b2c771ef86ff4a8ee3f6a4676e3c" + hash: "aab17f48ff506cda84543cbe0d8a1ce4" } Frame { msec: 4336 - hash: "70ccec3c9db95206b5589d43dcd52b13" + hash: "b7ba6c107f4085822a738120a913ba0c" } Frame { msec: 4352 - hash: "57e7397c6aadd0d4d5c9d9d5fcdd8fde" + hash: "751b79e202a70dcc9a86c3a1450172b8" } Frame { msec: 4368 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "bb03f969fd6987255ff113ef98ed2bb1" } Frame { msec: 4384 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "c33302b366441fa2d8753d5ce314cd37" } Frame { msec: 4400 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "4cdf32004382bcaca5a68cb92761caa2" } Frame { msec: 4416 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "d3fe18ea7dcbee0709a2041e50b87154" } Frame { msec: 4432 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "ac58a7adb0e7a354a058d7e9a7010c06" } Frame { msec: 4448 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "bdf8a8934a372ab49f4b6e9c95c7f591" } Frame { msec: 4464 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "d2e8b417b74ec5f6e23f0935a4d0aa98" } Frame { msec: 4480 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "0f94c6ca3ffbd730c2d813a991d21ca3" } Frame { msec: 4496 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "fb7728eebb2fa8f5255dc7435d20bbb6" } Frame { msec: 4512 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "c8211e8adcef525c296531a3d369f717" } Frame { msec: 4528 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "f24de36c85b87953977fa8b6456209dc" } Frame { msec: 4544 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "9ce7cf389af08cb1ba2534418f51857b" } Frame { msec: 4560 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "17d1f3ae0dba0bde222bb2483a403fbd" } Frame { msec: 4576 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "1748d75e229945012ece689b3784a02c" } Frame { msec: 4592 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "6786fa9e31d6f0a71a285c790aa5b008" } Frame { msec: 4608 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "f2a2ba33b41d8d522e8aab34c7da8f7b" } Frame { msec: 4624 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "aa53142d1b433ae9f748aef5cb7bef46" } Frame { msec: 4640 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "9c6802b2b0a419a4aaf9909c0f88c66e" } Frame { msec: 4656 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "206b11f2acd742d55ddd8acf7415bbeb" } Frame { msec: 4672 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "36876cf600cbf9c3b15f243617c9474e" } Frame { msec: 4688 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "1f5daf97294b490546657c5d9e12022e" } Frame { msec: 4704 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "637fc34fc2cf6139ba8809be54a2a0fc" } Frame { msec: 4720 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "9f824bd9e156980873619b1978f226bb" } Frame { msec: 4736 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "7002444129a5077ce5be44a5e2530328" } Frame { msec: 4752 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "42b7a44030ad4fc50ceb6a60bc97991e" } Frame { msec: 4768 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "ae986cac541033398076fb918136212e" } Frame { msec: 4784 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "6bdd9f764b1675e5b0feced8c2d831a6" } Frame { msec: 4800 @@ -1382,114 +1558,278 @@ VisualTest { } Frame { msec: 4816 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "07dfffe85adc4b52565e9ed156fa3ed6" } Frame { msec: 4832 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "c987bbe9fbf74bb6cf2686a5ee97c59a" } Frame { msec: 4848 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "19568159ec2282d5f150583baa0a8a94" } Frame { msec: 4864 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "5b176ef6bf70ff1a9805ca85b1b0c1a2" } Frame { msec: 4880 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "de716a8c15a46bf1621878794e968c53" } Frame { msec: 4896 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "241af9ab77c86cdb75f73339548604ad" } Frame { msec: 4912 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "afc7168ecb7fa7e3310ca818b75f7a1c" } Frame { msec: 4928 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "83bff911b502a34d139a724f686bb1f9" } Frame { msec: 4944 - hash: "299b24eae7720e1711744b23335bca8c" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "f4d3fb54ae5be2b13065cd4316b06837" } Frame { msec: 4960 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "d29c7dfedf9dd355d60e394528b3b938" } Frame { msec: 4976 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "ddf23d860ea71ab4b407de1a5f913f74" } Frame { msec: 4992 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "a0dbb6ecbfd08f9ebdd641fea5dae16c" } Frame { msec: 5008 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "7ed3170e55e3c3c9561959ad4c56d326" } Frame { msec: 5024 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "dbde5f508aabc2d1f2ccfaf135efeca9" } Frame { msec: 5040 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "72039739be41bf63b3959bdc90ce25bb" } Frame { msec: 5056 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "417789daefe6bc01320db7803ae31d61" } Frame { msec: 5072 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "7e57dbddaf379f4316182048fa9e2d6f" } Frame { msec: 5088 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "aeca9a4df94d2b9ac2a713531a7d98f1" } Frame { msec: 5104 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "98ad6694f23678819020d6ac0161651c" } Frame { msec: 5120 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "b6eba3872da19ec677eee419ae9cccbc" } Frame { msec: 5136 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "e824909bfe7b6d54773bb218ba93e884" } Frame { msec: 5152 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "3be04f3ff6d948538f4472bc6bfadb0f" } Frame { msec: 5168 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "e05ff21dda1d978a2ac2eedd3826b6f7" } Frame { msec: 5184 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "8ee970b2b197c8d879a7b1703cbd4dcd" } Frame { msec: 5200 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "e583845e7719d2776c6362c34f77937c" } Frame { msec: 5216 - hash: "299b24eae7720e1711744b23335bca8c" + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5232 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5248 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5264 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5280 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5296 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5312 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5328 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5344 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5360 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5376 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5392 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5408 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5424 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5440 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5456 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5472 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5488 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5504 + hash: "593fd590531ccfb59d890b8043eaab9c" + } + Frame { + msec: 5520 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5536 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5552 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5568 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5584 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5600 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5616 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5632 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5648 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5664 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5680 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5696 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5712 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5728 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5744 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5760 + image: "test-pathview.5.png" + } + Frame { + msec: 5776 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5792 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5808 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5824 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5840 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5856 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5872 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5888 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" + } + Frame { + msec: 5904 + hash: "c0d0f62d9078f6be493d5545a2ae78ad" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml index 3bcab5a..e6e1a70 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml @@ -59,4 +59,9 @@ Rectangle { PathAttribute { name: "angle"; value: 45 } } } + + Column { + Rectangle { width: 20; height: 20; color: "red"; opacity: photoPathView.moving ? 1 : 0 } + Rectangle { width: 20; height: 20; color: "blue"; opacity: photoPathView.flicking ? 1 : 0 } + } } -- cgit v0.12 From 0353efbbb97cf0225bc3f9771e6dca366c30aaa1 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 29 Jul 2010 16:20:54 +1000 Subject: Add missing \l doc commands (cherry picked from commit c2a22048a045f4e3d03b3251bc9af486250657e4) --- doc/src/declarative/focus.qdoc | 2 +- doc/src/declarative/qdeclarativei18n.qdoc | 2 +- doc/src/declarative/qdeclarativestates.qdoc | 2 +- doc/src/declarative/tutorial.qdoc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/declarative/focus.qdoc b/doc/src/declarative/focus.qdoc index e3ca963..56ea165 100644 --- a/doc/src/declarative/focus.qdoc +++ b/doc/src/declarative/focus.qdoc @@ -266,7 +266,7 @@ When a QML item explicitly relinquishes focus (by setting its does not automatically select another element to receive focus. That is, it is possible for there to be no currently \e {active focus}. -See the {declarative/keyinteraction/focus}{Keyboard Focus example} for a +See the \l{declarative/keyinteraction/focus}{Keyboard Focus example} for a demonstration of moving keyboard focus between multiple areas using FocusScope elements. diff --git a/doc/src/declarative/qdeclarativei18n.qdoc b/doc/src/declarative/qdeclarativei18n.qdoc index b6e6c6e..70a3587 100644 --- a/doc/src/declarative/qdeclarativei18n.qdoc +++ b/doc/src/declarative/qdeclarativei18n.qdoc @@ -80,5 +80,5 @@ qmlviewer -translation hello.qm hello.qml \endcode -You can see a complete example and source code in the {declarative/i18n}{QML Internationalization example}. +You can see a complete example and source code in the \l{declarative/i18n}{QML Internationalization example}. */ diff --git a/doc/src/declarative/qdeclarativestates.qdoc b/doc/src/declarative/qdeclarativestates.qdoc index 6461925..e7607c6 100644 --- a/doc/src/declarative/qdeclarativestates.qdoc +++ b/doc/src/declarative/qdeclarativestates.qdoc @@ -83,6 +83,6 @@ Other things you can do in a state change: \endlist -The {declarative/animation/states}{States and Transitions example} demonstrates how to declare a basic set of states and then apply animated transitions between them. +The \l {declarative/animation/states}{States and Transitions example} demonstrates how to declare a basic set of states and then apply animated transitions between them. */ diff --git a/doc/src/declarative/tutorial.qdoc b/doc/src/declarative/tutorial.qdoc index 7a97eb1..f913d44 100644 --- a/doc/src/declarative/tutorial.qdoc +++ b/doc/src/declarative/tutorial.qdoc @@ -222,5 +222,5 @@ This is equivalent to writing the two transitions separately. The \l ParallelAnimation element makes sure that the two types of animations (number and color) start at the same time. We could also run them one after the other by using \l SequentialAnimation instead. -For more details on states and transitions, see \l {QML States} and the {declarative/animation/states}{states and transitions example}. +For more details on states and transitions, see \l {QML States} and the \l{declarative/animation/states}{states and transitions example}. */ -- cgit v0.12 From 2fe8d61e251f374ee91e953ededafb415c9f7e46 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Fri, 30 Jul 2010 08:17:21 +1000 Subject: Fix crash on Desktop platforms. Missing check for null networkSession. Task-number: QTBUG-12501 (cherry picked from commit 597a842d66dc04181bfd063863216acbb11ce3bc) --- examples/network/fortuneserver/server.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/examples/network/fortuneserver/server.cpp b/examples/network/fortuneserver/server.cpp index b931b96..4dca38c 100644 --- a/examples/network/fortuneserver/server.cpp +++ b/examples/network/fortuneserver/server.cpp @@ -107,17 +107,19 @@ Server::Server(QWidget *parent) void Server::sessionOpened() { // Save the used configuration - QNetworkConfiguration config = networkSession->configuration(); - QString id; - if (config.type() == QNetworkConfiguration::UserChoice) - id = networkSession->sessionProperty(QLatin1String("UserChoiceConfiguration")).toString(); - else - id = config.identifier(); - - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); - settings.beginGroup(QLatin1String("QtNetwork")); - settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); - settings.endGroup(); + if (networkSession) { + QNetworkConfiguration config = networkSession->configuration(); + QString id; + if (config.type() == QNetworkConfiguration::UserChoice) + id = networkSession->sessionProperty(QLatin1String("UserChoiceConfiguration")).toString(); + else + id = config.identifier(); + + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); + settings.endGroup(); + } //! [0] //! [1] tcpServer = new QTcpServer(this); -- cgit v0.12 From e40d59de735b7cdba07ed770e6b017881a6e4f6a Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 30 Jul 2010 12:59:56 +1000 Subject: Update QML Documents example Task-number: QTBUG-12526 (cherry picked from commit eef2e72976f3f8d10a34c9dfb3f60f40616f4df9) --- doc/src/declarative/pics/anatomy-component.png | Bin 16117 -> 4902 bytes doc/src/declarative/qdeclarativedocument.qdoc | 58 ++++++++++++---------- doc/src/snippets/declarative/qmldocuments.qml | 66 +++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 26 deletions(-) create mode 100644 doc/src/snippets/declarative/qmldocuments.qml diff --git a/doc/src/declarative/pics/anatomy-component.png b/doc/src/declarative/pics/anatomy-component.png index 70ed983..6125b00 100644 Binary files a/doc/src/declarative/pics/anatomy-component.png and b/doc/src/declarative/pics/anatomy-component.png differ diff --git a/doc/src/declarative/qdeclarativedocument.qdoc b/doc/src/declarative/qdeclarativedocument.qdoc index a2ed205..f12e547 100644 --- a/doc/src/declarative/qdeclarativedocument.qdoc +++ b/doc/src/declarative/qdeclarativedocument.qdoc @@ -73,51 +73,57 @@ document - such as \c Rectangle and \c ListView - including those made within an import statements. QML does not import any modules by default, so at least one \c import statement must be present or no elements will be available! + +\section1 Documents as Component Definitions + A QML document defines a single, top-level \l {QDeclarativeComponent}{QML component}. A QML component is a template that is interpreted by the QML runtime to create an object with some predefined behaviour. As it is a template, a single QML component can be "run" multiple times to produce several objects, each of which are said to be \e instances of the component. Once created, instances are not dependent on the component that created them, so they can -operate on independent data. Here is an example of a simple "Button" component that is -instantiated four times, each with a different value for its \c text property. +operate on independent data. Here is an example of a simple "Button" component (defined +in a \c Button.qml file) that is instantiated four times by \c application.qml. +Each instance is created with a different value for its \c text property: -\raw HTML -<table><tr><td> -\endraw -\code +\table +\row +\o Button.qml +\o application.qml + +\row +\o \snippet doc/src/snippets/declarative/qmldocuments.qml 0 +\o +\qml import Qt 4.7 -BorderImage { - property alias text: textElement.text - width: 100; height: 30; source: "images/toolbutton.sci" - - Text { - id: textElement - anchors.centerIn: parent - font.pointSize: 20 - style: Text.Raised - color: "white" - } +Column { + spacing: 10 + + Button { text: "Apple" } + Button { text: "Orange" } + Button { text: "Pear" } + Button { text: "Grape" } } -\endcode -\raw HTML -</td> <td> -\endraw +\endqml + \image anatomy-component.png -\raw HTML -</td> </tr> </table> -\endraw + +\endtable Any snippet of QML code can become a component, just by placing it in the file "<Name>.qml" -where <Name> is the new element name, and begins with an uppercase letter. Note that +where <Name> is the new element name, and begins with an \bold uppercase letter. Note that the case of all characters in the <Name> are significant on some filesystems, notably UNIX filesystems. It is recommended that the case of the filename matches the case of the component name in QML exactly, regardless of the platform the QML will be deployed to. -These QML files automatically become available as new QML element types +These QML component files automatically become available as new QML element types to other QML components and applications in the same directory. + + +\section1 Inline Components + In addition to the top-level component that all QML documents define, and any reusable components placed in separate files, documents may also include \e inline components. Inline components are declared using the diff --git a/doc/src/snippets/declarative/qmldocuments.qml b/doc/src/snippets/declarative/qmldocuments.qml new file mode 100644 index 0000000..c19a658 --- /dev/null +++ b/doc/src/snippets/declarative/qmldocuments.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + property alias text: textItem.text + + width: 100; height: 30 + border.width: 1 + radius: 5 + smooth: true + + gradient: Gradient { + GradientStop { position: 0.0; color: "darkGray" } + GradientStop { position: 0.5; color: "black" } + GradientStop { position: 1.0; color: "darkGray" } + } + + Text { + id: textItem + anchors.centerIn: parent + font.pointSize: 20 + color: "white" + } + +} +//![0] -- cgit v0.12 From 17eb5cb63cd29e7afc90f7b8d1c6c451e5b6229c Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 30 Jul 2010 13:01:23 +1000 Subject: Mention scope of id uniqueness Task-number: QTBUG-12528 (cherry picked from commit 765c263d538b258f223dfb6bd7f62dbd19853db6) --- doc/src/declarative/qdeclarativedocument.qdoc | 4 ++++ doc/src/declarative/qdeclarativeintro.qdoc | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/src/declarative/qdeclarativedocument.qdoc b/doc/src/declarative/qdeclarativedocument.qdoc index f12e547..068297a 100644 --- a/doc/src/declarative/qdeclarativedocument.qdoc +++ b/doc/src/declarative/qdeclarativedocument.qdoc @@ -73,6 +73,10 @@ document - such as \c Rectangle and \c ListView - including those made within an import statements. QML does not import any modules by default, so at least one \c import statement must be present or no elements will be available! +Each \c id value in a QML document must be unique within that document. They +do not need to be unique across different documents as id values are +resolved according to the document scope. + \section1 Documents as Component Definitions diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc index 75055d8..fa42f59 100644 --- a/doc/src/declarative/qdeclarativeintro.qdoc +++ b/doc/src/declarative/qdeclarativeintro.qdoc @@ -87,6 +87,10 @@ Rectangle { width: 100; height: 100 } When multiple property/value pairs are specified on a single line, they must be separated by a semicolon. +The \c import statement imports the \c Qt \l{QML Modules}{module}, which contains all of the +standard \l {QML Elements}. Without this import statement, the \l Rectangle +and \l Image elements would not be available. + \section1 Expressions In addition to assigning values to properties, you can also assign @@ -181,7 +185,8 @@ Item { \section3 The \c id property -Each object can be given a special unique property called an \e id. Assigning an id enables the object +Each object can be given a special unique property called an \e id. No other object within the +same \l{QML Documents}{QML document} can have the same \c id value. Assigning an id enables the object to be referred to by other objects and scripts. The first Rectangle element below has an \e id, "myRect". The second Rectange element defines its -- cgit v0.12 From 26e416b60caea35e8901305c41b5743a09224ae9 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 30 Jul 2010 15:34:15 +1000 Subject: Add missing image Task-number: QTBUG-12529 (cherry picked from commit ca61cd321b867d912bd13b0530fbf2847d1c593c) --- doc/src/images/qml-pathview-example.png | Bin 0 -> 22077 bytes src/declarative/graphicsitems/qdeclarativepathview.cpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 doc/src/images/qml-pathview-example.png diff --git a/doc/src/images/qml-pathview-example.png b/doc/src/images/qml-pathview-example.png new file mode 100644 index 0000000..c874c5c Binary files /dev/null and b/doc/src/images/qml-pathview-example.png differ diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 5dcf1b7..06ac275 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -364,7 +364,7 @@ void QDeclarativePathViewPrivate::regenerate() to set \e {clip: true} in order to have the out of view items clipped nicely. - \sa Path + \sa Path, {declarative/modelviews/pathview}{PathView example} */ QDeclarativePathView::QDeclarativePathView(QDeclarativeItem *parent) -- cgit v0.12 From c837d3ffbb568d9c8022c18198e11c9439e89be7 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 27 Jul 2010 14:37:28 +0200 Subject: Fixed gcce linker error when linking against s60main built by armcc. Task: QTBUG-10680 RevBy: Trust me (cherry picked from commit d82d8d1fc90b4237e483fea9813ec084633f6f2d) --- src/s60main/s60main.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/src/s60main/s60main.pro b/src/s60main/s60main.pro index 9ea3080..a273897 100644 --- a/src/s60main/s60main.pro +++ b/src/s60main/s60main.pro @@ -29,6 +29,7 @@ symbian { # Having MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA will cause s60main.lib be unlinkable # against GCCE apps, so remove it MMP_RULES -= $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA + linux-armcc:QMAKE_CXXFLAGS *= --export_all_vtbl } else { error("$$_FILE_ is intended only for Symbian!") } -- cgit v0.12 From 489fc5fab2718b7fb1e9f23b414ac64c74b7d6e9 Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Mon, 2 Aug 2010 16:45:24 +1000 Subject: Add snippets directory as it was missed in initial merge. Task-number: QTBUG-12498 --- doc/src/snippets/declarative/anchoranimation.qml | 65 +++++++++++++++++++ doc/src/snippets/declarative/behavior.qml | 59 +++++++++++++++++ doc/src/snippets/declarative/comments.qml | 3 + doc/src/snippets/declarative/parallelanimation.qml | 57 +++++++++++++++++ doc/src/snippets/declarative/parentanimation.qml | 74 ++++++++++++++++++++++ doc/src/snippets/declarative/parentchange.qml | 5 +- doc/src/snippets/declarative/qtobject.qml | 55 ++++++++++++++++ doc/src/snippets/declarative/rotationanimation.qml | 66 +++++++++++++++++++ .../snippets/declarative/sequentialanimation.qml | 57 +++++++++++++++++ doc/src/snippets/declarative/springanimation.qml | 6 +- 10 files changed, 441 insertions(+), 6 deletions(-) create mode 100644 doc/src/snippets/declarative/anchoranimation.qml create mode 100644 doc/src/snippets/declarative/behavior.qml create mode 100644 doc/src/snippets/declarative/parallelanimation.qml create mode 100644 doc/src/snippets/declarative/parentanimation.qml create mode 100644 doc/src/snippets/declarative/qtobject.qml create mode 100644 doc/src/snippets/declarative/rotationanimation.qml create mode 100644 doc/src/snippets/declarative/sequentialanimation.qml diff --git a/doc/src/snippets/declarative/anchoranimation.qml b/doc/src/snippets/declarative/anchoranimation.qml new file mode 100644 index 0000000..6c7aaf6 --- /dev/null +++ b/doc/src/snippets/declarative/anchoranimation.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Item { + id: container + width: 200; height: 200 + + Rectangle { + id: myRect + width: 100; height: 100 + color: "red" + } + + states: State { + name: "reanchored" + AnchorChanges { target: myRect; anchors.right: container.right } + } + + transitions: Transition { + // smoothly reanchor myRect and move into new position + AnchorAnimation { duration: 1000 } + } + + Component.onCompleted: container.state = "reanchored" +} +//![0] diff --git a/doc/src/snippets/declarative/behavior.qml b/doc/src/snippets/declarative/behavior.qml new file mode 100644 index 0000000..420dfc4 --- /dev/null +++ b/doc/src/snippets/declarative/behavior.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + Behavior on width { + NumberAnimation { duration: 1000 } + } + + MouseArea { + anchors.fill: parent + onClicked: rect.width = 50 + } +} +//![0] diff --git a/doc/src/snippets/declarative/comments.qml b/doc/src/snippets/declarative/comments.qml index f4bedb8..9be0ce5 100644 --- a/doc/src/snippets/declarative/comments.qml +++ b/doc/src/snippets/declarative/comments.qml @@ -38,8 +38,10 @@ ** ****************************************************************************/ +//![0] import Qt 4.7 +//![0] Text { text: "Hello world!" //a basic greeting /* @@ -49,3 +51,4 @@ Text { font.family: "Helvetica" font.pointSize: 24 } +//![0] diff --git a/doc/src/snippets/declarative/parallelanimation.qml b/doc/src/snippets/declarative/parallelanimation.qml new file mode 100644 index 0000000..d823b4f --- /dev/null +++ b/doc/src/snippets/declarative/parallelanimation.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + ParallelAnimation { + running: true + NumberAnimation { target: rect; property: "x"; to: 50; duration: 1000 } + NumberAnimation { target: rect; property: "y"; to: 50; duration: 1000 } + } +} +//![0] + diff --git a/doc/src/snippets/declarative/parentanimation.qml b/doc/src/snippets/declarative/parentanimation.qml new file mode 100644 index 0000000..7f11a43 --- /dev/null +++ b/doc/src/snippets/declarative/parentanimation.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Item { + width: 200; height: 100 + + Rectangle { + id: redRect + width: 100; height: 100 + color: "red" + } + + Rectangle { + id: blueRect + x: redRect.width + width: 50; height: 50 + color: "blue" + + states: State { + name: "reparented" + ParentChange { target: blueRect; parent: redRect; x: 10; y: 10 } + } + + transitions: Transition { + ParentAnimation { + NumberAnimation { properties: "x,y"; duration: 1000 } + } + } + + MouseArea { anchors.fill: parent; onClicked: blueRect.state = "reparented" } + } +} +//![0] + diff --git a/doc/src/snippets/declarative/parentchange.qml b/doc/src/snippets/declarative/parentchange.qml index 7f5718a..ea50832 100644 --- a/doc/src/snippets/declarative/parentchange.qml +++ b/doc/src/snippets/declarative/parentchange.qml @@ -41,9 +41,8 @@ //![0] import Qt 4.7 -Rectangle { - width: 200 - height: 100 +Item { + width: 200; height: 100 Rectangle { id: redRect diff --git a/doc/src/snippets/declarative/qtobject.qml b/doc/src/snippets/declarative/qtobject.qml new file mode 100644 index 0000000..970fa16 --- /dev/null +++ b/doc/src/snippets/declarative/qtobject.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Item { + QtObject { + id: attributes + property string name + property int size + property variant attributes + } + + Text { text: attributes.name } +} +//![0] + diff --git a/doc/src/snippets/declarative/rotationanimation.qml b/doc/src/snippets/declarative/rotationanimation.qml new file mode 100644 index 0000000..c81395a --- /dev/null +++ b/doc/src/snippets/declarative/rotationanimation.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Item { + width: 300; height: 300 + + Rectangle { + id: rect + width: 150; height: 100; anchors.centerIn: parent + color: "red" + smooth: true + + states: State { + name: "rotated"; PropertyChanges { target: rect; rotation: 180 } + } + + transitions: Transition { + RotationAnimation { duration: 1000; direction: RotationAnimation.Counterclockwise } + } + } + + MouseArea { anchors.fill: parent; onClicked: rect.state = "rotated" } +} +//![0] + diff --git a/doc/src/snippets/declarative/sequentialanimation.qml b/doc/src/snippets/declarative/sequentialanimation.qml new file mode 100644 index 0000000..a15f7f3 --- /dev/null +++ b/doc/src/snippets/declarative/sequentialanimation.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + SequentialAnimation { + running: true + NumberAnimation { target: rect; property: "x"; to: 50; duration: 1000 } + NumberAnimation { target: rect; property: "y"; to: 50; duration: 1000 } + } +} +//![0] + diff --git a/doc/src/snippets/declarative/springanimation.qml b/doc/src/snippets/declarative/springanimation.qml index b73a9d2..8e810e1 100644 --- a/doc/src/snippets/declarative/springanimation.qml +++ b/doc/src/snippets/declarative/springanimation.qml @@ -41,7 +41,7 @@ //![0] import Qt 4.7 -Rectangle { +Item { width: 300; height: 300 Rectangle { @@ -56,8 +56,8 @@ Rectangle { MouseArea { anchors.fill: parent onClicked: { - rect.x = mouse.x - rect.y = mouse.y + rect.x = mouse.x - rect.width/2 + rect.y = mouse.y - rect.height/2 } } } -- cgit v0.12 From a4cac99f180810819e478cdb99732574ea01882e Mon Sep 17 00:00:00 2001 From: David Boddie <dboddie@trolltech.com> Date: Thu, 8 Jul 2010 20:58:46 +0200 Subject: Doc: Fixed incorrect QML property type. Reviewed-by: Trust Me (cherry picked from commit aba1572d588396d3c9e29192ae86047b5b10070a) --- src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp index 0342c9f..9dcba60 100644 --- a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp @@ -612,7 +612,7 @@ QAction* QDeclarativeWebView::stopAction() const #endif // QT_NO_ACTION /*! - \qmlproperty real WebView::title + \qmlproperty string WebView::title This property holds the title of the web page currently viewed By default, this property contains an empty string. -- cgit v0.12 From bb05544dbb411c844b6f006a5323828f783093c2 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Fri, 9 Jul 2010 10:01:30 +0200 Subject: Updated WebKit to ad96ca2f9b57271da4ea7432022ac686ee0981c2 Integrated changes: || <https://webkit.org/b/37760> || FrameView's layout root can be detached by style recalc || || <https://webkit.org/b/38922> || innerHTML decompilation issues in textarea || || <https://webkit.org/b/36878> || REGRESSION: Trailing colon on hostnames (with no port specified) causes "Not allowed to use restricted network port" || || <https://webkit.org/b/37781> || [XHR] Cross-Origin synchronous request with credential raises NETWORK_ERR || || <https://webkit.org/b/36502> || Cross-origin bypass: iFrame.src can be set to a JavaScript URL via nodeValue or textContent || || <https://webkit.org/b/28697> || WebKit crash on WebCore::Node::nodeIndex() || || <https://webkit.org/b/37031> || Cross-origin bypass: Javascript URL can be set as iframe.src via multiple DOM aliases || || <https://webkit.org/b/36522> || [Qt] Rename QWebSettings::XSSAuditorEnabled to XSSAuditingEnabled || || <https://webkit.org/b/38583> || Use of stale pointers whilst normalizing DOM nodes with mutation event handlers that modify element attributes || || <https://webkit.org/b/41412> || [Qt] Canvas arcTo() should draw straight line to p1 if p0, p1 and p2 are collinear || || <https://webkit.org/b/39878> || [Qt]: REGRESSION(r58703): QWebSettings::JavascriptCanAccessClipboard has wrong case in "Javascript" part. || || <https://webkit.org/b/26824> || focus() behavior permits keystrokes to be redirected across domains || || <https://webkit.org/b/39508> || Crash in WebCore::toAlphabetic() while running MangleMe || || <https://webkit.org/b/36571> || WebKit should treat port numbers outside of the valid range as being blacklisted || || <https://webkit.org/b/38497> || Make sure that http URLs always have a host in SecurityOrigin || || <https://webkit.org/b/38626> || ZDI-CAN-765: CSS Charset Text Transformation Vulnerability || || <https://webkit.org/b/36838> || Cross-origin image theft via SVGs as a canvas pattern || || <https://webkit.org/b/27751> || [sg:high] Copying text to the system clipboard can be done in any context || || <https://webkit.org/b/36843> || REGRESSION (r47291): XHR allows arbitrary XSRF across domains || || <https://webkit.org/b/37230> || REGRESSION (4.0.5): Safari asks for credentials all the time when authenticating to Windows IIS Server || || <https://webkit.org/b/37618> || Memory Corruption with Drag-Drop item from a purged document. || || <https://webkit.org/b/38260> || Frame.src allows javascript URLs with starting spaces || || <https://webkit.org/b/38261> || Table layout crash bug || (cherry picked from commit 5c50c6a782b127442c3fa748b3dd4d1007db69dc) --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 502 +++++++++++++++++++++ .../webkit/WebCore/bindings/js/JSAttrCustom.cpp | 10 +- .../webkit/WebCore/bindings/js/JSDOMBinding.cpp | 12 + .../webkit/WebCore/bindings/js/JSDOMBinding.h | 2 + .../webkit/WebCore/bindings/js/JSElementCustom.cpp | 11 +- .../WebCore/bindings/js/JSNamedNodeMapCustom.cpp | 32 ++ .../webkit/WebCore/bindings/js/JSNodeCustom.cpp | 70 ++- src/3rdparty/webkit/WebCore/css/CSSHelper.cpp | 6 +- src/3rdparty/webkit/WebCore/dom/Attr.idl | 2 + src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp | 47 +- src/3rdparty/webkit/WebCore/dom/Document.cpp | 22 + src/3rdparty/webkit/WebCore/dom/Document.h | 3 + src/3rdparty/webkit/WebCore/dom/Element.cpp | 14 +- src/3rdparty/webkit/WebCore/dom/NamedAttrMap.cpp | 5 + src/3rdparty/webkit/WebCore/dom/NamedAttrMap.h | 2 + src/3rdparty/webkit/WebCore/dom/NamedNodeMap.idl | 4 +- src/3rdparty/webkit/WebCore/dom/Node.idl | 4 +- src/3rdparty/webkit/WebCore/dom/Range.cpp | 25 + src/3rdparty/webkit/WebCore/dom/Range.h | 1 + .../webkit/WebCore/editing/EditorCommand.cpp | 21 +- src/3rdparty/webkit/WebCore/editing/markup.cpp | 4 +- .../webkit/WebCore/generated/JSNamedNodeMap.cpp | 18 +- .../webkit/WebCore/generated/JSNamedNodeMap.h | 4 + src/3rdparty/webkit/WebCore/generated/JSNode.cpp | 12 +- src/3rdparty/webkit/WebCore/generated/JSNode.h | 4 + .../html/canvas/CanvasRenderingContext2D.cpp | 2 +- .../WebCore/loader/DocumentThreadableLoader.cpp | 29 +- .../webkit/WebCore/page/DragController.cpp | 8 +- src/3rdparty/webkit/WebCore/page/DragController.h | 8 +- src/3rdparty/webkit/WebCore/page/EventHandler.cpp | 8 +- src/3rdparty/webkit/WebCore/page/FrameView.cpp | 7 +- .../webkit/WebCore/page/SecurityOrigin.cpp | 18 + src/3rdparty/webkit/WebCore/page/Settings.cpp | 6 + src/3rdparty/webkit/WebCore/page/Settings.h | 4 + src/3rdparty/webkit/WebCore/platform/KURL.cpp | 18 +- .../webkit/WebCore/platform/KURLGoogle.cpp | 10 +- .../webkit/WebCore/platform/graphics/qt/PathQt.cpp | 43 +- .../WebCore/platform/network/ProtectionSpace.h | 1 + .../webkit/WebCore/rendering/FixedTableLayout.cpp | 3 +- .../webkit/WebCore/rendering/RenderButton.h | 4 +- .../webkit/WebCore/rendering/RenderDataGrid.h | 2 + .../WebCore/rendering/RenderFileUploadControl.h | 2 + .../webkit/WebCore/rendering/RenderInline.cpp | 2 +- .../webkit/WebCore/rendering/RenderLayer.cpp | 27 +- .../webkit/WebCore/rendering/RenderListItem.h | 2 + .../webkit/WebCore/rendering/RenderListMarker.cpp | 6 +- .../webkit/WebCore/rendering/RenderMedia.h | 2 + .../webkit/WebCore/rendering/RenderMenuList.h | 2 + .../webkit/WebCore/rendering/RenderObject.h | 3 +- .../webkit/WebCore/rendering/RenderProgress.h | 2 + .../webkit/WebCore/rendering/RenderSlider.h | 2 + .../webkit/WebCore/rendering/RenderText.cpp | 2 +- .../webkit/WebCore/rendering/RenderTextControl.h | 2 + .../WebCore/rendering/RenderTextFragment.cpp | 4 +- src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp | 5 +- src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h | 2 +- src/3rdparty/webkit/WebKit/qt/ChangeLog | 62 +++ 59 files changed, 979 insertions(+), 160 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 0b824b7..1d1c8ed 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -d59845f6fec84f15da116f50a1a0e52ce26116e9 +ad96ca2f9b57271da4ea7432022ac686ee0981c2 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index c970745..2e5ebd0 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - d59845f6fec84f15da116f50a1a0e52ce26116e9 + ad96ca2f9b57271da4ea7432022ac686ee0981c2 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index a4ae758..a993a97 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,505 @@ +2010-05-14 Abhishek Arya <inferno@chromium.org> + + Reviewed by David Hyatt. + + Move the m_width(Length) and m_columns(RenderTable::ColumnStruct) + vector out-of-bounds check out of the ASSERT into the main code. + https://bugs.webkit.org/show_bug.cgi?id=38261 + + Test: fast/table/fixed-table-layout-large-colspan-crash.html + + * rendering/FixedTableLayout.cpp: + (WebCore::FixedTableLayout::calcWidthArray): + +2010-05-21 Beth Dakin <bdakin@apple.com> + + Reviewed by Darin Adler. + + Fix for <rdar://problem/8009118> Crash in WebCore::toAlphabetic() + while running MangleMe + -and corresponding- + https://bugs.webkit.org/show_bug.cgi?id=39508 + + The math was slightly off here, and we wound up trying to access an + array at index -1 in some cases. We need to decrement numberShadow + rather than subtracting one from the result of the modulo + operation. + + * rendering/RenderListMarker.cpp: + (WebCore::toAlphabeticOrNumeric): + +2010-05-20 Dan Bernstein <mitz@apple.com> + + Reviewed by Dave Hyatt. + + <rdar://problem/8007953> Textarea using custom font appears blank + + Test: fast/css/font-face-in-shadow-DOM.html + + When a remote font is loaded, CSSFontSelector forces a style recalc, which replaces all + RenderSyles that have FontFallbackLists referencing the placeholder font with fresh + RenderStyles. However, it does not descend into shadow DOM trees, so those may end up with + styles that still reference the placeholder font. + + The fix is to add RenderObject::requiresForcedStyleRecalcPropagation() and have it return + true from renderers that maintain shadow DOM trees or otherwise keep their own RenderStyles. + + * dom/Element.cpp: + (WebCore::Element::recalcStyle): Check if forced style recalc needs to propagated. + * rendering/RenderButton.h: + (WebCore::RenderButton::requiresForcedStyleRecalcPropagation): + * rendering/RenderDataGrid.h: + (WebCore::RenderDataGrid::requiresForcedStyleRecalcPropagation): + * rendering/RenderFileUploadControl.h: + (WebCore::RenderFileUploadControl::requiresForcedStyleRecalcPropagation): + * rendering/RenderListItem.h: + (WebCore::RenderListItem::requiresForcedStyleRecalcPropagation): + * rendering/RenderMedia.h: + (WebCore::RenderMedia::requiresForcedStyleRecalcPropagation): + * rendering/RenderMenuList.h: + (WebCore::RenderMenuList::RenderMenuList::requiresForcedStyleRecalcPropagation): + * rendering/RenderObject.h: + (WebCore::RenderObject::requiresForcedStyleRecalcPropagation): + * rendering/RenderProgress.h: + (WebCore::RenderProgress::requiresForcedStyleRecalcPropagation): + * rendering/RenderSlider.h: + (WebCore::RenderSlider::requiresForcedStyleRecalcPropagation): + * rendering/RenderTextControl.h: + (WebCore::RenderTextControl::requiresForcedStyleRecalcPropagation): + +2010-04-02 Justin Schuh <jschuh@chromium.org> + + Reviewed by Alexey Proskuryakov. + + XHR allows arbitrary XSRF across domains + https://bugs.webkit.org/show_bug.cgi?id=36843 + + Added a one-line change to prevent bypassing the XDC check on + synchronous preflighted requests. Added layout tests to cover + variations of this problem. + + Tests: http/tests/xmlhttprequest/access-control-preflight-async-header-denied.html + http/tests/xmlhttprequest/access-control-preflight-async-method-denied.html + http/tests/xmlhttprequest/access-control-preflight-sync-header-denied.html + http/tests/xmlhttprequest/access-control-preflight-sync-method-denied.html + + * loader/DocumentThreadableLoader.cpp: + (WebCore::DocumentThreadableLoader::preflightFailure): + +2010-04-28 Julien Chaffraix <jchaffraix@webkit.org> + + Reviewed by Alexey Proskuryakov. + + [XHR] Cross-Origin synchronous request with credential raises NETWORK_ERR + https://bugs.webkit.org/show_bug.cgi?id=37781 + <rdar://problem/7905150> + + Tests: http/tests/xmlhttprequest/access-control-preflight-credential-async.html + http/tests/xmlhttprequest/access-control-preflight-credential-sync.html + + Rolling the patch in as I could not reproduce Qt results locally. + + * loader/DocumentThreadableLoader.cpp: + (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Now we remove the + credential from the request here to avoid forgetting to do so in the different code path. + (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Just add the + "Origin" header. + (WebCore::DocumentThreadableLoader::loadRequest): Check here the the credential have + been removed so that we don't leak them. Also tweaked a comment to make it clear that + the URL check has issue when credential is involved. + +2010-04-21 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Adam Roben. + + Windows build fix. + + * platform/network/cf/ResourceHandleCFNet.cpp: Declare CFURLConnectionCreateWithProperties + for now, as it's mistakenly missing from WebKitSupportLibrary headers. + +2010-05-19 Abhishek Arya <inferno@chromium.org> + + Reviewed by David Hyatt. + + Check that the node is a text node before doing a static cast + to a Text class pointer. + https://bugs.webkit.org/show_bug.cgi?id=38626 + + Test: fast/text/text-transform-nontext-node-crash.xhtml + + * rendering/RenderText.cpp: + (WebCore::RenderText::originalText): + * rendering/RenderTextFragment.cpp: + (WebCore::RenderTextFragment::originalText): + (WebCore::RenderTextFragment::previousCharacter): + +2010-05-12 Abhishek Arya <inferno@chromium.org> + + Reviewed by Darin Adler. + + HTML Entity Escape the contents of a textarea node when accessed + via the innerHTML and outerHTML node properties. + https://bugs.webkit.org/show_bug.cgi?id=38922 + + Test: fast/innerHTML/innerHTML-special-elements.html + + * editing/markup.cpp: + (WebCore::appendStartMarkup): + +2010-05-12 James Robinson <jamesr@chromium.org> + + Patch by Dan Bernstein. + + Reviewed by David Hyatt. + + Fix marking the layout root's parent as needing layout + https://bugs.webkit.org/show_bug.cgi?id=37760 + + If an element gets marked as needing layout due to the recalcStyle() + call in FrameView::layout(), the m_layoutSchedulingEnabled flag will + be set to false. It's possible at this point that a parent of the + existing FrameView::m_layoutRoot will be marked as needing layout. + + This patch updates FrameView::scheduleRelayoutOfSubtree to account + for this case. + + Manual test only due to subtle timing issues. + + * manual-tests/layoutroot_detach.xml: Added. + * page/FrameView.cpp: + (WebCore::FrameView::scheduleRelayoutOfSubtree): + +2010-05-10 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=38583 + <rdar://problem/7948784> Crash in Element::normalizeAttributes. + + Test: fast/dom/Element/normalize-crash.html + + * dom/Element.cpp: + (WebCore::Element::normalizeAttributes): Copy attributes to a vector + before iterating. + * dom/NamedAttrMap.cpp: + (WebCore::NamedNodeMap::copyAttributesToVector): Added. + * dom/NamedAttrMap.h: + +2010-05-10 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Darin Adler. + + Based on a patch by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=28697 + <rdar://problem/7946578> WebKit crash on WebCore::Node::nodeIndex() + + It's not OK to call ContainerNode::willRemoveChild() in a loop, because Range code assumes + that it can adjust start and end position to any node except for the one being removed - + so these notifications cannot be batched. + + Test: fast/dom/Range/remove-all-children-crash.html + + * dom/ContainerNode.cpp: + (WebCore::willRemoveChild): Removed unused ExceptionCode. + (WebCore::willRemoveChildren): New function, used in removeChildren() case. + (WebCore::ContainerNode::removeChild): ExceptionCode return was always 0, don't bother with it. + (WebCore::ContainerNode::removeChildren): Call willRemoveChildrenFromNode. + (WebCore::dispatchChildRemovalEvents): Moved some logic out into willRemoveChildrenFromNode + and willRemoveChild. + + * dom/Document.cpp: + (WebCore::Document::nodeChildrenWillBeRemoved): New function, used in removeChildren() case. + + * dom/Document.h: + (WebCore::Document::nodeChildrenWillBeRemoved): New function, used in removeChildren() case. + + * dom/Range.h: + * dom/Range.cpp: + (WebCore::boundaryNodeChildrenWillBeRemoved): New function, used in removeChildren() case. + (WebCore::Range::nodeChildrenWillBeRemoved): Ditto. + +2010-05-03 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Adam Barth. + + https://bugs.webkit.org/show_bug.cgi?id=38497 + <rdar://problem/7759438> Make sure that http URLs always have a host in SecurityOrigin + + This is a hardening fix, and behavior really depends on what an underlying networking layer + does. So, no test. + + * page/SecurityOrigin.cpp: + (WebCore::schemeRequiresAuthority): List schemes that need an authority for successful loading. + (WebCore::SecurityOrigin::SecurityOrigin): Never let e.g. http origins with empty authorities + have the same security origin. + +2010-05-03 Abhishek Arya <inferno@chromium.org> + + Reviewed by Adam Barth. + + Add support for controlling clipboard access from javascript. + Clipboard access from javascript is disabled by default. + https://bugs.webkit.org/show_bug.cgi?id=27751 + + Test: editing/execCommand/clipboard-access.html + + * WebCore.base.exp: + * editing/EditorCommand.cpp: + (WebCore::supportedCopyCut): + (WebCore::supportedPaste): + (WebCore::createCommandMap): + * page/Settings.cpp: + (WebCore::Settings::Settings): + (WebCore::Settings::setJavaScriptCanAccessClipboard): + * page/Settings.h: + (WebCore::Settings::javaScriptCanAccessClipboard): + +2010-04-30 Abhishek Arya <inferno@chromium.org> + + Reviewed by David Kilzer. + + Convert m_documentUnderMouse, m_dragInitiator to RefPtr. + Eliminated unused m_dragInitiator accessor to prevent dereferencing. + https://bugs.webkit.org/show_bug.cgi?id=37618 + + Test: editing/pasteboard/drag-drop-iframe-refresh-crash.html + + * page/DragController.cpp: + (WebCore::DragController::tryDocumentDrag): + (WebCore::DragController::concludeEditDrag): + * page/DragController.h: + (WebCore::DragController::draggingImageURL): + (WebCore::DragController::documentUnderMouse): + +2010-04-14 Justin Schuh <jschuh@chromium.org> + + Reviewed by Adam Barth. + + Javascript URL can be set as iframe.src via multiple DOM aliases + https://bugs.webkit.org/show_bug.cgi?id=37031 + + Moved frame/iframe checks from Attr to Node on inherited members. + Node child manipulation methods now return NOT_SUPPORTED_ERR if used + on a frame/iframe src attribute. + NamedNodeMap set methods now perform frame/iframe src checks. + Moved allowSettingSrcToJavascriptURL static helper function from + JSElementCustom.cpp to exported function in JSDOMBinding.h. + + * bindings/js/JSAttrCustom.cpp: + (WebCore::JSAttr::setValue): + * bindings/js/JSDOMBinding.cpp: + (WebCore::allowSettingSrcToJavascriptURL): + * bindings/js/JSDOMBinding.h: + * bindings/js/JSElementCustom.cpp: + * bindings/js/JSNamedNodeMapCustom.cpp: + (WebCore::JSNamedNodeMap::setNamedItem): + (WebCore::JSNamedNodeMap::setNamedItemNS): + * bindings/js/JSNodeCustom.cpp: + (WebCore::isAttrFrameSrc): + (WebCore::JSNode::setNodeValue): + (WebCore::JSNode::setTextContent): + (WebCore::JSNode::insertBefore): + (WebCore::JSNode::replaceChild): + (WebCore::JSNode::removeChild): + (WebCore::JSNode::appendChild): + * bindings/v8/custom/V8AttrCustom.cpp: + * bindings/v8/custom/V8NamedNodeMapCustom.cpp: + (WebCore::V8NamedNodeMap::setNamedItemNSCallback): + (WebCore::V8NamedNodeMap::setNamedItemCallback): + (WebCore::toV8): + * bindings/v8/custom/V8NodeCustom.cpp: + (WebCore::isFrameSrc): + (WebCore::V8Node::textContentAccessorSetter): + (WebCore::V8Node::nodeValueAccessorSetter): + (WebCore::V8Node::insertBeforeCallback): + (WebCore::V8Node::replaceChildCallback): + (WebCore::V8Node::removeChildCallback): + (WebCore::V8Node::appendChildCallback): + * dom/Attr.idl: + * dom/NamedNodeMap.idl: + * dom/Node.idl: + +2010-03-26 Justin Schuh <jschuh@chromium.org> + + Reviewed by Adam Barth. + + Security: iFrame.src accepts JavaScript URL via nodeValue or textContent + https://bugs.webkit.org/show_bug.cgi?id=36502 + + Overrode inherited nodeValue and textContent in Attr.idl so they proxy + to value, which performs a security check. + + Test: http/tests/security/xss-DENIED-iframe-src-alias.html + + * bindings/js/JSAttrCustom.cpp: + (WebCore::JSAttr::nodeValue): + (WebCore::JSAttr::setNodeValue): + (WebCore::JSAttr::textContent): + (WebCore::JSAttr::setTextContent): + * bindings/v8/custom/V8AttrCustom.cpp: + (WebCore::V8Attr::nodeValueAccessorSetter): + (WebCore::V8Attr::nodeValueAccessorGetter): + (WebCore::V8Attr::textContentAccessorSetter): + (WebCore::V8Attr::textContentAccessorGetter): + * dom/Attr.idl: + +2010-05-05 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=38260 + <rdar://problem/7917548> Fix whitespace removing in deprecatedParseURL(). + + Broken all the way since r4 (yes, that's a revision number). + + Test: http/tests/security/xss-DENIED-javascript-with-spaces.html + + * css/CSSHelper.cpp: (WebCore::deprecatedParseURL): Fixed loop conditions for remaining length. + +2010-04-23 Dan Bernstein <mitz@apple.com> + + Reviewed by Simon Fraser. + + <rdar://problem/7898436> :after content is duplicated + + Test: fast/css-generated-content/after-duplicated-after-split.html + + * rendering/RenderInline.cpp: + (WebCore::RenderInline::splitInlines): Pass the correct owner of the child list. + +2010-03-30 Chris Evans <cevans@chromium.org> + + Reviewed by Adam Barth. + + Taint the canvas if an SVG-derived pattern is rendered into it. + + https://bugs.webkit.org/show_bug.cgi?id=36838 + + Test: fast/canvas/svg-taint.html + + * html/canvas/CanvasRenderingContext2D.cpp: + (WebCore::CanvasRenderingContext2D::createPattern): + Take into account the image's hasSingleSecurityOrigin() property. + +2010-04-07 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Darinn Adler. + + https://bugs.webkit.org/show_bug.cgi?id=37230 + <rdar://problem/7813115> REGRESSION (4.0.5): Safari asks for credentials all the time when + authenticating to Windows IIS Server + + * platform/network/ProtectionSpace.h: (WebCore::ProtectionSpaceAuthenticationScheme): Added + a constant for ProtectionSpaceAuthenticationSchemeUnknown. + + * platform/network/cf/AuthenticationCF.cpp: (WebCore::core): + * platform/network/cf/SocketStreamHandleCFNet.cpp: (WebCore::authenticationSchemeFromAuthenticationMethod): + Return ProtectionSpaceAuthenticationSchemeUnknown for unknown scheme. + + * platform/network/mac/AuthenticationMac.mm: + (WebCore::mac): Support NTLM on systems older than 10.6. We actually get this string from + NSURLConnection, even though there was no public constant. + (WebCore::core): Return ProtectionSpaceAuthenticationSchemeUnknown for unknown scheme. + +2010-04-19 Dan Bernstein <mitz@apple.com> + + Reviewed by Darin Adler. + + Make the fix for <rdar://problem/7873647> from r57759 more robust. + + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::updateHoverActiveState): Use RefPtrs for the Nodes. + +2010-04-16 Dan Bernstein <mitz@apple.com> + + Reviewed by Simon Fraser. + + <rdar://problem/7873647> Crash when updating hover state + + Test: fast/dynamic/hover-style-recalc-crash.html + + Updating the hover state of an element caused the document to need style + recalc, and then updating the hover state of a link caused style recalc, + which changed the render tree while updateHoverActiveState() was iterating + over it, leading to a crash. + + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::updateHoverActiveState): Collect the nodes to be + updated into vectors, then update their active and hover states. + +2010-03-31 Mark Rowe <mrowe@apple.com> + + Reviewed by Darin Adler. + + <http://webkit.org/b/36878> REGRESSION: Trailing colon on hostnames (with no port specified) causes "Not allowed to use restricted network port" + + * platform/KURL.cpp: + (WebCore::KURL::port): Explicitly handle the case of a colon being present in the URL after the host name but with + no port number before the path. This is handled in the same manner as the colon and port being omitted completely. + +2010-03-24 Mark Rowe <mrowe@apple.com> + + Revert the portion of r56489 that dealt with port zero as it introduced some test failures. + + * platform/KURL.cpp: + (WebCore::KURL::port): Use the "ok" argument to charactersToUIntStrict to determine whether + it was able to successfully parse the string as an unsigned integer, rather than relying on + the fact it returned zero when it failed. + +2010-03-24 Mark Rowe <mrowe@apple.com> + + Reviewed by Darin Adler. + + WebKit should treat port numbers outside the valid range as being blacklisted + <http://webkit.org/b/36571> / <rdar://problem/7790908> + + * platform/KURL.cpp: + (WebCore::KURL::port): Map invalid port numbers to invalidPortNumber. + (WebCore::portAllowed): Add invalidPortNumber to the blacklist. + * platform/KURLGoogle.cpp: invalid port numbers to invalidPortNumber. + (WebCore::KURL::port): Add invalidPortNumber to the blacklist. + Also bring this in to sync with KURL. Having this identical code in two places is stupid. + +2010-05-05 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Adele Peterson. + + https://bugs.webkit.org/show_bug.cgi?id=26824 + <rdar://problem/7018610> EventHandler can operate on a wrong frame if focus changes during + keyboard event dispatch. + + EventHandler object is tied to a frame, so it's wrong for it to continue processing a keyboard + event if focused frame changes between keydown and keypress. + + * manual-tests/focus-change-between-key-events.html: Added. + + * page/EventHandler.cpp: (WebCore::EventHandler::keyEvent): Bail out early if focused frame + changes while dispatching keydown. Also made similar changes for Windows to maintain matching + behavior, even though EventHandler was re-entered anyway due to WM_KEYDOWN and WM_CHAR being + separate events. + +2010-07-02 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Canvas arcTo() should draw straight line to p1 if p0, p1 and p2 are collinear + + The implementation of PathQt's addArcTo() was not float-safe and also had + a case where it drew an 'infinite' line, which is not part of the spec. + + http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-arcto + + We now use qFuzzyCompare() in both cases. The method isPointOnPathBorder() + also had the same problem, and was refactored a bit in the process of fixing + the bug. + + Initial patch by Andreas Kling. + + https://bugs.webkit.org/show_bug.cgi?id=41412 + + * platform/graphics/qt/PathQt.cpp: + 2010-03-26 Shu Chang <chang.shu@nokia.com> Reviewed by Eric Seidel. diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSAttrCustom.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSAttrCustom.cpp index 3c01535..4cd40ac 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSAttrCustom.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSAttrCustom.cpp @@ -33,6 +33,7 @@ #include "Document.h" #include "HTMLFrameElementBase.h" #include "HTMLNames.h" +#include "JSDOMBinding.h" using namespace JSC; @@ -46,13 +47,8 @@ void JSAttr::setValue(ExecState* exec, JSValue value) String attrValue = valueToStringWithNullCheck(exec, value); Element* ownerElement = imp->ownerElement(); - if (ownerElement && (ownerElement->hasTagName(iframeTag) || ownerElement->hasTagName(frameTag))) { - if (equalIgnoringCase(imp->name(), "src") && protocolIsJavaScript(deprecatedParseURL(attrValue))) { - Document* contentDocument = static_cast<HTMLFrameElementBase*>(ownerElement)->contentDocument(); - if (contentDocument && !checkNodeSecurity(exec, contentDocument)) - return; - } - } + if (ownerElement && !allowSettingSrcToJavascriptURL(exec, ownerElement, imp->name(), attrValue)) + return; ExceptionCode ec = 0; imp->setValue(attrValue, ec); diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.cpp index f294dad..393c1ee 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.cpp @@ -24,6 +24,7 @@ #include "debugger/DebuggerCallFrame.h" #include "ActiveDOMObject.h" +#include "CSSHelper.h" #include "DOMCoreException.h" #include "DOMObjectHashTableMap.h" #include "Document.h" @@ -33,6 +34,7 @@ #include "Frame.h" #include "HTMLAudioElement.h" #include "HTMLCanvasElement.h" +#include "HTMLFrameElementBase.h" #include "HTMLImageElement.h" #include "HTMLNames.h" #include "HTMLScriptElement.h" @@ -630,6 +632,16 @@ bool shouldAllowNavigation(ExecState* exec, Frame* frame) return lexicalFrame && lexicalFrame->loader()->shouldAllowNavigation(frame); } +bool allowSettingSrcToJavascriptURL(ExecState* exec, Element* element, const String& name, const String& value) +{ + if ((element->hasTagName(iframeTag) || element->hasTagName(frameTag)) && equalIgnoringCase(name, "src") && protocolIsJavaScript(deprecatedParseURL(value))) { + Document* contentDocument = static_cast<HTMLFrameElementBase*>(element)->contentDocument(); + if (contentDocument && !checkNodeSecurity(exec, contentDocument)) + return false; + } + return true; +} + void printErrorMessageForFrame(Frame* frame, const String& message) { if (!frame) diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h index 219472b..40f7e40 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h @@ -301,6 +301,8 @@ namespace WebCore { bool allowsAccessFromFrame(JSC::ExecState*, Frame*); bool allowsAccessFromFrame(JSC::ExecState*, Frame*, String& message); bool shouldAllowNavigation(JSC::ExecState*, Frame*); + bool allowSettingSrcToJavascriptURL(JSC::ExecState*, Element*, const String&, const String&); + void printErrorMessageForFrame(Frame*, const String& message); JSC::JSValue objectToStringFunctionGetter(JSC::ExecState*, JSC::JSValue, const JSC::Identifier& propertyName); diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSElementCustom.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSElementCustom.cpp index c725290..94012fd 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSElementCustom.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSElementCustom.cpp @@ -36,6 +36,7 @@ #include "HTMLFrameElementBase.h" #include "HTMLNames.h" #include "JSAttr.h" +#include "JSDOMBinding.h" #include "JSHTMLElementWrapperFactory.h" #include "JSNodeList.h" #include "NodeList.h" @@ -63,16 +64,6 @@ void JSElement::markChildren(MarkStack& markStack) markDOMObjectWrapper(markStack, globalData, static_cast<StyledElement*>(element)->inlineStyleDecl()); } -static inline bool allowSettingSrcToJavascriptURL(ExecState* exec, Element* element, const String& name, const String& value) -{ - if ((element->hasTagName(iframeTag) || element->hasTagName(frameTag)) && equalIgnoringCase(name, "src") && protocolIsJavaScript(deprecatedParseURL(value))) { - Document* contentDocument = static_cast<HTMLFrameElementBase*>(element)->contentDocument(); - if (contentDocument && !checkNodeSecurity(exec, contentDocument)) - return false; - } - return true; -} - JSValue JSElement::setAttribute(ExecState* exec, const ArgList& args) { ExceptionCode ec = 0; diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSNamedNodeMapCustom.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSNamedNodeMapCustom.cpp index 13f3628..965498a 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSNamedNodeMapCustom.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSNamedNodeMapCustom.cpp @@ -35,6 +35,38 @@ using namespace JSC; namespace WebCore { +JSValue JSNamedNodeMap::setNamedItem(ExecState* exec, const ArgList& args) +{ + NamedNodeMap* imp = static_cast<NamedNodeMap*>(impl()); + ExceptionCode ec = 0; + Node* newNode = toNode(args.at(0)); + + if (newNode && newNode->nodeType() == Node::ATTRIBUTE_NODE && imp->element()) { + if (!allowSettingSrcToJavascriptURL(exec, imp->element(), newNode->nodeName(), newNode->nodeValue())) + return jsNull(); + } + + JSValue result = toJS(exec, globalObject(), WTF::getPtr(imp->setNamedItem(newNode, ec))); + setDOMException(exec, ec); + return result; +} + +JSValue JSNamedNodeMap::setNamedItemNS(ExecState* exec, const ArgList& args) +{ + NamedNodeMap* imp = static_cast<NamedNodeMap*>(impl()); + ExceptionCode ec = 0; + Node* newNode = toNode(args.at(0)); + + if (newNode && newNode->nodeType() == Node::ATTRIBUTE_NODE && imp->element()) { + if (!allowSettingSrcToJavascriptURL(exec, imp->element(), newNode->nodeName(), newNode->nodeValue())) + return jsNull(); + } + + JSValue result = toJS(exec, globalObject(), WTF::getPtr(imp->setNamedItemNS(newNode, ec))); + setDOMException(exec, ec); + return result; +} + bool JSNamedNodeMap::canGetItemsForName(ExecState*, NamedNodeMap* impl, const Identifier& propertyName) { return impl->getNamedItem(propertyName); diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSNodeCustom.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSNodeCustom.cpp index 134c581..bf6c633 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSNodeCustom.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSNodeCustom.cpp @@ -38,6 +38,7 @@ #include "JSAttr.h" #include "JSCDATASection.h" #include "JSComment.h" +#include "JSDOMBinding.h" #include "JSDocument.h" #include "JSDocumentFragment.h" #include "JSDocumentType.h" @@ -66,12 +67,53 @@ using namespace JSC; namespace WebCore { -typedef int ExpectionCode; +static inline bool isAttrFrameSrc(Element *element, const String& name) +{ + return element && (element->hasTagName(HTMLNames::iframeTag) || element->hasTagName(HTMLNames::frameTag)) && equalIgnoringCase(name, "src"); +} + +void JSNode::setNodeValue(JSC::ExecState* exec, JSC::JSValue value) +{ + Node* imp = static_cast<Node*>(impl()); + String nodeValue = valueToStringWithNullCheck(exec, value); + + if (imp->nodeType() == Node::ATTRIBUTE_NODE) { + Element* ownerElement = static_cast<Attr*>(impl())->ownerElement(); + if (ownerElement && !allowSettingSrcToJavascriptURL(exec, ownerElement, imp->nodeName(), nodeValue)) + return; + } + + ExceptionCode ec = 0; + imp->setNodeValue(nodeValue, ec); + setDOMException(exec, ec); +} + +void JSNode::setTextContent(JSC::ExecState* exec, JSC::JSValue value) +{ + Node* imp = static_cast<Node*>(impl()); + String nodeValue = valueToStringWithNullCheck(exec, value); + + if (imp->nodeType() == Node::ATTRIBUTE_NODE) { + Element* ownerElement = static_cast<Attr*>(impl())->ownerElement(); + if (ownerElement && !allowSettingSrcToJavascriptURL(exec, ownerElement, imp->nodeName(), nodeValue)) + return; + } + + ExceptionCode ec = 0; + imp->setTextContent(nodeValue, ec); + setDOMException(exec, ec); +} JSValue JSNode::insertBefore(ExecState* exec, const ArgList& args) { + Node* imp = static_cast<Node*>(impl()); + if (imp->nodeType() == Node::ATTRIBUTE_NODE && isAttrFrameSrc(static_cast<Attr*>(impl())->ownerElement(), imp->nodeName())) { + setDOMException(exec, NOT_SUPPORTED_ERR); + return jsNull(); + } + ExceptionCode ec = 0; - bool ok = impl()->insertBefore(toNode(args.at(0)), toNode(args.at(1)), ec, true); + bool ok = imp->insertBefore(toNode(args.at(0)), toNode(args.at(1)), ec, true); setDOMException(exec, ec); if (ok) return args.at(0); @@ -80,8 +122,14 @@ JSValue JSNode::insertBefore(ExecState* exec, const ArgList& args) JSValue JSNode::replaceChild(ExecState* exec, const ArgList& args) { + Node* imp = static_cast<Node*>(impl()); + if (imp->nodeType() == Node::ATTRIBUTE_NODE && isAttrFrameSrc(static_cast<Attr*>(impl())->ownerElement(), imp->nodeName())) { + setDOMException(exec, NOT_SUPPORTED_ERR); + return jsNull(); + } + ExceptionCode ec = 0; - bool ok = impl()->replaceChild(toNode(args.at(0)), toNode(args.at(1)), ec, true); + bool ok = imp->replaceChild(toNode(args.at(0)), toNode(args.at(1)), ec, true); setDOMException(exec, ec); if (ok) return args.at(1); @@ -90,8 +138,14 @@ JSValue JSNode::replaceChild(ExecState* exec, const ArgList& args) JSValue JSNode::removeChild(ExecState* exec, const ArgList& args) { + Node* imp = static_cast<Node*>(impl()); + if (imp->nodeType() == Node::ATTRIBUTE_NODE && isAttrFrameSrc(static_cast<Attr*>(impl())->ownerElement(), imp->nodeName())) { + setDOMException(exec, NOT_SUPPORTED_ERR); + return jsNull(); + } + ExceptionCode ec = 0; - bool ok = impl()->removeChild(toNode(args.at(0)), ec); + bool ok = imp->removeChild(toNode(args.at(0)), ec); setDOMException(exec, ec); if (ok) return args.at(0); @@ -100,8 +154,14 @@ JSValue JSNode::removeChild(ExecState* exec, const ArgList& args) JSValue JSNode::appendChild(ExecState* exec, const ArgList& args) { + Node* imp = static_cast<Node*>(impl()); + if (imp->nodeType() == Node::ATTRIBUTE_NODE && isAttrFrameSrc(static_cast<Attr*>(impl())->ownerElement(), imp->nodeName())) { + setDOMException(exec, NOT_SUPPORTED_ERR); + return jsNull(); + } + ExceptionCode ec = 0; - bool ok = impl()->appendChild(toNode(args.at(0)), ec, true); + bool ok = imp->appendChild(toNode(args.at(0)), ec, true); setDOMException(exec, ec); if (ok) return args.at(0); diff --git a/src/3rdparty/webkit/WebCore/css/CSSHelper.cpp b/src/3rdparty/webkit/WebCore/css/CSSHelper.cpp index 8e6f3a0..c3418b4 100644 --- a/src/3rdparty/webkit/WebCore/css/CSSHelper.cpp +++ b/src/3rdparty/webkit/WebCore/css/CSSHelper.cpp @@ -36,7 +36,7 @@ String deprecatedParseURL(const String& url) int o = 0; int l = i->length(); - while (o < l && (*i)[o] <= ' ') { + while (0 < l && (*i)[o] <= ' ') { ++o; --l; } @@ -53,7 +53,7 @@ String deprecatedParseURL(const String& url) l -= 5; } - while (o < l && (*i)[o] <= ' ') { + while (0 < l && (*i)[o] <= ' ') { ++o; --l; } @@ -65,7 +65,7 @@ String deprecatedParseURL(const String& url) l -= 2; } - while (o < l && (*i)[o] <= ' ') { + while (0 < l && (*i)[o] <= ' ') { ++o; --l; } diff --git a/src/3rdparty/webkit/WebCore/dom/Attr.idl b/src/3rdparty/webkit/WebCore/dom/Attr.idl index af84478..3c73bc0 100644 --- a/src/3rdparty/webkit/WebCore/dom/Attr.idl +++ b/src/3rdparty/webkit/WebCore/dom/Attr.idl @@ -28,7 +28,9 @@ module core { // DOM Level 1 readonly attribute [ConvertNullStringTo=Null] DOMString name; + readonly attribute boolean specified; + attribute [ConvertNullStringTo=Null, ConvertNullToNullString, CustomSetter] DOMString value setter raises(DOMException); diff --git a/src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp b/src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp index fb2852f..c17489a 100644 --- a/src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp +++ b/src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp @@ -292,19 +292,32 @@ void ContainerNode::willRemove() Node::willRemove(); } -static ExceptionCode willRemoveChild(Node *child) +static void willRemoveChild(Node* child) { - ExceptionCode ec = 0; + // update auxiliary doc info (e.g. iterators) to note that node is being removed + child->document()->nodeWillBeRemoved(child); + child->document()->incDOMTreeVersion(); // fire removed from document mutation events. dispatchChildRemovalEvents(child); - if (ec) - return ec; if (child->attached()) child->willRemove(); - - return 0; +} + +static void willRemoveChildren(ContainerNode* container) +{ + container->document()->nodeChildrenWillBeRemoved(container); + container->document()->incDOMTreeVersion(); + + // FIXME: Adding new children from event handlers can cause an infinite loop here. + for (RefPtr<Node> child = container->firstChild(); child; child = child->nextSibling()) { + // fire removed from document mutation events. + dispatchChildRemovalEvents(child.get()); + + if (child->attached()) + child->willRemove(); + } } bool ContainerNode::removeChild(Node* oldChild, ExceptionCode& ec) @@ -328,10 +341,7 @@ bool ContainerNode::removeChild(Node* oldChild, ExceptionCode& ec) } RefPtr<Node> child = oldChild; - - ec = willRemoveChild(child.get()); - if (ec) - return false; + willRemoveChild(child.get()); // Mutation events might have moved this child into a different parent. if (child->parentNode() != this) { @@ -399,14 +409,12 @@ bool ContainerNode::removeChildren() return false; // The container node can be removed from event handlers. - RefPtr<Node> protect(this); - + RefPtr<ContainerNode> protect(this); + // Do any prep work needed before actually starting to detach // and remove... e.g. stop loading frames, fire unload events. - // FIXME: Adding new children from event handlers can cause an infinite loop here. - for (RefPtr<Node> n = m_firstChild; n; n = n->nextSibling()) - willRemoveChild(n.get()); - + willRemoveChildren(protect.get()); + // exclude this node when looking for removed focusedNode since only children will be removed document()->removeFocusedNodeOfSubtree(this, true); @@ -936,6 +944,8 @@ static void dispatchChildInsertionEvents(Node* child) static void dispatchChildRemovalEvents(Node* child) { + ASSERT(!eventDispatchForbidden()); + #if ENABLE(INSPECTOR) if (Page* page = child->document()->page()) { if (InspectorController* inspectorController = page->inspectorController()) @@ -946,11 +956,6 @@ static void dispatchChildRemovalEvents(Node* child) RefPtr<Node> c = child; RefPtr<Document> document = child->document(); - // update auxiliary doc info (e.g. iterators) to note that node is being removed - document->nodeWillBeRemoved(child); - - document->incDOMTreeVersion(); - // dispatch pre-removal mutation events if (c->parentNode() && document->hasListenerType(Document::DOMNODEREMOVED_LISTENER)) c->dispatchEvent(MutationEvent::create(eventNames().DOMNodeRemovedEvent, true, c->parentNode())); diff --git a/src/3rdparty/webkit/WebCore/dom/Document.cpp b/src/3rdparty/webkit/WebCore/dom/Document.cpp index 545819d..9803cf5 100644 --- a/src/3rdparty/webkit/WebCore/dom/Document.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Document.cpp @@ -2957,6 +2957,28 @@ void Document::nodeChildrenChanged(ContainerNode* container) } } +void Document::nodeChildrenWillBeRemoved(ContainerNode* container) +{ + if (!disableRangeMutation(page())) { + HashSet<Range*>::const_iterator end = m_ranges.end(); + for (HashSet<Range*>::const_iterator it = m_ranges.begin(); it != end; ++it) + (*it)->nodeChildrenWillBeRemoved(container); + } + + HashSet<NodeIterator*>::const_iterator nodeIteratorsEnd = m_nodeIterators.end(); + for (HashSet<NodeIterator*>::const_iterator it = m_nodeIterators.begin(); it != nodeIteratorsEnd; ++it) { + for (Node* n = container->firstChild(); n; n = n->nextSibling()) + (*it)->nodeWillBeRemoved(n); + } + + if (Frame* frame = this->frame()) { + for (Node* n = container->firstChild(); n; n = n->nextSibling()) { + frame->selection()->nodeWillBeRemoved(n); + frame->dragCaretController()->nodeWillBeRemoved(n); + } + } +} + void Document::nodeWillBeRemoved(Node* n) { HashSet<NodeIterator*>::const_iterator nodeIteratorsEnd = m_nodeIterators.end(); diff --git a/src/3rdparty/webkit/WebCore/dom/Document.h b/src/3rdparty/webkit/WebCore/dom/Document.h index 44cdf0d..68927f4 100644 --- a/src/3rdparty/webkit/WebCore/dom/Document.h +++ b/src/3rdparty/webkit/WebCore/dom/Document.h @@ -616,6 +616,9 @@ public: void detachRange(Range*); void nodeChildrenChanged(ContainerNode*); + // nodeChildrenWillBeRemoved is used when removing all node children at once. + void nodeChildrenWillBeRemoved(ContainerNode*); + // nodeWillBeRemoved is only safe when removing one node at a time. void nodeWillBeRemoved(Node*); void textInserted(Node*, unsigned offset, unsigned length); diff --git a/src/3rdparty/webkit/WebCore/dom/Element.cpp b/src/3rdparty/webkit/WebCore/dom/Element.cpp index 6bd512d..a02bb4c 100644 --- a/src/3rdparty/webkit/WebCore/dom/Element.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Element.cpp @@ -937,7 +937,7 @@ void Element::recalcStyle(StyleChange change) newStyle->setChildrenAffectedByDirectAdjacentRules(); } - if (ch != NoChange || pseudoStyleCacheIsInvalid(currentStyle.get(), newStyle.get())) { + if (ch != NoChange || pseudoStyleCacheIsInvalid(currentStyle.get(), newStyle.get()) || change == Force && renderer() && renderer()->requiresForcedStyleRecalcPropagation()) { setRenderStyle(newStyle); } else if (needsStyleRecalc() && (styleChangeType() != SyntheticStyleChange) && (document()->usesSiblingRules() || document()->usesDescendantRules())) { // Although no change occurred, we use the new style so that the cousin style sharing code won't get @@ -1429,9 +1429,15 @@ void Element::normalizeAttributes() NamedNodeMap* attrs = attributes(true); if (!attrs) return; - unsigned numAttrs = attrs->length(); - for (unsigned i = 0; i < numAttrs; i++) { - if (Attr* attr = attrs->attributeItem(i)->attr()) + + if (attrs->isEmpty()) + return; + + Vector<RefPtr<Attribute> > attributeVector; + attrs->copyAttributesToVector(attributeVector); + size_t numAttrs = attributeVector.size(); + for (size_t i = 0; i < numAttrs; ++i) { + if (Attr* attr = attributeVector[i]->attr()) attr->normalize(); } } diff --git a/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.cpp b/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.cpp index d8a6ba8..ee979cf 100644 --- a/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.cpp +++ b/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.cpp @@ -172,6 +172,11 @@ PassRefPtr<Node> NamedNodeMap::item(unsigned index) const return m_attributes[index]->createAttrIfNeeded(m_element); } +void NamedNodeMap::copyAttributesToVector(Vector<RefPtr<Attribute> >& copy) +{ + copy = m_attributes; +} + Attribute* NamedNodeMap::getAttributeItemSlowCase(const String& name, bool shouldIgnoreAttributeCase) const { unsigned len = length(); diff --git a/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.h b/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.h index d5136b5..e292576 100644 --- a/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.h +++ b/src/3rdparty/webkit/WebCore/dom/NamedAttrMap.h @@ -72,6 +72,8 @@ public: Attribute* attributeItem(unsigned index) const { return m_attributes[index].get(); } Attribute* getAttributeItem(const QualifiedName&) const; + void copyAttributesToVector(Vector<RefPtr<Attribute> >&); + void shrinkToLength() { m_attributes.shrinkCapacity(length()); } void reserveInitialCapacity(unsigned capacity) { m_attributes.reserveInitialCapacity(capacity); } diff --git a/src/3rdparty/webkit/WebCore/dom/NamedNodeMap.idl b/src/3rdparty/webkit/WebCore/dom/NamedNodeMap.idl index 4d36577..7bfbf23 100644 --- a/src/3rdparty/webkit/WebCore/dom/NamedNodeMap.idl +++ b/src/3rdparty/webkit/WebCore/dom/NamedNodeMap.idl @@ -28,7 +28,7 @@ module core { Node getNamedItem(in DOMString name); - Node setNamedItem(in Node node) + [Custom] Node setNamedItem(in Node node) raises(DOMException); Node removeNamedItem(in DOMString name) @@ -46,7 +46,7 @@ module core { // FIXME: the implementation does take an exceptioncode parameter. /*raises(DOMException)*/; - Node setNamedItemNS(in Node node) + [Custom] Node setNamedItemNS(in Node node) raises(DOMException); [OldStyleObjC] Node removeNamedItemNS(in [ConvertNullToNullString] DOMString namespaceURI, diff --git a/src/3rdparty/webkit/WebCore/dom/Node.idl b/src/3rdparty/webkit/WebCore/dom/Node.idl index 0489316..22d9a85 100644 --- a/src/3rdparty/webkit/WebCore/dom/Node.idl +++ b/src/3rdparty/webkit/WebCore/dom/Node.idl @@ -51,7 +51,7 @@ module core { readonly attribute [ConvertNullStringTo=Null] DOMString nodeName; // FIXME: the spec says this can also raise on retrieval. - attribute [ConvertNullStringTo=Null, ConvertNullToNullString] DOMString nodeValue + attribute [CustomSetter, ConvertNullStringTo=Null, ConvertNullToNullString] DOMString nodeValue setter raises(DOMException); readonly attribute unsigned short nodeType; @@ -96,7 +96,7 @@ module core { readonly attribute [ConvertNullStringTo=Null] DOMString baseURI; // FIXME: the spec says this can also raise on retrieval. - attribute [ConvertNullStringTo=Null, ConvertNullToNullString] DOMString textContent + attribute [CustomSetter, ConvertNullStringTo=Null, ConvertNullToNullString] DOMString textContent setter raises(DOMException); boolean isSameNode(in Node other); diff --git a/src/3rdparty/webkit/WebCore/dom/Range.cpp b/src/3rdparty/webkit/WebCore/dom/Range.cpp index 52d1785..689b590 100644 --- a/src/3rdparty/webkit/WebCore/dom/Range.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Range.cpp @@ -1716,6 +1716,31 @@ void Range::nodeChildrenChanged(ContainerNode* container) boundaryNodeChildrenChanged(m_end, container); } +static inline void boundaryNodeChildrenWillBeRemoved(RangeBoundaryPoint& boundary, ContainerNode* container) +{ + for (Node* nodeToBeRemoved = container->firstChild(); nodeToBeRemoved; nodeToBeRemoved = nodeToBeRemoved->nextSibling()) { + if (boundary.childBefore() == nodeToBeRemoved) { + boundary.setToStartOfNode(container); + return; + } + + for (Node* n = boundary.container(); n; n = n->parentNode()) { + if (n == nodeToBeRemoved) { + boundary.setToStartOfNode(container); + return; + } + } + } +} + +void Range::nodeChildrenWillBeRemoved(ContainerNode* container) +{ + ASSERT(container); + ASSERT(container->document() == m_ownerDocument); + boundaryNodeChildrenWillBeRemoved(m_start, container); + boundaryNodeChildrenWillBeRemoved(m_end, container); +} + static inline void boundaryNodeWillBeRemoved(RangeBoundaryPoint& boundary, Node* nodeToBeRemoved) { if (boundary.childBefore() == nodeToBeRemoved) { diff --git a/src/3rdparty/webkit/WebCore/dom/Range.h b/src/3rdparty/webkit/WebCore/dom/Range.h index fd0f66a..bfddd32 100644 --- a/src/3rdparty/webkit/WebCore/dom/Range.h +++ b/src/3rdparty/webkit/WebCore/dom/Range.h @@ -111,6 +111,7 @@ public: void textQuads(Vector<FloatQuad>&, bool useSelectionHeight = false); void nodeChildrenChanged(ContainerNode*); + void nodeChildrenWillBeRemoved(ContainerNode*); void nodeWillBeRemoved(Node*); void textInserted(Node*, unsigned offset, unsigned length); diff --git a/src/3rdparty/webkit/WebCore/editing/EditorCommand.cpp b/src/3rdparty/webkit/WebCore/editing/EditorCommand.cpp index 34fa46d..4cb34ac 100644 --- a/src/3rdparty/webkit/WebCore/editing/EditorCommand.cpp +++ b/src/3rdparty/webkit/WebCore/editing/EditorCommand.cpp @@ -1069,6 +1069,21 @@ static bool supportedFromMenuOrKeyBinding(Frame*, EditorCommandSource source) return source == CommandFromMenuOrKeyBinding; } +static bool supportedCopyCut(Frame* frame, EditorCommandSource source) +{ + switch (source) { + case CommandFromMenuOrKeyBinding: + return true; + case CommandFromDOM: + case CommandFromDOMWithUserInterface: { + Settings* settings = frame ? frame->settings() : 0; + return settings && settings->javaScriptCanAccessClipboard(); + } + } + ASSERT_NOT_REACHED(); + return false; +} + static bool supportedPaste(Frame* frame, EditorCommandSource source) { switch (source) { @@ -1077,7 +1092,7 @@ static bool supportedPaste(Frame* frame, EditorCommandSource source) case CommandFromDOM: case CommandFromDOMWithUserInterface: { Settings* settings = frame ? frame->settings() : 0; - return settings && settings->isDOMPasteAllowed(); + return settings && (settings->javaScriptCanAccessClipboard() ? settings->isDOMPasteAllowed() : 0); } } ASSERT_NOT_REACHED(); @@ -1304,9 +1319,9 @@ static const CommandMap& createCommandMap() { "BackColor", { executeBackColor, supported, enabledInRichlyEditableText, stateNone, valueBackColor, notTextInsertion, doNotAllowExecutionWhenDisabled } }, { "BackwardDelete", { executeDeleteBackward, supportedFromMenuOrKeyBinding, enabledInEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } }, // FIXME: remove BackwardDelete when Safari for Windows stops using it. { "Bold", { executeToggleBold, supported, enabledInRichlyEditableText, stateBold, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } }, - { "Copy", { executeCopy, supported, enabledCopy, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } }, + { "Copy", { executeCopy, supportedCopyCut, enabledCopy, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } }, { "CreateLink", { executeCreateLink, supported, enabledInRichlyEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } }, - { "Cut", { executeCut, supported, enabledCut, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } }, + { "Cut", { executeCut, supportedCopyCut, enabledCut, stateNone, valueNull, notTextInsertion, allowExecutionWhenDisabled } }, { "Delete", { executeDelete, supported, enabledDelete, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } }, { "DeleteBackward", { executeDeleteBackward, supportedFromMenuOrKeyBinding, enabledInEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } }, { "DeleteBackwardByDecomposingPreviousCharacter", { executeDeleteBackwardByDecomposingPreviousCharacter, supportedFromMenuOrKeyBinding, enabledInEditableText, stateNone, valueNull, notTextInsertion, doNotAllowExecutionWhenDisabled } }, diff --git a/src/3rdparty/webkit/WebCore/editing/markup.cpp b/src/3rdparty/webkit/WebCore/editing/markup.cpp index 787dad9..7e90107 100644 --- a/src/3rdparty/webkit/WebCore/editing/markup.cpp +++ b/src/3rdparty/webkit/WebCore/editing/markup.cpp @@ -404,10 +404,12 @@ static void appendStartMarkup(Vector<UChar>& result, const Node* node, const Ran if (Node* parent = node->parentNode()) { if (parent->hasTagName(scriptTag) || parent->hasTagName(styleTag) - || parent->hasTagName(textareaTag) || parent->hasTagName(xmpTag)) { appendUCharRange(result, ucharRange(node, range)); break; + } else if (parent->hasTagName(textareaTag)) { + appendEscapedContent(result, ucharRange(node, range), documentIsHTML); + break; } } if (!annotate) { diff --git a/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.cpp b/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.cpp index 7aed66c..1232cfc 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.cpp +++ b/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.cpp @@ -264,14 +264,7 @@ JSValue JSC_HOST_CALL jsNamedNodeMapPrototypeFunctionSetNamedItem(ExecState* exe if (!thisValue.inherits(&JSNamedNodeMap::s_info)) return throwError(exec, TypeError); JSNamedNodeMap* castedThisObj = static_cast<JSNamedNodeMap*>(asObject(thisValue)); - NamedNodeMap* imp = static_cast<NamedNodeMap*>(castedThisObj->impl()); - ExceptionCode ec = 0; - Node* node = toNode(args.at(0)); - - - JSC::JSValue result = toJS(exec, castedThisObj->globalObject(), WTF::getPtr(imp->setNamedItem(node, ec))); - setDOMException(exec, ec); - return result; + return castedThisObj->setNamedItem(exec, args); } JSValue JSC_HOST_CALL jsNamedNodeMapPrototypeFunctionRemoveNamedItem(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args) @@ -325,14 +318,7 @@ JSValue JSC_HOST_CALL jsNamedNodeMapPrototypeFunctionSetNamedItemNS(ExecState* e if (!thisValue.inherits(&JSNamedNodeMap::s_info)) return throwError(exec, TypeError); JSNamedNodeMap* castedThisObj = static_cast<JSNamedNodeMap*>(asObject(thisValue)); - NamedNodeMap* imp = static_cast<NamedNodeMap*>(castedThisObj->impl()); - ExceptionCode ec = 0; - Node* node = toNode(args.at(0)); - - - JSC::JSValue result = toJS(exec, castedThisObj->globalObject(), WTF::getPtr(imp->setNamedItemNS(node, ec))); - setDOMException(exec, ec); - return result; + return castedThisObj->setNamedItemNS(exec, args); } JSValue JSC_HOST_CALL jsNamedNodeMapPrototypeFunctionRemoveNamedItemNS(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args) diff --git a/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.h b/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.h index 0fa1fdf..b79e97c 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.h +++ b/src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.h @@ -50,6 +50,10 @@ public: virtual void getOwnPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties); static JSC::JSValue getConstructor(JSC::ExecState*, JSC::JSGlobalObject*); + + // Custom functions + JSC::JSValue setNamedItem(JSC::ExecState*, const JSC::ArgList&); + JSC::JSValue setNamedItemNS(JSC::ExecState*, const JSC::ArgList&); NamedNodeMap* impl() const { return m_impl.get(); } private: diff --git a/src/3rdparty/webkit/WebCore/generated/JSNode.cpp b/src/3rdparty/webkit/WebCore/generated/JSNode.cpp index 47dafd4..1e16be6 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSNode.cpp +++ b/src/3rdparty/webkit/WebCore/generated/JSNode.cpp @@ -394,11 +394,7 @@ void JSNode::put(ExecState* exec, const Identifier& propertyName, JSValue value, void setJSNodeNodeValue(ExecState* exec, JSObject* thisObject, JSValue value) { - JSNode* castedThisObj = static_cast<JSNode*>(thisObject); - Node* imp = static_cast<Node*>(castedThisObj->impl()); - ExceptionCode ec = 0; - imp->setNodeValue(valueToStringWithNullCheck(exec, value), ec); - setDOMException(exec, ec); + static_cast<JSNode*>(thisObject)->setNodeValue(exec, value); } void setJSNodePrefix(ExecState* exec, JSObject* thisObject, JSValue value) @@ -412,11 +408,7 @@ void setJSNodePrefix(ExecState* exec, JSObject* thisObject, JSValue value) void setJSNodeTextContent(ExecState* exec, JSObject* thisObject, JSValue value) { - JSNode* castedThisObj = static_cast<JSNode*>(thisObject); - Node* imp = static_cast<Node*>(castedThisObj->impl()); - ExceptionCode ec = 0; - imp->setTextContent(valueToStringWithNullCheck(exec, value), ec); - setDOMException(exec, ec); + static_cast<JSNode*>(thisObject)->setTextContent(exec, value); } JSValue JSNode::getConstructor(ExecState* exec, JSGlobalObject* globalObject) diff --git a/src/3rdparty/webkit/WebCore/generated/JSNode.h b/src/3rdparty/webkit/WebCore/generated/JSNode.h index be6dd23..e2c82c4 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSNode.h +++ b/src/3rdparty/webkit/WebCore/generated/JSNode.h @@ -54,6 +54,10 @@ public: static JSC::JSValue getConstructor(JSC::ExecState*, JSC::JSGlobalObject*); + // Custom attributes + void setNodeValue(JSC::ExecState*, JSC::JSValue); + void setTextContent(JSC::ExecState*, JSC::JSValue); + // Custom functions JSC::JSValue insertBefore(JSC::ExecState*, const JSC::ArgList&); JSC::JSValue replaceChild(JSC::ExecState*, const JSC::ArgList&); diff --git a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp index 9cec7a9..73a572e 100644 --- a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp +++ b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp @@ -1215,7 +1215,7 @@ PassRefPtr<CanvasPattern> CanvasRenderingContext2D::createPattern(HTMLImageEleme if (!cachedImage || !image->cachedImage()->image()) return CanvasPattern::create(Image::nullImage(), repeatX, repeatY, true); - bool originClean = !canvas()->document()->securityOrigin()->taintsCanvas(KURL(KURL(), cachedImage->url())); + bool originClean = !canvas()->document()->securityOrigin()->taintsCanvas(KURL(KURL(), cachedImage->url())) && cachedImage->image()->hasSingleSecurityOrigin(); return CanvasPattern::create(cachedImage->image(), repeatX, repeatY, originClean); } diff --git a/src/3rdparty/webkit/WebCore/loader/DocumentThreadableLoader.cpp b/src/3rdparty/webkit/WebCore/loader/DocumentThreadableLoader.cpp index de0a0b0..55f51ac 100644 --- a/src/3rdparty/webkit/WebCore/loader/DocumentThreadableLoader.cpp +++ b/src/3rdparty/webkit/WebCore/loader/DocumentThreadableLoader.cpp @@ -81,16 +81,19 @@ DocumentThreadableLoader::DocumentThreadableLoader(Document* document, Threadabl ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl); - if (!m_options.forcePreflight && isSimpleCrossOriginAccessRequest(request.httpMethod(), request.httpHeaderFields())) - makeSimpleCrossOriginAccessRequest(request); + OwnPtr<ResourceRequest> crossOriginRequest(new ResourceRequest(request)); + crossOriginRequest->removeCredentials(); + crossOriginRequest->setAllowCookies(m_options.allowCredentials); + + if (!m_options.forcePreflight && isSimpleCrossOriginAccessRequest(crossOriginRequest->httpMethod(), crossOriginRequest->httpHeaderFields())) + makeSimpleCrossOriginAccessRequest(*crossOriginRequest); else { - m_actualRequest.set(new ResourceRequest(request)); - m_actualRequest->setAllowCookies(m_options.allowCredentials); + m_actualRequest.set(crossOriginRequest.release()); - if (CrossOriginPreflightResultCache::shared().canSkipPreflight(document->securityOrigin()->toString(), request.url(), m_options.allowCredentials, request.httpMethod(), request.httpHeaderFields())) + if (CrossOriginPreflightResultCache::shared().canSkipPreflight(document->securityOrigin()->toString(), m_actualRequest->url(), m_options.allowCredentials, m_actualRequest->httpMethod(), m_actualRequest->httpHeaderFields())) preflightSuccess(); else - makeCrossOriginAccessRequestWithPreflight(request); + makeCrossOriginAccessRequestWithPreflight(*m_actualRequest); } } @@ -106,8 +109,6 @@ void DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest(const Resource // Make a copy of the passed request so that we can modify some details. ResourceRequest crossOriginRequest(request); - crossOriginRequest.removeCredentials(); - crossOriginRequest.setAllowCookies(m_options.allowCredentials); crossOriginRequest.setHTTPOrigin(m_document->securityOrigin()->toString()); loadRequest(crossOriginRequest, DoSecurityCheck); @@ -287,11 +288,17 @@ void DocumentThreadableLoader::preflightSuccess() void DocumentThreadableLoader::preflightFailure() { + m_actualRequest = 0; // Prevent didFinishLoading() from bypassing access check. m_client->didFail(ResourceError()); } void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, SecurityCheckPolicy securityCheck) { + // Any credential should have been removed from the cross-site requests. + const KURL& requestURL = request.url(); + ASSERT(m_sameOriginRequest || requestURL.user().isEmpty()); + ASSERT(m_sameOriginRequest || requestURL.pass().isEmpty()); + if (m_async) { // Don't sniff content or send load callbacks for the preflight request. bool sendLoadCallbacks = m_options.sendLoadCallbacks && !m_actualRequest; @@ -315,15 +322,15 @@ void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Secur // No exception for file:/// resources, see <rdar://problem/4962298>. // Also, if we have an HTTP response, then it wasn't a network error in fact. - if (!error.isNull() && !request.url().isLocalFile() && response.httpStatusCode() <= 0) { + if (!error.isNull() && !requestURL.isLocalFile() && response.httpStatusCode() <= 0) { m_client->didFail(error); return; } // FIXME: FrameLoader::loadSynchronously() does not tell us whether a redirect happened or not, so we guess by comparing the // request and response URLs. This isn't a perfect test though, since a server can serve a redirect to the same URL that was - // requested. - if (request.url() != response.url() && !isAllowedRedirect(response.url())) { + // requested. Also comparing the request and response URLs as strings will fail if the requestURL still has its credentials. + if (requestURL != response.url() && !isAllowedRedirect(response.url())) { m_client->didFailRedirectCheck(); return; } diff --git a/src/3rdparty/webkit/WebCore/page/DragController.cpp b/src/3rdparty/webkit/WebCore/page/DragController.cpp index f238b27..0da6873 100644 --- a/src/3rdparty/webkit/WebCore/page/DragController.cpp +++ b/src/3rdparty/webkit/WebCore/page/DragController.cpp @@ -313,7 +313,7 @@ bool DragController::tryDocumentDrag(DragData* dragData, DragDestinationAction a } IntPoint point = frameView->windowToContents(dragData->clientPosition()); - Element* element = elementUnderMouse(m_documentUnderMouse, point); + Element* element = elementUnderMouse(m_documentUnderMouse.get(), point); if (!asFileInput(element)) { VisibleSelection dragCaret = m_documentUnderMouse->frame()->visiblePositionForPoint(point); m_page->dragCaretController()->setSelection(dragCaret); @@ -363,7 +363,7 @@ bool DragController::concludeEditDrag(DragData* dragData) return false; IntPoint point = m_documentUnderMouse->view()->windowToContents(dragData->clientPosition()); - Element* element = elementUnderMouse(m_documentUnderMouse, point); + Element* element = elementUnderMouse(m_documentUnderMouse.get(), point); Frame* innerFrame = element->ownerDocument()->frame(); ASSERT(innerFrame); @@ -439,7 +439,7 @@ bool DragController::concludeEditDrag(DragData* dragData) applyCommand(MoveSelectionCommand::create(fragment, dragCaret.base(), smartInsert, smartDelete)); } else { if (setSelectionToDragCaret(innerFrame, dragCaret, range, point)) - applyCommand(ReplaceSelectionCommand::create(m_documentUnderMouse, fragment, true, dragData->canSmartReplace(), chosePlainText)); + applyCommand(ReplaceSelectionCommand::create(m_documentUnderMouse.get(), fragment, true, dragData->canSmartReplace(), chosePlainText)); } } else { String text = dragData->asPlainText(); @@ -450,7 +450,7 @@ bool DragController::concludeEditDrag(DragData* dragData) m_client->willPerformDragDestinationAction(DragDestinationActionEdit, dragData); if (setSelectionToDragCaret(innerFrame, dragCaret, range, point)) - applyCommand(ReplaceSelectionCommand::create(m_documentUnderMouse, createFragmentFromText(range.get(), text), true, false, true)); + applyCommand(ReplaceSelectionCommand::create(m_documentUnderMouse.get(), createFragmentFromText(range.get(), text), true, false, true)); } loader->setAllowStaleResources(false); diff --git a/src/3rdparty/webkit/WebCore/page/DragController.h b/src/3rdparty/webkit/WebCore/page/DragController.h index 3b2b083..712f9ab 100644 --- a/src/3rdparty/webkit/WebCore/page/DragController.h +++ b/src/3rdparty/webkit/WebCore/page/DragController.h @@ -67,13 +67,11 @@ namespace WebCore { DragOperation sourceDragOperation() const { return m_sourceDragOperation; } void setDraggingImageURL(const KURL& url) { m_draggingImageURL = url; } const KURL& draggingImageURL() const { return m_draggingImageURL; } - void setDragInitiator(Document* initiator) { m_dragInitiator = initiator; m_didInitiateDrag = true; } - Document* dragInitiator() const { return m_dragInitiator; } void setDragOffset(const IntPoint& offset) { m_dragOffset = offset; } const IntPoint& dragOffset() const { return m_dragOffset; } DragSourceAction dragSourceAction() const { return m_dragSourceAction; } - Document* documentUnderMouse() const { return m_documentUnderMouse; } + Document* documentUnderMouse() const { return m_documentUnderMouse.get(); } DragDestinationAction dragDestinationAction() const { return m_dragDestinationAction; } DragSourceAction delegateDragSourceAction(const IntPoint& pagePoint); @@ -114,8 +112,8 @@ namespace WebCore { Page* m_page; DragClient* m_client; - Document* m_documentUnderMouse; // The document the mouse was last dragged over. - Document* m_dragInitiator; // The Document (if any) that initiated the drag. + RefPtr<Document> m_documentUnderMouse; // The document the mouse was last dragged over. + RefPtr<Document> m_dragInitiator; // The Document (if any) that initiated the drag. DragDestinationAction m_dragDestinationAction; DragSourceAction m_dragSourceAction; diff --git a/src/3rdparty/webkit/WebCore/page/EventHandler.cpp b/src/3rdparty/webkit/WebCore/page/EventHandler.cpp index 1654257..f1ee742 100644 --- a/src/3rdparty/webkit/WebCore/page/EventHandler.cpp +++ b/src/3rdparty/webkit/WebCore/page/EventHandler.cpp @@ -2163,7 +2163,9 @@ bool EventHandler::keyEvent(const PlatformKeyboardEvent& initialKeyEvent) if (initialKeyEvent.type() == PlatformKeyboardEvent::RawKeyDown) { node->dispatchEvent(keydown, ec); - return keydown->defaultHandled() || keydown->defaultPrevented(); + // If frame changed as a result of keydown dispatch, then return true to avoid sending a subsequent keypress message to the new frame. + bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->focusController()->focusedOrMainFrame(); + return keydown->defaultHandled() || keydown->defaultPrevented() || changedFocusedFrame; } // Run input method in advance of DOM event handling. This may result in the IM @@ -2183,7 +2185,9 @@ bool EventHandler::keyEvent(const PlatformKeyboardEvent& initialKeyEvent) } node->dispatchEvent(keydown, ec); - bool keydownResult = keydown->defaultHandled() || keydown->defaultPrevented(); + // If frame changed as a result of keydown dispatch, then return early to avoid sending a subsequent keypress message to the new frame. + bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->focusController()->focusedOrMainFrame(); + bool keydownResult = keydown->defaultHandled() || keydown->defaultPrevented() || changedFocusedFrame; if (handledByInputMethod || (keydownResult && !backwardCompatibilityMode)) return keydownResult; diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/WebCore/page/FrameView.cpp index 639414b..01f0375 100644 --- a/src/3rdparty/webkit/WebCore/page/FrameView.cpp +++ b/src/3rdparty/webkit/WebCore/page/FrameView.cpp @@ -1315,14 +1315,13 @@ void FrameView::scheduleRelayoutOfSubtree(RenderObject* relayoutRoot) { ASSERT(m_frame->view() == this); - if (!m_layoutSchedulingEnabled || (m_frame->contentRenderer() - && m_frame->contentRenderer()->needsLayout())) { + if (m_frame->contentRenderer() && m_frame->contentRenderer()->needsLayout()) { if (relayoutRoot) relayoutRoot->markContainingBlocksForLayout(false); return; } - if (layoutPending()) { + if (layoutPending() || !m_layoutSchedulingEnabled) { if (m_layoutRoot != relayoutRoot) { if (isObjectAncestorContainerOf(m_layoutRoot, relayoutRoot)) { // Keep the current root @@ -1339,7 +1338,7 @@ void FrameView::scheduleRelayoutOfSubtree(RenderObject* relayoutRoot) relayoutRoot->markContainingBlocksForLayout(false); } } - } else { + } else if (m_layoutSchedulingEnabled) { int delay = m_frame->document()->minimumLayoutDelay(); m_layoutRoot = relayoutRoot; m_delayedLayout = delay != 0; diff --git a/src/3rdparty/webkit/WebCore/page/SecurityOrigin.cpp b/src/3rdparty/webkit/WebCore/page/SecurityOrigin.cpp index c0b3e22..516c533 100644 --- a/src/3rdparty/webkit/WebCore/page/SecurityOrigin.cpp +++ b/src/3rdparty/webkit/WebCore/page/SecurityOrigin.cpp @@ -90,6 +90,20 @@ static URLSchemesMap& schemesWithUniqueOrigins() return schemesWithUniqueOrigins; } +static bool schemeRequiresAuthority(const String& scheme) +{ + DEFINE_STATIC_LOCAL(URLSchemesMap, schemes, ()); + + if (schemes.isEmpty()) { + schemes.add("http"); + schemes.add("https"); + schemes.add("ftp"); + } + + return schemes.contains(scheme); +} + + SecurityOrigin::SecurityOrigin(const KURL& url, SandboxFlags sandboxFlags) : m_sandboxFlags(sandboxFlags) , m_protocol(url.protocol().isNull() ? "" : url.protocol().lower()) @@ -103,6 +117,10 @@ SecurityOrigin::SecurityOrigin(const KURL& url, SandboxFlags sandboxFlags) if (m_protocol == "about" || m_protocol == "javascript") m_protocol = ""; + // For edge case URLs that were probably misparsed, make sure that the origin is unique. + if (schemeRequiresAuthority(m_protocol) && m_host.isEmpty()) + m_isUnique = true; + // document.domain starts as m_host, but can be set by the DOM. m_domain = m_host; diff --git a/src/3rdparty/webkit/WebCore/page/Settings.cpp b/src/3rdparty/webkit/WebCore/page/Settings.cpp index 475d373..c0659d2 100644 --- a/src/3rdparty/webkit/WebCore/page/Settings.cpp +++ b/src/3rdparty/webkit/WebCore/page/Settings.cpp @@ -79,6 +79,7 @@ Settings::Settings(Page* page) , m_allowUniversalAccessFromFileURLs(true) , m_allowFileAccessFromFileURLs(true) , m_javaScriptCanOpenWindowsAutomatically(false) + , m_javaScriptCanAccessClipboard(false) , m_shouldPrintBackgrounds(false) , m_textAreasAreResizable(false) #if ENABLE(DASHBOARD_SUPPORT) @@ -291,6 +292,11 @@ void Settings::setJavaScriptCanOpenWindowsAutomatically(bool javaScriptCanOpenWi m_javaScriptCanOpenWindowsAutomatically = javaScriptCanOpenWindowsAutomatically; } +void Settings::setJavaScriptCanAccessClipboard(bool javaScriptCanAccessClipboard) +{ + m_javaScriptCanAccessClipboard = javaScriptCanAccessClipboard; +} + void Settings::setDefaultTextEncodingName(const String& defaultTextEncodingName) { m_defaultTextEncodingName = defaultTextEncodingName; diff --git a/src/3rdparty/webkit/WebCore/page/Settings.h b/src/3rdparty/webkit/WebCore/page/Settings.h index b677712..a6653ce 100644 --- a/src/3rdparty/webkit/WebCore/page/Settings.h +++ b/src/3rdparty/webkit/WebCore/page/Settings.h @@ -122,6 +122,9 @@ namespace WebCore { void setJavaScriptCanOpenWindowsAutomatically(bool); bool javaScriptCanOpenWindowsAutomatically() const { return m_javaScriptCanOpenWindowsAutomatically; } + void setJavaScriptCanAccessClipboard(bool); + bool javaScriptCanAccessClipboard() const { return m_javaScriptCanAccessClipboard; } + void setSpatialNavigationEnabled(bool); bool isSpatialNavigationEnabled() const { return m_isSpatialNavigationEnabled; } @@ -330,6 +333,7 @@ namespace WebCore { bool m_allowUniversalAccessFromFileURLs: 1; bool m_allowFileAccessFromFileURLs: 1; bool m_javaScriptCanOpenWindowsAutomatically : 1; + bool m_javaScriptCanAccessClipboard : 1; bool m_shouldPrintBackgrounds : 1; bool m_textAreasAreResizable : 1; #if ENABLE(DASHBOARD_SUPPORT) diff --git a/src/3rdparty/webkit/WebCore/platform/KURL.cpp b/src/3rdparty/webkit/WebCore/platform/KURL.cpp index 40adfbc..3c8d50f 100644 --- a/src/3rdparty/webkit/WebCore/platform/KURL.cpp +++ b/src/3rdparty/webkit/WebCore/platform/KURL.cpp @@ -215,6 +215,9 @@ static const unsigned char characterClassTable[256] = { /* 252 */ BadChar, /* 253 */ BadChar, /* 254 */ BadChar, /* 255 */ BadChar }; +static const unsigned maximumValidPortNumber = 0xFFFE; +static const unsigned invalidPortNumber = 0xFFFF; + static int copyPathRemovingDots(char* dst, const char* src, int srcStart, int srcEnd); static void encodeRelativeString(const String& rel, const TextEncoding&, CharBuffer& ouput); static String substituteBackslashes(const String&); @@ -573,12 +576,17 @@ String KURL::host() const unsigned short KURL::port() const { - if (m_hostEnd == m_portEnd) + // We return a port of 0 if there is no port specified. This can happen in two situations: + // 1) The URL contains no colon after the host name and before the path component of the URL. + // 2) The URL contains a colon but there's no port number before the path component of the URL begins. + if (m_hostEnd == m_portEnd || m_hostEnd == m_portEnd - 1) return 0; - int number = m_string.substring(m_hostEnd + 1, m_portEnd - m_hostEnd - 1).toInt(); - if (number < 0 || number > 0xFFFF) - return 0; + const UChar* stringData = m_string.characters(); + bool ok = false; + unsigned number = charactersToUIntStrict(stringData + m_hostEnd + 1, m_portEnd - m_hostEnd - 1, &ok); + if (!ok || number > maximumValidPortNumber) + return invalidPortNumber; return number; } @@ -1757,7 +1765,7 @@ bool portAllowed(const KURL& url) 6667, // Standard IRC [Apple addition] 6668, // Alternate IRC [Apple addition] 6669, // Alternate IRC [Apple addition] - + invalidPortNumber, // Used to block all invalid port numbers }; const unsigned short* const blockedPortListEnd = blockedPortList + sizeof(blockedPortList) / sizeof(blockedPortList[0]); diff --git a/src/3rdparty/webkit/WebCore/platform/KURLGoogle.cpp b/src/3rdparty/webkit/WebCore/platform/KURLGoogle.cpp index 8be7009..10b9bb8 100644 --- a/src/3rdparty/webkit/WebCore/platform/KURLGoogle.cpp +++ b/src/3rdparty/webkit/WebCore/platform/KURLGoogle.cpp @@ -57,6 +57,8 @@ using std::binary_search; namespace WebCore { +static const unsigned invalidPortNumber = 0xFFFF; + // Wraps WebCore's text encoding in a character set converter for the // canonicalizer. class KURLCharsetConverter : public url_canon::CharsetConverter { @@ -499,7 +501,7 @@ String KURL::host() const unsigned short KURL::port() const { if (!m_url.m_isValid || m_url.m_parsed.port.len <= 0) - return 0; + return invalidPortNumber; int port = url_parse::ParsePort(m_url.utf8String().data(), m_url.m_parsed.port); if (port == url_parse::PORT_UNSPECIFIED) return 0; @@ -853,6 +855,12 @@ bool portAllowed(const KURL& url) 3659, // apple-sasl / PasswordServer [Apple addition] 4045, // lockd 6000, // X11 + 6665, // Alternate IRC [Apple addition] + 6666, // Alternate IRC [Apple addition] + 6667, // Standard IRC [Apple addition] + 6668, // Alternate IRC [Apple addition] + 6669, // Alternate IRC [Apple addition] + invalidPortNumber, // Used to block all invalid port numbers }; const unsigned short* const blockedPortListEnd = blockedPortList + sizeof(blockedPortList) / sizeof(blockedPortList[0]); diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/PathQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/PathQt.cpp index a7351a0..c96fe25 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/PathQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/PathQt.cpp @@ -69,23 +69,31 @@ Path& Path::operator=(const Path& other) return *this; } +static inline bool areCollinear(const QPointF& a, const QPointF& b, const QPointF& c) +{ + // Solved from comparing the slopes of a to b and b to c: (ay-by)/(ax-bx) == (cy-by)/(cx-bx) + return qFuzzyCompare((c.y() - b.y()) * (a.x() - b.x()), (a.y() - b.y()) * (c.x() - b.x())); +} + +static inline bool withinRange(qreal p, qreal a, qreal b) +{ + return (p >= a && p <= b) || (p >= b && p <= a); +} + // Check whether a point is on the border -bool isPointOnPathBorder(const QPolygonF& border, const QPointF& p) +static bool isPointOnPathBorder(const QPolygonF& border, const QPointF& p) { QPointF p1 = border.at(0); QPointF p2; for (int i = 1; i < border.size(); ++i) { p2 = border.at(i); - // (x1<=x<=x2||x1=>x>=x2) && (y1<=y<=y2||y1=>y>=y2) && (y2-y1)(x-x1) == (y-y1)(x2-x1) - // In which, (y2-y1)(x-x1) == (y-y1)(x2-x1) is from (y2-y1)/(x2-x1) == (y-y1)/(x-x1) - // it want to check the slope between p1 and p2 is same with slope between p and p1, - // if so then the three points lie on the same line. - // In which, (x1<=x<=x2||x1=>x>=x2) && (y1<=y<=y2||y1=>y>=y2) want to make sure p is - // between p1 and p2, not outside. - if (((p.x() <= p1.x() && p.x() >= p2.x()) || (p.x() >= p1.x() && p.x() <= p2.x())) - && ((p.y() <= p1.y() && p.y() >= p2.y()) || (p.y() >= p1.y() && p.y() <= p2.y())) - && (p2.y() - p1.y()) * (p.x() - p1.x()) == (p.y() - p1.y()) * (p2.x() - p1.x())) { + if (areCollinear(p, p1, p2) + // Once we know that the points are collinear we + // only need to check one of the coordinates + && (qAbs(p2.x() - p1.x()) > qAbs(p2.y() - p1.y()) ? + withinRange(p.x(), p1.x(), p2.x()) : + withinRange(p.y(), p1.y(), p2.y()))) { return true; } p1 = p2; @@ -199,19 +207,14 @@ void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius) float p1p2_length = sqrtf(p1p2.x() * p1p2.x() + p1p2.y() * p1p2.y()); double cos_phi = (p1p0.x() * p1p2.x() + p1p0.y() * p1p2.y()) / (p1p0_length * p1p2_length); - // all points on a line logic - if (cos_phi == -1) { + + // The points p0, p1, and p2 are on the same straight line (HTML5, 4.8.11.1.8) + // We could have used areCollinear() here, but since we're reusing + // the variables computed above later on we keep this logic. + if (qFuzzyCompare(qAbs(cos_phi), 1.0)) { m_path.lineTo(p1); return; } - if (cos_phi == 1) { - // add infinite far away point - unsigned int max_length = 65535; - double factor_max = max_length / p1p0_length; - FloatPoint ep((p0.x() + factor_max * p1p0.x()), (p0.y() + factor_max * p1p0.y())); - m_path.lineTo(ep); - return; - } float tangent = radius / tan(acos(cos_phi) / 2); float factor_p1p0 = tangent / p1p0_length; diff --git a/src/3rdparty/webkit/WebCore/platform/network/ProtectionSpace.h b/src/3rdparty/webkit/WebCore/platform/network/ProtectionSpace.h index 126b499..42cbc8a 100644 --- a/src/3rdparty/webkit/WebCore/platform/network/ProtectionSpace.h +++ b/src/3rdparty/webkit/WebCore/platform/network/ProtectionSpace.h @@ -47,6 +47,7 @@ enum ProtectionSpaceAuthenticationScheme { ProtectionSpaceAuthenticationSchemeHTMLForm = 4, ProtectionSpaceAuthenticationSchemeNTLM = 5, ProtectionSpaceAuthenticationSchemeNegotiate = 6, + ProtectionSpaceAuthenticationSchemeUnknown = 100, }; class ProtectionSpace { diff --git a/src/3rdparty/webkit/WebCore/rendering/FixedTableLayout.cpp b/src/3rdparty/webkit/WebCore/rendering/FixedTableLayout.cpp index 09af518..4d6b88c 100644 --- a/src/3rdparty/webkit/WebCore/rendering/FixedTableLayout.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/FixedTableLayout.cpp @@ -166,8 +166,7 @@ int FixedTableLayout::calcWidthArray(int) int usedSpan = 0; int i = 0; - while (usedSpan < span) { - ASSERT(cCol + i < nEffCols); + while (usedSpan < span && cCol + i < nEffCols) { int eSpan = m_table->spanOfEffCol(cCol + i); // Only set if no col element has already set it. if (m_width[cCol + i].isAuto() && w.type() != Auto) { diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderButton.h b/src/3rdparty/webkit/WebCore/rendering/RenderButton.h index 7fd6ab0..1fc5eb6 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderButton.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderButton.h @@ -57,12 +57,14 @@ public: virtual bool canHaveChildren() const; -protected: +private: virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle); virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); virtual bool hasLineIfEmpty() const { return true; } + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + void timerFired(Timer<RenderButton>*); RenderTextFragment* m_buttonText; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderDataGrid.h b/src/3rdparty/webkit/WebCore/rendering/RenderDataGrid.h index 467edcc..ce221ea 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderDataGrid.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderDataGrid.h @@ -53,6 +53,8 @@ public: private: virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + RenderStyle* columnStyle(DataGridColumn*); RenderStyle* headerStyle(DataGridColumn*); void recalcStyleForColumns(); diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h index 99dd35c..a5f3367 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h @@ -56,6 +56,8 @@ private: virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + // FileChooserClient methods. void valueChanged(); void repaint() { RenderBlock::repaint(); } diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp index 1d76742..5b1deff 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp @@ -274,7 +274,7 @@ void RenderInline::splitInlines(RenderBlock* fromBlock, RenderBlock* toBlock, // has to move into the inline continuation. Call updateBeforeAfterContent to ensure that the inline's :after // content gets properly destroyed. if (document()->usesBeforeAfterRules()) - inlineCurr->children()->updateBeforeAfterContent(this, AFTER); + inlineCurr->children()->updateBeforeAfterContent(inlineCurr, AFTER); // Now we need to take all of the children starting from the first child // *after* currChild and append them all to the clone. diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp index a012868..2aec361 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp @@ -3178,22 +3178,33 @@ void RenderLayer::updateHoverActiveState(const HitTestRequest& request, HitTestR // Locate the common ancestor render object for the two renderers. RenderObject* ancestor = commonAncestor(oldHoverObj, newHoverObj); + Vector<RefPtr<Node>, 32> nodesToRemoveFromChain; + Vector<RefPtr<Node>, 32> nodesToAddToChain; + if (oldHoverObj != newHoverObj) { // The old hover path only needs to be cleared up to (and not including) the common ancestor; for (RenderObject* curr = oldHoverObj; curr && curr != ancestor; curr = curr->hoverAncestor()) { - if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr->node()->inActiveChain())) { - curr->node()->setActive(false); - curr->node()->setHovered(false); - } + if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr->node()->inActiveChain())) + nodesToRemoveFromChain.append(curr->node()); } } // Now set the hover state for our new object up to the root. for (RenderObject* curr = newHoverObj; curr; curr = curr->hoverAncestor()) { - if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr->node()->inActiveChain())) { - curr->node()->setActive(request.active()); - curr->node()->setHovered(true); - } + if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr->node()->inActiveChain())) + nodesToAddToChain.append(curr->node()); + } + + size_t removeCount = nodesToRemoveFromChain.size(); + for (size_t i = 0; i < removeCount; ++i) { + nodesToRemoveFromChain[i]->setActive(false); + nodesToRemoveFromChain[i]->setHovered(false); + } + + size_t addCount = nodesToAddToChain.size(); + for (size_t i = 0; i < addCount; ++i) { + nodesToAddToChain[i]->setActive(request.active()); + nodesToAddToChain[i]->setHovered(true); } } diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderListItem.h b/src/3rdparty/webkit/WebCore/rendering/RenderListItem.h index c4c41dc..d140979 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderListItem.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderListItem.h @@ -63,6 +63,8 @@ private: virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + void updateMarkerLocation(); inline int calcValue() const; void updateValueNow() const; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderListMarker.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderListMarker.cpp index d0353ee..6c8f769 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderListMarker.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderListMarker.cpp @@ -101,8 +101,10 @@ static inline String toAlphabeticOrNumeric(int number, const UChar* sequence, in int length = 1; if (type == AlphabeticSequence) { - while ((numberShadow /= sequenceSize) > 0) - letters[lettersSize - ++length] = sequence[numberShadow % sequenceSize - 1]; + while ((numberShadow /= sequenceSize) > 0) { + --numberShadow; + letters[lettersSize - ++length] = sequence[numberShadow % sequenceSize]; + } } else { while ((numberShadow /= sequenceSize) > 0) letters[lettersSize - ++length] = sequence[numberShadow % sequenceSize]; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderMedia.h b/src/3rdparty/webkit/WebCore/rendering/RenderMedia.h index 0d24c4c..32d6d65 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderMedia.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderMedia.h @@ -118,6 +118,8 @@ private: virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + RefPtr<HTMLElement> m_controlsShadowRoot; RefPtr<MediaControlElement> m_panel; RefPtr<MediaControlMuteButtonElement> m_muteButton; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderMenuList.h b/src/3rdparty/webkit/WebCore/rendering/RenderMenuList.h index aeb6205..5ee8588 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderMenuList.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderMenuList.h @@ -78,6 +78,8 @@ private: virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + // PopupMenuClient methods virtual String itemText(unsigned listIndex) const; virtual String itemToolTip(unsigned listIndex) const; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderObject.h b/src/3rdparty/webkit/WebCore/rendering/RenderObject.h index d928521..593fa52 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderObject.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderObject.h @@ -322,6 +322,8 @@ public: bool cellWidthChanged() const { return m_cellWidthChanged; } void setCellWidthChanged(bool b = true) { m_cellWidthChanged = b; } + virtual bool requiresForcedStyleRecalcPropagation() const { return false; } + #if ENABLE(MATHML) virtual bool isRenderMathMLBlock() const { return false; } #endif // ENABLE(MATHML) @@ -412,7 +414,6 @@ public: void drawArcForBoxSide(GraphicsContext*, int x, int y, float thickness, IntSize radius, int angleStart, int angleSpan, BoxSide, Color, const Color& textcolor, EBorderStyle, bool firstCorner); -public: // The pseudo element style can be cached or uncached. Use the cached method if the pseudo element doesn't respect // any pseudo classes (and therefore has no concept of changing state). RenderStyle* getCachedPseudoStyle(PseudoId, RenderStyle* parentStyle = 0) const; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderProgress.h b/src/3rdparty/webkit/WebCore/rendering/RenderProgress.h index 0a90fde..7aa1efe 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderProgress.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderProgress.h @@ -40,6 +40,8 @@ private: virtual void calcPrefWidths(); virtual void layout(); virtual void updateFromElement(); + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + int m_position; }; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderSlider.h b/src/3rdparty/webkit/WebCore/rendering/RenderSlider.h index 92ad73b..fc8ce24 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderSlider.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderSlider.h @@ -58,6 +58,8 @@ namespace WebCore { virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + PassRefPtr<RenderStyle> createThumbStyle(const RenderStyle* parentStyle); int trackSize(); diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp index 307db64..c08adc2 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp @@ -203,7 +203,7 @@ void RenderText::deleteTextBoxes() PassRefPtr<StringImpl> RenderText::originalText() const { Node* e = node(); - return e ? static_cast<Text*>(e)->dataImpl() : 0; + return (e && e->isTextNode()) ? static_cast<Text*>(e)->dataImpl() : 0; } void RenderText::absoluteRects(Vector<IntRect>& rects, int tx, int ty) diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderTextControl.h b/src/3rdparty/webkit/WebCore/rendering/RenderTextControl.h index 2fc8edc..984f41d 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderTextControl.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderTextControl.h @@ -107,6 +107,8 @@ private: virtual bool canBeProgramaticallyScrolled(bool) const { return true; } + virtual bool requiresForcedStyleRecalcPropagation() const { return true; } + String finishText(Vector<UChar>&) const; bool m_wasChangedSinceLastChangeEvent; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderTextFragment.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderTextFragment.cpp index f3398a3..1e15d66 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderTextFragment.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderTextFragment.cpp @@ -47,7 +47,7 @@ RenderTextFragment::RenderTextFragment(Node* node, StringImpl* str) PassRefPtr<StringImpl> RenderTextFragment::originalText() const { Node* e = node(); - RefPtr<StringImpl> result = (e ? static_cast<Text*>(e)->dataImpl() : contentString()); + RefPtr<StringImpl> result = ((e && e->isTextNode()) ? static_cast<Text*>(e)->dataImpl() : contentString()); if (result && (start() > 0 || start() < result->length())) result = result->substring(start(), end()); return result.release(); @@ -80,7 +80,7 @@ UChar RenderTextFragment::previousCharacter() { if (start()) { Node* e = node(); - StringImpl* original = (e ? static_cast<Text*>(e)->dataImpl() : contentString()); + StringImpl* original = ((e && e->isTextNode()) ? static_cast<Text*>(e)->dataImpl() : contentString()); if (original) return (*original)[start() - 1]; } diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp index 47b4f3b..d907d86 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp @@ -187,6 +187,7 @@ void QWebSettingsPrivate::apply() value = attributes.value(QWebSettings::JavascriptCanAccessClipboard, global->attributes.value(QWebSettings::JavascriptCanAccessClipboard)); settings->setDOMPasteAllowed(value); + settings->setJavaScriptCanAccessClipboard(value); value = attributes.value(QWebSettings::DeveloperExtrasEnabled, global->attributes.value(QWebSettings::DeveloperExtrasEnabled)); @@ -235,8 +236,8 @@ void QWebSettingsPrivate::apply() global->attributes.value(QWebSettings::LocalContentCanAccessFileUrls)); settings->setAllowFileAccessFromFileURLs(value); - value = attributes.value(QWebSettings::XSSAuditorEnabled, - global->attributes.value(QWebSettings::XSSAuditorEnabled)); + value = attributes.value(QWebSettings::XSSAuditingEnabled, + global->attributes.value(QWebSettings::XSSAuditingEnabled)); settings->setXSSAuditorEnabled(value); #if ENABLE(TILED_BACKING_STORE) diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h index 207a9b6..156f633 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h @@ -68,7 +68,7 @@ public: #endif LocalContentCanAccessRemoteUrls, DnsPrefetchEnabled, - XSSAuditorEnabled, + XSSAuditingEnabled, AcceleratedCompositingEnabled, SpatialNavigationEnabled, LocalContentCanAccessFileUrls, diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 9dd129e..63d5568 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,65 @@ +2010-07-09 Simon Hausmann <simon.hausmann@nokia.com> + + Unreviewed trivial Symbian build fix. + + [Qt] Fix the Symbian build when compiling without S60 + + Use Q_OS_SYMBIAN instead of Q_WS_S60 for the user agent + determination. + + * Api/qwebpage.cpp: + (QWebPage::userAgentForUrl): + +2010-07-09 Kristian Amlie <kristian.amlie@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fixed Qt symbian/linux-armcc mkspec when configured with -qtlibinfix. + + * declarative/declarative.pro: Use QT_LIBINFIX. + +2010-06-01 Raine Makelainen <raine.makelainen@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt]: REGRESSION(r58703): QWebSettings::JavascriptCanAccessClipboard has wrong case in "Javascript" part. + https://bugs.webkit.org/show_bug.cgi?id=39878 + + QWebSettings::JavaScriptCanAccessClipboard reverted back to + QWebSettings::JavascriptCanAccessClipboard. QWebSettings::DOMPasteAllowed enum removed. + + Value of QWebSettings::JavascriptCanAccessClipboard to setDOMPasteAllowed and + setJavaScriptCanAccessClipboard of WebCore::Settings. + + * Api/qwebsettings.cpp: + (QWebSettingsPrivate::apply): + * Api/qwebsettings.h: + +2010-05-03 Abhishek Arya <inferno@chromium.org> + + Reviewed by Adam Barth. + + Add support for controlling clipboard access from javascript. + Clipboard access from javascript is disabled by default. + https://bugs.webkit.org/show_bug.cgi?id=27751 + + * Api/qwebsettings.cpp: + (QWebSettingsPrivate::apply): + * Api/qwebsettings.h: + +2010-03-24 Kent Hansen <kent.hansen@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Rename QWebSettings::XSSAuditorEnabled to XSSAuditingEnabled + https://bugs.webkit.org/show_bug.cgi?id=36522 + + For consistency with other QWebSettings attributes. + + * Api/qwebsettings.cpp: + (QWebSettingsPrivate::apply): + * Api/qwebsettings.h: + 2010-05-19 Antti Koivisto <koivisto@iki.fi> Rubber-stamped by Kenneth Rohde Christiansen. -- cgit v0.12 From 802c6db20dbcc28c9f6bff9ddeaf9513fecd286d Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 20 Jul 2010 14:13:32 +0200 Subject: Added automatic sqlite extraction for Symbian to QtWebKit. Also added sqlite detection in case sqlite is not present in the SDK. This is possible if WebKit is compiled standalone. The inclusion part is a consequence of commit c578c6c1d6d in the Qt repository. It will not work on Qt versions < 4.7.1, but that is ok, since the only build system it will affect is marked as experimental in the whole 4.7 series. RevBy: Kenneth Rohde Christiansen Task: https://bugs.webkit.org/show_bug.cgi?id=42744 (cherry picked from commit 9c8fe530f4068fc35a58008758ee2bc434415993) --- src/3rdparty/webkit/WebCore/WebCore.pro | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index c1661a4..2047143 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -117,8 +117,16 @@ win32-g++* { QMAKE_LIBDIR_POST += $$split(TMPPATH,";") } -# Assume that symbian OS always comes with sqlite -symbian:!CONFIG(QTDIR_build): CONFIG += system-sqlite +symbian { + !CONFIG(QTDIR_build) { + # Test if symbian OS comes with sqlite + exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso):CONFIG *= system-sqlite + } else:!symbian-abld:!symbian-sbsv2 { + # When bundled with Qt, all Symbian build systems extract their own sqlite files if + # necessary, but on non-mmp based ones we need to specify this ourselves. + include($$QT_SOURCE_TREE/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri) + } +} -- cgit v0.12 From 97a37b14e772e2b493787a5df994697e18e11243 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Fri, 23 Jul 2010 16:51:17 +0200 Subject: Updated WebKit to 669858f9bbd4913fd16c642090375c81acbfdb04 (cherry picked from commit a7bf97f437a8d4e44a9256a89d7d6ba239577949) --- mkspecs/modules/qt_webkit_version.pri | 1 + src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 16 +++++++++++ src/3rdparty/webkit/WebKit/qt/ChangeLog | 32 ++++++++++++++++++++++ .../webkit/WebKit/qt/qt_webkit_version.pri | 1 + .../WebKit/qt/tests/qwebpage/tst_qwebpage.cpp | 3 ++ 7 files changed, 55 insertions(+), 2 deletions(-) diff --git a/mkspecs/modules/qt_webkit_version.pri b/mkspecs/modules/qt_webkit_version.pri index ffd192c..d8cf06c 100644 --- a/mkspecs/modules/qt_webkit_version.pri +++ b/mkspecs/modules/qt_webkit_version.pri @@ -2,3 +2,4 @@ QT_WEBKIT_VERSION = 4.7.0 QT_WEBKIT_MAJOR_VERSION = 4 QT_WEBKIT_MINOR_VERSION = 7 QT_WEBKIT_PATCH_VERSION = 0 +QT_CONFIG *= webkit diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 1d1c8ed..79165f6 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -ad96ca2f9b57271da4ea7432022ac686ee0981c2 +669858f9bbd4913fd16c642090375c81acbfdb04 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 2e5ebd0..e492154 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - ad96ca2f9b57271da4ea7432022ac686ee0981c2 + 669858f9bbd4913fd16c642090375c81acbfdb04 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index a993a97..1f7ca09 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,19 @@ +2010-07-21 Kristian Amlie <kristian.amlie@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Added automatic sqlite extraction for Symbian to QtWebKit. + + Also added sqlite detection in case sqlite is not present in the SDK. + This is possible if WebKit is compiled standalone. + + The inclusion part is a consequence of commit c578c6c1d6d in the Qt + repository. It will not work on Qt versions < 4.7.1, but that is ok, + since the only build system it will affect is marked as experimental + in the whole 4.7 series. + + * WebCore.pro: + 2010-05-14 Abhishek Arya <inferno@chromium.org> Reviewed by David Hyatt. diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 63d5568..1075b24 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,35 @@ +2010-07-23 David Boddie <dboddie@trolltech.com> + + Reviewed by Simon Hausmann. + + Doc: Fixed incorrect QML property type. + + * declarative/qdeclarativewebview.cpp: + +2010-07-23 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] Build fix for Qt apps + + Add webkit to QT_CONFIG. qconfig.pri will read qt_webkit_version.pri and + that's how it will pick up webkit in QT_CONFIG. + + * qt_webkit_version.pri: + +2010-07-09 Kent Hansen <kent.hansen@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Skip test that never terminates on maemo5 + + Due to https://bugs.webkit.org/show_bug.cgi?id=38538 + the tst_QWebPage::infiniteLoopJS() autotest never terminates. + Skip the test so that the test case may run to completion. + + Patch by Dominik Holland <dominik.holland@nokia.com> + + * tests/qwebpage/tst_qwebpage.cpp: + (tst_QWebPage::infiniteLoopJS): + 2010-07-09 Simon Hausmann <simon.hausmann@nokia.com> Unreviewed trivial Symbian build fix. diff --git a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri index ffd192c..d8cf06c 100644 --- a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri +++ b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri @@ -2,3 +2,4 @@ QT_WEBKIT_VERSION = 4.7.0 QT_WEBKIT_MAJOR_VERSION = 4 QT_WEBKIT_MINOR_VERSION = 7 QT_WEBKIT_PATCH_VERSION = 0 +QT_CONFIG *= webkit diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp index 0f2ca22..b7ffb8a 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp @@ -219,6 +219,9 @@ public slots: void tst_QWebPage::infiniteLoopJS() { +#ifdef Q_WS_MAEMO_5 + QSKIP("Test never terminates on Maemo 5 : https://bugs.webkit.org/show_bug.cgi?id=38538", SkipAll); +#endif JSTestPage* newPage = new JSTestPage(m_view); m_view->setPage(newPage); m_view->setHtml(QString("<html><bodytest</body></html>"), QUrl()); -- cgit v0.12 From 0cb96302e364831dd0826d0916e39de277a9fc02 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Mon, 26 Jul 2010 16:31:43 +0200 Subject: Updated WebKit to 0be9ff9f2b1ec2b748885ac15299bc1c65aca590 Integrated changes: || <https://webkit.org/b/42474> || Spatial navigation: do not consider outline for focusable element boundaries || || <https://webkit.org/b/41484> || [Qt] Clamp color stops passed to QGradient to 1.0 || || <https://webkit.org/b/29381> || [Qt] [Regression] QWebView::setHtml() executes script body twice || || <https://webkit.org/b/30879> || Loading HTML with a JS alert() when the DocumentLoader has been set to not defer data load results in ASSERT || (cherry picked from commit 9f657356f897d8bf4c92965a8bc1af82107e2379) --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/JavaScriptCore/ChangeLog | 14 +++++ .../webkit/JavaScriptCore/runtime/TimeoutChecker.h | 1 + src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 64 ++++++++++++++++++++++ .../webkit/WebCore/loader/MainResourceLoader.cpp | 4 ++ .../webkit/WebCore/page/SpatialNavigation.cpp | 11 +--- .../WebCore/platform/graphics/qt/GradientQt.cpp | 2 +- src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp | 4 ++ src/3rdparty/webkit/WebKit/qt/ChangeLog | 48 ++++++++++++++++ .../qt/WebCoreSupport/FrameLoaderClientQt.cpp | 12 +++- .../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h | 2 + .../WebKit/qt/tests/qwebframe/tst_qwebframe.cpp | 28 ++++++++++ 13 files changed, 182 insertions(+), 12 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 79165f6..3cb818d 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -669858f9bbd4913fd16c642090375c81acbfdb04 +0be9ff9f2b1ec2b748885ac15299bc1c65aca590 diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index 8fa3a72..ea680ac 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,3 +1,17 @@ +2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Use the default timeout interval for JS as the HTML tokenizer delay for setHtml() + + This ensures that long-running JavaScript (for example due to a modal alert() dialog), + will not trigger a deferred load after only 500ms (the default tokenizer delay) while + still giving a reasonable timeout (10 seconds) to prevent deadlock. + + https://bugs.webkit.org/show_bug.cgi?id=29381 + + * runtime/TimeoutChecker.h: Add getter for the timeout interval + 2010-05-18 Anders Carlsson <andersca@apple.com> Reviewed by Sam Weinig. diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h b/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h index 7bfa6d0..5925641 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h @@ -40,6 +40,7 @@ namespace JSC { TimeoutChecker(); void setTimeoutInterval(unsigned timeoutInterval) { m_timeoutInterval = timeoutInterval; } + unsigned timeoutInterval() const { return m_timeoutInterval; } unsigned ticksUntilNextCheck() { return m_ticksUntilNextCheck; } diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index e492154..f12f6b5 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 669858f9bbd4913fd16c642090375c81acbfdb04 + 0be9ff9f2b1ec2b748885ac15299bc1c65aca590 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 1f7ca09..f7f2803 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,67 @@ +2010-07-01 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Clamp color stops passed to QGradient to 1.0 + [https://bugs.webkit.org/show_bug.cgi?id=41484 + + Fixes an issue where color stops would be silently dropped from radial gradients. + + * platform/graphics/qt/GradientQt.cpp: + (WebCore::Gradient::platformGradient): + +2010-07-07 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Darin Adler. + + Prevent assertion/duplicate loads for non-deferred subtitute-data loads + + https://bugs.webkit.org/show_bug.cgi?id=30879 + + MainResourceLoader uses the member m_initialRequest to store requests for future + deferred loads. When doing the actual load in handleDataLoadNow(), we therefore + have to clear this request so that subsequent entries into the loader will not + start yet another load. + + This can happen as a result of a PageGroupLoadDeferrer going out of scope when + returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false), + but only in the case of using both substitute-data and non-deferred main resource + load together. That's why two new DRT functions were added: + + * queueLoadHTMLString() + * setDeferMainResourceLoad() + + The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac + and Win the hook uses new SPI in WebDataSource. For Qt a new static member was + added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt. + + Test: fast/loader/non-deferred-substitute-load.html + + * loader/MainResourceLoader.cpp: + (WebCore::MainResourceLoader::handleDataLoadNow): + +2010-07-16 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Simon Fraser. + + Spatial navigation: do not consider outline for focusable element boundaries + https://bugs.webkit.org/show_bug.cgi?id=42474 + + Test: fast/events/spatial-navigation/snav-zero-margin-content.html + + Currently in WebCore::renderRectRelativeToRootDocument function, we are calling + RenderObject::absoluteClippedOverflowRect to obtain the rect boundary of a given + renderer/element. This method deals with outline, which is out of elements boundary. + It makes spatial navigation to fail on common sites like google.gom: "Web, Images, Map, etc" + are inaccessible. + + Patch replaces RenderObject::absoluteClippedOverflowRect by Node::getRect, + which returns only the absolute bounding box rect of the Element. + + * page/SpatialNavigation.cpp: + (WebCore::renderRectRelativeToRootDocument): + (WebCore::checkNegativeCoordsForNode): + 2010-07-21 Kristian Amlie <kristian.amlie@nokia.com> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp b/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp index 28587e2..54c5c34 100644 --- a/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp +++ b/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp @@ -464,6 +464,10 @@ void MainResourceLoader::handleDataLoadNow(MainResourceLoaderTimer*) KURL url = m_substituteData.responseURL(); if (url.isEmpty()) url = m_initialRequest.url(); + + // Clear the initial request here so that subsequent entries into the + // loader will not think there's still a deferred load left to do. + m_initialRequest = ResourceRequest(); ResourceResponse response(url, m_substituteData.mimeType(), m_substituteData.content()->size(), m_substituteData.textEncoding(), ""); didReceiveResponse(response); diff --git a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp index a80626f..fdacebb 100644 --- a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp +++ b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp @@ -102,14 +102,9 @@ void distanceDataForNode(FocusDirection direction, Node* start, FocusCandidate& // FIXME: This function does not behave correctly with transformed frames. static IntRect renderRectRelativeToRootDocument(RenderObject* render) { - ASSERT(render); + ASSERT(render && render->node()); - IntRect rect(render->absoluteClippedOverflowRect()); - - if (rect.isEmpty()) { - Element* e = static_cast<Element*>(render->node()); - rect = e->getRect(); - } + IntRect rect = render->node()->getRect(); // In cases when the |render|'s associated node is in a scrollable inner // document, we only consider its scrollOffset if it is not offscreen. @@ -516,7 +511,7 @@ static bool checkNegativeCoordsForNode(Node* node, const IntRect& curRect) { ASSERT(node || node->renderer()); - if (curRect.x() > 0 && curRect.y() > 0) + if (curRect.x() >= 0 && curRect.y() >= 0) return true; bool canBeScrolled = false; diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GradientQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GradientQt.cpp index 8b9e2d7..1ec3203 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GradientQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GradientQt.cpp @@ -65,7 +65,7 @@ QGradient* Gradient::platformGradient() lastStop = stopIterator->stop; if (m_radial && m_r0) lastStop = m_r0 / m_r1 + lastStop * (1.0f - m_r0 / m_r1); - m_gradient->setColorAt(lastStop, stopColor); + m_gradient->setColorAt(qMin(lastStop, qreal(1.0f)), stopColor); // Keep the lastStop as orginal value, since the following stopColor depend it lastStop = stopIterator->stop; ++stopIterator; diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp index cc7b11c..4fe784f 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp @@ -959,6 +959,10 @@ void QWebFrame::load(const QNetworkRequest &req, The \a html is loaded immediately; external objects are loaded asynchronously. + If a script in the \a html runs longer than the default script timeout (currently 10 seconds), + for example due to being blocked by a modal JavaScript alert dialog, this method will return + as soon as possible after the timeout and any subsequent \a html will be loaded asynchronously. + When using this method WebKit assumes that external resources such as JavaScript programs or style sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external script can be specified through the charset attribute of the HTML script tag. It is also possible diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 1075b24..b2bff0c 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,51 @@ +2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Use the default timeout interval for JS as the HTML tokenizer delay for setHtml() + + This ensures that long-running JavaScript (for example due to a modal alert() dialog), + will not trigger a deferred load after only 500ms (the default tokenizer delay) while + still giving a reasonable timeout (10 seconds) to prevent deadlock. + + https://bugs.webkit.org/show_bug.cgi?id=29381 + + * Api/qwebframe.cpp: Document the behaviour + * WebCoreSupport/FrameLoaderClientQt.cpp: set the custom tokenizer delay for substitute loads + * tests/qwebframe/tst_qwebframe.cpp: Add test + +2010-07-07 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Darin Adler. + + Prevent assertion/duplicate loads for non-deferred subtitute-data loads + + https://bugs.webkit.org/show_bug.cgi?id=30879 + + MainResourceLoader uses the member m_initialRequest to store requests for future + deferred loads. When doing the actual load in handleDataLoadNow(), we therefore + have to clear this request so that subsequent entries into the loader will not + start yet another load. + + This can happen as a result of a PageGroupLoadDeferrer going out of scope when + returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false), + but only in the case of using both substitute-data and non-deferred main resource + load together. That's why two new DRT functions were added: + + * queueLoadHTMLString() + * setDeferMainResourceLoad() + + The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac + and Win the hook uses new SPI in WebDataSource. For Qt a new static member was + added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt. + + * WebCoreSupport/DumpRenderTreeSupportQt.cpp: + (DumpRenderTreeSupportQt::setDeferMainResourceDataLoad): + * WebCoreSupport/DumpRenderTreeSupportQt.h: + * WebCoreSupport/FrameLoaderClientQt.cpp: + (WebCore::FrameLoaderClientQt::createDocumentLoader): + * WebCoreSupport/FrameLoaderClientQt.h: + 2010-07-23 David Boddie <dboddie@trolltech.com> Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp index 686bfcc..713fa39 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp @@ -38,6 +38,7 @@ #include "FrameTree.h" #include "FrameView.h" #include "DocumentLoader.h" +#include "JSDOMWindowBase.h" #include "MIMETypeRegistry.h" #include "ResourceResponse.h" #include "Page.h" @@ -141,6 +142,8 @@ static QString drtDescriptionSuitableForTestResult(const WebCore::ResourceRespon namespace WebCore { +bool FrameLoaderClientQt::deferMainResourceDataLoad = true; + FrameLoaderClientQt::FrameLoaderClientQt() : m_frame(0) , m_webFrame(0) @@ -812,8 +815,15 @@ bool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&) WTF::PassRefPtr<WebCore::DocumentLoader> FrameLoaderClientQt::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData) { RefPtr<DocumentLoader> loader = DocumentLoader::create(request, substituteData); - if (substituteData.isValid()) + if (!deferMainResourceDataLoad || substituteData.isValid()) { loader->setDeferMainResourceDataLoad(false); + // Use the default timeout interval for JS as the HTML tokenizer delay. This ensures + // that long-running JavaScript will still allow setHtml() to be synchronous, while + // still giving a reasonable timeout to prevent deadlock. + double delay = JSDOMWindowBase::commonJSGlobalData()->timeoutChecker.timeoutInterval() / 1000.0f; + m_frame->page()->setCustomHTMLTokenizerTimeDelay(delay); + } else + m_frame->page()->setCustomHTMLTokenizerTimeDelay(-1); return loader.release(); } diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h index adeb31c..515cf9a 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h @@ -211,6 +211,8 @@ namespace WebCore { QString chooseFile(const QString& oldFile); + static bool deferMainResourceDataLoad; + private: Frame *m_frame; QWebFrame *m_webFrame; diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp index 76fdba3..e584f97 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp @@ -598,6 +598,7 @@ private slots: void setHtml(); void setHtmlWithResource(); void setHtmlWithBaseURL(); + void setHtmlWithJSAlert(); void ipv6HostEncoding(); void metaData(); #if !defined(Q_WS_MAEMO_5) @@ -2485,6 +2486,33 @@ void tst_QWebFrame::setHtmlWithBaseURL() QCOMPARE(m_view->page()->history()->count(), 0); } +class MyPage : public QWebPage +{ +public: + MyPage() : QWebPage(), alerts(0) {} + int alerts; + +protected: + virtual void javaScriptAlert(QWebFrame*, const QString& msg) + { + alerts++; + QCOMPARE(msg, QString("foo")); + // Should not be enough to trigger deferred loading, since we've upped the HTML + // tokenizer delay in the Qt frameloader. See HTMLTokenizer::continueProcessing() + QTest::qWait(1000); + } +}; + +void tst_QWebFrame::setHtmlWithJSAlert() +{ + QString html("<html><head></head><body><script>alert('foo');</script><p>hello world</p></body></html>"); + MyPage page; + m_view->setPage(&page); + page.mainFrame()->setHtml(html); + QCOMPARE(page.alerts, 1); + QCOMPARE(m_view->page()->mainFrame()->toHtml(), html); +} + class TestNetworkManager : public QNetworkAccessManager { public: -- cgit v0.12 From 08f7af3fe64037fbe3ec8e638780f9516eb45ca6 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Thu, 29 Jul 2010 22:09:00 +0200 Subject: Updated WebKit to e6e692bb056670e2781dd0bc473a60757ae53992 Backported various crash fixes (cherry picked from commit 73595a315989581e2f59b28af5d150d39ea6b8ff) --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/JavaScriptCore/ChangeLog | 73 +++++++++ .../JavaScriptCore/interpreter/Interpreter.cpp | 16 +- .../webkit/JavaScriptCore/jit/JITStubs.cpp | 43 +++--- .../webkit/JavaScriptCore/runtime/Arguments.h | 4 + .../webkit/JavaScriptCore/runtime/JSArray.cpp | 6 +- .../JavaScriptCore/yarr/RegexInterpreter.cpp | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 166 +++++++++++++++++++++ src/3rdparty/webkit/WebCore/dom/CharacterData.cpp | 8 +- src/3rdparty/webkit/WebCore/dom/Element.cpp | 17 ++- src/3rdparty/webkit/WebCore/dom/Element.h | 4 + src/3rdparty/webkit/WebCore/dom/Text.cpp | 2 +- .../webkit/WebCore/platform/text/BidiResolver.h | 67 +++++---- .../webkit/WebCore/rendering/RenderBlock.cpp | 6 + .../webkit/WebCore/rendering/RenderSVGText.cpp | 13 ++ .../webkit/WebCore/rendering/RenderSVGText.h | 3 + .../webkit/WebCore/rendering/RenderWidget.cpp | 4 + src/3rdparty/webkit/WebCore/svg/SVGElement.cpp | 9 ++ .../webkit/WebCore/svg/SVGFontFaceElement.cpp | 1 - .../webkit/WebCore/svg/SVGForeignObjectElement.cpp | 4 + src/3rdparty/webkit/WebCore/svg/SVGSVGElement.cpp | 4 + src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp | 2 +- 23 files changed, 393 insertions(+), 65 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 3cb818d..0b414ab 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -0be9ff9f2b1ec2b748885ac15299bc1c65aca590 +e6e692bb056670e2781dd0bc473a60757ae53992 diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index ea680ac..c09ad79 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,3 +1,76 @@ +2010-07-02 Peter Varga <pvarga@inf.u-szeged.hu> + + Reviewed by Oliver Hunt. + + The alternativeFrameLocation value is wrong in the emitDisjunction function in + case of PatternTerm::TypeParentheticalAssertion. This value needs to be + computed from term.frameLocation instead of term.inputPosition. This mistake caused glibc + memory corruption in some cases. + Layout test added for checking of TypeParentheticalAssertion case. + https://bugs.webkit.org/show_bug.cgi?id=41458 + + * yarr/RegexInterpreter.cpp: + (JSC::Yarr::ByteCompiler::emitDisjunction): + +2010-07-03 Yong Li <yoli@rim.com> + + Reviewed by Darin Adler. + + Make Arguments::MaxArguments clamping work for numbers >= 0x80000000 in + the interpreter as well as the JIT. + + https://bugs.webkit.org/show_bug.cgi?id=41351 + rdar://problem/8142141 + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): Fix signed integer overflow problem + in op_load_varargs handling. 0xFFFFFFFF was read as -1. + +2010-07-04 Mark Rowe <mrowe@apple.com> + + Build fix after r62456. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): Be slightly more consistent in using uint32_t to prevent + warnings about comparisons between signed and unsigned types, and attempts to call an overload + of std::min that doesn't exist. + +2010-07-02 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Clamp the number of arguments supported by function.apply + https://bugs.webkit.org/show_bug.cgi?id=41351 + <rdar://problem/8142141> + + Add clamping logic to function.apply similar to that + enforced by firefox. We have a smaller clamp than + firefox as our calling convention means that stack + usage is proportional to argument count -- the firefox + limit is larger than you could actually call. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Arguments.h: + (JSC::Arguments::): + +2010-07-01 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoff Garen. + + Improve reentrancy logic in polymorphic cache stubs + <https://bugs.webkit.org/show_bug.cgi?id=41482> + <rdar://problem/8094380> + + Make the polymorphic cache stubs handle reentrancy + better. + + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + (JSC::getPolymorphicAccessStructureListSlot): + 2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp index 2713fd4..73efc0d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved. * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca> * * Redistribution and use in source and binary forms, with or without @@ -3454,9 +3454,10 @@ skip_id_custom_self: int argsOffset = vPC[2].u.operand; JSValue arguments = callFrame->r(argsOffset).jsValue(); - int32_t argCount = 0; + uint32_t argCount = 0; if (!arguments) { argCount = (uint32_t)(callFrame->argumentCount()) - 1; + argCount = min<uint32_t>(argCount, Arguments::MaxArguments); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { @@ -3464,9 +3465,9 @@ skip_id_custom_self: goto vm_throw; } ASSERT(!callFrame->callee()->isHostFunction()); - int32_t expectedParams = callFrame->callee()->jsExecutable()->parameterCount(); - int32_t inplaceArgs = min(argCount, expectedParams); - int32_t i = 0; + uint32_t expectedParams = callFrame->callee()->jsExecutable()->parameterCount(); + uint32_t inplaceArgs = min(argCount, expectedParams); + uint32_t i = 0; Register* argStore = callFrame->registers() + argsOffset; // First step is to copy the "expected" parameters from their normal location relative to the callframe @@ -3483,6 +3484,7 @@ skip_id_custom_self: if (asObject(arguments)->classInfo() == &Arguments::info) { Arguments* args = asArguments(arguments); argCount = args->numProvidedArguments(callFrame); + argCount = min<uint32_t>(argCount, Arguments::MaxArguments); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { @@ -3493,6 +3495,7 @@ skip_id_custom_self: } else if (isJSArray(&callFrame->globalData(), arguments)) { JSArray* array = asArray(arguments); argCount = array->length(); + argCount = min<uint32_t>(argCount, Arguments::MaxArguments); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { @@ -3503,6 +3506,7 @@ skip_id_custom_self: } else if (asObject(arguments)->inherits(&JSArray::info)) { JSObject* argObject = asObject(arguments); argCount = argObject->get(callFrame, callFrame->propertyNames().length).toUInt32(callFrame); + argCount = min<uint32_t>(argCount, Arguments::MaxArguments); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { @@ -3510,7 +3514,7 @@ skip_id_custom_self: goto vm_throw; } Register* argsBuffer = callFrame->registers() + argsOffset; - for (int32_t i = 0; i < argCount; ++i) { + for (uint32_t i = 0; i < argCount; ++i) { argsBuffer[i] = asObject(arguments)->get(callFrame, i); CHECK_FOR_EXCEPTION(); } diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp index daa945c..e5fcdc4 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp @@ -1330,17 +1330,18 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_self_fail) if (stubInfo->accessType == access_get_by_id_self) { ASSERT(!stubInfo->stubRoutine); polymorphicStructureList = new PolymorphicAccessStructureList(CodeLocationLabel(), stubInfo->u.getByIdSelf.baseObjectStructure); - stubInfo->initGetByIdSelfList(polymorphicStructureList, 2); + stubInfo->initGetByIdSelfList(polymorphicStructureList, 1); } else { polymorphicStructureList = stubInfo->u.getByIdSelfList.structureList; listIndex = stubInfo->u.getByIdSelfList.listSize; - stubInfo->u.getByIdSelfList.listSize++; } + if (listIndex < POLYMORPHIC_LIST_CACHE_SIZE) { + stubInfo->u.getByIdSelfList.listSize++; + JIT::compileGetByIdSelfList(callFrame->scopeChain()->globalData, codeBlock, stubInfo, polymorphicStructureList, listIndex, asCell(baseValue)->structure(), ident, slot, slot.cachedOffset()); - JIT::compileGetByIdSelfList(callFrame->scopeChain()->globalData, codeBlock, stubInfo, polymorphicStructureList, listIndex, asCell(baseValue)->structure(), ident, slot, slot.cachedOffset()); - - if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) - ctiPatchCallByReturnAddress(codeBlock, STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_generic)); + if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) + ctiPatchCallByReturnAddress(codeBlock, STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_generic)); + } } else ctiPatchCallByReturnAddress(callFrame->codeBlock(), STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_generic)); return JSValue::encode(result); @@ -1365,13 +1366,14 @@ static PolymorphicAccessStructureList* getPolymorphicAccessStructureListSlot(Str case access_get_by_id_proto_list: prototypeStructureList = stubInfo->u.getByIdProtoList.structureList; listIndex = stubInfo->u.getByIdProtoList.listSize; - stubInfo->u.getByIdProtoList.listSize++; + if (listIndex < POLYMORPHIC_LIST_CACHE_SIZE) + stubInfo->u.getByIdProtoList.listSize++; break; default: ASSERT_NOT_REACHED(); } - ASSERT(listIndex < POLYMORPHIC_LIST_CACHE_SIZE); + ASSERT(listIndex <= POLYMORPHIC_LIST_CACHE_SIZE); return prototypeStructureList; } @@ -1446,21 +1448,24 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_proto_list) int listIndex; PolymorphicAccessStructureList* prototypeStructureList = getPolymorphicAccessStructureListSlot(stubInfo, listIndex); + if (listIndex < POLYMORPHIC_LIST_CACHE_SIZE) { + JIT::compileGetByIdProtoList(callFrame->scopeChain()->globalData, callFrame, codeBlock, stubInfo, prototypeStructureList, listIndex, structure, slotBaseObject->structure(), propertyName, slot, offset); - JIT::compileGetByIdProtoList(callFrame->scopeChain()->globalData, callFrame, codeBlock, stubInfo, prototypeStructureList, listIndex, structure, slotBaseObject->structure(), propertyName, slot, offset); - - if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) - ctiPatchCallByReturnAddress(codeBlock, STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_list_full)); + if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) + ctiPatchCallByReturnAddress(codeBlock, STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_list_full)); + } } else if (size_t count = normalizePrototypeChain(callFrame, baseValue, slot.slotBase(), propertyName, offset)) { ASSERT(!asCell(baseValue)->structure()->isDictionary()); int listIndex; PolymorphicAccessStructureList* prototypeStructureList = getPolymorphicAccessStructureListSlot(stubInfo, listIndex); + + if (listIndex < POLYMORPHIC_LIST_CACHE_SIZE) { + StructureChain* protoChain = structure->prototypeChain(callFrame); + JIT::compileGetByIdChainList(callFrame->scopeChain()->globalData, callFrame, codeBlock, stubInfo, prototypeStructureList, listIndex, structure, protoChain, count, propertyName, slot, offset); - StructureChain* protoChain = structure->prototypeChain(callFrame); - JIT::compileGetByIdChainList(callFrame->scopeChain()->globalData, callFrame, codeBlock, stubInfo, prototypeStructureList, listIndex, structure, protoChain, count, propertyName, slot, offset); - - if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) - ctiPatchCallByReturnAddress(codeBlock, STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_list_full)); + if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) + ctiPatchCallByReturnAddress(codeBlock, STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_list_full)); + } } else ctiPatchCallByReturnAddress(codeBlock, STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_fail)); @@ -2129,6 +2134,7 @@ DEFINE_STUB_FUNCTION(int, op_load_varargs) if (!arguments) { int providedParams = callFrame->registers()[RegisterFile::ArgumentCount].i() - 1; argCount = providedParams; + argCount = min(argCount, static_cast<uint32_t>(Arguments::MaxArguments)); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { @@ -2164,6 +2170,7 @@ DEFINE_STUB_FUNCTION(int, op_load_varargs) if (asObject(arguments)->classInfo() == &Arguments::info) { Arguments* argsObject = asArguments(arguments); argCount = argsObject->numProvidedArguments(callFrame); + argCount = min(argCount, static_cast<uint32_t>(Arguments::MaxArguments)); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { @@ -2174,6 +2181,7 @@ DEFINE_STUB_FUNCTION(int, op_load_varargs) } else if (isJSArray(&callFrame->globalData(), arguments)) { JSArray* array = asArray(arguments); argCount = array->length(); + argCount = min(argCount, static_cast<uint32_t>(Arguments::MaxArguments)); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { @@ -2184,6 +2192,7 @@ DEFINE_STUB_FUNCTION(int, op_load_varargs) } else if (asObject(arguments)->inherits(&JSArray::info)) { JSObject* argObject = asObject(arguments); argCount = argObject->get(callFrame, callFrame->propertyNames().length).toUInt32(callFrame); + argCount = min(argCount, static_cast<uint32_t>(Arguments::MaxArguments)); int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize; Register* newEnd = callFrame->registers() + sizeDelta; if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) { diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.h b/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.h index 9797e08..cca3cf2 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.h @@ -55,6 +55,10 @@ namespace JSC { class Arguments : public JSObject { public: + // Use an enum because otherwise gcc insists on doing a memory + // read. + enum { MaxArguments = 0x10000 }; + enum NoParametersType { NoParameters }; Arguments(CallFrame*); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSArray.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/JSArray.cpp index d3ef44c..ae9e038 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSArray.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSArray.cpp @@ -948,10 +948,10 @@ void JSArray::fillArgList(ExecState* exec, MarkedArgumentBuffer& args) void JSArray::copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSize) { - ASSERT(m_storage->m_length == maxSize); + ASSERT(m_storage->m_length >= maxSize); UNUSED_PARAM(maxSize); JSValue* vector = m_storage->m_vector; - unsigned vectorEnd = min(m_storage->m_length, m_vectorLength); + unsigned vectorEnd = min(maxSize, m_vectorLength); unsigned i = 0; for (; i < vectorEnd; ++i) { JSValue& v = vector[i]; @@ -960,7 +960,7 @@ void JSArray::copyToRegisters(ExecState* exec, Register* buffer, uint32_t maxSiz buffer[i] = v; } - for (; i < m_storage->m_length; ++i) + for (; i < maxSize; ++i) buffer[i] = get(exec, i); } diff --git a/src/3rdparty/webkit/JavaScriptCore/yarr/RegexInterpreter.cpp b/src/3rdparty/webkit/JavaScriptCore/yarr/RegexInterpreter.cpp index c2cb1c2..647b20a 100644 --- a/src/3rdparty/webkit/JavaScriptCore/yarr/RegexInterpreter.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/yarr/RegexInterpreter.cpp @@ -1554,7 +1554,7 @@ public: } case PatternTerm::TypeParentheticalAssertion: { - unsigned alternativeFrameLocation = term.inputPosition + RegexStackSpaceForBackTrackInfoParentheticalAssertion; + unsigned alternativeFrameLocation = term.frameLocation + RegexStackSpaceForBackTrackInfoParentheticalAssertion; atomParentheticalAssertionBegin(term.parentheses.subpatternId, term.invertOrCapture, term.frameLocation, alternativeFrameLocation); emitDisjunction(term.parentheses.disjunction, currentCountAlreadyChecked, 0); diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index f12f6b5..f8403fb 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 0be9ff9f2b1ec2b748885ac15299bc1c65aca590 + e6e692bb056670e2781dd0bc473a60757ae53992 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index f7f2803..5189eb5 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,169 @@ +2010-07-06 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Dirk Schulze. + + <use> on <font-face> causes crashes, if SVGUseElement gets detached + https://bugs.webkit.org/show_bug.cgi?id=41621 + + Do not call removeFromMappedElementSheet() from the SVGFontFaceElement destructor, + as that can potentially cause the element to be reattached while destructing. + + In order to fix the crash in the testcase, the order of calling the base-class detach + method in SVGUseElement and the instance/shadow tree destruction has to be reversed, + matching the order in removedFromDocument(). + + Test: svg/custom/use-font-face-crash.svg + + * svg/SVGFontFaceElement.cpp: + (WebCore::SVGFontFaceElement::~SVGFontFaceElement): Remove removeFromMappedElementSheet() call. + * svg/SVGUseElement.cpp: + (WebCore::SVGUseElement::detach): Reverse order of calling base-class detach method and instance/shadow tree destruction. + +2010-07-06 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Darin Adler. + + <use> on <font-face> causes crashes, if SVGUseElement gets detached + https://bugs.webkit.org/show_bug.cgi?id=41621 + + Do not call removeFromMappedElementSheet() from the destructor, as the call to document()->updateStyleSelector() that can potentially + cause the element to be reattached while destructing. It's not needed at all, because removedFromDocument() is called before destruction, + which already calls removeFromMappedElementSheet() - at this point it's still safe to update the style selector. + + The crash is reproducable when using <use> on <font-face>. + + Test: svg/custom/use-font-face-crash.svg + + * svg/SVGFontFaceElement.cpp: + (WebCore::SVGFontFaceElement::~SVGFontFaceElement): + +2010-07-05 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Darin Adler. + + Memory corruption with SVG <use> element + https://bugs.webkit.org/show_bug.cgi?id=40994 + + Fix race condition in svgAttributeChanged. Never call svgAttributeChanged() from attributeChanged() + when we're synchronizing SVG attributes. It leads to either unnecessary extra work being done or + crashes. Especially together with <polyline>/<polygon> which always synchronize the SVGAnimatedPoints + datastructure with the points attribute, no matter if there are changes are not. This should be + furhter optimized, but this fix is sane and fixes the root of the evil races. + + Test: svg/custom/use-property-synchronization-crash.svg + + * svg/SVGElement.cpp: + (WebCore::SVGElement::attributeChanged): + +2010-06-11 Abhishek Arya <inferno@chromium.org> + + Reviewed by David Hyatt. + + Don't process floats if parent node is not a RenderBlock. + https://bugs.webkit.org/show_bug.cgi?id=40033 + + Test: svg/text/clear-floats-crash.svg + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::clearFloats): + +2010-06-23 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Eric Seidel. + + Reproducible crash in com.apple.WebCore 0x01ed3784 WebCore::RenderLineBoxList::appendLineBox(WebCore::InlineFlowBox*) + 36 + https://bugs.webkit.org/show_bug.cgi?id=40953 + + REGRESSION (r58209-58231): Memory corruption with invalid SVG + https://bugs.webkit.org/show_bug.cgi?id=40173 + + Fix several crashes, all related to <foreignObject> and/or invalid SVG documents. + - Only allow <svg> nodes, as direct children of a <foreignObject>, not any other "partial" SVG content. + - Assure to create RenderSVGRoot objects for <svg> nodes in <foreignObject>, treat them as "outermost SVG elements". + - Never allow any partial SVG content to appear in any document. Only <svg> elements are allowed. + + Tests: svg/custom/bug45331.svg + svg/foreignObject/disallowed-svg-nodes-as-direct-children.svg + svg/foreignObject/no-crash-with-svg-content-in-html-document.svg + svg/foreignObject/svg-document-as-direct-child.svg + svg/foreignObject/svg-document-in-html-document.svg + svg/foreignObject/text-tref-02-b.svg + + * dom/Element.cpp: Added childShouldCreateRenderer, with ENABLE(SVG) guards. + (WebCore::Element::childShouldCreateRenderer): Only create a renderer for a SVG child, if we're a SVG element, or if the child is a <svg> element. + * dom/Element.h: Added childShouldCreateRenderer, with ENABLE(SVG) guards. + * svg/SVGForeignObjectElement.cpp: + (WebCore::SVGForeignObjectElement::childShouldCreateRenderer): Disallow arbitary SVG content, only <svg> elements are allowed as direct children of a <foreignObject> + * svg/SVGSVGElement.cpp: + (WebCore::SVGSVGElement::isOutermostSVG): Be sure to create RenderSVGRoot objects for <svg> elements inside <foreignObject> + +2010-06-10 Abhishek Arya <inferno@chromium.org> + + Reviewed by Dave Hyatt. + + Do not render CSS Styles :first-letter and :first-line in a SVG text element context. + https://bugs.webkit.org/show_bug.cgi?id=40031 + + Test: svg/text/text-style-invalid.svg + + * rendering/RenderSVGText.cpp: + (WebCore::RenderSVGText::firstLineBlock): + (WebCore::RenderSVGText::updateFirstLetter): + * rendering/RenderSVGText.h: + +2010-07-01 Justin Schuh <jschuh@chromium.org> + + Reviewed by Dan Bernstein. + + Prevent crash on counter destruction + https://bugs.webkit.org/show_bug.cgi?id=40032 + + Added counter destruction to RenderWidget::destroy() + + Test: fast/css/counters/destroy-counter-crash.html + + * rendering/RenderWidget.cpp: + (WebCore::RenderWidget::destroy): + +2010-06-29 Dan Bernstein <mitz@apple.com> + + Reviewed by Darin Adler. + + <rdar://problem/7975842> Certain text is repeated after using splitText() + + Tests: fast/text/setData-dirty-lines.html + fast/text/splitText-dirty-lines.html + + * dom/CharacterData.cpp: + (WebCore::CharacterData::setData): Call RenderText::setTextWithOffset() rather than + setText(), because only the former correctly dirties line boxes. + * dom/Text.cpp: + (WebCore::Text::splitText): Ditto. + +2010-06-25 Dan Bernstein <mitz@apple.com> + + Reviewed by Sam Weinig. + + <rdar://problem/8000667> Certain text is repeated before and after a line break + + Test: fast/text/bidi-explicit-embedding-past-end.html + + * platform/text/BidiResolver.h: + (WebCore::::createBidiRunsForLine): Committing explicit embedding past the end of the range + creates BidiRuns up to the end of the range, so at that point, we can stop iterating. + +2010-06-10 Tony Chang <tony@chromium.org> + + Reviewed by Kent Tamura. + + crash when focus is changed while trying to focus next element + https://bugs.webkit.org/show_bug.cgi?id=40407 + + Test: fast/events/focus-change-crash.html + + * dom/Element.cpp: + (WebCore::Element::focus): + 2010-07-01 Andreas Kling <andreas.kling@nokia.com> Reviewed by Tor Arne Vestbø. diff --git a/src/3rdparty/webkit/WebCore/dom/CharacterData.cpp b/src/3rdparty/webkit/WebCore/dom/CharacterData.cpp index 3c3dc37..cb12184 100644 --- a/src/3rdparty/webkit/WebCore/dom/CharacterData.cpp +++ b/src/3rdparty/webkit/WebCore/dom/CharacterData.cpp @@ -46,15 +46,15 @@ void CharacterData::setData(const String& data, ExceptionCode&) int oldLength = length(); RefPtr<StringImpl> oldStr = m_data; m_data = dataImpl; - + if ((!renderer() || !rendererIsNeeded(renderer()->style())) && attached()) { detach(); attach(); } else if (renderer()) - toRenderText(renderer())->setText(m_data); - + toRenderText(renderer())->setTextWithOffset(m_data, 0, oldLength); + dispatchModifiedEvent(oldStr.get()); - + document()->textRemoved(this, 0, oldLength); } diff --git a/src/3rdparty/webkit/WebCore/dom/Element.cpp b/src/3rdparty/webkit/WebCore/dom/Element.cpp index a02bb4c..4c93020 100644 --- a/src/3rdparty/webkit/WebCore/dom/Element.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Element.cpp @@ -1311,8 +1311,12 @@ void Element::focus(bool restorePreviousSelection) return; } - if (Page* page = doc->page()) + RefPtr<Node> protect; + if (Page* page = doc->page()) { + // Focus and change event handlers can cause us to lose our last ref. + protect = this; page->focusController()->setFocusedNode(this, doc->frame()); + } // Setting the focused node above might have invalidated the layout due to scripts. doc->updateLayoutIgnorePendingStylesheets(); @@ -1535,4 +1539,15 @@ const QualifiedName& Element::rareIDAttributeName() const return rareData()->m_idAttributeName; } +#if ENABLE(SVG) +bool Element::childShouldCreateRenderer(Node* child) const +{ + // Only create renderers for SVG elements whose parents are SVG elements, or for proper <svg xmlns="svgNS"> subdocuments. + if (child->isSVGElement()) + return child->hasTagName(SVGNames::svgTag) || isSVGElement(); + + return Node::childShouldCreateRenderer(child); +} +#endif + } // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/dom/Element.h b/src/3rdparty/webkit/WebCore/dom/Element.h index 348ed1c..36c4f1b 100644 --- a/src/3rdparty/webkit/WebCore/dom/Element.h +++ b/src/3rdparty/webkit/WebCore/dom/Element.h @@ -270,6 +270,10 @@ public: virtual void dispatchFormControlChangeEvent() { } +#if ENABLE(SVG) + virtual bool childShouldCreateRenderer(Node*) const; +#endif + protected: Element(const QualifiedName&, Document*, ConstructionType); diff --git a/src/3rdparty/webkit/WebCore/dom/Text.cpp b/src/3rdparty/webkit/WebCore/dom/Text.cpp index 1ce074a..229fa88 100644 --- a/src/3rdparty/webkit/WebCore/dom/Text.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Text.cpp @@ -77,7 +77,7 @@ PassRefPtr<Text> Text::splitText(unsigned offset, ExceptionCode& ec) document()->textNodeSplit(this); if (renderer()) - toRenderText(renderer())->setText(dataImpl()); + toRenderText(renderer())->setTextWithOffset(dataImpl(), 0, oldStr->length()); return newText.release(); } diff --git a/src/3rdparty/webkit/WebCore/platform/text/BidiResolver.h b/src/3rdparty/webkit/WebCore/platform/text/BidiResolver.h index 286cdcd..a99fd01 100644 --- a/src/3rdparty/webkit/WebCore/platform/text/BidiResolver.h +++ b/src/3rdparty/webkit/WebCore/platform/text/BidiResolver.h @@ -806,35 +806,33 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo break; } - if (pastEnd) { - if (eor == current) { - if (!reachedEndOfLine) { - eor = endOfLine; - switch (m_status.eor) { - case LeftToRight: - case RightToLeft: - case ArabicNumber: - m_direction = m_status.eor; - break; - case EuropeanNumber: - m_direction = m_status.lastStrong == LeftToRight ? LeftToRight : EuropeanNumber; - break; - default: - ASSERT(false); - } - appendRun(); + if (pastEnd && eor == current) { + if (!reachedEndOfLine) { + eor = endOfLine; + switch (m_status.eor) { + case LeftToRight: + case RightToLeft: + case ArabicNumber: + m_direction = m_status.eor; + break; + case EuropeanNumber: + m_direction = m_status.lastStrong == LeftToRight ? LeftToRight : EuropeanNumber; + break; + default: + ASSERT(false); } - current = end; - m_status = stateAtEnd.m_status; - sor = stateAtEnd.sor; - eor = stateAtEnd.eor; - last = stateAtEnd.last; - reachedEndOfLine = stateAtEnd.reachedEndOfLine; - lastBeforeET = stateAtEnd.lastBeforeET; - emptyRun = stateAtEnd.emptyRun; - m_direction = OtherNeutral; - break; + appendRun(); } + current = end; + m_status = stateAtEnd.m_status; + sor = stateAtEnd.sor; + eor = stateAtEnd.eor; + last = stateAtEnd.last; + reachedEndOfLine = stateAtEnd.reachedEndOfLine; + lastBeforeET = stateAtEnd.lastBeforeET; + emptyRun = stateAtEnd.emptyRun; + m_direction = OtherNeutral; + break; } // set m_status.last as needed. @@ -887,8 +885,21 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo } increment(); - if (!m_currentExplicitEmbeddingSequence.isEmpty()) + if (!m_currentExplicitEmbeddingSequence.isEmpty()) { commitExplicitEmbedding(); + if (pastEnd) { + current = end; + m_status = stateAtEnd.m_status; + sor = stateAtEnd.sor; + eor = stateAtEnd.eor; + last = stateAtEnd.last; + reachedEndOfLine = stateAtEnd.reachedEndOfLine; + lastBeforeET = stateAtEnd.lastBeforeET; + emptyRun = stateAtEnd.emptyRun; + m_direction = OtherNeutral; + break; + } + } if (emptyRun && (dirCurrent == RightToLeftEmbedding || dirCurrent == LeftToRightEmbedding diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp index 798663e..e7fa753 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp @@ -2981,6 +2981,12 @@ void RenderBlock::clearFloats() m_floatingObjects->clear(); } + // We should not process floats if the parent node is not a RenderBlock. Otherwise, we will add + // floats in an invalid context. This will cause a crash arising from a bad cast on the parent. + // See <rdar://problem/8049753>, where float property is applied on a text node in a SVG. + if (!parent() || !parent()->isRenderBlock()) + return; + // Attempt to locate a previous sibling with overhanging floats. We skip any elements that are // out of flow (like floating/positioned elements), and we also skip over any objects that may have shifted // to avoid floats. diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.cpp index 76b8b86..de902e0 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.cpp @@ -225,6 +225,19 @@ FloatRect RenderSVGText::repaintRectInLocalCoordinates() const return repaintRect; } +// Fix for <rdar://problem/8048875>. We should not render :first-line CSS Style +// in a SVG text element context. +RenderBlock* RenderSVGText::firstLineBlock() const +{ + return 0; +} + +// Fix for <rdar://problem/8048875>. We should not render :first-letter CSS Style +// in a SVG text element context. +void RenderSVGText::updateFirstLetter() +{ +} + } #endif // ENABLE(SVG) diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.h b/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.h index ab4b09b..f09e396 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderSVGText.h @@ -72,6 +72,9 @@ private: virtual RootInlineBox* createRootInlineBox(); + virtual RenderBlock* firstLineBlock() const; + virtual void updateFirstLetter(); + AffineTransform m_localTransform; }; diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp index 561bead..251a65d 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp @@ -27,6 +27,7 @@ #include "AnimationController.h" #include "GraphicsContext.h" #include "HitTestResult.h" +#include "RenderCounter.h" #include "RenderView.h" #include "RenderWidgetProtector.h" @@ -114,6 +115,9 @@ void RenderWidget::destroy() if (RenderView* v = view()) v->removeWidget(this); + if (m_hasCounterNodeMap) + RenderCounter::destroyCounterNodes(this); + if (AXObjectCache::accessibilityEnabled()) { document()->axObjectCache()->childrenChanged(this->parent()); document()->axObjectCache()->remove(this); diff --git a/src/3rdparty/webkit/WebCore/svg/SVGElement.cpp b/src/3rdparty/webkit/WebCore/svg/SVGElement.cpp index 41bbba4..974bf2a 100644 --- a/src/3rdparty/webkit/WebCore/svg/SVGElement.cpp +++ b/src/3rdparty/webkit/WebCore/svg/SVGElement.cpp @@ -304,6 +304,15 @@ void SVGElement::attributeChanged(Attribute* attr, bool preserveDecls) return; StyledElement::attributeChanged(attr, preserveDecls); + + // When an animated SVG property changes through SVG DOM, svgAttributeChanged() is called, not attributeChanged(). + // Next time someone tries to access the XML attributes, the synchronization code starts. During that synchronization + // SVGAnimatedPropertySynchronizer may call NamedNodeMap::removeAttribute(), which in turn calls attributeChanged(). + // At this point we're not allowed to call svgAttributeChanged() again - it may lead to extra work being done, or crashes + // see bug https://bugs.webkit.org/show_bug.cgi?id=40994. + if (m_synchronizingSVGAttributes) + return; + svgAttributeChanged(attr->name()); } diff --git a/src/3rdparty/webkit/WebCore/svg/SVGFontFaceElement.cpp b/src/3rdparty/webkit/WebCore/svg/SVGFontFaceElement.cpp index 25b3aea..de646c6 100644 --- a/src/3rdparty/webkit/WebCore/svg/SVGFontFaceElement.cpp +++ b/src/3rdparty/webkit/WebCore/svg/SVGFontFaceElement.cpp @@ -59,7 +59,6 @@ SVGFontFaceElement::SVGFontFaceElement(const QualifiedName& tagName, Document* d SVGFontFaceElement::~SVGFontFaceElement() { - removeFromMappedElementSheet(); } static int cssPropertyIdForSVGAttributeName(const QualifiedName& attrName) diff --git a/src/3rdparty/webkit/WebCore/svg/SVGForeignObjectElement.cpp b/src/3rdparty/webkit/WebCore/svg/SVGForeignObjectElement.cpp index d28e2a4..e7b5389 100644 --- a/src/3rdparty/webkit/WebCore/svg/SVGForeignObjectElement.cpp +++ b/src/3rdparty/webkit/WebCore/svg/SVGForeignObjectElement.cpp @@ -125,6 +125,10 @@ RenderObject* SVGForeignObjectElement::createRenderer(RenderArena* arena, Render bool SVGForeignObjectElement::childShouldCreateRenderer(Node* child) const { + // Disallow arbitary SVG content. Only allow proper <svg xmlns="svgNS"> subdocuments. + if (child->isSVGElement()) + return child->hasTagName(SVGNames::svgTag); + // Skip over SVG rules which disallow non-SVG kids return StyledElement::childShouldCreateRenderer(child); } diff --git a/src/3rdparty/webkit/WebCore/svg/SVGSVGElement.cpp b/src/3rdparty/webkit/WebCore/svg/SVGSVGElement.cpp index 4c06008..5237715 100644 --- a/src/3rdparty/webkit/WebCore/svg/SVGSVGElement.cpp +++ b/src/3rdparty/webkit/WebCore/svg/SVGSVGElement.cpp @@ -538,6 +538,10 @@ bool SVGSVGElement::isOutermostSVG() const if (!parentNode()) return true; + // We act like an outermost SVG element, if we're a direct child of a <foreignObject> element. + if (parentNode()->hasTagName(SVGNames::foreignObjectTag)) + return true; + // This is true whenever this is the outermost SVG, even if there are HTML elements outside it return !parentNode()->isSVGElement(); } diff --git a/src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp b/src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp index 45bab6a..57d56e1 100644 --- a/src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp +++ b/src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp @@ -572,8 +572,8 @@ void SVGUseElement::attach() void SVGUseElement::detach() { - SVGStyledTransformableElement::detach(); m_targetElementInstance = 0; + SVGStyledTransformableElement::detach(); } static bool isDirectReference(Node* n) -- cgit v0.12 From 611b88a58061912e498b2d00fd4b085449b5ef8e Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 2 Aug 2010 12:51:28 +1000 Subject: Reference count items in VisualItemModel. The views expect the models to reference count and not destroy (or hide in the case of VisualItemModel) until there are no references. Task-number: QTBUG-12450 Reviewed-by: Michael Brasser (cherry picked from commit d39d01497640c3a0818d25036894495f8b597bdb) --- .../graphicsitems/qdeclarativevisualitemmodel.cpp | 48 +++++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 7952b97..79c1c43 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -78,7 +78,7 @@ public: static void children_append(QDeclarativeListProperty<QDeclarativeItem> *prop, QDeclarativeItem *item) { QDeclarative_setParent_noEvent(item, prop->object); - static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->children.append(item); + static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->children.append(Item(item)); static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->itemAppended(); static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->emitChildrenChanged(); } @@ -88,12 +88,12 @@ public: } static QDeclarativeItem *children_at(QDeclarativeListProperty<QDeclarativeItem> *prop, int index) { - return static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->children.at(index); + return static_cast<QDeclarativeVisualItemModelPrivate *>(prop->data)->children.at(index).item; } void itemAppended() { Q_Q(QDeclarativeVisualItemModel); - QDeclarativeVisualItemModelAttached *attached = QDeclarativeVisualItemModelAttached::properties(children.last()); + QDeclarativeVisualItemModelAttached *attached = QDeclarativeVisualItemModelAttached::properties(children.last().item); attached->setIndex(children.count()-1); emit q->itemsInserted(children.count()-1, 1); emit q->countChanged(); @@ -104,7 +104,25 @@ public: emit q->childrenChanged(); } - QList<QDeclarativeItem *> children; + int indexOf(QDeclarativeItem *item) const { + for (int i = 0; i < children.count(); ++i) + if (children.at(i).item == item) + return i; + return -1; + } + + class Item { + public: + Item(QDeclarativeItem *i) : item(i), ref(0) {} + + void addRef() { ++ref; } + bool deref() { return --ref == 0; } + + QDeclarativeItem *item; + int ref; + }; + + QList<Item> children; }; @@ -182,14 +200,22 @@ bool QDeclarativeVisualItemModel::isValid() const QDeclarativeItem *QDeclarativeVisualItemModel::item(int index, bool) { Q_D(QDeclarativeVisualItemModel); - return d->children.at(index); + QDeclarativeVisualItemModelPrivate::Item &item = d->children[index]; + item.addRef(); + return item.item; } QDeclarativeVisualModel::ReleaseFlags QDeclarativeVisualItemModel::release(QDeclarativeItem *item) { - if (item->scene()) - item->scene()->removeItem(item); - QDeclarative_setParent_noEvent(item, this); + Q_D(QDeclarativeVisualItemModel); + int idx = d->indexOf(item); + if (idx >= 0) { + if (d->children[idx].deref()) { + if (item->scene()) + item->scene()->removeItem(item); + QDeclarative_setParent_noEvent(item, this); + } + } return 0; } @@ -208,7 +234,7 @@ QString QDeclarativeVisualItemModel::stringValue(int index, const QString &name) Q_D(QDeclarativeVisualItemModel); if (index < 0 || index >= d->children.count()) return QString(); - return QDeclarativeEngine::contextForObject(d->children.at(index))->contextProperty(name).toString(); + return QDeclarativeEngine::contextForObject(d->children.at(index).item)->contextProperty(name).toString(); } QVariant QDeclarativeVisualItemModel::evaluate(int index, const QString &expression, QObject *objectContext) @@ -218,7 +244,7 @@ QVariant QDeclarativeVisualItemModel::evaluate(int index, const QString &express return QVariant(); QDeclarativeContext *ccontext = qmlContext(this); QDeclarativeContext *ctxt = new QDeclarativeContext(ccontext); - ctxt->setContextObject(d->children.at(index)); + ctxt->setContextObject(d->children.at(index).item); QDeclarativeExpression e(ctxt, objectContext, expression); QVariant value = e.evaluate(); delete ctxt; @@ -228,7 +254,7 @@ QVariant QDeclarativeVisualItemModel::evaluate(int index, const QString &express int QDeclarativeVisualItemModel::indexOf(QDeclarativeItem *item, QObject *) const { Q_D(const QDeclarativeVisualItemModel); - return d->children.indexOf(item); + return d->indexOf(item); } QDeclarativeVisualItemModelAttached *QDeclarativeVisualItemModel::qmlAttachedProperties(QObject *obj) -- cgit v0.12 From a06c10b864cd41673b2f65874c112f7f1cb7dbf3 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 2 Aug 2010 15:45:21 +1000 Subject: Make sure ListView.nextSection attached property is set for the first item Task-number: QTBUG-12470 Reviewed-by: Bea Lam (cherry picked from commit 2501c66e3795040d72a1922499294a686832e7a2) --- src/declarative/graphicsitems/qdeclarativelistview.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index b0a11b9..256948a 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -575,9 +575,11 @@ FxListItem *QDeclarativeListViewPrivate::createItem(int modelIndex) listItem->attached->m_prevSection = item->attached->section(); else listItem->attached->m_prevSection = sectionAt(modelIndex-1); + } + if (modelIndex < model->count()-1) { if (FxListItem *item = visibleItem(modelIndex+1)) listItem->attached->m_nextSection = item->attached->section(); - else if (modelIndex < model->count()-1) + else listItem->attached->m_nextSection = sectionAt(modelIndex+1); } } -- cgit v0.12 From 586b2f86eb7dcf460a8d749d20fd24039a55ab6d Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 2 Aug 2010 16:44:33 +1000 Subject: Ensure currentItem is released when the delegate changes Otherwise a new delegate isn't created for the currentItem. GridView didn't release any item. It is now equivalent to LsitView. Task-number: QTBUG-12548 Reviewed-by: Bea Lam (cherry picked from commit a07bae9717168c9605662e117132e16b5f2b2f9d) --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 5 +++++ src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index f02ef6b..68a4c64 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1278,6 +1278,11 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate) if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) { dataModel->setDelegate(delegate); if (isComponentComplete()) { + for (int i = 0; i < d->visibleItems.count(); ++i) + d->releaseItem(d->visibleItems.at(i)); + d->visibleItems.clear(); + d->releaseItem(d->currentItem); + d->currentItem = 0; refill(); d->moveReason = QDeclarativeGridViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 256948a..82b3e1c 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1620,6 +1620,8 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate) for (int i = 0; i < d->visibleItems.count(); ++i) d->releaseItem(d->visibleItems.at(i)); d->visibleItems.clear(); + d->releaseItem(d->currentItem); + d->currentItem = 0; refill(); d->moveReason = QDeclarativeListViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); -- cgit v0.12 From 06d2876f06463fe92c473dc928be06e7d7ead53e Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Mon, 2 Aug 2010 16:22:43 +1000 Subject: State doc fixes, improvements Task-number: QTBUG-12570 (cherry picked from commit 3daee8e915f9845fb104e57c7f35fdb2f7251df5) --- doc/src/declarative/qdeclarativestates.qdoc | 183 +++++++++++++++++++++++----- doc/src/snippets/declarative/state-when.qml | 55 +++++++++ doc/src/snippets/declarative/state.qml | 18 ++- doc/src/snippets/declarative/states.qml | 38 ++---- src/declarative/util/qdeclarativestate.cpp | 15 +-- 5 files changed, 227 insertions(+), 82 deletions(-) create mode 100644 doc/src/snippets/declarative/state-when.qml diff --git a/doc/src/declarative/qdeclarativestates.qdoc b/doc/src/declarative/qdeclarativestates.qdoc index e7607c6..0b91756 100644 --- a/doc/src/declarative/qdeclarativestates.qdoc +++ b/doc/src/declarative/qdeclarativestates.qdoc @@ -32,57 +32,174 @@ \section1 Overview -QML states typically describe user interface configurations, including: +User interfaces are designed to present different interface configurations in +different scenarios, or to modify their appearances in response to user +interaction. Often, there are a set of changes that are made concurrently, such +that the interface could be seen to be internally changing from one \e state to +another. + +This applies generally to interface elements regardless of their complexity. +A photo viewer may initially present images in a grid, and when an image is +clicked, change to a "detailed" state where the individual image is expanded +and the interface is changed to present new options for image editing. On the +other end of the scale, when a simple button is pressed, it may change to a +"pressed" state in which its color and position is modified to give a pressed +appearance. + +In QML, any object can change between different \e states to apply sets of +changes that modify the properties of relevant items. Each \e state could +present a different configuration that could, for example: + \list -\o What UI elements are present -\o The properties of those elements (including how they behave) -\o What actions are available +\o Show some UI elements and hide others +\o Present different available actions to the user +\o Start, stop or pause animations +\o Execute some script required in the new state +\o Change a property value for a particular item +\o Show a different view or "screen" \endlist -A state can also be thought of as a set of batched changes from a default configuration. +Changes between states can be animated using \l {Transitions}{transitions}, as +discussed further below. -Examples of states in modern UI: -\list -\o An Address Book application with a 'View Contact' state and an 'Edit Contact' State. In the first state the contact information presented is read-only (using labels), and in the second it is editable (using editors). -\o A button with a pressed and unpressed state. When pressed the text moves slightly down and to the right, and the button has a slightly darker appearance. -\endlist +All \l {Item}-based objects have a \e {default state}, and can specify additional +states by adding new \l State objects to the item's \l {Item::}{states} +property. Each state has a \e name that is unique for all states within that +item; the default state's name is an empty string. To change the current state +of an item, set the \l {Item::}{state} property to the name of the state. + +Non-Item objects can use states through the StateGroup element. -\section1 States in QML -In QML: +\section1 Creating states + +To create a state, add a \l State object to the item's \l {Item::}{states} property, +which holds a list of states for that item. + +Following is an example. Here, the \l Rectangle is initially placed in the +default (0, 0) position. It has defined an additional state named "moved", in +which a PropertyChanges object repositions the rectangle to (50, 50). Clicking +within the MouseArea changes the state to the "moved" state, thus moving the \l +Rectangle. + +\snippet doc/src/snippets/declarative/states.qml 0 + +A \l State item defines all the changes to be made in the new state. You +could specify additional properties to be changed, or create additional +PropertyChanges for other objects. (Note that a \l State can modify the +properties of other objects, not just the object that owns the state.) + +For example: + +\qml +State { + name: "moved" + PropertyChanges { target: myRect; x: 50; y: 50; color: "blue" } + PropertyChanges { target: someOtherItem; width: 1000 } +} +\endqml + +A \l State is not limited to performing modifications on property values. It +can also: + \list -\o Any object can use states. -\o There is a default state. The default state can be explicitly set. -\o A state can affect the properties of other objects, not just the object owning the state (and not just that object's children). +\o Run some script using StateChangeScript +\o Override an existing signal handler for an object using PropertyChanges +\o Re-parent an \l Item using ParentChanges +\o Modify anchor values using AnchorChanges \endlist -To define a state for an item, add a \l State element to the \l{Item::states}{states} property. To -change the current state of an \l Item, set the \l{Item::state}{state} property to the name -of the required state. +The \l {declarative/animation/states}{States and Transitions example} +demonstrates how to declare a basic set of states and apply animated +transitions between them. -Here is an example of using states. In the default state \c myRect is positioned at 0,0. In the 'moved' state it is positioned at 50,50. Clicking within the mouse area changes the state from the default state to the 'moved' state, thus moving the rectangle. -\snippet doc/src/snippets/declarative/states.qml 0 -\snippet doc/src/snippets/declarative/states.qml 1 +\section1 The default state -State changes can be animated using \l{state-transitions}{Transitions}. +Of course, the \l Rectangle in the example above could have simply been moved +by setting its position to (50, 50) in the mouse area's \c onClicked handler. +However, aside from enabling batched property changes, the use of states allows +an item to revert to its \e {default state}, which contains all of the items' +initial property values before they were modified in a state change. -For example, adding this code to the above \c Item element animates the transition to the "moved" state: +The default state is specified by an empty string. If the MouseArea in the +above example was changed to this: -\snippet doc/src/snippets/declarative/states.qml transitions +\qml +MouseArea { + anchors.fill: parent + onClicked: myRect.state == 'moved' ? myRect.state = "" : myRect.state = 'moved'; +} +\endqml -See \l{state-transitions}{Transitions} for more information. +This would toggle the \l Rectangle's state between the \e moved and \e default +states when clicked. The properties can be reverted to their initial +values without requiring the definition of another \l State that defines these +value changes. -Other things you can do in a state change: -\list -\o Override signal handlers with PropertyChanges -\o Change an item's visual parent with ParentChange -\o Change an item's anchors with AnchorChanges -\o Run some script with StateChangeScript -\endlist +\section1 The "when" property + +The \l {State::}{when} property is useful for specifying when a state should be +applied. This can be set to an expression that evaluates to \c true when an +item should change to a particular state. + +If the above example was changed to this: + +\qml +Rectangle { + ... + + MouseArea { + id: mouseArea + anchors.fill: parent + } + + states: State { + name: "moved"; when: mouseArea.pressed + ... + } +\endqml + +The \l Rectangle would automatically change to the \e moved state when the +mouse is pressed, and revert to the default state when it is released. This is +simpler (and a better, more declarative method) than creating \c onPressed +and \c onReleased handlers in the MouseArea to set the current state. + + +\section1 Animating state changes + + +State changes can be easily animated through \l {Transitions}{transitions}. A +\l Transition defines the animations that should be applied when an item +changes from one state to another. + +If the above example was modified to include the following \l Transition, the +movement of the \l Rectangle would be animated: + +\qml +Rectangle { + ... + + MouseArea { ... } + + states: [ + ... + ] + + transitions: [ + Transition { + NumberAnimation { properties: "x,y"; duration: 500 } + } + ] + } +\endqml + +This \l Transition defines that if any \c x or \c y properties have changed +during a state change within this item, their values should be animated over 500 +millliseconds. -The \l {declarative/animation/states}{States and Transitions example} demonstrates how to declare a basic set of states and then apply animated transitions between them. +See the \l Transitions documentation for more information. */ diff --git a/doc/src/snippets/declarative/state-when.qml b/doc/src/snippets/declarative/state-when.qml new file mode 100644 index 0000000..6d3bb75 --- /dev/null +++ b/doc/src/snippets/declarative/state-when.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import Qt 4.7 +//![0] +Rectangle { + id: myRect + width: 100; height: 100 + color: "red" + + MouseArea { id: mouseArea; anchors.fill: parent } + + states: State { + name: "hidden"; when: mouseArea.pressed + PropertyChanges { target: myRect; opacity: 0 } + } +} +//![0] diff --git a/doc/src/snippets/declarative/state.qml b/doc/src/snippets/declarative/state.qml index af6b103..ce2653b 100644 --- a/doc/src/snippets/declarative/state.qml +++ b/doc/src/snippets/declarative/state.qml @@ -44,13 +44,19 @@ import Qt 4.7 Rectangle { id: myRect width: 100; height: 100 - color: "red" + color: "black" - MouseArea { id: mouseArea; anchors.fill: parent } - - states: State { - name: "hidden"; when: mouseArea.pressed - PropertyChanges { target: myRect; opacity: 0 } + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: myRect.state == 'clicked' ? myRect.state = "" : myRect.state = 'clicked'; } + + states: [ + State { + name: "clicked" + PropertyChanges { target: myRect; color: "red" } + } + ] } //![0] diff --git a/doc/src/snippets/declarative/states.qml b/doc/src/snippets/declarative/states.qml index c3b1796..127e3a7 100644 --- a/doc/src/snippets/declarative/states.qml +++ b/doc/src/snippets/declarative/states.qml @@ -40,42 +40,22 @@ ****************************************************************************/ //![0] import Qt 4.7 - -Item { - id: myItem + +Rectangle { + id: myRect width: 200; height: 200 + color: "red" - Rectangle { - id: myRect - width: 100; height: 100 - color: "red" + MouseArea { + anchors.fill: parent + onClicked: myRect.state = 'moved' } states: [ State { name: "moved" - PropertyChanges { - target: myRect - x: 50 - y: 50 - } + PropertyChanges { target: myRect; x: 50; y: 50 } } ] - - MouseArea { - anchors.fill: parent - onClicked: myItem.state = 'moved' - } -//![0] - -//![transitions] -transitions: [ - Transition { - NumberAnimation { properties: "x,y"; duration: 500 } - } -] -//![transitions] - -//![1] } -//![1] +//![0] diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index 9f4cc39..dc76d56 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -229,20 +229,7 @@ bool QDeclarativeState::isWhenKnown() const be applied. For example, the following \l Rectangle changes in and out of the "hidden" state when the \l MouseArea is pressed: - \qml - Rectangle { - id: myRect - width: 100; height: 100 - color: "red" - - MouseArea { id: mouseArea; anchors.fill: parent } - - states: State { - name: "hidden"; when: mouseArea.pressed - PropertyChanges { target: myRect; opacity: 0 } - } - } - \endqml + \snippet doc/src/snippets/declarative/state-when.qml 0 If multiple states in a group have \c when clauses that evaluate to \c true at the same time, the first matching state will be applied. For example, in the following snippet -- cgit v0.12 From 1bc50649380440a5dbe0be8c6e8c08f62e8d4d58 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Mon, 2 Aug 2010 12:24:57 +1000 Subject: Update QtGui def files Task-number: QTBUG-12333 Reviewed-by: Martin Jones --- src/s60installs/bwins/QtGuiu.def | 3 +++ src/s60installs/eabi/QtGuiu.def | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index a7223f2..a81483c 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12883,4 +12883,7 @@ EXPORTS ?focusScopeItemChange@QGraphicsItemPrivate@@UAEX_N@Z @ 12882 NONAME ; void QGraphicsItemPrivate::focusScopeItemChange(bool) ?setTimeout@QTapAndHoldGesture@@SAXH@Z @ 12883 NONAME ABSENT ; void QTapAndHoldGesture::setTimeout(int) ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@_N@Z @ 12884 NONAME ABSENT ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *, bool) + ?zScaleChanged@QGraphicsScale@@IAEXXZ @ 12885 NONAME ; void QGraphicsScale::zScaleChanged(void) + ?xScaleChanged@QGraphicsScale@@IAEXXZ @ 12886 NONAME ; void QGraphicsScale::xScaleChanged(void) + ?yScaleChanged@QGraphicsScale@@IAEXXZ @ 12887 NONAME ; void QGraphicsScale::yScaleChanged(void) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index f152c41..ede0021 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12088,4 +12088,7 @@ EXPORTS _ZN18QTapAndHoldGesture7timeoutEv @ 12087 NONAME ABSENT _ZN20QGraphicsItemPrivate20focusScopeItemChangeEb @ 12088 NONAME _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFb @ 12089 NONAME ABSENT + _ZN14QGraphicsScale13xScaleChangedEv @ 12090 NONAME + _ZN14QGraphicsScale13yScaleChangedEv @ 12091 NONAME + _ZN14QGraphicsScale13zScaleChangedEv @ 12092 NONAME -- cgit v0.12 From d5d41f3881c2c098727cdbc8a58d2a7ba2cbeb5b Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Tue, 3 Aug 2010 22:44:36 +1000 Subject: Pulled major qdoc3 changes into the releases branch. --- tools/qdoc3/config.h | 1 + tools/qdoc3/doc/files/qt.qdocconf | 10 +- tools/qdoc3/htmlgenerator.cpp | 310 ++++++++++++++++++---------- tools/qdoc3/htmlgenerator.h | 12 ++ tools/qdoc3/node.cpp | 18 ++ tools/qdoc3/node.h | 1 + tools/qdoc3/test/assistant.qdocconf | 27 ++- tools/qdoc3/test/designer.qdocconf | 3 + tools/qdoc3/test/linguist.qdocconf | 3 + tools/qdoc3/test/qdeclarative.qdocconf | 9 +- tools/qdoc3/test/qmake.qdocconf | 3 + tools/qdoc3/test/qt-api-only.qdocconf | 10 + tools/qdoc3/test/qt-api-only_ja_JP.qdocconf | 7 + tools/qdoc3/test/qt-api-only_zh_CN.qdocconf | 7 + tools/qdoc3/test/qt-build-docs.qdocconf | 15 +- tools/qdoc3/test/qt-html-templates.qdocconf | 10 +- tools/qdoc3/test/qt.qdocconf | 84 ++++---- 17 files changed, 354 insertions(+), 176 deletions(-) diff --git a/tools/qdoc3/config.h b/tools/qdoc3/config.h index af58a3f..b087b1c 100644 --- a/tools/qdoc3/config.h +++ b/tools/qdoc3/config.h @@ -143,6 +143,7 @@ class Config #define CONFIG_NATURALLANGUAGE "naturallanguage" #define CONFIG_OBSOLETELINKS "obsoletelinks" #define CONFIG_ONLINE "online" +#define CONFIG_OFFLINE "offline" #define CONFIG_CREATOR "creator" #define CONFIG_OUTPUTDIR "outputdir" #define CONFIG_OUTPUTENCODING "outputencoding" diff --git a/tools/qdoc3/doc/files/qt.qdocconf b/tools/qdoc3/doc/files/qt.qdocconf index 942d023..09c112a 100644 --- a/tools/qdoc3/doc/files/qt.qdocconf +++ b/tools/qdoc3/doc/files/qt.qdocconf @@ -8,7 +8,7 @@ project = Qt versionsym = version = %VERSION% description = Qt Reference Documentation -url = http://qt.nokia.com/doc/4.6 +url = http://qt.nokia.com/doc/4.7 edition.Console.modules = QtCore QtDBus QtNetwork QtScript QtSql QtXml \ QtXmlPatterns QtTest @@ -22,7 +22,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.460 +qhp.Qt.namespace = com.trolltech.qt.470 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = @@ -36,9 +36,9 @@ qhp.Qt.extraFiles = classic.css \ images/dynamiclayouts-example.png \ images/stylesheet-coffee-plastique.png -qhp.Qt.filterAttributes = qt 4.6.0 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.6.0 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.0 +qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.0 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 7e081db..76d8c0d 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -219,7 +219,8 @@ HtmlGenerator::HtmlGenerator() inTableHeader(false), numTableRows(0), threeColumnEnumValueTable(true), - offlineDocs(true), + offlineDocs(false), + onlineDocs(false), creatorDocs(true), funcLeftParen("\\S(\\()"), myTree(0), @@ -271,6 +272,12 @@ void HtmlGenerator::initializeGenerator(const Config &config) postPostHeader = config.getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_POSTPOSTHEADER); + creatorPostHeader = config.getString(HtmlGenerator::format() + + Config::dot + + HTMLGENERATOR_CREATORPOSTHEADER); + creatorPostPostHeader = config.getString(HtmlGenerator::format() + + Config::dot + + HTMLGENERATOR_CREATORPOSTPOSTHEADER); footer = config.getString(HtmlGenerator::format() + Config::dot + HTMLGENERATOR_FOOTER); @@ -282,8 +289,13 @@ void HtmlGenerator::initializeGenerator(const Config &config) HTMLGENERATOR_GENERATEMACREFS); project = config.getString(CONFIG_PROJECT); - offlineDocs = !config.getBool(CONFIG_ONLINE); - creatorDocs = !config.getBool(CONFIG_CREATOR); + + onlineDocs = config.getBool(CONFIG_ONLINE); + + offlineDocs = config.getBool(CONFIG_OFFLINE); + + creatorDocs = config.getBool(CONFIG_CREATOR); + projectDescription = config.getString(CONFIG_DESCRIPTION); if (projectDescription.isEmpty() && !project.isEmpty()) projectDescription = project + " Reference Documentation"; @@ -1256,20 +1268,18 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, generateHeader(title, inner, marker); sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay); generateTableOfContents(inner,marker,§ions); - generateTitle(title, subtitleText, SmallSubTitle, inner, marker); - -#ifdef QDOC_QML - if (classe && !classe->qmlElement().isEmpty()) { - generateInstantiatedBy(classe,marker); - } -#endif - + generateTitle(title, subtitleText, SmallSubTitle, inner, marker); generateBrief(inner, marker); generateIncludes(inner, marker); generateStatus(inner, marker); if (classe) { generateInherits(classe, marker); generateInheritedBy(classe, marker); +#ifdef QDOC_QML + if (!classe->qmlElement().isEmpty()) { + generateInstantiatedBy(classe,marker); + } +#endif } generateThreadSafeness(inner, marker); generateSince(inner, marker); @@ -1352,12 +1362,14 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner, out() << "<a name=\"" << registerRef("details") << "\"></a>" << divNavTop << "\n"; if (!inner->doc().isEmpty()) { + generateExtractionMark(inner, DetailedDescriptionMark); //out() << "<hr />\n" out() << "<div class=\"descr\">\n" // QTBUG-9504 << "<h2>" << "Detailed Description" << "</h2>\n"; generateBody(inner, marker); out() << "</div>\n"; // QTBUG-9504 generateAlsoList(inner, marker); + generateExtractionMark(inner, EndMark); } sections = marker->sections(inner, CodeMarker::Detailed, CodeMarker::Okay); @@ -1474,7 +1486,13 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) Generate the TOC for the new doc format. Don't generate a TOC for the home page. */ - if (fake->name() != QString("index.html")) + const QmlClassNode* qml_cn = 0; + if (fake->subType() == Node::QmlClass) { + qml_cn = static_cast<const QmlClassNode*>(fake); + sections = marker->qmlSections(qml_cn,CodeMarker::Summary); + generateTableOfContents(fake,marker,§ions); + } + else if (fake->name() != QString("index.html")) generateTableOfContents(fake,marker,0); generateTitle(fullTitle, @@ -1548,27 +1566,28 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) } #ifdef QDOC_QML else if (fake->subType() == Node::QmlClass) { - const QmlClassNode* qml_cn = static_cast<const QmlClassNode*>(fake); const ClassNode* cn = qml_cn->classNode(); - generateQmlInherits(qml_cn, marker); - generateQmlInstantiates(qml_cn, marker); generateBrief(qml_cn, marker); + generateQmlInherits(qml_cn, marker); generateQmlInheritedBy(qml_cn, marker); - sections = marker->qmlSections(qml_cn,CodeMarker::Summary); + generateQmlInstantiates(qml_cn, marker); s = sections.begin(); while (s != sections.end()) { - out() << "<a name=\"" << registerRef((*s).name) << "\"></a>" << divNavTop << "\n"; + out() << "<a name=\"" << registerRef((*s).name.toLower()) + << "\"></a>" << divNavTop << "\n"; out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; generateQmlSummary(*s,fake,marker); ++s; } + generateExtractionMark(fake, DetailedDescriptionMark); out() << "<a name=\"" << registerRef("details") << "\"></a>" << divNavTop << "\n"; out() << "<h2>" << "Detailed Description" << "</h2>\n"; generateBody(fake, marker); if (cn) generateQmlText(cn->doc().body(), cn, marker, fake->name()); generateAlsoList(fake, marker); + generateExtractionMark(fake, EndMark); //out() << "<hr />\n"; sections = marker->qmlSections(qml_cn,CodeMarker::Detailed); @@ -1601,16 +1620,20 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) Text brief = fake->doc().briefText(); if (fake->subType() == Node::Module && !brief.isEmpty()) { + generateExtractionMark(fake, DetailedDescriptionMark); out() << "<a name=\"" << registerRef("details") << "\"></a>" << divNavTop << "\n"; out() << "<div class=\"descr\">\n"; // QTBUG-9504 out() << "<h2>" << "Detailed Description" << "</h2>\n"; } - else - out() << "<div class=\"descr\">\n"; // QTBUG-9504 + else { + generateExtractionMark(fake, DetailedDescriptionMark); + out() << "<div class=\"descr\"> <a name=\"" << registerRef("details") << "\"></a>\n"; // QTBUG-9504 + } generateBody(fake, marker); out() << "</div>\n"; // QTBUG-9504 generateAlsoList(fake, marker); + generateExtractionMark(fake, EndMark); if (!fake->groupMembers().isEmpty()) { NodeMap groupMembersMap; @@ -1770,64 +1793,94 @@ void HtmlGenerator::generateHeader(const QString& title, else shortVersion = "Qt " + shortVersion + ": "; } - // Generating page title + + // Generating page title out() << " <title>" << shortVersion << protectEnc(title) << "</title>\n"; - // Adding style sheet - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; - // Adding jquery and functions - providing online tools and search features - out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; - out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; - // Adding style and js for small windows - out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; - out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />"; + // Adding style sheet + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />\n"; + // Adding jquery and functions - providing online tools and search features + out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; + out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; + // Adding style and js for small windows + out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; + out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />\n"; - // Adding syntax highlighter // future release + // Adding syntax highlighter // future release - // Setting assistant configuration - if (offlineDocs) - { - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Only for Qt Creator - out() << "</head>\n"; - out() << "<body class=\"offline \">\n"; // offline for Assistant - } - if (creatorDocs) - { - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/style.css\" />"; // Only for Qt Creator - out() << "</head>\n"; - out() << "<body class=\"offline creator\">\n"; // offline for Creator - } - // Setting online doc configuration - else - { - // Browser spec styles - out() << " <!--[if IE]>\n"; - out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; - out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n"; - out() << "<![endif]-->\n"; - out() << "<!--[if lt IE 7]>\n"; - out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie6.css\">\n"; - out() << "<![endif]-->\n"; - out() << "<!--[if IE 7]>\n"; - out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie7.css\">\n"; - out() << "<![endif]-->\n"; - out() << "<!--[if IE 8]>\n"; - out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; - out() << "<![endif]-->\n"; + // Setting some additional style sheet related details depending on configuration (e.g. online/offline) + + + if(onlineDocs==true) // onlineDocs is for the web + { + // Browser spec styles + out() << " <!--[if IE]>\n"; + out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; + out() << "<meta http-equiv=\"imagetoolbar\" content=\"no\">\n"; + out() << "<![endif]-->\n"; + out() << "<!--[if lt IE 7]>\n"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie6.css\">\n"; + out() << "<![endif]-->\n"; + out() << "<!--[if IE 7]>\n"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie7.css\">\n"; + out() << "<![endif]-->\n"; + out() << "<!--[if IE 8]>\n"; + out() << "<link rel=\"stylesheet\" type=\"text/css\" href=\"style/style_ie8.css\">\n"; + out() << "<![endif]-->\n"; - out() << "</head>\n"; - // CheckEmptyAndLoadList activating search - out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; - } + out() << "</head>\n"; + // CheckEmptyAndLoadList activating search + out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; + } + else if (offlineDocs == true) // offlineDocs is for ??? + { + out() << "</head>\n"; + out() << "<body class=\"offline \">\n"; // offline + } + else if (creatorDocs == true) // creatorDocs is for Assistant/Creator + { + out() << "</head>\n"; + out() << "<body class=\"offline narrow creator\">\n"; // offline narrow + } + // default -- not used except if one forgets to set any of the above settings to true + else + { + out() << "</head>\n"; + out() << "<body>\n"; + } #ifdef GENERATE_MAC_REFS if (mainPage) generateMacRef(node, marker); -#endif - out() << QString(postHeader).replace("\\" + COMMAND_VERSION, myTree->version()); - generateBreadCrumbs(title,node,marker); - out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); +#endif + + + if(onlineDocs==true) // onlineDocs is for the web + { + out() << QString(postHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + generateBreadCrumbs(title,node,marker); + out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + } + else if (offlineDocs == true) // offlineDocs is for ??? + { + out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + generateBreadCrumbs(title,node,marker); + out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + } + else if (creatorDocs == true) // creatorDocs is for Assistant/Creator + { + out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + generateBreadCrumbs(title,node,marker); + out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + } + // default -- not used except if one forgets to set any of the above settings to true + else + { + out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + generateBreadCrumbs(title,node,marker); + out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + } #if 0 // Removed for new doc format. MWS if (node && !node->links().empty()) @@ -1862,29 +1915,33 @@ void HtmlGenerator::generateFooter(const Node *node) out() << QString(footer).replace("\\" + COMMAND_VERSION, myTree->version()) << QString(address).replace("\\" + COMMAND_VERSION, myTree->version()); - if (offlineDocs) - { - out() << "</body>\n"; - } - if (creatorDocs) - { - out() << "</body>\n"; - } - else - { - out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; - out() << " <!-- <script type=\"text/javascript\">\n"; - out() << " var _gaq = _gaq || [];\n"; - out() << " _gaq.push(['_setAccount', 'UA-4457116-5']);\n"; - out() << " _gaq.push(['_trackPageview']);\n"; - out() << " (function() {\n"; - out() << " var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n"; - out() << " ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n"; - out() << " var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n"; - out() << " })();\n"; - out() << " </script> -->\n"; - out() << "</body>\n"; - } + if (onlineDocs == true) + { + out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; + out() << " <!-- <script type=\"text/javascript\">\n"; + out() << " var _gaq = _gaq || [];\n"; + out() << " _gaq.push(['_setAccount', 'UA-4457116-5']);\n"; + out() << " _gaq.push(['_trackPageview']);\n"; + out() << " (function() {\n"; + out() << " var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n"; + out() << " ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n"; + out() << " var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n"; + out() << " })();\n"; + out() << " </script> -->\n"; + out() << "</body>\n"; + } + else if (offlineDocs == true) + { + out() << "</body>\n"; + } + else if (creatorDocs == true) + { + out() << "</body>\n"; + } + else + { + out() << "</body>\n"; + } out() << "</html>\n"; } @@ -1893,13 +1950,18 @@ void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker, { Text brief = node->doc().briefText(); if (!brief.isEmpty()) { + generateExtractionMark(node, BriefMark); out() << "<p>"; generateText(brief, node, marker); + if (!relative || node == relative) out() << " <a href=\"#"; else out() << " <a href=\"" << linkForNode(node, relative) << "#"; out() << registerRef("details") << "\">More...</a></p>\n"; + + + generateExtractionMark(node, EndMark); } } @@ -2053,7 +2115,8 @@ void HtmlGenerator::generateTableOfContents(const Node *node, } } else if (sections && ((node->type() == Node::Class) || - (node->type() == Node::Namespace))) { + (node->type() == Node::Namespace) || + (node->subType() == Node::QmlClass))) { QList<Section>::ConstIterator s = sections->begin(); while (s != sections->end()) { if (!s->members.isEmpty() || !s->reimpMembers.isEmpty()) { @@ -3468,6 +3531,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node, #ifdef GENERATE_MAC_REFS generateMacRef(node, marker); #endif + generateExtractionMark(node, MemberMark); if (node->type() == Node::Enum && (enume = static_cast<const EnumNode *>(node))->flagsType()) { #ifdef GENERATE_MAC_REFS @@ -3530,6 +3594,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node, } } generateAlsoList(node, marker); + generateExtractionMark(node, EndMark); } void HtmlGenerator::findAllClasses(const InnerNode *node) @@ -4076,6 +4141,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, #ifdef GENERATE_MAC_REFS generateMacRef(node, marker); #endif + generateExtractionMark(node, MemberMark); out() << "<div class=\"qmlitem\">"; if (node->subType() == Node::QmlPropertyGroup) { const QmlPropGroupNode* qpgn = static_cast<const QmlPropGroupNode*>(node); @@ -4096,7 +4162,6 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, out() << "<a name=\"" + refForNode(qpn) + "\"></a>"; if (!qpn->isWritable(myTree)) { - qDebug() << "QPN:" << qpn->name(); out() << "<span class=\"qmlreadonly\">read-only</span>"; } if (qpgn->isDefault()) @@ -4150,6 +4215,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node, generateAlsoList(node, marker); out() << "</div>"; out() << "</div>"; + generateExtractionMark(node, EndMark); } /*! @@ -4167,16 +4233,14 @@ void HtmlGenerator::generateQmlInherits(const QmlClassNode* cn, const Node* n = myTree->findNode(strList,Node::Fake); if (n && n->subType() == Node::QmlClass) { const QmlClassNode* qcn = static_cast<const QmlClassNode*>(n); - out() << "<p class=\"centerAlign\">"; Text text; - text << "[Inherits "; + text << Atom::ParaLeft << "Inherits "; text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, linkPair.second); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); - text << "]"; + text << Atom::ParaRight; generateText(text, cn, marker); - out() << "</p>"; } } } @@ -4214,9 +4278,8 @@ void HtmlGenerator::generateQmlInstantiates(const QmlClassNode* qcn, { const ClassNode* cn = qcn->classNode(); if (cn && (cn->status() != Node::Internal)) { - out() << "<p class=\"centerAlign\">"; Text text; - text << "["; + text << Atom::ParaLeft; text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); QString name = qcn->name(); @@ -4229,9 +4292,8 @@ void HtmlGenerator::generateQmlInstantiates(const QmlClassNode* qcn, text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, cn->name()); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); - text << "]"; + text << Atom::ParaRight; generateText(text, qcn, marker); - out() << "</p>"; } } @@ -4248,9 +4310,8 @@ void HtmlGenerator::generateInstantiatedBy(const ClassNode* cn, if (cn && cn->status() != Node::Internal && !cn->qmlElement().isEmpty()) { const Node* n = myTree->root()->findNode(cn->qmlElement(),Node::Fake); if (n && n->subType() == Node::QmlClass) { - out() << "<p class=\"centerAlign\">"; Text text; - text << "["; + text << Atom::ParaLeft; text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn)); text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, cn->name()); @@ -4260,9 +4321,8 @@ void HtmlGenerator::generateInstantiatedBy(const ClassNode* cn, text << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK); text << Atom(Atom::String, n->name()); text << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK); - text << "]"; + text << Atom::ParaRight; generateText(text, cn, marker); - out() << "</p>"; } } } @@ -4391,6 +4451,44 @@ void HtmlGenerator::generatePageIndex(const QString& fileName, CodeMarker* marke file.close(); } +void HtmlGenerator::generateExtractionMark(const Node *node, ExtractionMarkType markType) +{ + if (markType != EndMark) { + out() << "<!-- $$$" + node->name(); + if (markType == MemberMark) { + if (node->type() == Node::Function) { + const FunctionNode *func = static_cast<const FunctionNode *>(node); + if (!func->associatedProperty()) { + if (func->overloadNumber() == 1) + out() << "[overload1]"; + out() << "$$$" + func->name() + func->rawParameters().remove(' '); + } + } else if (node->type() == Node::Property) { + out() << "-prop"; + const PropertyNode *prop = static_cast<const PropertyNode *>(node); + const NodeList &list = prop->functions(); + foreach (const Node *propFuncNode, list) { + if (propFuncNode->type() == Node::Function) { + const FunctionNode *func = static_cast<const FunctionNode *>(propFuncNode); + out() << "$$$" + func->name() + func->rawParameters().remove(' '); + } + } + } else if (node->type() == Node::Enum) { + const EnumNode *enumNode = static_cast<const EnumNode *>(node); + foreach (const EnumItem &item, enumNode->items()) + out() << "$$$" + item.name(); + } + } else if (markType == BriefMark) { + out() << "-brief"; + } else if (markType == DetailedDescriptionMark) { + out() << "-description"; + } + out() << " -->\n"; + } else { + out() << "<!-- @@@" + node->name() + " -->\n"; + } +} + #endif QT_END_NAMESPACE diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index 54032d3..d92c349 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -123,6 +123,12 @@ class HtmlGenerator : public PageGenerator private: enum SubTitleSize { SmallSubTitle, LargeSubTitle }; + enum ExtractionMarkType { + BriefMark, + DetailedDescriptionMark, + MemberMark, + EndMark + }; const QPair<QString,QString> anchorForNode(const Node *node); const Node *findNodeForTarget(const QString &target, @@ -266,6 +272,7 @@ class HtmlGenerator : public PageGenerator CodeMarker* marker) const; void generatePageIndex(const QString& fileName, CodeMarker* marker) const; + void generateExtractionMark(const Node *node, ExtractionMarkType markType); #if 0 NavigationBar currentNavigationBar; @@ -287,6 +294,7 @@ class HtmlGenerator : public PageGenerator bool inTableHeader; int numTableRows; bool threeColumnEnumValueTable; + bool onlineDocs; bool offlineDocs; bool creatorDocs; QString link; @@ -295,6 +303,8 @@ class HtmlGenerator : public PageGenerator QString style; QString postHeader; QString postPostHeader; + QString creatorPostHeader; + QString creatorPostPostHeader; QString footer; QString address; bool pleaseGenerateMacRef; @@ -332,6 +342,8 @@ class HtmlGenerator : public PageGenerator #define HTMLGENERATOR_GENERATEMACREFS "generatemacrefs" // ### document me #define HTMLGENERATOR_POSTHEADER "postheader" #define HTMLGENERATOR_POSTPOSTHEADER "postpostheader" +#define HTMLGENERATOR_CREATORPOSTHEADER "postheader" +#define HTMLGENERATOR_CREATORPOSTPOSTHEADER "postpostheader" #define HTMLGENERATOR_STYLE "style" #define HTMLGENERATOR_STYLESHEETS "stylesheets" #define HTMLGENERATOR_CUSTOMHEADELEMENTS "customheadelements" diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp index 28347c3..259641e 100644 --- a/tools/qdoc3/node.cpp +++ b/tools/qdoc3/node.cpp @@ -1286,6 +1286,24 @@ QStringList FunctionNode::parameterNames() const } /*! + Returns a raw list of parameters. If \a names is true, the + names are included. If \a values is true, the default values + are included, if any are present. + */ +QString FunctionNode::rawParameters(bool names, bool values) const +{ + QString raw; + foreach (const Parameter ¶meter, parameters()) { + raw += parameter.leftType() + parameter.rightType(); + if (names) + raw += parameter.name(); + if (values) + raw += parameter.defaultValue(); + } + return raw; +} + +/*! Returns the list of reconstructed parameters. If \a values is true, the default values are included, if any are present. */ diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h index 3cc0f60..40b78ef 100644 --- a/tools/qdoc3/node.h +++ b/tools/qdoc3/node.h @@ -624,6 +624,7 @@ class FunctionNode : public LeafNode int numOverloads() const; const QList<Parameter>& parameters() const { return params; } QStringList parameterNames() const; + QString rawParameters(bool names = false, bool values = false) const; const FunctionNode* reimplementedFrom() const { return rf; } const QList<FunctionNode*> &reimplementedBy() const { return rb; } const PropertyNode* associatedProperty() const { return ap; } diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index 4b52992..efe3b3b 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -7,6 +7,9 @@ include(qt-defines.qdocconf) project = Qt Assistant description = Qt Assistant Manual url = http://qt.nokia.com/doc/4.7 +online = false +offline = false +creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index @@ -17,7 +20,10 @@ qhp.Assistant.namespace = com.trolltech.assistant.470 qhp.Assistant.virtualFolder = qdoc qhp.Assistant.indexTitle = Qt Assistant Manual qhp.Assistant.extraFiles = images/bg_l.png \ - images/bg_l_blank.png \ + images/bg_l_blank.png \ + images/bg_ll_blank.png \ + images/bg_ul_blank.png \ + images/header_bg.png \ images/bg_r.png \ images/box_bg.png \ images/breadcrumb.png \ @@ -25,24 +31,27 @@ qhp.Assistant.extraFiles = images/bg_l.png \ images/bullet_dn.png \ images/bullet_sq.png \ images/bullet_up.png \ + images/arrow_down.png \ images/feedbackground.png \ images/horBar.png \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ - images/arrow-down.png \ images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ images/coloreditorfactoryimage.png \ images/dynamiclayouts-example.png \ - scripts/functions.js \ - scripts/jquery.js \ - style/OfflineStyle.css \ - style/style_ie6.css \ - style/style_ie7.css \ - style/style_ie8.css \ - style/style.css + scripts/functions.js \ + scripts/jquery.js \ + scripts/narrow.js \ + scripts/superfish.js \ + style/narrow.css \ + style/superfish.css \ + style/style_ie6.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style.css qhp.Assistant.filterAttributes = qt 4.7.0 tools assistant qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf index b1f37dc..0595417 100644 --- a/tools/qdoc3/test/designer.qdocconf +++ b/tools/qdoc3/test/designer.qdocconf @@ -7,6 +7,9 @@ include(qt-defines.qdocconf) project = Qt Designer description = Qt Designer Manual url = http://qt.nokia.com/doc/4.7 +online = false +offline = false +creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf index 26fb55c..7dd57fb 100644 --- a/tools/qdoc3/test/linguist.qdocconf +++ b/tools/qdoc3/test/linguist.qdocconf @@ -7,6 +7,9 @@ include(qt-defines.qdocconf) project = Qt Linguist description = Qt Linguist Manual url = http://qt.nokia.com/doc/4.7 +online = false +offline = false +creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf index 0433c9f..0cff98e 100644 --- a/tools/qdoc3/test/qdeclarative.qdocconf +++ b/tools/qdoc3/test/qdeclarative.qdocconf @@ -8,6 +8,9 @@ project = Qml description = Qml Reference Documentation url = http://qt.nokia.com/doc/4.7/ qmlonly = true +online = false +offline = false +creator = true edition.Console.modules = QtCore QtDBus QtNetwork QtScript QtSql QtXml \ QtXmlPatterns QtTest @@ -55,9 +58,9 @@ qhp.Qml.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Qml.filterAttributes = qt 4.6.0 qtrefdoc -qhp.Qml.customFilters.Qt.name = Qt 4.6.0 -qhp.Qml.customFilters.Qt.filterAttributes = qt 4.6.0 +qhp.Qml.filterAttributes = qt 4.7.0 qtrefdoc +qhp.Qml.customFilters.Qt.name = Qt 4.7.0 +qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.0 qhp.Qml.subprojects = classes qhp.Qml.subprojects.classes.title = Elements qhp.Qml.subprojects.classes.indexTitle = Qml Elements diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf index f069129..c666288 100644 --- a/tools/qdoc3/test/qmake.qdocconf +++ b/tools/qdoc3/test/qmake.qdocconf @@ -7,6 +7,9 @@ include(qt-defines.qdocconf) project = QMake description = QMake Manual url = http://qt.nokia.com/doc/4.7 +online = false +offline = false +creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index diff --git a/tools/qdoc3/test/qt-api-only.qdocconf b/tools/qdoc3/test/qt-api-only.qdocconf index 10b7be5..1ec0c6b 100644 --- a/tools/qdoc3/test/qt-api-only.qdocconf +++ b/tools/qdoc3/test/qt-api-only.qdocconf @@ -5,6 +5,9 @@ include(qt-build-docs.qdocconf) # qmake.qdocconf). url = ./ +online = false +offline = false +creator = true # Ensures that the documentation for the tools is not included in the generated # .qhp file. @@ -25,6 +28,13 @@ qhp.Qt.excluded += $QT_SOURCE_TREE/doc/src/development/assistant-manual.qdoc \ $QT_SOURCE_TREE/doc/src/examples/trollprint.qdoc \ $QT_SOURCE_TREE/doc/src/development/qmake-manual.qdoc +# Remove the QML documentation from the Qt-only documentation. + +excludedirs += $QT_SOURCE_TREE/src/declarative \ + $QT_SOURCE_TREE/src/imports \ + $QT_SOURCE_TREE/src/3rdparty/webkit/WebKit/qt/declarative \ + $QT_SOURCE_TREE/doc/src/declarative + outputdir = $QT_BUILD_TREE/doc-build/html-qt tagfile = $QT_BUILD_TREE/doc-build/html-qt/qt.tags base = file:$QT_BUILD_TREE/doc-build/html-qt diff --git a/tools/qdoc3/test/qt-api-only_ja_JP.qdocconf b/tools/qdoc3/test/qt-api-only_ja_JP.qdocconf index aa3ab01..70e0235 100644 --- a/tools/qdoc3/test/qt-api-only_ja_JP.qdocconf +++ b/tools/qdoc3/test/qt-api-only_ja_JP.qdocconf @@ -25,6 +25,13 @@ qhp.Qt.excluded += $QT_SOURCE_TREE/doc/src/development/assistant-manual.qdoc \ $QT_SOURCE_TREE/doc/src/examples/trollprint.qdoc \ $QT_SOURCE_TREE/doc/src/development/qmake-manual.qdoc +# Remove the QML documentation from the Qt-only documentation. + +excludedirs += $QT_SOURCE_TREE/src/declarative \ + $QT_SOURCE_TREE/src/imports \ + $QT_SOURCE_TREE/src/3rdparty/webkit/WebKit/qt/declarative \ + $QT_SOURCE_TREE/doc/src/declarative + outputdir = $QT_BUILD_TREE/doc-build/html-qt_ja_JP tagfile = $QT_BUILD_TREE/doc-build/html-qt_ja_JP/qt.tags base = file:$QT_BUILD_TREE/doc-build/html-qt_ja_JP diff --git a/tools/qdoc3/test/qt-api-only_zh_CN.qdocconf b/tools/qdoc3/test/qt-api-only_zh_CN.qdocconf index c722ee8..d6bf410 100644 --- a/tools/qdoc3/test/qt-api-only_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-api-only_zh_CN.qdocconf @@ -25,6 +25,13 @@ qhp.Qt.excluded += $QT_SOURCE_TREE/doc/src/development/assistant-manual.qdoc \ $QT_SOURCE_TREE/doc/src/examples/trollprint.qdoc \ $QT_SOURCE_TREE/doc/src/development/qmake-manual.qdoc +# Remove the QML documentation from the Qt-only documentation. + +excludedirs += $QT_SOURCE_TREE/src/declarative \ + $QT_SOURCE_TREE/src/imports \ + $QT_SOURCE_TREE/src/3rdparty/webkit/WebKit/qt/declarative \ + $QT_SOURCE_TREE/doc/src/declarative + outputdir = $QT_BUILD_TREE/doc-build/html-qt_zh_CN tagfile = $QT_BUILD_TREE/doc-build/html-qt_zh_CN/qt.tags base = file:$QT_BUILD_TREE/doc-build/html-qt_zh_CN diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf index 140b81f..f663016 100644 --- a/tools/qdoc3/test/qt-build-docs.qdocconf +++ b/tools/qdoc3/test/qt-build-docs.qdocconf @@ -7,6 +7,9 @@ include(qt-defines.qdocconf) project = Qt description = Qt Reference Documentation url = http://qt.nokia.com/doc/4.7 +online = false +offline = false +creator = true sourceencoding = UTF-8 outputencoding = UTF-8 @@ -24,6 +27,9 @@ qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.extraFiles = index.html \ images/bg_l.png \ images/bg_l_blank.png \ + images/bg_ll_blank.png \ + images/bg_ul_blank.png \ + images/header_bg.png \ images/bg_r.png \ images/box_bg.png \ images/breadcrumb.png \ @@ -31,12 +37,12 @@ qhp.Qt.extraFiles = index.html \ images/bullet_dn.png \ images/bullet_sq.png \ images/bullet_up.png \ + images/arrow_down.png \ images/feedbackground.png \ images/horBar.png \ images/page.png \ images/page_bg.png \ images/sprites-combined.png \ - images/arrow-down.png \ images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ @@ -44,17 +50,10 @@ qhp.Qt.extraFiles = index.html \ images/dynamiclayouts-example.png \ scripts/functions.js \ scripts/jquery.js \ - scripts/shBrushCpp.js \ - scripts/shCore.js \ - scripts/shLegacy.js \ scripts/narrow.js \ scripts/superfish.js \ - style/shCore.css \ - style/shThemeDefault.css \ style/narrow.css \ style/superfish.css \ - style/superfish_skin.css \ - style/OfflineStyle.css \ style/style_ie6.css \ style/style_ie7.css \ style/style_ie8.css \ diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf index 19c768c..e439708 100644 --- a/tools/qdoc3/test/qt-html-templates.qdocconf +++ b/tools/qdoc3/test/qt-html-templates.qdocconf @@ -3,6 +3,9 @@ HTML.stylesheets = style/style.css \ style/style_ie7.css \ style/style_ie8.css \ style/style_ie6.css + +HTML.creatorpostheader = "**\n" +HTML.creatorpostpostheader = "***\n" HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " <div class=\"content\"> \n" \ @@ -17,7 +20,7 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " <div id=\"nav-topright\">\n" \ " <ul>\n" \ " <li class=\"nav-topright-home\"><a href=\"http://qt.nokia.com/\">Qt HOME</a></li>\n" \ - " <li class=\"nav-topright-dev\"><a href=\"http://qt.nokia.com/developer\">DEV</a></li>\n" \ + " <li class=\"nav-topright-dev\"><a href=\"http://developer.qt.nokia.com/\">DEV</a></li>\n" \ " <li class=\"nav-topright-labs\"><a href=\"http://labs.qt.nokia.com/blogs/\">LABS</a></li>\n" \ " <li class=\"nav-topright-doc nav-topright-doc-active\"><a href=\"http://doc.qt.nokia.com/\">\n" \ " DOC</a></li>\n" \ @@ -112,7 +115,6 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " <li class=\"defaultLink\"><a href=\"tutorials.html\">Tutorials</a></li>\n" \ " <li class=\"defaultLink\"><a href=\"demos.html\">Demos</a></li>\n" \ " <li class=\"defaultLink\"><a href=\"qdeclarativeexamples.html\">QML Examples</a></li>\n" \ - " <li class=\"defaultLink\"><a href=\"qdeclarativeexamples.html#Demos\">QML Demos</a></li>\n" \ " </ul> \n" \ " </div>\n" \ " </div>\n" \ @@ -159,8 +161,8 @@ HTML.footer = " <!-- /div -->\n" \ " <div id=\"feedbackBox\">\n" \ " <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \ " <form id=\"feedform\" action=\"http://doc.qt.nokia.com/docFeedbck/feedback.php\" method=\"get\">\n" \ - " <p id=\"noteHead\">Thank you for giving your feedback. <div class=\"note\">Make sure it is related the page. For more general bugs and \n" \ - " requests, please use the <a href=\"http://bugreports.qt.nokia.com/secure/Dashboard.jspa\">Qt Bug Tracker</a></div></p>\n" \ + " <p id=\"noteHead\">Thank you for giving your feedback. <div class=\"note\">Make sure it is related to this specific page. For more general bugs and \n" \ + " requests, please use the <a href=\"http://bugreports.qt.nokia.com/secure/Dashboard.jspa\">Qt Bug Tracker</a>.</div></p>\n" \ " <p><textarea id=\"feedbox\" name=\"feedText\" rows=\"5\" cols=\"40\"></textarea></p>\n" \ " <p><input id=\"feedsubmit\" class=\"feedclose\" type=\"submit\" name=\"feedback\" /></p>\n" \ " </form>\n" \ diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf index d132771..08492e3 100644 --- a/tools/qdoc3/test/qt.qdocconf +++ b/tools/qdoc3/test/qt.qdocconf @@ -9,7 +9,9 @@ versionsym = version = %VERSION% description = Qt Reference Documentation url = http://qt.nokia.com/doc/4.7 -online = true +online = false +offline = false +creator = true sourceencoding = UTF-8 outputencoding = UTF-8 @@ -26,46 +28,46 @@ qhp.Qt.indexRoot = # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML qhp.Qt.extraFiles = index.html \ - images/bg_l.png \ - images/bg_l_blank.png \ - images/bg_ll_blank.png \ - images/bg_ul_blank.png \ - images/header_bg.png \ + images/bg_l.png \ + images/bg_l_blank.png \ + images/bg_ll_blank.png \ + images/bg_ul_blank.png \ + images/header_bg.png \ images/bg_r.png \ - images/box_bg.png \ - images/breadcrumb.png \ - images/bullet_gt.png \ - images/bullet_dn.png \ - images/bullet_sq.png \ - images/bullet_up.png \ - images/arrow_down.png \ - images/feedbackground.png \ - images/horBar.png \ - images/page.png \ - images/page_bg.png \ - images/sprites-combined.png \ - images/spinner.gif \ - images/stylesheet-coffee-plastique.png \ - images/taskmenuextension-example.png \ - images/coloreditorfactoryimage.png \ - images/dynamiclayouts-example.png \ - scripts/functions.js \ - scripts/jquery.js \ - scripts/shBrushCpp.js \ - scripts/shCore.js \ - scripts/shLegacy.js \ - scripts/narrow.js \ - scripts/superfish.js \ - style/shCore.css \ - style/shThemeDefault.css \ - style/narrow.css \ - style/superfish.css \ - style/superfish_skin.css \ - style/OfflineStyle.css \ - style/style_ie6.css \ - style/style_ie7.css \ - style/style_ie8.css \ - style/style.css + images/box_bg.png \ + images/breadcrumb.png \ + images/bullet_gt.png \ + images/bullet_dn.png \ + images/bullet_sq.png \ + images/bullet_up.png \ + images/arrow_down.png \ + images/feedbackground.png \ + images/horBar.png \ + images/page.png \ + images/page_bg.png \ + images/sprites-combined.png \ + images/spinner.gif \ + images/stylesheet-coffee-plastique.png \ + images/taskmenuextension-example.png \ + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + scripts/functions.js \ + scripts/jquery.js \ + scripts/shBrushCpp.js \ + scripts/shCore.js \ + scripts/shLegacy.js \ + scripts/narrow.js \ + scripts/superfish.js \ + style/shCore.css \ + style/shThemeDefault.css \ + style/narrow.css \ + style/superfish.css \ + style/superfish_skin.css \ + style/OfflineStyle.css \ + style/style_ie6.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style.css qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc qhp.Qt.customFilters.Qt.name = Qt 4.7.0 @@ -146,7 +148,7 @@ exampledirs = $QTDIR/doc/src \ imagedirs = $QTDIR/doc/src/images \ $QTDIR/examples \ $QTDIR/doc/src/declarative/pics \ - $QTDIR/doc/src/template/images + $QTDIR/doc/src/template/images outputdir = $QTDIR/doc/html tagfile = $QTDIR/doc/html/qt.tags base = file:$QTDIR/doc/html -- cgit v0.12 From 51f2817739bca77f883c43e4e6fc086123bfcebd Mon Sep 17 00:00:00 2001 From: Benjamin Poulain <benjamin.poulain@nokia.com> Date: Thu, 29 Jul 2010 11:09:48 +0200 Subject: Fix the rendering of lines with the X11 paint engine On the X11 paint engine, when rendering lines with float coordinates, the lines were one pixel off if the decimal was > 0.5. This fixes the WebKit bug https://bugs.webkit.org/show_bug.cgi?id=42248 Autotest by Yoann Lopes. Reviewed-by: Simon Hausmann Reviewed-by: Yoann Lopes Reviewed-by: Andreas Kling (cherry picked from commit ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6) --- src/gui/painting/qpaintengine_x11.cpp | 22 ++++++------ tests/auto/qpainter/tst_qpainter.cpp | 65 +++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index 910b2df..e521e01 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -696,11 +696,10 @@ void QX11PaintEngine::drawLines(const QLine *lines, int lineCount) linef = d->matrix.map(QLineF(lines[i])); } if (clipLine(&linef, d->polygonClipper.boundingRect())) { - int x1 = qRound(linef.x1() + aliasedCoordinateDelta); - int y1 = qRound(linef.y1() + aliasedCoordinateDelta); - int x2 = qRound(linef.x2() + aliasedCoordinateDelta); - int y2 = qRound(linef.y2() + aliasedCoordinateDelta); - + int x1 = qFloor(linef.x1() + aliasedCoordinateDelta); + int y1 = qFloor(linef.y1() + aliasedCoordinateDelta); + int x2 = qFloor(linef.x2() + aliasedCoordinateDelta); + int y2 = qFloor(linef.y2() + aliasedCoordinateDelta); XDrawLine(d->dpy, d->hd, d->gc, x1, y1, x2, y2); } } @@ -730,11 +729,10 @@ void QX11PaintEngine::drawLines(const QLineF *lines, int lineCount) for (int i = 0; i < lineCount; ++i) { QLineF linef = d->matrix.map(lines[i]); if (clipLine(&linef, d->polygonClipper.boundingRect())) { - int x1 = qRound(linef.x1() + aliasedCoordinateDelta); - int y1 = qRound(linef.y1() + aliasedCoordinateDelta); - int x2 = qRound(linef.x2() + aliasedCoordinateDelta); - int y2 = qRound(linef.y2() + aliasedCoordinateDelta); - + int x1 = qFloor(linef.x1() + aliasedCoordinateDelta); + int y1 = qFloor(linef.y1() + aliasedCoordinateDelta); + int x2 = qFloor(linef.x2() + aliasedCoordinateDelta); + int y2 = qFloor(linef.y2() + aliasedCoordinateDelta); XDrawLine(d->dpy, d->hd, d->gc, x1, y1, x2, y2); } } @@ -1690,8 +1688,8 @@ void QX11PaintEnginePrivate::strokePolygon_dev(const QPointF *polygonPoints, int if (clippedCount > 0) { QVarLengthArray<XPoint> xpoints(clippedCount); for (int i = 0; i < clippedCount; ++i) { - xpoints[i].x = qRound(clippedPoints[i].x + aliasedCoordinateDelta); - xpoints[i].y = qRound(clippedPoints[i].y + aliasedCoordinateDelta); + xpoints[i].x = qFloor(clippedPoints[i].x + aliasedCoordinateDelta); + xpoints[i].y = qFloor(clippedPoints[i].y + aliasedCoordinateDelta); } uint numberPoints = qMin(clippedCount, xlibMaxLinePoints); XPoint *pts = xpoints.data(); diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp index 27ee6e7..9c8cdd4 100644 --- a/tests/auto/qpainter/tst_qpainter.cpp +++ b/tests/auto/qpainter/tst_qpainter.cpp @@ -118,10 +118,12 @@ private slots: void drawLine_task190634(); void drawLine_task229459(); void drawLine_task234891(); + void drawHorizontalLineF(); void drawRect_data() { fillData(); } void drawRect(); void drawRect2(); + void drawRectFHorizontalLine(); void fillRect(); void fillRect2(); @@ -251,6 +253,7 @@ private slots: void setPenColorOnPixmap(); void QTBUG5939_attachPainterPrivate(); + void drawHorizontalLine(); private: void fillData(); @@ -1218,6 +1221,26 @@ void tst_QPainter::drawLine_task234891() QCOMPARE(expected, img); } +void tst_QPainter::drawHorizontalLineF() +{ + QPixmap pixmap(100, 3); + pixmap.fill(); + + { + QPainter painter(&pixmap); + painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QImage refImage(100, 3, QImage::Format_ARGB32); + refImage.fill(0xFFFFFFFF); + { + QPainter painter(&refImage); + painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); +} + void tst_QPainter::drawLine_task216948() { QImage img(1, 10, QImage::Format_ARGB32_Premultiplied); @@ -1302,6 +1325,26 @@ void tst_QPainter::drawRect2() } } +void tst_QPainter::drawRectFHorizontalLine() +{ + QPixmap pixmap(100, 3); + pixmap.fill(); + + { + QPainter painter(&pixmap); + painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QImage refImage(100, 3, QImage::Format_ARGB32); + refImage.fill(0xFFFFFFFF); + { + QPainter painter(&refImage); + painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); + } + + QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); +} + void tst_QPainter::fillRect() { QImage image(100, 100, QImage::Format_ARGB32_Premultiplied); @@ -4506,6 +4549,28 @@ void tst_QPainter::QTBUG5939_attachPainterPrivate() QCOMPARE(widget->deviceTransform, proxy->deviceTransform); } +void tst_QPainter::drawHorizontalLine() +{ + QPixmap pixmap(100, 3); + pixmap.fill(); + + { + QPainter painter(&pixmap); + painter.translate(0.3, 0.3); + painter.drawLine(QLine(1, 1, 99, 1)); + } + + QImage refImage(100, 3, QImage::Format_ARGB32); + refImage.fill(0xFFFFFFFF); + { + QPainter painter(&refImage); + painter.translate(0.3, 0.3); + painter.drawLine(QLine(1, 1, 99, 1)); + } + + QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); +} + QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc" -- cgit v0.12 From 7ac9d60b2c09995c6e0224f143772153643d2fdf Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Mon, 2 Aug 2010 12:20:13 +0200 Subject: qdoc: Removed exclusion of declarative directories in qt-api-only.qdocconf (cherry picked from commit b588cfe80741ec500fc0a52586145e5849ca5968) --- tools/qdoc3/main.cpp | 4 ++- tools/qdoc3/test/assistant.qdocconf | 52 ++++++++++++++++----------------- tools/qdoc3/test/qdeclarative.qdocconf | 52 ++++++++++++++++----------------- tools/qdoc3/test/qt-api-only.qdocconf | 5 +--- tools/qdoc3/test/qt-build-docs.qdocconf | 1 + tools/qdoc3/test/qt.qdocconf | 4 +-- 6 files changed, 59 insertions(+), 59 deletions(-) diff --git a/tools/qdoc3/main.cpp b/tools/qdoc3/main.cpp index 616ae2f..ba3e387 100644 --- a/tools/qdoc3/main.cpp +++ b/tools/qdoc3/main.cpp @@ -475,8 +475,10 @@ int main(int argc, char **argv) /* Main loop. */ - foreach (QString qf, qdocFiles) + foreach (QString qf, qdocFiles) { + qDebug() << "PROCESSING:" << qf; processQdocconfFile(qf); + } qDeleteAll(trees); return EXIT_SUCCESS; diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index efe3b3b..119a676 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -19,39 +19,39 @@ qhp.Assistant.file = assistant.qhp qhp.Assistant.namespace = com.trolltech.assistant.470 qhp.Assistant.virtualFolder = qdoc qhp.Assistant.indexTitle = Qt Assistant Manual -qhp.Assistant.extraFiles = images/bg_l.png \ - images/bg_l_blank.png \ - images/bg_ll_blank.png \ - images/bg_ul_blank.png \ - images/header_bg.png \ +qhp.Assistant.extraFiles = images/bg_l.png \ + images/bg_l_blank.png \ + images/bg_ll_blank.png \ + images/bg_ul_blank.png \ + images/header_bg.png \ images/bg_r.png \ - images/box_bg.png \ - images/breadcrumb.png \ - images/bullet_gt.png \ + images/box_bg.png \ + images/breadcrumb.png \ + images/bullet_gt.png \ images/bullet_dn.png \ - images/bullet_sq.png \ + images/bullet_sq.png \ images/bullet_up.png \ - images/arrow_down.png \ + images/arrow_down.png \ images/feedbackground.png \ images/horBar.png \ - images/page.png \ - images/page_bg.png \ - images/sprites-combined.png \ - images/spinner.gif \ + images/page.png \ + images/page_bg.png \ + images/sprites-combined.png \ + images/spinner.gif \ images/stylesheet-coffee-plastique.png \ images/taskmenuextension-example.png \ - images/coloreditorfactoryimage.png \ - images/dynamiclayouts-example.png \ - scripts/functions.js \ - scripts/jquery.js \ - scripts/narrow.js \ - scripts/superfish.js \ - style/narrow.css \ - style/superfish.css \ - style/style_ie6.css \ - style/style_ie7.css \ - style/style_ie8.css \ - style/style.css + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + scripts/functions.js \ + scripts/jquery.js \ + scripts/narrow.js \ + scripts/superfish.js \ + style/narrow.css \ + style/superfish.css \ + style/style_ie6.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style.css qhp.Assistant.filterAttributes = qt 4.7.0 tools assistant qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf index 0cff98e..7628519 100644 --- a/tools/qdoc3/test/qdeclarative.qdocconf +++ b/tools/qdoc3/test/qdeclarative.qdocconf @@ -31,32 +31,32 @@ qhp.Qml.indexTitle = Qml Reference # Files not referenced in any qdoc file # See also extraimages.HTML qhp.Qml.extraFiles = images/bg_l.png \ - images/bg_l_blank.png \ - images/bg_r.png \ - images/box_bg.png \ - images/breadcrumb.png \ - images/bullet_gt.png \ - images/bullet_dn.png \ - images/bullet_sq.png \ - images/bullet_up.png \ - images/feedbackground.png \ - images/horBar.png \ - images/page.png \ - images/page_bg.png \ - images/sprites-combined.png \ - images/arrow-down.png \ - images/spinner.png \ - images/stylesheet-coffee-plastique.png \ - images/taskmenuextension-example.png \ - images/coloreditorfactoryimage.png \ - images/dynamiclayouts-example.png \ - scripts/functions.js \ - scripts/jquery.js \ - style/OfflineStyle.css \ - style/style_ie6.css \ - style/style_ie7.css \ - style/style_ie8.css \ - style/style.css + images/bg_l_blank.png \ + images/bg_r.png \ + images/box_bg.png \ + images/breadcrumb.png \ + images/bullet_gt.png \ + images/bullet_dn.png \ + images/bullet_sq.png \ + images/bullet_up.png \ + images/feedbackground.png \ + images/horBar.png \ + images/page.png \ + images/page_bg.png \ + images/sprites-combined.png \ + images/arrow-down.png \ + images/spinner.png \ + images/stylesheet-coffee-plastique.png \ + images/taskmenuextension-example.png \ + images/coloreditorfactoryimage.png \ + images/dynamiclayouts-example.png \ + scripts/functions.js \ + scripts/jquery.js \ + style/OfflineStyle.css \ + style/style_ie6.css \ + style/style_ie7.css \ + style/style_ie8.css \ + style/style.css qhp.Qml.filterAttributes = qt 4.7.0 qtrefdoc qhp.Qml.customFilters.Qt.name = Qt 4.7.0 diff --git a/tools/qdoc3/test/qt-api-only.qdocconf b/tools/qdoc3/test/qt-api-only.qdocconf index 1ec0c6b..7387810 100644 --- a/tools/qdoc3/test/qt-api-only.qdocconf +++ b/tools/qdoc3/test/qt-api-only.qdocconf @@ -30,10 +30,7 @@ qhp.Qt.excluded += $QT_SOURCE_TREE/doc/src/development/assistant-manual.qdoc \ # Remove the QML documentation from the Qt-only documentation. -excludedirs += $QT_SOURCE_TREE/src/declarative \ - $QT_SOURCE_TREE/src/imports \ - $QT_SOURCE_TREE/src/3rdparty/webkit/WebKit/qt/declarative \ - $QT_SOURCE_TREE/doc/src/declarative +excludedirs += $QT_SOURCE_TREE/src/imports outputdir = $QT_BUILD_TREE/doc-build/html-qt tagfile = $QT_BUILD_TREE/doc-build/html-qt/qt.tags diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf index f663016..415457e 100644 --- a/tools/qdoc3/test/qt-build-docs.qdocconf +++ b/tools/qdoc3/test/qt-build-docs.qdocconf @@ -21,6 +21,7 @@ qhp.Qt.file = qt.qhp qhp.Qt.namespace = com.trolltech.qt.470 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation +qhp.Qt.indexRoot = # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf index 08492e3..a5e6578 100644 --- a/tools/qdoc3/test/qt.qdocconf +++ b/tools/qdoc3/test/qt.qdocconf @@ -9,9 +9,9 @@ versionsym = version = %VERSION% description = Qt Reference Documentation url = http://qt.nokia.com/doc/4.7 -online = false +online = true offline = false -creator = true +creator = false sourceencoding = UTF-8 outputencoding = UTF-8 -- cgit v0.12 From fe3a7d41d9da94de40040be04efc83a88fd9ead7 Mon Sep 17 00:00:00 2001 From: Kevin Wright <kevin.wright@nokia.com> Date: Mon, 26 Jul 2010 18:44:10 +0200 Subject: Fixed the following sub-tasks for QTBUG-12192 * Qt Simulator link missing * Integration and add-ins (on the front page, link leads to an alternative start page) * Qt Creator (on the front page link leads to Manual version 1.3) * Getting Started (on the front page) link broken * More... (in Global Declarations) link broken Additionally: There was an issue with the documentation used within Assistant/Creator that appears to have no bug report filed. An alternate "offline" form of the documentation (inspired by the newly redesigned online version) was being installed, but had significant issues within Assistant and Creator. It appears that within qdoc3 some changes had been made towards using this newer documentation format, but those changes were not working properly. I fixed qdoc3 so that the original offline documentation design is the default, but there is room to use the configuration files to call the any of the three documentation designs (new online, new offline, and old offline). --- doc/src/index.qdoc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 7ac5ac2..58a7546 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -94,11 +94,12 @@ </div> <div class="section sectionlist"> <ul> - <li><a href="http://doc.qt.nokia.com/qtcreator-1.3/index.html">Qt Creator</a></li> + <li><a href="http://doc.qt.nokia.com/qtcreator-2.0/index.html">Qt Creator</a></li> <li><a href="designer-manual.html">Qt Designer</a></li> <li><a href="linguist-manual.html">Qt Linguist</a></li> <li><a href="assistant-manual.html">Qt Assistant</a></li> - <li><a href="http://doc.qt.nokia.com/">Integration and add-ins</a></li> + <li><a href="http://doc.qt.nokia.com/qtsimulator-1.0/simulator-description.html">Qt Simulator</a></li> + <li><a href="http://qt.nokia.com/developer/eclipse-integration">Integration</a> and <a href="http://qt.nokia.com/products/appdev">add-ins</a></li> <li><a href="qvfb.html">Virtual Framebuffer</a></li> </ul> </div> -- cgit v0.12 From 502757fbc4c323d32eeaa315b46c24e176d24efd Mon Sep 17 00:00:00 2001 From: Kevin Wright <kevin.wright@nokia.com> Date: Mon, 2 Aug 2010 18:04:35 +0200 Subject: Added notice that some links are online documents. (cherry picked from commit 41ae34d84a2d5024b5d42a25a2bf97b6a6dd8412) --- doc/src/index.qdoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 58a7546..f1820ef 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -94,12 +94,12 @@ </div> <div class="section sectionlist"> <ul> - <li><a href="http://doc.qt.nokia.com/qtcreator-2.0/index.html">Qt Creator</a></li> + <li><a href="http://doc.qt.nokia.com/qtcreator-2.0/index.html">Qt Creator</a> (online document)</li> <li><a href="designer-manual.html">Qt Designer</a></li> <li><a href="linguist-manual.html">Qt Linguist</a></li> <li><a href="assistant-manual.html">Qt Assistant</a></li> - <li><a href="http://doc.qt.nokia.com/qtsimulator-1.0/simulator-description.html">Qt Simulator</a></li> - <li><a href="http://qt.nokia.com/developer/eclipse-integration">Integration</a> and <a href="http://qt.nokia.com/products/appdev">add-ins</a></li> + <li><a href="http://doc.qt.nokia.com/qtsimulator-1.0/simulator-description.html">Qt Simulator</a> (online document)</li> + <li><a href="http://qt.nokia.com/developer/eclipse-integration">Integration</a> (online document) and <a href="http://qt.nokia.com/products/appdev">add-ins</a> (online document)</li> <li><a href="qvfb.html">Virtual Framebuffer</a></li> </ul> </div> -- cgit v0.12 From b6b9a1e83212bc2226951925087954d280a9d6b2 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Tue, 3 Aug 2010 16:19:12 +0200 Subject: Fixed the addressbook tutorial and some spelling mistakes. Fix for QTBUG-7071 and QTBUG-10173 (cherry picked from commit 14e17d5fe5f925a768aab9db9401e04bbaca224d) --- doc/src/development/debug.qdoc | 2 +- examples/tutorials/addressbook-fr/part2/addressbook.cpp | 2 +- examples/tutorials/addressbook-fr/part3/addressbook.cpp | 3 ++- examples/tutorials/addressbook-fr/part4/addressbook.cpp | 3 ++- examples/tutorials/addressbook-fr/part5/addressbook.cpp | 5 +++-- examples/tutorials/addressbook-fr/part6/addressbook.cpp | 3 ++- examples/tutorials/addressbook-fr/part7/addressbook.cpp | 3 ++- examples/tutorials/addressbook/part2/addressbook.cpp | 2 +- examples/tutorials/addressbook/part3/addressbook.cpp | 2 +- examples/tutorials/addressbook/part4/addressbook.cpp | 2 +- examples/tutorials/addressbook/part5/addressbook.cpp | 2 +- examples/tutorials/addressbook/part6/addressbook.cpp | 2 +- examples/tutorials/addressbook/part7/addressbook.cpp | 2 +- 13 files changed, 19 insertions(+), 14 deletions(-) diff --git a/doc/src/development/debug.qdoc b/doc/src/development/debug.qdoc index 36970ee..bfb2355 100644 --- a/doc/src/development/debug.qdoc +++ b/doc/src/development/debug.qdoc @@ -49,7 +49,7 @@ The basic stuff you need to know about debug libraries and frameworks is found at developer.apple.com in: \l{http://developer.apple.com/technotes/tn2004/tn2124.html#SECDEBUGLIB} - {Apple Technicle Note TN2124} Qt follows that. + {Apple Technical Note TN2124} Qt follows that. When you build Qt, frameworks are built by default, and inside the framework you will find both a release and a debug version (e.g., diff --git a/examples/tutorials/addressbook-fr/part2/addressbook.cpp b/examples/tutorials/addressbook-fr/part2/addressbook.cpp index 1fa9d52..8d5b0e1 100644 --- a/examples/tutorials/addressbook-fr/part2/addressbook.cpp +++ b/examples/tutorials/addressbook-fr/part2/addressbook.cpp @@ -111,7 +111,7 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if ( name.isEmpty()|| address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; diff --git a/examples/tutorials/addressbook-fr/part3/addressbook.cpp b/examples/tutorials/addressbook-fr/part3/addressbook.cpp index 840f529..2d182c5 100644 --- a/examples/tutorials/addressbook-fr/part3/addressbook.cpp +++ b/examples/tutorials/addressbook-fr/part3/addressbook.cpp @@ -122,9 +122,10 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (!contacts.contains(name)) { diff --git a/examples/tutorials/addressbook-fr/part4/addressbook.cpp b/examples/tutorials/addressbook-fr/part4/addressbook.cpp index f6390a4..d3bf030 100644 --- a/examples/tutorials/addressbook-fr/part4/addressbook.cpp +++ b/examples/tutorials/addressbook-fr/part4/addressbook.cpp @@ -131,9 +131,10 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } //! [submitContact() function part1] if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook-fr/part5/addressbook.cpp b/examples/tutorials/addressbook-fr/part5/addressbook.cpp index 80c18c3..d5f5778 100644 --- a/examples/tutorials/addressbook-fr/part5/addressbook.cpp +++ b/examples/tutorials/addressbook-fr/part5/addressbook.cpp @@ -138,10 +138,11 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); - } + return; + } if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook-fr/part6/addressbook.cpp b/examples/tutorials/addressbook-fr/part6/addressbook.cpp index fc41190..7c57db7 100644 --- a/examples/tutorials/addressbook-fr/part6/addressbook.cpp +++ b/examples/tutorials/addressbook-fr/part6/addressbook.cpp @@ -144,9 +144,10 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook-fr/part7/addressbook.cpp b/examples/tutorials/addressbook-fr/part7/addressbook.cpp index 3ab8702..b0f35a7 100644 --- a/examples/tutorials/addressbook-fr/part7/addressbook.cpp +++ b/examples/tutorials/addressbook-fr/part7/addressbook.cpp @@ -146,9 +146,10 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); + return; } if (currentMode == AddingMode) { diff --git a/examples/tutorials/addressbook/part2/addressbook.cpp b/examples/tutorials/addressbook/part2/addressbook.cpp index 1fa9d52..f2f0d65 100644 --- a/examples/tutorials/addressbook/part2/addressbook.cpp +++ b/examples/tutorials/addressbook/part2/addressbook.cpp @@ -111,7 +111,7 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; diff --git a/examples/tutorials/addressbook/part3/addressbook.cpp b/examples/tutorials/addressbook/part3/addressbook.cpp index 28a570a..4e58fa1 100644 --- a/examples/tutorials/addressbook/part3/addressbook.cpp +++ b/examples/tutorials/addressbook/part3/addressbook.cpp @@ -122,7 +122,7 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; diff --git a/examples/tutorials/addressbook/part4/addressbook.cpp b/examples/tutorials/addressbook/part4/addressbook.cpp index 55d551f..896a427 100644 --- a/examples/tutorials/addressbook/part4/addressbook.cpp +++ b/examples/tutorials/addressbook/part4/addressbook.cpp @@ -131,7 +131,7 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; diff --git a/examples/tutorials/addressbook/part5/addressbook.cpp b/examples/tutorials/addressbook/part5/addressbook.cpp index 1b3f451..874b151 100644 --- a/examples/tutorials/addressbook/part5/addressbook.cpp +++ b/examples/tutorials/addressbook/part5/addressbook.cpp @@ -138,7 +138,7 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; diff --git a/examples/tutorials/addressbook/part6/addressbook.cpp b/examples/tutorials/addressbook/part6/addressbook.cpp index 724971c..a6bb4a5 100644 --- a/examples/tutorials/addressbook/part6/addressbook.cpp +++ b/examples/tutorials/addressbook/part6/addressbook.cpp @@ -144,7 +144,7 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; diff --git a/examples/tutorials/addressbook/part7/addressbook.cpp b/examples/tutorials/addressbook/part7/addressbook.cpp index bf00298..fb70ba4 100644 --- a/examples/tutorials/addressbook/part7/addressbook.cpp +++ b/examples/tutorials/addressbook/part7/addressbook.cpp @@ -146,7 +146,7 @@ void AddressBook::submitContact() QString name = nameLine->text(); QString address = addressText->toPlainText(); - if (name == "" || address == "") { + if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; -- cgit v0.12 From 1bc84c1c8ff6e252a8afe1dec0c9ae0fda5993a5 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Tue, 3 Aug 2010 16:28:35 +0200 Subject: Removed the unfinished sentence. Fix for QTBUG-10173. (cherry picked from commit 79c6710c7785d915f64bd31e28ce48eed8493a41) --- doc/src/development/debug.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/development/debug.qdoc b/doc/src/development/debug.qdoc index bfb2355..9e881d1 100644 --- a/doc/src/development/debug.qdoc +++ b/doc/src/development/debug.qdoc @@ -49,7 +49,7 @@ The basic stuff you need to know about debug libraries and frameworks is found at developer.apple.com in: \l{http://developer.apple.com/technotes/tn2004/tn2124.html#SECDEBUGLIB} - {Apple Technical Note TN2124} Qt follows that. + {Apple Technical Note TN2124}. When you build Qt, frameworks are built by default, and inside the framework you will find both a release and a debug version (e.g., -- cgit v0.12 From fb8beb538b2f488eac50eddf605c3f2a0d21b0b1 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell <ext-gareth.stockwell@nokia.com> Date: Fri, 23 Jul 2010 15:16:32 +0100 Subject: Ensure backing store is deleted before top-level window If this is not done, later deletion of the backing store may cause a crash. If the backing store is an EGL surface, its destruction includes a call to eglDestroySurface(), which triggers an exception if the window handle passed as a parameter is no longer valid. Task-number: QTBUG-10643 Task-number: QTBUG-11376 Reviewed-by: Jason Barron (cherry picked from commit cc3c416682791e1a2fd61d9a473ba3b4715c502d) --- src/gui/kernel/qapplication_s60.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 8d37c5c..424f1f1 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -382,6 +382,10 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop) QSymbianControl::~QSymbianControl() { + // Ensure backing store is deleted before the top-level + // window is destroyed + qt_widget_private(qwidget)->topData()->backingStore.destroy(); + if (S60->curWin == this) S60->curWin = 0; if (!QApplicationPrivate::is_app_closing) { -- cgit v0.12 From 1c850efd7f877b5091d36ddfe98d8c2cb787f606 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell <ext-gareth.stockwell@nokia.com> Date: Mon, 26 Jul 2010 11:53:28 +0100 Subject: Removed QEXPECT_FAIL macros from test cases which now pass Task-number: QTBUG-10643 Task-number: QTBUG-11376 Reviewed-by: Jason Barron (cherry picked from commit 3695cb25e4a53921880cfea4d4c731df44fa4396) --- tests/auto/qwidget/tst_qwidget.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 2d559c8..fee7ef0 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -9691,7 +9691,6 @@ void tst_QWidget::destroyBackingStoreWhenHidden() // Native child widget should once again share parent's backing store QVERIFY(0 != backingStore(parent)); - QEXPECT_FAIL("", "QTBUG-10643", Continue); QVERIFY(0 == backingStore(child)); } @@ -9740,7 +9739,7 @@ void tst_QWidget::destroyBackingStoreWhenHidden() QVERIFY(0 != backingStore(child)); // Parent is obscured, therefore its backing store should be destroyed - QEXPECT_FAIL("", "QTBUG-10643", Continue); + QEXPECT_FAIL("", "QTBUG-12406", Continue); QVERIFY(0 == backingStore(parent)); // Disable full screen @@ -9754,7 +9753,6 @@ void tst_QWidget::destroyBackingStoreWhenHidden() // Native child widget should once again share parent's backing store QVERIFY(0 != backingStore(parent)); - QEXPECT_FAIL("", "QTBUG-10643", Continue); QVERIFY(0 == backingStore(child)); } } -- cgit v0.12 From 3d7da23433e81db1f8c80a53fdae73b2f647ea3e Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen <richard.gustavsen@nokia.com> Date: Tue, 3 Aug 2010 10:35:35 +0200 Subject: Cocoa: Active QDockWidget does not stay on top of inactive QDockWidget If a window has several child windows, it was not be possible to click on a child window to make it stack in front of the other children. The reason is that cocoa held a fixed stacking order of the child windows (sub-windows). This patch will release, and then reestablish, the stacking order of the children upon acitvation. Task-number: QTBUG-11780 Reviewed-by: prasanth (cherry picked from commit 44e11692549f1d6a4fed01066a06085dacfaa444) --- src/gui/kernel/qapplication.cpp | 7 +++++++ src/gui/kernel/qt_cocoa_helpers_mac.mm | 16 ++++++++++++++++ src/gui/kernel/qt_cocoa_helpers_mac_p.h | 1 + 3 files changed, 24 insertions(+) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 5f256d5..e0cce15 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -2537,6 +2537,13 @@ void QApplication::setActiveWindow(QWidget* act) sendSpontaneousEvent(w, &activationChange); } +#ifdef QT_MAC_USE_COCOA + // In case the user clicked on a child window, we need to + // reestablish the stacking order of the window so + // it pops in front of other child windows in cocoa: + qt_cocoaStackChildWindowOnTopOfOtherChildren(window); +#endif + for(int i = 0; i < toBeDeactivated.size(); ++i) { QWidget *w = toBeDeactivated.at(i); sendSpontaneousEvent(w, &windowDeactivate); diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 3fc27f4..647cb86 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -1527,6 +1527,22 @@ void macSyncDrawingOnFirstInvocation(void * /*OSWindowRef */window) [theWindow display]; } } + +void qt_cocoaStackChildWindowOnTopOfOtherChildren(QWidget *childWidget) +{ + if (!childWidget) + return; + + QWidget *parent = childWidget->parentWidget(); + if (childWidget->isWindow() && parent) { + if ([[qt_mac_window_for(parent) childWindows] containsObject:qt_mac_window_for(childWidget)]) { + QWidgetPrivate *d = qt_widget_private(childWidget); + d->setSubWindowStacking(false); + d->setSubWindowStacking(true); + } + } +} + #endif // QT_MAC_USE_COCOA QT_END_NAMESPACE diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h index 44fb4f0..c6c2db2 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h +++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h @@ -148,6 +148,7 @@ void qt_cocoaChangeOverrideCursor(const QCursor &cursor); // These methods exists only for supporting unified mode. void macDrawRectOnTop(void * /*OSWindowRef */ window); void macSyncDrawingOnFirstInvocation(void * /*OSWindowRef */window); +void qt_cocoaStackChildWindowOnTopOfOtherChildren(QWidget *widget); #endif void qt_mac_menu_collapseSeparators(void * /*NSMenu */ menu, bool collapse); bool qt_dispatchKeyEvent(void * /*NSEvent * */ keyEvent, QWidget *widgetToGetEvent); -- cgit v0.12 From 78401dc1b073ef19244bef09a1bef81b0d06c64e Mon Sep 17 00:00:00 2001 From: Shane Kearns <shane.kearns@accenture.com> Date: Fri, 9 Jul 2010 12:16:35 +0200 Subject: Fix USB serial port detection of the Nokia N95 on linux The interface numbers in /dev/serial/by-id are hex rather than decimal. Also added code to read the manufacturer name and product name from string descriptors in order to get a better match. Unfortunately, root privilege is needed or the API returns an error. In this case, we still use the weak matching on interface number only. Task-Number: QTBUG-11794 Reviewed-By: Thomas Zander (cherry picked from commit 767aa8d648bf81a3303da66a4fef98657ea5ece3) --- tools/runonphone/main.cpp | 2 +- tools/runonphone/serenum.h | 2 +- tools/runonphone/serenum_unix.cpp | 62 +++++++++++++++++++++++++++++++++++---- tools/runonphone/serenum_win.cpp | 2 +- 4 files changed, 59 insertions(+), 9 deletions(-) diff --git a/tools/runonphone/main.cpp b/tools/runonphone/main.cpp index 885d029..4410e68 100644 --- a/tools/runonphone/main.cpp +++ b/tools/runonphone/main.cpp @@ -145,7 +145,7 @@ int main(int argc, char *argv[]) if (serialPortName.isEmpty()) { if (loglevel > 0) outstream << "Detecting serial ports" << endl; - foreach (const SerialPortId &id, enumerateSerialPorts()) { + foreach (const SerialPortId &id, enumerateSerialPorts(loglevel)) { if (loglevel > 0) outstream << "Port Name: " << id.portName << ", " << "Friendly Name:" << id.friendlyName << endl; diff --git a/tools/runonphone/serenum.h b/tools/runonphone/serenum.h index b794b97..a65c8cb 100644 --- a/tools/runonphone/serenum.h +++ b/tools/runonphone/serenum.h @@ -51,6 +51,6 @@ struct SerialPortId QString friendlyName; }; -QList<SerialPortId> enumerateSerialPorts(); +QList<SerialPortId> enumerateSerialPorts(int loglevel); #endif // WIN32SERENUM_H diff --git a/tools/runonphone/serenum_unix.cpp b/tools/runonphone/serenum_unix.cpp index b6f0293..4c90d7a 100644 --- a/tools/runonphone/serenum_unix.cpp +++ b/tools/runonphone/serenum_unix.cpp @@ -48,7 +48,7 @@ #include <usb.h> -QList<SerialPortId> enumerateSerialPorts() +QList<SerialPortId> enumerateSerialPorts(int loglevel) { QList<QString> eligableInterfaces; QList<SerialPortId> list; @@ -85,6 +85,41 @@ QList<SerialPortId> enumerateSerialPorts() } } } + + if (usableInterfaces.isEmpty()) + continue; + + QString manufacturerString; + QString productString; + + usb_dev_handle *devh = usb_open(device); + if (devh) { + QByteArray buf; + buf.resize(256); + int err = usb_get_string_simple(devh, device->descriptor.iManufacturer, buf.data(), buf.size()); + if (err < 0) { + if (loglevel > 1) + qDebug() << " can't read manufacturer name, error:" << err; + } else { + manufacturerString = QString::fromAscii(buf); + if (loglevel > 1) + qDebug() << " manufacturer:" << manufacturerString; + } + + buf.resize(256); + err = usb_get_string_simple(devh, device->descriptor.iProduct, buf.data(), buf.size()); + if (err < 0) { + if (loglevel > 1) + qDebug() << " can't read product name, error:" << err; + } else { + productString = QString::fromAscii(buf); + if (loglevel > 1) + qDebug() << " product:" << productString; + } + usb_close(devh); + } else if (loglevel > 0) { + qDebug() << " can't open usb device"; + } // second loop to find the actual data interface. foreach (int i, usableInterfaces) { @@ -94,11 +129,21 @@ QList<SerialPortId> enumerateSerialPorts() if (descriptor.bInterfaceNumber != i) continue; if (descriptor.bInterfaceClass == 10) { // "CDC Data" - // qDebug() << " found the data port" - // << "bus:" << bus->dirname - // << "device" << device->filename - // << "interface" << descriptor.bInterfaceNumber; - eligableInterfaces << QString("if%1").arg(QString::number(i), 2, QChar('0')); // fix! + if (loglevel > 1) { + qDebug() << " found the data port" + << "bus:" << bus->dirname + << "device" << device->filename + << "interface" << descriptor.bInterfaceNumber; + } + // ### manufacturer and product strings are only readable as root :( + if (!manufacturerString.isEmpty() && !productString.isEmpty()) { + eligableInterfaces << QString("usb-%1_%2-if%3") + .arg(manufacturerString.replace(QChar(' '), QChar('_'))) + .arg(productString.replace(QChar(' '), QChar('_'))) + .arg(i, 2, 16, QChar('0')); + } else { + eligableInterfaces << QString("if%1").arg(i, 2, 16, QChar('0')); // fix! + } } } } @@ -106,6 +151,9 @@ QList<SerialPortId> enumerateSerialPorts() } } } + + if (loglevel > 1) + qDebug() << " searching for interfaces:" << eligableInterfaces; QDir dir("/dev/serial/by-id/"); foreach (const QFileInfo &info, dir.entryInfoList()) { @@ -113,6 +161,8 @@ QList<SerialPortId> enumerateSerialPorts() bool usable = eligableInterfaces.isEmpty(); foreach (const QString &iface, eligableInterfaces) { if (info.fileName().contains(iface)) { + if (loglevel > 1) + qDebug() << " found device file:" << info.fileName() << endl; usable = true; break; } diff --git a/tools/runonphone/serenum_win.cpp b/tools/runonphone/serenum_win.cpp index 572161c..070cac2 100644 --- a/tools/runonphone/serenum_win.cpp +++ b/tools/runonphone/serenum_win.cpp @@ -53,7 +53,7 @@ //{4d36e978-e325-11ce-bfc1-08002be10318} //DEFINE_GUID(GUID_DEVCLASS_PORTS, 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 ); -QList<SerialPortId> enumerateSerialPorts() +QList<SerialPortId> enumerateSerialPorts(int) { DWORD index=0; SP_DEVINFO_DATA info; -- cgit v0.12 From b2735d19d2d2873f52f1db9469ea6105e23e67e9 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Wed, 28 Jul 2010 18:45:23 +1000 Subject: Make it possible to manually set the orientation of QML Viewer on Symbian Task-number: QTBUG-12142 Reviewed-by: Warwick Allison This patch brings ability to switch QML Viewer's orientation between auto-orientation (=follow sensor), portrait and landscape orientations (lock orientation) on Symbian. It provides same orientation options as Qt Creator 2.1's Qt QML Standalone Application creation wizard. Also, menu item rotateOrientation now works on Symbian, but it's hidden when orientation mode is set to auto-orientation. Property runtime.orientation has been switched back to supporting four-way orientation on Symbian, previously it only updated values between portrait and landscape. If your application only supports landscape or portrait modes, just don't react to the inverted orientations. Added orientation example screenorientation under examples/declarative. The patch includes a fix for calculator example, which rotated to wrong direction when switching from portrait to landscape. Also, improved qdeclarativeviewer unit tests. Changes have been tested to work on Windows, Linux and Symbian^3. (cherry picked from commit e62f266a7642e675e9d235a1f54a6b5746500d48) --- demos/declarative/calculator/Core/calculator.js | 4 +- demos/declarative/calculator/calculator.qml | 14 +- doc/src/declarative/examples.qdoc | 5 + doc/src/declarative/qmlviewer.qdoc | 8 +- doc/src/examples/qml-examples.qdoc | 8 + .../declarative/screenorientation/Core/Bubble.qml | 91 ++++++++++ .../declarative/screenorientation/Core/Button.qml | 72 ++++++++ .../screenorientation/Core/screenorientation.js | 95 ++++++++++ .../screenorientation/screenorientation.qml | 202 +++++++++++++++++++++ .../screenorientation/screenorientation.qmlproject | 16 ++ .../qdeclarativeviewer/tst_qdeclarativeviewer.cpp | 36 +++- tools/qml/deviceorientation_symbian.cpp | 15 +- tools/qml/qml.pro | 3 + tools/qml/qmlruntime.cpp | 74 ++++++-- tools/qml/qmlruntime.h | 3 +- 15 files changed, 611 insertions(+), 35 deletions(-) create mode 100644 examples/declarative/screenorientation/Core/Bubble.qml create mode 100644 examples/declarative/screenorientation/Core/Button.qml create mode 100644 examples/declarative/screenorientation/Core/screenorientation.js create mode 100644 examples/declarative/screenorientation/screenorientation.qml create mode 100644 examples/declarative/screenorientation/screenorientation.qmlproject diff --git a/demos/declarative/calculator/Core/calculator.js b/demos/declarative/calculator/Core/calculator.js index c80c42f..16cc309 100644 --- a/demos/declarative/calculator/Core/calculator.js +++ b/demos/declarative/calculator/Core/calculator.js @@ -83,9 +83,9 @@ function doOperation(op) { display.text ="0" } - if (op == rotateLeft) - main.state = "orientation " + Orientation.Landscape if (op == rotateRight) + main.state = "orientation " + Orientation.Landscape + if (op == rotateLeft) main.state = '' } diff --git a/demos/declarative/calculator/calculator.qml b/demos/declarative/calculator/calculator.qml index 63b6c55..288455b 100644 --- a/demos/declarative/calculator/calculator.qml +++ b/demos/declarative/calculator/calculator.qml @@ -85,7 +85,7 @@ Rectangle { Button { id: rotateButton - width: column.w; height: column.h; color: 'purple'; operation: rotateLeft + width: column.w; height: column.h; color: 'purple'; operation: rotateRight } Button { width: column.w; height: column.h; color: 'purple'; operation: leftArrow } Button { width: column.w; height: column.h; color: 'purple'; operation: "C" } @@ -134,18 +134,18 @@ Rectangle { states: [ State { name: "orientation " + Orientation.Landscape - PropertyChanges { target: main; rotation: -90; width: window.height; height: window.width } - PropertyChanges { target: rotateButton; operation: rotateRight } + PropertyChanges { target: main; rotation: 90; width: window.height; height: window.width } + PropertyChanges { target: rotateButton; operation: rotateLeft } }, State { name: "orientation " + Orientation.PortraitInverted - PropertyChanges { target: main; rotation: -180; } - PropertyChanges { target: rotateButton; operation: rotateLeft } + PropertyChanges { target: main; rotation: 180; } + PropertyChanges { target: rotateButton; operation: rotateRight } }, State { name: "orientation " + Orientation.LandscapeInverted - PropertyChanges { target: main; rotation: -270; width: window.height; height: window.width } - PropertyChanges { target: rotateButton; operation: rotateRight } + PropertyChanges { target: main; rotation: 270; width: window.height; height: window.width } + PropertyChanges { target: rotateButton; operation: rotateLeft } } ] diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc index 39da323..9929cfe 100644 --- a/doc/src/declarative/examples.qdoc +++ b/doc/src/declarative/examples.qdoc @@ -203,6 +203,11 @@ The examples can be found in Qt's \c examples/declarative directory. \o \l{declarative/threading/workerscript}{WorkerScript} \endlist +\section2 Screen orientation +\list +\o \l{declarative/screenorientation}{Example} +\endlist + \section2 SQL Local Storage \list \o \l{declarative/sqllocalstorage}{Example} diff --git a/doc/src/declarative/qmlviewer.qdoc b/doc/src/declarative/qmlviewer.qdoc index 5efc0ce..41c4c80 100644 --- a/doc/src/declarative/qmlviewer.qdoc +++ b/doc/src/declarative/qmlviewer.qdoc @@ -197,10 +197,10 @@ Rectangle { \o \c runtime.orientation \o This property indicates the current orientation of the QML Viewer. On the -N900 platform, this property automatically updates to reflect the device's -actual orientation; on other platforms, this indicates the orientation currently -selected in the QML Viewer's \e {Settings -> Properties} menu. The -\c orientation value can be one of the following: +N900 platform and most S60 5.0-based or newer Symbian devices, this property +automatically updates to reflect the device's actual orientation; on other platforms, +this indicates the orientation currently selected in the QML Viewer's +\e {Settings -> Properties} menu. The \c orientation value can be one of the following: \list \o \c Orientation.Portrait diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index 505a560..68b66e1 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -409,6 +409,14 @@ \endtable */ + +/*! + \title Screen orientation + \example declarative/screenorientation + + This example shows how to implement screen orientation support for your application. +*/ + /*! \title SQL Local Storage Example \example declarative/sqllocalstorage diff --git a/examples/declarative/screenorientation/Core/Bubble.qml b/examples/declarative/screenorientation/Core/Bubble.qml new file mode 100644 index 0000000..2474f30 --- /dev/null +++ b/examples/declarative/screenorientation/Core/Bubble.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 + +Rectangle { + property bool rising: false + property bool verticalRise: true + property real xAttractor: 0 + property real yAttractor: 0 + + width: 5 + 10*Math.random() + height: width + radius: Math.floor(width/2)-1 + property real amountOfGray: Math.random() + color: Qt.rgba(amountOfGray,amountOfGray,amountOfGray,1) + + y: (rising && verticalRise) ? yAttractor : Math.random()*(main.inPortrait ? main.baseHeight : main.baseWidth) + x: (rising && !verticalRise) ? xAttractor : Math.random()*(main.inPortrait ? main.baseWidth : main.baseHeight) + Behavior on x { + id: xBehavior + SmoothedAnimation { + velocity: 100+Math.random()*100 + } + } + Behavior on y { + id: yBehavior + SmoothedAnimation { + velocity: 100+Math.random()*100 + } + } + Timer { + interval: 80+Math.random()*40 + repeat: true + running: true + onTriggered: { + if (rising) { + if (x > main.width || x < 0) { + xBehavior.enabled = false; + rising = false; + xBehavior.enabled = true; + rising = true; + } + if (y > main.height || y < 0) { + yBehavior.enabled = false; + rising = false; + yBehavior.enabled = true; + rising = true; + } + } + } + } +} \ No newline at end of file diff --git a/examples/declarative/screenorientation/Core/Button.qml b/examples/declarative/screenorientation/Core/Button.qml new file mode 100644 index 0000000..60083d8 --- /dev/null +++ b/examples/declarative/screenorientation/Core/Button.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +Item { + id: button + signal clicked + property string text + property bool toggled: false + width: 100 + height: 60 + Rectangle { + anchors.fill: button + anchors.margins: mouseArea.pressed ? 3 : 2 + color: toggled ? (mouseArea.pressed ? "#442222" : "darkred") : (mouseArea.pressed ? "#333333": "black") + radius: mouseArea.pressed ? 8 : 6 + Text { + id: text + anchors.centerIn: parent + text: button.text + font.pixelSize: mouseArea.pressed ? 12 : 14 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { + button.clicked() + } + } + } +} diff --git a/examples/declarative/screenorientation/Core/screenorientation.js b/examples/declarative/screenorientation/Core/screenorientation.js new file mode 100644 index 0000000..f0a5574 --- /dev/null +++ b/examples/declarative/screenorientation/Core/screenorientation.js @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +function printOrientation(orientation) { + var orientationString; + if (orientation == Orientation.Portrait) { + orientationString = "Portrait"; + } else if (orientation == Orientation.Landscape) { + orientationString = "Landscape"; + } else if (orientation == Orientation.PortraitInverted) { + orientationString = "Portrait inverted"; + } else if (orientation == Orientation.LandscapeInverted) { + orientationString = "Landscape inverted"; + } else { + orientationString = "UnknownOrientation"; + } + return orientationString; +} + +function getAngle(orientation) { + var angle; + if (orientation == Orientation.Portrait) { + angle = 0; + } else if (orientation == Orientation.Landscape) { + angle = 90; + } else if (orientation == Orientation.PortraitInverted) { + angle = 180; + } else if (orientation == Orientation.LandscapeInverted) { + angle = 270; + } else { + angle = 0; + } + return angle; +} + +function parallel(firstOrientation, secondOrientation) { + var difference = getAngle(firstOrientation) - getAngle(secondOrientation) + return difference % 180 == 0; +} + +function calculateGravityPoint(firstOrientation, secondOrientation) { + var position = Qt.point(0, 0); + var difference = getAngle(firstOrientation) - getAngle(secondOrientation) + if (difference < 0) { + difference = 360 + difference; + } + if (difference == 0) { + position = Qt.point(0, -10); + } else if (difference == 90) { + position = Qt.point(-10, 0); + } else if (difference == 180) { + position = Qt.point(0, 1000); + } else if (difference == 270) { + position = Qt.point(1000, 0); + } + return position; +} diff --git a/examples/declarative/screenorientation/screenorientation.qml b/examples/declarative/screenorientation/screenorientation.qml new file mode 100644 index 0000000..6af38bb --- /dev/null +++ b/examples/declarative/screenorientation/screenorientation.qml @@ -0,0 +1,202 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +import "Core" +import "Core/screenorientation.js" as ScreenOrientation + +Rectangle { + id: window + width: 360 + height: 640 + color: "white" + + Rectangle { + id: main + clip: true + property variant selectedOrientation: Orientation.UnknownOrientation + property variant activeOrientation: selectedOrientation == Orientation.UnknownOrientation ? runtime.orientation : selectedOrientation + state: "orientation " + activeOrientation + property bool inPortrait: (activeOrientation == Orientation.Portrait || activeOrientation == Orientation.PortraitInverted); + + // rotation correction for landscape devices like N900 + property bool landscapeWindow: window.width > window.height + property variant rotationDelta: landscapeWindow ? -90 : 0 + rotation: rotationDelta + + // initial state is portrait + property real baseWidth: landscapeWindow ? window.height-10 : window.width-10 + property real baseHeight: landscapeWindow ? window.width-10 : window.height-10 + + width: baseWidth + height: baseHeight + anchors.centerIn: parent + + color: "black" + gradient: Gradient { + GradientStop { position: 0.0; color: Qt.rgba(0.5,0.5,0.5,0.5) } + GradientStop { position: 0.8; color: "black" } + GradientStop { position: 1.0; color: "black" } + } + Item { + id: bubbles + property bool rising: false + anchors.fill: parent + property variant gravityPoint: ScreenOrientation.calculateGravityPoint(main.activeOrientation, runtime.orientation) + Repeater { + model: 24 + Bubble { + rising: bubbles.rising + verticalRise: ScreenOrientation.parallel(main.activeOrientation, runtime.orientation) + xAttractor: parent.gravityPoint.x + yAttractor: parent.gravityPoint.y + } + } + Component.onCompleted: bubbles.rising = true; + } + + Column { + width: centeredText.width + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenterOffset: 30 + Text { + text: "Orientation" + color: "white" + font.pixelSize: 22 + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + id: centeredText + text: ScreenOrientation.printOrientation(main.activeOrientation) + color: "white" + font.pixelSize: 40 + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + text: "sensor: " + ScreenOrientation.printOrientation(runtime.orientation) + color: "white" + font.pixelSize: 14 + anchors.horizontalCenter: parent.horizontalCenter + } + } + Flow { + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: 10 + spacing: 4 + Button { + width: main.inPortrait ? (parent.width-4)/2 : (parent.width-8)/3 + text: "Portrait" + onClicked: main.selectedOrientation = Orientation.Portrait + toggled: main.selectedOrientation == Orientation.Portrait + } + Button { + width: main.inPortrait ? (parent.width-4)/2 : (parent.width-8)/3 + text: "Portrait inverted" + onClicked: main.selectedOrientation = Orientation.PortraitInverted + toggled: main.selectedOrientation == Orientation.PortraitInverted + } + Button { + width: main.inPortrait ? (parent.width-4)/2 : (parent.width-8)/3 + text: "Landscape" + onClicked: main.selectedOrientation = Orientation.Landscape + toggled: main.selectedOrientation == Orientation.Landscape + } + Button { + width: main.inPortrait ? (parent.width-4)/2 : (parent.width-8)/3 + text: "Landscape inverted" + onClicked: main.selectedOrientation = Orientation.LandscapeInverted + toggled: main.selectedOrientation == Orientation.LandscapeInverted + } + Button { + width: main.inPortrait ? parent.width : 2*(parent.width-2)/3 + text: "From runtime.orientation" + onClicked: main.selectedOrientation = Orientation.UnknownOrientation + toggled: main.selectedOrientation == Orientation.UnknownOrientation + } + } + states: [ + State { + name: "orientation " + Orientation.Landscape + PropertyChanges { + target: main + rotation: ScreenOrientation.getAngle(Orientation.Landscape)+rotationDelta + width: baseHeight + height: baseWidth + } + }, + State { + name: "orientation " + Orientation.PortraitInverted + PropertyChanges { + target: main + rotation: ScreenOrientation.getAngle(Orientation.PortraitInverted)+rotationDelta + width: baseWidth + height: baseHeight + } + }, + State { + name: "orientation " + Orientation.LandscapeInverted + PropertyChanges { + target: main + rotation: ScreenOrientation.getAngle(Orientation.LandscapeInverted)+rotationDelta + width: baseHeight + height: baseWidth + } + } + ] + transitions: Transition { + ParallelAnimation { + RotationAnimation { + direction: RotationAnimation.Shortest + duration: 300 + easing.type: Easing.InOutQuint + } + NumberAnimation { + properties: "x,y,width,height" + duration: 300 + easing.type: Easing.InOutQuint + } + } + } + } +} diff --git a/examples/declarative/screenorientation/screenorientation.qmlproject b/examples/declarative/screenorientation/screenorientation.qmlproject new file mode 100644 index 0000000..d4909f8 --- /dev/null +++ b/examples/declarative/screenorientation/screenorientation.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp index de8d222..1c1c04b 100644 --- a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp +++ b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp @@ -43,9 +43,11 @@ #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativeview.h> #include <QtDeclarative/qdeclarativeitem.h> +#include <QtDeclarative/qdeclarativecontext.h> #include <QtGui/qmenubar.h> #include "../../../shared/util.h" #include "qmlruntime.h" +#include "deviceorientation.h" #include "../../../shared/util.h" #ifdef Q_OS_SYMBIAN @@ -67,7 +69,7 @@ public: tst_QDeclarativeViewer(); private slots: - void orientation(); + void runtimeContextProperty(); void loading(); void fileBrowser(); void resizing(); @@ -94,7 +96,7 @@ tst_QDeclarativeViewer::tst_QDeclarativeViewer() QCOMPARE(viewer->size(), viewer->sizeHint()); \ } -void tst_QDeclarativeViewer::orientation() +void tst_QDeclarativeViewer::runtimeContextProperty() { QDeclarativeViewer *viewer = new QDeclarativeViewer(); QVERIFY(viewer); @@ -103,17 +105,30 @@ void tst_QDeclarativeViewer::orientation() QVERIFY(viewer->menuBar()); QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject()); QVERIFY(rootItem); + QObject *runtimeObject = qvariant_cast<QObject*>(viewer->view()->engine()->rootContext()->contextProperty("runtime")); + QVERIFY(runtimeObject); + + // test isActiveWindow property + QVERIFY(!runtimeObject->property("isActiveWindow").toBool()); + viewer->show(); - QApplication::setActiveWindow(viewer); QTest::qWaitForWindowShown(viewer); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(viewer)); + QVERIFY(runtimeObject->property("isActiveWindow").toBool()); + TEST_INITIAL_SIZES(viewer); + // test orientation property + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::Portrait)); + viewer->rotateOrientation(); qApp->processEvents(); + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::Landscape)); + QCOMPARE(rootItem->width(), 300.0); + QCOMPARE(rootItem->width(), 300.0); QCOMPARE(rootItem->height(), 200.0); QTRY_COMPARE(viewer->view()->size(), QSize(300, 200)); @@ -124,6 +139,8 @@ void tst_QDeclarativeViewer::orientation() viewer->rotateOrientation(); qApp->processEvents(); + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::PortraitInverted)); + QCOMPARE(rootItem->width(), 200.0); QCOMPARE(rootItem->height(), 300.0); QTRY_COMPARE(viewer->view()->size(), QSize(200, 300)); @@ -131,6 +148,19 @@ void tst_QDeclarativeViewer::orientation() QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); QCOMPARE(viewer->size(), viewer->sizeHint()); + viewer->rotateOrientation(); + qApp->processEvents(); + + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::LandscapeInverted)); + + viewer->rotateOrientation(); + qApp->processEvents(); + + QCOMPARE(runtimeObject->property("orientation").toInt(), int(DeviceOrientation::Portrait)); + + viewer->hide(); + QVERIFY(!runtimeObject->property("isActiveWindow").toBool()); + delete viewer; } diff --git a/tools/qml/deviceorientation_symbian.cpp b/tools/qml/deviceorientation_symbian.cpp index c305f94..307c417 100644 --- a/tools/qml/deviceorientation_symbian.cpp +++ b/tools/qml/deviceorientation_symbian.cpp @@ -110,22 +110,27 @@ private: void DataReceived(CSensrvChannel &channel, TInt count, TInt dataLost) { + Q_UNUSED(dataLost) if (channel.GetChannelInfo().iChannelType == KSensrvChannelTypeIdOrientationData) { TSensrvOrientationData data; for (int i = 0; i < count; ++i) { TPckgBuf<TSensrvOrientationData> dataBuf; channel.GetData(dataBuf); data = dataBuf(); - Orientation o = UnknownOrientation; + Orientation orientation = UnknownOrientation; switch (data.iDeviceOrientation) { case TSensrvOrientationData::EOrientationDisplayUp: - o = Portrait; + orientation = Portrait; break; case TSensrvOrientationData::EOrientationDisplayRightUp: - o = Landscape; + orientation = Landscape; break; case TSensrvOrientationData::EOrientationDisplayLeftUp: + orientation = LandscapeInverted; + break; case TSensrvOrientationData::EOrientationDisplayDown: + orientation = PortraitInverted; + break; case TSensrvOrientationData::EOrientationUndefined: case TSensrvOrientationData::EOrientationDisplayUpwards: case TSensrvOrientationData::EOrientationDisplayDownwards: @@ -133,8 +138,8 @@ private: break; } - if (m_current != o && o != UnknownOrientation) { - m_current = o; + if (m_current != orientation && orientation != UnknownOrientation) { + m_current = orientation; emit orientationChanged(); } } diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro index bb69e8a..efb82d1 100644 --- a/tools/qml/qml.pro +++ b/tools/qml/qml.pro @@ -40,6 +40,9 @@ symbian { !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { LIBS += -lsensrvclient -lsensrvutil } + contains(QT_CONFIG, s60): { + LIBS += -lavkon -lcone + } } mac { QMAKE_INFO_PLIST=Info_mac.plist diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index 08a578c..b9fd570 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -98,6 +98,10 @@ #include <QGLWidget> #endif +#if defined(Q_WS_S60) +#include <aknappui.h> // For locking app orientation +#endif + #include <qdeclarativetester.h> QT_BEGIN_NAMESPACE @@ -600,6 +604,7 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) , loggerWindow(new LoggerWidget(this)) , frame_stream(0) + , rotateAction(0) , orientation(0) , showWarningsWindow(0) , m_scriptOptions(0) @@ -742,22 +747,28 @@ void QDeclarativeViewer::createMenu() fullscreenAction->setCheckable(true); connect(fullscreenAction, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); - QAction *rotateOrientation = new QAction(tr("Rotate orientation"), this); - rotateOrientation->setShortcut(QKeySequence("Ctrl+T")); - connect(rotateOrientation, SIGNAL(triggered()), this, SLOT(rotateOrientation())); + rotateAction = new QAction(tr("Rotate orientation"), this); + rotateAction->setShortcut(QKeySequence("Ctrl+T")); + connect(rotateAction, SIGNAL(triggered()), this, SLOT(rotateOrientation())); orientation = new QActionGroup(this); orientation->setExclusive(true); connect(orientation, SIGNAL(triggered(QAction*)), this, SLOT(changeOrientation(QAction*))); +#if defined(Q_OS_SYMBIAN) + QAction *autoOrientationAction = new QAction(tr("Auto-orientation"), this); + autoOrientationAction->setCheckable(true); +#endif QAction *portraitAction = new QAction(tr("Portrait"), this); portraitAction->setCheckable(true); QAction *landscapeAction = new QAction(tr("Landscape"), this); landscapeAction->setCheckable(true); +#if !defined(Q_OS_SYMBIAN) QAction *portraitInvAction = new QAction(tr("Portrait (inverted)"), this); portraitInvAction->setCheckable(true); QAction *landscapeInvAction = new QAction(tr("Landscape (inverted)"), this); landscapeInvAction->setCheckable(true); +#endif QAction *aboutAction = new QAction(tr("&About Qt..."), this); aboutAction->setMenuRole(QAction::AboutQtRole); @@ -801,9 +812,9 @@ void QDeclarativeViewer::createMenu() fileMenu->addAction(reloadAction); fileMenu->addSeparator(); fileMenu->addAction(closeAction); +#if !defined(Q_OS_SYMBIAN) fileMenu->addAction(quitAction); -#if !defined(Q_OS_SYMBIAN) QMenu *recordMenu = menu->addMenu(tr("&Recording")); recordMenu->addAction(snapshotAction); recordMenu->addAction(recordAction); @@ -813,22 +824,27 @@ void QDeclarativeViewer::createMenu() debugMenu->addAction(showWarningsWindow); #endif // ! Q_OS_SYMBIAN - QMenu *settingsMenu = menu->addMenu(tr("S&ettings")); + QMenu *settingsMenu = menu->addMenu(tr("&Settings")); settingsMenu->addAction(proxyAction); -#if !defined(Q_OS_SYMBIAN) +#if defined(Q_OS_SYMBIAN) + settingsMenu->addAction(fullscreenAction); +#else settingsMenu->addAction(recordOptions); settingsMenu->addMenu(loggerWindow->preferencesMenu()); -#else // ! Q_OS_SYMBIAN - settingsMenu->addAction(fullscreenAction); -#endif // Q_OS_SYMBIAN - settingsMenu->addAction(rotateOrientation); +#endif // !Q_OS_SYMBIAN + settingsMenu->addAction(rotateAction); QMenu *propertiesMenu = settingsMenu->addMenu(tr("Properties")); +#if defined(Q_OS_SYMBIAN) + orientation->addAction(autoOrientationAction); +#endif orientation->addAction(portraitAction); orientation->addAction(landscapeAction); +#if !defined(Q_OS_SYMBIAN) orientation->addAction(portraitInvAction); orientation->addAction(landscapeInvAction); +#endif propertiesMenu->addActions(orientation->actions()); QMenu *helpMenu = menu->addMenu(tr("&Help")); @@ -852,6 +868,23 @@ void QDeclarativeViewer::proxySettingsChanged() void QDeclarativeViewer::rotateOrientation() { +#if defined(Q_WS_S60) + CAknAppUi *appUi = static_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi()); + if (appUi) { + CAknAppUi::TAppUiOrientation oldOrientation = appUi->Orientation(); + QString newOrientation; + if (oldOrientation == CAknAppUi::EAppUiOrientationPortrait) { + newOrientation = QLatin1String("Landscape"); + } else { + newOrientation = QLatin1String("Portrait"); + } + foreach (QAction *action, orientation->actions()) { + if (action->text() == newOrientation) { + changeOrientation(action); + } + } + } +#else QAction *current = orientation->checkedAction(); QList<QAction *> actions = orientation->actions(); int index = actions.indexOf(current); @@ -860,6 +893,7 @@ void QDeclarativeViewer::rotateOrientation() QAction *newOrientation = actions[(index + 1) % actions.count()]; changeOrientation(newOrientation); +#endif } void QDeclarativeViewer::toggleFullScreen() @@ -1369,9 +1403,24 @@ void QDeclarativeViewer::changeOrientation(QAction *action) { if (!action) return; - action->setChecked(true); - QString o = action->text(); + action->setChecked(true); +#if defined(Q_WS_S60) + CAknAppUi *appUi = static_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi()); + if (appUi) { + CAknAppUi::TAppUiOrientation orientation = appUi->Orientation(); + if (o == QLatin1String("Auto-orientation")) { + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationAutomatic); + rotateAction->setVisible(false); + } else if (o == QLatin1String("Portrait")) { + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait); + rotateAction->setVisible(true); + } else if (o == QLatin1String("Landscape")) { + appUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape); + rotateAction->setVisible(true); + } + } +#else if (o == QLatin1String("Portrait")) DeviceOrientation::instance()->setOrientation(DeviceOrientation::Portrait); else if (o == QLatin1String("Landscape")) @@ -1380,6 +1429,7 @@ void QDeclarativeViewer::changeOrientation(QAction *action) DeviceOrientation::instance()->setOrientation(DeviceOrientation::PortraitInverted); else if (o == QLatin1String("Landscape (inverted)")) DeviceOrientation::instance()->setOrientation(DeviceOrientation::LandscapeInverted); +#endif } void QDeclarativeViewer::orientationChanged() diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index 7385b14..6fa7d81 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -170,8 +170,6 @@ private: int record_autotime; bool devicemode; QAction *recordAction; - QString currentSkin; - bool scaleSkin; RecordingDialog *recdlg; void senseImageMagick(); @@ -180,6 +178,7 @@ private: bool ffmpegAvailable; bool convertAvailable; + QAction *rotateAction; QActionGroup *orientation; QAction *showWarningsWindow; -- cgit v0.12 From f4db30b8197e27707f98f4547a0528bd1d0cbd31 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Mon, 2 Aug 2010 17:17:49 +0200 Subject: Fix Japanese characters not displayed in webkit on Mac Cocoa 64 (Regression) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Our stringToCMap implementation for CoreText that bypasses the shaping needs to have basic support for font cascading / glyph substitution. We now use CTFontCreateForString to determine the substitute font for missing glyphs. Task-number: QTBUG-12411 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@nokia.com> (cherry picked from commit 00fb79714162ea3e434cf66a87a70a4fc26b2b86) --- src/gui/text/qfontengine_mac.mm | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/gui/text/qfontengine_mac.mm b/src/gui/text/qfontengine_mac.mm index deaad57..91b6082 100644 --- a/src/gui/text/qfontengine_mac.mm +++ b/src/gui/text/qfontengine_mac.mm @@ -349,11 +349,32 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay int *nglyphs, QTextEngine::ShaperFlags flags) const { *nglyphs = len; + QCFType<CFStringRef> cfstring; + QVarLengthArray<CGGlyph> cgGlyphs(len); CTFontGetGlyphsForCharacters(ctfont, (const UniChar*)str, cgGlyphs.data(), len); - for (int i = 0; i < len; ++i) - glyphs->glyphs[i] = cgGlyphs[i]; + for (int i = 0; i < len; ++i) { + if (cgGlyphs[i]) { + glyphs->glyphs[i] = cgGlyphs[i]; + } else { + if (!cfstring) + cfstring = CFStringCreateWithCharactersNoCopy(0, reinterpret_cast<const UniChar *>(str), len, kCFAllocatorNull); + QCFType<CTFontRef> substituteFont = CTFontCreateForString(ctfont, cfstring, CFRangeMake(i, 1)); + CGGlyph substituteGlyph = 0; + CTFontGetGlyphsForCharacters(substituteFont, (const UniChar*)str + i, &substituteGlyph, 1); + if (substituteGlyph) { + const uint fontIndex = (fontIndexForFont(substituteFont) << 24); + glyphs->glyphs[i] = substituteGlyph | fontIndex; + if (!(flags & QTextEngine::GlyphIndicesOnly)) { + CGSize advance; + CTFontGetAdvancesForGlyphs(substituteFont, kCTFontHorizontalOrientation, &substituteGlyph, &advance, 1); + glyphs->advances_x[i] = QFixed::fromReal(advance.width); + glyphs->advances_y[i] = QFixed::fromReal(advance.height); + } + } + } + } if (flags & QTextEngine::GlyphIndicesOnly) return true; @@ -362,9 +383,14 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay CTFontGetAdvancesForGlyphs(ctfont, kCTFontHorizontalOrientation, cgGlyphs.data(), advances.data(), len); for (int i = 0; i < len; ++i) { + if (glyphs->glyphs[i] & 0xff000000) + continue; glyphs->advances_x[i] = QFixed::fromReal(advances[i].width); glyphs->advances_y[i] = QFixed::fromReal(advances[i].height); - if (fontDef.styleStrategy & QFont::ForceIntegerMetrics) { + } + + if (fontDef.styleStrategy & QFont::ForceIntegerMetrics) { + for (int i = 0; i < len; ++i) { glyphs->advances_x[i] = glyphs->advances_x[i].round(); glyphs->advances_y[i] = glyphs->advances_y[i].round(); } -- cgit v0.12 From 57738be581e35649d5b32a8dd30c6f01826e8bc5 Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil <prasanth.ullattil@nokia.com> Date: Tue, 3 Aug 2010 14:49:28 +0200 Subject: =?UTF-8?q?Crash=20when=20pressing=20the=20'=C2=A3'=20key=20on=20B?= =?UTF-8?q?elgian=20Keyboard=20layout=20(Cocoa)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some cases the NSKeyDown event won't have fully constructed string in the [NSEvent characters]. So we need to add a guard before accessing the elements of this NSString. Task-number: QTBUG-12474 Reviewed-by: Richard Moe Gustavsen (cherry picked from commit 307601da8d3b64de7b7d83a6de0b5dac290b0eb6) --- src/gui/kernel/qt_cocoa_helpers_mac.mm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 647cb86..7d23abf 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -685,9 +685,11 @@ bool qt_dispatchKeyEvent(void * /*NSEvent * */ keyEvent, QWidget *widgetToGetEve unsigned int info = 0; if ([event type] == NSKeyDown) { NSString *characters = [event characters]; - unichar value = [characters characterAtIndex:0]; - qt_keymapper_private()->updateKeyMap(0, key_event, (void *)&value); - info = value; + if ([characters length]) { + unichar value = [characters characterAtIndex:0]; + qt_keymapper_private()->updateKeyMap(0, key_event, (void *)&value); + info = value; + } } // Redirect keys to alien widgets. -- cgit v0.12 From 0263988be6c38c29067e98dac6eddaf27dd4030d Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Mon, 2 Aug 2010 10:53:25 +0200 Subject: Fixed comment about all enums being accessible in QML. Fix for QTBUG-12527. (cherry picked from commit f0e49104a864b3f658e8cc0036b742b20ad84872) --- src/declarative/qml/qdeclarativeengine.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index cba4671..b2f3cd1 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -206,10 +206,9 @@ Text { \section1 Enums -The Qt object contains all enums in the Qt namespace. For example, you can -access the \c AlignLeft member of the \c Qt::AlignmentFlag enum with \c Qt.AlignLeft. +The Qt object contains enums that declared into Qt's Meta-Object System. For example, you can access +the \c Leftbutton member of the \c Qt::MouseButton enum with \c Qt.LeftButton. -For a full list of enums, see the \l{Qt Namespace} documentation. \section1 Types The Qt object also contains helper functions for creating objects of specific -- cgit v0.12 From f564897bb3ef1b444b7ad8cdc45277d4f91114cf Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 2 Aug 2010 17:04:14 +0200 Subject: configure: don't symlink the mkspecs/features directory In shadow builds, the directory QT_BUILD_TREE/mkspecs/features isn't a mere symlink anymore. The directories below mkspecs/features are copied and every single file is symlinked. This makes it possible to place .prf files into a shadow build's mkspecs/features directory, like Qt Mobility does with its mobility.prf, without polluting the source directory. Task-number: QTBUG-12545 Reviewed-by: ossi (cherry picked from commit aff888a3e7f3d9ee2c5611c2dd5c0ff1693752c6) --- configure | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/configure b/configure index b8c3565..4d9bc46 100755 --- a/configure +++ b/configure @@ -2357,6 +2357,14 @@ if [ "$OPT_SHADOW" = "yes" ]; then ln -s "$relpath"/mkspecs/* "$outpath/mkspecs" rm -f "$outpath/mkspecs/default" + # Special case for mkspecs/features directory. + # To be able to place .prf files into a shadow build directory, + # we're creating links for files only. The directory structure is reproduced. + # A simple "cp -rs" doesn't work on Mac. :( + rm -rf "$outpath/mkspecs/features" + find "$relpath/mkspecs/features" -type d | sed "s,^$relpath,$outpath," | xargs mkdir -p + find "$relpath/mkspecs/features" -type f | sed "s,^$relpath/,," | xargs -n 1 -I % ln -s "$relpath/%" "$outpath/%" + # symlink the doc directory rm -rf "$outpath/doc" ln -s "$relpath/doc" "$outpath/doc" -- cgit v0.12 From f4b435f8164e344242cb56312ee51059064ed63e Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 3 Aug 2010 15:43:48 +1000 Subject: Fix Flickable.StopAtBounds behavior when content size < flickable size Clip the content position to the beginning rather than the end, if both apply. Task-number: QTBUG-12573 Reviewed-by: Michael Brasser (cherry picked from commit a0b531163a79c9097185b580fdf4aa8157cead41) --- .../graphicsitems/qdeclarativeflickable.cpp | 26 +++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index 998b33a..19cabdd 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -681,12 +681,15 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent if (newY < maxY && maxY - minY <= 0) newY = maxY + (newY - maxY) / 2; if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && (newY > minY || newY < maxY)) { - if (newY > minY) - newY = minY; - else if (newY < maxY) + rejectY = true; + if (newY < maxY) { newY = maxY; - else - rejectY = true; + rejectY = false; + } + if (newY > minY) { + newY = minY; + rejectY = false; + } } if (!rejectY && stealMouse) { vData.move.setValue(qRound(newY)); @@ -708,12 +711,15 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent if (newX < maxX && maxX - minX <= 0) newX = maxX + (newX - maxX) / 2; if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && (newX > minX || newX < maxX)) { - if (newX > minX) - newX = minX; - else if (newX < maxX) + rejectX = true; + if (newX < maxX) { newX = maxX; - else - rejectX = true; + rejectX = false; + } + if (newX > minX) { + newX = minX; + rejectX = false; + } } if (!rejectX && stealMouse) { hData.move.setValue(qRound(newX)); -- cgit v0.12 From 0df9658696e7505fecce2b4497c3156311304fda Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 3 Aug 2010 15:31:58 +1000 Subject: Ensure dataChanged doesn't force request for unwanted data in QML views. If a model emits dataChanged() every role was be updated, rather than just the roles required. Now only roles which have been used are updated. Task-number: QTBUG-12598 Reviewed-by: Michael Brasser (cherry picked from commit b7702b2dcbc36f81759dea0ad74fb19e97b2358f) --- .../graphicsitems/qdeclarativevisualitemmodel.cpp | 15 ++++++++++----- src/declarative/util/qdeclarativeopenmetaobject.cpp | 12 ++++++++++++ src/declarative/util/qdeclarativeopenmetaobject_p.h | 1 + 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 79c1c43..ceb1961 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -444,6 +444,9 @@ public: int propForRole(int) const; void setValue(int, const QVariant &); + bool hasValue(int id) const { + return m_meta->hasValue(id); + } void ensureProperties(); @@ -1216,11 +1219,13 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count, int role = roles.at(roleIdx); int propId = data->propForRole(role); if (propId != -1) { - if (d->m_listModelInterface) { - data->setValue(propId, d->m_listModelInterface->data(idx, QList<int>() << role).value(role)); - } else if (d->m_abstractItemModel) { - QModelIndex index = d->m_abstractItemModel->index(idx, 0, d->m_root); - data->setValue(propId, d->m_abstractItemModel->data(index, role)); + if (data->hasValue(propId)) { + if (d->m_listModelInterface) { + data->setValue(propId, d->m_listModelInterface->data(idx, QList<int>() << role).value(role)); + } else if (d->m_abstractItemModel) { + QModelIndex index = d->m_abstractItemModel->index(idx, 0, d->m_root); + data->setValue(propId, d->m_abstractItemModel->data(index, role)); + } } } else { QString roleName; diff --git a/src/declarative/util/qdeclarativeopenmetaobject.cpp b/src/declarative/util/qdeclarativeopenmetaobject.cpp index ba5d534..40485bd 100644 --- a/src/declarative/util/qdeclarativeopenmetaobject.cpp +++ b/src/declarative/util/qdeclarativeopenmetaobject.cpp @@ -161,6 +161,12 @@ public: prop.second = true; } + inline bool hasData(int idx) const { + if (idx >= data.count()) + return false; + return data[idx].second; + } + bool autoCreate; QDeclarativeOpenMetaObject *q; QAbstractDynamicMetaObject *parent; @@ -295,6 +301,12 @@ void QDeclarativeOpenMetaObject::setValue(const QByteArray &name, const QVariant activate(d->object, id + d->type->d->signalOffset, 0); } +// returns true if this value has been initialized by a call to either value() or setValue() +bool QDeclarativeOpenMetaObject::hasValue(int id) const +{ + return d->hasData(id); +} + void QDeclarativeOpenMetaObject::setCached(bool c) { if (c == d->cacheProperties || !d->type->d->engine) diff --git a/src/declarative/util/qdeclarativeopenmetaobject_p.h b/src/declarative/util/qdeclarativeopenmetaobject_p.h index 9bb4c34..c18fa3d 100644 --- a/src/declarative/util/qdeclarativeopenmetaobject_p.h +++ b/src/declarative/util/qdeclarativeopenmetaobject_p.h @@ -91,6 +91,7 @@ public: void setValue(int, const QVariant &); QVariant &operator[](const QByteArray &); QVariant &operator[](int); + bool hasValue(int) const; int count() const; QByteArray name(int) const; -- cgit v0.12 From f2218e751c226b031d9ac1785279c5117e2d22f7 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Tue, 3 Aug 2010 11:41:25 +1000 Subject: Limit the pixmap cache in space as well as in time. QTBUG-12590 (cherry picked from commit 1fc6cab93ba2d067fadcd0979640c32aa1d5ae4a) --- src/declarative/util/qdeclarativepixmapcache.cpp | 33 +++++++++++++---- .../qdeclarativepixmapcache/data/massive.png | Bin 0 -> 31834 bytes .../tst_qdeclarativepixmapcache.cpp | 40 +++++++++++++++++++++ 3 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativepixmapcache/data/massive.png diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index a83cac8..9ced14f 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -70,6 +70,16 @@ QT_BEGIN_NAMESPACE +// The cache limit describes the maximum "junk" in the cache. +// These are the same defaults as QPixmapCache +#if defined(Q_OS_SYMBIAN) +static int cache_limit = 1024 * 1024; // 1048 KB cache limit for symbian +#elif defined(Q_WS_QWS) || defined(Q_WS_WINCE) +static int cache_limit = 2048 * 1024; // 2048 KB cache limit for embedded +#else +static int cache_limit = 10240 * 1024; // 10 MB cache limit for desktop +#endif + class QDeclarativePixmapReader; class QDeclarativePixmapData; class QDeclarativePixmapReply : public QObject @@ -580,6 +590,8 @@ public: QHash<QDeclarativePixmapKey, QDeclarativePixmapData *> m_cache; private: + void shrinkCache(int remove); + QDeclarativePixmapData *m_unreferencedPixmaps; QDeclarativePixmapData *m_lastUnreferencedPixmap; @@ -613,7 +625,9 @@ void QDeclarativePixmapStore::unreferencePixmap(QDeclarativePixmapData *data) m_unreferencedCost += data->cost(); - if (m_timerId == -1) + shrinkCache(-1); // Shrink the cache incase it has become larger than cache_limit + + if (m_timerId == -1 && m_unreferencedPixmaps) m_timerId = startTimer(CACHE_EXPIRE_TIME * 1000); } @@ -636,11 +650,9 @@ void QDeclarativePixmapStore::referencePixmap(QDeclarativePixmapData *data) m_unreferencedCost -= data->cost(); } -void QDeclarativePixmapStore::timerEvent(QTimerEvent *) +void QDeclarativePixmapStore::shrinkCache(int remove) { - int removalCost = m_unreferencedCost / CACHE_REMOVAL_FRACTION; - - while (removalCost > 0 && m_lastUnreferencedPixmap) { + while ((remove > 0 || m_unreferencedCost > cache_limit) && m_lastUnreferencedPixmap) { QDeclarativePixmapData *data = m_lastUnreferencedPixmap; Q_ASSERT(data->nextUnreferenced == 0); @@ -649,10 +661,17 @@ void QDeclarativePixmapStore::timerEvent(QTimerEvent *) data->prevUnreferencedPtr = 0; data->prevUnreferenced = 0; - removalCost -= data->cost(); + remove -= data->cost(); data->removeFromCache(); delete data; } +} + +void QDeclarativePixmapStore::timerEvent(QTimerEvent *) +{ + int removalCost = m_unreferencedCost / CACHE_REMOVAL_FRACTION; + + shrinkCache(removalCost); if (m_unreferencedPixmaps == 0) { killTimer(m_timerId); @@ -702,7 +721,7 @@ bool QDeclarativePixmapReply::event(QEvent *event) int QDeclarativePixmapData::cost() const { - return pixmap.width() * pixmap.height() * pixmap.depth(); + return (pixmap.width() * pixmap.height() * pixmap.depth()) / 8; } void QDeclarativePixmapData::addref() diff --git a/tests/auto/declarative/qdeclarativepixmapcache/data/massive.png b/tests/auto/declarative/qdeclarativepixmapcache/data/massive.png new file mode 100644 index 0000000..bc6cc9e Binary files /dev/null and b/tests/auto/declarative/qdeclarativepixmapcache/data/massive.png differ diff --git a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp index 0c7780c..16d2063 100644 --- a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp +++ b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp @@ -70,6 +70,7 @@ private slots: void single_data(); void parallel(); void parallel_data(); + void massive(); private: QDeclarativeEngine engine; @@ -276,6 +277,45 @@ void tst_qdeclarativepixmapcache::parallel() qDeleteAll(pixmaps); } +void tst_qdeclarativepixmapcache::massive() +{ + QUrl url = thisfile.resolved(QUrl("data/massive.png")); + + // Confirm that massive images remain in the cache while they are + // in use by the application. + { + qint64 cachekey = 0; + QDeclarativePixmap p(0, url); + QVERIFY(p.isReady()); + QVERIFY(p.pixmap().size() == QSize(10000, 1000)); + cachekey = p.pixmap().cacheKey(); + + QDeclarativePixmap p2(0, url); + QVERIFY(p2.isReady()); + QVERIFY(p2.pixmap().size() == QSize(10000, 1000)); + + QVERIFY(p2.pixmap().cacheKey() == cachekey); + } + + // Confirm that massive images are removed from the cache when + // they become unused + { + qint64 cachekey = 0; + { + QDeclarativePixmap p(0, url); + QVERIFY(p.isReady()); + QVERIFY(p.pixmap().size() == QSize(10000, 1000)); + cachekey = p.pixmap().cacheKey(); + } + + QDeclarativePixmap p2(0, url); + QVERIFY(p2.isReady()); + QVERIFY(p2.pixmap().size() == QSize(10000, 1000)); + + QVERIFY(p2.pixmap().cacheKey() != cachekey); + } +} + QTEST_MAIN(tst_qdeclarativepixmapcache) #include "tst_qdeclarativepixmapcache.moc" -- cgit v0.12 From b85f2210b6e3295dd071715f820335e672c3a08e Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Tue, 3 Aug 2010 14:18:44 +0200 Subject: Updated WebKit to d6aa024c84f61d0602bef4eef84efaed7cfeefcc Integrated changes: || <https://webkit.org/b/36723> || Crash while uploading a PDF document on www.largefilesasap.com || || <https://webkit.org/b/40572> || [Qt] Stack overflow when converting navigator object to QVariant || || <https://webkit.org/b/43037> || [Qt] Incorrect input method hints || (cherry picked from commit 321aa9d20101560dfcef6738be70916b47dbb0ed) --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 37 ++++++++++++++++++++++ .../webkit/WebCore/bridge/qt/qt_runtime.cpp | 31 ++++++++++-------- .../webkit/WebCore/platform/FileChooser.cpp | 6 ++-- src/3rdparty/webkit/WebCore/platform/FileChooser.h | 4 ++- .../WebCore/rendering/RenderFileUploadControl.cpp | 5 +-- .../WebCore/rendering/RenderFileUploadControl.h | 2 +- src/3rdparty/webkit/WebKit/qt/ChangeLog | 16 ++++++++++ .../WebKit/qt/WebCoreSupport/EditorClientQt.cpp | 26 +++++++-------- .../WebKit/qt/tests/qwebview/tst_qwebview.cpp | 23 +++++++++++--- 11 files changed, 113 insertions(+), 41 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 0b414ab..718ea9d 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -e6e692bb056670e2781dd0bc473a60757ae53992 +d6aa024c84f61d0602bef4eef84efaed7cfeefcc diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index f8403fb..1826cb6 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - e6e692bb056670e2781dd0bc473a60757ae53992 + d6aa024c84f61d0602bef4eef84efaed7cfeefcc diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 5189eb5..5b78226 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,40 @@ +2010-06-14 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Stack overflow when converting navigator object to QVariant + https://bugs.webkit.org/show_bug.cgi?id=40572 + + Protect against infinite recursion in JSValue->QVariant conversion. + This fixes a crash when trying to convert MimeType objects (they + recurse infinitely and on-the-fly via the enabledPlugin property.) + + * bridge/qt/qt_runtime.cpp: + (JSC::Bindings::convertValueToQVariant): + +2010-03-30 Kent Tamura <tkent@chromium.org> + + Reviewed by Brady Eidson. + + REGRESSION (r56439) - Crash when a renderer for a file upload control + with a selected file is recreated + https://bugs.webkit.org/show_bug.cgi?id=36723 + + RenderFileUploadControl::chooseIconForFiles was called before + m_fileChooser was initialized. + + * platform/FileChooser.cpp: + (WebCore::FileChooser::FileChooser): Introduce m_isInitializing flag to + avoid FileChooserClient::repaint() call. + (WebCore::FileChooser::loadIcon): + (WebCore::FileChooser::iconLoaded): + * platform/FileChooser.h: Add a FielChooser parameter to + FileChooserClient::chooseIconForFiles(). + * rendering/RenderFileUploadControl.cpp: + (WebCore::RenderFileUploadControl::chooseIconForFiles): + (WebCore::RenderFileUploadControl::paintObject): Add an assertion. + * rendering/RenderFileUploadControl.h: + 2010-07-06 Nikolas Zimmermann <nzimmermann@rim.com> Reviewed by Dirk Schulze. diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp b/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp index a39dc7a..2212f58 100644 --- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp +++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp @@ -162,9 +162,11 @@ static JSRealType valueRealType(ExecState* exec, JSValue val) return String; // I don't know. } -QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type hint, int *distance, HashSet<JSObject*>* visitedObjects) +QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type hint, int *distance, HashSet<JSObject*>* visitedObjects, int recursionLimit) { - if (!value) + --recursionLimit; + + if (!value || !recursionLimit) return QVariant(); JSObject* object = 0; @@ -344,7 +346,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type while(it != properties.end()) { if (object->propertyIsEnumerable(exec, *it)) { JSValue val = object->get(exec, *it); - QVariant v = convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects); + QVariant v = convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects, recursionLimit); if (objdist >= 0) { UString ustring = (*it).ustring(); QString id = QString((const QChar*)ustring.rep()->characters(), ustring.size()); @@ -368,7 +370,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type qConvDebug() << "converting a " << len << " length Array"; for (int i = 0; i < len; ++i) { JSValue val = rtarray->getConcreteArray()->valueAt(exec, i); - result.append(convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects)); + result.append(convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects, recursionLimit)); if (objdist == -1) { qConvDebug() << "Failed converting element at index " << i; break; // Failed converting a list entry, so fail the array @@ -387,7 +389,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type qConvDebug() << "converting a " << len << " length Array"; for (int i = 0; i < len; ++i) { JSValue val = array->get(exec, i); - result.append(convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects)); + result.append(convertValueToQVariant(exec, val, QMetaType::Void, &objdist, visitedObjects, recursionLimit)); if (objdist == -1) { qConvDebug() << "Failed converting element at index " << i; break; // Failed converting a list entry, so fail the array @@ -401,7 +403,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type // Make a single length array int objdist; qConvDebug() << "making a single length variantlist"; - QVariant var = convertValueToQVariant(exec, value, QMetaType::Void, &objdist, visitedObjects); + QVariant var = convertValueToQVariant(exec, value, QMetaType::Void, &objdist, visitedObjects, recursionLimit); if (objdist != -1) { QVariantList result; result << var; @@ -645,7 +647,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type for (int i = 0; i < len; ++i) { JSValue val = rtarray->getConcreteArray()->valueAt(exec, i); int itemdist = -1; - QVariant item = convertValueToQVariant(exec, val, QMetaType::QObjectStar, &itemdist, visitedObjects); + QVariant item = convertValueToQVariant(exec, val, QMetaType::QObjectStar, &itemdist, visitedObjects, recursionLimit); if (itemdist >= 0) result.append(item.value<QObject*>()); else @@ -664,7 +666,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type for (int i = 0; i < len; ++i) { JSValue val = array->get(exec, i); int itemdist = -1; - QVariant item = convertValueToQVariant(exec, val, QMetaType::QObjectStar, &itemdist, visitedObjects); + QVariant item = convertValueToQVariant(exec, val, QMetaType::QObjectStar, &itemdist, visitedObjects, recursionLimit); if (itemdist >= 0) result.append(item.value<QObject*>()); else @@ -679,7 +681,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type // Make a single length array QObjectList result; int itemdist = -1; - QVariant item = convertValueToQVariant(exec, value, QMetaType::QObjectStar, &itemdist, visitedObjects); + QVariant item = convertValueToQVariant(exec, value, QMetaType::QObjectStar, &itemdist, visitedObjects, recursionLimit); if (itemdist >= 0) { result.append(item.value<QObject*>()); dist = 10; @@ -696,7 +698,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type for (int i = 0; i < len; ++i) { JSValue val = rtarray->getConcreteArray()->valueAt(exec, i); int itemdist = -1; - QVariant item = convertValueToQVariant(exec, val, QMetaType::Int, &itemdist, visitedObjects); + QVariant item = convertValueToQVariant(exec, val, QMetaType::Int, &itemdist, visitedObjects, recursionLimit); if (itemdist >= 0) result.append(item.value<int>()); else @@ -715,7 +717,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type for (int i = 0; i < len; ++i) { JSValue val = array->get(exec, i); int itemdist = -1; - QVariant item = convertValueToQVariant(exec, val, QMetaType::Int, &itemdist, visitedObjects); + QVariant item = convertValueToQVariant(exec, val, QMetaType::Int, &itemdist, visitedObjects, recursionLimit); if (itemdist >= 0) result.append(item.value<int>()); else @@ -730,7 +732,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type // Make a single length array QList<int> result; int itemdist = -1; - QVariant item = convertValueToQVariant(exec, value, QMetaType::Int, &itemdist, visitedObjects); + QVariant item = convertValueToQVariant(exec, value, QMetaType::Int, &itemdist, visitedObjects, recursionLimit); if (itemdist >= 0) { result.append(item.value<int>()); dist = 10; @@ -757,7 +759,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type } // And then recurse with the autodetect flag - ret = convertValueToQVariant(exec, value, QMetaType::Void, distance, visitedObjects); + ret = convertValueToQVariant(exec, value, QMetaType::Void, distance, visitedObjects, recursionLimit); dist = 10; } break; @@ -777,8 +779,9 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type hint, int *distance) { + const int recursionLimit = 200; HashSet<JSObject*> visitedObjects; - return convertValueToQVariant(exec, value, hint, distance, &visitedObjects); + return convertValueToQVariant(exec, value, hint, distance, &visitedObjects, recursionLimit); } JSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, const QVariant& variant) diff --git a/src/3rdparty/webkit/WebCore/platform/FileChooser.cpp b/src/3rdparty/webkit/WebCore/platform/FileChooser.cpp index dd4fc0d..90dd567 100644 --- a/src/3rdparty/webkit/WebCore/platform/FileChooser.cpp +++ b/src/3rdparty/webkit/WebCore/platform/FileChooser.cpp @@ -39,9 +39,11 @@ FileChooserClient::~FileChooserClient() inline FileChooser::FileChooser(FileChooserClient* client, const Vector<String>& initialFilenames) : m_client(client) + , m_isInitializing(true) { m_filenames = initialFilenames; loadIcon(); + m_isInitializing = false; } PassRefPtr<FileChooser> FileChooser::create(FileChooserClient* client, const Vector<String>& initialFilenames) @@ -79,13 +81,13 @@ void FileChooser::chooseFiles(const Vector<String>& filenames) void FileChooser::loadIcon() { if (m_filenames.size() && m_client) - m_client->chooseIconForFiles(m_filenames); + m_client->chooseIconForFiles(this, m_filenames); } void FileChooser::iconLoaded(PassRefPtr<Icon> icon) { m_icon = icon; - if (m_icon && m_client) + if (!m_isInitializing && m_icon && m_client) m_client->repaint(); } diff --git a/src/3rdparty/webkit/WebCore/platform/FileChooser.h b/src/3rdparty/webkit/WebCore/platform/FileChooser.h index 4028d41..e93b9ac 100644 --- a/src/3rdparty/webkit/WebCore/platform/FileChooser.h +++ b/src/3rdparty/webkit/WebCore/platform/FileChooser.h @@ -35,6 +35,7 @@ namespace WebCore { +class FileChooser; class Font; class Icon; @@ -44,7 +45,7 @@ public: virtual void repaint() = 0; virtual bool allowsMultipleFiles() = 0; virtual String acceptTypes() = 0; - virtual void chooseIconForFiles(const Vector<String>&) = 0; + virtual void chooseIconForFiles(FileChooser*, const Vector<String>&) = 0; virtual ~FileChooserClient(); }; @@ -79,6 +80,7 @@ private: FileChooserClient* m_client; Vector<String> m_filenames; RefPtr<Icon> m_icon; + bool m_isInitializing; }; } // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp index 14d126d..6a5c1e0 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp @@ -114,10 +114,10 @@ String RenderFileUploadControl::acceptTypes() return static_cast<HTMLInputElement*>(node())->accept(); } -void RenderFileUploadControl::chooseIconForFiles(const Vector<String>& filenames) +void RenderFileUploadControl::chooseIconForFiles(FileChooser* chooser, const Vector<String>& filenames) { if (Chrome* chromePointer = chrome()) - chromePointer->chooseIconForFiles(filenames, m_fileChooser); + chromePointer->chooseIconForFiles(filenames, chooser); } void RenderFileUploadControl::click() @@ -195,6 +195,7 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, int tx, int ty) { if (style()->visibility() != VISIBLE) return; + ASSERT(m_fileChooser); // Push a clip. if (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseChildBlockBackgrounds) { diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h index a5f3367..25d2639 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h @@ -63,7 +63,7 @@ private: void repaint() { RenderBlock::repaint(); } bool allowsMultipleFiles(); String acceptTypes(); - void chooseIconForFiles(const Vector<String>&); + void chooseIconForFiles(FileChooser*, const Vector<String>&); Chrome* chrome() const; int maxFilenameWidth() const; diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index b2bff0c..94aca65 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,19 @@ +2010-07-27 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Incorrect input method hints + https://bugs.webkit.org/show_bug.cgi?id=43037 + + Properly set or reset all input method hints when + activating input fields. + + * WebCoreSupport/EditorClientQt.cpp: + (WebCore::EditorClientQt::setInputMethodState): + * tests/qwebview/tst_qwebview.cpp: + (tst_QWebView::focusInputTypes): Extended unit test to verify that we + reset hints. + 2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp index 1cebef7..cdc4013 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp @@ -606,20 +606,18 @@ void EditorClientQt::setInputMethodState(bool active) inputElement = static_cast<HTMLInputElement*>(frame->document()->focusedNode()); if (inputElement) { - if (!active) { - // Setting the Qt::WA_InputMethodEnabled attribute true and Qt::ImhHiddenText flag - // for password fields. The Qt platform is responsible for determining which widget - // will receive input method events for password fields. - active = inputElement->isPasswordField(); - webPageClient->setInputMethodHint(Qt::ImhHiddenText, active); - } else { - // Set input method hints for "number", "tel", "email", and "url" input elements. - webPageClient->setInputMethodHint(Qt::ImhDialableCharactersOnly, inputElement->isTelephoneField()); - webPageClient->setInputMethodHint(Qt::ImhDigitsOnly, inputElement->isNumberField()); - webPageClient->setInputMethodHint(Qt::ImhEmailCharactersOnly, inputElement->isEmailField()); - webPageClient->setInputMethodHint(Qt::ImhUrlCharactersOnly, inputElement->isUrlField()); - webPageClient->setInputMethodHint(Qt::ImhHiddenText, inputElement->isPasswordField()); - } + // Set input method hints for "number", "tel", "email", "url" and "password" input elements. + webPageClient->setInputMethodHint(Qt::ImhDialableCharactersOnly, inputElement->isTelephoneField()); + webPageClient->setInputMethodHint(Qt::ImhDigitsOnly, inputElement->isNumberField()); + webPageClient->setInputMethodHint(Qt::ImhEmailCharactersOnly, inputElement->isEmailField()); + webPageClient->setInputMethodHint(Qt::ImhUrlCharactersOnly, inputElement->isUrlField()); + // Setting the Qt::WA_InputMethodEnabled attribute true and Qt::ImhHiddenText flag + // for password fields. The Qt platform is responsible for determining which widget + // will receive input method events for password fields. + bool isPasswordField = inputElement->isPasswordField(); + webPageClient->setInputMethodHint(Qt::ImhHiddenText, isPasswordField); + if (isPasswordField) + active = true; } #if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN) diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp index 835ad82..5dc5e41 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp @@ -267,23 +267,36 @@ void tst_QWebView::focusInputTypes() // 'password' field webView->fireMouseClick(QPoint(20, 60)); - QVERIFY(webView->inputMethodHints() & Qt::ImhHiddenText); + QVERIFY(webView->inputMethodHints() == Qt::ImhHiddenText); // 'tel' field webView->fireMouseClick(QPoint(20, 110)); - QVERIFY(webView->inputMethodHints() & Qt::ImhDialableCharactersOnly); + QVERIFY(webView->inputMethodHints() == Qt::ImhDialableCharactersOnly); // 'number' field webView->fireMouseClick(QPoint(20, 160)); - QVERIFY(webView->inputMethodHints() & Qt::ImhDigitsOnly); + QVERIFY(webView->inputMethodHints() == Qt::ImhDigitsOnly); // 'email' field webView->fireMouseClick(QPoint(20, 210)); - QVERIFY(webView->inputMethodHints() & Qt::ImhEmailCharactersOnly); + QVERIFY(webView->inputMethodHints() == Qt::ImhEmailCharactersOnly); // 'url' field webView->fireMouseClick(QPoint(20, 260)); - QVERIFY(webView->inputMethodHints() & Qt::ImhUrlCharactersOnly); + QVERIFY(webView->inputMethodHints() == Qt::ImhUrlCharactersOnly); + + // 'password' field + webView->fireMouseClick(QPoint(20, 60)); + QVERIFY(webView->inputMethodHints() == Qt::ImhHiddenText); + + // 'text' type + webView->fireMouseClick(QPoint(20, 10)); +#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) || defined(Q_OS_SYMBIAN) + QVERIFY(webView->inputMethodHints() & Qt::ImhNoAutoUppercase); + QVERIFY(webView->inputMethodHints() & Qt::ImhNoPredictiveText); +#else + QVERIFY(webView->inputMethodHints() == Qt::ImhNone); +#endif delete webView; -- cgit v0.12 From 5b142f20b2b20250f0fd8687e55ee4feb280113b Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Thu, 29 Jul 2010 16:35:30 +1000 Subject: Rename QNetworkConfiguration::bearerName() function. bearerName() -> bearerTypeName(). bearerName() is deprecated and converted into an inline function which calls bearerTypeName(). This is required to keep existing code source compatible between Qt Mobility 1.0.x and Qt 4.7. Task-number: QTBUG-12378 Reviewed-by: Alex (cherry picked from commit 613bc8eb31d8a80b43aa045ab2040b7cb7e0eadf) --- examples/network/bearercloud/cloud.cpp | 22 +++++++++++----------- examples/network/bearermonitor/sessionwidget.cpp | 4 ++-- src/network/bearer/qnetworkconfiguration.cpp | 24 ++++++++++++++++-------- src/network/bearer/qnetworkconfiguration.h | 6 +++++- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/examples/network/bearercloud/cloud.cpp b/examples/network/bearercloud/cloud.cpp index 980efbf..f45ae0d 100644 --- a/examples/network/bearercloud/cloud.cpp +++ b/examples/network/bearercloud/cloud.cpp @@ -261,9 +261,9 @@ void Cloud::stateChanged(QNetworkSession::State state) tooltip += tr("<br>Id: %1").arg(configuration.identifier()); #endif - const QString bearerName = configuration.bearerName(); - if (!bearerName.isEmpty()) - tooltip += tr("<br>Bearer: %1").arg(bearerName); + const QString bearerTypeName = configuration.bearerTypeName(); + if (!bearerTypeName.isEmpty()) + tooltip += tr("<br>Bearer: %1").arg(bearerTypeName); QString s = tr("<br>State: %1 (%2)"); switch (state) { @@ -313,17 +313,17 @@ void Cloud::stateChanged(QNetworkSession::State state) //! [1] void Cloud::newConfigurationActivated() { - const QString bearerName = configuration.bearerName(); - if (!svgCache.contains(bearerName)) { - if (bearerName == QLatin1String("WLAN")) - svgCache.insert(bearerName, new QSvgRenderer(QLatin1String(":wlan.svg"))); - else if (bearerName == QLatin1String("Ethernet")) - svgCache.insert(bearerName, new QSvgRenderer(QLatin1String(":lan.svg"))); + const QString bearerTypeName = configuration.bearerTypeName(); + if (!svgCache.contains(bearerTypeName)) { + if (bearerTypeName == QLatin1String("WLAN")) + svgCache.insert(bearerTypeName, new QSvgRenderer(QLatin1String(":wlan.svg"))); + else if (bearerTypeName == QLatin1String("Ethernet")) + svgCache.insert(bearerTypeName, new QSvgRenderer(QLatin1String(":lan.svg"))); else - svgCache.insert(bearerName, new QSvgRenderer(QLatin1String(":unknown.svg"))); + svgCache.insert(bearerTypeName, new QSvgRenderer(QLatin1String(":unknown.svg"))); } - icon->setSharedRenderer(svgCache[bearerName]); + icon->setSharedRenderer(svgCache[bearerTypeName]); if (configuration.name().isEmpty()) { text->setPlainText(tr("HIDDEN NETWORK")); diff --git a/examples/network/bearermonitor/sessionwidget.cpp b/examples/network/bearermonitor/sessionwidget.cpp index 8b5693a..ecc2a93 100644 --- a/examples/network/bearermonitor/sessionwidget.cpp +++ b/examples/network/bearermonitor/sessionwidget.cpp @@ -111,11 +111,11 @@ void SessionWidget::updateSession() killTimer(statsTimer); if (session->configuration().type() == QNetworkConfiguration::InternetAccessPoint) - bearer->setText(session->configuration().bearerName()); + bearer->setText(session->configuration().bearerTypeName()); else { QNetworkConfigurationManager mgr; QNetworkConfiguration c = mgr.configurationFromIdentifier(session->sessionProperty("ActiveConfiguration").toString()); - bearer->setText(c.bearerName()); + bearer->setText(c.bearerTypeName()); } #ifndef QT_NO_NETWORKINTERFACE diff --git a/src/network/bearer/qnetworkconfiguration.cpp b/src/network/bearer/qnetworkconfiguration.cpp index d7fceba..b939342 100644 --- a/src/network/bearer/qnetworkconfiguration.cpp +++ b/src/network/bearer/qnetworkconfiguration.cpp @@ -383,12 +383,20 @@ QList<QNetworkConfiguration> QNetworkConfiguration::children() const } /*! - Returns the type of bearer. The string is not translated and - therefore can not be shown to the user. The subsequent table presents the currently known - bearer types: + \fn QString QNetworkConfiguration::bearerName() const + \deprecated + + This function is deprecated. It is equivalent to calling bearerTypeName(). +*/ + +/*! + Returns the type of bearer used by this network configuration as a string. + + The string is not translated and therefore can not be shown to the user. The subsequent table + presents the currently known bearer types: \table - \header + \header \o Value \o Description \row @@ -403,7 +411,7 @@ QList<QNetworkConfiguration> QNetworkConfiguration::children() const \row \o 2G \o The session uses CSD, GPRS, HSCSD, EDGE or cdmaOne. - \row + \row \o CDMA2000 \o The session uses CDMA. \row @@ -420,11 +428,11 @@ QList<QNetworkConfiguration> QNetworkConfiguration::children() const \o The session uses WiMAX. \endtable - This function returns an empty string if this is an invalid configuration, - a network configuration of type \l QNetworkConfiguration::ServiceNetwork or + This function returns an empty string if this is an invalid configuration, a network + configuration of type \l QNetworkConfiguration::ServiceNetwork or \l QNetworkConfiguration::UserChoice. */ -QString QNetworkConfiguration::bearerName() const +QString QNetworkConfiguration::bearerTypeName() const { if (!isValid()) return QString(); diff --git a/src/network/bearer/qnetworkconfiguration.h b/src/network/bearer/qnetworkconfiguration.h index dce39eb..42e8b6a 100644 --- a/src/network/bearer/qnetworkconfiguration.h +++ b/src/network/bearer/qnetworkconfiguration.h @@ -106,7 +106,11 @@ public: StateFlags state() const; Type type() const; Purpose purpose() const; - QString bearerName() const; + + // Required to maintain source compatibility with Qt Mobility. + QT_DEPRECATED inline QString bearerName() const { return bearerTypeName(); } + QString bearerTypeName() const; + QString identifier() const; bool isRoamingAvailable() const; QList<QNetworkConfiguration> children() const; -- cgit v0.12 From 803f92115a349798aaaf304221c841a7ff6c9e93 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Thu, 29 Jul 2010 16:39:05 +1000 Subject: Use an enum to return the bearer type of a network configuration. Task-number: QTBUG-12378 Reviewed-by: Alex --- examples/network/bearercloud/cloud.cpp | 28 ++++--- src/network/bearer/qnetworkconfigmanager_p.cpp | 24 +++--- src/network/bearer/qnetworkconfiguration.cpp | 97 ++++++++++++++++++---- src/network/bearer/qnetworkconfiguration.h | 13 +++ src/network/bearer/qnetworkconfiguration_p.h | 9 +- src/plugins/bearer/corewlan/qcorewlanengine.h | 2 - src/plugins/bearer/corewlan/qcorewlanengine.mm | 6 +- src/plugins/bearer/generic/qgenericengine.cpp | 28 +++---- src/plugins/bearer/generic/qgenericengine.h | 2 - src/plugins/bearer/icd/qicdengine.cpp | 18 ++-- src/plugins/bearer/icd/qicdengine.h | 14 +++- src/plugins/bearer/icd/qnetworksession_impl.cpp | 3 + .../bearer/nativewifi/qnativewifiengine.cpp | 7 +- src/plugins/bearer/nativewifi/qnativewifiengine.h | 2 - .../networkmanager/qnetworkmanagerengine.cpp | 34 ++------ .../bearer/networkmanager/qnetworkmanagerengine.h | 2 - src/plugins/bearer/nla/qnlaengine.cpp | 47 +++++------ src/plugins/bearer/nla/qnlaengine.h | 2 - src/plugins/bearer/symbian/symbianengine.cpp | 84 +++++++------------ src/plugins/bearer/symbian/symbianengine.h | 16 ---- 20 files changed, 228 insertions(+), 210 deletions(-) diff --git a/examples/network/bearercloud/cloud.cpp b/examples/network/bearercloud/cloud.cpp index f45ae0d..8deaab3 100644 --- a/examples/network/bearercloud/cloud.cpp +++ b/examples/network/bearercloud/cloud.cpp @@ -53,7 +53,7 @@ #include <math.h> -static QMap<QString, QSvgRenderer *> svgCache; +static QMap<QNetworkConfiguration::BearerType, QSvgRenderer *> svgCache; //! [0] Cloud::Cloud(const QNetworkConfiguration &config, QGraphicsItem *parent) @@ -313,17 +313,25 @@ void Cloud::stateChanged(QNetworkSession::State state) //! [1] void Cloud::newConfigurationActivated() { - const QString bearerTypeName = configuration.bearerTypeName(); - if (!svgCache.contains(bearerTypeName)) { - if (bearerTypeName == QLatin1String("WLAN")) - svgCache.insert(bearerTypeName, new QSvgRenderer(QLatin1String(":wlan.svg"))); - else if (bearerTypeName == QLatin1String("Ethernet")) - svgCache.insert(bearerTypeName, new QSvgRenderer(QLatin1String(":lan.svg"))); - else - svgCache.insert(bearerTypeName, new QSvgRenderer(QLatin1String(":unknown.svg"))); + QNetworkConfiguration::BearerType bearerType = configuration.bearerType(); + if (!svgCache.contains(bearerType)) { + QSvgRenderer *renderer = 0; + switch (bearerType) { + case QNetworkConfiguration::BearerWLAN: + renderer = new QSvgRenderer(QLatin1String(":wlan.svg")); + break; + case QNetworkConfiguration::BearerEthernet: + renderer = new QSvgRenderer(QLatin1String(":lan.svg")); + break; + default: + renderer = new QSvgRenderer(QLatin1String(":unknown.svg")); + } + + if (renderer) + svgCache.insert(bearerType, renderer); } - icon->setSharedRenderer(svgCache[bearerTypeName]); + icon->setSharedRenderer(svgCache[bearerType]); if (configuration.name().isEmpty()) { text->setPlainText(tr("HIDDEN NETWORK")); diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index 5d4274f..c4f7c00 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -150,25 +150,29 @@ QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration( end = engine->accessPointConfigurations.end(); it != end; ++it) { QNetworkConfigurationPrivatePointer ptr = it.value(); - const QString bearerName = ptr->bearerName(); QMutexLocker configLocker(&ptr->mutex); + QNetworkConfiguration::BearerType bearerType = ptr->bearerType; if ((ptr->state & QNetworkConfiguration::Discovered) == QNetworkConfiguration::Discovered) { if (!defaultConfiguration) { defaultConfiguration = ptr; } else { + QMutexLocker defaultConfigLocker(&defaultConfiguration->mutex); + if (defaultConfiguration->state == ptr->state) { - if (defaultConfiguration->bearerName() == QLatin1String("Ethernet")) { + switch (defaultConfiguration->bearerType) { + case QNetworkConfiguration::BearerEthernet: // do nothing - } else if (defaultConfiguration->bearerName() == QLatin1String("WLAN")) { - // ethernet beats wlan - if (bearerName == QLatin1String("Ethernet")) - defaultConfiguration = ptr; - } else { - // ethernet and wlan beats other - if (bearerName == QLatin1String("Ethernet") || - bearerName == QLatin1String("WLAN")) { + break; + case QNetworkConfiguration::BearerWLAN: + // Ethernet beats WLAN + defaultConfiguration = ptr; + break; + default: + // Ethernet and WLAN beats other + if (bearerType == QNetworkConfiguration::BearerEthernet || + bearerType == QNetworkConfiguration::BearerWLAN) { defaultConfiguration = ptr; } } diff --git a/src/network/bearer/qnetworkconfiguration.cpp b/src/network/bearer/qnetworkconfiguration.cpp index b939342..b645916 100644 --- a/src/network/bearer/qnetworkconfiguration.cpp +++ b/src/network/bearer/qnetworkconfiguration.cpp @@ -183,6 +183,23 @@ QT_BEGIN_NAMESPACE */ /*! + \enum QNetworkConfiguration::BearerType + + Specifies the type of bearer used by a configuration. + + \value BearerUnknown The type of bearer is unknown or unspecified. The bearerTypeName() + function may return additional information. + \value BearerEthernet The configuration is for an Ethernet interfaces. + \value BearerWLAN The configuration is for a Wireless LAN interface. + \value Bearer2G The configuration is for a CSD, GPRS, HSCSD, EDGE or cdmaOne interface. + \value BearerCDMA2000 The configuration is for CDMA interface. + \value BearerWCDMA The configuration is for W-CDMA/UMTS interface. + \value BearerHSPA The configuration is for High Speed Packet Access (HSPA) interface. + \value BearerBluetooth The configuration is for a Bluetooth interface. + \value BearerWiMAX The configuration is for a WiMAX interface. +*/ + +/*! Constructs an invalid configuration object. \sa isValid() @@ -386,58 +403,110 @@ QList<QNetworkConfiguration> QNetworkConfiguration::children() const \fn QString QNetworkConfiguration::bearerName() const \deprecated - This function is deprecated. It is equivalent to calling bearerTypeName(). + This function is deprecated. It is equivalent to calling bearerTypeName(), however + bearerType() should be used in preference. */ /*! + Returns the type of bearer used by this network configuration. + + If the bearer type is \l {QNetworkConfiguration::BearerUnknown}{unknown} the bearerTypeName() + function can be used to retrieve a textural type name for the bearer. + + An invalid network configuration always returns the BearerUnknown value. +*/ +QNetworkConfiguration::BearerType QNetworkConfiguration::bearerType() const +{ + if (!isValid()) + return BearerUnknown; + + QMutexLocker locker(&d->mutex); + + return d->bearerType; +} + +/*! Returns the type of bearer used by this network configuration as a string. The string is not translated and therefore can not be shown to the user. The subsequent table - presents the currently known bearer types: + shows the fixed mappings between BearerType and the bearer type name for known types. If the + BearerType is unknown this function may return additional information if it is available; + otherwise an empty string will be returned. \table \header + \o BearerType \o Value - \o Description \row - \o Unknown - \o The session is based on an unknown or unspecified bearer type. + \o BearerUnknown + \o + \o The session is based on an unknown or unspecified bearer type. The value of the + string returned describes the bearer type. \row + \o BearerEthernet \o Ethernet - \o The session is based on Ethernet. \row + \o BearerWLAN \o WLAN - \o The session is based on Wireless LAN. \row + \o Bearer2G \o 2G - \o The session uses CSD, GPRS, HSCSD, EDGE or cdmaOne. \row + \o BearerCDMA2000 \o CDMA2000 - \o The session uses CDMA. \row + \o BearerWCDMA \o WCDMA - \o The session uses W-CDMA/UMTS. \row + \o BearerHSPA \o HSPA - \o The session uses High Speed Packet Access. \row + \o BearerBluetooth \o Bluetooth - \o The session uses Bluetooth. \row + \o BearerWiMAX \o WiMAX - \o The session uses WiMAX. \endtable This function returns an empty string if this is an invalid configuration, a network configuration of type \l QNetworkConfiguration::ServiceNetwork or \l QNetworkConfiguration::UserChoice. + + \sa bearerType() */ QString QNetworkConfiguration::bearerTypeName() const { if (!isValid()) return QString(); - return d->bearerName(); + QMutexLocker locker(&d->mutex); + + if (d->type == QNetworkConfiguration::ServiceNetwork || + d->type == QNetworkConfiguration::UserChoice) + return QString(); + + switch (d->bearerType) { + case BearerUnknown: + return d->bearerTypeName(); + case BearerEthernet: + return QLatin1String("Ethernet"); + case BearerWLAN: + return QLatin1String("WLAN"); + case Bearer2G: + return QLatin1String("2G"); + case BearerCDMA2000: + return QLatin1String("CDMA2000"); + case BearerWCDMA: + return QLatin1String("WCDMA"); + case BearerHSPA: + return QLatin1String("HSPA"); + case BearerBluetooth: + return QLatin1String("Bluetooth"); + case BearerWiMAX: + return QLatin1String("WiMAX"); + } + + return QString(); } QT_END_NAMESPACE diff --git a/src/network/bearer/qnetworkconfiguration.h b/src/network/bearer/qnetworkconfiguration.h index 42e8b6a..d9d36fd 100644 --- a/src/network/bearer/qnetworkconfiguration.h +++ b/src/network/bearer/qnetworkconfiguration.h @@ -103,12 +103,25 @@ public: Q_DECLARE_FLAGS(StateFlags, StateFlag) + enum BearerType { + BearerUnknown, + BearerEthernet, + BearerWLAN, + Bearer2G, + BearerCDMA2000, + BearerWCDMA, + BearerHSPA, + BearerBluetooth, + BearerWiMAX + }; + StateFlags state() const; Type type() const; Purpose purpose() const; // Required to maintain source compatibility with Qt Mobility. QT_DEPRECATED inline QString bearerName() const { return bearerTypeName(); } + BearerType bearerType() const; QString bearerTypeName() const; QString identifier() const; diff --git a/src/network/bearer/qnetworkconfiguration_p.h b/src/network/bearer/qnetworkconfiguration_p.h index 966dfb2..0fc6ee9 100644 --- a/src/network/bearer/qnetworkconfiguration_p.h +++ b/src/network/bearer/qnetworkconfiguration_p.h @@ -68,6 +68,7 @@ public: QNetworkConfigurationPrivate () : mutex(QMutex::Recursive), type(QNetworkConfiguration::Invalid), purpose(QNetworkConfiguration::UnknownPurpose), + bearerType(QNetworkConfiguration::BearerUnknown), isValid(false), roamingSupported(false) { } @@ -78,24 +79,22 @@ public: serviceNetworkMembers.clear(); } - virtual QString bearerName() const + virtual QString bearerTypeName() const { - QMutexLocker locker(&mutex); - - return bearer; + return QString(); } QMap<unsigned int, QNetworkConfigurationPrivatePointer> serviceNetworkMembers; mutable QMutex mutex; - QString bearer; QString name; QString id; QNetworkConfiguration::StateFlags state; QNetworkConfiguration::Type type; QNetworkConfiguration::Purpose purpose; + QNetworkConfiguration::BearerType bearerType; bool isValid; bool roamingSupported; diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.h b/src/plugins/bearer/corewlan/qcorewlanengine.h index 4d90648..56da66a 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.h +++ b/src/plugins/bearer/corewlan/qcorewlanengine.h @@ -68,8 +68,6 @@ public: QString getInterfaceFromId(const QString &id); bool hasIdentifier(const QString &id); - QString bearerName(const QString &id); - void connectToId(const QString &id); void disconnectFromId(const QString &id); diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm index 6ba9504..131f36d 100644 --- a/src/plugins/bearer/corewlan/qcorewlanengine.mm +++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm @@ -264,7 +264,7 @@ QStringList QScanThread::foundNetwork(const QString &id, const QString &name, co ptr->id = id; ptr->state = state; ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearer = QLatin1String("WLAN"); + ptr->bearerType = QNetworkConfiguration::BearerWLAN; ptr->purpose = purpose; fetchedConfigurations.append( ptr); @@ -789,8 +789,8 @@ void QCoreWlanEngine::networksChanged() changed = true; } - if (ptr->bearer != cpPriv->bearer) { - ptr->bearer = cpPriv->bearer; + if (ptr->bearerType != cpPriv->bearerType) { + ptr->bearerType = cpPriv->bearerType; changed = true; } diff --git a/src/plugins/bearer/generic/qgenericengine.cpp b/src/plugins/bearer/generic/qgenericengine.cpp index 652fe4a..fad3ae8 100644 --- a/src/plugins/bearer/generic/qgenericengine.cpp +++ b/src/plugins/bearer/generic/qgenericengine.cpp @@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_NETWORKINTERFACE -static QString qGetInterfaceType(const QString &interface) +static QNetworkConfiguration::BearerType qGetInterfaceType(const QString &interface) { #ifdef Q_OS_WIN32 unsigned long oid; @@ -78,10 +78,10 @@ static QString qGetInterfaceType(const QString &interface) NDIS_MEDIUM medium; NDIS_PHYSICAL_MEDIUM physicalMedium; - HANDLE handle = CreateFile((TCHAR *)QString("\\\\.\\%1").arg(interface).utf16(), 0, + HANDLE handle = CreateFile((TCHAR *)QString::fromLatin1("\\\\.\\%1").arg(interface).utf16(), 0, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if (handle == INVALID_HANDLE_VALUE) - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; oid = OID_GEN_MEDIA_SUPPORTED; bytesWritten = 0; @@ -89,7 +89,7 @@ static QString qGetInterfaceType(const QString &interface) &medium, sizeof(medium), &bytesWritten, 0); if (!result) { CloseHandle(handle); - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; } oid = OID_GEN_PHYSICAL_MEDIUM; @@ -100,9 +100,9 @@ static QString qGetInterfaceType(const QString &interface) CloseHandle(handle); if (medium == NdisMedium802_3) - return QLatin1String("Ethernet"); + return QNetworkConfiguration::BearerEthernet; else - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; } CloseHandle(handle); @@ -110,16 +110,16 @@ static QString qGetInterfaceType(const QString &interface) if (medium == NdisMedium802_3) { switch (physicalMedium) { case NdisPhysicalMediumWirelessLan: - return QLatin1String("WLAN"); + return QNetworkConfiguration::BearerWLAN; case NdisPhysicalMediumBluetooth: - return QLatin1String("Bluetooth"); + return QNetworkConfiguration::BearerBluetooth; case NdisPhysicalMediumWiMax: - return QLatin1String("WiMAX"); + return QNetworkConfiguration::BearerWiMAX; default: #ifdef BEARER_MANAGEMENT_DEBUG qDebug() << "Physical Medium" << physicalMedium; #endif - return QLatin1String("Ethernet"); + return QNetworkConfiguration::BearerEthernet; } } @@ -135,12 +135,12 @@ static QString qGetInterfaceType(const QString &interface) close(sock); if (result >= 0 && request.ifr_hwaddr.sa_family == ARPHRD_ETHER) - return QLatin1String("Ethernet"); + return QNetworkConfiguration::BearerEthernet; #else Q_UNUSED(interface); #endif - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; } #endif @@ -214,7 +214,7 @@ void QGenericEngine::doRequestUpdate() continue; // ignore WLAN interface handled in separate engine - if (qGetInterfaceType(interface.name()) == QLatin1String("WLAN")) + if (qGetInterfaceType(interface.name()) == QNetworkConfiguration::BearerWLAN) continue; uint identifier; @@ -277,7 +277,7 @@ void QGenericEngine::doRequestUpdate() ptr->id = id; ptr->state = state; ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearer = qGetInterfaceType(interface.name()); + ptr->bearerType = qGetInterfaceType(interface.name()); accessPointConfigurations.insert(id, ptr); configurationInterface.insert(id, interface.name()); diff --git a/src/plugins/bearer/generic/qgenericengine.h b/src/plugins/bearer/generic/qgenericengine.h index cdbbc9d..021b35b 100644 --- a/src/plugins/bearer/generic/qgenericengine.h +++ b/src/plugins/bearer/generic/qgenericengine.h @@ -65,8 +65,6 @@ public: QString getInterfaceFromId(const QString &id); bool hasIdentifier(const QString &id); - QString bearerName(const QString &id); - void connectToId(const QString &id); void disconnectFromId(const QString &id); diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp index 0083380..6060a09 100644 --- a/src/plugins/bearer/icd/qicdengine.cpp +++ b/src/plugins/bearer/icd/qicdengine.cpp @@ -60,16 +60,11 @@ IcdNetworkConfigurationPrivate::~IcdNetworkConfigurationPrivate() { } -QString IcdNetworkConfigurationPrivate::bearerName() const +QString IcdNetworkConfigurationPrivate::bearerTypeName() const { - if (iap_type == QLatin1String("WLAN_INFRA") || - iap_type == QLatin1String("WLAN_ADHOC")) { - return QLatin1String("WLAN"); - } else if (iap_type == QLatin1String("GPRS")) { - return QLatin1String("HSPA"); - } else { - return iap_type; - } + QMutexLocker locker(&mutex); + + return iap_type; } /* The IapAddTimer is a helper class that makes sure we update @@ -400,6 +395,7 @@ void QIcdEngine::addConfiguration(QString& iap_id) ptr->mutex.lock(); ptr->id = iap_id; toIcdConfig(ptr)->iap_type = iap_type; + ptr->bearerType = bearerTypeFromIapType(iap_type); toIcdConfig(ptr)->network_attrs = getNetworkAttrs(true, iap_id, iap_type, QString()); toIcdConfig(ptr)->network_id = ssid; toIcdConfig(ptr)->service_id = saved_iap.value("service_id").toString(); @@ -424,6 +420,7 @@ void QIcdEngine::addConfiguration(QString& iap_id) cpPriv->isValid = true; cpPriv->id = iap_id; cpPriv->iap_type = iap_type; + cpPriv->bearerType = bearerTypeFromIapType(iap_type); cpPriv->network_attrs = getNetworkAttrs(true, iap_id, iap_type, QString()); cpPriv->service_id = saved_iap.value("service_id").toString(); cpPriv->service_type = saved_iap.value("service_type").toString(); @@ -480,6 +477,7 @@ void QIcdEngine::addConfiguration(QString& iap_id) ptr->isValid = true; if (toIcdConfig(ptr)->iap_type != iap_type) { toIcdConfig(ptr)->iap_type = iap_type; + ptr->bearerType = bearerTypeFromIapType(iap_type); update_needed = true; } if (iap_type.startsWith(QLatin1String("WLAN"))) { @@ -580,6 +578,7 @@ void QIcdEngine::doRequestUpdate(QList<Maemo::IcdScanResult> scanned) cpPriv->network_id = ssid; cpPriv->network_attrs = getNetworkAttrs(true, iap_id, iap_type, QString()); cpPriv->iap_type = iap_type; + cpPriv->bearerType = bearerTypeFromIapType(iap_type); cpPriv->service_id = saved_ap.value("service_id").toString(); cpPriv->service_type = saved_ap.value("service_type").toString(); cpPriv->type = QNetworkConfiguration::InternetAccessPoint; @@ -688,6 +687,7 @@ rescan_list: cpPriv->id = scanned_ssid.data(); // Note: id is now ssid, it should be set to IAP id if the IAP is saved cpPriv->network_id = scanned_ssid; cpPriv->iap_type = ap.scan.network_type; + cpPriv->bearerType = bearerTypeFromIapType(cpPriv->iap_type); cpPriv->network_attrs = ap.scan.network_attrs; cpPriv->service_id = ap.scan.service_id; cpPriv->service_type = ap.scan.service_type; diff --git a/src/plugins/bearer/icd/qicdengine.h b/src/plugins/bearer/icd/qicdengine.h index 1b291eb..16dc979 100644 --- a/src/plugins/bearer/icd/qicdengine.h +++ b/src/plugins/bearer/icd/qicdengine.h @@ -54,13 +54,25 @@ class QNetworkConfigurationPrivate; class IapMonitor; class QDBusInterface; +inline QNetworkConfiguration::BearerType bearerTypeFromIapType(const QString &iapType) +{ + if (iapType == QLatin1String("WLAN_INFRA") || + iapType == QLatin1String("WLAN_ADHOC")) { + return QNetworkConfiguration::BearerWLAN; + } else if (iapType == QLatin1String("GPRS")) { + return QNetworkConfiguration::BearerHSPA; + } else { + return QNetworkConfiguration::BearerUnknown; + } +} + class IcdNetworkConfigurationPrivate : public QNetworkConfigurationPrivate { public: IcdNetworkConfigurationPrivate(); ~IcdNetworkConfigurationPrivate(); - QString bearerName() const; + virtual QString bearerTypeName() const; // In Maemo the id field (defined in QNetworkConfigurationPrivate) // is the IAP id (which typically is UUID) diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp index 7af9962..cafcfca 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.cpp +++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp @@ -318,6 +318,7 @@ QNetworkConfiguration& QNetworkSessionPrivateImpl::copyConfig(QNetworkConfigurat cpPriv->purpose = fromPriv->purpose; cpPriv->network_id = fromPriv->network_id; cpPriv->iap_type = fromPriv->iap_type; + cpPriv->bearerType = fromPriv->bearerType; cpPriv->network_attrs = fromPriv->network_attrs; cpPriv->service_type = fromPriv->service_type; cpPriv->service_id = fromPriv->service_id; @@ -443,6 +444,7 @@ void QNetworkSessionPrivateImpl::syncStateWithInterface() ptr->id = toIcdConfig(ptr)->network_id; toIcdConfig(ptr)->network_attrs = state_results.first().params.network_attrs; toIcdConfig(ptr)->iap_type = state_results.first().params.network_type; + ptr->bearerType = bearerTypeFromIapType(toIcdConfig(ptr)->iap_type); toIcdConfig(ptr)->service_type = state_results.first().params.service_type; toIcdConfig(ptr)->service_id = state_results.first().params.service_id; toIcdConfig(ptr)->service_attrs = state_results.first().params.service_attrs; @@ -816,6 +818,7 @@ void QNetworkSessionPrivateImpl::stateChange(const QDBusMessage& rep) icdConfig->name = name; icdConfig->iap_type = rep.arguments().at(3).toString(); // connect_result.connect.network_type; + icdConfig->bearerType = bearerTypeFromIapType(icdConfig->iap_type); icdConfig->isValid = true; icdConfig->state = QNetworkConfiguration::Active; icdConfig->type = QNetworkConfiguration::InternetAccessPoint; diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp index 1a55402..ba8297e 100644 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp +++ b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp @@ -206,7 +206,7 @@ void QNativeWifiEngine::scanComplete() ptr->id = id; ptr->state = state; ptr->type = QNetworkConfiguration::InternetAccessPoint; - ptr->bearer = QLatin1String("WLAN"); + ptr->bearerType = QNetworkConfiguration::BearerWLAN; accessPointConfigurations.insert(id, ptr); @@ -350,11 +350,6 @@ bool QNativeWifiEngine::hasIdentifier(const QString &id) return false; } -/*QString QNativeWifiEngine::bearerName(const QString &) -{ - return QLatin1String("WLAN"); -}*/ - void QNativeWifiEngine::connectToId(const QString &id) { QMutexLocker locker(&mutex); diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.h b/src/plugins/bearer/nativewifi/qnativewifiengine.h index 0e9576b..dccf2e2 100644 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.h +++ b/src/plugins/bearer/nativewifi/qnativewifiengine.h @@ -75,8 +75,6 @@ public: QString getInterfaceFromId(const QString &id); bool hasIdentifier(const QString &id); - //QString bearerName(const QString &id); - void connectToId(const QString &id); void disconnectFromId(const QString &id); diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp index 3ebc356..f3f693b 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp @@ -181,30 +181,6 @@ bool QNetworkManagerEngine::hasIdentifier(const QString &id) return false; } -QString QNetworkManagerEngine::bearerName(const QString &id) -{ - QMutexLocker locker(&mutex); - - QNetworkManagerSettingsConnection *connection = connectionFromId(id); - - if (!connection) - return QString(); - - QNmSettingsMap map = connection->getSettings(); - const QString connectionType = map.value("connection").value("type").toString(); - - if (connectionType == "802-3-ethernet") - return QLatin1String("Ethernet"); - else if (connectionType == "802-11-wireless") - return QLatin1String("WLAN"); - else if (connectionType == "gsm") - return QLatin1String("2G"); - else if (connectionType == "cdma") - return QLatin1String("CDMA2000"); - else - return QString(); -} - void QNetworkManagerEngine::connectToId(const QString &id) { QMutexLocker locker(&mutex); @@ -611,7 +587,7 @@ void QNetworkManagerEngine::newAccessPoint(const QString &path, const QDBusObjec ptr->purpose = QNetworkConfiguration::PublicPurpose; } ptr->state = QNetworkConfiguration::Undefined; - ptr->bearer = QLatin1String("WLAN"); + ptr->bearerType = QNetworkConfiguration::BearerWLAN; accessPointConfigurations.insert(ptr->id, ptr); @@ -724,7 +700,7 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri const QString connectionType = map.value("connection").value("type").toString(); if (connectionType == QLatin1String("802-3-ethernet")) { - cpPriv->bearer = QLatin1String("Ethernet"); + cpPriv->bearerType = QNetworkConfiguration::BearerEthernet; cpPriv->purpose = QNetworkConfiguration::PublicPurpose; foreach (const QDBusObjectPath &devicePath, interface->getDevices()) { @@ -739,7 +715,7 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri } } } else if (connectionType == QLatin1String("802-11-wireless")) { - cpPriv->bearer = QLatin1String("WLAN"); + cpPriv->bearerType = QNetworkConfiguration::BearerWLAN; const QString connectionSsid = map.value("802-11-wireless").value("ssid").toString(); const QString connectionSecurity = map.value("802-11-wireless").value("security").toString(); @@ -767,9 +743,9 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri } } } else if (connectionType == "gsm") { - cpPriv->bearer = QLatin1String("2G"); + cpPriv->bearerType = QNetworkConfiguration::Bearer2G; } else if (connectionType == "cdma") { - cpPriv->bearer = QLatin1String("CDMA2000"); + cpPriv->bearerType = QNetworkConfiguration::BearerCDMA2000; } return cpPriv; diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h index 8e95a2c..ffb8395 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h @@ -78,8 +78,6 @@ public: QString getInterfaceFromId(const QString &id); bool hasIdentifier(const QString &id); - QString bearerName(const QString &id); - void connectToId(const QString &id); void disconnectFromId(const QString &id); diff --git a/src/plugins/bearer/nla/qnlaengine.cpp b/src/plugins/bearer/nla/qnlaengine.cpp index 9ab9924..fd50099 100644 --- a/src/plugins/bearer/nla/qnlaengine.cpp +++ b/src/plugins/bearer/nla/qnlaengine.cpp @@ -119,7 +119,7 @@ static void printBlob(NLA_BLOB *blob) } #endif -static QString qGetInterfaceType(const QString &interface) +static QNetworkConfiguration::BearerType qGetInterfaceType(const QString &interface) { #ifdef Q_OS_WINCE Q_UNUSED(interface) @@ -130,10 +130,10 @@ static QString qGetInterfaceType(const QString &interface) NDIS_MEDIUM medium; NDIS_PHYSICAL_MEDIUM physicalMedium; - HANDLE handle = CreateFile((TCHAR *)QString(QLatin1String("\\\\.\\%1")).arg(interface).utf16(), - 0, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); + HANDLE handle = CreateFile((TCHAR *)QString::fromLatin1("\\\\.\\%1").arg(interface).utf16(), 0, + FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if (handle == INVALID_HANDLE_VALUE) - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; oid = OID_GEN_MEDIA_SUPPORTED; bytesWritten = 0; @@ -141,7 +141,7 @@ static QString qGetInterfaceType(const QString &interface) &medium, sizeof(medium), &bytesWritten, 0); if (!result) { CloseHandle(handle); - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; } oid = OID_GEN_PHYSICAL_MEDIUM; @@ -152,9 +152,9 @@ static QString qGetInterfaceType(const QString &interface) CloseHandle(handle); if (medium == NdisMedium802_3) - return QLatin1String("Ethernet"); + return QNetworkConfiguration::BearerEthernet; else - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; } CloseHandle(handle); @@ -162,16 +162,16 @@ static QString qGetInterfaceType(const QString &interface) if (medium == NdisMedium802_3) { switch (physicalMedium) { case NdisPhysicalMediumWirelessLan: - return QLatin1String("WLAN"); + return QNetworkConfiguration::BearerWLAN; case NdisPhysicalMediumBluetooth: - return QLatin1String("Bluetooth"); + return QNetworkConfiguration::BearerBluetooth; case NdisPhysicalMediumWiMax: - return QLatin1String("WiMAX"); + return QNetworkConfiguration::BearerWiMAX; default: #ifdef BEARER_MANAGEMENT_DEBUG qDebug() << "Physical Medium" << physicalMedium; #endif - return QLatin1String("Ethernet"); + return QNetworkConfiguration::BearerEthernet; } } @@ -181,7 +181,7 @@ static QString qGetInterfaceType(const QString &interface) #endif - return QLatin1String("Unknown"); + return QNetworkConfiguration::BearerUnknown; } class QNlaThread : public QThread @@ -374,10 +374,9 @@ DWORD QNlaThread::parseBlob(NLA_BLOB *blob, QNetworkConfigurationPrivate *cpPriv #endif break; case NLA_CONNECTIVITY: - if (blob->data.connectivity.internet == NLA_INTERNET_YES) - cpPriv->internet = true; - else - cpPriv->internet = false; +#ifdef BEARER_MANAGEMENT_DEBUG + qDebug("%s: unhandled header type NLA_CONNECTIVITY", __FUNCTION__); +#endif break; case NLA_ICS: #ifdef BEARER_MANAGEMENT_DEBUG @@ -438,8 +437,10 @@ QNetworkConfigurationPrivate *QNlaThread::parseQuerySet(const WSAQUERYSET *query } while (offset != 0 && offset < querySet->lpBlob->cbSize); } - if (QNlaEngine *engine = qobject_cast<QNlaEngine *>(parent())) - cpPriv->bearer = engine->bearerName(cpPriv->id); + if (QNlaEngine *engine = qobject_cast<QNlaEngine *>(parent())) { + const QString interface = engine->getInterfaceFromId(cpPriv->id); + cpPriv->bearerType = qGetInterfaceType(interface); + } return cpPriv; } @@ -586,16 +587,6 @@ bool QNlaEngine::hasIdentifier(const QString &id) return configurationInterface.contains(id.toUInt()); } -QString QNlaEngine::bearerName(const QString &id) -{ - QString interface = getInterfaceFromId(id); - - if (interface.isEmpty()) - return QString(); - - return qGetInterfaceType(interface); -} - void QNlaEngine::connectToId(const QString &id) { emit connectionError(id, OperationNotSupported); diff --git a/src/plugins/bearer/nla/qnlaengine.h b/src/plugins/bearer/nla/qnlaengine.h index 1d49464..69f54c9 100644 --- a/src/plugins/bearer/nla/qnlaengine.h +++ b/src/plugins/bearer/nla/qnlaengine.h @@ -85,8 +85,6 @@ public: QString getInterfaceFromId(const QString &id); bool hasIdentifier(const QString &id); - QString bearerName(const QString &id); - void connectToId(const QString &id); void disconnectFromId(const QString &id); diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 4bd6d2f..078e8dd 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -75,7 +75,7 @@ QT_BEGIN_NAMESPACE static const int KUserChoiceIAPId = 0; SymbianNetworkConfigurationPrivate::SymbianNetworkConfigurationPrivate() -: bearer(BearerUnknown), numericId(0), connectionId(0) +: numericId(0), connectionId(0) { } @@ -83,32 +83,6 @@ SymbianNetworkConfigurationPrivate::~SymbianNetworkConfigurationPrivate() { } -QString SymbianNetworkConfigurationPrivate::bearerName() const -{ - QMutexLocker locker(&mutex); - - switch (bearer) { - case BearerEthernet: - return QLatin1String("Ethernet"); - case BearerWLAN: - return QLatin1String("WLAN"); - case Bearer2G: - return QLatin1String("2G"); - case BearerCDMA2000: - return QLatin1String("CDMA2000"); - case BearerWCDMA: - return QLatin1String("WCDMA"); - case BearerHSPA: - return QLatin1String("HSPA"); - case BearerBluetooth: - return QLatin1String("Bluetooth"); - case BearerWiMAX: - return QLatin1String("WiMAX"); - default: - return QString(); - } -} - SymbianEngine::SymbianEngine(QObject *parent) : QBearerEngine(parent), CActive(CActive::EPriorityHigh), iFirstUpdate(true), iInitOk(true), iUpdatePending(false) @@ -146,7 +120,7 @@ void SymbianEngine::initialize() SymbianNetworkConfigurationPrivate *cpPriv = new SymbianNetworkConfigurationPrivate; cpPriv->name = "UserChoice"; - cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerUnknown; + cpPriv->bearerType = QNetworkConfiguration::BearerUnknown; cpPriv->state = QNetworkConfiguration::Discovered; cpPriv->isValid = true; cpPriv->id = QString::number(qHash(KUserChoiceIAPId)); @@ -517,25 +491,25 @@ SymbianNetworkConfigurationPrivate *SymbianEngine::configFromConnectionMethodL( TUint32 bearerId = connectionMethod.GetIntAttributeL(CMManager::ECmCommsDBBearerType); switch (bearerId) { case KCommDbBearerCSD: - cpPriv->bearer = SymbianNetworkConfigurationPrivate::Bearer2G; + cpPriv->bearerType = QNetworkConfiguration::Bearer2G; break; case KCommDbBearerWcdma: - cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerWCDMA; + cpPriv->bearerType = QNetworkConfiguration::BearerWCDMA; break; case KCommDbBearerLAN: - cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerEthernet; + cpPriv->bearerType = QNetworkConfiguration::BearerEthernet; break; case KCommDbBearerVirtual: - cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerUnknown; + cpPriv->bearerType = QNetworkConfiguration::BearerUnknown; break; case KCommDbBearerPAN: - cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerUnknown; + cpPriv->bearerType = QNetworkConfiguration::BearerUnknown; break; case KCommDbBearerWLAN: - cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerWLAN; + cpPriv->bearerType = QNetworkConfiguration::BearerWLAN; break; default: - cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerUnknown; + cpPriv->bearerType = QNetworkConfiguration::BearerUnknown; break; } @@ -619,28 +593,28 @@ void SymbianEngine::readNetworkConfigurationValuesFromCommsDbL( apNetworkConfiguration->roamingSupported = false; switch (pAPItem->BearerTypeL()) { case EApBearerTypeCSD: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::Bearer2G; + apNetworkConfiguration->bearerType = QNetworkConfiguration::Bearer2G; break; case EApBearerTypeGPRS: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::Bearer2G; + apNetworkConfiguration->bearerType = QNetworkConfiguration::Bearer2G; break; case EApBearerTypeHSCSD: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::BearerHSPA; + apNetworkConfiguration->bearerType = QNetworkConfiguration::BearerHSPA; break; case EApBearerTypeCDMA: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::BearerCDMA2000; + apNetworkConfiguration->bearerType = QNetworkConfiguration::BearerCDMA2000; break; case EApBearerTypeWLAN: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::BearerWLAN; + apNetworkConfiguration->bearerType = QNetworkConfiguration::BearerWLAN; break; case EApBearerTypeLAN: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::BearerEthernet; + apNetworkConfiguration->bearerType = QNetworkConfiguration::BearerEthernet; break; case EApBearerTypeLANModem: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::BearerEthernet; + apNetworkConfiguration->bearerType = QNetworkConfiguration::BearerEthernet; break; default: - apNetworkConfiguration->bearer = SymbianNetworkConfigurationPrivate::BearerUnknown; + apNetworkConfiguration->bearerType = QNetworkConfiguration::BearerUnknown; break; } @@ -870,38 +844,38 @@ void SymbianEngine::updateMobileBearerToConfigs(TConnMonBearerInfo bearerInfo) SymbianNetworkConfigurationPrivate *p = toSymbianConfig(ptr); - if (p->bearer >= SymbianNetworkConfigurationPrivate::Bearer2G && - p->bearer <= SymbianNetworkConfigurationPrivate::BearerHSPA) { + if (p->bearerType >= QNetworkConfiguration::Bearer2G && + p->bearerType <= QNetworkConfiguration::BearerHSPA) { switch (bearerInfo) { case EBearerInfoCSD: - p->bearer = SymbianNetworkConfigurationPrivate::Bearer2G; + p->bearerType = QNetworkConfiguration::Bearer2G; break; case EBearerInfoWCDMA: - p->bearer = SymbianNetworkConfigurationPrivate::BearerWCDMA; + p->bearerType = QNetworkConfiguration::BearerWCDMA; break; case EBearerInfoCDMA2000: - p->bearer = SymbianNetworkConfigurationPrivate::BearerCDMA2000; + p->bearerType = QNetworkConfiguration::BearerCDMA2000; break; case EBearerInfoGPRS: - p->bearer = SymbianNetworkConfigurationPrivate::Bearer2G; + p->bearerType = QNetworkConfiguration::Bearer2G; break; case EBearerInfoHSCSD: - p->bearer = SymbianNetworkConfigurationPrivate::Bearer2G; + p->bearerType = QNetworkConfiguration::Bearer2G; break; case EBearerInfoEdgeGPRS: - p->bearer = SymbianNetworkConfigurationPrivate::Bearer2G; + p->bearerType = QNetworkConfiguration::Bearer2G; break; case EBearerInfoWcdmaCSD: - p->bearer = SymbianNetworkConfigurationPrivate::BearerWCDMA; + p->bearerType = QNetworkConfiguration::BearerWCDMA; break; case EBearerInfoHSDPA: - p->bearer = SymbianNetworkConfigurationPrivate::BearerHSPA; + p->bearerType = QNetworkConfiguration::BearerHSPA; break; case EBearerInfoHSUPA: - p->bearer = SymbianNetworkConfigurationPrivate::BearerHSPA; + p->bearerType = QNetworkConfiguration::BearerHSPA; break; case EBearerInfoHSxPA: - p->bearer = SymbianNetworkConfigurationPrivate::BearerHSPA; + p->bearerType = QNetworkConfiguration::BearerHSPA; break; } } diff --git a/src/plugins/bearer/symbian/symbianengine.h b/src/plugins/bearer/symbian/symbianengine.h index ecd858d..1fe6395 100644 --- a/src/plugins/bearer/symbian/symbianengine.h +++ b/src/plugins/bearer/symbian/symbianengine.h @@ -73,23 +73,9 @@ class AccessPointsAvailabilityScanner; class SymbianNetworkConfigurationPrivate : public QNetworkConfigurationPrivate { public: - enum Bearer { - BearerEthernet, - BearerWLAN, - Bearer2G, - BearerCDMA2000, - BearerWCDMA, - BearerHSPA, - BearerBluetooth, - BearerWiMAX, - BearerUnknown = -1 - }; - SymbianNetworkConfigurationPrivate(); ~SymbianNetworkConfigurationPrivate(); - QString bearerName() const; - inline TUint32 numericIdentifier() const { QMutexLocker locker(&mutex); @@ -110,8 +96,6 @@ public: QString mappingName; - Bearer bearer; - // So called IAP id from the platform. Remains constant as long as the // platform is aware of the configuration ie. it is stored in the databases // --> does not depend on whether connections are currently open or not. -- cgit v0.12 From 8f85d0e13245279fdb5a0dd0cf9c0c64615a6125 Mon Sep 17 00:00:00 2001 From: Kevin Wright <kevin.wright@nokia.com> Date: Mon, 2 Aug 2010 17:43:42 +0200 Subject: Modified qtdemo so error does not appear when there is no demo/example description availablei (QTBUG-12522). There is already output when building Qt that a description is missing -- the user does not need to witness an error about ensuring the documentation has been built just because a description has not been contributed. (cherry picked from commit e55fd8c9790863f2d6001bda617a9d87be61f29b) --- demos/qtdemo/examplecontent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/qtdemo/examplecontent.cpp b/demos/qtdemo/examplecontent.cpp index 19be3e0..65c078d 100644 --- a/demos/qtdemo/examplecontent.cpp +++ b/demos/qtdemo/examplecontent.cpp @@ -91,8 +91,8 @@ QString ExampleContent::loadDescription() if (paragraphs.length() < 1 && Colors::verbose) qDebug() << "- ExampleContent::loadDescription(): Could not load description:" << MenuManager::instance()->info[this->name]["docfile"]; - QString description = Colors::contentColor + - QLatin1String("Could not load description. Ensure that the documentation for Qt is built."); + QString description = Colors::contentColor + QLatin1String(""); + //QLatin1String("Could not load description. Ensure that the documentation for Qt is built."); // QTBUG-12522: If there is no description why show an error to the user when qDebug above communications the issue (if it is indeed an issue at all) when demos are built? for (int p = 0; p < int(paragraphs.length()); ++p) { description = this->extractTextFromParagraph(paragraphs.item(p)); if (this->isSummary(description)) { -- cgit v0.12 From 6e196f796059558fe3d0e60c2e504b980d80dc73 Mon Sep 17 00:00:00 2001 From: kh1 <qt-info@nokia.com> Date: Wed, 4 Aug 2010 16:02:44 +0200 Subject: Fix the remote command delimiter, this has cahnged at some point. Task-number: QTBUG-12485 QTBUG-12651 Reviewed-by: ck (cherry picked from commit 2838cfa7809e6b196a1ee1eb71df5894fc57dd6f) --- demos/qtdemo/menumanager.cpp | 2 +- tools/designer/src/designer/assistantclient.cpp | 2 +- tools/linguist/linguist/mainwindow.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demos/qtdemo/menumanager.cpp b/demos/qtdemo/menumanager.cpp index 7168b57..c9ffecb 100644 --- a/demos/qtdemo/menumanager.cpp +++ b/demos/qtdemo/menumanager.cpp @@ -313,7 +313,7 @@ void MenuManager::showDocInAssistant(const QString &name) // Send command through remote control even if the process // was started to activate assistant and bring it to front: QTextStream str(&this->assistantProcess); - str << "SetSource " << url << QLatin1Char('\0') << endl; + str << "SetSource " << url << QLatin1Char('\n') << endl; } void MenuManager::launchExample(const QString &name) diff --git a/tools/designer/src/designer/assistantclient.cpp b/tools/designer/src/designer/assistantclient.cpp index e47817f..bddaf63 100644 --- a/tools/designer/src/designer/assistantclient.cpp +++ b/tools/designer/src/designer/assistantclient.cpp @@ -101,7 +101,7 @@ bool AssistantClient::sendCommand(const QString &cmd, QString *errorMessage) return false; } QTextStream str(m_process); - str << cmd << QLatin1Char('\0') << endl; + str << cmd << QLatin1Char('\n') << endl; return true; } diff --git a/tools/linguist/linguist/mainwindow.cpp b/tools/linguist/linguist/mainwindow.cpp index 1611699..163ef54 100644 --- a/tools/linguist/linguist/mainwindow.cpp +++ b/tools/linguist/linguist/mainwindow.cpp @@ -1347,7 +1347,7 @@ void MainWindow::manual() << (QT_VERSION >> 16) << ((QT_VERSION >> 8) & 0xFF) << (QT_VERSION & 0xFF) << QLatin1String("/qdoc/linguist-manual.html") - << QLatin1Char('\0') << endl; + << QLatin1Char('\n') << endl; } void MainWindow::about() -- cgit v0.12 From 9994524bbc1e70e178c703f4ebeb51575bacc271 Mon Sep 17 00:00:00 2001 From: Shane Kearns <shane.kearns@accenture.com> Date: Tue, 13 Jul 2010 13:04:36 +0200 Subject: Fix last character being overwritten in password field The temporary cursor position was not being updated after committing the input (changing the cleartext into a *), as a result of which, the next keypress was mistaken for a multitap input which should replace the last character. Task-number: QTBUG-11673 Reviewed-by: axis (cherry picked from commit 7acf2417bd2ae17c2e3c289c7caed84219e5fecd) --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 4cdc4ad..394d374 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -297,6 +297,10 @@ void QCoeFepInputContext::commitTemporaryPreeditString() return; commitCurrentString(false); + + //update cursor position, now this pre-edit text has been committed. + //this prevents next keypress overwriting it (QTBUG-11673) + m_cursorPos = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt(); } void QCoeFepInputContext::mouseHandler( int x, QMouseEvent *event) -- cgit v0.12 From a242f6bbd7dee37130c546626b7798daa3c07ae9 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Mon, 2 Aug 2010 09:36:00 +0200 Subject: Fix crash when setting font decorations on text drawn with QStaticText Qt has a run-time assert for implementing drawPolygon() in any subclass of QPaintEngine, which will be hit if set font decorations on the font used by QStaticText. Since we don't care about line decorations or any other shapes drawn in the QTextLayout, we simply leave the implementation empty. Reviewed-by: Gunnar (cherry picked from commit 43f37074391b338b250883dfeb4a16844ca759fd) --- src/gui/text/qstatictext.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp index 7dc4355..d986a48 100644 --- a/src/gui/text/qstatictext.cpp +++ b/src/gui/text/qstatictext.cpp @@ -472,7 +472,12 @@ namespace { qMemCopy(charsDestination, ti.chars, sizeof(QChar) * currentItem.numChars); m_items.append(currentItem); - } + } + + virtual void drawPolygon(const QPointF *, int , PolygonDrawMode ) + { + /* intentionally empty */ + } virtual bool begin(QPaintDevice *) { return true; } virtual bool end() { return true; } -- cgit v0.12 From e05340b7fa0fe487be63c5e8801c82e4fc03cd36 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Tue, 3 Aug 2010 11:09:37 +1000 Subject: Update def files. (cherry picked from commit ed6d7222894a9bdc804d8c64845e2f0f356d2c01) --- src/s60installs/bwins/QtNetworku.def | 2 ++ src/s60installs/eabi/QtNetworku.def | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def index 48af60c..2cf62a8 100644 --- a/src/s60installs/bwins/QtNetworku.def +++ b/src/s60installs/bwins/QtNetworku.def @@ -1143,4 +1143,6 @@ EXPORTS ?setNetworkAccessible@QNetworkAccessManager@@QAEXW4NetworkAccessibility@1@@Z @ 1142 NONAME ; void QNetworkAccessManager::setNetworkAccessible(enum QNetworkAccessManager::NetworkAccessibility) ??_EQBearerEngineFactoryInterface@@UAE@I@Z @ 1143 NONAME ; QBearerEngineFactoryInterface::~QBearerEngineFactoryInterface(unsigned int) ?enablePolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1144 NONAME ; void QNetworkConfigurationManagerPrivate::enablePolling(void) + ?bearerTypeName@QNetworkConfiguration@@QBE?AVQString@@XZ @ 1145 NONAME ; class QString QNetworkConfiguration::bearerTypeName(void) const + ?bearerType@QNetworkConfiguration@@QBE?AW4BearerType@1@XZ @ 1146 NONAME ; enum QNetworkConfiguration::BearerType QNetworkConfiguration::bearerType(void) const diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index eb30832..6b34a19 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1131,7 +1131,7 @@ EXPORTS _ZNK21QNetworkAccessManager13configurationEv @ 1130 NONAME _ZNK21QNetworkAccessManager17networkAccessibleEv @ 1131 NONAME _ZNK21QNetworkAccessManager19activeConfigurationEv @ 1132 NONAME - _ZNK21QNetworkConfiguration10bearerNameEv @ 1133 NONAME + _ZNK21QNetworkConfiguration10bearerNameEv @ 1133 NONAME ABSENT _ZNK21QNetworkConfiguration10identifierEv @ 1134 NONAME _ZNK21QNetworkConfiguration18isRoamingAvailableEv @ 1135 NONAME _ZNK21QNetworkConfiguration4nameEv @ 1136 NONAME @@ -1167,4 +1167,6 @@ EXPORTS _ZN14QAuthenticator9setOptionERK7QStringRK8QVariant @ 1166 NONAME _ZNK14QAuthenticator6optionERK7QString @ 1167 NONAME _ZNK14QAuthenticator7optionsEv @ 1168 NONAME + _ZNK21QNetworkConfiguration10bearerTypeEv @ 1169 NONAME + _ZNK21QNetworkConfiguration14bearerTypeNameEv @ 1170 NONAME -- cgit v0.12 From f8706919f8fae02ac784eb23a529ca1d56864c09 Mon Sep 17 00:00:00 2001 From: Rohan McGovern <rohan.mcgovern@nokia.com> Date: Thu, 5 Aug 2010 16:04:56 +1000 Subject: Fixed incorrect include/Qt/qconfig.h in binary packages. When building from a source package, src/corelib/global/qconfig.h exists. syncqt contained logic to force the creation of include/Qt/qconfig.h for the case where it _doesn't_ exist. This meant that running syncqt from a Qt source package resulted in include/Qt/qconfig.h including qconfig.h twice. Task: QTBUG-12637 Reviewed-by: Toby Tomkins (cherry picked from commit 29d77e6003d0e156e5979dc8eb72e7ed8eb51456) --- bin/syncqt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/syncqt b/bin/syncqt index 28dc0c3..ccacaa9 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -691,7 +691,10 @@ my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dis my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" ); my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" ); my %colliding_headers = (); -my %inject_headers = ( "$basedir/src/corelib/global" => ( "*qconfig.h" ) ); +my %inject_headers; +# Force generation of forwarding header for qconfig.h if (and only if) we can't +# find the header by normal means. +%inject_headers = ( "$basedir/src/corelib/global" => ( "*qconfig.h" ) ) unless (-e "$basedir/src/corelib/global/qconfig.h"); foreach (@modules_to_sync) { #iteration info -- cgit v0.12 From 3321df1a1483dce881530b614e17c1878f42d957 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Wed, 4 Aug 2010 11:05:53 +0200 Subject: Fixed the curve descriptions and added descriptions for overshoot, amplitude, and period. Fix for QTBUG-7940. (cherry picked from commit 11f8bbaff73811c8d3342600bc7c77f47c34c7de) --- src/corelib/tools/qeasingcurve.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index 1734b03..ee791e0 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -91,6 +91,16 @@ animation.setDuration(1000); animation.setEasingCurve(QEasingCurve::InOutQuad); \endcode + + The ability to set an amplitude, overshoot, or period depends on the QEasingCurve type. Amplitude access + is available to curves that behave as springs such as elastic and bounce curves. Changing the amplitude changes + the height of the curve. Period access is only available to elastic curves and setting a higher period slows + the rate of bounce. Only curves that have "boomerang" behaviors such as the InBack, OutBack, InOutBack, and OutInBack + have overshoot settings. These curves will interpolate beyond the end points and return to the end point, + acting similar to a boomerang. + + The \l{Easing Curves Example} contains samples of QEasingCurve types and lets you change the curve settings. + */ /*! @@ -140,15 +150,15 @@ accelerating from zero velocity. \value OutQuart \inlineimage qeasingcurve-outquart.png \br - Easing curve for a cubic (t^4) function: + Easing curve for a quartic (t^4) function: decelerating to zero velocity. \value InOutQuart \inlineimage qeasingcurve-inoutquart.png \br - Easing curve for a cubic (t^4) function: + Easing curve for a quartic (t^4) function: acceleration until halfway, then deceleration. \value OutInQuart \inlineimage qeasingcurve-outinquart.png \br - Easing curve for a cubic (t^4) function: + Easing curve for a quartic (t^4) function: deceleration until halfway, then acceleration. \value InQuint \inlineimage qeasingcurve-inquint.png \br @@ -156,15 +166,15 @@ in: accelerating from zero velocity. \value OutQuint \inlineimage qeasingcurve-outquint.png \br - Easing curve for a cubic (t^5) function: + Easing curve for a quintic (t^5) function: decelerating to zero velocity. \value InOutQuint \inlineimage qeasingcurve-inoutquint.png \br - Easing curve for a cubic (t^5) function: + Easing curve for a quintic (t^5) function: acceleration until halfway, then deceleration. \value OutInQuint \inlineimage qeasingcurve-outinquint.png \br - Easing curve for a cubic (t^5) function: + Easing curve for a quintic (t^5) function: deceleration until halfway, then acceleration. \value InSine \inlineimage qeasingcurve-insine.png \br -- cgit v0.12 From 828604016ae257281c2e6ee2e4693e6833b478e3 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 5 Aug 2010 12:09:25 +1000 Subject: Fix crash when all visible items inluding currentIndex have been removed. Task-number: QTBUG-11251 Reviewed-by: Bea Lam (cherry picked from commit 7de5f19f0f62f181132394da6d7b2c8484cd42d9) --- src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 82b3e1c..e1dd1c0 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1021,7 +1021,7 @@ void QDeclarativeListViewPrivate::updateCurrent(int modelIndex) if (oldCurrentItem && (!currentItem || oldCurrentItem->item != currentItem->item)) oldCurrentItem->attached->setIsCurrentItem(false); if (currentItem) { - if (modelIndex == visibleIndex - 1) { + if (modelIndex == visibleIndex - 1 && visibleItems.count()) { // We can calculate exact postion in this case currentItem->setPosition(visibleItems.first()->position() - currentItem->size() - spacing); } else { -- cgit v0.12 From e628b0808d874eb798e463f23387d00191d7068e Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Wed, 4 Aug 2010 09:27:34 +0200 Subject: Make SpringAnimation usable inside a transition SpringFollow was turned into SpringAnimation so it could be used inside a Behavior. This patch completes the work and makes it usable inside a transition. This is the documented behavior of SpringAnimation, the patch is essential to make SpringAnimation work consistently. Reviewed-by: Michael Brasser Task-number: QTBUG-12141 (cherry picked from commit 33203efb786de9aebc6e05d1b4878d89e86ac456) --- .../util/qdeclarativespringanimation.cpp | 228 +++++++++------------ .../util/qdeclarativespringanimation_p.h | 17 +- .../data/propertiesTransition7.qml | 29 +++ .../tst_qdeclarativeanimations.cpp | 14 ++ 4 files changed, 142 insertions(+), 146 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index 8ce4832..cfc7b8e 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -54,36 +54,32 @@ QT_BEGIN_NAMESPACE - -class QDeclarativeSpringAnimationPrivate : public QDeclarativeAbstractAnimationPrivate +class QDeclarativeSpringAnimationPrivate : public QDeclarativePropertyAnimationPrivate { Q_DECLARE_PUBLIC(QDeclarativeSpringAnimation) public: - QDeclarativeSpringAnimationPrivate() - : currentValue(0), to(0), from(0), maxVelocity(0), lastTime(0) - , mass(1.0), spring(0.), damping(0.), velocity(0), epsilon(0.01) - , modulus(0.0), useMass(false), haveModulus(false), enabled(true) - , fromDefined(false), toDefined(false) - , mode(Track), clock(this) {} - - qreal currentValue; - qreal to; - qreal from; + + + struct SpringAnimation { + SpringAnimation() + : currentValue(0), to(0), velocity(0){} + qreal currentValue; + qreal to; + qreal velocity; + }; + QHash<QDeclarativeProperty, SpringAnimation> activeAnimations; + qreal maxVelocity; qreal velocityms; int lastTime; qreal mass; qreal spring; qreal damping; - qreal velocity; qreal epsilon; qreal modulus; bool useMass : 1; bool haveModulus : 1; - bool enabled : 1; - bool fromDefined : 1; - bool toDefined : 1; enum Mode { Track, @@ -92,38 +88,68 @@ public: }; Mode mode; - void tick(int); + QDeclarativeSpringAnimationPrivate() + : maxVelocity(0), velocityms(0), lastTime(0) + , mass(1.0), spring(0.), damping(0.), epsilon(0.01) + , modulus(0.0), useMass(false), haveModulus(false) + , mode(Track), clock(0) + { } + + void tick(int time); + bool animate(const QDeclarativeProperty &property, SpringAnimation &animation, int elapsed); void updateMode(); - QTickAnimationProxy<QDeclarativeSpringAnimationPrivate, &QDeclarativeSpringAnimationPrivate::tick> clock; + typedef QTickAnimationProxy<QDeclarativeSpringAnimationPrivate, &QDeclarativeSpringAnimationPrivate::tick> Clock; + Clock *clock; }; void QDeclarativeSpringAnimationPrivate::tick(int time) { if (mode == Track) { - clock.stop(); + clock->stop(); return; } - int elapsed = time - lastTime; if (!elapsed) return; - qreal srcVal = to; + + if (mode == Spring) { + if (elapsed < 16) // capped at 62fps. + return; + int count = elapsed / 16; + lastTime = time - (elapsed - count * 16); + } else { + lastTime = time; + } + + QMutableHashIterator<QDeclarativeProperty, SpringAnimation> it(activeAnimations); + while (it.hasNext()) { + it.next(); + if (animate(it.key(), it.value(), elapsed)) + it.remove(); + } + + if (activeAnimations.isEmpty()) + clock->stop(); +} + +bool QDeclarativeSpringAnimationPrivate::animate(const QDeclarativeProperty &property, SpringAnimation &animation, int elapsed) +{ + + qreal srcVal = animation.to; bool stop = false; if (haveModulus) { - currentValue = fmod(currentValue, modulus); + animation.currentValue = fmod(animation.currentValue, modulus); srcVal = fmod(srcVal, modulus); } if (mode == Spring) { - if (elapsed < 16) // capped at 62fps. - return; // Real men solve the spring DEs using RK4. // We'll do something much simpler which gives a result that looks fine. int count = elapsed / 16; for (int i = 0; i < count; ++i) { - qreal diff = srcVal - currentValue; + qreal diff = srcVal - animation.currentValue; if (haveModulus && qAbs(diff) > modulus / 2) { if (diff < 0) diff += modulus; @@ -131,32 +157,31 @@ void QDeclarativeSpringAnimationPrivate::tick(int time) diff -= modulus; } if (useMass) - velocity = velocity + (spring * diff - damping * velocity) / mass; + animation.velocity = animation.velocity + (spring * diff - damping * animation.velocity) / mass; else - velocity = velocity + spring * diff - damping * velocity; + animation.velocity = animation.velocity + spring * diff - damping * animation.velocity; if (maxVelocity > 0.) { // limit velocity - if (velocity > maxVelocity) - velocity = maxVelocity; - else if (velocity < -maxVelocity) - velocity = -maxVelocity; + if (animation.velocity > maxVelocity) + animation.velocity = maxVelocity; + else if (animation.velocity < -maxVelocity) + animation.velocity = -maxVelocity; } - currentValue += velocity * 16.0 / 1000.0; + animation.currentValue += animation.velocity * 16.0 / 1000.0; if (haveModulus) { - currentValue = fmod(currentValue, modulus); - if (currentValue < 0.0) - currentValue += modulus; + animation.currentValue = fmod(animation.currentValue, modulus); + if (animation.currentValue < 0.0) + animation.currentValue += modulus; } } - if (qAbs(velocity) < epsilon && qAbs(srcVal - currentValue) < epsilon) { - velocity = 0.0; - currentValue = srcVal; + if (qAbs(animation.velocity) < epsilon && qAbs(srcVal - animation.currentValue) < epsilon) { + animation.velocity = 0.0; + animation.currentValue = srcVal; stop = true; } - lastTime = time - (elapsed - count * 16); } else { qreal moveBy = elapsed * velocityms; - qreal diff = srcVal - currentValue; + qreal diff = srcVal - animation.currentValue; if (haveModulus && qAbs(diff) > modulus / 2) { if (diff < 0) diff += modulus; @@ -164,33 +189,31 @@ void QDeclarativeSpringAnimationPrivate::tick(int time) diff -= modulus; } if (diff > 0) { - currentValue += moveBy; + animation.currentValue += moveBy; if (haveModulus) - currentValue = fmod(currentValue, modulus); - if (currentValue > to) { - currentValue = to; + animation.currentValue = fmod(animation.currentValue, modulus); + if (animation.currentValue > animation.to) { + animation.currentValue = animation.to; stop = true; } } else { - currentValue -= moveBy; - if (haveModulus && currentValue < 0.0) - currentValue = fmod(currentValue, modulus) + modulus; - if (currentValue < to) { - currentValue = to; + animation.currentValue -= moveBy; + if (haveModulus && animation.currentValue < 0.0) + animation.currentValue = fmod(animation.currentValue, modulus) + modulus; + if (animation.currentValue < animation.to) { + animation.currentValue = animation.to; stop = true; } } - lastTime = time; } - qreal old_to = to; + qreal old_to = animation.to; - QDeclarativePropertyPrivate::write(defaultProperty, currentValue, + QDeclarativePropertyPrivate::write(property, animation.currentValue, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding); - if (stop && old_to == to) // do not stop if we got restarted - clock.stop(); + return (stop && old_to == animation.to); // do not stop if we got restarted } void QDeclarativeSpringAnimationPrivate::updateMode() @@ -230,79 +253,16 @@ void QDeclarativeSpringAnimationPrivate::updateMode() */ QDeclarativeSpringAnimation::QDeclarativeSpringAnimation(QObject *parent) -: QDeclarativeAbstractAnimation(*(new QDeclarativeSpringAnimationPrivate),parent) -{ -} - -QDeclarativeSpringAnimation::~QDeclarativeSpringAnimation() -{ -} - -void QDeclarativeSpringAnimation::setTarget(const QDeclarativeProperty &property) +: QDeclarativeNumberAnimation(*(new QDeclarativeSpringAnimationPrivate),parent) { Q_D(QDeclarativeSpringAnimation); - d->defaultProperty = property; - d->currentValue = property.read().toReal(); - if (!d->avoidPropertyValueSourceStart) { - setRunning(true); - } -} - -qreal QDeclarativeSpringAnimation::to() const -{ - Q_D(const QDeclarativeSpringAnimation); - return d->toDefined ? d->to : 0; -} - -/*! - \qmlproperty real SpringAnimation::to - - This property holds the value at which the animation will end. - - If not set, the animation will continue until it reaches the - value that is being tracked. -*/ - -void QDeclarativeSpringAnimation::setTo(qreal value) -{ - Q_D(QDeclarativeSpringAnimation); - if (d->to == value) - return; - - d->to = value; - d->toDefined = true; - d->lastTime = 0; - emit toChanged(value); + d->clock = new QDeclarativeSpringAnimationPrivate::Clock(d, this); } -qreal QDeclarativeSpringAnimation::from() const -{ - Q_D(const QDeclarativeSpringAnimation); - return d->fromDefined ? d->from : 0; -} - -/*! - \qmlproperty real SpringAnimation::from - - This property holds the value from which the animation will begin. - - If not set, the animation will start whenever the tracked value has - changed, regardless of its value. -*/ - -void QDeclarativeSpringAnimation::setFrom(qreal value) +QDeclarativeSpringAnimation::~QDeclarativeSpringAnimation() { - Q_D(QDeclarativeSpringAnimation); - if (d->from == value) - return; - - d->currentValue = d->from = value; - d->fromDefined = true; - d->lastTime = 0; - emit fromChanged(value); } - /*! \qmlproperty real SpringAnimation::velocity @@ -452,17 +412,25 @@ void QDeclarativeSpringAnimation::transition(QDeclarativeStateActions &actions, Q_D(QDeclarativeSpringAnimation); Q_UNUSED(direction); - if (d->clock.state() != QAbstractAnimation::Running) + if (d->clock->state() != QAbstractAnimation::Running) { d->lastTime = 0; + } - if (!actions.isEmpty()) { - for (int i = 0; i < actions.size(); ++i) { - if (!d->toDefined) - d->to = actions.at(i).toValue.toReal(); - if (!d->fromDefined) - d->currentValue = actions.at(i).fromValue.toReal(); - if (d->mode != QDeclarativeSpringAnimationPrivate::Track) - modified << d->defaultProperty; + QDeclarativeNumberAnimation::transition(actions, modified, direction); + + if (!d->actions) + return; + + if (!d->actions->isEmpty()) { + for (int i = 0; i < d->actions->size(); ++i) { + const QDeclarativeProperty &property = d->actions->at(i).property; + QDeclarativeSpringAnimationPrivate::SpringAnimation &animation + = d->activeAnimations[property]; + animation.to = d->actions->at(i).toValue.toReal(); + if (d->fromIsDefined) + animation.currentValue = d->actions->at(i).fromValue.toReal(); + else + animation.currentValue = property.read().toReal(); } } } @@ -471,7 +439,7 @@ void QDeclarativeSpringAnimation::transition(QDeclarativeStateActions &actions, QAbstractAnimation *QDeclarativeSpringAnimation::qtAnimation() { Q_D(QDeclarativeSpringAnimation); - return &d->clock; + return d->clock; } QT_END_NAMESPACE diff --git a/src/declarative/util/qdeclarativespringanimation_p.h b/src/declarative/util/qdeclarativespringanimation_p.h index 6f574ef..ee276ec 100644 --- a/src/declarative/util/qdeclarativespringanimation_p.h +++ b/src/declarative/util/qdeclarativespringanimation_p.h @@ -54,14 +54,12 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) class QDeclarativeSpringAnimationPrivate; -class Q_AUTOTEST_EXPORT QDeclarativeSpringAnimation : public QDeclarativeAbstractAnimation +class Q_AUTOTEST_EXPORT QDeclarativeSpringAnimation : public QDeclarativeNumberAnimation { Q_OBJECT Q_DECLARE_PRIVATE(QDeclarativeSpringAnimation) Q_INTERFACES(QDeclarativePropertyValueSource) - Q_PROPERTY(qreal to READ to WRITE setTo NOTIFY toChanged) - Q_PROPERTY(qreal from READ from WRITE setFrom NOTIFY fromChanged) Q_PROPERTY(qreal velocity READ velocity WRITE setVelocity) Q_PROPERTY(qreal spring READ spring WRITE setSpring) Q_PROPERTY(qreal damping READ damping WRITE setDamping) @@ -73,14 +71,6 @@ public: QDeclarativeSpringAnimation(QObject *parent=0); ~QDeclarativeSpringAnimation(); - virtual void setTarget(const QDeclarativeProperty &); - - qreal to() const; - void setTo(qreal value); - - qreal from() const; - void setFrom(qreal value); - qreal velocity() const; void setVelocity(qreal velocity); @@ -99,9 +89,6 @@ public: qreal modulus() const; void setModulus(qreal modulus); - bool enabled() const; - void setEnabled(bool enabled); - virtual void transition(QDeclarativeStateActions &actions, QDeclarativeProperties &modified, TransitionDirection direction); @@ -110,8 +97,6 @@ protected: virtual QAbstractAnimation *qtAnimation(); Q_SIGNALS: - void toChanged(qreal); - void fromChanged(qreal); void modulusChanged(); void massChanged(); void syncChanged(); diff --git a/tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml b/tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml new file mode 100644 index 0000000..b47b5f2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeanimations/data/propertiesTransition7.qml @@ -0,0 +1,29 @@ +import Qt 4.7 + +Rectangle { + width: 400 + height: 400 + Rectangle { + id: theRect + objectName: "TheRect" + color: "red" + width: 50; height: 50 + x: 100; y: 100 + } + + states: State { + name: "moved" + PropertyChanges { + target: theRect + x: 200 + } + } + transitions: Transition { + SpringAnimation { targets: theRect; properties: "x"; velocity: 10000 } + } + + MouseArea { + anchors.fill: parent + onClicked: parent.state = "moved" + } +} diff --git a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp index 3e80c2c..ec867fe 100644 --- a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp +++ b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp @@ -551,6 +551,20 @@ void tst_qdeclarativeanimations::propertiesTransition() QTest::qWait(waitDuration); QTIMED_COMPARE(myRect->x(),qreal(100)); }*/ + + { + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/propertiesTransition7.qml")); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); + QVERIFY(rect); + + QDeclarativeItemPrivate::get(rect)->setState("moved"); + QDeclarativeRectangle *myRect = rect->findChild<QDeclarativeRectangle*>("TheRect"); + QVERIFY(myRect); + QTest::qWait(waitDuration); + QTIMED_COMPARE(myRect->x(),qreal(200)); + } + } void tst_qdeclarativeanimations::invalidDuration() -- cgit v0.12 From 94b2f7580ad9f5460eccf51e999ad9b39c70aa9f Mon Sep 17 00:00:00 2001 From: Gunnar Sletta <gunnar.sletta@nokia.com> Date: Wed, 4 Aug 2010 19:38:41 +0200 Subject: Fixed crash in concentric circles example The problem is that the qt_arcs... function will return point_count = 0 when the input rectangle is empty which it is in this case. Because we previously passed 13 there, were passing random memory to downwards in the pipeline, which caused problems. Task: http://bugreports.qt.nokia.com/browse/QTBUG-12516 Reviewed-by: mariusso (cherry picked from commit 08d09a78d3faf8b211e78cb63285c35c5544b5fc) --- src/gui/painting/qpaintengineex.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp index e0746fb..881bd6e 100644 --- a/src/gui/painting/qpaintengineex.cpp +++ b/src/gui/painting/qpaintengineex.cpp @@ -831,7 +831,7 @@ void QPaintEngineEx::drawEllipse(const QRectF &r) int point_count = 0; x.points[0] = qt_curves_for_arc(r, 0, -360, x.points + 1, &point_count); - QVectorPath vp((qreal *) pts, 13, qpaintengineex_ellipse_types, QVectorPath::EllipseHint); + QVectorPath vp((qreal *) pts, point_count, qpaintengineex_ellipse_types, QVectorPath::EllipseHint); draw(vp); } -- cgit v0.12 From 2a771a1b04a58d1f13021b280a9ecf0e5c1476ab Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 4 Aug 2010 12:45:10 +1000 Subject: Don't crash if an item is removed from the scene while it is gaining focus. If the item is removed from the scene in response to the FocusOut event of the previous item don't continue attempting to set focus. Task-number: QTBUG-12620 Reviewed-by: Michael Brasser (cherry picked from commit 7f2c9d716cba375ee3e576513898a39b3f2c39a5) --- src/gui/graphicsview/qgraphicsscene.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 48a0093..a98ce6f 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -831,6 +831,11 @@ void QGraphicsScenePrivate::setFocusItemHelper(QGraphicsItem *item, #endif //QT_NO_IM } + // This handles the case that the item has been removed from the + // scene in response to the FocusOut event. + if (item && item->scene() != q) + item = 0; + if (item) focusItem = item; updateInputMethodSensitivityInViews(); -- cgit v0.12 From 820d03c4cfc446b0fbe0e53a5690a5c97c3bac85 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Wed, 4 Aug 2010 11:07:12 +1000 Subject: Add missing snippet file Task-number: QTBUG-12628 (cherry picked from commit c3bddbe29918951bd0d4220f62443add2a1fe938) --- .../snippets/declarative/SelfDestroyingRect.qml | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 doc/src/snippets/declarative/SelfDestroyingRect.qml diff --git a/doc/src/snippets/declarative/SelfDestroyingRect.qml b/doc/src/snippets/declarative/SelfDestroyingRect.qml new file mode 100644 index 0000000..f14d2d2 --- /dev/null +++ b/doc/src/snippets/declarative/SelfDestroyingRect.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 80; height: 80 + color: "red" + + NumberAnimation on opacity { + to: 0 + duration: 1000 + + onRunningChanged: { + if (!running) { + console.log("Destroying...") + rect.destroy(); + } + } + } +} +//![0] -- cgit v0.12 From c42682e3e3797c2682da91249d2dce117143dbdd Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Tue, 3 Aug 2010 09:56:13 +1000 Subject: Fix deadlocks in ICD and NetworkManager engines. Ensure that locks are not held when signals are emitted. Task-number: QTBUG-12631 (cherry picked from commit b0a33937851f56a1830141e519fd6ba21481e6c9) --- src/plugins/bearer/icd/qicdengine.cpp | 38 ++++++++++----------- src/plugins/bearer/icd/qicdengine.h | 8 ++--- .../networkmanager/qnetworkmanagerengine.cpp | 39 +++++++++++----------- .../bearer/networkmanager/qnetworkmanagerengine.h | 2 -- 4 files changed, 41 insertions(+), 46 deletions(-) diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp index 6060a09..0900329 100644 --- a/src/plugins/bearer/icd/qicdengine.cpp +++ b/src/plugins/bearer/icd/qicdengine.cpp @@ -217,7 +217,7 @@ void IapMonitor::iapRemoved(const QString &iap_id) } QIcdEngine::QIcdEngine(QObject *parent) -: QBearerEngine(parent), iapMonitor(new IapMonitor), m_dbusInterface(0), +: QBearerEngine(parent), iapMonitor(0), m_dbusInterface(0), firstUpdate(true), m_scanGoingOn(false) { } @@ -258,6 +258,7 @@ void QIcdEngine::initialize() startListeningStateSignalsForAllConnections(); /* Turn on IAP add/remove monitoring */ + iapMonitor = new IapMonitor; iapMonitor->setup(this); /* We create a default configuration which is a pseudo config */ @@ -520,8 +521,6 @@ void QIcdEngine::addConfiguration(QString& iap_id) void QIcdEngine::doRequestUpdate(QList<Maemo::IcdScanResult> scanned) { - QMutexLocker locker(&mutex); - /* Contains all known iap_ids from storage */ QList<QString> knownConfigs = accessPointConfigurations.keys(); @@ -587,9 +586,9 @@ void QIcdEngine::doRequestUpdate(QList<Maemo::IcdScanResult> scanned) QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(iap_id, ptr); - locker.unlock(); + mutex.unlock(); emit configurationAdded(ptr); - locker.relock(); + mutex.lock(); #ifdef BEARER_MANAGEMENT_DEBUG qDebug("IAP: %s, name: %s, ssid: %s, added to known list", @@ -642,9 +641,9 @@ void QIcdEngine::doRequestUpdate(QList<Maemo::IcdScanResult> scanned) ptr->mutex.unlock(); if (changed) { - locker.unlock(); + mutex.unlock(); emit configurationChanged(ptr); - locker.relock(); + mutex.lock(); } if (!ap.scan.network_type.startsWith(QLatin1String("WLAN"))) @@ -703,9 +702,9 @@ rescan_list: QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(ptr->id, ptr); - locker.unlock(); + mutex.unlock(); emit configurationAdded(ptr); - locker.relock(); + mutex.lock(); } else { knownConfigs.removeOne(scanned_ssid); } @@ -733,9 +732,9 @@ rescan_list: ptr->state = QNetworkConfiguration::Defined; configLocker.unlock(); - locker.unlock(); + mutex.unlock(); emit configurationChanged(ptr); - locker.relock(); + mutex.lock(); } } } @@ -744,9 +743,9 @@ rescan_list: foreach (const QString &oldIface, knownConfigs) { QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(oldIface); if (ptr) { - locker.unlock(); + mutex.unlock(); emit configurationRemoved(ptr); - locker.relock(); + mutex.lock(); //if we would have SNAP support we would have to remove the references //from existing ServiceNetworks to the removed access point configuration } @@ -762,9 +761,9 @@ rescan_list: } if (!firstUpdate) { - locker.unlock(); + mutex.unlock(); emit updateCompleted(); - locker.relock(); + mutex.lock(); } if (firstUpdate) @@ -781,8 +780,6 @@ QNetworkConfigurationPrivatePointer QIcdEngine::defaultConfiguration() void QIcdEngine::startListeningStateSignalsForAllConnections() { - QMutexLocker locker(&mutex); - // Start listening ICD_DBUS_API_STATE_SIG signals m_dbusInterface->connection().connect(ICD_DBUS_API_INTERFACE, ICD_DBUS_API_PATH, @@ -906,8 +903,6 @@ void QIcdEngine::requestUpdate() void QIcdEngine::cancelAsyncConfigurationUpdate() { - QMutexLocker locker(&mutex); - if (!m_scanGoingOn) { return; } @@ -947,7 +942,9 @@ void QIcdEngine::asyncUpdateConfigurationsSlot(QDBusMessage msg) if (icd_scan_status == ICD_SCAN_COMPLETE) { m_typesToBeScanned.removeOne(arguments[6].toString()); if (!m_typesToBeScanned.count()) { + locker.unlock(); finishAsyncConfigurationUpdate(); + locker.relock(); } } else { Maemo::IcdScanResult scanResult; @@ -977,7 +974,8 @@ void QIcdEngine::cleanup() m_scanTimer.stop(); m_dbusInterface->call(ICD_DBUS_API_SCAN_CANCEL); } - iapMonitor->cleanup(); + if (iapMonitor) + iapMonitor->cleanup(); } bool QIcdEngine::hasIdentifier(const QString &id) diff --git a/src/plugins/bearer/icd/qicdengine.h b/src/plugins/bearer/icd/qicdengine.h index 16dc979..a768d84 100644 --- a/src/plugins/bearer/icd/qicdengine.h +++ b/src/plugins/bearer/icd/qicdengine.h @@ -126,13 +126,13 @@ public: QMutexLocker locker(&mutex); accessPointConfigurations.insert(ptr->id, ptr); + + locker.unlock(); emit configurationAdded(ptr); } inline void changedSessionConfiguration(QNetworkConfigurationPrivatePointer ptr) { - QMutexLocker locker(&mutex); - emit configurationChanged(ptr); } @@ -144,14 +144,14 @@ Q_SIGNALS: void iapStateChanged(const QString& iapid, uint icd_connection_state); private Q_SLOTS: - void doRequestUpdate(QList<Maemo::IcdScanResult> scanned = QList<Maemo::IcdScanResult>()); - void cancelAsyncConfigurationUpdate(); void finishAsyncConfigurationUpdate(); void asyncUpdateConfigurationsSlot(QDBusMessage msg); void connectionStateSignalsSlot(QDBusMessage msg); private: void startListeningStateSignalsForAllConnections(); + void doRequestUpdate(QList<Maemo::IcdScanResult> scanned = QList<Maemo::IcdScanResult>()); + void cancelAsyncConfigurationUpdate(); private: IapMonitor *iapMonitor; diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp index f3f693b..29445ce 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp @@ -104,14 +104,23 @@ void QNetworkManagerEngine::initialize() QMutexLocker locker(&mutex); // Get current list of access points. - foreach (const QDBusObjectPath &devicePath, interface->getDevices()) + foreach (const QDBusObjectPath &devicePath, interface->getDevices()) { + locker.unlock(); deviceAdded(devicePath); + locker.relock(); + } // Get connections. - foreach (const QDBusObjectPath &settingsPath, systemSettings->listConnections()) + foreach (const QDBusObjectPath &settingsPath, systemSettings->listConnections()) { + locker.unlock(); newConnection(settingsPath, systemSettings); - foreach (const QDBusObjectPath &settingsPath, userSettings->listConnections()) + locker.relock(); + } + foreach (const QDBusObjectPath &settingsPath, userSettings->listConnections()) { + locker.unlock(); newConnection(settingsPath, userSettings); + locker.relock(); + } // Get active connections. foreach (const QDBusObjectPath &acPath, interface->activeConnections()) { @@ -132,11 +141,6 @@ bool QNetworkManagerEngine::networkManagerAvailable() const return interface->isValid(); } -void QNetworkManagerEngine::doRequestUpdate() -{ - emit updateCompleted(); -} - QString QNetworkManagerEngine::getInterfaceFromId(const QString &id) { QMutexLocker locker(&mutex); @@ -233,9 +237,7 @@ void QNetworkManagerEngine::disconnectFromId(const QString &id) void QNetworkManagerEngine::requestUpdate() { - QMutexLocker locker(&mutex); - - QTimer::singleShot(0, this, SLOT(doRequestUpdate())); + QMetaObject::invokeMethod(this, "updateCompleted", Qt::QueuedConnection); } void QNetworkManagerEngine::interfacePropertiesChanged(const QString &path, @@ -361,13 +363,10 @@ void QNetworkManagerEngine::devicePropertiesChanged(const QString &path, void QNetworkManagerEngine::deviceAdded(const QDBusObjectPath &path) { - QMutexLocker locker(&mutex); - QNetworkManagerInterfaceDevice device(path.path()); if (device.deviceType() == DEVICE_TYPE_802_11_WIRELESS) { QNetworkManagerInterfaceDeviceWireless *wirelessDevice = new QNetworkManagerInterfaceDeviceWireless(device.connectionInterface()->path()); - wirelessDevices.insert(path.path(), wirelessDevice); wirelessDevice->setConnections(); connect(wirelessDevice, SIGNAL(accessPointAdded(QString,QDBusObjectPath)), @@ -379,6 +378,10 @@ void QNetworkManagerEngine::deviceAdded(const QDBusObjectPath &path) foreach (const QDBusObjectPath &apPath, wirelessDevice->getAccessPoints()) newAccessPoint(QString(), apPath); + + mutex.lock(); + wirelessDevices.insert(path.path(), wirelessDevice); + mutex.unlock(); } } @@ -685,8 +688,6 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri const QString &settingsPath, const QNmSettingsMap &map) { - QMutexLocker locker(&mutex); - QNetworkConfigurationPrivate *cpPriv = new QNetworkConfigurationPrivate; cpPriv->name = map.value("connection").value("id").toString(); cpPriv->isValid = true; @@ -735,9 +736,9 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(accessPointId); - locker.unlock(); + mutex.unlock(); emit configurationRemoved(ptr); - locker.relock(); + mutex.lock(); } break; } @@ -753,8 +754,6 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri QNetworkManagerSettingsConnection *QNetworkManagerEngine::connectionFromId(const QString &id) const { - QMutexLocker locker(&mutex); - for (int i = 0; i < connections.count(); ++i) { QNetworkManagerSettingsConnection *connection = connections.at(i); const QString service = connection->connectionInterface()->service(); diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h index ffb8395..78ebb0a 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h @@ -116,8 +116,6 @@ private Q_SLOTS: void removeAccessPoint(const QString &path, const QDBusObjectPath &objectPath); void updateAccessPoint(const QMap<QString, QVariant> &map); - void doRequestUpdate(); - private: QNetworkConfigurationPrivate *parseConnection(const QString &service, const QString &settingsPath, -- cgit v0.12 From 01d3dcc43d26479c4a01ca8fa2530d19857d5049 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Thu, 5 Aug 2010 15:32:56 +0200 Subject: Updated WebKit to 413404da27312051bb3ff2cfd0f3fca42aa4b245 || <https://webkit.org/b/43530> || [Qt] Input mode states are not reset after entering a password field || (cherry picked from commit 13a0378151a5dc67d1dca91dffac573d051c37f8) --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebKit/qt/ChangeLog | 17 +++++++++++++++++ .../WebKit/qt/WebCoreSupport/EditorClientQt.cpp | 7 +++++++ .../qt/tests/qwebview/resources/input_types.html | 5 +++-- .../webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp | 19 +++++++++++++++++++ 6 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 718ea9d..fb2703e 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -d6aa024c84f61d0602bef4eef84efaed7cfeefcc +413404da27312051bb3ff2cfd0f3fca42aa4b245 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 1826cb6..c256434 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - d6aa024c84f61d0602bef4eef84efaed7cfeefcc + 413404da27312051bb3ff2cfd0f3fca42aa4b245 diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 94aca65..5083ba5 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,20 @@ +2010-08-05 David Leong <david.leong@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Input mode states are not reset after entering a password field + https://bugs.webkit.org/show_bug.cgi?id=43530 + + Input mode hints are not reset if clicking on password <input> elements then + clicking on <textarea> elements + + * WebCoreSupport/EditorClientQt.cpp: + (WebCore::EditorClientQt::setInputMethodState): + * tests/qwebview/resources/input_types.html: + * tests/qwebview/tst_qwebview.cpp: + (tst_QWebView::focusInputTypes): + + 2010-07-27 Simon Hausmann <simon.hausmann@nokia.com> Reviewed by Tor Arne Vestbø. diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp index cdc4013..87e047e 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp @@ -599,6 +599,13 @@ void EditorClientQt::setInputMethodState(bool active) QWebPageClient* webPageClient = m_page->d->client; if (webPageClient) { #if QT_VERSION >= 0x040600 + // Make sure to reset input method hint + webPageClient->setInputMethodHint(Qt::ImhDialableCharactersOnly, false); + webPageClient->setInputMethodHint(Qt::ImhDigitsOnly, false); + webPageClient->setInputMethodHint(Qt::ImhEmailCharactersOnly, false); + webPageClient->setInputMethodHint(Qt::ImhUrlCharactersOnly, false); + webPageClient->setInputMethodHint(Qt::ImhHiddenText, false); + HTMLInputElement* inputElement = 0; Frame* frame = m_page->d->page->focusController()->focusedOrMainFrame(); if (frame && frame->document() && frame->document()->focusedNode()) diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/resources/input_types.html b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/resources/input_types.html index 18ab314..2e893af 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/resources/input_types.html +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/resources/input_types.html @@ -4,5 +4,6 @@ <input type='tel' style='position: absolute; left: 10px; top: 100px; height: 50px; width: 100px;'/><br> <input type='number' style='position: absolute; left: 10px; top: 150px; height: 50px; width: 100px;'/><br> <input type='email' style='position: absolute; left: 10px; top: 200px; height: 50px; width: 100px;'/><br> -<input type='url' style='position: absolute; left: 10px; top: 250px; height: 50px; width: 100px;'/><br>" -</body></html> \ No newline at end of file +<input type='url' style='position: absolute; left: 10px; top: 250px; height: 50px; width: 100px;'/><br> +<textarea style='position: absolute; left: 10px; top: 310px; height: 50px; width: 100px;' rows="2" cols="20">blah blah blah blah</textarea><br> +</body></html> diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp index 5dc5e41..bd19578 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp @@ -264,30 +264,37 @@ void tst_QWebView::focusInputTypes() #else QVERIFY(webView->inputMethodHints() == Qt::ImhNone); #endif + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); // 'password' field webView->fireMouseClick(QPoint(20, 60)); QVERIFY(webView->inputMethodHints() == Qt::ImhHiddenText); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); // 'tel' field webView->fireMouseClick(QPoint(20, 110)); QVERIFY(webView->inputMethodHints() == Qt::ImhDialableCharactersOnly); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); // 'number' field webView->fireMouseClick(QPoint(20, 160)); QVERIFY(webView->inputMethodHints() == Qt::ImhDigitsOnly); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); // 'email' field webView->fireMouseClick(QPoint(20, 210)); QVERIFY(webView->inputMethodHints() == Qt::ImhEmailCharactersOnly); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); // 'url' field webView->fireMouseClick(QPoint(20, 260)); QVERIFY(webView->inputMethodHints() == Qt::ImhUrlCharactersOnly); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); // 'password' field webView->fireMouseClick(QPoint(20, 60)); QVERIFY(webView->inputMethodHints() == Qt::ImhHiddenText); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); // 'text' type webView->fireMouseClick(QPoint(20, 10)); @@ -297,6 +304,18 @@ void tst_QWebView::focusInputTypes() #else QVERIFY(webView->inputMethodHints() == Qt::ImhNone); #endif + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); + + // 'password' field + webView->fireMouseClick(QPoint(20, 60)); + QVERIFY(webView->inputMethodHints() == Qt::ImhHiddenText); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); + + qWarning("clicking on text area"); + // 'text area' field + webView->fireMouseClick(QPoint(20, 320)); + QVERIFY(webView->inputMethodHints() == Qt::ImhNone); + QVERIFY(webView->testAttribute(Qt::WA_InputMethodEnabled)); delete webView; -- cgit v0.12 From da48ab7726d97e305c17d8ad549ec548085df4ec Mon Sep 17 00:00:00 2001 From: Alex <qt-info@nokia.com> Date: Thu, 5 Aug 2010 17:43:52 +1000 Subject: Fix link error when building Bearer application with Qt Mobility QtMobility uses the Qt header when compiling applications which link against Mobility's Bearer library. Therefore QNetworkConfiguration::bearerName() cannot be inline and refer to the new QNetworkConfiguration::bearerTypeName() function (which doesn't exist in Mobility) Task-number: QTBUG-12378 Reviewed-by: Rohan McGovern (cherry picked from commit d524da81ee257a6bd67d32d0bc870280a7d5b8a4) --- src/network/bearer/qnetworkconfiguration.cpp | 7 +++++++ src/network/bearer/qnetworkconfiguration.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/network/bearer/qnetworkconfiguration.cpp b/src/network/bearer/qnetworkconfiguration.cpp index b645916..8d57b97 100644 --- a/src/network/bearer/qnetworkconfiguration.cpp +++ b/src/network/bearer/qnetworkconfiguration.cpp @@ -406,6 +406,13 @@ QList<QNetworkConfiguration> QNetworkConfiguration::children() const This function is deprecated. It is equivalent to calling bearerTypeName(), however bearerType() should be used in preference. */ +QString QNetworkConfiguration::bearerName() const +{ + // This function cannot be inline as it would break Qt Mobility. + // Qt Mobility uses the Qt header as well and since the Mobility Bearer library + // does not provide bearerTypeName() we cannot use an inline function. + return bearerTypeName(); +} /*! Returns the type of bearer used by this network configuration. diff --git a/src/network/bearer/qnetworkconfiguration.h b/src/network/bearer/qnetworkconfiguration.h index d9d36fd..e4f762a 100644 --- a/src/network/bearer/qnetworkconfiguration.h +++ b/src/network/bearer/qnetworkconfiguration.h @@ -120,7 +120,7 @@ public: Purpose purpose() const; // Required to maintain source compatibility with Qt Mobility. - QT_DEPRECATED inline QString bearerName() const { return bearerTypeName(); } + QT_DEPRECATED QString bearerName() const; BearerType bearerType() const; QString bearerTypeName() const; -- cgit v0.12 From 4796bebccdc67369ba3df5e34d48df8eed4b8b35 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Fri, 6 Aug 2010 10:55:23 +1000 Subject: Update def files for d524da81ee257a6bd67d32d0bc870280a7d5b8a4. (cherry picked from commit bbd444559359df3e211fedb28d40b175af778030) --- src/s60installs/eabi/QtNetworku.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index 6b34a19..2442ee8 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1131,7 +1131,7 @@ EXPORTS _ZNK21QNetworkAccessManager13configurationEv @ 1130 NONAME _ZNK21QNetworkAccessManager17networkAccessibleEv @ 1131 NONAME _ZNK21QNetworkAccessManager19activeConfigurationEv @ 1132 NONAME - _ZNK21QNetworkConfiguration10bearerNameEv @ 1133 NONAME ABSENT + _ZNK21QNetworkConfiguration10bearerNameEv @ 1133 NONAME _ZNK21QNetworkConfiguration10identifierEv @ 1134 NONAME _ZNK21QNetworkConfiguration18isRoamingAvailableEv @ 1135 NONAME _ZNK21QNetworkConfiguration4nameEv @ 1136 NONAME -- cgit v0.12 From f2ce3ed703b8e6622706c1dd9ad882d69491d9c7 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 6 Aug 2010 11:52:41 +0200 Subject: doc: Fixed some missing images. Task-nr: QTBUG-8246 (cherry picked from commit a273f6fb0b2410da772e7759125f955da9a5e19c) --- doc/src/examples/imagegestures.qdoc | 2 -- doc/src/getting-started/examples.qdoc | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/doc/src/examples/imagegestures.qdoc b/doc/src/examples/imagegestures.qdoc index 57479d8..3d4e467 100644 --- a/doc/src/examples/imagegestures.qdoc +++ b/doc/src/examples/imagegestures.qdoc @@ -32,8 +32,6 @@ This example shows how to enable gestures for a widget and use gesture input to perform actions. - \image imagegestures-example.png Screenshot of the Image Gestures example. - We use two classes to create the user interface for the application: \c MainWidget and \c ImageWidget. The \c MainWidget class is simply used as a container for the \c ImageWidget class, which we will configure to accept gesture input. Since we diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc index b6766d5..9cc7a95 100644 --- a/doc/src/getting-started/examples.qdoc +++ b/doc/src/getting-started/examples.qdoc @@ -529,7 +529,7 @@ \title OpenVG Examples \brief Accessing OpenVG from Qt - \image openvg-examples.png + \image opengl-examples.png Qt provides support for integration with OpenVG implementations on platforms with suitable drivers. -- cgit v0.12 From c38b15d09bfb6b570c02737c2926ff8382ffc2e9 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Fri, 6 Aug 2010 13:32:29 +0200 Subject: Removed duplicate case for const variable snippet. Reviewer: David Boddie Task number: QTBUG-10411 (cherry picked from commit 1f32f4013ab9178e8434bff847013a84491fe516) --- doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp b/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp index 088e043..0bd5fdf 100644 --- a/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp +++ b/doc/src/snippets/code/src_corelib_tools_qscopedpointer.cpp @@ -87,14 +87,9 @@ void myFunction(bool useSubClass) // is equivalent to: const QScopedPointer<QWidget> p(new QWidget()); - QWidget *const p = new QWidget(); - // is equivalent to: - const QScopedPointer<QWidget> p(new QWidget()); - const QWidget *p = new QWidget(); // is equivalent to: QScopedPointer<const QWidget> p(new QWidget()); - //! [2] //! [3] -- cgit v0.12 From fa7a5664d6c0192f13a7877b131f10913a2bc018 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Wed, 4 Aug 2010 11:42:48 +1000 Subject: Increase maximum heap size of QML Viewer Task-number: QTBUG-12029 Reviewed-by: Martin Jones (cherry picked from commit 4692a507dcdfbc830a0885016b6bd0bab4480bad) --- tools/qml/qml.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro index efb82d1..d794005 100644 --- a/tools/qml/qml.pro +++ b/tools/qml/qml.pro @@ -35,7 +35,7 @@ maemo5 { symbian { TARGET.UID3 = 0x20021317 include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) - TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + TARGET.EPOCHEAPSIZE = 0x20000 0x4000000 TARGET.CAPABILITY = NetworkServices ReadUserData !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { LIBS += -lsensrvclient -lsensrvutil -- cgit v0.12 From 8fa3600f7449a931c919e0896633b7188e6d20f2 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Thu, 5 Aug 2010 17:24:31 +0200 Subject: Adding a description for the Spectrum Analyzer demo. For QTBUG-12180 Reviewed by: David Boddie (cherry picked from commit 4bc408c6faade543c76fa0c7b8841ce72c239688) --- doc/src/demos/spectrum.qdoc | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 doc/src/demos/spectrum.qdoc diff --git a/doc/src/demos/spectrum.qdoc b/doc/src/demos/spectrum.qdoc new file mode 100644 index 0000000..944f944 --- /dev/null +++ b/doc/src/demos/spectrum.qdoc @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in a +** written agreement between you and Nokia. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example demos/spectrum + \title Spectrum Analyzer + +This application is a demo which uses the QtMultimedia APIs to capture and +play back PCM audio. While either recording or playback is ongoing, the +application performs real-time level and frequency spectrum analysis, +displaying the results in its main window. + + +*/ + -- cgit v0.12 From 134a37b2d24d41ab4b5c4b70a43e399584c633f3 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 6 Aug 2010 14:30:42 +0200 Subject: doc: Re-introduced next/previous page links in the footer. Task-Nr: QTBUG-12278 (cherry picked from commit 2118f407b02654e9e3c6706647e8b9b711e8982b) --- tools/qdoc3/htmlgenerator.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 76d8c0d..e6396fe 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1882,6 +1882,61 @@ void HtmlGenerator::generateHeader(const QString& title, out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); } + navigationLinks.clear(); + + if (node && !node->links().empty()) { + QPair<QString,QString> linkPair; + QPair<QString,QString> anchorPair; + const Node *linkNode; + + if (node->links().contains(Node::PreviousLink)) { + linkPair = node->links()[Node::PreviousLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " <link rel=\"prev\" href=\"" + << anchorPair.first << "\" />\n"; + + navigationLinks += "[Previous: <a href=\"" + anchorPair.first + "\">"; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protect(anchorPair.second); + else + navigationLinks += protect(linkPair.second); + navigationLinks += "</a>]\n"; + } + if (node->links().contains(Node::NextLink)) { + linkPair = node->links()[Node::NextLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " <link rel=\"next\" href=\"" + << anchorPair.first << "\" />\n"; + + navigationLinks += "[Next: <a href=\"" + anchorPair.first + "\">"; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protect(anchorPair.second); + else + navigationLinks += protect(linkPair.second); + navigationLinks += "</a>]\n"; + } + if (node->links().contains(Node::StartLink)) { + linkPair = node->links()[Node::StartLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + out() << " <link rel=\"start\" href=\"" + << anchorPair.first << "\" />\n"; + } + } + #if 0 // Removed for new doc format. MWS if (node && !node->links().empty()) out() << "<p>\n" << navigationLinks << "</p>\n"; -- cgit v0.12 From fb7810f733ad9719604e43e535ae0c8dc708cb10 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Fri, 6 Aug 2010 17:07:51 +0200 Subject: Modified descriptions of QBasicTimer class and isActive() function. Reviewed by: David Boddie Task: QTBUG-12313 (cherry picked from commit ab3ce23e3b5e28389b9f6f9bd5bc69cd42fcae5d) --- src/corelib/kernel/qbasictimer.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qbasictimer.cpp b/src/corelib/kernel/qbasictimer.cpp index d176170..d595ac1 100644 --- a/src/corelib/kernel/qbasictimer.cpp +++ b/src/corelib/kernel/qbasictimer.cpp @@ -54,7 +54,8 @@ QT_BEGIN_NAMESPACE This is a fast, lightweight, and low-level class used by Qt internally. We recommend using the higher-level QTimer class rather than this class if you want to use timers in your - applications. + applications. Note that this timer is a repeating timer that + will send subsequent timer events unless the stop() function is called. To use this class, create a QBasicTimer, and call its start() function with a timeout interval and with a pointer to a QObject @@ -88,8 +89,8 @@ QT_BEGIN_NAMESPACE /*! \fn bool QBasicTimer::isActive() const - Returns true if the timer is running, has not yet timed - out, and has not been stopped; otherwise returns false. + Returns true if the timer is running and has not been stopped; otherwise + returns false. \sa start() stop() */ -- cgit v0.12 From df00d9b1b18a008110324f0b459cc783250755ee Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 5 Aug 2010 15:10:02 +1000 Subject: Fix warning from whining complier. Task-number: QTBUG-12473 Reviewed-by: Aaron Kennedy (cherry picked from commit 1ca575eaf7c166f823b82132110ea066be819540) --- src/declarative/qml/qdeclarativeprivate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h index b2d7451..cb916bf 100644 --- a/src/declarative/qml/qdeclarativeprivate.h +++ b/src/declarative/qml/qdeclarativeprivate.h @@ -132,6 +132,7 @@ namespace QDeclarativePrivate template <typename T, bool hasMember> class has_attachedPropertiesMethod { + public: typedef int yes_type; typedef char no_type; @@ -139,7 +140,6 @@ namespace QDeclarativePrivate static yes_type check(ReturnType *(*)(QObject *)); static no_type check(...); - public: static bool const value = sizeof(check(&T::qmlAttachedProperties)) == sizeof(yes_type); }; -- cgit v0.12 From 815ae300c9feb1930a338e8ab49589b14c57d0de Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Tue, 3 Aug 2010 21:03:35 +0200 Subject: fix compilation with -plugin-kbd-* it certainly is not such a good idea to write mouse when one means kbd ... Task-number: QTBUG-12483 (cherry picked from commit 9f6bcd7ff39462ec2028ddbe27fc04911b856018) --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 4d9bc46..b5bf38c 100755 --- a/configure +++ b/configure @@ -2047,7 +2047,7 @@ while [ "$#" -gt 0 ]; do [ "$VAR" = "decoration" ] && QMakeVar del "${VAR}s" "$VAL" [ "$VAR" = "decoration" ] && CFG_DECORATION_ON=`echo "${CFG_DECORATION_ON} " | sed "s,${VAL} ,,g"` && CFG_DECORATION_PLUGIN="$CFG_DECORATION_PLUGIN ${VAL}" [ "$VAR" = "kbd" ] && QMakeVar del "${VAR}s" "$VAL" - [ "$VAR" = "kbd" ] && CFG_KBD_ON=`echo "${CFG_MOUSE_ON} " | sed "s,${VAL} ,,g"` && CFG_KBD_PLUGIN="$CFG_KBD_PLUGIN ${VAL}" + [ "$VAR" = "kbd" ] && CFG_KBD_ON=`echo "${CFG_KBD_ON} " | sed "s,${VAL} ,,g"` && CFG_KBD_PLUGIN="$CFG_KBD_PLUGIN ${VAL}" [ "$VAR" = "mouse" ] && QMakeVar del "${VAR}s" "$VAL" [ "$VAR" = "mouse" ] && CFG_MOUSE_ON=`echo "${CFG_MOUSE_ON} " | sed "s,${VAL} ,,g"` && CFG_MOUSE_PLUGIN="$CFG_MOUSE_PLUGIN ${VAL}" [ "$VAR" = "gfx" ] && QMakeVar del "${VAR}s" "$VAL" -- cgit v0.12 From c3fa271fb903abaf4605be774de23c185e14f4c5 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 5 Aug 2010 16:27:56 +1000 Subject: Rename example component file for clarity Task-number: QTBUG-12633 (cherry picked from commit dc2f700a006d827db0eaf8d1e01e4d9c7c8c0baa) --- .../keyinteraction/focus/Core/ContextMenu.qml | 7 ++ .../keyinteraction/focus/Core/GridMenu.qml | 7 +- .../keyinteraction/focus/Core/ListMenu.qml | 105 +++++++++++++++++++++ .../keyinteraction/focus/Core/ListViews.qml | 102 -------------------- .../declarative/keyinteraction/focus/focus.qml | 11 ++- 5 files changed, 123 insertions(+), 109 deletions(-) create mode 100644 examples/declarative/keyinteraction/focus/Core/ListMenu.qml delete mode 100644 examples/declarative/keyinteraction/focus/Core/ListViews.qml diff --git a/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml b/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml index 15e77de..ba49d14 100644 --- a/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml +++ b/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml @@ -53,6 +53,13 @@ FocusScope { color: "#D1DBBD" focus: true Keys.onRightPressed: mainView.focus = true + + Text { + anchors { top: parent.top; horizontalCenter: parent.horizontalCenter; margins: 30 } + color: "black" + font.pixelSize: 14 + text: "Context Menu" + } } } } diff --git a/examples/declarative/keyinteraction/focus/Core/GridMenu.qml b/examples/declarative/keyinteraction/focus/Core/GridMenu.qml index 19f7235..88840cb 100644 --- a/examples/declarative/keyinteraction/focus/Core/GridMenu.qml +++ b/examples/declarative/keyinteraction/focus/Core/GridMenu.qml @@ -43,7 +43,10 @@ import Qt 4.7 FocusScope { property alias interactive: gridView.interactive - onActiveFocusChanged: if (activeFocus) mainView.state = "" + onActiveFocusChanged: { + if (activeFocus) + mainView.state = "" + } Rectangle { anchors.fill: parent @@ -60,7 +63,7 @@ FocusScope { focus: true model: 12 - KeyNavigation.down: listViews + KeyNavigation.down: listMenu KeyNavigation.left: contextMenu delegate: Item { diff --git a/examples/declarative/keyinteraction/focus/Core/ListMenu.qml b/examples/declarative/keyinteraction/focus/Core/ListMenu.qml new file mode 100644 index 0000000..6100b32 --- /dev/null +++ b/examples/declarative/keyinteraction/focus/Core/ListMenu.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 + +FocusScope { + clip: true + + onActiveFocusChanged: { + if (activeFocus) + mainView.state = "showListViews" + } + + ListView { + id: list1 + y: activeFocus ? 10 : 40; width: parent.width / 3; height: parent.height - 20 + focus: true + KeyNavigation.up: gridMenu; KeyNavigation.left: contextMenu; KeyNavigation.right: list2 + model: 10; cacheBuffer: 200 + delegate: ListViewDelegate {} + + Behavior on y { + NumberAnimation { duration: 600; easing.type: Easing.OutQuint } + } + } + + ListView { + id: list2 + y: activeFocus ? 10 : 40; x: parseInt(parent.width / 3); width: parent.width / 3; height: parent.height - 20 + KeyNavigation.up: gridMenu; KeyNavigation.left: list1; KeyNavigation.right: list3 + model: 10; cacheBuffer: 200 + delegate: ListViewDelegate {} + + Behavior on y { + NumberAnimation { duration: 600; easing.type: Easing.OutQuint } + } + } + + ListView { + id: list3 + y: activeFocus ? 10 : 40; x: parseInt(2 * parent.width / 3); width: parent.width / 3; height: parent.height - 20 + KeyNavigation.up: gridMenu; KeyNavigation.left: list2 + model: 10; cacheBuffer: 200 + delegate: ListViewDelegate {} + + Behavior on y { + NumberAnimation { duration: 600; easing.type: Easing.OutQuint } + } + } + + Rectangle { width: parent.width; height: 1; color: "#D1DBBD" } + + Rectangle { + y: 1; width: parent.width; height: 10 + gradient: Gradient { + GradientStop { position: 0.0; color: "#3E606F" } + GradientStop { position: 1.0; color: "transparent" } + } + } + + Rectangle { + y: parent.height - 10; width: parent.width; height: 10 + gradient: Gradient { + GradientStop { position: 1.0; color: "#3E606F" } + GradientStop { position: 0.0; color: "transparent" } + } + } +} diff --git a/examples/declarative/keyinteraction/focus/Core/ListViews.qml b/examples/declarative/keyinteraction/focus/Core/ListViews.qml deleted file mode 100644 index 3d6ceab..0000000 --- a/examples/declarative/keyinteraction/focus/Core/ListViews.qml +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import Qt 4.7 - -FocusScope { - clip: true - - onActiveFocusChanged: if (activeFocus) mainView.state = "showListViews" - - ListView { - id: list1 - y: activeFocus ? 10 : 40; width: parent.width / 3; height: parent.height - 20 - focus: true - KeyNavigation.up: gridMenu; KeyNavigation.left: contextMenu; KeyNavigation.right: list2 - model: 10; cacheBuffer: 200 - delegate: ListViewDelegate {} - - Behavior on y { - NumberAnimation { duration: 600; easing.type: Easing.OutQuint } - } - } - - ListView { - id: list2 - y: activeFocus ? 10 : 40; x: parseInt(parent.width / 3); width: parent.width / 3; height: parent.height - 20 - KeyNavigation.up: gridMenu; KeyNavigation.left: list1; KeyNavigation.right: list3 - model: 10; cacheBuffer: 200 - delegate: ListViewDelegate {} - - Behavior on y { - NumberAnimation { duration: 600; easing.type: Easing.OutQuint } - } - } - - ListView { - id: list3 - y: activeFocus ? 10 : 40; x: parseInt(2 * parent.width / 3); width: parent.width / 3; height: parent.height - 20 - KeyNavigation.up: gridMenu; KeyNavigation.left: list2 - model: 10; cacheBuffer: 200 - delegate: ListViewDelegate {} - - Behavior on y { - NumberAnimation { duration: 600; easing.type: Easing.OutQuint } - } - } - - Rectangle { width: parent.width; height: 1; color: "#D1DBBD" } - - Rectangle { - y: 1; width: parent.width; height: 10 - gradient: Gradient { - GradientStop { position: 0.0; color: "#3E606F" } - GradientStop { position: 1.0; color: "transparent" } - } - } - - Rectangle { - y: parent.height - 10; width: parent.width; height: 10 - gradient: Gradient { - GradientStop { position: 1.0; color: "#3E606F" } - GradientStop { position: 0.0; color: "transparent" } - } - } -} diff --git a/examples/declarative/keyinteraction/focus/focus.qml b/examples/declarative/keyinteraction/focus/focus.qml index 56fdffc..9463192 100644 --- a/examples/declarative/keyinteraction/focus/focus.qml +++ b/examples/declarative/keyinteraction/focus/focus.qml @@ -55,27 +55,28 @@ Rectangle { GridMenu { id: gridMenu - width: parent.width; height: 320 + focus: true interactive: parent.activeFocus } - ListViews { - id: listViews + ListMenu { + id: listMenu y: 320; width: parent.width; height: 320 } Rectangle { id: shade anchors.fill: parent - color: "black"; opacity: 0 + color: "black" + opacity: 0 } states: State { name: "showListViews" PropertyChanges { target: gridMenu; y: -160 } - PropertyChanges { target: listViews; y: 160 } + PropertyChanges { target: listMenu; y: 160 } } transitions: Transition { -- cgit v0.12 From 7824b7757516fbf3769ba1af4367241076b9628e Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 5 Aug 2010 16:01:56 +1000 Subject: Improve docs on QML Animation page and associated elements Task-number: QTBUG-12666 (cherry picked from commit a9aaaf30b6c542b5c9e3c1e1681088ab26a530c0) --- doc/src/declarative/animation.qdoc | 345 +++++++++++++++------ .../snippets/declarative/animation-behavioral.qml | 61 ++++ doc/src/snippets/declarative/animation-easing.qml | 51 +++ .../snippets/declarative/animation-elements.qml | 66 ++++ doc/src/snippets/declarative/animation-groups.qml | 104 +++++++ .../declarative/animation-propertyvaluesource.qml | 51 +++ .../declarative/animation-signalhandler.qml | 55 ++++ .../snippets/declarative/animation-standalone.qml | 63 ++++ .../snippets/declarative/animation-transitions.qml | 62 ++++ doc/src/snippets/declarative/animation.qml | 181 ----------- doc/src/snippets/declarative/transition.qml | 9 +- src/declarative/util/qdeclarativeanimation.cpp | 52 +++- src/declarative/util/qdeclarativebehavior.cpp | 9 +- .../util/qdeclarativesmoothedanimation.cpp | 2 +- .../util/qdeclarativespringanimation.cpp | 3 +- src/declarative/util/qdeclarativestate.cpp | 2 +- src/declarative/util/qdeclarativestategroup.cpp | 4 +- src/declarative/util/qdeclarativetransition.cpp | 21 +- 18 files changed, 843 insertions(+), 298 deletions(-) create mode 100644 doc/src/snippets/declarative/animation-behavioral.qml create mode 100644 doc/src/snippets/declarative/animation-easing.qml create mode 100644 doc/src/snippets/declarative/animation-elements.qml create mode 100644 doc/src/snippets/declarative/animation-groups.qml create mode 100644 doc/src/snippets/declarative/animation-propertyvaluesource.qml create mode 100644 doc/src/snippets/declarative/animation-signalhandler.qml create mode 100644 doc/src/snippets/declarative/animation-standalone.qml create mode 100644 doc/src/snippets/declarative/animation-transitions.qml delete mode 100644 doc/src/snippets/declarative/animation.qml diff --git a/doc/src/declarative/animation.qdoc b/doc/src/declarative/animation.qdoc index 401cf16..7416341 100644 --- a/doc/src/declarative/animation.qdoc +++ b/doc/src/declarative/animation.qdoc @@ -29,134 +29,301 @@ \page qdeclarativeanimation.html \title QML Animation -Animation in QML is done by animating properties of objects. Properties of type -real, int, color, rect, point, size, and vector3d can all be animated. -QML supports three main forms of animation: basic property animation, -transitions, and property behaviors. +In QML, animations are created by applying animation objects to object property +values to gradually change them over time. Animation objects are created from +the built-in set of animation elements, which can be used to animate various +types of property values. In addition, animation objects can be applied in +different ways depending on the context in which they are required. + +To create an animation, use an appropriate animation element for the type of +the property that is to be animated, and apply the animation depending on the +type of behavior that is required. This page describes the \l {Types of +Animations} that can be created and the \l {Animation Elements} that are used +to create these animations. + + +\section1 Types of Animations + +An animation is created in different ways depending on the context in which it +is required. Suppose a \l Rectangle's movement - that is, changes in its \c x +or \c y property values - should be animated. The semantics of the animation +differ depending on whether you want to create: + +\list +\o An animation that moves the \l Rectangle as soon as it is created, to a +known position +\o An animation that only triggers when the \l Rectangle is moved by external +sources - for example, when the mouse is clicked, animate the movement to the +mouse position +\o An animation that triggers when a particular signal is received +\o A standalone animation that is not bound to the \l Rectangle's movement, but +instead can be started and stopped from script as required +\o An animation that only triggers during \l{QML States}{state changes} +\endlist + +To support these different types of animation methods, QML provides several +methods for defining an animation. These are: + +\list +\o Creating an \l{Animations as Property Value Sources}{animation using +property value sources}, to immediately animate a specific property +\o Using \l{Behavioral Animations}{behavioral animations}, which are triggered +when a property changes value +\o \l{Animations in a Signal Handler}{Within a signal handler}, to be triggered +when a signal is received +\o As a \l{Standalone Animation}{standalone animation}, that can be +started/stopped from script and can be rebound to different objects +\o Using \l{Transitions}{transitions}, to provide animations between \l{QML +States}{state changes} +\endlist + +These methods are demonstrated below. Notice these examples use +PropertyAnimation, which is one of several QML elements that can be used to +create an animation. See the \l {Animation Elements} section further below for +details. -\tableofcontents -\section1 Basic Property Animation -The simplest form of animation is a \l PropertyAnimation, which can animate all of the property -types listed above. If the property you are animating is a number or color, you can alternatively use -NumberAnimation or ColorAnimation. These elements don't add any additional functionality, -but will help enforce type correctness and are slightly more efficient. +\section2 Animations as Property Value Sources + +An animation is applied as a \l{QDeclarativePropertyValueSource}{property value +source} using the \e Animation \bold on \e Property syntax. Here is a \l +Rectangle whose movement is animated using this method: + +\snippet doc/src/snippets/declarative/animation-propertyvaluesource.qml 0 + +This applies a PropertyAnimation to the \l Rectangle's \c x and \c y properties +to animate from their current values (i.e. zero) to 50, over 1000 milliseconds. +The animation starts as soon as the \l Rectangle is loaded. To animate from +specific values rather than the current \c x and \c y values, set the +PropertyAnimation's \l {PropertyAnimation::}{from} property. + +Specifying an animation as a property value source is useful for animating a +property to a particular value as soon as the object is loaded. + + +\section2 Behavioral Animations + +Often an animation should be applied whenever a particular property value +changes. In these cases, a \l Behavior can be used to specify a default +animation for a property change. Here is an example: + +\snippet doc/src/snippets/declarative/animation-behavioral.qml 0 -A property animation can be specified as a value source using the \e Animation \bold on \e property syntax. This is especially useful -for repeating animations. +This \l Rectangle has \l Behavior objects applied to its \c x and \c y +properties. Whenever these properties change (in this case, when the mouse is +clicked within the parent \l Item), the PropertyAnimation objects defined +within the behaviors will be applied to these properties, thus animating the \l +Rectangle's movement to its new position. Unlike the method of \l {Animations +as Property Value Sources}{defining an animation as a property value source}, +which creates a one-time animation that animates a property to a known value, a +behavioral animation is an animation that is triggered \e {in response to} a +value change. -The following example creates a bouncing effect: -\snippet doc/src/snippets/declarative/animation.qml property-anim-1 +Any changes to these properties will trigger their animations. If \c x or \c y +were bound to other properties, and those properties changed, the animation +would be triggered. The \l{Behavior::}{enabled} property can be used to force a +\l Behavior to only apply under certain circumstances. -\image propanim.gif +Notice that unlike for property value source animations, the +PropertyAnimation's \l {PropertyAnimation::}{from} and \l +{PropertyAnimation::}{to} properties do not need to be defined because these +values are already provided, respectively, by the \l Rectangle's current values +and the new values set in the \c onClicked handler. If these properties were +defined anyway, they would override the default values. + +See the \l {declarative/animation/behaviors}{Behaviors example} for a +demonstration of behavioral animations. + + +\section2 Animations in a Signal Handler + +An animation can be created within a signal handler to be triggered when the +signal is received. For example: + +\snippet doc/src/snippets/declarative/animation-signalhandler.qml 0 + +The PropertyAnimation is triggered when the MouseArea is clicked, animating the +\c x and \c y properties to a value of 50 over 1000 milliseconds. Since the +animation is not bound to a particular object or property, it must define the +\l {PropertyAnimation::}{target} and \l {PropertyAnimation::}{property} (or \l +{PropertyAnimation::}{targets} and \l{PropertyAnimation::}{properties}) values. +The \l {PropertyAnimation::}{to} property is also required to specify the new +\c x and \c y values. + + +\section2 Standalone Animations + +Animations can also be created as ordinary QML objects that are not bound to +any particular objects and properties. An example: + +\snippet doc/src/snippets/declarative/animation-standalone.qml 0 + +A standalone animation is not running by default and must be started explicitly +using the \l {Animation::}{running} property or \l {Animation::}{start()} and +\l {Animation::}{stop()} methods. Since the animation is not bound to a +particular object or property, it must define the \l +{PropertyAnimation::}{target} and \l {PropertyAnimation::}{property} (or \l +{PropertyAnimation::}{targets} and \l{PropertyAnimation::}{properties}) values. +The \l {PropertyAnimation::}{to} property is also required to specify the new +\c x and \c y values. (The \l {PropertyAnimation::}{from} value can optionally +be provided.) + +Standalone animations are useful when an animation is not targeted towards a +single object property and the animation should be explicitly started and +stopped. + + +\section2 Transitions -When you assign an animation as a value source, you do not need to specify \c property -or \c target values; they are automatically selected for you. You do, however, need to specify a \c to value. -An animation specified as a value source will be \c running by default. +Transitions are used to describe the animations to be applied when a \l {QML +States}{state change} occurs. To create a transition, define a \l Transition +object and add it to an item's \l {Item::}{transitions} property. An example: -For example, here is a rectangle that uses a \l NumberAnimation value source to animate the movement -from its current position to an \c x value of 50. The animation starts immediately, and only the \c to -property is required: +\snippet doc/src/snippets/declarative/animation-transitions.qml 0 -\snippet doc/src/snippets/declarative/animation.qml property-anim-2 +When the \l Rectangle changes to the \e moved state, its \c x and \c y property +values are changed by the PropertyChanges object, and the PropertyAnimation +defined within the \l Transition is triggered on these properties. The +animation will not be applied at any time other than during the state change. -A property animation can also be specified as a resource that is manipulated from script. +Notice the example does not set any \l {PropertyAnimation::}{from} and \l +{PropertyAnimation::}{to} values for the PropertyAnimation. As a convenience, +these properties are automatically set to the values of \c x and \c y before +and after the state change, respectively. However, they can be explicitly set +if these values should be overrided. -\snippet doc/src/snippets/declarative/animation.qml property-anim-3 +Also notice the PropertyAnimation does not need to specify a \l +{PropertyAnimation::}{target} object; any \c x or \c y value of any object that +has changed during the state change will be animated. However, the target can +be set if the animation should be restricted to certain objects. -As can be seen, when an animation is used like this (as opposed to as a value source) you will need -to explicitly set the \c target and \c property to animate. This also the only case where -an animation needs to be started explictly by either setting the \c running property to -true or calling the \c start() method. +The top-level animations in a \l Transition are run in parallel. To run them +one after the other, use a SequentialAnimation, as shown below in \l {Grouping +Animations}. -Animations can be joined into a group using SequentialAnimation and ParallelAnimation. +See the \l Transition documentation for more information. -See the \l {declarative/animation/basics}{Animation basics example} for a demonstration of creating and combining multiple animations in QML. -\target state-transitions -\section1 Transitions +\section1 Animation Elements -\l Transition elements describe the animations to perform when \l{qmlstates}{state} changes occur. A transition -can only be triggered by a state change. +To create an animation, choose from one of the built-in QML animation elements. +While the above examples are demonstrated using PropertyAnimation, they could +have used other elements depending on the type of the property to be animated +and whether a single or multiple animations are required. -For example, a \l Transition could describe how an item moves from its initial position to its new position: +All animation elements inherit from the \l Animation element. It is not +possible to create \l Animation objects; instead, this element provides the +essential properties and methods for animation elements. For example, it allows +animations to be started and stopped through the \l {Animation::}{running} +property and the \l{Animation::}{start()} and \l{Animation::}{stop()} methods. +It can also define the number of \l {Animation::}{loops} for an animation. -\snippet doc/src/snippets/declarative/animation.qml transitions-1 -As can be seen, transitions make use of the same basic animation classes introduced above. -In the above example we have specified that we want to animate the \c x and \c y properties, but have not -specified the objects to animate or the \c to values. By default these values are supplied by the framework; -the animation will animate any \c targets whose \c x and \c y have changed, and the \c to values will be those -defined in the end state. You can always supply explicit values to override these implicit values when needed. +\section2 Property Animation Elements -\snippet doc/src/snippets/declarative/animation.qml transitions-2 +PropertyAnimation is the most basic animation element for animating a property. +It can be used to animate \c real, \c int, \c color, \c rect, \c point, \c size, and +\c vector3d properties. It is inherited by NumberAnimation, ColorAnimation, +RotationAnimation and Vector3dAnimation: NumberAnimation provides a more +efficient implementation for animating \c real and \c int properties, and +Vector3dAnimation does the same for \c vector3d properties. ColorAnimation +and RotationAnimation provide more specific attributes for animating color +and rotation changes. -QML transitions have selectors to determine which state changes a transition should apply to. -The following transition will only be triggered when we enter into the \c "details" state. -(The "*" value is a wildcard value that specifies the transition should be applied when changing -from \e any state to the "details" state.) +A ColorAnimation allows color values for the \l {ColorAnimation::}{from} +and \l {ColorAnimation::}{to} properties. The +following animates the rectangle's \l {Rectangle::color} property: -\code -Transition { - from: "*" - to: "details" - ... -} -\endcode +\snippet doc/src/snippets/declarative/animation-elements.qml color -Transitions can happen in parallel, in sequence, or in any combination of the two. By default, the top-level -animations in a transition will happen in parallel. The following example shows a rather complex transition -making use of both sequential and parallel animations: +RotationAnimation allows a rotation's direction to be specified. The following +animates the rectangle's \l {Item::rotation} property: -\snippet doc/src/snippets/declarative/animation.qml transitions-3 +\snippet doc/src/snippets/declarative/animation-elements.qml rotation +In addition, the following specialized animation elements are available: -See \l {declarative/animation/states}{States and Transitions example} for a simple example of how transitions can be applied. +\list +\o SmoothedAnimation: a specialized NumberAnimation that provides smooth +changes in animation when the target value changes +\o SpringAnimation: provides a spring-like animation with specialized +attributes such as \l {SpringAnimation::}{mass}, +\l{SpringAnimation::}{damping} and \l{SpringAnimation::}{epsilon} +\o ParentAnimation: used for animating a parent change (see ParentChange) +\o AnchorAnimation: used for animating an anchor change (see AnchorChanges) +\endlist +See their respective documentation pages for more details. -\section1 Property Behaviors -A property \l {Behavior}{behavior} specifies a default animation to run whenever the property's value changes, regardless -of what caused the change. The \c enabled property can be used to force a \l Behavior -to only apply under certain circumstances. +\section3 Easing + +Any PropertyAnimation-based animations can specify \l +{PropertyAnimation::easing.type}{easing attributes} to control the +easing curve applied when a property value is animated. These control the +effect of the animation on the property value, to provide visual effects like +bounce, acceleration and deceleration. + +For example, this modified version of an \l {Animations as Property Value +Sources}{earlier example} uses \c Easing.OutBounce to create a bouncing effect +when the animation reaches its target value: + +\snippet doc/src/snippets/declarative/animation-easing.qml 0 + +The \l{declarative/animation/easing}{easing example} visually demonstrates each +of the different easing types. + +\section2 Grouping Animations + +Multiple animations can be combined into a single animation using one of the +animation group elements: ParallelAnimation or SequentialAnimation. As their +names suggest, animations in a ParallelAnimation are run at the same time, +while animations in a SequentialAnimation are run one after the other. + +To run multiple animations, define the animations within an animation group. +The following example creates a SequentialAnimation that runs three animations +one after the other: a NumberAnimation, a PauseAnimation and another +NumberAnimation. The SequentialAnimation is applied as a \l{Animations as +Property Value Sources}{property value source animation} on the image's \c y +property, so that the animation starts as soon as the image is loaded, moving +the image up and down: + +\snippet doc/src/snippets/declarative/animation-groups.qml 0 +\image propanim.gif + +Since the SequentialAnimation is applied to the \c y property, the individual +animations within the group are automatically applied to the \c y property as +well; it is not required to set their \l{PropertyAnimation::}{properties} +values to a particular property. -In the following snippet, we specify that we want the \c x position of \c redRect to be animated -whenever it changes. The animation will last 300 milliseconds and use an \l{PropertyAnimation::easing.type}{Easing.InOutQuad} easing curve. +Animation groups can be nested. Here is a rather complex animation making use +of both sequential and parallel animations: -\snippet doc/src/snippets/declarative/animation.qml behavior +\snippet doc/src/snippets/declarative/animation-groups.qml 1 -Like using an animation as a value source, when used in a \l Behavior and animation does not need to specify -a \c target or \c property. +Once individual animations are placed into a SequentialAnimation or +ParallelAnimation, they can no longer be started and stopped independently. The +sequential or parallel animation must be started and stopped as a group. -To trigger this behavior, we could enter a state that changes \c x: +See the \l {declarative/animation/basics}{Animation basics example} for a +demonstration of creating and combining multiple animations in QML. -\qml -State { - name: "myState" - PropertyChanges { - target: redRect - x: 200 - ... - } -} -\endqml -Or, update \c x from a script: -\qml -MouseArea { - .... - onClicked: redRect.x = 24; -} -\endqml +\section2 Other Animation Elements -If \c x were bound to another property, triggering the binding would also trigger the behavior. +In addition, QML provides several other elements useful for animation: -If a state change has a transition animation matching a property with a \l Behavior, the transition animation -will override the \l Behavior for that state change. +\list +\o PauseAnimation: enables pauses during animations +\o ScriptAction: allows JavaScript to be executed during an animation, and can +be used together with StateChangeScript to reused existing scripts +\o PropertyAction: changes a property \e immediately during an animation, +without animating the property change +\endlist -The \l {declarative/animation/behaviors}{Behaviors example} shows how behaviors can be used to provide animations. +See their respective documentation pages for more details. */ diff --git a/doc/src/snippets/declarative/animation-behavioral.qml b/doc/src/snippets/declarative/animation-behavioral.qml new file mode 100644 index 0000000..dc79018 --- /dev/null +++ b/doc/src/snippets/declarative/animation-behavioral.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Item { + width: 100; height: 100 + + Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + Behavior on x { PropertyAnimation { duration: 500 } } + Behavior on y { PropertyAnimation { duration: 500 } } + } + + MouseArea { + anchors.fill: parent + onClicked: { rect.x = mouse.x; rect.y = mouse.y } + } +} +//![0] + diff --git a/doc/src/snippets/declarative/animation-easing.qml b/doc/src/snippets/declarative/animation-easing.qml new file mode 100644 index 0000000..e65c470 --- /dev/null +++ b/doc/src/snippets/declarative/animation-easing.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + width: 100; height: 100 + color: "red" + + PropertyAnimation on x { to: 50; duration: 1000; easing.type: Easing.OutBounce } + PropertyAnimation on y { to: 50; duration: 1000; easing.type: Easing.OutBounce } +} +//![0] + diff --git a/doc/src/snippets/declarative/animation-elements.qml b/doc/src/snippets/declarative/animation-elements.qml new file mode 100644 index 0000000..7cb253e --- /dev/null +++ b/doc/src/snippets/declarative/animation-elements.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Row { + +//![color] +Rectangle { + width: 100; height: 100 + + ColorAnimation on color { from: "red"; to: "yellow"; duration: 1000 } +} +//![color] + +//![rotation] +Item { + width: 300; height: 300 + + Rectangle { + width: 100; height: 100; anchors.centerIn: parent + color: "red" + + RotationAnimation on rotation { to: 90; direction: RotationAnimation.Clockwise } + } +} +//![rotation] + +} diff --git a/doc/src/snippets/declarative/animation-groups.qml b/doc/src/snippets/declarative/animation-groups.qml new file mode 100644 index 0000000..8a8f925 --- /dev/null +++ b/doc/src/snippets/declarative/animation-groups.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import Qt 4.7 + +Row { + +//![0] +Rectangle { + id: rect + width: 120; height: 200 + + Image { + id: img + source: "pics/qt.png" + anchors.horizontalCenter: parent.horizontalCenter + y: 0 + + SequentialAnimation on y { + loops: Animation.Infinite + NumberAnimation { to: rect.height - img.height; easing.type: Easing.OutBounce; duration: 2000 } + PauseAnimation { duration: 1000 } + NumberAnimation { to: 0; easing.type: Easing.OutQuad; duration: 1000 } + } + } +} +//![0] + +//![1] +Rectangle { + id: redRect + width: 100; height: 100 + color: "red" + + MouseArea { id: mouseArea; anchors.fill: parent } + + states: State { + name: "pressed"; when: mouseArea.pressed + PropertyChanges { target: redRect; color: "blue"; y: mouseArea.mouseY; width: mouseArea.mouseX } + } + + transitions: Transition { + + SequentialAnimation { + ColorAnimation { duration: 200 } + PauseAnimation { duration: 100 } + + ParallelAnimation { + NumberAnimation { + duration: 500 + easing.type: Easing.OutBounce + targets: redRect + properties: "y" + } + + NumberAnimation { + duration: 800 + easing.type: Easing.InOutQuad + targets: redRect + properties: "width" + } + } + } + } +} +//![1] + +} diff --git a/doc/src/snippets/declarative/animation-propertyvaluesource.qml b/doc/src/snippets/declarative/animation-propertyvaluesource.qml new file mode 100644 index 0000000..ac5f071 --- /dev/null +++ b/doc/src/snippets/declarative/animation-propertyvaluesource.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + width: 100; height: 100 + color: "red" + + PropertyAnimation on x { to: 50; duration: 1000; loops: Animation.Infinite } + PropertyAnimation on y { to: 50; duration: 1000; loops: Animation.Infinite } +} +//![0] + diff --git a/doc/src/snippets/declarative/animation-signalhandler.qml b/doc/src/snippets/declarative/animation-signalhandler.qml new file mode 100644 index 0000000..749596c --- /dev/null +++ b/doc/src/snippets/declarative/animation-signalhandler.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + MouseArea { + anchors.fill: parent + onClicked: PropertyAnimation { target: rect; properties: "x,y"; to: 50; duration: 1000 } + } +} + +//![0] + diff --git a/doc/src/snippets/declarative/animation-standalone.qml b/doc/src/snippets/declarative/animation-standalone.qml new file mode 100644 index 0000000..d75fd92 --- /dev/null +++ b/doc/src/snippets/declarative/animation-standalone.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + PropertyAnimation { + id: animation + target: rect + properties: "x,y" + duration: 1000 + } + + MouseArea { + anchors.fill: parent + onClicked: { + animation.to = 50; + animation.running = true; + } + } +} +//![0] diff --git a/doc/src/snippets/declarative/animation-transitions.qml b/doc/src/snippets/declarative/animation-transitions.qml new file mode 100644 index 0000000..3265065 --- /dev/null +++ b/doc/src/snippets/declarative/animation-transitions.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import Qt 4.7 + +Rectangle { + id: rect + width: 100; height: 100 + color: "red" + + MouseArea { + anchors.fill: parent + onClicked: rect.state = "moved" + } + + states: State { + name: "moved" + PropertyChanges { target: rect; x: 50; y: 50 } + } + + transitions: Transition { + PropertyAnimation { properties: "x,y"; duration: 1000 } + } +} +//![0] diff --git a/doc/src/snippets/declarative/animation.qml b/doc/src/snippets/declarative/animation.qml deleted file mode 100644 index 65acd36..0000000 --- a/doc/src/snippets/declarative/animation.qml +++ /dev/null @@ -1,181 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import Qt 4.7 - -Row { - -//![property-anim-1] -Rectangle { - id: rect - width: 120; height: 200 - - Image { - id: img - source: "pics/qt.png" - x: 60 - img.width/2 - y: 0 - - SequentialAnimation on y { - loops: Animation.Infinite - NumberAnimation { to: 200 - img.height; easing.type: Easing.OutBounce; duration: 2000 } - PauseAnimation { duration: 1000 } - NumberAnimation { to: 0; easing.type: Easing.OutQuad; duration: 1000 } - } - } -} -//![property-anim-1] - -//![property-anim-2] -Rectangle { - width: 200; height: 200 - - Rectangle { - color: "red" - width: 50; height: 50 - NumberAnimation on x { to: 50 } - } -} -//![property-anim-2] - - -Item { -//![property-anim-3] -PropertyAnimation { - id: animation - target: image - property: "scale" - from: 1; to: 0.5 -} - -Image { - id: image - source: "pics/qt.png" - MouseArea { - anchors.fill: parent - onPressed: animation.start() - } -} -//![property-anim-3] -} - - -//![transitions-1] -transitions: [ - Transition { - NumberAnimation { - properties: "x,y" - easing.type: Easing.OutBounce - duration: 200 - } - } -] -//![transitions-1] - - -//![transitions-2] -Transition { - from: "*" - to: "MyState" - reversible: true - - SequentialAnimation { - NumberAnimation { - duration: 1000 - easing.type: Easing.OutBounce - - // animate myItem's x and y if they have changed in the state - target: myItem - properties: "x,y" - } - - NumberAnimation { - duration: 1000 - - // animate myItem2's y to 200, regardless of what happens in the state - target: myItem2 - property: "y" - to: 200 - } - } -} -//![transitions-2] - - -//![transitions-3] -Transition { - from: "*" - to: "MyState" - reversible: true - - SequentialAnimation { - ColorAnimation { duration: 1000 } - PauseAnimation { duration: 1000 } - - ParallelAnimation { - NumberAnimation { - duration: 1000 - easing.type: Easing.OutBounce - targets: box1 - properties: "x,y" - } - NumberAnimation { - duration: 1000 - targets: box2 - properties: "x,y" - } - } - } -} -//![transitions-3] - -//![behavior] -Rectangle { - id: redRect - color: "red" - width: 100; height: 100 - - Behavior on x { - NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } - } -} -//![behavior] - -} diff --git a/doc/src/snippets/declarative/transition.qml b/doc/src/snippets/declarative/transition.qml index b884750..098d509 100644 --- a/doc/src/snippets/declarative/transition.qml +++ b/doc/src/snippets/declarative/transition.qml @@ -46,13 +46,18 @@ Rectangle { width: 100; height: 100 color: "red" + MouseArea { + id: mouseArea + anchors.fill: parent + } + states: State { - name: "moved" + name: "moved"; when: mouseArea.pressed PropertyChanges { target: rect; x: 50; y: 50 } } transitions: Transition { - PropertyAnimation { properties: "x,y"; easing.type: Easing.InOutQuad } + NumberAnimation { properties: "x,y"; easing.type: Easing.InOutQuad } } } //![0] diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 61bcd8a..14028de 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -645,12 +645,13 @@ QAbstractAnimation *QDeclarativePauseAnimation::qtAnimation() Like any other animation element, a ColorAnimation can be applied in a number of ways, including transitions, behaviors and property value - sources. The \l PropertyAnimation documentation shows a variety of methods + sources. The \l {QML Animation} documentation shows a variety of methods for creating animations. - When used in a transition, ColorAnimation will by default animate - all properties of type color that have changed. If a \l{PropertyAnimation::}{property} - or \l{PropertyAnimation::}{properties} are explicitly set for the animation, + For convenience, when a ColorAnimation is used in a \l Transition, it will + animate any \c color properties that have been modified during the state + change. If a \l{PropertyAnimation::}{property} or + \l{PropertyAnimation::}{properties} are explicitly set for the animation, then those are used instead. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} @@ -1143,7 +1144,7 @@ void QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions, Like any other animation element, a NumberAnimation can be applied in a number of ways, including transitions, behaviors and property value - sources. The \l PropertyAnimation documentation shows a variety of methods + sources. The \l {QML Animation} documentation shows a variety of methods for creating animations. Note that NumberAnimation may not animate smoothly if there are irregular @@ -1244,6 +1245,11 @@ void QDeclarativeNumberAnimation::setTo(qreal t) Vector3dAnimation is a specialized PropertyAnimation that defines an animation to be applied when a Vector3d value changes. + Like any other animation element, a Vector3dAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l {QML Animation} documentation shows a variety of methods + for creating animations. + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -1323,7 +1329,7 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) \snippet doc/src/snippets/declarative/rotationanimation.qml 0 - Notice the RotationAnimation did not need to set a \l {RotationAnimation::}{target} + Notice the RotationAnimation did not need to set a \l {PropertyAnimation::}{target} value. As a convenience, when used in a transition, RotationAnimation will rotate all properties named "rotation" or "angle". You can override this by providing your own properties via \l {PropertyAnimation::properties}{properties} or @@ -1331,7 +1337,7 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) Like any other animation element, a RotationAnimation can be applied in a number of ways, including transitions, behaviors and property value - sources. The \l PropertyAnimation documentation shows a variety of methods + sources. The \l {QML Animation} documentation shows a variety of methods for creating animations. \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} @@ -1554,7 +1560,7 @@ QDeclarativeListProperty<QDeclarativeAbstractAnimation> QDeclarativeAnimationGro Like any other animation element, a SequentialAnimation can be applied in a number of ways, including transitions, behaviors and property value - sources. The \l PropertyAnimation documentation shows a variety of methods + sources. The \l {QML Animation} documentation shows a variety of methods for creating animations. \sa ParallelAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} @@ -1619,7 +1625,7 @@ void QDeclarativeSequentialAnimation::transition(QDeclarativeStateActions &actio Like any other animation element, a ParallelAnimation can be applied in a number of ways, including transitions, behaviors and property value - sources. The \l PropertyAnimation documentation shows a variety of methods + sources. The \l {QML Animation} documentation shows a variety of methods for creating animations. \sa SequentialAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} @@ -2388,8 +2394,7 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions \inherits Animation \brief The ParentAnimation element animates changes in parent values. - ParentAnimation defines an animation to applied when a ParentChange - occurs. This allows parent changes to be smoothly animated. + ParentAnimation is used to animate a parent change for an \l Item. For example, the following ParentChange changes \c blueRect to become a child of \c redRect when it is clicked. The inclusion of the @@ -2407,10 +2412,16 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions to animate the parent change via another item that does not have clipping enabled. Such an item can be set using the \l via property. - By default, when used in a transition, ParentAnimation animates all parent - changes. This can be overridden by setting a specific target item using the + For convenience, when a ParentAnimation is used in a \l Transition, it will + animate any ParentChange that has occurred during the state change. + This can be overridden by setting a specific target item using the \l target property. + Like any other animation element, a ParentAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l {QML Animation} documentation shows a variety of methods + for creating animations. + \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ @@ -2742,14 +2753,23 @@ QAbstractAnimation *QDeclarativeParentAnimation::qtAnimation() \inherits Animation \brief The AnchorAnimation element animates changes in anchor values. - AnchorAnimation is used to animate an AnchorChange. It will anchor all - anchor changes specified in a \l State. + AnchorAnimation is used to animate an anchor change. In the following snippet we animate the addition of a right anchor to a \l Rectangle: \snippet doc/src/snippets/declarative/anchoranimation.qml 0 - \sa AnchorChanges + For convenience, when an AnchorAnimation is used in a \l Transition, it will + animate any AnchorChanges that have occurred during the state change. + This can be overridden by setting a specific target item using the + \l target property. + + Like any other animation element, an AnchorAnimation can be applied in a + number of ways, including transitions, behaviors and property value + sources. The \l {QML Animation} documentation shows a variety of methods + for creating animations. + + \sa {QML Animation}, AnchorChanges */ QDeclarativeAnchorAnimation::QDeclarativeAnchorAnimation(QObject *parent) diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp index fadb2ae..1e7f81a 100644 --- a/src/declarative/util/qdeclarativebehavior.cpp +++ b/src/declarative/util/qdeclarativebehavior.cpp @@ -84,12 +84,15 @@ public: \snippet doc/src/snippets/declarative/behavior.qml 0 - To run multiple animations within a Behavior, use ParallelAnimation or + Note that a property cannot have more than one assigned Behavior. To provide + multiple animations within a Behavior, use ParallelAnimation or SequentialAnimation. - Note that a property cannot have more than one assigned Behavior. + If a \l{QML States}{state change} has a \l Transition that matches the same property as a + Behavior, the \l Transition animation overrides the Behavior for that + state change. - \sa {Property Behaviors}, {declarative/animation/behaviors}{Behavior example}, QtDeclarative + \sa {QML Animation}, {declarative/animation/behaviors}{Behavior example}, QtDeclarative */ diff --git a/src/declarative/util/qdeclarativesmoothedanimation.cpp b/src/declarative/util/qdeclarativesmoothedanimation.cpp index 727f427..30e1491 100644 --- a/src/declarative/util/qdeclarativesmoothedanimation.cpp +++ b/src/declarative/util/qdeclarativesmoothedanimation.cpp @@ -287,7 +287,7 @@ void QSmoothedAnimation::init() Like any other animation element, a SmoothedAnimation can be applied in a number of ways, including transitions, behaviors and property value - sources. The \l PropertyAnimation documentation shows a variety of methods + sources. The \l {QML Animation} documentation shows a variety of methods for creating animations. \sa SpringAnimation, NumberAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} diff --git a/src/declarative/util/qdeclarativespringanimation.cpp b/src/declarative/util/qdeclarativespringanimation.cpp index cfc7b8e..6f4ac51 100644 --- a/src/declarative/util/qdeclarativespringanimation.cpp +++ b/src/declarative/util/qdeclarativespringanimation.cpp @@ -228,6 +228,7 @@ void QDeclarativeSpringAnimationPrivate::updateMode() /*! \qmlclass SpringAnimation QDeclarativeSpringAnimation + \inherits Animation \since 4.7 \brief The SpringAnimation element allows a property to track a value in a spring-like motion. @@ -246,7 +247,7 @@ void QDeclarativeSpringAnimationPrivate::updateMode() Like any other animation element, a SpringAnimation can be applied in a number of ways, including transitions, behaviors and property value - sources. The \l PropertyAnimation documentation shows a variety of methods + sources. The \l {QML Animation} documentation shows a variety of methods for creating animations. \sa SmoothedAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example}, {declarative/toys/clocks}{Clocks example} diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index dc76d56..66b0b6b 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -154,7 +154,7 @@ QDeclarativeStateOperation::QDeclarativeStateOperation(QObjectPrivate &dd, QObje Notice the default state is referred to using an empty string (""). - States are commonly used together with \l {state-transitions}{Transitions} to provide + States are commonly used together with \l {Transitions} to provide animations when state changes occur. \note Setting the state of an object from within another state of the same object is diff --git a/src/declarative/util/qdeclarativestategroup.cpp b/src/declarative/util/qdeclarativestategroup.cpp index 67cd12e..1c1e964 100644 --- a/src/declarative/util/qdeclarativestategroup.cpp +++ b/src/declarative/util/qdeclarativestategroup.cpp @@ -112,7 +112,7 @@ public: } \endqml - \sa {qmlstate}{States} {state-transitions}{Transitions}, {QtDeclarative} + \sa {qmlstate}{States} {Transitions}, {QtDeclarative} */ QDeclarativeStateGroup::QDeclarativeStateGroup(QObject *parent) @@ -204,7 +204,7 @@ void QDeclarativeStateGroupPrivate::clear_states(QDeclarativeListProperty<QDecla } \endqml - \sa {state-transitions}{Transitions} + \sa {Transitions} */ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeStateGroup::transitionsProperty() { diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp index 582191b..7042d0c 100644 --- a/src/declarative/util/qdeclarativetransition.cpp +++ b/src/declarative/util/qdeclarativetransition.cpp @@ -60,12 +60,25 @@ QT_BEGIN_NAMESPACE For example, the following \l Rectangle has two states: the default state, and an added "moved" state. In the "moved state, the rectangle's position changes - to (50, 50). The added \l Transition specifies that when the rectangle + to (50, 50). The added Transition specifies that when the rectangle changes between the default and the "moved" state, any changes to the \c x and \c y properties should be animated, using an \c Easing.InOutQuad. \snippet doc/src/snippets/declarative/transition.qml 0 + Notice the example does not require \l{PropertyAnimation::}{to} and + \l{PropertyAnimation::}{from} values for the NumberAnimation. As a convenience, + these properties are automatically set to the values of \c x and \c y before + and after the state change; the \c from values are provided by + the current values of \c x and \c y, and the \c to values are provided by + the PropertyChanges object. If you wish, you can provide \l{PropertyAnimation::}{to} and + \l{PropertyAnimation::}{from} values anyway to override the default values. + + By default, a Transition's animations are applied for any state change in the + parent item. The Transition \l {Transition::}{from} and \l {Transition::}{to} + values can be set to restrict the animations to only be applied when changing + from one particular state to another. + To define multiple transitions, specify \l Item::transitions as a list: \qml @@ -78,7 +91,11 @@ QT_BEGIN_NAMESPACE } \endqml - \sa {declarative/animation/states}{states example}, {qmlstates}{States}, {state-transitions}{Transitions}, {QtDeclarative} + If a state change has a Transition that matches the same property as a + \l Behavior, the Transition animation overrides the \l Behavior for that + state change. + + \sa {QML Animation}, {declarative/animation/states}{states example}, {qmlstates}{States}, {QtDeclarative} */ /*! -- cgit v0.12 From c73548ccd2946c502fad3128a7c8da71a9db7ed6 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Fri, 6 Aug 2010 13:39:10 +1000 Subject: Top-level QML item should not have special focus handling. It's the scene itself that acts as a focus scope, not the top-level item. Task-number: QTBUG-12682 Reviewed-by: Aaron Kennedy (cherry picked from commit 94b1c07c31ab84d30b198cb23291a48f98164827) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 11 ++++------- .../qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 2c295cd..06862f1 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -3142,8 +3142,7 @@ bool QDeclarativeItem::hasActiveFocus() const { Q_D(const QDeclarativeItem); return focusItem() == this || - (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0) || - (!parentItem() && focusItem() != 0); + (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0); } /*! @@ -3163,10 +3162,8 @@ bool QDeclarativeItem::hasActiveFocus() const } \endqml - For the purposes of this property, the top level item in the scene - is assumed to act like a focus scope, and to always have active focus - when the scene has focus. On a practical level, that means the following - QML will give active focus to \c input on startup. + For the purposes of this property, the scene as a whole is assumed to act like a focus scope. + On a practical level, that means the following QML will give active focus to \c input on startup. \qml Rectangle { @@ -3192,7 +3189,7 @@ bool QDeclarativeItem::hasFocus() const p = p->parentItem(); } - return hasActiveFocus() ? true : (!QGraphicsItem::parentItem() ? true : false); + return hasActiveFocus(); } /*! \internal */ diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp index b0c9c03..84aff05 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp +++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp @@ -335,7 +335,7 @@ void tst_qdeclarativefocusscope::noParentFocus() view->setSource(QUrl::fromLocalFile(SRCDIR "/data/chain.qml")); QVERIFY(view->rootObject()); - QVERIFY(view->rootObject()->property("focus1") == true); + QVERIFY(view->rootObject()->property("focus1") == false); QVERIFY(view->rootObject()->property("focus2") == false); QVERIFY(view->rootObject()->property("focus3") == true); QVERIFY(view->rootObject()->property("focus4") == true); -- cgit v0.12 From e970b655bd11c0b3924cfc5d37b01357f91b693c Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 6 Aug 2010 12:11:36 +1000 Subject: Fix index page Task-number: QTBUG-12703 (cherry picked from commit 97f64280e37f29bdeb92d6de55fac56b1ff37084) --- doc/src/declarative/declarativeui.qdoc | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 217e372..1fc9d69 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -41,11 +41,10 @@ and netbooks. Qt Quick consists of the QtDeclarative C++ module, QML, and the integration of both of these into the Qt Creator IDE. Using the QtDeclarative C++ module, you can load and interact with QML files from your Qt application. -QML is an extension to \l -{http://www.ecma-international.org/publications/standards/Ecma-262.htm} -{JavaScript}, that provides a mechanism to declaratively build an -object tree of \l {QML Elements}{QML elements}. QML improves the -integration between JavaScript and Qt's existing QObject based type +QML provides mechanisms to declaratively build an object tree using +\l {QML Elements}{QML elements}. QML improves the integration between +{http://www.ecma-international.org/publications/standards/Ecma-262.htm}{JavaScript} +and Qt's existing QObject based type system, adds support for automatic \l {Property Binding}{property bindings} and provides \l {Network Transparency}{network transparency} at the language level. @@ -87,11 +86,11 @@ application or to build completely new applications. QML is fully \l \o \l {qdeclarativemodules.html}{Modules} \o \l {Extending types from QML} \o \l {qdeclarativedynamicobjects.html}{Dynamic Object Creation} -\o \l {qmlruntime.html}{The Qt Declarative Runtime} \endlist \section1 Using QML with C++ \list +\o \l {qmlruntime.html}{The Qt Declarative Runtime} \o \l {Using QML in C++ Applications} \o \l {Integrating QML with existing Qt UI code} \o \l {Tutorial: Writing QML extensions with C++} -- cgit v0.12 From ced01d71bd68e679a4563ed123110528775aac04 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 6 Aug 2010 16:32:19 +1000 Subject: Fix broken example code Task-number: QTBUG-12705 (cherry picked from commit 59e3430662cfdc3820115a2ff4c0b44829b3d1d4) --- src/declarative/util/qdeclarativepropertymap.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/declarative/util/qdeclarativepropertymap.cpp b/src/declarative/util/qdeclarativepropertymap.cpp index 919727f..6b43040 100644 --- a/src/declarative/util/qdeclarativepropertymap.cpp +++ b/src/declarative/util/qdeclarativepropertymap.cpp @@ -104,22 +104,25 @@ void QDeclarativePropertyMapMetaObject::propertyCreated(int, QMetaPropertyBuilde The following example shows how you might declare data in C++ and then access it in QML. - Setup in C++: + In the C++ file: \code - //create our data + // create our data QDeclarativePropertyMap ownerData; ownerData.insert("name", QVariant(QString("John Smith"))); ownerData.insert("phone", QVariant(QString("555-5555"))); - //expose it to the UI layer - QDeclarativeContext *ctxt = view->rootContext(); - ctxt->setProperty("owner", &data); + // expose it to the UI layer + QDeclarativeView view; + QDeclarativeContext *ctxt = view.rootContext(); + ctxt->setContextProperty("owner", &ownerData); + + view.setSource(QUrl::fromLocalFile("main.qml")); + view.show(); \endcode - Then, in QML: + Then, in \c main.qml: \code - Text { text: owner.name } - Text { text: owner.phone } + Text { text: owner.name + " " + owner.phone } \endcode The binding is dynamic - whenever a key's value is updated, anything bound to that -- cgit v0.12 From 3f28f8a9066de422e8a22f60de54ecd6edc39983 Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Sun, 8 Aug 2010 23:50:10 +1000 Subject: Revert "fix compilation with -plugin-kbd-*" This reverts commit 815ae300c9feb1930a338e8ab49589b14c57d0de. --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index b5bf38c..4d9bc46 100755 --- a/configure +++ b/configure @@ -2047,7 +2047,7 @@ while [ "$#" -gt 0 ]; do [ "$VAR" = "decoration" ] && QMakeVar del "${VAR}s" "$VAL" [ "$VAR" = "decoration" ] && CFG_DECORATION_ON=`echo "${CFG_DECORATION_ON} " | sed "s,${VAL} ,,g"` && CFG_DECORATION_PLUGIN="$CFG_DECORATION_PLUGIN ${VAL}" [ "$VAR" = "kbd" ] && QMakeVar del "${VAR}s" "$VAL" - [ "$VAR" = "kbd" ] && CFG_KBD_ON=`echo "${CFG_KBD_ON} " | sed "s,${VAL} ,,g"` && CFG_KBD_PLUGIN="$CFG_KBD_PLUGIN ${VAL}" + [ "$VAR" = "kbd" ] && CFG_KBD_ON=`echo "${CFG_MOUSE_ON} " | sed "s,${VAL} ,,g"` && CFG_KBD_PLUGIN="$CFG_KBD_PLUGIN ${VAL}" [ "$VAR" = "mouse" ] && QMakeVar del "${VAR}s" "$VAL" [ "$VAR" = "mouse" ] && CFG_MOUSE_ON=`echo "${CFG_MOUSE_ON} " | sed "s,${VAL} ,,g"` && CFG_MOUSE_PLUGIN="$CFG_MOUSE_PLUGIN ${VAL}" [ "$VAR" = "gfx" ] && QMakeVar del "${VAR}s" "$VAL" -- cgit v0.12 From 5777d5073be48257ea0a68293eebabc63758097c Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Wed, 30 Jun 2010 21:47:37 +0200 Subject: Some french translations Reviewed-by: gabi (cherry picked from commit 065cc163d7848131dcfd8bb210c8590b6cd11991) --- tools/linguist/phrasebooks/french.qph | 22 +- translations/assistant_fr.ts | 220 - translations/designer_fr.ts | 1437 +---- translations/linguist_fr.ts | 412 -- translations/qt_fr.ts | 10775 ++++++++++++++++++-------------- translations/qt_help_fr.ts | 158 +- 6 files changed, 6251 insertions(+), 6773 deletions(-) diff --git a/tools/linguist/phrasebooks/french.qph b/tools/linguist/phrasebooks/french.qph index 9e1a580..47cb306 100644 --- a/tools/linguist/phrasebooks/french.qph +++ b/tools/linguist/phrasebooks/french.qph @@ -801,7 +801,7 @@ </phrase> <phrase> <source>Redo</source> - <target>Annuler Annuler</target> + <target>Rétablir</target> </phrase> <phrase> <source>region selection</source> @@ -1111,10 +1111,6 @@ <target>&Édition</target> </phrase> <phrase> - <source>&Redo</source> - <target>Re&faire</target> -</phrase> -<phrase> <source>debugger</source> <target>débogueur</target> </phrase> @@ -1438,4 +1434,20 @@ <source>&Debug</source> <target>&Déboguer</target> </phrase> +<phrase> + <source>Slider</source> + <target>Barre de défilement</target> +</phrase> +<phrase> + <source>&Restore</source> + <target>&Restaurer</target> +</phrase> +<phrase> + <source>&Move</source> + <target>&Déplacer</target> +</phrase> +<phrase> + <source>New</source> + <target>Créer</target> +</phrase> </QPH> diff --git a/translations/assistant_fr.ts b/translations/assistant_fr.ts index 4c6c5a0..e8f5fd1 100644 --- a/translations/assistant_fr.ts +++ b/translations/assistant_fr.ts @@ -4,7 +4,6 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+110"/> <source>&Close</source> <translation>&Fermer</translation> </message> @@ -12,19 +11,16 @@ <context> <name>AboutLabel</name> <message> - <location line="-14"/> <source>Warning</source> <translation>Avertissement</translation> </message> <message> - <location line="+1"/> <source>Unable to launch external application. </source> <translation>Impossible d'ouvrir l'application externe. </translation> </message> <message> - <location line="+1"/> <source>OK</source> <translation>OK</translation> </message> @@ -32,46 +28,34 @@ <context> <name>BookmarkDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/> <source>Add Bookmark</source> <translation>Ajouter un signet</translation> </message> <message> - <location/> <source>Bookmark:</source> <translation>Signet :</translation> </message> <message> - <location/> <source>Add in Folder:</source> <translation>Ajouter dans le dossier :</translation> </message> <message> - <location/> <source>+</source> <translation>+</translation> </message> <message> - <location/> <source>New Folder</source> <translation>Nouveau dossier</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+184"/> - <location line="+18"/> - <location line="+39"/> - <location line="+18"/> - <location line="+30"/> <source>Bookmarks</source> <translation>Signets</translation> </message> <message> - <location line="-61"/> <source>Delete Folder</source> <translation>Supprimer le dossier</translation> </message> <message> - <location line="+1"/> <source>Rename Folder</source> <translation>Renommer le dossier</translation> </message> @@ -79,23 +63,18 @@ <context> <name>BookmarkManager</name> <message> - <location line="+435"/> <source>Bookmarks</source> <translation>Signets</translation> </message> <message> - <location line="+37"/> <source>Remove</source> <translation>Suppression</translation> </message> <message> - <location line="+1"/> <source>You are going to delete a Folder, this will also<br>remove it's content. Are you sure to continue?</source> <translation>Vous allez supprimer un dossier, ceci va aussi<br>supprimer son contenu. Voulez-vous continuer ?</translation> </message> <message> - <location line="+143"/> - <location line="+9"/> <source>New Folder</source> <translation>Nouveau dossier</translation> </message> @@ -103,47 +82,38 @@ <context> <name>BookmarkWidget</name> <message> - <location line="-463"/> <source>Delete Folder</source> <translation>Supprimer le dossier</translation> </message> <message> - <location line="+1"/> <source>Rename Folder</source> <translation>Renommer le dossier</translation> </message> <message> - <location line="+2"/> <source>Show Bookmark</source> <translation>Afficher le signet</translation> </message> <message> - <location line="+1"/> <source>Show Bookmark in New Tab</source> <translation>Afficher le signet dans un nouvel onglet</translation> </message> <message> - <location line="+3"/> <source>Delete Bookmark</source> <translation>Supprimer le signet</translation> </message> <message> - <location line="+1"/> <source>Rename Bookmark</source> <translation>Renommer le signet</translation> </message> <message> - <location line="+38"/> <source>Filter:</source> <translation>Filtre :</translation> </message> <message> - <location line="+24"/> <source>Add</source> <translation>Ajouter</translation> </message> <message> - <location line="+9"/> <source>Remove</source> <translation>Retirer</translation> </message> @@ -151,48 +121,38 @@ <context> <name>CentralWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+239"/> <source>Add new page</source> <translation>Créer une nouvelle page</translation> </message> <message> - <location line="+9"/> <source>Close current page</source> <translation>Fermer la page courante</translation> </message> <message> - <location line="+312"/> <source>Print Document</source> <translation>Imprimer le document</translation> </message> <message> - <location line="+130"/> - <location line="+2"/> <source>unknown</source> <translation>inconnu</translation> </message> <message> - <location line="+93"/> <source>Add New Page</source> <translation>Créer une nouvelle page</translation> </message> <message> - <location line="+3"/> <source>Close This Page</source> <translation>Fermer cette page</translation> </message> <message> - <location line="+3"/> <source>Close Other Pages</source> <translation>Fermer les autres pages</translation> </message> <message> - <location line="+5"/> <source>Add Bookmark for this Page...</source> <translation>Ajouter un signet pour cette page...</translation> </message> <message> - <location line="+235"/> <source>Search</source> <translation>Recherche</translation> </message> @@ -200,12 +160,10 @@ <context> <name>ContentWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+158"/> <source>Open Link</source> <translation>Ouvrir le lien</translation> </message> <message> - <location line="+1"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> @@ -213,12 +171,10 @@ <context> <name>FilterNameDialogClass</name> <message> - <location filename="../tools/assistant/tools/assistant/filternamedialog.ui"/> <source>Add Filter Name</source> <translation>Ajouter un filtre</translation> </message> <message> - <location/> <source>Filter Name:</source> <translation>Nom du filtre :</translation> </message> @@ -226,27 +182,22 @@ <context> <name>FindWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-918"/> <source>Previous</source> <translation>Précédent</translation> </message> <message> - <location line="+4"/> <source>Next</source> <translation>Suivant</translation> </message> <message> - <location line="+4"/> <source>Case Sensitive</source> <translation>Sensible à la casse</translation> </message> <message> - <location line="+3"/> <source>Whole words</source> <translation>Mots complets</translation> </message> <message> - <location line="+12"/> <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Recherche à partir du début</translation> </message> @@ -254,27 +205,22 @@ <context> <name>FontPanel</name> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> <source>Font</source> <translation>Police</translation> </message> <message> - <location line="+11"/> <source>&Writing system</source> <translation>&Système d'écriture</translation> </message> <message> - <location line="+3"/> <source>&Family</source> <translation>&Famille</translation> </message> <message> - <location line="+4"/> <source>&Style</source> <translation>&Style</translation> </message> <message> - <location line="+4"/> <source>&Point size</source> <translation>&Taille en points</translation> </message> @@ -282,39 +228,32 @@ <context> <name>HelpViewer</name> <message> - <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+281"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> <message> - <location line="+147"/> <source><title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div></source> <translation><title>Erreur 404...</title><div align="center"><br><br><h1>La page n'a pas pu être trouvée</h1><br><h3>'%1'</h3></div></translation> </message> <message> - <location line="+61"/> <source>Help</source> <translation>Aide</translation> </message> <message> - <location line="+1"/> <source>Unable to launch external application. </source> <translation>Impossible de lancer l'application externe. </translation> </message> <message> - <location line="+0"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location line="+63"/> <source>Copy &Link Location</source> <translation>Copier l'&adresse cible</translation> </message> <message> - <location line="+3"/> <source>Open Link in New Tab Ctrl+LMB</source> <translatorcomment>LMB? ← ouais exactement pareil...</translatorcomment> <translation>Ouvrir dans un nouvel onglet Ctrl+clic gauche</translation> @@ -323,17 +262,14 @@ <context> <name>IndexWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+66"/> <source>&Look for:</source> <translation>&Rechercher :</translation> </message> <message> - <location line="+68"/> <source>Open Link</source> <translation>Ouvrir le lien</translation> </message> <message> - <location line="+1"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> @@ -341,97 +277,74 @@ <context> <name>InstallDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+76"/> <source>Install Documentation</source> <translation>Installer la documentation</translation> </message> <message> - <location/> <source>Available Documentation:</source> <translation>Documentation disponible :</translation> </message> <message> - <location/> <source>Install</source> <translation>Installer</translation> </message> <message> - <location/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> - <location/> <source>Close</source> <translation>Fermer</translation> </message> <message> - <location/> <source>Installation Path:</source> <translation>Chemin d'installation :</translation> </message> <message> - <location/> <source>...</source> <translation>…</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+30"/> <source>Downloading documentation info...</source> <translation>Téléchargement des informations de la documentation…</translation> </message> <message> - <location line="+48"/> <source>Download canceled.</source> <translation>Téléchargement annulé.</translation> </message> <message> - <location line="+26"/> - <location line="+78"/> - <location line="+27"/> <source>Done.</source> <translation>Terminé.</translation> </message> <message> - <location line="-90"/> <source>The file %1 already exists. Do you want to overwrite it?</source> <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser ?</translation> </message> <message> - <location line="+11"/> <source>Unable to save the file %1: %2.</source> <translation>Impossible de sauver le fichier %1 : %2.</translation> </message> <message> - <location line="+8"/> <source>Downloading %1...</source> <translation>Téléchargement de %1 en cours…</translation> </message> <message> - <location line="+19"/> - <location line="+42"/> - <location line="+38"/> <source>Download failed: %1.</source> <translation>Échec du téléchargement : %1.</translation> </message> <message> - <location line="-70"/> <source>Documentation info file is corrupt!</source> <translation>Le fichier d'information de documentation est corrompu !</translation> </message> <message> - <location line="+37"/> <source>Download failed: Downloaded file is corrupted.</source> <translation>Échec du téléchargement : le fichier téléchargé est corrompu.</translation> </message> <message> - <location line="+2"/> <source>Installing documentation %1...</source> <translation>Installation de la documentation %1…</translation> </message> <message> - <location line="+22"/> <source>Error while installing documentation: %1</source> <translation>Erreur durant l'installation de la documentation : @@ -441,304 +354,239 @@ <context> <name>MainWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/> - <location line="+383"/> <source>Index</source> <translation>Index</translation> </message> <message> - <location line="-377"/> - <location line="+375"/> <source>Contents</source> <translation>Sommaire</translation> </message> <message> - <location line="-370"/> - <location line="+374"/> <source>Bookmarks</source> <translation>Signets</translation> </message> <message> - <location line="-362"/> - <location line="+207"/> - <location line="+514"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location line="-546"/> - <location line="+5"/> <source>Unfiltered</source> <translation>Non-filtré</translation> </message> <message> - <location line="+21"/> <source>Looking for Qt Documentation...</source> <translation>Recherche la documentation de Qt…</translation> </message> <message> - <location line="+84"/> <source>&File</source> <translation>&Fichier</translation> </message> <message> - <location line="+2"/> <source>Page Set&up...</source> <translation>&Mise en page…</translation> </message> <message> - <location line="+2"/> <source>Print Preview...</source> <translation>Aperçu avant impression…</translation> </message> <message> - <location line="+3"/> <source>&Print...</source> <translation>&Imprimer…</translation> </message> <message> - <location line="+7"/> <source>New &Tab</source> <translation>Nouvel ongle&t</translation> </message> <message> - <location line="+3"/> <source>&Close Tab</source> <translation>&Fermer l'onglet</translation> </message> <message> - <location line="+4"/> <source>&Quit</source> <translation>&Quitter</translation> </message> <message> - <location line="+4"/> <source>&Edit</source> <translation>&Édition</translation> </message> <message> - <location line="+1"/> <source>&Copy selected Text</source> <translation>&Copier le texte selectionné</translation> </message> <message> - <location line="+8"/> <source>&Find in Text...</source> <translation>&Rechercher dans le texte…</translation> </message> <message> - <location line="+2"/> <source>&Find</source> <translation>&Rechercher</translation> </message> <message> - <location line="+4"/> <source>Find &Next</source> <translation>Rechercher le suiva&nt</translation> </message> <message> - <location line="+4"/> <source>Find &Previous</source> <translation>Rechercher le &précédent</translation> </message> <message> - <location line="+5"/> <source>Preferences...</source> <translation>Préférences…</translation> </message> <message> - <location line="+3"/> <source>&View</source> <translation>&Affichage</translation> </message> <message> - <location line="+1"/> <source>Zoom &in</source> <translation>Zoom &avant</translation> </message> <message> - <location line="+6"/> <source>Zoom &out</source> <translation>Zoom a&rrière</translation> </message> <message> - <location line="+6"/> <source>Normal &Size</source> <translation>&Taille normale</translation> </message> <message> - <location line="+4"/> <source>Ctrl+0</source> <translation>Ctrl+0</translation> </message> <message> - <location line="+5"/> <source>ALT+C</source> <translation>ALT+C</translation> </message> <message> - <location line="+2"/> <source>ALT+I</source> <translation>ALT+I</translation> </message> <message> - <location line="+2"/> <source>ALT+O</source> <translation>ALT+O</translation> </message> <message> - <location line="+1"/> <source>Search</source> <translation>Recherche</translation> </message> <message> - <location line="+1"/> <source>ALT+S</source> <translation>ALT+S</translation> </message> <message> - <location line="+2"/> <source>&Go</source> <translation>A&ller</translation> </message> <message> - <location line="+1"/> <source>&Home</source> <translation>&Accueil</translation> </message> <message> - <location line="+1"/> <source>ALT+Home</source> <translation>ALT+Home</translation> </message> <message> - <location line="+3"/> <source>&Back</source> <translation>&Précédent</translation> </message> <message> - <location line="+5"/> <source>&Forward</source> <translation>&Suivant</translation> </message> <message> - <location line="+6"/> <source>Sync with Table of Contents</source> <translation>Synchroniser la table des matières</translation> </message> <message> - <location line="+2"/> <source>Sync</source> <translation>Rafraîchir</translation> </message> <message> - <location line="+5"/> <source>Next Page</source> <translation>Page suivante</translation> </message> <message> - <location line="+1"/> <source>Ctrl+Alt+Right</source> <translation>Ctrl+Alt+Right</translation> </message> <message> - <location line="+3"/> <source>Previous Page</source> <translation>Page précédente</translation> </message> <message> - <location line="+1"/> <source>Ctrl+Alt+Left</source> <translation>Ctrl+Alt+Left</translation> </message> <message> - <location line="+3"/> <source>&Bookmarks</source> <translation>Si&gnets</translation> </message> <message> - <location line="+1"/> <source>Add Bookmark...</source> <translation>Ajouter un signet…</translation> </message> <message> - <location line="+2"/> <source>CTRL+D</source> <translation>CTRL+D</translation> </message> <message> - <location line="+2"/> <source>&Help</source> <translation>Ai&de</translation> </message> <message> - <location line="+1"/> <source>About...</source> <translation>À propos…</translation> </message> <message> - <location line="+16"/> <source>Navigation Toolbar</source> <translation>Barre d'outils de navigation</translation> </message> <message> - <location line="+22"/> <source>&Window</source> <translation>&Fenêtre</translation> </message> <message> - <location line="+2"/> <source>Zoom</source> <translation>Zoom</translation> </message> <message> - <location line="+1"/> <source>Minimize</source> <translation>Minimiser</translation> </message> <message> - <location line="+1"/> <source>Ctrl+M</source> <translation>Ctrl+M</translation> </message> <message> - <location line="+50"/> <source>Toolbars</source> <translation>Barres d'outils</translation> </message> <message> - <location line="+15"/> <source>Filter Toolbar</source> <translation>Barre d'outils de filtrage</translation> </message> <message> - <location line="+2"/> <source>Filtered by:</source> <translation>Filtre :</translation> </message> <message> - <location line="+25"/> <source>Address Toolbar</source> <translation>Barre d'outils d'adresse</translation> </message> <message> - <location line="+4"/> <source>Address:</source> <translation>Adresse :</translation> </message> <message> - <location line="+114"/> <source>Could not find the associated content item.</source> <translatorcomment>what is item in this context? ← same question here</translatorcomment> <translation>Impossible de trouver l'élément de contenu associé.</translation> </message> <message> - <location line="+71"/> <source>About %1</source> <translation>À propos de %1</translation> </message> <message> - <location line="+114"/> <source>Updating search index</source> <translation>Mise à jour de l'index de recherche</translation> </message> @@ -746,48 +594,38 @@ <context> <name>PreferencesDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+259"/> - <location line="+43"/> <source>Add Documentation</source> <translation>Ajouter de la documentation</translation> </message> <message> - <location line="-43"/> <source>Qt Compressed Help Files (*.qch)</source> <translation>Fichiers d'aide Qt compressés (*.qch)</translation> </message> <message> - <location line="+29"/> <source>The namespace %1 is already registered!</source> <translation>L'espace de nom %1 existe déjà !</translation> </message> <message> - <location line="+8"/> <source>The specified file is not a valid Qt Help File!</source> <translation>Le fichier spécifié n'est pas un fichier d'aide Qt valide !</translation> </message> <message> - <location line="+23"/> <source>Remove Documentation</source> <translation>Supprimer la documentation</translation> </message> <message> - <location line="+1"/> <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source> <translation>Certains documents ouverts dans Assistant ont des références vers la documentation que vous allez supprimer. Supprimer la documentation fermera ces documents.</translation> </message> <message> - <location line="+2"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> - <location line="+1"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location line="+88"/> <source>Use custom settings</source> <translation>Utiliser des paramètres personnalisés</translation> </message> @@ -795,118 +633,95 @@ <context> <name>PreferencesDialogClass</name> <message> - <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui"/> <source>Preferences</source> <translation>Préférences</translation> </message> <message> - <location/> <source>Fonts</source> <translation>Polices</translation> </message> <message> - <location/> <source>Font settings:</source> <translation>Configuration des polices :</translation> </message> <message> - <location/> <source>Browser</source> <translation>Navigateur</translation> </message> <message> - <location/> <source>Application</source> <translation>Application</translation> </message> <message> - <location/> <source>Filters</source> <translation>Filtres</translation> </message> <message> - <location/> <source>Filter:</source> <translation>Filtre :</translation> </message> <message> - <location/> <source>Attributes:</source> <translation>Attributs :</translation> </message> <message> - <location/> <source>1</source> <translation>1</translation> </message> <message> - <location/> <source>Add</source> <translation>Ajouter</translation> </message> <message> - <location/> <source>Remove</source> <translation>Supprimer</translation> </message> <message> - <location/> <source>Documentation</source> <translation>Documentation</translation> </message> <message> - <location/> <source>Registered Documentation:</source> <translatorcomment>documentation enregistrée ? ← je préfère référencée pour les deux...</translatorcomment> <translation>Documentation référencée :</translation> </message> <message> - <location/> <source>Add...</source> <translation>Ajouter…</translation> </message> <message> - <location/> <source>Options</source> <translation>Options</translation> </message> <message> - <location/> <source>On help start:</source> <translation>Au démarrage :</translation> </message> <message> - <location/> <source>Show my home page</source> <translation>Afficher ma page d'accueil</translation> </message> <message> - <location/> <source>Show a blank page</source> <translation>Afficher une page blanche</translation> </message> <message> - <location/> <source>Show my tabs from last session</source> <translation>Afficher mes onglets de la dernière session</translation> </message> <message> - <location/> <source>Homepage</source> <translation>Page d'accueil</translation> </message> <message> - <location/> <source>Current Page</source> <translation>Page courante</translation> </message> <message> - <location/> <source>Blank Page</source> <translation>Page blanche</translation> </message> <message> - <location/> <source>Restore to default</source> <translation>Restaurer les valeurs par défaut</translation> </message> @@ -914,69 +729,50 @@ <context> <name>QObject</name> <message> - <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/> <source>The specified collection file does not exist!</source> <translation>Le fichier de collection spécifié n'existe pas !</translation> </message> <message> - <location line="+4"/> <source>Missing collection file!</source> <translation>Fichier de collection manquant !</translation> </message> <message> - <location line="+9"/> <source>Invalid URL!</source> <translation>URL invalide !</translation> </message> <message> - <location line="+4"/> <source>Missing URL!</source> <translation>URL manquante !</translation> </message> <message> - <location line="+17"/> - <location line="+19"/> - <location line="+19"/> <source>Unknown widget: %1</source> <translation>Widget inconnu : %1</translation> </message> <message> - <location line="-34"/> - <location line="+19"/> - <location line="+19"/> <source>Missing widget!</source> <translation>Widget manquant !</translation> </message> <message> - <location line="+7"/> - <location line="+12"/> <source>The specified Qt help file does not exist!</source> <translation>Le fichier d'aide Qt spécifié n'existe pas !</translation> </message> <message> - <location line="-7"/> - <location line="+12"/> <source>Missing help file!</source> <translation>Fichier d'aide manquant !</translation> </message> <message> - <location line="+7"/> <source>Missing filter argument!</source> <translation>Argument de filtre manquant !</translation> </message> <message> - <location line="+12"/> <source>Unknown option: %1</source> <translation>Option inconnue : %1</translation> </message> <message> - <location line="+30"/> - <location line="+2"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/main.cpp" line="+225"/> <source>Could not register documentation file %1 @@ -989,17 +785,14 @@ Raison : %2</translation> </message> <message> - <location line="+4"/> <source>Documentation successfully registered.</source> <translation>Documentation enregistrée avec succès.</translation> </message> <message> - <location line="+8"/> <source>Documentation successfully unregistered.</source> <translation>Documentation retirée avec succès.</translation> </message> <message> - <location line="+3"/> <source>Could not unregister documentation file %1 @@ -1012,12 +805,10 @@ Raison : %2</translation> </message> <message> - <location line="+37"/> <source>Cannot load sqlite database driver!</source> <translation>Impossible de charger le driver de la base de données sqlite !</translation> </message> <message> - <location line="+9"/> <source>The specified collection file could not be read!</source> <translation>Le fichier de collection spécifié ne peut pas être lu !</translation> </message> @@ -1025,12 +816,10 @@ Raison : <context> <name>RemoteControl</name> <message> - <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+163"/> <source>Debugging Remote Control</source> <translation>Débogage du contrôle à distance</translation> </message> <message> - <location line="+1"/> <source>Received Command: %1 %2</source> <translation>Commande reçue : %1 %2</translation> </message> @@ -1038,22 +827,18 @@ Raison : <context> <name>SearchWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+196"/> <source>&Copy</source> <translation>&Copier</translation> </message> <message> - <location line="+4"/> <source>Copy &Link Location</source> <translation>Copier &l'adresse du lien</translation> </message> <message> - <location line="+4"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> <message> - <location line="+8"/> <source>Select All</source> <translation>Sélectionner tout</translation> </message> @@ -1061,27 +846,22 @@ Raison : <context> <name>TopicChooser</name> <message> - <location filename="../tools/assistant/tools/assistant/topicchooser.ui"/> <source>Choose Topic</source> <translation>Choisir le domaine</translation> </message> <message> - <location/> <source>&Topics</source> <translation>&Domaines</translation> </message> <message> - <location/> <source>&Display</source> <translation>&Afficher</translation> </message> <message> - <location/> <source>&Close</source> <translation>&Fermer</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+54"/> <source>Choose a topic for <b>%1</b>:</source> <translation>Choisir le domaine pour <b>%1</b> :</translation> </message> diff --git a/translations/designer_fr.ts b/translations/designer_fr.ts index bfdbb73..175d5c5 100644 --- a/translations/designer_fr.ts +++ b/translations/designer_fr.ts @@ -4,27 +4,22 @@ <context> <name>AbstractFindWidget</name> <message> - <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="127"/> <source>&Previous</source> <translation>&Précédent</translation> </message> <message> - <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="135"/> <source>&Next</source> <translation>&Suivant</translation> </message> <message> - <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="159"/> <source>&Case sensitive</source> <translation>&Sensible à la casse</translation> </message> <message> - <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="167"/> <source>Whole &words</source> <translation>M&ots complets</translation> </message> <message> - <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="179"/> <source><img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped</source> <translation><img src=":/trolltech/shared/images/wrap.png">&nbsp;Recherche à partir du début</translation> </message> @@ -32,17 +27,14 @@ <context> <name>AddLinkDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="5"/> <source>Insert Link</source> <translation>Insérer lien</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="19"/> <source>Title:</source> <translation>Titre :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="36"/> <source>URL:</source> <translation>URL :</translation> </message> @@ -50,7 +42,6 @@ <context> <name>AppFontDialog</name> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="418"/> <source>Additional Fonts</source> <translation>Polices additionnelles</translation> </message> @@ -58,38 +49,31 @@ <context> <name>AppFontManager</name> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="151"/> <source>'%1' is not a file.</source> <translation>'%1' n'est pas un fichier.</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="155"/> <source>The font file '%1' does not have read permissions.</source> <translation>Le fichier de la police '%1' n'a pas les permissions de lecture.</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="163"/> <source>The font file '%1' is already loaded.</source> <translation>Le fichier de la police '%1' est déjà chargé.</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="170"/> <source>The font file '%1' could not be loaded.</source> <translatorcomment>passé composé plutôt</translatorcomment> <translation>Le fichier de la police '%1' n'a pas pu chargé.</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="187"/> <source>'%1' is not a valid font id.</source> <translation>'%1' n'est pas un identifiant de police valide.</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="198"/> <source>There is no loaded font matching the id '%1'.</source> <translation>Il n'y a pas de police chargée correspondant à l'identifiant '%1'.</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="213"/> <source>The font '%1' (%2) could not be unloaded.</source> <translation>La police '%1' (%2) ne peut pas être déchargée.</translation> </message> @@ -97,53 +81,43 @@ <context> <name>AppFontWidget</name> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="239"/> <source>Fonts</source> <translation>Polices</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="297"/> <source>Add font files</source> <translation>Ajouter des fichiers de polices</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="302"/> <source>Remove current font file</source> <translation>Retirer le fichier de police courant</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="306"/> <source>Remove all font files</source> <translation>Retirer tous les fichiers de polices</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="325"/> <source>Add Font Files</source> <translation>Ajouter des fichiers de polices</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="326"/> <source>Font files (*.ttf)</source> <translation>Fichier de polices (*.ttf)</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="339"/> <source>Error Adding Fonts</source> <translation>Erreur dans l'ajout de polices</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="363"/> <source>Error Removing Fonts</source> <translatorcomment>s/de/des/ pour être cohérent avec le suivant...</translatorcomment> <translation>Erreur lors de la suppression des polices</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="385"/> <source>Remove Fonts</source> <translation>Retirer les polices</translation> </message> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="385"/> <source>Would you like to remove all fonts?</source> <translation>Voulez-vous supprimer toutes les polices ?</translation> </message> @@ -151,12 +125,10 @@ <context> <name>AppearanceOptionsWidget</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="14"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="20"/> <source>User Interface Mode</source> <translation>Mode de l'interface utilisateur</translation> </message> @@ -164,17 +136,14 @@ <context> <name>AssistantClient</name> <message> - <location filename="../tools/designer/src/designer/assistantclient.cpp" line="100"/> <source>Unable to send request: Assistant is not responding.</source> <translation>Impossible d'envoyer la requête : Assistant ne répond pas.</translation> </message> <message> - <location filename="../tools/designer/src/designer/assistantclient.cpp" line="139"/> <source>The binary '%1' does not exist.</source> <translation>Le binaire '%1' n'existe pas.</translation> </message> <message> - <location filename="../tools/designer/src/designer/assistantclient.cpp" line="148"/> <source>Unable to launch assistant (%1).</source> <translation>Impossible de démarrer Assistant (%1).</translation> </message> @@ -182,93 +151,75 @@ <context> <name>BrushPropertyManager</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="52"/> <source>No brush</source> <translation>Pas de pinceau</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="53"/> <source>Solid</source> <translatorcomment>c'est plutôt continu ou "trait continu" pour moi</translatorcomment> <translation>Trait continu</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="54"/> <source>Dense 1</source> <translation>Dense 1</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="55"/> <source>Dense 2</source> <translation>Dense 2</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="56"/> <source>Dense 3</source> <translation>Dense 3</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="57"/> <source>Dense 4</source> <translation>Dense 4</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="58"/> <source>Dense 5</source> <translation>Dense 5</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="59"/> <source>Dense 6</source> <translation>Dense 6</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="60"/> <source>Dense 7</source> <translation>Dense 7</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="61"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="62"/> <source>Vertical</source> <translation>Vertical</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="63"/> <source>Cross</source> <translation>Croix</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="64"/> <source>Backward diagonal</source> <translation>Diagonale arrière</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="65"/> <source>Forward diagonal</source> <translation>Diagonale avant</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="66"/> <source>Crossing diagonal</source> <translation>Diagonale croisée</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="149"/> <source>Style</source> <translation>Style</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="160"/> <source>Color</source> <translation>Couleur</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="265"/> <source>[%1, %2]</source> <translation>[%1, %2]</translation> </message> @@ -276,353 +227,276 @@ <context> <name>Command</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="208"/> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="466"/> <source>Change signal</source> <translation>Modifier le signal</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="210"/> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="478"/> <source>Change slot</source> <translation>Modifier le slot</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="258"/> <source>Change signal-slot connection</source> <translation>Modfier la connection signal-slot</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="492"/> <source>Change sender</source> <translatorcomment>expéditeur/source</translatorcomment> <translation>Modifier l'envoyeur</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="510"/> <source>Change receiver</source> <translatorcomment>destinataire++/cible?</translatorcomment> <translation>Modifier le destinataire</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="221"/> <source>Create button group</source> <translation>Créer un groupe de boutons</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="248"/> <source>Break button group</source> <translation>Dissocier le groupe de bouton</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="257"/> <source>Break button group '%1'</source> <translation>Dissossier le groupe de bouton '%1'</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="274"/> <source>Add buttons to group</source> <translation>Ajouter les boutons au groupe</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="282"/> - <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="458"/> <source>Add '%1' to '%2'</source> <extracomment>Command description for adding buttons to a QButtonGroup</extracomment> <translation>Ajouter '%1' à '%2'</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="296"/> <source>Remove buttons from group</source> <translation>Retirer les boutons du groupe</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="311"/> <source>Remove '%1' from '%2'</source> <extracomment>Command description for removing buttons from a QButtonGroup</extracomment> <translation>Retirer '%1' de '%2'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="143"/> <source>Add connection</source> <translation>Ajouter une connexion</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="197"/> <source>Adjust connection</source> <translation>Réajuster les connexions</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="216"/> <source>Delete connections</source> <translation>Supprimer les connexions</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="274"/> <source>Change source</source> <translation>Modifier la source</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="276"/> <source>Change target</source> <translation>Modifier la cible</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="349"/> <source>Morph %1/'%2' into %3</source> <extracomment>MorphWidgetCommand description</extracomment> <translation>Transformer %1/'%2' en %3</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="149"/> <source>Insert '%1'</source> <translation>Insérer '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="282"/> <source>Change Z-order of '%1'</source> <translatorcomment>l'ordre de '%1' sur l'axe z? profondeur ?</translatorcomment> <translation>Modifier la profondeur de '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="316"/> <source>Raise '%1'</source> <translation>Élever '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="349"/> <source>Lower '%1'</source> <translation>Abaisser '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="462"/> <source>Delete '%1'</source> <translation>Supprimer '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="581"/> <source>Reparent '%1'</source> <translation>Reparenter '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="634"/> <source>Promote to custom widget</source> <translation>Promouvoir en widget personnalisé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="676"/> <source>Demote from custom widget</source> <translation>Annuler la promotion en widget personnalisé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="755"/> <source>Lay out using grid</source> <translation>Mettre en page à l'aide d'une grille</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="758"/> <source>Lay out vertically</source> <translation>Mettre en page verticalement</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="761"/> <source>Lay out horizontaly</source> + <translation type="obsolete">Mettre en page horizontalement</translation> + </message> + <message> + <source>Lay out horizontally</source> <translation>Mettre en page horizontalement</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="802"/> <source>Break layout</source> <translation>Casser la mise en page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="907"/> <source>Simplify Grid Layout</source> <translation>Simplifier la mise en page en grille</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1042"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1277"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1355"/> <source>Move Page</source> <translation>Déplacer la page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1076"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1199"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1387"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2053"/> <source>Delete Page</source> <translation>Supprimer la page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1114"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1237"/> <source>Page</source> <translation>Page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1119"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1242"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1428"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2095"/> <source>Insert Page</source> <translation>Insérer une page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1448"/> <source>Change Tab order</source> <translation>Modifier l'ordre des tabulations</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1476"/> <source>Create Menu Bar</source> <translation>Créer une barre de menu</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1520"/> <source>Delete Menu Bar</source> <translation>Supprimer la barre de menu</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1567"/> <source>Create Status Bar</source> <translation>Créer une barre d'état</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1609"/> <source>Delete Status Bar</source> <translation>Supprimer la barre d'état</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1654"/> <source>Add Tool Bar</source> <translation>Ajouter une barre d'outil</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1713"/> <source>Add Dock Window</source> <translation>Ajouter une fenêtre ancrable</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1766"/> <source>Adjust Size of '%1'</source> <translation>Ajuster les dimensions de '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1823"/> <source>Change Form Layout Item Geometry</source> <translation>Modifier la géométrie de l'élément de formulaire</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1918"/> <source>Change Layout Item Geometry</source> <translation>Modifier la géométrie de l'élément de mise en page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2056"/> <source>Delete Subwindow</source> <translation>Supprimer la sous-fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2097"/> <source>page</source> <translation>page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2100"/> <source>Insert Subwindow</source> <translation>Insérer une sous-fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2102"/> <source>subwindow</source> <translation>sous-fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2103"/> <source>Subwindow</source> <translation>Sous fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2494"/> <source>Change Table Contents</source> <translation>Modifier le contenu de la table</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2601"/> <source>Change Tree Contents</source> <translation>Modifier le contenu de l'arbre</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2675"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2821"/> <source>Add action</source> <translation>Ajouter une action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2701"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2827"/> <source>Remove action</source> <translation>Supprimer l'action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2880"/> <source>Add menu</source> <translation>Ajouter un menu</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2886"/> <source>Remove menu</source> <translation>Supprimer le menu</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2892"/> <source>Create submenu</source> <translation>Créer une sous-fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2923"/> <source>Delete Tool Bar</source> <translation>Supprimer la barre d'outils</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command2.cpp" line="154"/> <source>Change layout of '%1' from %2 to %3</source> <translation>Modifier la mise en page de '%1' de %2 à %3</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1195"/> <source>Set action text</source> <translation>Définir le texte de l'action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1198"/> <source>Insert action</source> <translation>Insérer action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1287"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="907"/> <source>Move action</source> <translation>Déplacer action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="483"/> <source>Change Title</source> <translation>Modifier le titre</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="485"/> <source>Insert Menu</source> <translation>Insérer menu</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1213"/> <source>Changed '%1' of '%2'</source> <translation>Modifier '%1' de '%2'</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1216"/> <source>Changed '%1' of %n objects</source> <translation> <numerusform>Modifier '%1' de %n objet</numerusform> @@ -630,12 +504,10 @@ </translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1292"/> <source>Reset '%1' of '%2'</source> <translation>Réinitialiser '%1' de '%2'</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1295"/> <source>Reset '%1' of %n objects</source> <translation> <numerusform>Réinitialiser '%1' de %n objet</numerusform> @@ -643,12 +515,10 @@ </translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1384"/> <source>Add dynamic property '%1' to '%2'</source> <translation>Ajouter la propriété dynamique '%1' à '%2'</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1387"/> <source>Add dynamic property '%1' to %n objects</source> <translation> <numerusform>Ajouter la propriété dynamique '%1' à %n objet</numerusform> @@ -656,12 +526,10 @@ </translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1473"/> <source>Remove dynamic property '%1' from '%2'</source> <translation>Supprimer la propriété dynamique '%1' de '%2'</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1476"/> <source>Remove dynamic property '%1' from %n objects</source> <translation> <numerusform>Supprimer la propriété dynamique '%1' de %n objet</numerusform> @@ -669,12 +537,10 @@ </translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/scriptcommand.cpp" line="55"/> <source>Change script</source> <translation>Modifier le script</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="202"/> <source>Change signals/slots</source> <translation>Modifier signaux/slots</translation> </message> @@ -682,24 +548,18 @@ <context> <name>ConnectDialog</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="13"/> <source>Configure Connection</source> <translation>Configurer connexion</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="19"/> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="59"/> <source>GroupBox</source> <translation>GroupBox</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="34"/> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="74"/> <source>Edit...</source> <translation>Éditer...</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="99"/> <source>Show signals and slots inherited from QWidget</source> <translation>Afficher les signaux et slots hérités de QWidget</translation> </message> @@ -707,17 +567,14 @@ <context> <name>ConnectionDelegate</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="643"/> <source><object></source> <translation><objet></translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="661"/> <source><signal></source> <translation><signal></translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="661"/> <source><slot></source> <translation><slot></translation> </message> @@ -725,19 +582,16 @@ <context> <name>DPI_Chooser</name> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="69"/> <source>Standard (96 x 96)</source> <extracomment>Embedded device standard screen resolution</extracomment> <translation>Standard (96 x 96)</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="71"/> <source>Greenphone (179 x 185)</source> <extracomment>Embedded device screen resolution</extracomment> <translation>Greenphone (179 x 185)</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="73"/> <source>High (192 x 192)</source> <extracomment>Embedded device high definition screen resolution</extracomment> <translatorcomment>"haute resolution" would be missleading</translatorcomment> @@ -747,89 +601,72 @@ <context> <name>Designer</name> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="449"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="459"/> <source>This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form.</source> <translation>Ce fichier contient des ressorts de premier niveau. <br>Ils ne sont <b>PAS</b> sauvegardé dans le formulaire.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="461"/> <source>Perhaps you forgot to create a layout?</source> <translation>Peut-être avez-vous oublié de créer un layout ?</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="634"/> <source>Invalid UI file: The root element <ui> is missing.</source> <translation>Fichier UI invalide. L'élément racine <ui> est manquant.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="640"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> <translation>Une erreur est survenue lors de la lecture du fichier UI à la ligne %1, colonne %2: %3</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="666"/> <source>This file cannot be read because it was created using %1.</source> <translation>Ce fichier ne peut pas être lu car il a été créé à l'aide de %1.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="680"/> <source>This file was created using Designer from Qt-%1 and cannot be read.</source> <translation>Ce fichier a été créé à l'aide du Designer de Qt-%1 et ne peut être lu.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="710"/> <source>The converted file could not be read.</source> <translation>Le fichier converti ne peut pas être lu.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="714"/> <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source> <translation>Ce fichier a été créé par le Designer de Qt-%1 et sera converti au nouveau format par Qt Designer.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="717"/> <source>The old form has not been touched, but you will have to save the form under a new name.</source> <translation>L'ancienne interface n'a pas été modifiée, vous devez sauvergarder l'interface sous un nouveau nom.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="728"/> <source>This file was created using Designer from Qt-%1 and could not be read: %2</source> <translation>Le fichier a été créé à l'aide de Designer de Qt-%1 et ne peut pas être lu : %2</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="731"/> <source>Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format.</source> <translation>Veuillez le faire passer par <b>uic3&nbsp;-convert</b> pour le convertir au format de fichier de Qt 4.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="762"/> <source>This file cannot be read because the extra info extension failed to load.</source> <translation>Ce fichier ne peut pas être lu car les informations d'extension n'ont pu être chargées.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="682"/> <source>Unable to launch %1.</source> <translation>Impossible de lancer %1.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="686"/> <source>%1 timed out.</source> <translation>%1 est arrivé à échéance.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="339"/> <source>Custom Widgets</source> <translation>Widgets personnalisés</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="351"/> <source>Promoted Widgets</source> <translation>Widgets promus</translation> </message> @@ -837,12 +674,10 @@ <context> <name>DesignerMetaEnum</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="173"/> <source>%1 is not a valid enumeration value of '%2'.</source> <translation>%1 n'est pas une valeur d'énumeration valide de '%2'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="178"/> <source>'%1' could not be converted to an enumeration value of type '%2'.</source> <translation>'%1' ne peut pas être converti en une valeur d'énumération de type '%2'.</translation> </message> @@ -850,7 +685,6 @@ <context> <name>DesignerMetaFlags</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="256"/> <source>'%1' could not be converted to a flag value of type '%2'.</source> <translation>'%1' ne peut pas être converti en un drapeau de type '%2'.</translation> </message> @@ -858,13 +692,11 @@ <context> <name>DeviceProfile</name> <message> - <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="397"/> <source>'%1' is not a number.</source> <extracomment>Reading a number for an embedded device profile</extracomment> <translation>'%1' n'est pas un nombre.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="420"/> <source>An invalid tag <%1> was encountered.</source> <translation>La balise invalide <%1> a été rencontré.</translation> </message> @@ -872,27 +704,22 @@ <context> <name>DeviceProfileDialog</name> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="20"/> <source>&Family</source> <translation>&Famille</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="33"/> <source>&Point Size</source> <translation>&Taille en points</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="46"/> <source>Style</source> <translation>Style</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="59"/> <source>Device DPI</source> <translation>PPP/DPI de l'appareil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="69"/> <source>Name</source> <translation>Nom</translation> </message> @@ -900,57 +727,46 @@ <context> <name>DeviceSkin</name> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="79"/> <source>The image file '%1' could not be loaded.</source> <translation>Le fichier image '%1' n'a pas pu être chargé.</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="143"/> <source>The skin directory '%1' does not contain a configuration file.</source> <translation>Le repertoire de revêtement '%1' ne contient pas un fichier de configuration.</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="148"/> <source>The skin configuration file '%1' could not be opened.</source> <translation>Le fichier de configuration de revêtement '%1' ne peut pas être ouvert.</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="154"/> <source>The skin configuration file '%1' could not be read: %2</source> <translation>Le fichier de configuration de revêtement '%1' ne peut pas être lu: %2</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="224"/> <source>Syntax error: %1</source> <translation>Erreur de syntaxe : %1</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="245"/> <source>The skin "up" image file '%1' does not exist.</source> <translation>Le fichier image "up" de revêtement '%1' n'existe pas.</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="255"/> <source>The skin "down" image file '%1' does not exist.</source> <translation>Le fichier image "down" de revêtement '%1' n'existe pas.</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="266"/> <source>The skin "closed" image file '%1' does not exist.</source> <translation>Le fichier image "closed" de revêtement '%1' n'existe pas.</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="278"/> <source>The skin cursor image file '%1' does not exist.</source> <translation>Le fichier image de revêtement '%1' n'existe pas.</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="303"/> <source>Syntax error in area definition: %1</source> <translation>Erreur de syntaxe dans la zone de définition : %1</translation> </message> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="341"/> <source>Mismatch in number of areas, expected %1, got %2.</source> <translation>Incohérence dans le nombre de zones, %1 attendu, %2 reçu.</translation> </message> @@ -958,7 +774,6 @@ <context> <name>EmbeddedOptionsControl</name> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="307"/> <source><html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Resolution</b></td><td>%4 x %5</td></tr></table></html></source> <extracomment>Format embedded device profile description</extracomment> <translation><html><table><tr><td><b>Police</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Résolution</b></td><td>%4 x %5</td></tr></table></html></translation> @@ -967,13 +782,11 @@ <context> <name>EmbeddedOptionsPage</name> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="410"/> <source>Embedded Design</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Design pour appareil mobile</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="420"/> <source>Device Profiles</source> <extracomment>EmbeddedOptionsControl group box"</extracomment> <translation>Profils des appareils</translation> @@ -982,27 +795,22 @@ <context> <name>FontPanel</name> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="63"/> <source>Font</source> <translation>Police</translation> </message> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="74"/> <source>&Writing system</source> <translation>&Système d'écriture</translation> </message> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="77"/> <source>&Family</source> <translation>&Famille</translation> </message> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="81"/> <source>&Style</source> <translation>&Style</translation> </message> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="85"/> <source>&Point size</source> <translation>&Taille en points</translation> </message> @@ -1010,22 +818,18 @@ <context> <name>FontPropertyManager</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="62"/> <source>PreferDefault</source> <translation>PreferDefault</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="63"/> <source>NoAntialias</source> <translation>NoAntialias</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="64"/> <source>PreferAntialias</source> <translation>PreferAntialias</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="125"/> <source>Antialiasing</source> <translation>Antialiasing</translation> </message> @@ -1033,13 +837,11 @@ <context> <name>FormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="359"/> <source>Invalid stretch value for '%1': '%2'</source> <extracomment>Parsing layout stretch values</extracomment> <translation>Valeur d'extension invalide pour '%1' : '%2'</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="421"/> <source>Invalid minimum size for '%1': '%2'</source> <extracomment>Parsing grid layout minimum size values</extracomment> <translation>Taille minimum invalide pour '%1' : '%2'</translation> @@ -1048,28 +850,23 @@ <context> <name>FormEditorOptionsPage</name> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="91"/> <source>%1 %</source> <translation>%1 %</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="95"/> <source>Preview Zoom</source> <translation>Zoom de visualisation</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="97"/> <source>Default Zoom</source> <translation>Zoom par défaut</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="126"/> <source>Forms</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Formulaires</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="139"/> <source>Default Grid</source> <translation>Grille par défaut</translation> </message> @@ -1077,38 +874,31 @@ <context> <name>FormLayoutRowDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="6"/> <source>Add Form Layout Row</source> <translation>Ajouter une ligne de mise en page au formulaire</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="17"/> <source>&Label text:</source> <translation>&Texte du label :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="40"/> <source>Field &type:</source> <translation>&Type du champ :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="60"/> <source>&Field name:</source> <translation>&Nom du champ :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="70"/> <source>&Buddy:</source> <translatorcomment>copain c'est un peu beaucoup ptet</translatorcomment> <translation>&Copain :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="87"/> <source>&Row:</source> <translation>&Ligne :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="103"/> <source>Label &name:</source> <translation>&Nom du label :</translation> </message> @@ -1116,12 +906,10 @@ <context> <name>FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1701"/> <source>Unexpected element <%1></source> <translation>Element inattendu : <%1></translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1708"/> <source>Error while pasting clipboard contents at line %1, column %2: %3</source> <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation> </message> @@ -1129,62 +917,50 @@ <context> <name>FormWindowSettings</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="54"/> <source>Form Settings</source> <translation>Configuration du formulaire</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="68"/> <source>Layout &Default</source> <translation>Mise en page par &défaut</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="83"/> <source>&Spacing:</source> <translation>&Espacements :</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="93"/> <source>&Margin:</source> <translation>&Marge :</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="112"/> <source>&Layout Function</source> <translation>&Fonction de mise en page</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="133"/> <source>Ma&rgin:</source> <translation>Ma&rge :</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="143"/> <source>Spa&cing:</source> <translation>Espa&cement :</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="166"/> <source>&Pixmap Function</source> <translation>Fonction de &pixmap</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="219"/> <source>&Include Hints</source> <translation>Indication d'&include</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="237"/> <source>Grid</source> <translation>Grille</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="244"/> <source>Embedded Design</source> <translation>Design pour appareil mobile</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="260"/> <source>&Author</source> <translation>&Auteur</translation> </message> @@ -1192,7 +968,6 @@ <context> <name>IconSelector</name> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="352"/> <source>All Pixmaps (</source> <translation>Tous les pixmaps (</translation> </message> @@ -1200,7 +975,6 @@ <context> <name>ItemPropertyBrowser</name> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="66"/> <source>XX Icon Selected off</source> <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment> <translation>XX Icon Selected off</translation> @@ -1209,33 +983,27 @@ <context> <name>MainWindowBase</name> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="119"/> <source>Main</source> <extracomment>Not currently used (main tool bar)</extracomment> <translation>Principal</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="125"/> <source>File</source> <translation>Fichier</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="126"/> <source>Edit</source> <translation>Édition</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="127"/> <source>Tools</source> <translation>Outils</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="128"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="135"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> @@ -1243,52 +1011,42 @@ <context> <name>NewForm</name> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="78"/> <source>Show this Dialog on Startup</source> <translation>Afficher cette boîte de dialogue au démarrage</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="79"/> <source>C&reate</source> <translation>C&réer</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="80"/> <source>Recent</source> <translation>Récent</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="83"/> <source>New Form</source> <translation>Nouveau formulaire</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="112"/> <source>&Close</source> <translation>&Fermer</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="115"/> <source>&Open...</source> <translation>&Ouvrir...</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="119"/> <source>&Recent Forms</source> <translation>&Formulaires récents</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="183"/> <source>Read error</source> <translation>Erreur de lecture</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="206"/> <source>A temporary form file could not be created in %1.</source> <translation>Un fichier temporaire de formulaire n'a pas pu être créé dans %1.</translation> </message> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="212"/> <source>The temporary form file %1 could not be written.</source> <translation>Le fichier temporaire de formulaire %1 n'a pas pu être écrit.</translation> </message> @@ -1296,22 +1054,18 @@ <context> <name>ObjectInspectorModel</name> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="360"/> <source>Object</source> <translation>Objet</translation> </message> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="361"/> <source>Class</source> <translation>Classe</translation> </message> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="396"/> <source>separator</source> <translation>séparateur</translation> </message> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="494"/> <source><noname></source> <translation><sans nom></translation> </message> @@ -1319,12 +1073,10 @@ <context> <name>ObjectNameDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="158"/> <source>Change Object Name</source> <translation>Modifier le nom de l'objet</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="162"/> <source>Object Name</source> <translation>Nom de l'objet</translation> </message> @@ -1332,12 +1084,10 @@ <context> <name>PluginDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="54"/> <source>Plugin Information</source> <translation>Information du plugin</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="80"/> <source>1</source> <translation>1</translation> </message> @@ -1345,7 +1095,6 @@ <context> <name>PreferencesDialog</name> <message> - <location filename="../tools/designer/src/designer/preferencesdialog.ui" line="20"/> <source>Preferences</source> <translation>Préférences</translation> </message> @@ -1353,34 +1102,26 @@ <context> <name>PreviewConfigurationWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="5"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="8"/> <source>Print/Preview Configuration</source> <translation>Configuration d'impression/prévisualisation</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="17"/> <source>Style</source> <translation>Style</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="27"/> <source>Style sheet</source> <translation>Feuille de style</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="46"/> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="53"/> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="74"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="62"/> <source>Device skin</source> <translation>Revêtement de l'appareil</translation> </message> @@ -1388,7 +1129,6 @@ <context> <name>PromotionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="112"/> <source>Not used</source> <extracomment>Usage of promoted widgets</extracomment> <translation>Non utilisé</translation> @@ -1397,8 +1137,6 @@ <context> <name>Q3WizardContainer</name> <message> - <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="172"/> - <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="177"/> <source>Page</source> <translation>Page</translation> </message> @@ -1406,59 +1144,48 @@ <context> <name>QAbstractFormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="206"/> <source>Unexpected element <%1></source> <translation>Élément imprévu <%1></translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="211"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> <translation>Une erreur s'est produite lors de la lecture du fichier UI à la ligne %1, colonne %2 : %3</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="217"/> <source>Invalid UI file: The root element <ui> is missing.</source> <translation>Fichier UI invalide : l'élément racine <ui> est manquant.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="336"/> <source>The creation of a widget of the class '%1' failed.</source> <translation>La création d'un widget de la classe '%1' a échoué.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="632"/> <source>Attempt to add child that is not of class QWizardPage to QWizard.</source> <translation>Tentative d'ajout d'enfant qui n'est pas de la classe QWizardPage à QWizard.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="718"/> <source>Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. This indicates an inconsistency in the ui-file.</source> <translation>Tentative d'ajout d'un layout au widget '%1' (%2) qui a déjà un layout dont le type n'est pas boîte %3. Ceci indique une incohérence dans le fichier ui.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="862"/> <source>Empty widget item in %1 '%2'.</source> <translation>Widget vide dans %1 '%2'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="1542"/> <source>Flags property are not supported yet.</source> <translation>Les propriétés de type drapeau ne sont pas supportées.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="1623"/> <source>While applying tab stops: The widget '%1' could not be found.</source> <translation>Lors de l'application des arrêts de tabulation : le widget '%1' ne peut pas être trouvé.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="2531"/> <source>Invalid QButtonGroup reference '%1' referenced by '%2'.</source> <translation>Référence invalide '%1' à QButtonGroup, référencé par '%2'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="3042"/> <source>This version of the uitools library is linked without script support.</source> <translation>Cette version de la bibliothèque uitools n'a pas le support des scripts.</translation> </message> @@ -1466,12 +1193,10 @@ Ceci indique une incohérence dans le fichier ui.</translation> <context> <name>QAxWidgetPlugin</name> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="75"/> <source>ActiveX control</source> <translation>Control ActiveX</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="80"/> <source>ActiveX control widget</source> <translation>Widget control ActiveX</translation> </message> @@ -1479,22 +1204,18 @@ Ceci indique une incohérence dans le fichier ui.</translation> <context> <name>QAxWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="119"/> <source>Set Control</source> <translation>Définir le contrôle</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="120"/> <source>Reset Control</source> <translation>Réinitialiser le contrôle</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="161"/> <source>Licensed Control</source> <translation>Contrôle licencié</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="162"/> <source>The control requires a design-time license</source> <translation>Le contrôle requiert une license par interface</translation> </message> @@ -1502,67 +1223,54 @@ Ceci indique une incohérence dans le fichier ui.</translation> <context> <name>QCoreApplication</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="83"/> <source>%1 is not a promoted class.</source> <translation>%1 n'est pas une classe promue.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="148"/> <source>The base class %1 is invalid.</source> <translation>La classe de base %1 est invalide.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="155"/> <source>The class %1 already exists.</source> <translation>La classe %1 existe déjà.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="164"/> <source>Promoted Widgets</source> <translation>Widgets promus</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="290"/> <source>The class %1 cannot be removed</source> <translation>La classe %1 ne peut pas être retirée</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="299"/> <source>The class %1 cannot be removed because it is still referenced.</source> <translation>La classe %1 ne peut pas être retirée car elle est toujours référencée.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="309"/> <source>The class %1 cannot be renamed</source> <translation>La classe %1 ne peut pas être renommée</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="316"/> <source>The class %1 cannot be renamed to an empty name.</source> <translation>La classe %1 ne peut pas être renommé avec un nom vide.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="321"/> <source>There is already a class named %1.</source> <translation>Une classe existe déjà avec le nom %1.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="350"/> <source>Cannot set an empty include file.</source> <translation>Impossible de créer un fichier include vide.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="88"/> <source>Exception at line %1: %2</source> <translation>Exception à la ligne %1 : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="124"/> <source>Unknown error</source> <translation>Erreur inconnue</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="174"/> <source>An error occurred while running the script for %1: %2 Script: %3</source> <translation>Une erreur s'est produite lors de l'exécution du script de %1 : %2 @@ -1572,17 +1280,14 @@ Script : %3</translation> <context> <name>QDesigner</name> <message> - <location filename="../tools/designer/src/designer/qdesigner.cpp" line="141"/> <source>%1 - warning</source> <translation>Avertissement - %1</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner.cpp" line="237"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner.cpp" line="238"/> <source>This application cannot be used for the Console edition of Qt</source> <translation>Cette application ne peut pas être utilisée avec l'édition console de Qt</translation> </message> @@ -1590,228 +1295,178 @@ Script : %3</translation> <context> <name>QDesignerActions</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="128"/> <source>Saved %1.</source> <translation>%1 sauvé.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="154"/> <source>%1 already exists. Do you want to replace it?</source> <translation>%1 existe déjà. Voulez-vous le remplacer ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="178"/> <source>Edit Widgets</source> <translation>Éditer les widgets</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="179"/> <source>&New...</source> <translation>&Nouveau...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="180"/> <source>&Open...</source> <translation>&Ouvrir...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="181"/> <source>&Save</source> <translation>&Enregistrer</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="182"/> <source>Save &As...</source> <translation>Enregistrer &sous...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="183"/> <source>Save A&ll</source> <translation>Enregistrer &tout</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="184"/> <source>Save As &Template...</source> <translation>Sauver comme &modèle...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="185"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1086"/> <source>&Close</source> <translation>&Fermer</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="186"/> <source>Save &Image...</source> <translation>Enregistrer &image...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="187"/> <source>&Print...</source> <translation>Im&primer...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="188"/> <source>&Quit</source> <translation>&Quitter</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="190"/> <source>View &Code...</source> <translation>&Visualizer le code...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="191"/> <source>&Minimize</source> <translation>&Minimiser</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="193"/> <source>Bring All to Front</source> <translation>Amener tout au premier plan</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="195"/> <source>Preferences...</source> <translation>Préférences...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="196"/> <source>Additional Fonts...</source> <translation>Polices additionnelles...</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="258"/> <source>ALT+CTRL+S</source> <translation>ALT+CTRL+S</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="260"/> <source>CTRL+SHIFT+S</source> <translation>CTRL+SHIFT+S</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="373"/> <source>CTRL+R</source> <translation>CTRL+R</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="391"/> <source>CTRL+M</source> <translation>CTRL+M</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="422"/> <source>Qt Designer &Help</source> <translation>&Aide de Qt Designer</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="429"/> <source>Current Widget Help</source> <translation>Aide du widget courant</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="436"/> <source>What's New in Qt Designer?</source> <translation>Quoi de neuf dans Qt Designer ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="443"/> <source>About Plugins</source> <translation>À propos des plugins</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="449"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1050"/> <source>About Qt Designer</source> <translation>À propos de Qt Designer</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="455"/> <source>About Qt</source> <translation>À propos de Qt</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="493"/> <source>Clear &Menu</source> <translation>Réinitialiser le &menu</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="499"/> <source>&Recent Forms</source> <translation>Formulaires &récents</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="576"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="773"/> <source>Open Form</source> <translation>Ouvrir le formulaire</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="577"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="614"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="774"/> <source>Designer UI files (*.%1);;All Files (*)</source> <translation>Fichier UI de Qt Designer (*.%1);;Tous les fichiers(*)</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="614"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="862"/> <source>Save Form As</source> <translation>Enregistrer le formulaire sous</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="701"/> <source>Designer</source> <translation>Designer</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="701"/> <source>Feature not implemented yet!</source> <translation>Cette fonctionnalité n'est pas encore implémentée !</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="716"/> <source>Code generation failed</source> <translation>La génération du code à échoué</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="760"/> <source>Read error</source> <translation>Erreur de lecture</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="761"/> <source>%1 Do you want to update the file location or generate a new form?</source> <translation>%1 Voulez vous mettre à jour l'emplacement du fichier ou générer un nouveau formulaire ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="764"/> <source>&Update</source> <translation>&Mettre à jour</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="765"/> <source>&New Form</source> <translation>&Nouveau formulaire</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="842"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="882"/> <source>Save Form?</source> <translation>Sauver le formulaire ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="843"/> <source>Could not open file</source> <translation>Impossible d'ouvrir le fichier</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="847"/> <source>The file %1 could not be opened. Reason: %2 Would you like to retry or select a different file?</source> @@ -1820,17 +1475,14 @@ Raison : %2 Voulez-vous réessayer ou sélectionner un fichier différent ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="853"/> <source>Select New File</source> <translation>Sélectionner un nouveau fichier</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="883"/> <source>Could not write file</source> <translation>Impossible d'écrire le fichier</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="886"/> <source>It was not possible to write the entire file %1 to disk. Reason:%2 Would you like to retry?</source> @@ -1839,65 +1491,50 @@ Raison : %2 Voulez-vous réessayer ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1044"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1078"/> <source>Assistant</source> <translation>Assistant</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1084"/> <source>&Close Preview</source> <translation>&Fermer la prévisualisation</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1125"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1148"/> <source>The backup file %1 could not be written.</source> <translation>Le fichier de backup %1 n'a pas pu être écrit.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1255"/> <source>The backup directory %1 could not be created.</source> <translation>Le dossier de backup %1 n'a pas pu être créé.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1261"/> <source>The temporary backup directory %1 could not be created.</source> <translation>Le dossier temporaire de backup %1 n'a pas pu être créé.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1291"/> <source>Preview failed</source> <translation>La prévisualisation a échoué</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1315"/> <source>Image files (*.%1)</source> <translation>Fichiers image (*.%1)</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1324"/> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1341"/> <source>Save Image</source> <translation>Sauver image</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1337"/> <source>Saved image %1.</source> <translation>Image %1 sauvée.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1342"/> <source>The file %1 could not be written.</source> <translation>Le fichier %1 n'a pas pu être écrit.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1355"/> <source>Please close all forms to enable the loading of additional fonts.</source> <translation>Veuillez fermer tous les formulaires pour activer le chargement de polices additionnelles.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1407"/> <source>Printed %1.</source> <translation>Impression de %1 terminée.</translation> </message> @@ -1905,7 +1542,6 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerAppearanceOptionsPage</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="138"/> <source>Appearance</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Apparence</translation> @@ -1914,17 +1550,14 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerAppearanceOptionsWidget</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="85"/> <source>Docked Window</source> <translation>Fenêtre ancrable</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="86"/> <source>Multiple Top-Level Windows</source> <translation>Fenêtres multiples</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="91"/> <source>Toolwindow Font</source> <translation>Police des fenêtre d'outils</translation> </message> @@ -1932,22 +1565,18 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerAxWidget</name> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="91"/> <source>Reset control</source> <translation>Réinitialiser les contrôles</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="93"/> <source>Set control</source> <translation>Définir les contrôles</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="179"/> <source>Control loaded</source> <translation>Contrôle chargé</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="219"/> <source>A COM exception occurred when executing a meta call of type %1, index %2 of "%3".</source> <translation>Une exception COM a été levée lors de l'execution du meta-appel de type %1, indice %2 de "%3".</translation> </message> @@ -1955,17 +1584,14 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerFormBuilder</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="89"/> <source>Script errors occurred:</source> <translation>Erreurs du script :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="396"/> <source>The preview failed to build.</source> <translation>La construction de la prévisualisation a échoué.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="461"/> <source>Designer</source> <translation>Designer</translation> </message> @@ -1973,22 +1599,18 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerFormWindow</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="217"/> <source>%1 - %2[*]</source> <translation>%1 - %2[*]</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="227"/> <source>Save Form?</source> <translation>Enregistrer le formulaire ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="228"/> <source>Do you want to save the changes to this document before closing?</source> <translation>Voulez-vous enregistrer les changements de ce document avant de le fermer ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="230"/> <source>If you don't save, your changes will be lost.</source> <translation>Si vous ne sauvegardez pas, les changements seront perdus.</translation> </message> @@ -1996,38 +1618,30 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="106"/> <source>Type Here</source> <translation>Taper ici</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="109"/> <source>Add Separator</source> <translation>Ajouter séparateur</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="480"/> <source>Insert separator</source> <translation>Insérer séparateur</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="485"/> <source>Remove separator</source> <translation>Retirer séparateur</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="487"/> <source>Remove action '%1'</source> <translation>Supprimer l'action '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="512"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1162"/> <source>Add separator</source> <translation>Ajouter séparateur</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="814"/> <source>Insert action</source> <translation>Insérer action</translation> </message> @@ -2035,22 +1649,18 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerMenuBar</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="110"/> <source>Type Here</source> <translation>Taper ici</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="408"/> <source>Remove Menu '%1'</source> <translation>Supprimer menu '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="420"/> <source>Remove Menu Bar</source> <translation>Supprimer barre de menu</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="490"/> <source>Menu</source> <translation>Menu</translation> </message> @@ -2058,37 +1668,30 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerPluginManager</name> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="271"/> <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source> <translation>Une erreur XML a été rencontrée lors de l'analyse grammaticale du XML provenant du widget personnalisé %1 : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="276"/> <source>A required attribute ('%1') is missing.</source> <translation>Un attribut obligatoire ('%1') est manquant.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="314"/> <source>An invalid property specification ('%1') was encountered. Supported types: %2</source> <translation>Une spécification invalide de propriété ('%1') a été rencontrée. Types supportés : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="334"/> <source>'%1' is not a valid string property specification.</source> <translation>'%1' n'est pas une spécification valide de propriété chaîne de caractères.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="374"/> <source>The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>.</source> <translation>Le XML du widget personnalisé %1 ne contient aucun des éléments <widget> ou <ui>.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="386"/> <source>The class attribute for the class %1 is missing.</source> <translation>L'attribut de classe est manquant pour la classe %1.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="390"/> <source>The class attribute for the class %1 does not match the class name %2.</source> <translation>L'attribut de classe pour la classe %1 ne correspond pas au nom de la classe %2.</translation> </message> @@ -2096,7 +1699,6 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerPropertySheet</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="754"/> <source>Dynamic Properties</source> <translation>Propriétés dynamiques</translation> </message> @@ -2104,31 +1706,26 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerResource</name> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="1223"/> <source>The layout type '%1' is not supported, defaulting to grid.</source> <translation>Le type de layout '%1' n'est pas supporté, replacement par une grille.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="1466"/> <source>The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source> <translation>L'extension du widget '%1' (%2) a retourné un widget non géré par Designer '%3' (%4) lors de la requête pour la page #%5. Les pages du conteneur ne devraient être ajoutées que par spécification dans le XML retourné par la méthode domXml() du widget personnalisé.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2065"/> <source>Unexpected element <%1></source> <extracomment>Parsing clipboard contents</extracomment> <translation>Élément inattendu <%1></translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2071"/> <source>Error while pasting clipboard contents at line %1, column %2: %3</source> <extracomment>Parsing clipboard contents</extracomment> <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2077"/> <source>Error while pasting clipboard contents: The root element <ui> is missing.</source> <extracomment>Parsing clipboard contents</extracomment> <translation>Erreur lors du collage du contenu du presse-papier. L'élément racine <ui> est manquant.</translation> @@ -2137,12 +1734,10 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QDesignerSharedSettings</name> <message> - <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="83"/> <source>The template path %1 could not be created.</source> <translation>Le chemin du modèle %1 n'a pas pu être créé.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="267"/> <source>An error has been encountered while parsing device profile XML: %1</source> <translation>Une erreur a été rencontrée lors de l'analyse grammaticale du XML du profil de l'appareil : %1</translation> </message> @@ -2150,33 +1745,27 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QDesignerToolWindow</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="190"/> <source>Property Editor</source> <translation>Éditeur de propriétés</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="244"/> <source>Action Editor</source> <translation>Éditeur d'actions</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="286"/> <source>Object Inspector</source> <translation>Inspecteur d'objet</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="321"/> <source>Resource Browser</source> <translatorcomment>plural</translatorcomment> <translation>Explorateur de ressources</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="355"/> <source>Signal/Slot Editor</source> <translation>Éditeur de signaux et slots</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="396"/> <source>Widget Box</source> <translation>Boîte de widget</translation> </message> @@ -2184,62 +1773,50 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QDesignerWorkbench</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="199"/> <source>&File</source> <translation>&Fichier</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="201"/> <source>Edit</source> <translation>Édition</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="205"/> <source>F&orm</source> <translation>F&ormulaire</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="206"/> <source>Preview in</source> <translation>Prévisualisation avec</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="210"/> <source>&View</source> <translation>Afficha&ge</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="212"/> <source>&Settings</source> <translation>&Configuration</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="214"/> <source>&Window</source> <translation>Fe&nêtre</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="216"/> <source>&Help</source> <translation>&Aide</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="239"/> <source>Toolbars</source> <translation>Barre d'outils</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="416"/> <source>Widget Box</source> <translation>Boîte de widget</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="704"/> <source>Save Forms?</source> <translation>Enregistrer les formulaires ?</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="705"/> <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source> <translation> <numerusform>Il y a %n formulaire avec des changements non-enregistrés. Voulez-vous vérifier les changements avant de quitter?</numerusform> @@ -2247,37 +1824,30 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans </translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="708"/> <source>If you do not review your documents, all your changes will be lost.</source> <translation>Si vous ne vérifiez pas vos documents, tous les changements seront perdus.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="709"/> <source>Discard Changes</source> <translation>Abandonner les changements</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="711"/> <source>Review Changes</source> <translation>Vérifier les changements</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="806"/> <source>Backup Information</source> <translation>Informations de sauvegarde</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="807"/> <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source> <translation>La dernière session de Designer n'a pas été fermée correctement. Des fichiers de sauvegarde existent. Voulez-vous les charger ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="918"/> <source>The file <b>%1</b> could not be opened.</source> <translation>Le fichier <b>%1</b> n'a pas pu être ouvert.</translation> </message> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="964"/> <source>The file <b>%1</b> is not a valid Designer UI file.</source> <translation>Le fichier <b>%1</b> n'est pas un fichier valide d'UI de Designer.</translation> </message> @@ -2285,92 +1855,82 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QFormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="163"/> <source>An empty class name was passed on to %1 (object name: '%2').</source> <extracomment>Empty class name passed to widget factory method</extracomment> <translation>Un nom de classe vide a été passé à %1 (nom d'objet '%2').</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="219"/> <source>QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.</source> <translation>QFormBuilder n'a pas pu créer le widget personnalisé de classe '%1'; passage à la classe de base '%2'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="225"/> <source>QFormBuilder was unable to create a widget of the class '%1'.</source> <translation>QFormBuilder n'a pas pu créer un widget de classe '%1'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="286"/> <source>The layout type `%1' is not supported.</source> <translation>Le type de layout '%1' n'est pas supporté.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="106"/> <source>The set-type property %1 could not be read.</source> <translation>Le type du setteur de propriété %1 n'a pas pu être lu.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="129"/> <source>The enumeration-type property %1 could not be read.</source> <translation>Le type d'énumeration de propriété %1 n'a pas pu être lu.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="319"/> <source>Reading properties of the type %1 is not supported yet.</source> <translation>La lecture des propriétés de type %1 n'est pas supporté.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="585"/> <source>The property %1 could not be written. The type %2 is not supported yet.</source> <translation>La propriété %1 ne peut pas être écrite. Le type %2 n'est pas encore supporté.</translation> </message> + <message> + <source>The enumeration-value '%1' is invalid. The default value '%2' will be used instead.</source> + <translation>la valeur d'énumération '%1' est invalide. La valeur par défaut '%2' sera utilisée à la place.</translation> + </message> + <message> + <source>The flag-value '%1' is invalid. Zero will be used instead.</source> + <translation>Le drapeau '%1' est invalide. Zero sera utilisé à la place.</translation> + </message> </context> <context> <name>QStackedWidgetEventFilter</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="194"/> <source>Previous Page</source> <translation>Page précédente</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="195"/> <source>Next Page</source> <translation>Page suivante</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="196"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="197"/> <source>Before Current Page</source> <translation>Avant la page courante</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="198"/> <source>After Current Page</source> <translation>Après la page courante</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="199"/> <source>Change Page Order...</source> <translation>Modifier l'ordre des pages...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="271"/> <source>Change Page Order</source> <translation>Modifier l'ordre des pages</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="320"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="330"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="334"/> <source>Insert Page</source> <translation>Insérer page</translation> </message> @@ -2378,12 +1938,10 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QStackedWidgetPreviewEventFilter</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="181"/> <source>Go to previous page of %1 '%2' (%3/%4).</source> <translation>Aller à la page précédente de %1 '%2' (%3/%4).</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="185"/> <source>Go to next page of %1 '%2' (%3/%4).</source> <translation>Aller à la page suivante de %1 '%2' (%3/%4).</translation> </message> @@ -2391,28 +1949,22 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QTabWidgetEventFilter</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="89"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="90"/> <source>Before Current Page</source> <translation>Avant la page courante</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="91"/> <source>After Current Page</source> <translation>Après la page courante</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="374"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="384"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="388"/> <source>Insert Page</source> <translation>Insérer page</translation> </message> @@ -2420,37 +1972,30 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QToolBoxHelper</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="64"/> <source>Delete Page</source> <translation>Supprimer page</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="65"/> <source>Before Current Page</source> <translation>Avant la page courante</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="66"/> <source>After Current Page</source> <translation>Après la page courante</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="67"/> <source>Change Page Order...</source> <translation>Modifier l'ordre des pages...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="183"/> <source>Change Page Order</source> <translation>Modifier l'ordre de pages</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="227"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="239"/> <source>Insert Page</source> <translation>Insérer page</translation> </message> @@ -2458,15 +2003,10 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtBoolEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="226"/> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="236"/> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="261"/> <source>True</source> <translation>Vrai</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="236"/> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="261"/> <source>False</source> <translation>Faux</translation> </message> @@ -2474,12 +2014,10 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtBoolPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="1469"/> <source>True</source> <translation>Vrai</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="1470"/> <source>False</source> <translation>Faux</translation> </message> @@ -2487,7 +2025,6 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtCharEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="1581"/> <source>Clear Char</source> <translation>Effacer caractère</translation> </message> @@ -2495,7 +2032,6 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtColorEditWidget</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2186"/> <source>...</source> <translation>...</translation> </message> @@ -2503,22 +2039,18 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtColorPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6213"/> <source>Red</source> <translation>Rouge</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6221"/> <source>Green</source> <translation>Vert</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6229"/> <source>Blue</source> <translation>Bleu</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6237"/> <source>Alpha</source> <translation>Alpha</translation> </message> @@ -2526,97 +2058,78 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtCursorDatabase</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="55"/> <source>Arrow</source> <translation>Flèche</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="57"/> <source>Up Arrow</source> <translation>Flèche vers le haut</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="59"/> <source>Cross</source> <translation>Croix</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="61"/> <source>Wait</source> <translation>Attendre</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="63"/> <source>IBeam</source> <translation>IBeam</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="65"/> <source>Size Vertical</source> <translation>Redimensionner verticalement</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="67"/> <source>Size Horizontal</source> <translation>Redimensionner horizontalement</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="69"/> <source>Size Backslash</source> <translation>Redimensionner diagonale droite</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="71"/> <source>Size Slash</source> <translation>Redimensionner diagonale gauche</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="73"/> <source>Size All</source> <translation>Redimensionner</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="75"/> <source>Blank</source> <translation>Vide</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="77"/> <source>Split Vertical</source> <translation>Scinder verticalement</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="79"/> <source>Split Horizontal</source> <translation>Scinder horizontalement</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="81"/> <source>Pointing Hand</source> <translation>Pointeur index</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="83"/> <source>Forbidden</source> <translation>Interdit</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="85"/> <source>Open Hand</source> <translation>Main ouverte</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="87"/> <source>Closed Hand</source> <translation>Main fermée</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="89"/> <source>What's This</source> <translation>Qu'est-ce que c'est ?</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="91"/> <source>Busy</source> <translation>Occupé</translation> </message> @@ -2624,12 +2137,10 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtFontEditWidget</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2384"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2404"/> <source>Select Font</source> <translation>Selectionner police</translation> </message> @@ -2637,37 +2148,30 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtFontPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5886"/> <source>Family</source> <translation>Famille</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5899"/> <source>Point Size</source> <translation>Taille en points</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5907"/> <source>Bold</source> <translation>Gras</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5914"/> <source>Italic</source> <translation>Italique</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5921"/> <source>Underline</source> <translation>Souligné</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5928"/> <source>Strikeout</source> <translation>Barré</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5935"/> <source>Kerning</source> <translation>Crénage</translation> </message> @@ -2675,7 +2179,6 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientDialog</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui" line="53"/> <source>Edit Gradient</source> <translation>Modifier le gradient</translation> </message> @@ -2683,316 +2186,242 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientEditor</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="53"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="101"/> <source>Gradient Editor</source> <translation>Éditeur de gradient</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="104"/> <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop.</source> <translation>Cette zone montre une prévisualisation du gradient édité. Elle permet aussi d'éditer les paramètres spécifiques au type de gradient tel que les points de départ et d'arrivée, le rayon, etc. par glisser-déposer.</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="120"/> <source>1</source> <translation>1</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="155"/> <source>2</source> <translation>2</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="190"/> <source>3</source> <translation>3</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="225"/> <source>4</source> <translation>4</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="260"/> <source>5</source> <translation>5</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="295"/> <source>Gradient Stops Editor</source> <translation>Éditeur de point d'arrêt du gradient</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="298"/> <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source> <translation>Cette zone vous permet d'éditer les points d'arrêt du gardient. Double-cliquez sur un point d'arrêt existant pour le dupliquer. Double-cliquez à l'exterieur d'un point d'arrêt pour en créer un nouveau. Glissez-déposez un point pour le repositionner. Utilisez le bouton droit de la souris pour afficher le menu contextuel avec des actions supplémentaires.</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="311"/> <source>Zoom</source> <translation>Zoom</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="330"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="333"/> <source>Reset Zoom</source> <translation>Réinitialiser le zoom</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="346"/> <source>Position</source> <translation>Position</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="365"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="414"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="436"/> <source>Hue</source> <translation>Teinte</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="368"/> <source>H</source> <translation>T</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="455"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="504"/> <source>Saturation</source> <translation>Saturation</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="458"/> <source>S</source> <translation>S</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="526"/> <source>Sat</source> <translation>Sat</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="545"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="594"/> <source>Value</source> <translation>Valeur</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="548"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="616"/> <source>Val</source> <translation>Val</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="635"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="684"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="706"/> <source>Alpha</source> <translation>Alpha</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="638"/> <source>A</source> <translation>A</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="719"/> <source>Type</source> <translation>Type</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="732"/> <source>Spread</source> <translation>Étendue</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="751"/> <source>Color</source> <translation>Couleur</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="764"/> <source>Current stop's color</source> <translation>Couleur du point d'arrêt courant</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="786"/> <source>Show HSV specification</source> <translation>Montrer les spécifications TSV/HSV</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="789"/> <source>HSV</source> <translation>TSV/HSV</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="811"/> <source>Show RGB specification</source> <translation>Affichier les spécifications RGB</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="814"/> <source>RGB</source> <translation>RGB</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="842"/> <source>Current stop's position</source> <translation>Position du point d'arrêt courant</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1030"/> <source>%</source> <translation>%</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1141"/> <source>Zoom In</source> <translation>Zoomer</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1148"/> <source>Zoom Out</source> <translation>Dézoomer</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1183"/> <source>Toggle details extension</source> <translation>Inverser les détails d'exention</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1186"/> <source>></source> <translation>></translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1205"/> <source>Linear Type</source> <translation>Type linéaire</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1208"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1230"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1252"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1274"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1296"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1318"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1227"/> <source>Radial Type</source> <translation>Type radial</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1249"/> <source>Conical Type</source> <translation>Type conique</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1271"/> <source>Pad Spread</source> <translation>Étendue par remplissage</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1293"/> <source>Repeat Spread</source> <translation>Étendue par répétition</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1315"/> <source>Reflect Spread</source> <translation>Étendue par réflexion</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="431"/> <source>Start X</source> <translation>X de départ</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="435"/> <source>Start Y</source> <translation>Y de départ</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="439"/> <source>Final X</source> <translation>X de fin</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="443"/> <source>Final Y</source> <translation>Y de fin</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="450"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="474"/> <source>Central X</source> <translation>X central</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="454"/> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="478"/> <source>Central Y</source> <translation>Y central</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="458"/> <source>Focal X</source> <translation>X focal</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="462"/> <source>Focal Y</source> <translation>Y focal</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="466"/> <source>Radius</source> <translation>Rayon</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="482"/> <source>Angle</source> <translation>Angle</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="770"/> <source>Linear</source> <translation>Linéaire</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="771"/> <source>Radial</source> <translation>Radial</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="772"/> <source>Conical</source> <translation>Conique</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="792"/> <source>Pad</source> <translation>Remplissage</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="793"/> <source>Repeat</source> <translation>Répéter</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="794"/> <source>Reflect</source> <translation>Réflexion</translation> </message> @@ -3000,37 +2429,30 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientStopsWidget</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="947"/> <source>New Stop</source> <translation>Nouveau point d'arrêt</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="948"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="949"/> <source>Flip All</source> <translation>Tout renverser</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="950"/> <source>Select All</source> <translation>Tout sélectionner</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="951"/> <source>Zoom In</source> <translation>Zoomer</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="952"/> <source>Zoom Out</source> <translation>Dézoomer</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="953"/> <source>Reset Zoom</source> <translation>Réinitialiser le zoom</translation> </message> @@ -3038,46 +2460,34 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientView</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="13"/> <source>Gradient View</source> <translation>Vue du gradient</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="39"/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="208"/> <source>New...</source> <translation>Nouveau...</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="58"/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="209"/> <source>Edit...</source> <translation>Éditer...</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="77"/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="210"/> <source>Rename</source> <translation>Renommer</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="96"/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="211"/> <source>Remove</source> <translation>Retirer</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="107"/> <source>Grad</source> <translation>Gradient</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="133"/> <source>Remove Gradient</source> <translation>Retirer gradient</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="134"/> <source>Are you sure you want to remove the selected gradient?</source> <translation>Êtes-vous sûr de vouloir supprimer le gradient sélectionné ?</translation> </message> @@ -3085,7 +2495,6 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientViewDialog</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui" line="53"/> <source>Select Gradient</source> <translation>Sélectionner gradient</translation> </message> @@ -3093,7 +2502,6 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtKeySequenceEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="312"/> <source>Clear Shortcut</source> <translation>Effacer les racourcis</translation> </message> @@ -3101,17 +2509,14 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtLocalePropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2394"/> <source>%1, %2</source> <translation>%1, %2</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2447"/> <source>Language</source> <translation>Langue</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2455"/> <source>Country</source> <translation>Pays</translation> </message> @@ -3119,17 +2524,14 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtPointFPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2866"/> <source>(%1, %2)</source> <translation>(%1, %2)</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2937"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2945"/> <source>Y</source> <translation>Y</translation> </message> @@ -3137,17 +2539,14 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtPointPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2625"/> <source>(%1, %2)</source> <translation>(%1, %2)</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2662"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2669"/> <source>Y</source> <translation>Y</translation> </message> @@ -3155,12 +2554,10 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtPropertyBrowserUtils</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="176"/> <source>[%1, %2, %3] (%4)</source> <translation>[%1, %2, %3] (%4)</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="206"/> <source>[%1, %2]</source> <translation>[%1, %2]</translation> </message> @@ -3168,27 +2565,22 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtRectFPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4375"/> <source>[(%1, %2), %3 x %4]</source> <translation>[(%1, %2), %3 x %4]</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4531"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4539"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4547"/> <source>Width</source> <translation>Largeur</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4556"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -3196,27 +2588,22 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtRectPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3944"/> <source>[(%1, %2), %3 x %4]</source> <translation>[(%1, %2), %3 x %4]</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4064"/> <source>X</source> <translation>X</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4071"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4078"/> <source>Width</source> <translation>Largeur</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4086"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -3224,175 +2611,134 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtResourceEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="13"/> <source>Dialog</source> <translation>Dialogue</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="39"/> <source>New File</source> <translation>Nouveau fichier</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="42"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="92"/> <source>N</source> <translation>N</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="49"/> <source>Remove File</source> <translation>Supprimer fichier</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="52"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="109"/> <source>R</source> <translation>S</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="75"/> <source>I</source> <translation></translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="89"/> <source>New Resource</source> <translation>Nouvelle ressource</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="99"/> <source>A</source> <translation>A</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="106"/> <source>Remove Resource or File</source> <translation>Supprimer ressource ou fichier</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="76"/> <source>%1 already exists. Do you want to replace it?</source> <translation>%1 existe déjà. Voulez-vous le remplacer ?</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="81"/> <source>The file does not appear to be a resource file; element '%1' was found where '%2' was expected.</source> <translation>Le fichier n'est pas un fichier ressource; l'élément '%1' a été trouvé à la place de %2.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="983"/> <source>%1 [read-only]</source> <translation>%1 [lecture seule]</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="985"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1183"/> <source>%1 [missing]</source> <translation>%1 [manquant]</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1111"/> <source><no prefix></source> <translation><pas de préfixe></translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1431"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1997"/> <source>New Resource File</source> <translation>Nouveau fichier de ressource</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1433"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1458"/> <source>Resource files (*.qrc)</source> <translation>Fichier de ressource (*.qrc)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1456"/> <source>Import Resource File</source> <translation>Importer fichier de ressource</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1568"/> <source>newPrefix</source> <translation>newPrefix</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1584"/> <source><p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p></source> <translation><p><b>Avertissement :</b> le fichier</p><p>%1</p><p>est en dehors du répertoire parent du fichier de ressource courant.</p></translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1592"/> <source><p>To resolve the issue, press:</p><table><tr><th align="left">Copy</th><td>to copy the file to the resource file's parent directory.</td></tr><tr><th align="left">Copy As...</th><td>to copy the file into a subdirectory of the resource file's parent directory.</td></tr><tr><th align="left">Keep</th><td>to use its current location.</td></tr></table></source> <translation><p>Pour résoudre le problème, appuyez sur :</p><table><tr><th align="left">Copier</th><td>Pour copier le fichier dans le répertoire parent du fichier de ressource.</td></tr><tr><th align="left">Copier sous...</th><td>Pour copier le fichier ressource dans un sous-répertoire du répertoire parent du fichier de ressource.</td></tr><tr><th align="left">Conserver</th><td>pour conserver l'emplacement courant.</td></tr></table></translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1617"/> <source>Add Files</source> <translation>Ajouter fichiers</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1638"/> <source>Incorrect Path</source> <translation>Chemin incorrect</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1641"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1660"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1872"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1879"/> <source>Copy</source> <translation>Copier</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1643"/> <source>Copy As...</source> <translation>Copier sous...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1645"/> <source>Keep</source> <translation>Conserver</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1647"/> <source>Skip</source> <translation>Passer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1734"/> <source>Clone Prefix</source> <translation>Cloner le préfixe</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1735"/> <source>Enter the suffix which you want to add to the names of the cloned files. This could for example be a language extension like "_de".</source> <translation>Entrez le suffixe que vous voulez ajouter aux noms des fichiers clonés. Ceci peut être une extension de langue par exemple, comme "_fr'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1848"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1852"/> <source>Copy As</source> <translation>Copier sous</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1853"/> <source><p>The selected file:</p><p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p><p>Please select another path within this directory.<p></source> <translation><p>Le fichier sélectionné</p><p>%1</p><p>est en dehors du répertoire du fichier de ressource courant :</p><p>%2</p><p>Veuillez sélectionner un chemin dans le répertoire courant.</p></translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1873"/> <source>Could not overwrite %1.</source> <translation>Impossible d'écraser %1.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1880"/> <source>Could not copy %1 to @@ -3403,108 +2749,84 @@ vers %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1915"/> <source>A parse error occurred at line %1, column %2 of %3: %4</source> <translation>Une erreur d'analyse grammaticale est apparue à la ligne %1, colonne %2 de %3 : %4</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1927"/> <source>Save Resource File</source> <translation>Enregistrer le fichier de ressource</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1928"/> <source>Could not write %1: %2</source> <translation>Impossible d'écrire %1 : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1961"/> <source>Edit Resources</source> <translation>Éditer les ressources</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1996"/> <source>New...</source> <translation>Nouveau...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1998"/> <source>Open...</source> <translation>Ouvrir...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1999"/> <source>Open Resource File</source> <translation>Ouvrir fichier de ressource</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2000"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2011"/> <source>Remove</source> <translation>Retirer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2001"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2012"/> <source>Move Up</source> <translation>Vers le Haut</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2002"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2013"/> <source>Move Down</source> <translation>Vers le Bas</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2004"/> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2005"/> <source>Add Prefix</source> <translation>Ajouter préfixe</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2006"/> <source>Add Files...</source> <translation>Ajouter fichiers...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2007"/> <source>Change Prefix</source> <translation>Modifier le préfixe</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2008"/> <source>Change Language</source> <translation>Modifier la langue</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2009"/> <source>Change Alias</source> <translation>Modifier l'alias</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2010"/> <source>Clone Prefix...</source> <translation>Cloner le préfixe...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2047"/> <source>Prefix / Path</source> <translation>Préfixe / chemin</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2048"/> <source>Language / Alias</source> <translation>Langue / Alias</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2165"/> <source><html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html></source> <translation><html><p><b>Avertissement:</b> Des problèmes sont apparus lors du rafraichissement des données des ressources :</p><pre>%1</pre></html></translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2167"/> <source>Resource Warning</source> <translation>Avertissement relatif aux ressources</translation> </message> @@ -3512,24 +2834,20 @@ vers <context> <name>QtResourceView</name> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="566"/> <source>Size: %1 x %2 %3</source> <translation>Taille : %1 x %2 %3</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="586"/> <source>Edit Resources...</source> <translation>Éditer ressources...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="592"/> <source>Reload</source> <translation>Recharger</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="599"/> <source>Copy Path</source> <translation>Copier le chemin</translation> </message> @@ -3537,7 +2855,6 @@ vers <context> <name>QtResourceViewDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="849"/> <source>Select Resource</source> <translation>Séléctionner ressource</translation> </message> @@ -3545,17 +2862,14 @@ vers <context> <name>QtSizeFPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3551"/> <source>%1 x %2</source> <translation>%1 x %2</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3681"/> <source>Width</source> <translation>Largeur</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3690"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -3563,33 +2877,26 @@ vers <context> <name>QtSizePolicyPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5399"/> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5400"/> <source><Invalid></source> <translation><Invalide></translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5401"/> <source>[%1, %2, %3, %4]</source> <translation>[%1, %2, %3, %4]</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5446"/> <source>Horizontal Policy</source> <translation>Politique horizontale</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5455"/> <source>Vertical Policy</source> <translation>Politique verticale</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5464"/> <source>Horizontal Stretch</source> <translation>Étirement horizontal</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5472"/> <source>Vertical Stretch</source> <translation>Étirement vertical</translation> </message> @@ -3597,17 +2904,14 @@ vers <context> <name>QtSizePropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3186"/> <source>%1 x %2</source> <translation>%1 x %2</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3282"/> <source>Width</source> <translation>Largeur</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3290"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -3615,107 +2919,86 @@ vers <context> <name>QtToolBarDialog</name> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="13"/> <source>Customize Toolbars</source> <translation>Personnaliser les barres d'outils</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="26"/> <source>1</source> <translation>1</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="34"/> <source>Actions</source> <translation>Actions</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="49"/> <source>Toolbars</source> <translation>Barres d'outils</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="56"/> <source>Add new toolbar</source> <translation>Ajouter une nouvelle barre d'outils</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="59"/> <source>New</source> <translation>Nouveau</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="66"/> <source>Remove selected toolbar</source> <translation>Supprimer la barre d'outils sélectionnée</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="69"/> <source>Remove</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="76"/> <source>Rename toolbar</source> <translation>Renommer la barre d'outils</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="79"/> <source>Rename</source> <translation>Renommer</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="102"/> <source>Move action up</source> <translation>Déplacer l'action vers le haut</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="105"/> <source>Up</source> <translation>Monter</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="118"/> <source>Remove action from toolbar</source> <translation>Retirer l'action de la barre d'outils</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="121"/> <source><-</source> <translation><-</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="134"/> <source>Add action to toolbar</source> <translation>Ajouter l'action à la barre d'outil</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="137"/> <source>-></source> <translation>-></translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="150"/> <source>Move action down</source> <translation>Déplacer l'action vers le bas</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="153"/> <source>Down</source> <translation>Descendre</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="178"/> <source>Current Toolbar Actions</source> <translation>Actions de la barre d'outils courante</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="1240"/> <source>Custom Toolbar</source> <translation>Barre d'outils personnalisée</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="1784"/> <source>< S E P A R A T O R ></source> <translation>< S É P A R A T E U R ></translation> </message> @@ -3723,12 +3006,10 @@ vers <context> <name>QtTreePropertyBrowser</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="442"/> <source>Property</source> <translation>Propriété</translation> </message> <message> - <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="443"/> <source>Value</source> <translation>Valeur</translation> </message> @@ -3736,64 +3017,52 @@ vers <context> <name>SaveFormAsTemplate</name> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="45"/> <source>Save Form As Template</source> <translation>Enregistrer le formulaire comme un modèle</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="59"/> <source>&Name:</source> <translation>&Nom :</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="94"/> <source>&Category:</source> <translation>&Catégorie :</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="72"/> <source>Add path...</source> <translation>Ajouter chemin...</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="95"/> <source>Template Exists</source> <translation>Le modèle existe</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="96"/> <source>A template with the name %1 already exists. Do you want overwrite the template?</source> <translation>Un modèle existe déjà avec le nom %1. Voulez-vous le remplacer ?</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="99"/> <source>Overwrite Template</source> <translation>Remplacer modèle</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="106"/> <source>Open Error</source> <translation>Erreur d'ouverture</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="107"/> <source>There was an error opening template %1 for writing. Reason: %2</source> <translation>Une erreur s'est produite à l'ouverture du modèle %1 en écriture. Raison : %2</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="120"/> <source>Write Error</source> <translation>Erreur d'écriture</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="121"/> <source>There was an error writing the template %1 to disk. Reason: %2</source> <translation>Une erreur s'est produite lors de l'écriture du modèle %1 sur le disque. Raison : %2</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="148"/> <source>Pick a directory to save templates in</source> <translation>Sélectionner le dossier dans lequel le modèle sera enregistré</translation> </message> @@ -3801,7 +3070,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>ScriptErrorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="59"/> <source>An error occurred while running the scripts for "%1": </source> <translation>Une erreur est apparue lors de l'execution des scripts de "%1" : @@ -3811,22 +3079,18 @@ Voulez-vous le remplacer ?</translation> <context> <name>SelectSignalDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="14"/> <source>Go to slot</source> <translation>Aller au slot</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="20"/> <source>Select signal</source> <translation>Sélectionner signal</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="33"/> <source>signal</source> <translation>signal</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="38"/> <source>class</source> <translation>classe</translation> </message> @@ -3834,7 +3098,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>SignalSlotConnection</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="152"/> <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source> <translation>ENVOYER(%1), SIGNAL(%2), RECEVEUR(%3), SLOT(%4)</translation> </message> @@ -3842,37 +3105,26 @@ Voulez-vous le remplacer ?</translation> <context> <name>SignalSlotDialogClass</name> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="13"/> <source>Signals and slots</source> <translation>Signaux et slots</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="19"/> <source>Slots</source> <translation>Slots</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="30"/> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="79"/> <source>Add</source> <translation>Ajouter</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="33"/> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="43"/> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="82"/> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="92"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="40"/> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="89"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="68"/> <source>Signals</source> <translation>Signaux</translation> </message> @@ -3880,12 +3132,10 @@ Voulez-vous le remplacer ?</translation> <context> <name>Spacer</name> <message> - <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="275"/> <source>Horizontal Spacer '%1', %2 x %3</source> <translation>Ressort horizontal '%1', %2 x %3</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="275"/> <source>Vertical Spacer '%1', %2 x %3</source> <translation>Ressort vertical '%1', %2 x %3</translation> </message> @@ -3893,7 +3143,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>TemplateOptionsPage</name> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="156"/> <source>Template Paths</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Chemins des modèles</translation> @@ -3902,32 +3151,42 @@ Voulez-vous le remplacer ?</translation> <context> <name>ToolBarManager</name> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="224"/> <source>Configure Toolbars...</source> <translation>Configurer les barres d'outils...</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="239"/> <source>Window</source> <translation>Fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="240"/> <source>Help</source> <translation>Aide</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="247"/> <source>Style</source> <translation>Style</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="249"/> <source>Dock views</source> <translation>Ancrer les vues</translation> </message> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="255"/> + <source>File</source> + <translation>Fichier</translation> + </message> + <message> + <source>Edit</source> + <translation>Édition</translation> + </message> + <message> + <source>Tools</source> + <translation>Outils</translation> + </message> + <message> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> <source>Toolbars</source> <translation>Barres d'outils</translation> </message> @@ -3935,22 +3194,18 @@ Voulez-vous le remplacer ?</translation> <context> <name>VersionDialog</name> <message> - <location filename="../tools/designer/src/designer/versiondialog.cpp" line="171"/> <source><h3>%1</h3><br/><br/>Version %2</source> <translation><h3>%1</h3><br/><br/>Version %2</translation> </message> <message> - <location filename="../tools/designer/src/designer/versiondialog.cpp" line="172"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> - <location filename="../tools/designer/src/designer/versiondialog.cpp" line="173"/> <source><br/>Qt Designer is a graphical user interface designer for Qt applications.<br/></source> <translation><br/>Qt Designer est une interface de création d'interface graphique pour les applications Qt.<br/></translation> </message> <message> - <location filename="../tools/designer/src/designer/versiondialog.cpp" line="175"/> <source>%1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> <translation>%1<br/>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</translation> </message> @@ -3958,7 +3213,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>WidgetDataBase</name> <message> - <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="814"/> <source>The file contains a custom widget '%1' whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source> <translation>Le fichier contient un widget personnalisé '%1' dont la classe de base (%2) est différente de l'entrée dans la base de données de widget (%3). La base de données de widget n'a pas été modifiée.</translation> </message> @@ -3966,87 +3220,70 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ActionEditor</name> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="123"/> <source>New...</source> <translation>Nouveau...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="124"/> <source>Edit...</source> <translation>Éditer...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="125"/> <source>Go to slot...</source> <translation>Aller au slot...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="126"/> <source>Copy</source> <translation>Copier</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="127"/> <source>Cut</source> <translation>Couper</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="128"/> <source>Paste</source> <translation>Coller</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="129"/> <source>Select all</source> <translation>Tout sélectionner</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="130"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="139"/> <source>Actions</source> <translation>Actions</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="188"/> <source>Configure Action Editor</source> <translation>Configurer l'éditeur d'action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="191"/> <source>Icon View</source> <translation>Vue en icônes</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="197"/> <source>Detailed View</source> <translation>Vue détaillée</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="443"/> <source>New action</source> <translation>Nouvelle action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="541"/> <source>Edit action</source> <translation>Editer action</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="610"/> <source>Remove action '%1'</source> <translation>Supprimer action '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="610"/> <source>Remove actions</source> <translation>Supprimer les actions</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="796"/> <source>Used In</source> <translation>Utilisé dans</translation> </message> @@ -4054,32 +3291,26 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ActionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="95"/> <source>Name</source> <translation>Nom</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="96"/> <source>Used</source> <translation>Utilisé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="97"/> <source>Text</source> <translation>Texte</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="98"/> <source>Shortcut</source> <translation>Raccourci</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="99"/> <source>Checkable</source> <translation>Vérifiable</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="100"/> <source>ToolTip</source> <translation>Info-bulle</translation> </message> @@ -4087,27 +3318,22 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BrushManagerProxy</name> <message> - <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="219"/> <source>The element '%1' is missing the required attribute '%2'.</source> <translation>L'attribut requis '%2' est manquant pour l'élément '%1'.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="230"/> <source>Empty brush name encountered.</source> <translation>Un nom vide de pinceau a été rencontré.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="240"/> <source>An unexpected element '%1' was encountered.</source> <translation>L'élément inattendu '%1' a été rencontré.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="247"/> <source>An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4</source> <translation>Une erreur est apparue lors de la lecture du fichier '%1' de définition des pinceaux à la ligne %2, colonne %3: %4</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="290"/> <source>An error occurred when reading the resource file '%1' at line %2, column %3: %4</source> <translation>Une erreur est survenue lors de la lecture du fichier de ressource '%1' à la ligne %2, colonne %3 : %4</translation> </message> @@ -4115,17 +3341,14 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BuddyEditor</name> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="261"/> <source>Add buddy</source> <translation>Ajouter un copain</translation> </message> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="313"/> <source>Remove buddies</source> <translation>Supprimer les copains</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="337"/> <source>Remove %n buddies</source> <translation> <numerusform>Supprimer %n copain</numerusform> @@ -4133,7 +3356,6 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="388"/> <source>Add %n buddies</source> <translation> <numerusform>Ajouter %n copain</numerusform> @@ -4141,7 +3363,6 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="435"/> <source>Set automatically</source> <translation>Définir automatiquement</translation> </message> @@ -4149,7 +3370,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BuddyEditorPlugin</name> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_plugin.cpp" line="73"/> <source>Edit Buddies</source> <translation>Éditer les copains</translation> </message> @@ -4157,7 +3377,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BuddyEditorTool</name> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_tool.cpp" line="56"/> <source>Edit Buddies</source> <translation>Éditer les copains</translation> </message> @@ -4165,12 +3384,10 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ButtonGroupMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="318"/> <source>Select members</source> <translation>Sélectionner les membres</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="319"/> <source>Break</source> <translation>Casser</translation> </message> @@ -4178,32 +3395,26 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ButtonTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="440"/> <source>Assign to button group</source> <translation>Assigner au groupe de boutons</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="442"/> <source>Button group</source> <translation>Groupe de boutons</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="443"/> <source>New button group</source> <translation>Nouveau groupe de boutons</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="444"/> <source>Change text...</source> <translation>Modifier le texte...</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="445"/> <source>None</source> <translation>Aucun</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="546"/> <source>Button group '%1'</source> <translation>Groupe de boutons '%1'</translation> </message> @@ -4211,57 +3422,46 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::CodeDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="95"/> <source>Save...</source> <translation>Enregistrer...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="99"/> <source>Copy All</source> <translation>Tout copier</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="104"/> <source>&Find in Text...</source> <translation>&Rechercher dans le texte...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="179"/> <source>A temporary form file could not be created in %1.</source> <translation>Un fichier temporaire de formulaire n'a pas pu être créé dans %1.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="185"/> <source>The temporary form file %1 could not be written.</source> <translation>Le fichier temporaire de formulaire %1 n'a pas pu être écrit.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="206"/> <source>%1 - [Code]</source> <translation>%1 - [Code]</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="229"/> <source>Save Code</source> <translation>Enregistrer le code</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="229"/> <source>Header Files (*.%1)</source> <translation>Fichiers headers (*.%1)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="235"/> <source>The file %1 could not be opened: %2</source> <translation>Le fichier %1 ne peut pas être ouvert : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="240"/> <source>The file %1 could not be written: %2</source> <translation>Le fichier %1 ne peut pas être écrit : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="251"/> <source>%1 - Error</source> <translation>%1 - Erreur</translation> </message> @@ -4269,7 +3469,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ColorAction</name> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="246"/> <source>Text Color</source> <translation>Couleur du texte</translation> </message> @@ -4277,12 +3476,10 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ComboBoxTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="68"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="106"/> <source>Change Combobox Contents</source> <translation>Modifier le contenu du Combobox</translation> </message> @@ -4290,7 +3487,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::CommandLinkButtonTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="702"/> <source>Change description...</source> <translation>Modifier la description...</translation> </message> @@ -4298,17 +3494,14 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ConnectionEdit</name> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1589"/> <source>Select All</source> <translation>Tout sélectionner</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1592"/> <source>Deselect All</source> <translation>Désélectionner tout</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1597"/> <source>Delete</source> <translation>Supprimer</translation> </message> @@ -4316,52 +3509,42 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ConnectionModel</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="196"/> <source>Sender</source> <translation>Émetteur</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="197"/> <source>Signal</source> <translation>Signal</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="198"/> <source>Receiver</source> <translation>Receveur</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="199"/> <source>Slot</source> <translation>Slot</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="289"/> <source><sender></source> <translation><émetteur></translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="290"/> <source><signal></source> <translation><signal></translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="291"/> <source><receiver></source> <translation><receveur></translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="292"/> <source><slot></source> <translation><slot></translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="400"/> <source>The connection already exists!<br>%1</source> <translation>La connexion existe déjà !<br>%1</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="402"/> <source>Signal and Slot Editor</source> <translation>Éditeur de signaux et slots</translation> </message> @@ -4369,42 +3552,34 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ContainerWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="79"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="104"/> <source>Insert</source> <translation>Insérer</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="107"/> <source>Insert Page Before Current Page</source> <translation>Insérer la page avant la page courante</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="111"/> <source>Insert Page After Current Page</source> <translation>Insérer la page après la page courante</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="119"/> <source>Add Subwindow</source> <translation>Ajouter sous-fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="157"/> <source>Subwindow</source> <translation>Sous fenêtre</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="159"/> <source>Page</source> <translation>Page</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="160"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> @@ -4412,18 +3587,15 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::DPI_Chooser</name> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="100"/> <source>System (%1 x %2)</source> <extracomment>System resolution</extracomment> <translation>Système (%1 x %2)</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="107"/> <source>User defined</source> <translation>Défini par l'utilisateur</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="125"/> <source> x </source> <extracomment>DPI X/Y separator</extracomment> <translation> x </translation> @@ -4432,49 +3604,38 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::DesignerPropertyManager</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="647"/> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="653"/> <source>AlignLeft</source> <translation>AlignementGauche</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="648"/> <source>AlignHCenter</source> <translation>AlignementCentreH</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="649"/> <source>AlignRight</source> <translation>AlignementDroite</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="650"/> <source>AlignJustify</source> <translation>AlignementJustifié</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="659"/> <source>AlignTop</source> <translation>AlignementSommet</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="660"/> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="664"/> <source>AlignVCenter</source> <translation>AlignementCentreV</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="661"/> <source>AlignBottom</source> <translation>AlignementDessous</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1226"/> <source>%1, %2</source> <translation>%1, %2</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1232"/> <source>Customized (%n roles)</source> <translation> <numerusform>Personnalisé (%n rôle)</numerusform> @@ -4482,76 +3643,59 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1233"/> <source>Inherited</source> <translatorcomment>pour la palette</translatorcomment> <translation>Héritée</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1799"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1808"/> <source>Vertical</source> <translation>Vertical</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1823"/> <source>Normal Off</source> <translation>Arrêt normal</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1824"/> <source>Normal On</source> <translation>Marche normal</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1825"/> <source>Disabled Off</source> <translation>Arrêt désactivé</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1826"/> <source>Disabled On</source> <translation>Marche désactivé</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1827"/> <source>Active Off</source> <translation>Arrêt activé</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1828"/> <source>Active On</source> <translation>Marche activé</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1829"/> <source>Selected Off</source> <translation>Arrêt sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1830"/> <source>Selected On</source> <translation>Marche sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1837"/> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1858"/> <source>translatable</source> <translation>Traduisible</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1843"/> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1864"/> <source>disambiguation</source> <translation>désambiguation</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1849"/> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1870"/> <source>comment</source> <translation>commentaire</translation> </message> @@ -4559,48 +3703,38 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::DeviceProfileDialog</name> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="63"/> <source>Device Profiles (*.%1)</source> <translation>Profils d'appareil (*.%1)</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="94"/> <source>Default</source> <translation>Par défaut</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="161"/> <source>Save Profile</source> <translation>Enregistrer le profil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="171"/> <source>Save Profile - Error</source> <translation>Enregistrer le profile - Erreur</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="171"/> <source>Unable to open the file '%1' for writing: %2</source> <translation>Impossible d'ouvrir le fichier '%1' en écriture : %2</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="179"/> <source>Open profile</source> <translation>Ouvrir profil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="185"/> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="191"/> <source>Open Profile - Error</source> <translation>Ouvrir profil - Erreur</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="185"/> <source>Unable to open the file '%1' for reading: %2</source> <translation>Impossible d'ouvrir le fichier '%1' en lecture : %2</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="191"/> <source>'%1' is not a valid profile: %2</source> <translation>'%1' n'est pas un profil valide : %2</translation> </message> @@ -4608,57 +3742,46 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::Dialog</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="53"/> <source>Dialog</source> <translation>Boîte de dialogue</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="65"/> <source>StringList</source> <translation>Liste de chaîne de caractères</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="93"/> <source>New String</source> <translation>Nouvelle chaîne de caractères</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="96"/> <source>&New</source> <translation>&Nouveau</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="106"/> <source>Delete String</source> <translation>Supprimer la chaîne de caractères</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="109"/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="142"/> <source>&Value:</source> <translation>&Valeur : </translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="180"/> <source>Move String Up</source> <translation>Déplacer la chaîne de caractères vers le haut</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="183"/> <source>Up</source> <translation>Vers le haut</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="190"/> <source>Move String Down</source> <translation>Déplacer la chaîne de caractères vers le bas</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="193"/> <source>Down</source> <translation>Vers le bas</translation> </message> @@ -4666,52 +3789,42 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::EmbeddedOptionsControl</name> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="160"/> <source>None</source> <translation>Aucun</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="164"/> <source>Add a profile</source> <translation>Ajouter un profil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="170"/> <source>Edit the selected profile</source> <translation>Éditer le profile sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="174"/> <source>Delete the selected profile</source> <translation>Supprimer le profil sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="196"/> <source>Add Profile</source> <translation>Ajouter profil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="203"/> <source>New profile</source> <translation>Nouveau profil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="238"/> <source>Edit Profile</source> <translation>Éditer profil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="264"/> <source>Delete Profile</source> <translation>Supprimer profil</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="265"/> <source>Would you like to delete the profile '%1'?</source> <translation>Voulez-vous supprimer le profil '%1' ?</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="320"/> <source>Default</source> <translation>Par défaut</translation> </message> @@ -4719,20 +3832,25 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FilterWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="185"/> <source><Filter></source> - <translation><Filtre></translation> + <translation type="obsolete"><Filtre></translation> + </message> + <message> + <source>Filter</source> + <translation>Filtre</translation> + </message> + <message> + <source>Clear text</source> + <translation>Effacer le texte</translation> </message> </context> <context> <name>qdesigner_internal::FormEditor</name> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="190"/> <source>Resource File Changed</source> <translation>Fichier de ressource modifié</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="191"/> <source>The file "%1" has changed outside Designer. Do you want to reload it?</source> <translation>Le fichier "%1" a été modifié en dehors de Designer. Voulez-vous le recharger ?</translation> </message> @@ -4740,7 +3858,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormLayoutMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="482"/> <source>Add form layout row...</source> <translation>Ajouter une ligne au layout du formulaire...</translation> </message> @@ -4748,33 +3865,30 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="441"/> <source>Edit contents</source> <translation>Éditer le contenu</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="442"/> <source>F2</source> <translation>F2</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1216"/> <source>Insert widget '%1'</source> <translation>Insérer le widget '%1'</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1283"/> <source>Resize</source> <translation>Redimensionner</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1501"/> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1516"/> <source>Key Move</source> <translation>Déplacement au clavier</translation> </message> + <message> + <source>Key Resize</source> + <translation>Redimensionnement au clavier</translation> + </message> <message numerus="yes"> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1727"/> <source>Paste %n action(s)</source> <translation> <numerusform>Coller %n action</numerusform> @@ -4782,7 +3896,6 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1729"/> <source>Paste %n widget(s)</source> <translation> <numerusform>Coller %n widget</numerusform> @@ -4790,53 +3903,42 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1730"/> <source>Paste (%1 widgets, %2 actions)</source> <translation>Coller (%1 widgets, %2 actions)</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1786"/> <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source> <translation>Impossible de coller les widgets. Designer n'a pas trouvé de conteneur sans layout pour coller.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1788"/> <source>Break the layout of the container you want to paste into, select this container and then paste again.</source> <translation>Retirez le layout du conteneur dans lequel vous voulez coller, sélectionnez ce conteneur et collez à nouveau.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1792"/> <source>Paste error</source> <translation>Erreur de collage</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1975"/> <source>Raise widgets</source> <translation>Élever widgets</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1992"/> <source>Lower widgets</source> <translation>Descendre widgets</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2196"/> <source>Select Ancestor</source> <translation>Sélectionner les ancêtres</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2237"/> <source>Lay out</source> <translation>Mettre en page</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2730"/> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2785"/> <source>Drop widget</source> <translation>Supprimer widget</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2772"/> <source>A QMainWindow-based form does not contain a central widget.</source> <translation>Un formulaire basé sur QMainWindow ne contenant pas de widget central.</translation> </message> @@ -4844,12 +3946,10 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindowBase</name> <message> - <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="393"/> <source>Delete '%1'</source> <translation>Supprimer '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="393"/> <source>Delete</source> <translation>Supprimer</translation> </message> @@ -4857,200 +3957,167 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindowManager</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="364"/> <source>Cu&t</source> <translation>Co&uper</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="367"/> <source>Cuts the selected widgets and puts them on the clipboard</source> <translation>Coupe les widgets sélectionnés et les place dans le presse-papiers</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="372"/> <source>&Copy</source> <translation>Cop&ier</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="375"/> <source>Copies the selected widgets to the clipboard</source> <translation>Copie les widgets sélectionnés dans le presse-papiers</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="380"/> <source>&Paste</source> <translation>C&oller</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="383"/> <source>Pastes the clipboard's contents</source> <translation>Colle le contenu du presse-papiers</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="388"/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="390"/> <source>Deletes the selected widgets</source> <translation>Supprime les widgets sélectionnés</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="395"/> <source>Select &All</source> <translation>Tout &sélectionner</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="398"/> <source>Selects all widgets</source> <translation>Sélectionne tous les widgets</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="403"/> <source>Bring to &Front</source> <translation>Amener au premier &plan</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="406"/> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="407"/> <source>Raises the selected widgets</source> <translation>Élève les widgets sélectionnés</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="411"/> <source>Send to &Back</source> <translation>Placer en &arrière plan</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="414"/> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="415"/> <source>Lowers the selected widgets</source> <translation>Descend les widgets sélectionnés</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="419"/> <source>Adjust &Size</source> <translation>Ajuster les &dimensions</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="422"/> <source>Adjusts the size of the selected widget</source> <translation>Ajuster les dimensions du widget sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="428"/> <source>Lay Out &Horizontally</source> <translation>Mettre en page &horizontalement</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="431"/> - <source>Lays out the selected widgets horizontaly</source> + <source>Lays out the selected widgets horizontally</source> <translation>Mettre en page horizontalement les widgets sélectionnés</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="437"/> + <source>Lays out the selected widgets horizontally in a splitter</source> + <translation>Met en page les widgets sélectionnés horizontalement à l'aide d'un séparateur</translation> + </message> + <message> + <source>Lays out the selected widgets horizontaly</source> + <translation type="obsolete">Mettre en page horizontalement les widgets sélectionnés</translation> + </message> + <message> <source>Lay Out &Vertically</source> <translation>Mettre en page &verticalement</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="440"/> <source>Lays out the selected widgets vertically</source> <translation>Mettre en page verticalement les widgets sélectionnés</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="447"/> <source>Lay Out in a &Form Layout</source> <translation>Mettre en page dans un layout de &formulaire</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="450"/> <source>Lays out the selected widgets in a form layout</source> <translation>Mettre en page les widgets sélectionnés dans un layout de formulaire</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="457"/> <source>Lay Out in a &Grid</source> <translation>Mettre en page dans une &grille</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="460"/> <source>Lays out the selected widgets in a grid</source> <translation>Mettre en page les widgets sélectionnés dans une grille</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="467"/> <source>Lay Out Horizontally in S&plitter</source> <translation>Mettre en page horizontalement avec un sé&parateur</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="470"/> <source>Lays out the selected widgets horizontaly in a splitter</source> - <translation>Met en page les widgets sélectionnés horizontalement à l'aide d'un séparateur</translation> + <translation type="obsolete">Met en page les widgets sélectionnés horizontalement à l'aide d'un séparateur</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="477"/> <source>Lay Out Vertically in Sp&litter</source> <translation>Mettre en page verticalement avec un sépa&rateur</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="480"/> <source>Lays out the selected widgets vertically in a splitter</source> <translation>Met en page les widgets sélectionnés verticalement à l'aide d'un séparateur</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="487"/> <source>&Break Layout</source> <translation>&Casser la mise en page</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="490"/> <source>Breaks the selected layout</source> <translation>Retire le layout sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="495"/> <source>Si&mplify Grid Layout</source> <translation>Si&mplifier le layout de grille</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="497"/> <source>Removes empty columns and rows</source> <translation>Supprime les lignes et colonnes vides</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="503"/> <source>&Preview...</source> <translation>&Prévisualisation...</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="505"/> <source>Preview current form</source> <translation>Prévisualise le formulaire courant</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="520"/> <source>Form &Settings...</source> <translation>Paramètres du &formulaire...</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="612"/> <source>Break Layout</source> <translation>Casser la mise en page</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="638"/> <source>Adjust Size</source> <translation>Ajuster les dimensions</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="681"/> <source>Could not create form preview</source> <comment>Title of warning message box</comment> <translation>Impossible de créer la prévisualisation du formulaire</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="1022"/> <source>Form Settings - %1</source> <translation>Paramètres du formulaire - %1</translation> </message> @@ -5058,12 +4125,10 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindowSettings</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="193"/> <source>None</source> <translation>Aucun</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="194"/> <source>Device Profile: %1</source> <translation>Profil de périphérique : %1</translation> </message> @@ -5071,38 +4136,30 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::GridPanel</name> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="13"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="31"/> <source>Grid</source> <translation>Grille</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="43"/> <source>Visible</source> <translation>Visible</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="50"/> <source>Grid &X</source> <translation>Grille &X</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="76"/> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="133"/> <source>Snap</source> <translation>Grille aimantée</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="85"/> <source>Reset</source> <translation>Réinitialisé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="107"/> <source>Grid &Y</source> <translation>Grille &Y</translation> </message> @@ -5110,7 +4167,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::GroupBoxTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/groupbox_taskmenu.cpp" line="82"/> <source>Change title...</source> <translation>Modifier le titre...</translation> </message> @@ -5118,7 +4174,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::HtmlTextEdit</name> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="188"/> <source>Insert HTML entity</source> <translation>Insérer une entité HTML</translation> </message> @@ -5126,92 +4181,74 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::IconSelector</name> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="328"/> <source>The pixmap file '%1' cannot be read.</source> <translation>Le fichier pixmap '%1' ne peut pas être lu.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="334"/> <source>The file '%1' does not appear to be a valid pixmap file: %2</source> <translation>Le fichier '%1' n'est pas un fichier de pixmap valide : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="343"/> <source>The file '%1' could not be read: %2</source> <translation>Le fichier '%1' ne peut pas être lu : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="376"/> <source>Choose a Pixmap</source> <translation>Choisissez un pixmap</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="383"/> <source>Pixmap Read Error</source> <translation>Erreur de lecture de pixmap</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="437"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="443"/> <source>Normal Off</source> <translation>Arrêt normal</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="444"/> <source>Normal On</source> <translation>Marche normal</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="445"/> <source>Disabled Off</source> <translation>Arrêt désactivé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="446"/> <source>Disabled On</source> <translation>Marche désactivé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="447"/> <source>Active Off</source> <translation>Arrêt activé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="448"/> <source>Active On</source> <translation>Marche activé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="449"/> <source>Selected Off</source> <translation>Arrêt sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="450"/> <source>Selected On</source> <translation>Marche sélectionné</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="458"/> <source>Choose Resource...</source> <translation>Choisir ressource...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="459"/> <source>Choose File...</source> <translation>Choisir un fichier...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="460"/> <source>Reset</source> <translation>Réinitialiser</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="461"/> <source>Reset All</source> <translation>Réinitialisé tout</translation> </message> @@ -5219,58 +4256,46 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ItemListEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="68"/> <source>Items List</source> <translation>Liste d'éléments</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="77"/> <source>New Item</source> <translation>Nouvel élément</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="80"/> <source>&New</source> <translation>&Nouveau</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="87"/> <source>Delete Item</source> <translation>Supprimer élément</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="90"/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="110"/> <source>Move Item Up</source> <translation>Déplacer l'élément vers le haut</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="113"/> <source>U</source> <translation>Monter</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="120"/> <source>Move Item Down</source> <translation>Déplacer l'élément vers le bas</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="123"/> <source>D</source> <translation>Descendre</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="143"/> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="426"/> <source>Properties &>></source> <translation>Propriétés &>></translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="424"/> <source>Properties &<<</source> <translation>Propriétés &<<</translation> </message> @@ -5278,12 +4303,10 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::LabelTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="85"/> <source>Change rich text...</source> <translation>Modifier texte riche...</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="86"/> <source>Change plain text...</source> <translation>Modifier texte simple...</translation> </message> @@ -5291,7 +4314,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::LanguageResourceDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="118"/> <source>Choose Resource</source> <translation>Choisir ressource</translation> </message> @@ -5299,7 +4321,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::LineEditTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/lineedit_taskmenu.cpp" line="80"/> <source>Change text...</source> <translation>Modifier texte...</translation> </message> @@ -5307,17 +4328,14 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ListWidgetEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="69"/> <source>New Item</source> <translation>Nouvel élément</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="101"/> <source>Edit List Widget</source> <translation>Éditer le widget de liste</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="120"/> <source>Edit Combobox</source> <translation>Éditer le Combobox</translation> </message> @@ -5325,12 +4343,10 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ListWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="67"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="105"/> <source>Change List Contents</source> <translation>Modifier le contenu de la liste</translation> </message> @@ -5338,22 +4354,18 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="278"/> <source>Next Subwindow</source> <translation>Sous-fenêtre suivante</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="279"/> <source>Previous Subwindow</source> <translation>Sous-fenêtre précédente</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="280"/> <source>Tile</source> <translation>Côte à côte</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="281"/> <source>Cascade</source> <translation>Cascade</translation> </message> @@ -5361,7 +4373,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::MenuTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/menutaskmenu.cpp" line="56"/> <source>Remove</source> <translation>Supprimer</translation> </message> @@ -5369,7 +4380,6 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::MorphMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="613"/> <source>Morph into</source> <translation>Transformer en</translation> </message> @@ -5377,43 +4387,34 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::NewActionDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="46"/> <source>New Action...</source> <translation>Nouvelle action...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="54"/> <source>&Text:</source> <translation>&Texte :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="74"/> <source>Object &name:</source> <translation>&Nom de l'objet :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="87"/> <source>&Icon:</source> <translation>&Icône :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="117"/> <source>Shortcut:</source> <translation>Raccourci :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="131"/> <source>Checkable:</source> <translation>Peut être cochée :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="138"/> <source>ToolTip:</source> <translation>Info-bulle :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="157"/> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="178"/> <source>...</source> <translation>...</translation> </message> @@ -5421,39 +4422,32 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::NewDynamicPropertyDialog</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="13"/> <source>Create Dynamic Property</source> <translation>Créer une propriété dynamique</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="37"/> <source>Property Name</source> <translation>Nom de la propriété</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="49"/> <source>horizontalSpacer</source> <translation>Espaceur horizontal</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="73"/> <source>Property Type</source> <translation>Type de la propriété</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="134"/> <source>Set Property Name</source> <translation>Définir le nom de la propriété</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="145"/> <source>The current object already has a property named '%1'. Please select another, unique one.</source> <translation>L'objet courant possède déjà une propriété nommée '%1'. Veuillez-sélectionner un autre nom.</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="149"/> <source>The '_q_' prefix is reserved for the Qt library. Please select another name.</source> <translation>Le préfixe «_q_» est réservé pour la bibliothèque Qt. @@ -5463,83 +4457,67 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::NewFormWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="82"/> <source>0</source> <translation>0</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="101"/> <source>Choose a template for a preview</source> <translation>Choisir un modèle pour la prévisualisation</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="145"/> <source>Embedded Design</source> <translation>Design pour appareil mobile</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="157"/> <source>Device:</source> <translation>Appareil :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="164"/> <source>Screen Size:</source> <translation>Dimensions de l'écran :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="104"/> <source>Default size</source> <translation>Dimensions par défaut</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="105"/> <source>QVGA portrait (240x320)</source> <translation>QVGA portrait (240x320)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="106"/> <source>QVGA landscape (320x240)</source> <translation>QVGA paysage (320x240)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="107"/> <source>VGA portrait (480x640)</source> <translation>VGA portrait (480x640)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="108"/> <source>VGA landscape (640x480)</source> <translation>VGA paysage (640x480)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="174"/> <source>Widgets</source> <extracomment>New Form Dialog Categories</extracomment> <translation>Widgets</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="175"/> <source>Custom Widgets</source> <translation>Widgets personnalisé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="193"/> <source>None</source> <translation>Aucun</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="250"/> <source>Error loading form</source> <translation>Erreur de chargement du formulaire</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="494"/> <source>Unable to open the form template file '%1': %2</source> <translation>Impossible d'ouvrir le fichier de modèle de formulaire '%1' : %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="561"/> <source>Internal error: No template selected.</source> <translation>Erreur interne : aucun modèle sélectionné.</translation> </message> @@ -5547,37 +4525,30 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::NewPromotedClassPanel</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="92"/> <source>Add</source> <translation>Ajouter</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="94"/> <source>New Promoted Class</source> <translation>Nouvelle classe promue</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="109"/> <source>Base class name:</source> <translation>Nom de la classe de base :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="110"/> <source>Promoted class name:</source> <translation>Nom de la classe promue :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="111"/> <source>Header file:</source> <translation>Fichier d'en-tête :</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="112"/> <source>Global include</source> <translation>En-tête global</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="123"/> <source>Reset</source> <translation>Réinitialiser</translation> </message> @@ -5585,7 +4556,10 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::ObjectInspector</name> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="754"/> + <source>Change Current Page</source> + <translation>Modifier la page courante</translation> + </message> + <message> <source>&Find in Text...</source> <translation>&Rechercher dans le texte...</translation> </message> @@ -5593,40 +4567,33 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="316"/> <source>Change Current Page</source> - <translation>Modifier la page courante</translation> + <translation type="obsolete">Modifier la page courante</translation> </message> </context> <context> <name>qdesigner_internal::OrderDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="53"/> <source>Change Page Order</source> <translation>Modifier l'ordre des pages</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="59"/> <source>Page Order</source> <translation>Ordre des pages</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="116"/> <source>Move page up</source> <translation>Déplacer la page vers le haut</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="123"/> <source>Move page down</source> <translation>Déplacer la page vers le bas</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="109"/> <source>Index %1 (%2)</source> <translation>Indice %1 (%2)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="112"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> @@ -5634,47 +4601,38 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PaletteEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="61"/> <source>Edit Palette</source> <translation>Éditer la palette</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="85"/> <source>Tune Palette</source> <translation>Ajuster la palette</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="122"/> <source>Show Details</source> <translation>Afficher les détails</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="129"/> <source>Compute Details</source> <translation>Calculer les détails</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="139"/> <source>Quick</source> <translation>Rapide</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="157"/> <source>Preview</source> <translation>Prévisualisation</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="169"/> <source>Disabled</source> <translation>Désactivé</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="176"/> <source>Inactive</source> <translation>Inactif</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="183"/> <source>Active</source> <translation>Actif</translation> </message> @@ -5682,7 +4640,6 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PaletteEditorButton</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditorbutton.cpp" line="57"/> <source>Change Palette</source> <translation>Modifier la palette</translation> </message> @@ -5690,22 +4647,18 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PaletteModel</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="374"/> <source>Color Role</source> <translation>Rôle de la couleur</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="376"/> <source>Active</source> <translation>Actif</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="378"/> <source>Inactive</source> <translation>Inactif</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="380"/> <source>Disabled</source> <translation>Désactivé</translation> </message> @@ -5713,28 +4666,22 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PixmapEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="329"/> <source>Choose Resource...</source> <translation>Choisir ressource...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="330"/> <source>Choose File...</source> <translation>Choisir fichier...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="331"/> <source>Copy Path</source> <translation>Chemin de copie</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="332"/> <source>Paste Path</source> <translation>Chemin de collage</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="338"/> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="354"/> <source>...</source> <translation>...</translation> </message> @@ -5742,7 +4689,6 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/plaintexteditor.cpp" line="65"/> <source>Edit text</source> <translation>Éditer le texte</translation> </message> @@ -5750,37 +4696,30 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PluginDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="72"/> <source>Components</source> <translation>Composants</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="85"/> <source>Plugin Information</source> <translation>Information sur les plugins</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="89"/> <source>Refresh</source> <translation>Rafraîchir</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="90"/> <source>Scan for newly installed custom widget plugins.</source> <translation>Recherche des plugins personnalisés récemment installés.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="138"/> <source>Qt Designer couldn't find any plugins</source> <translation>Qt Designer n'a trouvé aucun plugin</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="141"/> <source>Qt Designer found the following plugins</source> <translation>Qt Designer a trouvé les plugins suivants</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="196"/> <source>New custom widget plugins have been found.</source> <translation>De nouveaux plugins de widgets ont été trouvés.</translation> </message> @@ -5788,7 +4727,6 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewActionGroup</name> <message> - <location filename="../tools/designer/src/components/formeditor/previewactiongroup.cpp" line="95"/> <source>%1 Style</source> <translation>Style %1</translation> </message> @@ -5796,50 +4734,38 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewConfigurationWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="139"/> <source>Default</source> <translation>Par défaut</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="161"/> <source>None</source> <translation>Aucun</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="167"/> <source>Browse...</source> <translation>Parcourir...</translation> </message> -</context> -<context> - <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="285"/> <source>Load Custom Device Skin</source> <translation>Charger le revêtement d'appareil personnalisé</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="287"/> <source>All QVFB Skins (*.%1)</source> <translation>Tous les revêtements QVFB (*.%1)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="303"/> <source>%1 - Duplicate Skin</source> <translation>%1 - Revêtement doublon</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="304"/> <source>The skin '%1' already exists.</source> <translation>Le revêtement '%1' existe déjà.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="318"/> <source>%1 - Error</source> - <translation>%1 - -Erreur</translation> + <translation>%1 - Erreur</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="319"/> <source>%1 is not a valid skin directory: %2</source> <translation>%1 n'est pas un répertoire de revêtements valide : @@ -5847,26 +4773,51 @@ Veuillez sélectionner un autre nom.</translation> </message> </context> <context> + <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name> + <message> + <source>Load Custom Device Skin</source> + <translation type="obsolete">Charger le revêtement d'appareil personnalisé</translation> + </message> + <message> + <source>All QVFB Skins (*.%1)</source> + <translation type="obsolete">Tous les revêtements QVFB (*.%1)</translation> + </message> + <message> + <source>%1 - Duplicate Skin</source> + <translation type="obsolete">%1 - Revêtement doublon</translation> + </message> + <message> + <source>The skin '%1' already exists.</source> + <translation type="obsolete">Le revêtement '%1' existe déjà.</translation> + </message> + <message> + <source>%1 - Error</source> + <translation type="obsolete">%1 - -Erreur</translation> + </message> + <message> + <source>%1 is not a valid skin directory: +%2</source> + <translation type="obsolete">%1 n'est pas un répertoire de revêtements valide : +%2</translation> + </message> +</context> +<context> <name>qdesigner_internal::PreviewDeviceSkin</name> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="259"/> <source>&Portrait</source> <translation>&Portrait</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="261"/> <source>Landscape (&CCW)</source> <extracomment>Rotate form preview counter-clockwise</extracomment> <translation>Paysage (&dans le sens horaire)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="263"/> <source>&Landscape (CW)</source> <extracomment>Rotate form preview clockwise</extracomment> <translation>Paysage (&dans le sens anti-horaire)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="264"/> <source>&Close</source> <translation>&Fermer</translation> </message> @@ -5874,7 +4825,6 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewManager</name> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="690"/> <source>%1 - [Preview]</source> <translation>%1 - [prévisualisation]</translation> </message> @@ -5882,7 +4832,6 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewMdiArea</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewframe.cpp" line="72"/> <source>The moose in the noose ate the goose who was loose.</source> <extracomment>Palette editor background</extracomment> @@ -5893,57 +4842,46 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PreviewWidget</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="61"/> <source>Preview Window</source> <translation>Fenêtre de prévisualisation</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="81"/> <source>LineEdit</source> <translation>LineEdit</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="89"/> <source>ComboBox</source> <translation>ComboBox</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="108"/> <source>PushButton</source> <translation>PushButton</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="166"/> <source>ButtonGroup2</source> <translation>ButtonGroup2</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="178"/> <source>CheckBox1</source> <translation>CheckBox1</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="188"/> <source>CheckBox2</source> <translation>CheckBox2</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="198"/> <source>ButtonGroup</source> <translation>ButtonGroup</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="210"/> <source>RadioButton1</source> <translation>RadioButton1</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="220"/> <source>RadioButton2</source> <translation>RadioButton2</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="227"/> <source>RadioButton3</source> <translation>BoutonRadio1</translation> </message> @@ -5951,22 +4889,18 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PromotionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="129"/> <source>Name</source> <translation>Nom</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="130"/> <source>Header file</source> <translation>Fichier d'en-tête</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="131"/> <source>Global include</source> <translation>En-tête global</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="132"/> <source>Usage</source> <translation>Usage</translation> </message> @@ -5974,27 +4908,22 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PromotionTaskMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="85"/> <source>Promoted widgets...</source> <translation>Widgets promus...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="86"/> <source>Promote to ...</source> <translation>Promouvoir en...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="87"/> <source>Change signals/slots...</source> <translation>Modifier signaux/slots...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="88"/> <source>Promote to</source> <translation>Promouvoir en</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="89"/> <source>Demote to %1</source> <translation>Rétrograder en %1</translation> </message> @@ -6002,57 +4931,46 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PropertyEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="183"/> <source>Add Dynamic Property...</source> <translation>Ajouter une propriété dynamique...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="184"/> <source>Remove Dynamic Property</source> <translation>Supprimer la propriété dynamique</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="185"/> <source>Sorting</source> <translation>Tri</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="186"/> <source>Color Groups</source> <translation>Groupes de couleur</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="187"/> <source>Tree View</source> <translation>Vue arborescente</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="188"/> <source>Drop Down Button View</source> - <translation type="unfinished">Liste déroulante</translation> + <translation>Liste déroulante</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="238"/> <source>String...</source> <translation>Chaîne de caractères...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="241"/> <source>Bool...</source> <translation>Booléen...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="245"/> <source>Other...</source> <translation>Autre...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="252"/> <source>Configure Property Editor</source> <translation>Configurer l'éditeur de propriétés</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="785"/> <source>Object: %1 Class: %2</source> <translation>Objet : %1 @@ -6062,7 +4980,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::PropertyLineEdit</name> <message> - <location filename="../tools/designer/src/lib/shared/propertylineedit.cpp" line="88"/> <source>Insert line break</source> <translation>Insérer saut de ligne</translation> </message> @@ -6070,27 +4987,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerPromotionDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="208"/> <source>Promoted Widgets</source> <translation>Widgets promus</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="215"/> <source>Promoted Classes</source> <translation>Classes promues</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="275"/> <source>Promote</source> <translation>Promouvoir</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="427"/> <source>Change signals/slots...</source> <translation>Modifier signaux/slots...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="444"/> <source>%1 - Error</source> <translation>%1 - Erreur</translation> </message> @@ -6098,22 +5010,18 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerResource</name> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2354"/> <source>Loading qrc file</source> <translation>Chargement du fichier qrc</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2355"/> <source>The specified qrc file <p><b>%1</b></p><p>could not be found. Do you want to update the file location?</p></source> <translation>Le fichier qrc spécifié <p><b>%1</b></p><p>n'a pas pu être trouvé. Voulez-vous mettre à jour l'emplacement du fichier?</p></translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2361"/> <source>New location for %1</source> <translation>Nouvel emplacement pour %1</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2362"/> <source>Resource files (*.qrc)</source> <translation>Fichier de ressource (*.qrc)</translation> </message> @@ -6121,112 +5029,90 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerTaskMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="230"/> <source>Change objectName...</source> <translation>Modifier objectName...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="231"/> <source>Change toolTip...</source> <translation>Modifier toolTip...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="232"/> <source>Change whatsThis...</source> <translation>Modifier whatsThis...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="233"/> <source>Change styleSheet...</source> <translation>Modifier la feuille de style...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="236"/> <source>Create Menu Bar</source> <translation>Créer une barre de menus</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="237"/> <source>Add Tool Bar</source> <translation>Ajouter une barre d'outils</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="238"/> <source>Create Status Bar</source> <translation>Créer une barre de status</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="239"/> <source>Remove Status Bar</source> <translation>Supprimer la barre de status</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="240"/> <source>Change script...</source> <translation>Modifier le script...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="241"/> <source>Change signals/slots...</source> <translation>Modifier signaux/slots...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="242"/> <source>Go to slot...</source> <translation>Aller au slot...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="245"/> <source>Size Constraints</source> <translation>Contrainte de taille</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="249"/> <source>Set Minimum Width</source> <translation>Définir la largeur minimum</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="253"/> <source>Set Minimum Height</source> <translation>Définir la hauteur minimum</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="257"/> <source>Set Minimum Size</source> <translation>Définir la taille minimum</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="263"/> <source>Set Maximum Width</source> <translation>Définir la largeur maximum</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="267"/> <source>Set Maximum Height</source> <translation>Définir la hauteur maximum</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="271"/> <source>Set Maximum Size</source> <translation>Définir la taille maximum</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="506"/> <source>Edit ToolTip</source> <translation>Éditer l'info-bulle</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="511"/> <source>Edit WhatsThis</source> <translation>Éditer «Qu'est-ce»</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="655"/> <source>no signals available</source> <translation>Aucun signal disponible</translation> </message> <message numerus="yes"> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="722"/> <source>Set size constraint on %n widget(s)</source> <translation> <numerusform>Définir les contraintes de dimensions sur %n widget</numerusform> @@ -6237,40 +5123,32 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerWidgetBox</name> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="349"/> <source>An error has been encountered at line %1 of %2: %3</source> <translation>Une erreur a été rencontrée à la ligne %1 de %2 : %3</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="488"/> <source>Unexpected element <%1> encountered when parsing for <widget> or <ui></source> <translation>L'élément inattendu <%1> a été rencontré lors de l'analyse des élements <widget> et <ui></translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="507"/> <source>Unexpected end of file encountered when parsing widgets.</source> <translation>Fin de fichier inattendue lors de l'analyse grammaticale des widgets.</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="516"/> <source>A widget element could not be found.</source> <translation>Un élement de widget n'a pas pu être trouvé.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="123"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="136"/> <source>Unexpected element <%1></source> <translation>Élément <%1> inattendu</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="143"/> <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4 %5</source> <translation>Une erreur d'analyse grammaticale est apparue à la ligne %1, colonne %2 du code XML spécifiant le widget %3 : %4 %5</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="152"/> <source>The XML code specified for the widget %1 does not contain any widget elements. %2</source> <translation>Le code XML spécifié pour le widget %1 ne contient aucun élément widget. @@ -6280,73 +5158,58 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QtGradientStopsController</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="173"/> <source>H</source> <translation>T</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="174"/> <source>S</source> <translation>S</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="175"/> <source>V</source> <translation>V</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="181"/> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="185"/> <source>Hue</source> <translation>Teinte</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="182"/> <source>Sat</source> <translation>Sat</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="183"/> <source>Val</source> <translation>Val</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="186"/> <source>Saturation</source> <translation>Saturation</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="187"/> <source>Value</source> <translation>Valeur</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="209"/> <source>R</source> <translation>R</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="210"/> <source>G</source> <translation>V</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="211"/> <source>B</source> <translation>B</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="217"/> <source>Red</source> <translation>Rouge</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="218"/> <source>Green</source> <translation>Vert</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="219"/> <source>Blue</source> <translation>Bleu</translation> </message> @@ -6354,27 +5217,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::RichTextEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="624"/> <source>Edit text</source> <translation>Éditer le texte</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="647"/> <source>Rich Text</source> <translation>Texte riche</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="648"/> <source>Source</source> <translation>Source</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="654"/> <source>&OK</source> <translation>&OK</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="656"/> <source>&Cancel</source> <translation>&Annuler</translation> </message> @@ -6382,72 +5240,58 @@ Classe : %2</translation> <context> <name>qdesigner_internal::RichTextEditorToolBar</name> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="354"/> <source>Bold</source> <translation>Gras</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="355"/> <source>CTRL+B</source> <translation>CTRL+B</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="360"/> <source>Italic</source> <translation>Italique</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="361"/> <source>CTRL+I</source> <translation>CTRL+I</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="366"/> <source>Underline</source> <translation>Souligné</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="367"/> <source>CTRL+U</source> <translation>CTRL+U</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="380"/> <source>Left Align</source> <translation>Aligner à gauche</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="385"/> <source>Center</source> <translation>Centrer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="390"/> <source>Right Align</source> <translation>Aligner à droite</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="395"/> <source>Justify</source> <translation>Justifier</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="404"/> <source>Superscript</source> <translation>Exposant</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="410"/> <source>Subscript</source> <translation>Indice</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="419"/> <source>Insert &Link</source> <translation>Insérer &lien</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="424"/> <source>Insert &Image</source> <translation>Insérer &image</translation> </message> @@ -6455,17 +5299,14 @@ Classe : %2</translation> <context> <name>qdesigner_internal::ScriptDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="66"/> <source>Edit script</source> <translation>Éditer le script</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="71"/> <source><html>Enter a Qt Script snippet to be executed while loading the form.<br>The widget and its children are accessible via the variables <i>widget</i> and <i>childWidgets</i>, respectively.</source> <translation><html>Entrez un snippet de code Qt Script à exécuter lors du chargement du formulaire.<br>Le widget et ses enfants sont accessibles via les variables <i>widget</i> et <i>childWidgets</i>, respectivement.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="122"/> <source>Syntax error</source> <translation>Erreur de syntaxe</translation> </message> @@ -6473,7 +5314,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::ScriptErrorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="86"/> <source>Script errors</source> <translation>Erreurs de script</translation> </message> @@ -6481,23 +5321,18 @@ Classe : %2</translation> <context> <name>qdesigner_internal::SignalSlotDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="401"/> <source>There is already a slot with the signature '%1'.</source> <translation>Un slot existe déjà avec la signature '%1'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="406"/> <source>There is already a signal with the signature '%1'.</source> <translation>Un signal existe déjà avec la signature '%1'.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="413"/> <source>%1 - Duplicate Signature</source> <translation>%1 - Signature double</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="434"/> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="510"/> <source>Signals/Slots of %1</source> <translation>Signaux/slots de %1</translation> </message> @@ -6505,12 +5340,10 @@ Classe : %2</translation> <context> <name>qdesigner_internal::SignalSlotEditorPlugin</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="72"/> <source>Edit Signals/Slots</source> <translation>Éditer signaux/slots</translation> </message> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="74"/> <source>F4</source> <translation>F4</translation> </message> @@ -6518,7 +5351,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::SignalSlotEditorTool</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp" line="58"/> <source>Edit Signals/Slots</source> <translation>Éditer signaux/slots</translation> </message> @@ -6526,7 +5358,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::StatusBarTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/toolbar_taskmenu.cpp" line="81"/> <source>Remove</source> <translation>Supprimer</translation> </message> @@ -6534,7 +5365,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::StringListEditorButton</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditorbutton.cpp" line="56"/> <source>Change String List</source> <translation>Modifier la liste de chaîne de caractères</translation> </message> @@ -6542,38 +5372,30 @@ Classe : %2</translation> <context> <name>qdesigner_internal::StyleSheetEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="90"/> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="370"/> <source>Valid Style Sheet</source> <translation>Feuille de style valide</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="92"/> <source>Add Resource...</source> <translation>Ajouter ressource...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="93"/> <source>Add Gradient...</source> <translation>Ajouter gradient...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="94"/> <source>Add Color...</source> <translation>Ajouter couleur...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="95"/> <source>Add Font...</source> <translation>Ajouter police...</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="97"/> <source>Edit Style Sheet</source> <translation>Éditer feuille de style</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="373"/> <source>Invalid Style Sheet</source> <translation>Feuille de style invalide</translation> </message> @@ -6581,27 +5403,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TabOrderEditor</name> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="363"/> <source>Start from Here</source> <translation>Démarrer à partir d'ici</translation> </message> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="366"/> <source>Restart</source> <translation>Redémarrer</translation> </message> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="368"/> <source>Tab Order List...</source> <translation>Ordre de la liste de tabulation...</translation> </message> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="412"/> <source>Tab Order List</source> <translation>Ordre de la liste de tabulation</translation> </message> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="413"/> <source>Tab Order</source> <translation>Ordre des tabulations</translation> </message> @@ -6609,7 +5426,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TabOrderEditorPlugin</name> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_plugin.cpp" line="73"/> <source>Edit Tab Order</source> <translation>Éditer l'ordre des tabulations</translation> </message> @@ -6617,7 +5433,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TabOrderEditorTool</name> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_tool.cpp" line="57"/> <source>Edit Tab Order</source> <translation>Éditer l'ordre des tabulations</translation> </message> @@ -6625,48 +5440,38 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TableWidgetEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="53"/> <source>Edit Table Widget</source> <translation>Éditer le widget de table</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="63"/> <source>&Items</source> <translation>&Éléments</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="75"/> <source>Table Items</source> <translation>Éléments de la table</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="97"/> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="218"/> <source>Properties &>></source> <translation>Propriétés &>></translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="67"/> <source>New Column</source> <translation>Nouvelle colonne</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="70"/> <source>New Row</source> <translation>Nouvelle ligne</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="78"/> <source>&Columns</source> <translation>&Colonne</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="79"/> <source>&Rows</source> <translation>&Lignes</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="216"/> <source>Properties &<<</source> <translation>Propriétés &<<</translation> </message> @@ -6674,7 +5479,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TableWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp" line="64"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> @@ -6682,23 +5486,18 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TemplateOptionsWidget</name> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="13"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="19"/> <source>Additional Template Paths</source> <translation>Chemins de modèles additionnels</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="28"/> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="35"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="138"/> <source>Pick a directory to save templates in</source> <translation>Choisir un répertoire où enregistrer les modèles</translation> </message> @@ -6706,22 +5505,18 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TextEditTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="58"/> <source>Edit HTML</source> <translation>Éditer le HTML</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="59"/> <source>Change HTML...</source> <translation>Modifier le HTML...</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="68"/> <source>Edit Text</source> <translation>Éditer le texte</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="69"/> <source>Change Plain Text...</source> <translation>Modifier le texte simple...</translation> </message> @@ -6729,22 +5524,18 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TextEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="150"/> <source>Choose Resource...</source> <translation>Choisir ressource...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="151"/> <source>Choose File...</source> <translation>Choisir fichier...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="156"/> <source>...</source> <translation>...</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="274"/> <source>Choose a File</source> <translation>Choisir un fichier</translation> </message> @@ -6752,27 +5543,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::ToolBarEventFilter</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="148"/> <source>Insert Separator before '%1'</source> <translation>Insérer un séparateur avant '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="157"/> <source>Append Separator</source> <translation>Ajouter un séparateur à la fin</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="169"/> <source>Remove action '%1'</source> <translation>Supprimer l'action '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="176"/> <source>Remove Toolbar '%1'</source> <translation>Supprimer la barre d'outils '%1'</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="234"/> <source>Insert Separator</source> <translation>Insérer un séparateur</translation> </message> @@ -6780,125 +5566,98 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TreeWidgetEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="53"/> <source>Edit Tree Widget</source> <translation>Éditer un widget d'arborescence</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="63"/> <source>&Items</source> <translation>&Éléments</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="87"/> <source>Tree Items</source> <translation>Élément de l'arbre</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="91"/> <source>1</source> <translation>1</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="101"/> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="199"/> <source>New Item</source> <translation>Nouvel élément</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="104"/> <source>&New</source> <translation>&Nouveau</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="111"/> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="218"/> <source>New Subitem</source> <translation>Nouveau sous-élément</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="114"/> <source>New &Subitem</source> <translation>Nouveau &sous-élément</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="121"/> <source>Delete Item</source> <translation>Supprimer l'élément</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="124"/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="144"/> <source>Move Item Left (before Parent Item)</source> <translation>Déplacer l'élément à gauche (avant l'élément parent)</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="147"/> <source>L</source> <translation>G</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="154"/> <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source> <translation>Déplacer l'élément sur la droite (comme un premier sous-élément de l'élément à droite)</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="157"/> <source>R</source> <translation>D</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="164"/> <source>Move Item Up</source> <translation>Déplacer l'élément vers le haut</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="167"/> <source>U</source> <translation>H</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="174"/> <source>Move Item Down</source> <translation>Déplacer l'élément vers le bas</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="177"/> <source>D</source> <translation>B</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="197"/> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="395"/> <source>Properties &>></source> <translation>Propriétés &>></translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="68"/> <source>New Column</source> <translation>Nouvelle colonne</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="76"/> <source>&Columns</source> <translation>&Colonnes</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="145"/> <source>Per column properties</source> <translation>Propriétés par colonnes</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="146"/> <source>Common properties</source> <translation>Propritétés de colonnes</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="393"/> <source>Properties &<<</source> <translation>Propriétés &<<</translation> </message> @@ -6906,7 +5665,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TreeWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp" line="63"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> @@ -6914,7 +5672,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetBox</name> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetbox_dnditem.cpp" line="115"/> <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source> <translation>Avertissement : La création du widget a échoué dans la boîte de widget. Ceci peut être causé par un code XML invalide d'un widget personnalisé.</translation> </message> @@ -6922,42 +5679,34 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetBoxTreeWidget</name> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="248"/> <source>Scratchpad</source> <translation>bloc-notes</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="618"/> <source>Custom Widgets</source> <translation>Widgets personnalisés</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="881"/> <source>Expand all</source> <translation>Tout étendre</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="882"/> <source>Collapse all</source> <translation>Tout replier</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="885"/> <source>List View</source> <translation>Vue de liste</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="886"/> <source>Icon View</source> <translation>Vue en icônes</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="901"/> <source>Remove</source> <translation>Supprimer</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="903"/> <source>Edit name</source> <translation>Éditer le nom</translation> </message> @@ -6965,7 +5714,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetDataBase</name> <message> - <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="403"/> <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source> <translation>Un plugin de widgets personnalisés dont un nom de classe (%1) correspond à une classe existante à été trouvé.</translation> </message> @@ -6973,7 +5721,6 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetEditorTool</name> <message> - <location filename="../tools/designer/src/components/formeditor/tool_widgeteditor.cpp" line="67"/> <source>Edit Widgets</source> <translation>Éditer les widgets</translation> </message> @@ -6981,34 +5728,28 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetFactory</name> <message> - <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="263"/> <source>The custom widget factory registered for widgets of class %1 returned 0.</source> <translation>La fabrique (factory) de widget personnalisé, enregistrée pour les widgets de classe %1, a retourné 0.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="307"/> <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source> <translation>Une discordance de nom de classe est apparue lors de la création d'un nouveau widget à l'aide de la fabrique de widget personnalisé enregistrée pour la classe %1. La fabrique a retourné un widget de classe %2.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="406"/> <source>%1 Widget</source> <translation>%1 Widget</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="496"/> <source>The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source> <translation>Le conteneur '%1' de la page courante (%2) n'a pas pu être déterminé lors de la création du layout. Ceci indique une incohérence dans le fichier ui, probablement un layout étant construit sur un widget conteneur.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="549"/> <source>Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. This indicates an inconsistency in the ui-file.</source> <translation>Temptative d'ajout d'un layout sur le widget '%1' (%2) qui a déjà un layout non pris en charge de type %3. Ceci indique une inconsistance dans le fichier ui.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="760"/> <source>Cannot create style '%1'.</source> <translation>Impossible de créer le style '%1'.</translation> </message> @@ -7016,12 +5757,10 @@ Ceci indique une inconsistance dans le fichier ui.</translation> <context> <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="232"/> <source>Next</source> <translation>Suivant</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="233"/> <source>Back</source> <translation>Précédent</translation> </message> @@ -7029,7 +5768,6 @@ Ceci indique une inconsistance dans le fichier ui.</translation> <context> <name>qdesigner_internal::ZoomMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/zoomwidget.cpp" line="84"/> <source>%1 %</source> <extracomment>Zoom factor</extracomment> <translation>%1 %</translation> @@ -7038,7 +5776,6 @@ Ceci indique une inconsistance dans le fichier ui.</translation> <context> <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="420"/> <source>&Zoom</source> <translation>&Zoom</translation> </message> diff --git a/translations/linguist_fr.ts b/translations/linguist_fr.ts index 873adb7..5b98904 100644 --- a/translations/linguist_fr.ts +++ b/translations/linguist_fr.ts @@ -4,7 +4,6 @@ <context> <name></name> <message> - <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="+59"/> <source>(New Entry)</source> <translation type="unfinished"></translation> </message> @@ -12,7 +11,6 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1357"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> @@ -20,89 +18,72 @@ <context> <name>BatchTranslationDialog</name> <message> - <location filename="../tools/linguist/linguist/batchtranslationdialog.cpp" line="+79"/> <source>Batch Translation of '%1' - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location line="+37"/> <source>Searching, please wait...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+0"/> <source>&Cancel</source> <translation type="unfinished"></translation> </message> <message> - <location line="+42"/> <source>Linguist batch translator</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+1"/> <source>Batch translated %n entries</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> - <location filename="../tools/linguist/linguist/batchtranslation.ui"/> <source>Qt Linguist - Batch Translation</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Options</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Set translated entries to finished</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Retranslate entries with existing translation</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Translate also finished entries</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Phrase book preference</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Move up</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Move down</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>The batch translator will search through the selected phrase books in the order given above.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Run</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Cancel</source> <translation type="unfinished"></translation> </message> @@ -110,38 +91,31 @@ <context> <name>DataModel</name> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+214"/> <source><qt>Duplicate messages found in '%1':</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> <source><p>[more duplicates omitted]</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source><p>* Context: %1<br>* Source: %2</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source><br>* Comment: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+70"/> <source>Linguist does not know the plural rules for '%1'. Will assume a single universal form.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+56"/> <source>Cannot create '%2': %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+56"/> <source>Universal Form</source> <translation type="unfinished"></translation> </message> @@ -149,37 +123,30 @@ Will assume a single universal form.</source> <context> <name>ErrorsView</name> <message> - <location filename="../tools/linguist/linguist/errorsview.cpp" line="+76"/> <source>Accelerator possibly superfluous in translation.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Accelerator possibly missing in translation.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Translation does not end with the same punctuation as the source text.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>A phrase book suggestion for '%1' was ignored.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Translation does not refer to the same place markers as in the source text.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Translation does not contain the necessary %n place marker.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Unknown error</source> <translation type="unfinished"></translation> </message> @@ -187,98 +154,79 @@ Will assume a single universal form.</source> <context> <name>FindDialog</name> <message> - <location filename="../tools/linguist/linguist/finddialog.cpp" line="+14"/> <source></source> <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment> <translation></translation> </message> <message> - <location filename="../tools/linguist/linguist/finddialog.ui"/> <source>This window allows you to search for some text in the translation source file.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Type in the text to search for.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Options</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Source texts are searched when checked.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Translations are searched when checked.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Comments and contexts are searched when checked.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Find</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Find what:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Source texts</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Translations</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Match case</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Comments</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ignore &accelerators</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Find Next</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to close this window.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Cancel</source> <translation type="unfinished"></translation> </message> @@ -286,7 +234,6 @@ Will assume a single universal form.</source> <context> <name>LRelease</name> <message numerus="yes"> - <location filename="../tools/linguist/shared/qm.cpp" line="+715"/> <source> Generated %n translation(s) (%1 finished and %2 unfinished) </source> <translation type="unfinished"> @@ -294,7 +241,6 @@ Will assume a single universal form.</source> </translation> </message> <message numerus="yes"> - <location line="+4"/> <source> Ignored %n untranslated source text(s) </source> <translation type="unfinished"> @@ -305,1121 +251,868 @@ Will assume a single universal form.</source> <context> <name>MainWindow</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>MainWindow</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Phrases</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Close Phrase Book</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Edit Phrase Book</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Print Phrase Book</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>V&alidation</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Vie&ws</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Toolbars</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Translation</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Open...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Open a Qt translation source file (TS file) for editing</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+O</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Close this window and exit.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+Q</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+646"/> - <location line="+15"/> <source>&Save</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Save changes made to this Qt translation source file</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Previous unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Move to the previous unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Next unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Move to the next unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Move to previous item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Move to the previous item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Next item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Move to the next item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Mark item as done and move to the next unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Mark this item as done and move to the next unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Copy from source text</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle the validity check of accelerators.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle the validity check of ending punctuation.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle the validity check of place markers.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Open Read-O&nly...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Save All</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+S</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-14"/> - <location line="+11"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Save &As...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Save As...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Save changes made to this Qt translation source file into a new file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+4"/> <source>&Release</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Create a Qt message file suitable for released applications from the current message file.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Print...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+P</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Recently Opened &Files</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Print a list of all the translation units in the current translation source file.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Undo the last editing operation performed on the current translation.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+Z</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Redo an undone editing operation performed on the translation.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+Y</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Cu&t</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Copy the selected translation text to the clipboard and deletes it.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+X</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Copy</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Copy the selected translation text to the clipboard.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+C</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Paste the clipboard text into the translation.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+V</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Select the whole translation text.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+A</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Find...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Search for some text in the translation source file.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+F</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Continue the search where it was left.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>F3</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Prev Unfinished</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Close All</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+W</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+K</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Next Unfinished</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>P&rev</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+Shift+K</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ne&xt</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Done and Next</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Copies the source text into the translation field.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+B</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Accelerators</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Ending Punctuation</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Phrase matches</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Toggle checking that phrase suggestions are used.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Place &Marker Matches</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&New Phrase Book...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Create a new phrase book.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+N</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Open Phrase Book...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Open a phrase book to assist translation.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+H</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Reset Sorting</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Sort the items back in the same order as in the message file.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Display guesses</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Set whether or not to display translation guesses.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Statistics</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Display translation statistics.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Manual</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>F1</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>About Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>About Qt</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Display information about the Qt toolkit by Trolltech.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&What's This?</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>What's This?</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Enter What's This? mode.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Shift+F1</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Search And Translate...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Replace the translation on all entries that matches the search source text.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+21"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>&Batch Translation...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Batch translate all entries using the information in the phrase books.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-34"/> - <location line="+10"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Release As...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the .ts file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2004"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> </message> <message> - <location line="+195"/> <source>Source text</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <location line="+25"/> <source>Index</source> <translation type="unfinished"></translation> </message> <message> - <location line="-2"/> - <location line="+61"/> <source>Context</source> <translation type="unfinished"></translation> </message> <message> - <location line="-60"/> <source>Items</source> <translation type="unfinished"></translation> </message> <message> - <location line="+77"/> <source>This panel lists the source contexts.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+15"/> <source>Strings</source> <translation type="unfinished"></translation> </message> <message> - <location line="+39"/> <source>Phrases and guesses</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> <source>Sources and Forms</source> <translation type="unfinished"></translation> </message> <message> - <location line="+15"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> - <location line="+59"/> <source> MOD </source> <comment>status bar: file(s) modified</comment> <translation type="unfinished"></translation> </message> <message> - <location line="+125"/> <source>Loading...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+32"/> - <location line="+22"/> <source>Loading File - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location line="-21"/> <source>The file '%1' does not seem to be related to the currently open file(s) '%2'. Close the open file(s) first?</source> <translation type="unfinished"></translation> </message> <message> - <location line="+22"/> <source>The file '%1' does not seem to be related to the file '%2' which is being loaded as well. Skip loading the first named file?</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+61"/> <source>%n translation unit(s) loaded.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> - <location line="+93"/> <source>Related files (%1);;</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> <source>Open Translation Files</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> - <location line="+31"/> <source>File saved.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+15"/> - <location line="+1164"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Release</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1163"/> <source>Qt message files for released applications (*.qm) All files (*)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> - <location line="+12"/> <source>File created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+27"/> - <location line="+355"/> <source>Printing...</source> <translation type="unfinished"></translation> </message> <message> - <location line="-347"/> <source>Context: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+32"/> <source>finished</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>unresolved</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>obsolete</source> <translation type="unfinished"></translation> </message> <message> - <location line="+15"/> - <location line="+307"/> <source>Printing... (page %1)</source> <translation type="unfinished"></translation> </message> <message> - <location line="-300"/> - <location line="+307"/> <source>Printing completed</source> <translation type="unfinished"></translation> </message> <message> - <location line="-305"/> - <location line="+307"/> <source>Printing aborted</source> <translation type="unfinished"></translation> </message> <message> - <location line="-232"/> <source>Search wrapped.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> - <location line="+278"/> - <location line="+40"/> - <location line="+24"/> - <location line="+22"/> - <location line="+516"/> - <location line="+1"/> - <location line="+274"/> - <location line="+40"/> - <location line="+10"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1204"/> - <location line="+102"/> <source>Cannot find the string '%1'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="-82"/> <source>Search And Translate in '%1' - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location line="+34"/> - <location line="+23"/> - <location line="+24"/> <source>Translate - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="-46"/> <source>Translated %n entry(s)</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> - <location line="+23"/> <source>No more occurrences of '%1'. Start over?</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> <source>Create New Phrase Book</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Qt phrase books (*.qph) All files (*)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> <source>Phrase book created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> <source>Open Phrase Book</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Qt phrase books (*.qph);;All files (*)</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+7"/> <source>%n phrase(s) loaded.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> - <location line="+93"/> - <location line="+3"/> - <location line="+7"/> <source>Add to phrase book</source> <translation type="unfinished"></translation> </message> <message> - <location line="-9"/> <source>No appropriate phrasebook found.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Adding entry to phrasebook %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> <source>Select phrase book to add to</source> <translation type="unfinished"></translation> </message> <message> - <location line="+29"/> <source>Unable to launch Qt Assistant (%1)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> <source>Version %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>%2</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p></source> <translation type="unfinished"></translation> </message> <message> - <location line="+41"/> <source>Do you want to save the modified files?</source> <translation type="unfinished"></translation> </message> <message> - <location line="+22"/> <source>Do you want to save '%1'?</source> <translation type="unfinished"></translation> </message> <message> - <location line="+43"/> <source>Qt Linguist[*]</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>%1[*] - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location line="+267"/> - <location line="+12"/> <source>No untranslated translation units left.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+176"/> <source>&Window</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>Minimize</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Ctrl+M</source> <translation type="unfinished"></translation> </message> <message> - <location line="+12"/> <source>Display the manual for %1.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Display information about %1.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+70"/> <source>&Save '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Save '%1' &As...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Release '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Release '%1' As...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>&Close '%1'</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> - <location line="+13"/> <source>&Close</source> <translation type="unfinished"></translation> </message> <message> - <location line="-10"/> <source>Save All</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>&Release All</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Close All</source> <translation type="unfinished"></translation> </message> <message> - <location line="+23"/> <source>Translation File &Settings for '%1'...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>&Batch Translation of '%1'...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Search And &Translate in '%1'...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> <source>Search And &Translate...</source> <translation type="unfinished"></translation> </message> <message> - <location line="+51"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Translation</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Validation</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Help</source> <translation type="unfinished"></translation> </message> <message> - <location line="+84"/> <source>Cannot read from phrase book '%1'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+15"/> <source>Close this phrase book.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+4"/> <source>Enables you to add, modify, or delete entries in this phrase book.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> <source>Print the entries in this phrase book.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+16"/> <source>Cannot create phrase book '%1'.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> <source>Do you want to save phrase book '%1'?</source> <translation type="unfinished"></translation> </message> <message> - <location line="+314"/> <source>All</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Open/Refresh Form &Preview</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Form Preview Tool</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>F5</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-527"/> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Translation File &Settings...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>&Add to Phrase Book</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+T</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+J</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Ctrl+Shift+J</source> <translation type="unfinished"></translation> </message> @@ -1427,92 +1120,74 @@ All files (*)</source> <context> <name>MessageEditor</name> <message> - <location filename="../tools/linguist/linguist/messageeditor.cpp" line="+72"/> <source>German</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Japanese</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>French</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Polish</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Chinese</source> <translation type="unfinished"></translation> </message> <message> - <location line="+50"/> <source>This whole panel allows you to view and edit the translation of some source text.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+25"/> <source>Source text</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>This area shows the source text.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Source text (Plural)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>This area shows the plural form of the source text.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Developer comments</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>This area shows a comment that may guide you, and the context in which the text occurs.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+59"/> <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+205"/> <source>%1 translation (%2)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> <source>This is where you can enter or modify the translation of the above source text.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> <source>%1 translation</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>%1 translator comments</source> <translation type="unfinished"></translation> </message> <message> - <location line="+138"/> <source>'%1' Line: %2</source> <translation type="unfinished"></translation> @@ -1521,22 +1196,18 @@ Line: %2</source> <context> <name>MessageModel</name> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+832"/> <source>Completion status for %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+15"/> <source><file header></source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source><context comment></source> <translation type="unfinished"></translation> </message> <message> - <location line="+71"/> <source><unnamed context></source> <translation type="unfinished"></translation> </message> @@ -1544,7 +1215,6 @@ Line: %2</source> <context> <name>MsgEdit</name> <message> - <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-577"/> <source></source> <comment>This is the right panel of the main window.</comment> <translation></translation> @@ -1553,108 +1223,87 @@ Line: %2</source> <context> <name>PhraseBookBox</name> <message> - <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="-45"/> <source></source> <comment>Go to Phrase > Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment> <translation></translation> </message> <message> - <location line="+53"/> <source>%1[*] - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location line="+90"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> <source>Cannot save phrase book '%1'.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/phrasebookbox.ui"/> <source>Edit Phrase Book</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>This window allows you to add, modify, or delete entries in a phrase book.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Translation:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>This is the phrase in the target language corresponding to the source phrase.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>S&ource phrase:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>This is a definition for the source phrase.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>This is the phrase in the source language.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Definition:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to add the phrase to the phrase book.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&New Entry</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to remove the entry from the phrase book.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Remove Entry</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Settin&gs...</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to save the changes made.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Save</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to close this window.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Close</source> <translation type="unfinished"></translation> </message> @@ -1662,17 +1311,14 @@ Line: %2</source> <context> <name>PhraseModel</name> <message> - <location filename="../tools/linguist/linguist/phrasemodel.cpp" line="+117"/> <source>Source phrase</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>Translation</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>Definition</source> <translation type="unfinished"></translation> </message> @@ -1680,22 +1326,18 @@ Line: %2</source> <context> <name>PhraseView</name> <message> - <location filename="../tools/linguist/linguist/phraseview.cpp" line="+121"/> <source>Insert</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> - <location line="+113"/> <source>Guess (%1)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>Guess</source> <translation type="unfinished"></translation> </message> @@ -1703,83 +1345,62 @@ Line: %2</source> <context> <name>QObject</name> <message> - <location filename="../tools/linguist/shared/qm.cpp" line="+12"/> <source>Compiled Qt translations</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1279"/> <source>Translation files (%1);;</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> <source>All files (*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/> - <location line="+18"/> - <location line="+67"/> - <location line="+39"/> - <location line="+17"/> - <location line="+15"/> - <location filename="../tools/linguist/linguist/phrase.cpp" line="+196"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/cpp.cpp" line="+1072"/> <source>C++ source files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/java.cpp" line="+646"/> <source>Java source files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/po.cpp" line="+651"/> <source>GNU Gettext localization files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/qscript.cpp" line="+2399"/> <source>Qt Script source files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/ts.cpp" line="+752"/> <source>Qt translation sources (format 1.1)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> <source>Qt translation sources (format 2.0)</source> <translation type="unfinished"></translation> </message> <message> - <location line="+9"/> <source>Qt translation sources (latest format)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/ui.cpp" line="+213"/> <source>Qt Designer form files</source> <translation type="unfinished"></translation> </message> <message> - <location line="+9"/> <source>Qt Jambi form files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/xliff.cpp" line="+817"/> <source>XLIFF localization files</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/shared/qph.cpp" line="+192"/> <source>Qt Linguist 'Phrase Book'</source> <translation type="unfinished"></translation> </message> @@ -1787,17 +1408,14 @@ Line: %2</source> <context> <name>SourceCodeView</name> <message> - <location filename="../tools/linguist/linguist/sourcecodeview.cpp" line="+70"/> <source><i>Source code not available</i></source> <translation type="unfinished"></translation> </message> <message> - <location line="+33"/> <source><i>File %1 not available</i></source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> <source><i>File %1 not readable</i></source> <translation type="unfinished"></translation> </message> @@ -1805,42 +1423,34 @@ Line: %2</source> <context> <name>Statistics</name> <message> - <location filename="../tools/linguist/linguist/statistics.ui"/> <source>Statistics</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Translation</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>0</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Words:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Characters:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Characters (with spaces):</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Close</source> <translation type="unfinished"></translation> </message> @@ -1848,7 +1458,6 @@ Line: %2</source> <context> <name>TrWindow</name> <message> - <location filename="../tools/linguist/linguist/trwindow.cpp" line="+14"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> @@ -1857,72 +1466,58 @@ Line: %2</source> <context> <name>TranslateDialog</name> <message> - <location filename="../tools/linguist/linguist/translatedialog.ui"/> <source>This window allows you to search for some text in the translation source file.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Type in the text to search for.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Find &source text:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>&Translate to:</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Search options</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Match &case</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Mark new translation as &finished</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Find Next</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Translate</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Translate All</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Click here to close this window.</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Cancel</source> <translation type="unfinished"></translation> </message> @@ -1930,33 +1525,26 @@ Line: %2</source> <context> <name>TranslationSettingsDialog</name> <message> - <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+68"/> <source>Any Country</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> - <location line="+8"/> <source>Settings for '%1' - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../tools/linguist/linguist/translationsettings.ui"/> <source>Source language</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Language</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Country/Region</source> <translation type="unfinished"></translation> </message> <message> - <location/> <source>Target language</source> <translation type="unfinished"></translation> </message> diff --git a/translations/qt_fr.ts b/translations/qt_fr.ts index 77feab6..2a4135b 100644 --- a/translations/qt_fr.ts +++ b/translations/qt_fr.ts @@ -2,59 +2,18 @@ <!DOCTYPE TS> <TS version="2.0" language="fr"> <context> - <name>MAC_APPLICATION_MENU</name> - <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2316"/> - <source>Services</source> - <translation>Services</translation> - </message> - <message> - <location line="+1"/> - <source>Hide %1</source> - <translation>Masquer %1</translation> - </message> - <message> - <location line="+1"/> - <source>Hide Others</source> - <translation>Masquer les autres</translation> - </message> - <message> - <location line="+1"/> - <source>Show All</source> - <translation>Tout afficher</translation> - </message> - <message> - <location line="+1"/> - <source>Preferences...</source> - <translation>Préférences…</translation> - </message> - <message> - <location line="+1"/> - <source>Quit %1</source> - <translation>Quitter %1</translation> - </message> - <message> - <location line="+1"/> - <source>About %1</source> - <translation>À propos de %1</translation> - </message> -</context> -<context> <name>AudioOutput</name> <message> - <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+375"/> <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> - <translation><html>Le périphérique audio <b>%1</b> ne fonctionne pas.<br/>Utilisation de <b>%2</b>.</html></translation> + <translation type="obsolete"><html>Le périphérique audio <b>%1</b> ne fonctionne pas.<br/>Utilisation de <b>%2</b>.</html></translation> </message> <message> - <location line="+13"/> <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> - <translation><html>Utilisation de <b>%1</b><br/>qui vient de devenir disponible et a une plus grande priorité.</html></translation> + <translation type="obsolete"><html>Utilisation de <b>%1</b><br/>qui vient de devenir disponible et a une plus grande priorité.</html></translation> </message> <message> - <location line="+3"/> <source>Revert back to device '%1'</source> - <translation>Utilisation de '%1'</translation> + <translation type="obsolete">Utilisation de '%1'</translation> </message> </context> <context> @@ -107,6 +66,48 @@ </message> </context> <context> + <name>FakeReply</name> + <message> + <source>Fake error !</source> + <translation>Fausse erreur!</translation> + </message> + <message> + <source>Invalid URL</source> + <translation>URL non valide</translation> + </message> +</context> +<context> + <name>MAC_APPLICATION_MENU</name> + <message> + <source>Services</source> + <translation>Services</translation> + </message> + <message> + <source>Hide %1</source> + <translation>Masquer %1</translation> + </message> + <message> + <source>Hide Others</source> + <translation>Masquer les autres</translation> + </message> + <message> + <source>Show All</source> + <translation>Tout afficher</translation> + </message> + <message> + <source>Preferences...</source> + <translation>Préférences…</translation> + </message> + <message> + <source>Quit %1</source> + <translation>Quitter %1</translation> + </message> + <message> + <source>About %1</source> + <translation>À propos de %1</translation> + </message> +</context> +<context> <name>MainWindow</name> <message> <source>Print</source> @@ -200,6 +201,25 @@ so on.</source> </message> </context> <context> + <name>Phonon::AudioOutput</name> + <message> + <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> + <translation><html>Le périphérique audio <b>%1</b> ne fonctionne pas.<br/>Repli sur <b>%2</b>.</html></translation> + </message> + <message> + <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> + <translation><html>Basculement vers le périphérique audio <b>%1</b><br/>qui vient juste d'être disponible et dont le niveau de préférence est plus élevé.</html></translation> + </message> + <message> + <source>Revert back to device '%1'</source> + <translation>Revenir au périphérique '%1'</translation> + </message> + <message> + <source><html>Switching to the audio playback device <b>%1</b><br/>which has higher preference or is specifically configured for this stream.</html></source> + <translation><html>Basculement vers le périphérique audio <b>%1</b><br/>dont le niveau de préférence est plus élevé ou qui est spécifiquement configuré pour ce flux.</html></translation> + </message> +</context> +<context> <name>Phonon::Gstreamer::Backend</name> <message> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. @@ -217,12 +237,11 @@ Le support audio et vidéo est désactivé</translation> <context> <name>Phonon::Gstreamer::MediaObject</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/> <source>Cannot start playback. Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed.</source> - <translation>Impossible de démarrer la lecture. Verifiez votre installation de Gstreamer et assurez-vous d'avoir installé libgstreamer-plugins-base.</translation> + <translation type="obsolete">Impossible de démarrer la lecture. Verifiez votre installation de Gstreamer et assurez-vous d'avoir installé libgstreamer-plugins-base.</translation> </message> <message> <source>Unknown media format: %1</source> @@ -257,6 +276,15 @@ have libgstreamer-plugins-base installed.</source> <translation type="obsolete">Impossible de charger la source</translation> </message> <message> + <source>Missing codec helper script assistant.</source> + <translatorcomment>???</translatorcomment> + <translation>Assistant de script d'aide au codec manquant.</translation> + </message> + <message> + <source>Plugin codec installation failed for codec: %0</source> + <translation>Échec de l'installation du plugin pour le codec : %0</translation> + </message> + <message> <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source> <translation>Un codec requis est manquant. Vous devez installer le codec suivant pour jouer le contenu: %0</translation> </message> @@ -292,9278 +320,10613 @@ d'avoir installé libgstreamer-plugins-base.</translation> </message> </context> <context> - <name>Phonon::VolumeSlider</name> + <name>Phonon::MMF</name> <message> - <source>Volume: %1%</source> - <translation>Volume: %1%</translation> + <source>Audio Output</source> + <translation>Sortie audio</translation> </message> <message> - <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> - <translation>Utilisez le slider pour ajuster le volume. La position la plus à gauche est 0%, la plus à droite est %1%</translation> + <source>The audio output device</source> + <translation>Périphérique audio de sortie</translation> </message> <message> - <source>Muted</source> - <translation>Son coupé</translation> + <source>No error</source> + <translation>Aucune erreur</translation> </message> -</context> -<context> - <name>Q3Accel</name> <message> - <source>%1, %2 not defined</source> - <translation>La séquence %1, %2 n'est pas définie</translation> + <source>Not found</source> + <translation>Introuvable</translation> </message> <message> - <source>Ambiguous %1 not handled</source> - <translation>Séquence ambiguë %1 non traitée</translation> + <source>Out of memory</source> + <translation>Mémoire insuffisante</translation> </message> -</context> -<context> - <name>Q3DataTable</name> <message> - <source>True</source> - <translation>Vrai</translation> + <source>Not supported</source> + <translation>Non supporté</translation> </message> <message> - <source>False</source> - <translation>Faux</translation> + <source>Overflow</source> + <translation>Dépassement</translation> </message> <message> - <source>Insert</source> - <translation>Insérer</translation> + <source>Underflow</source> + <translation>Soupassement</translation> </message> <message> - <source>Update</source> - <translation>Actualiser</translation> + <source>Already exists</source> + <translation>Existe déjà</translation> </message> <message> - <source>Delete</source> - <translation>Supprimer</translation> + <source>Path not found</source> + <translation>Chemin introuvable</translation> </message> -</context> -<context> - <name>Q3FileDialog</name> <message> - <source>Copy or Move a File</source> - <translation>Copie ou déplace un fichier</translation> + <source>In use</source> + <translation>Utilisé</translation> </message> <message> - <source>Read: %1</source> - <translation>Lecture : %1</translation> + <source>Not ready</source> + <translation>Pas prêt</translation> </message> <message> - <source>Write: %1</source> - <translation>Écriture : %1</translation> + <source>Access denied</source> + <translation>Accès refusé</translation> </message> <message> - <source>Cancel</source> - <translation>Annuler</translation> + <source>Could not connect</source> + <translation>Connexion impossible</translation> </message> <message> - <source>All Files (*)</source> - <translation>Tous les fichiers (*)</translation> + <source>Disconnected</source> + <translation>Déconnecté</translation> </message> <message> - <source>Name</source> - <translation>Nom</translation> + <source>Permission denied</source> + <translation>Autorisation refusée</translation> </message> <message> - <source>Size</source> - <translation>Taille</translation> + <source>Insufficient bandwidth</source> + <translation>Bande passante insuffisante</translation> </message> <message> - <source>Type</source> - <translation>Type</translation> + <source>Network unavailable</source> + <translation>Réseau non disponible</translation> </message> <message> - <source>Date</source> - <translation>Date</translation> + <source>Network communication error</source> + <translation>Erreur de communication réseau</translation> </message> <message> - <source>Attributes</source> - <translation>Attributs</translation> + <source>Streaming not supported</source> + <translation>Streaming non supporté</translation> </message> <message> - <source>&OK</source> - <translation>&OK</translation> + <source>Server alert</source> + <translation>Alerte serveur</translation> </message> <message> - <source>Look &in:</source> - <translation>Chercher &dans :</translation> + <source>Invalid protocol</source> + <translation>Protocole non valide</translation> </message> <message> - <source>File &name:</source> - <translation>&Nom de fichier :</translation> + <source>Invalid URL</source> + <translation>URL non valide</translation> </message> <message> - <source>File &type:</source> - <translation>&Type de fichier :</translation> + <source>Multicast error</source> + <translation>Erreur multicast</translation> </message> <message> - <source>Back</source> - <translation>Précédent (historique)</translation> + <source>Proxy server error</source> + <translation>Erreur du serveur proxy</translation> </message> <message> - <source>One directory up</source> - <translation>Aller au dossier parent</translation> + <source>Proxy server not supported</source> + <translation>Serveur proxy non supporté</translation> </message> <message> - <source>Create New Folder</source> - <translation>Créer un nouveau dossier</translation> + <source>Audio output error</source> + <translation>Erreur de sortie audio</translation> </message> <message> - <source>List View</source> - <translation>Affichage liste</translation> + <source>Video output error</source> + <translation>Erreur de sortie vidéo</translation> </message> <message> - <source>Detail View</source> - <translation>Affichage détaillé</translation> + <source>Decoder error</source> + <translation>Erreur du décodeur</translation> </message> <message> - <source>Preview File Info</source> - <translation>Informations du fichier prévisualisé</translation> + <source>Audio or video components could not be played</source> + <translation>Les composants audio ou vidéo n'ont pas pu être lus</translation> </message> <message> - <source>Preview File Contents</source> - <translation>Contenu du fichier prévisualisé</translation> + <source>DRM error</source> + <translation>Erreur GDN</translation> </message> <message> - <source>Read-write</source> - <translation>Lecture-écriture</translation> + <source>Unknown error (%1)</source> + <translation>Erreur inconnue (%1)</translation> </message> +</context> +<context> + <name>Phonon::MMF::AbstractMediaPlayer</name> <message> - <source>Read-only</source> - <translation>Lecture seule</translation> + <source>Not ready to play</source> + <translation>Pas prêt pour lecture</translation> </message> <message> - <source>Write-only</source> - <translation>Écriture seule</translation> + <source>Error opening file</source> + <translation>Erreur lors de l'ouverture du fichier</translation> </message> <message> - <source>Inaccessible</source> - <translation>Inaccessible</translation> + <source>Error opening URL</source> + <translation>Erreur lors de l'ouverture de l'URL</translation> </message> <message> - <source>Symlink to File</source> - <translation>Lien symbolique vers un fichier</translation> + <source>Setting volume failed</source> + <translation>Le réglage du volume a échoué</translation> </message> <message> - <source>Symlink to Directory</source> - <translation>Lien symbolique vers un dossier</translation> + <source>Loading clip failed</source> + <translation>Échec de l'ouverture du clip</translation> </message> <message> - <source>Symlink to Special</source> - <translation>Lien symbolique vers un fichier spécial</translation> + <source>Playback complete</source> + <translation>Lecture terminée</translation> </message> +</context> +<context> + <name>Phonon::MMF::AbstractVideoPlayer</name> <message> - <source>File</source> - <translation>Fichier</translation> + <source>Pause failed</source> + <translation>La mise en pause a échoué</translation> </message> <message> - <source>Dir</source> - <translation>Dossier</translation> + <source>Seek failed</source> + <translation>La recherche a échoué</translation> </message> <message> - <source>Special</source> - <translation>Fichier spécial</translation> + <source>Getting position failed</source> + <translation>L'obtention de la position a échoué</translation> </message> <message> - <source>Open</source> - <translation>Ouvrir</translation> + <source>Opening clip failed</source> + <translation>L'ouverture du clip a échoué</translation> </message> +</context> +<context> + <name>Phonon::MMF::AudioEqualizer</name> <message> - <source>Save As</source> - <translation>Enregistrer sous</translation> + <source>%1 Hz</source> + <translation>%1 Hz</translation> </message> +</context> +<context> + <name>Phonon::MMF::AudioPlayer</name> <message> - <source>&Open</source> - <translation>&Ouvrir</translation> + <source>Getting position failed</source> + <translation>L'obtention de la position a échoué</translation> </message> <message> - <source>&Save</source> - <translation>&Enregistrer</translation> + <source>Opening clip failed</source> + <translation type="obsolete">L'ouverture du clip a échoué</translation> </message> +</context> +<context> + <name>Phonon::MMF::DsaVideoPlayer</name> <message> - <source>&Rename</source> - <translation>&Renommer</translation> + <source>Video display error</source> + <translation>Erreur de l'affichage vidéo</translation> </message> +</context> +<context> + <name>Phonon::MMF::EffectFactory</name> <message> - <source>&Delete</source> - <translation>Suppri&mer</translation> + <source>Enabled</source> + <translation>Activé</translation> </message> +</context> +<context> + <name>Phonon::MMF::EnvironmentalReverb</name> <message> - <source>R&eload</source> - <translation>R&echarger</translation> + <source>Decay HF ratio (%)</source> + <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment> + <translation>Ratio HF du déclin (%)</translation> </message> <message> - <source>Sort by &Name</source> - <translation>Trier par &nom</translation> + <source>Decay time (ms)</source> + <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment> + <translation>Temps de déclin (ms)</translation> </message> <message> - <source>Sort by &Size</source> - <translation>Trier par ta&ille</translation> + <source>Density (%)</source> + <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment> + <translation>Densité (%)</translation> </message> <message> - <source>Sort by &Date</source> - <translation>Trier par &date</translation> + <source>Diffusion (%)</source> + <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment> + <translation>Diffusion (%)</translation> </message> <message> - <source>&Unsorted</source> - <translation>&Non trié</translation> + <source>Reflections delay (ms)</source> + <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> + <translation>Délai réflexions (ms)</translation> </message> <message> - <source>Sort</source> - <translation>Tri</translation> + <source>Reflections level (mB)</source> + <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment> + <translation>Niveau réflexions (mB)</translation> </message> <message> - <source>Show &hidden files</source> - <translation>Afficher les fic&hiers cachés</translation> + <source>Reverb delay (ms)</source> + <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment> + <translation>Délai de réverbération (ms)</translation> </message> <message> - <source>the file</source> - <translation>le fichier</translation> + <source>Reverb level (mB)</source> + <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <translation>Niveau de réverbération (mB)</translation> </message> <message> - <source>the directory</source> - <translation>le dossier</translation> + <source>Room HF level</source> + <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment> + <translation>Niveau HF pièce</translation> </message> <message> - <source>the symlink</source> - <translation>le lien symbolique</translation> + <source>Room level (mB)</source> + <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment> + <translation>Niveau pièce (mB)</translation> </message> +</context> +<context> + <name>Phonon::MMF::MediaObject</name> <message> - <source>Delete %1</source> - <translation>Supprimer %1</translation> + <source>Error opening source: type not supported</source> + <translation>Erreur lors de l'ouverture de la source: type non supporté</translation> </message> <message> - <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source> - <translation><qt>Voulez-vous vraiment supprimer %1 "%2" ?</qt></translation> + <source>Error opening source: media type could not be determined</source> + <translation>Erreur lors de l'ouverture de la source: type de média non déterminé</translation> </message> +</context> +<context> + <name>Phonon::MMF::StereoWidening</name> <message> - <source>&Yes</source> - <translation>&Oui</translation> + <source>Level (%)</source> + <translation>Niveau (%)</translation> </message> +</context> +<context> + <name>Phonon::MMF::SurfaceVideoPlayer</name> <message> - <source>&No</source> - <translation>&Non</translation> + <source>Video display error</source> + <translation>Erreur de l'affichage vidéo</translation> </message> +</context> +<context> + <name>Phonon::MMF::VideoPlayer</name> <message> - <source>New Folder 1</source> - <translation>Nouveau dossier 1</translation> + <source>Pause failed</source> + <translation type="obsolete">La mise en pause a échoué</translation> </message> <message> - <source>New Folder</source> - <translation>Nouveau dossier</translation> + <source>Seek failed</source> + <translation type="obsolete">La recherche a échoué</translation> </message> <message> - <source>New Folder %1</source> - <translation>Nouveau dossier %1</translation> + <source>Getting position failed</source> + <translation type="obsolete">L'obtention de la position a échoué</translation> </message> <message> - <source>Find Directory</source> - <translation>Chercher dans le dossier</translation> + <source>Opening clip failed</source> + <translation type="obsolete">L'ouverture du clip a échoué</translation> </message> <message> - <source>Directories</source> - <translation>Dossiers</translation> + <source>Buffering clip failed</source> + <translation type="obsolete">La mise en mémoire tampon du clip a échoué</translation> </message> <message> - <source>Directory:</source> - <translation>Dossier :</translation> + <source>Video display error</source> + <translation type="obsolete">Erreur de l'affichage vidéo</translation> </message> +</context> +<context> + <name>Phonon::VolumeSlider</name> <message> - <source>Error</source> - <translation>Erreur</translation> + <source>Volume: %1%</source> + <translation>Volume: %1%</translation> </message> <message> - <source>%1 -File not found. -Check path and filename.</source> - <translation>%1 -Impossible de trouver le fichier. -Vérifier le chemin et le nom du fichier.</translation> + <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> + <translation>Utilisez le slider pour ajuster le volume. La position la plus à gauche est 0%, la plus à droite est %1%</translation> </message> <message> - <source>All Files (*.*)</source> - <translation>Tous les fichiers (*.*)</translation> + <source>Muted</source> + <translation>Son coupé</translation> </message> +</context> +<context> + <name>Q3Accel</name> <message> - <source>Open </source> - <translation>Ouvrir</translation> + <source>%1, %2 not defined</source> + <translation>La séquence %1, %2 n'est pas définie</translation> </message> <message> - <source>Select a Directory</source> - <translation>Sélectionner un dossier</translation> + <source>Ambiguous %1 not handled</source> + <translation>Séquence ambiguë %1 non traitée</translation> </message> </context> <context> - <name>Q3LocalFs</name> - <message> - <source>Could not read directory -%1</source> - <translation>Impossible de lire le dossier -%1</translation> - </message> + <name>Q3DataTable</name> <message> - <source>Could not create directory -%1</source> - <translation>Impossible de créer le dossier -%1</translation> + <source>True</source> + <translation>Vrai</translation> </message> <message> - <source>Could not remove file or directory -%1</source> - <translation>Impossible de supprimer le fichier ou dossier -%1</translation> + <source>False</source> + <translation>Faux</translation> </message> <message> - <source>Could not rename -%1 -to -%2</source> - <translation>Impossible de renommer -%1 -en -%2</translation> + <source>Insert</source> + <translation>Insérer</translation> </message> <message> - <source>Could not open -%1</source> - <translation>Impossible d'ouvrir -%1</translation> + <source>Update</source> + <translation>Actualiser</translation> </message> <message> - <source>Could not write -%1</source> - <translation>Impossible d'écrire -%1</translation> + <source>Delete</source> + <translation>Supprimer</translation> </message> </context> <context> - <name>Q3MainWindow</name> + <name>Q3FileDialog</name> <message> - <source>Line up</source> - <translation>Aligner</translation> + <source>Copy or Move a File</source> + <translation>Copie ou déplace un fichier</translation> </message> <message> - <source>Customize...</source> - <translation>Personnaliser...</translation> + <source>Read: %1</source> + <translation>Lecture : %1</translation> </message> -</context> -<context> - <name>Q3NetworkProtocol</name> <message> - <source>Operation stopped by the user</source> - <translation>Opération interrompue par l'utilisateur</translation> + <source>Write: %1</source> + <translation>Écriture : %1</translation> </message> -</context> -<context> - <name>Q3ProgressDialog</name> <message> <source>Cancel</source> <translation>Annuler</translation> </message> -</context> -<context> - <name>Q3TabDialog</name> <message> - <source>OK</source> - <translation>OK</translation> + <source>All Files (*)</source> + <translation>Tous les fichiers (*)</translation> </message> <message> - <source>Apply</source> - <translation>Appliquer</translation> + <source>Name</source> + <translation>Nom</translation> </message> <message> - <source>Help</source> - <translation>Aide</translation> + <source>Size</source> + <translation>Taille</translation> </message> <message> - <source>Defaults</source> - <translation>Par défaut</translation> + <source>Type</source> + <translation>Type</translation> </message> <message> - <source>Cancel</source> - <translation>Annuler</translation> + <source>Date</source> + <translation>Date</translation> </message> -</context> -<context> - <name>Q3TextEdit</name> <message> - <source>&Undo</source> - <translation>&Annuler</translation> + <source>Attributes</source> + <translation>Attributs</translation> </message> <message> - <source>&Redo</source> - <translation>&Rétablir</translation> + <source>&OK</source> + <translation>&OK</translation> </message> <message> - <source>Cu&t</source> - <translation>Co&uper</translation> + <source>Look &in:</source> + <translation>Chercher &dans :</translation> </message> <message> - <source>&Copy</source> - <translation>Cop&ier</translation> + <source>File &name:</source> + <translation>&Nom de fichier :</translation> </message> <message> - <source>&Paste</source> - <translation>Co&ller</translation> + <source>File &type:</source> + <translation>&Type de fichier :</translation> </message> <message> - <source>Clear</source> - <translation>Effacer</translation> + <source>Back</source> + <translation>Précédent (historique)</translation> </message> <message> - <source>Select All</source> - <translation>Tout sélectionner</translation> + <source>One directory up</source> + <translation>Aller au dossier parent</translation> </message> -</context> -<context> - <name>Q3TitleBar</name> <message> - <source>System</source> - <translation>Système</translation> + <source>Create New Folder</source> + <translation>Créer un nouveau dossier</translation> </message> <message> - <source>Restore up</source> - <translation>Restaurer en haut</translation> + <source>List View</source> + <translation>Affichage liste</translation> </message> <message> - <source>Minimize</source> - <translation>Réduire</translation> + <source>Detail View</source> + <translation>Affichage détaillé</translation> </message> <message> - <source>Restore down</source> - <translation>Restaurer en bas</translation> + <source>Preview File Info</source> + <translation>Informations du fichier prévisualisé</translation> </message> <message> - <source>Maximize</source> - <translation>Maximiser</translation> + <source>Preview File Contents</source> + <translation>Contenu du fichier prévisualisé</translation> </message> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Read-write</source> + <translation>Lecture-écriture</translation> </message> <message> - <source>Contains commands to manipulate the window</source> - <translation>Contient des commandes pour manipuler la fenêtre</translation> + <source>Read-only</source> + <translation>Lecture seule</translation> </message> <message> - <location filename="../src/plugins/accessible/compat/q3complexwidgets.cpp" line="+277"/> - <source>Puts a minimized back to normal</source> - <translation>Rend à une fenêtre minimisée son aspect normal</translation> + <source>Write-only</source> + <translation>Écriture seule</translation> </message> <message> - <source>Moves the window out of the way</source> - <translation>Déplace la fenêtre à l'écart</translation> + <source>Inaccessible</source> + <translation>Inaccessible</translation> </message> <message> - <source>Puts a maximized window back to normal</source> - <translation>Rend à une fenêtre minimisée son aspect normal</translation> + <source>Symlink to File</source> + <translation>Lien symbolique vers un fichier</translation> </message> <message> - <source>Makes the window full screen</source> - <translation>Affiche la fenêtre en plein écran</translation> + <source>Symlink to Directory</source> + <translation>Lien symbolique vers un dossier</translation> </message> <message> - <source>Closes the window</source> - <translation>Ferme la fenêtre</translation> + <source>Symlink to Special</source> + <translation>Lien symbolique vers un fichier spécial</translation> </message> <message> - <source>Displays the name of the window and contains controls to manipulate it</source> - <translation>Affiche le nom de la fenêtre et contient des contrôles pour la manipuler</translation> + <source>File</source> + <translation>Fichier</translation> </message> <message> - <source>Puts a minimized window back to normal</source> - <translation>Rend à une fenêtre minimisée son aspect normal</translation> + <source>Dir</source> + <translation>Dossier</translation> </message> -</context> -<context> - <name>Q3ToolBar</name> <message> - <source>More...</source> - <translation>Reste...</translation> + <source>Special</source> + <translation>Fichier spécial</translation> </message> -</context> -<context> - <name>Q3UrlOperator</name> <message> - <source>The protocol `%1' is not supported</source> - <translation>Le protocole '%1' n'est pas géré</translation> + <source>Open</source> + <translation>Ouvrir</translation> </message> <message> - <source>The protocol `%1' does not support listing directories</source> - <translation>Le protocole `%1' ne permet pas de lister les fichiers d'un dossier</translation> + <source>Save As</source> + <translation>Enregistrer sous</translation> </message> <message> - <source>The protocol `%1' does not support creating new directories</source> - <translation>Le protocole `%1' ne permet pas de créer de nouveaux dossiers</translation> + <source>&Open</source> + <translation>&Ouvrir</translation> </message> <message> - <source>The protocol `%1' does not support removing files or directories</source> - <translation>Le protocole `%1' ne permet pas de supprimer des fichiers ou des dossiers</translation> + <source>&Save</source> + <translation>&Enregistrer</translation> </message> <message> - <source>The protocol `%1' does not support renaming files or directories</source> - <translation>Le protocole `%1' ne permet pas de renommer des fichiers ou des dossiers</translation> + <source>&Rename</source> + <translation>&Renommer</translation> </message> <message> - <source>The protocol `%1' does not support getting files</source> - <translation>Le protocole `%1' ne permet pas de recevoir des fichiers</translation> + <source>&Delete</source> + <translation>Suppri&mer</translation> </message> <message> - <source>The protocol `%1' does not support putting files</source> - <translation>Le protocole `%1' ne permet pas d'envoyer des fichiers</translation> + <source>R&eload</source> + <translation>R&echarger</translation> </message> <message> - <source>The protocol `%1' does not support copying or moving files or directories</source> - <translation>Le protocole `%1' ne permet pas de copier ou de déplacer des fichiers</translation> + <source>Sort by &Name</source> + <translation>Trier par &nom</translation> </message> <message> - <source>(unknown)</source> - <translation>(inconnu)</translation> + <source>Sort by &Size</source> + <translation>Trier par ta&ille</translation> </message> -</context> -<context> - <name>Q3Wizard</name> <message> - <source>&Cancel</source> - <translation>&Annuler</translation> + <source>Sort by &Date</source> + <translation>Trier par &date</translation> </message> <message> - <source>< &Back</source> - <translation>< &Précédent</translation> + <source>&Unsorted</source> + <translation>&Non trié</translation> </message> <message> - <source>&Next ></source> - <translation>&Suivant ></translation> + <source>Sort</source> + <translation>Tri</translation> </message> <message> - <source>&Finish</source> - <translation>&Terminer</translation> + <source>Show &hidden files</source> + <translation>Afficher les fic&hiers cachés</translation> </message> <message> - <source>&Help</source> - <translation>&Aide</translation> + <source>the file</source> + <translation>le fichier</translation> </message> -</context> -<context> - <name>QAbstractSocket</name> <message> - <source>Host not found</source> - <translation>Hôte introuvable</translation> + <source>the directory</source> + <translation>le dossier</translation> </message> <message> - <source>Connection refused</source> - <translation>Connexion refusée</translation> + <source>the symlink</source> + <translation>le lien symbolique</translation> </message> <message> - <source>Connection timed out</source> - <translation>Connexion expirée</translation> + <source>Delete %1</source> + <translation>Supprimer %1</translation> </message> <message> - <source>Operation on socket is not supported</source> - <translation>Opération sur socket non supportée</translation> + <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source> + <translation><qt>Voulez-vous vraiment supprimer %1 "%2" ?</qt></translation> </message> <message> - <source>Socket operation timed out</source> - <translation>Opération socket expirée</translation> + <source>&Yes</source> + <translation>&Oui</translation> </message> <message> - <source>Socket is not connected</source> - <translation>Le socket n'est pas connecté</translation> + <source>&No</source> + <translation>&Non</translation> </message> <message> - <source>Network unreachable</source> - <translation>Réseau impossible à rejoindre</translation> + <source>New Folder 1</source> + <translation>Nouveau dossier 1</translation> </message> -</context> -<context> - <name>QAbstractSpinBox</name> <message> - <source>&Step up</source> - <translation>&Augmenter</translation> + <source>New Folder</source> + <translation>Nouveau dossier</translation> </message> <message> - <source>Step &down</source> - <translation>&Diminuer</translation> + <source>New Folder %1</source> + <translation>Nouveau dossier %1</translation> </message> <message> - <source>&Select All</source> - <translation>Tout &sélectionner</translation> + <source>Find Directory</source> + <translation>Chercher dans le dossier</translation> </message> -</context> -<context> - <name>QApplication</name> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2248"/> - <source>QT_LAYOUT_DIRECTION</source> - <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> - <translation>LTR</translation> + <source>Directories</source> + <translation>Dossiers</translation> </message> <message> - <source>Executable '%1' requires Qt %2, found Qt %3.</source> - <translation>L'exécutable '%1' requiert Qt %2 (Qt %3 présent).</translation> + <source>Directory:</source> + <translation>Dossier :</translation> </message> <message> - <source>Incompatible Qt Library Error</source> - <translation>Erreur : bibliothèque Qt incompatible</translation> + <source>Error</source> + <translation>Erreur</translation> </message> <message> - <source>Activate</source> - <translation>Activer</translation> + <source>%1 +File not found. +Check path and filename.</source> + <translation>%1 +Impossible de trouver le fichier. +Vérifier le chemin et le nom du fichier.</translation> </message> <message> - <source>Activates the program's main window</source> - <translation>Active la fenêtre principale du programme</translation> + <source>All Files (*.*)</source> + <translation>Tous les fichiers (*.*)</translation> </message> <message> - <source>QT_LAYOUT_DIRECTION</source> - <translation>LTR</translation> + <source>Open </source> + <translation>Ouvrir</translation> </message> -</context> -<context> - <name>QAxSelect</name> <message> - <source>Select ActiveX Control</source> - <translation>Sélectionner un contrôle ActiveX</translation> + <source>Select a Directory</source> + <translation>Sélectionner un dossier</translation> </message> +</context> +<context> + <name>Q3LocalFs</name> <message> - <source>OK</source> - <translation>OK</translation> + <source>Could not read directory +%1</source> + <translation>Impossible de lire le dossier +%1</translation> </message> <message> - <source>&Cancel</source> - <translation>&Annuler</translation> + <source>Could not create directory +%1</source> + <translation>Impossible de créer le dossier +%1</translation> </message> <message> - <source>COM &Object:</source> - <translation>&Objet COM :</translation> + <source>Could not remove file or directory +%1</source> + <translation>Impossible de supprimer le fichier ou dossier +%1</translation> </message> -</context> -<context> - <name>QCheckBox</name> <message> - <source>Uncheck</source> - <translation>Décocher</translation> + <source>Could not rename +%1 +to +%2</source> + <translation>Impossible de renommer +%1 +en +%2</translation> </message> <message> - <source>Check</source> - <translation>Cocher</translation> + <source>Could not open +%1</source> + <translation>Impossible d'ouvrir +%1</translation> </message> <message> - <source>Toggle</source> - <translation>Changer</translation> + <source>Could not write +%1</source> + <translation>Impossible d'écrire +%1</translation> </message> </context> <context> - <name>QColorDialog</name> + <name>Q3MainWindow</name> <message> - <source>Hu&e:</source> - <translation>&Teinte :</translation> + <source>Line up</source> + <translation>Aligner</translation> </message> <message> - <source>&Sat:</source> - <translation>&Saturation :</translation> + <source>Customize...</source> + <translation>Personnaliser...</translation> </message> +</context> +<context> + <name>Q3NetworkProtocol</name> <message> - <source>&Val:</source> - <translation>&Valeur :</translation> + <source>Operation stopped by the user</source> + <translation>Opération interrompue par l'utilisateur</translation> </message> +</context> +<context> + <name>Q3ProgressDialog</name> <message> - <source>&Red:</source> - <translation>&Rouge :</translation> + <source>Cancel</source> + <translation>Annuler</translation> </message> +</context> +<context> + <name>Q3TabDialog</name> <message> - <source>&Green:</source> - <translation>&Vert :</translation> + <source>OK</source> + <translation>OK</translation> </message> <message> - <source>Bl&ue:</source> - <translation>Ble&u :</translation> + <source>Apply</source> + <translation>Appliquer</translation> </message> <message> - <source>A&lpha channel:</source> - <translation>Canal a&lpha :</translation> + <source>Help</source> + <translation>Aide</translation> </message> <message> - <source>Select Color</source> - <translation>Sélectionner une couleur</translation> + <source>Defaults</source> + <translation>Par défaut</translation> </message> <message> - <source>&Basic colors</source> - <translation>Couleurs de &base</translation> + <source>Cancel</source> + <translation>Annuler</translation> </message> +</context> +<context> + <name>Q3TextEdit</name> <message> - <source>&Custom colors</source> - <translation>&Couleurs personnalisées</translation> + <source>&Undo</source> + <translation>&Annuler</translation> </message> <message> - <source>&Define Custom Colors >></source> - <translation type="obsolete">Définir des &couleurs personnalisées >></translation> + <source>&Redo</source> + <translation>&Rétablir</translation> </message> <message> - <source>OK</source> - <translation type="obsolete">OK</translation> + <source>Cu&t</source> + <translation>Co&uper</translation> </message> <message> - <source>Cancel</source> - <translation type="obsolete">Annuler</translation> + <source>&Copy</source> + <translation>Cop&ier</translation> </message> <message> - <source>&Add to Custom Colors</source> - <translation>&Ajouter aux couleurs personnalisées</translation> + <source>&Paste</source> + <translation>Co&ller</translation> </message> <message> - <source>Select color</source> - <translation type="obsolete">Sélection d'une couleur</translation> + <source>Clear</source> + <translation>Effacer</translation> + </message> + <message> + <source>Select All</source> + <translation>Tout sélectionner</translation> </message> </context> <context> - <name>QComboBox</name> + <name>Q3TitleBar</name> <message> - <source>Open</source> - <translation>Ouvrir</translation> + <source>System</source> + <translation>Système</translation> </message> <message> - <source>False</source> - <translation>Faux</translation> + <source>Restore up</source> + <translation>Restaurer en haut</translation> </message> <message> - <source>True</source> - <translation>Vrai</translation> + <source>Minimize</source> + <translation>Réduire</translation> </message> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Restore down</source> + <translation>Restaurer en bas</translation> </message> -</context> -<context> - <name>QCoreApplication</name> <message> - <source>%1: permission denied</source> - <comment>QSystemSemaphore</comment> - <translation type="obsolete">%1: permission refusée</translation> + <source>Maximize</source> + <translation>Maximiser</translation> </message> <message> - <source>%1: already exists</source> - <comment>QSystemSemaphore</comment> - <translation type="obsolete">%1: existe déjà</translation> + <source>Close</source> + <translation>Fermer</translation> </message> <message> - <source>%1: doesn't exists</source> - <comment>QSystemSemaphore</comment> - <translation type="obsolete">%1: n'existe pas</translation> + <source>Contains commands to manipulate the window</source> + <translation>Contient des commandes pour manipuler la fenêtre</translation> </message> <message> - <source>%1: out of resources</source> - <comment>QSystemSemaphore</comment> - <translation type="obsolete">%1: plus de ressources disponibles</translation> + <source>Puts a minimized back to normal</source> + <translation type="obsolete">Rend à une fenêtre minimisée son aspect normal</translation> </message> <message> - <source>%1: unknown error %2</source> - <comment>QSystemSemaphore</comment> - <translation type="obsolete">%1: erreur inconnue %2</translation> + <source>Moves the window out of the way</source> + <translation>Déplace la fenêtre à l'écart</translation> </message> <message> - <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/> - <source>%1: key is empty</source> - <comment>QSystemSemaphore</comment> - <translation>%1: clé vide</translation> + <source>Puts a maximized window back to normal</source> + <translation>Rend à une fenêtre minimisée son aspect normal</translation> </message> <message> - <location line="+12"/> - <source>%1: unable to make key</source> - <comment>QSystemSemaphore</comment> - <translation>%1: impossible de créer la clé</translation> + <source>Makes the window full screen</source> + <translation>Affiche la fenêtre en plein écran</translation> </message> <message> - <location line="+9"/> - <source>%1: ftok failed</source> - <comment>QSystemSemaphore</comment> - <translation>%1: ftok a échoué</translation> + <source>Closes the window</source> + <translation>Ferme la fenêtre</translation> </message> <message> - <source>%1: key is empty</source> - <translation>%1: clé vide</translation> + <source>Displays the name of the window and contains controls to manipulate it</source> + <translation>Affiche le nom de la fenêtre et contient des contrôles pour la manipuler</translation> </message> <message> - <source>%1: unable to make key</source> - <translation>%1: impossible de créer la clé</translation> + <source>Puts a minimized window back to normal</source> + <translation>Rend à une fenêtre minimisée son aspect normal</translation> </message> +</context> +<context> + <name>Q3ToolBar</name> <message> - <source>%1: ftok failed</source> - <translation>%1: ftok a échoué</translation> + <source>More...</source> + <translation>Reste...</translation> </message> +</context> +<context> + <name>Q3UrlOperator</name> <message> - <source>%1: already exists</source> - <translation>%1: existe déjà</translation> + <source>The protocol `%1' is not supported</source> + <translation>Le protocole '%1' n'est pas géré</translation> </message> <message> - <source>%1: does not exist</source> - <translation>%1: n'existe pas</translation> + <source>The protocol `%1' does not support listing directories</source> + <translation>Le protocole `%1' ne permet pas de lister les fichiers d'un dossier</translation> </message> <message> - <source>%1: out of resources</source> - <translation>%1: plus de ressources disponibles</translation> + <source>The protocol `%1' does not support creating new directories</source> + <translation>Le protocole `%1' ne permet pas de créer de nouveaux dossiers</translation> </message> <message> - <source>%1: unknown error %2</source> - <translation>%1: erreur inconnue %2</translation> + <source>The protocol `%1' does not support removing files or directories</source> + <translation>Le protocole `%1' ne permet pas de supprimer des fichiers ou des dossiers</translation> </message> -</context> -<context> - <name>QDB2Driver</name> <message> - <source>Unable to connect</source> - <translation>Incapable d'établir une connexion</translation> + <source>The protocol `%1' does not support renaming files or directories</source> + <translation>Le protocole `%1' ne permet pas de renommer des fichiers ou des dossiers</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>Incapable de soumettre la transaction</translation> + <source>The protocol `%1' does not support getting files</source> + <translation>Le protocole `%1' ne permet pas de recevoir des fichiers</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>Incapable d'annuler la transaction</translation> + <source>The protocol `%1' does not support putting files</source> + <translation>Le protocole `%1' ne permet pas d'envoyer des fichiers</translation> </message> <message> - <source>Unable to set autocommit</source> - <translation>Impossible d'activer l'auto-soumission</translation> + <source>The protocol `%1' does not support copying or moving files or directories</source> + <translation>Le protocole `%1' ne permet pas de copier ou de déplacer des fichiers</translation> </message> -</context> -<context> - <name>QDB2Result</name> <message> - <source>Unable to execute statement</source> - <translation>Impossible d'exécuter la requête</translation> + <source>(unknown)</source> + <translation>(inconnu)</translation> </message> +</context> +<context> + <name>Q3Wizard</name> <message> - <source>Unable to prepare statement</source> - <translation>Impossible de prépare la requête</translation> + <source>&Cancel</source> + <translation>&Annuler</translation> </message> <message> - <source>Unable to bind variable</source> - <translation>Impossible d'attacher la variable</translation> + <source>< &Back</source> + <translation>< &Précédent</translation> </message> <message> - <source>Unable to fetch record %1</source> - <translation>Impossible de récupérer l'enregistrement %1</translation> + <source>&Next ></source> + <translation>&Suivant ></translation> </message> <message> - <source>Unable to fetch next</source> - <translation>Impossible de récupérer le suivant</translation> + <source>&Finish</source> + <translation>&Terminer</translation> </message> <message> - <source>Unable to fetch first</source> - <translation>Impossible de récupérer le premier</translation> + <source>&Help</source> + <translation>&Aide</translation> </message> </context> <context> - <name>QDateTimeEdit</name> + <name>QAbstractSocket</name> <message> - <source>AM</source> - <translation>AM</translation> + <source>Host not found</source> + <translation>Hôte introuvable</translation> </message> <message> - <source>am</source> - <translation>am</translation> + <source>Connection refused</source> + <translation>Connexion refusée</translation> </message> <message> - <source>PM</source> - <translation>PM</translation> + <source>Connection timed out</source> + <translation>Connexion expirée</translation> </message> <message> - <source>pm</source> - <translation>pm</translation> + <source>Operation on socket is not supported</source> + <translation>Opération sur socket non supportée</translation> </message> -</context> -<context> - <name>QDial</name> <message> - <source>QDial</source> - <translation>QDial</translation> + <source>Socket operation timed out</source> + <translation>Opération socket expirée</translation> </message> <message> - <source>SpeedoMeter</source> - <translation>Tachymètre</translation> + <source>Socket is not connected</source> + <translation>Le socket n'est pas connecté</translation> </message> <message> - <source>SliderHandle</source> - <translation>Poignée</translation> + <source>Network unreachable</source> + <translation>Réseau impossible à rejoindre</translation> </message> </context> <context> - <name>QDialog</name> - <message> - <source>What's This?</source> - <translation>Qu'est-ce que c'est ?</translation> - </message> + <name>QAbstractSpinBox</name> <message> - <source>Done</source> - <translation>Terminer</translation> + <source>&Step up</source> + <translation>&Augmenter</translation> </message> -</context> -<context> - <name>QDialogButtonBox</name> <message> - <source>OK</source> - <translation>OK</translation> + <source>Step &down</source> + <translation>&Diminuer</translation> </message> <message> - <source>Save</source> - <translation>Enregistrer</translation> + <source>&Select All</source> + <translation>Tout &sélectionner</translation> </message> +</context> +<context> + <name>QAccessibleButton</name> <message> - <source>&Save</source> - <translation>Enregi&strer</translation> + <source>Press</source> + <translation>Appuyer</translation> </message> +</context> +<context> + <name>QApplication</name> <message> - <source>Open</source> - <translation>Ouvrir</translation> + <source>QT_LAYOUT_DIRECTION</source> + <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> + <translation>LTR</translation> </message> <message> - <source>Cancel</source> - <translation>Annuler</translation> + <source>Executable '%1' requires Qt %2, found Qt %3.</source> + <translation>L'exécutable '%1' requiert Qt %2 (Qt %3 présent).</translation> </message> <message> - <source>&Cancel</source> - <translation>&Annuler</translation> + <source>Incompatible Qt Library Error</source> + <translation>Erreur : bibliothèque Qt incompatible</translation> </message> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Activate</source> + <translation>Activer</translation> </message> <message> - <source>&Close</source> - <translation>&Fermer</translation> + <source>Activates the program's main window</source> + <translation>Active la fenêtre principale du programme</translation> </message> <message> - <source>Apply</source> - <translation>Appliquer</translation> + <source>QT_LAYOUT_DIRECTION</source> + <translation type="obsolete">LTR</translation> </message> +</context> +<context> + <name>QAxSelect</name> <message> - <source>Reset</source> - <translation>Réinitialiser</translation> + <source>Select ActiveX Control</source> + <translation>Sélectionner un contrôle ActiveX</translation> </message> <message> - <source>Help</source> - <translation>Aide</translation> + <source>OK</source> + <translation>OK</translation> </message> <message> - <source>Don't Save</source> - <translation>Ne pas enregistrer</translation> + <source>&Cancel</source> + <translation>&Annuler</translation> </message> <message> - <source>Discard</source> - <translation>Ne pas enregistrer</translation> + <source>COM &Object:</source> + <translation>&Objet COM :</translation> </message> +</context> +<context> + <name>QCheckBox</name> <message> - <source>&Yes</source> - <translation>&Oui</translation> + <source>Uncheck</source> + <translation>Décocher</translation> </message> <message> - <source>Yes to &All</source> - <translation>Oui à &tout</translation> + <source>Check</source> + <translation>Cocher</translation> </message> <message> - <source>&No</source> - <translation>&Non</translation> + <source>Toggle</source> + <translation>Changer</translation> </message> +</context> +<context> + <name>QColorDialog</name> <message> - <source>N&o to All</source> - <translation>Non à to&ut</translation> + <source>Hu&e:</source> + <translation>&Teinte :</translation> </message> <message> - <source>Save All</source> - <translation>Tout Enregistrer</translation> + <source>&Sat:</source> + <translation>&Saturation :</translation> </message> <message> - <source>Abort</source> - <translation>Abandonner</translation> + <source>&Val:</source> + <translation>&Valeur :</translation> </message> <message> - <source>Retry</source> - <translation>Réessayer</translation> + <source>&Red:</source> + <translation>&Rouge :</translation> </message> <message> - <source>Ignore</source> - <translation>Ignorer</translation> + <source>&Green:</source> + <translation>&Vert :</translation> </message> <message> - <source>Restore Defaults</source> - <translation>Restaurer les valeurs par défaut</translation> + <source>Bl&ue:</source> + <translation>Ble&u :</translation> </message> <message> - <source>Close without Saving</source> - <translation>Fermer sans enregistrer</translation> + <source>A&lpha channel:</source> + <translation>Canal a&lpha :</translation> </message> <message> - <source>&OK</source> - <translation>&OK</translation> + <source>Select Color</source> + <translation>Sélectionner une couleur</translation> </message> -</context> -<context> - <name>QDirModel</name> <message> - <source>Name</source> - <translation>Nom</translation> + <source>&Basic colors</source> + <translation>Couleurs de &base</translation> </message> <message> - <source>Size</source> - <translation>Taille</translation> + <source>&Custom colors</source> + <translation>&Couleurs personnalisées</translation> </message> <message> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+457"/> - <source>Kind</source> - <comment>Match OS X Finder</comment> - <translation>Type</translation> + <source>&Define Custom Colors >></source> + <translation type="obsolete">Définir des &couleurs personnalisées >></translation> </message> <message> - <location line="+2"/> - <source>Type</source> - <comment>All other platforms</comment> - <translation>Type</translation> + <source>OK</source> + <translation type="obsolete">OK</translation> </message> <message> - <source>Date Modified</source> - <translation>Dernière Modification</translation> + <source>Cancel</source> + <translation type="obsolete">Annuler</translation> </message> <message> - <source>Kind</source> - <translation>Type</translation> + <source>&Add to Custom Colors</source> + <translation>&Ajouter aux couleurs personnalisées</translation> </message> <message> - <source>Type</source> - <translation>Type</translation> + <source>Select color</source> + <translation type="obsolete">Sélection d'une couleur</translation> </message> </context> <context> - <name>QDockWidget</name> + <name>QComboBox</name> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Open</source> + <translation>Ouvrir</translation> </message> <message> - <source>Dock</source> - <translation>Attacher</translation> + <source>False</source> + <translation>Faux</translation> </message> <message> - <source>Float</source> - <translation>Détacher</translation> + <source>True</source> + <translation>Vrai</translation> + </message> + <message> + <source>Close</source> + <translation>Fermer</translation> </message> </context> <context> - <name>QDoubleSpinBox</name> + <name>QCoreApplication</name> <message> - <source>More</source> - <translation>Plus</translation> + <source>%1: permission denied</source> + <comment>QSystemSemaphore</comment> + <translation type="obsolete">%1: permission refusée</translation> </message> <message> - <source>Less</source> - <translation>Moins</translation> + <source>%1: already exists</source> + <comment>QSystemSemaphore</comment> + <translation>%1 : existe déjà</translation> </message> -</context> -<context> - <name>QErrorMessage</name> <message> - <source>&Show this message again</source> - <translation>&Afficher ce message de nouveau</translation> + <source>%1: doesn't exists</source> + <comment>QSystemSemaphore</comment> + <translation type="obsolete">%1: n'existe pas</translation> </message> <message> - <source>&OK</source> - <translation>&OK</translation> + <source>%1: does not exist</source> + <comment>QSystemSemaphore</comment> + <translation>%1 : n'existe pas</translation> </message> <message> - <source>Debug Message:</source> - <translation>Message de débogage:</translation> + <source>%1: out of resources</source> + <comment>QSystemSemaphore</comment> + <translation>%1 : plus de ressources disponibles</translation> </message> <message> - <source>Warning:</source> - <translation>Avertissement:</translation> + <source>%1: unknown error %2</source> + <comment>QSystemSemaphore</comment> + <translation>%1 : erreur inconnue %2</translation> </message> <message> - <source>Fatal Error:</source> - <translation>Erreur fatale:</translation> + <source>%1: key is empty</source> + <comment>QSystemSemaphore</comment> + <translation>%1 : clé vide</translation> </message> -</context> -<context> - <name>QFile</name> <message> - <source>Destination file exists</source> - <translation>Le fichier destination existe</translation> + <source>%1: unable to make key</source> + <comment>QSystemSemaphore</comment> + <translation>%1 : impossible de créer la clé</translation> </message> <message> - <source>Cannot remove source file</source> - <translation>Impossible de supprimer le fichier source</translation> + <source>%1: ftok failed</source> + <comment>QSystemSemaphore</comment> + <translation>%1 : ftok a échoué</translation> </message> <message> - <source>Cannot open %1 for input</source> - <translation>Impossible d'ouvrir %1 pour lecture</translation> + <source>%1: key is empty</source> + <translation type="obsolete">%1: clé vide</translation> </message> <message> - <source>Cannot open for output</source> - <translation>Impossible d'ouvrir pour écriture</translation> + <source>%1: unable to make key</source> + <translation type="obsolete">%1: impossible de créer la clé</translation> </message> <message> - <source>Failure to write block</source> - <translation>Impossible d'écrire un bloc</translation> + <source>%1: ftok failed</source> + <translation type="obsolete">%1: ftok a échoué</translation> </message> <message> - <source>Cannot create %1 for output</source> - <translation>Impossible de créer %1 pour écriture</translation> + <source>%1: already exists</source> + <translation type="obsolete">%1: existe déjà</translation> </message> <message> - <source>Will not rename sequential file using block copy</source> - <translation>Ne renommera pas le fichier séquentiel avec la copie bloc</translation> + <source>%1: does not exist</source> + <translation type="obsolete">%1: n'existe pas</translation> + </message> + <message> + <source>%1: out of resources</source> + <translation type="obsolete">%1: plus de ressources disponibles</translation> + </message> + <message> + <source>%1: unknown error %2</source> + <translation type="obsolete">%1: erreur inconnue %2</translation> </message> </context> <context> - <name>QFileDialog</name> + <name>QDB2Driver</name> <message> - <source>Back</source> - <translation>Précédent (historique)</translation> + <source>Unable to connect</source> + <translation>Incapable d'établir une connexion</translation> </message> <message> - <source>List View</source> - <translation>Affichage liste</translation> + <source>Unable to commit transaction</source> + <translation>Incapable de soumettre la transaction</translation> </message> <message> - <source>Detail View</source> - <translation>Affichage détaillé</translation> + <source>Unable to rollback transaction</source> + <translation>Incapable d'annuler la transaction</translation> </message> <message> - <source>Open</source> - <translation>Ouvrir</translation> + <source>Unable to set autocommit</source> + <translation>Impossible d'activer l'auto-soumission</translation> </message> +</context> +<context> + <name>QDB2Result</name> <message> - <source>&Open</source> - <translation>&Ouvrir</translation> + <source>Unable to execute statement</source> + <translation>Impossible d'exécuter la requête</translation> </message> <message> - <source>&Save</source> - <translation>&Enregistrer</translation> + <source>Unable to prepare statement</source> + <translation>Impossible de prépare la requête</translation> </message> <message> - <source>&Rename</source> - <translation>&Renommer</translation> + <source>Unable to bind variable</source> + <translation>Impossible d'attacher la variable</translation> </message> <message> - <source>&Delete</source> - <translation>Suppri&mer</translation> + <source>Unable to fetch record %1</source> + <translation>Impossible de récupérer l'enregistrement %1</translation> </message> <message> - <source>Show &hidden files</source> - <translation>Afficher les fic&hiers cachés</translation> + <source>Unable to fetch next</source> + <translation>Impossible de récupérer le suivant</translation> </message> <message> - <source>Directories</source> - <translation>Dossiers</translation> + <source>Unable to fetch first</source> + <translation>Impossible de récupérer le premier</translation> </message> +</context> +<context> + <name>QDateTimeEdit</name> <message> - <source>Recent Places</source> - <translation>Emplacements récents</translation> + <source>AM</source> + <translation>AM</translation> </message> <message> - <source>All Files (*)</source> - <translation>Tous les fichiers (*)</translation> + <source>am</source> + <translation>am</translation> </message> <message> - <source>%1 already exists. -Do you want to replace it?</source> - <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser ?</translation> + <source>PM</source> + <translation>PM</translation> </message> <message> - <source>%1 -File not found. -Please verify the correct file name was given.</source> - <translation>%1 -Fichier introuvable. -Veuillez vérifier que le nom du fichier est correct.</translation> + <source>pm</source> + <translation>pm</translation> </message> +</context> +<context> + <name>QDeclarativeAbstractAnimation</name> <message> - <source>My Computer</source> - <translation>Poste de travail</translation> + <source>Cannot animate non-existent property "%1"</source> + <translation>Impossible d'animer la propriété inexistante "%1"</translation> </message> <message> - <source>Parent Directory</source> - <translation>Dossier parent</translation> + <source>Cannot animate read-only property "%1"</source> + <translation>Impossible d'animer la propriété en lecture seule "%1"</translation> </message> <message> - <source>Files of type:</source> - <translation>Fichiers de type :</translation> + <source>Animation is an abstract class</source> + <translation>L'animation est une classe abstraite</translation> </message> +</context> +<context> + <name>QDeclarativeAnchorAnimation</name> <message> - <source>Directory:</source> - <translation>Dossier :</translation> + <source>Cannot set a duration of < 0</source> + <translation>Impossible de sélectionner une durée négative</translation> </message> +</context> +<context> + <name>QDeclarativeAnchors</name> <message> - <source> -File not found. -Please verify the correct file name was given</source> - <translation type="obsolete"> -Fichier introuvable. -Veuillez vérifier que le nom du fichier est correct</translation> + <source>Possible anchor loop detected on fill.</source> + <translation>Boucle potentielle dans les ancres détectée pour le remplissage.</translation> </message> <message> - <source>%1 -Directory not found. -Please verify the correct directory name was given.</source> - <translation>%1 -Dossier introuvable. -Veuillez vérifier que le nom du dossier est correct.</translation> + <source>Possible anchor loop detected on centerIn.</source> + <translation>Boucle potentielle dans les ancres détectée pour le centrage.</translation> </message> <message> - <source>'%1' is write protected. -Do you want to delete it anyway?</source> - <translation>'%1' est protégé en écriture. -Voulez-vous quand même le supprimer ?</translation> + <source>Cannot anchor to an item that isn't a parent or sibling.</source> + <translation>Impossible d'ancrer à un élément qui n'est pas un parent ou partage le même parent.</translation> </message> <message> - <source>Are sure you want to delete '%1'?</source> - <translation>Etes-vous sûr de vouloir supprimer '%1' ?</translation> + <source>Possible anchor loop detected on vertical anchor.</source> + <translation>Boucle potentielle dans les ancres détectée pour l'ancre verticale.</translation> </message> <message> - <source>Could not delete directory.</source> - <translation>Impossible de supprimer le dossier.</translation> + <source>Possible anchor loop detected on horizontal anchor.</source> + <translation>Boucle potentielle dans les ancres détectée pour l'ancre horizontale.</translation> </message> <message> - <source>All Files (*.*)</source> - <translation>Tous les fichiers (*.*)</translation> + <source>Cannot specify left, right, and hcenter anchors.</source> + <translation>Impossible de spécifier à la fois une ancre gauche, droite et hcenter.</translation> </message> <message> - <source>Save As</source> - <translation>Enregistrer sous</translation> + <source>Cannot anchor to a null item.</source> + <translation>impossible d'ancrer à un élément nul.</translation> </message> <message> - <source>Drive</source> - <translation>Unité</translation> + <source>Cannot anchor a horizontal edge to a vertical edge.</source> + <translation>Impossible d'ancrer un bord horizontal à un bord vertical.</translation> </message> <message> - <source>File</source> - <translation>Fichier</translation> + <source>Cannot anchor item to self.</source> + <translation>Impossible d'ancrer l'élément à lui même.</translation> </message> <message> - <source>Unknown</source> - <translation>Inconnu</translation> + <source>Cannot specify top, bottom, and vcenter anchors.</source> + <translation>Impossible de spécifier à la fois une ancre haut, bas et vcenter.</translation> </message> <message> - <source>Find Directory</source> - <translation>Chercher dans le dossier</translation> + <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source> + <translation>L'ancre baseline ne peut pas etre combinée à l'usage des ancres haut, bas ou vcenter.</translation> </message> <message> - <source>Show </source> - <translation>Montrer </translation> + <source>Cannot anchor a vertical edge to a horizontal edge.</source> + <translation>Impossible d'ancrer un bord vertical à un bord horizontal.</translation> </message> +</context> +<context> + <name>QDeclarativeAnimatedImage</name> <message> - <source>Forward</source> - <translation>Successeur</translation> + <source>Qt was built without support for QMovie</source> + <translation>Qt a été compilé sans support de QMovie</translation> </message> +</context> +<context> + <name>QDeclarativeBehavior</name> <message> - <source>New Folder</source> - <translation>Nouveau dossier</translation> + <source>Cannot change the animation assigned to a Behavior.</source> + <translation>Impossible de changer l'animation affectée à un comportement.</translation> </message> +</context> +<context> + <name>QDeclarativeBinding</name> <message> - <source>&New Folder</source> - <translation>&Nouveau dossier</translation> + <source>Binding loop detected for property "%1"</source> + <translation>Boucle détectée dans l'affectation pour la propriété "%1"</translation> </message> +</context> +<context> + <name>QDeclarativeCompiledBindings</name> <message> - <source>&Choose</source> - <translation>&Choisir</translation> + <source>Binding loop detected for property "%1"</source> + <translation></translation> </message> +</context> +<context> + <name>QDeclarativeCompiler</name> <message> - <source>Remove</source> - <translation>Supprimer</translation> + <source>Invalid property assignment: "%1" is a read-only property</source> + <translation>Affectation de propriété invalide : "%1"est une propriété en lecture seule</translation> </message> <message> - <source>File &name:</source> - <translation>&Nom de fichier :</translation> + <source>Invalid property assignment: unknown enumeration</source> + <translation>Affectation de propriété invalide : énumération inconnue</translation> </message> <message> - <source>Look in:</source> - <translation>Voir dans:</translation> + <source>Invalid property assignment: string expected</source> + <translation>Affectation de propriété invalide : chaîne attendue</translation> </message> <message> - <source>Create New Folder</source> - <translation>Créer un nouveau dossier</translation> + <source>Invalid property assignment: url expected</source> + <translation>Affectation de propriété invalide : url attendue</translation> </message> <message> - <source>File Folder</source> - <translation>Fichier Dossier</translation> + <source>Invalid property assignment: unsigned int expected</source> + <translation>Affectation de propriété invalide : unsigned int attendu</translation> </message> <message> - <source>Folder</source> - <translation>Dossier</translation> + <source>Invalid property assignment: int expected</source> + <translation>Affectation de propriété invalide : int attendu</translation> </message> <message> - <source>Alias</source> - <translation>Alias</translation> + <source>Invalid property assignment: float expected</source> + <translation>Affectation de propriété invalide : float attendu</translation> </message> <message> - <source>Shortcut</source> - <translation>Raccourci</translation> + <source>Invalid property assignment: double expected</source> + <translation>Affectation de propriété invalide : double attendu</translation> </message> -</context> -<context> - <name>QFileSystemModel</name> <message> - <source>%1 TB</source> - <translation>%1 To</translation> + <source>Invalid property assignment: color expected</source> + <translation>Affectation de propriété invalide : couleur attendue</translation> </message> <message> - <source>%1 GB</source> - <translation>%1 Go</translation> + <source>Invalid property assignment: date expected</source> + <translation>Affectation de propriété invalide : date attendue</translation> </message> <message> - <source>%1 MB</source> - <translation>%1 Mo</translation> + <source>Invalid property assignment: time expected</source> + <translation>Affectation de propriété invalide : heure attendue</translation> </message> <message> - <source>%1 KB</source> - <translation>%1 Ko</translation> + <source>Invalid property assignment: datetime expected</source> + <translation>Affectation de propriété invalide : date et heure attendues</translation> </message> <message> - <source>%1 bytes</source> - <translation>%1 octets</translation> + <source>Invalid property assignment: point expected</source> + <translation>Affectation de propriété invalide : point attendu</translation> </message> <message> - <source>Invalid filename</source> - <translation>Nom de fichier invalide</translation> + <source>Invalid property assignment: size expected</source> + <translation>Affectation de propriété invalide : taille attendue</translation> </message> <message> - <source><b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.</source> - <translation><b>Le nom "%1" ne peut pas être utilisé.</b><p>Essayez un autre nom avec moins de caractères ou sans ponctuation.</translation> + <source>Invalid property assignment: rect expected</source> + <translation>Affectation de propriété invalide : rectangle attendu</translation> </message> <message> - <source>Name</source> - <translation>Nom</translation> + <source>Invalid property assignment: boolean expected</source> + <translation>Affectation de propriété invalide : booléen attendu</translation> </message> <message> - <source>Size</source> - <translation>Taille</translation> + <source>Invalid property assignment: 3D vector expected</source> + <translation>Affectation de propriété invalide : vecteur 3D attendu</translation> </message> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+898"/> - <source>Kind</source> - <comment>Match OS X Finder</comment> - <translation>Type</translation> + <source>Invalid property assignment: unsupported type "%1"</source> + <translation>Affectation de propriété invalide : type "%1" non supporté</translation> </message> <message> - <location line="+2"/> - <source>Type</source> - <comment>All other platforms</comment> - <translation>Type</translation> + <source>Element is not creatable.</source> + <translation>Impossible de créer l'élément.</translation> </message> <message> - <source>Date Modified</source> - <translation>Dernière modification</translation> + <source>Component elements may not contain properties other than id</source> + <translation type="unfinished"></translation> </message> <message> - <source>My Computer</source> - <translation>Mon ordinateur</translation> + <source>Invalid component id specification</source> + <translation type="unfinished">L'ID de composant spécifiée n'est pas valide</translation> </message> <message> - <source>Computer</source> - <translation>Ordinateur</translation> + <source>id is not unique</source> + <translation type="unfinished">l'ID n'est pas unique</translation> </message> <message> - <source>Kind</source> - <translation>Type</translation> + <source>Invalid component body specification</source> + <translation type="unfinished"></translation> </message> <message> - <source>Type</source> - <translation>Type</translation> + <source>Component objects cannot declare new properties.</source> + <translation type="unfinished"></translation> </message> <message> - <source>%1 byte(s)</source> - <translation>%1 octet(s)</translation> + <source>Component objects cannot declare new signals.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QFontDatabase</name> <message> - <source>Normal</source> - <translation>Normal</translation> + <source>Component objects cannot declare new functions.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Bold</source> - <translation>Gras</translation> + <source>Cannot create empty component specification</source> + <translation type="unfinished"></translation> </message> <message> - <source>Demi Bold</source> - <translation>Semi Gras</translation> + <source>Incorrectly specified signal assignment</source> + <translation type="unfinished"></translation> </message> <message> - <source>Black</source> - <translation>Noir</translation> + <source>Cannot assign a value to a signal (expecting a script to be run)</source> + <translation type="unfinished"></translation> </message> <message> - <source>Demi</source> - <translation>Demi</translation> + <source>Empty signal assignment</source> + <translation type="unfinished"></translation> </message> <message> - <source>Light</source> - <translation>Léger</translation> + <source>Empty property assignment</source> + <translation type="unfinished"></translation> </message> <message> - <source>Italic</source> - <translation>Italique</translation> + <source>Attached properties cannot be used here</source> + <translation type="unfinished"></translation> </message> <message> - <source>Oblique</source> - <translation>Oblique</translation> + <source>Non-existent attached object</source> + <translation type="unfinished"></translation> </message> <message> - <source>Any</source> - <translation>Tous</translation> + <source>Invalid attached object assignment</source> + <translation type="unfinished"></translation> </message> <message> - <source>Latin</source> - <translation>Latin</translation> + <source>Cannot assign to non-existent default property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Greek</source> - <translation>Grec</translation> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished"></translation> </message> <message> - <source>Cyrillic</source> - <translation>Cyrillique</translation> + <source>Invalid use of namespace</source> + <translation type="unfinished"></translation> </message> <message> - <source>Armenian</source> - <translation>Arménien</translation> + <source>Not an attached property name</source> + <translation type="unfinished"></translation> </message> <message> - <source>Hebrew</source> - <translation>Hébreu</translation> + <source>Invalid use of id property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Arabic</source> - <translation>Arabe</translation> + <source>Property has already been assigned a value</source> + <translation type="unfinished"></translation> </message> <message> - <source>Syriac</source> - <translation>Syriaque</translation> + <source>Invalid grouped property access</source> + <translation type="unfinished"></translation> </message> <message> - <source>Thaana</source> - <translation>Thaana</translation> + <source>Cannot assign a value directly to a grouped property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Devanagari</source> - <translation>Devanagari</translation> + <source>Invalid property use</source> + <translation type="unfinished"></translation> </message> <message> - <source>Bengali</source> - <translation>Bengali</translation> + <source>Property assignment expected</source> + <translation type="unfinished"></translation> </message> <message> - <source>Gurmukhi</source> - <translation>Gurmukhi</translation> + <source>Single property assignment expected</source> + <translation type="unfinished"></translation> </message> <message> - <source>Gujarati</source> - <translation>Gujarati</translation> + <source>Unexpected object assignment</source> + <translation type="unfinished"></translation> </message> <message> - <source>Oriya</source> - <translation>Oriya</translation> + <source>Cannot assign object to list</source> + <translation type="unfinished"></translation> </message> <message> - <source>Tamil</source> - <translation>Tamil</translation> + <source>Can only assign one binding to lists</source> + <translation type="unfinished"></translation> </message> <message> - <source>Telugu</source> - <translation>Telugu</translation> + <source>Cannot assign primitives to lists</source> + <translation type="unfinished"></translation> </message> <message> - <source>Kannada</source> - <translation>Kannada</translation> + <source>Cannot assign multiple values to a script property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Malayalam</source> - <translation>Malayalam</translation> + <source>Invalid property assignment: script expected</source> + <translation type="unfinished"></translation> </message> <message> - <source>Sinhala</source> - <translation>Sinhala</translation> + <source>Cannot assign object to property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Thai</source> - <translation>Thaï</translation> + <source>"%1" cannot operate on "%2"</source> + <translation type="unfinished"></translation> </message> <message> - <source>Lao</source> - <translatorcomment>Lao/Laotien sont corrects</translatorcomment> - <translation>Lao</translation> + <source>Duplicate default property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Tibetan</source> - <translation>Tibétain</translation> + <source>Duplicate property name</source> + <translation type="unfinished"></translation> </message> <message> - <source>Myanmar</source> - <translatorcomment>Myanmar/Birman sont corrects mais Myanmar semble plus adapté pour la langue écrite</translatorcomment> - <translation>Myanmar</translation> + <source>Property names cannot begin with an upper case letter</source> + <translation type="unfinished"></translation> </message> <message> - <source>Georgian</source> - <translation>Géorgien</translation> + <source>Duplicate signal name</source> + <translation type="unfinished"></translation> </message> <message> - <source>Khmer</source> - <translation>Khmer</translation> + <source>Signal names cannot begin with an upper case letter</source> + <translation type="unfinished"></translation> </message> <message> - <source>Simplified Chinese</source> - <translation>Chinois Simplifié</translation> + <source>Duplicate method name</source> + <translation type="unfinished"></translation> </message> <message> - <source>Traditional Chinese</source> - <translation>Chinois Traditionnel</translation> + <source>Method names cannot begin with an upper case letter</source> + <translation type="unfinished"></translation> </message> <message> - <source>Japanese</source> - <translation>Japonais</translation> + <source>Property value set multiple times</source> + <translation type="unfinished"></translation> </message> <message> - <source>Korean</source> - <translation>Coréen</translation> + <source>Invalid property nesting</source> + <translation type="unfinished"></translation> </message> <message> - <source>Vietnamese</source> - <translation>Vietnamien</translation> + <source>Cannot override FINAL property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Symbol</source> - <translation>Symbole</translation> + <source>Invalid property type</source> + <translation type="unfinished">Type de propriété invalide</translation> </message> <message> - <source>Ogham</source> - <translation>Ogham</translation> + <source>Invalid empty ID</source> + <translation>ID vide non valide</translation> </message> <message> - <source>Runic</source> - <translation>Runique</translation> + <source>IDs cannot start with an uppercase letter</source> + <translation type="unfinished"></translation> </message> <message> - <source>N'Ko</source> - <translation>N'Ko</translation> + <source>IDs must start with a letter or underscore</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QFontDialog</name> <message> - <source>&Font</source> - <translation>&Police</translation> + <source>IDs must contain only letters, numbers, and underscores</source> + <translation type="unfinished"></translation> </message> <message> - <source>Font st&yle</source> - <translation>St&yle de police</translation> + <source>ID illegally masks global JavaScript property</source> + <translation type="unfinished"></translation> </message> <message> - <source>&Size</source> - <translation>&Taille</translation> + <source>No property alias location</source> + <translation type="unfinished"></translation> </message> <message> - <source>Effects</source> - <translation>Effets</translation> + <source>Invalid alias location</source> + <translation type="unfinished"></translation> </message> <message> - <source>Stri&keout</source> - <translation>&Barré</translation> + <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> + <translation type="unfinished"></translation> </message> <message> - <source>&Underline</source> - <translation>&Souligné</translation> + <source>Invalid alias reference. Unable to find id "%1"</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeComponent</name> <message> - <source>Sample</source> - <translation>Exemple</translation> + <source>Invalid empty URL</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeCompositeTypeManager</name> <message> - <source>Select Font</source> - <translation>Choisir une police</translation> + <source>Resource %1 unavailable</source> + <translation type="unfinished"></translation> </message> <message> - <source>Wr&iting System</source> - <translation>&Système d'écriture</translation> + <source>Namespace %1 cannot be used as a type</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>%1 %2</source> + <translation type="unfinished">%1% {1 %2?}</translation> + </message> + <message> + <source>Type %1 unavailable</source> + <translation type="unfinished"></translation> </message> </context> <context> - <name>QFtp</name> + <name>QDeclarativeConnections</name> <message> - <source>Host %1 found</source> - <translation>Hôte %1 trouvé</translation> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished"></translation> </message> <message> - <source>Host found</source> - <translation>Hôte trouvé</translation> + <source>Connections: nested objects not allowed</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connected to host %1</source> - <translation>Connecté à l'hôte %1</translation> + <source>Connections: syntax error</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connected to host</source> - <translation>Connecté à l'hôte</translation> + <source>Connections: script expected</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeEngine</name> <message> - <source>Connection to %1 closed</source> - <translation>Connexion à %1 arrêtée</translation> + <source>executeSql called outside transaction()</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connection closed</source> - <translation>Connexion arrêtée</translation> + <source>Read-only Transaction</source> + <translation type="unfinished"></translation> </message> <message> - <source>Host %1 not found</source> - <translation>Hôte %1 introuvable</translation> + <source>Version mismatch: expected %1, found %2</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connection refused to host %1</source> - <translation>Connexion à l'hôte %1 refusée</translation> + <source>SQL transaction failed</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connection timed out to host %1</source> - <translation>Connexion expirée vers l'hôte %1</translation> + <source>transaction: missing callback</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>SQL: database version mismatch</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeFlipable</name> <message> - <source>Connecting to host failed: -%1</source> - <translation>Échec de la connexion à l'hôte -%1</translation> + <source>front is a write-once property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Login failed: -%1</source> - <translation>Échec du login: -%1</translation> + <source>back is a write-once property</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeImportDatabase</name> <message> - <source>Listing directory failed: -%1</source> - <translation>Échec du listage du dossier : -%1</translation> + <source>module "%1" definition "%2" not readable</source> + <translation type="unfinished"></translation> </message> <message> - <source>Changing directory failed: -%1</source> - <translation>Échec du changement de dossier : -%1</translation> + <source>plugin cannot be loaded for module "%1": %2</source> + <translation type="unfinished"></translation> </message> <message> - <source>Downloading file failed: -%1</source> - <translation>Échec du téléchargement du fichier : -%1</translation> + <source>module "%1" plugin "%2" not found</source> + <translation type="unfinished"></translation> </message> <message> - <source>Uploading file failed: -%1</source> - <translation>Échec du télédéchargement : -%1</translation> + <source>module "%1" version %2.%3 is not installed</source> + <translation type="unfinished"></translation> </message> <message> - <source>Removing file failed: -%1</source> - <translation>Échec de la suppression d'un fichier : -%1</translation> + <source>module "%1" is not installed</source> + <translation type="unfinished"></translation> </message> <message> - <source>Creating directory failed: -%1</source> - <translation>Échec de la création d'un dossier : -%1</translation> + <source>"%1": no such directory</source> + <translation type="unfinished"></translation> </message> <message> - <source>Removing directory failed: -%1</source> - <translation>Échec de la suppression d'un dossier : -%1</translation> + <source>import "%1" has no qmldir and no namespace</source> + <translation type="unfinished"></translation> </message> <message> - <source>Not connected</source> - <translation>Non connecté</translation> + <source>- %1 is not a namespace</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connection refused for data connection</source> - <translation>Connexion donnée refusée</translation> + <source>- nested namespaces not allowed</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QHostInfo</name> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>local directory</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QHostInfoAgent</name> <message> - <source>Host not found</source> - <translation>Hôte introuvable</translation> + <source>is ambiguous. Found in %1 and in %2</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown address type</source> - <translation>Adresse de type inconnu</translation> + <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>is instantiated recursively</source> + <translation type="unfinished"></translation> </message> <message> - <source>No host name given</source> - <translation>Aucun nom d'hôte n'a été donné</translation> + <source>is not a type</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeKeyNavigationAttached</name> <message> - <source>Invalid hostname</source> - <translation>Nom d'hôte non valide</translation> + <source>KeyNavigation is only available via attached properties</source> + <translation type="unfinished"></translation> </message> </context> <context> - <name>QHttp</name> + <name>QDeclarativeKeysAttached</name> <message> - <source>Connection refused</source> - <translation>Connexion refusée</translation> + <source>Keys is only available via attached properties</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeListModel</name> <message> - <source>Host %1 not found</source> - <translation>Hôte %1 introuvable</translation> + <source>remove: index %1 out of range</source> + <translation type="unfinished"></translation> </message> <message> - <source>Wrong content length</source> - <translation>Longueur du contenu invalide</translation> + <source>insert: value is not an object</source> + <translation type="unfinished"></translation> </message> <message> - <source>HTTP request failed</source> - <translation>Échec de la requête HTTP</translation> + <source>insert: index %1 out of range</source> + <translation type="unfinished"></translation> </message> <message> - <source>Host %1 found</source> - <translation>Hôte %1 trouvé</translation> + <source>move: out of range</source> + <translation type="unfinished"></translation> </message> <message> - <source>Host found</source> - <translation>Hôte trouvé</translation> + <source>append: value is not an object</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connected to host %1</source> - <translation>Connecté à l'hôte %1</translation> + <source>set: value is not an object</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connected to host</source> - <translation>Connecté à l'hôte</translation> + <source>set: index %1 out of range</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connection to %1 closed</source> - <translation>Connexion à %1 arrêtée</translation> + <source>ListElement: cannot contain nested elements</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connection closed</source> - <translation>Connexion arrêtée</translation> + <source>ListElement: cannot use reserved "id" property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>ListElement: cannot use script for property value</source> + <translation type="unfinished"></translation> </message> <message> - <source>Request aborted</source> - <translation>Requête interrompue</translation> + <source>ListModel: undefined property '%1'</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeLoader</name> <message> - <source>No server set to connect to</source> - <translation>Aucun serveur spécifié</translation> + <source>Loader does not support loading non-visual elements.</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeParentAnimation</name> <message> - <source>Server closed connection unexpectedly</source> - <translation>Connexion interrompue par le serveur</translation> + <source>Unable to preserve appearance under complex transform</source> + <translation type="unfinished"></translation> </message> <message> - <source>Invalid HTTP response header</source> - <translation>Entête de réponse HTTP invalide</translation> + <source>Unable to preserve appearance under non-uniform scale</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown authentication method</source> - <translation>Méthode d'authentification inconnue</translation> + <source>Unable to preserve appearance under scale of 0</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeParentChange</name> <message> - <source>Invalid HTTP chunked body</source> - <translation>Fragment HTTP invalide</translation> + <source>Unable to preserve appearance under complex transform</source> + <translation type="unfinished"></translation> </message> <message> - <source>Error writing response to device</source> - <translation>Erreur lors de l'écriture de la réponse</translation> + <source>Unable to preserve appearance under non-uniform scale</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy authentication required</source> - <translation>Le proxy requiert une authentification</translation> + <source>Unable to preserve appearance under scale of 0</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeParser</name> <message> - <source>Authentication required</source> - <translation>Authentification requise</translation> + <source>Illegal unicode escape sequence</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy requires authentication</source> - <translation>Le proxy requiert une authentification</translation> + <source>Illegal character</source> + <translation type="unfinished"></translation> </message> <message> - <source>Host requires authentication</source> - <translation>L'hôte requiert une authentification</translation> + <source>Unclosed string at end of line</source> + <translation type="unfinished"></translation> </message> <message> - <source>Data corrupted</source> - <translation>Données corrompues</translation> + <source>Illegal escape squence</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown protocol specified</source> - <translation>Protocole spécifié inconnu</translation> + <source>Unclosed comment at end of file</source> + <translation type="unfinished"></translation> </message> <message> - <source>SSL handshake failed</source> - <translation>le handshake SSL a échoué</translation> + <source>Illegal syntax for exponential number</source> + <translation type="unfinished"></translation> </message> <message> - <source>Connection refused (or timed out)</source> - <translation>Connexion refusée (ou délai expiré)</translation> + <source>Identifier cannot start with numeric literal</source> + <translation type="unfinished"></translation> </message> <message> - <source>HTTPS connection requested but SSL support not compiled in</source> - <translation>Connexion HTTPS requise mais le support SSL n'est pas compilé</translation> + <source>Unterminated regular expression literal</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QHttpSocketEngine</name> <message> - <source>Did not receive HTTP response from proxy</source> - <translation>Pas de réponse HTTP de la part du proxy</translation> + <source>Invalid regular expression flag '%0'</source> + <translation type="unfinished"></translation> </message> <message> - <source>Error parsing authentication request from proxy</source> - <translation>Erreur dans le reqête d'authentification reçue du proxy</translation> + <source>Unterminated regular expression backslash sequence</source> + <translation type="unfinished"></translation> </message> <message> - <source>Authentication required</source> - <translation>Authentification requise</translation> + <source>Unterminated regular expression class</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy denied connection</source> - <translation>Le Proxy a rejeté la connexion</translation> + <source>Syntax error</source> + <translation type="unfinished"></translation> </message> <message> - <source>Error communicating with HTTP proxy</source> - <translation>Erreur de communication avec le proxy HTTP</translation> + <source>Unexpected token `%1'</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy server not found</source> - <translation>Serveur proxy introuvable</translation> + <source>Expected token `%1'</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy connection refused</source> - <translation>Connexion au proxy refusée</translation> + <source>Property value set multiple times</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy server connection timed out</source> - <translation>La connexion au serveur proxy a expiré</translation> + <source>Expected type name</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy connection closed prematurely</source> - <translation>La connexion au serveur proxy a été fermée prématurément</translation> + <source>Invalid import qualifier ID</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QIBaseDriver</name> <message> - <source>Error opening database</source> - <translation>Erreur d'ouverture de la base de données</translation> + <source>Reserved name "Qt" cannot be used as an qualifier</source> + <translation type="unfinished"></translation> </message> <message> - <source>Could not start transaction</source> - <translation>La transaction n'a pas pu être démarrée</translation> + <source>Script import qualifiers must be unique.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>Incapable de soumettre la transaction</translation> + <source>Script import requires a qualifier</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>Incapable d'annuler la transaction</translation> + <source>Library import requires a version</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QIBaseResult</name> <message> - <source>Unable to create BLOB</source> - <translation>Impossible de créer un BLOB</translation> + <source>Expected parameter type</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to write BLOB</source> - <translation>Impossible d'écrire le BLOB</translation> + <source>Invalid property type modifier</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to open BLOB</source> - <translation>Impossible d'ouvrir le BLOB</translation> + <source>Unexpected property type modifier</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to read BLOB</source> - <translation>Impossible de lire le BLOB</translation> + <source>Expected property type</source> + <translation type="unfinished"></translation> </message> <message> - <source>Could not find array</source> - <translation>Impossible de trouver le tableau</translation> + <source>Readonly not yet supported</source> + <translation type="unfinished"></translation> </message> <message> - <source>Could not get array data</source> - <translation>Impossible de trouver le tableau de données</translation> + <source>JavaScript declaration outside Script element</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativePauseAnimation</name> <message> - <source>Could not get query info</source> - <translation>Impossible d'avoir les informations sur la requête</translation> + <source>Cannot set a duration of < 0</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativePixmapCache</name> <message> - <source>Could not start transaction</source> - <translation>Impossible de démarrer la transaction</translation> + <source>Error decoding: %1: %2</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>Incapable de soumettre la transaction</translation> + <source>Failed to get image from provider: %1</source> + <translation type="unfinished"></translation> </message> <message> - <source>Could not allocate statement</source> - <translation>Impossible d'allouer la requête</translation> + <source>Cannot open: %1</source> + <translation type="unfinished"></translation> </message> <message> - <source>Could not prepare statement</source> - <translation>Impossible de préparer la requête</translation> + <source>Unknown Error loading %1</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativePropertyAnimation</name> <message> - <source>Could not describe input statement</source> - <translation>Impossible de décrire la requête</translation> + <source>Cannot set a duration of < 0</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativePropertyChanges</name> <message> - <source>Could not describe statement</source> - <translation>Impossible de décrire la requête</translation> + <source>PropertyChanges does not support creating state-specific objects.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to close statement</source> - <translation>Impossible de fermer la requête</translation> + <source>Cannot assign to non-existent property "%1"</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unable to execute query</source> - <translation>Impossible d'exécuter la requête</translation> + <source>Cannot assign to read-only property "%1"</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeTextInput</name> <message> - <source>Could not fetch next item</source> - <translation>Impossible de récuperer l'élément suivant</translation> + <source>Could not load cursor delegate</source> + <translation type="unfinished"></translation> </message> <message> - <source>Could not get statement info</source> - <translation>Impossible d'avoir les informations sur la requête</translation> + <source>Could not instantiate cursor delegate</source> + <translation type="unfinished"></translation> </message> </context> <context> - <name>QIODevice</name> + <name>QDeclarativeVME</name> <message> - <source>Permission denied</source> - <translation>Accès refusé</translation> + <source>Unable to create object of type %1</source> + <translation type="unfinished"></translation> </message> <message> - <source>Too many open files</source> - <translation>Trop de fichiers ouverts simultanément</translation> + <source>Cannot assign value %1 to property %2</source> + <translation type="unfinished"></translation> </message> <message> - <source>No such file or directory</source> - <translation>Aucun fichier ou dossier de ce nom</translation> + <source>Cannot assign object type %1 with no default method</source> + <translation type="unfinished"></translation> </message> <message> - <source>No space left on device</source> - <translation>Aucun espace disponible sur le périphérique</translation> + <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>Cannot assign an object to signal property %1</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QInputContext</name> <message> - <source>XIM</source> - <translation>XIM</translation> + <source>Cannot assign object to list</source> + <translation type="unfinished"></translation> </message> <message> - <source>XIM input method</source> - <translation>Méthode d'entrée XIM</translation> + <source>Cannot assign object to interface property</source> + <translation type="unfinished"></translation> </message> <message> - <source>Windows input method</source> - <translation>Méthode d'entrée Windows</translation> + <source>Unable to create attached object</source> + <translation type="unfinished"></translation> </message> <message> - <source>Mac OS X input method</source> - <translation>Méthode d'entrée Mac OS X</translation> + <source>Cannot set properties on %1 as it is null</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeVisualDataModel</name> <message> - <source>FEP</source> - <translation>Processeur frontal</translation> + <source>Delegate component must be Item type.</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDeclarativeXmlListModel</name> <message> - <source>S60 FEP input method</source> - <translation>Méthode de saisie processeur frontal S60</translation> + <source>Qt was built without support for xmlpatterns</source> + <translation type="unfinished"></translation> </message> </context> <context> - <name>QInputDialog</name> + <name>QDeclarativeXmlListModelRole</name> <message> - <source>Enter a value:</source> - <translation>Entrer une valeur :</translation> + <source>An XmlRole query must not start with '/'</source> + <translation type="unfinished"></translation> </message> </context> <context> - <name>QLibrary</name> + <name>QDeclarativeXmlRoleList</name> <message> - <source>QLibrary::load_sys: Cannot load %1 (%2)</source> - <translation type="obsolete">QLibrary::load_sys: Impossible de charger %1 (%2)</translation> + <source>An XmlListModel query must start with '/' or "//"</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QDial</name> <message> - <source>QLibrary::unload_sys: Cannot unload %1 (%2)</source> - <translation type="obsolete">QLibrary::unload_sys: Impossible de décharger %1 (%2)</translation> + <source>QDial</source> + <translation>QDial</translation> </message> <message> - <source>QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3)</source> - <translation type="obsolete">QLibrary::resolve_sys: Symbole "%1" non défini dans %2 (%3)</translation> + <source>SpeedoMeter</source> + <translation>Tachymètre</translation> </message> <message> - <source>Could not mmap '%1': %2</source> - <translation>Impossible d'établir la projection en mémoire de '%1' : %2</translation> + <source>SliderHandle</source> + <translation>Poignée</translation> </message> +</context> +<context> + <name>QDialog</name> <message> - <source>Plugin verification data mismatch in '%1'</source> - <translation>Données de vérification du plugin différente dans '%1'</translation> + <source>What's This?</source> + <translation>Qu'est-ce que c'est ?</translation> </message> <message> - <source>Could not unmap '%1': %2</source> - <translation>Impossible de supprimer la projection en mémoire de '%1' : %2</translation> + <source>Done</source> + <translation>Terminer</translation> </message> +</context> +<context> + <name>QDialogButtonBox</name> <message> - <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> - <translation>Le plugin '%1' utilise une bibliothèque Qt incompatible. (%2.%3.%4) [%5]</translation> + <source>OK</source> + <translation>OK</translation> </message> <message> - <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> - <translation>Le plugin '%1' utilise une bibliothèque Qt incompatible. Clé attendue "%2", reçue "%3"</translation> + <source>Save</source> + <translation>Enregistrer</translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>&Save</source> + <translation>Enregi&strer</translation> </message> <message> - <source>The shared library was not found.</source> - <translation>La bibliothèque partagée est introuvable.</translation> + <source>Open</source> + <translation>Ouvrir</translation> </message> <message> - <source>The file '%1' is not a valid Qt plugin.</source> - <translation>Le fichier '%1' n'est pas un plugin Qt valide.</translation> + <source>Cancel</source> + <translation>Annuler</translation> </message> <message> - <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source> - <translation>Le plugin '%1' utilise une bibliothèque Qt incompatible. (Il est impossible de mélanger des bibliothèques 'debug' et 'release'.)</translation> + <source>&Cancel</source> + <translation>&Annuler</translation> </message> <message> - <source>Cannot load library %1: %2</source> - <translation>Impossible de charger la bibliothèque %1 : %2</translation> + <source>Close</source> + <translation>Fermer</translation> </message> <message> - <source>Cannot unload library %1: %2</source> - <translation>Impossible de décharger la bibliothèque %1 : %2</translation> + <source>&Close</source> + <translation>&Fermer</translation> </message> <message> - <source>Cannot resolve symbol "%1" in %2: %3</source> - <translation>Impossible de résoudre le symbole "%1" dans %2 : %3</translation> + <source>Apply</source> + <translation>Appliquer</translation> </message> -</context> -<context> - <name>QLineEdit</name> <message> - <source>Select All</source> - <translation>Tout sélectionner</translation> + <source>Reset</source> + <translation>Réinitialiser</translation> </message> <message> - <source>&Undo</source> - <translation>&Annuler</translation> + <source>Help</source> + <translation>Aide</translation> </message> <message> - <source>&Redo</source> - <translation>&Rétablir</translation> + <source>Don't Save</source> + <translation>Ne pas enregistrer</translation> </message> <message> - <source>Cu&t</source> - <translation>Co&uper</translation> + <source>Discard</source> + <translation>Ne pas enregistrer</translation> </message> <message> - <source>&Copy</source> - <translation>Cop&ier</translation> + <source>&Yes</source> + <translation>&Oui</translation> </message> <message> - <source>&Paste</source> - <translation>Co&ller</translation> + <source>Yes to &All</source> + <translation>Oui à &tout</translation> </message> <message> - <source>Delete</source> - <translation>Supprimer</translation> + <source>&No</source> + <translation>&Non</translation> </message> -</context> -<context> - <name>QLocalServer</name> <message> - <source>%1: Name error</source> - <translation>%1: Erreur de nom</translation> + <source>N&o to All</source> + <translation>Non à to&ut</translation> </message> <message> - <source>%1: Permission denied</source> - <translation>%1: Permission refusée</translation> + <source>Save All</source> + <translation>Tout Enregistrer</translation> </message> <message> - <source>%1: Address in use</source> - <translation>%1: Address déjà utilisée</translation> + <source>Abort</source> + <translation>Abandonner</translation> </message> <message> - <source>%1: Unknown error %2</source> - <translation>%1: Erreur inconnue %2</translation> + <source>Retry</source> + <translation>Réessayer</translation> </message> -</context> -<context> - <name>QLocalSocket</name> <message> - <source>%1: Connection refused</source> - <translation>%1: Connexion refusée</translation> + <source>Ignore</source> + <translation>Ignorer</translation> </message> <message> - <source>%1: Remote closed</source> - <translation>%1: Connexion fermée</translation> + <source>Restore Defaults</source> + <translation>Restaurer les valeurs par défaut</translation> </message> <message> - <source>%1: Invalid name</source> - <translation>%1: Nom invalide</translation> + <source>Close without Saving</source> + <translation>Fermer sans enregistrer</translation> </message> <message> - <source>%1: Socket access error</source> - <translation>%1: Erreur d'accès au socket</translation> + <source>&OK</source> + <translation>&OK</translation> </message> +</context> +<context> + <name>QDirModel</name> <message> - <source>%1: Socket resource error</source> - <translation>%1: Erreur de ressource du socket</translation> + <source>Name</source> + <translation>Nom</translation> </message> <message> - <source>%1: Socket operation timed out</source> - <translation>%1: L'opération socket a expiré</translation> + <source>Size</source> + <translation>Taille</translation> </message> <message> - <source>%1: Datagram too large</source> - <translation>%1: Datagramme trop grand</translation> + <source>Kind</source> + <comment>Match OS X Finder</comment> + <translation>Type</translation> </message> <message> - <source>%1: Connection error</source> - <translation>%1: Erreur de connexion</translation> + <source>Type</source> + <comment>All other platforms</comment> + <translation>Type</translation> </message> <message> - <source>%1: The socket operation is not supported</source> - <translation>%1: L'opération n'est pas supportée</translation> + <source>Date Modified</source> + <translation>Dernière Modification</translation> </message> <message> - <source>%1: Unknown error</source> - <translation>%1 : erreur inconnue</translation> + <source>Kind</source> + <translation type="obsolete">Type</translation> </message> <message> - <source>%1: Unknown error %2</source> - <translation>%1: Erreur inconnue %2</translation> + <source>Type</source> + <translation type="obsolete">Type</translation> </message> </context> <context> - <name>QMYSQLDriver</name> + <name>QDockWidget</name> <message> - <source>Unable to open database '</source> - <translation>Impossible d'ouvrir la base de données '</translation> + <source>Close</source> + <translation>Fermer</translation> </message> <message> - <source>Unable to connect</source> - <translation>Impossible d'établir une connexion</translation> + <source>Dock</source> + <translation>Attacher</translation> </message> <message> - <source>Unable to begin transaction</source> - <translation>Impossible de démarrer la transaction</translation> + <source>Float</source> + <translation>Détacher</translation> </message> +</context> +<context> + <name>QDoubleSpinBox</name> <message> - <source>Unable to commit transaction</source> - <translation>Impossible de soumettre la transaction</translation> + <source>More</source> + <translation>Plus</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>Impossible d'annuler la transaction</translation> + <source>Less</source> + <translation>Moins</translation> </message> </context> <context> - <name>QMYSQLResult</name> + <name>QErrorMessage</name> <message> - <source>Unable to fetch data</source> - <translation>Impossible de récuperer des données</translation> + <source>&Show this message again</source> + <translation>&Afficher ce message de nouveau</translation> </message> <message> - <source>Unable to execute query</source> - <translation>Impossible d'exécuter la requête</translation> + <source>&OK</source> + <translation>&OK</translation> </message> <message> - <source>Unable to store result</source> - <translation>Impossible de stocker le résultat</translation> + <source>Debug Message:</source> + <translation>Message de débogage:</translation> </message> <message> - <source>Unable to prepare statement</source> - <translation>Impossible de préparer l'instruction</translation> + <source>Warning:</source> + <translation>Avertissement:</translation> </message> <message> - <source>Unable to reset statement</source> - <translation>Impossible de réinitialiser l'instruction</translation> + <source>Fatal Error:</source> + <translation>Erreur fatale:</translation> </message> +</context> +<context> + <name>QFile</name> <message> - <source>Unable to bind value</source> - <translation>Impossible d'attacher la valeur</translation> + <source>Destination file exists</source> + <translation>Le fichier destination existe</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>Impossible d'exécuter la requête</translation> + <source>Cannot remove source file</source> + <translation>Impossible de supprimer le fichier source</translation> </message> <message> - <source>Unable to bind outvalues</source> - <translation>Impossible d'attacher les valeurs de sortie</translation> + <source>Cannot open %1 for input</source> + <translation>Impossible d'ouvrir %1 pour lecture</translation> </message> <message> - <source>Unable to store statement results</source> - <translation>Impossible de stocker les résultats de la requête</translation> + <source>Cannot open for output</source> + <translation>Impossible d'ouvrir pour écriture</translation> </message> <message> - <source>Unable to execute next query</source> - <translation>Impossible d'exécuterla prochaine requête</translation> + <source>Failure to write block</source> + <translation>Impossible d'écrire un bloc</translation> </message> <message> - <source>Unable to store next result</source> - <translation>Impossible de stocker le prochain résultat</translation> + <source>Cannot create %1 for output</source> + <translation>Impossible de créer %1 pour écriture</translation> </message> -</context> -<context> - <name>QMdiArea</name> <message> - <source>(Untitled)</source> - <translation>(Sans titre)</translation> + <source>Will not rename sequential file using block copy</source> + <translation>Ne renommera pas le fichier séquentiel avec la copie bloc</translation> </message> </context> <context> - <name>QMdiSubWindow</name> + <name>QFileDialog</name> <message> - <source>%1 - [%2]</source> - <translation>%1 - [%2]</translation> + <source>Back</source> + <translation>Précédent (historique)</translation> </message> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>List View</source> + <translation>Affichage liste</translation> </message> <message> - <source>Minimize</source> - <translation>Réduire</translation> + <source>Detail View</source> + <translation>Affichage détaillé</translation> </message> <message> - <source>Restore Down</source> - <translation>Restaurer en bas</translation> + <source>Open</source> + <translation>Ouvrir</translation> </message> <message> - <source>&Restore</source> - <translation>&Restaurer</translation> + <source>&Open</source> + <translation>&Ouvrir</translation> </message> <message> - <source>&Move</source> - <translation>&Déplacer</translation> + <source>&Save</source> + <translation>&Enregistrer</translation> </message> <message> - <source>&Size</source> - <translation>&Taille</translation> + <source>&Rename</source> + <translation>&Renommer</translation> </message> <message> - <source>Mi&nimize</source> - <translation>Réd&uire</translation> + <source>&Delete</source> + <translation>Suppri&mer</translation> </message> <message> - <source>Ma&ximize</source> - <translation>Ma&ximiser</translation> + <source>Show &hidden files</source> + <translation>Afficher les fic&hiers cachés</translation> </message> <message> - <source>Stay on &Top</source> - <translation>&Rester au premier plan</translation> - </message> + <source>Directories</source> + <translation>Dossiers</translation> + </message> <message> - <source>&Close</source> - <translation>&Fermer</translation> + <source>Recent Places</source> + <translation>Emplacements récents</translation> </message> <message> - <source>- [%1]</source> - <translation>- [%1]</translation> + <source>All Files (*)</source> + <translation>Tous les fichiers (*)</translation> </message> <message> - <source>Maximize</source> - <translation>Maximiser</translation> + <source>%1 already exists. +Do you want to replace it?</source> + <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser ?</translation> </message> <message> - <source>Unshade</source> - <translation>Restaurer</translation> + <source>%1 +File not found. +Please verify the correct file name was given.</source> + <translation>%1 +Fichier introuvable. +Veuillez vérifier que le nom du fichier est correct.</translation> </message> <message> - <source>Shade</source> - <translation>Ombrer</translation> + <source>My Computer</source> + <translation>Poste de travail</translation> </message> <message> - <source>Restore</source> - <translation>Restaurer</translation> + <source>Parent Directory</source> + <translation>Dossier parent</translation> </message> <message> - <source>Help</source> - <translation>Aide</translation> + <source>Files of type:</source> + <translation>Fichiers de type :</translation> </message> <message> - <source>Menu</source> - <translation>Menu</translation> + <source>Directory:</source> + <translation>Dossier :</translation> </message> -</context> -<context> - <name>QMenu</name> <message> - <source>Close</source> - <translation>Fermer</translation> + <source> +File not found. +Please verify the correct file name was given</source> + <translation type="obsolete"> +Fichier introuvable. +Veuillez vérifier que le nom du fichier est correct</translation> </message> <message> - <source>Open</source> - <translation>Ouvrir</translation> + <source>%1 +Directory not found. +Please verify the correct directory name was given.</source> + <translation>%1 +Dossier introuvable. +Veuillez vérifier que le nom du dossier est correct.</translation> </message> <message> - <source>Execute</source> - <translation>Exécuter</translation> + <source>'%1' is write protected. +Do you want to delete it anyway?</source> + <translation>'%1' est protégé en écriture. +Voulez-vous quand même le supprimer ?</translation> </message> -</context> -<context> - <name>QMenuBar</name> <message> - <source>About</source> - <translation type="obsolete">A propos</translation> + <source>Are sure you want to delete '%1'?</source> + <translation>Etes-vous sûr de vouloir supprimer '%1' ?</translation> </message> <message> - <source>Config</source> - <translation type="obsolete">Configuration</translation> + <source>Could not delete directory.</source> + <translation>Impossible de supprimer le dossier.</translation> </message> <message> - <source>Preference</source> - <translation type="obsolete">Préférence</translation> + <source>All Files (*.*)</source> + <translation>Tous les fichiers (*.*)</translation> </message> <message> - <source>Options</source> - <translation type="obsolete">Options</translation> + <source>Save As</source> + <translation>Enregistrer sous</translation> </message> <message> - <source>Setting</source> - <translation type="obsolete">Paramètre</translation> + <source>Drive</source> + <translation>Unité</translation> </message> <message> - <source>Setup</source> - <translation type="obsolete">Réglage</translation> + <source>File</source> + <translation>Fichier</translation> </message> <message> - <source>Quit</source> - <translation type="obsolete">Quitter</translation> + <source>File Folder</source> + <comment>Match Windows Explorer</comment> + <translation>Fichier Dossier</translation> </message> <message> - <source>Exit</source> - <translation type="obsolete">Quitter</translation> + <source>Folder</source> + <comment>All other platforms</comment> + <translation>Dossier</translation> </message> <message> - <source>About %1</source> - <translation type="obsolete">A propos de %1</translation> + <source>Alias</source> + <comment>Mac OS X Finder</comment> + <translation>Alias</translation> </message> <message> - <source>About Qt</source> - <translation type="obsolete">À propos de Qt</translation> + <source>Shortcut</source> + <comment>All other platforms</comment> + <translation>Raccourci</translation> </message> <message> - <source>Preferences</source> - <translation type="obsolete">Préférences</translation> + <source>Unknown</source> + <translation>Inconnu</translation> </message> <message> - <source>Quit %1</source> - <translation type="obsolete">Quitter %1</translation> + <source>Find Directory</source> + <translation>Chercher dans le dossier</translation> </message> <message> - <source>Actions</source> - <translation>Actions</translation> + <source>Show </source> + <translation>Afficher</translation> </message> -</context> -<context> - <name>QMessageBox</name> <message> - <source>OK</source> - <translation>OK</translation> + <source>Forward</source> + <translation>Successeur</translation> </message> <message> - <source>About Qt</source> - <translation>À propos de Qt</translation> + <source>New Folder</source> + <translation>Nouveau dossier</translation> </message> <message> - <source>Help</source> - <translation>Aide</translation> + <source>&New Folder</source> + <translation>&Nouveau dossier</translation> </message> <message> - <source><p>This program uses Qt version %1.</p></source> - <translation type="obsolete"><p>Ce programme utilise la version %1 de Qt.</p></translation> + <source>&Choose</source> + <translation>&Choisir</translation> </message> <message> - <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com/</a> for more information.</p></source> - <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'applications multi-platformes.</p><p>Qt fournit la portabilité du code source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et toutes les variantes commerciales majeures d'Unix. Qt est aussi disponible pour les systèmes embarqués sous le nom Qtopia Core.</p><p>Qt est un produit de Trolltech. <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></translation> + <source>Remove</source> + <translation>Supprimer</translation> </message> <message> - <source>Show Details...</source> - <translation>Montrer les détails...</translation> + <source>File &name:</source> + <translation>&Nom de fichier :</translation> </message> <message> - <source>Hide Details...</source> - <translation>Cacher les détails...</translation> + <source>Look in:</source> + <translation>Voir dans:</translation> </message> <message> - <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1693"/> - <source><h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><h3>À propos de Qt</h3><p>Ce programme utilise Qt version %1.</p><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> + <source>Create New Folder</source> + <translation>Créer un nouveau dossier</translation> </message> <message> - <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un framework de développement d'applications multi-plateforme.</p><p>Qt fournit la portabilité du code source surMS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, et toutes les variantes majeures d'Unix. Qt est aussi disponible pour l'embarqué avec Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt est un produit de Nokia. Allez à <a href="http://qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> + <source>File Folder</source> + <translation type="obsolete">Fichier Dossier</translation> </message> <message> - <source><p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p></source> - <translation type="obsolete"><p>Ce programme utilise Qt Open Source Edition version %1.</p><p>Qt Open Source Edition est prévu pour le développement d'applications Open Source. Vous devez avoir un license commerciale de Qt pour développer des applications propiétaires (Closed Source).</p><p>Vous pouvez aller sur <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> pour plus d'informations sur les licenses Qt.</p></translation> + <source>Folder</source> + <translation type="obsolete">Dossier</translation> </message> <message> - <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt Embedded.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'application multi-plateforme.</p><p>Qt fournit la portabilité de votre source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, toutes les variantes majeures d'Unix. Qt est aussi disponible pour les périphériques embarqués avec Qt Embedded.</p><p>Qt est un produit de Trolltech. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> + <source>Alias</source> + <translation type="obsolete">Alias</translation> </message> <message> - <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> - <translation><h3>À propos de Qt</h3><p>Ce programme utilise Qt version %1.</p></translation> + <source>Shortcut</source> + <translation type="obsolete">Raccourci</translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> + <source>Go back</source> + <translation>Précédent</translation> </message> -</context> -<context> - <name>QMultiInputContext</name> <message> - <source>Select IM</source> - <translation>Sélectionner IM</translation> + <source>Go forward</source> + <translation>Suivant</translation> </message> -</context> -<context> - <name>QMultiInputContextPlugin</name> <message> - <source>Multiple input method switcher</source> - <translation>Sélectionneur de méthode de saisie</translation> + <source>Go to the parent directory</source> + <translation>Dossier parent</translation> </message> <message> - <source>Multiple input method switcher that uses the context menu of the text widgets</source> - <translation>Sélectionneur de méthode de saisie qui utilise le menu contextuel des widgets de texte</translation> + <source>Create a New Folder</source> + <translation>Créer un nouveau dossier</translation> </message> -</context> -<context> - <name>QNativeSocketEngine</name> <message> - <source>The remote host closed the connection</source> - <translation>L'hôte distant a fermé la connexion</translation> + <source>Change to list view mode</source> + <translation>Affichage liste</translation> </message> <message> - <source>Network operation timed out</source> - <translation>L'opération réseau a expiré</translation> + <source>Change to detail view mode</source> + <translation>Affichage détaillé</translation> </message> +</context> +<context> + <name>QFileSystemModel</name> <message> - <source>Out of resources</source> - <translation>Manque de ressources</translation> + <source>%1 TB</source> + <translation>%1 To</translation> </message> <message> - <source>Unsupported socket operation</source> - <translation>Opération socket non supportée</translation> + <source>%1 GB</source> + <translation>%1 Go</translation> </message> <message> - <source>Protocol type not supported</source> - <translation>Protocol non géré</translation> + <source>%1 MB</source> + <translation>%1 Mo</translation> </message> <message> - <source>Invalid socket descriptor</source> - <translation>Descripteur de socket invalide</translation> + <source>%1 KB</source> + <translation>%1 Ko</translation> </message> <message> - <source>Network unreachable</source> - <translation>Réseau impossible à rejoindre</translation> + <source>%1 bytes</source> + <translation>%1 octets</translation> </message> <message> - <source>Permission denied</source> - <translation>Accès refusé</translation> + <source>Invalid filename</source> + <translation>Nom de fichier invalide</translation> </message> <message> - <source>Connection timed out</source> - <translation>Connexion expirée</translation> + <source><b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.</source> + <translation><b>Le nom "%1" ne peut pas être utilisé.</b><p>Essayez un autre nom avec moins de caractères ou sans ponctuation.</translation> </message> <message> - <source>Connection refused</source> - <translation>Connexion refusée</translation> + <source>Name</source> + <translation>Nom</translation> </message> <message> - <source>The bound address is already in use</source> - <translation>L'adresse liée est déjà en usage</translation> + <source>Size</source> + <translation>Taille</translation> </message> <message> - <source>The address is not available</source> - <translation>L'adresse n'est pas disponible</translation> + <source>Kind</source> + <comment>Match OS X Finder</comment> + <translation>Type</translation> </message> <message> - <source>The address is protected</source> - <translation>L'adresse est protégée</translation> + <source>Type</source> + <comment>All other platforms</comment> + <translation>Type</translation> </message> <message> - <source>Unable to send a message</source> - <translation>Impossible d'envoyer un message</translation> + <source>Date Modified</source> + <translation>Dernière modification</translation> </message> <message> - <source>Unable to receive a message</source> - <translation>Impossible de recevoir un message</translation> + <source>My Computer</source> + <translation>Poste de travail</translation> </message> <message> - <source>Unable to write</source> - <translation>Impossible d'écrire</translation> + <source>Computer</source> + <translation>Ordinateur</translation> </message> <message> - <source>Network error</source> - <translation>Erreur réseau</translation> - </message> - <message> - <source>Another socket is already listening on the same port</source> - <translation>Un autre socket écoute déjà sur le même port</translation> - </message> - <message> - <source>Unable to initialize non-blocking socket</source> - <translation>Impossible d'initialiser le socket asynchrone</translation> + <source>Kind</source> + <translation type="obsolete">Type</translation> </message> <message> - <source>Unable to initialize broadcast socket</source> - <translation>Impossible d'initialiser le socket broadcast</translation> + <source>Type</source> + <translation type="obsolete">Type</translation> </message> <message> - <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> - <translation>Tentative d'utiliser un socket IPv6 sur une plateforme qui ne supporte pas IPv6</translation> + <source>%1 byte(s)</source> + <translation>%1 octet(s)</translation> </message> +</context> +<context> + <name>QFontDatabase</name> <message> - <source>Host unreachable</source> - <translation>Hôte inaccessible</translation> + <source>Normal</source> + <translation>Normal</translation> </message> <message> - <source>Datagram was too large to send</source> - <translation>Le datagramme était trop grand pour être envoyé</translation> + <source>Bold</source> + <translation>Gras</translation> </message> <message> - <source>Operation on non-socket</source> - <translation>Operation sur non-socket</translation> + <source>Demi Bold</source> + <translation>Semi Gras</translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>Black</source> + <translation>Noir</translation> </message> <message> - <source>The proxy type is invalid for this operation</source> - <translation>Le type de proxy est invalide pour cette opération</translation> + <source>Demi</source> + <translation>Demi</translation> </message> -</context> -<context> - <name>QNetworkAccessCacheBackend</name> <message> - <source>Error opening %1</source> - <translation>Erreur lors de l'ouverture de %1</translation> + <source>Light</source> + <translation>Léger</translation> </message> -</context> -<context> - <name>QNetworkAccessFileBackend</name> <message> - <source>Request for opening non-local file %1</source> - <translation>Requête d'ouverture de fichier distant %1</translation> + <source>Italic</source> + <translation>Italique</translation> </message> <message> - <source>Error opening %1: %2</source> - <translation>Erreur lors de l'ouverture de %1 : %2</translation> + <source>Oblique</source> + <translation>Oblique</translation> </message> <message> - <source>Write error writing to %1: %2</source> - <translation>Erreur d'écriture de %1 : %2</translation> + <source>Any</source> + <translation>Tous</translation> </message> <message> - <source>Cannot open %1: Path is a directory</source> - <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> + <source>Latin</source> + <translation>Latin</translation> </message> <message> - <source>Read error reading from %1: %2</source> - <translation>Erreur de lecture de %1 : %2</translation> + <source>Greek</source> + <translation>Grec</translation> </message> -</context> -<context> - <name>QNetworkAccessFtpBackend</name> <message> - <source>No suitable proxy found</source> - <translation>Aucun proxy trouvé</translation> + <source>Cyrillic</source> + <translation>Cyrillique</translation> </message> <message> - <source>Cannot open %1: is a directory</source> - <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> + <source>Armenian</source> + <translation>Arménien</translation> </message> <message> - <source>Logging in to %1 failed: authentication required</source> - <translation>Connexion à %1 a échoué : authentification requise</translation> + <source>Hebrew</source> + <translation>Hébreu</translation> </message> <message> - <source>Error while downloading %1: %2</source> - <translation>Erreur lors du téléchargement de %1 : %2</translation> + <source>Arabic</source> + <translation>Arabe</translation> </message> <message> - <source>Error while uploading %1: %2</source> - <translation>Erreur lors de l'envoi de %1 : %2</translation> + <source>Syriac</source> + <translation>Syriaque</translation> </message> -</context> -<context> - <name>QNetworkAccessHttpBackend</name> <message> - <source>No suitable proxy found</source> - <translation>Aucun proxy trouvé</translation> + <source>Thaana</source> + <translation>Thaana</translation> </message> -</context> -<context> - <name>QNetworkReply</name> <message> - <source>Error downloading %1 - server replied: %2</source> - <translation>Erreur lors du téléchargement de %1 - le serveur a répondu: %2</translation> + <source>Devanagari</source> + <translation>Devanagari</translation> </message> <message> - <source>Protocol "%1" is unknown</source> - <translation>Le protocole "%1" est inconnu</translation> + <source>Bengali</source> + <translation>Bengali</translation> </message> -</context> -<context> - <name>QNetworkReplyImpl</name> <message> - <source>Operation canceled</source> - <translation>Opération annulée</translation> + <source>Gurmukhi</source> + <translation>Gurmukhi</translation> </message> -</context> -<context> - <name>QOCIDriver</name> <message> - <source>Unable to logon</source> - <translation>Impossible d'ouvrir une session</translation> + <source>Gujarati</source> + <translation>Gujarati</translation> </message> <message> - <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+1925"/> - <source>Unable to initialize</source> - <comment>QOCIDriver</comment> - <translation>L'initialisation a échoué</translation> + <source>Oriya</source> + <translation>Oriya</translation> </message> <message> - <source>Unable to begin transaction</source> - <translation>Impossible de démarrer la transaction</translation> + <source>Tamil</source> + <translation>Tamil</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>Impossible d'enregistrer la transaction</translation> + <source>Telugu</source> + <translation>Telugu</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>Impossible d'annuler la transaction</translation> + <source>Kannada</source> + <translation>Kannada</translation> </message> <message> - <source>Unable to initialize</source> - <translation>L'initialisation a échoué</translation> + <source>Malayalam</source> + <translation>Malayalam</translation> </message> -</context> -<context> - <name>QOCIResult</name> <message> - <source>Unable to bind column for batch execute</source> - <translation>Impossible d'attacher la colonne pour une execution batch</translation> + <source>Sinhala</source> + <translation>Sinhala</translation> </message> <message> - <source>Unable to execute batch statement</source> - <translation>Impossible d'exécuter l'instruction batch</translation> + <source>Thai</source> + <translation>Thaï</translation> </message> <message> - <source>Unable to goto next</source> - <translation>Impossible de passer au suivant</translation> + <source>Lao</source> + <translatorcomment>Lao/Laotien sont corrects</translatorcomment> + <translation>Lao</translation> </message> <message> - <source>Unable to alloc statement</source> - <translation>Impossible d'allouer la requête</translation> + <source>Tibetan</source> + <translation>Tibétain</translation> </message> <message> - <source>Unable to prepare statement</source> - <translation>Impossible de préparer la requête</translation> + <source>Myanmar</source> + <translatorcomment>Myanmar/Birman sont corrects mais Myanmar semble plus adapté pour la langue écrite</translatorcomment> + <translation>Myanmar</translation> </message> <message> - <source>Unable to bind value</source> - <translation>Impossible d'attacher la valeur</translation> + <source>Georgian</source> + <translation>Géorgien</translation> </message> <message> - <source>Unable to execute select statement</source> - <translation type="obsolete">Impossible d'exéctuer la requête select</translation> + <source>Khmer</source> + <translation>Khmer</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>Impossible d'exéctuer la requête</translation> + <source>Simplified Chinese</source> + <translation>Chinois Simplifié</translation> </message> <message> - <source>Unable to get statement type</source> - <translation>Impossible d'obtenir le type de la requête</translation> + <source>Traditional Chinese</source> + <translation>Chinois Traditionnel</translation> </message> -</context> -<context> - <name>QODBCDriver</name> <message> - <source>Unable to connect</source> - <translation>Incapable d'établir une connexion</translation> + <source>Japanese</source> + <translation>Japonais</translation> </message> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1791"/> - <source>Unable to connect - Driver doesn't support all needed functionality</source> - <translation>Impossible de se connecter - Le pilote ne supporte pas toutes les fonctionnalités nécessaires</translation> + <source>Korean</source> + <translation>Coréen</translation> </message> <message> - <source>Unable to disable autocommit</source> - <translation>Impossible de désactiver l'autocommit</translation> + <source>Vietnamese</source> + <translation>Vietnamien</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>Incapable de soumettre la transaction</translation> + <source>Symbol</source> + <translation>Symbole</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>Incapable d'annuler la transaction</translation> + <source>Ogham</source> + <translation>Ogham</translation> </message> <message> - <source>Unable to enable autocommit</source> - <translation>Impossible d'activer l'autocommit</translation> + <source>Runic</source> + <translation>Runique</translation> </message> <message> - <source>Unable to connect - Driver doesn't support all functionality required</source> - <translation>Impossible de se connecter - Le pilote ne supporte pas toutes les fonctionnalités nécessaires</translation> + <source>N'Ko</source> + <translation>N'Ko</translation> </message> </context> <context> - <name>QODBCResult</name> + <name>QFontDialog</name> <message> - <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> - <translation>QODBCResult::reset: Impossible d'utiliser 'SQL_CURSOR_STATIC' comme attribut de requête. Veuillez vérifier la configuration de votre pilote ODBC</translation> + <source>&Font</source> + <translation>&Police</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>Impossible d'exéctuer la requête</translation> + <source>Font st&yle</source> + <translation>St&yle de police</translation> </message> <message> - <source>Unable to fetch next</source> - <translation>Impossible de récupérer le suivant</translation> + <source>&Size</source> + <translation>&Taille</translation> </message> <message> - <source>Unable to prepare statement</source> - <translation>Impossible de préparer la requête</translation> + <source>Effects</source> + <translation>Effets</translation> </message> <message> - <source>Unable to bind variable</source> - <translation>Impossible d'attacher la variable</translation> + <source>Stri&keout</source> + <translation>&Barré</translation> </message> <message> - <source>Unable to fetch last</source> - <translation>Impossible de récupérer le dernier</translation> + <source>&Underline</source> + <translation>&Souligné</translation> </message> <message> - <source>Unable to fetch</source> - <translation>Impossible de récupérer</translation> + <source>Sample</source> + <translation>Exemple</translation> </message> <message> - <source>Unable to fetch first</source> - <translation>Impossible de récupérer le premier</translation> + <source>Select Font</source> + <translation>Choisir une police</translation> </message> <message> - <source>Unable to fetch previous</source> - <translation>Impossible de récupérer le précedent</translation> - </message> + <source>Wr&iting System</source> + <translation>&Système d'écriture</translation> + </message> </context> <context> - <name>QObject</name> - <message> - <location filename="../src/gui/util/qdesktopservices_mac.cpp" line="+165"/> - <source>Home</source> - <translation>Début</translation> - </message> + <name>QFtp</name> <message> - <source>Operation not supported on %1</source> - <translation>Opération non supportée sur %1</translation> + <source>Host %1 found</source> + <translation>Hôte %1 trouvé</translation> </message> <message> - <source>Invalid URI: %1</source> - <translation>URI invalide : %1</translation> + <source>Host found</source> + <translation>Hôte trouvé</translation> </message> <message> - <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+175"/> - <source>Write error writing to %1: %2</source> - <translation>Erreur d'écriture sur %1 : %2</translation> + <source>Connected to host %1</source> + <translation>Connecté à l'hôte %1</translation> </message> <message> - <location line="+57"/> - <source>Read error reading from %1: %2</source> - <translation>Erreur de lecture sur %1 : %2</translation> + <source>Connected to host</source> + <translation>Connecté à l'hôte</translation> </message> <message> - <source>Socket error on %1: %2</source> - <translation>Erreur de socket sur %1 : %2</translation> + <source>Connection to %1 closed</source> + <translation>Connexion à %1 arrêtée</translation> </message> <message> - <source>Remote host closed the connection prematurely on %1</source> - <translation>L'hôte distant a fermé sa connexion de façon prématurée sur %1</translation> + <source>Connection closed</source> + <translation>Connexion arrêtée</translation> </message> <message> - <location line="+99"/> - <source>Protocol error: packet of size 0 received</source> - <translation>Erreur de protocole: paquet de taille 0 reçu</translation> + <source>Host %1 not found</source> + <translation>Hôte %1 introuvable</translation> </message> <message> - <source>No host name given</source> - <translation>Nom d'hôte manquant</translation> + <source>Connection refused to host %1</source> + <translation>Connexion à l'hôte %1 refusée</translation> </message> <message> - <source>Invalid hostname</source> - <translation>Nom d'hôte non valide</translation> + <source>Connection timed out to host %1</source> + <translation>Connexion expirée vers l'hôte %1</translation> </message> -</context> -<context> - <name>QPPDOptionsModel</name> <message> - <source>Name</source> - <translation>Nom</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> <message> - <source>Value</source> - <translation>Valeur</translation> + <source>Connecting to host failed: +%1</source> + <translation>Échec de la connexion à l'hôte +%1</translation> </message> -</context> -<context> - <name>QPSQLDriver</name> <message> - <source>Unable to connect</source> - <translation>Impossible d'établir une connexion</translation> + <source>Login failed: +%1</source> + <translation>Échec du login: +%1</translation> </message> <message> - <source>Could not begin transaction</source> - <translation>Impossible de démarrer la transaction</translation> + <source>Listing directory failed: +%1</source> + <translation>Échec du listage du dossier : +%1</translation> </message> <message> - <source>Could not commit transaction</source> - <translation>Impossible de soumettre la transaction</translation> + <source>Changing directory failed: +%1</source> + <translation>Échec du changement de dossier : +%1</translation> </message> <message> - <source>Could not rollback transaction</source> - <translation>Impossible d'annuler la transaction</translation> + <source>Downloading file failed: +%1</source> + <translation>Échec du téléchargement du fichier : +%1</translation> </message> <message> - <source>Unable to subscribe</source> - <translation>Impossible de s'inscrire</translation> + <source>Uploading file failed: +%1</source> + <translation>Échec du télédéchargement : +%1</translation> </message> <message> - <source>Unable to unsubscribe</source> - <translation>Impossible de se désinscrire</translation> + <source>Removing file failed: +%1</source> + <translation>Échec de la suppression d'un fichier : +%1</translation> </message> -</context> -<context> - <name>QPSQLResult</name> <message> - <source>Unable to create query</source> - <translation>Impossible de créer la requête</translation> + <source>Creating directory failed: +%1</source> + <translation>Échec de la création d'un dossier : +%1</translation> </message> <message> - <source>Unable to prepare statement</source> - <translation>Impossible de préparer la requête</translation> + <source>Removing directory failed: +%1</source> + <translation>Échec de la suppression d'un dossier : +%1</translation> </message> -</context> -<context> - <name>QPageSetupWidget</name> <message> - <source>Centimeters (cm)</source> - <translation>Centimètres (cm)</translation> + <source>Not connected</source> + <translation>Non connecté</translation> </message> <message> - <source>Millimeters (mm)</source> - <translation>Millimètres (mm)</translation> + <source>Connection refused for data connection</source> + <translation>Connexion donnée refusée</translation> </message> +</context> +<context> + <name>QGstreamerPlayerSession</name> <message> - <source>Inches (in)</source> - <translation>Pouces (in)</translation> + <source>Unable to play %1</source> + <translation>Impossible de lire %1</translation> </message> +</context> +<context> + <name>QHostInfo</name> <message> - <source>Points (pt)</source> - <translation>Points (pts)</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> <message> - <source>Form</source> - <translation>Formulaire</translation> + <source>No host name given</source> + <translation>Aucun nom d'hôte n'a été donné</translation> </message> +</context> +<context> + <name>QHostInfoAgent</name> <message> - <source>Paper</source> - <translation>Papier</translation> + <source>Host not found</source> + <translation>Hôte introuvable</translation> </message> <message> - <source>Page size:</source> - <translation>Dimensions :</translation> + <source>Unknown address type</source> + <translation>Adresse de type inconnu</translation> </message> <message> - <source>Width:</source> - <translation>Largeur :</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> <message> - <source>Height:</source> - <translation>Hauteur :</translation> + <source>No host name given</source> + <translation>Aucun nom d'hôte n'a été donné</translation> </message> <message> - <source>Paper source:</source> - <translation>Source du papier :</translation> + <source>Invalid hostname</source> + <translation>Nom d'hôte non valide</translation> </message> +</context> +<context> + <name>QHttp</name> <message> - <source>Orientation</source> - <translation>Orientation</translation> + <source>Connection refused</source> + <translation>Connexion refusée</translation> </message> <message> - <source>Portrait</source> - <translation>Portrait</translation> + <source>Host %1 not found</source> + <translation>Hôte %1 introuvable</translation> </message> <message> - <source>Landscape</source> - <translation>Paysage</translation> + <source>Wrong content length</source> + <translation>Longueur du contenu invalide</translation> </message> <message> - <source>Reverse landscape</source> - <translation>Paysage inversé</translation> + <source>HTTP request failed</source> + <translation>Échec de la requête HTTP</translation> </message> <message> - <source>Reverse portrait</source> - <translation>Portrait inversé</translation> + <source>Host %1 found</source> + <translation>Hôte %1 trouvé</translation> </message> <message> - <source>Margins</source> - <translation>Marges</translation> + <source>Host found</source> + <translation>Hôte trouvé</translation> </message> <message> - <source>top margin</source> - <translation>marge haute</translation> + <source>Connected to host %1</source> + <translation>Connecté à l'hôte %1</translation> </message> <message> - <source>left margin</source> - <translation>marge gauche</translation> + <source>Connected to host</source> + <translation>Connecté à l'hôte</translation> </message> <message> - <source>right margin</source> - <translation>marge droite</translation> + <source>Connection to %1 closed</source> + <translation>Connexion à %1 arrêtée</translation> </message> <message> - <source>bottom margin</source> - <translation>marge basse</translation> + <source>Connection closed</source> + <translation>Connexion arrêtée</translation> </message> -</context> -<context> - <name>QPluginLoader</name> <message> <source>Unknown error</source> <translation>Erreur inconnue</translation> </message> <message> - <source>The plugin was not loaded.</source> - <translation>Le plugin n'a pas été chargé.</translation> + <source>Request aborted</source> + <translation>Requête interrompue</translation> </message> -</context> -<context> - <name>QPrintDialog</name> <message> - <source>locally connected</source> - <translation>connecté en local</translation> + <source>No server set to connect to</source> + <translation>Aucun serveur spécifié</translation> </message> <message> - <source>unknown</source> - <translation>inconnu</translation> + <source>Server closed connection unexpectedly</source> + <translation>Connexion interrompue par le serveur</translation> </message> <message> - <source>OK</source> - <translation>OK</translation> + <source>Invalid HTTP response header</source> + <translation>Entête de réponse HTTP invalide</translation> </message> <message> - <source>Cancel</source> - <translation type="obsolete">Annuler</translation> + <source>Unknown authentication method</source> + <translation>Méthode d'authentification inconnue</translation> </message> <message> - <source>Print in color if available</source> - <translation type="obsolete">Imprimer en couleur si possible</translation> + <source>Invalid HTTP chunked body</source> + <translation>Fragment HTTP invalide</translation> </message> <message> - <source>Print all</source> - <translation>Imprimer tout</translation> + <source>Error writing response to device</source> + <translation>Erreur lors de l'écriture de la réponse</translation> </message> <message> - <source>Print range</source> - <translation>Imprimer la sélection</translation> + <source>Proxy authentication required</source> + <translation>Le proxy requiert une authentification</translation> </message> <message> - <source>Print last page first</source> - <translation type="obsolete">Imprimer d'abord la dernière page</translation> + <source>Authentication required</source> + <translation>Authentification requise</translation> </message> <message> - <source>Number of copies:</source> - <translation type="obsolete">Nombre de copies :</translation> + <source>Proxy requires authentication</source> + <translation>Le proxy requiert une authentification</translation> </message> <message> - <source>Paper format</source> - <translation type="obsolete">Format du papier</translation> + <source>Host requires authentication</source> + <translation>L'hôte requiert une authentification</translation> </message> <message> - <source>Portrait</source> - <translation type="obsolete">Portrait</translation> + <source>Data corrupted</source> + <translation>Données corrompues</translation> </message> <message> - <source>Landscape</source> - <translation type="obsolete">Paysage</translation> + <source>Unknown protocol specified</source> + <translation>Protocole spécifié inconnu</translation> </message> <message> - <source>A0 (841 x 1189 mm)</source> - <translation>A0 (841 x 1189 mm)</translation> + <source>SSL handshake failed</source> + <translation>le handshake SSL a échoué</translation> </message> <message> - <source>A1 (594 x 841 mm)</source> - <translation>A1 (594 x 841 mm)</translation> + <source>Connection refused (or timed out)</source> + <translation>Connexion refusée (ou délai expiré)</translation> </message> <message> - <source>A2 (420 x 594 mm)</source> - <translation>A2 (420 x 594 mm)</translation> + <source>HTTPS connection requested but SSL support not compiled in</source> + <translation>Connexion HTTPS requise mais le support SSL n'est pas compilé</translation> </message> +</context> +<context> + <name>QHttpSocketEngine</name> <message> - <source>A3 (297 x 420 mm)</source> - <translation>A3 (297 x 420 mm)</translation> + <source>Did not receive HTTP response from proxy</source> + <translation>Pas de réponse HTTP de la part du proxy</translation> </message> <message> - <source>A5 (148 x 210 mm)</source> - <translation>A5 (148 x 210 mm)</translation> + <source>Error parsing authentication request from proxy</source> + <translation>Erreur dans le reqête d'authentification reçue du proxy</translation> </message> <message> - <source>A6 (105 x 148 mm)</source> - <translation>A6 (105 x 148 mm)</translation> + <source>Authentication required</source> + <translation>Authentification requise</translation> </message> <message> - <source>A7 (74 x 105 mm)</source> - <translation>A7 (74 x 105 mm)</translation> + <source>Proxy denied connection</source> + <translation>Le Proxy a rejeté la connexion</translation> </message> <message> - <source>A8 (52 x 74 mm)</source> - <translation>A8 (52 x 74 mm)</translation> + <source>Error communicating with HTTP proxy</source> + <translation>Erreur de communication avec le proxy HTTP</translation> </message> <message> - <source>A9 (37 x 52 mm)</source> - <translation>A9 (37 x 52 mm)</translation> + <source>Proxy server not found</source> + <translation>Serveur proxy introuvable</translation> </message> <message> - <source>B0 (1000 x 1414 mm)</source> - <translation>B0 (1000 x 1414 mm)</translation> + <source>Proxy connection refused</source> + <translation>Connexion au proxy refusée</translation> </message> <message> - <source>B1 (707 x 1000 mm)</source> - <translation>B1 (707 x 1000 mm)</translation> + <source>Proxy server connection timed out</source> + <translation>La connexion au serveur proxy a expiré</translation> </message> <message> - <source>B2 (500 x 707 mm)</source> - <translation>B2 (500 x 707 mm)</translation> + <source>Proxy connection closed prematurely</source> + <translation>La connexion au serveur proxy a été fermée prématurément</translation> </message> +</context> +<context> + <name>QIBaseDriver</name> <message> - <source>B3 (353 x 500 mm)</source> - <translation>B3 (353 x 500 mm)</translation> + <source>Error opening database</source> + <translation>Erreur d'ouverture de la base de données</translation> </message> <message> - <source>B4 (250 x 353 mm)</source> - <translation>B4 (250 x 353 mm)</translation> + <source>Could not start transaction</source> + <translation>La transaction n'a pas pu être démarrée</translation> </message> <message> - <source>B6 (125 x 176 mm)</source> - <translation>B6 (125 x 176 mm)</translation> + <source>Unable to commit transaction</source> + <translation>Incapable de soumettre la transaction</translation> </message> <message> - <source>B7 (88 x 125 mm)</source> - <translation>B7 (88 x 125 mm)</translation> + <source>Unable to rollback transaction</source> + <translation>Incapable d'annuler la transaction</translation> </message> +</context> +<context> + <name>QIBaseResult</name> <message> - <source>B8 (62 x 88 mm)</source> - <translation>B8 (62 x 88 mm)</translation> + <source>Unable to create BLOB</source> + <translation>Impossible de créer un BLOB</translation> </message> <message> - <source>B9 (44 x 62 mm)</source> - <translation>B9 (44 x 62 mm)</translation> + <source>Unable to write BLOB</source> + <translation>Impossible d'écrire le BLOB</translation> </message> <message> - <source>B10 (31 x 44 mm)</source> - <translation>B10 (31 x 44 mm)</translation> + <source>Unable to open BLOB</source> + <translation>Impossible d'ouvrir le BLOB</translation> </message> <message> - <source>C5E (163 x 229 mm)</source> - <translation>C5E (163 x 229 mm)</translation> + <source>Unable to read BLOB</source> + <translation>Impossible de lire le BLOB</translation> </message> <message> - <source>DLE (110 x 220 mm)</source> - <translation>DLE (110 x 220 mm)</translation> + <source>Could not find array</source> + <translation>Impossible de trouver le tableau</translation> </message> <message> - <source>Folio (210 x 330 mm)</source> - <translation>Folio (210 x 330 mm)</translation> + <source>Could not get array data</source> + <translation>Impossible de trouver le tableau de données</translation> </message> <message> - <source>Ledger (432 x 279 mm)</source> - <translation>Ledger (432 x 279 mm)</translation> + <source>Could not get query info</source> + <translation>Impossible d'avoir les informations sur la requête</translation> </message> <message> - <source>Tabloid (279 x 432 mm)</source> - <translation>Tabloïde (279 x 432 mm)</translation> + <source>Could not start transaction</source> + <translation>Impossible de démarrer la transaction</translation> </message> <message> - <source>US Common #10 Envelope (105 x 241 mm)</source> - <translation>US Common #10 Envelope (105 x 241 mm)</translation> + <source>Unable to commit transaction</source> + <translation>Incapable de soumettre la transaction</translation> </message> <message> - <source>Aliases: %1</source> - <translation>Alias : %1</translation> + <source>Could not allocate statement</source> + <translation>Impossible d'allouer la requête</translation> </message> <message> - <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source> - <translation>A4 (210 x 297 mm)</translation> + <source>Could not prepare statement</source> + <translation>Impossible de préparer la requête</translation> </message> <message> - <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source> - <translation>B5 (176 x 250 mm)</translation> + <source>Could not describe input statement</source> + <translation>Impossible de décrire la requête</translation> </message> <message> - <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source> - <translation>Executive (7,5 x 10 pouces, 191 x 254 mm)</translation> + <source>Could not describe statement</source> + <translation>Impossible de décrire la requête</translation> </message> <message> - <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source> - <translation>Legal (8.5 x 14 pouces, 216 x 356 mm)</translation> + <source>Unable to close statement</source> + <translation>Impossible de fermer la requête</translation> </message> <message> - <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source> - <translation>Letter (8,5 x 11 pouces, 216 x 279 mm)</translation> + <source>Unable to execute query</source> + <translation>Impossible d'exécuter la requête</translation> </message> <message> - <source>Print selection</source> - <translation>Imprimer la sélection</translation> + <source>Could not fetch next item</source> + <translation>Impossible de récuperer l'élément suivant</translation> </message> <message> - <source>Page size:</source> - <translation type="obsolete">Dimensions :</translation> + <source>Could not get statement info</source> + <translation>Impossible d'avoir les informations sur la requête</translation> </message> +</context> +<context> + <name>QIODevice</name> <message> - <source>Orientation:</source> - <translation type="obsolete">Orientation :</translation> + <source>Permission denied</source> + <translation>Accès refusé</translation> </message> <message> - <source>Paper source:</source> - <translation type="obsolete">Source du papier :</translation> + <source>Too many open files</source> + <translation>Trop de fichiers ouverts simultanément</translation> </message> <message> - <source>Print</source> - <translation>Impr écran</translation> + <source>No such file or directory</source> + <translation>Aucun fichier ou dossier de ce nom</translation> </message> <message> - <source>File</source> - <translation type="obsolete">Fichier</translation> + <source>No space left on device</source> + <translation>Aucun espace disponible sur le périphérique</translation> </message> <message> - <source>Printer</source> - <translation type="obsolete">Imprimante</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> +</context> +<context> + <name>QInputContext</name> <message> - <source>Print To File ...</source> - <translation>Imprimer dans un fichier...</translation> + <source>XIM</source> + <translation>XIM</translation> </message> <message> - <source>Print dialog</source> - <translation type="obsolete">Fenêtre d'impression</translation> + <source>XIM input method</source> + <translation>Méthode d'entrée XIM</translation> </message> <message> - <source>Size:</source> - <translation type="obsolete">Taille :</translation> + <source>Windows input method</source> + <translation>Méthode d'entrée Windows</translation> </message> <message> - <source>Properties</source> - <translation type="obsolete">Propriétés</translation> + <source>Mac OS X input method</source> + <translation>Méthode d'entrée Mac OS X</translation> </message> <message> - <source>Printer info:</source> - <translation type="obsolete">Informations sur l'imprimante :</translation> + <source>FEP</source> + <translation>Processeur frontal</translation> </message> <message> - <source>Browse</source> - <translation type="obsolete">Parcourir</translation> + <source>S60 FEP input method</source> + <translation>Méthode de saisie processeur frontal S60</translation> </message> +</context> +<context> + <name>QInputDialog</name> <message> - <source>Print to file</source> - <translation type="obsolete">Imprimer dans un fichier</translation> + <source>Enter a value:</source> + <translation>Entrer une valeur :</translation> </message> +</context> +<context> + <name>QLibrary</name> <message> - <source>Pages from</source> - <translation type="obsolete">Pages</translation> + <source>QLibrary::load_sys: Cannot load %1 (%2)</source> + <translation type="obsolete">QLibrary::load_sys: Impossible de charger %1 (%2)</translation> </message> <message> - <source>to</source> - <translation type="obsolete">à</translation> + <source>QLibrary::unload_sys: Cannot unload %1 (%2)</source> + <translation type="obsolete">QLibrary::unload_sys: Impossible de décharger %1 (%2)</translation> </message> <message> - <source>Selection</source> - <translation type="obsolete">Sélection</translation> + <source>QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3)</source> + <translation type="obsolete">QLibrary::resolve_sys: Symbole "%1" non défini dans %2 (%3)</translation> </message> <message> - <source>Copies</source> - <translation type="obsolete">Copies</translation> + <source>Could not mmap '%1': %2</source> + <translation>Impossible d'établir la projection en mémoire de '%1' : %2</translation> </message> <message> - <source>Collate</source> - <translation type="obsolete">Assembler</translation> + <source>Plugin verification data mismatch in '%1'</source> + <translation>Données de vérification du plugin différente dans '%1'</translation> </message> <message> - <source>Other</source> - <translation type="obsolete">Autre</translation> + <source>Could not unmap '%1': %2</source> + <translation>Impossible de supprimer la projection en mémoire de '%1' : %2</translation> </message> <message> - <source>Double side printing</source> - <translation type="obsolete">Impression recto verso</translation> + <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> + <translation>Le plugin '%1' utilise une bibliothèque Qt incompatible. (%2.%3.%4) [%5]</translation> </message> <message> - <source>File %1 is not writable. -Please choose a different file name.</source> - <translation>Impossible d'écrire dans le fichier %1. -Veuillez choisir un nom de fichier différent.</translation> + <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> + <translation>Le plugin '%1' utilise une bibliothèque Qt incompatible. Clé attendue "%2", reçue "%3"</translation> </message> <message> - <source>%1 already exists. -Do you want to overwrite it?</source> - <translation>%1 existe. -Voulez-vous l'écraser ?</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> <message> - <source>File exists</source> - <translation>Le fichier existe</translation> + <source>The shared library was not found.</source> + <translation>La bibliothèque partagée est introuvable.</translation> </message> <message> - <source><qt>Do you want to overwrite it?</qt></source> - <translation><qt>voulez-vous l'écraser ?</qt></translation> + <source>The file '%1' is not a valid Qt plugin.</source> + <translation>Le fichier '%1' n'est pas un plugin Qt valide.</translation> </message> <message> - <source>%1 is a directory. -Please choose a different file name.</source> - <translation>%1 est un dossier. -Veuillez choisir un nom de fichier différent.</translation> + <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source> + <translation>Le plugin '%1' utilise une bibliothèque Qt incompatible. (Il est impossible de mélanger des bibliothèques 'debug' et 'release'.)</translation> </message> <message> - <source>A0</source> - <translation></translation> + <source>Cannot load library %1: %2</source> + <translation>Impossible de charger la bibliothèque %1 : %2</translation> </message> <message> - <source>A1</source> - <translation></translation> + <source>Cannot unload library %1: %2</source> + <translation>Impossible de décharger la bibliothèque %1 : %2</translation> </message> <message> - <source>A2</source> - <translation></translation> + <source>Cannot resolve symbol "%1" in %2: %3</source> + <translation>Impossible de résoudre le symbole "%1" dans %2 : %3</translation> </message> +</context> +<context> + <name>QLineEdit</name> <message> - <source>A3</source> - <translation></translation> + <source>Select All</source> + <translation>Tout sélectionner</translation> </message> <message> - <source>A4</source> - <translation></translation> + <source>&Undo</source> + <translation>&Annuler</translation> </message> <message> - <source>A5</source> - <translation></translation> + <source>&Redo</source> + <translation>&Rétablir</translation> </message> <message> - <source>A6</source> - <translation></translation> + <source>Cu&t</source> + <translation>Co&uper</translation> </message> <message> - <source>A7</source> - <translation></translation> + <source>&Copy</source> + <translation>Cop&ier</translation> </message> <message> - <source>A8</source> - <translation></translation> + <source>&Paste</source> + <translation>Co&ller</translation> </message> <message> - <source>A9</source> - <translation></translation> + <source>Delete</source> + <translation>Supprimer</translation> </message> +</context> +<context> + <name>QLocalServer</name> <message> - <source>B0</source> - <translation></translation> + <source>%1: Name error</source> + <translation>%1: Erreur de nom</translation> </message> <message> - <source>B1</source> - <translation></translation> + <source>%1: Permission denied</source> + <translation>%1: Permission refusée</translation> </message> <message> - <source>B2</source> - <translation></translation> + <source>%1: Address in use</source> + <translation>%1: Address déjà utilisée</translation> </message> <message> - <source>B3</source> - <translation></translation> + <source>%1: Unknown error %2</source> + <translation>%1: Erreur inconnue %2</translation> </message> +</context> +<context> + <name>QLocalSocket</name> <message> - <source>B4</source> - <translation></translation> + <source>%1: Connection refused</source> + <translation>%1: Connexion refusée</translation> </message> <message> - <source>B5</source> - <translation></translation> + <source>%1: Remote closed</source> + <translation>%1: Connexion fermée</translation> </message> <message> - <source>B6</source> - <translation></translation> + <source>%1: Invalid name</source> + <translation>%1: Nom invalide</translation> </message> <message> - <source>B7</source> - <translation></translation> + <source>%1: Socket access error</source> + <translation>%1: Erreur d'accès au socket</translation> </message> <message> - <source>B8</source> - <translation></translation> + <source>%1: Socket resource error</source> + <translation>%1: Erreur de ressource du socket</translation> </message> <message> - <source>B9</source> - <translation></translation> + <source>%1: Socket operation timed out</source> + <translation>%1: L'opération socket a expiré</translation> </message> <message> - <source>B10</source> - <translation></translation> + <source>%1: Datagram too large</source> + <translation>%1: Datagramme trop grand</translation> </message> <message> - <source>C5E</source> - <translation></translation> + <source>%1: Connection error</source> + <translation>%1: Erreur de connexion</translation> </message> <message> - <source>DLE</source> - <translation></translation> + <source>%1: The socket operation is not supported</source> + <translation>%1: L'opération n'est pas supportée</translation> </message> <message> - <source>Executive</source> - <translation></translation> + <source>%1: Unknown error</source> + <translation>%1 : erreur inconnue</translation> </message> <message> - <source>Folio</source> - <translation></translation> + <source>%1: Unknown error %2</source> + <translation>%1: Erreur inconnue %2</translation> </message> +</context> +<context> + <name>QMYSQLDriver</name> <message> - <source>Ledger</source> - <translation></translation> + <source>Unable to open database '</source> + <translation>Impossible d'ouvrir la base de données '</translation> </message> <message> - <source>Legal</source> - <translation></translation> + <source>Unable to connect</source> + <translation>Impossible d'établir une connexion</translation> </message> <message> - <source>Letter</source> - <translation></translation> + <source>Unable to begin transaction</source> + <translation>Impossible de démarrer la transaction</translation> </message> <message> - <source>Tabloid</source> - <translation></translation> + <source>Unable to commit transaction</source> + <translation>Impossible de soumettre la transaction</translation> </message> <message> - <source>US Common #10 Envelope</source> - <translation></translation> + <source>Unable to rollback transaction</source> + <translation>Impossible d'annuler la transaction</translation> </message> +</context> +<context> + <name>QMYSQLResult</name> <message> - <source>Custom</source> - <translation>Personnalisé</translation> + <source>Unable to fetch data</source> + <translation>Impossible de récuperer des données</translation> </message> <message> - <source>&Options >></source> - <translation></translation> + <source>Unable to execute query</source> + <translation>Impossible d'exécuter la requête</translation> </message> <message> - <source>&Print</source> - <translation>Im&primer</translation> + <source>Unable to store result</source> + <translation>Impossible de stocker le résultat</translation> </message> <message> - <source>&Options <<</source> - <translation></translation> + <source>Unable to prepare statement</source> + <translation>Impossible de préparer l'instruction</translation> </message> <message> - <source>Print to File (PDF)</source> - <translation>Imprimer dans un fichier (PDF)</translation> + <source>Unable to reset statement</source> + <translation>Impossible de réinitialiser l'instruction</translation> </message> <message> - <source>Print to File (Postscript)</source> - <translation>Imprimer dans un fichier (PostScript)</translation> + <source>Unable to bind value</source> + <translation>Impossible d'attacher la valeur</translation> </message> <message> - <source>Local file</source> - <translation>Fichier local</translation> + <source>Unable to execute statement</source> + <translation>Impossible d'exécuter la requête</translation> </message> <message> - <source>Write %1 file</source> - <translation>Ecriture du fichier %1</translation> + <source>Unable to bind outvalues</source> + <translation>Impossible d'attacher les valeurs de sortie</translation> </message> <message> - <source>The 'From' value cannot be greater than the 'To' value.</source> - <translation>La valeur 'de' ne peut pas être plus grande que la valeur 'à'.</translation> + <source>Unable to store statement results</source> + <translation>Impossible de stocker les résultats de la requête</translation> </message> -</context> -<context> - <name>QPrintPreviewDialog</name> <message> - <source>%1%</source> - <translation>%1%</translation> + <source>Unable to execute next query</source> + <translation>Impossible d'exécuterla prochaine requête</translation> </message> <message> - <source>Print Preview</source> - <translation>Aperçu avant impression</translation> + <source>Unable to store next result</source> + <translation>Impossible de stocker le prochain résultat</translation> </message> +</context> +<context> + <name>QMdiArea</name> <message> - <source>Next page</source> - <translation>Page suivante</translation> + <source>(Untitled)</source> + <translation>(Sans titre)</translation> </message> +</context> +<context> + <name>QMdiSubWindow</name> <message> - <source>Previous page</source> - <translation>Page précédente</translation> + <source>%1 - [%2]</source> + <translation>%1 - [%2]</translation> </message> <message> - <source>First page</source> - <translation>Première page</translation> + <source>Close</source> + <translation>Fermer</translation> </message> <message> - <source>Last page</source> - <translation>Dernière page</translation> + <source>Minimize</source> + <translation>Réduire</translation> </message> <message> - <source>Fit width</source> - <translation>Ajuster la largeur</translation> + <source>Restore Down</source> + <translation>Restaurer en bas</translation> </message> <message> - <source>Fit page</source> - <translation>Ajuster la page</translation> + <source>&Restore</source> + <translation>&Restaurer</translation> </message> <message> - <source>Zoom in</source> - <translation>Zoom avant</translation> + <source>&Move</source> + <translation>&Déplacer</translation> </message> <message> - <source>Zoom out</source> - <translation>Zoom arrière</translation> + <source>&Size</source> + <translation>&Taille</translation> </message> <message> - <source>Portrait</source> - <translation>Portrait</translation> + <source>Mi&nimize</source> + <translation>Réd&uire</translation> </message> <message> - <source>Landscape</source> - <translation>Paysage</translation> + <source>Ma&ximize</source> + <translation>Ma&ximiser</translation> </message> <message> - <source>Show single page</source> - <translation>Afficher une seule page</translation> + <source>Stay on &Top</source> + <translation>&Rester au premier plan</translation> </message> <message> - <source>Show facing pages</source> - <translation>Afficher deux pages</translation> + <source>&Close</source> + <translation>&Fermer</translation> </message> <message> - <source>Show overview of all pages</source> - <translation>Afficher un aperçu de toutes les pages</translation> + <source>- [%1]</source> + <translation>- [%1]</translation> </message> <message> - <source>Print</source> - <translation>Impr écran</translation> + <source>Maximize</source> + <translation>Maximiser</translation> </message> <message> - <source>Page setup</source> - <translation>Configuration de la page</translation> + <source>Unshade</source> + <translation>Restaurer</translation> </message> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Shade</source> + <translation>Ombrer</translation> </message> <message> - <source>Export to PDF</source> - <translation>Exporter vers PDF</translation> + <source>Restore</source> + <translation>Restaurer</translation> </message> <message> - <source>Export to PostScript</source> - <translation>Exporter vers PostScript</translation> + <source>Help</source> + <translation>Aide</translation> </message> <message> - <source>Page Setup</source> - <translation>Configuration de la page</translation> + <source>Menu</source> + <translation>Menu</translation> </message> </context> <context> - <name>QPrintPropertiesDialog</name> + <name>QMediaPlayer</name> <message> - <source>PPD Properties</source> - <translation type="obsolete">Propriétés PPD</translation> + <source>The QMediaPlayer object does not have a valid service</source> + <translation>Pas de service valide pour l'objet QMediaPlayer</translation> </message> +</context> +<context> + <name>QMediaPlaylist</name> <message> - <source>Save</source> - <translation type="obsolete">Enregistrer</translation> + <source>Could not add items to read only playlist.</source> + <translation>Impossible d'ajouter des éléments à une liste de lecture en lecture seule.</translation> </message> <message> - <source>OK</source> - <translation type="obsolete">OK</translation> + <source>Playlist format is not supported</source> + <translation>Le format de liste de lecture n'est pas supporté</translation> + </message> + <message> + <source>The file could not be accessed.</source> + <translation>Impossible d'accéder au fichier.</translation> + </message> + <message> + <source>Playlist format is not supported.</source> + <translation></translation> </message> </context> <context> - <name>QPrintPropertiesWidget</name> + <name>QMenu</name> <message> - <source>Form</source> - <translation>Formulaire</translation> + <source>Close</source> + <translation>Fermer</translation> </message> <message> - <source>Page</source> - <translation></translation> + <source>Open</source> + <translation>Ouvrir</translation> </message> <message> - <source>Advanced</source> - <translation>Avancé</translation> + <source>Execute</source> + <translation>Exécuter</translation> </message> </context> <context> - <name>QPrintSettingsOutput</name> - <message> - <source>Form</source> - <translation>Formulaire</translation> - </message> + <name>QMenuBar</name> <message> - <source>Copies</source> - <translation>Copies</translation> + <source>About</source> + <translation type="obsolete">A propos</translation> </message> <message> - <source>Print range</source> - <translation>Imprimer la sélection</translation> + <source>Config</source> + <translation type="obsolete">Configuration</translation> </message> <message> - <source>Print all</source> - <translation>Imprimer tout</translation> + <source>Preference</source> + <translation type="obsolete">Préférence</translation> </message> <message> - <source>Pages from</source> - <translation>Pages</translation> + <source>Options</source> + <translation type="obsolete">Options</translation> </message> <message> - <source>to</source> - <translation>à</translation> + <source>Setting</source> + <translation type="obsolete">Paramètre</translation> </message> <message> - <source>Selection</source> - <translation>Sélection</translation> + <source>Setup</source> + <translation type="obsolete">Réglage</translation> </message> <message> - <source>Output Settings</source> - <translation>Paramètres de sortie</translation> + <source>Quit</source> + <translation type="obsolete">Quitter</translation> </message> <message> - <source>Copies:</source> - <translation>Copies :</translation> + <source>Exit</source> + <translation type="obsolete">Quitter</translation> </message> <message> - <source>Collate</source> - <translation>Assembler</translation> + <source>About %1</source> + <translation type="obsolete">A propos de %1</translation> </message> <message> - <source>Reverse</source> - <translation>Inverse</translation> + <source>About Qt</source> + <translation type="obsolete">À propos de Qt</translation> </message> <message> - <source>Options</source> - <translation>Options</translation> + <source>Preferences</source> + <translation type="obsolete">Préférences</translation> </message> <message> - <source>Color Mode</source> - <translation>Mode de couleur</translation> + <source>Quit %1</source> + <translation type="obsolete">Quitter %1</translation> </message> <message> - <source>Color</source> - <translation>Couleur</translation> + <source>Actions</source> + <translation>Actions</translation> </message> +</context> +<context> + <name>QMessageBox</name> <message> - <source>Grayscale</source> - <translation>Dégradé de gris</translation> + <source>OK</source> + <translation>OK</translation> </message> <message> - <source>Duplex Printing</source> - <translation>Impression en duplex</translation> + <source>About Qt</source> + <translation>À propos de Qt</translation> </message> <message> - <source>None</source> - <translation>Aucun</translation> + <source>Help</source> + <translation>Aide</translation> </message> <message> - <source>Long side</source> - <translation>Côté long</translation> + <source><p>This program uses Qt version %1.</p></source> + <translation type="obsolete"><p>Ce programme utilise la version %1 de Qt.</p></translation> </message> <message> - <source>Short side</source> - <translation>Côté court</translation> + <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com/</a> for more information.</p></source> + <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'applications multi-platformes.</p><p>Qt fournit la portabilité du code source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et toutes les variantes commerciales majeures d'Unix. Qt est aussi disponible pour les systèmes embarqués sous le nom Qtopia Core.</p><p>Qt est un produit de Trolltech. <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></translation> </message> -</context> -<context> - <name>QPrintWidget</name> <message> - <source>Form</source> - <translation>Formulaire</translation> + <source>Show Details...</source> + <translation>Montrer les détails...</translation> </message> <message> - <source>Printer</source> - <translation>Imprimante</translation> + <source>Hide Details...</source> + <translation>Cacher les détails...</translation> </message> <message> - <source>&Name:</source> - <translation>&Nom :</translation> + <source><h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation type="obsolete"><h3>À propos de Qt</h3><p>Ce programme utilise Qt version %1.</p><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> </message> <message> - <source>P&roperties</source> - <translation>P&ropriétés</translation> + <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un framework de développement d'applications multi-plateforme.</p><p>Qt fournit la portabilité du code source surMS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, et toutes les variantes majeures d'Unix. Qt est aussi disponible pour l'embarqué avec Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt est un produit de Nokia. Allez à <a href="http://qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> </message> <message> - <source>Location:</source> - <translation>Emplacement :</translation> + <source><p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p></source> + <translation type="obsolete"><p>Ce programme utilise Qt Open Source Edition version %1.</p><p>Qt Open Source Edition est prévu pour le développement d'applications Open Source. Vous devez avoir un license commerciale de Qt pour développer des applications propiétaires (Closed Source).</p><p>Vous pouvez aller sur <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> pour plus d'informations sur les licenses Qt.</p></translation> </message> <message> - <source>Preview</source> - <translation>Prévisualisation</translation> + <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt Embedded.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'application multi-plateforme.</p><p>Qt fournit la portabilité de votre source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, toutes les variantes majeures d'Unix. Qt est aussi disponible pour les périphériques embarqués avec Qt Embedded.</p><p>Qt est un produit de Trolltech. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> </message> <message> - <source>Type:</source> - <translation>Type :</translation> + <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> + <translation><h3>À propos de Qt</h3><p>Ce programme utilise Qt version %1.</p></translation> </message> <message> - <source>Output &file:</source> - <translation>&Fichier de sortie:</translation> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> </message> +</context> +<context> + <name>QMultiInputContext</name> <message> - <source>...</source> - <translation></translation> + <source>Select IM</source> + <translation>Sélectionner IM</translation> </message> </context> <context> - <name>QProcess</name> + <name>QMultiInputContextPlugin</name> <message> - <source>Could not open input redirection for reading</source> - <translation>Impossible d'ouvrir la redirection d'entrée en lecture</translation> + <source>Multiple input method switcher</source> + <translation>Sélectionneur de méthode de saisie</translation> </message> <message> - <source>Could not open output redirection for writing</source> - <translation>Impossible d'ouvrir la redirection de sortie pour écriture</translation> + <source>Multiple input method switcher that uses the context menu of the text widgets</source> + <translation>Sélectionneur de méthode de saisie qui utilise le menu contextuel des widgets de texte</translation> </message> +</context> +<context> + <name>QNativeSocketEngine</name> <message> - <source>Resource error (fork failure): %1</source> - <translation>Erreur de ressouce (fork) : %1</translation> + <source>The remote host closed the connection</source> + <translation>L'hôte distant a fermé la connexion</translation> </message> <message> - <source>Process operation timed out</source> - <translation>Operation de processus a expiré</translation> + <source>Network operation timed out</source> + <translation>L'opération réseau a expiré</translation> </message> <message> - <source>Error reading from process</source> - <translation>Erreur de lecture du processus</translation> + <source>Out of resources</source> + <translation>Manque de ressources</translation> </message> <message> - <source>Error writing to process</source> - <translation>Erreur d"écriture vers le processus</translation> + <source>Unsupported socket operation</source> + <translation>Opération socket non supportée</translation> </message> <message> - <source>Process crashed</source> - <translation>Le processus à planté</translation> + <source>Protocol type not supported</source> + <translation>Protocol non géré</translation> </message> <message> - <source>No program defined</source> - <translation>Aucun programme défini</translation> + <source>Invalid socket descriptor</source> + <translation>Descripteur de socket invalide</translation> </message> <message> - <location filename="../src/corelib/io/qprocess_win.cpp" line="+464"/> - <source>Process failed to start</source> - <translation>Le processus n'a pas démarré</translation> + <source>Network unreachable</source> + <translation>Réseau impossible à rejoindre</translation> </message> <message> - <source>Process failed to start: %1</source> - <translation>Le démarrage du processus a échoué: %1</translation> + <source>Permission denied</source> + <translation>Accès refusé</translation> </message> -</context> -<context> - <name>QProgressDialog</name> <message> - <source>Cancel</source> - <translation>Annuler</translation> + <source>Connection timed out</source> + <translation>Connexion expirée</translation> </message> -</context> -<context> - <name>QPushButton</name> <message> - <source>Open</source> - <translation>Ouvrir</translation> + <source>Connection refused</source> + <translation>Connexion refusée</translation> </message> -</context> -<context> - <name>QRadioButton</name> <message> - <source>Check</source> - <translation>Cocher</translation> + <source>The bound address is already in use</source> + <translation>L'adresse liée est déjà en usage</translation> </message> -</context> -<context> - <name>QRegExp</name> <message> - <source>no error occurred</source> - <translation>aucune erreur ne s'est produite</translation> + <source>The address is not available</source> + <translation>L'adresse n'est pas disponible</translation> </message> <message> - <source>disabled feature used</source> - <translation>option désactivée</translation> + <source>The address is protected</source> + <translation>L'adresse est protégée</translation> </message> <message> - <source>bad char class syntax</source> - <translation>syntaxe invalide pour classe de caractère</translation> + <source>Unable to send a message</source> + <translation>Impossible d'envoyer un message</translation> </message> <message> - <source>bad lookahead syntax</source> - <translation>syntaxe invalide pour lookahead</translation> + <source>Unable to receive a message</source> + <translation>Impossible de recevoir un message</translation> </message> <message> - <source>bad repetition syntax</source> - <translation>syntaxe invalide pour répétition</translation> + <source>Unable to write</source> + <translation>Impossible d'écrire</translation> </message> <message> - <source>invalid octal value</source> - <translation>valeur octale invalide</translation> + <source>Network error</source> + <translation>Erreur réseau</translation> </message> <message> - <source>missing left delim</source> - <translation>délémiteur gauche manquant</translation> + <source>Another socket is already listening on the same port</source> + <translation>Un autre socket écoute déjà sur le même port</translation> </message> <message> - <source>unexpected end</source> - <translation>fin impromptue</translation> + <source>Unable to initialize non-blocking socket</source> + <translation>Impossible d'initialiser le socket asynchrone</translation> </message> <message> - <source>met internal limit</source> - <translation>rencontré limite interne</translation> - </message> - <message> - <source>invalid interval</source> - <translation>intervalle non valide</translation> + <source>Unable to initialize broadcast socket</source> + <translation>Impossible d'initialiser le socket broadcast</translation> </message> <message> - <source>invalid category</source> - <translation>catégorie non valide</translation> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>Tentative d'utiliser un socket IPv6 sur une plateforme qui ne supporte pas IPv6</translation> </message> -</context> -<context> - <name>QSQLite2Driver</name> <message> - <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+396"/> - <source>Error to open database</source> - <translation>Erreur à l'ouverture de la base de données</translation> + <source>Host unreachable</source> + <translation>Hôte inaccessible</translation> </message> <message> - <source>Unable to begin transaction</source> - <translation>Impossible de démarrer la transaction</translation> + <source>Datagram was too large to send</source> + <translation>Le datagramme était trop grand pour être envoyé</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>Impossible de soumettre la transaction</translation> + <source>Operation on non-socket</source> + <translation>Operation sur non-socket</translation> </message> <message> - <location line="+75"/> - <source>Unable to rollback Transaction</source> - <translation>Impossible d'annuler la transaction</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> <message> - <source>Error opening database</source> - <translation>Erreur lors de l'ouverture de la base de données</translation> + <source>The proxy type is invalid for this operation</source> + <translation>Le type de proxy est invalide pour cette opération</translation> </message> +</context> +<context> + <name>QNetworkAccessCacheBackend</name> <message> - <source>Unable to rollback transaction</source> - <translation>Impossible de répéter la transaction</translation> + <source>Error opening %1</source> + <translation>Erreur lors de l'ouverture de %1</translation> </message> </context> <context> - <name>QSQLite2Result</name> + <name>QNetworkAccessDataBackend</name> <message> - <source>Unable to fetch results</source> - <translation>Impossible de récupérer les résultats</translation> + <source>Operation not supported on %1</source> + <translation>Opération non supportée sur %1</translation> </message> <message> - <source>Unable to execute statement</source> - <translation>Impossible d'exécuter la requête</translation> + <source>Invalid URI: %1</source> + <translation>URI invalide : %1</translation> </message> </context> <context> - <name>QSQLiteDriver</name> + <name>QNetworkAccessDebugPipeBackend</name> <message> - <source>Error opening database</source> - <translation>Erreur lors de l'ouverture de la base de données</translation> + <source>Write error writing to %1: %2</source> + <translation>Erreur lors de l'écriture dans %1: %2</translation> </message> <message> - <source>Error closing database</source> - <translation>Erreur lors de la fermeture de la base de données</translation> + <source>Socket error on %1: %2</source> + <translation>Erreur de socket sur %1 : %2</translation> </message> <message> - <source>Unable to begin transaction</source> - <translation>Impossible de démarrer la transaction</translation> + <source>Remote host closed the connection prematurely on %1</source> + <translation>L'hôte distant a fermé sa connexion de façon prématurée sur %1</translation> + </message> +</context> +<context> + <name>QNetworkAccessFileBackend</name> + <message> + <source>Request for opening non-local file %1</source> + <translation>Requête d'ouverture de fichier distant %1</translation> </message> <message> - <source>Unable to commit transaction</source> - <translation>Incapable de soumettre la transaction</translation> + <source>Error opening %1: %2</source> + <translation>Erreur lors de l'ouverture de %1 : %2</translation> </message> <message> - <source>Unable to roll back transaction</source> - <translation type="obsolete">Impossible d'annuler la transaction</translation> + <source>Write error writing to %1: %2</source> + <translation>Erreur d'écriture de %1 : %2</translation> </message> <message> - <source>Unable to rollback transaction</source> - <translation>Impossible d'annuler la transaction</translation> + <source>Cannot open %1: Path is a directory</source> + <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> </message> -</context> -<context> - <name>QSQLiteResult</name> <message> - <source>Unable to fetch row</source> - <translation>Impossible de récupérer la rangée</translation> + <source>Read error reading from %1: %2</source> + <translation>Erreur de lecture de %1 : %2</translation> </message> +</context> +<context> + <name>QNetworkAccessFtpBackend</name> <message> - <source>Unable to execute statement</source> - <translation>Impossible d'exécuter la requête</translation> + <source>No suitable proxy found</source> + <translation>Aucun proxy trouvé</translation> </message> <message> - <source>Unable to reset statement</source> - <translation>Impossible de réinitialiser la requête</translation> + <source>Cannot open %1: is a directory</source> + <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> </message> <message> - <source>Unable to bind parameters</source> - <translation>Impossible d'attacher les paramètres</translation> + <source>Logging in to %1 failed: authentication required</source> + <translation>Connexion à %1 a échoué : authentification requise</translation> </message> <message> - <source>Parameter count mismatch</source> - <translation>Nombre de paramètres incorrect</translation> + <source>Error while downloading %1: %2</source> + <translation>Erreur lors du téléchargement de %1 : %2</translation> </message> <message> - <source>No query</source> - <translation>Pas de requête</translation> + <source>Error while uploading %1: %2</source> + <translation>Erreur lors de l'envoi de %1 : %2</translation> </message> </context> <context> - <name>QScrollBar</name> + <name>QNetworkAccessHttpBackend</name> <message> - <source>Scroll here</source> - <translation>Défiler jusqu'ici</translation> + <source>No suitable proxy found</source> + <translation>Aucun proxy trouvé</translation> </message> +</context> +<context> + <name>QNetworkAccessManager</name> <message> - <source>Left edge</source> - <translation>Extrême gauche</translation> + <source>Network access is disabled.</source> + <translation>L'accès au réseau est désactivé.</translation> </message> +</context> +<context> + <name>QNetworkReply</name> <message> - <source>Top</source> - <translation>En haut</translation> + <source>Error downloading %1 - server replied: %2</source> + <translation>Erreur lors du téléchargement de %1 - le serveur a répondu: %2</translation> </message> <message> - <source>Right edge</source> - <translation>Extrême droite</translation> + <source>Protocol "%1" is unknown</source> + <translation>Le protocole "%1" est inconnu</translation> </message> <message> - <source>Bottom</source> - <translation>En bas</translation> + <source>Network session error.</source> + <translation>Erreur de session réseau.</translation> </message> <message> - <source>Page left</source> - <translation>Page précédente</translation> + <source>Temporary network failure.</source> + <translation>Erreur réseau temporaire.</translation> </message> +</context> +<context> + <name>QNetworkReplyImpl</name> <message> - <source>Page up</source> - <translation>Page précédente</translation> + <source>Operation canceled</source> + <translation>Opération annulée</translation> </message> +</context> +<context> + <name>QNetworkSession</name> <message> - <source>Page right</source> - <translation>Page suivante</translation> + <source>Invalid configuration.</source> + <translation>Configuration invalide.</translation> </message> +</context> +<context> + <name>QNetworkSessionPrivateImpl</name> <message> - <source>Page down</source> - <translation>Page suivante</translation> + <source>Roaming error</source> + <translation>Erreur de roaming</translation> </message> <message> - <source>Scroll left</source> - <translation>Défiler vers la gauche</translation> + <source>Session aborted by user or system</source> + <translation>Session annulée par l'utilisateur ou le système</translation> </message> <message> - <source>Scroll up</source> - <translation>Défiler vers le haut</translation> + <source>Unidentified Error</source> + <translation>Erreur inconnue</translation> </message> <message> - <source>Scroll right</source> - <translation>Défiler vers la droite</translation> + <source>Unknown session error.</source> + <translation>Erreur de session inconnue.</translation> </message> <message> - <source>Scroll down</source> - <translation>Défiler vers le bas</translation> + <source>The session was aborted by the user or system.</source> + <translation>la session a été annulée par l'utilisateur ou le système.</translation> </message> <message> - <source>Line up</source> - <translation>Aligner</translation> + <source>The requested operation is not supported by the system.</source> + <translation>L'opération requise n'est pas suportée par le système.</translation> </message> <message> - <source>Position</source> - <translation>Position</translation> + <source>The specified configuration cannot be used.</source> + <translation>La configuration spécifiée ne peut être utilisée.</translation> </message> <message> - <source>Line down</source> - <translation>Aligner en-bas</translation> + <source>Roaming was aborted or is not possible.</source> + <translation>Le roaming a été annulé ou est impossible.</translation> </message> </context> <context> - <name>QSharedMemory</name> + <name>QOCIDriver</name> <message> - <source>%1: unable to set key on lock</source> - <translation>%1 : impossible d'affecter la clé au verrou</translation> + <source>Unable to logon</source> + <translation>Impossible d'ouvrir une session</translation> </message> <message> - <source>%1: create size is less then 0</source> - <translation>%1 : taille de création est inférieur à 0</translation> + <source>Unable to initialize</source> + <comment>QOCIDriver</comment> + <translation>L'initialisation a échoué</translation> </message> <message> - <source>%1: unable to lock</source> - <translation>%1 : impossible de vérrouiller</translation> + <source>Unable to begin transaction</source> + <translation>Impossible de démarrer la transaction</translation> </message> <message> - <source>%1: unable to unlock</source> - <translation>%1 : impossible de déverrouiller</translation> + <source>Unable to commit transaction</source> + <translation>Impossible d'enregistrer la transaction</translation> </message> <message> - <source>%1: permission denied</source> - <translation>%1 : permission refusée</translation> + <source>Unable to rollback transaction</source> + <translation>Impossible d'annuler la transaction</translation> </message> <message> - <source>%1: already exists</source> - <translation>%1 : existe déjà</translation> + <source>Unable to initialize</source> + <translation type="obsolete">L'initialisation a échoué</translation> </message> +</context> +<context> + <name>QOCIResult</name> <message> - <source>%1: doesn't exists</source> - <translation>%1 : n'existe pas</translation> + <source>Unable to bind column for batch execute</source> + <translation>Impossible d'attacher la colonne pour une execution batch</translation> </message> <message> - <source>%1: out of resources</source> - <translation>%1 : plus de ressources disponibles</translation> + <source>Unable to execute batch statement</source> + <translation>Impossible d'exécuter l'instruction batch</translation> </message> <message> - <source>%1: unknown error %2</source> - <translation>%1 : erreur inconnue %2</translation> + <source>Unable to goto next</source> + <translation>Impossible de passer au suivant</translation> </message> <message> - <source>%1: key is empty</source> - <translation>%1 : clé vide</translation> + <source>Unable to alloc statement</source> + <translation>Impossible d'allouer la requête</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+125"/> - <source>%1: unix key file doesn't exists</source> - <translation>%1 : le fichier de clé unix n'existe pas</translation> + <source>Unable to prepare statement</source> + <translation>Impossible de préparer la requête</translation> </message> <message> - <source>%1: ftok failed</source> - <translation>%1 : ftok a échoué</translation> + <source>Unable to bind value</source> + <translation>Impossible d'attacher la valeur</translation> </message> <message> - <source>%1: unable to make key</source> - <translation>%1 : impossible de créer la clé</translation> + <source>Unable to execute select statement</source> + <translation type="obsolete">Impossible d'exéctuer la requête select</translation> </message> <message> - <source>%1: system-imposed size restrictions</source> - <translation>%1 : le système impose des restrictions sur la taille</translation> + <source>Unable to execute statement</source> + <translation>Impossible d'exéctuer la requête</translation> </message> <message> - <source>%1: not attached</source> - <translation>%1 : non attaché</translation> + <source>Unable to get statement type</source> + <translation>Impossible d'obtenir le type de la requête</translation> </message> +</context> +<context> + <name>QODBCDriver</name> <message> - <source>%1: invalid size</source> - <translation>%1 : taille invalide</translation> + <source>Unable to connect</source> + <translation>Incapable d'établir une connexion</translation> </message> <message> - <source>%1: key error</source> - <translation>%1 : erreur de clé</translation> + <source>Unable to connect - Driver doesn't support all needed functionality</source> + <translation type="obsolete">Impossible de se connecter - Le pilote ne supporte pas toutes les fonctionnalités nécessaires</translation> </message> <message> - <source>%1: size query failed</source> - <translation>%1 : la requête de taille a échoué</translation> + <source>Unable to disable autocommit</source> + <translation>Impossible de désactiver l'autocommit</translation> </message> <message> - <source>%1: doesn't exist</source> - <translation>%1: n'existe pas</translation> + <source>Unable to commit transaction</source> + <translation>Incapable de soumettre la transaction</translation> </message> <message> - <source>%1: UNIX key file doesn't exist</source> - <translation>%1: le fichier de clés UNIX n'existe pas</translation> + <source>Unable to rollback transaction</source> + <translation>Incapable d'annuler la transaction</translation> </message> -</context> -<context> - <name>QShortcut</name> <message> - <source>Space</source> - <translation>Espace</translation> + <source>Unable to enable autocommit</source> + <translation>Impossible d'activer l'autocommit</translation> </message> <message> - <source>Esc</source> - <translation>Échap</translation> + <source>Unable to connect - Driver doesn't support all functionality required</source> + <translation>Impossible de se connecter - Le pilote ne supporte pas toutes les fonctionnalités nécessaires</translation> </message> +</context> +<context> + <name>QODBCResult</name> <message> - <source>Tab</source> - <translation>Tab</translation> + <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> + <translation>QODBCResult::reset: Impossible d'utiliser 'SQL_CURSOR_STATIC' comme attribut de requête. Veuillez vérifier la configuration de votre pilote ODBC</translation> </message> <message> - <source>Backtab</source> - <translation>Tab arr</translation> + <source>Unable to execute statement</source> + <translation>Impossible d'exéctuer la requête</translation> </message> <message> - <source>Backspace</source> - <translation>Effacement</translation> + <source>Unable to fetch next</source> + <translation>Impossible de récupérer le suivant</translation> </message> <message> - <source>Return</source> - <translation>Retour</translation> + <source>Unable to prepare statement</source> + <translation>Impossible de préparer la requête</translation> </message> <message> - <source>Enter</source> - <translation>Entrée</translation> + <source>Unable to bind variable</source> + <translation>Impossible d'attacher la variable</translation> </message> <message> - <source>Ins</source> - <translation>Inser</translation> + <source>Unable to fetch last</source> + <translation>Impossible de récupérer le dernier</translation> </message> <message> - <source>Del</source> - <translation>Suppr</translation> + <source>Unable to fetch</source> + <translation>Impossible de récupérer</translation> </message> <message> - <source>Pause</source> - <translation>Pause</translation> + <source>Unable to fetch first</source> + <translation>Impossible de récupérer le premier</translation> </message> <message> - <source>Print</source> - <translation>Impr écran</translation> + <source>Unable to fetch previous</source> + <translation>Impossible de récupérer le précedent</translation> </message> +</context> +<context> + <name>QObject</name> <message> - <source>SysReq</source> - <translation>Syst</translation> + <source>Home</source> + <translation type="obsolete">Début</translation> </message> <message> - <source>Home</source> - <translation>Début</translation> + <source>Operation not supported on %1</source> + <translation type="obsolete">Opération non supportée sur %1</translation> </message> <message> - <source>End</source> - <translation>Fin</translation> + <source>Invalid URI: %1</source> + <translation type="obsolete">URI invalide : %1</translation> </message> <message> - <source>Left</source> - <translation>Gauche</translation> + <source>Write error writing to %1: %2</source> + <translation type="obsolete">Erreur d'écriture sur %1 : %2</translation> </message> <message> - <source>Up</source> - <translation>Haut</translation> + <source>Read error reading from %1: %2</source> + <translation type="obsolete">Erreur de lecture sur %1 : %2</translation> </message> <message> - <source>Right</source> - <translation>Droite</translation> + <source>Socket error on %1: %2</source> + <translation type="obsolete">Erreur de socket sur %1 : %2</translation> </message> <message> - <source>Down</source> - <translation>Bas</translation> + <source>Remote host closed the connection prematurely on %1</source> + <translation type="obsolete">L'hôte distant a fermé sa connexion de façon prématurée sur %1</translation> </message> <message> - <source>PgUp</source> - <translation>Page préc</translation> + <source>Protocol error: packet of size 0 received</source> + <translation type="obsolete">Erreur de protocole: paquet de taille 0 reçu</translation> </message> <message> - <source>PgDown</source> - <translation>Page suiv</translation> + <source>No host name given</source> + <translation type="obsolete">Nom d'hôte manquant</translation> </message> <message> - <source>CapsLock</source> - <translation>Verr maj</translation> + <source>Invalid hostname</source> + <translation type="obsolete">Nom d'hôte non valide</translation> </message> <message> - <source>NumLock</source> - <translation>Verr num</translation> + <source>PulseAudio Sound Server</source> + <translation>Serveur de son PulseAudio</translation> </message> <message> - <source>ScrollLock</source> - <translation>Arrêt défil</translation> + <source>"%1" duplicates a previous role name and will be disabled.</source> + <translation>"%1" est un doublon d'un nom de role existant et sera désactivé.</translation> </message> <message> - <source>Menu</source> - <translation>Menu</translation> + <source>invalid query: "%1"</source> + <translation>Requête invalide : "%1"</translation> </message> +</context> +<context> + <name>QPPDOptionsModel</name> <message> - <source>Help</source> - <translation>Aide</translation> + <source>Name</source> + <translation>Nom</translation> </message> <message> - <source>Back</source> - <translation>Précédent (historique)</translation> + <source>Value</source> + <translation>Valeur</translation> </message> +</context> +<context> + <name>QPSQLDriver</name> <message> - <source>Forward</source> - <translation>Successeur (historique)</translation> + <source>Unable to connect</source> + <translation>Impossible d'établir une connexion</translation> </message> <message> - <source>Stop</source> - <translation>Stop</translation> + <source>Could not begin transaction</source> + <translation>Impossible de démarrer la transaction</translation> </message> <message> - <source>Refresh</source> - <translation>Rafraîchir</translation> + <source>Could not commit transaction</source> + <translation>Impossible de soumettre la transaction</translation> </message> <message> - <source>Volume Down</source> - <translation>Volume bas</translation> + <source>Could not rollback transaction</source> + <translation>Impossible d'annuler la transaction</translation> </message> <message> - <source>Volume Mute</source> - <translation>Volume muet</translation> + <source>Unable to subscribe</source> + <translation>Impossible de s'inscrire</translation> </message> <message> - <source>Volume Up</source> - <translation>Volume haut -</translation> + <source>Unable to unsubscribe</source> + <translation>Impossible de se désinscrire</translation> </message> +</context> +<context> + <name>QPSQLResult</name> <message> - <source>Bass Boost</source> - <translation>Graves fort</translation> + <source>Unable to create query</source> + <translation>Impossible de créer la requête</translation> </message> <message> - <source>Bass Up</source> - <translation>Graves haut</translation> + <source>Unable to prepare statement</source> + <translation>Impossible de préparer la requête</translation> </message> +</context> +<context> + <name>QPageSetupWidget</name> <message> - <source>Bass Down</source> - <translation>Graves bas</translation> + <source>Centimeters (cm)</source> + <translation>Centimètres (cm)</translation> </message> <message> - <source>Treble Up</source> - <translation>Aigus haut</translation> + <source>Millimeters (mm)</source> + <translation>Millimètres (mm)</translation> </message> <message> - <source>Treble Down</source> - <translation>Aigus bas</translation> + <source>Inches (in)</source> + <translation>Pouces (in)</translation> </message> <message> - <source>Media Play</source> - <translation>Média démarrer</translation> + <source>Points (pt)</source> + <translation>Points (pts)</translation> </message> <message> - <source>Media Stop</source> - <translation>Média arrêt</translation> + <source>Form</source> + <translation>Formulaire</translation> </message> <message> - <source>Media Previous</source> - <translation>Média précédent</translation> + <source>Paper</source> + <translation>Papier</translation> </message> <message> - <source>Media Next</source> - <translation>Média suivant</translation> + <source>Page size:</source> + <translation>Dimensions :</translation> </message> <message> - <source>Media Record</source> - <translation>Média enregistrer</translation> + <source>Width:</source> + <translation>Largeur :</translation> </message> <message> - <source>Favorites</source> - <translation>Préférés</translation> + <source>Height:</source> + <translation>Hauteur :</translation> </message> <message> - <source>Search</source> - <translation>Recherche</translation> + <source>Paper source:</source> + <translation>Source du papier :</translation> </message> <message> - <source>Standby</source> - <translation>Attente</translation> + <source>Orientation</source> + <translation>Orientation</translation> </message> <message> - <source>Open URL</source> - <translation>Ouvrir URL</translation> + <source>Portrait</source> + <translation>Portrait</translation> </message> <message> - <source>Launch Mail</source> - <translation>Lancer courrier</translation> + <source>Landscape</source> + <translation>Paysage</translation> </message> <message> - <source>Launch Media</source> - <translation>Lancer média</translation> + <source>Reverse landscape</source> + <translation>Paysage inversé</translation> </message> <message> - <source>Launch (0)</source> - <translation>Lancer (0)</translation> + <source>Reverse portrait</source> + <translation>Portrait inversé</translation> </message> <message> - <source>Launch (1)</source> - <translation>Lancer (1)</translation> + <source>Margins</source> + <translation>Marges</translation> </message> <message> - <source>Launch (2)</source> - <translation>Lancer (2)</translation> + <source>top margin</source> + <translation>marge haute</translation> </message> <message> - <source>Launch (3)</source> - <translation>Lancer (3)</translation> + <source>left margin</source> + <translation>marge gauche</translation> </message> <message> - <source>Launch (4)</source> - <translation>Lancer (4)</translation> + <source>right margin</source> + <translation>marge droite</translation> </message> <message> - <source>Launch (5)</source> - <translation>Lancer (5)</translation> + <source>bottom margin</source> + <translation>marge basse</translation> </message> +</context> +<context> + <name>QPluginLoader</name> <message> - <source>Launch (6)</source> - <translation>Lancer (6)</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> <message> - <source>Launch (7)</source> - <translation>Lancer (7)</translation> + <source>The plugin was not loaded.</source> + <translation>Le plugin n'a pas été chargé.</translation> </message> +</context> +<context> + <name>QPrintDialog</name> <message> - <source>Launch (8)</source> - <translation>Lancer (8)</translation> + <source>locally connected</source> + <translation>connecté en local</translation> </message> <message> - <source>Launch (9)</source> - <translation>Lancer (9)</translation> + <source>unknown</source> + <translation>inconnu</translation> </message> <message> - <source>Launch (A)</source> - <translation>Lancer (A)</translation> + <source>OK</source> + <translation>OK</translation> </message> <message> - <source>Launch (B)</source> - <translation>Lancer (B)</translation> + <source>Cancel</source> + <translation type="obsolete">Annuler</translation> </message> <message> - <source>Launch (C)</source> - <translation>Lancer (C)</translation> + <source>Print in color if available</source> + <translation type="obsolete">Imprimer en couleur si possible</translation> </message> <message> - <source>Launch (D)</source> - <translation>Lancer (D)</translation> + <source>Print all</source> + <translation>Imprimer tout</translation> </message> <message> - <source>Launch (E)</source> - <translation>Lancer (E)</translation> - </message> - <message> - <source>Launch (F)</source> - <translation>Lancer (F)</translation> + <source>Print range</source> + <translation>Imprimer la sélection</translation> </message> <message> - <source>Print Screen</source> - <translation>Capture d'écran</translation> + <source>Print last page first</source> + <translation type="obsolete">Imprimer d'abord la dernière page</translation> </message> <message> - <source>Page Up</source> - <translation>Page haut</translation> + <source>Number of copies:</source> + <translation type="obsolete">Nombre de copies :</translation> </message> <message> - <source>Page Down</source> - <translation>Page bas</translation> + <source>Paper format</source> + <translation type="obsolete">Format du papier</translation> </message> <message> - <source>Caps Lock</source> - <translation>Verr Maj</translation> + <source>Portrait</source> + <translation type="obsolete">Portrait</translation> </message> <message> - <source>Num Lock</source> - <translation>Verr num</translation> + <source>Landscape</source> + <translation type="obsolete">Paysage</translation> </message> <message> - <source>Number Lock</source> - <translation>Verrouillage numérique</translation> + <source>A0 (841 x 1189 mm)</source> + <translation>A0 (841 x 1189 mm)</translation> </message> <message> - <source>Scroll Lock</source> - <translation>Arrêt défilement</translation> + <source>A1 (594 x 841 mm)</source> + <translation>A1 (594 x 841 mm)</translation> </message> <message> - <source>Insert</source> - <translation>Insérer</translation> + <source>A2 (420 x 594 mm)</source> + <translation>A2 (420 x 594 mm)</translation> </message> <message> - <source>Delete</source> - <translation>Supprimer</translation> + <source>A3 (297 x 420 mm)</source> + <translation>A3 (297 x 420 mm)</translation> </message> <message> - <source>Escape</source> - <translation>Échapement</translation> + <source>A5 (148 x 210 mm)</source> + <translation>A5 (148 x 210 mm)</translation> </message> <message> - <source>System Request</source> - <translation>Système</translation> + <source>A6 (105 x 148 mm)</source> + <translation>A6 (105 x 148 mm)</translation> </message> <message> - <source>Select</source> - <translation>Sélectionner</translation> + <source>A7 (74 x 105 mm)</source> + <translation>A7 (74 x 105 mm)</translation> </message> <message> - <source>Yes</source> - <translation>Oui</translation> + <source>A8 (52 x 74 mm)</source> + <translation>A8 (52 x 74 mm)</translation> </message> <message> - <source>No</source> - <translation>Non</translation> + <source>A9 (37 x 52 mm)</source> + <translation>A9 (37 x 52 mm)</translation> </message> <message> - <source>Context1</source> - <translation>Contexte1</translation> + <source>B0 (1000 x 1414 mm)</source> + <translation>B0 (1000 x 1414 mm)</translation> </message> <message> - <source>Context2</source> - <translation>Contexte2</translation> + <source>B1 (707 x 1000 mm)</source> + <translation>B1 (707 x 1000 mm)</translation> </message> <message> - <source>Context3</source> - <translation>Contexte3</translation> + <source>B2 (500 x 707 mm)</source> + <translation>B2 (500 x 707 mm)</translation> </message> <message> - <source>Context4</source> - <translation>Contexte4</translation> + <source>B3 (353 x 500 mm)</source> + <translation>B3 (353 x 500 mm)</translation> </message> <message> - <source>Call</source> - <translation>Appeler</translation> + <source>B4 (250 x 353 mm)</source> + <translation>B4 (250 x 353 mm)</translation> </message> <message> - <source>Hangup</source> - <translation>Raccrocher</translation> + <source>B6 (125 x 176 mm)</source> + <translation>B6 (125 x 176 mm)</translation> </message> <message> - <source>Flip</source> - <translation>Retourner</translation> + <source>B7 (88 x 125 mm)</source> + <translation>B7 (88 x 125 mm)</translation> </message> <message> - <source>Ctrl</source> - <translation>Ctrl</translation> + <source>B8 (62 x 88 mm)</source> + <translation>B8 (62 x 88 mm)</translation> </message> <message> - <source>Shift</source> - <translation>Maj</translation> + <source>B9 (44 x 62 mm)</source> + <translation>B9 (44 x 62 mm)</translation> </message> <message> - <source>Alt</source> - <translation>Alt</translation> + <source>B10 (31 x 44 mm)</source> + <translation>B10 (31 x 44 mm)</translation> </message> <message> - <source>Meta</source> - <translation>Méta</translation> + <source>C5E (163 x 229 mm)</source> + <translation>C5E (163 x 229 mm)</translation> </message> <message> - <source>+</source> - <translation>+</translation> + <source>DLE (110 x 220 mm)</source> + <translation>DLE (110 x 220 mm)</translation> </message> <message> - <source>F%1</source> - <translation>F%1</translation> + <source>Folio (210 x 330 mm)</source> + <translation>Folio (210 x 330 mm)</translation> </message> <message> - <source>Home Page</source> - <translation>Page d'accueil</translation> + <source>Ledger (432 x 279 mm)</source> + <translation>Ledger (432 x 279 mm)</translation> </message> <message> - <source>Monitor Brightness Up</source> - <translation>Augmenter la luminosité du moniteur</translation> + <source>Tabloid (279 x 432 mm)</source> + <translation>Tabloïde (279 x 432 mm)</translation> </message> <message> - <source>Monitor Brightness Down</source> - <translation>Baisser la luminosité du moniteur</translation> + <source>US Common #10 Envelope (105 x 241 mm)</source> + <translation>US Common #10 Envelope (105 x 241 mm)</translation> </message> <message> - <source>Keyboard Light On/Off</source> - <translation>Avec/sans lumière clavier</translation> + <source>Print current page</source> + <translation>Imprimer la page courante</translation> </message> <message> - <source>Keyboard Brightness Up</source> - <translation>Augmenter la luminosité du clavier</translation> + <source>Aliases: %1</source> + <translation>Alias : %1</translation> </message> <message> - <source>Keyboard Brightness Down</source> - <translation>Baisser la luminosité du clavier</translation> + <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source> + <translation>A4 (210 x 297 mm)</translation> </message> <message> - <source>Power Off</source> - <translation>Couper l'alimentation</translation> + <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source> + <translation>B5 (176 x 250 mm)</translation> </message> <message> - <source>Wake Up</source> - <translation>Réveiller</translation> + <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source> + <translation>Executive (7,5 x 10 pouces, 191 x 254 mm)</translation> </message> <message> - <source>Eject</source> - <translation>Éjecter</translation> + <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source> + <translation>Legal (8.5 x 14 pouces, 216 x 356 mm)</translation> </message> <message> - <source>Screensaver</source> - <translation>Économiseur d'écran</translation> + <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source> + <translation>Letter (8,5 x 11 pouces, 216 x 279 mm)</translation> </message> <message> - <source>WWW</source> - <translation>WWW</translation> + <source>Print selection</source> + <translation>Imprimer la sélection</translation> </message> <message> - <source>Sleep</source> - <translation>Dormir</translation> + <source>Page size:</source> + <translation type="obsolete">Dimensions :</translation> </message> <message> - <source>LightBulb</source> - <translation>Ampoule</translation> + <source>Orientation:</source> + <translation type="obsolete">Orientation :</translation> </message> <message> - <source>Shop</source> - <translation>Magasin</translation> + <source>Paper source:</source> + <translation type="obsolete">Source du papier :</translation> </message> <message> - <source>History</source> - <translation>Historique</translation> + <source>Print</source> + <translation>Imprimer</translation> </message> <message> - <source>Add Favorite</source> - <translation>Ajouter favori</translation> + <source>File</source> + <translation type="obsolete">Fichier</translation> </message> <message> - <source>Hot Links</source> - <translation>Liens chauds</translation> + <source>Printer</source> + <translation type="obsolete">Imprimante</translation> </message> <message> - <source>Adjust Brightness</source> - <translation>Régler la luminosité</translation> + <source>Print To File ...</source> + <translation>Imprimer dans un fichier...</translation> </message> <message> - <source>Finance</source> - <translation>Finances</translation> + <source>Print dialog</source> + <translation type="obsolete">Fenêtre d'impression</translation> </message> <message> - <source>Community</source> - <translation>Communauté</translation> + <source>Size:</source> + <translation type="obsolete">Taille :</translation> </message> <message> - <source>Audio Rewind</source> - <translation>Audio arrière</translation> + <source>Properties</source> + <translation type="obsolete">Propriétés</translation> </message> <message> - <source>Back Forward</source> - <translation>Retour avant</translation> + <source>Printer info:</source> + <translation type="obsolete">Informations sur l'imprimante :</translation> </message> <message> - <source>Application Left</source> - <translation>Application gauche</translation> + <source>Browse</source> + <translation type="obsolete">Parcourir</translation> </message> <message> - <source>Application Right</source> - <translation>Application droite</translation> + <source>Print to file</source> + <translation type="obsolete">Imprimer dans un fichier</translation> </message> <message> - <source>Book</source> - <translation>Livre</translation> + <source>Pages from</source> + <translation type="obsolete">Pages</translation> </message> <message> - <source>CD</source> - <translation>CD</translation> + <source>to</source> + <translation type="obsolete">à</translation> </message> <message> - <source>Calculator</source> - <translation>Calculatrice</translation> + <source>Selection</source> + <translation type="obsolete">Sélection</translation> </message> <message> - <source>Clear</source> - <translation>Effacer</translation> + <source>Copies</source> + <translation type="obsolete">Copies</translation> </message> <message> - <source>Clear Grab</source> - <translation>Effacer la prise</translation> + <source>Collate</source> + <translation type="obsolete">Assembler</translation> </message> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Other</source> + <translation type="obsolete">Autre</translation> </message> <message> - <source>Copy</source> - <translation>Copier</translation> + <source>Double side printing</source> + <translation type="obsolete">Impression recto verso</translation> </message> <message> - <source>Cut</source> - <translation>Couper</translation> + <source>File %1 is not writable. +Please choose a different file name.</source> + <translation>Impossible d'écrire dans le fichier %1. +Veuillez choisir un nom de fichier différent.</translation> </message> <message> - <source>Display</source> - <translation>Affichage</translation> + <source>%1 already exists. +Do you want to overwrite it?</source> + <translation>%1 existe. +Voulez-vous l'écraser ?</translation> </message> <message> - <source>DOS</source> - <translation>DOS</translation> + <source>File exists</source> + <translation>Le fichier existe</translation> </message> <message> - <source>Documents</source> - <translation>Documents</translation> + <source><qt>Do you want to overwrite it?</qt></source> + <translation><qt>voulez-vous l'écraser ?</qt></translation> </message> <message> - <source>Spreadsheet</source> - <translation>Feuille de calcul</translation> + <source>%1 is a directory. +Please choose a different file name.</source> + <translation>%1 est un dossier. +Veuillez choisir un nom de fichier différent.</translation> </message> <message> - <source>Browser</source> - <translation>Navigateur</translation> + <source>A0</source> + <translation></translation> </message> <message> - <source>Game</source> - <translation>Jeu</translation> + <source>A1</source> + <translation></translation> </message> <message> - <source>Go</source> - <translation>Aller</translation> + <source>A2</source> + <translation></translation> </message> <message> - <source>iTouch</source> - <translation>iTouch</translation> + <source>A3</source> + <translation></translation> </message> <message> - <source>Logoff</source> - <translation>Fermer une session</translation> + <source>A4</source> + <translation></translation> </message> <message> - <source>Market</source> - <translation>Marché</translation> + <source>A5</source> + <translation></translation> </message> <message> - <source>Meeting</source> - <translation>Réunion</translation> + <source>A6</source> + <translation></translation> </message> <message> - <source>Keyboard Menu</source> - <translation>Menu du clavier</translation> + <source>A7</source> + <translation></translation> </message> <message> - <source>Menu PB</source> - <translation>Menu PB</translation> + <source>A8</source> + <translation></translation> </message> <message> - <source>My Sites</source> - <translation>Mes sites</translation> + <source>A9</source> + <translation></translation> </message> <message> - <source>News</source> - <translation>Actualités</translation> + <source>B0</source> + <translation></translation> </message> <message> - <source>Home Office</source> - <translation>Bureau à domicile</translation> + <source>B1</source> + <translation></translation> </message> <message> - <source>Option</source> - <translation>Option</translation> + <source>B2</source> + <translation></translation> </message> <message> - <source>Paste</source> - <translation>Coller</translation> + <source>B3</source> + <translation></translation> </message> <message> - <source>Phone</source> - <translation>Téléphone</translation> + <source>B4</source> + <translation></translation> </message> <message> - <source>Reply</source> - <translation>Répondre</translation> + <source>B5</source> + <translation></translation> </message> <message> - <source>Reload</source> - <translation>Recharger</translation> + <source>B6</source> + <translation></translation> </message> <message> - <source>Rotate Windows</source> - <translation>Faire tourner la fenêtre</translation> + <source>B7</source> + <translation></translation> </message> <message> - <source>Rotation PB</source> - <translation>Rotation PB</translation> + <source>B8</source> + <translation></translation> </message> <message> - <source>Rotation KB</source> - <translation>Rotation KB</translation> + <source>B9</source> + <translation></translation> </message> <message> - <source>Save</source> - <translation>Enregistrer</translation> + <source>B10</source> + <translation></translation> </message> <message> - <source>Send</source> - <translation>Envoyer</translation> + <source>C5E</source> + <translation></translation> </message> <message> - <source>Spellchecker</source> - <translation>Correcteur orthographique</translation> + <source>DLE</source> + <translation></translation> </message> <message> - <source>Split Screen</source> - <translation>Partager l'écran</translation> + <source>Executive</source> + <translation></translation> </message> <message> - <source>Support</source> - <translation>Supporter</translation> + <source>Folio</source> + <translation></translation> </message> <message> - <source>Task Panel</source> - <translation>Panneau de tâches</translation> + <source>Ledger</source> + <translation></translation> </message> <message> - <source>Terminal</source> - <translation>Terminal</translation> + <source>Legal</source> + <translation></translation> </message> <message> - <source>Tools</source> - <translation>Outils</translation> + <source>Letter</source> + <translation></translation> </message> <message> - <source>Travel</source> - <translation>Voyager</translation> + <source>Tabloid</source> + <translation></translation> </message> <message> - <source>Video</source> - <translation>Vidéo</translation> + <source>US Common #10 Envelope</source> + <translation></translation> </message> <message> - <source>Word Processor</source> - <translation>Traitement de texte</translation> + <source>Custom</source> + <translation>Personnalisé</translation> </message> <message> - <source>XFer</source> - <translation>XFer</translation> + <source>&Options >></source> + <translation></translation> </message> <message> - <source>Zoom In</source> - <translation>Agrandir</translation> + <source>&Print</source> + <translation>Im&primer</translation> </message> <message> - <source>Zoom Out</source> - <translation>Rétrécir</translation> + <source>&Options <<</source> + <translation></translation> </message> <message> - <source>Away</source> - <translation>Absent</translation> + <source>Print to File (PDF)</source> + <translation>Imprimer dans un fichier (PDF)</translation> </message> <message> - <source>Messenger</source> - <translation>Messagerie instantanée</translation> + <source>Print to File (Postscript)</source> + <translation>Imprimer dans un fichier (PostScript)</translation> </message> <message> - <source>WebCam</source> - <translation>Webcaméra</translation> + <source>Local file</source> + <translation>Fichier local</translation> </message> <message> - <source>Mail Forward</source> - <translation>Faire suivre l'e-mail</translation> + <source>Write %1 file</source> + <translation>Ecriture du fichier %1</translation> </message> <message> - <source>Pictures</source> - <translation>Images</translation> + <source>The 'From' value cannot be greater than the 'To' value.</source> + <translation>La valeur 'de' ne peut pas être plus grande que la valeur 'à'.</translation> </message> +</context> +<context> + <name>QPrintPreviewDialog</name> <message> - <source>Music</source> - <translation>Musique</translation> + <source>%1%</source> + <translation>%1%</translation> </message> <message> - <source>Battery</source> - <translation>Batterie</translation> + <source>Print Preview</source> + <translation>Aperçu avant impression</translation> </message> <message> - <source>Bluetooth</source> - <translation>Bluetooth</translation> + <source>Next page</source> + <translation>Page suivante</translation> </message> <message> - <source>Wireless</source> - <translation>Sans fil</translation> + <source>Previous page</source> + <translation>Page précédente</translation> </message> <message> - <source>Ultra Wide Band</source> - <translation>Bande ultralarge</translation> + <source>First page</source> + <translation>Première page</translation> </message> <message> - <source>Audio Forward</source> - <translation>Audio avant</translation> + <source>Last page</source> + <translation>Dernière page</translation> </message> <message> - <source>Audio Repeat</source> - <translation>Audio répéter</translation> + <source>Fit width</source> + <translation>Ajuster la largeur</translation> </message> <message> - <source>Audio Random Play</source> - <translation>Audio lecture aléatoire</translation> + <source>Fit page</source> + <translation>Ajuster la page</translation> </message> <message> - <source>Subtitle</source> - <translation>Sous-titre</translation> + <source>Zoom in</source> + <translation>Zoom avant</translation> </message> <message> - <source>Audio Cycle Track</source> - <translation>Audio répéter la piste</translation> + <source>Zoom out</source> + <translation>Zoom arrière</translation> </message> <message> - <source>Time</source> - <translation>Heure</translation> + <source>Portrait</source> + <translation>Portrait</translation> </message> <message> - <source>View</source> - <translation>Afficher</translation> + <source>Landscape</source> + <translation>Paysage</translation> </message> <message> - <source>Top Menu</source> - <translation>Haut du menu</translation> + <source>Show single page</source> + <translation>Afficher une seule page</translation> </message> <message> - <source>Suspend</source> - <translation>Suspendre</translation> + <source>Show facing pages</source> + <translation>Afficher deux pages</translation> </message> <message> - <source>Hibernate</source> - <translation>Hiberner</translation> + <source>Show overview of all pages</source> + <translation>Afficher un aperçu de toutes les pages</translation> </message> -</context> -<context> - <name>QSlider</name> <message> - <source>Page left</source> - <translation>Page précédente</translation> + <source>Print</source> + <translation>Imprimer</translation> </message> <message> - <source>Page up</source> - <translation>Page précédente</translation> + <source>Page setup</source> + <translation>Mise en page</translation> </message> <message> - <source>Position</source> - <translation>Position</translation> + <source>Close</source> + <translation>Fermer</translation> </message> <message> - <source>Page right</source> - <translation>Page suivante</translation> + <source>Export to PDF</source> + <translation>Exporter vers PDF</translation> </message> <message> - <source>Page down</source> - <translation>Page suivante</translation> + <source>Export to PostScript</source> + <translation>Exporter vers PostScript</translation> + </message> + <message> + <source>Page Setup</source> + <translation>Mise en page</translation> </message> </context> <context> - <name>QSocks5SocketEngine</name> + <name>QPrintPropertiesDialog</name> <message> - <source>Connection to proxy refused</source> - <translation>Connexion au proxy refusée</translation> + <source>PPD Properties</source> + <translation type="obsolete">Propriétés PPD</translation> </message> <message> - <source>Connection to proxy closed prematurely</source> - <translation>connexion au proxy fermée prématurément</translation> - </message> - <message> - <source>Proxy host not found</source> - <translation>Hôte proxy introuvable</translation> + <source>Save</source> + <translation type="obsolete">Enregistrer</translation> </message> <message> - <source>Connection to proxy timed out</source> - <translation>Connexion au proxy expirée</translation> + <source>OK</source> + <translation type="obsolete">OK</translation> </message> +</context> +<context> + <name>QPrintPropertiesWidget</name> <message> - <source>Proxy authentication failed</source> - <translation>L'authentification proxy a échoué</translation> + <source>Form</source> + <translation>Formulaire</translation> </message> <message> - <source>Proxy authentication failed: %1</source> - <translation>L'authentification proxy a échoué : %1</translation> + <source>Page</source> + <translation></translation> </message> <message> - <source>SOCKS version 5 protocol error</source> - <translation>Erreur de protocole SOCKS version 5</translation> + <source>Advanced</source> + <translation>Avancé</translation> </message> +</context> +<context> + <name>QPrintSettingsOutput</name> <message> - <source>General SOCKSv5 server failure</source> - <translation>Erreur générale du serveur SOCKSv5</translation> + <source>Form</source> + <translation>Formulaire</translation> </message> <message> - <source>Connection not allowed by SOCKSv5 server</source> - <translation>Connexion refusée par le serveur SOCKSv5</translation> + <source>Copies</source> + <translation>Copies</translation> </message> <message> - <source>TTL expired</source> - <translation>TTL expiré</translation> + <source>Print range</source> + <translation>Imprimer la sélection</translation> </message> <message> - <source>SOCKSv5 command not supported</source> - <translation>Commande SOCKSv5 non supportée</translation> + <source>Print all</source> + <translation>Imprimer tout</translation> </message> <message> - <source>Address type not supported</source> - <translation>Type d'adresse non supporté</translation> + <source>Pages from</source> + <translation>Pages</translation> </message> <message> - <source>Unknown SOCKSv5 proxy error code 0x%1</source> - <translation>Erreur proxy SOCKSv5 inconnue : 0x%1</translation> + <source>to</source> + <translation>à</translation> </message> <message> - <source>Socks5 timeout error connecting to socks server</source> - <translation type="obsolete">Erreur d'expiration socks5 lors de l'établissement d'une connexion au serveur socks</translation> + <source>Selection</source> + <translation>Sélection</translation> </message> <message> - <source>Network operation timed out</source> - <translation>L'opération réseau a expiré</translation> + <source>Output Settings</source> + <translation>Paramètres de sortie</translation> </message> -</context> -<context> - <name>QSpinBox</name> <message> - <source>More</source> - <translation>Plus</translation> + <source>Copies:</source> + <translation>Copies :</translation> </message> <message> - <source>Less</source> - <translation>Moins</translation> + <source>Collate</source> + <translation>Assembler</translation> </message> -</context> -<context> - <name>QSql</name> <message> - <source>Delete</source> - <translation>Supprimer</translation> + <source>Reverse</source> + <translation>Inverse</translation> </message> <message> - <source>Delete this record?</source> - <translation>Supprimer cet enregistrement ?</translation> + <source>Options</source> + <translation>Options</translation> </message> <message> - <source>Yes</source> - <translation>Oui</translation> + <source>Color Mode</source> + <translation>Mode de couleur</translation> </message> <message> - <source>No</source> - <translation>Non</translation> + <source>Color</source> + <translation>Couleur</translation> </message> <message> - <source>Insert</source> - <translation>Insérer</translation> + <source>Grayscale</source> + <translation>Dégradé de gris</translation> </message> <message> - <source>Update</source> - <translation>Actualiser</translation> + <source>Duplex Printing</source> + <translation>Impression en duplex</translation> </message> <message> - <source>Save edits?</source> - <translation>Enregistrer les modifications ?</translation> + <source>None</source> + <translation>Aucun</translation> </message> <message> - <source>Cancel</source> - <translation>Annuler</translation> + <source>Long side</source> + <translation>Côté long</translation> </message> <message> - <source>Confirm</source> - <translation>Confirmer</translation> + <source>Short side</source> + <translation>Côté court</translation> </message> <message> - <source>Cancel your edits?</source> - <translation>Annuler vos modifications ?</translation> + <source>Current Page</source> + <translation>Page courante</translation> </message> </context> <context> - <name>QSslSocket</name> + <name>QPrintWidget</name> <message> - <source>Unable to write data: %1</source> - <translation>Impossible d'écrire les données : %1</translation> + <source>Form</source> + <translation>Formulaire</translation> </message> <message> - <source>Error while reading: %1</source> - <translation>Erreur lors de la lecture : %1</translation> + <source>Printer</source> + <translation>Imprimante</translation> </message> <message> - <source>Error during SSL handshake: %1</source> - <translation>Erreur lors de la poignée de main SSL : %1</translation> + <source>&Name:</source> + <translation>&Nom :</translation> </message> <message> - <source>Error creating SSL context (%1)</source> - <translation>Erreur lors de la création du contexte SSL (%1)</translation> + <source>P&roperties</source> + <translation>P&ropriétés</translation> </message> <message> - <source>Invalid or empty cipher list (%1)</source> - <translation>La list de chiffrements est invalide ou vide (%1)</translation> + <source>Location:</source> + <translation>Emplacement :</translation> </message> <message> - <source>Error creating SSL session, %1</source> - <translation>Erreur lors de la création de la session SSL, %1</translation> + <source>Preview</source> + <translation>Prévisualisation</translation> </message> <message> - <source>Error creating SSL session: %1</source> - <translation>Erreur lors de la création de la session SSL : %1</translation> + <source>Type:</source> + <translation>Type :</translation> </message> <message> - <source>Cannot provide a certificate with no key, %1</source> - <translation>Impossible de fournir un certificat sans clé, %1</translation> + <source>Output &file:</source> + <translation>&Fichier de sortie:</translation> </message> <message> - <source>Error loading local certificate, %1</source> - <translation>Erreur lors du chargement du certificat local, %1</translation> + <source>...</source> + <translation></translation> </message> +</context> +<context> + <name>QProcess</name> <message> - <source>Error loading private key, %1</source> - <translation>Erreur lors du chargement de la clé privée, %1</translation> + <source>Could not open input redirection for reading</source> + <translation>Impossible d'ouvrir la redirection d'entrée en lecture</translation> </message> <message> - <source>Private key do not certificate public key, %1</source> - <translation type="obsolete">La clé privée ne certifie pas la clé publique, %1</translation> + <source>Could not open output redirection for writing</source> + <translation>Impossible d'ouvrir la redirection de sortie pour écriture</translation> </message> <message> - <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+327"/> - <source>Private key does not certificate public key, %1</source> - <translation>La clé privée ne certifie pas la clé publique, %1</translation> + <source>Resource error (fork failure): %1</source> + <translation>Erreur de ressouce (fork) : %1</translation> </message> <message> - <source>Unable to decrypt data: %1</source> - <translation>Impossible de décrypter les données: %1</translation> + <source>Process operation timed out</source> + <translation>Operation de processus a expiré</translation> </message> <message> - <source>Private key does not certify public key, %1</source> - <translation>La clé privée ne certifie pas la clé publique, %1</translation> + <source>Error reading from process</source> + <translation>Erreur de lecture du processus</translation> </message> <message> - <source>No error</source> - <translation>Aucune erreur</translation> + <source>Error writing to process</source> + <translation>Erreur d"écriture vers le processus</translation> </message> <message> - <source>The issuer certificate could not be found</source> - <translation>Le certificat de l'émetteur est introuvable</translation> + <source>Process crashed</source> + <translation>Le processus à planté</translation> </message> <message> - <source>The certificate signature could not be decrypted</source> - <translation>La signature du certificat n'a pas pu être vérifiée</translation> + <source>No program defined</source> + <translation>Aucun programme défini</translation> </message> <message> - <source>The public key in the certificate could not be read</source> - <translation>La clé publique du certificat n'a pas pu être lue</translation> + <source>Process failed to start</source> + <translation type="obsolete">Le processus n'a pas démarré</translation> </message> <message> - <source>The signature of the certificate is invalid</source> - <translation>La signature du certificat n'est pas valide</translation> + <source>Process failed to start: %1</source> + <translation>Le démarrage du processus a échoué: %1</translation> </message> +</context> +<context> + <name>QProgressDialog</name> <message> - <source>The certificate is not yet valid</source> - <translation>Le certificat n'est pas encore valide</translation> + <source>Cancel</source> + <translation>Annuler</translation> </message> +</context> +<context> + <name>QPushButton</name> <message> - <source>The certificate has expired</source> - <translation>Le certificat a expiré</translation> + <source>Open</source> + <translation>Ouvrir</translation> </message> +</context> +<context> + <name>QRadioButton</name> <message> - <source>The certificate's notBefore field contains an invalid time</source> - <translation>Le champ pasAvant du certificat inclut une heure non valide</translation> + <source>Check</source> + <translation>Cocher</translation> </message> +</context> +<context> + <name>QRegExp</name> <message> - <source>The certificate's notAfter field contains an invalid time</source> - <translation>Le champ pasAprès du certificat inclut une heure non valide</translation> + <source>no error occurred</source> + <translation>aucune erreur ne s'est produite</translation> </message> <message> - <source>The certificate is self-signed, and untrusted</source> - <translation>Le certificat n'est pas sécurisé car auto-signé</translation> + <source>disabled feature used</source> + <translation>option désactivée</translation> </message> <message> - <source>The root certificate of the certificate chain is self-signed, and untrusted</source> - <translation>Le certificat racine de la chaîne de certificats n'est pas sécurisé car signé automatiquement</translation> + <source>bad char class syntax</source> + <translation>syntaxe invalide pour classe de caractère</translation> </message> <message> - <source>The issuer certificate of a locally looked up certificate could not be found</source> - <translation>Le certificat de l'émetteur d'un certificat converti localement est introuvable</translation> + <source>bad lookahead syntax</source> + <translation>syntaxe invalide pour lookahead</translation> </message> <message> - <source>No certificates could be verified</source> - <translation>Aucun certificat n'a pu être vérifié</translation> + <source>bad repetition syntax</source> + <translation>syntaxe invalide pour répétition</translation> </message> <message> - <source>One of the CA certificates is invalid</source> - <translation>L'un des certificats CA n'est pas valide</translation> + <source>invalid octal value</source> + <translation>valeur octale invalide</translation> </message> <message> - <source>The basicConstraints path length parameter has been exceeded</source> - <translation>Le paramètre de longueur du chemin basicConstraints a été dépassé</translation> + <source>missing left delim</source> + <translation>délémiteur gauche manquant</translation> </message> <message> - <source>The supplied certificate is unsuitable for this purpose</source> - <translation>Le certificat fourni ne convient pas pour cet objectif</translation> + <source>unexpected end</source> + <translation>fin impromptue</translation> </message> <message> - <source>The root CA certificate is not trusted for this purpose</source> - <translation>Le certificat CA racine n'est pas sécurisé pour cet objectif</translation> + <source>met internal limit</source> + <translation>rencontré limite interne</translation> </message> <message> - <source>The root CA certificate is marked to reject the specified purpose</source> - <translation>Le certificat CA racine est marqué pour rejeter l'objectif spécifié</translation> - </message> - <message> - <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> - <translation>Le certificat de l'émetteur candidat actuel a été rejeté car le nom de son sujet ne correspondait pas au nom de l'émetteur du certificat actuel</translation> - </message> - <message> - <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source> - <translation>Le certificat de l'émetteur candidat actuel a été rejeté car le nom de son sujet et son numéro de série étaient présents et ne correspondaient pas à l'identifiant de la clé d'autorité du certificat actuel</translation> - </message> - <message> - <source>The peer did not present any certificate</source> - <translation>Le poste ne contient aucun certificat</translation> - </message> - <message> - <source>The host name did not match any of the valid hosts for this certificate</source> - <translation>Le nom d'hôte ne correspondait à aucun des hôtes valides pour ce certificat</translation> + <source>invalid interval</source> + <translation>intervalle non valide</translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>invalid category</source> + <translation>catégorie non valide</translation> </message> </context> <context> - <name>QSystemSemaphore</name> + <name>QSQLite2Driver</name> <message> - <source>%1: out of resources</source> - <translation>%1: plus de ressources disponibles</translation> + <source>Error to open database</source> + <translation type="obsolete">Erreur à l'ouverture de la base de données</translation> </message> <message> - <source>%1: permission denied</source> - <translation>%1: permission refusée</translation> + <source>Unable to begin transaction</source> + <translation>Impossible de démarrer la transaction</translation> </message> <message> - <source>%1: already exists</source> - <translation>%1 : existe déjà</translation> + <source>Unable to commit transaction</source> + <translation>Impossible de soumettre la transaction</translation> </message> <message> - <source>%1: does not exist</source> - <translation>%1 : n'existe pas</translation> + <source>Unable to rollback Transaction</source> + <translation type="obsolete">Impossible d'annuler la transaction</translation> </message> <message> - <source>%1: unknown error %2</source> - <translation>%1: erreur inconnue %2</translation> + <source>Error opening database</source> + <translation>Erreur lors de l'ouverture de la base de données</translation> + </message> + <message> + <source>Unable to rollback transaction</source> + <translation>Impossible de répéter la transaction</translation> </message> </context> <context> - <name>QTDSDriver</name> + <name>QSQLite2Result</name> <message> - <source>Unable to open connection</source> - <translation>Impossible d'ouvrir la connexion</translation> + <source>Unable to fetch results</source> + <translation>Impossible de récupérer les résultats</translation> </message> <message> - <source>Unable to use database</source> - <translation>Impossible d'utiliser la base de données</translation> + <source>Unable to execute statement</source> + <translation>Impossible d'exécuter la requête</translation> </message> </context> <context> - <name>QTabBar</name> + <name>QSQLiteDriver</name> <message> - <source>Scroll Left</source> - <translation>Défiler vers la gauche</translation> + <source>Error opening database</source> + <translation>Erreur lors de l'ouverture de la base de données</translation> </message> <message> - <source>Scroll Right</source> - <translation>Défiler vers la droite</translation> + <source>Error closing database</source> + <translation>Erreur lors de la fermeture de la base de données</translation> </message> -</context> -<context> - <name>QTcpServer</name> <message> - <source>Socket operation unsupported</source> - <translation type="obsolete">Operation socket non supportée</translation> + <source>Unable to begin transaction</source> + <translation>Impossible de démarrer la transaction</translation> </message> <message> - <source>Operation on socket is not supported</source> - <translation>Opération sur le socket non supportée</translation> + <source>Unable to commit transaction</source> + <translation>Incapable de soumettre la transaction</translation> </message> -</context> -<context> - <name>QTextControl</name> <message> - <source>&Undo</source> - <translation>&Annuler</translation> + <source>Unable to roll back transaction</source> + <translation type="obsolete">Impossible d'annuler la transaction</translation> </message> <message> - <source>&Redo</source> - <translation>&Répéter</translation> + <source>Unable to rollback transaction</source> + <translation>Impossible d'annuler la transaction</translation> </message> +</context> +<context> + <name>QSQLiteResult</name> <message> - <source>Cu&t</source> - <translation>Co&uper</translation> + <source>Unable to fetch row</source> + <translation>Impossible de récupérer la rangée</translation> </message> <message> - <source>&Copy</source> - <translation>Cop&ier</translation> + <source>Unable to execute statement</source> + <translation>Impossible d'exécuter la requête</translation> </message> <message> - <source>Copy &Link Location</source> - <translation>Copier l'adresse du &lien</translation> + <source>Unable to reset statement</source> + <translation>Impossible de réinitialiser la requête</translation> </message> <message> - <source>&Paste</source> - <translation>Co&ller</translation> + <source>Unable to bind parameters</source> + <translation>Impossible d'attacher les paramètres</translation> </message> <message> - <source>Delete</source> - <translation>Supprimer</translation> + <source>Parameter count mismatch</source> + <translation>Nombre de paramètres incorrect</translation> </message> <message> - <source>Select All</source> - <translation>Tout sélectionner</translation> + <source>No query</source> + <translation>Pas de requête</translation> </message> </context> <context> - <name>QToolButton</name> + <name>QScriptBreakpointsModel</name> <message> - <source>Press</source> - <translation>Presser</translation> + <source>ID</source> + <translation>Identifiant</translation> </message> <message> - <source>Open</source> - <translation>Ouvrir</translation> + <source>Location</source> + <translation>Lieu</translation> </message> -</context> -<context> - <name>QUdpSocket</name> <message> - <source>This platform does not support IPv6</source> - <translation>Cette plateforme ne supporte pas IPv6</translation> + <source>Condition</source> + <translation>Condition</translation> </message> -</context> -<context> - <name>QUndoGroup</name> <message> - <source>Undo</source> - <translation>Annuler</translation> + <source>Ignore-count</source> + <translation>Comptes d'ignorés</translation> </message> <message> - <source>Redo</source> - <translation>Répéter</translation> + <source>Single-shot</source> + <translation>Un seul tir</translation> </message> -</context> -<context> - <name>QUndoModel</name> <message> - <source><empty></source> - <translation><vide></translation> + <source>Hit-count</source> + <translation>Compte de coups</translation> </message> </context> <context> - <name>QUndoStack</name> + <name>QScriptBreakpointsWidget</name> <message> - <source>Undo</source> - <translation>Annuler</translation> + <source>New</source> + <translation>Créer</translation> </message> <message> - <source>Redo</source> - <translation>Répéter</translation> + <source>Delete</source> + <translation>Supprimer</translation> </message> </context> <context> - <name>QUnicodeControlCharacterMenu</name> + <name>QScriptDebugger</name> <message> - <source>LRM Left-to-right mark</source> - <translation>LRM Left-to-right mark</translation> + <source>Go to Line</source> + <translation>Aller à la ligne</translation> </message> <message> - <source>RLM Right-to-left mark</source> - <translation>RLM Right-to-left mark</translation> + <source>Line:</source> + <translation>Ligne:</translation> </message> <message> - <source>ZWJ Zero width joiner</source> - <translation>ZWJ Zero width joiner</translation> + <source>Interrupt</source> + <translation>Interrompre</translation> </message> <message> - <source>ZWNJ Zero width non-joiner</source> - <translation>ZWNJ Zero width non-joiner</translation> + <source>Shift+F5</source> + <translation>Shift+F5</translation> </message> <message> - <source>ZWSP Zero width space</source> - <translation>ZWSP Zero width space</translation> + <source>Continue</source> + <translation>Continuer</translation> </message> <message> - <source>LRE Start of left-to-right embedding</source> - <translation>LRE Start of left-to-right embedding</translation> + <source>F5</source> + <translation>F5</translation> </message> <message> - <source>RLE Start of right-to-left embedding</source> - <translation>RLE Start of right-to-left embedding</translation> + <source>Step Into</source> + <translation>Pas à pas détaillé</translation> </message> <message> - <source>LRO Start of left-to-right override</source> - <translation>LRO Start of left-to-right override</translation> + <source>F11</source> + <translation>F11</translation> </message> <message> - <source>RLO Start of right-to-left override</source> - <translation>RLO Start of right-to-left override</translation> + <source>Step Over</source> + <translation>Pas à pas principal</translation> </message> <message> - <source>PDF Pop directional formatting</source> - <translation>PDF Pop directional formatting</translation> + <source>F10</source> + <translation>F10</translation> </message> <message> - <source>Insert Unicode control character</source> - <translation>Insérer caractère de contrôle Unicode</translation> + <source>Step Out</source> + <translation>Pas à pas sortant</translation> </message> -</context> -<context> - <name>QWebFrame</name> <message> - <source>Request cancelled</source> - <translation>Requête annulée</translation> + <source>Shift+F11</source> + <translation>Shift+F11</translation> </message> <message> - <source>Request blocked</source> - <translation>Requête bloquée</translation> + <source>Run to Cursor</source> + <translation>Exécuter au curseur</translation> </message> <message> - <source>Cannot show URL</source> - <translation>Impossible d'afficher l'URL</translation> + <source>Ctrl+F10</source> + <translation>Ctrl+F10</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+722"/> - <source>Frame load interruped by policy change</source> - <translation>Chargement de la frame interrompu par un changement de configuration</translation> + <source>Run to New Script</source> + <translation>Exécuter au nouveau script</translation> </message> <message> - <source>Cannot show mimetype</source> - <translation>Impossible d'afficher le mimetype</translation> + <source>Toggle Breakpoint</source> + <translation>Basculer le point d'arrêt</translation> </message> <message> - <source>File does not exist</source> - <translation>Le fichier n'existe pas</translation> + <source>F9</source> + <translation>F9</translation> </message> <message> - <source>Frame load interrupted by policy change</source> - <translation>Chargement du cadre interrompue par le changement de stratégie</translation> + <source>Clear Debug Output</source> + <translation>Effacer les résultats du débogage</translation> </message> -</context> -<context> - <name>QWebPage</name> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/> - <source>Submit</source> - <comment>default label for Submit buttons in forms on web pages</comment> - <translation>Soumettre</translation> + <source>Clear Error Log</source> + <translation>Effacer le journal d'erreurs</translation> </message> <message> - <location line="+5"/> - <source>Submit</source> - <comment>Submit (input element) alt text for <input> elements with no alt, title, or value</comment> - <translation>Soumettre</translation> + <source>Clear Console</source> + <translation>Effacer la console</translation> </message> <message> - <location line="+5"/> - <source>Reset</source> - <comment>default label for Reset buttons in forms on web pages</comment> - <translation>Réinitialiser</translation> + <source>&Find in Script...</source> + <translation>&Chercher dans le script...</translation> </message> <message> - <source>Searchable Index</source> - <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> - <translation type="obsolete">Index recherchable</translation> + <source>Ctrl+F</source> + <translation>Ctrl+F</translation> </message> <message> - <location line="+15"/> - <source>Choose File</source> - <comment>title for file button used in HTML forms</comment> - <translation>Choisir le fichier</translation> + <source>Find &Next</source> + <translation>Résultat &suivant</translation> + </message> + <message> + <source>F3</source> + <translation>F3</translation> + </message> + <message> + <source>Find &Previous</source> + <translation>Chercher &précédent</translation> + </message> + <message> + <source>Shift+F3</source> + <translation>Shift+F3</translation> + </message> + <message> + <source>Ctrl+G</source> + <translation>Ctrl+G</translation> + </message> + <message> + <source>Debug</source> + <translation>Déboguer</translation> + </message> +</context> +<context> + <name>QScriptDebuggerCodeFinderWidget</name> + <message> + <source>Close</source> + <translation>Fermer</translation> + </message> + <message> + <source>Previous</source> + <translation>Précédent</translation> + </message> + <message> + <source>Next</source> + <translation>Suivant</translation> + </message> + <message> + <source>Case Sensitive</source> + <translation>Sensible à la casse</translation> + </message> + <message> + <source>Whole words</source> + <translation>Mots complets</translation> + </message> + <message> + <source><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped</source> + <translation><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;La recherche est revenue au début</translation> + </message> +</context> +<context> + <name>QScriptDebuggerLocalsModel</name> + <message> + <source>Name</source> + <translation>Nom</translation> + </message> + <message> + <source>Value</source> + <translation>Valeur</translation> + </message> +</context> +<context> + <name>QScriptDebuggerStackModel</name> + <message> + <source>Level</source> + <translation>Niveau</translation> + </message> + <message> + <source>Name</source> + <translation>Nom</translation> + </message> + <message> + <source>Location</source> + <translation>Lieu</translation> + </message> +</context> +<context> + <name>QScriptEdit</name> + <message> + <source>Toggle Breakpoint</source> + <translation>Basculer le point d'arrêt</translation> + </message> + <message> + <source>Disable Breakpoint</source> + <translation>Désactiver le point d'arrêt</translation> + </message> + <message> + <source>Enable Breakpoint</source> + <translation>Activer le point d'arrêt</translation> + </message> + <message> + <source>Breakpoint Condition:</source> + <translation>Condition du point d'arrêt:</translation> + </message> +</context> +<context> + <name>QScriptEngineDebugger</name> + <message> + <source>Loaded Scripts</source> + <translation>Scripts chargés</translation> + </message> + <message> + <source>Breakpoints</source> + <translation>Points d'arrêt</translation> + </message> + <message> + <source>Stack</source> + <translation>Empiler</translation> + </message> + <message> + <source>Locals</source> + <translation>Locaux</translation> + </message> + <message> + <source>Console</source> + <translation>Console</translation> + </message> + <message> + <source>Debug Output</source> + <translation>Résultats du débogage</translation> + </message> + <message> + <source>Error Log</source> + <translation>Journal d'erreurs</translation> + </message> + <message> + <source>Search</source> + <translation>Chercher</translation> + </message> + <message> + <source>View</source> + <translation>Affichage</translation> + </message> + <message> + <source>Qt Script Debugger</source> + <translation>Débogueur de script Qt</translation> + </message> +</context> +<context> + <name>QScriptNewBreakpointWidget</name> + <message> + <source>Close</source> + <translation>Fermer</translation> + </message> +</context> +<context> + <name>QScrollBar</name> + <message> + <source>Scroll here</source> + <translation>Défiler jusqu'ici</translation> + </message> + <message> + <source>Left edge</source> + <translation>Extrême gauche</translation> + </message> + <message> + <source>Top</source> + <translation>En haut</translation> + </message> + <message> + <source>Right edge</source> + <translation>Extrême droite</translation> + </message> + <message> + <source>Bottom</source> + <translation>En bas</translation> + </message> + <message> + <source>Page left</source> + <translation>Page précédente</translation> + </message> + <message> + <source>Page up</source> + <translation>Page précédente</translation> + </message> + <message> + <source>Page right</source> + <translation>Page suivante</translation> + </message> + <message> + <source>Page down</source> + <translation>Page suivante</translation> + </message> + <message> + <source>Scroll left</source> + <translation>Défiler vers la gauche</translation> + </message> + <message> + <source>Scroll up</source> + <translation>Défiler vers le haut</translation> + </message> + <message> + <source>Scroll right</source> + <translation>Défiler vers la droite</translation> + </message> + <message> + <source>Scroll down</source> + <translation>Défiler vers le bas</translation> + </message> + <message> + <source>Line up</source> + <translation>Aligner</translation> + </message> + <message> + <source>Position</source> + <translation>Position</translation> + </message> + <message> + <source>Line down</source> + <translation>Aligner en-bas</translation> + </message> +</context> +<context> + <name>QSharedMemory</name> + <message> + <source>%1: unable to set key on lock</source> + <translation>%1 : impossible d'affecter la clé au verrou</translation> + </message> + <message> + <source>%1: create size is less then 0</source> + <translation>%1 : taille de création est inférieur à 0</translation> + </message> + <message> + <source>%1: unable to lock</source> + <translation>%1 : impossible de vérrouiller</translation> + </message> + <message> + <source>%1: unable to unlock</source> + <translation>%1 : impossible de déverrouiller</translation> + </message> + <message> + <source>%1: permission denied</source> + <translation>%1 : permission refusée</translation> + </message> + <message> + <source>%1: already exists</source> + <translation>%1 : existe déjà</translation> + </message> + <message> + <source>%1: doesn't exists</source> + <translation>%1 : n'existe pas</translation> + </message> + <message> + <source>%1: out of resources</source> + <translation>%1 : plus de ressources disponibles</translation> + </message> + <message> + <source>%1: unknown error %2</source> + <translation>%1 : erreur inconnue %2</translation> + </message> + <message> + <source>%1: key is empty</source> + <translation>%1 : clé vide</translation> + </message> + <message> + <source>%1: unix key file doesn't exists</source> + <translation type="obsolete">%1 : le fichier de clé unix n'existe pas</translation> + </message> + <message> + <source>%1: ftok failed</source> + <translation>%1 : ftok a échoué</translation> + </message> + <message> + <source>%1: unable to make key</source> + <translation>%1 : impossible de créer la clé</translation> + </message> + <message> + <source>%1: system-imposed size restrictions</source> + <translation>%1 : le système impose des restrictions sur la taille</translation> + </message> + <message> + <source>%1: not attached</source> + <translation>%1 : non attaché</translation> + </message> + <message> + <source>%1: invalid size</source> + <translation>%1 : taille invalide</translation> + </message> + <message> + <source>%1: key error</source> + <translation>%1 : erreur de clé</translation> + </message> + <message> + <source>%1: size query failed</source> + <translation>%1 : la requête de taille a échoué</translation> + </message> + <message> + <source>%1: doesn't exist</source> + <translation>%1: n'existe pas</translation> + </message> + <message> + <source>%1: UNIX key file doesn't exist</source> + <translation>%1: le fichier de clés UNIX n'existe pas</translation> + </message> +</context> +<context> + <name>QShortcut</name> + <message> + <source>Space</source> + <extracomment>This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment> + <translation>Espace</translation> + </message> + <message> + <source>Esc</source> + <translation>Échap</translation> + </message> + <message> + <source>Tab</source> + <translation>Tab</translation> + </message> + <message> + <source>Backtab</source> + <translation>Tab arr</translation> + </message> + <message> + <source>Backspace</source> + <translation>Effacement</translation> + </message> + <message> + <source>Return</source> + <translation>Retour</translation> + </message> + <message> + <source>Enter</source> + <translation>Entrée</translation> + </message> + <message> + <source>Ins</source> + <translation>Inser</translation> + </message> + <message> + <source>Del</source> + <translation>Suppr</translation> + </message> + <message> + <source>Pause</source> + <translation>Pause</translation> + </message> + <message> + <source>Print</source> + <translation>Imprimer</translation> + </message> + <message> + <source>SysReq</source> + <translation>Syst</translation> + </message> + <message> + <source>Home</source> + <translation>Début</translation> + </message> + <message> + <source>End</source> + <translation>Fin</translation> + </message> + <message> + <source>Left</source> + <translation>Gauche</translation> + </message> + <message> + <source>Up</source> + <translation>Haut</translation> + </message> + <message> + <source>Right</source> + <translation>Droite</translation> + </message> + <message> + <source>Down</source> + <translation>Bas</translation> + </message> + <message> + <source>PgUp</source> + <translation>Page préc</translation> + </message> + <message> + <source>PgDown</source> + <translation>Page suiv</translation> + </message> + <message> + <source>CapsLock</source> + <translation>Verr maj</translation> + </message> + <message> + <source>NumLock</source> + <translation>Verr num</translation> + </message> + <message> + <source>ScrollLock</source> + <translation>Arrêt défil</translation> + </message> + <message> + <source>Menu</source> + <translation>Menu</translation> + </message> + <message> + <source>Help</source> + <translation>Aide</translation> + </message> + <message> + <source>Back</source> + <translation>Précédent (historique)</translation> + </message> + <message> + <source>Forward</source> + <translation>Successeur (historique)</translation> + </message> + <message> + <source>Stop</source> + <translation>Arrêter</translation> + </message> + <message> + <source>Refresh</source> + <translation>Rafraîchir</translation> + </message> + <message> + <source>Volume Down</source> + <translation>Volume bas</translation> + </message> + <message> + <source>Volume Mute</source> + <translation>Volume muet</translation> + </message> + <message> + <source>Volume Up</source> + <translation>Volume haut +</translation> + </message> + <message> + <source>Bass Boost</source> + <translation>Graves fort</translation> + </message> + <message> + <source>Bass Up</source> + <translation>Graves haut</translation> + </message> + <message> + <source>Bass Down</source> + <translation>Graves bas</translation> + </message> + <message> + <source>Treble Up</source> + <translation>Aigus haut</translation> + </message> + <message> + <source>Treble Down</source> + <translation>Aigus bas</translation> + </message> + <message> + <source>Media Play</source> + <translation>Média démarrer</translation> + </message> + <message> + <source>Media Stop</source> + <translation>Média arrêt</translation> + </message> + <message> + <source>Media Previous</source> + <translation>Média précédent</translation> + </message> + <message> + <source>Media Next</source> + <translation>Média suivant</translation> + </message> + <message> + <source>Media Record</source> + <translation>Média enregistrer</translation> + </message> + <message> + <source>Favorites</source> + <translation>Préférés</translation> + </message> + <message> + <source>Search</source> + <translation>Recherche</translation> + </message> + <message> + <source>Standby</source> + <translation>Attente</translation> + </message> + <message> + <source>Open URL</source> + <translation>Ouvrir URL</translation> + </message> + <message> + <source>Launch Mail</source> + <translation>Lancer courrier</translation> + </message> + <message> + <source>Launch Media</source> + <translation>Lancer média</translation> + </message> + <message> + <source>Launch (0)</source> + <translation>Lancer (0)</translation> + </message> + <message> + <source>Launch (1)</source> + <translation>Lancer (1)</translation> + </message> + <message> + <source>Launch (2)</source> + <translation>Lancer (2)</translation> + </message> + <message> + <source>Launch (3)</source> + <translation>Lancer (3)</translation> + </message> + <message> + <source>Launch (4)</source> + <translation>Lancer (4)</translation> + </message> + <message> + <source>Launch (5)</source> + <translation>Lancer (5)</translation> + </message> + <message> + <source>Launch (6)</source> + <translation>Lancer (6)</translation> + </message> + <message> + <source>Launch (7)</source> + <translation>Lancer (7)</translation> + </message> + <message> + <source>Launch (8)</source> + <translation>Lancer (8)</translation> + </message> + <message> + <source>Launch (9)</source> + <translation>Lancer (9)</translation> + </message> + <message> + <source>Launch (A)</source> + <translation>Lancer (A)</translation> + </message> + <message> + <source>Launch (B)</source> + <translation>Lancer (B)</translation> + </message> + <message> + <source>Launch (C)</source> + <translation>Lancer (C)</translation> + </message> + <message> + <source>Launch (D)</source> + <translation>Lancer (D)</translation> + </message> + <message> + <source>Launch (E)</source> + <translation>Lancer (E)</translation> + </message> + <message> + <source>Launch (F)</source> + <translation>Lancer (F)</translation> + </message> + <message> + <source>Print Screen</source> + <translation>Capture d'écran</translation> + </message> + <message> + <source>Page Up</source> + <translation>Page haut</translation> + </message> + <message> + <source>Page Down</source> + <translation>Page bas</translation> + </message> + <message> + <source>Caps Lock</source> + <translation>Verr Maj</translation> + </message> + <message> + <source>Num Lock</source> + <translation>Verr num</translation> + </message> + <message> + <source>Number Lock</source> + <translation>Verrouillage numérique</translation> + </message> + <message> + <source>Scroll Lock</source> + <translation>Arrêt défilement</translation> + </message> + <message> + <source>Insert</source> + <translation>Insérer</translation> + </message> + <message> + <source>Delete</source> + <translation>Supprimer</translation> + </message> + <message> + <source>Escape</source> + <translation>Échapement</translation> + </message> + <message> + <source>System Request</source> + <translation>Système</translation> + </message> + <message> + <source>Select</source> + <translation>Sélectionner</translation> + </message> + <message> + <source>Yes</source> + <translation>Oui</translation> + </message> + <message> + <source>No</source> + <translation>Non</translation> + </message> + <message> + <source>Context1</source> + <translation>Contexte1</translation> + </message> + <message> + <source>Context2</source> + <translation>Contexte2</translation> + </message> + <message> + <source>Context3</source> + <translation>Contexte3</translation> + </message> + <message> + <source>Context4</source> + <translation>Contexte4</translation> + </message> + <message> + <source>Call</source> + <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment> + <translation>Appeler</translation> + </message> + <message> + <source>Hangup</source> + <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment> + <translation>Raccrocher</translation> + </message> + <message> + <source>Toggle Call/Hangup</source> + <extracomment>Button that will hang up if we're in call, or make a call if we're not.</extracomment> + <translation>Décrocher/Raccrocher</translation> + </message> + <message> + <source>Flip</source> + <translation>Retourner</translation> + </message> + <message> + <source>Voice Dial</source> + <extracomment>Button to trigger voice dialling</extracomment> + <translation>Commande vocale</translation> + </message> + <message> + <source>Last Number Redial</source> + <extracomment>Button to redial the last number called</extracomment> + <translation>Bis</translation> + </message> + <message> + <source>Camera Shutter</source> + <extracomment>Button to trigger the camera shutter (take a picture)</extracomment> + <translation>Déclencheur appareil photo</translation> + </message> + <message> + <source>Camera Focus</source> + <extracomment>Button to focus the camera</extracomment> + <translation>Focus appareil photo</translation> + </message> + <message> + <source>Kanji</source> + <translation></translation> + </message> + <message> + <source>Muhenkan</source> + <translation></translation> + </message> + <message> + <source>Henkan</source> + <translation></translation> + </message> + <message> + <source>Romaji</source> + <translation></translation> + </message> + <message> + <source>Hiragana</source> + <translation></translation> + </message> + <message> + <source>Katakana</source> + <translation></translation> + </message> + <message> + <source>Hiragana Katakana</source> + <translation></translation> + </message> + <message> + <source>Zenkaku</source> + <translation></translation> + </message> + <message> + <source>Hankaku</source> + <translation></translation> + </message> + <message> + <source>Zenkaku Hankaku</source> + <translation></translation> + </message> + <message> + <source>Touroku</source> + <translation></translation> + </message> + <message> + <source>Massyo</source> + <translation></translation> + </message> + <message> + <source>Kana Lock</source> + <translation></translation> + </message> + <message> + <source>Kana Shift</source> + <translation></translation> + </message> + <message> + <source>Eisu Shift</source> + <translation></translation> + </message> + <message> + <source>Eisu toggle</source> + <translation></translation> + </message> + <message> + <source>Code input</source> + <translation></translation> + </message> + <message> + <source>Multiple Candidate</source> + <translation>Candidat multiple</translation> + </message> + <message> + <source>Previous Candidate</source> + <translation>Candidat précédent</translation> + </message> + <message> + <source>Hangul</source> + <translation></translation> + </message> + <message> + <source>Hangul Start</source> + <translation>Hangul début</translation> + </message> + <message> + <source>Hangul End</source> + <translation>Hangul Fin</translation> + </message> + <message> + <source>Hangul Hanja</source> + <translation></translation> + </message> + <message> + <source>Hangul Jamo</source> + <translation></translation> + </message> + <message> + <source>Hangul Romaja</source> + <translation></translation> + </message> + <message> + <source>Hangul Jeonja</source> + <translation></translation> + </message> + <message> + <source>Hangul Banja</source> + <translation></translation> + </message> + <message> + <source>Hangul PreHanja</source> + <translation></translation> + </message> + <message> + <source>Hangul PostHanja</source> + <translation></translation> + </message> + <message> + <source>Hangul Special</source> + <translation></translation> + </message> + <message> + <source>Ctrl</source> + <translation>Ctrl</translation> + </message> + <message> + <source>Shift</source> + <translation>Maj</translation> + </message> + <message> + <source>Alt</source> + <translation>Alt</translation> + </message> + <message> + <source>Meta</source> + <translation>Méta</translation> + </message> + <message> + <source>+</source> + <translation>+</translation> + </message> + <message> + <source>F%1</source> + <translation>F%1</translation> + </message> + <message> + <source>Home Page</source> + <translation>Page d'accueil</translation> + </message> + <message> + <source>Media Pause</source> + <extracomment>Media player pause button</extracomment> + <translation>Média pause</translation> + </message> + <message> + <source>Toggle Media Play/Pause</source> + <extracomment>Media player button to toggle between playing and paused</extracomment> + <translation>Média Lecture/Pause</translation> + </message> + <message> + <source>Monitor Brightness Up</source> + <translation>Augmenter la luminosité du moniteur</translation> + </message> + <message> + <source>Monitor Brightness Down</source> + <translation>Baisser la luminosité du moniteur</translation> + </message> + <message> + <source>Keyboard Light On/Off</source> + <translation>Avec/sans lumière clavier</translation> + </message> + <message> + <source>Keyboard Brightness Up</source> + <translation>Augmenter la luminosité du clavier</translation> + </message> + <message> + <source>Keyboard Brightness Down</source> + <translation>Baisser la luminosité du clavier</translation> + </message> + <message> + <source>Power Off</source> + <translation>Couper l'alimentation</translation> + </message> + <message> + <source>Wake Up</source> + <translation>Réveiller</translation> + </message> + <message> + <source>Eject</source> + <translation>Éjecter</translation> + </message> + <message> + <source>Screensaver</source> + <translation>Économiseur d'écran</translation> + </message> + <message> + <source>WWW</source> + <translation>WWW</translation> + </message> + <message> + <source>Sleep</source> + <translation>Dormir</translation> + </message> + <message> + <source>LightBulb</source> + <translation>Ampoule</translation> + </message> + <message> + <source>Shop</source> + <translation>Magasin</translation> + </message> + <message> + <source>History</source> + <translation>Historique</translation> + </message> + <message> + <source>Add Favorite</source> + <translation>Ajouter favori</translation> + </message> + <message> + <source>Hot Links</source> + <translation>Liens chauds</translation> + </message> + <message> + <source>Adjust Brightness</source> + <translation>Régler la luminosité</translation> + </message> + <message> + <source>Finance</source> + <translation>Finances</translation> + </message> + <message> + <source>Community</source> + <translation>Communauté</translation> + </message> + <message> + <source>Audio Rewind</source> + <translation>Audio arrière</translation> + </message> + <message> + <source>Back Forward</source> + <translation>Retour avant</translation> + </message> + <message> + <source>Application Left</source> + <translation>Application gauche</translation> + </message> + <message> + <source>Application Right</source> + <translation>Application droite</translation> + </message> + <message> + <source>Book</source> + <translation>Livre</translation> + </message> + <message> + <source>CD</source> + <translation>CD</translation> + </message> + <message> + <source>Calculator</source> + <translation>Calculatrice</translation> + </message> + <message> + <source>Clear</source> + <translation>Effacer</translation> + </message> + <message> + <source>Clear Grab</source> + <translation>Effacer la prise</translation> + </message> + <message> + <source>Close</source> + <translation>Fermer</translation> + </message> + <message> + <source>Copy</source> + <translation>Copier</translation> + </message> + <message> + <source>Cut</source> + <translation>Couper</translation> + </message> + <message> + <source>Display</source> + <translation>Affichage</translation> + </message> + <message> + <source>DOS</source> + <translation>DOS</translation> + </message> + <message> + <source>Documents</source> + <translation>Documents</translation> + </message> + <message> + <source>Spreadsheet</source> + <translation>Feuille de calcul</translation> + </message> + <message> + <source>Browser</source> + <translation>Navigateur</translation> + </message> + <message> + <source>Game</source> + <translation>Jeu</translation> + </message> + <message> + <source>Go</source> + <translation>Aller</translation> + </message> + <message> + <source>iTouch</source> + <translation>iTouch</translation> + </message> + <message> + <source>Logoff</source> + <translation>Fermer une session</translation> + </message> + <message> + <source>Market</source> + <translation>Marché</translation> + </message> + <message> + <source>Meeting</source> + <translation>Réunion</translation> + </message> + <message> + <source>Keyboard Menu</source> + <translation>Menu du clavier</translation> + </message> + <message> + <source>Menu PB</source> + <translation>Menu PB</translation> + </message> + <message> + <source>My Sites</source> + <translation>Mes sites</translation> + </message> + <message> + <source>News</source> + <translation>Actualités</translation> + </message> + <message> + <source>Home Office</source> + <translation>Bureau à domicile</translation> + </message> + <message> + <source>Option</source> + <translation>Option</translation> + </message> + <message> + <source>Paste</source> + <translation>Coller</translation> + </message> + <message> + <source>Phone</source> + <translation>Téléphone</translation> + </message> + <message> + <source>Reply</source> + <translation>Répondre</translation> + </message> + <message> + <source>Reload</source> + <translation>Recharger</translation> + </message> + <message> + <source>Rotate Windows</source> + <translation>Faire tourner la fenêtre</translation> + </message> + <message> + <source>Rotation PB</source> + <translation>Rotation PB</translation> + </message> + <message> + <source>Rotation KB</source> + <translation>Rotation KB</translation> + </message> + <message> + <source>Save</source> + <translation>Enregistrer</translation> + </message> + <message> + <source>Send</source> + <translation>Envoyer</translation> + </message> + <message> + <source>Spellchecker</source> + <translation>Correcteur orthographique</translation> + </message> + <message> + <source>Split Screen</source> + <translation>Partager l'écran</translation> + </message> + <message> + <source>Support</source> + <translation>Supporter</translation> + </message> + <message> + <source>Task Panel</source> + <translation>Panneau de tâches</translation> + </message> + <message> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <source>Tools</source> + <translation>Outils</translation> + </message> + <message> + <source>Travel</source> + <translation>Voyager</translation> + </message> + <message> + <source>Video</source> + <translation>Vidéo</translation> + </message> + <message> + <source>Word Processor</source> + <translation>Traitement de texte</translation> + </message> + <message> + <source>XFer</source> + <translation>XFer</translation> + </message> + <message> + <source>Zoom In</source> + <translation>Agrandir</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>Rétrécir</translation> + </message> + <message> + <source>Away</source> + <translation>Absent</translation> + </message> + <message> + <source>Messenger</source> + <translation>Messagerie instantanée</translation> + </message> + <message> + <source>WebCam</source> + <translation>Webcaméra</translation> + </message> + <message> + <source>Mail Forward</source> + <translation>Faire suivre l'e-mail</translation> + </message> + <message> + <source>Pictures</source> + <translation>Images</translation> + </message> + <message> + <source>Music</source> + <translation>Musique</translation> + </message> + <message> + <source>Battery</source> + <translation>Batterie</translation> + </message> + <message> + <source>Bluetooth</source> + <translation>Bluetooth</translation> + </message> + <message> + <source>Wireless</source> + <translation>Sans fil</translation> + </message> + <message> + <source>Ultra Wide Band</source> + <translation>Bande ultralarge</translation> + </message> + <message> + <source>Audio Forward</source> + <translation>Audio avant</translation> + </message> + <message> + <source>Audio Repeat</source> + <translation>Audio répéter</translation> + </message> + <message> + <source>Audio Random Play</source> + <translation>Audio lecture aléatoire</translation> + </message> + <message> + <source>Subtitle</source> + <translation>Sous-titre</translation> + </message> + <message> + <source>Audio Cycle Track</source> + <translation>Audio répéter la piste</translation> + </message> + <message> + <source>Time</source> + <translation>Heure</translation> + </message> + <message> + <source>View</source> + <translation>Affichage</translation> + </message> + <message> + <source>Top Menu</source> + <translation>Haut du menu</translation> + </message> + <message> + <source>Suspend</source> + <translation>Suspendre</translation> + </message> + <message> + <source>Hibernate</source> + <translation>Hiberner</translation> + </message> +</context> +<context> + <name>QSlider</name> + <message> + <source>Page left</source> + <translation>Page précédente</translation> + </message> + <message> + <source>Page up</source> + <translation>Page précédente</translation> + </message> + <message> + <source>Position</source> + <translation>Position</translation> + </message> + <message> + <source>Page right</source> + <translation>Page suivante</translation> + </message> + <message> + <source>Page down</source> + <translation>Page suivante</translation> + </message> +</context> +<context> + <name>QSocks5SocketEngine</name> + <message> + <source>Connection to proxy refused</source> + <translation>Connexion au proxy refusée</translation> + </message> + <message> + <source>Connection to proxy closed prematurely</source> + <translation>connexion au proxy fermée prématurément</translation> + </message> + <message> + <source>Proxy host not found</source> + <translation>Hôte proxy introuvable</translation> + </message> + <message> + <source>Connection to proxy timed out</source> + <translation>Connexion au proxy expirée</translation> + </message> + <message> + <source>Proxy authentication failed</source> + <translation>L'authentification proxy a échoué</translation> + </message> + <message> + <source>Proxy authentication failed: %1</source> + <translation>L'authentification proxy a échoué : %1</translation> + </message> + <message> + <source>SOCKS version 5 protocol error</source> + <translation>Erreur de protocole SOCKS version 5</translation> + </message> + <message> + <source>General SOCKSv5 server failure</source> + <translation>Erreur générale du serveur SOCKSv5</translation> + </message> + <message> + <source>Connection not allowed by SOCKSv5 server</source> + <translation>Connexion refusée par le serveur SOCKSv5</translation> + </message> + <message> + <source>TTL expired</source> + <translation>TTL expiré</translation> + </message> + <message> + <source>SOCKSv5 command not supported</source> + <translation>Commande SOCKSv5 non supportée</translation> + </message> + <message> + <source>Address type not supported</source> + <translation>Type d'adresse non supporté</translation> + </message> + <message> + <source>Unknown SOCKSv5 proxy error code 0x%1</source> + <translation>Erreur proxy SOCKSv5 inconnue : 0x%1</translation> + </message> + <message> + <source>Socks5 timeout error connecting to socks server</source> + <translation type="obsolete">Erreur d'expiration socks5 lors de l'établissement d'une connexion au serveur socks</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>L'opération réseau a expiré</translation> + </message> +</context> +<context> + <name>QSoftKeyManager</name> + <message> + <source>Ok</source> + <translation>OK</translation> + </message> + <message> + <source>Select</source> + <translation>Sélectionner</translation> + </message> + <message> + <source>Done</source> + <translation>Terminer</translation> + </message> + <message> + <source>Options</source> + <translation>Options</translation> + </message> + <message> + <source>Cancel</source> + <translation>Annuler</translation> </message> <message> - <location line="+5"/> - <source>No file selected</source> - <comment>text to display in file button used in HTML forms when no file is selected</comment> - <translation>Pas de fichier sélectionné</translation> + <source>Exit</source> + <translation>Quitter</translation> </message> +</context> +<context> + <name>QSpinBox</name> <message> - <location line="+5"/> - <source>Open in New Window</source> - <comment>Open in New Window context menu item</comment> - <translation>Ouvrir dans une Nouvelle Fenêtre</translation> + <source>More</source> + <translation>Plus</translation> </message> <message> - <location line="+5"/> - <source>Save Link...</source> - <comment>Download Linked File context menu item</comment> - <translation>Enregistrer le lien...</translation> + <source>Less</source> + <translation>Moins</translation> </message> +</context> +<context> + <name>QSql</name> <message> - <location line="+5"/> - <source>Copy Link</source> - <comment>Copy Link context menu item</comment> - <translation>Copier le lien</translation> + <source>Delete</source> + <translation>Supprimer</translation> </message> <message> - <location line="+5"/> - <source>Open Image</source> - <comment>Open Image in New Window context menu item</comment> - <translation>Ouvrir l'image</translation> + <source>Delete this record?</source> + <translation>Supprimer cet enregistrement ?</translation> </message> <message> - <location line="+5"/> - <source>Save Image</source> - <comment>Download Image context menu item</comment> - <translation>Enregistrer l'image</translation> + <source>Yes</source> + <translation>Oui</translation> </message> <message> - <location line="+5"/> - <source>Copy Image</source> - <comment>Copy Link context menu item</comment> - <translation>Copier l'image</translation> + <source>No</source> + <translation>Non</translation> </message> <message> - <location line="+5"/> - <source>Open Frame</source> - <comment>Open Frame in New Window context menu item</comment> - <translation>Ouvrir le cadre</translation> + <source>Insert</source> + <translation>Insérer</translation> </message> <message> - <location line="+5"/> - <source>Copy</source> - <comment>Copy context menu item</comment> - <translation>Copier</translation> + <source>Update</source> + <translation>Actualiser</translation> </message> <message> - <location line="+5"/> - <source>Go Back</source> - <comment>Back context menu item</comment> - <translation>Précédent</translation> + <source>Save edits?</source> + <translation>Enregistrer les modifications ?</translation> </message> <message> - <location line="+5"/> - <source>Go Forward</source> - <comment>Forward context menu item</comment> - <translation>Suivant</translation> + <source>Cancel</source> + <translation>Annuler</translation> </message> <message> - <location line="+5"/> - <source>Stop</source> - <comment>Stop context menu item</comment> - <translation>Stop</translation> + <source>Confirm</source> + <translation>Confirmer</translation> </message> <message> - <location line="+5"/> - <source>Reload</source> - <comment>Reload context menu item</comment> - <translation>Recharger</translation> + <source>Cancel your edits?</source> + <translation>Annuler vos modifications ?</translation> </message> +</context> +<context> + <name>QSslSocket</name> <message> - <location line="+5"/> - <source>Cut</source> - <comment>Cut context menu item</comment> - <translation>Couper</translation> + <source>Unable to write data: %1</source> + <translation>Impossible d'écrire les données : %1</translation> </message> <message> - <location line="+5"/> - <source>Paste</source> - <comment>Paste context menu item</comment> - <translation>Coller</translation> + <source>Error while reading: %1</source> + <translation>Erreur lors de la lecture : %1</translation> </message> <message> - <location line="+5"/> - <source>No Guesses Found</source> - <comment>No Guesses Found context menu item</comment> - <translation>Pas de candidat trouvés</translation> + <source>Error during SSL handshake: %1</source> + <translation>Erreur lors de la poignée de main SSL : %1</translation> </message> <message> - <location line="+5"/> - <source>Ignore</source> - <comment>Ignore Spelling context menu item</comment> - <translation>Ignorer</translation> + <source>Error creating SSL context (%1)</source> + <translation>Erreur lors de la création du contexte SSL (%1)</translation> </message> <message> - <location line="+5"/> - <source>Add To Dictionary</source> - <comment>Learn Spelling context menu item</comment> - <translation>Ajouter au dictionnaire</translation> + <source>Invalid or empty cipher list (%1)</source> + <translation>La list de chiffrements est invalide ou vide (%1)</translation> </message> <message> - <location line="+5"/> - <source>Search The Web</source> - <comment>Search The Web context menu item</comment> - <translation>Chercher sur le Web</translation> + <source>Error creating SSL session, %1</source> + <translation>Erreur lors de la création de la session SSL, %1</translation> </message> <message> - <location line="+5"/> - <source>Look Up In Dictionary</source> - <comment>Look Up in Dictionary context menu item</comment> - <translation>Chercher dans le dictionnaire</translation> + <source>Error creating SSL session: %1</source> + <translation>Erreur lors de la création de la session SSL : %1</translation> </message> <message> - <location line="+5"/> - <source>Open Link</source> - <comment>Open Link context menu item</comment> - <translation>Ouvrir le lien</translation> + <source>Cannot provide a certificate with no key, %1</source> + <translation>Impossible de fournir un certificat sans clé, %1</translation> </message> <message> - <location line="+5"/> - <source>Ignore</source> - <comment>Ignore Grammar context menu item</comment> - <translation>Ignorer</translation> + <source>Error loading local certificate, %1</source> + <translation>Erreur lors du chargement du certificat local, %1</translation> </message> <message> - <location line="+5"/> - <source>Spelling</source> - <comment>Spelling and Grammar context sub-menu item</comment> - <translation>Orthographe</translation> + <source>Error loading private key, %1</source> + <translation>Erreur lors du chargement de la clé privée, %1</translation> </message> <message> - <location line="+5"/> - <source>Show Spelling and Grammar</source> - <comment>menu item title</comment> - <translation>Afficher Orthographe et Grammaire</translation> + <source>Private key do not certificate public key, %1</source> + <translation type="obsolete">La clé privée ne certifie pas la clé publique, %1</translation> </message> <message> - <location line="+1"/> - <source>Hide Spelling and Grammar</source> - <comment>menu item title</comment> - <translation>Cacher Orthographe et Grammaire</translation> + <source>Private key does not certificate public key, %1</source> + <translation type="obsolete">La clé privée ne certifie pas la clé publique, %1</translation> </message> <message> - <location line="+5"/> - <source>Check Spelling</source> - <comment>Check spelling context menu item</comment> - <translation>Vérifier l'orthographe</translation> + <source>Unable to decrypt data: %1</source> + <translation>Impossible de décrypter les données: %1</translation> </message> <message> - <location line="+5"/> - <source>Check Spelling While Typing</source> - <comment>Check spelling while typing context menu item</comment> - <translation>Vérifier l'orthographe pendant la saisie</translation> + <source>Private key does not certify public key, %1</source> + <translation>La clé privée ne certifie pas la clé publique, %1</translation> </message> <message> - <location line="+5"/> - <source>Check Grammar With Spelling</source> - <comment>Check grammar with spelling context menu item</comment> - <translation>Vérifier la grammaire en même temps que l'orthographe</translation> + <source>No error</source> + <translation>Aucune erreur</translation> </message> <message> - <location line="+5"/> - <source>Fonts</source> - <comment>Font context sub-menu item</comment> - <translation>Polices</translation> + <source>The issuer certificate could not be found</source> + <translation>Le certificat de l'émetteur est introuvable</translation> </message> <message> - <location line="+5"/> - <source>Bold</source> - <comment>Bold context menu item</comment> - <translation>Gras</translation> + <source>The certificate signature could not be decrypted</source> + <translation>La signature du certificat n'a pas pu être vérifiée</translation> </message> <message> - <location line="+5"/> - <source>Italic</source> - <comment>Italic context menu item</comment> - <translation>Italique</translation> + <source>The public key in the certificate could not be read</source> + <translation>La clé publique du certificat n'a pas pu être lue</translation> </message> <message> - <location line="+5"/> - <source>Underline</source> - <comment>Underline context menu item</comment> - <translation>Souligné</translation> + <source>The signature of the certificate is invalid</source> + <translation>La signature du certificat n'est pas valide</translation> </message> <message> - <location line="+5"/> - <source>Outline</source> - <comment>Outline context menu item</comment> - <translation>Contour</translation> + <source>The certificate is not yet valid</source> + <translation>Le certificat n'est pas encore valide</translation> </message> <message> - <location line="+5"/> - <source>Direction</source> - <comment>Writing direction context sub-menu item</comment> - <translation></translation> + <source>The certificate has expired</source> + <translation>Le certificat a expiré</translation> </message> <message> - <location line="+5"/> - <source>Text Direction</source> - <comment>Text direction context sub-menu item</comment> - <translation>Orientation du texte</translation> + <source>The certificate's notBefore field contains an invalid time</source> + <translation>Le champ pasAvant du certificat inclut une heure non valide</translation> </message> <message> - <location line="+5"/> - <source>Default</source> - <comment>Default writing direction context menu item</comment> - <translation>Défaut</translation> + <source>The certificate's notAfter field contains an invalid time</source> + <translation>Le champ pasAprès du certificat inclut une heure non valide</translation> </message> <message> - <location line="+5"/> - <source>LTR</source> - <comment>Left to Right context menu item</comment> - <translation>De la gauche vers la droite</translation> + <source>The certificate is self-signed, and untrusted</source> + <translation>Le certificat n'est pas sécurisé car auto-signé</translation> </message> <message> - <location line="+5"/> - <source>RTL</source> - <comment>Right to Left context menu item</comment> - <translation>De la droite vers la gauche</translation> + <source>The root certificate of the certificate chain is self-signed, and untrusted</source> + <translation>Le certificat racine de la chaîne de certificats n'est pas sécurisé car signé automatiquement</translation> </message> <message> - <location line="+5"/> - <source>Inspect</source> - <comment>Inspect Element context menu item</comment> - <translation>Inspecter</translation> + <source>The issuer certificate of a locally looked up certificate could not be found</source> + <translation>Le certificat de l'émetteur d'un certificat converti localement est introuvable</translation> </message> <message> - <location line="+5"/> - <source>No recent searches</source> - <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment> - <translation>Pas de recherche récente</translation> + <source>No certificates could be verified</source> + <translation>Aucun certificat n'a pu être vérifié</translation> </message> <message> - <location line="+5"/> - <source>Recent searches</source> - <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment> - <translation>Recherches récentes</translation> + <source>One of the CA certificates is invalid</source> + <translation>L'un des certificats CA n'est pas valide</translation> </message> <message> - <location line="+5"/> - <source>Clear recent searches</source> - <comment>menu item in Recent Searches menu that empties menu's contents</comment> - <translation>Effacer les recherches récentes</translation> + <source>The basicConstraints path length parameter has been exceeded</source> + <translation>Le paramètre de longueur du chemin basicConstraints a été dépassé</translation> </message> <message> - <location line="+75"/> - <source>Unknown</source> - <comment>Unknown filesize FTP directory listing item</comment> - <translation>Inconnu</translation> + <source>The supplied certificate is unsuitable for this purpose</source> + <translation>Le certificat fourni ne convient pas pour cet objectif</translation> </message> <message> - <location line="+5"/> - <source>%1 (%2x%3 pixels)</source> - <comment>Title string for images</comment> - <translation>%1 (%2x%3 pixels)</translation> + <source>The root CA certificate is not trusted for this purpose</source> + <translation>Le certificat CA racine n'est pas sécurisé pour cet objectif</translation> + </message> + <message> + <source>The root CA certificate is marked to reject the specified purpose</source> + <translation>Le certificat CA racine est marqué pour rejeter l'objectif spécifié</translation> + </message> + <message> + <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> + <translation>Le certificat de l'émetteur candidat actuel a été rejeté car le nom de son sujet ne correspondait pas au nom de l'émetteur du certificat actuel</translation> + </message> + <message> + <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source> + <translation>Le certificat de l'émetteur candidat actuel a été rejeté car le nom de son sujet et son numéro de série étaient présents et ne correspondaient pas à l'identifiant de la clé d'autorité du certificat actuel</translation> + </message> + <message> + <source>The peer did not present any certificate</source> + <translation>Le poste ne contient aucun certificat</translation> + </message> + <message> + <source>The host name did not match any of the valid hosts for this certificate</source> + <translation>Le nom d'hôte ne correspondait à aucun des hôtes valides pour ce certificat</translation> + </message> + <message> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> + </message> +</context> +<context> + <name>QStateMachine</name> + <message> + <source>Missing initial state in compound state '%1'</source> + <translation>État initial manquant dans l'état composé '%1'</translation> </message> <message> - <source>Web Inspector - %2</source> - <translation>Inspecteur Web - %2</translation> + <source>Missing default state in history state '%1'</source> + <translation>État par défaut manquant dans l'état de l'historique '%1'</translation> </message> <message> - <source>Bad HTTP request</source> - <translation>Requête HTTP erronée</translation> + <source>No common ancestor for targets and source of transition from state '%1'</source> + <translation>Aucun ancêtre commun pour les cibles et la source de transition de l'état '%1'</translation> </message> <message> - <location line="-291"/> - <source>This is a searchable index. Enter search keywords: </source> - <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> - <translation>Ceci est un index. Veuillez saisir les mots-clé :</translation> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> </message> +</context> +<context> + <name>QSystemSemaphore</name> <message> - <source>Scroll here</source> - <translation>Défiler jusqu'ici</translation> + <source>%1: out of resources</source> + <translation>%1: plus de ressources disponibles</translation> </message> <message> - <source>Left edge</source> - <translation>À gauche</translation> + <source>%1: permission denied</source> + <translation>%1: permission refusée</translation> </message> <message> - <source>Top</source> - <translation>Haut</translation> + <source>%1: already exists</source> + <translation>%1 : existe déjà</translation> </message> <message> - <source>Right edge</source> - <translation>À droite</translation> + <source>%1: does not exist</source> + <translation>%1 : n'existe pas</translation> </message> <message> - <source>Bottom</source> - <translation>En bas</translation> + <source>%1: unknown error %2</source> + <translation>%1: erreur inconnue %2</translation> </message> +</context> +<context> + <name>QTDSDriver</name> <message> - <source>Page left</source> - <translation>Page gauche</translation> + <source>Unable to open connection</source> + <translation>Impossible d'ouvrir la connexion</translation> </message> <message> - <source>Page up</source> - <translation>Page haut</translation> + <source>Unable to use database</source> + <translation>Impossible d'utiliser la base de données</translation> </message> +</context> +<context> + <name>QTabBar</name> <message> - <source>Page right</source> - <translation>Page droite</translation> + <source>Scroll Left</source> + <translation>Défiler vers la gauche</translation> </message> <message> - <source>Page down</source> - <translation>Page bas</translation> + <source>Scroll Right</source> + <translation>Défiler vers la droite</translation> </message> +</context> +<context> + <name>QTcpServer</name> <message> - <source>Scroll left</source> - <translation>Défiler vers la gauche</translation> + <source>Socket operation unsupported</source> + <translation type="obsolete">Operation socket non supportée</translation> </message> <message> - <source>Scroll up</source> - <translation>Défiler vers le haut</translation> + <source>Operation on socket is not supported</source> + <translation>Opération sur le socket non supportée</translation> </message> +</context> +<context> + <name>QTextControl</name> <message> - <source>Scroll right</source> - <translation>Défiler vers la droite</translation> + <source>&Undo</source> + <translation>&Annuler</translation> </message> <message> - <source>Scroll down</source> - <translation>Défiler vers le bas</translation> + <source>&Redo</source> + <translation>&Rétablir</translation> </message> - <message numerus="yes"> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp" line="+45"/> - <source>%n file(s)</source> - <comment>number of chosen file</comment> - <translation> - <numerusform>%n fichier</numerusform> - <numerusform>%n fichiers</numerusform> - </translation> + <message> + <source>Cu&t</source> + <translation>Co&uper</translation> </message> <message> - <source>JavaScript Alert - %1</source> - <translation>Alerte JavaScript - %1</translation> + <source>&Copy</source> + <translation>Cop&ier</translation> </message> <message> - <source>JavaScript Confirm - %1</source> - <translation>Confirmation JavaScript - %1</translation> + <source>Copy &Link Location</source> + <translation>Copier l'adresse du &lien</translation> </message> <message> - <source>JavaScript Prompt - %1</source> - <translation>Invite JavaScript - %1</translation> + <source>&Paste</source> + <translation>Co&ller</translation> </message> <message> - <source>Move the cursor to the next character</source> - <translation>Déplacer le curseur au caractère suivant</translation> + <source>Delete</source> + <translation>Supprimer</translation> </message> <message> - <source>Move the cursor to the previous character</source> - <translation>Déplacer le curseur au caractère précédent</translation> + <source>Select All</source> + <translation>Tout sélectionner</translation> </message> +</context> +<context> + <name>QToolButton</name> <message> - <source>Move the cursor to the next word</source> - <translation>Déplacer le curseur au mot suivant</translation> + <source>Press</source> + <translation>Appuyer</translation> </message> <message> - <source>Move the cursor to the previous word</source> - <translation>Déplacer le curseur au mot précédent</translation> + <source>Open</source> + <translation>Ouvrir</translation> </message> +</context> +<context> + <name>QUdpSocket</name> <message> - <source>Move the cursor to the next line</source> - <translation>Déplacer le curseur à la ligne suivante</translation> + <source>This platform does not support IPv6</source> + <translation>Cette plateforme ne supporte pas IPv6</translation> </message> +</context> +<context> + <name>QUndoGroup</name> <message> - <source>Move the cursor to the previous line</source> - <translation>Déplacer le curseur à la ligne précédente</translation> + <source>Undo</source> + <translation>Annuler</translation> </message> <message> - <source>Move the cursor to the start of the line</source> - <translation>Déplacer le curseur en début de ligne</translation> + <source>Redo</source> + <translation>Rétablir</translation> </message> +</context> +<context> + <name>QUndoModel</name> <message> - <source>Move the cursor to the end of the line</source> - <translation>Déplacer le curseur en fin de ligne</translation> + <source><empty></source> + <translation><vide></translation> </message> +</context> +<context> + <name>QUndoStack</name> <message> - <source>Move the cursor to the start of the block</source> - <translation>Déplacer le curseur au début du paragraphe</translation> + <source>Undo</source> + <translation>Annuler</translation> </message> <message> - <source>Move the cursor to the end of the block</source> - <translation>Déplacer le curseur à la fin du paragraphe</translation> + <source>Redo</source> + <translation>Rétablir</translation> </message> +</context> +<context> + <name>QUnicodeControlCharacterMenu</name> <message> - <source>Move the cursor to the start of the document</source> - <translation>Déplacer le curseur en début de document</translation> + <source>LRM Left-to-right mark</source> + <translation>LRM Left-to-right mark</translation> </message> <message> - <source>Move the cursor to the end of the document</source> - <translation>Déplacer le curseur en fin de document</translation> + <source>RLM Right-to-left mark</source> + <translation>RLM Right-to-left mark</translation> </message> <message> - <source>Select all</source> - <translation>Tout sélectionner</translation> + <source>ZWJ Zero width joiner</source> + <translation>ZWJ Zero width joiner</translation> </message> <message> - <source>Select to the next character</source> - <translation>Sélectionner jusqu'au caractère suivant</translation> + <source>ZWNJ Zero width non-joiner</source> + <translation>ZWNJ Zero width non-joiner</translation> </message> <message> - <source>Select to the previous character</source> - <translation>Sélectionner jusqu'au caractère précédent</translation> + <source>ZWSP Zero width space</source> + <translation>ZWSP Zero width space</translation> </message> <message> - <source>Select to the next word</source> - <translation>Sélectionner jusqu'au mot suivant</translation> + <source>LRE Start of left-to-right embedding</source> + <translation>LRE Start of left-to-right embedding</translation> </message> <message> - <source>Select to the previous word</source> - <translation>Sélectionner jusqu'au mot précédent</translation> + <source>RLE Start of right-to-left embedding</source> + <translation>RLE Start of right-to-left embedding</translation> </message> <message> - <source>Select to the next line</source> - <translation>Sélectionner jusqu'à la ligne suivante</translation> + <source>LRO Start of left-to-right override</source> + <translation>LRO Start of left-to-right override</translation> </message> <message> - <source>Select to the previous line</source> - <translation>Sélectionner jusqu'à la ligne précédente</translation> + <source>RLO Start of right-to-left override</source> + <translation>RLO Start of right-to-left override</translation> </message> <message> - <source>Select to the start of the line</source> - <translation>Sélectionner jusqu'en début de ligne</translation> + <source>PDF Pop directional formatting</source> + <translation>PDF Pop directional formatting</translation> </message> <message> - <source>Select to the end of the line</source> - <translation>Sélectionner jusqu'en fin de ligne</translation> + <source>Insert Unicode control character</source> + <translation>Insérer caractère de contrôle Unicode</translation> </message> +</context> +<context> + <name>QWebFrame</name> <message> - <source>Select to the start of the block</source> - <translation>Sélectionner jusqu'au début du paragraphe</translation> + <source>Request cancelled</source> + <translation>Requête annulée</translation> </message> <message> - <source>Select to the end of the block</source> - <translation>Sélectionner jusqu'à la fin du paragraphe</translation> + <source>Request blocked</source> + <translation>Requête bloquée</translation> </message> <message> - <source>Select to the start of the document</source> - <translation>Sélectionner jusqu'au début du document</translation> + <source>Cannot show URL</source> + <translation>Impossible d'afficher l'URL</translation> </message> <message> - <source>Select to the end of the document</source> - <translation>Sélectionner jusqu'à la fin du document</translation> + <source>Frame load interruped by policy change</source> + <translation type="obsolete">Chargement de la frame interrompu par un changement de configuration</translation> </message> <message> - <source>Delete to the start of the word</source> - <translation>Supprimer jusqu'au début du mot</translation> + <source>Cannot show mimetype</source> + <translation>Impossible d'afficher le mimetype</translation> </message> <message> - <source>Delete to the end of the word</source> - <translation>Supprimer jusqu'à la fin du mot</translation> + <source>File does not exist</source> + <translation>Le fichier n'existe pas</translation> </message> <message> - <source>Insert a new paragraph</source> - <translation>Insérer un nouveau paragraphe</translation> + <source>Frame load interrupted by policy change</source> + <translation>Chargement du cadre interrompue par le changement de stratégie</translation> </message> +</context> +<context> + <name>QWebPage</name> <message> - <source>Insert a new line</source> - <translation>Insérer une nouvelle ligne</translation> + <source>Submit</source> + <comment>default label for Submit buttons in forms on web pages</comment> + <translation>Soumettre</translation> </message> <message> <source>Submit</source> + <comment>Submit (input element) alt text for <input> elements with no alt, title, or value</comment> <translation>Soumettre</translation> </message> <message> <source>Reset</source> + <comment>default label for Reset buttons in forms on web pages</comment> <translation>Réinitialiser</translation> </message> <message> + <source>Searchable Index</source> + <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> + <translation type="obsolete">Index recherchable</translation> + </message> + <message> <source>Choose File</source> + <comment>title for file button used in HTML forms</comment> <translation>Choisir le fichier</translation> </message> <message> <source>No file selected</source> + <comment>text to display in file button used in HTML forms when no file is selected</comment> <translation>Pas de fichier sélectionné</translation> </message> <message> <source>Open in New Window</source> + <comment>Open in New Window context menu item</comment> <translation>Ouvrir dans une Nouvelle Fenêtre</translation> </message> <message> <source>Save Link...</source> - <translation>Enregistrer la cible du lien...</translation> + <comment>Download Linked File context menu item</comment> + <translation>Enregistrer le lien...</translation> </message> <message> <source>Copy Link</source> + <comment>Copy Link context menu item</comment> <translation>Copier le lien</translation> </message> <message> <source>Open Image</source> + <comment>Open Image in New Window context menu item</comment> <translation>Ouvrir l'image</translation> </message> <message> <source>Save Image</source> + <comment>Download Image context menu item</comment> <translation>Enregistrer l'image</translation> </message> <message> <source>Copy Image</source> + <comment>Copy Link context menu item</comment> <translation>Copier l'image</translation> </message> <message> <source>Open Frame</source> + <comment>Open Frame in New Window context menu item</comment> <translation>Ouvrir le cadre</translation> </message> <message> <source>Copy</source> + <comment>Copy context menu item</comment> <translation>Copier</translation> </message> <message> <source>Go Back</source> + <comment>Back context menu item</comment> <translation>Précédent</translation> </message> <message> <source>Go Forward</source> + <comment>Forward context menu item</comment> <translation>Suivant</translation> </message> <message> <source>Stop</source> - <translation>Stop</translation> + <comment>Stop context menu item</comment> + <translation>Arrêter</translation> </message> <message> <source>Reload</source> + <comment>Reload context menu item</comment> <translation>Recharger</translation> </message> <message> <source>Cut</source> + <comment>Cut context menu item</comment> <translation>Couper</translation> </message> <message> <source>Paste</source> + <comment>Paste context menu item</comment> <translation>Coller</translation> </message> <message> <source>No Guesses Found</source> + <comment>No Guesses Found context menu item</comment> <translation>Pas de candidat trouvés</translation> </message> <message> <source>Ignore</source> + <comment>Ignore Spelling context menu item</comment> <translation>Ignorer</translation> </message> <message> <source>Add To Dictionary</source> + <comment>Learn Spelling context menu item</comment> <translation>Ajouter au dictionnaire</translation> </message> <message> <source>Search The Web</source> + <comment>Search The Web context menu item</comment> <translation>Chercher sur le Web</translation> </message> <message> <source>Look Up In Dictionary</source> + <comment>Look Up in Dictionary context menu item</comment> <translation>Chercher dans le dictionnaire</translation> </message> <message> <source>Open Link</source> + <comment>Open Link context menu item</comment> <translation>Ouvrir le lien</translation> </message> <message> + <source>Ignore</source> + <comment>Ignore Grammar context menu item</comment> + <translation>Ignorer</translation> + </message> + <message> <source>Spelling</source> + <comment>Spelling and Grammar context sub-menu item</comment> <translation>Orthographe</translation> </message> <message> <source>Show Spelling and Grammar</source> + <comment>menu item title</comment> <translation>Afficher Orthographe et Grammaire</translation> </message> <message> <source>Hide Spelling and Grammar</source> + <comment>menu item title</comment> <translation>Cacher Orthographe et Grammaire</translation> </message> <message> <source>Check Spelling</source> + <comment>Check spelling context menu item</comment> <translation>Vérifier l'orthographe</translation> </message> <message> <source>Check Spelling While Typing</source> + <comment>Check spelling while typing context menu item</comment> <translation>Vérifier l'orthographe pendant la saisie</translation> </message> <message> <source>Check Grammar With Spelling</source> + <comment>Check grammar with spelling context menu item</comment> <translation>Vérifier la grammaire en même temps que l'orthographe</translation> </message> <message> <source>Fonts</source> + <comment>Font context sub-menu item</comment> <translation>Polices</translation> </message> <message> <source>Bold</source> + <comment>Bold context menu item</comment> <translation>Gras</translation> </message> <message> <source>Italic</source> + <comment>Italic context menu item</comment> <translation>Italique</translation> </message> <message> <source>Underline</source> + <comment>Underline context menu item</comment> <translation>Souligné</translation> </message> <message> <source>Outline</source> + <comment>Outline context menu item</comment> <translation>Contour</translation> </message> <message> <source>Direction</source> - <translation>Direction</translation> + <comment>Writing direction context sub-menu item</comment> + <translation></translation> </message> <message> <source>Text Direction</source> + <comment>Text direction context sub-menu item</comment> <translation>Orientation du texte</translation> </message> <message> <source>Default</source> - <translation>Défaut</translation> + <comment>Default writing direction context menu item</comment> + <translation>Par défaut</translation> </message> <message> <source>Left to Right</source> + <comment>Left to Right context menu item</comment> <translation>Gauche à droite</translation> </message> <message> <source>Right to Left</source> + <comment>Right to Left context menu item</comment> <translation>Droite à gauche</translation> </message> <message> <source>Loading...</source> + <comment>Media controller status message when the media is loading</comment> <translation>Chargement...</translation> </message> <message> <source>Live Broadcast</source> + <comment>Media controller status message when watching a live broadcast</comment> <translation>Diffusion en direct</translation> </message> <message> <source>Audio Element</source> + <comment>Media controller element</comment> <translation>Élément audio</translation> </message> <message> <source>Video Element</source> + <comment>Media controller element</comment> <translation>Élément vidéo</translation> </message> <message> <source>Mute Button</source> + <comment>Media controller element</comment> <translation>Bouton de désactivation du son</translation> </message> <message> <source>Unmute Button</source> + <comment>Media controller element</comment> <translation>Bouton de réactivation du son</translation> </message> <message> <source>Play Button</source> + <comment>Media controller element</comment> <translation>Bouton de lecture</translation> </message> <message> <source>Pause Button</source> + <comment>Media controller element</comment> <translation>Bouton de pause</translation> </message> <message> <source>Slider</source> + <comment>Media controller element</comment> <translation>Barre de défilement</translation> </message> <message> <source>Slider Thumb</source> + <comment>Media controller element</comment> <translation>Curseur de la barre de défilement</translation> </message> <message> <source>Rewind Button</source> + <comment>Media controller element</comment> <translation>Bouton de retour en arrière</translation> </message> <message> <source>Return to Real-time Button</source> + <comment>Media controller element</comment> <translation>Bouton de retour au temps réel</translation> </message> <message> <source>Elapsed Time</source> + <comment>Media controller element</comment> <translation>Temps écoulé</translation> </message> <message> <source>Remaining Time</source> + <comment>Media controller element</comment> <translation>Durée restante</translation> </message> <message> <source>Status Display</source> + <comment>Media controller element</comment> <translation>Affichage de l'état</translation> </message> <message> <source>Fullscreen Button</source> + <comment>Media controller element</comment> <translation>Bouton de plein écran</translation> </message> <message> <source>Seek Forward Button</source> + <comment>Media controller element</comment> <translation>Bouton de recherche avant</translation> </message> <message> <source>Seek Back Button</source> + <comment>Media controller element</comment> <translation>Bouton de recherche arrière</translation> </message> <message> <source>Audio element playback controls and status display</source> + <comment>Media controller element</comment> <translation>Commandes de lecture et affichage de l'état de l'élément audio</translation> </message> <message> <source>Video element playback controls and status display</source> + <comment>Media controller element</comment> <translation>Commandes de lecture et affichage de l'état de l'élément vidéo</translation> </message> <message> <source>Mute audio tracks</source> + <comment>Media controller element</comment> <translation>Couper le son des pistes audio</translation> </message> <message> <source>Unmute audio tracks</source> + <comment>Media controller element</comment> <translation>Réactiver le son des pistes audio</translation> </message> <message> <source>Begin playback</source> + <comment>Media controller element</comment> <translation>Commencer la lecture</translation> </message> <message> <source>Pause playback</source> + <comment>Media controller element</comment> <translation>Pause lecture</translation> </message> <message> <source>Movie time scrubber</source> - <translation>Épurateur de la durée du film</translation> + <comment>Media controller element</comment> + <translation>Balayeur de durée du film</translation> </message> <message> <source>Movie time scrubber thumb</source> - <translation>Case de défilement de l'épurateur de la durée du film</translation> + <comment>Media controller element</comment> + <translation>Case de défilement du balayeur de la durée du film</translation> </message> <message> <source>Rewind movie</source> + <comment>Media controller element</comment> <translation>Rembobiner le film</translation> </message> <message> <source>Return streaming movie to real-time</source> + <comment>Media controller element</comment> <translation>Ramener le film en streaming en temps réel</translation> </message> <message> <source>Current movie time</source> - <translation>Durée du film actuel</translation> + <comment>Media controller element</comment> + <translation>Durée du film en cours</translation> </message> <message> <source>Remaining movie time</source> + <comment>Media controller element</comment> <translation>Durée de film restante</translation> </message> <message> <source>Current movie status</source> + <comment>Media controller element</comment> <translation>État du film actuel</translation> </message> <message> <source>Play movie in full-screen mode</source> + <comment>Media controller element</comment> <translation>Regarder le film en mode plein écran</translation> </message> <message> <source>Seek quickly back</source> + <comment>Media controller element</comment> <translation>Recherche rapide arrière</translation> </message> <message> <source>Seek quickly forward</source> + <comment>Media controller element</comment> <translation>Recherche rapide avant</translation> </message> <message> <source>Indefinite time</source> + <comment>Media time description</comment> <translation>Durée indéfinie</translation> </message> <message> <source>%1 days %2 hours %3 minutes %4 seconds</source> + <comment>Media time description</comment> <translation>%1 jours %2 heures %3 minutes %4 secondes</translation> </message> <message> <source>%1 hours %2 minutes %3 seconds</source> + <comment>Media time description</comment> <translation>%1 heures %2 minutes %3 secondes</translation> </message> <message> <source>%1 minutes %2 seconds</source> + <comment>Media time description</comment> <translation>%1 minutes %2 secondes</translation> </message> <message> <source>%1 seconds</source> + <comment>Media time description</comment> <translation>%1 secondes</translation> </message> <message> + <source>LTR</source> + <comment>Left to Right context menu item</comment> + <translation type="obsolete">De la gauche vers la droite</translation> + </message> + <message> + <source>RTL</source> + <comment>Right to Left context menu item</comment> + <translation type="obsolete">De la droite vers la gauche</translation> + </message> + <message> <source>Inspect</source> + <comment>Inspect Element context menu item</comment> <translation>Inspecter</translation> </message> <message> <source>No recent searches</source> + <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment> <translation>Pas de recherche récente</translation> </message> <message> <source>Recent searches</source> + <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment> <translation>Recherches récentes</translation> </message> <message> <source>Clear recent searches</source> + <comment>menu item in Recent Searches menu that empties menu's contents</comment> <translation>Effacer les recherches récentes</translation> </message> <message> + <source>Missing Plug-in</source> + <comment>Label text to be used when a plug-in is missing</comment> + <translation>Plug-in manquant</translation> + </message> + <message> <source>Unknown</source> + <comment>Unknown filesize FTP directory listing item</comment> <translation>Inconnu</translation> </message> <message> <source>%1 (%2x%3 pixels)</source> + <comment>Title string for images</comment> <translation>%1 (%2x%3 pixels)</translation> </message> <message> - <source>This is a searchable index. Enter search keywords: </source> - <translation>Ceci est un index. Veuillez saisir les mots-clé :</translation> - </message> - <message numerus="yes"> - <source>%n file(s)</source> - <translation> - <numerusform></numerusform> - </translation> - </message> - <message> - <source>JavaScript Problem - %1</source> - <translation>Problème de JavaScript - %1</translation> - </message> - <message> - <source>The script on this page appears to have a problem. Do you want to stop the script?</source> - <translation>Le script de cette page semble avoir un problème. Souhaitez-vous arrêter le script?</translation> - </message> - <message> - <source>Paste and Match Style</source> - <translation>Coller et suivre le style</translation> - </message> - <message> - <source>Remove formatting</source> - <translation>Retirer la mise en forme</translation> - </message> - <message> - <source>Strikethrough</source> - <translation>Barré</translation> - </message> - <message> - <source>Subscript</source> - <translation>Indice</translation> + <source>Web Inspector - %2</source> + <translation>Inspecteur Web - %2</translation> </message> <message> - <source>Superscript</source> - <translation>Exposant</translation> + <source>Redirection limit reached</source> + <translation>Limite de redirection atteinte</translation> </message> <message> - <source>Insert Bulleted List</source> - <translation>Insérer une liste à puces</translation> + <source>Bad HTTP request</source> + <translation>Requête HTTP erronée</translation> </message> <message> - <source>Insert Numbered List</source> - <translation>Insérer une liste numérotée</translation> + <source>This is a searchable index. Enter search keywords: </source> + <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> + <translation>Ceci est un index. Veuillez saisir les mots-clé :</translation> </message> <message> - <source>Indent</source> - <translation>Retrait</translation> + <source>Scroll here</source> + <translation>Défiler jusqu'ici</translation> </message> <message> - <source>Outdent</source> - <translation>Retrait négatif</translation> + <source>Left edge</source> + <translation>À gauche</translation> </message> <message> - <source>Center</source> - <translation>Centré</translation> + <source>Top</source> + <translation>Haut</translation> </message> <message> - <source>Justify</source> - <translation>Justifié</translation> + <source>Right edge</source> + <translation>À droite</translation> </message> <message> - <source>Align Left</source> - <translation>Aligner à gauche</translation> + <source>Bottom</source> + <translation>En bas</translation> </message> <message> - <source>Align Right</source> - <translation>Aligner à droite</translation> + <source>Page left</source> + <translation>Page gauche</translation> </message> -</context> -<context> - <name>QWhatsThisAction</name> <message> - <source>What's This?</source> - <translation>Qu'est-ce que c'est ?</translation> + <source>Page up</source> + <translation>Page haut</translation> </message> -</context> -<context> - <name>QWidget</name> <message> - <source>*</source> - <translation></translation> + <source>Page right</source> + <translation>Page droite</translation> </message> -</context> -<context> - <name>QWizard</name> <message> - <source>Go Back</source> - <translation>Précédent</translation> + <source>Page down</source> + <translation>Page bas</translation> </message> <message> - <source>Continue</source> - <translation>Continuer</translation> + <source>Scroll left</source> + <translation>Défiler vers la gauche</translation> </message> <message> - <source>Commit</source> - <translatorcomment>si il s'agit de commit au même sens que git... (en même temps se marier en cliquant... ?!!?!)</translatorcomment> - <translation>Soumettre</translation> + <source>Scroll up</source> + <translation>Défiler vers le haut</translation> </message> <message> - <source>Done</source> - <translation>Terminer</translation> + <source>Scroll right</source> + <translation>Défiler vers la droite</translation> </message> <message> - <source>Quit</source> - <translation type="obsolete">Quitter</translation> + <source>Scroll down</source> + <translation>Défiler vers le bas</translation> </message> - <message> - <source>Help</source> - <translation>Aide</translation> + <message numerus="yes"> + <source>%n file(s)</source> + <comment>number of chosen file</comment> + <translation> + <numerusform>%n fichier</numerusform> + <numerusform>%n fichiers</numerusform> + </translation> </message> <message> - <source>< &Back</source> - <translation>< &Précédent</translation> + <source>JavaScript Alert - %1</source> + <translation>Alerte JavaScript - %1</translation> </message> <message> - <source>&Finish</source> - <translation>&Terminer</translation> + <source>JavaScript Confirm - %1</source> + <translation>Confirmation JavaScript - %1</translation> </message> <message> - <source>Cancel</source> - <translation>Annuler</translation> + <source>JavaScript Prompt - %1</source> + <translation>Invite JavaScript - %1</translation> </message> <message> - <source>&Help</source> - <translation>&Aide</translation> + <source>Move the cursor to the next character</source> + <translation>Déplacer le curseur au caractère suivant</translation> </message> <message> - <source>&Next</source> - <translation>&Suivant ></translation> + <source>Move the cursor to the previous character</source> + <translation>Déplacer le curseur au caractère précédent</translation> </message> <message> - <source>&Next ></source> - <translation>&Suivant ></translation> + <source>Move the cursor to the next word</source> + <translation>Déplacer le curseur au mot suivant</translation> </message> -</context> -<context> - <name>QWorkspace</name> <message> - <source>&Restore</source> - <translation>&Restaurer</translation> + <source>Move the cursor to the previous word</source> + <translation>Déplacer le curseur au mot précédent</translation> </message> <message> - <source>&Move</source> - <translation>&Déplacer</translation> + <source>Move the cursor to the next line</source> + <translation>Déplacer le curseur à la ligne suivante</translation> </message> <message> - <source>&Size</source> - <translation>&Taille</translation> + <source>Move the cursor to the previous line</source> + <translation>Déplacer le curseur à la ligne précédente</translation> </message> <message> - <source>Mi&nimize</source> - <translation>Réd&uire</translation> + <source>Move the cursor to the start of the line</source> + <translation>Déplacer le curseur en début de ligne</translation> </message> <message> - <source>Ma&ximize</source> - <translation>Ma&ximiser</translation> + <source>Move the cursor to the end of the line</source> + <translation>Déplacer le curseur en fin de ligne</translation> </message> <message> - <source>&Close</source> - <translation>&Fermer</translation> + <source>Move the cursor to the start of the block</source> + <translation>Déplacer le curseur au début du paragraphe</translation> </message> <message> - <source>Stay on &Top</source> - <translation>Rester au &premier plan</translation> + <source>Move the cursor to the end of the block</source> + <translation>Déplacer le curseur à la fin du paragraphe</translation> </message> <message> - <source>Minimize</source> - <translation>Réduire</translation> + <source>Move the cursor to the start of the document</source> + <translation>Déplacer le curseur en début de document</translation> </message> <message> - <source>Restore Down</source> - <translation>Restaurer en bas</translation> + <source>Move the cursor to the end of the document</source> + <translation>Déplacer le curseur en fin de document</translation> </message> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Select all</source> + <translation>Tout sélectionner</translation> </message> <message> - <source>Sh&ade</source> - <translation>Enrou&ler</translation> + <source>Select to the next character</source> + <translation>Sélectionner jusqu'au caractère suivant</translation> </message> <message> - <source>%1 - [%2]</source> - <translation>%1 - [%2]</translation> + <source>Select to the previous character</source> + <translation>Sélectionner jusqu'au caractère précédent</translation> </message> <message> - <source>&Unshade</source> - <translation>Dér&ouler</translation> + <source>Select to the next word</source> + <translation>Sélectionner jusqu'au mot suivant</translation> </message> -</context> -<context> - <name>QXml</name> <message> - <source>no error occurred</source> - <translation>aucune erreur ne s'est produite</translation> + <source>Select to the previous word</source> + <translation>Sélectionner jusqu'au mot précédent</translation> </message> <message> - <source>error triggered by consumer</source> - <translation type="unfinished"></translation> + <source>Select to the next line</source> + <translation>Sélectionner jusqu'à la ligne suivante</translation> </message> <message> - <source>unexpected end of file</source> - <translation type="unfinished"></translation> + <source>Select to the previous line</source> + <translation>Sélectionner jusqu'à la ligne précédente</translation> </message> <message> - <source>more than one document type definition</source> - <translation type="unfinished"></translation> + <source>Select to the start of the line</source> + <translation>Sélectionner jusqu'en début de ligne</translation> </message> <message> - <source>error occurred while parsing element</source> - <translation type="unfinished"></translation> + <source>Select to the end of the line</source> + <translation>Sélectionner jusqu'en fin de ligne</translation> </message> <message> - <source>tag mismatch</source> - <translation type="unfinished"></translation> + <source>Select to the start of the block</source> + <translation>Sélectionner jusqu'au début du paragraphe</translation> </message> <message> - <source>error occurred while parsing content</source> - <translation type="unfinished"></translation> + <source>Select to the end of the block</source> + <translation>Sélectionner jusqu'à la fin du paragraphe</translation> </message> <message> - <source>unexpected character</source> - <translation type="unfinished"></translation> + <source>Select to the start of the document</source> + <translation>Sélectionner jusqu'au début du document</translation> </message> <message> - <source>invalid name for processing instruction</source> - <translation type="unfinished"></translation> + <source>Select to the end of the document</source> + <translation>Sélectionner jusqu'à la fin du document</translation> </message> <message> - <source>version expected while reading the XML declaration</source> - <translation type="unfinished"></translation> + <source>Delete to the start of the word</source> + <translation>Supprimer jusqu'au début du mot</translation> </message> <message> - <source>wrong value for standalone declaration</source> - <translation type="unfinished"></translation> + <source>Delete to the end of the word</source> + <translation>Supprimer jusqu'à la fin du mot</translation> </message> <message> - <source>error occurred while parsing document type definition</source> - <translation type="unfinished"></translation> + <source>Insert a new paragraph</source> + <translation>Insérer un nouveau paragraphe</translation> </message> <message> - <source>letter is expected</source> - <translation type="unfinished"></translation> + <source>Insert a new line</source> + <translation>Insérer une nouvelle ligne</translation> </message> <message> - <source>error occurred while parsing comment</source> - <translation type="unfinished"></translation> + <source>Submit</source> + <translation type="obsolete">Soumettre</translation> </message> <message> - <source>error occurred while parsing reference</source> - <translation type="unfinished"></translation> + <source>Reset</source> + <translation type="obsolete">Réinitialiser</translation> </message> <message> - <source>internal general entity reference not allowed in DTD</source> - <translation type="unfinished"></translation> + <source>Choose File</source> + <translation type="obsolete">Choisir le fichier</translation> </message> <message> - <source>external parsed general entity reference not allowed in attribute value</source> - <translation type="unfinished"></translation> + <source>No file selected</source> + <translation type="obsolete">Pas de fichier sélectionné</translation> </message> <message> - <source>external parsed general entity reference not allowed in DTD</source> - <translation type="unfinished"></translation> + <source>Open in New Window</source> + <translation type="obsolete">Ouvrir dans une Nouvelle Fenêtre</translation> </message> <message> - <source>unparsed entity reference in wrong context</source> - <translation type="unfinished"></translation> + <source>Save Link...</source> + <translation type="obsolete">Enregistrer la cible du lien...</translation> </message> <message> - <source>recursive entities</source> - <translation type="unfinished"></translation> + <source>Copy Link</source> + <translation type="obsolete">Copier le lien</translation> </message> <message> - <source>error in the text declaration of an external entity</source> - <translation type="unfinished"></translation> + <source>Open Image</source> + <translation type="obsolete">Ouvrir l'image</translation> </message> <message> - <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> - <translation type="unfinished"></translation> + <source>Save Image</source> + <translation type="obsolete">Enregistrer l'image</translation> </message> <message> - <source>standalone declaration expected while reading the XML declaration</source> - <translation type="unfinished"></translation> + <source>Copy Image</source> + <translation type="obsolete">Copier l'image</translation> </message> -</context> -<context> - <name>QXmlStream</name> <message> - <source>Extra content at end of document.</source> - <translation type="unfinished"></translation> + <source>Open Frame</source> + <translation type="obsolete">Ouvrir le cadre</translation> </message> <message> - <source>Invalid entity value.</source> - <translation type="unfinished"></translation> + <source>Copy</source> + <translation type="obsolete">Copier</translation> </message> <message> - <source>Invalid XML character.</source> - <translation type="unfinished"></translation> + <source>Go Back</source> + <translation type="obsolete">Précédent</translation> </message> <message> - <source>Sequence ']]>' not allowed in content.</source> - <translation type="unfinished"></translation> + <source>Go Forward</source> + <translation type="obsolete">Suivant</translation> </message> <message> - <source>Namespace prefix '%1' not declared</source> - <translation type="unfinished"></translation> + <source>Stop</source> + <translation type="obsolete">Stop</translation> </message> <message> - <source>Attribute redefined.</source> - <translation type="unfinished"></translation> + <source>Reload</source> + <translation type="obsolete">Recharger</translation> </message> <message> - <source>Unexpected character '%1' in public id literal.</source> - <translation type="unfinished"></translation> + <source>Cut</source> + <translation type="obsolete">Couper</translation> </message> <message> - <source>Invalid XML version string.</source> - <translation type="unfinished"></translation> + <source>Paste</source> + <translation type="obsolete">Coller</translation> </message> <message> - <source>Unsupported XML version.</source> - <translation type="unfinished"></translation> + <source>No Guesses Found</source> + <translation type="obsolete">Pas de candidat trouvés</translation> </message> <message> - <source>%1 is an invalid encoding name.</source> - <translation type="unfinished"></translation> + <source>Ignore</source> + <translation type="obsolete">Ignorer</translation> </message> <message> - <source>Encoding %1 is unsupported</source> - <translation type="unfinished"></translation> + <source>Add To Dictionary</source> + <translation type="obsolete">Ajouter au dictionnaire</translation> </message> <message> - <source>Invalid XML encoding name.</source> - <translation type="obsolete">Encodage XML invalide.</translation> + <source>Search The Web</source> + <translation type="obsolete">Chercher sur le Web</translation> </message> <message> - <source>Standalone accepts only yes or no.</source> - <translation type="unfinished"></translation> + <source>Look Up In Dictionary</source> + <translation type="obsolete">Chercher dans le dictionnaire</translation> </message> <message> - <source>Invalid attribute in XML declaration.</source> - <translation type="unfinished"></translation> + <source>Open Link</source> + <translation type="obsolete">Ouvrir le lien</translation> </message> <message> - <source>Premature end of document.</source> - <translation type="unfinished"></translation> + <source>Spelling</source> + <translation type="obsolete">Orthographe</translation> </message> <message> - <source>Invalid document.</source> - <translation type="unfinished"></translation> + <source>Show Spelling and Grammar</source> + <translation type="obsolete">Afficher Orthographe et Grammaire</translation> </message> <message> - <source>Expected </source> - <translation type="unfinished"></translation> + <source>Hide Spelling and Grammar</source> + <translation type="obsolete">Cacher Orthographe et Grammaire</translation> </message> <message> - <source>, but got '</source> - <translation type="unfinished"></translation> + <source>Check Spelling</source> + <translation type="obsolete">Vérifier l'orthographe</translation> </message> <message> - <source>Unexpected '</source> - <translation type="unfinished"></translation> + <source>Check Spelling While Typing</source> + <translation type="obsolete">Vérifier l'orthographe pendant la saisie</translation> </message> <message> - <source>Expected character data.</source> - <translation type="unfinished"></translation> + <source>Check Grammar With Spelling</source> + <translation type="obsolete">Vérifier la grammaire en même temps que l'orthographe</translation> </message> <message> - <source>Recursive entity detected.</source> - <translation type="unfinished"></translation> + <source>Fonts</source> + <translation type="obsolete">Polices</translation> </message> <message> - <source>Start tag expected.</source> - <translation type="unfinished"></translation> + <source>Bold</source> + <translation type="obsolete">Gras</translation> </message> <message> - <source>XML declaration not at start of document.</source> - <translation type="unfinished"></translation> + <source>Italic</source> + <translation type="obsolete">Italique</translation> </message> <message> - <source>NDATA in parameter entity declaration.</source> - <translation type="unfinished"></translation> + <source>Underline</source> + <translation type="obsolete">Souligné</translation> </message> <message> - <source>%1 is an invalid processing instruction name.</source> - <translation type="unfinished"></translation> + <source>Outline</source> + <translation type="obsolete">Contour</translation> </message> <message> - <source>Invalid processing instruction name.</source> - <translation type="unfinished"></translation> + <source>Direction</source> + <translation type="obsolete">Direction</translation> </message> <message> - <source>Illegal namespace declaration.</source> - <translation type="unfinished"></translation> + <source>Text Direction</source> + <translation type="obsolete">Orientation du texte</translation> </message> <message> - <source>Invalid XML name.</source> - <translation type="unfinished"></translation> + <source>Default</source> + <translation type="obsolete">Défaut</translation> </message> <message> - <source>Opening and ending tag mismatch.</source> - <translation type="unfinished"></translation> + <source>Left to Right</source> + <translation type="obsolete">Gauche à droite</translation> </message> <message> - <source>Reference to unparsed entity '%1'.</source> - <translation type="unfinished"></translation> + <source>Right to Left</source> + <translation type="obsolete">Droite à gauche</translation> </message> <message> - <source>Entity '%1' not declared.</source> - <translation type="unfinished"></translation> + <source>Loading...</source> + <translation type="obsolete">Chargement...</translation> </message> <message> - <source>Reference to external entity '%1' in attribute value.</source> - <translation type="unfinished"></translation> + <source>Live Broadcast</source> + <translation type="obsolete">Diffusion en direct</translation> </message> <message> - <source>Invalid character reference.</source> - <translation type="unfinished"></translation> + <source>Audio Element</source> + <translation type="obsolete">Élément audio</translation> </message> <message> - <source>Encountered incorrectly encoded content.</source> - <translation type="unfinished"></translation> + <source>Video Element</source> + <translation type="obsolete">Élément vidéo</translation> </message> <message> - <source>The standalone pseudo attribute must appear after the encoding.</source> - <translation type="unfinished"></translation> + <source>Mute Button</source> + <translation type="obsolete">Bouton de désactivation du son</translation> </message> <message> - <source>%1 is an invalid PUBLIC identifier.</source> - <translation type="unfinished"></translation> + <source>Unmute Button</source> + <translation type="obsolete">Bouton de réactivation du son</translation> </message> -</context> -<context> - <name>QtXmlPatterns</name> <message> - <location filename="../src/xmlpatterns/acceltree/qacceltreebuilder.cpp" line="+205"/> - <source>An %1-attribute with value %2 has already been declared.</source> - <translation>Un attribute %1 avec la valeur %2 est déjà déclaré.</translation> + <source>Play Button</source> + <translation type="obsolete">Bouton de lecture</translation> </message> <message> - <location line="+13"/> - <source>An %1-attribute must have a valid %2 as value, which %3 isn't.</source> - <translation>Un attribute %1 doit avoir un %2 valide, %3 ne l'a pas.</translation> + <source>Pause Button</source> + <translation type="obsolete">Bouton de pause</translation> </message> <message> - <source>Network timeout.</source> - <translation>Le réseau ne répond pas.</translation> + <source>Slider</source> + <translation type="obsolete">Barre de défilement</translation> </message> <message> - <source>Element %1 can't be serialized because it appears outside the document element.</source> - <translation>L'élément %1 ne peut pas être sérialisé parce qu'il est hors de l'élément document.</translation> + <source>Slider Thumb</source> + <translation type="obsolete">Curseur de la barre de défilement</translation> </message> <message> - <source>Attribute element %1 can't be serialized because it appears at the top level.</source> - <translation type="obsolete">L'élément attribute %1 ne peut pas être sérialisé parce qu'il apparaît comme racine.</translation> + <source>Rewind Button</source> + <translation type="obsolete">Bouton de retour en arrière</translation> </message> <message> - <source>Year %1 is invalid because it begins with %2.</source> - <translation>L'année %1 est invalide parce qu'elle commence par %2.</translation> + <source>Return to Real-time Button</source> + <translation type="obsolete">Bouton de retour au temps réel</translation> </message> <message> - <source>Day %1 is outside the range %2..%3.</source> - <translation>Le jour %1 est hors de l'intervalle %2..%3.</translation> + <source>Elapsed Time</source> + <translation type="obsolete">Temps écoulé</translation> </message> <message> - <source>Month %1 is outside the range %2..%3.</source> - <translation>Le mois %1 est hors de l'intervalle %2..%3.</translation> + <source>Remaining Time</source> + <translation type="obsolete">Durée restante</translation> </message> <message> - <source>Overflow: Can't represent date %1.</source> - <translation>Overflow: ne peut pas représenter la date %1.</translation> + <source>Status Display</source> + <translation type="obsolete">Affichage de l'état</translation> </message> <message> - <source>Day %1 is invalid for month %2.</source> - <translation>Jour %1 est invalide pour le mois %2.</translation> + <source>Fullscreen Button</source> + <translation type="obsolete">Bouton de plein écran</translation> </message> <message> - <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source> - <translation>L'heure 24:%1:%2.%3 est invalide. L'heure est 24 mais les minutes, seconndes et millisecondes ne sont pas à 0;</translation> + <source>Seek Forward Button</source> + <translation type="obsolete">Bouton de recherche avant</translation> </message> <message> - <source>Time %1:%2:%3.%4 is invalid.</source> - <translation>L'heure %1:%2:%3.%4 est invalide.</translation> + <source>Seek Back Button</source> + <translation type="obsolete">Bouton de recherche arrière</translation> </message> <message> - <source>Overflow: Date can't be represented.</source> - <translation>Overflow : la date ne peut pas être représentée.</translation> + <source>Audio element playback controls and status display</source> + <translation type="obsolete">Commandes de lecture et affichage de l'état de l'élément audio</translation> </message> <message> - <source>At least one component must be present.</source> - <translation>Au moins un composant doit être présent.</translation> + <source>Video element playback controls and status display</source> + <translation type="obsolete">Commandes de lecture et affichage de l'état de l'élément vidéo</translation> </message> <message> - <source>At least one time component must appear after the %1-delimiter.</source> - <translation>Au moins un composant doit apparaître après le délimiteur %1.</translation> + <source>Mute audio tracks</source> + <translation type="obsolete">Couper le son des pistes audio</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qabstractfloatmathematician.cpp" line="+64"/> - <source>No operand in an integer division, %1, can be %2.</source> - <translation>Pas d'opérande dans une division entière, %1, peut être %2.</translation> + <source>Unmute audio tracks</source> + <translation type="obsolete">Réactiver le son des pistes audio</translation> </message> <message> - <location line="+7"/> - <source>The first operand in an integer division, %1, cannot be infinity (%2).</source> - <translation>Le premier opérande dans une division entière, %1, ne peut être infini (%2).</translation> + <source>Begin playback</source> + <translation type="obsolete">Commencer la lecture</translation> </message> <message> - <location line="+6"/> - <source>The second operand in a division, %1, cannot be zero (%2).</source> - <translation>Le second opérande dans une division, %1, ne peut être nul (%2).</translation> + <source>Pause playback</source> + <translation type="obsolete">Pause lecture</translation> </message> <message> - <source>%1 is not a valid value of type %2.</source> - <translation>%1 n'est pas une valeur valide du type %2.</translation> + <source>Movie time scrubber</source> + <translation type="obsolete">Épurateur de la durée du film</translation> </message> <message> - <source>When casting to %1 from %2, the source value cannot be %3.</source> - <translation>En castant de %2 vers %1, la valeur source ne peut pas être %3.</translation> + <source>Movie time scrubber thumb</source> + <translation type="obsolete">Case de défilement de l'épurateur de la durée du film</translation> </message> <message> - <source>Integer division (%1) by zero (%2) is undefined.</source> - <translation>Division entière (%1) par zéro (%2) indéfinie.</translation> + <source>Rewind movie</source> + <translation type="obsolete">Rembobiner le film</translation> </message> <message> - <source>Division (%1) by zero (%2) is undefined.</source> - <translation>Division (%1) par zéro (%2) indéfinie.</translation> + <source>Return streaming movie to real-time</source> + <translation type="obsolete">Ramener le film en streaming en temps réel</translation> </message> <message> - <source>Modulus division (%1) by zero (%2) is undefined.</source> - <translation>Module division (%1) par zéro (%2) indéfinie.</translation> + <source>Current movie time</source> + <translation type="obsolete">Durée du film actuel</translation> </message> <message> - <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source> - <translation>Diviser une valeur du type %1 par %2 (not-a-number) est interdit.</translation> + <source>Remaining movie time</source> + <translation type="obsolete">Durée de film restante</translation> </message> <message> - <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source> - <translation>Diviser une valeur de type %1 par %2 ou %3 (plus ou moins zéro) est interdit.</translation> + <source>Current movie status</source> + <translation type="obsolete">État du film actuel</translation> </message> <message> - <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source> - <translation>La multiplication d'une valeur du type %1 par %2 ou %3 (plus ou moins infini) est interdite.</translation> + <source>Play movie in full-screen mode</source> + <translation type="obsolete">Regarder le film en mode plein écran</translation> </message> <message> - <source>A value of type %1 cannot have an Effective Boolean Value.</source> - <translation>Une valeur de type %1 ne peut pas avoir une Effective Boolean Value.</translation> + <source>Seek quickly back</source> + <translation type="obsolete">Recherche rapide arrière</translation> </message> <message> - <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source> - <translation>Effective Boolean Value ne peut être calculée pour une séquence contenant deux ou plus valeurs atomiques.</translation> + <source>Seek quickly forward</source> + <translation type="obsolete">Recherche rapide avant</translation> </message> <message> - <source>Value %1 of type %2 exceeds maximum (%3).</source> - <translation>La valeur %1 de type %2 excède le maximum (%3).</translation> + <source>Indefinite time</source> + <translation type="obsolete">Durée indéfinie</translation> </message> <message> - <source>Value %1 of type %2 is below minimum (%3).</source> - <translation>La valeur %1 de type %2 est inférieur au minimum (%3).</translation> + <source>%1 days %2 hours %3 minutes %4 seconds</source> + <translation type="obsolete">%1 jours %2 heures %3 minutes %4 secondes</translation> </message> <message> - <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source> - <translation>Une valeur de type %1 doit contenir un nombre pair de chiffre. La valeur %2 n'est pas conforme.</translation> + <source>%1 hours %2 minutes %3 seconds</source> + <translation type="obsolete">%1 heures %2 minutes %3 secondes</translation> </message> <message> - <source>%1 is not valid as a value of type %2.</source> - <translation>%1 n'est pas une valeur valide de type %2.</translation> + <source>%1 minutes %2 seconds</source> + <translation type="obsolete">%1 minutes %2 secondes</translation> </message> <message> - <source>Operator %1 cannot be used on type %2.</source> - <translation>L'opérateur %1 ne peut pas être utilisé pour le type %2.</translation> + <source>%1 seconds</source> + <translation type="obsolete">%1 secondes</translation> </message> <message> - <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source> - <translation>L'opérateur %1 ne peut pas être utilisé pour des valeurs atomiques de type %2 ou %3.</translation> + <source>Inspect</source> + <translation type="obsolete">Inspecter</translation> </message> <message> - <source>The namespace URI in the name for a computed attribute cannot be %1.</source> - <translation>L'URI de namespace dans le nom d'un attribut calculé ne peut pas être %1.</translation> + <source>No recent searches</source> + <translation type="obsolete">Pas de recherche récente</translation> </message> <message> - <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source> - <translation>Le nom d'un attribut calculé ne peut pas avoir l'URI de namespace %1 avec le nom local %2.</translation> + <source>Recent searches</source> + <translation type="obsolete">Recherches récentes</translation> </message> <message> - <source>Type error in cast, expected %1, received %2.</source> - <translation>Erreur de type lors du cast, attendu %1 mais reçu %2.</translation> + <source>Clear recent searches</source> + <translation type="obsolete">Effacer les recherches récentes</translation> </message> <message> - <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source> - <translation>En castant vers %1 ou des types dérivés, la valeur source doit être du même type ou une chaîne. Le type %2 n'est pas autorisé.</translation> + <source>Unknown</source> + <translation type="obsolete">Inconnu</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qcastingplatform.cpp" line="+134"/> - <source>No casting is possible with %1 as the target type.</source> - <translation>Aucun cast n'est possible avec %1 comme type de destination.</translation> + <source>%1 (%2x%3 pixels)</source> + <translation type="obsolete">%1 (%2x%3 pixels)</translation> </message> <message> - <location line="+15"/> - <source>It is not possible to cast from %1 to %2.</source> - <translation>Il est impossible de caster de %1 en %2.</translation> + <source>This is a searchable index. Enter search keywords: </source> + <translation type="obsolete">Ceci est un index. Veuillez saisir les mots-clé :</translation> </message> <message> - <location line="+27"/> - <source>Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated.</source> - <translation>Caster vers %1 est impossible parce que c'est un type abstrait qui ne peut donc être instancié.</translation> + <source>JavaScript Problem - %1</source> + <translation>Problème de JavaScript - %1</translation> </message> <message> - <location line="+23"/> - <source>It's not possible to cast the value %1 of type %2 to %3</source> - <translation>I lest impossible de caster la valeur %1 de type %2 en %3</translation> + <source>The script on this page appears to have a problem. Do you want to stop the script?</source> + <translation>Le script de cette page semble avoir un problème. Souhaitez-vous arrêter le script?</translation> </message> <message> - <location line="+8"/> - <source>Failure when casting from %1 to %2: %3</source> - <translation>Echec en castant de %1 ver %2 : %3</translation> + <source>Paste and Match Style</source> + <translation>Coller et suivre le style</translation> </message> <message> - <source>A comment cannot contain %1</source> - <translation>Un commentaire ne peut pas contenir %1</translation> + <source>Remove formatting</source> + <translation>Retirer la mise en forme</translation> </message> <message> - <source>A comment cannot end with a %1.</source> - <translation>Un commentaire ne peut pas finir par %1.</translation> + <source>Strikethrough</source> + <translation>Barré</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qcomparisonplatform.cpp" line="+167"/> - <source>No comparisons can be done involving the type %1.</source> - <translation>Aucune comparaison ne peut être faite avec le type %1.</translation> + <source>Subscript</source> + <translation>Indice</translation> </message> <message> - <location line="+14"/> - <source>Operator %1 is not available between atomic values of type %2 and %3.</source> - <translation>L'opérateur %1 n'est pas disponible entre valeurs atomiques de type %2 et %3.</translation> + <source>Superscript</source> + <translation>Exposant</translation> </message> <message> - <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source> - <translation>Un noeuds attribut ne peut être un fils d'un noeuds document. C'est pourquoi l'attribut %1 est mal placé.</translation> + <source>Insert Bulleted List</source> + <translation>Insérer une liste à puces</translation> </message> <message> - <source>A library module cannot be evaluated directly. It must be imported from a main module.</source> - <translation>Un module de bibliothèque ne peut pas être évalué directement. Il doit être importé d'un module principal.</translation> + <source>Insert Numbered List</source> + <translation>Insérer une liste numérotée</translation> </message> <message> - <source>No template by name %1 exists.</source> - <translation>Aucun template nommé %1 n'existe.</translation> + <source>Indent</source> + <translation>Retrait</translation> </message> <message> - <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source> - <translation>Une valeur de type %1 ne peut être un prédicat. Un prédicat doit être de type numérique ou un Effective Boolean Value.</translation> + <source>Outdent</source> + <translation>Retrait négatif</translation> </message> <message> - <source>A positional predicate must evaluate to a single numeric value.</source> - <translation>Un prédicat de position doit être évalué en une unique valeur numérique.</translation> + <source>Center</source> + <translation>Centré</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/> - <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source> - <translation>Le nom de destination dans une instruction de traitement ne peut être %1. %2 est invalide.</translation> + <source>Justify</source> + <translation>Justifié</translation> </message> <message> - <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source> - <translation>%1 n'est pas un nom de destination valide dans une instruction de traitement. Ce doit être une valeur %2, par ex. %3.</translation> + <source>Align Left</source> + <translation>Aligner à gauche</translation> </message> <message> - <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source> - <translation>La dernière étape dans un chemin doit contenir soit des noeuds soit des valeurs atomiques. Cela ne peut pas être un mélange des deux.</translation> + <source>Align Right</source> + <translation>Aligner à droite</translation> </message> +</context> +<context> + <name>QWhatsThisAction</name> <message> - <source>The data of a processing instruction cannot contain the string %1</source> - <translation>Les données d'une instruction de traitement ne peut contenir la chaîne %1</translation> + <source>What's This?</source> + <translation>Qu'est-ce que c'est ?</translation> </message> +</context> +<context> + <name>QWidget</name> <message> - <source>No namespace binding exists for the prefix %1</source> - <translation>Aucun lien de namespace n'existe pour le préfixe %1</translation> + <source>*</source> + <translation></translation> </message> +</context> +<context> + <name>QWizard</name> <message> - <source>No namespace binding exists for the prefix %1 in %2</source> - <translation>Aucun lien de namespace n'existe pour le préfixe %1 dans %2</translation> + <source>Go Back</source> + <translation>Précédent</translation> </message> <message> - <source>%1 is an invalid %2</source> - <translation>%1 est un ivalide %2</translation> + <source>Continue</source> + <translation>Continuer</translation> </message> - <message numerus="yes"> - <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> - <translation> - <numerusform>%1 prend au maximum %n argument. %2 est donc invalide.</numerusform> - <numerusform>%1 prend au maximum %n arguments. %2 est donc invalide.</numerusform> - </translation> + <message> + <source>Commit</source> + <translatorcomment>si il s'agit de commit au même sens que git... (en même temps se marier en cliquant... ?!!?!)</translatorcomment> + <translation>Soumettre</translation> </message> - <message numerus="yes"> - <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source> - <translation> - <numerusform>%1 requiert au moins %n argument. %2 est donc invalide.</numerusform> - <numerusform>%1 requiert au moins %n arguments. %2 est donc invalide.</numerusform> - </translation> + <message> + <source>Done</source> + <translation>Terminer</translation> </message> <message> - <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source> - <translation>Le premier argument de %1 ne peut être du type %2. Il doit être de type numérique, xs:yearMonthDuration ou xs:dayTimeDuration.</translation> + <source>Quit</source> + <translation type="obsolete">Quitter</translation> </message> <message> - <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> - <translation>Le premier argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5.</translation> + <source>Help</source> + <translation>Aide</translation> </message> <message> - <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> - <translation>Le deuxième argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5.</translation> + <source>< &Back</source> + <translation>< &Précédent</translation> </message> <message> - <source>%1 is not a valid XML 1.0 character.</source> - <translation>%1 n'est pas un caractère XML 1.0 valide.</translation> + <source>&Finish</source> + <translation>&Terminer</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qcomparingaggregator.cpp" line="+197"/> - <source>The first argument to %1 cannot be of type %2.</source> - <translation>Le premier argument de %1 ne peut être du type %2.</translation> + <source>Cancel</source> + <translation>Annuler</translation> </message> <message> - <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source> - <translation>Si les deux valeurs ont des décalages de zone, elle doivent avoir le même. %1 et %2 sont différents.</translation> + <source>&Help</source> + <translation>&Aide</translation> </message> <message> - <source>%1 was called.</source> - <translation>%1 a été appelé.</translation> + <source>&Next</source> + <translation>&Suivant ></translation> </message> <message> - <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source> - <translation>%1 doit être suivi par %2 ou %3, et non à la fin de la chaîne de remplacement.</translation> + <source>&Next ></source> + <translation>&Suivant ></translation> </message> +</context> +<context> + <name>QWorkspace</name> <message> - <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source> - <translation>Dans la chaîne de remplacement, %1 doit être suivi par au moins un chiffre s'il n'est pas échappé.</translation> + <source>&Restore</source> + <translation>&Restaurer</translation> </message> <message> - <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> - <translation>Dans la chaîne de remplacement, %1 peut seulement être utilisé pour échapper lui-même ou %2 mais pas %3</translation> + <source>&Move</source> + <translation>&Déplacer</translation> </message> <message> - <source>%1 matches newline characters</source> - <translation>%1 correspond à des caractères de saut de ligne</translation> + <source>&Size</source> + <translation>&Taille</translation> </message> <message> - <source>%1 and %2 match the start and end of a line.</source> - <translation>%1 et %2 correspondent au début et à la fin d'une ligne.</translation> + <source>Mi&nimize</source> + <translation>Réd&uire</translation> </message> <message> - <source>Matches are case insensitive</source> - <translation>Les correspondances ne sont pas sensibles à la casse</translation> + <source>Ma&ximize</source> + <translation>Ma&ximiser</translation> </message> <message> - <source>Whitespace characters are removed, except when they appear in character classes</source> - <translation>Les blancs sont supprimés excepté quand ils apparaissent dans les classes de caractère</translation> + <source>&Close</source> + <translation>&Fermer</translation> </message> <message> - <source>%1 is an invalid regular expression pattern: %2</source> - <translation>%1 est un modèle d'expression régulière invalide: %2</translation> + <source>Stay on &Top</source> + <translation>Rester au &premier plan</translation> </message> <message> - <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> - <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont :</translation> + <source>Minimize</source> + <translation>Réduire</translation> </message> <message> - <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source> - <translation>Si le premier argument est une sequence vide ou un chaîne vide (sans namespace), un préfixe ne peut être spécifié. Le préfixe %1 a été spécifié.</translation> + <source>Restore Down</source> + <translation>Restaurer en bas</translation> </message> <message> - <source>It will not be possible to retrieve %1.</source> - <translation>Il sera impossible de récupérer %1.</translation> + <source>Close</source> + <translation>Fermer</translation> </message> <message> - <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source> - <translation>Le noeuds racine du deuxième argument à la fonction %1 doit être un noeuds document. %2 n'est pas un document.</translation> + <source>Sh&ade</source> + <translation>Enrou&ler</translation> </message> <message> - <source>The default collection is undefined</source> - <translation>I'l n'y a pas de collection par défaut</translation> + <source>%1 - [%2]</source> + <translation>%1 - [%2]</translation> </message> <message> - <source>%1 cannot be retrieved</source> - <translation>%1 ne peut pas être récupéré</translation> + <source>&Unshade</source> + <translation>Dér&ouler</translation> </message> +</context> +<context> + <name>QXml</name> <message> - <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source> - <translation>Le forme de normalisation %1 n'est pas supportée. Les formes supportées sont %2, %3, %4 et %5, et aucun, ie. une chaîne vide (pas de normalisation).</translation> + <source>no error occurred</source> + <translation>aucune erreur ne s'est produite</translation> </message> <message> - <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source> - <translation>Un décalage de zone doit être dans l'intervalle %1..%2 inclus. %3 est hors de l'intervalle.</translation> + <source>error triggered by consumer</source> + <translation type="unfinished">Erreur déclenchée par le consommateur</translation> </message> <message> - <source>%1 is not an whole number of minutes.</source> - <translation type="obsolete">%1 n'est pas un nombre complet de minutes.</translation> + <source>unexpected end of file</source> + <translation type="unfinished">Fin de fichier inattendue</translation> </message> <message> - <source>Required cardinality is %1; got cardinality %2.</source> - <translation>La cardinalité requise est %1; reçu %2.</translation> + <source>more than one document type definition</source> + <translation type="unfinished">plus d'une définition de type de docuement</translation> </message> <message> - <source>The item %1 did not match the required type %2.</source> - <translation>L'item %1 ne correspond pas au type requis %2.</translation> + <source>error occurred while parsing element</source> + <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique de l'élement</translation> </message> <message> - <source>%1 is an unknown schema type.</source> - <translation>%1 est un type de schema inconnu.</translation> + <source>tag mismatch</source> + <translation type="unfinished">tag incongru</translation> </message> <message> - <source>Only one %1 declaration can occur in the query prolog.</source> - <translation>Seulement une déclaration %1 peut intervenir lors du prologue de la requête.</translation> + <source>error occurred while parsing content</source> + <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique du contenu</translation> </message> <message> - <source>The initialization of variable %1 depends on itself</source> - <translation>L'initialisation de la variable %1 dépend d'elle-même</translation> + <source>unexpected character</source> + <translation type="unfinished">caractère inattendu</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+912"/> - <source>No variable by name %1 exists</source> - <translation>Aucun variable nommée %1 existe</translation> + <source>invalid name for processing instruction</source> + <translation type="unfinished">nom d'instruction invalide</translation> </message> <message> - <source>The variable %1 is unused</source> - <translation>La variable %1 est inutilisée</translation> + <source>version expected while reading the XML declaration</source> + <translation type="unfinished">Une version est attendue dans la déclaration XML</translation> </message> <message> - <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> - <translation>La version %1 n'est pas supportée. La version de XQuery supportée est 1.0.</translation> + <source>wrong value for standalone declaration</source> + <translation type="unfinished">Valeur incorrecte pour une déclaration autonome</translation> </message> <message> - <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source> - <translation>L'encodage %1 est invalide. Il doit contenir uniquement des caractères latins, sans blanc et doit être conforme à l'expression régulière %2.</translation> + <source>error occurred while parsing document type definition</source> + <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique de la définition du type de document</translation> </message> <message> - <source>No function with signature %1 is available</source> - <translation>Aucune fonction avec la signature %1 n'est disponible</translation> + <source>letter is expected</source> + <translation type="unfinished">une lettre est attendue</translation> </message> <message> - <source>A default namespace declaration must occur before function, variable, and option declarations.</source> - <translation>Un déclaration de namespace par défaut doit être placée avant toute fonction, variable ou declaration d'option.</translation> + <source>error occurred while parsing comment</source> + <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique du commentaire</translation> </message> <message> - <source>Namespace declarations must occur before function, variable, and option declarations.</source> - <translation>Les declarations de namespace doivent être placées avant tout fonction, variable ou déclaration d'option.</translation> + <source>error occurred while parsing reference</source> + <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique d'une référence</translation> </message> <message> - <source>Module imports must occur before function, variable, and option declarations.</source> - <translation>Les imports de module doivent être placés avant tout fonction, variable ou déclaration d'option.</translation> + <source>internal general entity reference not allowed in DTD</source> + <translation type="unfinished"></translation> </message> <message> - <source>It is not possible to redeclare prefix %1.</source> - <translation>Il est impossible de redéclarer le préfixe %1.</translation> + <source>external parsed general entity reference not allowed in attribute value</source> + <translation type="unfinished"></translation> </message> <message> - <source>Only the prefix %1 can be declared to bind the namespace %2. By default, it is already bound to the prefix %1.</source> - <translation type="obsolete">Seul le préfixe %1 peut être déclaré pour lié le namespace %2. Par défaut, il est déjà lié au préfixe %1.</translation> + <source>external parsed general entity reference not allowed in DTD</source> + <translation type="unfinished"></translation> </message> <message> - <source>Prefix %1 is already declared in the prolog.</source> - <translation>Le préfixe %1 est déjà déclaré dans le prologue.</translation> + <source>unparsed entity reference in wrong context</source> + <translation type="unfinished"></translation> </message> <message> - <source>The name of an option must have a prefix. There is no default namespace for options.</source> - <translation>Le nom d'une option doit avoir un préfixe. Il n'y a pas de namespace par défaut pour les options.</translation> + <source>recursive entities</source> + <translation type="unfinished"></translation> </message> <message> - <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> - <translation>La fonctionnalité "Schema Import" n'est pas supportée et les déclarations %1 ne peuvent donc intervenir.</translation> + <source>error in the text declaration of an external entity</source> + <translation type="unfinished"></translation> </message> <message> - <source>The target namespace of a %1 cannot be empty.</source> - <translation>Le namespace cible d'un %1 ne peut être vide.</translation> + <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> + <translation type="unfinished"></translation> </message> <message> - <source>The module import feature is not supported</source> - <translation>La fonctionnalité "module import" n'est pas supportée</translation> + <source>standalone declaration expected while reading the XML declaration</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QXmlPatternistCLI</name> <message> - <source>A variable by name %1 has already been declared in the prolog.</source> - <translation type="obsolete">Une variable du nom %1 a déjà été déclarée dans le prologue.</translation> + <source>Warning in %1, at line %2, column %3: %4</source> + <translation>Avertissement dans %1, à la ligne %2, colonne %3: %4</translation> </message> <message> - <location line="+3572"/> - <source>No value is available for the external variable by name %1.</source> - <translation>Aucune valeur n'est disponible pour la variable externe %1.</translation> + <source>Warning in %1: %2</source> + <translation>Avertissement dans %1: %2</translation> </message> <message> - <source>The namespace for a user defined function cannot be empty(try the predefined prefix %1 which exists for cases like this)</source> - <translation type="obsolete">Le namespace d'une fonction définie par l'utilisateur ne peut être vide (essayez le préfixe prédéfini %1 qui existe pour ce genre de cas)</translation> + <source>Unknown location</source> + <translation>Lieu inconnu</translation> </message> <message> - <location line="-4154"/> - <source>A construct was encountered which only is allowed in XQuery.</source> - <translation>Construct n'est autorisé que dans XQuery.</translation> + <source>Error %1 in %2, at line %3, column %4: %5</source> + <translation>Erreur %1 dans %2, à la ligne %3, colonne %4: %5</translation> </message> <message> - <location line="+118"/> - <source>A template by name %1 has already been declared.</source> - <translation>Un template nommé %1 a déjà été déclaré.</translation> + <source>Error %1 in %2: %3</source> + <translation>Erreur %1 dans %2: %3</translation> </message> +</context> +<context> + <name>QXmlStream</name> <message> - <source>The keyword %1 cannot occur with any other mode name.</source> - <translation>Le mot-clé %1 ne peut pas apparaître avec un autre nom de mode.</translation> + <source>Extra content at end of document.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+3610"/> - <source>The value of attribute %1 must of type %2, which %3 isn't.</source> - <translation>La valeur de l'attribut %1 doit être du type %2, %3 n'en est pas.</translation> + <source>Invalid entity value.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+75"/> - <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source> - <translation>Le préfixe %1 ne peut être lié. Par défault, il est déjà lié au namespace %2.</translation> + <source>Invalid XML character.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+312"/> - <source>A variable by name %1 has already been declared.</source> - <translation>Une variable nommée %1 a déjà été déclarée.</translation> + <source>Sequence ']]>' not allowed in content.</source> + <translation type="unfinished"></translation> </message> <message> - <source>A stylesheet function must have a prefixed name.</source> - <translation>Une fonction de feuille de style doit avoir un nom préfixé.</translation> + <source>Namespace prefix '%1' not declared</source> + <translation type="unfinished"></translation> </message> <message> - <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> - <translation>Le namespace d'une fonction utilisateur ne peut pas être vide (essayez le préfixe prédéfini %1 qui existe pour ce genre de cas)</translation> + <source>Attribute redefined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> - <translation>Le namespace %1 est réservé; c'est pourquoi les fonctions définies par l'utilisateur ne peuvent l'utiliser. Essayez le préfixe prédéfini %2 qui existe pour ces cas.</translation> + <source>Unexpected character '%1' in public id literal.</source> + <translation type="unfinished"></translation> </message> <message> - <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> - <translation>Le namespace d'une fonction utilisateur dans un module de bibliothèque doit être équivalent au namespace du module. En d'autres mots, il devrait être %1 au lieu de %2</translation> + <source>Invalid XML version string.</source> + <translation type="unfinished"></translation> </message> <message> - <source>A function already exists with the signature %1.</source> - <translation>Une fonction avec la signature %1 existe déjà.</translation> + <source>Unsupported XML version.</source> + <translation type="unfinished"></translation> </message> <message> - <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> - <translation>Les fonctions externes ne sont pas supportées. Toutes les fonctions supportées peuvent êter utilisées directement sans les déclarer préalablement comme externes</translation> + <source>%1 is an invalid encoding name.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+259"/> - <source>An argument by name %1 has already been declared. Every argument name must be unique.</source> - <translation>Un argument nommé %1 a déjà été déclaré. Chaque nom d'argument doit être unique.</translation> + <source>Encoding %1 is unsupported</source> + <translation type="unfinished"></translation> </message> <message> - <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source> - <translation>Quand la fonction %1 est utilisée pour vérifier la correspondance dans un pattern, l'argument doit être une référence de variable ou une chaîne de caractères.</translation> + <source>Invalid XML encoding name.</source> + <translation type="obsolete">Encodage XML invalide.</translation> </message> <message> - <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source> - <translation>Dans un pattern XSL-T, le premier argument à la fonction %1 doit être une chaîne de caractères quand utilisé pour correspondance.</translation> + <source>Standalone accepts only yes or no.</source> + <translation type="unfinished"></translation> </message> <message> - <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source> - <translation>Dans un pattern XSL-T, le premier argument à la fonction %1 doit être un litéral ou une référence de variable.</translation> + <source>Invalid attribute in XML declaration.</source> + <translation type="unfinished"></translation> </message> <message> - <source>In an XSL-T pattern, function %1 cannot have a third argument.</source> - <translation>Dans un pattern XSL-T, la fonction %1 ne peut pas avoir de 3e argument.</translation> + <source>Premature end of document.</source> + <translation type="unfinished"></translation> </message> <message> - <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source> - <translation>Dans un pattern XSL-T, seules les fonctions %1 et %2 (pas %3) peuvent être utilisées pour le matching.</translation> + <source>Invalid document.</source> + <translation type="unfinished"></translation> </message> <message> - <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source> - <translation>Dans un pattern XSL-T, l'axe %1 ne peut pas être utilisé, seulement %2 ou %3 le peuvent.</translation> + <source>Expected </source> + <translation type="unfinished"></translation> </message> <message> - <source>%1 is an invalid template mode name.</source> - <translation>%1 est un nom de mode de template invalide.</translation> + <source>, but got '</source> + <translation type="unfinished"></translation> </message> <message> - <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source> - <translation>Le nom d'une variable liée dans un expression for doit être different de la variable positionnelle. Les deux variables appelées %1 sont en conflit.</translation> + <source>Unexpected '</source> + <translation type="unfinished"></translation> </message> <message> - <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source> - <translation>La fonctionnalité "Schema Validation" n'est pas supportée. Les expressions %1 ne seront pas utilisées.</translation> + <source>Expected character data.</source> + <translation type="unfinished"></translation> </message> <message> - <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source> - <translation>Aucune des expressions pragma n'est supportée. Une expression par défault doit être présente</translation> + <source>Recursive entity detected.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Each name of a template parameter must be unique; %1 is duplicated.</source> - <translation>Chaque nom d'un paramètre ede template doit être unique; %1 est dupliqué.</translation> + <source>Start tag expected.</source> + <translation type="unfinished"></translation> </message> <message> - <source>The %1-axis is unsupported in XQuery</source> - <translation>L'axe %1 n'est pas supporté dans XQuery</translation> + <source>XML declaration not at start of document.</source> + <translation type="unfinished"></translation> </message> <message> - <source>%1 is not a valid name for a processing-instruction.</source> - <translation>%1 n'est pas un nom valide pour une instruction de traitement.</translation> + <source>NDATA in parameter entity declaration.</source> + <translation type="unfinished"></translation> </message> <message> - <source>%1 is not a valid numeric literal.</source> - <translation>%1 n'est pas une valeur numérique valide.</translation> + <source>%1 is an invalid processing instruction name.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+1935"/> - <source>No function by name %1 is available.</source> - <translation>La fonction %1 n'est pas disponible.</translation> + <source>Invalid processing instruction name.</source> + <translation type="unfinished"></translation> </message> <message> - <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> - <translation>L'URI de namespace ne peut être une chaîne vide quand on le lie à un préfixe, %1.</translation> + <source>Illegal namespace declaration.</source> + <translation type="unfinished"></translation> </message> <message> - <source>%1 is an invalid namespace URI.</source> - <translation>%1 est un URI de namespace invalide.</translation> + <source>Invalid XML name.</source> + <translation type="unfinished"></translation> </message> <message> - <source>It is not possible to bind to the prefix %1</source> - <translation>Il est impossible de se lier au préfixe %1</translation> + <source>Opening and ending tag mismatch.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> - <translation>Le namespace %1 peut seulement être lié à %2 (et doit être pré-déclaré).</translation> + <source>Reference to unparsed entity '%1'.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> - <translation>Le préfixe %1 peut seulement être lié à %2 (et doit être prédéclaré).</translation> + <source>Entity '%1' not declared.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Two namespace declaration attributes have the same name: %1.</source> - <translation>Deux attributs de déclarations de namespace ont le même nom : %1.</translation> + <source>Reference to external entity '%1' in attribute value.</source> + <translation type="unfinished"></translation> </message> <message> - <source>The namespace URI must be a constant and cannot use enclosed expressions.</source> - <translation>L'URI de namespace doit être une constante et ne peut contenir d'expressions.</translation> + <source>Invalid character reference.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+250"/> - <source>An attribute by name %1 has already appeared on this element.</source> - <translation>Un attribute nommé %1 existe déjà pour cet élément.</translation> + <source>Encountered incorrectly encoded content.</source> + <translation type="unfinished"></translation> </message> <message> - <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> - <translation>Un constructeur direct d'élément est mal-formé. %1 est terminé par %2.</translation> + <source>The standalone pseudo attribute must appear after the encoding.</source> + <translation type="unfinished"></translation> </message> <message> - <source>The name %1 does not refer to any schema type.</source> - <translation>Le nom %1 ne se réfère à aucun type de schema.</translation> + <source>%1 is an invalid PUBLIC identifier.</source> + <translation type="unfinished"></translation> </message> +</context> +<context> + <name>QtXmlPatterns</name> <message> - <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source> - <translation>%1 est une type complexe. Caster vers des types complexes n'est pas possible. Cependant, caster vers des types atomiques comme %2 marche.</translation> + <source>An %1-attribute with value %2 has already been declared.</source> + <translation type="obsolete">Un attribute %1 avec la valeur %2 est déjà déclaré.</translation> </message> <message> - <source>%1 is not an atomic type. Casting is only possible to atomic types.</source> - <translation>%1 n'est pas un type atomique. Il est uniquement possible de caster vers des types atomiques.</translation> + <source>An %1-attribute must have a valid %2 as value, which %3 isn't.</source> + <translation type="obsolete">Un attribute %1 doit avoir un %2 valide, %3 ne l'a pas.</translation> </message> <message> - <source>%1 is not a valid name for a processing-instruction. Therefore this name test will never match.</source> - <translation type="obsolete">%1 n'est pas un nom valide pour une instruction de traitement. C'est pourquoi ce test de nom ne réussira jamais.</translation> + <source>Network timeout.</source> + <translation>Le réseau ne répond pas.</translation> </message> <message> - <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> - <translation>%1 n'est pas dans les déclaration d'attribut in-scope. La fonctionnalité d'inport de schéma n'est pas supportée.</translation> + <source>Element %1 can't be serialized because it appears outside the document element.</source> + <translation>L'élément %1 ne peut pas être sérialisé parce qu'il est hors de l'élément document.</translation> </message> <message> - <source>The name of an extension expression must be in a namespace.</source> - <translation>Le nom d'une expression d'extension doit être dans un namespace.</translation> + <source>Attribute element %1 can't be serialized because it appears at the top level.</source> + <translation type="obsolete">L'élément attribute %1 ne peut pas être sérialisé parce qu'il apparaît comme racine.</translation> </message> <message> - <source>empty</source> - <translation>vide</translation> + <source>Year %1 is invalid because it begins with %2.</source> + <translation>L'année %1 est invalide parce qu'elle commence par %2.</translation> </message> <message> - <source>zero or one</source> - <translation>zéro ou un</translation> + <source>Day %1 is outside the range %2..%3.</source> + <translation>Le jour %1 est hors de l'intervalle %2..%3.</translation> </message> <message> - <source>exactly one</source> - <translation>exactement un</translation> + <source>Month %1 is outside the range %2..%3.</source> + <translation>Le mois %1 est hors de l'intervalle %2..%3.</translation> </message> <message> - <source>one or more</source> - <translation>un ou plus</translation> + <source>Overflow: Can't represent date %1.</source> + <translation>Overflow: ne peut pas représenter la date %1.</translation> </message> <message> - <source>zero or more</source> - <translation>zéro ou plus</translation> + <source>Day %1 is invalid for month %2.</source> + <translation>Jour %1 est invalide pour le mois %2.</translation> </message> <message> - <source>Required type is %1, but %2 was found.</source> - <translation>Le type requis est %1, mais %2 a été reçu.</translation> + <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source> + <translation>L'heure 24:%1:%2.%3 est invalide. L'heure est 24 mais les minutes, seconndes et millisecondes ne sont pas à 0;</translation> </message> <message> - <source>Promoting %1 to %2 may cause loss of precision.</source> - <translation>La Promotion de %1 vers %2 peut causer un perte de précision.</translation> + <source>Time %1:%2:%3.%4 is invalid.</source> + <translation>L'heure %1:%2:%3.%4 est invalide.</translation> </message> <message> - <source>The focus is undefined.</source> - <translation>Le focus est indéfini.</translation> + <source>Overflow: Date can't be represented.</source> + <translation>Overflow : la date ne peut pas être représentée.</translation> </message> <message> - <source>It's not possible to add attributes after any other kind of node.</source> - <translation>Il est impossible d'ajouter des attributs après un autre type de noeuds.</translation> + <source>At least one component must be present.</source> + <translation>Au moins un composant doit être présent.</translation> </message> <message> - <source>An attribute by name %1 has already been created.</source> - <translation>Un attribute de nom %1 a déjà été créé.</translation> + <source>At least one time component must appear after the %1-delimiter.</source> + <translation>Au moins un composant doit apparaître après le délimiteur %1.</translation> </message> <message> - <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source> - <translation>Seule le Unicode CodepointCollation est supporté (%1), %2 n'est pas supporté.</translation> + <source>No operand in an integer division, %1, can be %2.</source> + <translation type="obsolete">Pas d'opérande dans une division entière, %1, peut être %2.</translation> </message> <message> - <source>%1 is not a whole number of minutes.</source> - <translation>%1 n'est pas un nombre entier de minutes.</translation> + <source>The first operand in an integer division, %1, cannot be infinity (%2).</source> + <translation type="obsolete">Le premier opérande dans une division entière, %1, ne peut être infini (%2).</translation> </message> <message> - <source>Attribute %1 can't be serialized because it appears at the top level.</source> - <translation>L'attribut %1 ne peut pas être sérialisé car il apparaît à la racine.</translation> + <source>The second operand in a division, %1, cannot be zero (%2).</source> + <translation type="obsolete">Le second opérande dans une division, %1, ne peut être nul (%2).</translation> </message> <message> - <source>%1 is an unsupported encoding.</source> - <translation>%1 est un encodage non supporté.</translation> + <source>%1 is not a valid value of type %2.</source> + <translation>%1 n'est pas une valeur valide du type %2.</translation> </message> <message> - <source>%1 contains octets which are disallowed in the requested encoding %2.</source> - <translation>%1 contient 'octets', qui n'est pas autorisé pour l'encodage %2.</translation> + <source>When casting to %1 from %2, the source value cannot be %3.</source> + <translation>En castant de %2 vers %1, la valeur source ne peut pas être %3.</translation> </message> <message> - <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source> - <translation>Le codepoint %1 dans %2 et utilisant l'encodage %3 est un caractère XML invalide.</translation> + <source>Integer division (%1) by zero (%2) is undefined.</source> + <translation>Division entière (%1) par zéro (%2) indéfinie.</translation> </message> <message> - <source>Ambiguous rule match.</source> - <translation>Corresonpdance aux règles ambigüe.</translation> + <source>Division (%1) by zero (%2) is undefined.</source> + <translation>Division (%1) par zéro (%2) indéfinie.</translation> </message> <message> - <source>In a namespace constructor, the value for a namespace value cannot be an empty string.</source> - <translation type="obsolete">Dans un cosntructeur de namespace, la valeur pour un namespace ne peut pas être une chaîne vide.</translation> + <source>Modulus division (%1) by zero (%2) is undefined.</source> + <translation>Module division (%1) par zéro (%2) indéfinie.</translation> </message> <message> - <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source> - <translation>Dans un constructeur d'espace de noms, la valeur pour un espace de noms ne peut pas être une chaîne vide.</translation> + <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source> + <translation>Diviser une valeur du type %1 par %2 (not-a-number) est interdit.</translation> </message> <message> - <source>The prefix must be a valid %1, which %2 is not.</source> - <translation>Le préfixe doit être un valide %1; %2 n'e l'est pas.</translation> + <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source> + <translation>Diviser une valeur de type %1 par %2 ou %3 (plus ou moins zéro) est interdit.</translation> </message> <message> - <source>The prefix %1 cannot be bound.</source> - <translation>Le préfixe %1 ne peut être lié.</translation> + <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source> + <translation>La multiplication d'une valeur du type %1 par %2 ou %3 (plus ou moins infini) est interdite.</translation> </message> <message> - <source>Only the prefix %1 can be bound to %2 and vice versa.</source> - <translation>Seul le préfixe %1 peut être lié à %2, et vice versa.</translation> + <source>A value of type %1 cannot have an Effective Boolean Value.</source> + <translation>Une valeur de type %1 ne peut pas avoir une valeur booléene effective.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qevaluationcache.cpp" line="+117"/> - <source>Circularity detected</source> - <translation>Circularité détectée</translation> + <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source> + <translation>Effective Boolean Value ne peut être calculée pour une séquence contenant deux ou plus valeurs atomiques.</translation> </message> <message> - <source>The parameter %1 is required, but no corresponding %2 is supplied.</source> - <translation>Le paramètre %1 est requis, mais aucun %2 correspondant n'est fourni.</translation> + <source>Value %1 of type %2 exceeds maximum (%3).</source> + <translation>La valeur %1 de type %2 excède le maximum (%3).</translation> </message> <message> - <source>The parameter %1 is passed, but no corresponding %2 exists.</source> - <translation>Le paramètre %1 est passé mais aucun %2 correspondant n'existe.</translation> + <source>Value %1 of type %2 is below minimum (%3).</source> + <translation>La valeur %1 de type %2 est inférieur au minimum (%3).</translation> </message> <message> - <source>The URI cannot have a fragment</source> - <translation>L'URI ne peut pas avoir de fragments</translation> + <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source> + <translation>Une valeur de type %1 doit contenir un nombre pair de chiffre. La valeur %2 n'est pas conforme.</translation> </message> <message> - <source>Element %1 is not allowed at this location.</source> - <translation>L'élément %1 n'est pas autorisé à cet emplacement.</translation> + <source>%1 is not valid as a value of type %2.</source> + <translation>%1 n'est pas une valeur valide de type %2.</translation> </message> <message> - <source>Text nodes are not allowed at this location.</source> - <translation>Les noeuds de texte ne sont pas autorisés à cet emplacement.</translation> + <source>Operator %1 cannot be used on type %2.</source> + <translation>L'opérateur %1 ne peut pas être utilisé pour le type %2.</translation> </message> <message> - <source>Parse error: %1</source> - <translation>Erreur: %1</translation> + <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source> + <translation>L'opérateur %1 ne peut pas être utilisé pour des valeurs atomiques de type %2 ou %3.</translation> </message> <message> - <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.</source> - <translation>La valeur de l'attribut de version XSL-T doit être du type %1, et non %2.</translation> + <source>The namespace URI in the name for a computed attribute cannot be %1.</source> + <translation>L'URI de namespace dans le nom d'un attribut calculé ne peut pas être %1.</translation> </message> <message> - <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source> - <translation>Lancement d'une feuille de style XSL-T 1.0 avec un processeur 2.0.</translation> + <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source> + <translation>Le nom d'un attribut calculé ne peut pas avoir l'URI de namespace %1 avec le nom local %2.</translation> </message> <message> - <source>Unknown XSL-T attribute %1.</source> - <translation>Attribut XSL-T inconnu : %1.</translation> + <source>Type error in cast, expected %1, received %2.</source> + <translation>Erreur de type lors du cast, attendu %1 mais reçu %2.</translation> </message> <message> - <source>Attribute %1 and %2 are mutually exclusive.</source> - <translation>Les attributs %1 et %2 sont mutuellement exclusifs.</translation> + <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source> + <translation>En castant vers %1 ou des types dérivés, la valeur source doit être du même type ou une chaîne. Le type %2 n'est pas autorisé.</translation> </message> <message> - <source>In a simplified stylesheet module, attribute %1 must be present.</source> - <translation>Dans un module de feuille de style simplifié, l'attribut %1 doit être présent.</translation> + <source>No casting is possible with %1 as the target type.</source> + <translation type="obsolete">Aucun cast n'est possible avec %1 comme type de destination.</translation> </message> <message> - <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source> - <translation>Si l'élément %1 n'a pas d'attribut %2, il ne peut pas avoir d'attribut %3 ou %4.</translation> + <source>It is not possible to cast from %1 to %2.</source> + <translation type="obsolete">Il est impossible de caster de %1 en %2.</translation> </message> <message> - <source>Element %1 must have at least one of the attributes %2 or %3.</source> - <translation>L'élement %1 doit avoir au moins un des attributs %2 ou %3.</translation> + <source>Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated.</source> + <translation type="obsolete">Caster vers %1 est impossible parce que c'est un type abstrait qui ne peut donc être instancié.</translation> </message> <message> - <source>At least one mode must be specified in the %1-attribute on element %2.</source> - <translation>Au moins un mode doit être spécifié dans l'attribut %1 sur l'élément %2.</translation> + <source>It's not possible to cast the value %1 of type %2 to %3</source> + <translation type="obsolete">I lest impossible de caster la valeur %1 de type %2 en %3</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qmaintainingreader.cpp" line="+183"/> - <source>Attribute %1 cannot appear on the element %2. Only the standard attributes can appear.</source> - <translation>L'attribut %1 ne peut pas apparaître sur l'élément %2. Seuls les attributs standard le peuvent.</translation> + <source>Failure when casting from %1 to %2: %3</source> + <translation type="obsolete">Echec en castant de %1 ver %2 : %3</translation> </message> <message> - <location line="+6"/> - <source>Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes.</source> - <translation>L'attribut %1 ne peut pas apparaître sur l'élément %2. Seul %3 est autorisé, ainsi que les attributs standard.</translation> + <source>A comment cannot contain %1</source> + <translation>Un commentaire ne peut pas contenir %1</translation> </message> <message> - <location line="+8"/> - <source>Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes.</source> - <translation>L'attribut %1 ne peut pas apparaître sur l'élément %2. Seuls %3, %4 et les attributs standard le sont.</translation> + <source>A comment cannot end with a %1.</source> + <translation>Un commentaire ne peut pas finir par %1.</translation> </message> <message> - <location line="+9"/> - <source>Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes.</source> - <translation>L'attribut %1 ne peut pas apparaître sur l'élément %2. Seul %3 et les attributs standard le sont.</translation> + <source>No comparisons can be done involving the type %1.</source> + <translation type="obsolete">Aucune comparaison ne peut être faite avec le type %1.</translation> </message> <message> - <location line="+13"/> - <source>XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is.</source> - <translation>Les attributs XSL-T sur des éléments XSL-T doivent être dans le namespace null, et pas dans %1.</translation> + <source>Operator %1 is not available between atomic values of type %2 and %3.</source> + <translation type="obsolete">L'opérateur %1 n'est pas disponible entre valeurs atomiques de type %2 et %3.</translation> </message> <message> - <location line="+12"/> - <source>The attribute %1 must appear on element %2.</source> - <translation>L'attribut %1 doit apparaître sur l'élément %2.</translation> + <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source> + <translation>Un noeuds attribut ne peut être un fils d'un noeuds document. C'est pourquoi l'attribut %1 est mal placé.</translation> </message> <message> - <location line="+8"/> - <source>The element with local name %1 does not exist in XSL-T.</source> - <translation>L'élément avec le nom local %1 n'existe pas dans XSL-T.</translation> + <source>A library module cannot be evaluated directly. It must be imported from a main module.</source> + <translation>Un module de bibliothèque ne peut pas être évalué directement. Il doit être importé d'un module principal.</translation> </message> <message> - <source>Element %1 must come last.</source> - <translation>L'élément %1 doit être le dernier.</translation> + <source>No template by name %1 exists.</source> + <translation>Aucun template nommé %1 n'existe.</translation> </message> <message> - <source>At least one %1-element must occur before %2.</source> - <translation>Au moins un élément %1 doit être placé avant %2.</translation> + <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source> + <translation>Une valeur de type %1 ne peut être un prédicat. Un prédicat doit être de type numérique ou un Effective Boolean Value.</translation> </message> <message> - <source>Only one %1-element can appear.</source> - <translation>Seulement un élément %1 peut apparaître.</translation> + <source>A positional predicate must evaluate to a single numeric value.</source> + <translation>Un prédicat de position doit être évalué en une unique valeur numérique.</translation> </message> <message> - <source>At least one %1-element must occur inside %2.</source> - <translation>Au moins un élément %1 doit apparaître dans %2.</translation> + <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source> + <translation type="obsolete">Le nom de destination dans une instruction de traitement ne peut être %1. %2 est invalide.</translation> </message> <message> - <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source> - <translation>Quand l'attribut %1 est présent sur %2, un constructeur de séquence ne peut pas être utilisé.</translation> + <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source> + <translation>%1 n'est pas un nom de destination valide dans une instruction de traitement. Ce doit être une valeur %2, par ex. %3.</translation> </message> <message> - <source>Element %1 must have either a %2-attribute or a sequence constructor.</source> - <translation>L'élément %1 doit avoir un attribut %2 ou un constructeur de séquence.</translation> + <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source> + <translation>La dernière étape dans un chemin doit contenir soit des noeuds soit des valeurs atomiques. Cela ne peut pas être un mélange des deux.</translation> </message> <message> - <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source> - <translation>Quand un paramètre est requis, un valeur par défault ne peut pas être fournie par un attribute %1 ou un constructeur de séquence.</translation> + <source>The data of a processing instruction cannot contain the string %1</source> + <translation>Les données d'une instruction de traitement ne peut contenir la chaîne %1</translation> </message> <message> - <source>Element %1 cannot have children.</source> - <translation>L'élément %1 ne peut pas avoir de fils.</translation> + <source>No namespace binding exists for the prefix %1</source> + <translation>Aucun lien de namespace n'existe pour le préfixe %1</translation> </message> <message> - <source>Element %1 cannot have a sequence constructor.</source> - <translation>L'élément %1 ne peut pas avoir un constructuer de séquence.</translation> + <source>No namespace binding exists for the prefix %1 in %2</source> + <translation>Aucun lien de namespace n'existe pour le préfixe %1 dans %2</translation> </message> <message> - <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source> - <translation>L'attribut %1 ne peut pas apparaître sur %2 quand il est fils de %3.</translation> + <source>%1 is an invalid %2</source> + <translation>%1 est un ivalide %2</translation> </message> - <message> - <source>A parameter in a function cannot be declared to be a tunnel.</source> - <translation>Un paramètre de fonction ne peut pas être déclaré comme un tunnel.</translation> + <message numerus="yes"> + <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> + <translation> + <numerusform>%1 prend au maximum %n argument. %2 est donc invalide.</numerusform> + <numerusform>%1 prend au maximum %n arguments. %2 est donc invalide.</numerusform> + </translation> + </message> + <message numerus="yes"> + <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source> + <translation> + <numerusform>%1 requiert au moins %n argument. %2 est donc invalide.</numerusform> + <numerusform>%1 requiert au moins %n arguments. %2 est donc invalide.</numerusform> + </translation> </message> <message> - <source>This processor is not Schema-aware and therefore %1 cannot be used.</source> - <translation>Ce processeur ne comprend pas les Schemas. C'est pourquoi %1 ne peut pas être utilisé.</translation> + <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source> + <translation>Le premier argument de %1 ne peut être du type %2. Il doit être de type numérique, xs:yearMonthDuration ou xs:dayTimeDuration.</translation> </message> <message> - <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn't.</source> - <translation>Les élément d'une feuille de style de haut niveau doivent être dans un namespace non nul; %1 ne l'est pas.</translation> + <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> + <translation>Le premier argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5.</translation> </message> <message> - <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source> - <translation>La valeur de l'attribut %1 de l'élement %2 doit être %3 ou %4, et pas %5.</translation> + <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> + <translation>Le deuxième argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5.</translation> </message> <message> - <source>Attribute %1 cannot have the value %2.</source> - <translation>L'attribut %1 ne peut avoir la valeur %2.</translation> + <source>%1 is not a valid XML 1.0 character.</source> + <translation>%1 n'est pas un caractère XML 1.0 valide.</translation> </message> <message> - <source>The attribute %1 can only appear on the first %2 element.</source> - <translation>L'attribute %1 peut seulement apparaître sur le premier élément %2.</translation> + <source>The first argument to %1 cannot be of type %2.</source> + <translation type="obsolete">Le premier argument de %1 ne peut être du type %2.</translation> </message> <message> - <source>At least one %1 element must appear as child of %2.</source> - <translation>Au moins un élément %1 doit apparaître comme fils de %2.</translation> + <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source> + <translation>Si les deux valeurs ont des décalages de zone, elle doivent avoir le même. %1 et %2 sont différents.</translation> </message> <message> - <source>A template with name %1 has already been declared.</source> - <translation>Un template nommé %1 a déjà été déclaré.</translation> + <source>%1 was called.</source> + <translation>%1 a été appelé.</translation> </message> <message> - <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source> - <translation>Le nom de destination dans une instruction de traitement ne peut être %1. %2 est invalide.</translation> + <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source> + <translation>%1 doit être suivi par %2 ou %3, et non à la fin de la chaîne de remplacement.</translation> </message> <message> - <source>No variable with name %1 exists</source> - <translation>Aucune variable nommée %1 n'existe</translation> + <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source> + <translation>Dans la chaîne de remplacement, %1 doit être suivi par au moins un chiffre s'il n'est pas échappé.</translation> </message> <message> - <source>The value of attribute %1 must be of type %2, which %3 isn't.</source> - <translation>La valeur de l'attribut %1 doit être du type %2, %3 n'en est pas.</translation> + <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> + <translation>Dans la chaîne de remplacement, %1 peut seulement être utilisé pour échapper lui-même ou %2 mais pas %3</translation> </message> <message> - <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source> - <translation>Le préfixe %1 ne peut être lié. Par défault, il est déjà lié au namespace %2.</translation> + <source>%1 matches newline characters</source> + <translation>%1 correspond à des caractères de saut de ligne</translation> </message> <message> - <source>A variable with name %1 has already been declared.</source> - <translation>Une variable nommée %1 a déjà été déclarée.</translation> + <source>%1 and %2 match the start and end of a line.</source> + <translation>%1 et %2 correspondent au début et à la fin d'une ligne.</translation> </message> <message> - <source>No value is available for the external variable with name %1.</source> - <translation>Aucune valeur n'est disponible pour la variable externe %1.</translation> + <source>Matches are case insensitive</source> + <translation>Les correspondances ne sont pas sensibles à la casse</translation> </message> <message> - <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> - <translation>Un argument nommé %1 a déjà été déclaré. Chaque nom d'argument doit être unique.</translation> + <source>Whitespace characters are removed, except when they appear in character classes</source> + <translation>Les blancs sont supprimés excepté quand ils apparaissent dans les classes de caractère</translation> + </message> + <message> + <source>%1 is an invalid regular expression pattern: %2</source> + <translation>%1 est un modèle d'expression régulière invalide: %2</translation> </message> <message> - <source>No function with name %1 is available.</source> - <translation>Aucune fonction nommée %1 n'est disponible.</translation> + <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> + <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont :</translation> </message> <message> - <source>W3C XML Schema identity constraint selector</source> - <translation type="unfinished"></translation> + <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source> + <translation>Si le premier argument est une sequence vide ou un chaîne vide (sans namespace), un préfixe ne peut être spécifié. Le préfixe %1 a été spécifié.</translation> </message> <message> - <source>W3C XML Schema identity constraint field</source> - <translation type="unfinished"></translation> + <source>It will not be possible to retrieve %1.</source> + <translation>Il sera impossible de récupérer %1.</translation> </message> <message> - <source>A construct was encountered which is disallowed in the current language(%1).</source> - <translation type="unfinished"></translation> + <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source> + <translation>Le noeuds racine du deuxième argument à la fonction %1 doit être un noeuds document. %2 n'est pas un document.</translation> </message> <message> - <source>An attribute with name %1 has already appeared on this element.</source> - <translation>Un attribute nommé %1 existe déjà pour cet élément.</translation> + <source>The default collection is undefined</source> + <translation>I'l n'y a pas de collection par défaut</translation> </message> <message> - <source>%1 has inheritance loop in its base type %2.</source> - <translation type="unfinished"></translation> + <source>%1 cannot be retrieved</source> + <translation>%1 ne peut pas être récupéré</translation> </message> <message> - <source>Circular inheritance of base type %1.</source> - <translation type="unfinished"></translation> + <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source> + <translation>Le forme de normalisation %1 n'est pas supportée. Les formes supportées sont %2, %3, %4 et %5, et aucun, ie. une chaîne vide (pas de normalisation).</translation> </message> <message> - <source>Circular inheritance of union %1.</source> - <translation type="unfinished"></translation> + <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source> + <translation>Un décalage de zone doit être dans l'intervalle %1..%2 inclus. %3 est hors de l'intervalle.</translation> </message> <message> - <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <source>%1 is not an whole number of minutes.</source> + <translation type="obsolete">%1 n'est pas un nombre complet de minutes.</translation> </message> <message> - <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <source>Required cardinality is %1; got cardinality %2.</source> + <translation>La cardinalité requise est %1; reçu %2.</translation> </message> <message> - <source>Base type of simple type %1 cannot be complex type %2.</source> - <translation type="unfinished"></translation> + <source>The item %1 did not match the required type %2.</source> + <translation>L'item %1 ne correspond pas au type requis %2.</translation> </message> <message> - <source>Simple type %1 cannot have direct base type %2.</source> - <translation type="unfinished"></translation> + <source>%1 is an unknown schema type.</source> + <translation>%1 est un type de schema inconnu.</translation> </message> <message> - <source>Simple type %1 is not allowed to have base type %2.</source> - <translation type="unfinished"></translation> + <source>Only one %1 declaration can occur in the query prolog.</source> + <translation>Seulement une déclaration %1 peut intervenir lors du prologue de la requête.</translation> </message> <message> - <source>Simple type %1 can only have simple atomic type as base type.</source> - <translation type="unfinished"></translation> + <source>The initialization of variable %1 depends on itself</source> + <translation>L'initialisation de la variable %1 dépend d'elle-même</translation> </message> <message> - <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source> - <translation type="unfinished"></translation> + <source>No variable by name %1 exists</source> + <translation type="obsolete">Aucun variable nommée %1 existe</translation> </message> <message> - <source>Variety of item type of %1 must be either atomic or union.</source> - <translation type="unfinished"></translation> + <source>The variable %1 is unused</source> + <translation>La variable %1 est inutilisée</translation> </message> <message> - <source>Variety of member types of %1 must be atomic.</source> - <translation type="unfinished"></translation> + <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> + <translation>La version %1 n'est pas supportée. La version de XQuery supportée est 1.0.</translation> </message> <message> - <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source> + <translation>L'encodage %1 est invalide. Il doit contenir uniquement des caractères latins, sans blanc et doit être conforme à l'expression régulière %2.</translation> </message> <message> - <source>Simple type %1 is only allowed to have %2 facet.</source> - <translation type="unfinished"></translation> + <source>No function with signature %1 is available</source> + <translation>Aucune fonction avec la signature %1 n'est disponible</translation> </message> <message> - <source>Base type of simple type %1 must have variety of type list.</source> - <translation type="unfinished"></translation> + <source>A default namespace declaration must occur before function, variable, and option declarations.</source> + <translation>Un déclaration de namespace par défaut doit être placée avant toute fonction, variable ou declaration d'option.</translation> </message> <message> - <source>Base type of simple type %1 has defined derivation by restriction as final.</source> - <translation type="unfinished"></translation> + <source>Namespace declarations must occur before function, variable, and option declarations.</source> + <translation>Les declarations de namespace doivent être placées avant tout fonction, variable ou déclaration d'option.</translation> </message> <message> - <source>Item type of base type does not match item type of %1.</source> - <translation type="unfinished"></translation> + <source>Module imports must occur before function, variable, and option declarations.</source> + <translation>Les imports de module doivent être placés avant tout fonction, variable ou déclaration d'option.</translation> </message> <message> - <source>Simple type %1 contains not allowed facet type %2.</source> - <translation type="unfinished"></translation> + <source>It is not possible to redeclare prefix %1.</source> + <translation>Il est impossible de redéclarer le préfixe %1.</translation> </message> <message> - <source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source> - <translation type="unfinished"></translation> + <source>Only the prefix %1 can be declared to bind the namespace %2. By default, it is already bound to the prefix %1.</source> + <translation type="obsolete">Seul le préfixe %1 peut être déclaré pour lié le namespace %2. Par défaut, il est déjà lié au préfixe %1.</translation> </message> <message> - <source>%1 is not allowed to have any facets.</source> - <translation type="unfinished"></translation> + <source>Prefix %1 is already declared in the prolog.</source> + <translation>Le préfixe %1 est déjà déclaré dans le prologue.</translation> </message> <message> - <source>Base type %1 of simple type %2 must have variety of union.</source> - <translation type="unfinished"></translation> + <source>The name of an option must have a prefix. There is no default namespace for options.</source> + <translation>Le nom d'une option doit avoir un préfixe. Il n'y a pas de namespace par défaut pour les options.</translation> </message> <message> - <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source> - <translation type="unfinished"></translation> + <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> + <translation>La fonctionnalité "Schema Import" n'est pas supportée et les déclarations %1 ne peuvent donc intervenir.</translation> </message> <message> - <source>Member type %1 cannot be derived from member type %2 of %3's base type %4.</source> - <translation type="unfinished"></translation> + <source>The target namespace of a %1 cannot be empty.</source> + <translation>Le namespace cible d'un %1 ne peut être vide.</translation> </message> <message> - <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source> - <translation type="unfinished"></translation> + <source>The module import feature is not supported</source> + <translation>La fonctionnalité "module import" n'est pas supportée</translation> </message> <message> - <source>Complex type %1 has duplicated element %2 in its content model.</source> - <translation type="unfinished"></translation> + <source>A variable by name %1 has already been declared in the prolog.</source> + <translation type="obsolete">Une variable du nom %1 a déjà été déclarée dans le prologue.</translation> </message> <message> - <source>Complex type %1 has non-deterministic content.</source> - <translation type="unfinished"></translation> + <source>No value is available for the external variable by name %1.</source> + <translation type="obsolete">Aucune valeur n'est disponible pour la variable externe %1.</translation> </message> <message> - <source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source> - <translation type="unfinished"></translation> + <source>The namespace for a user defined function cannot be empty(try the predefined prefix %1 which exists for cases like this)</source> + <translation type="obsolete">Le namespace d'une fonction définie par l'utilisateur ne peut être vide (essayez le préfixe prédéfini %1 qui existe pour ce genre de cas)</translation> </message> <message> - <source>Content model of complex type %1 is not a valid extension of content model of %2.</source> - <translation type="unfinished"></translation> + <source>A construct was encountered which only is allowed in XQuery.</source> + <translation type="obsolete">Construct n'est autorisé que dans XQuery.</translation> </message> <message> - <source>Complex type %1 must have simple content.</source> - <translation type="unfinished"></translation> + <source>A template by name %1 has already been declared.</source> + <translation type="obsolete">Un template nommé %1 a déjà été déclaré.</translation> </message> <message> - <source>Complex type %1 must have the same simple type as its base class %2.</source> - <translation type="unfinished"></translation> + <source>The keyword %1 cannot occur with any other mode name.</source> + <translation>Le mot-clé %1 ne peut pas apparaître avec un autre nom de mode.</translation> </message> <message> - <source>Complex type %1 cannot be derived from base type %2%3.</source> - <translation type="unfinished"></translation> + <source>The value of attribute %1 must of type %2, which %3 isn't.</source> + <translation type="obsolete">La valeur de l'attribut %1 doit être du type %2, %3 n'en est pas.</translation> </message> <message> - <source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source> - <translation type="unfinished"></translation> + <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source> + <translation type="obsolete">Le préfixe %1 ne peut être lié. Par défault, il est déjà lié au namespace %2.</translation> </message> <message> - <source>Complex type %1 with simple content cannot be derived from complex base type %2.</source> - <translation type="unfinished"></translation> + <source>A variable by name %1 has already been declared.</source> + <translation type="obsolete">Une variable nommée %1 a déjà été déclarée.</translation> </message> <message> - <source>Item type of simple type %1 cannot be a complex type.</source> - <translation type="unfinished"></translation> + <source>A stylesheet function must have a prefixed name.</source> + <translation>Une fonction de feuille de style doit avoir un nom préfixé.</translation> </message> <message> - <source>Member type of simple type %1 cannot be a complex type.</source> - <translation type="unfinished"></translation> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> + <translation>Le namespace d'une fonction utilisateur ne peut pas être vide (essayez le préfixe prédéfini %1 qui existe pour ce genre de cas)</translation> </message> <message> - <source>%1 is not allowed to have a member type with the same name as itself.</source> - <translation type="unfinished"></translation> + <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> + <translation>Le namespace %1 est réservé; c'est pourquoi les fonctions définies par l'utilisateur ne peuvent l'utiliser. Essayez le préfixe prédéfini %2 qui existe pour ces cas.</translation> </message> <message> - <source>%1 facet collides with %2 facet.</source> - <translation type="unfinished"></translation> + <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> + <translation>Le namespace d'une fonction utilisateur dans un module de bibliothèque doit être équivalent au namespace du module. En d'autres mots, il devrait être %1 au lieu de %2</translation> </message> <message> - <source>%1 facet must have the same value as %2 facet of base type.</source> - <translation type="unfinished"></translation> + <source>A function already exists with the signature %1.</source> + <translation>Une fonction avec la signature %1 existe déjà.</translation> </message> <message> - <source>%1 facet must be equal or greater than %2 facet of base type.</source> - <translation type="unfinished"></translation> + <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> + <translation>Les fonctions externes ne sont pas supportées. Toutes les fonctions supportées peuvent êter utilisées directement sans les déclarer préalablement comme externes</translation> </message> <message> - <source>%1 facet must be less than or equal to %2 facet of base type.</source> - <translation type="unfinished"></translation> + <source>An argument by name %1 has already been declared. Every argument name must be unique.</source> + <translation type="obsolete">Un argument nommé %1 a déjà été déclaré. Chaque nom d'argument doit être unique.</translation> </message> <message> - <source>%1 facet contains invalid regular expression</source> - <translation type="unfinished"></translation> + <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source> + <translation>Quand la fonction %1 est utilisée pour vérifier la correspondance dans un pattern, l'argument doit être une référence de variable ou une chaîne de caractères.</translation> </message> <message> - <source>Unknown notation %1 used in %2 facet.</source> - <translation type="unfinished"></translation> + <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source> + <translation>Dans un pattern XSL-T, le premier argument à la fonction %1 doit être une chaîne de caractères quand utilisé pour correspondance.</translation> </message> <message> - <source>%1 facet contains invalid value %2: %3.</source> - <translation type="unfinished"></translation> + <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source> + <translation>Dans un pattern XSL-T, le premier argument à la fonction %1 doit être un litéral ou une référence de variable.</translation> </message> <message> - <source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source> - <translation type="unfinished"></translation> + <source>In an XSL-T pattern, function %1 cannot have a third argument.</source> + <translation>Dans un pattern XSL-T, la fonction %1 ne peut pas avoir de 3e argument.</translation> </message> <message> - <source>%1 facet cannot be %2 if %3 facet of base type is %4.</source> - <translation type="unfinished"></translation> + <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source> + <translation>Dans un pattern XSL-T, seules les fonctions %1 et %2 (pas %3) peuvent être utilisées pour le matching.</translation> </message> <message> - <source>%1 facet must be less than or equal to %2 facet.</source> - <translation type="unfinished"></translation> + <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source> + <translation>Dans un pattern XSL-T, l'axe %1 ne peut pas être utilisé, seulement %2 ou %3 le peuvent.</translation> </message> <message> - <source>%1 facet must be less than %2 facet of base type.</source> - <translation type="unfinished"></translation> + <source>%1 is an invalid template mode name.</source> + <translation>%1 est un nom de mode de template invalide.</translation> </message> <message> - <source>%1 facet and %2 facet cannot appear together.</source> - <translation type="unfinished"></translation> + <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source> + <translation>Le nom d'une variable liée dans un expression for doit être different de la variable positionnelle. Les deux variables appelées %1 sont en conflit.</translation> </message> <message> - <source>%1 facet must be greater than %2 facet of base type.</source> - <translation type="unfinished"></translation> + <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source> + <translation>La fonctionnalité "Schema Validation" n'est pas supportée. Les expressions %1 ne seront pas utilisées.</translation> </message> <message> - <source>%1 facet must be less than %2 facet.</source> - <translation type="unfinished"></translation> + <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source> + <translation>Aucune des expressions pragma n'est supportée. Une expression par défault doit être présente</translation> </message> <message> - <source>%1 facet must be greater than or equal to %2 facet of base type.</source> - <translation type="unfinished"></translation> + <source>Each name of a template parameter must be unique; %1 is duplicated.</source> + <translation>Chaque nom d'un paramètre ede template doit être unique; %1 est dupliqué.</translation> </message> <message> - <source>Simple type contains not allowed facet %1.</source> - <translation type="unfinished"></translation> + <source>The %1-axis is unsupported in XQuery</source> + <translation>L'axe %1 n'est pas supporté dans XQuery</translation> </message> <message> - <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source> - <translation type="unfinished"></translation> + <source>%1 is not a valid name for a processing-instruction.</source> + <translation>%1 n'est pas un nom valide pour une instruction de traitement.</translation> </message> <message> - <source>Only %1 and %2 facets are allowed when derived by union.</source> - <translation type="unfinished"></translation> + <source>%1 is not a valid numeric literal.</source> + <translation>%1 n'est pas une valeur numérique valide.</translation> </message> <message> - <source>%1 contains %2 facet with invalid data: %3.</source> - <translation type="unfinished"></translation> + <source>No function by name %1 is available.</source> + <translation type="obsolete">La fonction %1 n'est pas disponible.</translation> </message> <message> - <source>Attribute group %1 contains attribute %2 twice.</source> - <translation type="unfinished"></translation> + <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> + <translation>L'URI de namespace ne peut être une chaîne vide quand on le lie à un préfixe, %1.</translation> </message> <message> - <source>Attribute group %1 contains two different attributes that both have types derived from %2.</source> - <translation type="unfinished"></translation> + <source>%1 is an invalid namespace URI.</source> + <translation>%1 est un URI de namespace invalide.</translation> </message> <message> - <source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source> - <translation type="unfinished"></translation> + <source>It is not possible to bind to the prefix %1</source> + <translation>Il est impossible de se lier au préfixe %1</translation> </message> <message> - <source>Complex type %1 contains attribute %2 twice.</source> - <translation type="unfinished"></translation> + <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> + <translation>Le namespace %1 peut seulement être lié à %2 (et doit être pré-déclaré).</translation> </message> <message> - <source>Complex type %1 contains two different attributes that both have types derived from %2.</source> - <translation type="unfinished"></translation> + <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> + <translation>Le préfixe %1 peut seulement être lié à %2 (et doit être prédéclaré).</translation> </message> <message> - <source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source> - <translation type="unfinished"></translation> + <source>Two namespace declaration attributes have the same name: %1.</source> + <translation>Deux attributs de déclarations de namespace ont le même nom : %1.</translation> </message> <message> - <source>Element %1 is not allowed to have a value constraint if its base type is complex.</source> - <translation type="unfinished"></translation> + <source>The namespace URI must be a constant and cannot use enclosed expressions.</source> + <translation>L'URI de namespace doit être une constante et ne peut contenir d'expressions.</translation> </message> <message> - <source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source> - <translation type="unfinished"></translation> + <source>An attribute by name %1 has already appeared on this element.</source> + <translation type="obsolete">Un attribute nommé %1 existe déjà pour cet élément.</translation> </message> <message> - <source>Value constraint of element %1 is not of elements type: %2.</source> - <translation type="unfinished"></translation> + <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> + <translation>Un constructeur direct d'élément est mal-formé. %1 est terminé par %2.</translation> </message> <message> - <source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source> - <translation type="unfinished"></translation> + <source>The name %1 does not refer to any schema type.</source> + <translation>Le nom %1 ne se réfère à aucun type de schema.</translation> </message> <message> - <source>Type of element %1 cannot be derived from type of substitution group affiliation.</source> - <translation type="unfinished"></translation> + <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source> + <translation>%1 est une type complexe. Caster vers des types complexes n'est pas possible. Cependant, caster vers des types atomiques comme %2 marche.</translation> </message> <message> - <source>Value constraint of attribute %1 is not of attributes type: %2.</source> - <translation type="unfinished"></translation> + <source>%1 is not an atomic type. Casting is only possible to atomic types.</source> + <translation>%1 n'est pas un type atomique. Il est uniquement possible de caster vers des types atomiques.</translation> </message> <message> - <source>Attribute %1 has value constraint but has type derived from %2.</source> - <translation type="unfinished"></translation> + <source>%1 is not a valid name for a processing-instruction. Therefore this name test will never match.</source> + <translation type="obsolete">%1 n'est pas un nom valide pour une instruction de traitement. C'est pourquoi ce test de nom ne réussira jamais.</translation> </message> <message> - <source>%1 attribute in derived complex type must be %2 like in base type.</source> - <translation type="unfinished"></translation> + <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> + <translation>%1 n'est pas dans les déclaration d'attribut in-scope. La fonctionnalité d'inport de schéma n'est pas supportée.</translation> </message> <message> - <source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source> - <translation type="unfinished"></translation> + <source>The name of an extension expression must be in a namespace.</source> + <translation>Le nom d'une expression d'extension doit être dans un namespace.</translation> </message> <message> - <source>Attribute %1 in derived complex type must have the same %2 value constraint like in base type.</source> - <translation type="unfinished"></translation> + <source>empty</source> + <translation>vide</translation> </message> <message> - <source>Attribute %1 in derived complex type must have %2 value constraint.</source> - <translation type="unfinished"></translation> + <source>zero or one</source> + <translation>zéro ou un</translation> </message> <message> - <source>processContent of base wildcard must be weaker than derived wildcard.</source> - <translation type="unfinished"></translation> + <source>exactly one</source> + <translation>exactement un</translation> </message> <message> - <source>Element %1 exists twice with different types.</source> - <translation type="unfinished"></translation> + <source>one or more</source> + <translation>un ou plus</translation> </message> <message> - <source>Particle contains non-deterministic wildcards.</source> - <translation type="unfinished"></translation> + <source>zero or more</source> + <translation>zéro ou plus</translation> </message> <message> - <source>Base attribute %1 is required but derived attribute is not.</source> - <translation type="unfinished"></translation> + <source>Required type is %1, but %2 was found.</source> + <translation>Le type requis est %1, mais %2 a été reçu.</translation> </message> <message> - <source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source> - <translation type="unfinished"></translation> + <source>Promoting %1 to %2 may cause loss of precision.</source> + <translation>La Promotion de %1 vers %2 peut causer un perte de précision.</translation> </message> <message> - <source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source> - <translation type="unfinished"></translation> + <source>The focus is undefined.</source> + <translation>Le focus est indéfini.</translation> </message> <message> - <source>Derived attribute %1 does not exist in the base definition.</source> - <translation type="unfinished"></translation> + <source>It's not possible to add attributes after any other kind of node.</source> + <translation>Il est impossible d'ajouter des attributs après un autre type de noeuds.</translation> </message> <message> - <source>Derived attribute %1 does not match the wildcard in the base definition.</source> - <translation type="unfinished"></translation> + <source>An attribute by name %1 has already been created.</source> + <translation>Un attribute de nom %1 a déjà été créé.</translation> </message> <message> - <source>Base attribute %1 is required but missing in derived definition.</source> - <translation type="unfinished"></translation> + <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source> + <translation>Seule le Unicode CodepointCollation est supporté (%1), %2 n'est pas supporté.</translation> </message> <message> - <source>Derived definition contains an %1 element that does not exists in the base definition</source> - <translation type="unfinished"></translation> + <source>%1 is not a whole number of minutes.</source> + <translation>%1 n'est pas un nombre entier de minutes.</translation> </message> <message> - <source>Derived wildcard is not a subset of the base wildcard.</source> - <translation type="unfinished"></translation> + <source>Attribute %1 can't be serialized because it appears at the top level.</source> + <translation>L'attribut %1 ne peut pas être sérialisé car il apparaît à la racine.</translation> </message> <message> - <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source> - <translation type="unfinished"></translation> + <source>%1 is an unsupported encoding.</source> + <translation>%1 est un encodage non supporté.</translation> </message> <message> - <source>Attribute %1 from base type is missing in derived type.</source> - <translation type="unfinished"></translation> + <source>%1 contains octets which are disallowed in the requested encoding %2.</source> + <translation>%1 contient 'octets', qui n'est pas autorisé pour l'encodage %2.</translation> </message> <message> - <source>Type of derived attribute %1 differs from type of base attribute.</source> - <translation type="unfinished"></translation> + <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source> + <translation>Le codepoint %1 dans %2 et utilisant l'encodage %3 est un caractère XML invalide.</translation> </message> <message> - <source>Base definition contains an %1 element that is missing in the derived definition</source> - <translation type="unfinished"></translation> + <source>Ambiguous rule match.</source> + <translation>Corresonpdance aux règles ambigüe.</translation> </message> <message> - <source>%1 references unknown %2 or %3 element %4.</source> - <translation type="unfinished"></translation> + <source>In a namespace constructor, the value for a namespace value cannot be an empty string.</source> + <translation type="obsolete">Dans un cosntructeur de namespace, la valeur pour un namespace ne peut pas être une chaîne vide.</translation> </message> <message> - <source>%1 references identity constraint %2 that is no %3 or %4 element.</source> - <translation type="unfinished"></translation> + <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source> + <translation>Dans un constructeur d'espace de noms, la valeur pour un espace de noms ne peut pas être une chaîne vide.</translation> </message> <message> - <source>%1 has a different number of fields from the identity constraint %2 that it references.</source> - <translation type="unfinished"></translation> + <source>The prefix must be a valid %1, which %2 is not.</source> + <translation>Le préfixe doit être un valide %1; %2 n'e l'est pas.</translation> </message> <message> - <source>Base type %1 of %2 element cannot be resolved.</source> - <translation type="unfinished"></translation> + <source>The prefix %1 cannot be bound.</source> + <translation>Le préfixe %1 ne peut être lié.</translation> </message> <message> - <source>Item type %1 of %2 element cannot be resolved.</source> - <translation type="unfinished"></translation> + <source>Only the prefix %1 can be bound to %2 and vice versa.</source> + <translation>Seul le préfixe %1 peut être lié à %2, et vice versa.</translation> </message> <message> - <source>Member type %1 of %2 element cannot be resolved.</source> - <translation type="unfinished"></translation> + <source>Circularity detected</source> + <translation type="obsolete">Circularité détectée</translation> </message> <message> - <source>Type %1 of %2 element cannot be resolved.</source> - <translation type="unfinished"></translation> + <source>The parameter %1 is required, but no corresponding %2 is supplied.</source> + <translation>Le paramètre %1 est requis, mais aucun %2 correspondant n'est fourni.</translation> </message> <message> - <source>Base type %1 of complex type cannot be resolved.</source> - <translation type="unfinished"></translation> + <source>The parameter %1 is passed, but no corresponding %2 exists.</source> + <translation>Le paramètre %1 est passé mais aucun %2 correspondant n'existe.</translation> </message> <message> - <source>%1 cannot have complex base type that has a %2.</source> - <translation type="unfinished"></translation> + <source>The URI cannot have a fragment</source> + <translation>L'URI ne peut pas avoir de fragments</translation> </message> <message> - <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> - <translation type="unfinished"></translation> + <source>Element %1 is not allowed at this location.</source> + <translation>L'élément %1 n'est pas autorisé à cet emplacement.</translation> </message> <message> - <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source> - <translation type="unfinished"></translation> + <source>Text nodes are not allowed at this location.</source> + <translation>Les noeuds de texte ne sont pas autorisés à cet emplacement.</translation> </message> <message> - <source>Type of %1 element must be a simple type, %2 is not.</source> - <translation type="unfinished"></translation> + <source>Parse error: %1</source> + <translation>Erreur: %1</translation> </message> <message> - <source>Substitution group %1 of %2 element cannot be resolved.</source> - <translation type="unfinished"></translation> + <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.</source> + <translation>La valeur de l'attribut de version XSL-T doit être du type %1, et non %2.</translation> </message> <message> - <source>Substitution group %1 has circular definition.</source> - <translation type="unfinished"></translation> + <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source> + <translation>Lancement d'une feuille de style XSL-T 1.0 avec un processeur 2.0.</translation> </message> <message> - <source>Duplicated element names %1 in %2 element.</source> - <translation type="unfinished"></translation> + <source>Unknown XSL-T attribute %1.</source> + <translation>Attribut XSL-T inconnu : %1.</translation> </message> <message> - <source>Reference %1 of %2 element cannot be resolved.</source> - <translation type="unfinished"></translation> + <source>Attribute %1 and %2 are mutually exclusive.</source> + <translation>Les attributs %1 et %2 sont mutuellement exclusifs.</translation> </message> <message> - <source>Circular group reference for %1.</source> - <translation type="unfinished"></translation> + <source>In a simplified stylesheet module, attribute %1 must be present.</source> + <translation>Dans un module de feuille de style simplifié, l'attribut %1 doit être présent.</translation> </message> <message> - <source>%1 element is not allowed in this scope</source> - <translation type="unfinished"></translation> + <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source> + <translation>Si l'élément %1 n'a pas d'attribut %2, il ne peut pas avoir d'attribut %3 ou %4.</translation> </message> <message> - <source>%1 element cannot have %2 attribute with value other than %3.</source> - <translation type="unfinished"></translation> + <source>Element %1 must have at least one of the attributes %2 or %3.</source> + <translation>L'élement %1 doit avoir au moins un des attributs %2 ou %3.</translation> </message> <message> - <source>%1 element cannot have %2 attribute with value other than %3 or %4.</source> - <translation type="unfinished"></translation> + <source>At least one mode must be specified in the %1-attribute on element %2.</source> + <translation>Au moins un mode doit être spécifié dans l'attribut %1 sur l'élément %2.</translation> </message> <message> - <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source> - <translation type="unfinished"></translation> + <source>Attribute %1 cannot appear on the element %2. Only the standard attributes can appear.</source> + <translation type="obsolete">L'attribut %1 ne peut pas apparaître sur l'élément %2. Seuls les attributs standard le peuvent.</translation> </message> <message> - <source>Attribute group %1 has circular reference.</source> - <translation type="unfinished"></translation> + <source>Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes.</source> + <translation type="obsolete">L'attribut %1 ne peut pas apparaître sur l'élément %2. Seul %3 est autorisé, ainsi que les attributs standard.</translation> </message> <message> - <source>%1 attribute in %2 must have %3 use like in base type %4.</source> - <translation type="unfinished"></translation> + <source>Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes.</source> + <translation type="obsolete">L'attribut %1 ne peut pas apparaître sur l'élément %2. Seuls %3, %4 et les attributs standard le sont.</translation> </message> <message> - <source>Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2.</source> - <translation type="unfinished"></translation> + <source>Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes.</source> + <translation type="obsolete">L'attribut %1 ne peut pas apparaître sur l'élément %2. Seul %3 et les attributs standard le sont.</translation> </message> <message> - <source>%1 has attribute wildcard but its base type %2 has not.</source> - <translation type="unfinished"></translation> + <source>XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is.</source> + <translation type="obsolete">Les attributs XSL-T sur des éléments XSL-T doivent être dans le namespace null, et pas dans %1.</translation> </message> <message> - <source>Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible.</source> - <translation type="unfinished"></translation> + <source>The attribute %1 must appear on element %2.</source> + <translation type="obsolete">L'attribut %1 doit apparaître sur l'élément %2.</translation> </message> <message> - <source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source> - <translation type="unfinished"></translation> + <source>The element with local name %1 does not exist in XSL-T.</source> + <translation type="obsolete">L'élément avec le nom local %1 n'existe pas dans XSL-T.</translation> </message> <message> - <source>Namespace prefix of qualified name %1 is not defined.</source> - <translation type="unfinished"></translation> + <source>Element %1 must come last.</source> + <translation>L'élément %1 doit être le dernier.</translation> </message> <message> - <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source> - <translation type="unfinished"></translation> + <source>At least one %1-element must occur before %2.</source> + <translation>Au moins un élément %1 doit être placé avant %2.</translation> </message> <message> - <source>Empty particle cannot be derived from non-empty particle.</source> - <translation type="unfinished"></translation> + <source>Only one %1-element can appear.</source> + <translation>Seulement un élément %1 peut apparaître.</translation> </message> <message> - <source>Derived particle is missing element %1.</source> - <translation type="unfinished"></translation> + <source>At least one %1-element must occur inside %2.</source> + <translation>Au moins un élément %1 doit apparaître dans %2.</translation> </message> <message> - <source>Derived element %1 is missing value constraint as defined in base particle.</source> - <translation type="unfinished"></translation> + <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source> + <translation>Quand l'attribut %1 est présent sur %2, un constructeur de séquence ne peut pas être utilisé.</translation> </message> <message> - <source>Derived element %1 has weaker value constraint than base particle.</source> - <translation type="unfinished"></translation> + <source>Element %1 must have either a %2-attribute or a sequence constructor.</source> + <translation>L'élément %1 doit avoir un attribut %2 ou un constructeur de séquence.</translation> </message> <message> - <source>Fixed value constraint of element %1 differs from value constraint in base particle.</source> - <translation type="unfinished"></translation> + <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source> + <translation>Quand un paramètre est requis, un valeur par défault ne peut pas être fournie par un attribute %1 ou un constructeur de séquence.</translation> </message> <message> - <source>Derived element %1 cannot be nillable as base element is not nillable.</source> - <translation type="unfinished"></translation> + <source>Element %1 cannot have children.</source> + <translation>L'élément %1 ne peut pas avoir de fils.</translation> </message> <message> - <source>Block constraints of derived element %1 must not be more weaker than in the base element.</source> - <translation type="unfinished"></translation> + <source>Element %1 cannot have a sequence constructor.</source> + <translation>L'élément %1 ne peut pas avoir un constructuer de séquence.</translation> </message> <message> - <source>Simple type of derived element %1 cannot be validly derived from base element.</source> - <translation type="unfinished"></translation> + <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source> + <translation>L'attribut %1 ne peut pas apparaître sur %2 quand il est fils de %3.</translation> </message> <message> - <source>Complex type of derived element %1 cannot be validly derived from base element.</source> - <translation type="unfinished"></translation> + <source>A parameter in a function cannot be declared to be a tunnel.</source> + <translation>Un paramètre de fonction ne peut pas être déclaré comme un tunnel.</translation> </message> <message> - <source>Element %1 is missing in derived particle.</source> - <translation type="unfinished"></translation> + <source>This processor is not Schema-aware and therefore %1 cannot be used.</source> + <translation>Ce processeur ne comprend pas les Schemas. C'est pourquoi %1 ne peut pas être utilisé.</translation> </message> <message> - <source>Element %1 does not match namespace constraint of wildcard in base particle.</source> - <translation type="unfinished"></translation> + <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn't.</source> + <translation>Les élément d'une feuille de style de haut niveau doivent être dans un namespace non nul; %1 ne l'est pas.</translation> </message> <message> - <source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source> - <translation type="unfinished"></translation> + <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source> + <translation>La valeur de l'attribut %1 de l'élement %2 doit être %3 ou %4, et pas %5.</translation> </message> <message> - <source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source> - <translation type="unfinished"></translation> + <source>Attribute %1 cannot have the value %2.</source> + <translation>L'attribut %1 ne peut avoir la valeur %2.</translation> </message> <message> - <source>Derived particle allows content that is not allowed in the base particle.</source> - <translation type="unfinished"></translation> + <source>The attribute %1 can only appear on the first %2 element.</source> + <translation>L'attribute %1 peut seulement apparaître sur le premier élément %2.</translation> </message> <message> - <source>Can not process unknown element %1, expected elements are: %2.</source> - <translation type="unfinished"></translation> + <source>At least one %1 element must appear as child of %2.</source> + <translation>Au moins un élément %1 doit apparaître comme fils de %2.</translation> </message> <message> - <source>Element %1 is not allowed in this scope, possible elements are: %2.</source> - <translation type="unfinished"></translation> + <source>A template with name %1 has already been declared.</source> + <translation>Un template nommé %1 a déjà été déclaré.</translation> </message> <message> - <source>Child element is missing in that scope, possible child elements are: %1.</source> - <translation type="unfinished"></translation> + <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source> + <translation>Le nom de destination dans une instruction de traitement ne peut être %1. %2 est invalide.</translation> </message> <message> - <source>Document is not a XML schema.</source> - <translation type="unfinished"></translation> + <source>No variable with name %1 exists</source> + <translation>Aucune variable nommée %1 n'existe</translation> </message> <message> - <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4.</source> - <translation type="unfinished"></translation> + <source>The value of attribute %1 must be of type %2, which %3 isn't.</source> + <translation>La valeur de l'attribut %1 doit être du type %2, %3 n'en est pas.</translation> </message> <message> - <source>%1 attribute of %2 element contains invalid content: {%3}.</source> - <translation type="unfinished"></translation> + <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source> + <translation>Le préfixe %1 ne peut être lié. Par défault, il est déjà lié au namespace %2.</translation> </message> <message> - <source>Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema.</source> - <translation type="unfinished"></translation> + <source>A variable with name %1 has already been declared.</source> + <translation>Une variable nommée %1 a déjà été déclarée.</translation> </message> <message> - <source>Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema.</source> - <translation type="unfinished"></translation> + <source>No value is available for the external variable with name %1.</source> + <translation>Aucune valeur n'est disponible pour la variable externe %1.</translation> </message> <message> - <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source> - <translation type="unfinished"></translation> + <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> + <translation>Un argument nommé %1 a déjà été déclaré. Chaque nom d'argument doit être unique.</translation> </message> <message> - <source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source> - <translation type="unfinished"></translation> + <source>No function with name %1 is available.</source> + <translation>Aucune fonction nommée %1 n'est disponible.</translation> </message> <message> - <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source> + <source>W3C XML Schema identity constraint selector</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 element has neither %2 attribute nor %3 child element.</source> + <source>W3C XML Schema identity constraint field</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 element with %2 child element must not have a %3 attribute.</source> + <source>A construct was encountered which is disallowed in the current language(%1).</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 attribute of %2 element must be %3 or %4.</source> - <translation type="unfinished"></translation> + <source>An attribute with name %1 has already appeared on this element.</source> + <translation>Un attribute nommé %1 existe déjà pour cet élément.</translation> </message> <message> - <source>%1 attribute of %2 element must have a value of %3.</source> + <source>%1 has inheritance loop in its base type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 attribute of %2 element must have a value of %3 or %4.</source> + <source>Circular inheritance of base type %1.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 element must not have %2 and %3 attribute together.</source> + <source>Circular inheritance of union %1.</source> <translation type="unfinished"></translation> </message> <message> - <source>Content of %1 attribute of %2 element must not be from namespace %3.</source> + <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 attribute of %2 element must not be %3.</source> + <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set.</source> + <source>Base type of simple type %1 cannot be complex type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Specifying use='prohibited' inside an attribute group has no effect.</source> + <source>Simple type %1 cannot have direct base type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 element must have either %2 or %3 attribute.</source> + <source>Simple type %1 is not allowed to have base type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 element must have either %2 attribute or %3 or %4 as child element.</source> + <source>Simple type %1 can only have simple atomic type as base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 element requires either %2 or %3 attribute.</source> + <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source> <translation type="unfinished"></translation> </message> <message> - <source>Text or entity references not allowed inside %1 element</source> + <source>Variety of item type of %1 must be either atomic or union.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source> + <source>Variety of member types of %1 must be atomic.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 element is not allowed in this context.</source> + <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 attribute of %2 element has larger value than %3 attribute.</source> + <source>Simple type %1 is only allowed to have %2 facet.</source> <translation type="unfinished"></translation> </message> <message> - <source>Prefix of qualified name %1 is not defined.</source> + <source>Base type of simple type %1 must have variety of type list.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 attribute of %2 element must either contain %3 or the other values.</source> + <source>Base type of simple type %1 has defined derivation by restriction as final.</source> <translation type="unfinished"></translation> </message> <message> - <source>Component with ID %1 has been defined previously.</source> + <source>Item type of base type does not match item type of %1.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 already defined.</source> + <source>Simple type %1 contains not allowed facet type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Attribute %1 already defined.</source> + <source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source> <translation type="unfinished"></translation> </message> <message> - <source>Type %1 already defined.</source> + <source>%1 is not allowed to have any facets.</source> <translation type="unfinished"></translation> </message> <message> - <source>Attribute group %1 already defined.</source> + <source>Base type %1 of simple type %2 must have variety of union.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element group %1 already defined.</source> + <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source> <translation type="unfinished"></translation> </message> <message> - <source>Notation %1 already defined.</source> + <source>Member type %1 cannot be derived from member type %2 of %3's base type %4.</source> <translation type="unfinished"></translation> </message> <message> - <source>Identity constraint %1 already defined.</source> + <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Duplicated facets in simple type %1.</source> + <source>Complex type %1 has duplicated element %2 in its content model.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 is not valid according to %2.</source> + <source>Complex type %1 has non-deterministic content.</source> <translation type="unfinished"></translation> </message> <message> - <source>String content does not match the length facet.</source> + <source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source> <translation type="unfinished"></translation> </message> <message> - <source>String content does not match the minLength facet.</source> + <source>Content model of complex type %1 is not a valid extension of content model of %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>String content does not match the maxLength facet.</source> + <source>Complex type %1 must have simple content.</source> <translation type="unfinished"></translation> </message> <message> - <source>String content does not match pattern facet.</source> + <source>Complex type %1 must have the same simple type as its base class %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>String content is not listed in the enumeration facet.</source> + <source>Complex type %1 cannot be derived from base type %2%3.</source> <translation type="unfinished"></translation> </message> <message> - <source>Signed integer content does not match the maxInclusive facet.</source> + <source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source> <translation type="unfinished"></translation> </message> <message> - <source>Signed integer content does not match the maxExclusive facet.</source> + <source>Complex type %1 with simple content cannot be derived from complex base type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Signed integer content does not match the minInclusive facet.</source> + <source>Item type of simple type %1 cannot be a complex type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Signed integer content does not match the minExclusive facet.</source> + <source>Member type of simple type %1 cannot be a complex type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Signed integer content is not listed in the enumeration facet.</source> + <source>%1 is not allowed to have a member type with the same name as itself.</source> <translation type="unfinished"></translation> </message> <message> - <source>Signed integer content does not match pattern facet.</source> + <source>%1 facet collides with %2 facet.</source> <translation type="unfinished"></translation> </message> <message> - <source>Signed integer content does not match in the totalDigits facet.</source> + <source>%1 facet must have the same value as %2 facet of base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unsigned integer content does not match the maxInclusive facet.</source> + <source>%1 facet must be equal or greater than %2 facet of base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unsigned integer content does not match the maxExclusive facet.</source> + <source>%1 facet must be less than or equal to %2 facet of base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unsigned integer content does not match the minInclusive facet.</source> + <source>%1 facet contains invalid regular expression</source> <translation type="unfinished"></translation> </message> <message> - <source>Unsigned integer content does not match the minExclusive facet.</source> + <source>Unknown notation %1 used in %2 facet.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unsigned integer content is not listed in the enumeration facet.</source> + <source>%1 facet contains invalid value %2: %3.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unsigned integer content does not match pattern facet.</source> + <source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unsigned integer content does not match in the totalDigits facet.</source> + <source>%1 facet cannot be %2 if %3 facet of base type is %4.</source> <translation type="unfinished"></translation> </message> <message> - <source>Double content does not match the maxInclusive facet.</source> + <source>%1 facet must be less than or equal to %2 facet.</source> <translation type="unfinished"></translation> </message> <message> - <source>Double content does not match the maxExclusive facet.</source> + <source>%1 facet must be less than %2 facet of base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Double content does not match the minInclusive facet.</source> + <source>%1 facet and %2 facet cannot appear together.</source> <translation type="unfinished"></translation> </message> <message> - <source>Double content does not match the minExclusive facet.</source> + <source>%1 facet must be greater than %2 facet of base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Double content is not listed in the enumeration facet.</source> + <source>%1 facet must be less than %2 facet.</source> <translation type="unfinished"></translation> </message> <message> - <source>Double content does not match pattern facet.</source> + <source>%1 facet must be greater than or equal to %2 facet of base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Decimal content does not match in the fractionDigits facet.</source> + <source>Simple type contains not allowed facet %1.</source> <translation type="unfinished"></translation> </message> <message> - <source>Decimal content does not match in the totalDigits facet.</source> + <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source> <translation type="unfinished"></translation> </message> <message> - <source>Date time content does not match the maxInclusive facet.</source> + <source>Only %1 and %2 facets are allowed when derived by union.</source> <translation type="unfinished"></translation> </message> <message> - <source>Date time content does not match the maxExclusive facet.</source> + <source>%1 contains %2 facet with invalid data: %3.</source> <translation type="unfinished"></translation> </message> <message> - <source>Date time content does not match the minInclusive facet.</source> + <source>Attribute group %1 contains attribute %2 twice.</source> <translation type="unfinished"></translation> </message> <message> - <source>Date time content does not match the minExclusive facet.</source> + <source>Attribute group %1 contains two different attributes that both have types derived from %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Date time content is not listed in the enumeration facet.</source> + <source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source> <translation type="unfinished"></translation> </message> <message> - <source>Date time content does not match pattern facet.</source> + <source>Complex type %1 contains attribute %2 twice.</source> <translation type="unfinished"></translation> </message> <message> - <source>Duration content does not match the maxInclusive facet.</source> + <source>Complex type %1 contains two different attributes that both have types derived from %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Duration content does not match the maxExclusive facet.</source> + <source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source> <translation type="unfinished"></translation> </message> <message> - <source>Duration content does not match the minInclusive facet.</source> + <source>Element %1 is not allowed to have a value constraint if its base type is complex.</source> <translation type="unfinished"></translation> </message> <message> - <source>Duration content does not match the minExclusive facet.</source> + <source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Duration content is not listed in the enumeration facet.</source> + <source>Value constraint of element %1 is not of elements type: %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Duration content does not match pattern facet.</source> + <source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source> <translation type="unfinished"></translation> </message> <message> - <source>Boolean content does not match pattern facet.</source> + <source>Type of element %1 cannot be derived from type of substitution group affiliation.</source> <translation type="unfinished"></translation> </message> <message> - <source>Binary content does not match the length facet.</source> + <source>Value constraint of attribute %1 is not of attributes type: %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Binary content does not match the minLength facet.</source> + <source>Attribute %1 has value constraint but has type derived from %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Binary content does not match the maxLength facet.</source> + <source>%1 attribute in derived complex type must be %2 like in base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Binary content is not listed in the enumeration facet.</source> + <source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Invalid QName content: %1.</source> + <source>Attribute %1 in derived complex type must have the same %2 value constraint like in base type.</source> <translation type="unfinished"></translation> </message> <message> - <source>QName content is not listed in the enumeration facet.</source> + <source>Attribute %1 in derived complex type must have %2 value constraint.</source> <translation type="unfinished"></translation> </message> <message> - <source>QName content does not match pattern facet.</source> + <source>processContent of base wildcard must be weaker than derived wildcard.</source> <translation type="unfinished"></translation> </message> <message> - <source>Notation content is not listed in the enumeration facet.</source> + <source>Element %1 exists twice with different types.</source> <translation type="unfinished"></translation> </message> <message> - <source>List content does not match length facet.</source> + <source>Particle contains non-deterministic wildcards.</source> <translation type="unfinished"></translation> </message> <message> - <source>List content does not match minLength facet.</source> + <source>Base attribute %1 is required but derived attribute is not.</source> <translation type="unfinished"></translation> </message> <message> - <source>List content does not match maxLength facet.</source> + <source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source> <translation type="unfinished"></translation> </message> <message> - <source>List content is not listed in the enumeration facet.</source> + <source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source> <translation type="unfinished"></translation> </message> <message> - <source>List content does not match pattern facet.</source> + <source>Derived attribute %1 does not exist in the base definition.</source> <translation type="unfinished"></translation> </message> <message> - <source>Union content is not listed in the enumeration facet.</source> + <source>Derived attribute %1 does not match the wildcard in the base definition.</source> <translation type="unfinished"></translation> </message> <message> - <source>Union content does not match pattern facet.</source> + <source>Base attribute %1 is required but missing in derived definition.</source> <translation type="unfinished"></translation> </message> <message> - <source>Data of type %1 are not allowed to be empty.</source> + <source>Derived definition contains an %1 element that does not exists in the base definition</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 is missing child element.</source> + <source>Derived wildcard is not a subset of the base wildcard.</source> <translation type="unfinished"></translation> </message> <message> - <source>There is one IDREF value with no corresponding ID: %1.</source> + <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source> <translation type="unfinished"></translation> </message> <message> - <source>Loaded schema file is invalid.</source> + <source>Attribute %1 from base type is missing in derived type.</source> <translation type="unfinished"></translation> </message> <message> - <source>%1 contains invalid data.</source> + <source>Type of derived attribute %1 differs from type of base attribute.</source> <translation type="unfinished"></translation> </message> <message> - <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source> + <source>Base definition contains an %1 element that is missing in the derived definition</source> <translation type="unfinished"></translation> </message> <message> - <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source> + <source>%1 references unknown %2 or %3 element %4.</source> <translation type="unfinished"></translation> </message> <message> - <source>No schema defined for validation.</source> + <source>%1 references identity constraint %2 that is no %3 or %4 element.</source> <translation type="unfinished"></translation> </message> <message> - <source>No definition for element %1 available.</source> + <source>%1 has a different number of fields from the identity constraint %2 that it references.</source> <translation type="unfinished"></translation> </message> <message> - <source>Specified type %1 is not known to the schema.</source> + <source>Base type %1 of %2 element cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 is not defined in this scope.</source> + <source>Item type %1 of %2 element cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <source>Declaration for element %1 does not exist.</source> + <source>Member type %1 of %2 element cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 contains invalid content.</source> + <source>Type %1 of %2 element cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 is declared as abstract.</source> + <source>Base type %1 of complex type cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 is not nillable.</source> + <source>%1 cannot have complex base type that has a %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Attribute %1 contains invalid data: %2</source> + <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element contains content although it is nillable.</source> + <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source> <translation type="unfinished"></translation> </message> <message> - <source>Fixed value constraint not allowed if element is nillable.</source> + <source>Type of %1 element must be a simple type, %2 is not.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <source>Substitution group %1 of %2 element cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <source>Specified type %1 is not validly substitutable with element type %2.</source> + <source>Substitution group %1 has circular definition.</source> <translation type="unfinished"></translation> </message> <message> - <source>Complex type %1 is not allowed to be abstract.</source> + <source>Duplicated element names %1 in %2 element.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 contains not allowed attributes.</source> + <source>Reference %1 of %2 element cannot be resolved.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 contains not allowed child element.</source> + <source>Circular group reference for %1.</source> <translation type="unfinished"></translation> </message> <message> - <source>Content of element %1 does not match its type definition: %2.</source> + <source>%1 element is not allowed in this scope</source> <translation type="unfinished"></translation> </message> <message> - <source>Content of element %1 does not match defined value constraint.</source> + <source>%1 element cannot have %2 attribute with value other than %3.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 contains not allowed child content.</source> + <source>%1 element cannot have %2 attribute with value other than %3 or %4.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 contains not allowed text content.</source> + <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 is missing required attribute %2.</source> + <source>Attribute group %1 has circular reference.</source> <translation type="unfinished"></translation> </message> <message> - <source>Attribute %1 does not match the attribute wildcard.</source> + <source>%1 attribute in %2 must have %3 use like in base type %4.</source> <translation type="unfinished"></translation> </message> <message> - <source>Declaration for attribute %1 does not exist.</source> + <source>Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 contains two attributes of type %2.</source> + <source>%1 has attribute wildcard but its base type %2 has not.</source> <translation type="unfinished"></translation> </message> <message> - <source>Attribute %1 contains invalid content.</source> + <source>Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible.</source> <translation type="unfinished"></translation> </message> <message> - <source>Element %1 contains unknown attribute %2.</source> + <source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source> <translation type="unfinished"></translation> </message> <message> - <source>Content of attribute %1 does not match its type definition: %2.</source> + <source>Namespace prefix of qualified name %1 is not defined.</source> <translation type="unfinished"></translation> </message> <message> - <source>Content of attribute %1 does not match defined value constraint.</source> + <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source> <translation type="unfinished"></translation> </message> <message> - <source>Non-unique value found for constraint %1.</source> + <source>Empty particle cannot be derived from non-empty particle.</source> <translation type="unfinished"></translation> </message> <message> - <source>Key constraint %1 contains absent fields.</source> + <source>Derived particle is missing element %1.</source> <translation type="unfinished"></translation> </message> <message> - <source>Key constraint %1 contains references nillable element %2.</source> + <source>Derived element %1 is missing value constraint as defined in base particle.</source> <translation type="unfinished"></translation> </message> <message> - <source>No referenced value found for key reference %1.</source> + <source>Derived element %1 has weaker value constraint than base particle.</source> <translation type="unfinished"></translation> </message> <message> - <source>More than one value found for field %1.</source> + <source>Fixed value constraint of element %1 differs from value constraint in base particle.</source> <translation type="unfinished"></translation> </message> <message> - <source>Field %1 has no simple type.</source> + <source>Derived element %1 cannot be nillable as base element is not nillable.</source> <translation type="unfinished"></translation> </message> <message> - <source>ID value '%1' is not unique.</source> + <source>Block constraints of derived element %1 must not be more weaker than in the base element.</source> <translation type="unfinished"></translation> </message> <message> - <source>'%1' attribute contains invalid QName content: %2.</source> + <source>Simple type of derived element %1 cannot be validly derived from base element.</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>VolumeSlider</name> <message> - <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+184"/> - <source>Muted</source> - <translation>Muet</translation> + <source>Complex type of derived element %1 cannot be validly derived from base element.</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <location line="+15"/> - <source>Volume: %1%</source> - <translation>Volume : %1%</translation> + <source>Element %1 is missing in derived particle.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>WebCore::PlatformScrollbar</name> <message> - <source>Scroll here</source> - <translation type="obsolete">Défiler jusqu'ici</translation> + <source>Element %1 does not match namespace constraint of wildcard in base particle.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Left edge</source> - <translation type="obsolete">Extrême gauche</translation> + <source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Top</source> - <translation type="obsolete">En haut</translation> + <source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Right edge</source> - <translation type="obsolete">Extrême droite</translation> + <source>Derived particle allows content that is not allowed in the base particle.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Bottom</source> - <translation type="obsolete">En bas</translation> + <source>Can not process unknown element %1, expected elements are: %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Page left</source> - <translation type="obsolete">Page précédente</translation> + <source>Element %1 is not allowed in this scope, possible elements are: %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Page up</source> - <translation type="obsolete">Page précédente</translation> + <source>Child element is missing in that scope, possible child elements are: %1.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Page right</source> - <translation type="obsolete">Page suivante</translation> + <source>Document is not a XML schema.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Page down</source> - <translation type="obsolete">Page suivante</translation> + <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Scroll left</source> - <translation type="obsolete">Défiler vers la gauche</translation> + <source>%1 attribute of %2 element contains invalid content: {%3}.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Scroll up</source> - <translation type="obsolete">Défiler vers le haut</translation> + <source>Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Scroll right</source> - <translation type="obsolete">Défiler vers la droite</translation> + <source>Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Scroll down</source> - <translation type="obsolete">Défiler vers le bas</translation> + <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>FakeReply</name> <message> - <source>Fake error !</source> - <translation>Fausse erreur!</translation> + <source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Invalid URL</source> - <translation>URL non valide</translation> + <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::AudioOutput</name> <message> - <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> - <translation><html>Le périphérique audio <b>%1</b> ne fonctionne pas.<br/>Repli sur <b>%2</b>.</html></translation> + <source>%1 element has neither %2 attribute nor %3 child element.</source> + <translation type="unfinished"></translation> </message> <message> - <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> - <translation><html>Basculement vers le périphérique audio <b>%1</b><br/>qui vient juste d'être disponible et dont le niveau de préférence est plus élevé.</html></translation> + <source>%1 element with %2 child element must not have a %3 attribute.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Revert back to device '%1'</source> - <translation>Revenir au périphérique '%1'</translation> + <source>%1 attribute of %2 element must be %3 or %4.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF</name> <message> - <source>Audio Output</source> - <translation>Sortie audio</translation> + <source>%1 attribute of %2 element must have a value of %3.</source> + <translation type="unfinished"></translation> </message> <message> - <source>The audio output device</source> - <translation>Périphérique audio de sortie</translation> + <source>%1 attribute of %2 element must have a value of %3 or %4.</source> + <translation type="unfinished"></translation> </message> <message> - <source>No error</source> - <translation>Aucune erreur</translation> + <source>%1 element must not have %2 and %3 attribute together.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Not found</source> - <translation>Introuvable</translation> + <source>Content of %1 attribute of %2 element must not be from namespace %3.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Out of memory</source> - <translation>Mémoire insuffisante</translation> + <source>%1 attribute of %2 element must not be %3.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Not supported</source> - <translation>Non supporté</translation> + <source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Overflow</source> - <translation>Dépassement</translation> + <source>Specifying use='prohibited' inside an attribute group has no effect.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Underflow</source> - <translation>Soupassement</translation> + <source>%1 element must have either %2 or %3 attribute.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Already exists</source> - <translation>Existe déjà</translation> + <source>%1 element must have either %2 attribute or %3 or %4 as child element.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Path not found</source> - <translation>Chemin introuvable</translation> + <source>%1 element requires either %2 or %3 attribute.</source> + <translation type="unfinished"></translation> </message> <message> - <source>In use</source> - <translation>Utilisé</translation> + <source>Text or entity references not allowed inside %1 element</source> + <translation type="unfinished"></translation> </message> <message> - <source>Not ready</source> - <translation>Pas prêt</translation> + <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Access denied</source> - <translation>Accès refusé</translation> + <source>%1 element is not allowed in this context.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Could not connect</source> - <translation>Connexion impossible</translation> + <source>%1 attribute of %2 element has larger value than %3 attribute.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Disconnected</source> - <translation>Déconnecté</translation> + <source>Prefix of qualified name %1 is not defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Permission denied</source> - <translation>Autorisation refusée</translation> + <source>%1 attribute of %2 element must either contain %3 or the other values.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Insufficient bandwidth</source> - <translation>Bande passante insuffisante</translation> + <source>Component with ID %1 has been defined previously.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Network unavailable</source> - <translation>Réseau non disponible</translation> + <source>Element %1 already defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Network communication error</source> - <translation>Erreur de communication réseau</translation> + <source>Attribute %1 already defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Streaming not supported</source> - <translation>Streaming non supporté</translation> + <source>Type %1 already defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Server alert</source> - <translation>Alerte serveur</translation> + <source>Attribute group %1 already defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Invalid protocol</source> - <translation>Protocole non valide</translation> + <source>Element group %1 already defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Invalid URL</source> - <translation>URL non valide</translation> + <source>Notation %1 already defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Multicast error</source> - <translation>Erreur multicast</translation> + <source>Identity constraint %1 already defined.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy server error</source> - <translation>Erreur du serveur proxy</translation> + <source>Duplicated facets in simple type %1.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Proxy server not supported</source> - <translation>Serveur proxy non supporté</translation> + <source>%1 is not valid according to %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Audio output error</source> - <translation>Erreur de sortie audio</translation> + <source>String content does not match the length facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Video output error</source> - <translation>Erreur de sortie vidéo</translation> + <source>String content does not match the minLength facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Decoder error</source> - <translation>Erreur du décodeur</translation> + <source>String content does not match the maxLength facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Audio or video components could not be played</source> - <translation>Les composants audio ou vidéo n'ont pas pu être lus</translation> + <source>String content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>DRM error</source> - <translation>Erreur GDN</translation> + <source>String content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Unknown error (%1)</source> - <translation>Erreur inconnue (%1)</translation> + <source>Signed integer content does not match the maxInclusive facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::AbstractMediaPlayer</name> <message> - <source>Not ready to play</source> - <translation>Pas prêt pour lecture</translation> + <source>Signed integer content does not match the maxExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Error opening file</source> - <translation>Erreur lors de l'ouverture du fichier</translation> + <source>Signed integer content does not match the minInclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Error opening URL</source> - <translation>Erreur lors de l'ouverture de l'URL</translation> + <source>Signed integer content does not match the minExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Setting volume failed</source> - <translation>Le réglage du volume a échoué</translation> + <source>Signed integer content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Playback complete</source> - <translation>Lecture terminée</translation> + <source>Signed integer content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::AudioEqualizer</name> <message> - <source>%1 Hz</source> - <translation>%1 Hz</translation> + <source>Signed integer content does not match in the totalDigits facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::AudioPlayer</name> <message> - <source>Getting position failed</source> - <translation>L'obtention de la position a échoué</translation> + <source>Unsigned integer content does not match the maxInclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Opening clip failed</source> - <translation>L'ouverture du clip a échoué</translation> + <source>Unsigned integer content does not match the maxExclusive facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::EffectFactory</name> <message> - <source>Enabled</source> - <translation>Activé</translation> + <source>Unsigned integer content does not match the minInclusive facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::EnvironmentalReverb</name> <message> - <source>Decay HF ratio (%)</source> - <translation>Ratio HF du déclin (%)</translation> + <source>Unsigned integer content does not match the minExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Decay time (ms)</source> - <translation>Temps de déclin (ms)</translation> + <source>Unsigned integer content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Density (%)</source> - <translation>Densité (%)</translation> + <source>Unsigned integer content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Diffusion (%)</source> - <translation>Diffusion (%)</translation> + <source>Unsigned integer content does not match in the totalDigits facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Reflections delay (ms)</source> - <translation>Délai réflexions (ms)</translation> + <source>Double content does not match the maxInclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Reflections level (mB)</source> - <translation>Niveau réflexions (mB)</translation> + <source>Double content does not match the maxExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Reverb delay (ms)</source> - <translation>Délai de réverbération (ms)</translation> + <source>Double content does not match the minInclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Reverb level (mB)</source> - <translation>Niveau de réverbération (mB)</translation> + <source>Double content does not match the minExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Room HF level</source> - <translation>Niveau HF pièce</translation> + <source>Double content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Room level (mB)</source> - <translation>Niveau pièce (mB)</translation> + <source>Double content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::MediaObject</name> <message> - <source>Error opening source: type not supported</source> - <translation>Erreur lors de l'ouverture de la source: type non supporté</translation> + <source>Decimal content does not match in the fractionDigits facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Error opening source: media type could not be determined</source> - <translation>Erreur lors de l'ouverture de la source: type de média non déterminé</translation> + <source>Decimal content does not match in the totalDigits facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::StereoWidening</name> <message> - <source>Level (%)</source> - <translation>Niveau (%)</translation> + <source>Date time content does not match the maxInclusive facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::VideoPlayer</name> <message> - <source>Pause failed</source> - <translation>La mise en pause a échoué</translation> + <source>Date time content does not match the maxExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Seek failed</source> - <translation>La recherche a échoué</translation> + <source>Date time content does not match the minInclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Getting position failed</source> - <translation>L'obtention de la position a échoué</translation> + <source>Date time content does not match the minExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Opening clip failed</source> - <translation>L'ouverture du clip a échoué</translation> + <source>Date time content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Buffering clip failed</source> - <translation>La mise en mémoire tampon du clip a échoué</translation> + <source>Date time content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Video display error</source> - <translation>Erreur de l'affichage vidéo</translation> + <source>Duration content does not match the maxInclusive facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QAccessibleButton</name> <message> - <source>Press</source> - <translation>Appuyer</translation> + <source>Duration content does not match the maxExclusive facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QNetworkAccessDebugPipeBackend</name> <message> - <source>Write error writing to %1: %2</source> - <translation>Erreur lors de l'écriture dans %1: %2</translation> + <source>Duration content does not match the minInclusive facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptBreakpointsModel</name> <message> - <source>ID</source> - <translation>Identifiant</translation> + <source>Duration content does not match the minExclusive facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Location</source> - <translation>Lieu</translation> + <source>Duration content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Condition</source> - <translation>Condition</translation> + <source>Duration content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Ignore-count</source> - <translation>Comptes d'ignorés</translation> + <source>Boolean content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Single-shot</source> - <translation>Un seul tir</translation> + <source>Binary content does not match the length facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Hit-count</source> - <translation>Compte de coups</translation> + <source>Binary content does not match the minLength facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptBreakpointsWidget</name> <message> - <source>New</source> - <translation>Créer</translation> + <source>Binary content does not match the maxLength facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Delete</source> - <translation>Supprimer</translation> + <source>Binary content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptDebugger</name> <message> - <source>Go to Line</source> - <translation>Aller à la ligne</translation> + <source>Invalid QName content: %1.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Line:</source> - <translation>Ligne:</translation> + <source>QName content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Interrupt</source> - <translation>Interrompre</translation> + <source>QName content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Shift+F5</source> - <translation>Shift+F5</translation> + <source>Notation content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Continue</source> - <translation>Continuer</translation> + <source>List content does not match length facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>F5</source> - <translation>F5</translation> + <source>List content does not match minLength facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Step Into</source> - <translation>Pas à pas détaillé</translation> + <source>List content does not match maxLength facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>F11</source> - <translation>F11</translation> + <source>List content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Step Over</source> - <translation>Pas à pas principal</translation> + <source>List content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>F10</source> - <translation>F10</translation> + <source>Union content is not listed in the enumeration facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Step Out</source> - <translation>Pas à pas sortant</translation> + <source>Union content does not match pattern facet.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Shift+F11</source> - <translation>Shift+F11</translation> + <source>Data of type %1 are not allowed to be empty.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Run to Cursor</source> - <translation>Exécuter au curseur</translation> + <source>Element %1 is missing child element.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Ctrl+F10</source> - <translation>Ctrl+F10</translation> + <source>There is one IDREF value with no corresponding ID: %1.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Run to New Script</source> - <translation>Exécuter au nouveau script</translation> + <source>Loaded schema file is invalid.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Toggle Breakpoint</source> - <translation>Basculer le point d'arrêt</translation> + <source>%1 contains invalid data.</source> + <translation type="unfinished"></translation> </message> <message> - <source>F9</source> - <translation>F9</translation> + <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Clear Debug Output</source> - <translation>Effacer les résultats du débogage</translation> + <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Clear Error Log</source> - <translation>Effacer le journal d'erreurs</translation> + <source>No schema defined for validation.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Clear Console</source> - <translation>Effacer la console</translation> + <source>No definition for element %1 available.</source> + <translation type="unfinished"></translation> </message> <message> - <source>&Find in Script...</source> - <translation>&Chercher dans le script...</translation> + <source>Specified type %1 is not known to the schema.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Ctrl+F</source> - <translation>Ctrl+F</translation> + <source>Element %1 is not defined in this scope.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Find &Next</source> - <translation>Résultat &suivant</translation> + <source>Declaration for element %1 does not exist.</source> + <translation type="unfinished"></translation> </message> <message> - <source>F3</source> - <translation>F3</translation> + <source>Element %1 contains invalid content.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Find &Previous</source> - <translation>Chercher &précédent</translation> + <source>Element %1 is declared as abstract.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Shift+F3</source> - <translation>Shift+F3</translation> + <source>Element %1 is not nillable.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Ctrl+G</source> - <translation>Ctrl+G</translation> + <source>Attribute %1 contains invalid data: %2</source> + <translation type="unfinished"></translation> </message> <message> - <source>Debug</source> - <translation>Déboguer</translation> + <source>Element contains content although it is nillable.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptDebuggerCodeFinderWidget</name> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>Fixed value constraint not allowed if element is nillable.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Previous</source> - <translation>Précédent</translation> + <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Next</source> - <translation>Suivant</translation> + <source>Specified type %1 is not validly substitutable with element type %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Case Sensitive</source> - <translation>Sensible à la casse</translation> + <source>Complex type %1 is not allowed to be abstract.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Whole words</source> - <translation>Mots entiers</translation> + <source>Element %1 contains not allowed attributes.</source> + <translation type="unfinished"></translation> </message> <message> - <source><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped</source> - <translation><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;La recherche est revenue au début</translation> + <source>Element %1 contains not allowed child element.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptDebuggerLocalsModel</name> <message> - <source>Name</source> - <translation>Nom</translation> + <source>Content of element %1 does not match its type definition: %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Value</source> - <translation>Valeur</translation> + <source>Content of element %1 does not match defined value constraint.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptDebuggerStackModel</name> <message> - <source>Level</source> - <translation>Niveau</translation> + <source>Element %1 contains not allowed child content.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Name</source> - <translation>Nom</translation> + <source>Element %1 contains not allowed text content.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Location</source> - <translation>Lieu</translation> + <source>Element %1 is missing required attribute %2.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptEdit</name> <message> - <source>Toggle Breakpoint</source> - <translation>Basculer le point d'arrêt</translation> + <source>Attribute %1 does not match the attribute wildcard.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Disable Breakpoint</source> - <translation>Désactiver le point d'arrêt</translation> + <source>Declaration for attribute %1 does not exist.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Enable Breakpoint</source> - <translation>Activer le point d'arrêt</translation> + <source>Element %1 contains two attributes of type %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Breakpoint Condition:</source> - <translation>Condition du point d'arrêt:</translation> + <source>Attribute %1 contains invalid content.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptEngineDebugger</name> <message> - <source>Loaded Scripts</source> - <translation>Scripts chargés</translation> + <source>Element %1 contains unknown attribute %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Breakpoints</source> - <translation>Points d'arrêt</translation> + <source>Content of attribute %1 does not match its type definition: %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Stack</source> - <translation>Empiler</translation> + <source>Content of attribute %1 does not match defined value constraint.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Locals</source> - <translation>Locaux</translation> + <source>Non-unique value found for constraint %1.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Console</source> - <translation>Console</translation> + <source>Key constraint %1 contains absent fields.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Debug Output</source> - <translation>Résultats du débogage</translation> + <source>Key constraint %1 contains references nillable element %2.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Error Log</source> - <translation>Journal d'erreurs</translation> + <source>No referenced value found for key reference %1.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Search</source> - <translation>Chercher</translation> + <source>More than one value found for field %1.</source> + <translation type="unfinished"></translation> </message> <message> - <source>View</source> - <translation>Afficher</translation> + <source>Field %1 has no simple type.</source> + <translation type="unfinished"></translation> </message> <message> - <source>Qt Script Debugger</source> - <translation>Débogueur de script Qt</translation> + <source>ID value '%1' is not unique.</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>QScriptNewBreakpointWidget</name> <message> - <source>Close</source> - <translation>Fermer</translation> + <source>'%1' attribute contains invalid QName content: %2.</source> + <translation type="unfinished"></translation> </message> </context> <context> - <name>QSoftKeyManager</name> + <name>VolumeSlider</name> <message> - <source>Ok</source> - <translation>OK</translation> + <source>Muted</source> + <translation type="obsolete">Muet</translation> </message> <message> - <source>Select</source> - <translation>Sélectionner</translation> + <source>Volume: %1%</source> + <translation type="obsolete">Volume : %1%</translation> </message> +</context> +<context> + <name>WebCore::PlatformScrollbar</name> <message> - <source>Done</source> - <translation>Terminer</translation> + <source>Scroll here</source> + <translation type="obsolete">Défiler jusqu'ici</translation> </message> <message> - <source>Options</source> - <translation>Options</translation> + <source>Left edge</source> + <translation type="obsolete">Extrême gauche</translation> </message> <message> - <source>Cancel</source> - <translation>Annuler</translation> + <source>Top</source> + <translation type="obsolete">En haut</translation> </message> <message> - <source>Exit</source> - <translation>Quitter</translation> + <source>Right edge</source> + <translation type="obsolete">Extrême droite</translation> </message> -</context> -<context> - <name>QStateMachine</name> <message> - <source>Missing initial state in compound state '%1'</source> - <translation>État initial manquant dans l'état composé '%1'</translation> + <source>Bottom</source> + <translation type="obsolete">En bas</translation> </message> <message> - <source>Missing default state in history state '%1'</source> - <translation>État par défaut manquant dans l'état de l'historique '%1'</translation> + <source>Page left</source> + <translation type="obsolete">Page précédente</translation> </message> <message> - <source>No common ancestor for targets and source of transition from state '%1'</source> - <translation>Aucun ancêtre commun pour les cibles et la source de transition de l'état '%1'</translation> + <source>Page up</source> + <translation type="obsolete">Page précédente</translation> </message> <message> - <source>Unknown error</source> - <translation>Erreur inconnue</translation> + <source>Page right</source> + <translation type="obsolete">Page suivante</translation> </message> -</context> -<context> - <name>QXmlPatternistCLI</name> <message> - <source>Warning in %1, at line %2, column %3: %4</source> - <translation>Avertissement dans %1, à la ligne %2, colonne %3: %4</translation> + <source>Page down</source> + <translation type="obsolete">Page suivante</translation> </message> <message> - <source>Warning in %1: %2</source> - <translation>Avertissement dans %1: %2</translation> + <source>Scroll left</source> + <translation type="obsolete">Défiler vers la gauche</translation> </message> <message> - <source>Unknown location</source> - <translation>Lieu inconnu</translation> + <source>Scroll up</source> + <translation type="obsolete">Défiler vers le haut</translation> </message> <message> - <source>Error %1 in %2, at line %3, column %4: %5</source> - <translation>Erreur %1 dans %2, à la ligne %3, colonne %4: %5</translation> + <source>Scroll right</source> + <translation type="obsolete">Défiler vers la droite</translation> </message> <message> - <source>Error %1 in %2: %3</source> - <translation>Erreur %1 dans %2: %3</translation> + <source>Scroll down</source> + <translation type="obsolete">Défiler vers le bas</translation> </message> </context> </TS> diff --git a/translations/qt_help_fr.ts b/translations/qt_help_fr.ts index 3835d10..f0cabc2 100644 --- a/translations/qt_help_fr.ts +++ b/translations/qt_help_fr.ts @@ -4,27 +4,22 @@ <context> <name>QCLuceneResultWidget</name> <message> - <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+110"/> <source>Search Results</source> <translation>Résultats de la recherche</translation> </message> <message> - <location line="+7"/> <source>Note:</source> <translation>Note :</translation> </message> <message> - <location line="+1"/> <source>The search results may not be complete since the documentation is still being indexed!</source> <translation>Les résultats de la recherche risquent d'être incomplets car l'indexation de la documentation est en cours !</translation> </message> <message> - <location line="+11"/> <source>Your search did not match any documents.</source> <translation>Votre recherche ne correspond à aucun document.</translation> </message> <message> - <location line="+4"/> <source>(The reason for this might be that the documentation is still being indexed.)</source> <translation>(Il est possible que cela soit dû au fait que la documentation est en cours d'indexation.)</translation> </message> @@ -32,80 +27,64 @@ <context> <name>QHelpCollectionHandler</name> <message> - <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/> <source>The collection file '%1' is not set up yet!</source> <translation>Le fichier de collection '%1' n'est pas encore chargé !</translation> </message> <message> - <location line="+23"/> <source>Cannot load sqlite database driver!</source> <translatorcomment>driver ?</translatorcomment> <translation>Chargement du pilote de base de données sqlite impossible !</translation> </message> <message> - <location line="+11"/> - <location line="+49"/> <source>Cannot open collection file: %1</source> <translatorcomment>collection ?</translatorcomment> <translation>Impossible d'ouvrir le fichier collection : %1</translation> </message> <message> - <location line="-40"/> <source>Cannot create tables in file %1!</source> <translation>Impossible de créer les tables dans le fichier : %1 !</translation> </message> <message> - <location line="+16"/> <source>The collection file '%1' already exists!</source> <translation>Le fichier collection '%1' existe déjà !</translation> </message> <message> - <location line="+6"/> <source>Cannot create directory: %1</source> <translation>Impossible de créer le répertoire : %1</translation> </message> <message> - <location line="+23"/> <source>Cannot copy collection file: %1</source> <translation>Impossible de copier le fichier collection : %1</translation> </message> <message> - <location line="+119"/> <source>Unknown filter '%1'!</source> <translation>Filtre '%1' inconnu !</translation> </message> <message> - <location line="+55"/> <source>Cannot register filter %1!</source> <translation>Impossible d'enregistrer le filtre %1 !</translation> </message> <message> - <location line="+44"/> <source>Cannot open documentation file %1!</source> <translation>Impossible d'ouvrir le fichier de documentation %1 !</translation> </message> <message> - <location line="+6"/> <source>Invalid documentation file '%1'!</source> <translation>Fichier de documentation invalide : '%1' !</translation> </message> <message> - <location line="+34"/> <source>The namespace %1 was not registered!</source> <translation>L'espace de noms '%1' n'était pas référencé !</translation> </message> <message> - <location line="+120"/> <source>Namespace %1 already exists!</source> <translation>L'espace de noms %1 existe déjà !</translation> </message> <message> - <location line="+13"/> <source>Cannot register namespace '%1'!</source> <translation>Impossible d'enregistrer l'espace de noms '%1' !</translation> </message> <message> - <location line="+24"/> <source>Cannot open database '%1' to optimize!</source> <translation>Impossible d'ouvrir la base de données à optimiser '%1' !</translation> </message> @@ -113,7 +92,6 @@ <context> <name>QHelpDBReader</name> <message> - <location filename="../tools/assistant/lib/qhelpdbreader.cpp" line="+98"/> <source>Cannot open database '%1' '%2': %3</source> <extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string</extracomment> <translation>Impossible d'ouvrir la base de données '%1' '%2' : %3</translation> @@ -122,7 +100,10 @@ <context> <name>QHelpEngineCore</name> <message> - <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+524"/> + <source>Cannot open documentation file %1: %2!</source> + <translation>Impossible d'ouvrir le fichier de documentation %1 : %2 !</translation> + </message> + <message> <source>The specified namespace does not exist!</source> <translation>L'espace de noms spécifié n'existe pas !</translation> </message> @@ -130,182 +111,210 @@ <context> <name>QHelpEngineCorePrivate</name> <message> - <location line="-402"/> <source>Cannot open documentation file %1: %2!</source> - <translation>Impossible d'ouvrir le fichier de documentation %1 : %2 !</translation> + <translation type="obsolete">Impossible d'ouvrir le fichier de documentation %1 : %2 !</translation> </message> </context> <context> <name>QHelpGenerator</name> <message> - <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+157"/> <source>Invalid help data!</source> <translation>Données d'aide invalides !</translation> </message> <message> - <location line="+6"/> <source>No output file name specified!</source> <translation>Aucun nom de fichier de sortie spécifié !</translation> </message> <message> - <location line="+7"/> <source>The file %1 cannot be overwritten!</source> <translation>Le fichier %1 ne peut être écrasé !</translation> </message> <message> - <location line="+7"/> <source>Building up file structure...</source> <translation>Construction de la structure de fichiers en cours…</translation> </message> <message> - <location line="+11"/> <source>Cannot open data base file %1!</source> <translation>Impossible d'ouvrir le fichier de base de données %1 !</translation> </message> <message> - <location line="+11"/> <source>Cannot register namespace %1!</source> <translation>Impossible d'enregistrer l'espace de noms %1 !</translation> </message> <message> - <location line="+6"/> <source>Insert custom filters...</source> <translation>Insértion des filtres personnalisés…</translation> </message> <message> - <location line="+12"/> <source>Insert help data for filter section (%1 of %2)...</source> <translatorcomment>???</translatorcomment> <translation>Insertion des données d'aide pour la section filtre (%1 de %2)…</translation> </message> <message> - <location line="+18"/> <source>Documentation successfully generated.</source> <translation>Documentation générée avec succès.</translation> </message> <message> - <location line="+76"/> <source>Some tables already exist!</source> <translation>Certaines tables existent déjà !</translation> </message> <message> - <location line="+61"/> <source>Cannot create tables!</source> <translation>Impossible de créer les tables !</translation> </message> <message> - <location line="+86"/> <source>Cannot register virtual folder!</source> <translation>Impossible d'enregistrer le dossier virtuel !</translation> </message> <message> - <location line="+10"/> <source>Insert files...</source> <translation>Insertion des fichiers...</translation> </message> <message> - <location line="+42"/> <source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source> <translation>Le fichier référencé %1 doit être dans le dossier (%2) ou un de ses sous-dossiers. Fichier non pris en compte.</translation> </message> <message> - <location line="+7"/> <source>The file %1 does not exist! Skipping it.</source> <translation>Le fichier %1 n'existe pas ! Fichier non pris en compte.</translation> </message> <message> - <location line="+6"/> <source>Cannot open file %1! Skipping it.</source> <translation>Impossible d'ouvrir le fichier %1 ! Fichier non pris en compte.</translation> </message> <message> - <location line="+131"/> <source>The filter %1 is already registered!</source> <translation>Le filtre %1 est déjà enregistré !</translation> </message> <message> - <location line="+5"/> <source>Cannot register filter %1!</source> <translation>Impossible d'enregistrer le filtre %1 !</translation> </message> <message> - <location line="+24"/> <source>Insert indices...</source> <translation>Insertion des index…</translation> </message> <message> - <location line="+80"/> <source>Insert contents...</source> <translation>insertion du contenu…</translation> </message> <message> - <location line="+8"/> <source>Cannot insert contents!</source> <translation>Impossible d'insérer le contenu !</translation> </message> <message> - <location line="+12"/> <source>Cannot register contents!</source> <translation>Impossible de référencer le contenu !</translation> </message> + <message> + <source>File '%1' does not exist.</source> + <translation>Le fichier '%1' n'existe pas.</translation> + </message> + <message> + <source>File '%1' cannot be opened.</source> + <translation>Le fichier '%1' ne peut être ouvert.</translation> + </message> + <message> + <source>File '%1' contains an invalid link to file '%2'</source> + <translation>Le fichier '%1' contient un lien invalide vers le fichier '%2'</translation> + </message> + <message> + <source>Invalid links in HTML files.</source> + <translation>Liens invalides dans les fichiers HTML.</translation> + </message> +</context> +<context> + <name>QHelpProject</name> + <message> + <source>Unknown token.</source> + <translation>Identificateur inconnu.</translation> + </message> + <message> + <source>Unknown token. Expected "QtHelpProject"!</source> + <translation>Identificateur inconnu. "QtHelpProject" attendu !</translation> + </message> + <message> + <source>Error in line %1: %2</source> + <translation>Erreur à la ligne %1 : %2</translation> + </message> + <message> + <source>Virtual folder has invalid syntax.</source> + <translation>Syntaxe invalide pour le dossier virtuel.</translation> + </message> + <message> + <source>Namespace has invalid syntax.</source> + <translation>Syntaxe invalide pour l'espace de noms.</translation> + </message> + <message> + <source>Missing namespace in QtHelpProject.</source> + <translation>Espace de noms manquant dans QtHelpProject.</translation> + </message> + <message> + <source>Missing virtual folder in QtHelpProject</source> + <translation>Dossier virtuel manquant dans QtHelpProject</translation> + </message> + <message> + <source>Missing attribute in keyword at line %1.</source> + <translation>Attribut manquant pour le mot clé à la ligne %1.</translation> + </message> + <message> + <source>The input file %1 could not be opened!</source> + <translation>Le fichier source %1 n'a pas pu être ouvert !</translation> + </message> </context> <context> <name>QHelpSearchQueryWidget</name> <message> - <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+411"/> <source>Search for:</source> <translation>Rechercher :</translation> </message> <message> - <location line="+5"/> <source>Previous search</source> <translation>Recherche précédente</translation> </message> <message> - <location line="+4"/> <source>Next search</source> <translation>Recherche suivante</translation> </message> <message> - <location line="+2"/> <source>Search</source> <translation>Recherche</translation> </message> <message> - <location line="+20"/> <source>Advanced search</source> <translation>Recherche avancée</translation> </message> <message> - <location line="+18"/> <source>words <B>similar</B> to:</source> <translation>mots <B>semblables</B> à :</translation> </message> <message> - <location line="+6"/> <source><B>without</B> the words:</source> <translation><B>sans</B> les mots :</translation> </message> <message> - <location line="+6"/> <source>with <B>exact phrase</B>:</source> <translation>avec la <B>phrase exacte</B> :</translation> </message> <message> - <location line="+6"/> <source>with <B>all</B> of the words:</source> <translation>avec <B>tous</B> les mots :</translation> </message> <message> - <location line="+6"/> <source>with <B>at least one</B> of the words:</source> <translation>avec <B>au moins un</B> des mots :</translation> </message> </context> <context> <name>QHelpSearchResultWidget</name> + <message numerus="yes"> + <source>%1 - %2 of %n Hits</source> + <translation> + <numerusform>%1 - %2 de %n résultat</numerusform> + <numerusform>%1 - %2 de %n résultats</numerusform> + </translation> + </message> <message> - <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+235"/> <source>0 - 0 of 0 Hits</source> <translation>0 - 0 de 0 résultats</translation> </message> @@ -313,63 +322,52 @@ <context> <name>QHelpSearchResultWidgetPrivate</name> <message> - <location line="-61"/> <source>%1 - %2 of %3 Hits</source> - <translation>%1 - %2 de %3 résultats</translation> + <translation type="obsolete">%1 - %2 de %3 résultats</translation> </message> </context> <context> <name>QObject</name> <message> - <location filename="../tools/assistant/lib/qhelp_global.h" line="+83"/> <source>Untitled</source> - <translation>Sans titre</translation> + <translation type="obsolete">Sans titre</translation> </message> <message> - <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/> <source>Unknown token.</source> <translatorcomment>contexte peu clair...</translatorcomment> - <translation>Identificateur inconnu.</translation> + <translation type="obsolete">Identificateur inconnu.</translation> </message> <message> - <location line="+13"/> <source>Unknown token. Expected "QtHelpProject"!</source> - <translation>Identificateur inconnu. "QtHelpProject" attendu !</translation> + <translation type="obsolete">Identificateur inconnu. "QtHelpProject" attendu !</translation> </message> <message> - <location line="+5"/> <source>Error in line %1: %2</source> - <translation>Erreur à la ligne %1 : %2</translation> + <translation type="obsolete">Erreur à la ligne %1 : %2</translation> </message> <message> - <location line="+13"/> <source>A virtual folder must not contain a '/' character!</source> - <translation>Un dossier virtuel ne doit pas contenir le caractère '/' !</translation> + <translation type="obsolete">Un dossier virtuel ne doit pas contenir le caractère '/' !</translation> </message> <message> - <location line="+4"/> <source>A namespace must not contain a '/' character!</source> - <translation>Un espace de noms ne doit pas contenir le caractère '/' !</translation> + <translation type="obsolete">Un espace de noms ne doit pas contenir le caractère '/' !</translation> </message> <message> - <location line="+16"/> <source>Missing namespace in QtHelpProject.</source> - <translation>Espace de noms manquant dans QtHelpProject.</translation> + <translation type="obsolete">Espace de noms manquant dans QtHelpProject.</translation> </message> <message> - <location line="+2"/> <source>Missing virtual folder in QtHelpProject</source> - <translation>Dossier virtuel manquant dans QtHelpProject</translation> + <translation type="obsolete">Dossier virtuel manquant dans QtHelpProject</translation> </message> <message> - <location line="+88"/> <source>Missing attribute in keyword at line %1.</source> - <translation>Attribut manquant pour le mot clé à la ligne %1.</translation> + <translation type="obsolete">Attribut manquant pour le mot clé à la ligne %1.</translation> </message> <message> - <location line="+123"/> <source>The input file %1 could not be opened!</source> - <translation>Le fichier source %1 n'a pas pu être ouvert !</translation> + <translation type="obsolete">Le fichier source %1 n'a pas pu être ouvert !</translation> </message> </context> </TS> -- cgit v0.12 From db230b2001554f145f9c2be449b5c9b6f882eca6 Mon Sep 17 00:00:00 2001 From: qCaro <qt-info@nokia.com> Date: Thu, 1 Jul 2010 14:50:18 +0200 Subject: Some more french translations. Reviewed-by: Pierre (cherry picked from commit 4fd04190ab3800fde261293acd4bcf11cf449dee) --- translations/qt_fr.ts | 307 +++++++++++++++++++++++++------------------------- 1 file changed, 156 insertions(+), 151 deletions(-) diff --git a/translations/qt_fr.ts b/translations/qt_fr.ts index 2a4135b..56a9e0e 100644 --- a/translations/qt_fr.ts +++ b/translations/qt_fr.ts @@ -1706,7 +1706,7 @@ en </message> <message> <source>Component elements may not contain properties other than id</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les éléments du composant ne peuvent pas contenir des propriétés autres que id</translation> </message> <message> <source>Invalid component id specification</source> @@ -1718,167 +1718,167 @@ en </message> <message> <source>Invalid component body specification</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Le corps de la spécification du composant n'est pas valide</translation> </message> <message> <source>Component objects cannot declare new properties.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les objets composants ne peuvent pas déclarer de nouvelles propriétés.</translation> </message> <message> <source>Component objects cannot declare new signals.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les objets composants ne peuvent pas déclarer de nouveaux signaux.</translation> </message> <message> <source>Component objects cannot declare new functions.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les objets composants ne peuvent pas déclarer de nouvelles fonctions.</translation> </message> <message> <source>Cannot create empty component specification</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de créer une spécification du composant vide</translation> </message> <message> <source>Incorrectly specified signal assignment</source> - <translation type="unfinished"></translation> + <translation type="unfinished">L'affectation du signal est ncorrectement spécifiée</translation> </message> <message> <source>Cannot assign a value to a signal (expecting a script to be run)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner une valeur à un signal (celà exige d'éxécuter un script)</translation> </message> <message> <source>Empty signal assignment</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Signal d'affectation vide</translation> </message> <message> <source>Empty property assignment</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Propriété d'affectation vide</translation> </message> <message> <source>Attached properties cannot be used here</source> - <translation type="unfinished"></translation> + <translation type="unfinished">La configuration spécifiée ne peut être utilisée.ici</translation> </message> <message> <source>Non-existent attached object</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Objet attaché non existant</translation> </message> <message> <source>Invalid attached object assignment</source> - <translation type="unfinished"></translation> + <translation type="unfinished">L'affectation de l'objet attaché est invalide</translation> </message> <message> <source>Cannot assign to non-existent default property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'attacher à une propriété par défaut non existante</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'attacher à une propriété non existante "%1"</translation> </message> <message> <source>Invalid use of namespace</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Utilisation invalide d'espace de noms</translation> </message> <message> <source>Not an attached property name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ce n'est pas un nom de propriété attachée</translation> </message> <message> <source>Invalid use of id property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Utilisation invalide de la propriété id</translation> </message> <message> <source>Property has already been assigned a value</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Une valeur a déjà été attribuée à la propriété</translation> </message> <message> <source>Invalid grouped property access</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Accès invalide à une propriété groupée</translation> </message> <message> <source>Cannot assign a value directly to a grouped property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner directement une valeur à une propriété groupée</translation> </message> <message> <source>Invalid property use</source> - <translation type="unfinished"></translation> + <translation type="unfinished">La propriété utilisée est invalide</translation> </message> <message> <source>Property assignment expected</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Propriété d'affectation attendue</translation> </message> <message> <source>Single property assignment expected</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Une seule propriété d'affectation est attendue</translation> </message> <message> <source>Unexpected object assignment</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Affectation d'objet innatendue</translation> </message> <message> <source>Cannot assign object to list</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner un objet à une liste</translation> </message> <message> <source>Can only assign one binding to lists</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Un seul lien peut être assigné à des listes</translation> </message> <message> <source>Cannot assign primitives to lists</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner des primitives à des listes</translation> </message> <message> <source>Cannot assign multiple values to a script property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner plusieurs valeurs à une propriété de script</translation> </message> <message> <source>Invalid property assignment: script expected</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Propriété d'affectation invalide: script attendu</translation> </message> <message> <source>Cannot assign object to property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner un objet à une propriété</translation> </message> <message> <source>"%1" cannot operate on "%2"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">"%1" ne peut pas fonctionner sur "%2"</translation> </message> <message> <source>Duplicate default property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Propriété par défaut en double</translation> </message> <message> <source>Duplicate property name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nom de propriété en double</translation> </message> <message> <source>Property names cannot begin with an upper case letter</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les noms des propriétés ne peuvent pas commencer par une majuscule</translation> </message> <message> <source>Duplicate signal name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nom de signal en double</translation> </message> <message> <source>Signal names cannot begin with an upper case letter</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les noms de signaux ne peuvent pas commencer par une majuscule</translation> </message> <message> <source>Duplicate method name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nom de méthode en double</translation> </message> <message> <source>Method names cannot begin with an upper case letter</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les noms des méthodes ne peuvent pas commencer par une majuscule</translation> </message> <message> <source>Property value set multiple times</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Valeur de propriété attribuée plusieurs fois</translation> </message> <message> <source>Invalid property nesting</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Propriété d'emboîtement invalide</translation> </message> <message> <source>Cannot override FINAL property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de remplacer la propriété FINAL</translation> </message> <message> <source>Invalid property type</source> @@ -1890,177 +1890,178 @@ en </message> <message> <source>IDs cannot start with an uppercase letter</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les IDs ne peuvent pas commencer par une majuscule</translation> </message> <message> <source>IDs must start with a letter or underscore</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les IDs doivent commencer par une lettre ou un souligné</translation> </message> <message> <source>IDs must contain only letters, numbers, and underscores</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Les IDs ne peuvent contenir que des lettres, des nombres ou des soulignés</translation> </message> <message> <source>ID illegally masks global JavaScript property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ID masque illégalement la propriété JavaScript globale</translation> </message> <message> <source>No property alias location</source> - <translation type="unfinished"></translation> + <translatorcomment>??</translatorcomment> + <translation type="unfinished">La propriété de l'alias n'a pas d'emplacement</translation> </message> <message> <source>Invalid alias location</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Emplacement d'alias invalide</translation> </message> <message> <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> - <translation type="unfinished"></translation> + <translation type="unfinished">Référence d'alias invalide. La référence d'alias doit être spécifiée comme <id> ou <id>.<property></translation> </message> <message> <source>Invalid alias reference. Unable to find id "%1"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Référence d'alias invalide. Impossible de trouver l'id "%1"</translation> </message> </context> <context> <name>QDeclarativeComponent</name> <message> <source>Invalid empty URL</source> - <translation type="unfinished"></translation> + <translation type="unfinished">URL vide non valide</translation> </message> </context> <context> <name>QDeclarativeCompositeTypeManager</name> <message> <source>Resource %1 unavailable</source> - <translation type="unfinished"></translation> + <translation type="unfinished">La ressource %1 n'est pas disponible</translation> </message> <message> <source>Namespace %1 cannot be used as a type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">L'espace de noms %1 ne peut pas être utilisé comme un type</translation> </message> <message> <source>%1 %2</source> - <translation type="unfinished">%1% {1 %2?}</translation> + <translation>%1 %2</translation> </message> <message> <source>Type %1 unavailable</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Le type %1 n'est pas disponible</translation> </message> </context> <context> <name>QDeclarativeConnections</name> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Imposible d'assigner à la propriété inexistante "%1"</translation> </message> <message> <source>Connections: nested objects not allowed</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Connexions: les éléments imbriqués ne sont pas autorisés</translation> </message> <message> <source>Connections: syntax error</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Connexions: erreur de syntaxe</translation> </message> <message> <source>Connections: script expected</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Connexions: script attendu</translation> </message> </context> <context> <name>QDeclarativeEngine</name> <message> <source>executeSql called outside transaction()</source> - <translation type="unfinished"></translation> + <translation type="unfinished">executeSql a été 1.appelé en dehors de transaction()</translation> </message> <message> <source>Read-only Transaction</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Transaction en lecture seule</translation> </message> <message> <source>Version mismatch: expected %1, found %2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Version incompatible:%1 attendue, %2 trouvée</translation> </message> <message> <source>SQL transaction failed</source> - <translation type="unfinished"></translation> + <translation type="unfinished">la transaction SQL a échouée</translation> </message> <message> <source>transaction: missing callback</source> - <translation type="unfinished"></translation> + <translation type="unfinished">transaction: le rappel est absent</translation> </message> <message> <source>SQL: database version mismatch</source> - <translation type="unfinished"></translation> + <translation type="unfinished">SQL: la version de la base de données est incompatible</translation> </message> </context> <context> <name>QDeclarativeFlipable</name> <message> <source>front is a write-once property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">avant est une propriété à écriture unique</translation> </message> <message> <source>back is a write-once property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">arrière est une propriété à écriture unique</translation> </message> </context> <context> <name>QDeclarativeImportDatabase</name> <message> <source>module "%1" definition "%2" not readable</source> - <translation type="unfinished"></translation> + <translation type="unfinished">La définition "%2" du module "%1% n'est pas lisible</translation> </message> <message> <source>plugin cannot be loaded for module "%1": %2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de charger le plugin pour le module "%1": %2</translation> </message> <message> <source>module "%1" plugin "%2" not found</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Le plugin "%2" du module "%1" n'a pas été trouvé</translation> </message> <message> <source>module "%1" version %2.%3 is not installed</source> - <translation type="unfinished"></translation> + <translation type="unfinished">la version %2.%3 du module "%1" n'est pas installée</translation> </message> <message> <source>module "%1" is not installed</source> - <translation type="unfinished"></translation> + <translation type="unfinished">le module "%1" n'est pas installé</translation> </message> <message> <source>"%1": no such directory</source> - <translation type="unfinished"></translation> + <translation type="unfinished">"%1": le répertoire n'existe pas</translation> </message> <message> <source>import "%1" has no qmldir and no namespace</source> - <translation type="unfinished"></translation> + <translation type="unfinished">l'importation "%1" n'a pas de qmldir ni d'espace de noms</translation> </message> <message> <source>- %1 is not a namespace</source> - <translation type="unfinished"></translation> + <translation type="unfinished">- %1 n'est pas un espace de noms</translation> </message> <message> <source>- nested namespaces not allowed</source> - <translation type="unfinished"></translation> + <translation type="unfinished">- les espaces de noms imbriqués ne sont pas autorisés</translation> </message> <message> <source>local directory</source> - <translation type="unfinished"></translation> + <translation type="unfinished">répertoire local</translation> </message> <message> <source>is ambiguous. Found in %1 and in %2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">est ambigu. Trouvé dans %1 et dans %2</translation> </message> <message> <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source> - <translation type="unfinished"></translation> + <translation type="unfinished">est ambigu. Trouvé dans %1 dans les versions %2.%3 et %4.%5</translation> </message> <message> <source>is instantiated recursively</source> - <translation type="unfinished"></translation> + <translation type="unfinished">est instancié récursivement</translation> </message> <message> <source>is not a type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">n'est pas un type</translation> </message> </context> <context> @@ -2074,328 +2075,332 @@ en <name>QDeclarativeKeysAttached</name> <message> <source>Keys is only available via attached properties</source> - <translation type="unfinished"></translation> + <translatorcomment>Keys, a verifier</translatorcomment> + <translation type="unfinished">Keys est disponible uniquement via les propriétés attachées</translation> </message> </context> <context> <name>QDeclarativeListModel</name> <message> <source>remove: index %1 out of range</source> - <translation type="unfinished"></translation> + <translation type="unfinished">supprimer: l'inder %1 est hors de la plage de valeurs admissible</translation> </message> <message> <source>insert: value is not an object</source> - <translation type="unfinished"></translation> + <translation type="unfinished">insérer: une valeur n'est pas un objet</translation> </message> <message> <source>insert: index %1 out of range</source> - <translation type="unfinished"></translation> + <translation type="unfinished">insérer: l'inder %1 est hors de la plage de valeurs admissible</translation> </message> <message> <source>move: out of range</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Déplacer: hors de la plage de valeurs admissible</translation> </message> <message> <source>append: value is not an object</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ajouter: une valeur n'est pas un objet</translation> </message> <message> <source>set: value is not an object</source> - <translation type="unfinished"></translation> + <translation type="unfinished">attribuer: une valeur n'est pas un objet</translation> </message> <message> <source>set: index %1 out of range</source> - <translation type="unfinished"></translation> + <translation type="unfinished">attribuer: l'index %1 est hors de la plage de valeurs admissible</translation> </message> <message> <source>ListElement: cannot contain nested elements</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ListElement: ne peut pas contenir des éléments imbriqués</translation> </message> <message> <source>ListElement: cannot use reserved "id" property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ListElement: ne peut pas utiliser la propriété réservée "id"</translation> </message> <message> <source>ListElement: cannot use script for property value</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ListElement: ne peut pas utiliser script comme valeur pour une propriété</translation> </message> <message> <source>ListModel: undefined property '%1'</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ListModel: propriété indéfinie '%1'</translation> </message> </context> <context> <name>QDeclarativeLoader</name> <message> <source>Loader does not support loading non-visual elements.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Le chargeur n'est pas compatible avec le chargement d'éléments non-visuels.</translation> </message> </context> <context> <name>QDeclarativeParentAnimation</name> <message> <source>Unable to preserve appearance under complex transform</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de conserver l'aspect lors d'une transformation complexe</translation> </message> <message> <source>Unable to preserve appearance under non-uniform scale</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle non uniforme</translation> </message> <message> <source>Unable to preserve appearance under scale of 0</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle égale à 0</translation> </message> </context> <context> <name>QDeclarativeParentChange</name> <message> <source>Unable to preserve appearance under complex transform</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de conserver l'aspect lors d'une transformation complexe</translation> </message> <message> <source>Unable to preserve appearance under non-uniform scale</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle non uniforme</translation> </message> <message> <source>Unable to preserve appearance under scale of 0</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle égale à 0</translation> </message> </context> <context> <name>QDeclarativeParser</name> <message> <source>Illegal unicode escape sequence</source> - <translation type="unfinished"></translation> + <translation type="unfinished">séquence d'échappement unicode illégale</translation> </message> <message> <source>Illegal character</source> - <translation type="unfinished"></translation> + <translation type="unfinished">caractère illégal</translation> </message> <message> <source>Unclosed string at end of line</source> - <translation type="unfinished"></translation> + <translation type="unfinished">chaîne de caractères non fermée en fin de ligne</translation> </message> <message> <source>Illegal escape squence</source> - <translation type="unfinished"></translation> + <translation type="unfinished">séquence d'échappement illégale</translation> </message> <message> <source>Unclosed comment at end of file</source> - <translation type="unfinished"></translation> + <translation type="unfinished">commentaire non fermé en fin de ligne</translation> </message> <message> <source>Illegal syntax for exponential number</source> - <translation type="unfinished"></translation> + <translation type="unfinished">syntaxe illégale pour un nombre exponentiel</translation> </message> <message> <source>Identifier cannot start with numeric literal</source> - <translation type="unfinished"></translation> + <translatorcomment>??? </translatorcomment> + <translation type="unfinished">impossible de commencer un identifiant par un littéral numérique</translation> </message> <message> <source>Unterminated regular expression literal</source> - <translation type="unfinished"></translation> + <translation type="unfinished">littéral non terminé pour l'expression régulière</translation> </message> <message> <source>Invalid regular expression flag '%0'</source> - <translation type="unfinished"></translation> + <translation type="unfinished">drapeau '%0' invalid pour l'expression régulière</translation> </message> <message> <source>Unterminated regular expression backslash sequence</source> - <translation type="unfinished"></translation> + <translation type="unfinished">séquence antislash non terminée pour l'expression régulière</translation> </message> <message> <source>Unterminated regular expression class</source> - <translation type="unfinished"></translation> + <translation type="unfinished">class non terminé pour l'expression régulière</translation> </message> <message> <source>Syntax error</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Erreur de syntaxe</translation> </message> <message> <source>Unexpected token `%1'</source> - <translation type="unfinished"></translation> + <translation type="unfinished">jeton inattendu '%1'</translation> </message> <message> <source>Expected token `%1'</source> - <translation type="unfinished"></translation> + <translation type="unfinished">jeton attendu '%1'</translation> </message> <message> <source>Property value set multiple times</source> - <translation type="unfinished"></translation> + <translation type="unfinished">valeur de propriété attribuée à plusieurs reprises</translation> </message> <message> <source>Expected type name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nom de type attendu</translation> </message> <message> <source>Invalid import qualifier ID</source> - <translation type="unfinished"></translation> + <translation type="unfinished">qualificatif ID d'importation invalide</translation> </message> <message> <source>Reserved name "Qt" cannot be used as an qualifier</source> - <translation type="unfinished"></translation> + <translation type="unfinished">"Qt" est un nom réservé et ne peut pas être utilisé comme qualificatif</translation> </message> <message> <source>Script import qualifiers must be unique.</source> - <translation type="unfinished"></translation> + <translatorcomment>??</translatorcomment> + <translation type="unfinished">Les qualificatifs d'importation de script doivent être uniques.</translation> </message> <message> <source>Script import requires a qualifier</source> - <translation type="unfinished"></translation> + <translation type="unfinished">L'importation de script exige un qualificatif</translation> </message> <message> <source>Library import requires a version</source> - <translation type="unfinished"></translation> + <translation type="unfinished">L'importation de bibliothèque exige une version</translation> </message> <message> <source>Expected parameter type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Type de paramètre attendu</translation> </message> <message> <source>Invalid property type modifier</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Modificateur invalide pour le type de propriété</translation> </message> <message> <source>Unexpected property type modifier</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Modificateur innatendu pour le type de propriété</translation> </message> <message> <source>Expected property type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Type de propriété attendue</translation> </message> <message> <source>Readonly not yet supported</source> - <translation type="unfinished"></translation> + <translation type="unfinished">La lecture seule n'est pas encore implémentée</translation> </message> <message> <source>JavaScript declaration outside Script element</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Déclaration JavaScript en edhors de l'élément Script</translation> </message> </context> <context> <name>QDeclarativePauseAnimation</name> <message> <source>Cannot set a duration of < 0</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'attribuer une durée < 0</translation> </message> </context> <context> <name>QDeclarativePixmapCache</name> <message> <source>Error decoding: %1: %2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Erreur de décodage: %1: %2</translation> </message> <message> <source>Failed to get image from provider: %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'obtenir l'image du fournisseur: %1</translation> </message> <message> <source>Cannot open: %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'ouvrir: %1</translation> </message> <message> <source>Unknown Error loading %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Erreur de chargement inconnue: %1</translation> </message> </context> <context> <name>QDeclarativePropertyAnimation</name> <message> <source>Cannot set a duration of < 0</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'attribuer une durée < 0</translation> </message> </context> <context> <name>QDeclarativePropertyChanges</name> <message> <source>PropertyChanges does not support creating state-specific objects.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">PropertyChanges n'est pas compatible avec la création d'objets spécifiques à un état.</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ne peut pas assigner à la propriété inexistante "%1"</translation> </message> <message> <source>Cannot assign to read-only property "%1"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ne peut pas assigner à la propriété en lecture seule "%1"</translation> </message> </context> <context> <name>QDeclarativeTextInput</name> <message> <source>Could not load cursor delegate</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de charger le curseur délégué</translation> </message> <message> <source>Could not instantiate cursor delegate</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'instancier le curseur délégué</translation> </message> </context> <context> <name>QDeclarativeVME</name> <message> <source>Unable to create object of type %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de créer un objet de type %1</translation> </message> <message> <source>Cannot assign value %1 to property %2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner la valeur %1 à la propriété %2</translation> </message> <message> <source>Cannot assign object type %1 with no default method</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner un objet de type %1 sans méthode défaut</translation> </message> <message> <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> - <translation type="unfinished"></translation> + <translatorcomment>le vs a confirmer</translatorcomment> + <translation type="unfinished">Impossible de connecter le signal/slot %1 %vs. %2 pour cause d'incompatibilité</translation> </message> <message> <source>Cannot assign an object to signal property %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">NImpossible d'assigner un objet à la propriété %1 d'un signal</translation> </message> <message> <source>Cannot assign object to list</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner un objet à une liste</translation> </message> <message> <source>Cannot assign object to interface property</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'assigner un objet à la propriété d'une interface</translation> </message> <message> <source>Unable to create attached object</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible de créer un object attaché</translation> </message> <message> <source>Cannot set properties on %1 as it is null</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Impossible d'attribuer les propriétés à %1 car ce dernier est nul</translation> </message> </context> <context> <name>QDeclarativeVisualDataModel</name> <message> <source>Delegate component must be Item type.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Un composant délégué doit être de type Item.</translation> </message> </context> <context> <name>QDeclarativeXmlListModel</name> <message> <source>Qt was built without support for xmlpatterns</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Qt a été généré sans support pour xmlpatterns</translation> </message> </context> <context> <name>QDeclarativeXmlListModelRole</name> <message> <source>An XmlRole query must not start with '/'</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Une requête XmlRole ne doit pas commencer par '/'</translation> </message> </context> <context> <name>QDeclarativeXmlRoleList</name> <message> <source>An XmlListModel query must start with '/' or "//"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Une requête XmlListModel doit commencer par '/' ou "//"</translation> </message> </context> <context> -- cgit v0.12 From b13e6fea50fcd6fc7cde33dd5f54e45b95458424 Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Tue, 13 Jul 2010 11:22:38 +0200 Subject: Translation work for 4.7 validating and adding some french translations. Plus all the fixes from Gabriel's extensive review. Doc: Fix a typo Reviewed-by: gabi (cherry picked from commit 209c017333fea9827fd20c7f8d23721bd8a6ee43) --- src/gui/widgets/qcombobox.cpp | 2 +- tools/linguist/phrasebooks/french.qph | 40 + translations/assistant_fr.ts | 577 +++++++++++++- translations/designer_fr.ts | 1397 ++++++++++++++++++++++++++++++++- translations/linguist_fr.ts | 619 +++++++++++++-- translations/qt_fr.ts | 793 ++++++++++--------- translations/qt_help_fr.ts | 89 ++- 7 files changed, 3003 insertions(+), 514 deletions(-) diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index dcc328f..917a325 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -910,7 +910,7 @@ QComboBox::QComboBox(bool rw, QWidget *parent, const char *name) interaction. The highlighted() signal is emitted when the user highlights an item in the combobox popup list. All three signals exist in two versions, one with a QString argument and one with an - \c int argument. If the user selectes or highlights a pixmap, only + \c int argument. If the user selects or highlights a pixmap, only the \c int signals are emitted. Whenever the text of an editable combobox is changed the editTextChanged() signal is emitted. diff --git a/tools/linguist/phrasebooks/french.qph b/tools/linguist/phrasebooks/french.qph index 47cb306..1884ed3 100644 --- a/tools/linguist/phrasebooks/french.qph +++ b/tools/linguist/phrasebooks/french.qph @@ -1450,4 +1450,44 @@ <source>New</source> <target>Créer</target> </phrase> +<phrase> + <source>Play</source> + <target>Lecture</target> +</phrase> +<phrase> + <source>Slider</source> + <target>Barre de défilement</target> +</phrase> +<phrase> + <source>&Restore</source> + <target>&Restaurer</target> +</phrase> +<phrase> + <source>&Move</source> + <target>&Déplacer</target> +</phrase> +<phrase> + <source>New</source> + <target>Créer</target> +</phrase> +<phrase> + <source>Play</source> + <target>Lecture</target> +</phrase> +<phrase> + <source>&Redo</source> + <target>&Refaire</target> +</phrase> +<phrase> + <source>Raised</source> + <target>Bombé</target> +</phrase> +<phrase> + <source>Sunken</source> + <target>Enfoncé</target> +</phrase> +<phrase> + <source>Run:</source> + <target>Exécution :</target> +</phrase> </QPH> diff --git a/translations/assistant_fr.ts b/translations/assistant_fr.ts index e8f5fd1..e117663 100644 --- a/translations/assistant_fr.ts +++ b/translations/assistant_fr.ts @@ -4,6 +4,7 @@ <context> <name>AboutDialog</name> <message> + <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+117"/> <source>&Close</source> <translation>&Fermer</translation> </message> @@ -11,51 +12,129 @@ <context> <name>AboutLabel</name> <message> + <location line="-15"/> <source>Warning</source> <translation>Avertissement</translation> </message> <message> + <location line="+1"/> <source>Unable to launch external application. </source> <translation>Impossible d'ouvrir l'application externe. </translation> </message> <message> + <location line="+0"/> <source>OK</source> <translation>OK</translation> </message> </context> <context> + <name>Assistant</name> + <message> + <location filename="../tools/assistant/tools/assistant/main.cpp" line="+177"/> + <source>Error registering documentation file '%1': %2</source> + <translation>Erreur lors de l'enregistrement du fichier de documentation '%1' : %2</translation> + </message> + <message> + <location line="+39"/> + <source>Error: %1</source> + <translation>Erreur : %1</translation> + </message> + <message> + <location line="+42"/> + <source>Could not register documentation file +%1 + +Reason: +%2</source> + <translation>Impossible d'enregistrer le fichier de documentation +%1 + +Raison : +%2</translation> + </message> + <message> + <location line="+6"/> + <source>Documentation successfully registered.</source> + <translation>Documentation enregistrée avec succès.</translation> + </message> + <message> + <location line="+12"/> + <source>Could not unregister documentation file +%1 + +Reason: +%2</source> + <translation>Impossible de retirer le fichier de documentation +%1 + +Raison : +%2</translation> + </message> + <message> + <location line="+8"/> + <source>Documentation successfully unregistered.</source> + <translation>Documentation retirée avec succès.</translation> + </message> + <message> + <location line="+55"/> + <source>Error reading collection file '%1': %2.</source> + <translation>Erreur lors de la lecture du fichier de collection '%1' : %2.</translation> + </message> + <message> + <location line="+11"/> + <source>Error creating collection file '%1': %2.</source> + <translation>Erreur lors de la création du fichier de collection '%1' : %2.</translation> + </message> + <message> + <location line="+7"/> + <source>Error reading collection file '%1': %2</source> + <translation>Erreur lors de la lecture du fichier de collection '%1' : %2</translation> + </message> + <message> + <location line="+53"/> + <source>Cannot load sqlite database driver!</source> + <translation>Impossible de charger le driver de la base de données sqlite !</translation> + </message> +</context> +<context> <name>BookmarkDialog</name> <message> + <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/> <source>Add Bookmark</source> <translation>Ajouter un signet</translation> </message> <message> + <location/> <source>Bookmark:</source> <translation>Signet :</translation> </message> <message> + <location/> <source>Add in Folder:</source> <translation>Ajouter dans le dossier :</translation> </message> <message> + <location/> <source>+</source> <translation>+</translation> </message> <message> + <location/> <source>New Folder</source> <translation>Nouveau dossier</translation> </message> <message> <source>Bookmarks</source> - <translation>Signets</translation> + <translation type="obsolete">Signets</translation> </message> <message> <source>Delete Folder</source> - <translation>Supprimer le dossier</translation> + <translation type="obsolete">Supprimer le dossier</translation> </message> <message> + <location filename="../tools/assistant/tools/assistant/bookmarkdialog.cpp" line="+227"/> <source>Rename Folder</source> <translation>Renommer le dossier</translation> </message> @@ -64,106 +143,360 @@ <name>BookmarkManager</name> <message> <source>Bookmarks</source> - <translation>Signets</translation> + <translation type="obsolete">Signets</translation> + </message> + <message> + <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+151"/> + <source>Untitled</source> + <translation>Sans titre</translation> </message> <message> + <location line="+65"/> <source>Remove</source> <translation>Suppression</translation> </message> <message> + <location line="+1"/> <source>You are going to delete a Folder, this will also<br>remove it's content. Are you sure to continue?</source> <translation>Vous allez supprimer un dossier, ceci va aussi<br>supprimer son contenu. Voulez-vous continuer ?</translation> </message> <message> + <location line="+148"/> + <source>Manage Bookmarks...</source> + <translation>Gestion des signets...</translation> + </message> + <message> + <location line="+3"/> + <source>Add Bookmark...</source> + <translation>Ajouter un signet...</translation> + </message> + <message> + <location line="+1"/> + <source>Ctrl+D</source> + <translation>Ctrl+D</translation> + </message> + <message> + <location line="+68"/> + <source>Delete Folder</source> + <translation>Supprimer le dossier</translation> + </message> + <message> + <location line="+1"/> + <source>Rename Folder</source> + <translation>Renommer le dossier</translation> + </message> + <message> + <location line="+2"/> + <source>Show Bookmark</source> + <translation>Afficher le signet</translation> + </message> + <message> + <location line="+1"/> + <source>Show Bookmark in New Tab</source> + <translation>Afficher le signet dans un nouvel onglet</translation> + </message> + <message> + <location line="+2"/> + <source>Delete Bookmark</source> + <translation>Supprimer le signet</translation> + </message> + <message> + <location line="+1"/> + <source>Rename Bookmark</source> + <translation>Renommer le signet</translation> + </message> + <message> <source>New Folder</source> - <translation>Nouveau dossier</translation> + <translation type="obsolete">Nouveau dossier</translation> </message> </context> <context> - <name>BookmarkWidget</name> + <name>BookmarkManagerWidget</name> + <message> + <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.ui"/> + <source>Manage Bookmarks</source> + <translation>Gestion des signets</translation> + </message> + <message> + <location/> + <source>Search:</source> + <translation>Recherche :</translation> + </message> + <message> + <location/> + <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.cpp" line="+258"/> + <source>Remove</source> + <translation>Supprimer</translation> + </message> + <message> + <location/> + <source>Import and Backup</source> + <translation>Importation et sauvegarde</translation> + </message> + <message> + <location/> + <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.cpp" line="-30"/> + <source>OK</source> + <translation>OK</translation> + </message> + <message> + <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.cpp" line="-142"/> + <source>Import...</source> + <translation>Importer...</translation> + </message> + <message> + <location line="+1"/> + <source>Export...</source> + <translation>Exporter...</translation> + </message> + <message> + <location line="+112"/> + <source>Open File</source> + <translation>Ouvrir un fichier</translation> + </message> <message> + <location line="+1"/> + <location line="+16"/> + <source>Files (*.xbel)</source> + <translation>Fichiers (*.xbel)</translation> + </message> + <message> + <location line="-1"/> + <source>Save File</source> + <translation>Enregistrer le fichier</translation> + </message> + <message> + <location line="+12"/> + <source>Qt Assistant</source> + <translation>Qt Assistant</translation> + </message> + <message> + <location line="+1"/> + <source>Unable to save bookmarks.</source> + <translation>Impossible de sauvegarder les signets.</translation> + </message> + <message> + <location line="+30"/> + <source>You are goingto delete a Folder, this will also<br> remove it's content. Are you sure to continue?</source> + <translation>Vous êtes sur le point de supprimer un dossier, ceci supprimera<br> également son contenu. Voulez-vous continuer ?</translation> + </message> + <message> + <location line="+28"/> <source>Delete Folder</source> <translation>Supprimer le dossier</translation> </message> <message> + <location line="+1"/> <source>Rename Folder</source> <translation>Renommer le dossier</translation> </message> <message> + <location line="+2"/> <source>Show Bookmark</source> <translation>Afficher le signet</translation> </message> <message> + <location line="+1"/> <source>Show Bookmark in New Tab</source> <translation>Afficher le signet dans un nouvel onglet</translation> </message> <message> + <location line="+2"/> <source>Delete Bookmark</source> <translation>Supprimer le signet</translation> </message> <message> + <location line="+1"/> <source>Rename Bookmark</source> <translation>Renommer le signet</translation> </message> +</context> +<context> + <name>BookmarkModel</name> + <message> + <location filename="../tools/assistant/tools/assistant/bookmarkmodel.cpp" line="+88"/> + <source>Name</source> + <translation>Nom</translation> + </message> + <message> + <location line="+0"/> + <source>Address</source> + <translation>Adresse</translation> + </message> <message> + <location line="+2"/> + <source>Bookmarks Menu</source> + <translation>Menu signets</translation> + </message> +</context> +<context> + <name>BookmarkWidget</name> + <message> + <source>Delete Folder</source> + <translation type="obsolete">Supprimer le dossier</translation> + </message> + <message> + <source>Rename Folder</source> + <translation type="obsolete">Renommer le dossier</translation> + </message> + <message> + <source>Show Bookmark</source> + <translation type="obsolete">Afficher le signet</translation> + </message> + <message> + <source>Show Bookmark in New Tab</source> + <translation type="obsolete">Afficher le signet dans un nouvel onglet</translation> + </message> + <message> + <source>Delete Bookmark</source> + <translation type="obsolete">Supprimer le signet</translation> + </message> + <message> + <source>Rename Bookmark</source> + <translation type="obsolete">Renommer le signet</translation> + </message> + <message> + <location filename="../tools/assistant/tools/assistant/bookmarkwidget.ui"/> <source>Filter:</source> <translation>Filtre :</translation> </message> <message> + <location/> <source>Add</source> <translation>Ajouter</translation> </message> <message> + <location/> <source>Remove</source> <translation>Retirer</translation> </message> + <message> + <location/> + <source>Bookmarks</source> + <translation>Signets</translation> + </message> </context> <context> <name>CentralWidget</name> <message> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+121"/> <source>Add new page</source> <translation>Créer une nouvelle page</translation> </message> <message> + <location line="+9"/> <source>Close current page</source> <translation>Fermer la page courante</translation> </message> <message> + <location line="+287"/> <source>Print Document</source> <translation>Imprimer le document</translation> </message> <message> + <location line="+126"/> + <location line="+2"/> <source>unknown</source> <translation>inconnu</translation> </message> <message> + <location line="+101"/> <source>Add New Page</source> <translation>Créer une nouvelle page</translation> </message> <message> + <location line="+3"/> <source>Close This Page</source> <translation>Fermer cette page</translation> </message> <message> + <location line="+3"/> <source>Close Other Pages</source> <translation>Fermer les autres pages</translation> </message> <message> + <location line="+5"/> <source>Add Bookmark for this Page...</source> <translation>Ajouter un signet pour cette page...</translation> </message> <message> + <location line="+264"/> <source>Search</source> <translation>Recherche</translation> </message> </context> <context> + <name>CmdLineParser</name> + <message> + <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+137"/> + <source>Unknown option: %1</source> + <translation>Option inconnue : %1</translation> + </message> + <message> + <location line="+33"/> + <source>The collection file '%1' does not exist.</source> + <translation>Le fichier de collection '%1' n'existe pas.</translation> + </message> + <message> + <location line="+3"/> + <source>Missing collection file.</source> + <translation>Fichier de collection manquant.</translation> + </message> + <message> + <location line="+13"/> + <source>Invalid URL '%1'.</source> + <translation>URL invalide '%1'.</translation> + </message> + <message> + <location line="+2"/> + <source>Missing URL.</source> + <translation>URL manquante.</translation> + </message> + <message> + <location line="+36"/> + <source>Unknown widget: %1</source> + <translation>Widget inconnu : %1</translation> + </message> + <message> + <location line="+2"/> + <source>Missing widget.</source> + <translation>Widget manquant.</translation> + </message> + <message> + <location line="+23"/> + <source>The Qt help file '%1' does not exist.</source> + <translation>Le fichier d'aide Qt '%1' n'existe pas.</translation> + </message> + <message> + <location line="+4"/> + <source>Missing help file.</source> + <translation>Fichier d'aide manquant.</translation> + </message> + <message> + <location line="+10"/> + <source>Missing filter argument.</source> + <translation>Argument de filtre manquant.</translation> + </message> + <message> + <location line="+20"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location line="+2"/> + <source>Notice</source> + <translation>Avertissement</translation> + </message> +</context> +<context> <name>ContentWindow</name> <message> + <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+173"/> <source>Open Link</source> <translation>Ouvrir le lien</translation> </message> <message> + <location line="+1"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> @@ -171,10 +504,12 @@ <context> <name>FilterNameDialogClass</name> <message> + <location filename="../tools/assistant/tools/assistant/filternamedialog.ui"/> <source>Add Filter Name</source> <translation>Ajouter un filtre</translation> </message> <message> + <location/> <source>Filter Name:</source> <translation>Nom du filtre :</translation> </message> @@ -182,22 +517,26 @@ <context> <name>FindWidget</name> <message> + <location filename="../tools/assistant/tools/assistant/findwidget.cpp" line="+85"/> <source>Previous</source> <translation>Précédent</translation> </message> <message> + <location line="+6"/> <source>Next</source> <translation>Suivant</translation> </message> <message> + <location line="+5"/> <source>Case Sensitive</source> <translation>Sensible à la casse</translation> </message> <message> <source>Whole words</source> - <translation>Mots complets</translation> + <translation type="obsolete">Mots complets</translation> </message> <message> + <location line="+9"/> <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Recherche à partir du début</translation> </message> @@ -205,22 +544,27 @@ <context> <name>FontPanel</name> <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> <source>Font</source> <translation>Police</translation> </message> <message> + <location line="+11"/> <source>&Writing system</source> <translation>&Système d'écriture</translation> </message> <message> + <location line="+3"/> <source>&Family</source> <translation>&Famille</translation> </message> <message> + <location line="+4"/> <source>&Style</source> <translation>&Style</translation> </message> <message> + <location line="+4"/> <source>&Point size</source> <translation>&Taille en points</translation> </message> @@ -228,32 +572,42 @@ <context> <name>HelpViewer</name> <message> + <location filename="../tools/assistant/tools/assistant/helpviewer_qwv.cpp" line="+260"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> <message> + <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+58"/> + <source><title>about:blank</title></source> + <translatorcomment>y'a t'il une autre traduction dans Firefox & cie ?</translatorcomment> + <translation><title>about:blank</title></translation> + </message> + <message> + <location line="+6"/> <source><title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div></source> <translation><title>Erreur 404...</title><div align="center"><br><br><h1>La page n'a pas pu être trouvée</h1><br><h3>'%1'</h3></div></translation> </message> <message> <source>Help</source> - <translation>Aide</translation> + <translation type="obsolete">Aide</translation> </message> <message> <source>Unable to launch external application. </source> - <translation>Impossible de lancer l'application externe. + <translation type="obsolete">Impossible de lancer l'application externe. </translation> </message> <message> <source>OK</source> - <translation>OK</translation> + <translation type="obsolete">OK</translation> </message> <message> + <location filename="../tools/assistant/tools/assistant/helpviewer_qtb.cpp" line="+230"/> <source>Copy &Link Location</source> <translation>Copier l'&adresse cible</translation> </message> <message> + <location line="+3"/> <source>Open Link in New Tab Ctrl+LMB</source> <translatorcomment>LMB? ← ouais exactement pareil...</translatorcomment> <translation>Ouvrir dans un nouvel onglet Ctrl+clic gauche</translation> @@ -262,14 +616,17 @@ <context> <name>IndexWindow</name> <message> + <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+68"/> <source>&Look for:</source> <translation>&Rechercher :</translation> </message> <message> + <location line="+74"/> <source>Open Link</source> <translation>Ouvrir le lien</translation> </message> <message> + <location line="+1"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> @@ -277,74 +634,97 @@ <context> <name>InstallDialog</name> <message> + <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> + <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+78"/> <source>Install Documentation</source> <translation>Installer la documentation</translation> </message> <message> + <location/> <source>Available Documentation:</source> <translation>Documentation disponible :</translation> </message> <message> + <location/> <source>Install</source> <translation>Installer</translation> </message> <message> + <location/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> + <location/> <source>Close</source> <translation>Fermer</translation> </message> <message> + <location/> <source>Installation Path:</source> <translation>Chemin d'installation :</translation> </message> <message> + <location/> <source>...</source> - <translation>…</translation> + <translation>...</translation> </message> <message> + <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+33"/> <source>Downloading documentation info...</source> - <translation>Téléchargement des informations de la documentation…</translation> + <translation>Téléchargement des informations de la documentation...</translation> </message> <message> + <location line="+51"/> <source>Download canceled.</source> <translation>Téléchargement annulé.</translation> </message> <message> + <location line="+28"/> + <location line="+79"/> + <location line="+27"/> <source>Done.</source> <translation>Terminé.</translation> </message> <message> + <location line="-91"/> <source>The file %1 already exists. Do you want to overwrite it?</source> <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser ?</translation> </message> <message> + <location line="+11"/> <source>Unable to save the file %1: %2.</source> <translation>Impossible de sauver le fichier %1 : %2.</translation> </message> <message> + <location line="+8"/> <source>Downloading %1...</source> - <translation>Téléchargement de %1 en cours…</translation> + <translation>Téléchargement de %1 en cours...</translation> </message> <message> + <location line="+20"/> + <location line="+42"/> + <location line="+40"/> <source>Download failed: %1.</source> <translation>Échec du téléchargement : %1.</translation> </message> <message> + <location line="-72"/> <source>Documentation info file is corrupt!</source> <translation>Le fichier d'information de documentation est corrompu !</translation> </message> <message> + <location line="+37"/> <source>Download failed: Downloaded file is corrupted.</source> <translation>Échec du téléchargement : le fichier téléchargé est corrompu.</translation> </message> <message> + <location line="+2"/> <source>Installing documentation %1...</source> - <translation>Installation de la documentation %1…</translation> + <translation>Installation de la documentation %1...</translation> </message> <message> + <location line="+23"/> <source>Error while installing documentation: %1</source> <translation>Erreur durant l'installation de la documentation : @@ -354,239 +734,310 @@ <context> <name>MainWindow</name> <message> + <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+123"/> + <location line="+369"/> <source>Index</source> <translation>Index</translation> </message> <message> + <location line="-363"/> + <location line="+361"/> <source>Contents</source> <translation>Sommaire</translation> </message> <message> + <location line="-354"/> + <location line="+358"/> <source>Bookmarks</source> <translation>Signets</translation> </message> <message> + <location line="-336"/> + <location line="+680"/> + <location line="+284"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> <source>Unfiltered</source> - <translation>Non-filtré</translation> + <translation type="obsolete">Non-filtré</translation> </message> <message> + <location line="-772"/> <source>Looking for Qt Documentation...</source> - <translation>Recherche la documentation de Qt…</translation> + <translation>Recherche la documentation de Qt...</translation> </message> <message> + <location line="+60"/> <source>&File</source> <translation>&Fichier</translation> </message> <message> + <location line="+7"/> <source>Page Set&up...</source> - <translation>&Mise en page…</translation> + <translation>&Mise en page...</translation> </message> <message> + <location line="+2"/> <source>Print Preview...</source> - <translation>Aperçu avant impression…</translation> + <translation>Aperçu avant impression...</translation> </message> <message> + <location line="+3"/> <source>&Print...</source> - <translation>&Imprimer…</translation> + <translation>&Imprimer...</translation> </message> <message> + <location line="-10"/> <source>New &Tab</source> <translation>Nouvel ongle&t</translation> </message> <message> + <location line="+17"/> <source>&Close Tab</source> <translation>&Fermer l'onglet</translation> </message> <message> + <location line="+5"/> <source>&Quit</source> <translation>&Quitter</translation> </message> <message> + <location line="+3"/> + <source>CTRL+Q</source> + <translation>CTRL+Q</translation> + </message> + <message> + <location line="+5"/> <source>&Edit</source> <translation>&Édition</translation> </message> <message> + <location line="+1"/> <source>&Copy selected Text</source> <translation>&Copier le texte selectionné</translation> </message> <message> + <location line="+8"/> <source>&Find in Text...</source> - <translation>&Rechercher dans le texte…</translation> + <translation>&Rechercher dans le texte...</translation> </message> <message> + <location line="+2"/> <source>&Find</source> <translation>&Rechercher</translation> </message> <message> + <location line="+4"/> <source>Find &Next</source> <translation>Rechercher le suiva&nt</translation> </message> <message> + <location line="+4"/> <source>Find &Previous</source> <translation>Rechercher le &précédent</translation> </message> <message> + <location line="+5"/> <source>Preferences...</source> - <translation>Préférences…</translation> + <translation>Préférences...</translation> </message> <message> + <location line="+3"/> <source>&View</source> <translation>&Affichage</translation> </message> <message> + <location line="+1"/> <source>Zoom &in</source> <translation>Zoom &avant</translation> </message> <message> + <location line="+6"/> <source>Zoom &out</source> <translation>Zoom a&rrière</translation> </message> <message> + <location line="+6"/> <source>Normal &Size</source> <translation>&Taille normale</translation> </message> <message> + <location line="+4"/> <source>Ctrl+0</source> <translation>Ctrl+0</translation> </message> <message> + <location line="+5"/> <source>ALT+C</source> <translation>ALT+C</translation> </message> <message> + <location line="+2"/> <source>ALT+I</source> <translation>ALT+I</translation> </message> <message> + <location line="+2"/> <source>ALT+O</source> <translation>ALT+O</translation> </message> <message> + <location line="+1"/> <source>Search</source> <translation>Recherche</translation> </message> <message> + <location line="+1"/> <source>ALT+S</source> <translation>ALT+S</translation> </message> <message> + <location line="+2"/> <source>&Go</source> <translation>A&ller</translation> </message> <message> + <location line="+1"/> <source>&Home</source> <translation>&Accueil</translation> </message> <message> + <location line="+1"/> <source>ALT+Home</source> <translation>ALT+Home</translation> </message> <message> + <location line="+3"/> <source>&Back</source> <translation>&Précédent</translation> </message> <message> + <location line="+5"/> <source>&Forward</source> <translation>&Suivant</translation> </message> <message> + <location line="+6"/> <source>Sync with Table of Contents</source> <translation>Synchroniser la table des matières</translation> </message> <message> + <location line="+2"/> <source>Sync</source> <translation>Rafraîchir</translation> </message> <message> + <location line="+5"/> <source>Next Page</source> <translation>Page suivante</translation> </message> <message> + <location line="+1"/> <source>Ctrl+Alt+Right</source> <translation>Ctrl+Alt+Right</translation> </message> <message> + <location line="+3"/> <source>Previous Page</source> <translation>Page précédente</translation> </message> <message> + <location line="+1"/> <source>Ctrl+Alt+Left</source> <translation>Ctrl+Alt+Left</translation> </message> <message> + <location line="+4"/> <source>&Bookmarks</source> <translation>Si&gnets</translation> </message> <message> + <location line="+592"/> + <source>Could not register file '%1': %2</source> + <translation>Impossible d'enregistrer le fichier '%1' : %2</translation> + </message> + <message> <source>Add Bookmark...</source> - <translation>Ajouter un signet…</translation> + <translation type="obsolete">Ajouter un signet...</translation> </message> <message> <source>CTRL+D</source> - <translation>CTRL+D</translation> + <translation type="obsolete">CTRL+D</translation> </message> <message> + <location line="-590"/> <source>&Help</source> <translation>Ai&de</translation> </message> <message> + <location line="+1"/> <source>About...</source> - <translation>À propos…</translation> + <translation>À propos...</translation> </message> <message> + <location line="+21"/> <source>Navigation Toolbar</source> <translation>Barre d'outils de navigation</translation> </message> <message> + <location line="+22"/> <source>&Window</source> <translation>&Fenêtre</translation> </message> <message> + <location line="+2"/> <source>Zoom</source> <translation>Zoom</translation> </message> <message> + <location line="+1"/> <source>Minimize</source> <translation>Minimiser</translation> </message> <message> + <location line="+1"/> <source>Ctrl+M</source> <translation>Ctrl+M</translation> </message> <message> + <location line="+43"/> <source>Toolbars</source> <translation>Barres d'outils</translation> </message> <message> + <location line="+16"/> <source>Filter Toolbar</source> <translation>Barre d'outils de filtrage</translation> </message> <message> + <location line="+2"/> <source>Filtered by:</source> <translation>Filtre :</translation> </message> <message> + <location line="+26"/> <source>Address Toolbar</source> <translation>Barre d'outils d'adresse</translation> </message> <message> + <location line="+4"/> <source>Address:</source> <translation>Adresse :</translation> </message> <message> + <location line="+112"/> <source>Could not find the associated content item.</source> <translatorcomment>what is item in this context? ← same question here</translatorcomment> <translation>Impossible de trouver l'élément de contenu associé.</translation> </message> <message> + <location line="+60"/> <source>About %1</source> <translation>À propos de %1</translation> </message> <message> + <location line="+175"/> <source>Updating search index</source> <translation>Mise à jour de l'index de recherche</translation> </message> @@ -594,38 +1045,48 @@ <context> <name>PreferencesDialog</name> <message> + <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+252"/> + <location line="+44"/> <source>Add Documentation</source> <translation>Ajouter de la documentation</translation> </message> <message> + <location line="-44"/> <source>Qt Compressed Help Files (*.qch)</source> <translation>Fichiers d'aide Qt compressés (*.qch)</translation> </message> <message> + <location line="+30"/> <source>The namespace %1 is already registered!</source> <translation>L'espace de nom %1 existe déjà !</translation> </message> <message> + <location line="+8"/> <source>The specified file is not a valid Qt Help File!</source> <translation>Le fichier spécifié n'est pas un fichier d'aide Qt valide !</translation> </message> <message> + <location line="+24"/> <source>Remove Documentation</source> <translation>Supprimer la documentation</translation> </message> <message> + <location line="+1"/> <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source> <translation>Certains documents ouverts dans Assistant ont des références vers la documentation que vous allez supprimer. Supprimer la documentation fermera ces documents.</translation> </message> <message> + <location line="+2"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> + <location line="+1"/> <source>OK</source> <translation>OK</translation> </message> <message> + <location line="+83"/> <source>Use custom settings</source> <translation>Utiliser des paramètres personnalisés</translation> </message> @@ -633,95 +1094,118 @@ <context> <name>PreferencesDialogClass</name> <message> + <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui"/> <source>Preferences</source> <translation>Préférences</translation> </message> <message> + <location/> <source>Fonts</source> <translation>Polices</translation> </message> <message> + <location/> <source>Font settings:</source> <translation>Configuration des polices :</translation> </message> <message> + <location/> <source>Browser</source> <translation>Navigateur</translation> </message> <message> + <location/> <source>Application</source> <translation>Application</translation> </message> <message> + <location/> <source>Filters</source> <translation>Filtres</translation> </message> <message> + <location/> <source>Filter:</source> <translation>Filtre :</translation> </message> <message> + <location/> <source>Attributes:</source> <translation>Attributs :</translation> </message> <message> + <location/> <source>1</source> <translation>1</translation> </message> <message> + <location/> <source>Add</source> <translation>Ajouter</translation> </message> <message> + <location/> <source>Remove</source> <translation>Supprimer</translation> </message> <message> + <location/> <source>Documentation</source> <translation>Documentation</translation> </message> <message> + <location/> <source>Registered Documentation:</source> <translatorcomment>documentation enregistrée ? ← je préfère référencée pour les deux...</translatorcomment> <translation>Documentation référencée :</translation> </message> <message> + <location/> <source>Add...</source> - <translation>Ajouter…</translation> + <translation>Ajouter...</translation> </message> <message> + <location/> <source>Options</source> <translation>Options</translation> </message> <message> + <location/> <source>On help start:</source> <translation>Au démarrage :</translation> </message> <message> + <location/> <source>Show my home page</source> <translation>Afficher ma page d'accueil</translation> </message> <message> + <location/> <source>Show a blank page</source> <translation>Afficher une page blanche</translation> </message> <message> + <location/> <source>Show my tabs from last session</source> <translation>Afficher mes onglets de la dernière session</translation> </message> <message> + <location/> <source>Homepage</source> <translation>Page d'accueil</translation> </message> <message> + <location/> <source>Current Page</source> <translation>Page courante</translation> </message> <message> + <location/> <source>Blank Page</source> <translation>Page blanche</translation> </message> <message> + <location/> <source>Restore to default</source> <translation>Restaurer les valeurs par défaut</translation> </message> @@ -730,47 +1214,47 @@ <name>QObject</name> <message> <source>The specified collection file does not exist!</source> - <translation>Le fichier de collection spécifié n'existe pas !</translation> + <translation type="obsolete">Le fichier de collection spécifié n'existe pas !</translation> </message> <message> <source>Missing collection file!</source> - <translation>Fichier de collection manquant !</translation> + <translation type="obsolete">Fichier de collection manquant !</translation> </message> <message> <source>Invalid URL!</source> - <translation>URL invalide !</translation> + <translation type="obsolete">URL invalide !</translation> </message> <message> <source>Missing URL!</source> - <translation>URL manquante !</translation> + <translation type="obsolete">URL manquante !</translation> </message> <message> <source>Unknown widget: %1</source> - <translation>Widget inconnu : %1</translation> + <translation type="obsolete">Widget inconnu : %1</translation> </message> <message> <source>Missing widget!</source> - <translation>Widget manquant !</translation> + <translation type="obsolete">Widget manquant !</translation> </message> <message> <source>The specified Qt help file does not exist!</source> - <translation>Le fichier d'aide Qt spécifié n'existe pas !</translation> + <translation type="obsolete">Le fichier d'aide Qt spécifié n'existe pas !</translation> </message> <message> <source>Missing help file!</source> - <translation>Fichier d'aide manquant !</translation> + <translation type="obsolete">Fichier d'aide manquant !</translation> </message> <message> <source>Missing filter argument!</source> - <translation>Argument de filtre manquant !</translation> + <translation type="obsolete">Argument de filtre manquant !</translation> </message> <message> <source>Unknown option: %1</source> - <translation>Option inconnue : %1</translation> + <translation type="obsolete">Option inconnue : %1</translation> </message> <message> <source>Qt Assistant</source> - <translation>Qt Assistant</translation> + <translation type="obsolete">Qt Assistant</translation> </message> <message> <source>Could not register documentation file @@ -778,7 +1262,7 @@ Reason: %2</source> - <translation>Impossible d'enregistrer le fichier de documentation + <translation type="obsolete">Impossible d'enregistrer le fichier de documentation %1 Raison : @@ -786,11 +1270,11 @@ Raison : </message> <message> <source>Documentation successfully registered.</source> - <translation>Documentation enregistrée avec succès.</translation> + <translation type="obsolete">Documentation enregistrée avec succès.</translation> </message> <message> <source>Documentation successfully unregistered.</source> - <translation>Documentation retirée avec succès.</translation> + <translation type="obsolete">Documentation retirée avec succès.</translation> </message> <message> <source>Could not unregister documentation file @@ -798,7 +1282,7 @@ Raison : Reason: %2</source> - <translation>Impossible d'enregistrer le fichier de documentation + <translation type="obsolete">Impossible d'enregistrer le fichier de documentation %1 Raison : @@ -806,20 +1290,22 @@ Raison : </message> <message> <source>Cannot load sqlite database driver!</source> - <translation>Impossible de charger le driver de la base de données sqlite !</translation> + <translation type="obsolete">Impossible de charger le driver de la base de données sqlite !</translation> </message> <message> <source>The specified collection file could not be read!</source> - <translation>Le fichier de collection spécifié ne peut pas être lu !</translation> + <translation type="obsolete">Le fichier de collection spécifié ne peut pas être lu !</translation> </message> </context> <context> <name>RemoteControl</name> <message> + <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+165"/> <source>Debugging Remote Control</source> <translation>Débogage du contrôle à distance</translation> </message> <message> + <location line="+1"/> <source>Received Command: %1 %2</source> <translation>Commande reçue : %1 %2</translation> </message> @@ -827,18 +1313,22 @@ Raison : <context> <name>SearchWidget</name> <message> + <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+210"/> <source>&Copy</source> <translation>&Copier</translation> </message> <message> + <location line="+4"/> <source>Copy &Link Location</source> <translation>Copier &l'adresse du lien</translation> </message> <message> + <location line="+4"/> <source>Open Link in New Tab</source> <translation>Ouvrir le lien dans un nouvel onglet</translation> </message> <message> + <location line="+8"/> <source>Select All</source> <translation>Sélectionner tout</translation> </message> @@ -846,22 +1336,27 @@ Raison : <context> <name>TopicChooser</name> <message> + <location filename="../tools/assistant/tools/assistant/topicchooser.ui"/> <source>Choose Topic</source> <translation>Choisir le domaine</translation> </message> <message> + <location/> <source>&Topics</source> <translation>&Domaines</translation> </message> <message> + <location/> <source>&Display</source> <translation>&Afficher</translation> </message> <message> + <location/> <source>&Close</source> <translation>&Fermer</translation> </message> <message> + <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+53"/> <source>Choose a topic for <b>%1</b>:</source> <translation>Choisir le domaine pour <b>%1</b> :</translation> </message> diff --git a/translations/designer_fr.ts b/translations/designer_fr.ts index 175d5c5..9bf3810 100644 --- a/translations/designer_fr.ts +++ b/translations/designer_fr.ts @@ -4,22 +4,27 @@ <context> <name>AbstractFindWidget</name> <message> + <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="+127"/> <source>&Previous</source> <translation>&Précédent</translation> </message> <message> + <location line="+8"/> <source>&Next</source> <translation>&Suivant</translation> </message> <message> + <location line="+24"/> <source>&Case sensitive</source> <translation>&Sensible à la casse</translation> </message> <message> + <location line="+8"/> <source>Whole &words</source> <translation>M&ots complets</translation> </message> <message> + <location line="+12"/> <source><img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped</source> <translation><img src=":/trolltech/shared/images/wrap.png">&nbsp;Recherche à partir du début</translation> </message> @@ -27,14 +32,17 @@ <context> <name>AddLinkDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui"/> <source>Insert Link</source> <translation>Insérer lien</translation> </message> <message> + <location/> <source>Title:</source> <translation>Titre :</translation> </message> <message> + <location/> <source>URL:</source> <translation>URL :</translation> </message> @@ -42,6 +50,7 @@ <context> <name>AppFontDialog</name> <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="+418"/> <source>Additional Fonts</source> <translation>Polices additionnelles</translation> </message> @@ -49,31 +58,38 @@ <context> <name>AppFontManager</name> <message> + <location line="-267"/> <source>'%1' is not a file.</source> <translation>'%1' n'est pas un fichier.</translation> </message> <message> + <location line="+4"/> <source>The font file '%1' does not have read permissions.</source> <translation>Le fichier de la police '%1' n'a pas les permissions de lecture.</translation> </message> <message> + <location line="+8"/> <source>The font file '%1' is already loaded.</source> <translation>Le fichier de la police '%1' est déjà chargé.</translation> </message> <message> + <location line="+7"/> <source>The font file '%1' could not be loaded.</source> <translatorcomment>passé composé plutôt</translatorcomment> <translation>Le fichier de la police '%1' n'a pas pu chargé.</translation> </message> <message> + <location line="+17"/> <source>'%1' is not a valid font id.</source> <translation>'%1' n'est pas un identifiant de police valide.</translation> </message> <message> + <location line="+11"/> <source>There is no loaded font matching the id '%1'.</source> <translation>Il n'y a pas de police chargée correspondant à l'identifiant '%1'.</translation> </message> <message> + <location line="+15"/> <source>The font '%1' (%2) could not be unloaded.</source> <translation>La police '%1' (%2) ne peut pas être déchargée.</translation> </message> @@ -81,43 +97,53 @@ <context> <name>AppFontWidget</name> <message> + <location line="+26"/> <source>Fonts</source> <translation>Polices</translation> </message> <message> + <location line="+58"/> <source>Add font files</source> <translation>Ajouter des fichiers de polices</translation> </message> <message> + <location line="+5"/> <source>Remove current font file</source> <translation>Retirer le fichier de police courant</translation> </message> <message> + <location line="+4"/> <source>Remove all font files</source> <translation>Retirer tous les fichiers de polices</translation> </message> <message> + <location line="+19"/> <source>Add Font Files</source> <translation>Ajouter des fichiers de polices</translation> </message> <message> + <location line="+1"/> <source>Font files (*.ttf)</source> <translation>Fichier de polices (*.ttf)</translation> </message> <message> + <location line="+13"/> <source>Error Adding Fonts</source> <translation>Erreur dans l'ajout de polices</translation> </message> <message> + <location line="+24"/> <source>Error Removing Fonts</source> <translatorcomment>s/de/des/ pour être cohérent avec le suivant...</translatorcomment> <translation>Erreur lors de la suppression des polices</translation> </message> <message> + <location line="+22"/> <source>Remove Fonts</source> <translation>Retirer les polices</translation> </message> <message> + <location line="+0"/> <source>Would you like to remove all fonts?</source> <translation>Voulez-vous supprimer toutes les polices ?</translation> </message> @@ -125,10 +151,12 @@ <context> <name>AppearanceOptionsWidget</name> <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> + <location/> <source>User Interface Mode</source> <translation>Mode de l'interface utilisateur</translation> </message> @@ -136,14 +164,17 @@ <context> <name>AssistantClient</name> <message> + <location filename="../tools/designer/src/designer/assistantclient.cpp" line="+100"/> <source>Unable to send request: Assistant is not responding.</source> <translation>Impossible d'envoyer la requête : Assistant ne répond pas.</translation> </message> <message> + <location line="+39"/> <source>The binary '%1' does not exist.</source> <translation>Le binaire '%1' n'existe pas.</translation> </message> <message> + <location line="+9"/> <source>Unable to launch assistant (%1).</source> <translation>Impossible de démarrer Assistant (%1).</translation> </message> @@ -151,75 +182,93 @@ <context> <name>BrushPropertyManager</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="+52"/> <source>No brush</source> <translation>Pas de pinceau</translation> </message> <message> + <location line="+1"/> <source>Solid</source> <translatorcomment>c'est plutôt continu ou "trait continu" pour moi</translatorcomment> <translation>Trait continu</translation> </message> <message> + <location line="+1"/> <source>Dense 1</source> <translation>Dense 1</translation> </message> <message> + <location line="+1"/> <source>Dense 2</source> <translation>Dense 2</translation> </message> <message> + <location line="+1"/> <source>Dense 3</source> <translation>Dense 3</translation> </message> <message> + <location line="+1"/> <source>Dense 4</source> <translation>Dense 4</translation> </message> <message> + <location line="+1"/> <source>Dense 5</source> <translation>Dense 5</translation> </message> <message> + <location line="+1"/> <source>Dense 6</source> <translation>Dense 6</translation> </message> <message> + <location line="+1"/> <source>Dense 7</source> <translation>Dense 7</translation> </message> <message> + <location line="+1"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> + <location line="+1"/> <source>Vertical</source> <translation>Vertical</translation> </message> <message> + <location line="+1"/> <source>Cross</source> <translation>Croix</translation> </message> <message> + <location line="+1"/> <source>Backward diagonal</source> <translation>Diagonale arrière</translation> </message> <message> + <location line="+1"/> <source>Forward diagonal</source> <translation>Diagonale avant</translation> </message> <message> + <location line="+1"/> <source>Crossing diagonal</source> <translation>Diagonale croisée</translation> </message> <message> + <location line="+93"/> <source>Style</source> <translation>Style</translation> </message> <message> + <location line="+11"/> <source>Color</source> <translation>Couleur</translation> </message> <message> + <location line="+105"/> <source>[%1, %2]</source> <translation>[%1, %2]</translation> </message> @@ -227,120 +276,151 @@ <context> <name>Command</name> <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="+208"/> + <location line="+258"/> <source>Change signal</source> <translation>Modifier le signal</translation> </message> <message> + <location line="-256"/> + <location line="+268"/> <source>Change slot</source> <translation>Modifier le slot</translation> </message> <message> + <location line="-220"/> <source>Change signal-slot connection</source> <translation>Modfier la connection signal-slot</translation> </message> <message> + <location line="+234"/> <source>Change sender</source> <translatorcomment>expéditeur/source</translatorcomment> <translation>Modifier l'envoyeur</translation> </message> <message> + <location line="+18"/> <source>Change receiver</source> <translatorcomment>destinataire++/cible?</translatorcomment> <translation>Modifier le destinataire</translation> </message> <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+221"/> <source>Create button group</source> <translation>Créer un groupe de boutons</translation> </message> <message> + <location line="+27"/> <source>Break button group</source> <translation>Dissocier le groupe de bouton</translation> </message> <message> + <location line="+9"/> <source>Break button group '%1'</source> <translation>Dissossier le groupe de bouton '%1'</translation> </message> <message> + <location line="+17"/> <source>Add buttons to group</source> <translation>Ajouter les boutons au groupe</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+458"/> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+8"/> <source>Add '%1' to '%2'</source> <extracomment>Command description for adding buttons to a QButtonGroup</extracomment> <translation>Ajouter '%1' à '%2'</translation> </message> <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+14"/> <source>Remove buttons from group</source> <translation>Retirer les boutons du groupe</translation> </message> <message> + <location line="+15"/> <source>Remove '%1' from '%2'</source> <extracomment>Command description for removing buttons from a QButtonGroup</extracomment> <translation>Retirer '%1' de '%2'</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+143"/> <source>Add connection</source> <translation>Ajouter une connexion</translation> </message> <message> + <location line="+54"/> <source>Adjust connection</source> <translation>Réajuster les connexions</translation> </message> <message> + <location line="+19"/> <source>Delete connections</source> <translation>Supprimer les connexions</translation> </message> <message> + <location line="+58"/> <source>Change source</source> <translation>Modifier la source</translation> </message> <message> + <location line="+2"/> <source>Change target</source> <translation>Modifier la cible</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+349"/> <source>Morph %1/'%2' into %3</source> <extracomment>MorphWidgetCommand description</extracomment> <translation>Transformer %1/'%2' en %3</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="+149"/> <source>Insert '%1'</source> <translation>Insérer '%1'</translation> </message> <message> + <location line="+133"/> <source>Change Z-order of '%1'</source> <translatorcomment>l'ordre de '%1' sur l'axe z? profondeur ?</translatorcomment> <translation>Modifier la profondeur de '%1'</translation> </message> <message> + <location line="+34"/> <source>Raise '%1'</source> <translation>Élever '%1'</translation> </message> <message> + <location line="+33"/> <source>Lower '%1'</source> <translation>Abaisser '%1'</translation> </message> <message> + <location line="+113"/> <source>Delete '%1'</source> <translation>Supprimer '%1'</translation> </message> <message> + <location line="+119"/> <source>Reparent '%1'</source> <translation>Reparenter '%1'</translation> </message> <message> + <location line="+53"/> <source>Promote to custom widget</source> <translation>Promouvoir en widget personnalisé</translation> </message> <message> + <location line="+42"/> <source>Demote from custom widget</source> <translation>Annuler la promotion en widget personnalisé</translation> </message> <message> + <location line="+79"/> <source>Lay out using grid</source> <translation>Mettre en page à l'aide d'une grille</translation> </message> <message> + <location line="+3"/> <source>Lay out vertically</source> <translation>Mettre en page verticalement</translation> </message> @@ -349,154 +429,204 @@ <translation type="obsolete">Mettre en page horizontalement</translation> </message> <message> + <location line="+3"/> <source>Lay out horizontally</source> <translation>Mettre en page horizontalement</translation> </message> <message> + <location line="+41"/> <source>Break layout</source> <translation>Casser la mise en page</translation> </message> <message> + <location line="+105"/> <source>Simplify Grid Layout</source> <translation>Simplifier la mise en page en grille</translation> </message> <message> + <location line="+135"/> + <location line="+235"/> + <location line="+78"/> <source>Move Page</source> <translation>Déplacer la page</translation> </message> <message> + <location line="-279"/> + <location line="+123"/> + <location line="+188"/> + <location line="+666"/> <source>Delete Page</source> <translation>Supprimer la page</translation> </message> <message> + <location line="-939"/> + <location line="+123"/> <source>Page</source> <translation>Page</translation> </message> <message> + <location line="-118"/> + <location line="+123"/> + <location line="+186"/> + <location line="+667"/> <source>Insert Page</source> <translation>Insérer une page</translation> </message> <message> + <location line="-647"/> <source>Change Tab order</source> <translation>Modifier l'ordre des tabulations</translation> </message> <message> + <location line="+28"/> <source>Create Menu Bar</source> <translation>Créer une barre de menu</translation> </message> <message> + <location line="+44"/> <source>Delete Menu Bar</source> <translation>Supprimer la barre de menu</translation> </message> <message> + <location line="+47"/> <source>Create Status Bar</source> <translation>Créer une barre d'état</translation> </message> <message> + <location line="+42"/> <source>Delete Status Bar</source> <translation>Supprimer la barre d'état</translation> </message> <message> + <location line="+45"/> <source>Add Tool Bar</source> <translation>Ajouter une barre d'outil</translation> </message> <message> + <location line="+59"/> <source>Add Dock Window</source> <translation>Ajouter une fenêtre ancrable</translation> </message> <message> + <location line="+53"/> <source>Adjust Size of '%1'</source> <translation>Ajuster les dimensions de '%1'</translation> </message> <message> + <location line="+57"/> <source>Change Form Layout Item Geometry</source> <translation>Modifier la géométrie de l'élément de formulaire</translation> </message> <message> + <location line="+95"/> <source>Change Layout Item Geometry</source> <translation>Modifier la géométrie de l'élément de mise en page</translation> </message> <message> + <location line="+138"/> <source>Delete Subwindow</source> <translation>Supprimer la sous-fenêtre</translation> </message> <message> + <location line="+41"/> <source>page</source> <translation>page</translation> </message> <message> + <location line="+3"/> <source>Insert Subwindow</source> <translation>Insérer une sous-fenêtre</translation> </message> <message> + <location line="+2"/> <source>subwindow</source> <translation>sous-fenêtre</translation> </message> <message> + <location line="+1"/> <source>Subwindow</source> <translation>Sous fenêtre</translation> </message> <message> + <location line="+391"/> <source>Change Table Contents</source> <translation>Modifier le contenu de la table</translation> </message> <message> + <location line="+107"/> <source>Change Tree Contents</source> <translation>Modifier le contenu de l'arbre</translation> </message> <message> + <location line="+74"/> + <location line="+146"/> <source>Add action</source> <translation>Ajouter une action</translation> </message> <message> + <location line="-120"/> + <location line="+126"/> <source>Remove action</source> <translation>Supprimer l'action</translation> </message> <message> + <location line="+53"/> <source>Add menu</source> <translation>Ajouter un menu</translation> </message> <message> + <location line="+6"/> <source>Remove menu</source> <translation>Supprimer le menu</translation> </message> <message> + <location line="+6"/> <source>Create submenu</source> <translation>Créer une sous-fenêtre</translation> </message> <message> + <location line="+31"/> <source>Delete Tool Bar</source> <translation>Supprimer la barre d'outils</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command2.cpp" line="+154"/> <source>Change layout of '%1' from %2 to %3</source> <translation>Modifier la mise en page de '%1' de %2 à %3</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1196"/> <source>Set action text</source> <translation>Définir le texte de l'action</translation> </message> <message> + <location line="+3"/> <source>Insert action</source> <translation>Insérer action</translation> </message> <message> + <location line="+89"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+915"/> <source>Move action</source> <translation>Déplacer action</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-432"/> <source>Change Title</source> <translation>Modifier le titre</translation> </message> <message> + <location line="+2"/> <source>Insert Menu</source> <translation>Insérer menu</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1225"/> <source>Changed '%1' of '%2'</source> <translation>Modifier '%1' de '%2'</translation> </message> <message numerus="yes"> + <location line="+3"/> <source>Changed '%1' of %n objects</source> <translation> <numerusform>Modifier '%1' de %n objet</numerusform> @@ -504,10 +634,12 @@ </translation> </message> <message> + <location line="+84"/> <source>Reset '%1' of '%2'</source> <translation>Réinitialiser '%1' de '%2'</translation> </message> <message numerus="yes"> + <location line="+3"/> <source>Reset '%1' of %n objects</source> <translation> <numerusform>Réinitialiser '%1' de %n objet</numerusform> @@ -515,10 +647,12 @@ </translation> </message> <message> + <location line="+89"/> <source>Add dynamic property '%1' to '%2'</source> <translation>Ajouter la propriété dynamique '%1' à '%2'</translation> </message> <message numerus="yes"> + <location line="+3"/> <source>Add dynamic property '%1' to %n objects</source> <translation> <numerusform>Ajouter la propriété dynamique '%1' à %n objet</numerusform> @@ -526,10 +660,12 @@ </translation> </message> <message> + <location line="+86"/> <source>Remove dynamic property '%1' from '%2'</source> <translation>Supprimer la propriété dynamique '%1' de '%2'</translation> </message> <message numerus="yes"> + <location line="+3"/> <source>Remove dynamic property '%1' from %n objects</source> <translation> <numerusform>Supprimer la propriété dynamique '%1' de %n objet</numerusform> @@ -537,10 +673,12 @@ </translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/scriptcommand.cpp" line="+55"/> <source>Change script</source> <translation>Modifier le script</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+202"/> <source>Change signals/slots</source> <translation>Modifier signaux/slots</translation> </message> @@ -548,18 +686,22 @@ <context> <name>ConnectDialog</name> <message> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui"/> <source>Configure Connection</source> <translation>Configurer connexion</translation> </message> <message> + <location/> <source>GroupBox</source> <translation>GroupBox</translation> </message> <message> + <location/> <source>Edit...</source> <translation>Éditer...</translation> </message> <message> + <location/> <source>Show signals and slots inherited from QWidget</source> <translation>Afficher les signaux et slots hérités de QWidget</translation> </message> @@ -567,14 +709,17 @@ <context> <name>ConnectionDelegate</name> <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+645"/> <source><object></source> <translation><objet></translation> </message> <message> + <location line="+18"/> <source><signal></source> <translation><signal></translation> </message> <message> + <location line="+0"/> <source><slot></source> <translation><slot></translation> </message> @@ -582,16 +727,19 @@ <context> <name>DPI_Chooser</name> <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+69"/> <source>Standard (96 x 96)</source> <extracomment>Embedded device standard screen resolution</extracomment> <translation>Standard (96 x 96)</translation> </message> <message> + <location line="+2"/> <source>Greenphone (179 x 185)</source> <extracomment>Embedded device screen resolution</extracomment> <translation>Greenphone (179 x 185)</translation> </message> <message> + <location line="+2"/> <source>High (192 x 192)</source> <extracomment>Embedded device high definition screen resolution</extracomment> <translatorcomment>"haute resolution" would be missleading</translatorcomment> @@ -601,72 +749,89 @@ <context> <name>Designer</name> <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+446"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> + <location line="+10"/> <source>This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form.</source> <translation>Ce fichier contient des ressorts de premier niveau. <br>Ils ne sont <b>PAS</b> sauvegardé dans le formulaire.</translation> </message> <message> + <location line="+2"/> <source>Perhaps you forgot to create a layout?</source> <translation>Peut-être avez-vous oublié de créer un layout ?</translation> </message> <message> + <location line="+173"/> <source>Invalid UI file: The root element <ui> is missing.</source> <translation>Fichier UI invalide. L'élément racine <ui> est manquant.</translation> </message> <message> + <location line="+6"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> - <translation>Une erreur est survenue lors de la lecture du fichier UI à la ligne %1, colonne %2: %3</translation> + <translation>Une erreur est survenue lors de la lecture du fichier UI à la ligne %1, colonne %2 : %3</translation> </message> <message> + <location line="+26"/> <source>This file cannot be read because it was created using %1.</source> <translation>Ce fichier ne peut pas être lu car il a été créé à l'aide de %1.</translation> </message> <message> + <location line="+14"/> <source>This file was created using Designer from Qt-%1 and cannot be read.</source> <translation>Ce fichier a été créé à l'aide du Designer de Qt-%1 et ne peut être lu.</translation> </message> <message> + <location line="+30"/> <source>The converted file could not be read.</source> <translation>Le fichier converti ne peut pas être lu.</translation> </message> <message> + <location line="+4"/> <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source> <translation>Ce fichier a été créé par le Designer de Qt-%1 et sera converti au nouveau format par Qt Designer.</translation> </message> <message> + <location line="+3"/> <source>The old form has not been touched, but you will have to save the form under a new name.</source> <translation>L'ancienne interface n'a pas été modifiée, vous devez sauvergarder l'interface sous un nouveau nom.</translation> </message> <message> + <location line="+11"/> <source>This file was created using Designer from Qt-%1 and could not be read: %2</source> <translation>Le fichier a été créé à l'aide de Designer de Qt-%1 et ne peut pas être lu : %2</translation> </message> <message> + <location line="+3"/> <source>Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format.</source> <translation>Veuillez le faire passer par <b>uic3&nbsp;-convert</b> pour le convertir au format de fichier de Qt 4.</translation> </message> <message> + <location line="+31"/> <source>This file cannot be read because the extra info extension failed to load.</source> <translation>Ce fichier ne peut pas être lu car les informations d'extension n'ont pu être chargées.</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="+682"/> <source>Unable to launch %1.</source> <translation>Impossible de lancer %1.</translation> </message> <message> + <location line="+4"/> <source>%1 timed out.</source> <translation>%1 est arrivé à échéance.</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="+339"/> <source>Custom Widgets</source> <translation>Widgets personnalisés</translation> </message> <message> + <location line="+12"/> <source>Promoted Widgets</source> <translation>Widgets promus</translation> </message> @@ -674,10 +839,12 @@ <context> <name>DesignerMetaEnum</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="-513"/> <source>%1 is not a valid enumeration value of '%2'.</source> <translation>%1 n'est pas une valeur d'énumeration valide de '%2'.</translation> </message> <message> + <location line="+5"/> <source>'%1' could not be converted to an enumeration value of type '%2'.</source> <translation>'%1' ne peut pas être converti en une valeur d'énumération de type '%2'.</translation> </message> @@ -685,6 +852,7 @@ <context> <name>DesignerMetaFlags</name> <message> + <location line="+78"/> <source>'%1' could not be converted to a flag value of type '%2'.</source> <translation>'%1' ne peut pas être converti en un drapeau de type '%2'.</translation> </message> @@ -692,11 +860,13 @@ <context> <name>DeviceProfile</name> <message> + <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="+397"/> <source>'%1' is not a number.</source> <extracomment>Reading a number for an embedded device profile</extracomment> <translation>'%1' n'est pas un nombre.</translation> </message> <message> + <location line="+23"/> <source>An invalid tag <%1> was encountered.</source> <translation>La balise invalide <%1> a été rencontré.</translation> </message> @@ -704,22 +874,27 @@ <context> <name>DeviceProfileDialog</name> <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui"/> <source>&Family</source> <translation>&Famille</translation> </message> <message> + <location/> <source>&Point Size</source> <translation>&Taille en points</translation> </message> <message> + <location/> <source>Style</source> <translation>Style</translation> </message> <message> + <location/> <source>Device DPI</source> <translation>PPP/DPI de l'appareil</translation> </message> <message> + <location/> <source>Name</source> <translation>Nom</translation> </message> @@ -727,46 +902,57 @@ <context> <name>DeviceSkin</name> <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="+79"/> <source>The image file '%1' could not be loaded.</source> <translation>Le fichier image '%1' n'a pas pu être chargé.</translation> </message> <message> + <location line="+64"/> <source>The skin directory '%1' does not contain a configuration file.</source> <translation>Le repertoire de revêtement '%1' ne contient pas un fichier de configuration.</translation> </message> <message> + <location line="+5"/> <source>The skin configuration file '%1' could not be opened.</source> <translation>Le fichier de configuration de revêtement '%1' ne peut pas être ouvert.</translation> </message> <message> + <location line="+6"/> <source>The skin configuration file '%1' could not be read: %2</source> - <translation>Le fichier de configuration de revêtement '%1' ne peut pas être lu: %2</translation> + <translation>Le fichier de configuration de revêtement '%1' ne peut pas être lu : %2</translation> </message> <message> + <location line="+70"/> <source>Syntax error: %1</source> <translation>Erreur de syntaxe : %1</translation> </message> <message> + <location line="+21"/> <source>The skin "up" image file '%1' does not exist.</source> <translation>Le fichier image "up" de revêtement '%1' n'existe pas.</translation> </message> <message> + <location line="+10"/> <source>The skin "down" image file '%1' does not exist.</source> <translation>Le fichier image "down" de revêtement '%1' n'existe pas.</translation> </message> <message> + <location line="+11"/> <source>The skin "closed" image file '%1' does not exist.</source> <translation>Le fichier image "closed" de revêtement '%1' n'existe pas.</translation> </message> <message> + <location line="+12"/> <source>The skin cursor image file '%1' does not exist.</source> <translation>Le fichier image de revêtement '%1' n'existe pas.</translation> </message> <message> + <location line="+25"/> <source>Syntax error in area definition: %1</source> <translation>Erreur de syntaxe dans la zone de définition : %1</translation> </message> <message> + <location line="+38"/> <source>Mismatch in number of areas, expected %1, got %2.</source> <translation>Incohérence dans le nombre de zones, %1 attendu, %2 reçu.</translation> </message> @@ -774,6 +960,7 @@ <context> <name>EmbeddedOptionsControl</name> <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="+307"/> <source><html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Resolution</b></td><td>%4 x %5</td></tr></table></html></source> <extracomment>Format embedded device profile description</extracomment> <translation><html><table><tr><td><b>Police</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Résolution</b></td><td>%4 x %5</td></tr></table></html></translation> @@ -782,11 +969,13 @@ <context> <name>EmbeddedOptionsPage</name> <message> + <location line="+103"/> <source>Embedded Design</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Design pour appareil mobile</translation> </message> <message> + <location line="+10"/> <source>Device Profiles</source> <extracomment>EmbeddedOptionsControl group box"</extracomment> <translation>Profils des appareils</translation> @@ -795,22 +984,27 @@ <context> <name>FontPanel</name> <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> <source>Font</source> <translation>Police</translation> </message> <message> + <location line="+11"/> <source>&Writing system</source> <translation>&Système d'écriture</translation> </message> <message> + <location line="+3"/> <source>&Family</source> <translation>&Famille</translation> </message> <message> + <location line="+4"/> <source>&Style</source> <translation>&Style</translation> </message> <message> + <location line="+4"/> <source>&Point size</source> <translation>&Taille en points</translation> </message> @@ -818,18 +1012,22 @@ <context> <name>FontPropertyManager</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="+62"/> <source>PreferDefault</source> <translation>PreferDefault</translation> </message> <message> + <location line="+1"/> <source>NoAntialias</source> <translation>NoAntialias</translation> </message> <message> + <location line="+1"/> <source>PreferAntialias</source> <translation>PreferAntialias</translation> </message> <message> + <location line="+61"/> <source>Antialiasing</source> <translation>Antialiasing</translation> </message> @@ -837,36 +1035,51 @@ <context> <name>FormBuilder</name> <message> + <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+375"/> <source>Invalid stretch value for '%1': '%2'</source> - <extracomment>Parsing layout stretch values</extracomment> + <extracomment>Parsing layout stretch values +---------- +Parsing layout stretch values +---------- +Parsing layout stretch values</extracomment> <translation>Valeur d'extension invalide pour '%1' : '%2'</translation> </message> <message> + <location line="+62"/> <source>Invalid minimum size for '%1': '%2'</source> - <extracomment>Parsing grid layout minimum size values</extracomment> + <extracomment>Parsing grid layout minimum size values +---------- +Parsing grid layout minimum size values +---------- +Parsing grid layout minimum size values</extracomment> <translation>Taille minimum invalide pour '%1' : '%2'</translation> </message> </context> <context> <name>FormEditorOptionsPage</name> <message> + <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="+91"/> <source>%1 %</source> <translation>%1 %</translation> </message> <message> + <location line="+4"/> <source>Preview Zoom</source> <translation>Zoom de visualisation</translation> </message> <message> + <location line="+2"/> <source>Default Zoom</source> <translation>Zoom par défaut</translation> </message> <message> + <location line="+29"/> <source>Forms</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Formulaires</translation> </message> <message> + <location line="+13"/> <source>Default Grid</source> <translation>Grille par défaut</translation> </message> @@ -874,31 +1087,38 @@ <context> <name>FormLayoutRowDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui"/> <source>Add Form Layout Row</source> <translation>Ajouter une ligne de mise en page au formulaire</translation> </message> <message> + <location/> <source>&Label text:</source> <translation>&Texte du label :</translation> </message> <message> + <location/> <source>Field &type:</source> <translation>&Type du champ :</translation> </message> <message> + <location/> <source>&Field name:</source> <translation>&Nom du champ :</translation> </message> <message> + <location/> <source>&Buddy:</source> <translatorcomment>copain c'est un peu beaucoup ptet</translatorcomment> <translation>&Copain :</translation> </message> <message> + <location/> <source>&Row:</source> <translation>&Ligne :</translation> </message> <message> + <location/> <source>Label &name:</source> <translation>&Nom du label :</translation> </message> @@ -906,10 +1126,12 @@ <context> <name>FormWindow</name> <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1754"/> <source>Unexpected element <%1></source> <translation>Element inattendu : <%1></translation> </message> <message> + <location line="+7"/> <source>Error while pasting clipboard contents at line %1, column %2: %3</source> <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation> </message> @@ -917,50 +1139,62 @@ <context> <name>FormWindowSettings</name> <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui"/> <source>Form Settings</source> <translation>Configuration du formulaire</translation> </message> <message> + <location/> <source>Layout &Default</source> <translation>Mise en page par &défaut</translation> </message> <message> + <location/> <source>&Spacing:</source> <translation>&Espacements :</translation> </message> <message> + <location/> <source>&Margin:</source> <translation>&Marge :</translation> </message> <message> + <location/> <source>&Layout Function</source> <translation>&Fonction de mise en page</translation> </message> <message> + <location/> <source>Ma&rgin:</source> <translation>Ma&rge :</translation> </message> <message> + <location/> <source>Spa&cing:</source> <translation>Espa&cement :</translation> </message> <message> + <location/> <source>&Pixmap Function</source> <translation>Fonction de &pixmap</translation> </message> <message> + <location/> <source>&Include Hints</source> <translation>Indication d'&include</translation> </message> <message> + <location/> <source>Grid</source> <translation>Grille</translation> </message> <message> + <location/> <source>Embedded Design</source> <translation>Design pour appareil mobile</translation> </message> <message> + <location/> <source>&Author</source> <translation>&Auteur</translation> </message> @@ -968,6 +1202,7 @@ <context> <name>IconSelector</name> <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="+352"/> <source>All Pixmaps (</source> <translation>Tous les pixmaps (</translation> </message> @@ -975,6 +1210,7 @@ <context> <name>ItemPropertyBrowser</name> <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+66"/> <source>XX Icon Selected off</source> <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment> <translation>XX Icon Selected off</translation> @@ -983,27 +1219,33 @@ <context> <name>MainWindowBase</name> <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+121"/> <source>Main</source> <extracomment>Not currently used (main tool bar)</extracomment> <translation>Principal</translation> </message> <message> + <location line="+6"/> <source>File</source> <translation>Fichier</translation> </message> <message> + <location line="+1"/> <source>Edit</source> <translation>Édition</translation> </message> <message> + <location line="+1"/> <source>Tools</source> <translation>Outils</translation> </message> <message> + <location line="+1"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> + <location line="+7"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> @@ -1011,42 +1253,52 @@ <context> <name>NewForm</name> <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="+78"/> <source>Show this Dialog on Startup</source> <translation>Afficher cette boîte de dialogue au démarrage</translation> </message> <message> + <location line="+1"/> <source>C&reate</source> <translation>C&réer</translation> </message> <message> + <location line="+1"/> <source>Recent</source> <translation>Récent</translation> </message> <message> + <location line="+3"/> <source>New Form</source> <translation>Nouveau formulaire</translation> </message> <message> + <location line="+29"/> <source>&Close</source> <translation>&Fermer</translation> </message> <message> + <location line="+3"/> <source>&Open...</source> <translation>&Ouvrir...</translation> </message> <message> + <location line="+4"/> <source>&Recent Forms</source> <translation>&Formulaires récents</translation> </message> <message> + <location line="+64"/> <source>Read error</source> <translation>Erreur de lecture</translation> </message> <message> + <location line="+23"/> <source>A temporary form file could not be created in %1.</source> <translation>Un fichier temporaire de formulaire n'a pas pu être créé dans %1.</translation> </message> <message> + <location line="+6"/> <source>The temporary form file %1 could not be written.</source> <translation>Le fichier temporaire de formulaire %1 n'a pas pu être écrit.</translation> </message> @@ -1054,18 +1306,22 @@ <context> <name>ObjectInspectorModel</name> <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="+360"/> <source>Object</source> <translation>Objet</translation> </message> <message> + <location line="+1"/> <source>Class</source> <translation>Classe</translation> </message> <message> + <location line="+35"/> <source>separator</source> <translation>séparateur</translation> </message> <message> + <location line="+98"/> <source><noname></source> <translation><sans nom></translation> </message> @@ -1073,10 +1329,12 @@ <context> <name>ObjectNameDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+158"/> <source>Change Object Name</source> <translation>Modifier le nom de l'objet</translation> </message> <message> + <location line="+4"/> <source>Object Name</source> <translation>Nom de l'objet</translation> </message> @@ -1084,10 +1342,12 @@ <context> <name>PluginDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.ui"/> <source>Plugin Information</source> <translation>Information du plugin</translation> </message> <message> + <location/> <source>1</source> <translation>1</translation> </message> @@ -1095,6 +1355,7 @@ <context> <name>PreferencesDialog</name> <message> + <location filename="../tools/designer/src/designer/preferencesdialog.ui"/> <source>Preferences</source> <translation>Préférences</translation> </message> @@ -1102,26 +1363,32 @@ <context> <name>PreviewConfigurationWidget</name> <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> + <location/> <source>Print/Preview Configuration</source> <translation>Configuration d'impression/prévisualisation</translation> </message> <message> + <location/> <source>Style</source> <translation>Style</translation> </message> <message> + <location/> <source>Style sheet</source> <translation>Feuille de style</translation> </message> <message> + <location/> <source>...</source> <translation>...</translation> </message> <message> + <location/> <source>Device skin</source> <translation>Revêtement de l'appareil</translation> </message> @@ -1129,6 +1396,7 @@ <context> <name>PromotionModel</name> <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+112"/> <source>Not used</source> <extracomment>Usage of promoted widgets</extracomment> <translation>Non utilisé</translation> @@ -1137,6 +1405,8 @@ <context> <name>Q3WizardContainer</name> <message> + <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="+172"/> + <location line="+5"/> <source>Page</source> <translation>Page</translation> </message> @@ -1144,48 +1414,59 @@ <context> <name>QAbstractFormBuilder</name> <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="+206"/> <source>Unexpected element <%1></source> <translation>Élément imprévu <%1></translation> </message> <message> + <location line="+5"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> <translation>Une erreur s'est produite lors de la lecture du fichier UI à la ligne %1, colonne %2 : %3</translation> </message> <message> + <location line="+6"/> <source>Invalid UI file: The root element <ui> is missing.</source> <translation>Fichier UI invalide : l'élément racine <ui> est manquant.</translation> </message> <message> + <location line="+104"/> <source>The creation of a widget of the class '%1' failed.</source> <translation>La création d'un widget de la classe '%1' a échoué.</translation> </message> <message> + <location line="+296"/> <source>Attempt to add child that is not of class QWizardPage to QWizard.</source> <translation>Tentative d'ajout d'enfant qui n'est pas de la classe QWizardPage à QWizard.</translation> </message> <message> + <location line="+86"/> <source>Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. This indicates an inconsistency in the ui-file.</source> <translation>Tentative d'ajout d'un layout au widget '%1' (%2) qui a déjà un layout dont le type n'est pas boîte %3. Ceci indique une incohérence dans le fichier ui.</translation> </message> <message> + <location line="+144"/> <source>Empty widget item in %1 '%2'.</source> <translation>Widget vide dans %1 '%2'.</translation> </message> <message> + <location line="+680"/> <source>Flags property are not supported yet.</source> <translation>Les propriétés de type drapeau ne sont pas supportées.</translation> </message> <message> + <location line="+81"/> <source>While applying tab stops: The widget '%1' could not be found.</source> <translation>Lors de l'application des arrêts de tabulation : le widget '%1' ne peut pas être trouvé.</translation> </message> <message> + <location line="+923"/> <source>Invalid QButtonGroup reference '%1' referenced by '%2'.</source> <translation>Référence invalide '%1' à QButtonGroup, référencé par '%2'.</translation> </message> <message> + <location line="+511"/> <source>This version of the uitools library is linked without script support.</source> <translation>Cette version de la bibliothèque uitools n'a pas le support des scripts.</translation> </message> @@ -1193,10 +1474,12 @@ Ceci indique une incohérence dans le fichier ui.</translation> <context> <name>QAxWidgetPlugin</name> <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="+75"/> <source>ActiveX control</source> <translation>Control ActiveX</translation> </message> <message> + <location line="+5"/> <source>ActiveX control widget</source> <translation>Widget control ActiveX</translation> </message> @@ -1204,18 +1487,22 @@ Ceci indique une incohérence dans le fichier ui.</translation> <context> <name>QAxWidgetTaskMenu</name> <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="+119"/> <source>Set Control</source> <translation>Définir le contrôle</translation> </message> <message> + <location line="+1"/> <source>Reset Control</source> <translation>Réinitialiser le contrôle</translation> </message> <message> + <location line="+41"/> <source>Licensed Control</source> <translation>Contrôle licencié</translation> </message> <message> + <location line="+1"/> <source>The control requires a design-time license</source> <translation>Le contrôle requiert une license par interface</translation> </message> @@ -1223,54 +1510,67 @@ Ceci indique une incohérence dans le fichier ui.</translation> <context> <name>QCoreApplication</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="+83"/> <source>%1 is not a promoted class.</source> <translation>%1 n'est pas une classe promue.</translation> </message> <message> + <location line="+65"/> <source>The base class %1 is invalid.</source> <translation>La classe de base %1 est invalide.</translation> </message> <message> + <location line="+7"/> <source>The class %1 already exists.</source> <translation>La classe %1 existe déjà.</translation> </message> <message> + <location line="+9"/> <source>Promoted Widgets</source> <translation>Widgets promus</translation> </message> <message> + <location line="+126"/> <source>The class %1 cannot be removed</source> <translation>La classe %1 ne peut pas être retirée</translation> </message> <message> + <location line="+9"/> <source>The class %1 cannot be removed because it is still referenced.</source> <translation>La classe %1 ne peut pas être retirée car elle est toujours référencée.</translation> </message> <message> + <location line="+10"/> <source>The class %1 cannot be renamed</source> <translation>La classe %1 ne peut pas être renommée</translation> </message> <message> + <location line="+7"/> <source>The class %1 cannot be renamed to an empty name.</source> <translation>La classe %1 ne peut pas être renommé avec un nom vide.</translation> </message> <message> + <location line="+5"/> <source>There is already a class named %1.</source> <translation>Une classe existe déjà avec le nom %1.</translation> </message> <message> + <location line="+29"/> <source>Cannot set an empty include file.</source> <translation>Impossible de créer un fichier include vide.</translation> </message> <message> + <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="+88"/> <source>Exception at line %1: %2</source> <translation>Exception à la ligne %1 : %2</translation> </message> <message> + <location line="+36"/> <source>Unknown error</source> <translation>Erreur inconnue</translation> </message> <message> + <location line="+50"/> <source>An error occurred while running the script for %1: %2 Script: %3</source> <translation>Une erreur s'est produite lors de l'exécution du script de %1 : %2 @@ -1280,14 +1580,17 @@ Script : %3</translation> <context> <name>QDesigner</name> <message> + <location filename="../tools/designer/src/designer/qdesigner.cpp" line="+141"/> <source>%1 - warning</source> <translation>Avertissement - %1</translation> </message> <message> + <location line="+96"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> + <location line="+1"/> <source>This application cannot be used for the Console edition of Qt</source> <translation>Cette application ne peut pas être utilisée avec l'édition console de Qt</translation> </message> @@ -1295,178 +1598,228 @@ Script : %3</translation> <context> <name>QDesignerActions</name> <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+130"/> <source>Saved %1.</source> <translation>%1 sauvé.</translation> </message> <message> + <location line="+26"/> <source>%1 already exists. Do you want to replace it?</source> <translation>%1 existe déjà. Voulez-vous le remplacer ?</translation> </message> <message> + <location line="+24"/> <source>Edit Widgets</source> <translation>Éditer les widgets</translation> </message> <message> + <location line="+1"/> <source>&New...</source> <translation>&Nouveau...</translation> </message> <message> + <location line="+1"/> <source>&Open...</source> <translation>&Ouvrir...</translation> </message> <message> + <location line="+1"/> <source>&Save</source> <translation>&Enregistrer</translation> </message> <message> + <location line="+1"/> <source>Save &As...</source> <translation>Enregistrer &sous...</translation> </message> <message> + <location line="+1"/> <source>Save A&ll</source> <translation>Enregistrer &tout</translation> </message> <message> + <location line="+1"/> <source>Save As &Template...</source> <translation>Sauver comme &modèle...</translation> </message> <message> + <location line="+1"/> + <location line="+925"/> <source>&Close</source> <translation>&Fermer</translation> </message> <message> + <location line="-924"/> <source>Save &Image...</source> <translation>Enregistrer &image...</translation> </message> <message> + <location line="+1"/> <source>&Print...</source> <translation>Im&primer...</translation> </message> <message> + <location line="+1"/> <source>&Quit</source> <translation>&Quitter</translation> </message> <message> + <location line="+2"/> <source>View &Code...</source> <translation>&Visualizer le code...</translation> </message> <message> + <location line="+1"/> <source>&Minimize</source> <translation>&Minimiser</translation> </message> <message> + <location line="+2"/> <source>Bring All to Front</source> <translation>Amener tout au premier plan</translation> </message> <message> + <location line="+2"/> <source>Preferences...</source> <translation>Préférences...</translation> </message> <message> + <location line="+1"/> <source>Additional Fonts...</source> <translation>Polices additionnelles...</translation> </message> <message> + <location line="+72"/> <source>ALT+CTRL+S</source> <translation>ALT+CTRL+S</translation> </message> <message> + <location line="+2"/> <source>CTRL+SHIFT+S</source> <translation>CTRL+SHIFT+S</translation> </message> <message> + <location line="+127"/> <source>CTRL+R</source> <translation>CTRL+R</translation> </message> <message> + <location line="+18"/> <source>CTRL+M</source> <translation>CTRL+M</translation> </message> <message> + <location line="+31"/> <source>Qt Designer &Help</source> <translation>&Aide de Qt Designer</translation> </message> <message> + <location line="+7"/> <source>Current Widget Help</source> <translation>Aide du widget courant</translation> </message> <message> + <location line="+7"/> <source>What's New in Qt Designer?</source> <translation>Quoi de neuf dans Qt Designer ?</translation> </message> <message> + <location line="+7"/> <source>About Plugins</source> <translation>À propos des plugins</translation> </message> <message> + <location line="+6"/> + <location line="+601"/> <source>About Qt Designer</source> <translation>À propos de Qt Designer</translation> </message> <message> + <location line="-595"/> <source>About Qt</source> <translation>À propos de Qt</translation> </message> <message> + <location line="+38"/> <source>Clear &Menu</source> <translation>Réinitialiser le &menu</translation> </message> <message> + <location line="+6"/> <source>&Recent Forms</source> <translation>Formulaires &récents</translation> </message> <message> + <location line="+77"/> + <location line="+197"/> <source>Open Form</source> <translation>Ouvrir le formulaire</translation> </message> <message> + <location line="-196"/> + <location line="+37"/> + <location line="+160"/> <source>Designer UI files (*.%1);;All Files (*)</source> <translation>Fichier UI de Qt Designer (*.%1);;Tous les fichiers(*)</translation> </message> <message> + <location line="-160"/> + <location line="+248"/> <source>Save Form As</source> <translation>Enregistrer le formulaire sous</translation> </message> <message> + <location line="-161"/> <source>Designer</source> <translation>Designer</translation> </message> <message> + <location line="+0"/> <source>Feature not implemented yet!</source> <translation>Cette fonctionnalité n'est pas encore implémentée !</translation> </message> <message> + <location line="+15"/> <source>Code generation failed</source> <translation>La génération du code à échoué</translation> </message> <message> + <location line="+44"/> <source>Read error</source> <translation>Erreur de lecture</translation> </message> <message> + <location line="+1"/> <source>%1 Do you want to update the file location or generate a new form?</source> <translation>%1 Voulez vous mettre à jour l'emplacement du fichier ou générer un nouveau formulaire ?</translation> </message> <message> + <location line="+3"/> <source>&Update</source> <translation>&Mettre à jour</translation> </message> <message> + <location line="+1"/> <source>&New Form</source> <translation>&Nouveau formulaire</translation> </message> <message> + <location line="+77"/> + <location line="+40"/> <source>Save Form?</source> <translation>Sauver le formulaire ?</translation> </message> <message> + <location line="-39"/> <source>Could not open file</source> <translation>Impossible d'ouvrir le fichier</translation> </message> <message> + <location line="+4"/> <source>The file %1 could not be opened. Reason: %2 Would you like to retry or select a different file?</source> @@ -1475,14 +1828,17 @@ Raison : %2 Voulez-vous réessayer ou sélectionner un fichier différent ?</translation> </message> <message> + <location line="+6"/> <source>Select New File</source> <translation>Sélectionner un nouveau fichier</translation> </message> <message> + <location line="+30"/> <source>Could not write file</source> <translation>Impossible d'écrire le fichier</translation> </message> <message> + <location line="+3"/> <source>It was not possible to write the entire file %1 to disk. Reason:%2 Would you like to retry?</source> @@ -1491,50 +1847,65 @@ Raison : %2 Voulez-vous réessayer ?</translation> </message> <message> + <location line="+158"/> + <location line="+34"/> <source>Assistant</source> <translation>Assistant</translation> </message> <message> + <location line="+6"/> <source>&Close Preview</source> <translation>&Fermer la prévisualisation</translation> </message> <message> + <location line="+41"/> + <location line="+23"/> <source>The backup file %1 could not be written.</source> <translation>Le fichier de backup %1 n'a pas pu être écrit.</translation> </message> <message> + <location line="+107"/> <source>The backup directory %1 could not be created.</source> <translation>Le dossier de backup %1 n'a pas pu être créé.</translation> </message> <message> + <location line="+6"/> <source>The temporary backup directory %1 could not be created.</source> <translation>Le dossier temporaire de backup %1 n'a pas pu être créé.</translation> </message> <message> + <location line="+30"/> <source>Preview failed</source> <translation>La prévisualisation a échoué</translation> </message> <message> + <location line="+24"/> <source>Image files (*.%1)</source> <translation>Fichiers image (*.%1)</translation> </message> <message> + <location line="+9"/> + <location line="+17"/> <source>Save Image</source> <translation>Sauver image</translation> </message> <message> + <location line="-4"/> <source>Saved image %1.</source> <translation>Image %1 sauvée.</translation> </message> <message> + <location line="+5"/> <source>The file %1 could not be written.</source> <translation>Le fichier %1 n'a pas pu être écrit.</translation> </message> <message> + <location line="+13"/> <source>Please close all forms to enable the loading of additional fonts.</source> <translation>Veuillez fermer tous les formulaires pour activer le chargement de polices additionnelles.</translation> </message> <message> + <location line="+52"/> <source>Printed %1.</source> <translation>Impression de %1 terminée.</translation> </message> @@ -1542,6 +1913,7 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerAppearanceOptionsPage</name> <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="+138"/> <source>Appearance</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Apparence</translation> @@ -1550,14 +1922,17 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerAppearanceOptionsWidget</name> <message> + <location line="-53"/> <source>Docked Window</source> <translation>Fenêtre ancrable</translation> </message> <message> + <location line="+1"/> <source>Multiple Top-Level Windows</source> <translation>Fenêtres multiples</translation> </message> <message> + <location line="+5"/> <source>Toolwindow Font</source> <translation>Police des fenêtre d'outils</translation> </message> @@ -1565,18 +1940,22 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerAxWidget</name> <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="-71"/> <source>Reset control</source> <translation>Réinitialiser les contrôles</translation> </message> <message> + <location line="+2"/> <source>Set control</source> <translation>Définir les contrôles</translation> </message> <message> + <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="+179"/> <source>Control loaded</source> <translation>Contrôle chargé</translation> </message> <message> + <location line="+40"/> <source>A COM exception occurred when executing a meta call of type %1, index %2 of "%3".</source> <translation>Une exception COM a été levée lors de l'execution du meta-appel de type %1, indice %2 de "%3".</translation> </message> @@ -1584,14 +1963,17 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerFormBuilder</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="+89"/> <source>Script errors occurred:</source> <translation>Erreurs du script :</translation> </message> <message> + <location line="+307"/> <source>The preview failed to build.</source> <translation>La construction de la prévisualisation a échoué.</translation> </message> <message> + <location line="+65"/> <source>Designer</source> <translation>Designer</translation> </message> @@ -1599,18 +1981,22 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerFormWindow</name> <message> + <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="+217"/> <source>%1 - %2[*]</source> <translation>%1 - %2[*]</translation> </message> <message> + <location line="+10"/> <source>Save Form?</source> <translation>Enregistrer le formulaire ?</translation> </message> <message> + <location line="+1"/> <source>Do you want to save the changes to this document before closing?</source> <translation>Voulez-vous enregistrer les changements de ce document avant de le fermer ?</translation> </message> <message> + <location line="+2"/> <source>If you don't save, your changes will be lost.</source> <translation>Si vous ne sauvegardez pas, les changements seront perdus.</translation> </message> @@ -1618,30 +2004,38 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerMenu</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1180"/> <source>Type Here</source> <translation>Taper ici</translation> </message> <message> + <location line="+3"/> <source>Add Separator</source> <translation>Ajouter séparateur</translation> </message> <message> + <location line="+371"/> <source>Insert separator</source> <translation>Insérer séparateur</translation> </message> <message> + <location line="+5"/> <source>Remove separator</source> <translation>Retirer séparateur</translation> </message> <message> + <location line="+2"/> <source>Remove action '%1'</source> <translation>Supprimer l'action '%1'</translation> </message> <message> + <location line="+25"/> + <location line="+649"/> <source>Add separator</source> <translation>Ajouter séparateur</translation> </message> <message> + <location line="-349"/> <source>Insert action</source> <translation>Insérer action</translation> </message> @@ -1649,18 +2043,22 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerMenuBar</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-375"/> <source>Type Here</source> <translation>Taper ici</translation> </message> <message> + <location line="+298"/> <source>Remove Menu '%1'</source> <translation>Supprimer menu '%1'</translation> </message> <message> + <location line="+12"/> <source>Remove Menu Bar</source> <translation>Supprimer barre de menu</translation> </message> <message> + <location line="+70"/> <source>Menu</source> <translation>Menu</translation> </message> @@ -1668,30 +2066,37 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerPluginManager</name> <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="+271"/> <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source> <translation>Une erreur XML a été rencontrée lors de l'analyse grammaticale du XML provenant du widget personnalisé %1 : %2</translation> </message> <message> + <location line="+5"/> <source>A required attribute ('%1') is missing.</source> <translation>Un attribut obligatoire ('%1') est manquant.</translation> </message> <message> + <location line="+38"/> <source>An invalid property specification ('%1') was encountered. Supported types: %2</source> <translation>Une spécification invalide de propriété ('%1') a été rencontrée. Types supportés : %2</translation> </message> <message> + <location line="+20"/> <source>'%1' is not a valid string property specification.</source> <translation>'%1' n'est pas une spécification valide de propriété chaîne de caractères.</translation> </message> <message> + <location line="+40"/> <source>The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>.</source> <translation>Le XML du widget personnalisé %1 ne contient aucun des éléments <widget> ou <ui>.</translation> </message> <message> + <location line="+12"/> <source>The class attribute for the class %1 is missing.</source> <translation>L'attribut de classe est manquant pour la classe %1.</translation> </message> <message> + <location line="+4"/> <source>The class attribute for the class %1 does not match the class name %2.</source> <translation>L'attribut de classe pour la classe %1 ne correspond pas au nom de la classe %2.</translation> </message> @@ -1699,6 +2104,7 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerPropertySheet</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+762"/> <source>Dynamic Properties</source> <translation>Propriétés dynamiques</translation> </message> @@ -1706,26 +2112,31 @@ Voulez-vous réessayer ?</translation> <context> <name>QDesignerResource</name> <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+461"/> <source>The layout type '%1' is not supported, defaulting to grid.</source> <translation>Le type de layout '%1' n'est pas supporté, replacement par une grille.</translation> </message> <message> + <location line="+239"/> <source>The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source> <translation>L'extension du widget '%1' (%2) a retourné un widget non géré par Designer '%3' (%4) lors de la requête pour la page #%5. Les pages du conteneur ne devraient être ajoutées que par spécification dans le XML retourné par la méthode domXml() du widget personnalisé.</translation> </message> <message> + <location line="+545"/> <source>Unexpected element <%1></source> <extracomment>Parsing clipboard contents</extracomment> <translation>Élément inattendu <%1></translation> </message> <message> + <location line="+6"/> <source>Error while pasting clipboard contents at line %1, column %2: %3</source> <extracomment>Parsing clipboard contents</extracomment> <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation> </message> <message> + <location line="+6"/> <source>Error while pasting clipboard contents: The root element <ui> is missing.</source> <extracomment>Parsing clipboard contents</extracomment> <translation>Erreur lors du collage du contenu du presse-papier. L'élément racine <ui> est manquant.</translation> @@ -1734,10 +2145,12 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QDesignerSharedSettings</name> <message> + <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="+83"/> <source>The template path %1 could not be created.</source> <translation>Le chemin du modèle %1 n'a pas pu être créé.</translation> </message> <message> + <location line="+184"/> <source>An error has been encountered while parsing device profile XML: %1</source> <translation>Une erreur a été rencontrée lors de l'analyse grammaticale du XML du profil de l'appareil : %1</translation> </message> @@ -1745,27 +2158,33 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QDesignerToolWindow</name> <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="+190"/> <source>Property Editor</source> <translation>Éditeur de propriétés</translation> </message> <message> + <location line="+54"/> <source>Action Editor</source> <translation>Éditeur d'actions</translation> </message> <message> + <location line="+42"/> <source>Object Inspector</source> <translation>Inspecteur d'objet</translation> </message> <message> + <location line="+35"/> <source>Resource Browser</source> <translatorcomment>plural</translatorcomment> <translation>Explorateur de ressources</translation> </message> <message> + <location line="+34"/> <source>Signal/Slot Editor</source> <translation>Éditeur de signaux et slots</translation> </message> <message> + <location line="+41"/> <source>Widget Box</source> <translation>Boîte de widget</translation> </message> @@ -1773,50 +2192,62 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QDesignerWorkbench</name> <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="+199"/> <source>&File</source> <translation>&Fichier</translation> </message> <message> + <location line="+2"/> <source>Edit</source> <translation>Édition</translation> </message> <message> + <location line="+4"/> <source>F&orm</source> <translation>F&ormulaire</translation> </message> <message> + <location line="+1"/> <source>Preview in</source> <translation>Prévisualisation avec</translation> </message> <message> + <location line="+4"/> <source>&View</source> <translation>Afficha&ge</translation> </message> <message> + <location line="+2"/> <source>&Settings</source> <translation>&Configuration</translation> </message> <message> + <location line="+2"/> <source>&Window</source> <translation>Fe&nêtre</translation> </message> <message> + <location line="+2"/> <source>&Help</source> <translation>&Aide</translation> </message> <message> + <location line="+23"/> <source>Toolbars</source> <translation>Barre d'outils</translation> </message> <message> + <location line="+177"/> <source>Widget Box</source> <translation>Boîte de widget</translation> </message> <message> + <location line="+289"/> <source>Save Forms?</source> <translation>Enregistrer les formulaires ?</translation> </message> <message numerus="yes"> + <location line="+1"/> <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source> <translation> <numerusform>Il y a %n formulaire avec des changements non-enregistrés. Voulez-vous vérifier les changements avant de quitter?</numerusform> @@ -1824,30 +2255,37 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans </translation> </message> <message> + <location line="+3"/> <source>If you do not review your documents, all your changes will be lost.</source> <translation>Si vous ne vérifiez pas vos documents, tous les changements seront perdus.</translation> </message> <message> + <location line="+1"/> <source>Discard Changes</source> <translation>Abandonner les changements</translation> </message> <message> + <location line="+2"/> <source>Review Changes</source> <translation>Vérifier les changements</translation> </message> <message> + <location line="+95"/> <source>Backup Information</source> <translation>Informations de sauvegarde</translation> </message> <message> + <location line="+1"/> <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source> <translation>La dernière session de Designer n'a pas été fermée correctement. Des fichiers de sauvegarde existent. Voulez-vous les charger ?</translation> </message> <message> + <location line="+111"/> <source>The file <b>%1</b> could not be opened.</source> <translation>Le fichier <b>%1</b> n'a pas pu être ouvert.</translation> </message> <message> + <location line="+46"/> <source>The file <b>%1</b> is not a valid Designer UI file.</source> <translation>Le fichier <b>%1</b> n'est pas un fichier valide d'UI de Designer.</translation> </message> @@ -1855,43 +2293,57 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QFormBuilder</name> <message> + <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+168"/> <source>An empty class name was passed on to %1 (object name: '%2').</source> - <extracomment>Empty class name passed to widget factory method</extracomment> + <extracomment>Empty class name passed to widget factory method +---------- +Empty class name passed to widget factory method +---------- +Empty class name passed to widget factory method</extracomment> <translation>Un nom de classe vide a été passé à %1 (nom d'objet '%2').</translation> </message> <message> + <location line="+56"/> <source>QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.</source> <translation>QFormBuilder n'a pas pu créer le widget personnalisé de classe '%1'; passage à la classe de base '%2'.</translation> </message> <message> + <location line="+6"/> <source>QFormBuilder was unable to create a widget of the class '%1'.</source> <translation>QFormBuilder n'a pas pu créer un widget de classe '%1'.</translation> </message> <message> + <location line="+61"/> <source>The layout type `%1' is not supported.</source> <translation>Le type de layout '%1' n'est pas supporté.</translation> </message> <message> + <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="+106"/> <source>The set-type property %1 could not be read.</source> <translation>Le type du setteur de propriété %1 n'a pas pu être lu.</translation> </message> <message> + <location line="+23"/> <source>The enumeration-type property %1 could not be read.</source> <translation>Le type d'énumeration de propriété %1 n'a pas pu être lu.</translation> </message> <message> + <location line="+190"/> <source>Reading properties of the type %1 is not supported yet.</source> <translation>La lecture des propriétés de type %1 n'est pas supporté.</translation> </message> <message> + <location line="+266"/> <source>The property %1 could not be written. The type %2 is not supported yet.</source> <translation>La propriété %1 ne peut pas être écrite. Le type %2 n'est pas encore supporté.</translation> </message> <message> + <location filename="../tools/designer/src/lib/uilib/properties_p.h" line="+132"/> <source>The enumeration-value '%1' is invalid. The default value '%2' will be used instead.</source> <translation>la valeur d'énumération '%1' est invalide. La valeur par défaut '%2' sera utilisée à la place.</translation> </message> <message> + <location line="+14"/> <source>The flag-value '%1' is invalid. Zero will be used instead.</source> <translation>Le drapeau '%1' est invalide. Zero sera utilisé à la place.</translation> </message> @@ -1899,38 +2351,48 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QStackedWidgetEventFilter</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="+194"/> <source>Previous Page</source> <translation>Page précédente</translation> </message> <message> + <location line="+1"/> <source>Next Page</source> <translation>Page suivante</translation> </message> <message> + <location line="+1"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> + <location line="+1"/> <source>Before Current Page</source> <translation>Avant la page courante</translation> </message> <message> + <location line="+1"/> <source>After Current Page</source> <translation>Après la page courante</translation> </message> <message> + <location line="+1"/> <source>Change Page Order...</source> <translation>Modifier l'ordre des pages...</translation> </message> <message> + <location line="+72"/> <source>Change Page Order</source> <translation>Modifier l'ordre des pages</translation> </message> <message> + <location line="+49"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> <message> + <location line="+10"/> + <location line="+4"/> <source>Insert Page</source> <translation>Insérer page</translation> </message> @@ -1938,10 +2400,12 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QStackedWidgetPreviewEventFilter</name> <message> + <location line="-153"/> <source>Go to previous page of %1 '%2' (%3/%4).</source> <translation>Aller à la page précédente de %1 '%2' (%3/%4).</translation> </message> <message> + <location line="+4"/> <source>Go to next page of %1 '%2' (%3/%4).</source> <translation>Aller à la page suivante de %1 '%2' (%3/%4).</translation> </message> @@ -1949,22 +2413,28 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QTabWidgetEventFilter</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="+89"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> + <location line="+1"/> <source>Before Current Page</source> <translation>Avant la page courante</translation> </message> <message> + <location line="+1"/> <source>After Current Page</source> <translation>Après la page courante</translation> </message> <message> + <location line="+283"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> <message> + <location line="+10"/> + <location line="+4"/> <source>Insert Page</source> <translation>Insérer page</translation> </message> @@ -1972,30 +2442,37 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QToolBoxHelper</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="+64"/> <source>Delete Page</source> <translation>Supprimer page</translation> </message> <message> + <location line="+1"/> <source>Before Current Page</source> <translation>Avant la page courante</translation> </message> <message> + <location line="+1"/> <source>After Current Page</source> <translation>Après la page courante</translation> </message> <message> + <location line="+1"/> <source>Change Page Order...</source> <translation>Modifier l'ordre des pages...</translation> </message> <message> + <location line="+116"/> <source>Change Page Order</source> <translation>Modifier l'ordre de pages</translation> </message> <message> + <location line="+44"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> <message> + <location line="+12"/> <source>Insert Page</source> <translation>Insérer page</translation> </message> @@ -2003,10 +2480,15 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtBoolEdit</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+255"/> + <location line="+10"/> + <location line="+25"/> <source>True</source> <translation>Vrai</translation> </message> <message> + <location line="-25"/> + <location line="+25"/> <source>False</source> <translation>Faux</translation> </message> @@ -2014,10 +2496,12 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtBoolPropertyManager</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1507"/> <source>True</source> <translation>Vrai</translation> </message> <message> + <location line="+1"/> <source>False</source> <translation>Faux</translation> </message> @@ -2025,6 +2509,7 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtCharEdit</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1584"/> <source>Clear Char</source> <translation>Effacer caractère</translation> </message> @@ -2032,6 +2517,7 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtColorEditWidget</name> <message> + <location line="+605"/> <source>...</source> <translation>...</translation> </message> @@ -2039,18 +2525,22 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtColorPropertyManager</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4718"/> <source>Red</source> <translation>Rouge</translation> </message> <message> + <location line="+8"/> <source>Green</source> <translation>Vert</translation> </message> <message> + <location line="+8"/> <source>Blue</source> <translation>Bleu</translation> </message> <message> + <location line="+8"/> <source>Alpha</source> <translation>Alpha</translation> </message> @@ -2058,78 +2548,97 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtCursorDatabase</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-234"/> <source>Arrow</source> <translation>Flèche</translation> </message> <message> + <location line="+2"/> <source>Up Arrow</source> <translation>Flèche vers le haut</translation> </message> <message> + <location line="+2"/> <source>Cross</source> <translation>Croix</translation> </message> <message> + <location line="+2"/> <source>Wait</source> <translation>Attendre</translation> </message> <message> + <location line="+2"/> <source>IBeam</source> <translation>IBeam</translation> </message> <message> + <location line="+2"/> <source>Size Vertical</source> <translation>Redimensionner verticalement</translation> </message> <message> + <location line="+2"/> <source>Size Horizontal</source> <translation>Redimensionner horizontalement</translation> </message> <message> + <location line="+2"/> <source>Size Backslash</source> <translation>Redimensionner diagonale droite</translation> </message> <message> + <location line="+2"/> <source>Size Slash</source> <translation>Redimensionner diagonale gauche</translation> </message> <message> + <location line="+2"/> <source>Size All</source> <translation>Redimensionner</translation> </message> <message> + <location line="+2"/> <source>Blank</source> <translation>Vide</translation> </message> <message> + <location line="+2"/> <source>Split Vertical</source> <translation>Scinder verticalement</translation> </message> <message> + <location line="+2"/> <source>Split Horizontal</source> <translation>Scinder horizontalement</translation> </message> <message> + <location line="+2"/> <source>Pointing Hand</source> <translation>Pointeur index</translation> </message> <message> + <location line="+2"/> <source>Forbidden</source> <translation>Interdit</translation> </message> <message> + <location line="+2"/> <source>Open Hand</source> <translation>Main ouverte</translation> </message> <message> + <location line="+2"/> <source>Closed Hand</source> <translation>Main fermée</translation> </message> <message> + <location line="+2"/> <source>What's This</source> <translation>Qu'est-ce que c'est ?</translation> </message> <message> + <location line="+2"/> <source>Busy</source> <translation>Occupé</translation> </message> @@ -2137,10 +2646,12 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtFontEditWidget</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+198"/> <source>...</source> <translation>...</translation> </message> <message> + <location line="+20"/> <source>Select Font</source> <translation>Selectionner police</translation> </message> @@ -2148,30 +2659,37 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtFontPropertyManager</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-351"/> <source>Family</source> <translation>Famille</translation> </message> <message> + <location line="+13"/> <source>Point Size</source> <translation>Taille en points</translation> </message> <message> + <location line="+8"/> <source>Bold</source> <translation>Gras</translation> </message> <message> + <location line="+7"/> <source>Italic</source> <translation>Italique</translation> </message> <message> + <location line="+7"/> <source>Underline</source> <translation>Souligné</translation> </message> <message> + <location line="+7"/> <source>Strikeout</source> <translation>Barré</translation> </message> <message> + <location line="+7"/> <source>Kerning</source> <translation>Crénage</translation> </message> @@ -2179,6 +2697,7 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientDialog</name> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui"/> <source>Edit Gradient</source> <translation>Modifier le gradient</translation> </message> @@ -2186,242 +2705,304 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientEditor</name> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> + <location/> <source>Gradient Editor</source> <translation>Éditeur de gradient</translation> </message> <message> + <location/> <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop.</source> <translation>Cette zone montre une prévisualisation du gradient édité. Elle permet aussi d'éditer les paramètres spécifiques au type de gradient tel que les points de départ et d'arrivée, le rayon, etc. par glisser-déposer.</translation> </message> <message> + <location/> <source>1</source> <translation>1</translation> </message> <message> + <location/> <source>2</source> <translation>2</translation> </message> <message> + <location/> <source>3</source> <translation>3</translation> </message> <message> + <location/> <source>4</source> <translation>4</translation> </message> <message> + <location/> <source>5</source> <translation>5</translation> </message> <message> + <location/> <source>Gradient Stops Editor</source> <translation>Éditeur de point d'arrêt du gradient</translation> </message> <message> + <location/> <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source> <translation>Cette zone vous permet d'éditer les points d'arrêt du gardient. Double-cliquez sur un point d'arrêt existant pour le dupliquer. Double-cliquez à l'exterieur d'un point d'arrêt pour en créer un nouveau. Glissez-déposez un point pour le repositionner. Utilisez le bouton droit de la souris pour afficher le menu contextuel avec des actions supplémentaires.</translation> </message> <message> + <location/> <source>Zoom</source> <translation>Zoom</translation> </message> <message> + <location/> <source>Reset Zoom</source> <translation>Réinitialiser le zoom</translation> </message> <message> + <location/> <source>Position</source> <translation>Position</translation> </message> <message> + <location/> <source>Hue</source> <translation>Teinte</translation> </message> <message> + <location/> <source>H</source> <translation>T</translation> </message> <message> + <location/> <source>Saturation</source> <translation>Saturation</translation> </message> <message> + <location/> <source>S</source> <translation>S</translation> </message> <message> + <location/> <source>Sat</source> <translation>Sat</translation> </message> <message> + <location/> <source>Value</source> <translation>Valeur</translation> </message> <message> + <location/> <source>V</source> <translation>V</translation> </message> <message> + <location/> <source>Val</source> <translation>Val</translation> </message> <message> + <location/> <source>Alpha</source> <translation>Alpha</translation> </message> <message> + <location/> <source>A</source> <translation>A</translation> </message> <message> + <location/> <source>Type</source> <translation>Type</translation> </message> <message> + <location/> <source>Spread</source> <translation>Étendue</translation> </message> <message> + <location/> <source>Color</source> <translation>Couleur</translation> </message> <message> + <location/> <source>Current stop's color</source> <translation>Couleur du point d'arrêt courant</translation> </message> <message> + <location/> <source>Show HSV specification</source> <translation>Montrer les spécifications TSV/HSV</translation> </message> <message> + <location/> <source>HSV</source> <translation>TSV/HSV</translation> </message> <message> + <location/> <source>Show RGB specification</source> <translation>Affichier les spécifications RGB</translation> </message> <message> + <location/> <source>RGB</source> <translation>RGB</translation> </message> <message> + <location/> <source>Current stop's position</source> <translation>Position du point d'arrêt courant</translation> </message> <message> + <location/> <source>%</source> <translation>%</translation> </message> <message> + <location/> <source>Zoom In</source> <translation>Zoomer</translation> </message> <message> + <location/> <source>Zoom Out</source> <translation>Dézoomer</translation> </message> <message> + <location/> <source>Toggle details extension</source> <translation>Inverser les détails d'exention</translation> </message> <message> + <location/> <source>></source> <translation>></translation> </message> <message> + <location/> <source>Linear Type</source> <translation>Type linéaire</translation> </message> <message> + <location/> <source>...</source> <translation>...</translation> </message> <message> + <location/> <source>Radial Type</source> <translation>Type radial</translation> </message> <message> + <location/> <source>Conical Type</source> <translation>Type conique</translation> </message> <message> + <location/> <source>Pad Spread</source> <translation>Étendue par remplissage</translation> </message> <message> + <location/> <source>Repeat Spread</source> <translation>Étendue par répétition</translation> </message> <message> + <location/> <source>Reflect Spread</source> <translation>Étendue par réflexion</translation> </message> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="+431"/> <source>Start X</source> <translation>X de départ</translation> </message> <message> + <location line="+4"/> <source>Start Y</source> <translation>Y de départ</translation> </message> <message> + <location line="+4"/> <source>Final X</source> <translation>X de fin</translation> </message> <message> + <location line="+4"/> <source>Final Y</source> <translation>Y de fin</translation> </message> <message> + <location line="+7"/> + <location line="+24"/> <source>Central X</source> <translation>X central</translation> </message> <message> + <location line="-20"/> + <location line="+24"/> <source>Central Y</source> <translation>Y central</translation> </message> <message> + <location line="-20"/> <source>Focal X</source> <translation>X focal</translation> </message> <message> + <location line="+4"/> <source>Focal Y</source> <translation>Y focal</translation> </message> <message> + <location line="+4"/> <source>Radius</source> <translation>Rayon</translation> </message> <message> + <location line="+16"/> <source>Angle</source> <translation>Angle</translation> </message> <message> + <location line="+288"/> <source>Linear</source> <translation>Linéaire</translation> </message> <message> + <location line="+1"/> <source>Radial</source> <translation>Radial</translation> </message> <message> + <location line="+1"/> <source>Conical</source> <translation>Conique</translation> </message> <message> + <location line="+20"/> <source>Pad</source> <translation>Remplissage</translation> </message> <message> + <location line="+1"/> <source>Repeat</source> <translation>Répéter</translation> </message> <message> + <location line="+1"/> <source>Reflect</source> <translation>Réflexion</translation> </message> @@ -2429,30 +3010,37 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientStopsWidget</name> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="+947"/> <source>New Stop</source> <translation>Nouveau point d'arrêt</translation> </message> <message> + <location line="+1"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> + <location line="+1"/> <source>Flip All</source> <translation>Tout renverser</translation> </message> <message> + <location line="+1"/> <source>Select All</source> <translation>Tout sélectionner</translation> </message> <message> + <location line="+1"/> <source>Zoom In</source> <translation>Zoomer</translation> </message> <message> + <location line="+1"/> <source>Zoom Out</source> <translation>Dézoomer</translation> </message> <message> + <location line="+1"/> <source>Reset Zoom</source> <translation>Réinitialiser le zoom</translation> </message> @@ -2460,34 +3048,46 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientView</name> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui"/> <source>Gradient View</source> <translation>Vue du gradient</translation> </message> <message> + <location/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+208"/> <source>New...</source> <translation>Nouveau...</translation> </message> <message> + <location/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Edit...</source> <translation>Éditer...</translation> </message> <message> + <location/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Rename</source> <translation>Renommer</translation> </message> <message> + <location/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Remove</source> <translation>Retirer</translation> </message> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="-104"/> <source>Grad</source> <translation>Gradient</translation> </message> <message> + <location line="+26"/> <source>Remove Gradient</source> <translation>Retirer gradient</translation> </message> <message> + <location line="+1"/> <source>Are you sure you want to remove the selected gradient?</source> <translation>Êtes-vous sûr de vouloir supprimer le gradient sélectionné ?</translation> </message> @@ -2495,6 +3095,8 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtGradientViewDialog</name> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.h" line="+62"/> <source>Select Gradient</source> <translation>Sélectionner gradient</translation> </message> @@ -2502,6 +3104,7 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtKeySequenceEdit</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+249"/> <source>Clear Shortcut</source> <translation>Effacer les racourcis</translation> </message> @@ -2509,14 +3112,17 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtLocalePropertyManager</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-3541"/> <source>%1, %2</source> <translation>%1, %2</translation> </message> <message> + <location line="+53"/> <source>Language</source> <translation>Langue</translation> </message> <message> + <location line="+8"/> <source>Country</source> <translation>Pays</translation> </message> @@ -2524,14 +3130,17 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtPointFPropertyManager</name> <message> + <location line="+411"/> <source>(%1, %2)</source> <translation>(%1, %2)</translation> </message> <message> + <location line="+71"/> <source>X</source> <translation>X</translation> </message> <message> + <location line="+8"/> <source>Y</source> <translation>Y</translation> </message> @@ -2539,14 +3148,17 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtPointPropertyManager</name> <message> + <location line="-320"/> <source>(%1, %2)</source> <translation>(%1, %2)</translation> </message> <message> + <location line="+37"/> <source>X</source> <translation>X</translation> </message> <message> + <location line="+7"/> <source>Y</source> <translation>Y</translation> </message> @@ -2554,10 +3166,12 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtPropertyBrowserUtils</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-156"/> <source>[%1, %2, %3] (%4)</source> <translation>[%1, %2, %3] (%4)</translation> </message> <message> + <location line="+30"/> <source>[%1, %2]</source> <translation>[%1, %2]</translation> </message> @@ -2565,22 +3179,27 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtRectFPropertyManager</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1706"/> <source>[(%1, %2), %3 x %4]</source> <translation>[(%1, %2), %3 x %4]</translation> </message> <message> + <location line="+156"/> <source>X</source> <translation>X</translation> </message> <message> + <location line="+8"/> <source>Y</source> <translation>Y</translation> </message> <message> + <location line="+8"/> <source>Width</source> <translation>Largeur</translation> </message> <message> + <location line="+9"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -2588,22 +3207,27 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtRectPropertyManager</name> <message> + <location line="-612"/> <source>[(%1, %2), %3 x %4]</source> <translation>[(%1, %2), %3 x %4]</translation> </message> <message> + <location line="+120"/> <source>X</source> <translation>X</translation> </message> <message> + <location line="+7"/> <source>Y</source> <translation>Y</translation> </message> <message> + <location line="+7"/> <source>Width</source> <translation>Largeur</translation> </message> <message> + <location line="+8"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -2611,134 +3235,173 @@ Les pages du conteneur ne devraient être ajoutées que par spécification dans <context> <name>QtResourceEditorDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui"/> <source>Dialog</source> <translation>Dialogue</translation> </message> <message> + <location/> <source>New File</source> <translation>Nouveau fichier</translation> </message> <message> + <location/> <source>N</source> <translation>N</translation> </message> <message> + <location/> <source>Remove File</source> <translation>Supprimer fichier</translation> </message> <message> + <location/> <source>R</source> <translation>S</translation> </message> <message> + <location/> <source>I</source> <translation></translation> </message> <message> + <location/> <source>New Resource</source> <translation>Nouvelle ressource</translation> </message> <message> + <location/> <source>A</source> <translation>A</translation> </message> <message> + <location/> <source>Remove Resource or File</source> <translation>Supprimer ressource ou fichier</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="+76"/> <source>%1 already exists. Do you want to replace it?</source> <translation>%1 existe déjà. Voulez-vous le remplacer ?</translation> </message> <message> + <location line="+5"/> <source>The file does not appear to be a resource file; element '%1' was found where '%2' was expected.</source> <translation>Le fichier n'est pas un fichier ressource; l'élément '%1' a été trouvé à la place de %2.</translation> </message> <message> + <location line="+902"/> <source>%1 [read-only]</source> <translation>%1 [lecture seule]</translation> </message> <message> + <location line="+2"/> + <location line="+198"/> <source>%1 [missing]</source> <translation>%1 [manquant]</translation> </message> <message> + <location line="-72"/> <source><no prefix></source> <translation><pas de préfixe></translation> </message> <message> + <location line="+320"/> + <location line="+566"/> <source>New Resource File</source> <translation>Nouveau fichier de ressource</translation> </message> <message> + <location line="-564"/> + <location line="+25"/> <source>Resource files (*.qrc)</source> <translation>Fichier de ressource (*.qrc)</translation> </message> <message> + <location line="-2"/> <source>Import Resource File</source> <translation>Importer fichier de ressource</translation> </message> <message> + <location line="+112"/> <source>newPrefix</source> <translation>newPrefix</translation> </message> <message> + <location line="+16"/> <source><p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p></source> <translation><p><b>Avertissement :</b> le fichier</p><p>%1</p><p>est en dehors du répertoire parent du fichier de ressource courant.</p></translation> </message> <message> + <location line="+8"/> <source><p>To resolve the issue, press:</p><table><tr><th align="left">Copy</th><td>to copy the file to the resource file's parent directory.</td></tr><tr><th align="left">Copy As...</th><td>to copy the file into a subdirectory of the resource file's parent directory.</td></tr><tr><th align="left">Keep</th><td>to use its current location.</td></tr></table></source> <translation><p>Pour résoudre le problème, appuyez sur :</p><table><tr><th align="left">Copier</th><td>Pour copier le fichier dans le répertoire parent du fichier de ressource.</td></tr><tr><th align="left">Copier sous...</th><td>Pour copier le fichier ressource dans un sous-répertoire du répertoire parent du fichier de ressource.</td></tr><tr><th align="left">Conserver</th><td>pour conserver l'emplacement courant.</td></tr></table></translation> </message> <message> + <location line="+25"/> <source>Add Files</source> <translation>Ajouter fichiers</translation> </message> <message> + <location line="+21"/> <source>Incorrect Path</source> <translation>Chemin incorrect</translation> </message> <message> + <location line="+3"/> + <location line="+19"/> + <location line="+212"/> + <location line="+7"/> <source>Copy</source> <translation>Copier</translation> </message> <message> + <location line="-236"/> <source>Copy As...</source> <translation>Copier sous...</translation> </message> <message> + <location line="+2"/> <source>Keep</source> <translation>Conserver</translation> </message> <message> + <location line="+2"/> <source>Skip</source> <translation>Passer</translation> </message> <message> + <location line="+87"/> <source>Clone Prefix</source> <translation>Cloner le préfixe</translation> </message> <message> + <location line="+1"/> <source>Enter the suffix which you want to add to the names of the cloned files. This could for example be a language extension like "_de".</source> <translation>Entrez le suffixe que vous voulez ajouter aux noms des fichiers clonés. Ceci peut être une extension de langue par exemple, comme "_fr'.</translation> </message> <message> + <location line="+113"/> + <location line="+4"/> <source>Copy As</source> <translation>Copier sous</translation> </message> <message> + <location line="+1"/> <source><p>The selected file:</p><p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p><p>Please select another path within this directory.<p></source> <translation><p>Le fichier sélectionné</p><p>%1</p><p>est en dehors du répertoire du fichier de ressource courant :</p><p>%2</p><p>Veuillez sélectionner un chemin dans le répertoire courant.</p></translation> </message> <message> + <location line="+20"/> <source>Could not overwrite %1.</source> <translation>Impossible d'écraser %1.</translation> </message> <message> + <location line="+7"/> <source>Could not copy %1 to @@ -2749,84 +3412,108 @@ vers %2</translation> </message> <message> + <location line="+35"/> <source>A parse error occurred at line %1, column %2 of %3: %4</source> <translation>Une erreur d'analyse grammaticale est apparue à la ligne %1, colonne %2 de %3 : %4</translation> </message> <message> + <location line="+12"/> <source>Save Resource File</source> <translation>Enregistrer le fichier de ressource</translation> </message> <message> + <location line="+1"/> <source>Could not write %1: %2</source> <translation>Impossible d'écrire %1 : %2</translation> </message> <message> + <location line="+33"/> <source>Edit Resources</source> <translation>Éditer les ressources</translation> </message> <message> + <location line="+35"/> <source>New...</source> <translation>Nouveau...</translation> </message> <message> + <location line="+2"/> <source>Open...</source> <translation>Ouvrir...</translation> </message> <message> + <location line="+1"/> <source>Open Resource File</source> <translation>Ouvrir fichier de ressource</translation> </message> <message> + <location line="+1"/> + <location line="+11"/> <source>Remove</source> <translation>Retirer</translation> </message> <message> + <location line="-10"/> + <location line="+11"/> <source>Move Up</source> <translation>Vers le Haut</translation> </message> <message> + <location line="-10"/> + <location line="+11"/> <source>Move Down</source> <translation>Vers le Bas</translation> </message> <message> + <location line="-9"/> + <location line="+1"/> <source>Add Prefix</source> <translation>Ajouter préfixe</translation> </message> <message> + <location line="+1"/> <source>Add Files...</source> <translation>Ajouter fichiers...</translation> </message> <message> + <location line="+1"/> <source>Change Prefix</source> <translation>Modifier le préfixe</translation> </message> <message> + <location line="+1"/> <source>Change Language</source> <translation>Modifier la langue</translation> </message> <message> + <location line="+1"/> <source>Change Alias</source> <translation>Modifier l'alias</translation> </message> <message> + <location line="+1"/> <source>Clone Prefix...</source> <translation>Cloner le préfixe...</translation> </message> <message> + <location line="+37"/> <source>Prefix / Path</source> <translation>Préfixe / chemin</translation> </message> <message> + <location line="+1"/> <source>Language / Alias</source> <translation>Langue / Alias</translation> </message> <message> + <location line="+117"/> <source><html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html></source> <translation><html><p><b>Avertissement:</b> Des problèmes sont apparus lors du rafraichissement des données des ressources :</p><pre>%1</pre></html></translation> </message> <message> + <location line="+2"/> <source>Resource Warning</source> <translation>Avertissement relatif aux ressources</translation> </message> @@ -2834,20 +3521,24 @@ vers <context> <name>QtResourceView</name> <message> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+567"/> <source>Size: %1 x %2 %3</source> <translation>Taille : %1 x %2 %3</translation> </message> <message> + <location line="+20"/> <source>Edit Resources...</source> <translation>Éditer ressources...</translation> </message> <message> + <location line="+6"/> <source>Reload</source> <translation>Recharger</translation> </message> <message> + <location line="+7"/> <source>Copy Path</source> <translation>Copier le chemin</translation> </message> @@ -2855,6 +3546,7 @@ vers <context> <name>QtResourceViewDialog</name> <message> + <location line="+252"/> <source>Select Resource</source> <translation>Séléctionner ressource</translation> </message> @@ -2862,14 +3554,17 @@ vers <context> <name>QtSizeFPropertyManager</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-535"/> <source>%1 x %2</source> <translation>%1 x %2</translation> </message> <message> + <location line="+130"/> <source>Width</source> <translation>Largeur</translation> </message> <message> + <location line="+9"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -2877,26 +3572,33 @@ vers <context> <name>QtSizePolicyPropertyManager</name> <message> + <location line="+1709"/> + <location line="+1"/> <source><Invalid></source> <translation><Invalide></translation> </message> <message> + <location line="+1"/> <source>[%1, %2, %3, %4]</source> <translation>[%1, %2, %3, %4]</translation> </message> <message> + <location line="+45"/> <source>Horizontal Policy</source> <translation>Politique horizontale</translation> </message> <message> + <location line="+9"/> <source>Vertical Policy</source> <translation>Politique verticale</translation> </message> <message> + <location line="+9"/> <source>Horizontal Stretch</source> <translation>Étirement horizontal</translation> </message> <message> + <location line="+8"/> <source>Vertical Stretch</source> <translation>Étirement vertical</translation> </message> @@ -2904,14 +3606,17 @@ vers <context> <name>QtSizePropertyManager</name> <message> + <location line="-2286"/> <source>%1 x %2</source> <translation>%1 x %2</translation> </message> <message> + <location line="+96"/> <source>Width</source> <translation>Largeur</translation> </message> <message> + <location line="+8"/> <source>Height</source> <translation>Hauteur</translation> </message> @@ -2919,86 +3624,107 @@ vers <context> <name>QtToolBarDialog</name> <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/> <source>Customize Toolbars</source> <translation>Personnaliser les barres d'outils</translation> </message> <message> + <location/> <source>1</source> <translation>1</translation> </message> <message> + <location/> <source>Actions</source> <translation>Actions</translation> </message> <message> + <location/> <source>Toolbars</source> <translation>Barres d'outils</translation> </message> <message> + <location/> <source>Add new toolbar</source> <translation>Ajouter une nouvelle barre d'outils</translation> </message> <message> + <location/> <source>New</source> <translation>Nouveau</translation> </message> <message> + <location/> <source>Remove selected toolbar</source> <translation>Supprimer la barre d'outils sélectionnée</translation> </message> <message> + <location/> <source>Remove</source> <translation>Supprimer</translation> </message> <message> + <location/> <source>Rename toolbar</source> <translation>Renommer la barre d'outils</translation> </message> <message> + <location/> <source>Rename</source> <translation>Renommer</translation> </message> <message> + <location/> <source>Move action up</source> <translation>Déplacer l'action vers le haut</translation> </message> <message> + <location/> <source>Up</source> <translation>Monter</translation> </message> <message> + <location/> <source>Remove action from toolbar</source> <translation>Retirer l'action de la barre d'outils</translation> </message> <message> + <location/> <source><-</source> <translation><-</translation> </message> <message> + <location/> <source>Add action to toolbar</source> <translation>Ajouter l'action à la barre d'outil</translation> </message> <message> + <location/> <source>-></source> <translation>-></translation> </message> <message> + <location/> <source>Move action down</source> <translation>Déplacer l'action vers le bas</translation> </message> <message> + <location/> <source>Down</source> <translation>Descendre</translation> </message> <message> + <location/> <source>Current Toolbar Actions</source> <translation>Actions de la barre d'outils courante</translation> </message> <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="+1240"/> <source>Custom Toolbar</source> <translation>Barre d'outils personnalisée</translation> </message> <message> + <location line="+544"/> <source>< S E P A R A T O R ></source> <translation>< S É P A R A T E U R ></translation> </message> @@ -3006,10 +3732,12 @@ vers <context> <name>QtTreePropertyBrowser</name> <message> + <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="+442"/> <source>Property</source> <translation>Propriété</translation> </message> <message> + <location line="+1"/> <source>Value</source> <translation>Valeur</translation> </message> @@ -3017,52 +3745,64 @@ vers <context> <name>SaveFormAsTemplate</name> <message> + <location filename="../tools/designer/src/designer/saveformastemplate.ui"/> <source>Save Form As Template</source> <translation>Enregistrer le formulaire comme un modèle</translation> </message> <message> + <location/> <source>&Name:</source> <translation>&Nom :</translation> </message> <message> + <location/> <source>&Category:</source> <translation>&Catégorie :</translation> </message> <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="+72"/> <source>Add path...</source> <translation>Ajouter chemin...</translation> </message> <message> + <location line="+23"/> <source>Template Exists</source> <translation>Le modèle existe</translation> </message> <message> + <location line="+1"/> <source>A template with the name %1 already exists. Do you want overwrite the template?</source> <translation>Un modèle existe déjà avec le nom %1. Voulez-vous le remplacer ?</translation> </message> <message> + <location line="+3"/> <source>Overwrite Template</source> <translation>Remplacer modèle</translation> </message> <message> + <location line="+7"/> <source>Open Error</source> <translation>Erreur d'ouverture</translation> </message> <message> + <location line="+1"/> <source>There was an error opening template %1 for writing. Reason: %2</source> <translation>Une erreur s'est produite à l'ouverture du modèle %1 en écriture. Raison : %2</translation> </message> <message> + <location line="+13"/> <source>Write Error</source> <translation>Erreur d'écriture</translation> </message> <message> + <location line="+1"/> <source>There was an error writing the template %1 to disk. Reason: %2</source> <translation>Une erreur s'est produite lors de l'écriture du modèle %1 sur le disque. Raison : %2</translation> </message> <message> + <location line="+27"/> <source>Pick a directory to save templates in</source> <translation>Sélectionner le dossier dans lequel le modèle sera enregistré</translation> </message> @@ -3070,6 +3810,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>ScriptErrorDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+59"/> <source>An error occurred while running the scripts for "%1": </source> <translation>Une erreur est apparue lors de l'execution des scripts de "%1" : @@ -3079,18 +3820,22 @@ Voulez-vous le remplacer ?</translation> <context> <name>SelectSignalDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui"/> <source>Go to slot</source> <translation>Aller au slot</translation> </message> <message> + <location/> <source>Select signal</source> <translation>Sélectionner signal</translation> </message> <message> + <location/> <source>signal</source> <translation>signal</translation> </message> <message> + <location/> <source>class</source> <translation>classe</translation> </message> @@ -3098,6 +3843,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>SignalSlotConnection</name> <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="-358"/> <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source> <translation>ENVOYER(%1), SIGNAL(%2), RECEVEUR(%3), SLOT(%4)</translation> </message> @@ -3105,26 +3851,32 @@ Voulez-vous le remplacer ?</translation> <context> <name>SignalSlotDialogClass</name> <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui"/> <source>Signals and slots</source> <translation>Signaux et slots</translation> </message> <message> + <location/> <source>Slots</source> <translation>Slots</translation> </message> <message> + <location/> <source>Add</source> <translation>Ajouter</translation> </message> <message> + <location/> <source>...</source> <translation>...</translation> </message> <message> + <location/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> + <location/> <source>Signals</source> <translation>Signaux</translation> </message> @@ -3132,10 +3884,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>Spacer</name> <message> + <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="+275"/> <source>Horizontal Spacer '%1', %2 x %3</source> <translation>Ressort horizontal '%1', %2 x %3</translation> </message> <message> + <location line="+0"/> <source>Vertical Spacer '%1', %2 x %3</source> <translation>Ressort vertical '%1', %2 x %3</translation> </message> @@ -3143,6 +3897,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>TemplateOptionsPage</name> <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="+156"/> <source>Template Paths</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Chemins des modèles</translation> @@ -3151,42 +3906,52 @@ Voulez-vous le remplacer ?</translation> <context> <name>ToolBarManager</name> <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+89"/> <source>Configure Toolbars...</source> <translation>Configurer les barres d'outils...</translation> </message> <message> + <location line="+15"/> <source>Window</source> <translation>Fenêtre</translation> </message> <message> + <location line="+1"/> <source>Help</source> <translation>Aide</translation> </message> <message> + <location line="+7"/> <source>Style</source> <translation>Style</translation> </message> <message> + <location line="+2"/> <source>Dock views</source> <translation>Ancrer les vues</translation> </message> <message> + <location line="+6"/> <source>File</source> <translation>Fichier</translation> </message> <message> + <location line="+4"/> <source>Edit</source> <translation>Édition</translation> </message> <message> + <location line="+4"/> <source>Tools</source> <translation>Outils</translation> </message> <message> + <location line="+4"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> + <location line="+4"/> <source>Toolbars</source> <translation>Barres d'outils</translation> </message> @@ -3194,25 +3959,78 @@ Voulez-vous le remplacer ?</translation> <context> <name>VersionDialog</name> <message> + <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+170"/> <source><h3>%1</h3><br/><br/>Version %2</source> <translation><h3>%1</h3><br/><br/>Version %2</translation> </message> <message> + <location line="+1"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> + <location line="+1"/> <source><br/>Qt Designer is a graphical user interface designer for Qt applications.<br/></source> <translation><br/>Qt Designer est une interface de création d'interface graphique pour les applications Qt.<br/></translation> </message> <message> + <location line="+2"/> <source>%1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> <translation>%1<br/>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</translation> </message> </context> <context> + <name>VideoPlayerTaskMenu</name> + <message> + <location filename="../tools/designer/src/plugins/phononwidgets/videoplayertaskmenu.cpp" line="+79"/> + <source>Available Mime Types</source> + <translation>Types MIME disponibles</translation> + </message> + <message> + <location line="+24"/> + <source>Display supported mime types...</source> + <translation>Afficher les types MIME supportés...</translation> + </message> + <message> + <location line="+1"/> + <source>Load...</source> + <translation>Ouvrir...</translation> + </message> + <message> + <location line="+1"/> + <source>Play</source> + <translation>Lecture</translation> + </message> + <message> + <location line="+1"/> + <source>Pause</source> + <translation>Pause</translation> + </message> + <message> + <location line="+1"/> + <source>Stop</source> + <translation>Arrêter</translation> + </message> + <message> + <location line="+32"/> + <source>Choose Video Player Media Source</source> + <translation>Choisir une source de média pour le lecteur video</translation> + </message> + <message> + <location line="+10"/> + <source>An error has occurred in '%1': %2</source> + <translation>Une erreur s'est produite dans '%1' : %2</translation> + </message> + <message> + <location line="+1"/> + <source>Video Player Error</source> + <translation>Erreur du lecteur video</translation> + </message> +</context> +<context> <name>WidgetDataBase</name> <message> + <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="+814"/> <source>The file contains a custom widget '%1' whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source> <translation>Le fichier contient un widget personnalisé '%1' dont la classe de base (%2) est différente de l'entrée dans la base de données de widget (%3). La base de données de widget n'a pas été modifiée.</translation> </message> @@ -3220,70 +4038,87 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ActionEditor</name> <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="+123"/> <source>New...</source> <translation>Nouveau...</translation> </message> <message> + <location line="+1"/> <source>Edit...</source> <translation>Éditer...</translation> </message> <message> + <location line="+1"/> <source>Go to slot...</source> <translation>Aller au slot...</translation> </message> <message> + <location line="+1"/> <source>Copy</source> <translation>Copier</translation> </message> <message> + <location line="+1"/> <source>Cut</source> <translation>Couper</translation> </message> <message> + <location line="+1"/> <source>Paste</source> <translation>Coller</translation> </message> <message> + <location line="+1"/> <source>Select all</source> <translation>Tout sélectionner</translation> </message> <message> + <location line="+1"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> + <location line="+9"/> <source>Actions</source> <translation>Actions</translation> </message> <message> + <location line="+49"/> <source>Configure Action Editor</source> <translation>Configurer l'éditeur d'action</translation> </message> <message> + <location line="+3"/> <source>Icon View</source> <translation>Vue en icônes</translation> </message> <message> + <location line="+6"/> <source>Detailed View</source> <translation>Vue détaillée</translation> </message> <message> + <location line="+246"/> <source>New action</source> <translation>Nouvelle action</translation> </message> <message> + <location line="+98"/> <source>Edit action</source> <translation>Editer action</translation> </message> <message> + <location line="+69"/> <source>Remove action '%1'</source> <translation>Supprimer action '%1'</translation> </message> <message> + <location line="+0"/> <source>Remove actions</source> <translation>Supprimer les actions</translation> </message> <message> + <location line="+186"/> <source>Used In</source> <translation>Utilisé dans</translation> </message> @@ -3291,26 +4126,32 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ActionModel</name> <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+89"/> <source>Name</source> <translation>Nom</translation> </message> <message> + <location line="+1"/> <source>Used</source> <translation>Utilisé</translation> </message> <message> + <location line="+1"/> <source>Text</source> <translation>Texte</translation> </message> <message> + <location line="+1"/> <source>Shortcut</source> <translation>Raccourci</translation> </message> <message> + <location line="+1"/> <source>Checkable</source> <translation>Vérifiable</translation> </message> <message> + <location line="+1"/> <source>ToolTip</source> <translation>Info-bulle</translation> </message> @@ -3318,22 +4159,27 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BrushManagerProxy</name> <message> + <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="+219"/> <source>The element '%1' is missing the required attribute '%2'.</source> <translation>L'attribut requis '%2' est manquant pour l'élément '%1'.</translation> </message> <message> + <location line="+11"/> <source>Empty brush name encountered.</source> <translation>Un nom vide de pinceau a été rencontré.</translation> </message> <message> + <location line="+10"/> <source>An unexpected element '%1' was encountered.</source> <translation>L'élément inattendu '%1' a été rencontré.</translation> </message> <message> + <location line="+7"/> <source>An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4</source> - <translation>Une erreur est apparue lors de la lecture du fichier '%1' de définition des pinceaux à la ligne %2, colonne %3: %4</translation> + <translation>Une erreur est apparue lors de la lecture du fichier '%1' de définition des pinceaux à la ligne %2, colonne %3 : %4</translation> </message> <message> + <location line="+43"/> <source>An error occurred when reading the resource file '%1' at line %2, column %3: %4</source> <translation>Une erreur est survenue lors de la lecture du fichier de ressource '%1' à la ligne %2, colonne %3 : %4</translation> </message> @@ -3341,14 +4187,17 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BuddyEditor</name> <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="+261"/> <source>Add buddy</source> <translation>Ajouter un copain</translation> </message> <message> + <location line="+52"/> <source>Remove buddies</source> <translation>Supprimer les copains</translation> </message> <message numerus="yes"> + <location line="+24"/> <source>Remove %n buddies</source> <translation> <numerusform>Supprimer %n copain</numerusform> @@ -3356,6 +4205,7 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message numerus="yes"> + <location line="+51"/> <source>Add %n buddies</source> <translation> <numerusform>Ajouter %n copain</numerusform> @@ -3363,6 +4213,7 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message> + <location line="+48"/> <source>Set automatically</source> <translation>Définir automatiquement</translation> </message> @@ -3370,6 +4221,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BuddyEditorPlugin</name> <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_plugin.cpp" line="+73"/> <source>Edit Buddies</source> <translation>Éditer les copains</translation> </message> @@ -3377,6 +4229,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::BuddyEditorTool</name> <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_tool.cpp" line="+56"/> <source>Edit Buddies</source> <translation>Éditer les copains</translation> </message> @@ -3384,10 +4237,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ButtonGroupMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+7"/> <source>Select members</source> <translation>Sélectionner les membres</translation> </message> <message> + <location line="+1"/> <source>Break</source> <translation>Casser</translation> </message> @@ -3395,26 +4250,32 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ButtonTaskMenu</name> <message> + <location line="+121"/> <source>Assign to button group</source> <translation>Assigner au groupe de boutons</translation> </message> <message> + <location line="+2"/> <source>Button group</source> <translation>Groupe de boutons</translation> </message> <message> + <location line="+1"/> <source>New button group</source> <translation>Nouveau groupe de boutons</translation> </message> <message> + <location line="+1"/> <source>Change text...</source> <translation>Modifier le texte...</translation> </message> <message> + <location line="+1"/> <source>None</source> <translation>Aucun</translation> </message> <message> + <location line="+101"/> <source>Button group '%1'</source> <translation>Groupe de boutons '%1'</translation> </message> @@ -3422,46 +4283,57 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::CodeDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="+95"/> <source>Save...</source> <translation>Enregistrer...</translation> </message> <message> + <location line="+4"/> <source>Copy All</source> <translation>Tout copier</translation> </message> <message> + <location line="+5"/> <source>&Find in Text...</source> <translation>&Rechercher dans le texte...</translation> </message> <message> + <location line="+75"/> <source>A temporary form file could not be created in %1.</source> <translation>Un fichier temporaire de formulaire n'a pas pu être créé dans %1.</translation> </message> <message> + <location line="+6"/> <source>The temporary form file %1 could not be written.</source> <translation>Le fichier temporaire de formulaire %1 n'a pas pu être écrit.</translation> </message> <message> + <location line="+21"/> <source>%1 - [Code]</source> <translation>%1 - [Code]</translation> </message> <message> + <location line="+23"/> <source>Save Code</source> <translation>Enregistrer le code</translation> </message> <message> + <location line="+0"/> <source>Header Files (*.%1)</source> <translation>Fichiers headers (*.%1)</translation> </message> <message> + <location line="+6"/> <source>The file %1 could not be opened: %2</source> <translation>Le fichier %1 ne peut pas être ouvert : %2</translation> </message> <message> + <location line="+5"/> <source>The file %1 could not be written: %2</source> <translation>Le fichier %1 ne peut pas être écrit : %2</translation> </message> <message> + <location line="+11"/> <source>%1 - Error</source> <translation>%1 - Erreur</translation> </message> @@ -3469,6 +4341,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ColorAction</name> <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+246"/> <source>Text Color</source> <translation>Couleur du texte</translation> </message> @@ -3476,10 +4349,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ComboBoxTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="+68"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> <message> + <location line="+38"/> <source>Change Combobox Contents</source> <translation>Modifier le contenu du Combobox</translation> </message> @@ -3487,6 +4362,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::CommandLinkButtonTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+156"/> <source>Change description...</source> <translation>Modifier la description...</translation> </message> @@ -3494,14 +4370,17 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ConnectionEdit</name> <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+1313"/> <source>Select All</source> <translation>Tout sélectionner</translation> </message> <message> + <location line="+3"/> <source>Deselect All</source> <translation>Désélectionner tout</translation> </message> <message> + <location line="+5"/> <source>Delete</source> <translation>Supprimer</translation> </message> @@ -3509,42 +4388,52 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ConnectionModel</name> <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="-465"/> <source>Sender</source> <translation>Émetteur</translation> </message> <message> + <location line="+1"/> <source>Signal</source> <translation>Signal</translation> </message> <message> + <location line="+1"/> <source>Receiver</source> <translation>Receveur</translation> </message> <message> + <location line="+1"/> <source>Slot</source> <translation>Slot</translation> </message> <message> + <location line="+90"/> <source><sender></source> <translation><émetteur></translation> </message> <message> + <location line="+1"/> <source><signal></source> <translation><signal></translation> </message> <message> + <location line="+1"/> <source><receiver></source> <translation><receveur></translation> </message> <message> + <location line="+1"/> <source><slot></source> <translation><slot></translation> </message> <message> + <location line="+108"/> <source>The connection already exists!<br>%1</source> <translation>La connexion existe déjà !<br>%1</translation> </message> <message> + <location line="+2"/> <source>Signal and Slot Editor</source> <translation>Éditeur de signaux et slots</translation> </message> @@ -3552,34 +4441,42 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ContainerWidgetTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+79"/> <source>Delete</source> <translation>Supprimer</translation> </message> <message> + <location line="+25"/> <source>Insert</source> <translation>Insérer</translation> </message> <message> + <location line="+3"/> <source>Insert Page Before Current Page</source> <translation>Insérer la page avant la page courante</translation> </message> <message> + <location line="+4"/> <source>Insert Page After Current Page</source> <translation>Insérer la page après la page courante</translation> </message> <message> + <location line="+8"/> <source>Add Subwindow</source> <translation>Ajouter sous-fenêtre</translation> </message> <message> + <location line="+38"/> <source>Subwindow</source> <translation>Sous fenêtre</translation> </message> <message> + <location line="+2"/> <source>Page</source> <translation>Page</translation> </message> <message> + <location line="+1"/> <source>Page %1 of %2</source> <translation>Page %1 de %2</translation> </message> @@ -3587,15 +4484,18 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::DPI_Chooser</name> <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+27"/> <source>System (%1 x %2)</source> <extracomment>System resolution</extracomment> <translation>Système (%1 x %2)</translation> </message> <message> + <location line="+7"/> <source>User defined</source> <translation>Défini par l'utilisateur</translation> </message> <message> + <location line="+18"/> <source> x </source> <extracomment>DPI X/Y separator</extracomment> <translation> x </translation> @@ -3604,38 +4504,49 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::DesignerPropertyManager</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="+647"/> + <location line="+6"/> <source>AlignLeft</source> <translation>AlignementGauche</translation> </message> <message> + <location line="-5"/> <source>AlignHCenter</source> <translation>AlignementCentreH</translation> </message> <message> + <location line="+1"/> <source>AlignRight</source> <translation>AlignementDroite</translation> </message> <message> + <location line="+1"/> <source>AlignJustify</source> <translation>AlignementJustifié</translation> </message> <message> + <location line="+9"/> <source>AlignTop</source> <translation>AlignementSommet</translation> </message> <message> + <location line="+1"/> + <location line="+4"/> <source>AlignVCenter</source> <translation>AlignementCentreV</translation> </message> <message> + <location line="-3"/> <source>AlignBottom</source> <translation>AlignementDessous</translation> </message> <message> + <location line="+565"/> <source>%1, %2</source> <translation>%1, %2</translation> </message> <message numerus="yes"> + <location line="+6"/> <source>Customized (%n roles)</source> <translation> <numerusform>Personnalisé (%n rôle)</numerusform> @@ -3643,59 +4554,76 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message> + <location line="+1"/> <source>Inherited</source> <translatorcomment>pour la palette</translatorcomment> <translation>Héritée</translation> </message> <message> + <location line="+566"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> + <location line="+9"/> <source>Vertical</source> <translation>Vertical</translation> </message> <message> + <location line="+15"/> <source>Normal Off</source> <translation>Arrêt normal</translation> </message> <message> + <location line="+1"/> <source>Normal On</source> <translation>Marche normal</translation> </message> <message> + <location line="+1"/> <source>Disabled Off</source> <translation>Arrêt désactivé</translation> </message> <message> + <location line="+1"/> <source>Disabled On</source> <translation>Marche désactivé</translation> </message> <message> + <location line="+1"/> <source>Active Off</source> <translation>Arrêt activé</translation> </message> <message> + <location line="+1"/> <source>Active On</source> <translation>Marche activé</translation> </message> <message> + <location line="+1"/> <source>Selected Off</source> <translation>Arrêt sélectionné</translation> </message> <message> + <location line="+1"/> <source>Selected On</source> <translation>Marche sélectionné</translation> </message> <message> + <location line="+7"/> + <location line="+21"/> <source>translatable</source> <translation>Traduisible</translation> </message> <message> + <location line="-15"/> + <location line="+21"/> <source>disambiguation</source> <translation>désambiguation</translation> </message> <message> + <location line="-15"/> + <location line="+21"/> <source>comment</source> <translation>commentaire</translation> </message> @@ -3703,38 +4631,48 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::DeviceProfileDialog</name> <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="+63"/> <source>Device Profiles (*.%1)</source> <translation>Profils d'appareil (*.%1)</translation> </message> <message> + <location line="+31"/> <source>Default</source> <translation>Par défaut</translation> </message> <message> + <location line="+67"/> <source>Save Profile</source> <translation>Enregistrer le profil</translation> </message> <message> + <location line="+10"/> <source>Save Profile - Error</source> <translation>Enregistrer le profile - Erreur</translation> </message> <message> + <location line="+0"/> <source>Unable to open the file '%1' for writing: %2</source> <translation>Impossible d'ouvrir le fichier '%1' en écriture : %2</translation> </message> <message> + <location line="+8"/> <source>Open profile</source> <translation>Ouvrir profil</translation> </message> <message> + <location line="+6"/> + <location line="+6"/> <source>Open Profile - Error</source> <translation>Ouvrir profil - Erreur</translation> </message> <message> + <location line="-6"/> <source>Unable to open the file '%1' for reading: %2</source> <translation>Impossible d'ouvrir le fichier '%1' en lecture : %2</translation> </message> <message> + <location line="+6"/> <source>'%1' is not a valid profile: %2</source> <translation>'%1' n'est pas un profil valide : %2</translation> </message> @@ -3742,46 +4680,57 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::Dialog</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui"/> <source>Dialog</source> <translation>Boîte de dialogue</translation> </message> <message> + <location/> <source>StringList</source> <translation>Liste de chaîne de caractères</translation> </message> <message> + <location/> <source>New String</source> <translation>Nouvelle chaîne de caractères</translation> </message> <message> + <location/> <source>&New</source> <translation>&Nouveau</translation> </message> <message> + <location/> <source>Delete String</source> <translation>Supprimer la chaîne de caractères</translation> </message> <message> + <location/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> + <location/> <source>&Value:</source> <translation>&Valeur : </translation> </message> <message> + <location/> <source>Move String Up</source> <translation>Déplacer la chaîne de caractères vers le haut</translation> </message> <message> + <location/> <source>Up</source> <translation>Vers le haut</translation> </message> <message> + <location/> <source>Move String Down</source> <translation>Déplacer la chaîne de caractères vers le bas</translation> </message> <message> + <location/> <source>Down</source> <translation>Vers le bas</translation> </message> @@ -3789,42 +4738,52 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::EmbeddedOptionsControl</name> <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="-260"/> <source>None</source> <translation>Aucun</translation> </message> <message> + <location line="+4"/> <source>Add a profile</source> <translation>Ajouter un profil</translation> </message> <message> + <location line="+6"/> <source>Edit the selected profile</source> <translation>Éditer le profile sélectionné</translation> </message> <message> + <location line="+4"/> <source>Delete the selected profile</source> <translation>Supprimer le profil sélectionné</translation> </message> <message> + <location line="+22"/> <source>Add Profile</source> <translation>Ajouter profil</translation> </message> <message> + <location line="+7"/> <source>New profile</source> <translation>Nouveau profil</translation> </message> <message> + <location line="+35"/> <source>Edit Profile</source> <translation>Éditer profil</translation> </message> <message> + <location line="+26"/> <source>Delete Profile</source> <translation>Supprimer profil</translation> </message> <message> + <location line="+1"/> <source>Would you like to delete the profile '%1'?</source> <translation>Voulez-vous supprimer le profil '%1' ?</translation> </message> <message> + <location line="+55"/> <source>Default</source> <translation>Par défaut</translation> </message> @@ -3836,10 +4795,12 @@ Voulez-vous le remplacer ?</translation> <translation type="obsolete"><Filtre></translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+163"/> <source>Filter</source> <translation>Filtre</translation> </message> <message> + <location line="+36"/> <source>Clear text</source> <translation>Effacer le texte</translation> </message> @@ -3847,10 +4808,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormEditor</name> <message> + <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="+190"/> <source>Resource File Changed</source> <translation>Fichier de ressource modifié</translation> </message> <message> + <location line="+1"/> <source>The file "%1" has changed outside Designer. Do you want to reload it?</source> <translation>Le fichier "%1" a été modifié en dehors de Designer. Voulez-vous le recharger ?</translation> </message> @@ -3858,6 +4821,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormLayoutMenu</name> <message> + <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+24"/> <source>Add form layout row...</source> <translation>Ajouter une ligne au layout du formulaire...</translation> </message> @@ -3865,30 +4829,37 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindow</name> <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1322"/> <source>Edit contents</source> <translation>Éditer le contenu</translation> </message> <message> + <location line="+1"/> <source>F2</source> <translation>F2</translation> </message> <message> + <location line="+775"/> <source>Insert widget '%1'</source> <translation>Insérer le widget '%1'</translation> </message> <message> + <location line="+65"/> <source>Resize</source> <translation>Redimensionner</translation> </message> <message> + <location line="+248"/> <source>Key Move</source> <translation>Déplacement au clavier</translation> </message> <message> + <location line="+0"/> <source>Key Resize</source> <translation>Redimensionnement au clavier</translation> </message> <message numerus="yes"> + <location line="+252"/> <source>Paste %n action(s)</source> <translation> <numerusform>Coller %n action</numerusform> @@ -3896,6 +4867,7 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message numerus="yes"> + <location line="+2"/> <source>Paste %n widget(s)</source> <translation> <numerusform>Coller %n widget</numerusform> @@ -3903,42 +4875,53 @@ Voulez-vous le remplacer ?</translation> </translation> </message> <message> + <location line="+1"/> <source>Paste (%1 widgets, %2 actions)</source> <translation>Coller (%1 widgets, %2 actions)</translation> </message> <message> + <location line="+56"/> <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source> <translation>Impossible de coller les widgets. Designer n'a pas trouvé de conteneur sans layout pour coller.</translation> </message> <message> + <location line="+2"/> <source>Break the layout of the container you want to paste into, select this container and then paste again.</source> <translation>Retirez le layout du conteneur dans lequel vous voulez coller, sélectionnez ce conteneur et collez à nouveau.</translation> </message> <message> + <location line="+4"/> <source>Paste error</source> <translation>Erreur de collage</translation> </message> <message> + <location line="+181"/> <source>Raise widgets</source> <translation>Élever widgets</translation> </message> <message> + <location line="+17"/> <source>Lower widgets</source> <translation>Descendre widgets</translation> </message> <message> + <location line="+204"/> <source>Select Ancestor</source> <translation>Sélectionner les ancêtres</translation> </message> <message> + <location line="+46"/> <source>Lay out</source> <translation>Mettre en page</translation> </message> <message> + <location line="+485"/> + <location line="+55"/> <source>Drop widget</source> <translation>Supprimer widget</translation> </message> <message> + <location line="-13"/> <source>A QMainWindow-based form does not contain a central widget.</source> <translation>Un formulaire basé sur QMainWindow ne contenant pas de widget central.</translation> </message> @@ -3946,10 +4929,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindowBase</name> <message> + <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+404"/> <source>Delete '%1'</source> <translation>Supprimer '%1'</translation> </message> <message> + <location line="+0"/> <source>Delete</source> <translation>Supprimer</translation> </message> @@ -3957,78 +4942,99 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindowManager</name> <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+365"/> <source>Cu&t</source> <translation>Co&uper</translation> </message> <message> + <location line="+3"/> <source>Cuts the selected widgets and puts them on the clipboard</source> <translation>Coupe les widgets sélectionnés et les place dans le presse-papiers</translation> </message> <message> + <location line="+5"/> <source>&Copy</source> <translation>Cop&ier</translation> </message> <message> + <location line="+3"/> <source>Copies the selected widgets to the clipboard</source> <translation>Copie les widgets sélectionnés dans le presse-papiers</translation> </message> <message> + <location line="+5"/> <source>&Paste</source> <translation>C&oller</translation> </message> <message> + <location line="+3"/> <source>Pastes the clipboard's contents</source> <translation>Colle le contenu du presse-papiers</translation> </message> <message> + <location line="+5"/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> + <location line="+2"/> <source>Deletes the selected widgets</source> <translation>Supprime les widgets sélectionnés</translation> </message> <message> + <location line="+5"/> <source>Select &All</source> <translation>Tout &sélectionner</translation> </message> <message> + <location line="+3"/> <source>Selects all widgets</source> <translation>Sélectionne tous les widgets</translation> </message> <message> + <location line="+5"/> <source>Bring to &Front</source> <translation>Amener au premier &plan</translation> </message> <message> + <location line="+3"/> + <location line="+1"/> <source>Raises the selected widgets</source> <translation>Élève les widgets sélectionnés</translation> </message> <message> + <location line="+4"/> <source>Send to &Back</source> <translation>Placer en &arrière plan</translation> </message> <message> + <location line="+3"/> + <location line="+1"/> <source>Lowers the selected widgets</source> <translation>Descend les widgets sélectionnés</translation> </message> <message> + <location line="+4"/> <source>Adjust &Size</source> <translation>Ajuster les &dimensions</translation> </message> <message> + <location line="+3"/> <source>Adjusts the size of the selected widget</source> <translation>Ajuster les dimensions du widget sélectionné</translation> </message> <message> + <location line="+6"/> <source>Lay Out &Horizontally</source> <translation>Mettre en page &horizontalement</translation> </message> <message> + <location line="+3"/> <source>Lays out the selected widgets horizontally</source> <translation>Mettre en page horizontalement les widgets sélectionnés</translation> </message> <message> + <location line="+39"/> <source>Lays out the selected widgets horizontally in a splitter</source> <translation>Met en page les widgets sélectionnés horizontalement à l'aide d'un séparateur</translation> </message> @@ -4037,30 +5043,37 @@ Voulez-vous le remplacer ?</translation> <translation type="obsolete">Mettre en page horizontalement les widgets sélectionnés</translation> </message> <message> + <location line="-33"/> <source>Lay Out &Vertically</source> <translation>Mettre en page &verticalement</translation> </message> <message> + <location line="+3"/> <source>Lays out the selected widgets vertically</source> <translation>Mettre en page verticalement les widgets sélectionnés</translation> </message> <message> + <location line="+7"/> <source>Lay Out in a &Form Layout</source> <translation>Mettre en page dans un layout de &formulaire</translation> </message> <message> + <location line="+3"/> <source>Lays out the selected widgets in a form layout</source> <translation>Mettre en page les widgets sélectionnés dans un layout de formulaire</translation> </message> <message> + <location line="+7"/> <source>Lay Out in a &Grid</source> <translation>Mettre en page dans une &grille</translation> </message> <message> + <location line="+3"/> <source>Lays out the selected widgets in a grid</source> <translation>Mettre en page les widgets sélectionnés dans une grille</translation> </message> <message> + <location line="+7"/> <source>Lay Out Horizontally in S&plitter</source> <translation>Mettre en page horizontalement avec un sé&parateur</translation> </message> @@ -4069,55 +5082,68 @@ Voulez-vous le remplacer ?</translation> <translation type="obsolete">Met en page les widgets sélectionnés horizontalement à l'aide d'un séparateur</translation> </message> <message> + <location line="+10"/> <source>Lay Out Vertically in Sp&litter</source> <translation>Mettre en page verticalement avec un sépa&rateur</translation> </message> <message> + <location line="+3"/> <source>Lays out the selected widgets vertically in a splitter</source> <translation>Met en page les widgets sélectionnés verticalement à l'aide d'un séparateur</translation> </message> <message> + <location line="+7"/> <source>&Break Layout</source> <translation>&Casser la mise en page</translation> </message> <message> + <location line="+3"/> <source>Breaks the selected layout</source> <translation>Retire le layout sélectionné</translation> </message> <message> + <location line="+5"/> <source>Si&mplify Grid Layout</source> <translation>Si&mplifier le layout de grille</translation> </message> <message> + <location line="+2"/> <source>Removes empty columns and rows</source> <translation>Supprime les lignes et colonnes vides</translation> </message> <message> + <location line="+6"/> <source>&Preview...</source> <translation>&Prévisualisation...</translation> </message> <message> + <location line="+2"/> <source>Preview current form</source> <translation>Prévisualise le formulaire courant</translation> </message> <message> + <location line="+15"/> <source>Form &Settings...</source> <translation>Paramètres du &formulaire...</translation> </message> <message> + <location line="+94"/> <source>Break Layout</source> <translation>Casser la mise en page</translation> </message> <message> + <location line="+26"/> <source>Adjust Size</source> <translation>Ajuster les dimensions</translation> </message> <message> + <location line="+43"/> <source>Could not create form preview</source> <comment>Title of warning message box</comment> <translation>Impossible de créer la prévisualisation du formulaire</translation> </message> <message> + <location line="+341"/> <source>Form Settings - %1</source> <translation>Paramètres du formulaire - %1</translation> </message> @@ -4125,10 +5151,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::FormWindowSettings</name> <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="+193"/> <source>None</source> <translation>Aucun</translation> </message> <message> + <location line="+1"/> <source>Device Profile: %1</source> <translation>Profil de périphérique : %1</translation> </message> @@ -4136,30 +5164,37 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::GridPanel</name> <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> + <location/> <source>Grid</source> <translation>Grille</translation> </message> <message> + <location/> <source>Visible</source> <translation>Visible</translation> </message> <message> + <location/> <source>Grid &X</source> <translation>Grille &X</translation> </message> <message> + <location/> <source>Snap</source> <translation>Grille aimantée</translation> </message> <message> + <location/> <source>Reset</source> <translation>Réinitialisé</translation> </message> <message> + <location/> <source>Grid &Y</source> <translation>Grille &Y</translation> </message> @@ -4167,6 +5202,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::GroupBoxTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/groupbox_taskmenu.cpp" line="+82"/> <source>Change title...</source> <translation>Modifier le titre...</translation> </message> @@ -4174,6 +5210,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::HtmlTextEdit</name> <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="-58"/> <source>Insert HTML entity</source> <translation>Insérer une entité HTML</translation> </message> @@ -4181,74 +5218,92 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::IconSelector</name> <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-24"/> <source>The pixmap file '%1' cannot be read.</source> <translation>Le fichier pixmap '%1' ne peut pas être lu.</translation> </message> <message> + <location line="+6"/> <source>The file '%1' does not appear to be a valid pixmap file: %2</source> <translation>Le fichier '%1' n'est pas un fichier de pixmap valide : %2</translation> </message> <message> + <location line="+9"/> <source>The file '%1' could not be read: %2</source> <translation>Le fichier '%1' ne peut pas être lu : %2</translation> </message> <message> + <location line="+33"/> <source>Choose a Pixmap</source> <translation>Choisissez un pixmap</translation> </message> <message> + <location line="+7"/> <source>Pixmap Read Error</source> <translation>Erreur de lecture de pixmap</translation> </message> <message> + <location line="+54"/> <source>...</source> <translation>...</translation> </message> <message> + <location line="+6"/> <source>Normal Off</source> <translation>Arrêt normal</translation> </message> <message> + <location line="+1"/> <source>Normal On</source> <translation>Marche normal</translation> </message> <message> + <location line="+1"/> <source>Disabled Off</source> <translation>Arrêt désactivé</translation> </message> <message> + <location line="+1"/> <source>Disabled On</source> <translation>Marche désactivé</translation> </message> <message> + <location line="+1"/> <source>Active Off</source> <translation>Arrêt activé</translation> </message> <message> + <location line="+1"/> <source>Active On</source> <translation>Marche activé</translation> </message> <message> + <location line="+1"/> <source>Selected Off</source> <translation>Arrêt sélectionné</translation> </message> <message> + <location line="+1"/> <source>Selected On</source> <translation>Marche sélectionné</translation> </message> <message> + <location line="+8"/> <source>Choose Resource...</source> <translation>Choisir ressource...</translation> </message> <message> + <location line="+1"/> <source>Choose File...</source> <translation>Choisir un fichier...</translation> </message> <message> + <location line="+1"/> <source>Reset</source> <translation>Réinitialiser</translation> </message> <message> + <location line="+1"/> <source>Reset All</source> <translation>Réinitialisé tout</translation> </message> @@ -4256,46 +5311,58 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ItemListEditor</name> <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui"/> <source>Items List</source> <translation>Liste d'éléments</translation> </message> <message> + <location/> <source>New Item</source> <translation>Nouvel élément</translation> </message> <message> + <location/> <source>&New</source> <translation>&Nouveau</translation> </message> <message> + <location/> <source>Delete Item</source> <translation>Supprimer élément</translation> </message> <message> + <location/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> + <location/> <source>Move Item Up</source> <translation>Déplacer l'élément vers le haut</translation> </message> <message> + <location/> <source>U</source> <translation>Monter</translation> </message> <message> + <location/> <source>Move Item Down</source> <translation>Déplacer l'élément vers le bas</translation> </message> <message> + <location/> <source>D</source> <translation>Descendre</translation> </message> <message> + <location/> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+360"/> <source>Properties &>></source> <translation>Propriétés &>></translation> </message> <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="-2"/> <source>Properties &<<</source> <translation>Propriétés &<<</translation> </message> @@ -4303,10 +5370,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::LabelTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="+85"/> <source>Change rich text...</source> <translation>Modifier texte riche...</translation> </message> <message> + <location line="+1"/> <source>Change plain text...</source> <translation>Modifier texte simple...</translation> </message> @@ -4314,6 +5383,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::LanguageResourceDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-343"/> <source>Choose Resource</source> <translation>Choisir ressource</translation> </message> @@ -4321,6 +5391,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::LineEditTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/lineedit_taskmenu.cpp" line="+80"/> <source>Change text...</source> <translation>Modifier texte...</translation> </message> @@ -4328,14 +5399,17 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ListWidgetEditor</name> <message> + <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="+69"/> <source>New Item</source> <translation>Nouvel élément</translation> </message> <message> + <location line="+32"/> <source>Edit List Widget</source> <translation>Éditer le widget de liste</translation> </message> <message> + <location line="+19"/> <source>Edit Combobox</source> <translation>Éditer le Combobox</translation> </message> @@ -4343,10 +5417,12 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::ListWidgetTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="+67"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> <message> + <location line="+38"/> <source>Change List Contents</source> <translation>Modifier le contenu de la liste</translation> </message> @@ -4354,18 +5430,22 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+118"/> <source>Next Subwindow</source> <translation>Sous-fenêtre suivante</translation> </message> <message> + <location line="+1"/> <source>Previous Subwindow</source> <translation>Sous-fenêtre précédente</translation> </message> <message> + <location line="+1"/> <source>Tile</source> <translation>Côte à côte</translation> </message> <message> + <location line="+1"/> <source>Cascade</source> <translation>Cascade</translation> </message> @@ -4373,6 +5453,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::MenuTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/menutaskmenu.cpp" line="+56"/> <source>Remove</source> <translation>Supprimer</translation> </message> @@ -4380,6 +5461,7 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::MorphMenu</name> <message> + <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+264"/> <source>Morph into</source> <translation>Transformer en</translation> </message> @@ -4387,34 +5469,42 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::NewActionDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui"/> <source>New Action...</source> <translation>Nouvelle action...</translation> </message> <message> + <location/> <source>&Text:</source> <translation>&Texte :</translation> </message> <message> + <location/> <source>Object &name:</source> <translation>&Nom de l'objet :</translation> </message> <message> + <location/> <source>&Icon:</source> <translation>&Icône :</translation> </message> <message> + <location/> <source>Shortcut:</source> <translation>Raccourci :</translation> </message> <message> + <location/> <source>Checkable:</source> <translation>Peut être cochée :</translation> </message> <message> + <location/> <source>ToolTip:</source> <translation>Info-bulle :</translation> </message> <message> + <location/> <source>...</source> <translation>...</translation> </message> @@ -4422,32 +5512,39 @@ Voulez-vous le remplacer ?</translation> <context> <name>qdesigner_internal::NewDynamicPropertyDialog</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/> <source>Create Dynamic Property</source> <translation>Créer une propriété dynamique</translation> </message> <message> + <location/> <source>Property Name</source> <translation>Nom de la propriété</translation> </message> <message> + <location/> <source>horizontalSpacer</source> <translation>Espaceur horizontal</translation> </message> <message> + <location/> <source>Property Type</source> <translation>Type de la propriété</translation> </message> <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="+134"/> <source>Set Property Name</source> <translation>Définir le nom de la propriété</translation> </message> <message> + <location line="+11"/> <source>The current object already has a property named '%1'. Please select another, unique one.</source> <translation>L'objet courant possède déjà une propriété nommée '%1'. Veuillez-sélectionner un autre nom.</translation> </message> <message> + <location line="+4"/> <source>The '_q_' prefix is reserved for the Qt library. Please select another name.</source> <translation>Le préfixe «_q_» est réservé pour la bibliothèque Qt. @@ -4457,67 +5554,83 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::NewFormWidget</name> <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui"/> <source>0</source> <translation>0</translation> </message> <message> + <location/> <source>Choose a template for a preview</source> <translation>Choisir un modèle pour la prévisualisation</translation> </message> <message> + <location/> <source>Embedded Design</source> <translation>Design pour appareil mobile</translation> </message> <message> + <location/> <source>Device:</source> <translation>Appareil :</translation> </message> <message> + <location/> <source>Screen Size:</source> <translation>Dimensions de l'écran :</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="+104"/> <source>Default size</source> <translation>Dimensions par défaut</translation> </message> <message> + <location line="+1"/> <source>QVGA portrait (240x320)</source> <translation>QVGA portrait (240x320)</translation> </message> <message> + <location line="+1"/> <source>QVGA landscape (320x240)</source> <translation>QVGA paysage (320x240)</translation> </message> <message> + <location line="+1"/> <source>VGA portrait (480x640)</source> <translation>VGA portrait (480x640)</translation> </message> <message> + <location line="+1"/> <source>VGA landscape (640x480)</source> <translation>VGA paysage (640x480)</translation> </message> <message> + <location line="+66"/> <source>Widgets</source> <extracomment>New Form Dialog Categories</extracomment> <translation>Widgets</translation> </message> <message> + <location line="+1"/> <source>Custom Widgets</source> <translation>Widgets personnalisé</translation> </message> <message> + <location line="+18"/> <source>None</source> <translation>Aucun</translation> </message> <message> + <location line="+57"/> <source>Error loading form</source> <translation>Erreur de chargement du formulaire</translation> </message> <message> + <location line="+244"/> <source>Unable to open the form template file '%1': %2</source> <translation>Impossible d'ouvrir le fichier de modèle de formulaire '%1' : %2</translation> </message> <message> + <location line="+67"/> <source>Internal error: No template selected.</source> <translation>Erreur interne : aucun modèle sélectionné.</translation> </message> @@ -4525,30 +5638,37 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::NewPromotedClassPanel</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+92"/> <source>Add</source> <translation>Ajouter</translation> </message> <message> + <location line="+2"/> <source>New Promoted Class</source> <translation>Nouvelle classe promue</translation> </message> <message> + <location line="+15"/> <source>Base class name:</source> <translation>Nom de la classe de base :</translation> </message> <message> + <location line="+1"/> <source>Promoted class name:</source> <translation>Nom de la classe promue :</translation> </message> <message> + <location line="+1"/> <source>Header file:</source> <translation>Fichier d'en-tête :</translation> </message> <message> + <location line="+1"/> <source>Global include</source> <translation>En-tête global</translation> </message> <message> + <location line="+11"/> <source>Reset</source> <translation>Réinitialiser</translation> </message> @@ -4556,10 +5676,12 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::ObjectInspector</name> <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+316"/> <source>Change Current Page</source> <translation>Modifier la page courante</translation> </message> <message> + <location line="+438"/> <source>&Find in Text...</source> <translation>&Rechercher dans le texte...</translation> </message> @@ -4574,26 +5696,32 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::OrderDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.ui"/> <source>Change Page Order</source> <translation>Modifier l'ordre des pages</translation> </message> <message> + <location/> <source>Page Order</source> <translation>Ordre des pages</translation> </message> <message> + <location/> <source>Move page up</source> <translation>Déplacer la page vers le haut</translation> </message> <message> + <location/> <source>Move page down</source> <translation>Déplacer la page vers le bas</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="+109"/> <source>Index %1 (%2)</source> <translation>Indice %1 (%2)</translation> </message> <message> + <location line="+3"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> @@ -4601,38 +5729,47 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PaletteEditor</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui"/> <source>Edit Palette</source> <translation>Éditer la palette</translation> </message> <message> + <location/> <source>Tune Palette</source> <translation>Ajuster la palette</translation> </message> <message> + <location/> <source>Show Details</source> <translation>Afficher les détails</translation> </message> <message> + <location/> <source>Compute Details</source> <translation>Calculer les détails</translation> </message> <message> + <location/> <source>Quick</source> <translation>Rapide</translation> </message> <message> + <location/> <source>Preview</source> <translation>Prévisualisation</translation> </message> <message> + <location/> <source>Disabled</source> <translation>Désactivé</translation> </message> <message> + <location/> <source>Inactive</source> <translation>Inactif</translation> </message> <message> + <location/> <source>Active</source> <translation>Actif</translation> </message> @@ -4640,6 +5777,7 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PaletteEditorButton</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditorbutton.cpp" line="+57"/> <source>Change Palette</source> <translation>Modifier la palette</translation> </message> @@ -4647,18 +5785,22 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PaletteModel</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="+374"/> <source>Color Role</source> <translation>Rôle de la couleur</translation> </message> <message> + <location line="+2"/> <source>Active</source> <translation>Actif</translation> </message> <message> + <location line="+2"/> <source>Inactive</source> <translation>Inactif</translation> </message> <message> + <location line="+2"/> <source>Disabled</source> <translation>Désactivé</translation> </message> @@ -4666,22 +5808,28 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PixmapEditor</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-1541"/> <source>Choose Resource...</source> <translation>Choisir ressource...</translation> </message> <message> + <location line="+1"/> <source>Choose File...</source> <translation>Choisir fichier...</translation> </message> <message> + <location line="+1"/> <source>Copy Path</source> <translation>Chemin de copie</translation> </message> <message> + <location line="+1"/> <source>Paste Path</source> <translation>Chemin de collage</translation> </message> <message> + <location line="+6"/> + <location line="+16"/> <source>...</source> <translation>...</translation> </message> @@ -4689,6 +5837,7 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/plaintexteditor.cpp" line="+65"/> <source>Edit text</source> <translation>Éditer le texte</translation> </message> @@ -4696,30 +5845,37 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PluginDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="+72"/> <source>Components</source> <translation>Composants</translation> </message> <message> + <location line="+13"/> <source>Plugin Information</source> <translation>Information sur les plugins</translation> </message> <message> + <location line="+4"/> <source>Refresh</source> <translation>Rafraîchir</translation> </message> <message> + <location line="+1"/> <source>Scan for newly installed custom widget plugins.</source> <translation>Recherche des plugins personnalisés récemment installés.</translation> </message> <message> + <location line="+48"/> <source>Qt Designer couldn't find any plugins</source> <translation>Qt Designer n'a trouvé aucun plugin</translation> </message> <message> + <location line="+3"/> <source>Qt Designer found the following plugins</source> <translation>Qt Designer a trouvé les plugins suivants</translation> </message> <message> + <location line="+55"/> <source>New custom widget plugins have been found.</source> <translation>De nouveaux plugins de widgets ont été trouvés.</translation> </message> @@ -4727,6 +5883,7 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewActionGroup</name> <message> + <location filename="../tools/designer/src/components/formeditor/previewactiongroup.cpp" line="+95"/> <source>%1 Style</source> <translation>Style %1</translation> </message> @@ -4734,38 +5891,47 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewConfigurationWidget</name> <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="+139"/> <source>Default</source> <translation>Par défaut</translation> </message> <message> + <location line="+22"/> <source>None</source> <translation>Aucun</translation> </message> <message> + <location line="+6"/> <source>Browse...</source> <translation>Parcourir...</translation> </message> <message> + <location line="+118"/> <source>Load Custom Device Skin</source> <translation>Charger le revêtement d'appareil personnalisé</translation> </message> <message> + <location line="+2"/> <source>All QVFB Skins (*.%1)</source> <translation>Tous les revêtements QVFB (*.%1)</translation> </message> <message> + <location line="+16"/> <source>%1 - Duplicate Skin</source> <translation>%1 - Revêtement doublon</translation> </message> <message> + <location line="+1"/> <source>The skin '%1' already exists.</source> <translation>Le revêtement '%1' existe déjà.</translation> </message> <message> + <location line="+14"/> <source>%1 - Error</source> <translation>%1 - Erreur</translation> </message> <message> + <location line="+1"/> <source>%1 is not a valid skin directory: %2</source> <translation>%1 n'est pas un répertoire de revêtements valide : @@ -4804,20 +5970,24 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewDeviceSkin</name> <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="+259"/> <source>&Portrait</source> <translation>&Portrait</translation> </message> <message> + <location line="+2"/> <source>Landscape (&CCW)</source> <extracomment>Rotate form preview counter-clockwise</extracomment> <translation>Paysage (&dans le sens horaire)</translation> </message> <message> + <location line="+2"/> <source>&Landscape (CW)</source> <extracomment>Rotate form preview clockwise</extracomment> <translation>Paysage (&dans le sens anti-horaire)</translation> </message> <message> + <location line="+1"/> <source>&Close</source> <translation>&Fermer</translation> </message> @@ -4825,6 +5995,7 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewManager</name> <message> + <location line="+426"/> <source>%1 - [Preview]</source> <translation>%1 - [prévisualisation]</translation> </message> @@ -4832,6 +6003,7 @@ Veuillez sélectionner un autre nom.</translation> <context> <name>qdesigner_internal::PreviewMdiArea</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/previewframe.cpp" line="+72"/> <source>The moose in the noose ate the goose who was loose.</source> <extracomment>Palette editor background</extracomment> @@ -4842,46 +6014,57 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PreviewWidget</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui"/> <source>Preview Window</source> <translation>Fenêtre de prévisualisation</translation> </message> <message> + <location/> <source>LineEdit</source> <translation>LineEdit</translation> </message> <message> + <location/> <source>ComboBox</source> <translation>ComboBox</translation> </message> <message> + <location/> <source>PushButton</source> <translation>PushButton</translation> </message> <message> + <location/> <source>ButtonGroup2</source> <translation>ButtonGroup2</translation> </message> <message> + <location/> <source>CheckBox1</source> <translation>CheckBox1</translation> </message> <message> + <location/> <source>CheckBox2</source> <translation>CheckBox2</translation> </message> <message> + <location/> <source>ButtonGroup</source> <translation>ButtonGroup</translation> </message> <message> + <location/> <source>RadioButton1</source> <translation>RadioButton1</translation> </message> <message> + <location/> <source>RadioButton2</source> <translation>RadioButton2</translation> </message> <message> + <location/> <source>RadioButton3</source> <translation>BoutonRadio1</translation> </message> @@ -4889,18 +6072,22 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PromotionModel</name> <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+17"/> <source>Name</source> <translation>Nom</translation> </message> <message> + <location line="+1"/> <source>Header file</source> <translation>Fichier d'en-tête</translation> </message> <message> + <location line="+1"/> <source>Global include</source> <translation>En-tête global</translation> </message> <message> + <location line="+1"/> <source>Usage</source> <translation>Usage</translation> </message> @@ -4908,22 +6095,27 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PromotionTaskMenu</name> <message> + <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="+85"/> <source>Promoted widgets...</source> <translation>Widgets promus...</translation> </message> <message> + <location line="+1"/> <source>Promote to ...</source> <translation>Promouvoir en...</translation> </message> <message> + <location line="+1"/> <source>Change signals/slots...</source> <translation>Modifier signaux/slots...</translation> </message> <message> + <location line="+1"/> <source>Promote to</source> <translation>Promouvoir en</translation> </message> <message> + <location line="+1"/> <source>Demote to %1</source> <translation>Rétrograder en %1</translation> </message> @@ -4931,46 +6123,57 @@ je préfère les mines de Pompéi.</translation> <context> <name>qdesigner_internal::PropertyEditor</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+231"/> <source>Add Dynamic Property...</source> <translation>Ajouter une propriété dynamique...</translation> </message> <message> + <location line="+1"/> <source>Remove Dynamic Property</source> <translation>Supprimer la propriété dynamique</translation> </message> <message> + <location line="+1"/> <source>Sorting</source> <translation>Tri</translation> </message> <message> + <location line="+1"/> <source>Color Groups</source> <translation>Groupes de couleur</translation> </message> <message> + <location line="+1"/> <source>Tree View</source> <translation>Vue arborescente</translation> </message> <message> + <location line="+1"/> <source>Drop Down Button View</source> <translation>Liste déroulante</translation> </message> <message> + <location line="+45"/> <source>String...</source> <translation>Chaîne de caractères...</translation> </message> <message> + <location line="+3"/> <source>Bool...</source> <translation>Booléen...</translation> </message> <message> + <location line="+4"/> <source>Other...</source> <translation>Autre...</translation> </message> <message> + <location line="+7"/> <source>Configure Property Editor</source> <translation>Configurer l'éditeur de propriétés</translation> </message> <message> + <location line="+539"/> <source>Object: %1 Class: %2</source> <translation>Objet : %1 @@ -4980,6 +6183,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::PropertyLineEdit</name> <message> + <location filename="../tools/designer/src/lib/shared/propertylineedit.cpp" line="+88"/> <source>Insert line break</source> <translation>Insérer saut de ligne</translation> </message> @@ -4987,22 +6191,27 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerPromotionDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+85"/> <source>Promoted Widgets</source> <translation>Widgets promus</translation> </message> <message> + <location line="+7"/> <source>Promoted Classes</source> <translation>Classes promues</translation> </message> <message> + <location line="+60"/> <source>Promote</source> <translation>Promouvoir</translation> </message> <message> + <location line="+152"/> <source>Change signals/slots...</source> <translation>Modifier signaux/slots...</translation> </message> <message> + <location line="+17"/> <source>%1 - Error</source> <translation>%1 - Erreur</translation> </message> @@ -5010,18 +6219,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerResource</name> <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+277"/> <source>Loading qrc file</source> <translation>Chargement du fichier qrc</translation> </message> <message> + <location line="+1"/> <source>The specified qrc file <p><b>%1</b></p><p>could not be found. Do you want to update the file location?</p></source> - <translation>Le fichier qrc spécifié <p><b>%1</b></p><p>n'a pas pu être trouvé. Voulez-vous mettre à jour l'emplacement du fichier?</p></translation> + <translation>Le fichier qrc spécifié <p><b>%1</b></p><p>n'a pas pu être trouvé. Voulez-vous mettre à jour l'emplacement du fichier ?</p></translation> </message> <message> + <location line="+6"/> <source>New location for %1</source> <translation>Nouvel emplacement pour %1</translation> </message> <message> + <location line="+1"/> <source>Resource files (*.qrc)</source> <translation>Fichier de ressource (*.qrc)</translation> </message> @@ -5029,90 +6242,112 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerTaskMenu</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+68"/> <source>Change objectName...</source> <translation>Modifier objectName...</translation> </message> <message> + <location line="+1"/> <source>Change toolTip...</source> <translation>Modifier toolTip...</translation> </message> <message> + <location line="+1"/> <source>Change whatsThis...</source> <translation>Modifier whatsThis...</translation> </message> <message> + <location line="+1"/> <source>Change styleSheet...</source> <translation>Modifier la feuille de style...</translation> </message> <message> + <location line="+3"/> <source>Create Menu Bar</source> <translation>Créer une barre de menus</translation> </message> <message> + <location line="+1"/> <source>Add Tool Bar</source> <translation>Ajouter une barre d'outils</translation> </message> <message> + <location line="+1"/> <source>Create Status Bar</source> <translation>Créer une barre de status</translation> </message> <message> + <location line="+1"/> <source>Remove Status Bar</source> <translation>Supprimer la barre de status</translation> </message> <message> + <location line="+1"/> <source>Change script...</source> <translation>Modifier le script...</translation> </message> <message> + <location line="+1"/> <source>Change signals/slots...</source> <translation>Modifier signaux/slots...</translation> </message> <message> + <location line="+1"/> <source>Go to slot...</source> <translation>Aller au slot...</translation> </message> <message> + <location line="+3"/> <source>Size Constraints</source> <translation>Contrainte de taille</translation> </message> <message> + <location line="+4"/> <source>Set Minimum Width</source> <translation>Définir la largeur minimum</translation> </message> <message> + <location line="+4"/> <source>Set Minimum Height</source> <translation>Définir la hauteur minimum</translation> </message> <message> + <location line="+4"/> <source>Set Minimum Size</source> <translation>Définir la taille minimum</translation> </message> <message> + <location line="+6"/> <source>Set Maximum Width</source> <translation>Définir la largeur maximum</translation> </message> <message> + <location line="+4"/> <source>Set Maximum Height</source> <translation>Définir la hauteur maximum</translation> </message> <message> + <location line="+4"/> <source>Set Maximum Size</source> <translation>Définir la taille maximum</translation> </message> <message> + <location line="+235"/> <source>Edit ToolTip</source> <translation>Éditer l'info-bulle</translation> </message> <message> + <location line="+5"/> <source>Edit WhatsThis</source> <translation>Éditer «Qu'est-ce»</translation> </message> <message> + <location line="+144"/> <source>no signals available</source> <translation>Aucun signal disponible</translation> </message> <message numerus="yes"> + <location line="+67"/> <source>Set size constraint on %n widget(s)</source> <translation> <numerusform>Définir les contraintes de dimensions sur %n widget</numerusform> @@ -5123,32 +6358,40 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QDesignerWidgetBox</name> <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="+349"/> <source>An error has been encountered at line %1 of %2: %3</source> <translation>Une erreur a été rencontrée à la ligne %1 de %2 : %3</translation> </message> <message> + <location line="+139"/> <source>Unexpected element <%1> encountered when parsing for <widget> or <ui></source> <translation>L'élément inattendu <%1> a été rencontré lors de l'analyse des élements <widget> et <ui></translation> </message> <message> + <location line="+19"/> <source>Unexpected end of file encountered when parsing widgets.</source> <translation>Fin de fichier inattendue lors de l'analyse grammaticale des widgets.</translation> </message> <message> + <location line="+9"/> <source>A widget element could not be found.</source> <translation>Un élement de widget n'a pas pu être trouvé.</translation> </message> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="+123"/> + <location line="+13"/> <source>Unexpected element <%1></source> <translation>Élément <%1> inattendu</translation> </message> <message> + <location line="+7"/> <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4 %5</source> <translation>Une erreur d'analyse grammaticale est apparue à la ligne %1, colonne %2 du code XML spécifiant le widget %3 : %4 %5</translation> </message> <message> + <location line="+9"/> <source>The XML code specified for the widget %1 does not contain any widget elements. %2</source> <translation>Le code XML spécifié pour le widget %1 ne contient aucun élément widget. @@ -5158,58 +6401,73 @@ Classe : %2</translation> <context> <name>qdesigner_internal::QtGradientStopsController</name> <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="+173"/> <source>H</source> <translation>T</translation> </message> <message> + <location line="+1"/> <source>S</source> <translation>S</translation> </message> <message> + <location line="+1"/> <source>V</source> <translation>V</translation> </message> <message> + <location line="+6"/> + <location line="+4"/> <source>Hue</source> <translation>Teinte</translation> </message> <message> + <location line="-3"/> <source>Sat</source> <translation>Sat</translation> </message> <message> + <location line="+1"/> <source>Val</source> <translation>Val</translation> </message> <message> + <location line="+3"/> <source>Saturation</source> <translation>Saturation</translation> </message> <message> + <location line="+1"/> <source>Value</source> <translation>Valeur</translation> </message> <message> + <location line="+22"/> <source>R</source> <translation>R</translation> </message> <message> + <location line="+1"/> <source>G</source> <translation>V</translation> </message> <message> + <location line="+1"/> <source>B</source> <translation>B</translation> </message> <message> + <location line="+6"/> <source>Red</source> <translation>Rouge</translation> </message> <message> + <location line="+1"/> <source>Green</source> <translation>Vert</translation> </message> <message> + <location line="+1"/> <source>Blue</source> <translation>Bleu</translation> </message> @@ -5217,22 +6475,27 @@ Classe : %2</translation> <context> <name>qdesigner_internal::RichTextEditorDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+436"/> <source>Edit text</source> <translation>Éditer le texte</translation> </message> <message> + <location line="+23"/> <source>Rich Text</source> <translation>Texte riche</translation> </message> <message> + <location line="+1"/> <source>Source</source> <translation>Source</translation> </message> <message> + <location line="+6"/> <source>&OK</source> <translation>&OK</translation> </message> <message> + <location line="+2"/> <source>&Cancel</source> <translation>&Annuler</translation> </message> @@ -5240,58 +6503,72 @@ Classe : %2</translation> <context> <name>qdesigner_internal::RichTextEditorToolBar</name> <message> + <location line="-302"/> <source>Bold</source> <translation>Gras</translation> </message> <message> + <location line="+1"/> <source>CTRL+B</source> <translation>CTRL+B</translation> </message> <message> + <location line="+5"/> <source>Italic</source> <translation>Italique</translation> </message> <message> + <location line="+1"/> <source>CTRL+I</source> <translation>CTRL+I</translation> </message> <message> + <location line="+5"/> <source>Underline</source> <translation>Souligné</translation> </message> <message> + <location line="+1"/> <source>CTRL+U</source> <translation>CTRL+U</translation> </message> <message> + <location line="+13"/> <source>Left Align</source> <translation>Aligner à gauche</translation> </message> <message> + <location line="+5"/> <source>Center</source> <translation>Centrer</translation> </message> <message> + <location line="+5"/> <source>Right Align</source> <translation>Aligner à droite</translation> </message> <message> + <location line="+5"/> <source>Justify</source> <translation>Justifier</translation> </message> <message> + <location line="+9"/> <source>Superscript</source> <translation>Exposant</translation> </message> <message> + <location line="+6"/> <source>Subscript</source> <translation>Indice</translation> </message> <message> + <location line="+9"/> <source>Insert &Link</source> <translation>Insérer &lien</translation> </message> <message> + <location line="+5"/> <source>Insert &Image</source> <translation>Insérer &image</translation> </message> @@ -5299,14 +6576,17 @@ Classe : %2</translation> <context> <name>qdesigner_internal::ScriptDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="+66"/> <source>Edit script</source> <translation>Éditer le script</translation> </message> <message> + <location line="+5"/> <source><html>Enter a Qt Script snippet to be executed while loading the form.<br>The widget and its children are accessible via the variables <i>widget</i> and <i>childWidgets</i>, respectively.</source> <translation><html>Entrez un snippet de code Qt Script à exécuter lors du chargement du formulaire.<br>Le widget et ses enfants sont accessibles via les variables <i>widget</i> et <i>childWidgets</i>, respectivement.</translation> </message> <message> + <location line="+51"/> <source>Syntax error</source> <translation>Erreur de syntaxe</translation> </message> @@ -5314,6 +6594,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::ScriptErrorDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+27"/> <source>Script errors</source> <translation>Erreurs de script</translation> </message> @@ -5321,18 +6602,23 @@ Classe : %2</translation> <context> <name>qdesigner_internal::SignalSlotDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+199"/> <source>There is already a slot with the signature '%1'.</source> <translation>Un slot existe déjà avec la signature '%1'.</translation> </message> <message> + <location line="+5"/> <source>There is already a signal with the signature '%1'.</source> <translation>Un signal existe déjà avec la signature '%1'.</translation> </message> <message> + <location line="+7"/> <source>%1 - Duplicate Signature</source> <translation>%1 - Signature double</translation> </message> <message> + <location line="+21"/> + <location line="+76"/> <source>Signals/Slots of %1</source> <translation>Signaux/slots de %1</translation> </message> @@ -5340,10 +6626,12 @@ Classe : %2</translation> <context> <name>qdesigner_internal::SignalSlotEditorPlugin</name> <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="+72"/> <source>Edit Signals/Slots</source> <translation>Éditer signaux/slots</translation> </message> <message> + <location line="+2"/> <source>F4</source> <translation>F4</translation> </message> @@ -5351,6 +6639,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::SignalSlotEditorTool</name> <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp" line="+58"/> <source>Edit Signals/Slots</source> <translation>Éditer signaux/slots</translation> </message> @@ -5358,6 +6647,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::StatusBarTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/toolbar_taskmenu.cpp" line="+81"/> <source>Remove</source> <translation>Supprimer</translation> </message> @@ -5365,6 +6655,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::StringListEditorButton</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditorbutton.cpp" line="+56"/> <source>Change String List</source> <translation>Modifier la liste de chaîne de caractères</translation> </message> @@ -5372,30 +6663,38 @@ Classe : %2</translation> <context> <name>qdesigner_internal::StyleSheetEditorDialog</name> <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="+90"/> + <location line="+280"/> <source>Valid Style Sheet</source> <translation>Feuille de style valide</translation> </message> <message> + <location line="-278"/> <source>Add Resource...</source> <translation>Ajouter ressource...</translation> </message> <message> + <location line="+1"/> <source>Add Gradient...</source> <translation>Ajouter gradient...</translation> </message> <message> + <location line="+1"/> <source>Add Color...</source> <translation>Ajouter couleur...</translation> </message> <message> + <location line="+1"/> <source>Add Font...</source> <translation>Ajouter police...</translation> </message> <message> + <location line="+2"/> <source>Edit Style Sheet</source> <translation>Éditer feuille de style</translation> </message> <message> + <location line="+276"/> <source>Invalid Style Sheet</source> <translation>Feuille de style invalide</translation> </message> @@ -5403,22 +6702,27 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TabOrderEditor</name> <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="+363"/> <source>Start from Here</source> <translation>Démarrer à partir d'ici</translation> </message> <message> + <location line="+3"/> <source>Restart</source> <translation>Redémarrer</translation> </message> <message> + <location line="+2"/> <source>Tab Order List...</source> <translation>Ordre de la liste de tabulation...</translation> </message> <message> + <location line="+44"/> <source>Tab Order List</source> <translation>Ordre de la liste de tabulation</translation> </message> <message> + <location line="+1"/> <source>Tab Order</source> <translation>Ordre des tabulations</translation> </message> @@ -5426,6 +6730,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TabOrderEditorPlugin</name> <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_plugin.cpp" line="+73"/> <source>Edit Tab Order</source> <translation>Éditer l'ordre des tabulations</translation> </message> @@ -5433,6 +6738,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TabOrderEditorTool</name> <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_tool.cpp" line="+57"/> <source>Edit Tab Order</source> <translation>Éditer l'ordre des tabulations</translation> </message> @@ -5440,38 +6746,48 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TableWidgetEditor</name> <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui"/> <source>Edit Table Widget</source> <translation>Éditer le widget de table</translation> </message> <message> + <location/> <source>&Items</source> <translation>&Éléments</translation> </message> <message> + <location/> <source>Table Items</source> <translation>Éléments de la table</translation> </message> <message> + <location/> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+218"/> <source>Properties &>></source> <translation>Propriétés &>></translation> </message> <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="-151"/> <source>New Column</source> <translation>Nouvelle colonne</translation> </message> <message> + <location line="+3"/> <source>New Row</source> <translation>Nouvelle ligne</translation> </message> <message> + <location line="+8"/> <source>&Columns</source> <translation>&Colonne</translation> </message> <message> + <location line="+1"/> <source>&Rows</source> <translation>&Lignes</translation> </message> <message> + <location line="+137"/> <source>Properties &<<</source> <translation>Propriétés &<<</translation> </message> @@ -5479,6 +6795,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TableWidgetTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp" line="+64"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> @@ -5486,18 +6803,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TemplateOptionsWidget</name> <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui"/> <source>Form</source> <translation>Formulaire</translation> </message> <message> + <location/> <source>Additional Template Paths</source> <translation>Chemins de modèles additionnels</translation> </message> <message> + <location/> <source>...</source> <translation>...</translation> </message> <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="-18"/> <source>Pick a directory to save templates in</source> <translation>Choisir un répertoire où enregistrer les modèles</translation> </message> @@ -5505,18 +6826,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TextEditTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="+58"/> <source>Edit HTML</source> <translation>Éditer le HTML</translation> </message> <message> + <location line="+1"/> <source>Change HTML...</source> <translation>Modifier le HTML...</translation> </message> <message> + <location line="+9"/> <source>Edit Text</source> <translation>Éditer le texte</translation> </message> <message> + <location line="+1"/> <source>Change Plain Text...</source> <translation>Modifier le texte simple...</translation> </message> @@ -5524,18 +6849,22 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TextEditor</name> <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-204"/> <source>Choose Resource...</source> <translation>Choisir ressource...</translation> </message> <message> + <location line="+1"/> <source>Choose File...</source> <translation>Choisir fichier...</translation> </message> <message> + <location line="+5"/> <source>...</source> <translation>...</translation> </message> <message> + <location line="+118"/> <source>Choose a File</source> <translation>Choisir un fichier</translation> </message> @@ -5543,22 +6872,27 @@ Classe : %2</translation> <context> <name>qdesigner_internal::ToolBarEventFilter</name> <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="+148"/> <source>Insert Separator before '%1'</source> <translation>Insérer un séparateur avant '%1'</translation> </message> <message> + <location line="+9"/> <source>Append Separator</source> <translation>Ajouter un séparateur à la fin</translation> </message> <message> + <location line="+12"/> <source>Remove action '%1'</source> <translation>Supprimer l'action '%1'</translation> </message> <message> + <location line="+7"/> <source>Remove Toolbar '%1'</source> <translation>Supprimer la barre d'outils '%1'</translation> </message> <message> + <location line="+58"/> <source>Insert Separator</source> <translation>Insérer un séparateur</translation> </message> @@ -5566,98 +6900,125 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TreeWidgetEditor</name> <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> <source>Edit Tree Widget</source> <translation>Éditer un widget d'arborescence</translation> </message> <message> + <location/> <source>&Items</source> <translation>&Éléments</translation> </message> <message> + <location/> <source>Tree Items</source> <translation>Élément de l'arbre</translation> </message> <message> + <location/> <source>1</source> <translation>1</translation> </message> <message> + <location/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+199"/> <source>New Item</source> <translation>Nouvel élément</translation> </message> <message> + <location/> <source>&New</source> <translation>&Nouveau</translation> </message> <message> + <location/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+19"/> <source>New Subitem</source> <translation>Nouveau sous-élément</translation> </message> <message> + <location/> <source>New &Subitem</source> <translation>Nouveau &sous-élément</translation> </message> <message> + <location/> <source>Delete Item</source> <translation>Supprimer l'élément</translation> </message> <message> + <location/> <source>&Delete</source> <translation>&Supprimer</translation> </message> <message> + <location/> <source>Move Item Left (before Parent Item)</source> <translation>Déplacer l'élément à gauche (avant l'élément parent)</translation> </message> <message> + <location/> <source>L</source> <translation>G</translation> </message> <message> + <location/> <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source> <translation>Déplacer l'élément sur la droite (comme un premier sous-élément de l'élément à droite)</translation> </message> <message> + <location/> <source>R</source> <translation>D</translation> </message> <message> + <location/> <source>Move Item Up</source> <translation>Déplacer l'élément vers le haut</translation> </message> <message> + <location/> <source>U</source> <translation>H</translation> </message> <message> + <location/> <source>Move Item Down</source> <translation>Déplacer l'élément vers le bas</translation> </message> <message> + <location/> <source>D</source> <translation>B</translation> </message> <message> + <location/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+177"/> <source>Properties &>></source> <translation>Propriétés &>></translation> </message> <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="-327"/> <source>New Column</source> <translation>Nouvelle colonne</translation> </message> <message> + <location line="+8"/> <source>&Columns</source> <translation>&Colonnes</translation> </message> <message> + <location line="+69"/> <source>Per column properties</source> <translation>Propriétés par colonnes</translation> </message> <message> + <location line="+1"/> <source>Common properties</source> <translation>Propritétés de colonnes</translation> </message> <message> + <location line="+247"/> <source>Properties &<<</source> <translation>Propriétés &<<</translation> </message> @@ -5665,6 +7026,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::TreeWidgetTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp" line="+63"/> <source>Edit Items...</source> <translation>Éditer les éléments...</translation> </message> @@ -5672,6 +7034,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetBox</name> <message> + <location filename="../tools/designer/src/components/widgetbox/widgetbox_dnditem.cpp" line="+115"/> <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source> <translation>Avertissement : La création du widget a échoué dans la boîte de widget. Ceci peut être causé par un code XML invalide d'un widget personnalisé.</translation> </message> @@ -5679,34 +7042,42 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetBoxTreeWidget</name> <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="-268"/> <source>Scratchpad</source> <translation>bloc-notes</translation> </message> <message> + <location line="+370"/> <source>Custom Widgets</source> <translation>Widgets personnalisés</translation> </message> <message> + <location line="+263"/> <source>Expand all</source> <translation>Tout étendre</translation> </message> <message> + <location line="+1"/> <source>Collapse all</source> <translation>Tout replier</translation> </message> <message> + <location line="+3"/> <source>List View</source> <translation>Vue de liste</translation> </message> <message> + <location line="+1"/> <source>Icon View</source> <translation>Vue en icônes</translation> </message> <message> + <location line="+15"/> <source>Remove</source> <translation>Supprimer</translation> </message> <message> + <location line="+2"/> <source>Edit name</source> <translation>Éditer le nom</translation> </message> @@ -5714,6 +7085,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetDataBase</name> <message> + <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="-411"/> <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source> <translation>Un plugin de widgets personnalisés dont un nom de classe (%1) correspond à une classe existante à été trouvé.</translation> </message> @@ -5721,6 +7093,7 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetEditorTool</name> <message> + <location filename="../tools/designer/src/components/formeditor/tool_widgeteditor.cpp" line="+67"/> <source>Edit Widgets</source> <translation>Éditer les widgets</translation> </message> @@ -5728,28 +7101,34 @@ Classe : %2</translation> <context> <name>qdesigner_internal::WidgetFactory</name> <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="+263"/> <source>The custom widget factory registered for widgets of class %1 returned 0.</source> <translation>La fabrique (factory) de widget personnalisé, enregistrée pour les widgets de classe %1, a retourné 0.</translation> </message> <message> + <location line="+44"/> <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source> <translation>Une discordance de nom de classe est apparue lors de la création d'un nouveau widget à l'aide de la fabrique de widget personnalisé enregistrée pour la classe %1. La fabrique a retourné un widget de classe %2.</translation> </message> <message> + <location line="+99"/> <source>%1 Widget</source> <translation>%1 Widget</translation> </message> <message> + <location line="+90"/> <source>The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source> <translation>Le conteneur '%1' de la page courante (%2) n'a pas pu être déterminé lors de la création du layout. Ceci indique une incohérence dans le fichier ui, probablement un layout étant construit sur un widget conteneur.</translation> </message> <message> + <location line="+53"/> <source>Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. This indicates an inconsistency in the ui-file.</source> <translation>Temptative d'ajout d'un layout sur le widget '%1' (%2) qui a déjà un layout non pris en charge de type %3. Ceci indique une inconsistance dans le fichier ui.</translation> </message> <message> + <location line="+211"/> <source>Cannot create style '%1'.</source> <translation>Impossible de créer le style '%1'.</translation> </message> @@ -5757,10 +7136,12 @@ Ceci indique une inconsistance dans le fichier ui.</translation> <context> <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name> <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="-49"/> <source>Next</source> <translation>Suivant</translation> </message> <message> + <location line="+1"/> <source>Back</source> <translation>Précédent</translation> </message> @@ -5768,6 +7149,7 @@ Ceci indique une inconsistance dans le fichier ui.</translation> <context> <name>qdesigner_internal::ZoomMenu</name> <message> + <location filename="../tools/designer/src/lib/shared/zoomwidget.cpp" line="+84"/> <source>%1 %</source> <extracomment>Zoom factor</extracomment> <translation>%1 %</translation> @@ -5776,6 +7158,7 @@ Ceci indique une inconsistance dans le fichier ui.</translation> <context> <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name> <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="-270"/> <source>&Zoom</source> <translation>&Zoom</translation> </message> diff --git a/translations/linguist_fr.ts b/translations/linguist_fr.ts index 5b98904..c186adc 100644 --- a/translations/linguist_fr.ts +++ b/translations/linguist_fr.ts @@ -2,15 +2,9 @@ <!DOCTYPE TS> <TS version="2.0"> <context> - <name></name> - <message> - <source>(New Entry)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> <name>AboutDialog</name> <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1366"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> @@ -18,104 +12,134 @@ <context> <name>BatchTranslationDialog</name> <message> + <location filename="../tools/linguist/linguist/batchtranslationdialog.cpp" line="+79"/> <source>Batch Translation of '%1' - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location line="+37"/> <source>Searching, please wait...</source> <translation type="unfinished"></translation> </message> <message> + <location line="+0"/> <source>&Cancel</source> <translation type="unfinished"></translation> </message> <message> + <location line="+42"/> <source>Linguist batch translator</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> + <location line="+1"/> <source>Batch translated %n entries</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> + <location filename="../tools/linguist/linguist/batchtranslation.ui"/> <source>Qt Linguist - Batch Translation</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Options</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Set translated entries to finished</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Retranslate entries with existing translation</source> <translation type="unfinished"></translation> </message> <message> - <source>Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Translate also finished entries</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Phrase book preference</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Move up</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Move down</source> <translation type="unfinished"></translation> </message> <message> - <source>The batch translator will search through the selected phrase books in the order given above.</source> + <location/> + <source>&Run</source> <translation type="unfinished"></translation> </message> <message> - <source>&Run</source> + <location/> + <source>Cancel</source> <translation type="unfinished"></translation> </message> <message> - <source>Cancel</source> + <location/> + <source>Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>The batch translator will search through the selected phrase books in the order given above</source> <translation type="unfinished"></translation> </message> </context> <context> <name>DataModel</name> <message> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+214"/> <source><qt>Duplicate messages found in '%1':</source> <translation type="unfinished"></translation> </message> <message> + <location line="+4"/> + <location line="+8"/> <source><p>[more duplicates omitted]</source> <translation type="unfinished"></translation> </message> <message> + <location line="-5"/> + <source><p>* ID: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> <source><p>* Context: %1<br>* Source: %2</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source><br>* Comment: %3</source> <translation type="unfinished"></translation> </message> <message> + <location line="+71"/> <source>Linguist does not know the plural rules for '%1'. Will assume a single universal form.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+56"/> <source>Cannot create '%2': %1</source> <translation type="unfinished"></translation> </message> <message> + <location line="+56"/> <source>Universal Form</source> <translation type="unfinished"></translation> </message> @@ -123,30 +147,37 @@ Will assume a single universal form.</source> <context> <name>ErrorsView</name> <message> + <location filename="../tools/linguist/linguist/errorsview.cpp" line="+76"/> <source>Accelerator possibly superfluous in translation.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>Accelerator possibly missing in translation.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>Translation does not end with the same punctuation as the source text.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>A phrase book suggestion for '%1' was ignored.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>Translation does not refer to the same place markers as in the source text.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>Translation does not contain the necessary %n place marker.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>Unknown error</source> <translation type="unfinished"></translation> </message> @@ -154,95 +185,159 @@ Will assume a single universal form.</source> <context> <name>FindDialog</name> <message> + <location filename="../tools/linguist/linguist/finddialog.cpp" line="+14"/> <source></source> <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment> <translation></translation> </message> <message> + <location filename="../tools/linguist/linguist/finddialog.ui"/> <source>This window allows you to search for some text in the translation source file.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Type in the text to search for.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Options</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Source texts are searched when checked.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Translations are searched when checked.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Comments and contexts are searched when checked.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Find</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Find what:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Source texts</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Translations</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Match case</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Comments</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ignore &accelerators</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Find Next</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to close this window.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Cancel</source> <translation type="unfinished"></translation> </message> </context> <context> + <name>FormMultiWidget</name> + <message> + <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+302"/> + <source>Alt+Delete</source> + <extracomment>translate, but don't change</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Shift+Alt+Insert</source> + <extracomment>translate, but don't change</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Alt+Insert</source> + <extracomment>translate, but don't change</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+131"/> + <source>Confirmation - Qt Linguist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Delete non-empty length variant?</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>LRelease</name> <message numerus="yes"> - <source> Generated %n translation(s) (%1 finished and %2 unfinished) -</source> + <location filename="../tools/linguist/shared/qm.cpp" line="+763"/> + <source>Dropped %n message(s) which had no ID.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <source> Ignored %n untranslated source text(s) -</source> + <location line="+4"/> + <source>Excess context/disambiguation dropped from %n message(s).</source> + <translation type="unfinished"> + <numerusform></numerusform> + </translation> + </message> + <message numerus="yes"> + <location line="+8"/> + <source> Generated %n translation(s) (%1 finished and %2 unfinished)</source> + <translation type="unfinished"> + <numerusform></numerusform> + </translation> + </message> + <message numerus="yes"> + <location line="+4"/> + <source> Ignored %n untranslated source text(s)</source> <translation type="unfinished"> <numerusform></numerusform> </translation> @@ -251,943 +346,1235 @@ Will assume a single universal form.</source> <context> <name>MainWindow</name> <message> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>MainWindow</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Phrases</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Close Phrase Book</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Edit Phrase Book</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Print Phrase Book</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>V&alidation</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&View</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Vie&ws</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Toolbars</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Help</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Translation</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&File</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Edit</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Open...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Open a Qt translation source file (TS file) for editing</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+O</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>E&xit</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Close this window and exit.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+Q</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+668"/> + <location line="+15"/> <source>&Save</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Save changes made to this Qt translation source file</source> <translation type="unfinished"></translation> </message> <message> - <source>Previous unfinished item.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Move to the previous unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <source>Next unfinished item.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Move to the next unfinished item.</source> <translation type="unfinished"></translation> </message> <message> - <source>Move to previous item.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Move to the previous item.</source> <translation type="unfinished"></translation> </message> <message> - <source>Next item.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Move to the next item.</source> <translation type="unfinished"></translation> </message> <message> - <source>Mark item as done and move to the next unfinished item.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Mark this item as done and move to the next unfinished item.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Copy from source text</source> <translation type="unfinished"></translation> </message> <message> - <source>Toggle the validity check of accelerators.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> - <source>Toggle the validity check of ending punctuation.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> - <source>Toggle the validity check of place markers.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Open Read-O&nly...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Save All</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+S</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-14"/> + <location line="+11"/> <source>Save &As...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Save As...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Save changes made to this Qt translation source file into a new file.</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+4"/> <source>&Release</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Create a Qt message file suitable for released applications from the current message file.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Print...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+P</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Undo</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Recently Opened &Files</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Save</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Print a list of all the translation units in the current translation source file.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Undo the last editing operation performed on the current translation.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+Z</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Redo</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Redo an undone editing operation performed on the translation.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+Y</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Cu&t</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Copy the selected translation text to the clipboard and deletes it.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+X</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Copy</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Copy the selected translation text to the clipboard.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+C</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Paste</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Paste the clipboard text into the translation.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+V</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Select &All</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Select the whole translation text.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+A</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Find...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Search for some text in the translation source file.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+F</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Find &Next</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Continue the search where it was left.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>F3</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Prev Unfinished</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Close</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Close All</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+W</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+K</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Next Unfinished</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>P&rev</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+Shift+K</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ne&xt</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Done and Next</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Copies the source text into the translation field.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+B</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Accelerators</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Ending Punctuation</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Phrase matches</source> <translation type="unfinished"></translation> </message> <message> - <source>Toggle checking that phrase suggestions are used.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>Place &Marker Matches</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&New Phrase Book...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Create a new phrase book.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+N</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Open Phrase Book...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Open a phrase book to assist translation.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+H</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Reset Sorting</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Sort the items back in the same order as in the message file.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Display guesses</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Set whether or not to display translation guesses.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Statistics</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Display translation statistics.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Manual</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>F1</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>About Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>About Qt</source> <translation type="unfinished"></translation> </message> <message> - <source>Display information about the Qt toolkit by Trolltech.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location/> <source>&What's This?</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>What's This?</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Enter What's This? mode.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Shift+F1</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Search And Translate...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Replace the translation on all entries that matches the search source text.</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+21"/> <source>&Batch Translation...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Batch translate all entries using the information in the phrase books.</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-34"/> + <location line="+10"/> <source>Release As...</source> <translation type="unfinished"></translation> </message> <message> - <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the .ts file.</source> - <translation type="unfinished"></translation> - </message> - <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2035"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> </message> <message> + <location line="+190"/> <source>Source text</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> + <location line="+25"/> <source>Index</source> <translation type="unfinished"></translation> </message> <message> + <location line="-2"/> + <location line="+63"/> <source>Context</source> <translation type="unfinished"></translation> </message> <message> + <location line="-62"/> <source>Items</source> <translation type="unfinished"></translation> </message> <message> + <location line="+79"/> <source>This panel lists the source contexts.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+13"/> <source>Strings</source> <translation type="unfinished"></translation> </message> <message> + <location line="+37"/> <source>Phrases and guesses</source> <translation type="unfinished"></translation> </message> <message> + <location line="+10"/> <source>Sources and Forms</source> <translation type="unfinished"></translation> </message> <message> + <location line="+15"/> <source>Warnings</source> <translation type="unfinished"></translation> </message> <message> + <location line="+59"/> <source> MOD </source> <comment>status bar: file(s) modified</comment> <translation type="unfinished"></translation> </message> <message> + <location line="+139"/> <source>Loading...</source> <translation type="unfinished"></translation> </message> <message> + <location line="+32"/> + <location line="+22"/> <source>Loading File - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location line="-21"/> <source>The file '%1' does not seem to be related to the currently open file(s) '%2'. Close the open file(s) first?</source> <translation type="unfinished"></translation> </message> <message> + <location line="+22"/> <source>The file '%1' does not seem to be related to the file '%2' which is being loaded as well. Skip loading the first named file?</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> + <location line="+61"/> <source>%n translation unit(s) loaded.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> + <location line="+94"/> <source>Related files (%1);;</source> <translation type="unfinished"></translation> </message> <message> + <location line="+4"/> <source>Open Translation Files</source> <translation type="unfinished"></translation> </message> <message> + <location line="+10"/> + <location line="+31"/> <source>File saved.</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+15"/> + <location line="+1187"/> <source>Release</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1186"/> <source>Qt message files for released applications (*.qm) All files (*)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> + <location line="+12"/> <source>File created.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+34"/> + <location line="+355"/> <source>Printing...</source> <translation type="unfinished"></translation> </message> <message> + <location line="-347"/> <source>Context: %1</source> <translation type="unfinished"></translation> </message> <message> + <location line="+32"/> <source>finished</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>unresolved</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>obsolete</source> <translation type="unfinished"></translation> </message> <message> + <location line="+15"/> + <location line="+307"/> <source>Printing... (page %1)</source> <translation type="unfinished"></translation> </message> <message> + <location line="-300"/> + <location line="+307"/> <source>Printing completed</source> <translation type="unfinished"></translation> </message> <message> + <location line="-305"/> + <location line="+307"/> <source>Printing aborted</source> <translation type="unfinished"></translation> </message> <message> + <location line="-232"/> <source>Search wrapped.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+17"/> + <location line="+278"/> + <location line="+34"/> + <location line="+24"/> + <location line="+22"/> + <location line="+538"/> + <location line="+1"/> + <location line="+274"/> + <location line="+40"/> + <location line="+10"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location line="-1220"/> + <location line="+102"/> <source>Cannot find the string '%1'.</source> <translation type="unfinished"></translation> </message> <message> + <location line="-82"/> <source>Search And Translate in '%1' - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location line="+34"/> + <location line="+23"/> + <location line="+24"/> <source>Translate - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> + <location line="-46"/> <source>Translated %n entry(s)</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> + <location line="+23"/> <source>No more occurrences of '%1'. Start over?</source> <translation type="unfinished"></translation> </message> <message> + <location line="+30"/> <source>Create New Phrase Book</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Qt phrase books (*.qph) All files (*)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+11"/> <source>Phrase book created.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+17"/> <source>Open Phrase Book</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Qt phrase books (*.qph);;All files (*)</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> + <location line="+7"/> <source>%n phrase(s) loaded.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message> + <location line="+93"/> + <location line="+3"/> + <location line="+7"/> <source>Add to phrase book</source> <translation type="unfinished"></translation> </message> <message> + <location line="-9"/> <source>No appropriate phrasebook found.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>Adding entry to phrasebook %1</source> <translation type="unfinished"></translation> </message> <message> + <location line="+7"/> <source>Select phrase book to add to</source> <translation type="unfinished"></translation> </message> <message> + <location line="+29"/> <source>Unable to launch Qt Assistant (%1)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+17"/> <source>Version %1</source> <translation type="unfinished"></translation> </message> <message> - <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>%2</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p></source> + <location line="+3"/> + <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> <translation type="unfinished"></translation> </message> <message> + <location line="+38"/> <source>Do you want to save the modified files?</source> <translation type="unfinished"></translation> </message> <message> + <location line="+22"/> <source>Do you want to save '%1'?</source> <translation type="unfinished"></translation> </message> <message> + <location line="+43"/> <source>Qt Linguist[*]</source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source>%1[*] - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location line="+267"/> + <location line="+12"/> <source>No untranslated translation units left.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+198"/> <source>&Window</source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source>Minimize</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Ctrl+M</source> <translation type="unfinished"></translation> </message> <message> + <location line="+12"/> <source>Display the manual for %1.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Display information about %1.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+70"/> <source>&Save '%1'</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Save '%1' &As...</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Release '%1'</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Release '%1' As...</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>&Close '%1'</source> <translation type="unfinished"></translation> </message> <message> + <location line="+6"/> + <location line="+13"/> <source>&Close</source> <translation type="unfinished"></translation> </message> <message> + <location line="-10"/> <source>Save All</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/> <source>&Release All</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/> <source>Close All</source> <translation type="unfinished"></translation> </message> <message> + <location line="+23"/> <source>Translation File &Settings for '%1'...</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>&Batch Translation of '%1'...</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Search And &Translate in '%1'...</source> <translation type="unfinished"></translation> </message> <message> + <location line="+4"/> <source>Search And &Translate...</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+51"/> <source>File</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/> <source>Translation</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/> <source>Validation</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/> <source>Help</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+84"/> <source>Cannot read from phrase book '%1'.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+15"/> <source>Close this phrase book.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+4"/> <source>Enables you to add, modify, or delete entries in this phrase book.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+5"/> <source>Print the entries in this phrase book.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+16"/> <source>Cannot create phrase book '%1'.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+10"/> <source>Do you want to save phrase book '%1'?</source> <translation type="unfinished"></translation> </message> <message> + <location line="+349"/> <source>All</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Open/Refresh Form &Preview</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Form Preview Tool</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>F5</source> <translation type="unfinished"></translation> </message> <message> + <location/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-562"/> <source>Translation File &Settings...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Add to Phrase Book</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+T</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+J</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Ctrl+Shift+J</source> <translation type="unfinished"></translation> </message> + <message> + <location/> + <source>Previous unfinished item</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Next unfinished item</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Move to previous item</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Next item</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Mark item as done and move to the next unfinished item</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Copies the source text into the translation field</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Toggle the validity check of accelerators</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Toggle the validity check of ending punctuation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Toggle checking that phrase suggestions are used</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Toggle the validity check of place markers</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Display information about the Qt toolkit by Nokia.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location/> + <source>Length Variants</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>MessageEditor</name> <message> + <location filename="../tools/linguist/linguist/messageeditor.cpp" line="+42"/> + <source></source> + <comment>This is the right panel of the main window.</comment> + <translation></translation> + </message> + <message> + <location line="+30"/> + <source>Russian</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> <source>German</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Japanese</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>French</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Polish</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Chinese</source> <translation type="unfinished"></translation> </message> <message> + <location line="+47"/> <source>This whole panel allows you to view and edit the translation of some source text.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+10"/> <source>Source text</source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source>This area shows the source text.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+4"/> <source>Source text (Plural)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source>This area shows the plural form of the source text.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+4"/> <source>Developer comments</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>This area shows a comment that may guide you, and the context in which the text occurs.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+59"/> <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+234"/> <source>%1 translation (%2)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+9"/> <source>This is where you can enter or modify the translation of the above source text.</source> <translation type="unfinished"></translation> </message> <message> + <location line="+5"/> <source>%1 translation</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>%1 translator comments</source> <translation type="unfinished"></translation> </message> <message> + <location line="+157"/> <source>'%1' Line: %2</source> <translation type="unfinished"></translation> @@ -1196,18 +1583,22 @@ Line: %2</source> <context> <name>MessageModel</name> <message> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+839"/> <source>Completion status for %1</source> <translation type="unfinished"></translation> </message> <message> + <location line="+15"/> <source><file header></source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source><context comment></source> <translation type="unfinished"></translation> </message> <message> + <location line="+71"/> <source><unnamed context></source> <translation type="unfinished"></translation> </message> @@ -1215,6 +1606,7 @@ Line: %2</source> <context> <name>MsgEdit</name> <message> + <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-600"/> <source></source> <comment>This is the right panel of the main window.</comment> <translation></translation> @@ -1223,87 +1615,113 @@ Line: %2</source> <context> <name>PhraseBookBox</name> <message> + <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="+14"/> <source></source> <comment>Go to Phrase > Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment> <translation></translation> </message> <message> + <location line="+52"/> + <source>(New Entry)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> <source>%1[*] - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location line="+90"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location line="+1"/> <source>Cannot save phrase book '%1'.</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/phrasebookbox.ui"/> <source>Edit Phrase Book</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>This window allows you to add, modify, or delete entries in a phrase book.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Translation:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>This is the phrase in the target language corresponding to the source phrase.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>S&ource phrase:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>This is a definition for the source phrase.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>This is the phrase in the source language.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Definition:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to add the phrase to the phrase book.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&New Entry</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to remove the entry from the phrase book.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Remove Entry</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Settin&gs...</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to save the changes made.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Save</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to close this window.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Close</source> <translation type="unfinished"></translation> </message> @@ -1311,14 +1729,17 @@ Line: %2</source> <context> <name>PhraseModel</name> <message> + <location filename="../tools/linguist/linguist/phrasemodel.cpp" line="+117"/> <source>Source phrase</source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source>Translation</source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source>Definition</source> <translation type="unfinished"></translation> </message> @@ -1326,18 +1747,22 @@ Line: %2</source> <context> <name>PhraseView</name> <message> + <location filename="../tools/linguist/linguist/phraseview.cpp" line="+122"/> <source>Insert</source> <translation type="unfinished"></translation> </message> <message> + <location line="+3"/> <source>Edit</source> <translation type="unfinished"></translation> </message> <message> + <location line="+113"/> <source>Guess (%1)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+2"/> <source>Guess</source> <translation type="unfinished"></translation> </message> @@ -1345,62 +1770,63 @@ Line: %2</source> <context> <name>QObject</name> <message> + <location filename="../tools/linguist/shared/qm.cpp" line="+12"/> <source>Compiled Qt translations</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1302"/> <source>Translation files (%1);;</source> <translation type="unfinished"></translation> </message> <message> + <location line="+5"/> <source>All files (*)</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1134"/> + <location line="+27"/> + <location line="+67"/> + <location line="+39"/> + <location line="+17"/> + <location line="+15"/> + <location filename="../tools/linguist/linguist/phrase.cpp" line="+196"/> <source>Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> - <source>C++ source files</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Java source files</source> - <translation type="unfinished"></translation> - </message> - <message> + <location filename="../tools/linguist/shared/po.cpp" line="+870"/> <source>GNU Gettext localization files</source> <translation type="unfinished"></translation> </message> <message> - <source>Qt Script source files</source> + <location line="+7"/> + <source>GNU Gettext localization template files</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/shared/ts.cpp" line="+752"/> <source>Qt translation sources (format 1.1)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+8"/> <source>Qt translation sources (format 2.0)</source> <translation type="unfinished"></translation> </message> <message> + <location line="+9"/> <source>Qt translation sources (latest format)</source> <translation type="unfinished"></translation> </message> <message> - <source>Qt Designer form files</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Qt Jambi form files</source> - <translation type="unfinished"></translation> - </message> - <message> + <location filename="../tools/linguist/shared/xliff.cpp" line="+829"/> <source>XLIFF localization files</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/shared/qph.cpp" line="+195"/> <source>Qt Linguist 'Phrase Book'</source> <translation type="unfinished"></translation> </message> @@ -1408,14 +1834,17 @@ Line: %2</source> <context> <name>SourceCodeView</name> <message> + <location filename="../tools/linguist/linguist/sourcecodeview.cpp" line="+70"/> <source><i>Source code not available</i></source> <translation type="unfinished"></translation> </message> <message> + <location line="+33"/> <source><i>File %1 not available</i></source> <translation type="unfinished"></translation> </message> <message> + <location line="+5"/> <source><i>File %1 not readable</i></source> <translation type="unfinished"></translation> </message> @@ -1423,34 +1852,42 @@ Line: %2</source> <context> <name>Statistics</name> <message> + <location filename="../tools/linguist/linguist/statistics.ui"/> <source>Statistics</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Translation</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Source</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>0</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Words:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Characters:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Characters (with spaces):</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Close</source> <translation type="unfinished"></translation> </message> @@ -1458,6 +1895,7 @@ Line: %2</source> <context> <name>TrWindow</name> <message> + <location filename="../tools/linguist/linguist/trwindow.cpp" line="+14"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> @@ -1466,58 +1904,72 @@ Line: %2</source> <context> <name>TranslateDialog</name> <message> + <location filename="../tools/linguist/linguist/translatedialog.ui"/> <source>This window allows you to search for some text in the translation source file.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Type in the text to search for.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Find &source text:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>&Translate to:</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Search options</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Match &case</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Mark new translation as &finished</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Find Next</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Translate</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Translate All</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Click here to close this window.</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Cancel</source> <translation type="unfinished"></translation> </message> @@ -1525,26 +1977,33 @@ Line: %2</source> <context> <name>TranslationSettingsDialog</name> <message> + <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+93"/> <source>Any Country</source> <translation type="unfinished"></translation> </message> <message> + <location line="-22"/> + <location line="+8"/> <source>Settings for '%1' - Qt Linguist</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../tools/linguist/linguist/translationsettings.ui"/> <source>Source language</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Language</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Country/Region</source> <translation type="unfinished"></translation> </message> <message> + <location/> <source>Target language</source> <translation type="unfinished"></translation> </message> diff --git a/translations/qt_fr.ts b/translations/qt_fr.ts index 56a9e0e..1dd80be 100644 --- a/translations/qt_fr.ts +++ b/translations/qt_fr.ts @@ -39,15 +39,15 @@ </message> <message> <source>local audio file:</source> - <translation type="obsolete">Fichier audio local:</translation> + <translation type="obsolete">Fichier audio local : </translation> </message> <message> <source>local video file:</source> - <translation type="obsolete">Fichier vidéo local:</translation> + <translation type="obsolete">Fichier vidéo local : </translation> </message> <message> <source>remote media URL:</source> - <translation type="obsolete">URL distante :</translation> + <translation type="obsolete">URL distante : </translation> </message> <message> <source>run tests</source> @@ -69,11 +69,11 @@ <name>FakeReply</name> <message> <source>Fake error !</source> - <translation>Fausse erreur!</translation> + <translation>Fausse erreur !</translation> </message> <message> <source>Invalid URL</source> - <translation>URL non valide</translation> + <translation>URL invalide</translation> </message> </context> <context> @@ -96,7 +96,7 @@ </message> <message> <source>Preferences...</source> - <translation>Préférences…</translation> + <translation>Préférences...</translation> </message> <message> <source>Quit %1</source> @@ -115,7 +115,7 @@ </message> <message> <source>Location:</source> - <translation type="obsolete">Emplacement:</translation> + <translation type="obsolete">Emplacement : </translation> </message> </context> <context> @@ -224,13 +224,13 @@ so on.</source> <message> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.</source> - <translation>Attention: Vous n'avez apparemment pas installé le paquet gstreamer0.10-plugins-good. + <translation>Attention : Vous n'avez apparemment pas installé le paquet gstreamer0.10-plugins-good. Des fonctionnalités vidéo ont été desactivées.</translation> </message> <message> <source>Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled</source> - <translation>Attention: Vous n'avez apparemment pas installées les plugins de base de GStreamer. + <translation>Attention : Vous n'avez apparemment pas installées les plugins de base de GStreamer. Le support audio et vidéo est désactivé</translation> </message> </context> @@ -286,7 +286,7 @@ have libgstreamer-plugins-base installed.</source> </message> <message> <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source> - <translation>Un codec requis est manquant. Vous devez installer le codec suivant pour jouer le contenu: %0</translation> + <translation>Un codec requis est manquant. Vous devez installer le codec suivant pour jouer le contenu : %0</translation> </message> <message> <source>Could not open media source.</source> @@ -371,7 +371,7 @@ d'avoir installé libgstreamer-plugins-base.</translation> </message> <message> <source>Access denied</source> - <translation>Accès refusé</translation> + <translation>Autorisation refusée</translation> </message> <message> <source>Could not connect</source> @@ -407,11 +407,11 @@ d'avoir installé libgstreamer-plugins-base.</translation> </message> <message> <source>Invalid protocol</source> - <translation>Protocole non valide</translation> + <translation>Protocole invalide</translation> </message> <message> <source>Invalid URL</source> - <translation>URL non valide</translation> + <translation>URL invalide</translation> </message> <message> <source>Multicast error</source> @@ -465,6 +465,14 @@ d'avoir installé libgstreamer-plugins-base.</translation> <translation>Erreur lors de l'ouverture de l'URL</translation> </message> <message> + <source>Error opening resource</source> + <translation>erreur lors de l'ouverture de la ressource</translation> + </message> + <message> + <source>Error opening source: resource not opened</source> + <translation>erreur lors de l'ouverture de la source : ressource non ouverte</translation> + </message> + <message> <source>Setting volume failed</source> <translation>Le réglage du volume a échoué</translation> </message> @@ -585,11 +593,19 @@ d'avoir installé libgstreamer-plugins-base.</translation> <name>Phonon::MMF::MediaObject</name> <message> <source>Error opening source: type not supported</source> - <translation>Erreur lors de l'ouverture de la source: type non supporté</translation> + <translation>Erreur lors de l'ouverture de la source : type non supporté</translation> + </message> + <message> + <source>Error opening source: resource is compressed</source> + <translation>Erreur lors de l'ouverture de la source : ressource compressée</translation> + </message> + <message> + <source>Error opening source: resource not valid</source> + <translation>Erreur lors de l'ouverture de la source : ressource invalide</translation> </message> <message> <source>Error opening source: media type could not be determined</source> - <translation>Erreur lors de l'ouverture de la source: type de média non déterminé</translation> + <translation>Erreur lors de l'ouverture de la source : type de média non déterminé</translation> </message> </context> <context> @@ -637,7 +653,7 @@ d'avoir installé libgstreamer-plugins-base.</translation> <name>Phonon::VolumeSlider</name> <message> <source>Volume: %1%</source> - <translation>Volume: %1%</translation> + <translation>Volume : %1%</translation> </message> <message> <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> @@ -730,15 +746,15 @@ d'avoir installé libgstreamer-plugins-base.</translation> </message> <message> <source>Look &in:</source> - <translation>Chercher &dans :</translation> + <translation>Chercher &dans : </translation> </message> <message> <source>File &name:</source> - <translation>&Nom de fichier :</translation> + <translation>&Nom de fichier : </translation> </message> <message> <source>File &type:</source> - <translation>&Type de fichier :</translation> + <translation>&Type de fichier : </translation> </message> <message> <source>Back</source> @@ -910,7 +926,7 @@ d'avoir installé libgstreamer-plugins-base.</translation> </message> <message> <source>Directory:</source> - <translation>Dossier :</translation> + <translation>Dossier : </translation> </message> <message> <source>Error</source> @@ -922,7 +938,7 @@ File not found. Check path and filename.</source> <translation>%1 Impossible de trouver le fichier. -Vérifier le chemin et le nom du fichier.</translation> +Vérifiez le chemin et le nom du fichier.</translation> </message> <message> <source>All Files (*.*)</source> @@ -1122,7 +1138,7 @@ en <name>Q3ToolBar</name> <message> <source>More...</source> - <translation>Reste...</translation> + <translation>Plus...</translation> </message> </context> <context> @@ -1284,7 +1300,7 @@ en </message> <message> <source>COM &Object:</source> - <translation>&Objet COM :</translation> + <translation>&Objet COM : </translation> </message> </context> <context> @@ -1306,31 +1322,31 @@ en <name>QColorDialog</name> <message> <source>Hu&e:</source> - <translation>&Teinte :</translation> + <translation>&Teinte : </translation> </message> <message> <source>&Sat:</source> - <translation>&Saturation :</translation> + <translation>&Saturation : </translation> </message> <message> <source>&Val:</source> - <translation>&Valeur :</translation> + <translation>&Valeur : </translation> </message> <message> <source>&Red:</source> - <translation>&Rouge :</translation> + <translation>&Rouge : </translation> </message> <message> <source>&Green:</source> - <translation>&Vert :</translation> + <translation>&Vert : </translation> </message> <message> <source>Bl&ue:</source> - <translation>Ble&u :</translation> + <translation>Ble&u : </translation> </message> <message> <source>A&lpha channel:</source> - <translation>Canal a&lpha :</translation> + <translation>Canal a&lpha : </translation> </message> <message> <source>Select Color</source> @@ -1389,7 +1405,7 @@ en <message> <source>%1: permission denied</source> <comment>QSystemSemaphore</comment> - <translation type="obsolete">%1: permission refusée</translation> + <translation type="obsolete">%1 : permission refusée</translation> </message> <message> <source>%1: already exists</source> @@ -1399,7 +1415,7 @@ en <message> <source>%1: doesn't exists</source> <comment>QSystemSemaphore</comment> - <translation type="obsolete">%1: n'existe pas</translation> + <translation type="obsolete">%1 : n'existe pas</translation> </message> <message> <source>%1: does not exist</source> @@ -1433,31 +1449,31 @@ en </message> <message> <source>%1: key is empty</source> - <translation type="obsolete">%1: clé vide</translation> + <translation type="obsolete">%1 : clé vide</translation> </message> <message> <source>%1: unable to make key</source> - <translation type="obsolete">%1: impossible de créer la clé</translation> + <translation type="obsolete">%1 : impossible de créer la clé</translation> </message> <message> <source>%1: ftok failed</source> - <translation type="obsolete">%1: ftok a échoué</translation> + <translation type="obsolete">%1 : ftok a échoué</translation> </message> <message> <source>%1: already exists</source> - <translation type="obsolete">%1: existe déjà</translation> + <translation type="obsolete">%1 : existe déjà</translation> </message> <message> <source>%1: does not exist</source> - <translation type="obsolete">%1: n'existe pas</translation> + <translation type="obsolete">%1 : n'existe pas</translation> </message> <message> <source>%1: out of resources</source> - <translation type="obsolete">%1: plus de ressources disponibles</translation> + <translation type="obsolete">%1 : plus de ressources disponibles</translation> </message> <message> <source>%1: unknown error %2</source> - <translation type="obsolete">%1: erreur inconnue %2</translation> + <translation type="obsolete">%1 : erreur inconnue %2</translation> </message> </context> <context> @@ -1487,7 +1503,7 @@ en </message> <message> <source>Unable to prepare statement</source> - <translation>Impossible de prépare la requête</translation> + <translation>Impossible de préparer la requête</translation> </message> <message> <source>Unable to bind variable</source> @@ -1575,7 +1591,7 @@ en </message> <message> <source>Cannot anchor to a null item.</source> - <translation>impossible d'ancrer à un élément nul.</translation> + <translation>Impossible d'ancrer à un élément nul.</translation> </message> <message> <source>Cannot anchor a horizontal edge to a vertical edge.</source> @@ -1620,10 +1636,10 @@ en </message> </context> <context> - <name>QDeclarativeCompiledBindings</name> + <name>QDeclarativeBindings</name> <message> <source>Binding loop detected for property "%1"</source> - <translation></translation> + <translation>Boucle détectée dans l'affectation pour la propriété "%1"</translation> </message> </context> <context> @@ -1654,11 +1670,15 @@ en </message> <message> <source>Invalid property assignment: float expected</source> - <translation>Affectation de propriété invalide : float attendu</translation> + <translation type="obsolete">Affectation de propriété invalide : float attendu</translation> </message> <message> <source>Invalid property assignment: double expected</source> - <translation>Affectation de propriété invalide : double attendu</translation> + <translation type="obsolete">Affectation de propriété invalide : double attendu</translation> + </message> + <message> + <source>Invalid property assignment: number expected</source> + <translation>Affectation de propriété invalide : nombre attendu</translation> </message> <message> <source>Invalid property assignment: color expected</source> @@ -1706,238 +1726,245 @@ en </message> <message> <source>Component elements may not contain properties other than id</source> - <translation type="unfinished">Les éléments du composant ne peuvent pas contenir des propriétés autres que id</translation> + <translation>Les éléments du composant ne peuvent pas contenir des propriétés autres que id</translation> </message> <message> <source>Invalid component id specification</source> - <translation type="unfinished">L'ID de composant spécifiée n'est pas valide</translation> + <translation>L'id de composant spécifiée n'est pas valide</translation> </message> <message> <source>id is not unique</source> - <translation type="unfinished">l'ID n'est pas unique</translation> + <translation>l'id n'est pas unique</translation> </message> <message> <source>Invalid component body specification</source> - <translation type="unfinished">Le corps de la spécification du composant n'est pas valide</translation> + <translation>Le corps de la spécification du composant n'est pas valide</translation> </message> <message> <source>Component objects cannot declare new properties.</source> - <translation type="unfinished">Les objets composants ne peuvent pas déclarer de nouvelles propriétés.</translation> + <translation>Les objets composants ne peuvent pas déclarer de nouvelles propriétés.</translation> </message> <message> <source>Component objects cannot declare new signals.</source> - <translation type="unfinished">Les objets composants ne peuvent pas déclarer de nouveaux signaux.</translation> + <translation>Les objets composants ne peuvent pas déclarer de nouveaux signaux.</translation> </message> <message> <source>Component objects cannot declare new functions.</source> - <translation type="unfinished">Les objets composants ne peuvent pas déclarer de nouvelles fonctions.</translation> + <translation>Les objets composants ne peuvent pas déclarer de nouvelles fonctions.</translation> </message> <message> <source>Cannot create empty component specification</source> - <translation type="unfinished">Impossible de créer une spécification du composant vide</translation> + <translation>Impossible de créer une spécification du composant vide</translation> </message> <message> <source>Incorrectly specified signal assignment</source> - <translation type="unfinished">L'affectation du signal est ncorrectement spécifiée</translation> + <translation>L'affectation du signal est incorrectement spécifiée</translation> </message> <message> <source>Cannot assign a value to a signal (expecting a script to be run)</source> - <translation type="unfinished">Impossible d'assigner une valeur à un signal (celà exige d'éxécuter un script)</translation> + <translation>Impossible d'assigner une valeur à un signal (un script à exécuter est attendu)</translation> </message> <message> <source>Empty signal assignment</source> - <translation type="unfinished">Signal d'affectation vide</translation> + <translation>Affectation de signal vide</translation> </message> <message> <source>Empty property assignment</source> - <translation type="unfinished">Propriété d'affectation vide</translation> + <translation>Affectation de propriété vide</translation> </message> <message> <source>Attached properties cannot be used here</source> - <translation type="unfinished">La configuration spécifiée ne peut être utilisée.ici</translation> + <translation>La configuration spécifiée ne peut être utilisée ici.</translation> </message> <message> <source>Non-existent attached object</source> - <translation type="unfinished">Objet attaché non existant</translation> + <translation>Objet attaché inexistant</translation> </message> <message> <source>Invalid attached object assignment</source> - <translation type="unfinished">L'affectation de l'objet attaché est invalide</translation> + <translation>L'affectation de l'objet attaché est invalide</translation> </message> <message> <source>Cannot assign to non-existent default property</source> - <translation type="unfinished">Impossible d'attacher à une propriété par défaut non existante</translation> + <translation>Impossible d'attacher à une propriété par défaut inexistante</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished">Impossible d'attacher à une propriété non existante "%1"</translation> + <translation>Impossible d'attacher à une propriété inexistante "%1"</translation> </message> <message> <source>Invalid use of namespace</source> - <translation type="unfinished">Utilisation invalide d'espace de noms</translation> + <translation>Utilisation invalide d'espace de noms</translation> </message> <message> <source>Not an attached property name</source> - <translation type="unfinished">Ce n'est pas un nom de propriété attachée</translation> + <translation>Ce n'est pas un nom de propriété attachée</translation> </message> <message> <source>Invalid use of id property</source> - <translation type="unfinished">Utilisation invalide de la propriété id</translation> + <translation>Utilisation invalide de la propriété id</translation> </message> <message> <source>Property has already been assigned a value</source> - <translation type="unfinished">Une valeur a déjà été attribuée à la propriété</translation> + <translation>Une valeur a déjà été attribuée à la propriété</translation> </message> <message> <source>Invalid grouped property access</source> - <translation type="unfinished">Accès invalide à une propriété groupée</translation> + <translation>Accès invalide à une propriété groupée</translation> </message> <message> <source>Cannot assign a value directly to a grouped property</source> - <translation type="unfinished">Impossible d'assigner directement une valeur à une propriété groupée</translation> + <translation>Impossible d'assigner directement une valeur à une propriété groupée</translation> </message> <message> <source>Invalid property use</source> - <translation type="unfinished">La propriété utilisée est invalide</translation> + <translation>La propriété utilisée est invalide</translation> </message> <message> <source>Property assignment expected</source> - <translation type="unfinished">Propriété d'affectation attendue</translation> + <translation>Affectation de propriété attendue</translation> </message> <message> <source>Single property assignment expected</source> - <translation type="unfinished">Une seule propriété d'affectation est attendue</translation> + <translation>Une seule affectation de propriété est attendue</translation> </message> <message> <source>Unexpected object assignment</source> - <translation type="unfinished">Affectation d'objet innatendue</translation> + <translation>Affectation d'objet inattendue</translation> </message> <message> <source>Cannot assign object to list</source> - <translation type="unfinished">Impossible d'assigner un objet à une liste</translation> + <translation>Impossible d'assigner un objet à une liste</translation> </message> <message> <source>Can only assign one binding to lists</source> - <translation type="unfinished">Un seul lien peut être assigné à des listes</translation> + <translation>Un seul lien peut être assigné à des listes</translation> </message> <message> <source>Cannot assign primitives to lists</source> - <translation type="unfinished">Impossible d'assigner des primitives à des listes</translation> + <translation>Impossible d'assigner des primitives à des listes</translation> </message> <message> <source>Cannot assign multiple values to a script property</source> - <translation type="unfinished">Impossible d'assigner plusieurs valeurs à une propriété de script</translation> + <translation>Impossible d'assigner plusieurs valeurs à une propriété de script</translation> </message> <message> <source>Invalid property assignment: script expected</source> - <translation type="unfinished">Propriété d'affectation invalide: script attendu</translation> + <translation>Affectation de propriété invalide : script attendu</translation> </message> <message> <source>Cannot assign object to property</source> - <translation type="unfinished">Impossible d'assigner un objet à une propriété</translation> + <translation>Impossible d'assigner un objet à une propriété</translation> </message> <message> <source>"%1" cannot operate on "%2"</source> - <translation type="unfinished">"%1" ne peut pas fonctionner sur "%2"</translation> + <translation>"%1" ne peut pas opérer sur "%2"</translation> </message> <message> <source>Duplicate default property</source> - <translation type="unfinished">Propriété par défaut en double</translation> + <translation>Propriété par défaut en double</translation> </message> <message> <source>Duplicate property name</source> - <translation type="unfinished">Nom de propriété en double</translation> + <translation>Nom de propriété en double</translation> </message> <message> <source>Property names cannot begin with an upper case letter</source> - <translation type="unfinished">Les noms des propriétés ne peuvent pas commencer par une majuscule</translation> + <translation>Les noms des propriétés ne peuvent pas commencer par une majuscule</translation> + </message> + <message> + <source>Illegal property name</source> + <translation>Nom de propriété invalide</translation> </message> <message> <source>Duplicate signal name</source> - <translation type="unfinished">Nom de signal en double</translation> + <translation>Nom de signal en double</translation> </message> <message> <source>Signal names cannot begin with an upper case letter</source> - <translation type="unfinished">Les noms de signaux ne peuvent pas commencer par une majuscule</translation> + <translation>Les noms de signaux ne peuvent pas commencer par une majuscule</translation> + </message> + <message> + <source>Illegal signal name</source> + <translation>Nom de signal invalide</translation> </message> <message> <source>Duplicate method name</source> - <translation type="unfinished">Nom de méthode en double</translation> + <translation>Nom de méthode en double</translation> </message> <message> <source>Method names cannot begin with an upper case letter</source> - <translation type="unfinished">Les noms des méthodes ne peuvent pas commencer par une majuscule</translation> + <translation>Les noms des méthodes ne peuvent pas commencer par une majuscule</translation> + </message> + <message> + <source>Illegal method name</source> + <translation>Nom de méthode invalide</translation> </message> <message> <source>Property value set multiple times</source> - <translation type="unfinished">Valeur de propriété attribuée plusieurs fois</translation> + <translation>Valeur de propriété attribuée plusieurs fois</translation> </message> <message> <source>Invalid property nesting</source> - <translation type="unfinished">Propriété d'emboîtement invalide</translation> + <translation>Imbrication de propriété invalide</translation> </message> <message> <source>Cannot override FINAL property</source> - <translation type="unfinished">Impossible de remplacer la propriété FINAL</translation> + <translation>Impossible de remplacer la propriété FINAL</translation> </message> <message> <source>Invalid property type</source> - <translation type="unfinished">Type de propriété invalide</translation> + <translation>Type de propriété invalide</translation> </message> <message> <source>Invalid empty ID</source> - <translation>ID vide non valide</translation> + <translation>id vide invalide</translation> </message> <message> <source>IDs cannot start with an uppercase letter</source> - <translation type="unfinished">Les IDs ne peuvent pas commencer par une majuscule</translation> + <translation>Les ids ne peuvent pas commencer par une majuscule</translation> </message> <message> <source>IDs must start with a letter or underscore</source> - <translation type="unfinished">Les IDs doivent commencer par une lettre ou un souligné</translation> + <translation>Les ids doivent commencer par une lettre ou un tiret bas</translation> </message> <message> <source>IDs must contain only letters, numbers, and underscores</source> - <translation type="unfinished">Les IDs ne peuvent contenir que des lettres, des nombres ou des soulignés</translation> + <translation>Les ids ne peuvent contenir que des lettres, des nombres ou des tirets bas</translation> </message> <message> <source>ID illegally masks global JavaScript property</source> - <translation type="unfinished">ID masque illégalement la propriété JavaScript globale</translation> - </message> - <message> - <source>No property alias location</source> - <translatorcomment>??</translatorcomment> - <translation type="unfinished">La propriété de l'alias n'a pas d'emplacement</translation> + <translation>id masque illégalement la propriété JavaScript globale</translation> </message> <message> - <source>Invalid alias location</source> - <translation type="unfinished">Emplacement d'alias invalide</translation> + <source></source> + <translation>L'alias de propriété n'a pas d'emplacement</translation> </message> <message> <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> - <translation type="unfinished">Référence d'alias invalide. La référence d'alias doit être spécifiée comme <id> ou <id>.<property></translation> + <translation>Référence d'alias invalide. Les références d'alias doivent être spécifiées comme <id> ou <id>.<property></translation> </message> <message> <source>Invalid alias reference. Unable to find id "%1"</source> - <translation type="unfinished">Référence d'alias invalide. Impossible de trouver l'id "%1"</translation> + <translation>Référence d'alias invalide. Impossible de trouver l'id "%1"</translation> </message> </context> <context> <name>QDeclarativeComponent</name> <message> <source>Invalid empty URL</source> - <translation type="unfinished">URL vide non valide</translation> + <translation>URL vide invalide</translation> </message> </context> <context> <name>QDeclarativeCompositeTypeManager</name> <message> <source>Resource %1 unavailable</source> - <translation type="unfinished">La ressource %1 n'est pas disponible</translation> + <translation>La ressource %1 n'est pas disponible</translation> </message> <message> <source>Namespace %1 cannot be used as a type</source> - <translation type="unfinished">L'espace de noms %1 ne peut pas être utilisé comme un type</translation> + <translation>L'espace de noms %1 ne peut pas être utilisé comme un type</translation> </message> <message> <source>%1 %2</source> @@ -1945,130 +1972,130 @@ en </message> <message> <source>Type %1 unavailable</source> - <translation type="unfinished">Le type %1 n'est pas disponible</translation> + <translation>Le type %1 n'est pas disponible</translation> </message> </context> <context> <name>QDeclarativeConnections</name> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished">Imposible d'assigner à la propriété inexistante "%1"</translation> + <translation>Imposible d'assigner à la propriété inexistante "%1"</translation> </message> <message> <source>Connections: nested objects not allowed</source> - <translation type="unfinished">Connexions: les éléments imbriqués ne sont pas autorisés</translation> + <translation>Connexions : les éléments imbriqués ne sont pas autorisés</translation> </message> <message> <source>Connections: syntax error</source> - <translation type="unfinished">Connexions: erreur de syntaxe</translation> + <translation>Connexions : erreur de syntaxe</translation> </message> <message> <source>Connections: script expected</source> - <translation type="unfinished">Connexions: script attendu</translation> + <translation>Connexions : script attendu</translation> </message> </context> <context> <name>QDeclarativeEngine</name> <message> <source>executeSql called outside transaction()</source> - <translation type="unfinished">executeSql a été 1.appelé en dehors de transaction()</translation> + <translation>executeSql a été appelé en dehors de transaction()</translation> </message> <message> <source>Read-only Transaction</source> - <translation type="unfinished">Transaction en lecture seule</translation> + <translation>Transaction en lecture seule</translation> </message> <message> <source>Version mismatch: expected %1, found %2</source> - <translation type="unfinished">Version incompatible:%1 attendue, %2 trouvée</translation> + <translation>Version incompatible : %1 attendue, %2 trouvée</translation> </message> <message> <source>SQL transaction failed</source> - <translation type="unfinished">la transaction SQL a échouée</translation> + <translation>la transaction SQL a échouée</translation> </message> <message> <source>transaction: missing callback</source> - <translation type="unfinished">transaction: le rappel est absent</translation> + <translation>transaction : la fonction de rappel est absente</translation> </message> <message> <source>SQL: database version mismatch</source> - <translation type="unfinished">SQL: la version de la base de données est incompatible</translation> + <translation>SQL : la version de la base de données est incompatible</translation> </message> </context> <context> <name>QDeclarativeFlipable</name> <message> <source>front is a write-once property</source> - <translation type="unfinished">avant est une propriété à écriture unique</translation> + <translation>front est une propriété à écriture unique</translation> </message> <message> <source>back is a write-once property</source> - <translation type="unfinished">arrière est une propriété à écriture unique</translation> + <translation>back est une propriété à écriture unique</translation> </message> </context> <context> <name>QDeclarativeImportDatabase</name> <message> <source>module "%1" definition "%2" not readable</source> - <translation type="unfinished">La définition "%2" du module "%1% n'est pas lisible</translation> + <translation>la définition "%2" du module "%1% n'est pas lisible</translation> </message> <message> <source>plugin cannot be loaded for module "%1": %2</source> - <translation type="unfinished">Impossible de charger le plugin pour le module "%1": %2</translation> + <translation>impossible de charger le plugin pour le module "%1" : %2</translation> </message> <message> <source>module "%1" plugin "%2" not found</source> - <translation type="unfinished">Le plugin "%2" du module "%1" n'a pas été trouvé</translation> + <translation>le plugin "%2" du module "%1" n'a pas été trouvé</translation> </message> <message> <source>module "%1" version %2.%3 is not installed</source> - <translation type="unfinished">la version %2.%3 du module "%1" n'est pas installée</translation> + <translation>la version %2.%3 du module "%1" n'est pas installée</translation> </message> <message> <source>module "%1" is not installed</source> - <translation type="unfinished">le module "%1" n'est pas installé</translation> + <translation>le module "%1" n'est pas installé</translation> </message> <message> <source>"%1": no such directory</source> - <translation type="unfinished">"%1": le répertoire n'existe pas</translation> + <translation>"%1" : le répertoire n'existe pas</translation> </message> <message> <source>import "%1" has no qmldir and no namespace</source> - <translation type="unfinished">l'importation "%1" n'a pas de qmldir ni d'espace de noms</translation> + <translation>l'importation "%1" n'a pas de qmldir ni d'espace de noms</translation> </message> <message> <source>- %1 is not a namespace</source> - <translation type="unfinished">- %1 n'est pas un espace de noms</translation> + <translation>- %1 n'est pas un espace de noms</translation> </message> <message> <source>- nested namespaces not allowed</source> - <translation type="unfinished">- les espaces de noms imbriqués ne sont pas autorisés</translation> + <translation>- les espaces de noms imbriqués ne sont pas autorisés</translation> </message> <message> <source>local directory</source> - <translation type="unfinished">répertoire local</translation> + <translation>répertoire local</translation> </message> <message> <source>is ambiguous. Found in %1 and in %2</source> - <translation type="unfinished">est ambigu. Trouvé dans %1 et dans %2</translation> + <translation>est ambigu. Trouvé dans %1 et dans %2</translation> </message> <message> <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source> - <translation type="unfinished">est ambigu. Trouvé dans %1 dans les versions %2.%3 et %4.%5</translation> + <translation>est ambigu. Trouvé dans %1 dans les versions %2.%3 et %4.%5</translation> </message> <message> <source>is instantiated recursively</source> - <translation type="unfinished">est instancié récursivement</translation> + <translation>est instancié récursivement</translation> </message> <message> <source>is not a type</source> - <translation type="unfinished">n'est pas un type</translation> + <translation>n'est pas un type</translation> </message> </context> <context> <name>QDeclarativeKeyNavigationAttached</name> <message> <source>KeyNavigation is only available via attached properties</source> - <translation type="unfinished"></translation> + <translation>KeyNavigation est disponible uniquement via les propriétés attachées</translation> </message> </context> <context> @@ -2076,331 +2103,345 @@ en <message> <source>Keys is only available via attached properties</source> <translatorcomment>Keys, a verifier</translatorcomment> - <translation type="unfinished">Keys est disponible uniquement via les propriétés attachées</translation> + <translation>Keys est disponible uniquement via les propriétés attachées</translation> </message> </context> <context> <name>QDeclarativeListModel</name> <message> <source>remove: index %1 out of range</source> - <translation type="unfinished">supprimer: l'inder %1 est hors de la plage de valeurs admissible</translation> + <translation>remove : l'index %1 est hors de la plage de valeurs admissibles</translation> </message> <message> <source>insert: value is not an object</source> - <translation type="unfinished">insérer: une valeur n'est pas un objet</translation> + <translation>insert : une valeur n'est pas un objet</translation> </message> <message> <source>insert: index %1 out of range</source> - <translation type="unfinished">insérer: l'inder %1 est hors de la plage de valeurs admissible</translation> + <translation>insert : l'index %1 est hors de la plage de valeurs admissibles</translation> </message> <message> <source>move: out of range</source> - <translation type="unfinished">Déplacer: hors de la plage de valeurs admissible</translation> + <translation>move : hors de la plage de valeurs admissibles</translation> </message> <message> <source>append: value is not an object</source> - <translation type="unfinished">ajouter: une valeur n'est pas un objet</translation> + <translation>append : une valeur n'est pas un objet</translation> </message> <message> <source>set: value is not an object</source> - <translation type="unfinished">attribuer: une valeur n'est pas un objet</translation> + <translation>set : une valeur n'est pas un objet</translation> </message> <message> <source>set: index %1 out of range</source> - <translation type="unfinished">attribuer: l'index %1 est hors de la plage de valeurs admissible</translation> + <translation>set : l'index %1 est hors de la plage de valeurs admissible</translation> </message> <message> <source>ListElement: cannot contain nested elements</source> - <translation type="unfinished">ListElement: ne peut pas contenir des éléments imbriqués</translation> + <translation>ListElement : ne peut pas contenir des éléments imbriqués</translation> </message> <message> <source>ListElement: cannot use reserved "id" property</source> - <translation type="unfinished">ListElement: ne peut pas utiliser la propriété réservée "id"</translation> + <translation>ListElement : ne peut pas utiliser la propriété réservée "id"</translation> </message> <message> <source>ListElement: cannot use script for property value</source> - <translation type="unfinished">ListElement: ne peut pas utiliser script comme valeur pour une propriété</translation> + <translation>ListElement : ne peut pas utiliser script comme valeur pour une propriété</translation> </message> <message> <source>ListModel: undefined property '%1'</source> - <translation type="unfinished">ListModel: propriété indéfinie '%1'</translation> + <translation>ListModel : propriété indéfinie '%1'</translation> </message> </context> <context> <name>QDeclarativeLoader</name> <message> <source>Loader does not support loading non-visual elements.</source> - <translation type="unfinished">Le chargeur n'est pas compatible avec le chargement d'éléments non-visuels.</translation> + <translation>Le chargeur n'est pas compatible avec le chargement d'éléments non-visuels.</translation> </message> </context> <context> <name>QDeclarativeParentAnimation</name> <message> <source>Unable to preserve appearance under complex transform</source> - <translation type="unfinished">Impossible de conserver l'aspect lors d'une transformation complexe</translation> + <translation>Impossible de conserver l'aspect lors d'une transformation complexe</translation> </message> <message> <source>Unable to preserve appearance under non-uniform scale</source> - <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle non uniforme</translation> + <translation>Impossible de conserver l'aspect lors d'une mise à l'échelle non uniforme</translation> </message> <message> <source>Unable to preserve appearance under scale of 0</source> - <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle égale à 0</translation> + <translation>Impossible de conserver l'aspect lors d'une mise à l'échelle égale à 0</translation> </message> </context> <context> <name>QDeclarativeParentChange</name> <message> <source>Unable to preserve appearance under complex transform</source> - <translation type="unfinished">Impossible de conserver l'aspect lors d'une transformation complexe</translation> + <translation>Impossible de conserver l'aspect lors d'une transformation complexe</translation> </message> <message> <source>Unable to preserve appearance under non-uniform scale</source> - <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle non uniforme</translation> + <translation>Impossible de conserver l'aspect lors d'une mise à l'échelle non uniforme</translation> </message> <message> <source>Unable to preserve appearance under scale of 0</source> - <translation type="unfinished">Impossible de conserver l'aspect lors d'une mise à l'échelle égale à 0</translation> + <translation>Impossible de conserver l'aspect lors d'une mise à l'échelle égale à 0</translation> </message> </context> <context> <name>QDeclarativeParser</name> <message> <source>Illegal unicode escape sequence</source> - <translation type="unfinished">séquence d'échappement unicode illégale</translation> + <translation>Séquence d'échappement Unicode illégale</translation> </message> <message> <source>Illegal character</source> - <translation type="unfinished">caractère illégal</translation> + <translation>Caractère illégal</translation> </message> <message> <source>Unclosed string at end of line</source> - <translation type="unfinished">chaîne de caractères non fermée en fin de ligne</translation> + <translation>Chaîne de caractères non fermée en fin de ligne</translation> </message> <message> <source>Illegal escape squence</source> - <translation type="unfinished">séquence d'échappement illégale</translation> + <translation>Séquence d'échappement illégale</translation> </message> <message> <source>Unclosed comment at end of file</source> - <translation type="unfinished">commentaire non fermé en fin de ligne</translation> + <translation>Commentaire non fermé en fin de ligne</translation> </message> <message> <source>Illegal syntax for exponential number</source> - <translation type="unfinished">syntaxe illégale pour un nombre exponentiel</translation> + <translation>Syntaxe illégale pour un nombre exponentiel</translation> </message> <message> <source>Identifier cannot start with numeric literal</source> - <translatorcomment>??? </translatorcomment> - <translation type="unfinished">impossible de commencer un identifiant par un littéral numérique</translation> + <translation>Impossible de commencer un identifiant par un chiffre</translation> </message> <message> <source>Unterminated regular expression literal</source> - <translation type="unfinished">littéral non terminé pour l'expression régulière</translation> + <translation>Élément non terminé pour l'expression régulière</translation> </message> <message> <source>Invalid regular expression flag '%0'</source> - <translation type="unfinished">drapeau '%0' invalid pour l'expression régulière</translation> + <translation>Drapeau '%0' invalid pour l'expression régulière</translation> </message> <message> <source>Unterminated regular expression backslash sequence</source> - <translation type="unfinished">séquence antislash non terminée pour l'expression régulière</translation> + <translation>Séquence antislash non terminée pour l'expression régulière</translation> </message> <message> <source>Unterminated regular expression class</source> - <translation type="unfinished">class non terminé pour l'expression régulière</translation> + <translation>Classe non terminée pour l'expression régulière</translation> </message> <message> <source>Syntax error</source> - <translation type="unfinished">Erreur de syntaxe</translation> + <translation>Erreur de syntaxe</translation> </message> <message> <source>Unexpected token `%1'</source> - <translation type="unfinished">jeton inattendu '%1'</translation> + <translation>jeton inattendu '%1'</translation> </message> <message> <source>Expected token `%1'</source> - <translation type="unfinished">jeton attendu '%1'</translation> + <translation>jeton attendu '%1'</translation> </message> <message> <source>Property value set multiple times</source> - <translation type="unfinished">valeur de propriété attribuée à plusieurs reprises</translation> + <translation>valeur de propriété attribuée à plusieurs reprises</translation> </message> <message> <source>Expected type name</source> - <translation type="unfinished">Nom de type attendu</translation> + <translation>Nom de type attendu</translation> </message> <message> <source>Invalid import qualifier ID</source> - <translation type="unfinished">qualificatif ID d'importation invalide</translation> + <translation>qualificatif id d'importation invalide</translation> </message> <message> <source>Reserved name "Qt" cannot be used as an qualifier</source> - <translation type="unfinished">"Qt" est un nom réservé et ne peut pas être utilisé comme qualificatif</translation> + <translation>"Qt" est un nom réservé et ne peut pas être utilisé comme qualificatif</translation> </message> <message> <source>Script import qualifiers must be unique.</source> <translatorcomment>??</translatorcomment> - <translation type="unfinished">Les qualificatifs d'importation de script doivent être uniques.</translation> + <translation>Les qualificatifs d'importation de script doivent être uniques.</translation> </message> <message> <source>Script import requires a qualifier</source> - <translation type="unfinished">L'importation de script exige un qualificatif</translation> + <translation>L'importation de script exige un qualificatif</translation> </message> <message> <source>Library import requires a version</source> - <translation type="unfinished">L'importation de bibliothèque exige une version</translation> + <translation>L'importation de bibliothèque exige une version</translation> </message> <message> <source>Expected parameter type</source> - <translation type="unfinished">Type de paramètre attendu</translation> + <translation>Type de paramètre attendu</translation> </message> <message> <source>Invalid property type modifier</source> - <translation type="unfinished">Modificateur invalide pour le type de propriété</translation> + <translation>Modificateur invalide pour le type de propriété</translation> </message> <message> <source>Unexpected property type modifier</source> - <translation type="unfinished">Modificateur innatendu pour le type de propriété</translation> + <translation>Modificateur inattendu pour le type de propriété</translation> </message> <message> <source>Expected property type</source> - <translation type="unfinished">Type de propriété attendue</translation> + <translation>Type de propriété attendu</translation> </message> <message> <source>Readonly not yet supported</source> - <translation type="unfinished">La lecture seule n'est pas encore implémentée</translation> + <translation>La lecture seule n'est pas encore implémentée</translation> </message> <message> <source>JavaScript declaration outside Script element</source> - <translation type="unfinished">Déclaration JavaScript en edhors de l'élément Script</translation> + <translation>Déclaration JavaScript en dehors de l'élément Script</translation> </message> </context> <context> <name>QDeclarativePauseAnimation</name> <message> <source>Cannot set a duration of < 0</source> - <translation type="unfinished">Impossible d'attribuer une durée < 0</translation> + <translation>Impossible d'attribuer une durée < 0</translation> + </message> +</context> +<context> + <name>QDeclarativePixmap</name> + <message> + <source>Error decoding: %1: %2</source> + <translation>Erreur de décodage : %1 : %2</translation> + </message> + <message> + <source>Failed to get image from provider: %1</source> + <translation>Impossible d'obtenir l'image du fournisseur : %1</translation> + </message> + <message> + <source>Cannot open: %1</source> + <translation>Impossible d'ouvrir : %1</translation> </message> </context> <context> <name>QDeclarativePixmapCache</name> <message> <source>Error decoding: %1: %2</source> - <translation type="unfinished">Erreur de décodage: %1: %2</translation> + <translation type="obsolete">Erreur de décodage : %1 : %2</translation> </message> <message> <source>Failed to get image from provider: %1</source> - <translation type="unfinished">Impossible d'obtenir l'image du fournisseur: %1</translation> + <translation type="obsolete">Impossible d'obtenir l'image du fournisseur : %1</translation> </message> <message> <source>Cannot open: %1</source> - <translation type="unfinished">Impossible d'ouvrir: %1</translation> + <translation type="obsolete">Impossible d'ouvrir : %1</translation> </message> <message> <source>Unknown Error loading %1</source> - <translation type="unfinished">Erreur de chargement inconnue: %1</translation> + <translation type="obsolete">Erreur de chargement inconnue : %1</translation> </message> </context> <context> <name>QDeclarativePropertyAnimation</name> <message> <source>Cannot set a duration of < 0</source> - <translation type="unfinished">Impossible d'attribuer une durée < 0</translation> + <translation>Impossible d'attribuer une durée < 0</translation> </message> </context> <context> <name>QDeclarativePropertyChanges</name> <message> <source>PropertyChanges does not support creating state-specific objects.</source> - <translation type="unfinished">PropertyChanges n'est pas compatible avec la création d'objets spécifiques à un état.</translation> + <translation>PropertyChanges n'est pas compatible avec la création d'objets spécifiques à un état.</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> - <translation type="unfinished">Ne peut pas assigner à la propriété inexistante "%1"</translation> + <translation>Ne peut pas assigner à la propriété inexistante "%1"</translation> </message> <message> <source>Cannot assign to read-only property "%1"</source> - <translation type="unfinished">Ne peut pas assigner à la propriété en lecture seule "%1"</translation> + <translation>Ne peut pas assigner à la propriété en lecture seule "%1"</translation> </message> </context> <context> <name>QDeclarativeTextInput</name> <message> <source>Could not load cursor delegate</source> - <translation type="unfinished">Impossible de charger le curseur délégué</translation> + <translation>Impossible de charger le délégué de curseur</translation> </message> <message> <source>Could not instantiate cursor delegate</source> - <translation type="unfinished">Impossible d'instancier le curseur délégué</translation> + <translation>Impossible d'instancier le délégué de curseur</translation> </message> </context> <context> <name>QDeclarativeVME</name> <message> <source>Unable to create object of type %1</source> - <translation type="unfinished">Impossible de créer un objet de type %1</translation> + <translation>Impossible de créer un objet de type %1</translation> </message> <message> <source>Cannot assign value %1 to property %2</source> - <translation type="unfinished">Impossible d'assigner la valeur %1 à la propriété %2</translation> + <translation>Impossible d'assigner la valeur %1 à la propriété %2</translation> </message> <message> <source>Cannot assign object type %1 with no default method</source> - <translation type="unfinished">Impossible d'assigner un objet de type %1 sans méthode défaut</translation> + <translation>Impossible d'assigner un objet de type %1 sans méthode par défaut</translation> </message> <message> <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> <translatorcomment>le vs a confirmer</translatorcomment> - <translation type="unfinished">Impossible de connecter le signal/slot %1 %vs. %2 pour cause d'incompatibilité</translation> + <translation>Impossible de connecter le signal/slot %1 %vs. %2 pour cause d'incompatibilité</translation> </message> <message> <source>Cannot assign an object to signal property %1</source> - <translation type="unfinished">NImpossible d'assigner un objet à la propriété %1 d'un signal</translation> + <translation>Impossible d'assigner un objet à la propriété %1 d'un signal</translation> </message> <message> <source>Cannot assign object to list</source> - <translation type="unfinished">Impossible d'assigner un objet à une liste</translation> + <translation>Impossible d'assigner un objet à une liste</translation> </message> <message> <source>Cannot assign object to interface property</source> - <translation type="unfinished">Impossible d'assigner un objet à la propriété d'une interface</translation> + <translation>Impossible d'assigner un objet à la propriété d'une interface</translation> </message> <message> <source>Unable to create attached object</source> - <translation type="unfinished">Impossible de créer un object attaché</translation> + <translation>Impossible de créer un objet attaché</translation> </message> <message> <source>Cannot set properties on %1 as it is null</source> - <translation type="unfinished">Impossible d'attribuer les propriétés à %1 car ce dernier est nul</translation> + <translation>Impossible d'attribuer les propriétés à %1 car ce dernier est nul</translation> </message> </context> <context> <name>QDeclarativeVisualDataModel</name> <message> <source>Delegate component must be Item type.</source> - <translation type="unfinished">Un composant délégué doit être de type Item.</translation> + <translation>Un composant délégué doit être de type Item.</translation> </message> </context> <context> <name>QDeclarativeXmlListModel</name> <message> <source>Qt was built without support for xmlpatterns</source> - <translation type="unfinished">Qt a été généré sans support pour xmlpatterns</translation> + <translation>Qt a été compilé sans support pour xmlpatterns</translation> </message> </context> <context> <name>QDeclarativeXmlListModelRole</name> <message> <source>An XmlRole query must not start with '/'</source> - <translation type="unfinished">Une requête XmlRole ne doit pas commencer par '/'</translation> + <translation>Une requête XmlRole ne doit pas commencer par '/'</translation> </message> </context> <context> <name>QDeclarativeXmlRoleList</name> <message> <source>An XmlListModel query must start with '/' or "//"</source> - <translation type="unfinished">Une requête XmlListModel doit commencer par '/' ou "//"</translation> + <translation>Une requête XmlListModel doit commencer par '/' ou "//"</translation> </message> </context> <context> @@ -2415,7 +2456,7 @@ en </message> <message> <source>SliderHandle</source> - <translation>Poignée</translation> + <translation>Poignée du slider</translation> </message> </context> <context> @@ -2599,15 +2640,15 @@ en </message> <message> <source>Debug Message:</source> - <translation>Message de débogage:</translation> + <translation>Message de débogage : </translation> </message> <message> <source>Warning:</source> - <translation>Avertissement:</translation> + <translation>Avertissement : </translation> </message> <message> <source>Fatal Error:</source> - <translation>Erreur fatale:</translation> + <translation>Erreur fatale : </translation> </message> </context> <context> @@ -2638,7 +2679,7 @@ en </message> <message> <source>Will not rename sequential file using block copy</source> - <translation>Ne renommera pas le fichier séquentiel avec la copie bloc</translation> + <translation>Ne renommera pas le fichier séquentiel avec la copie par blocs</translation> </message> </context> <context> @@ -2714,11 +2755,11 @@ Veuillez vérifier que le nom du fichier est correct.</translation> </message> <message> <source>Files of type:</source> - <translation>Fichiers de type :</translation> + <translation>Fichiers de type : </translation> </message> <message> <source>Directory:</source> - <translation>Dossier :</translation> + <translation>Dossier : </translation> </message> <message> <source> @@ -2744,7 +2785,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Are sure you want to delete '%1'?</source> - <translation>Etes-vous sûr de vouloir supprimer '%1' ?</translation> + <translation>Êtes-vous sûr de vouloir supprimer '%1' ?</translation> </message> <message> <source>Could not delete directory.</source> @@ -2820,11 +2861,11 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>File &name:</source> - <translation>&Nom de fichier :</translation> + <translation>&Nom de fichier : </translation> </message> <message> <source>Look in:</source> - <translation>Voir dans:</translation> + <translation>Voir dans : </translation> </message> <message> <source>Create New Folder</source> @@ -2956,11 +2997,11 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Demi Bold</source> - <translation>Semi Gras</translation> + <translation>Demi-gras</translation> </message> <message> <source>Black</source> - <translation>Noir</translation> + <translation>Extra-gras</translation> </message> <message> <source>Demi</source> @@ -2968,7 +3009,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Light</source> - <translation>Léger</translation> + <translation>Maigre</translation> </message> <message> <source>Italic</source> @@ -3012,11 +3053,11 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Thaana</source> - <translation>Thaana</translation> + <translation>Thâna</translation> </message> <message> <source>Devanagari</source> - <translation>Devanagari</translation> + <translation>Dévanagari</translation> </message> <message> <source>Bengali</source> @@ -3036,7 +3077,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Tamil</source> - <translation>Tamil</translation> + <translation>Tamoul</translation> </message> <message> <source>Telugu</source> @@ -3176,11 +3217,11 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Connection to %1 closed</source> - <translation>Connexion à %1 arrêtée</translation> + <translation>Connexion à %1 fermée</translation> </message> <message> <source>Connection closed</source> - <translation>Connexion arrêtée</translation> + <translation>Connexion fermée</translation> </message> <message> <source>Host %1 not found</source> @@ -3207,7 +3248,7 @@ Voulez-vous quand même le supprimer ?</translation> <message> <source>Login failed: %1</source> - <translation>Échec du login: + <translation>Échec du login : %1</translation> </message> <message> @@ -3299,7 +3340,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Invalid hostname</source> - <translation>Nom d'hôte non valide</translation> + <translation>Nom d'hôte invalide</translation> </message> </context> <context> @@ -3338,11 +3379,11 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Connection to %1 closed</source> - <translation>Connexion à %1 arrêtée</translation> + <translation>Connexion à %1 fermée</translation> </message> <message> <source>Connection closed</source> - <translation>Connexion arrêtée</translation> + <translation>Connexion fermée</translation> </message> <message> <source>Unknown error</source> @@ -3402,7 +3443,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>SSL handshake failed</source> - <translation>le handshake SSL a échoué</translation> + <translation>La poignée de main SSL a échoué</translation> </message> <message> <source>Connection refused (or timed out)</source> @@ -3429,7 +3470,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Proxy denied connection</source> - <translation>Le Proxy a rejeté la connexion</translation> + <translation>Le proxy a rejeté la connexion</translation> </message> <message> <source>Error communicating with HTTP proxy</source> @@ -3546,7 +3587,7 @@ Voulez-vous quand même le supprimer ?</translation> <name>QIODevice</name> <message> <source>Permission denied</source> - <translation>Accès refusé</translation> + <translation>Autorisation refusée</translation> </message> <message> <source>Too many open files</source> @@ -3596,22 +3637,22 @@ Voulez-vous quand même le supprimer ?</translation> <name>QInputDialog</name> <message> <source>Enter a value:</source> - <translation>Entrer une valeur :</translation> + <translation>Entrer une valeur : </translation> </message> </context> <context> <name>QLibrary</name> <message> <source>QLibrary::load_sys: Cannot load %1 (%2)</source> - <translation type="obsolete">QLibrary::load_sys: Impossible de charger %1 (%2)</translation> + <translation type="obsolete">QLibrary::load_sys : Impossible de charger %1 (%2)</translation> </message> <message> <source>QLibrary::unload_sys: Cannot unload %1 (%2)</source> - <translation type="obsolete">QLibrary::unload_sys: Impossible de décharger %1 (%2)</translation> + <translation type="obsolete">QLibrary::unload_sys : Impossible de décharger %1 (%2)</translation> </message> <message> <source>QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3)</source> - <translation type="obsolete">QLibrary::resolve_sys: Symbole "%1" non défini dans %2 (%3)</translation> + <translation type="obsolete">QLibrary::resolve_sys : Symbole "%1" non défini dans %2 (%3)</translation> </message> <message> <source>Could not mmap '%1': %2</source> @@ -3697,58 +3738,58 @@ Voulez-vous quand même le supprimer ?</translation> <name>QLocalServer</name> <message> <source>%1: Name error</source> - <translation>%1: Erreur de nom</translation> + <translation>%1 : Erreur de nom</translation> </message> <message> <source>%1: Permission denied</source> - <translation>%1: Permission refusée</translation> + <translation>%1 : Permission refusée</translation> </message> <message> <source>%1: Address in use</source> - <translation>%1: Address déjà utilisée</translation> + <translation>%1 : Address déjà utilisée</translation> </message> <message> <source>%1: Unknown error %2</source> - <translation>%1: Erreur inconnue %2</translation> + <translation>%1 : Erreur inconnue %2</translation> </message> </context> <context> <name>QLocalSocket</name> <message> <source>%1: Connection refused</source> - <translation>%1: Connexion refusée</translation> + <translation>%1 : Connexion refusée</translation> </message> <message> <source>%1: Remote closed</source> - <translation>%1: Connexion fermée</translation> + <translation>%1 : Connexion fermée</translation> </message> <message> <source>%1: Invalid name</source> - <translation>%1: Nom invalide</translation> + <translation>%1 : Nom invalide</translation> </message> <message> <source>%1: Socket access error</source> - <translation>%1: Erreur d'accès au socket</translation> + <translation>%1 : Erreur d'accès au socket</translation> </message> <message> <source>%1: Socket resource error</source> - <translation>%1: Erreur de ressource du socket</translation> + <translation>%1 : Erreur de ressource du socket</translation> </message> <message> <source>%1: Socket operation timed out</source> - <translation>%1: L'opération socket a expiré</translation> + <translation>%1 : L'opération socket a expiré</translation> </message> <message> <source>%1: Datagram too large</source> - <translation>%1: Datagramme trop grand</translation> + <translation>%1 : Datagramme trop grand</translation> </message> <message> <source>%1: Connection error</source> - <translation>%1: Erreur de connexion</translation> + <translation>%1 : Erreur de connexion</translation> </message> <message> <source>%1: The socket operation is not supported</source> - <translation>%1: L'opération n'est pas supportée</translation> + <translation>%1 : L'opération n'est pas supportée</translation> </message> <message> <source>%1: Unknown error</source> @@ -3756,7 +3797,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>%1: Unknown error %2</source> - <translation>%1: Erreur inconnue %2</translation> + <translation>%1 : Erreur inconnue %2</translation> </message> </context> <context> @@ -3932,10 +3973,6 @@ Voulez-vous quand même le supprimer ?</translation> <source>The file could not be accessed.</source> <translation>Impossible d'accéder au fichier.</translation> </message> - <message> - <source>Playlist format is not supported.</source> - <translation></translation> - </message> </context> <context> <name>QMenu</name> @@ -3956,7 +3993,7 @@ Voulez-vous quand même le supprimer ?</translation> <name>QMenuBar</name> <message> <source>About</source> - <translation type="obsolete">A propos</translation> + <translation type="obsolete">À propos</translation> </message> <message> <source>Config</source> @@ -3988,7 +4025,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>About %1</source> - <translation type="obsolete">A propos de %1</translation> + <translation type="obsolete">À propos de %1</translation> </message> <message> <source>About Qt</source> @@ -4027,7 +4064,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qtopia Core.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com/</a> for more information.</p></source> - <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'applications multi-platformes.</p><p>Qt fournit la portabilité du code source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et toutes les variantes commerciales majeures d'Unix. Qt est aussi disponible pour les systèmes embarqués sous le nom Qtopia Core.</p><p>Qt est un produit de Trolltech. <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></translation> + <translation type="obsolete"><h3>À propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'applications multi-platformes.</p><p>Qt fournit la portabilité du code source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et toutes les variantes commerciales majeures d'Unix. Qt est aussi disponible pour les systèmes embarqués sous le nom Qtopia Core.</p><p>Qt est un produit de Trolltech. <a href="http : //qt.nokia.com/">qt.nokia.com</a> for more information.</p></translation> </message> <message> <source>Show Details...</source> @@ -4039,19 +4076,19 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source><h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation type="obsolete"><h3>À propos de Qt</h3><p>Ce programme utilise Qt version %1.</p><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> + <translation type="obsolete"><h3>À propos de Qt</h3><p>Ce programme utilise Qt version %1.</p><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés comme Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http : //qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http : //qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> </message> <message> <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un framework de développement d'applications multi-plateforme.</p><p>Qt fournit la portabilité du code source surMS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, et toutes les variantes majeures d'Unix. Qt est aussi disponible pour l'embarqué avec Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt est un produit de Nokia. Allez à <a href="http://qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> + <translation type="obsolete"><h3>À propos de Qt</h3>%1<p>Qt est un framework de développement d'applications multi-plateforme.</p><p>Qt fournit la portabilité du code source surMS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, et toutes les variantes majeures d'Unix. Qt est aussi disponible pour l'embarqué avec Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt est un produit de Nokia. Allez à <a href="http : //qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> </message> <message> <source><p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> for an overview of Qt licensing.</p></source> - <translation type="obsolete"><p>Ce programme utilise Qt Open Source Edition version %1.</p><p>Qt Open Source Edition est prévu pour le développement d'applications Open Source. Vous devez avoir un license commerciale de Qt pour développer des applications propiétaires (Closed Source).</p><p>Vous pouvez aller sur <a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> pour plus d'informations sur les licenses Qt.</p></translation> + <translation type="obsolete"><p>Ce programme utilise Qt Open Source Edition version %1.</p><p>Qt Open Source Edition est prévu pour le développement d'applications Open Source. Vous devez avoir un license commerciale de Qt pour développer des applications propiétaires (Closed Source).</p><p>Vous pouvez aller sur <a href="http : //qt.nokia.com/company/model/">qt.nokia.com/company/model/</a> pour plus d'informations sur les licenses Qt.</p></translation> </message> <message> <source><h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt Embedded.</p><p>Qt is a Trolltech product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation type="obsolete"><h3>A propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'application multi-plateforme.</p><p>Qt fournit la portabilité de votre source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, toutes les variantes majeures d'Unix. Qt est aussi disponible pour les périphériques embarqués avec Qt Embedded.</p><p>Qt est un produit de Trolltech. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> + <translation type="obsolete"><h3>À propos de Qt</h3>%1<p>Qt est un toolkit C++ pour le développement d'application multi-plateforme.</p><p>Qt fournit la portabilité de votre source pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, toutes les variantes majeures d'Unix. Qt est aussi disponible pour les périphériques embarqués avec Qt Embedded.</p><p>Qt est un produit de Trolltech. Voir <a href="http : //qt.nokia.com/">qt.nokia.com</a> pour plus d'informations.</p></translation> </message> <message> <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> @@ -4059,7 +4096,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> + <translation><p>Qt est une bibliothèque logicielle C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés comme Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou libres) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http : //qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http : //qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> </message> </context> <context> @@ -4112,7 +4149,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Permission denied</source> - <translation>Accès refusé</translation> + <translation>Autorisation refusée</translation> </message> <message> <source>Connection timed out</source> @@ -4209,7 +4246,7 @@ Voulez-vous quand même le supprimer ?</translation> <name>QNetworkAccessDebugPipeBackend</name> <message> <source>Write error writing to %1: %2</source> - <translation>Erreur lors de l'écriture dans %1: %2</translation> + <translation>Erreur lors de l'écriture dans %1 : %2</translation> </message> <message> <source>Socket error on %1: %2</source> @@ -4284,7 +4321,7 @@ Voulez-vous quand même le supprimer ?</translation> <name>QNetworkReply</name> <message> <source>Error downloading %1 - server replied: %2</source> - <translation>Erreur lors du téléchargement de %1 - le serveur a répondu: %2</translation> + <translation>Erreur lors du téléchargement de %1 - le serveur a répondu : %2</translation> </message> <message> <source>Protocol "%1" is unknown</source> @@ -4450,7 +4487,7 @@ Voulez-vous quand même le supprimer ?</translation> <name>QODBCResult</name> <message> <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> - <translation>QODBCResult::reset: Impossible d'utiliser 'SQL_CURSOR_STATIC' comme attribut de requête. Veuillez vérifier la configuration de votre pilote ODBC</translation> + <translation>QODBCResult::reset : Impossible d'utiliser 'SQL_CURSOR_STATIC' comme attribut de requête. Veuillez vérifier la configuration de votre pilote ODBC</translation> </message> <message> <source>Unable to execute statement</source> @@ -4517,7 +4554,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Protocol error: packet of size 0 received</source> - <translation type="obsolete">Erreur de protocole: paquet de taille 0 reçu</translation> + <translation type="obsolete">Erreur de protocole : paquet de taille 0 reçu</translation> </message> <message> <source>No host name given</source> @@ -4525,7 +4562,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Invalid hostname</source> - <translation type="obsolete">Nom d'hôte non valide</translation> + <translation type="obsolete">Nom d'hôte invalide</translation> </message> <message> <source>PulseAudio Sound Server</source> @@ -4617,19 +4654,19 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Page size:</source> - <translation>Dimensions :</translation> + <translation>Dimensions : </translation> </message> <message> <source>Width:</source> - <translation>Largeur :</translation> + <translation>Largeur : </translation> </message> <message> <source>Height:</source> - <translation>Hauteur :</translation> + <translation>Hauteur : </translation> </message> <message> <source>Paper source:</source> - <translation>Source du papier :</translation> + <translation>Source du papier : </translation> </message> <message> <source>Orientation</source> @@ -4719,7 +4756,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Number of copies:</source> - <translation type="obsolete">Nombre de copies :</translation> + <translation type="obsolete">Nombre de copies : </translation> </message> <message> <source>Paper format</source> @@ -4867,15 +4904,15 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Page size:</source> - <translation type="obsolete">Dimensions :</translation> + <translation type="obsolete">Dimensions : </translation> </message> <message> <source>Orientation:</source> - <translation type="obsolete">Orientation :</translation> + <translation type="obsolete">Orientation : </translation> </message> <message> <source>Paper source:</source> - <translation type="obsolete">Source du papier :</translation> + <translation type="obsolete">Source du papier : </translation> </message> <message> <source>Print</source> @@ -4899,7 +4936,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Size:</source> - <translation type="obsolete">Taille :</translation> + <translation type="obsolete">Taille : </translation> </message> <message> <source>Properties</source> @@ -4907,7 +4944,7 @@ Voulez-vous quand même le supprimer ?</translation> </message> <message> <source>Printer info:</source> - <translation type="obsolete">Informations sur l'imprimante :</translation> + <translation type="obsolete">Informations sur l'imprimante : </translation> </message> <message> <source>Browse</source> @@ -5281,7 +5318,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Copies:</source> - <translation>Copies :</translation> + <translation>Copies : </translation> </message> <message> <source>Collate</source> @@ -5340,7 +5377,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>&Name:</source> - <translation>&Nom :</translation> + <translation>&Nom : </translation> </message> <message> <source>P&roperties</source> @@ -5348,7 +5385,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Location:</source> - <translation>Emplacement :</translation> + <translation>Emplacement : </translation> </message> <message> <source>Preview</source> @@ -5356,11 +5393,11 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Type:</source> - <translation>Type :</translation> + <translation>Type : </translation> </message> <message> <source>Output &file:</source> - <translation>&Fichier de sortie:</translation> + <translation>&Fichier de sortie : </translation> </message> <message> <source>...</source> @@ -5407,7 +5444,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Process failed to start: %1</source> - <translation>Le démarrage du processus a échoué: %1</translation> + <translation>Le démarrage du processus a échoué : %1</translation> </message> </context> <context> @@ -5471,11 +5508,11 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>invalid interval</source> - <translation>intervalle non valide</translation> + <translation>intervalle invalide</translation> </message> <message> <source>invalid category</source> - <translation>catégorie non valide</translation> + <translation>catégorie invalide</translation> </message> </context> <context> @@ -5586,15 +5623,15 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Ignore-count</source> - <translation>Comptes d'ignorés</translation> + <translation>Nombre d'ignorés</translation> </message> <message> <source>Single-shot</source> - <translation>Un seul tir</translation> + <translation>Un seul coup</translation> </message> <message> <source>Hit-count</source> - <translation>Compte de coups</translation> + <translation>Nombre de coups</translation> </message> </context> <context> @@ -5616,7 +5653,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Line:</source> - <translation>Ligne:</translation> + <translation>Ligne : </translation> </message> <message> <source>Interrupt</source> @@ -5747,7 +5784,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped</source> - <translation><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;La recherche est revenue au début</translation> + <translation><img src=" : /qt/scripttools/debugging/images/wrap.png">&nbsp;La recherche est revenue au début</translation> </message> </context> <context> @@ -5773,7 +5810,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Location</source> - <translation>Lieu</translation> + <translation>Emplacement</translation> </message> </context> <context> @@ -5792,7 +5829,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Breakpoint Condition:</source> - <translation>Condition du point d'arrêt:</translation> + <translation>Condition du point d'arrêt : </translation> </message> </context> <context> @@ -5807,7 +5844,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Stack</source> - <translation>Empiler</translation> + <translation>Pile</translation> </message> <message> <source>Locals</source> @@ -5853,7 +5890,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Left edge</source> - <translation>Extrême gauche</translation> + <translation>Bord gauche</translation> </message> <message> <source>Top</source> @@ -5861,7 +5898,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Right edge</source> - <translation>Extrême droite</translation> + <translation>Bord droit</translation> </message> <message> <source>Bottom</source> @@ -5988,11 +6025,11 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>%1: doesn't exist</source> - <translation>%1: n'existe pas</translation> + <translation>%1 : n'existe pas</translation> </message> <message> <source>%1: UNIX key file doesn't exist</source> - <translation>%1: le fichier de clés UNIX n'existe pas</translation> + <translation>%1 : le fichier de clés UNIX n'existe pas</translation> </message> </context> <context> @@ -7100,7 +7137,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Unable to decrypt data: %1</source> - <translation>Impossible de décrypter les données: %1</translation> + <translation>Impossible de décrypter les données : %1</translation> </message> <message> <source>Private key does not certify public key, %1</source> @@ -7136,11 +7173,11 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>The certificate's notBefore field contains an invalid time</source> - <translation>Le champ pasAvant du certificat inclut une heure non valide</translation> + <translation>Le champ pasAvant du certificat inclut une heure invalide</translation> </message> <message> <source>The certificate's notAfter field contains an invalid time</source> - <translation>Le champ pasAprès du certificat inclut une heure non valide</translation> + <translation>Le champ pasAprès du certificat inclut une heure invalide</translation> </message> <message> <source>The certificate is self-signed, and untrusted</source> @@ -7222,11 +7259,11 @@ Veuillez choisir un nom de fichier différent.</translation> <name>QSystemSemaphore</name> <message> <source>%1: out of resources</source> - <translation>%1: plus de ressources disponibles</translation> + <translation>%1 : plus de ressources disponibles</translation> </message> <message> <source>%1: permission denied</source> - <translation>%1: permission refusée</translation> + <translation>%1 : permission refusée</translation> </message> <message> <source>%1: already exists</source> @@ -7238,7 +7275,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>%1: unknown error %2</source> - <translation>%1: erreur inconnue %2</translation> + <translation>%1 : erreur inconnue %2</translation> </message> </context> <context> @@ -7694,7 +7731,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <source>Slider</source> <comment>Media controller element</comment> - <translation>Barre de défilement</translation> + <translation>Slider</translation> </message> <message> <source>Slider Thumb</source> @@ -7906,7 +7943,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <source>This is a searchable index. Enter search keywords: </source> <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> - <translation>Ceci est un index. Veuillez saisir les mots-clé :</translation> + <translation>Ceci est un index. Veuillez saisir les mots-clé : </translation> </message> <message> <source>Scroll here</source> @@ -8438,7 +8475,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>This is a searchable index. Enter search keywords: </source> - <translation type="obsolete">Ceci est un index. Veuillez saisir les mots-clé :</translation> + <translation type="obsolete">Ceci est un index. Veuillez saisir les mots-clé : </translation> </message> <message> <source>JavaScript Problem - %1</source> @@ -8446,7 +8483,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>The script on this page appears to have a problem. Do you want to stop the script?</source> - <translation>Le script de cette page semble avoir un problème. Souhaitez-vous arrêter le script?</translation> + <translation>Le script de cette page semble avoir un problème. Souhaitez-vous arrêter le script ?</translation> </message> <message> <source>Paste and Match Style</source> @@ -8630,161 +8667,161 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>error triggered by consumer</source> - <translation type="unfinished">Erreur déclenchée par le consommateur</translation> + <translation>Erreur déclenchée par le consommateur</translation> </message> <message> <source>unexpected end of file</source> - <translation type="unfinished">Fin de fichier inattendue</translation> + <translation>Fin de fichier inattendue</translation> </message> <message> <source>more than one document type definition</source> - <translation type="unfinished">plus d'une définition de type de docuement</translation> + <translation>plus d'une définition de type de document</translation> </message> <message> <source>error occurred while parsing element</source> - <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique de l'élement</translation> + <translation>une erreur s'est produite pendant l'analyse syntaxique de l'élement</translation> </message> <message> <source>tag mismatch</source> - <translation type="unfinished">tag incongru</translation> + <translation>tag incongru</translation> </message> <message> <source>error occurred while parsing content</source> - <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique du contenu</translation> + <translation>une erreur s'est produite pendant l'analyse syntaxique du contenu</translation> </message> <message> <source>unexpected character</source> - <translation type="unfinished">caractère inattendu</translation> + <translation>caractère inattendu</translation> </message> <message> <source>invalid name for processing instruction</source> - <translation type="unfinished">nom d'instruction invalide</translation> + <translation>nom d'instruction invalide</translation> </message> <message> <source>version expected while reading the XML declaration</source> - <translation type="unfinished">Une version est attendue dans la déclaration XML</translation> + <translation>une version est attendue dans la déclaration XML</translation> </message> <message> <source>wrong value for standalone declaration</source> - <translation type="unfinished">Valeur incorrecte pour une déclaration autonome</translation> + <translation>valeur incorrecte pour une déclaration "standalone"</translation> </message> <message> <source>error occurred while parsing document type definition</source> - <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique de la définition du type de document</translation> + <translation>une erreur s'est produite pendant l'analyse syntaxique de la définition du type de document</translation> </message> <message> <source>letter is expected</source> - <translation type="unfinished">une lettre est attendue</translation> + <translation>une lettre est attendue</translation> </message> <message> <source>error occurred while parsing comment</source> - <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique du commentaire</translation> + <translation>une erreur s'est produite pendant l'analyse syntaxique du commentaire</translation> </message> <message> <source>error occurred while parsing reference</source> - <translation type="unfinished">une erreur s'est produite pendant l'analyse syntaxique d'une référence</translation> + <translation>une erreur s'est produite pendant l'analyse syntaxique d'une référence</translation> </message> <message> <source>internal general entity reference not allowed in DTD</source> - <translation type="unfinished"></translation> + <translation>référence à une entité générale interne non autorisée dans la DTD</translation> </message> <message> <source>external parsed general entity reference not allowed in attribute value</source> - <translation type="unfinished"></translation> + <translation>référence à une entité générale externe non autorisée dans la valeur d'attribut</translation> </message> <message> <source>external parsed general entity reference not allowed in DTD</source> - <translation type="unfinished"></translation> + <translation>référence à une entité générale externe non autorisée dans le DTD</translation> </message> <message> <source>unparsed entity reference in wrong context</source> - <translation type="unfinished"></translation> + <translation>référence à une entité non analysée dans le mauvais contexte</translation> </message> <message> <source>recursive entities</source> - <translation type="unfinished"></translation> + <translation>entités récursives</translation> </message> <message> <source>error in the text declaration of an external entity</source> - <translation type="unfinished"></translation> + <translation>erreur dans la déclaration texte d'une entité externe</translation> </message> <message> <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> - <translation type="unfinished"></translation> + <translation>déclaration d'encodage ou déclaration "standalone" attendue lors de la lecture de la déclaration XML</translation> </message> <message> <source>standalone declaration expected while reading the XML declaration</source> - <translation type="unfinished"></translation> + <translation>déclaration "standalone" attendue lors de la lecture de la déclaration XML</translation> </message> </context> <context> <name>QXmlPatternistCLI</name> <message> <source>Warning in %1, at line %2, column %3: %4</source> - <translation>Avertissement dans %1, à la ligne %2, colonne %3: %4</translation> + <translation>Avertissement dans %1, à la ligne %2, colonne %3 : %4</translation> </message> <message> <source>Warning in %1: %2</source> - <translation>Avertissement dans %1: %2</translation> + <translation>Avertissement dans %1 : %2</translation> </message> <message> - <source>Unknown location</source> + <source></source> <translation>Lieu inconnu</translation> </message> <message> <source>Error %1 in %2, at line %3, column %4: %5</source> - <translation>Erreur %1 dans %2, à la ligne %3, colonne %4: %5</translation> + <translation>Erreur %1 dans %2, à la ligne %3, colonne %4 : %5</translation> </message> <message> <source>Error %1 in %2: %3</source> - <translation>Erreur %1 dans %2: %3</translation> + <translation>Erreur %1 dans %2 : %3</translation> </message> </context> <context> <name>QXmlStream</name> <message> <source>Extra content at end of document.</source> - <translation type="unfinished"></translation> + <translation>Contenu superflu à la fin du document.</translation> </message> <message> <source>Invalid entity value.</source> - <translation type="unfinished"></translation> + <translation>Valeur de l'entité invalide.</translation> </message> <message> <source>Invalid XML character.</source> - <translation type="unfinished"></translation> + <translation>Caractère XML invalide.</translation> </message> <message> <source>Sequence ']]>' not allowed in content.</source> - <translation type="unfinished"></translation> + <translation>séquence ']]>' non autorisée dans le contenu.</translation> </message> <message> <source>Namespace prefix '%1' not declared</source> - <translation type="unfinished"></translation> + <translation>Le préfixe d'espace de noms %1 n'a pas été déclaré</translation> </message> <message> <source>Attribute redefined.</source> - <translation type="unfinished"></translation> + <translation>Redéfinition d'attribut.</translation> </message> <message> <source>Unexpected character '%1' in public id literal.</source> - <translation type="unfinished"></translation> + <translation>Caractère '%1' inattendu pour une valeur d'identifiant public.</translation> </message> <message> <source>Invalid XML version string.</source> - <translation type="unfinished"></translation> + <translation>Chaîne de version XML invalide.</translation> </message> <message> <source>Unsupported XML version.</source> - <translation type="unfinished"></translation> + <translation>Version XML non supportée.</translation> </message> <message> <source>%1 is an invalid encoding name.</source> - <translation type="unfinished"></translation> + <translation>%1 n'est pas un nom d'encodage valide.</translation> </message> <message> <source>Encoding %1 is unsupported</source> - <translation type="unfinished"></translation> + <translation>%1 n'est pas un encodage supporté</translation> </message> <message> <source>Invalid XML encoding name.</source> @@ -8792,99 +8829,99 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Standalone accepts only yes or no.</source> - <translation type="unfinished"></translation> + <translation>Le seules valeurs possibles pour "standalone" sont "yes" ou "no".</translation> </message> <message> <source>Invalid attribute in XML declaration.</source> - <translation type="unfinished"></translation> + <translation>Attribut invalide dans une déclaration XML.</translation> </message> <message> <source>Premature end of document.</source> - <translation type="unfinished"></translation> + <translation>Fin de document inattendue.</translation> </message> <message> <source>Invalid document.</source> - <translation type="unfinished"></translation> + <translation>Document invalide.</translation> </message> <message> <source>Expected </source> - <translation type="unfinished"></translation> + <translation>Attendu(e)</translation> </message> <message> <source>, but got '</source> - <translation type="unfinished"></translation> + <translation>, mais trouvé '</translation> </message> <message> <source>Unexpected '</source> - <translation type="unfinished"></translation> + <translation>Inattendu(e)</translation> </message> <message> <source>Expected character data.</source> - <translation type="unfinished"></translation> + <translation>données texte attendues.</translation> </message> <message> <source>Recursive entity detected.</source> - <translation type="unfinished"></translation> + <translation>Entité récursive détectée.</translation> </message> <message> <source>Start tag expected.</source> - <translation type="unfinished"></translation> + <translation>Tag de départ attendu.</translation> </message> <message> <source>XML declaration not at start of document.</source> - <translation type="unfinished"></translation> + <translation>La déclaration XML doit être en début de document.</translation> </message> <message> <source>NDATA in parameter entity declaration.</source> - <translation type="unfinished"></translation> + <translation>NDATA dans une déclaration de paramètre d'entité.</translation> </message> <message> <source>%1 is an invalid processing instruction name.</source> - <translation type="unfinished"></translation> + <translation>%1 n'est pas un nom d'instruction valide.</translation> </message> <message> <source>Invalid processing instruction name.</source> - <translation type="unfinished"></translation> + <translation>nom d'instruction invalide.</translation> </message> <message> <source>Illegal namespace declaration.</source> - <translation type="unfinished"></translation> + <translation>Déclaration d'espace de noms non autorisée.</translation> </message> <message> <source>Invalid XML name.</source> - <translation type="unfinished"></translation> + <translation>Nom XML invalide.</translation> </message> <message> <source>Opening and ending tag mismatch.</source> - <translation type="unfinished"></translation> + <translation>Tags ouvrant et fermants ne correspondent pas.</translation> </message> <message> <source>Reference to unparsed entity '%1'.</source> - <translation type="unfinished"></translation> + <translation>Référence à l'entité '%1' non analysée.</translation> </message> <message> <source>Entity '%1' not declared.</source> - <translation type="unfinished"></translation> + <translation>Entité '%1' non déclarée.</translation> </message> <message> <source>Reference to external entity '%1' in attribute value.</source> - <translation type="unfinished"></translation> + <translation>Référence à l'entité externe '%1' en valeur d'attribut.</translation> </message> <message> <source>Invalid character reference.</source> - <translation type="unfinished"></translation> + <translation>Référence à un caractère invalide.</translation> </message> <message> <source>Encountered incorrectly encoded content.</source> - <translation type="unfinished"></translation> + <translation>Du contenu avec un encodage incorrect a été rencontré.</translation> </message> <message> <source>The standalone pseudo attribute must appear after the encoding.</source> - <translation type="unfinished"></translation> + <translation>Le pseudo-attribut "standalone" doit apparaître après l'encodage.</translation> </message> <message> <source>%1 is an invalid PUBLIC identifier.</source> - <translation type="unfinished"></translation> + <translation>%1 n'est pas un identifiant "PUBLIC" valide.</translation> </message> </context> <context> @@ -8923,7 +8960,7 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Overflow: Can't represent date %1.</source> - <translation>Overflow: ne peut pas représenter la date %1.</translation> + <translation>Overflow : impossible de représenter la date %1.</translation> </message> <message> <source>Day %1 is invalid for month %2.</source> @@ -8931,11 +8968,11 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source> - <translation>L'heure 24:%1:%2.%3 est invalide. L'heure est 24 mais les minutes, seconndes et millisecondes ne sont pas à 0;</translation> + <translation>Heure 24 : %1 : %2.%3 est invalide. L'heure est 24 mais les minutes, secondes et millisecondes ne sont pas à 0;</translation> </message> <message> <source>Time %1:%2:%3.%4 is invalid.</source> - <translation>L'heure %1:%2:%3.%4 est invalide.</translation> + <translation>L'heure %1 : %2 : %3.%4 est invalide.</translation> </message> <message> <source>Overflow: Date can't be represented.</source> @@ -9197,11 +9234,11 @@ Veuillez choisir un nom de fichier différent.</translation> </message> <message> <source>%1 is an invalid regular expression pattern: %2</source> - <translation>%1 est un modèle d'expression régulière invalide: %2</translation> + <translation>%1 est un modèle d'expression régulière invalide : %2</translation> </message> <message> <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> - <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont :</translation> + <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont : </translation> </message> <message> <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source> @@ -9604,16 +9641,12 @@ Veuillez choisir un nom de fichier différent.</translation> <translation>L'URI ne peut pas avoir de fragments</translation> </message> <message> - <source>Element %1 is not allowed at this location.</source> + <source></source> <translation>L'élément %1 n'est pas autorisé à cet emplacement.</translation> </message> <message> - <source>Text nodes are not allowed at this location.</source> - <translation>Les noeuds de texte ne sont pas autorisés à cet emplacement.</translation> - </message> - <message> <source>Parse error: %1</source> - <translation>Erreur: %1</translation> + <translation>Erreur : %1</translation> </message> <message> <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.</source> diff --git a/translations/qt_help_fr.ts b/translations/qt_help_fr.ts index f0cabc2..62bfccc 100644 --- a/translations/qt_help_fr.ts +++ b/translations/qt_help_fr.ts @@ -4,87 +4,116 @@ <context> <name>QCLuceneResultWidget</name> <message> + <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+110"/> <source>Search Results</source> <translation>Résultats de la recherche</translation> </message> <message> + <location line="+7"/> <source>Note:</source> <translation>Note :</translation> </message> <message> + <location line="+1"/> <source>The search results may not be complete since the documentation is still being indexed!</source> <translation>Les résultats de la recherche risquent d'être incomplets car l'indexation de la documentation est en cours !</translation> </message> <message> + <location line="+11"/> <source>Your search did not match any documents.</source> <translation>Votre recherche ne correspond à aucun document.</translation> </message> <message> + <location line="+4"/> <source>(The reason for this might be that the documentation is still being indexed.)</source> <translation>(Il est possible que cela soit dû au fait que la documentation est en cours d'indexation.)</translation> </message> </context> <context> + <name>QHelp</name> + <message> + <location filename="../tools/assistant/lib/qhelp_global.cpp" line="+64"/> + <source>Untitled</source> + <translation>Sans titre</translation> + </message> +</context> +<context> <name>QHelpCollectionHandler</name> <message> + <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/> <source>The collection file '%1' is not set up yet!</source> <translation>Le fichier de collection '%1' n'est pas encore chargé !</translation> </message> <message> + <location line="+23"/> <source>Cannot load sqlite database driver!</source> <translatorcomment>driver ?</translatorcomment> <translation>Chargement du pilote de base de données sqlite impossible !</translation> </message> <message> + <location line="+11"/> + <location line="+52"/> <source>Cannot open collection file: %1</source> <translatorcomment>collection ?</translatorcomment> <translation>Impossible d'ouvrir le fichier collection : %1</translation> </message> <message> + <location line="-40"/> <source>Cannot create tables in file %1!</source> <translation>Impossible de créer les tables dans le fichier : %1 !</translation> </message> <message> + <location line="+16"/> <source>The collection file '%1' already exists!</source> <translation>Le fichier collection '%1' existe déjà !</translation> </message> <message> + <location line="+6"/> <source>Cannot create directory: %1</source> <translation>Impossible de créer le répertoire : %1</translation> </message> <message> + <location line="+26"/> <source>Cannot copy collection file: %1</source> <translation>Impossible de copier le fichier collection : %1</translation> </message> <message> + <location line="+119"/> <source>Unknown filter '%1'!</source> <translation>Filtre '%1' inconnu !</translation> </message> <message> + <location line="+53"/> <source>Cannot register filter %1!</source> <translation>Impossible d'enregistrer le filtre %1 !</translation> </message> <message> + <location line="+44"/> <source>Cannot open documentation file %1!</source> <translation>Impossible d'ouvrir le fichier de documentation %1 !</translation> </message> <message> + <location line="+6"/> <source>Invalid documentation file '%1'!</source> <translation>Fichier de documentation invalide : '%1' !</translation> </message> <message> + <location line="+34"/> <source>The namespace %1 was not registered!</source> <translation>L'espace de noms '%1' n'était pas référencé !</translation> </message> <message> + <location line="+120"/> <source>Namespace %1 already exists!</source> <translation>L'espace de noms %1 existe déjà !</translation> </message> <message> + <location line="+13"/> <source>Cannot register namespace '%1'!</source> <translation>Impossible d'enregistrer l'espace de noms '%1' !</translation> </message> <message> + <location line="+24"/> <source>Cannot open database '%1' to optimize!</source> <translation>Impossible d'ouvrir la base de données à optimiser '%1' !</translation> </message> @@ -92,6 +121,7 @@ <context> <name>QHelpDBReader</name> <message> + <location filename="../tools/assistant/lib/qhelpdbreader.cpp" line="+98"/> <source>Cannot open database '%1' '%2': %3</source> <extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string</extracomment> <translation>Impossible d'ouvrir la base de données '%1' '%2' : %3</translation> @@ -100,10 +130,12 @@ <context> <name>QHelpEngineCore</name> <message> + <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+122"/> <source>Cannot open documentation file %1: %2!</source> <translation>Impossible d'ouvrir le fichier de documentation %1 : %2 !</translation> </message> <message> + <location line="+404"/> <source>The specified namespace does not exist!</source> <translation>L'espace de noms spécifié n'existe pas !</translation> </message> @@ -118,107 +150,133 @@ <context> <name>QHelpGenerator</name> <message> + <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+158"/> <source>Invalid help data!</source> <translation>Données d'aide invalides !</translation> </message> <message> + <location line="+6"/> <source>No output file name specified!</source> <translation>Aucun nom de fichier de sortie spécifié !</translation> </message> <message> + <location line="+7"/> <source>The file %1 cannot be overwritten!</source> <translation>Le fichier %1 ne peut être écrasé !</translation> </message> <message> + <location line="+7"/> <source>Building up file structure...</source> - <translation>Construction de la structure de fichiers en cours…</translation> + <translation>Construction de la structure de fichiers en cours...</translation> </message> <message> + <location line="+11"/> <source>Cannot open data base file %1!</source> <translation>Impossible d'ouvrir le fichier de base de données %1 !</translation> </message> <message> + <location line="+14"/> <source>Cannot register namespace %1!</source> <translation>Impossible d'enregistrer l'espace de noms %1 !</translation> </message> <message> + <location line="+6"/> <source>Insert custom filters...</source> - <translation>Insértion des filtres personnalisés…</translation> + <translation>Insértion des filtres personnalisés...</translation> </message> <message> + <location line="+12"/> <source>Insert help data for filter section (%1 of %2)...</source> <translatorcomment>???</translatorcomment> - <translation>Insertion des données d'aide pour la section filtre (%1 de %2)…</translation> + <translation>Insertion des données d'aide pour la section filtre (%1 de %2)...</translation> </message> <message> + <location line="+18"/> <source>Documentation successfully generated.</source> <translation>Documentation générée avec succès.</translation> </message> <message> + <location line="+76"/> <source>Some tables already exist!</source> <translation>Certaines tables existent déjà !</translation> </message> <message> + <location line="+61"/> <source>Cannot create tables!</source> <translation>Impossible de créer les tables !</translation> </message> <message> + <location line="+86"/> <source>Cannot register virtual folder!</source> <translation>Impossible d'enregistrer le dossier virtuel !</translation> </message> <message> + <location line="+10"/> <source>Insert files...</source> <translation>Insertion des fichiers...</translation> </message> <message> + <location line="+42"/> <source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source> <translation>Le fichier référencé %1 doit être dans le dossier (%2) ou un de ses sous-dossiers. Fichier non pris en compte.</translation> </message> <message> + <location line="+7"/> <source>The file %1 does not exist! Skipping it.</source> <translation>Le fichier %1 n'existe pas ! Fichier non pris en compte.</translation> </message> <message> + <location line="+6"/> <source>Cannot open file %1! Skipping it.</source> <translation>Impossible d'ouvrir le fichier %1 ! Fichier non pris en compte.</translation> </message> <message> + <location line="+133"/> <source>The filter %1 is already registered!</source> <translation>Le filtre %1 est déjà enregistré !</translation> </message> <message> + <location line="+5"/> <source>Cannot register filter %1!</source> <translation>Impossible d'enregistrer le filtre %1 !</translation> </message> <message> + <location line="+24"/> <source>Insert indices...</source> - <translation>Insertion des index…</translation> + <translation>Insertion des index...</translation> </message> <message> + <location line="+91"/> <source>Insert contents...</source> - <translation>insertion du contenu…</translation> + <translation>insertion du contenu...</translation> </message> <message> + <location line="+8"/> <source>Cannot insert contents!</source> <translation>Impossible d'insérer le contenu !</translation> </message> <message> + <location line="+12"/> <source>Cannot register contents!</source> <translation>Impossible de référencer le contenu !</translation> </message> <message> + <location line="+56"/> <source>File '%1' does not exist.</source> <translation>Le fichier '%1' n'existe pas.</translation> </message> <message> + <location line="+19"/> <source>File '%1' cannot be opened.</source> <translation>Le fichier '%1' ne peut être ouvert.</translation> </message> <message> + <location line="+19"/> <source>File '%1' contains an invalid link to file '%2'</source> <translation>Le fichier '%1' contient un lien invalide vers le fichier '%2'</translation> </message> <message> + <location line="+9"/> <source>Invalid links in HTML files.</source> <translation>Liens invalides dans les fichiers HTML.</translation> </message> @@ -226,38 +284,47 @@ <context> <name>QHelpProject</name> <message> + <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+88"/> <source>Unknown token.</source> <translation>Identificateur inconnu.</translation> </message> <message> + <location line="+13"/> <source>Unknown token. Expected "QtHelpProject"!</source> <translation>Identificateur inconnu. "QtHelpProject" attendu !</translation> </message> <message> + <location line="+6"/> <source>Error in line %1: %2</source> <translation>Erreur à la ligne %1 : %2</translation> </message> <message> + <location line="+14"/> <source>Virtual folder has invalid syntax.</source> <translation>Syntaxe invalide pour le dossier virtuel.</translation> </message> <message> + <location line="+5"/> <source>Namespace has invalid syntax.</source> <translation>Syntaxe invalide pour l'espace de noms.</translation> </message> <message> + <location line="+19"/> <source>Missing namespace in QtHelpProject.</source> <translation>Espace de noms manquant dans QtHelpProject.</translation> </message> <message> + <location line="+3"/> <source>Missing virtual folder in QtHelpProject</source> <translation>Dossier virtuel manquant dans QtHelpProject</translation> </message> <message> + <location line="+89"/> <source>Missing attribute in keyword at line %1.</source> <translation>Attribut manquant pour le mot clé à la ligne %1.</translation> </message> <message> + <location line="+143"/> <source>The input file %1 could not be opened!</source> <translation>Le fichier source %1 n'a pas pu être ouvert !</translation> </message> @@ -265,42 +332,52 @@ <context> <name>QHelpSearchQueryWidget</name> <message> + <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+124"/> <source>Search for:</source> <translation>Rechercher :</translation> </message> <message> + <location line="+1"/> <source>Previous search</source> <translation>Recherche précédente</translation> </message> <message> + <location line="+1"/> <source>Next search</source> <translation>Recherche suivante</translation> </message> <message> + <location line="+1"/> <source>Search</source> <translation>Recherche</translation> </message> <message> + <location line="+2"/> <source>Advanced search</source> <translation>Recherche avancée</translation> </message> <message> + <location line="+1"/> <source>words <B>similar</B> to:</source> <translation>mots <B>semblables</B> à :</translation> </message> <message> + <location line="+1"/> <source><B>without</B> the words:</source> <translation><B>sans</B> les mots :</translation> </message> <message> + <location line="+1"/> <source>with <B>exact phrase</B>:</source> <translation>avec la <B>phrase exacte</B> :</translation> </message> <message> + <location line="+1"/> <source>with <B>all</B> of the words:</source> <translation>avec <B>tous</B> les mots :</translation> </message> <message> + <location line="+1"/> <source>with <B>at least one</B> of the words:</source> <translation>avec <B>au moins un</B> des mots :</translation> </message> @@ -308,6 +385,7 @@ <context> <name>QHelpSearchResultWidget</name> <message numerus="yes"> + <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+174"/> <source>%1 - %2 of %n Hits</source> <translation> <numerusform>%1 - %2 de %n résultat</numerusform> @@ -315,6 +393,7 @@ </translation> </message> <message> + <location line="+61"/> <source>0 - 0 of 0 Hits</source> <translation>0 - 0 de 0 résultats</translation> </message> -- cgit v0.12 From 150bdc85f28f024cbff7151aaeff6f090580e82c Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 6 Aug 2010 12:18:00 +0200 Subject: doc: Fixed some S60 qdoc errors. (cherry picked from commit fb6aa3b0769c33685ad38a13fe5ad0ca48679a93) --- src/gui/s60framework/qs60mainapplication.cpp | 9 ++++++ src/gui/s60framework/qs60mainappui.cpp | 45 ++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/gui/s60framework/qs60mainapplication.cpp b/src/gui/s60framework/qs60mainapplication.cpp index 0f9367e..5d4c54e 100644 --- a/src/gui/s60framework/qs60mainapplication.cpp +++ b/src/gui/s60framework/qs60mainapplication.cpp @@ -136,16 +136,25 @@ TFileName QS60MainApplication::ResourceFileName() const return KNullDesC(); } +/*! + \internal +*/ void QS60MainApplication::PreDocConstructL() { QS60MainApplicationBase::PreDocConstructL(); } +/*! + \internal +*/ CDictionaryStore *QS60MainApplication::OpenIniFileLC(RFs &aFs) const { return QS60MainApplicationBase::OpenIniFileLC(aFs); } +/*! + \internal +*/ void QS60MainApplication::NewAppServerL(CApaAppServer *&aAppServer) { QS60MainApplicationBase::NewAppServerL(aAppServer); diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp index 40c2d03..ea9dbb3 100644 --- a/src/gui/s60framework/qs60mainappui.cpp +++ b/src/gui/s60framework/qs60mainappui.cpp @@ -281,76 +281,121 @@ void QS60MainAppUi::RestoreMenuL(CCoeControl *menuWindow, TInt resourceId, TMenu } } +/*! + \internal +*/ void QS60MainAppUi::Exit() { QS60MainAppUiBase::Exit(); } +/*! + \internal +*/ void QS60MainAppUi::SetFadedL(TBool aFaded) { QS60MainAppUiBase::SetFadedL(aFaded); } +/*! + \internal +*/ TRect QS60MainAppUi::ApplicationRect() const { return QS60MainAppUiBase::ApplicationRect(); } +/*! + \internal +*/ void QS60MainAppUi::HandleScreenDeviceChangedL() { QS60MainAppUiBase::HandleScreenDeviceChangedL(); } +/*! + \internal +*/ void QS60MainAppUi::HandleApplicationSpecificEventL(TInt aType, const TWsEvent &aEvent) { QS60MainAppUiBase::HandleApplicationSpecificEventL(aType, aEvent); } +/*! + \internal +*/ TTypeUid::Ptr QS60MainAppUi::MopSupplyObject(TTypeUid aId) { return QS60MainAppUiBase::MopSupplyObject(aId); } +/*! + \internal +*/ void QS60MainAppUi::ProcessCommandL(TInt aCommand) { QS60MainAppUiBase::ProcessCommandL(aCommand); } +/*! + \internal +*/ TErrorHandlerResponse QS60MainAppUi::HandleError (TInt aError, const SExtendedError &aExtErr, TDes &aErrorText, TDes &aContextText) { return QS60MainAppUiBase::HandleError(aError, aExtErr, aErrorText, aContextText); } +/*! + \internal +*/ void QS60MainAppUi::HandleViewDeactivation(const TVwsViewId &aViewIdToBeDeactivated, const TVwsViewId &aNewlyActivatedViewId) { QS60MainAppUiBase::HandleViewDeactivation(aViewIdToBeDeactivated, aNewlyActivatedViewId); } +/*! + \internal +*/ void QS60MainAppUi::PrepareToExit() { QS60MainAppUiBase::PrepareToExit(); } +/*! + \internal +*/ void QS60MainAppUi::HandleTouchPaneSizeChange() { QS60MainAppUiBase::HandleTouchPaneSizeChange(); } +/*! + \internal +*/ void QS60MainAppUi::HandleSystemEventL(const TWsEvent &aEvent) { QS60MainAppUiBase::HandleSystemEventL(aEvent); } +/*! + \internal +*/ void QS60MainAppUi::Reserved_MtsmPosition() { QS60MainAppUiBase::Reserved_MtsmPosition(); } +/*! + \internal +*/ void QS60MainAppUi::Reserved_MtsmObject() { QS60MainAppUiBase::Reserved_MtsmObject(); } +/*! + \internal +*/ void QS60MainAppUi::HandleForegroundEventL(TBool aForeground) { QS60MainAppUiBase::HandleForegroundEventL(aForeground); -- cgit v0.12 From 42c9d2e1a4fd6cdb322388e8143aebb4df864ccd Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 6 Aug 2010 12:31:48 +0200 Subject: doc: Fixed some qdoc errors. (cherry picked from commit 30d6f7ed29a2a5723387768cfe82a807a2724b8b) --- src/gui/graphicsview/qgraphicsitem.cpp | 15 +++++++++++++++ src/gui/graphicsview/qgraphicstransform.cpp | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 8b46e8c..6f0b48c 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -7734,6 +7734,21 @@ void QGraphicsItemPrivate::resetHeight() } /*! + \property QGraphicsObject::children + \internal +*/ + +/*! + \property QGraphicsObject::width + \internal +*/ + +/*! + \property QGraphicsObject::height + \internal +*/ + +/*! \property QGraphicsObject::parent \brief the parent of the item diff --git a/src/gui/graphicsview/qgraphicstransform.cpp b/src/gui/graphicsview/qgraphicstransform.cpp index 986bee6..7b69317 100644 --- a/src/gui/graphicsview/qgraphicstransform.cpp +++ b/src/gui/graphicsview/qgraphicstransform.cpp @@ -345,6 +345,24 @@ void QGraphicsScale::applyTo(QMatrix4x4 *matrix) const */ /*! + \fn QGraphicsScale::xScaleChanged() + + QGraphicsScale emits this signal when its xScale changes. +*/ + +/*! + \fn QGraphicsScale::yScaleChanged() + + QGraphicsScale emits this signal when its yScale changes. +*/ + +/*! + \fn QGraphicsScale::zScaleChanged() + + QGraphicsScale emits this signal when its zScale changes. +*/ + +/*! \fn QGraphicsScale::scaleChanged() This signal is emitted whenever the xScale, yScale, or zScale -- cgit v0.12 From 3ebf35e60abe181ad3a5a3b99ea82708b3ed0114 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 6 Aug 2010 13:12:25 +0200 Subject: doc: Fixed some qdoc errors. (cherry picked from commit fc4e9d15d4b85ade770cf92c10258a556fafa698) --- src/dbus/qdbusconnection.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index 5c6659f..6a46eac 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -209,6 +209,7 @@ void QDBusConnectionManager::setConnection(const QString &name, QDBusConnectionP \value ExportScriptableSlots export this object's scriptable slots \value ExportScriptableSignals export this object's scriptable signals \value ExportScriptableProperties export this object's scriptable properties + \value ExportScriptableInvokables export this object's scriptable invokables \value ExportScriptableContents shorthand form for ExportScriptableSlots | ExportScriptableSignals | ExportScriptableProperties @@ -216,6 +217,7 @@ void QDBusConnectionManager::setConnection(const QString &name, QDBusConnectionP \value ExportNonScriptableSlots export this object's non-scriptable slots \value ExportNonScriptableSignals export this object's non-scriptable signals \value ExportNonScriptableProperties export this object's non-scriptable properties + \value ExportNonScriptableInvokables export this object's non-scriptable invokables \value ExportNonScriptableContents shorthand form for ExportNonScriptableSlots | ExportNonScriptableSignals | ExportNonScriptableProperties @@ -223,10 +225,9 @@ void QDBusConnectionManager::setConnection(const QString &name, QDBusConnectionP \value ExportAllSlots export all of this object's slots \value ExportAllSignals export all of this object's signals \value ExportAllProperties export all of this object's properties + \value ExportAllInvokables export all of this object's invokables \value ExportAllContents export all of this object's contents - \value ExportChildObjects export this object's child objects - \sa registerObject(), QDBusAbstractAdaptor, {usingadaptors.html}{Using adaptors} */ -- cgit v0.12 From 5ef8bec14447789deb90c87b3d7e745b4613986f Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 6 Aug 2010 14:30:42 +0200 Subject: doc: Re-introduced next/previous page links in the footer. Task-Nr: QTBUG-12278 (cherry picked from commit 2118f407b02654e9e3c6706647e8b9b711e8982b) --- tools/qdoc3/htmlgenerator.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index e6396fe..34c2565 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1937,6 +1937,61 @@ void HtmlGenerator::generateHeader(const QString& title, } } + navigationLinks.clear(); + + if (node && !node->links().empty()) { + QPair<QString,QString> linkPair; + QPair<QString,QString> anchorPair; + const Node *linkNode; + + if (node->links().contains(Node::PreviousLink)) { + linkPair = node->links()[Node::PreviousLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " <link rel=\"prev\" href=\"" + << anchorPair.first << "\" />\n"; + + navigationLinks += "[Previous: <a href=\"" + anchorPair.first + "\">"; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protect(anchorPair.second); + else + navigationLinks += protect(linkPair.second); + navigationLinks += "</a>]\n"; + } + if (node->links().contains(Node::NextLink)) { + linkPair = node->links()[Node::NextLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + + out() << " <link rel=\"next\" href=\"" + << anchorPair.first << "\" />\n"; + + navigationLinks += "[Next: <a href=\"" + anchorPair.first + "\">"; + if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty()) + navigationLinks += protect(anchorPair.second); + else + navigationLinks += protect(linkPair.second); + navigationLinks += "</a>]\n"; + } + if (node->links().contains(Node::StartLink)) { + linkPair = node->links()[Node::StartLink]; + linkNode = findNodeForTarget(linkPair.first, node, marker); + if (!linkNode || linkNode == node) + anchorPair = linkPair; + else + anchorPair = anchorForNode(linkNode); + out() << " <link rel=\"start\" href=\"" + << anchorPair.first << "\" />\n"; + } + } + #if 0 // Removed for new doc format. MWS if (node && !node->links().empty()) out() << "<p>\n" << navigationLinks << "</p>\n"; -- cgit v0.12 From 0732f41aac82211be362f8ce492947a566acfa6e Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Thu, 8 Jul 2010 13:15:47 +0200 Subject: Doc: fixing style from 600 to bold weight (cherry picked from commit ea7aeec080c9c39449017ff683b27d3659236336) --- doc/src/template/style/style.css | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 184a832..f7ff00a 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -18,7 +18,6 @@ fieldset, img { border: 0; - height:100%; width:100% } address, caption, cite, code, dfn, em, strong, th, var, optgroup @@ -66,7 +65,7 @@ } .heading { - font: normal 600 16px/1.0 Arial; + font: normal bold 16px/1.0 Arial; padding-bottom: 15px; } .subtitle @@ -212,7 +211,7 @@ font-size: 11px; } - .offline .sidebar, .offline .feedback, .offline .t_button + .offline .sidebar, .offline .feedback, .offline .t_button, .offline #narrowsearch, .offline #narrowmenu { display: none; } @@ -258,7 +257,7 @@ .sidebar .box h2 { - font: 600 16px/1.2 Arial; + font: bold 16px/1.2 Arial; padding: 0; /* min-height: 32px;*/ } @@ -493,7 +492,7 @@ .wrap .content h1 { - font: 600 18px/1.2 Arial; + font: bold 18px/1.2 Arial; } .wrap .content h2 { @@ -506,7 +505,7 @@ } .wrap .content h3 { - font: 600 14px/1.2 Arial; + font: bold 14px/1.2 Arial; /*border-bottom:1px solid #DDDDDD;*/ font:600 16px/1.2 Arial; margin-top:15px; @@ -934,7 +933,7 @@ .toc h3, .generic a { - font: 600 12px/1.2 Arial; + font: bold 12px/1.2 Arial; } .generic{ @@ -1141,7 +1140,7 @@ .content .indexboxcont li { - font: normal 600 13px/1 Verdana; + font: normal bold 13px/1 Verdana; } .indexbox a:hover, .indexbox a:visited:hover -- cgit v0.12 From e355a5eea5163af0161fe8724b2f05e9312192b9 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Thu, 8 Jul 2010 14:55:17 +0200 Subject: Doc: Correcting img bug Task-number: QTBUG-12028 (cherry picked from commit 0b8a7842975b195a17b3add4c98f64baeaedcf8c) --- doc/src/template/style/style.css | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index f7ff00a..5144020 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -18,7 +18,6 @@ fieldset, img { border: 0; - width:100% } address, caption, cite, code, dfn, em, strong, th, var, optgroup { -- cgit v0.12 From 91edb2531fc050702ee217e63972b3054c7c1b3e Mon Sep 17 00:00:00 2001 From: Jesper Thomschutz <jesper.thomschutz@nokia.com> Date: Tue, 10 Aug 2010 14:45:03 +0200 Subject: Cherry-picked from: commit 47ba8dba3fe48d317974acd55afeea8a434c95f8 Had to manually copy the file from that commit since the conflict was so wonky to resolve. Original Author is: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Fri Jul 9 21:36:15 2010 +0200 Doc: Cleaning style and adding support for Creator Note: Support for creator has been disabled. HTML-generator needs an update. --- doc/src/template/style/style.css | 1323 +++++++++++++++++++++++--------------- 1 file changed, 799 insertions(+), 524 deletions(-) diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 5144020..9f80921 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -1,6 +1,8 @@ @media screen { - html + +/* basic elements */ + html { color: #000000; background: #FFFFFF; @@ -18,6 +20,7 @@ fieldset, img { border: 0; + max-width:100%; } address, caption, cite, code, dfn, em, strong, th, var, optgroup { @@ -39,7 +42,6 @@ h1, h2, h3, h4, h5, h6 { font-size: 100%; -/* font-weight: normal; */ } q:before, q:after { @@ -50,11 +52,7 @@ border: 0; font-variant: normal; } - sup - { - vertical-align: baseline; - } - sub + sup, sub { vertical-align: baseline; } @@ -62,19 +60,6 @@ { word-spacing:5px; } - .heading - { - font: normal bold 16px/1.0 Arial; - padding-bottom: 15px; - } - .subtitle - { - font-size: 13px; - } - .small-subtitle - { - font-size: 13px; - } legend { color: #000000; @@ -90,9 +75,19 @@ { font-size: 100%; } + strong + { + font-weight: bold; + } + em + { + font-style: italic; + } + + /* adding Qt theme */ html { - background-color: #e5e5e5; + /* background-color: #e5e5e5;*/ } body { @@ -100,73 +95,115 @@ font: normal 13px/1.2 Verdana; color: #363534; } - strong + a { - font-weight: bold; + color: #00732f; + text-decoration: none; } - em + hr { - font-style: italic; + background-color: #E6E6E6; + border: 1px solid #E6E6E6; + height: 1px; + width: 100%; + text-align: left; + margin: 15px 0px 15px 0px; } - a + + pre { - color: #00732f; - text-decoration: none; + border: 1px solid #DDDDDD; + -moz-border-radius: 7px 7px 7px 7px; + margin: 0 20px 10px 10px; + padding: 20px 15px 20px 20px; + overflow-x: auto; } - .header, .footer, .wrapper + table, pre { - min-width: 600px; - max-width: 1500px; - margin: 0 30px; + -moz-border-radius: 7px 7px 7px 7px; + background-color: #F6F6F6; + border: 1px solid #E6E6E6; + border-collapse: separate; + font-size: 11px; + margin-bottom: 25px; } - .wrapper + pre.highlightedCode { + display: block; + overflow:hidden; + } + thead { - background: url(../images/bg_r.png) repeat-y 100% 0; + margin-top: 5px; + font:600 12px/1.2 Arial; } - .wrapper .hd + th { - padding-left: 216px; - height: 15px; - background: url(../images/page.png) no-repeat 0 0; - overflow: hidden; + padding: 5px 15px 5px 15px; + background-color: #E1E1E1; + border-left: 1px solid #E6E6E6; } - .offline .wrapper .hd + td { - background: url(../images/page.png) no-repeat 0 -15px; + padding: 3px 15px 3px 20px; } - .wrapper .hd span + tr.odd td:hover, tr.even td:hover {} + + td.rightAlign + { + padding: 3px 5px 3px 10px; + } + table tr.odd { - height: 15px; - display: block; - overflow: hidden; - background: url(../images/page.png) no-repeat 100% -30px; + border-left: 1px solid #E6E6E6; + background-color: #F6F6F6; + color: #66666E; } - .wrapper .bd + table tr.even { - background: url(../images/bg_l.png) repeat-y 0 0; - position: relative; + border-left: 1px solid #E6E6E6; + background-color: #ffffff; + color: #66666E; } - .offline .wrapper .bd + table tr.odd td:hover, table tr.even td:hover { - background: url(../images/bg_l_blank.png) repeat-y 0 0; + /* background-color: #E6E6E6;*/ /* disabled until further notice */ } - .wrapper .ft + + span.comment { - padding-left: 216px; - height: 15px; - background: url(../images/page.png) no-repeat 0 -75px; - overflow: hidden; + color: #8B0000; + font-style: italic; } - .offline .wrapper .ft + span.string, span.char { - background: url(../images/page.png) no-repeat 0 -90px; + color: #254117; } - .wrapper .ft span + + +/* end basic elements */ + +/* font style elements */ + .heading { - height: 15px; - display: block; - background: url(../images/page.png) no-repeat 100% -60px; - overflow: hidden; + font: normal bold 16px/1.0 Arial; + padding-bottom: 15px; + } + .subtitle + { + font-size: 13px; + } + .small-subtitle + { + font-size: 13px; + } +/* end font style elements */ + +/* global settings*/ + .header, .footer, .wrapper + { + min-width: 600px; + max-width: 1500px; + margin: 0 30px; } .header, .footer { @@ -174,6 +211,17 @@ clear: both; overflow: hidden; } + .header:after, .footer:after, .breadcrumb:after, .wrap .content:after, .group:after + { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; + } + +/* end global settings*/ +/* header elements */ .header { height: 115px; @@ -201,105 +249,332 @@ text-indent: -999em; background: url(../images/sprites-combined.png) no-repeat -78px -235px; } - - .sidebar + .content a:visited { - float: left; - margin-left: 5px; - width: 200px; - font-size: 11px; + color: #4c0033; + text-decoration: none; } - - .offline .sidebar, .offline .feedback, .offline .t_button, .offline #narrowsearch, .offline #narrowmenu + .content a:visited:hover { - display: none; + color: #4c0033; + text-decoration: underline; } - - .sidebar .searchlabel + + #nav-topright { - padding: 0 0 2px 17px; - font: normal bold 11px/1.2 Verdana; + height: 70px; } - .sidebar .search + #nav-topright ul { - padding: 0 15px 0 16px; + list-style-type: none; + float: right; + width: 370px; + margin-top: 11px; } - .sidebar .search form + #nav-topright li { - background: url(../images/sprites-combined.png) no-repeat -6px -348px; - height:21px; - padding:2px 0 0 5px; - width:167px; + display: inline-block; + margin-right: 20px; + float: left; } - .sidebar .search form input#pageType + #nav-topright li.nav-topright-last { - width: 158px; - height: 19px; - padding: 0; - border: 0px; - outline: none; - font: 13px/1.2 Verdana; + margin-right: 0; } - .sidebar .box + #nav-topright li a { - padding: 17px 15px 5px 16px; + background: transparent url(../images/sprites-combined.png) no-repeat; + height: 18px; + display: block; + overflow: hidden; + text-indent: -9999px; } - .sidebar .box .first + #nav-topright li.nav-topright-home a { - background-image: none; + width: 65px; + background-position: -2px -91px; } - .sidebar .box h2 + #nav-topright li.nav-topright-home a:hover { - font: bold 16px/1.2 Arial; - padding: 0; -/* min-height: 32px;*/ + background-position: -2px -117px; } - .sidebar .box h2 span + + + #nav-topright li.nav-topright-dev a { - overflow: hidden; - display: inline-block; + width: 30px; + background-position: -76px -91px; } - .sidebar .box#lookup h2 + + #nav-topright li.nav-topright-dev a:hover { - background-image: none; + background-position: -76px -117px; } - .sidebar #lookup.box h2 span + + + #nav-topright li.nav-topright-labs a { -/* background: url(../images/sprites-combined.png) no-repeat -6px -311px; - width: 27px; - height: 35px; - margin-right: 13px;*/ + width: 40px; + background-position: -114px -91px; } - .sidebar .box#topics h2 + + #nav-topright li.nav-topright-labs a:hover { - background-image: none; + background-position: -114px -117px; } - .sidebar #topics.box h2 span + + #nav-topright li.nav-topright-doc a { - /* background: url(../images/sprites-combined.png) no-repeat -94px -311px; - width: 27px; - height: 32px; - margin-right: 13px;*/ + width: 32px; + background-position: -162px -91px; } - .sidebar .box#examples h2 + + #nav-topright li.nav-topright-doc a:hover, #nav-topright li.nav-topright-doc-active a { - background-image: none; + background-position: -162px -117px; } - .sidebar #examples.box h2 span + + #nav-topright li.nav-topright-blog a { - /* background: url(../images/sprites-combined.png) no-repeat -48px -311px; - width: 30px; - height: 31px; - margin-right: 9px;*/ + width: 40px; + background-position: -203px -91px; } - .sidebar .box .list + #nav-topright li.nav-topright-blog a:hover, #nav-topright li.nav-topright-blog-active a + { + background-position: -203px -117px; + } + + #nav-topright li.nav-topright-shop a + { + width: 40px; + background-position: -252px -91px; + } + + #nav-topright li.nav-topright-shop a:hover, #nav-topright li.nav-topright-shop-active a + { + background-position: -252px -117px; + } + + #nav-logo + { + background: transparent url(../images/sprites-combined.png ) no-repeat 0 -225px; + left: -3px; + position: absolute; + width: 75px; + height: 75px; + top: 13px; + } + #nav-logo a + { + width: 75px; + height: 75px; + display: block; + text-indent: -9999px; + overflow: hidden; + } + + + .shortCut-topleft-inactive + { + padding-left: 3px; + background: transparent url( ../images/sprites-combined.png) no-repeat 0px -58px; + height: 20px; + width: 47px; + } + .shortCut-topleft-inactive span + { + font-variant: normal; + } + .shortCut-topleft-inactive span a:hover, .shortCut-topleft-active a:hover + { + text-decoration:none; + } + #shortCut + { + padding-top: 10px; + font-weight: bolder; + color: #b0adab; + } + #shortCut ul + { + list-style-type: none; + float: left; + width: 347px; + margin-left: 100px; + } + #shortCut li + { + display: inline-block; + margin-right: 25px; + float: left; + white-space: nowrap; + } + #shortCut li a + { + color: #b0adab; + } + #shortCut li a:hover + { + color: #44a51c; + } + + + +/* end header elements */ +/* content and sidebar elements */ + .wrapper + { + background: url(../images/bg_r.png) repeat-y 100% 0; + } + .wrapper .hd + { + padding-left: 216px; + height: 15px; + background: url(../images/page.png) no-repeat 0 0; + overflow: hidden; + } + + + + + .wrapper .hd span + { + height: 15px; + display: block; + overflow: hidden; + background: url(../images/page.png) no-repeat 100% -30px; + } + .wrapper .bd + { + background: url(../images/bg_l.png) repeat-y 0 0; + position: relative; + } + + + + + .wrapper .ft + { + padding-left: 216px; + height: 15px; + background: url(../images/page.png) no-repeat 0 -75px; + overflow: hidden; + } + + + + + .wrapper .ft span + { + height: 15px; + display: block; + background: url(../images/page.png) no-repeat 100% -60px; + overflow: hidden; + } + .navTop{ + float:right; + display:block; + padding-right:15px; + + + } + + + +/* end content and sidebar elements */ +/* sidebar elements */ + .sidebar + { + float: left; + margin-left: 5px; + width: 200px; + font-size: 11px; + } + + + + + + + .sidebar .searchlabel + { + padding: 0 0 2px 17px; + font: normal bold 11px/1.2 Verdana; + } + + .sidebar .search + { + padding: 0 15px 0 16px; + } + + .sidebar .search form + { + background: url(../images/sprites-combined.png) no-repeat -6px -348px; + height:21px; + padding:2px 0 0 5px; + width:167px; + } + + .sidebar .search form input#pageType + { + width: 158px; + height: 19px; + padding: 0; + border: 0px; + outline: none; + font: 13px/1.2 Verdana; + } + + .sidebar .box + { + padding: 17px 15px 5px 16px; + } + + .sidebar .box .first + { + background-image: none; + } + + .sidebar .box h2 + { + font: bold 16px/1.2 Arial; + padding: 0; + } + .sidebar .box h2 span + { + overflow: hidden; + display: inline-block; + } + .sidebar .box#lookup h2 + { + background-image: none; + } + .sidebar #lookup.box h2 span + { + } + .sidebar .box#topics h2 + { + background-image: none; + } + .sidebar #topics.box h2 span + { + } + .sidebar .box#examples h2 + { + background-image: none; + } + .sidebar #examples.box h2 span + { + } + + .sidebar .box .list { display: block; max-height:200px; @@ -313,7 +588,6 @@ } .sidebar .box ul { - /*padding:10px;*/ padding-bottom:5px; padding-left:10px; padding-top:5px; @@ -340,16 +614,40 @@ color:#AAD2F0; font-style:italic; } + .sidebar .search form input.loading + { + background:url("../images/spinner.gif") no-repeat scroll right center transparent; + } + +.floatingResult{ + z-index:1; + position:relative; + padding-top:0px; + background-color:white; + border:solid 1px black; + height:250px; + width:600px; + overflow-x:hidden; + overflow-y:auto; +} + .floatingResult:hover{ + display:block; + } + .floatingResult:hover{ + } + +/* end sidebar elements */ +/* content elements */ .wrap { margin: 0 5px 0 208px; overflow: visible; } - .offline .wrap - { - margin: 0 5px 0 5px; - } + + + + .wrap .toolbar { background-color: #fafafa; @@ -435,11 +733,14 @@ color: #00732F; } - .offline .wrap .breadcrumb - { - } - .wrap .breadcrumb ul + .wrap .content + { + padding: 30px; + word-wrap:break-word; + } + + .wrap .breadcrumb ul { } .wrap .breadcrumb ul li @@ -464,30 +765,36 @@ padding-left: 0; margin-left: 0; } - .wrap .content - { - padding: 30px; - word-wrap:break-word; - } + + + + .wrap .content ol li { + background:none; + font:normal 10pt/1 Verdana; + + margin-bottom:10px; + margin-left:12px; + /*list-style-type:disc;*/ + } + .wrap .content li { - /*padding-left: 12px;*/ background: url(../images/bullet_sq.png) no-repeat 0 5px; font: normal 400 10pt/1 Verdana; - /* color: #44a51c;*/ margin-bottom: 10px; padding-left:12px; } - .content li:hover - { - /* text-decoration: underline;*/ - } - .offline .wrap .content - { - padding-top: 15px; - } + + + + + + + + + .content li:hover {} .wrap .content h1 { @@ -495,17 +802,14 @@ } .wrap .content h2 { - border-bottom:1px solid #DDDDDD; font:600 16px/1.2 Arial; margin-top:15px; - width:100%; - + width:100%; } .wrap .content h3 { font: bold 14px/1.2 Arial; - /*border-bottom:1px solid #DDDDDD;*/ font:600 16px/1.2 Arial; margin-top:15px; width:100%; @@ -514,320 +818,69 @@ { line-height: 20px; padding: 5px; - /* text-align:justify;*/ } .wrap .content table p { line-height: 20px; - padding: 0px; - } - .wrap .content ul - { - padding-left: 25px; - padding-top: 10px; - } - a:hover - { - color: #4c0033; - text-decoration: underline; - } - .content a:visited - { - color: #4c0033; - text-decoration: none; - } - .content a:visited:hover - { - color: #4c0033; - text-decoration: underline; - } .footer - { - min-height: 100px; - color: #797775; - font: normal 9px/1 Verdana; - text-align: center; - padding-top: 40px; - background-color: #E6E7E8; - margin: 0; - } - .feedback - { - float: none; - position: absolute; - right: 15px; - bottom: 10px; - font: normal 8px/1 Verdana; - color: #B0ADAB; - } - .feedback:hover - { - float: right; - font: normal 8px/1 Verdana; - color: #00732F; - text-decoration: underline; - } - .header:after, .footer:after, .breadcrumb:after, .wrap .content:after, .group:after - { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; - } - #nav-topright - { - height: 70px; - } - - #nav-topright ul - { - list-style-type: none; - float: right; - width: 370px; - margin-top: 11px; - } - - #nav-topright li - { - display: inline-block; - margin-right: 20px; - float: left; - } - - #nav-topright li.nav-topright-last - { - margin-right: 0; - } - - #nav-topright li a - { - background: transparent url(../images/sprites-combined.png) no-repeat; - height: 18px; - display: block; - overflow: hidden; - text-indent: -9999px; - } - - #nav-topright li.nav-topright-home a - { - width: 65px; - background-position: -2px -91px; - } - - #nav-topright li.nav-topright-home a:hover - { - background-position: -2px -117px; - } - - - #nav-topright li.nav-topright-dev a - { - width: 30px; - background-position: -76px -91px; - } - - #nav-topright li.nav-topright-dev a:hover - { - background-position: -76px -117px; - } - - - #nav-topright li.nav-topright-labs a - { - width: 40px; - background-position: -114px -91px; - } - - #nav-topright li.nav-topright-labs a:hover - { - background-position: -114px -117px; - } - - #nav-topright li.nav-topright-doc a - { - width: 32px; - background-position: -162px -91px; - } - - #nav-topright li.nav-topright-doc a:hover, #nav-topright li.nav-topright-doc-active a - { - background-position: -162px -117px; - } - - #nav-topright li.nav-topright-blog a - { - width: 40px; - background-position: -203px -91px; - } - - #nav-topright li.nav-topright-blog a:hover, #nav-topright li.nav-topright-blog-active a - { - background-position: -203px -117px; - } - - #nav-topright li.nav-topright-shop a - { - width: 40px; - background-position: -252px -91px; - } - - #nav-topright li.nav-topright-shop a:hover, #nav-topright li.nav-topright-shop-active a - { - background-position: -252px -117px; - } - - #nav-logo - { - background: transparent url(../images/sprites-combined.png ) no-repeat 0 -225px; - left: -3px; - position: absolute; - width: 75px; - height: 75px; - top: 13px; - } - #nav-logo a - { - width: 75px; - height: 75px; - display: block; - text-indent: -9999px; - overflow: hidden; - } - - - .shortCut-topleft-inactive - { - padding-left: 3px; - background: transparent url( ../images/sprites-combined.png) no-repeat 0px -58px; - height: 20px; - width: 47px; - } - .shortCut-topleft-inactive span - { - font-variant: normal; - } - .shortCut-topleft-inactive span a:hover, .shortCut-topleft-active a:hover - { - text-decoration:none; - } - #shortCut - { - padding-top: 10px; - font-weight: bolder; - color: #b0adab; - } - #shortCut ul - { - list-style-type: none; - float: left; - width: 347px; - margin-left: 100px; - } - #shortCut li - { - display: inline-block; - margin-right: 25px; - float: left; - white-space: nowrap; - } - #shortCut li a - { - color: #b0adab; - } - #shortCut li a:hover - { - color: #44a51c; - } - - hr - { - background-color: #E6E6E6; - border: 1px solid #E6E6E6; - height: 1px; - width: 100%; - text-align: left; - margin: 15px 0px 15px 0px; - } - - .content .alignedsummary - { - margin: 15px; - } - pre - { - border: 1px solid #DDDDDD; - -moz-border-radius: 7px 7px 7px 7px; - margin: 0 20px 10px 10px; - padding: 20px 15px 20px 20px; - overflow-x: auto; - } - table, pre - { - -moz-border-radius: 7px 7px 7px 7px; - background-color: #F6F6F6; - border: 1px solid #E6E6E6; - border-collapse: separate; - font-size: 11px; - /*min-width: 395px;*/ - margin-bottom: 25px; - /* display: inline-block;*/ - } - thead - { - margin-top: 5px; - font:600 12px/1.2 Arial; - } - th - { - padding: 5px 15px 5px 15px; - background-color: #E1E1E1; - /* border-bottom: 1px solid #E6E6E6;*/ - border-left: 1px solid #E6E6E6; - /* border-right: 1px solid #E6E6E6;*/ - } - td - { - padding: 3px 15px 3px 20px; - /* border-left: 1px solid #E6E6E6; - border-right: 1px solid #E6E6E6;*/ - } - tr.odd td:hover, tr.even td:hover - { - /* border-right: 1px solid #C3C3C3; - border-left: 1px solid #C3C3C3;*/ - } - - td.rightAlign - { - padding: 3px 5px 3px 10px; - } - table tr.odd + padding: 0px; + } + .wrap .content ul { - border-left: 1px solid #E6E6E6; - background-color: #F6F6F6; - color: #66666E; + padding-left: 25px; + padding-top: 10px; } - table tr.even + a:hover { - border-left: 1px solid #E6E6E6; - background-color: #ffffff; - color: #66666E; + color: #4c0033; + text-decoration: underline; } - table tr.odd td:hover, table tr.even td:hover + .feedback { - background-color: #E6E6E6; + float: none; + position: absolute; + right: 15px; + bottom: 10px; + font: normal 8px/1 Verdana; + color: #B0ADAB; } - - span.comment + .feedback:hover { - color: #8B0000; - font-style: italic; + float: right; + font: normal 8px/1 Verdana; + color: #00732F; + text-decoration: underline; } - span.string, span.char + .alphaChar{ + width:100%; + background-color:#F6F6F6; + border:1px solid #E6E6E6; + -moz-border-radius: 7px 7px 7px 7px; + font-size:12pt; + padding-left:10px; + margin-top:10px; + margin-bottom:10px; + } + .flowList{ + vertical-align:top; + } + + .flowList dl{ + } + .flowList dd{ + display:inline-block; + margin-left:10px; + width:250px; + } + .wrap .content .flowList p{ + padding:0px; + } + + .content .alignedsummary { - color: #254117; + margin: 15px; } + .qmltype { text-align: center; @@ -854,7 +907,6 @@ *.qmlitem p { } - #feedbackBox { display: none; @@ -936,12 +988,10 @@ } .generic{ - /*max-width:75%;*/ } .generic td{ padding:5px; } - .generic .alphaChar{ margin-top:5px; } @@ -989,6 +1039,16 @@ padding-left: 0px; } + .wrap .content .toc h3{ + border-bottom:0px; + margin-top:0px; + } + + .wrap .content .toc h3 a:hover{ + color:#00732F; + text-decoration:none; + } + .wrap .content .toc .level2 { @@ -1005,7 +1065,6 @@ font: normal 10px/1.2 Verdana; background: url(../images/bullet_dn.png) no-repeat 0 5px; } - .relpage { -moz-border-radius: 7px 7px 7px 7px; @@ -1069,6 +1128,24 @@ .functionIndex a{ display:inline-block; } + +/* end content elements */ +/* footer elements */ + + .footer + { + min-height: 100px; + color: #797775; + font: normal 9px/1 Verdana; + text-align: center; + padding-top: 40px; + background-color: #E6E7E8; + margin: 0; + } +/* end footer elements */ + + + /* start index box */ .indexbox @@ -1080,15 +1157,15 @@ .indexboxcont { display: block; - /* overflow: hidden;*/ + } .indexboxbar { background: transparent url(../images/horBar.png ) repeat-x left bottom; margin-bottom: 25px; - /* background-image: none; - border-bottom: 1px solid #e2e2e2;*/ + + } .indexboxcont .section @@ -1188,87 +1265,285 @@ visibility: hidden; } -.sidebar .search form input.loading -{ - background:url("../images/spinner.gif") no-repeat scroll right center transparent; -} - /* end of screen media */ - -.flowList{ -vertical-align:top; -} -.alphaChar{ -width:100%; -background-color:#F6F6F6; -border:1px solid #E6E6E6; --moz-border-radius: 7px 7px 7px 7px; -font-size:12pt; -padding-left:10px; -margin-top:10px; -margin-bottom:10px; -} -.flowList dl{ -} -.flowList dd{ -display:inline-block; -margin-left:10px; -width:250px; -} -.wrap .content .flowList p{ -padding:0px; -} -pre.highlightedCode { - display: block; - overflow:hidden; -} -.floatingResult{ - z-index:1; - position:relative; - padding-top:0px; - background-color:white; - border:solid 1px black; - height:250px; - width:600px; - overflow-x:hidden; - overflow-y:auto; -} +/* start of offline spec*/ + .offline .wrapper .hd + { + background: url(../images/page.png) no-repeat 0 -15px; + } + .offline .wrapper .bd + { + background: url(../images/bg_l_blank.png) repeat-y 0 0; + } + .offline .wrapper .ft + { + background: url(../images/page.png) no-repeat 0 -90px; + } + .offline .sidebar, + .offline .feedback, + .offline .t_button, + .offline #narrowsearch, + .offline #narrowmenu + { + display: none; + } + .offline .wrap + { + margin: 0 5px 0 5px; + } + .offline .wrap .breadcrumb + { + } - .floatingResult:hover{ - display:block; - } - .floatingResult:hover{ - /*display:none;*/ - } + .offline .wrap .content + { + padding-top: 15px; + } - .wrap .content ol li { - background:none; - font:400 10pt/1 Verdana; - margin-bottom:10px; - margin-left:12px; + +/* end of offline spec*/ + +/* start of creator spec*/ + .creator + { + margin-left:0px; + margin-right:0px; + padding-left:0px; + padding-right:0px; } - .wrap .content ol li { + .creator .wrap .content ol li { list-style-type:decimal; } - .navTop{ - float:right; - display:block; - padding-right:15px; - /*margin-top:10px;*/ + .creator .header .icon, + .creator .feedback, + .creator .t_button, + .creator .feedback, + .creator #feedbackBox, + .creator #feedback, + .creator #blurpage, + .creator .indexbox .indexIcon span, + .creator .wrapper .hd, + .creator .indexbox .indexIcon, + .creator .header #nav-logo, + .creator #offlinemenu, + .creator #offlinesearch, + .creator .header #nav-topright, + .creator .header #shortCut , + .creator .wrapper .hd, + .creator .wrapper .ft, + .creator .sidebar, + .creator .wrap .feedback + { + display:none; + } + + body.creator + { + background: none; + + font: normal 13px/1.2 Verdana; + color: #363534; + background-color: #FFFFFF; + } + + + + .creator .header, .footer, .wrapper + { + max-width: 1500px; + margin: 0px; + } + + .creator .wrapper + { + position:relative; + top:50px; + } + .creator .wrapper .bd + { + + background:#FFFFFF; } + + + .creator .header, .footer + { + display: block; + clear: both; + overflow: hidden; + } + .creator .wrap .content p + + { + line-height: 20px; + padding: 5px; + } + + .creator .header .qtref span + { + background:none; + } + + - .wrap .content .toc h3{ - border-bottom:0px; - margin-top:0px; + .creator .footer + { + border-top:1px solid #E5E5E5; + min-height: 100px; + margin:0px; + } + + .creator .wrap + { + + padding:0 5px 0 5px; + margin: 0px; + } + .creator .wrap .toolbar + { + + + border-bottom:1px solid #E5E5E5; + width:100%, + } + .creator .wrap .breadcrumb ul li a + { + /* color: #363534;*/ + color: #00732F; + } + + .creator .wrap .content + { + padding: 0px; + word-wrap:break-word; + } + + .creator .wrap .content ol li { + background:none; + font: inherit; + padding-left: 0px; + } + + .creator .wrap .content .descr ol li { + margin-left: 45px; + + } + .creator .content .alignedsummary + { + margin: 5px; + width:100%; + } + .creator .generic{ + max-width:75%; + } + .creator .generic td{ + padding:0; } + .creator .indexboxbar + { + border-bottom:1px solid #E5E5E5; + margin-bottom: 25px; + background: none; + } - .wrap .content .toc h3 a:hover{ - color:#00732F; - text-decoration:none; + + + .creator .header + { + width: 100%; + margin: 0; + height: auto; + background-color: #ffffff; + padding: 10px 0 5px 0; + overflow: visible; + border-bottom: solid #E5E5E5 1px; + z-index:1; + + + + + + + + + position:fixed; + } + + + .creator .header .content + { + } + .creator .header .qtref + { + color: #00732F; + position: static; + float: left; + margin-left: 5px; + font: bold 18px/1 Arial; + } + + .creator .header .qtref:visited + { + color: #00732F; + } + .creator .header .qtref:hover + { + color: #00732F; + text-decoration:none; + } + .creator .header .qtref span + { + background-image: none; + text-indent: 0; + text-decoration:none; + } + + + + + + + .creator .wrap .toolbar + { + display:block; + padding-top:0px; + } + + + + .creator .wrap .breadcrumb ul li { + font-weight: normal; + } + + .creator .wrap .breadcrumb ul li a { + /*color: #44a51c;*/ + } + + .creator .wrap .breadcrumb ul li.last a { + /*color: #363534;*/ + } + + .creator #narrowmenu ul + { + border-bottom:solid 1px #E5E5E5; + border-left:solid 1px #E5E5E5; + border-right:solid 1px #E5E5E5; } + + .creator #narrowmenu li ul { + margin-top:-15px; + } + + + .creator .toc { + margin:10px 20px 10px 10px; + } +/* end of creator spec*/ +} + /* end of screen media */ /* start of print media */ -- cgit v0.12 From 5aaffb961e0f720abbbf9fc157721fcbfcc9075b Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Tue, 3 Aug 2010 09:24:54 +0200 Subject: Doc: Correcting bugs in the CSS (cherry picked from commit 56cfbce20f736caa1ef74b5706fe3713ebd773c9) --- doc/src/template/style/narrow.css | 21 +++++++++++++++++++-- doc/src/template/style/style.css | 6 ++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css index 05159aa..e4ad135 100644 --- a/doc/src/template/style/narrow.css +++ b/doc/src/template/style/narrow.css @@ -15,7 +15,12 @@ } .narrow .footer { - margin: 0; + margin: 0px; + } + + .creator .header, .creator .header .content, .creator .footer, .creator .wrapper { + margin: 0px; + min-width: 300px; } .narrow .header { @@ -126,6 +131,11 @@ margin: 0 5px 0 5px; } + .creator .wrap + { + margin: 0px; + background:#FFFFFF; + } .narrow .wrap .toolbar { border-bottom: none; @@ -135,7 +145,14 @@ { padding-top: 15px; } - + .creator .wrap .content + { + padding-top: 10px; + } + .creator .wrap .content .guide + { + padding-top: 15px; + } .narrow .wrap .feedback { display: none; diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 9f80921..259591f 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -1345,7 +1345,7 @@ font: normal 13px/1.2 Verdana; color: #363534; - background-color: #FFFFFF; + background-color: #FAFAFA; } @@ -1406,7 +1406,9 @@ border-bottom:1px solid #E5E5E5; - width:100%, + /*width:100%;*/ + margin-left:-5px; + margin-right:-5px; } .creator .wrap .breadcrumb ul li a { -- cgit v0.12 From e133941d76a2214708b5d7c6aa35eae44d6f5076 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Tue, 3 Aug 2010 10:54:31 +0200 Subject: Doc: Adding content to installation guide and fixing printing bugs (cherry picked from commit 79797d175c41198b0dffad1dced021a07c5873ae) --- doc/src/getting-started/installation.qdoc | 7 +++++-- doc/src/template/style/style.css | 7 +++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index 90723ec..629d8b7 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -30,10 +30,13 @@ \title Installation \brief Installing Qt on supported platforms. -The installation procedure is different on each Qt platform. -Please follow the instructions for your platform from the following list. +The installation procedure is different on each Qt platform. This page provides +information on how to install Qt, as well as software and hardware requirements +for using Qt on each of the supported platforms. Please follow the instructions +for your platform from the following list. \generatelist{related} + */ /*! \page install-x11.html diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 259591f..9b37693 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -1552,18 +1552,17 @@ @media print { - input, textarea, .header, .footer, .toolbar, .feedback, .wrapper .hd, .wrapper .bd .sidebar, .wrapper .ft + input, textarea, .header, .footer, .toolbar, .feedback, .wrapper .hd, .wrapper .bd .sidebar, .wrapper .ft, #feedbackBox, #blurpage, .toc, .breadcrumb, .toolbar, .floatingResult { display: none; background: none; } .content { - position: absolute; - top: 0px; - left: 0px; background: none; display: block; + width: 100%; margin: 0; float: none; + } } /* end of print media */ -- cgit v0.12 From e0167ee787bd0d28a9de0278c3f70f30151e2be6 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Tue, 10 Aug 2010 11:50:49 +1000 Subject: Don't double-add item change listeners. When a Repeater was used as the child of an Item binding to childrenRect, the item change listener was being added twice for the items created by the Repeater. Task-number: QTBUG-12722 (cherry picked from commit 6feb5b75ce96aeeefee189af003949db8c031519) --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 4 ++-- .../qdeclarativeitem/data/childrenRectBug3.qml | 15 +++++++++++++++ .../declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp | 12 ++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 06862f1..ccbdce8 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2740,12 +2740,12 @@ QVariant QDeclarativeItem::itemChange(GraphicsItemChange change, } break; case ItemChildAddedChange: - if (d->_contents) + if (d->_contents && d->componentComplete) d->_contents->childAdded(qobject_cast<QDeclarativeItem*>( value.value<QGraphicsItem*>())); break; case ItemChildRemovedChange: - if (d->_contents) + if (d->_contents && d->componentComplete) d->_contents->childRemoved(qobject_cast<QDeclarativeItem*>( value.value<QGraphicsItem*>())); break; diff --git a/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml b/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml new file mode 100644 index 0000000..f19ab4f --- /dev/null +++ b/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml @@ -0,0 +1,15 @@ +import Qt 4.7 + +Rectangle { + width: 300 + height: 300 + + Rectangle { + height: childrenRect.height + + Repeater { + model: 1 + Rectangle { } + } + } +} diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index d76d360..25ca157 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -75,6 +75,7 @@ private slots: void childrenRect(); void childrenRectBug(); void childrenRectBug2(); + void childrenRectBug3(); void childrenProperty(); void resourcesProperty(); @@ -780,6 +781,17 @@ void tst_QDeclarativeItem::childrenRectBug2() delete canvas; } +// QTBUG-12722 +void tst_QDeclarativeItem::childrenRectBug3() +{ + QDeclarativeView *canvas = new QDeclarativeView(0); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/childrenRectBug3.qml")); + canvas->show(); + + //don't crash on delete + delete canvas; +} + template<typename T> T *tst_QDeclarativeItem::findItem(QGraphicsObject *parent, const QString &objectName) { -- cgit v0.12 From b5ab5d8c59b1cfbf762ea584af65ec776f9f1b95 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Tue, 10 Aug 2010 13:59:57 +0200 Subject: QSslSocket: fix security vulnerability with wildcard IP addresses This fixes Westpoint Security issue with Advisory ID#: wp-10-0001. Before, we would allow wildcards in IP addresses like *.2.3.4 ; now, IP addresses must match excatly. Patch-by: Richard J. Moore <rich@kde.org> Task-number: QT-3704 (cherry picked from commit 846f1b44eea4bb34d080d055badb40a4a13d369e) --- src/network/ssl/qsslsocket_openssl.cpp | 5 +++++ tests/auto/qsslsocket/tst_qsslsocket.cpp | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index f181206..2fd9901 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -1282,6 +1282,11 @@ bool QSslSocketBackendPrivate::isMatchingHostname(const QString &cn, const QStri if (hostname.midRef(hostname.indexOf(QLatin1Char('.'))) != cn.midRef(firstCnDot)) return false; + // Check if the hostname is an IP address, if so then wildcards are not allowed + QHostAddress addr(hostname); + if (!addr.isNull()) + return false; + // Ok, I guess this was a wildcard CN and the hostname matches. return true; } diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 0c12974..6c1dd8f 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -1072,6 +1072,7 @@ void tst_QSslSocket::wildcardCertificateNames() QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example.com"), QString("www.example.com")), true ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("xxx*.example.com"), QString("xxxwww.example.com")), true ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("f*.example.com"), QString("foo.example.com")), true ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("192.168.0.0"), QString("192.168.0.0")), true ); // Failing CN matches QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("xxx.example.com"), QString("www.example.com")), false ); @@ -1085,6 +1086,7 @@ void tst_QSslSocket::wildcardCertificateNames() QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.example."), QString("www.example")), false ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString(""), QString("www")), false ); QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*"), QString("www")), false ); + QCOMPARE( QSslSocketBackendPrivate::isMatchingHostname(QString("*.168.0.0"), QString("192.168.0.0")), false ); } void tst_QSslSocket::wildcard() -- cgit v0.12 From 3a44730b2d2d9b481c5af6ce1e1b6664e6655220 Mon Sep 17 00:00:00 2001 From: Shane Kearns <shane.kearns@accenture.com> Date: Tue, 10 Aug 2010 14:02:52 +0100 Subject: Fix regression with SSL connections failing on symbian Due to a wrong ifdef sequence, the unix code was being compiled instead of the symbian code for retrieving the system certificates. Task-number: QTBUG-12718 Reviewed-by: Peter Hartmann (cherry picked from commit 8229eded4cba85ae53c1b03ce87981ebabd2f3ae) --- src/network/ssl/qsslsocket_openssl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 2fd9901..6a4613e 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -744,7 +744,7 @@ QList<QSslCertificate> QSslSocketPrivate::systemCaCertificates() ptrCertCloseStore(hSystemStore, 0); } } -#elif defined(Q_OS_UNIX) +#elif defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN) systemCerts.append(QSslCertificate::fromPath(QLatin1String("/var/ssl/certs/*.pem"), QSsl::Pem, QRegExp::Wildcard)); // AIX systemCerts.append(QSslCertificate::fromPath(QLatin1String("/usr/local/ssl/certs/*.pem"), QSsl::Pem, QRegExp::Wildcard)); // Solaris systemCerts.append(QSslCertificate::fromPath(QLatin1String("/opt/openssl/certs/*.pem"), QSsl::Pem, QRegExp::Wildcard)); // HP-UX -- cgit v0.12 From a87c1eedb811eee25e3df5216d4d493891b7cd9c Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Wed, 7 Jul 2010 10:27:38 +0200 Subject: I18n: Complete German translation for 4.7.0 --- translations/qt_de.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/translations/qt_de.ts b/translations/qt_de.ts index 7d32ead..74bd048 100644 --- a/translations/qt_de.ts +++ b/translations/qt_de.ts @@ -2024,6 +2024,11 @@ nach <translation>Signalnamen dürfen nicht mit einem Großbuchstaben beginnen</translation> </message> <message> + <location line="+2"/> + <source>Illegal signal name</source> + <translation>Ungültiger Name für Signal</translation> + </message> + <message> <location line="+6"/> <source>Duplicate method name</source> <translation>Mehrfaches Auftreten eines Methodennamens</translation> @@ -2034,6 +2039,11 @@ nach <translation>Methodennamen dürfen nicht mit einem Großbuchstaben beginnen</translation> </message> <message> + <location line="+2"/> + <source>Illegal method name</source> + <translation>Ungültiger Name für Methode</translation> + </message> + <message> <location line="+21"/> <source>Property value set multiple times</source> <translation>Mehrfache Zuweisung eines Wertes an eine Eigenschaft</translation> @@ -7713,21 +7723,53 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Kontext4</translation> </message> <message> - <location line="+1"/> + <location line="+2"/> <source>Call</source> + <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment> <translation>Anruf</translation> </message> <message> - <location line="+1"/> + <location line="+2"/> <source>Hangup</source> + <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment> <translation>Auflegen</translation> </message> <message> + <location line="+2"/> + <source>Toggle Call/Hangup</source> + <extracomment>Button that will hang up if we're in call, or make a call if we're not.</extracomment> + <translation>Anrufen/Aufhängen</translation> + </message> + <message> <location line="+1"/> <source>Flip</source> <translation>Umdrehen</translation> </message> <message> + <location line="+2"/> + <source>Voice Dial</source> + <extracomment>Button to trigger voice dialling</extracomment> + <translation>Sprachwahl</translation> + </message> + <message> + <location line="+2"/> + <source>Last Number Redial</source> + <extracomment>Button to redial the last number called</extracomment> + <translation>Wahlwiederholung</translation> + </message> + <message> + <location line="+2"/> + <source>Camera Shutter</source> + <extracomment>Button to trigger the camera shutter (take a picture)</extracomment> + <translation>Auslöser</translation> + </message> + <message> + <location line="+2"/> + <source>Camera Focus</source> + <extracomment>Button to focus the camera</extracomment> + <translation>Scharfstellen</translation> + </message> + <message> <location line="+4"/> <source>Kanji</source> <translation>Kanji</translation> -- cgit v0.12 From 755fa15ef6535802e126de78ab727d31b538a64f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 9 Aug 2010 09:17:27 +0200 Subject: I18N: Update German translations for 4.7.0. (cherry picked from commit 7ee7f19502bfd9193c624045bed07bdfdb23d1df) --- translations/assistant_de.ts | 345 +++--- translations/designer_de.ts | 1380 +--------------------- translations/linguist_de.ts | 438 +------ translations/qt_de.ts | 2666 +----------------------------------------- translations/qt_help_de.ts | 78 +- 5 files changed, 278 insertions(+), 4629 deletions(-) diff --git a/translations/assistant_de.ts b/translations/assistant_de.ts index bfafc71..0f4d0d6 100644 --- a/translations/assistant_de.ts +++ b/translations/assistant_de.ts @@ -4,7 +4,6 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+117"/> <source>&Close</source> <translation>&Schließen</translation> </message> @@ -12,19 +11,16 @@ <context> <name>AboutLabel</name> <message> - <location line="-15"/> <source>Warning</source> <translation>Achtung</translation> </message> <message> - <location line="+1"/> <source>Unable to launch external application. </source> <translation>Fehler beim Starten der externen Anwendung. </translation> </message> <message> - <location line="+0"/> <source>OK</source> <translation>OK</translation> </message> @@ -32,17 +28,14 @@ <context> <name>Assistant</name> <message> - <location filename="../tools/assistant/tools/assistant/main.cpp" line="+177"/> <source>Error registering documentation file '%1': %2</source> <translation>Beim Registrieren der Dokumentationsdatei '%1' trat ein Fehler auf: %2</translation> </message> <message> - <location line="+39"/> <source>Error: %1</source> <translation>Fehler: %1</translation> </message> <message> - <location line="+42"/> <source>Could not register documentation file %1 @@ -54,12 +47,10 @@ Grund: %2</translation> </message> <message> - <location line="+6"/> <source>Documentation successfully registered.</source> <translation>Dokumentation erfolgreich registriert.</translation> </message> <message> - <location line="+12"/> <source>Could not unregister documentation file %1 @@ -71,27 +62,22 @@ Grund: %2</translation> </message> <message> - <location line="+8"/> <source>Documentation successfully unregistered.</source> <translation>Dokumentation erfolgreich entfernt.</translation> </message> <message> - <location line="+55"/> <source>Error reading collection file '%1': %2.</source> <translation>Fehler beim Lesen der Katalogdatei '%1': %2</translation> </message> <message> - <location line="+11"/> <source>Error creating collection file '%1': %2.</source> <translation>Fehler beim Erstellen der Katalogdatei '%1': %2.</translation> </message> <message> - <location line="+7"/> <source>Error reading collection file '%1': %2</source> <translation>Fehler beim Lesen der Katalogdatei '%1': %2</translation> </message> <message> - <location line="+53"/> <source>Cannot load sqlite database driver!</source> <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden.</translation> </message> @@ -99,139 +85,229 @@ Grund: <context> <name>BookmarkDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/> <source>Add Bookmark</source> <translation>Lesezeichen hinzufügen</translation> </message> <message> - <location/> <source>Bookmark:</source> <translation>Lesezeichen:</translation> </message> <message> - <location/> <source>Add in Folder:</source> <translation>Erstellen in:</translation> </message> <message> - <location/> <source>New Folder</source> <translation>Neuer Ordner</translation> </message> <message> - <location/> <source>+</source> <translation>+</translation> </message> + <message> + <source>Rename Folder</source> + <translation>Ordner umbenennen</translation> + </message> </context> <context> <name>BookmarkManager</name> <message> - <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+151"/> <source>Untitled</source> <translation>Ohne Titel</translation> </message> <message> - <location line="+65"/> <source>Remove</source> <translation>Entfernen</translation> </message> <message> - <location line="+1"/> <source>You are going to delete a Folder, this will also<br>remove it's content. Are you sure to continue?</source> <translation>Wenn Sie diesen Ordner löschen, wird auch<br>dessen kompletter Inhalt gelöscht. Möchten Sie wirklich fortfahren?</translation> </message> <message> - <location line="+147"/> <source>Manage Bookmarks...</source> <translation>Lesezeichen verwalten...</translation> </message> <message> - <location line="+3"/> <source>Add Bookmark...</source> <translation>Lesezeichen hinzufügen ...</translation> </message> <message> - <location line="+1"/> <source>Ctrl+D</source> <translation>Ctrl+D</translation> </message> <message> - <location line="+68"/> <source>Delete Folder</source> <translation>Ordner löschen</translation> </message> <message> - <location line="+1"/> <source>Rename Folder</source> <translation>Ordner umbenennen</translation> </message> <message> - <location line="+2"/> <source>Show Bookmark</source> <translation>Lesezeichen öffnen</translation> </message> <message> - <location line="+1"/> <source>Show Bookmark in New Tab</source> <translation>Lesezeichen in neuem Reiter öffnen</translation> </message> <message> - <location line="+2"/> <source>Delete Bookmark</source> <translation>Lesezeichen löschen</translation> </message> <message> - <location line="+1"/> <source>Rename Bookmark</source> <translation>Lesezeichen umbenennen</translation> </message> </context> <context> + <name>BookmarkManagerWidget</name> + <message> + <source>Manage Bookmarks</source> + <translation>Lesezeichen verwalten</translation> + </message> + <message> + <source>Search:</source> + <translation>Suche:</translation> + </message> + <message> + <source>Remove</source> + <translation>Entfernen</translation> + </message> + <message> + <source>Import and Backup</source> + <translation>Importieren und Sichern</translation> + </message> + <message> + <source>OK</source> + <translation>OK</translation> + </message> + <message> + <source>Import...</source> + <translation>Importieren...</translation> + </message> + <message> + <source>Export...</source> + <translation>Exportieren...</translation> + </message> + <message> + <source>Open File</source> + <translation>Datei öffnen</translation> + </message> + <message> + <source>Files (*.xbel)</source> + <translation>Dateien (*.xbel)</translation> + </message> + <message> + <source>Save File</source> + <translation>Datei speichern</translation> + </message> + <message> + <source>Qt Assistant</source> + <translation>Qt Assistant</translation> + </message> + <message> + <source>Unable to save bookmarks.</source> + <translation>Die Lesezeichen konnten nicht gespeichert werden.</translation> + </message> + <message> + <source>You are goingto delete a Folder, this will also<br> remove it's content. Are you sure to continue?</source> + <translation>Beim Löschen des Ordners wird auch dessen Inhalt entfernt.<br>Möchten Sie fortsetzen?</translation> + </message> + <message> + <source>Delete Folder</source> + <translation>Ordner löschen</translation> + </message> + <message> + <source>Rename Folder</source> + <translation>Ordner umbenennen</translation> + </message> + <message> + <source>Show Bookmark</source> + <translation>Lesezeichen anzeigen</translation> + </message> + <message> + <source>Show Bookmark in New Tab</source> + <translation>Lesezeichen in neuem Reiter öffnen</translation> + </message> + <message> + <source>Delete Bookmark</source> + <translation>Lesezeichen löschen</translation> + </message> + <message> + <source>Rename Bookmark</source> + <translation>Lesezeichen umbenennen</translation> + </message> +</context> +<context> + <name>BookmarkModel</name> + <message> + <source>Name</source> + <translation>Name</translation> + </message> + <message> + <source>Address</source> + <translation>Adresse</translation> + </message> + <message> + <source>Bookmarks Menu</source> + <translation>Lesezeichen-Menü</translation> + </message> +</context> +<context> + <name>BookmarkWidget</name> + <message> + <source>Bookmarks</source> + <translation>Lesezeichen</translation> + </message> + <message> + <source>Filter:</source> + <translation>Filter:</translation> + </message> + <message> + <source>Add</source> + <translation>Hinzufügen</translation> + </message> + <message> + <source>Remove</source> + <translation>Entfernen</translation> + </message> +</context> +<context> <name>CentralWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+121"/> <source>Add new page</source> <translation>Neue Seite hinzufügen</translation> </message> <message> - <location line="+9"/> <source>Close current page</source> <translation>Aktuelle Seite schließen</translation> </message> <message> - <location line="+287"/> <source>Print Document</source> <translation>Drucken</translation> </message> <message> - <location line="+126"/> - <location line="+2"/> <source>unknown</source> <translation>unbekannt</translation> </message> <message> - <location line="+100"/> <source>Add New Page</source> <translation>Neue Seite hinzufügen</translation> </message> <message> - <location line="+3"/> <source>Close This Page</source> <translation>Aktuelle Seite schließen</translation> </message> <message> - <location line="+3"/> <source>Close Other Pages</source> <translation>Andere Seiten schließen</translation> </message> <message> - <location line="+5"/> <source>Add Bookmark for this Page...</source> <translation>Lesezeichen für diese Seite hinzufügen ...</translation> </message> <message> - <location line="+264"/> <source>Search</source> <translation>Suchen</translation> </message> @@ -239,62 +315,50 @@ Grund: <context> <name>CmdLineParser</name> <message> - <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+137"/> <source>Unknown option: %1</source> <translation>Unbekannte Option: %1</translation> </message> <message> - <location line="+87"/> <source>Unknown widget: %1</source> <translation>Unbekanntes Widget-Objekt: %1</translation> </message> <message> - <location line="-54"/> <source>The collection file '%1' does not exist.</source> <translation>Die Katalogdatei '%1' existiert nicht.</translation> </message> <message> - <location line="+3"/> <source>Missing collection file.</source> <translation>Fehlende Katalogdatei.</translation> </message> <message> - <location line="+13"/> <source>Invalid URL '%1'.</source> <translation>Ungültige URL '%1'.</translation> </message> <message> - <location line="+2"/> <source>Missing URL.</source> <translation>Fehlende URL.</translation> </message> <message> - <location line="+38"/> <source>Missing widget.</source> <translation>Fehlendes Widget-Objekt.</translation> </message> <message> - <location line="+23"/> <source>The Qt help file '%1' does not exist.</source> <translation>Die Hilfedatei '%1' existiert nicht.</translation> </message> <message> - <location line="+4"/> <source>Missing help file.</source> <translation>Fehlende Hilfedatei.</translation> </message> <message> - <location line="+10"/> <source>Missing filter argument.</source> <translation>Das Filter-Argument fehlt.</translation> </message> <message> - <location line="+20"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location line="+2"/> <source>Notice</source> <translation>Hinweis</translation> </message> @@ -302,12 +366,10 @@ Grund: <context> <name>ContentWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+171"/> <source>Open Link</source> <translation>Link öffnen</translation> </message> <message> - <location line="+1"/> <source>Open Link in New Tab</source> <translation>Link in neuem Reiter öffnen</translation> </message> @@ -315,40 +377,52 @@ Grund: <context> <name>FilterNameDialogClass</name> <message> - <location filename="../tools/assistant/tools/assistant/filternamedialog.ui"/> <source>Add Filter Name</source> <translation>Filternamen hinzufügen</translation> </message> <message> - <location/> <source>Filter Name:</source> <translation>Filtername:</translation> </message> </context> <context> + <name>FindWidget</name> + <message> + <source>Previous</source> + <translation>Voriges</translation> + </message> + <message> + <source>Next</source> + <translation>Nächstes</translation> + </message> + <message> + <source>Case Sensitive</source> + <translation>Groß/Kleinschreibung beachten</translation> + </message> + <message> + <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> + <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Seitenende erreicht</translation> + </message> +</context> +<context> <name>FontPanel</name> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> <source>Font</source> <translation>Schriftart</translation> </message> <message> - <location line="+11"/> <source>&Writing system</source> <translation>S&kript</translation> </message> <message> - <location line="+3"/> <source>&Family</source> <translation>&Schriftart</translation> </message> <message> - <location line="+4"/> <source>&Style</source> <translation>S&chriftschnitt</translation> </message> <message> - <location line="+4"/> <source>&Point size</source> <translation>&Schriftgrad</translation> </message> @@ -356,30 +430,37 @@ Grund: <context> <name>HelpViewer</name> <message> - <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+56"/> <source><title>about:blank</title></source> <translation><title>about:blank</title></translation> </message> <message> - <location line="+6"/> <source><title>Error 404...</title><div align="center"><br><br><h1>The page could not be found</h1><br><h3>'%1'</h3></div></source> <translation><title>Fehler 404 ...</title><div align="center"><br><br><h1>Die Seite kann nicht gefunden werden.</h1><br><h3>'%1'</h3></div></translation> </message> + <message> + <source>Copy &Link Location</source> + <translation>&Link-Adresse kopieren</translation> + </message> + <message> + <source>Open Link in New Tab Ctrl+LMB</source> + <translation>Link in neuem Reiter öffnen (Strg + linke Maustaste)</translation> + </message> + <message> + <source>Open Link in New Tab</source> + <translation>Link in neuem Reiter öffnen</translation> + </message> </context> <context> <name>IndexWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+68"/> <source>&Look for:</source> <translation>Suchen &nach:</translation> </message> <message> - <location line="+74"/> <source>Open Link</source> <translation>Link öffnen</translation> </message> <message> - <location line="+1"/> <source>Open Link in New Tab</source> <translation>Link in neuem Reiter öffnen</translation> </message> @@ -387,99 +468,76 @@ Grund: <context> <name>InstallDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+78"/> <source>Install Documentation</source> <translation>Dokumentation installieren</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+33"/> <source>Downloading documentation info...</source> <translation>Dokumentationsinformation herunterladen ...</translation> </message> <message> - <location line="+51"/> <source>Download canceled.</source> <translation>Herunterladen abgebrochen.</translation> </message> <message> - <location line="+28"/> - <location line="+79"/> - <location line="+27"/> <source>Done.</source> <translation>Fertig.</translation> </message> <message> - <location line="-91"/> <source>The file %1 already exists. Do you want to overwrite it?</source> <translation>Die Datei %1 existiert bereits. Möchten Sie sie überschreiben?</translation> </message> <message> - <location line="+11"/> <source>Unable to save the file %1: %2.</source> <translation>Die Datei %1 kann nicht gespeichert werden: %2.</translation> </message> <message> - <location line="+8"/> <source>Downloading %1...</source> <translation>Herunterladen der Datei %1 ...</translation> </message> <message> - <location line="+20"/> - <location line="+42"/> - <location line="+40"/> <source>Download failed: %1.</source> <translation>Herunterladen fehlgeschlagen: %1.</translation> </message> <message> - <location line="-72"/> <source>Documentation info file is corrupt!</source> <translation>Die Dokumentationsdatei ist beschädigt.</translation> </message> <message> - <location line="+37"/> <source>Download failed: Downloaded file is corrupted.</source> <translation>Herunterladen fehlgeschlagen: Die Datei ist wahrscheinlich beschädigt.</translation> </message> <message> - <location line="+2"/> <source>Installing documentation %1...</source> <translation>Dokumentation %1 installieren ...</translation> </message> <message> - <location line="+23"/> <source>Error while installing documentation: %1</source> <translation>Fehler bei der Installation von: %1</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> <source>Available Documentation:</source> <translation>Verfügbare Dokumentation:</translation> </message> <message> - <location/> <source>Install</source> <translation>Installieren</translation> </message> <message> - <location/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location/> <source>Installation Path:</source> <translation>Installationsordner:</translation> </message> <message> - <location/> <source>...</source> <translation>...</translation> </message> @@ -487,297 +545,234 @@ Grund: <context> <name>MainWindow</name> <message> - <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+123"/> - <location line="+369"/> <source>Index</source> <translation>Index</translation> </message> <message> - <location line="-363"/> - <location line="+361"/> <source>Contents</source> <translation>Inhalt</translation> </message> <message> - <location line="-354"/> - <location line="+358"/> <source>Bookmarks</source> <translation>Lesezeichen</translation> </message> <message> - <location line="+2"/> <source>Search</source> <translation>Suchen</translation> </message> <message> - <location line="-338"/> - <location line="+680"/> - <location line="+284"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location line="-705"/> <source>Page Set&up...</source> <translation>S&eite einrichten ...</translation> </message> <message> - <location line="+2"/> <source>Print Preview...</source> <translation>Druckvorschau ...</translation> </message> <message> - <location line="+3"/> <source>&Print...</source> <translation>&Drucken ...</translation> </message> <message> - <location line="-10"/> <source>New &Tab</source> <translation>Neuer &Reiter</translation> </message> <message> - <location line="+17"/> <source>&Close Tab</source> <translation>Reiter &schließen</translation> </message> <message> - <location line="+5"/> <source>&Quit</source> <translation>&Beenden</translation> </message> <message> - <location line="+3"/> <source>CTRL+Q</source> <translation>CTRL+Q</translation> </message> <message> - <location line="+6"/> <source>&Copy selected Text</source> <translation>Ausgewählten Text &kopieren</translation> </message> <message> - <location line="+8"/> <source>&Find in Text...</source> <translation>&Textsuche ...</translation> </message> <message> - <location line="+2"/> <source>&Find</source> <translation>&Suchen</translation> </message> <message> - <location line="+4"/> <source>Find &Next</source> <translation>&Weitersuchen</translation> </message> <message> - <location line="+4"/> <source>Find &Previous</source> <translation>&Vorheriges suchen</translation> </message> <message> - <location line="+5"/> <source>Preferences...</source> <translation>Einstellungen ...</translation> </message> <message> - <location line="+4"/> <source>Zoom &in</source> <translation>&Vergrößern</translation> </message> <message> - <location line="+6"/> <source>Zoom &out</source> <translation>Ver&kleinern</translation> </message> <message> - <location line="+6"/> <source>Normal &Size</source> <translation>Standard&größe</translation> </message> <message> - <location line="+4"/> <source>Ctrl+0</source> <translation>Ctrl+0</translation> </message> <message> - <location line="+5"/> <source>ALT+C</source> <translation>ALT+C</translation> </message> <message> - <location line="+2"/> <source>ALT+I</source> <translation>ALT+I</translation> </message> <message> - <location line="+4"/> <source>ALT+S</source> <translation>ALT+S</translation> </message> <message> - <location line="+3"/> <source>&Home</source> <translation>&Startseite</translation> </message> <message> - <location line="+4"/> <source>&Back</source> <translation>&Rückwärts</translation> </message> <message> - <location line="+5"/> <source>&Forward</source> <translation>&Vorwärts</translation> </message> <message> - <location line="+6"/> <source>Sync with Table of Contents</source> <translation>Seite mit Inhaltsangabe abgleichen</translation> </message> <message> - <location line="+2"/> <source>Sync</source> <translation>Synchronisieren</translation> </message> <message> - <location line="+5"/> <source>Next Page</source> <translation>Nächste Seite</translation> </message> <message> - <location line="+1"/> <source>Ctrl+Alt+Right</source> <translation>Ctrl+Alt+Right</translation> </message> <message> - <location line="+3"/> <source>Previous Page</source> <translation>Vorherige Seite</translation> </message> <message> - <location line="+1"/> <source>Ctrl+Alt+Left</source> <translation>Ctrl+Alt+Left</translation> </message> <message> - <location line="+596"/> <source>Could not register file '%1': %2</source> <translation>Die Datei '%1' konnte nicht registriert werden: %2</translation> </message> <message> - <location line="-589"/> <source>About...</source> <translation>Über ...</translation> </message> <message> - <location line="+21"/> <source>Navigation Toolbar</source> <translation>Navigationsleiste</translation> </message> <message> - <location line="+69"/> <source>Toolbars</source> <translation>Werkzeugleisten</translation> </message> <message> - <location line="+16"/> <source>Filter Toolbar</source> <translation>Filterleiste</translation> </message> <message> - <location line="+2"/> <source>Filtered by:</source> <translation>Filter:</translation> </message> <message> - <location line="+26"/> <source>Address Toolbar</source> <translation>Adressleiste</translation> </message> <message> - <location line="+4"/> <source>Address:</source> <translation>Adresse:</translation> </message> <message> - <location line="+112"/> <source>Could not find the associated content item.</source> <translation>Der zugehörige Inhaltseintrag konnte nicht gefunden werden.</translation> </message> <message> - <location line="+60"/> <source>About %1</source> <translation>Über %1</translation> </message> <message> - <location line="+175"/> <source>Updating search index</source> <translation>Suchindex wird aufgebaut</translation> </message> <message> - <location line="-669"/> <source>Looking for Qt Documentation...</source> <translation>Suche nach Qt-Dokumentation ...</translation> </message> <message> - <location line="+227"/> <source>&Window</source> <translation>&Fenster</translation> </message> <message> - <location line="+3"/> <source>Minimize</source> <translation>Minimieren</translation> </message> <message> - <location line="+1"/> <source>Ctrl+M</source> <translation>Ctrl+M</translation> </message> <message> - <location line="-2"/> <source>Zoom</source> <translation>Zoom</translation> </message> <message> - <location line="-169"/> <source>&File</source> <translation>&Datei</translation> </message> <message> - <location line="+32"/> <source>&Edit</source> <translation>&Bearbeiten</translation> </message> <message> - <location line="+27"/> <source>&View</source> <translation>&Ansicht</translation> </message> <message> - <location line="+30"/> <source>&Go</source> <translation>&Gehe zu</translation> </message> <message> - <location line="+2"/> <source>ALT+Home</source> <translation>ALT+Home</translation> </message> <message> - <location line="+30"/> <source>&Bookmarks</source> <translation>&Lesezeichen</translation> </message> <message> - <location line="+2"/> <source>&Help</source> <translation>&Hilfe</translation> </message> <message> - <location line="-38"/> <source>ALT+O</source> <translation>ALT+O</translation> </message> @@ -785,48 +780,38 @@ Grund: <context> <name>PreferencesDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+252"/> - <location line="+44"/> <source>Add Documentation</source> <translation>Dokumentation hinzufügen</translation> </message> <message> - <location line="-44"/> <source>Qt Compressed Help Files (*.qch)</source> <translation>Komprimierte Hilfedateien (*.qch)</translation> </message> <message> - <location line="+38"/> <source>The specified file is not a valid Qt Help File!</source> <translation>Die angegebene Datei ist keine Qt-Hilfedatei.</translation> </message> <message> - <location line="-8"/> <source>The namespace %1 is already registered!</source> <translation>Der Namespace %1 ist bereits registriert.</translation> </message> <message> - <location line="+32"/> <source>Remove Documentation</source> <translation>Dokumentation entfernen</translation> </message> <message> - <location line="+1"/> <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source> <translation>Einige der derzeit geöffneten Dokumente stammen aus der Dokumentation, die Sie gerade zu löschen versuchen. Sie werden beim Löschen geschlossen.</translation> </message> <message> - <location line="+2"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location line="+1"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location line="+83"/> <source>Use custom settings</source> <translation>Benutzerdefinierte Einstellungen verwenden</translation> </message> @@ -834,117 +819,94 @@ Grund: <context> <name>PreferencesDialogClass</name> <message> - <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui"/> <source>Preferences</source> <translation>Einstellungen</translation> </message> <message> - <location/> <source>Fonts</source> <translation>Schriftart</translation> </message> <message> - <location/> <source>Font settings:</source> <translation>Schriftart:</translation> </message> <message> - <location/> <source>Browser</source> <translation>Browser</translation> </message> <message> - <location/> <source>Application</source> <translation>Anwendung</translation> </message> <message> - <location/> <source>Filters</source> <translation>Filter</translation> </message> <message> - <location/> <source>Filter:</source> <translation>Filter:</translation> </message> <message> - <location/> <source>Attributes:</source> <translation>Attribute:</translation> </message> <message> - <location/> <source>1</source> <translation>1</translation> </message> <message> - <location/> <source>Add</source> <translation>Hinzufügen</translation> </message> <message> - <location/> <source>Remove</source> <translation>Entfernen</translation> </message> <message> - <location/> <source>Documentation</source> <translation>Dokumentation</translation> </message> <message> - <location/> <source>Registered Documentation:</source> <translation>Registrierte Dokumentation:</translation> </message> <message> - <location/> <source>Add...</source> <translation>Hinzufügen ...</translation> </message> <message> - <location/> <source>Options</source> <translation>Einstellungen</translation> </message> <message> - <location/> <source>Current Page</source> <translation>Aktuelle Seite</translation> </message> <message> - <location/> <source>Restore to default</source> <translation>Voreinstellung wiederherstellen</translation> </message> <message> - <location/> <source>Homepage</source> <translation>Startseite</translation> </message> <message> - <location/> <source>On help start:</source> <translation>Zu Beginn:</translation> </message> <message> - <location/> <source>Show my home page</source> <translation>Startseite zeigen</translation> </message> <message> - <location/> <source>Show a blank page</source> <translation>Leere Seite zeigen</translation> </message> <message> - <location/> <source>Show my tabs from last session</source> <translation>Reiter aus letzter Sitzung zeigen</translation> </message> <message> - <location/> <source>Blank Page</source> <translation>Leere Seite</translation> </message> @@ -952,12 +914,10 @@ Grund: <context> <name>RemoteControl</name> <message> - <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+165"/> <source>Debugging Remote Control</source> <translation>Debugging Remote Control</translation> </message> <message> - <location line="+1"/> <source>Received Command: %1 %2</source> <translation>Empfangenes Kommando: %1 : %2</translation> </message> @@ -965,22 +925,18 @@ Grund: <context> <name>SearchWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+210"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> <message> - <location line="+4"/> <source>Copy &Link Location</source> <translation>&Link-Adresse kopieren</translation> </message> <message> - <location line="+4"/> <source>Open Link in New Tab</source> <translation>Link in neuem Reiter öffnen</translation> </message> <message> - <location line="+8"/> <source>Select All</source> <translation>Alles markieren</translation> </message> @@ -988,27 +944,22 @@ Grund: <context> <name>TopicChooser</name> <message> - <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+53"/> <source>Choose a topic for <b>%1</b>:</source> <translation>Wählen Sie ein Thema für <b>%1</b>:</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/topicchooser.ui"/> <source>Choose Topic</source> <translation>Thema wählen</translation> </message> <message> - <location/> <source>&Topics</source> <translation>&Themen</translation> </message> <message> - <location/> <source>&Display</source> <translation>&Anzeigen</translation> </message> <message> - <location/> <source>&Close</source> <translation>&Schließen</translation> </message> diff --git a/translations/designer_de.ts b/translations/designer_de.ts index b508b7f..9ff5099 100644 --- a/translations/designer_de.ts +++ b/translations/designer_de.ts @@ -4,27 +4,22 @@ <context> <name>AbstractFindWidget</name> <message> - <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="+127"/> <source>&Previous</source> <translation>&Vorige</translation> </message> <message> - <location line="+8"/> <source>&Next</source> <translation>&Nächste</translation> </message> <message> - <location line="+24"/> <source>&Case sensitive</source> <translation>&Groß/Kleinschreibung</translation> </message> <message> - <location line="+8"/> <source>Whole &words</source> <translation>Nur ganze &Worte</translation> </message> <message> - <location line="+12"/> <source><img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped</source> <translation><img src=":/trolltech/shared/images/wrap.png">&nbsp;Die Suche hat das Ende erreicht</translation> </message> @@ -32,17 +27,14 @@ <context> <name>AddLinkDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui"/> <source>Insert Link</source> <translation>Link einfügen</translation> </message> <message> - <location/> <source>Title:</source> <translation>Titel:</translation> </message> <message> - <location/> <source>URL:</source> <translation>URL:</translation> </message> @@ -50,7 +42,6 @@ <context> <name>AppFontDialog</name> <message> - <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="+418"/> <source>Additional Fonts</source> <translation>Zusätzliche Schriftarten</translation> </message> @@ -58,37 +49,30 @@ <context> <name>AppFontManager</name> <message> - <location line="-267"/> <source>'%1' is not a file.</source> <translation>'%1' ist keine Datei.</translation> </message> <message> - <location line="+4"/> <source>The font file '%1' does not have read permissions.</source> <translation>Die Fontdatei '%1' hat keinen Lesezugriff.</translation> </message> <message> - <location line="+8"/> <source>The font file '%1' is already loaded.</source> <translation>Die Fontdatei ist bereits geladen.</translation> </message> <message> - <location line="+7"/> <source>The font file '%1' could not be loaded.</source> <translation>Die Fontdatei '%1' konnte nicht geladen werden.</translation> </message> <message> - <location line="+17"/> <source>'%1' is not a valid font id.</source> <translation>'%1' ist keine gültige Id einer Schriftart.</translation> </message> <message> - <location line="+11"/> <source>There is no loaded font matching the id '%1'.</source> <translation>Es ist keine Schriftart mit der Id '%1' geladen.</translation> </message> <message> - <location line="+15"/> <source>The font '%1' (%2) could not be unloaded.</source> <translation>Die Schriftart '%1' (%2) konnte nicht entladen werden.</translation> </message> @@ -96,52 +80,42 @@ <context> <name>AppFontWidget</name> <message> - <location line="+26"/> <source>Fonts</source> <translation>Schriftarten</translation> </message> <message> - <location line="+58"/> <source>Add font files</source> <translation>Schriftarten hinzufügen</translation> </message> <message> - <location line="+5"/> <source>Remove current font file</source> <translation>Schriftart entfernen</translation> </message> <message> - <location line="+4"/> <source>Remove all font files</source> <translation>Alle Schriftarten entfernen</translation> </message> <message> - <location line="+19"/> <source>Add Font Files</source> <translation>Schriftarten hinzufügen</translation> </message> <message> - <location line="+1"/> <source>Font files (*.ttf)</source> <translation>Schriftarten (*.ttf)</translation> </message> <message> - <location line="+13"/> <source>Error Adding Fonts</source> <translation>Fehler beim Hinzufügen einer Schriftart</translation> </message> <message> - <location line="+24"/> <source>Error Removing Fonts</source> <translation>Fehler beim Entfernen von Schriftarten</translation> </message> <message> - <location line="+22"/> <source>Remove Fonts</source> <translation>Schriftarten entfernen</translation> </message> <message> - <location line="+0"/> <source>Would you like to remove all fonts?</source> <translation>Möchten Sie alle Schriftarten entfernen?</translation> </message> @@ -149,12 +123,10 @@ <context> <name>AppearanceOptionsWidget</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location/> <source>User Interface Mode</source> <translation>Fenstermodus</translation> </message> @@ -162,17 +134,14 @@ <context> <name>AssistantClient</name> <message> - <location filename="../tools/designer/src/designer/assistantclient.cpp" line="+100"/> <source>Unable to send request: Assistant is not responding.</source> <translation>Fehler beim Senden einer Anforderung: Das Programm Assistant antwortet nicht.</translation> </message> <message> - <location line="+39"/> <source>The binary '%1' does not exist.</source> <translation>Die ausführbare Datei '%1' existiert nicht.</translation> </message> <message> - <location line="+9"/> <source>Unable to launch assistant (%1).</source> <translation>Das Programm Assistant kann nicht gestartet werden (%1).</translation> </message> @@ -180,92 +149,74 @@ <context> <name>BrushPropertyManager</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="+159"/> <source>Style</source> <translation>Stil</translation> </message> <message> - <location line="-107"/> <source>No brush</source> <translation>Kein Muster</translation> </message> <message> - <location line="+1"/> <source>Solid</source> <translation>Voll</translation> </message> <message> - <location line="+1"/> <source>Dense 1</source> <translation>Dichte 1</translation> </message> <message> - <location line="+1"/> <source>Dense 2</source> <translation>Dichte 2</translation> </message> <message> - <location line="+1"/> <source>Dense 3</source> <translation>Dichte 3</translation> </message> <message> - <location line="+1"/> <source>Dense 4</source> <translation>Dichte 4</translation> </message> <message> - <location line="+1"/> <source>Dense 5</source> <translation>Dichte 5</translation> </message> <message> - <location line="+1"/> <source>Dense 6</source> <translation>Dichte 6</translation> </message> <message> - <location line="+1"/> <source>Dense 7</source> <translation>Dichte 7</translation> </message> <message> - <location line="+1"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> - <location line="+1"/> <source>Vertical</source> <translation>Vertikal</translation> </message> <message> - <location line="+1"/> <source>Cross</source> <translation>Kreuzende Linien</translation> </message> <message> - <location line="+1"/> <source>Backward diagonal</source> <translation>Rückwärtslehnende Diagonalen</translation> </message> <message> - <location line="+1"/> <source>Forward diagonal</source> <translation>Vorwärtslehnende Diagonalen</translation> </message> <message> - <location line="+1"/> <source>Crossing diagonal</source> <translation>Kreuzende Diagonalen</translation> </message> <message> - <location line="+104"/> <source>Color</source> <translation>Farbe</translation> </message> <message> - <location line="+105"/> <source>[%1, %2]</source> <translation>[%1, %2]</translation> </message> @@ -273,360 +224,277 @@ <context> <name>Command</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="+208"/> - <location line="+258"/> <source>Change signal</source> <translation>Signal ändern</translation> </message> <message> - <location line="-256"/> - <location line="+268"/> <source>Change slot</source> <translation>Slot ändern</translation> </message> <message> - <location line="-220"/> <source>Change signal-slot connection</source> <translation>Signale-Slotverbindung ändern</translation> </message> <message> - <location line="+234"/> <source>Change sender</source> <translation>Sender ändern</translation> </message> <message> - <location line="+18"/> <source>Change receiver</source> <translation>Empfänger ändern</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+143"/> <source>Add connection</source> <translation>Verbindung hinzufügen</translation> </message> <message> - <location line="+54"/> <source>Adjust connection</source> <translation>Verbindung anpassen</translation> </message> <message> - <location line="+19"/> <source>Delete connections</source> <translation>Verbindungen löschen</translation> </message> <message> - <location line="+58"/> <source>Change source</source> <translation>Startpunkt ändern</translation> </message> <message> - <location line="+2"/> <source>Change target</source> <translation>Endpunkt ändern</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="+149"/> <source>Insert '%1'</source> <translation>'%1' einfügen</translation> </message> <message> - <location line="+167"/> <source>Raise '%1'</source> <translation>'%1' nach vorn</translation> </message> <message> - <location line="+33"/> <source>Lower '%1'</source> <translation>'%1' nach hinten</translation> </message> <message> - <location line="+113"/> <source>Delete '%1'</source> <translation> '%1' löschen</translation> </message> <message> - <location line="+119"/> <source>Reparent '%1'</source> <translation> '%1' einem anderen Widget zuordnen</translation> </message> <message> - <location line="+53"/> <source>Promote to custom widget</source> <translation>Platzhalter für benutzerdefinierte Klasse erzeugen</translation> </message> <message> - <location line="+42"/> <source>Demote from custom widget</source> <translation>Platzhalter für benutzerdefinierte Klasse entfernen</translation> </message> <message> - <location line="+79"/> <source>Lay out using grid</source> <translation>Objekte tabellarisch anordnen</translation> </message> <message> - <location line="+3"/> <source>Lay out vertically</source> <translation>Objekte senkrecht anordnen</translation> </message> <message> - <location line="+3"/> <source>Lay out horizontally</source> <translation>Objekte waagrecht anordnen</translation> </message> <message> - <location line="+41"/> <source>Break layout</source> <translation>Layout auflösen</translation> </message> <message> - <location line="+240"/> - <location line="+235"/> - <location line="+78"/> <source>Move Page</source> <translation>Seite verschieben</translation> </message> <message> - <location line="-279"/> - <location line="+123"/> - <location line="+188"/> - <location line="+666"/> <source>Delete Page</source> <translation>Seite löschen</translation> </message> <message> - <location line="-939"/> - <location line="+123"/> <source>Page</source> <translation>Seite</translation> </message> <message> - <location line="+860"/> <source>page</source> <translation>Seite</translation> </message> <message> - <location line="-978"/> - <location line="+123"/> - <location line="+186"/> - <location line="+667"/> <source>Insert Page</source> <translation>Seite einfügen</translation> </message> <message> - <location line="-647"/> <source>Change Tab order</source> <translation>Seite ändern</translation> </message> <message> - <location line="+28"/> <source>Create Menu Bar</source> <translation>Menü erzeugen</translation> </message> <message> - <location line="+44"/> <source>Delete Menu Bar</source> <translation>Menüleiste löschen</translation> </message> <message> - <location line="+47"/> <source>Create Status Bar</source> <translation>Statuszeile erzeugen</translation> </message> <message> - <location line="+42"/> <source>Delete Status Bar</source> <translation>Statuszeile löschen</translation> </message> <message> - <location line="+45"/> <source>Add Tool Bar</source> <translation>Werkzeugleiste hinzufügen</translation> </message> <message> - <location line="+59"/> <source>Add Dock Window</source> <translation>Dockfenster hinzufügen</translation> </message> <message> - <location line="+53"/> <source>Adjust Size of '%1'</source> <translation>Größe von '%1' anpassen</translation> </message> <message> - <location line="+57"/> <source>Change Form Layout Item Geometry</source> <translation>Ändern des Formularlayout-Elements</translation> </message> <message> - <location line="+95"/> <source>Change Layout Item Geometry</source> <translation>Geometrie des Layoutelements ändern</translation> </message> <message> - <location line="+576"/> <source>Change Table Contents</source> <translation>Tabelleninhalt ändern</translation> </message> <message> - <location line="+107"/> <source>Change Tree Contents</source> <translation>Bauminhalt ändern</translation> </message> <message> - <location line="+74"/> - <location line="+146"/> <source>Add action</source> <translation>Aktion hinzufügen</translation> </message> <message> - <location line="-120"/> - <location line="+126"/> <source>Remove action</source> <translation> Aktion löschen</translation> </message> <message> - <location line="+53"/> <source>Add menu</source> <translation>Menü hinzufügen</translation> </message> <message> - <location line="+6"/> <source>Remove menu</source> <translation>Menü löschen</translation> </message> <message> - <location line="+6"/> <source>Create submenu</source> <translation>Untermenü erzeugen</translation> </message> <message> - <location line="+31"/> <source>Delete Tool Bar</source> <translation>Werkzeugleiste löschen</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1194"/> <source>Set action text</source> <translation>Text der Aktion setzen</translation> </message> <message> - <location line="+3"/> <source>Insert action</source> <translation>Aktion einfügen</translation> </message> <message> - <location line="+89"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+915"/> <source>Move action</source> <translation>Aktion verschieben</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-432"/> <source>Change Title</source> <translation>Titel ändern</translation> </message> <message> - <location line="+2"/> <source>Insert Menu</source> <translation>Menü einfügen</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+202"/> <source>Change signals/slots</source> <translation>Signale/Slots ändern</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="-867"/> <source>Delete Subwindow</source> <translation>Subfenster löschen</translation> </message> <message> - <location line="+44"/> <source>Insert Subwindow</source> <translation>Subfenster einfügen</translation> </message> <message> - <location line="+2"/> <source>subwindow</source> <translation>subwindow</translation> </message> <message> - <location line="+1"/> <source>Subwindow</source> <translation>Subwindow</translation> </message> <message> - <location line="-1821"/> <source>Change Z-order of '%1'</source> <translation>Z-Reihenfolge von '%1' ändern</translation> </message> <message> - <location line="+625"/> <source>Simplify Grid Layout</source> <translation>Tabellarisches Layout vereinfachen</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+221"/> <source>Create button group</source> <translation>Buttons gruppieren</translation> </message> <message> - <location line="+27"/> <source>Break button group</source> <translation>Button-Gruppierung aufheben</translation> </message> <message> - <location line="+9"/> <source>Break button group '%1'</source> <translation>Gruppierung '%1' aufheben</translation> </message> <message> - <location line="+17"/> <source>Add buttons to group</source> <translation>Buttons zur Gruppierung hinzufügen</translation> </message> <message> - <location line="+22"/> <source>Remove buttons from group</source> <translation>Buttons aus Gruppierung entfernen</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+349"/> <source>Morph %1/'%2' into %3</source> <extracomment>MorphWidgetCommand description</extracomment> <translation>%1/'%2' in %3 umwandeln</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_command2.cpp" line="+154"/> <source>Change layout of '%1' from %2 to %3</source> <translation>Layout von '%1' von %2 in %3 umwandeln</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="-14"/> - <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+458"/> <source>Add '%1' to '%2'</source> <extracomment>Command description for adding buttons to a QButtonGroup</extracomment> <translation>'%1' zu '%2' hinzufügen</translation> </message> <message> - <location line="+29"/> <source>Remove '%1' from '%2'</source> <extracomment>Command description for removing buttons from a QButtonGroup</extracomment> <translation> '%1' aus '%2' entfernen</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/scriptcommand.cpp" line="+55"/> <source>Change script</source> <translation>Skript ändern</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="+1225"/> <source>Changed '%1' of '%2'</source> <translation>'%1' von '%2' geändert</translation> </message> <message numerus="yes"> - <location line="+3"/> <source>Changed '%1' of %n objects</source> <translatorcomment>Singular will never be shown</translatorcomment> <translation> @@ -635,12 +503,10 @@ </translation> </message> <message> - <location line="+84"/> <source>Reset '%1' of '%2'</source> <translation>'%1' von '%2' zurücksetzen</translation> </message> <message numerus="yes"> - <location line="+3"/> <source>Reset '%1' of %n objects</source> <translatorcomment>Singular will never be shown</translatorcomment> <translation> @@ -649,12 +515,10 @@ </translation> </message> <message> - <location line="+89"/> <source>Add dynamic property '%1' to '%2'</source> <translation>Dynamische Eigenschaft '%1' zu '%2' hinzufügen</translation> </message> <message numerus="yes"> - <location line="+3"/> <source>Add dynamic property '%1' to %n objects</source> <translatorcomment>Singular will never be shown</translatorcomment> <translation> @@ -663,12 +527,10 @@ </translation> </message> <message> - <location line="+86"/> <source>Remove dynamic property '%1' from '%2'</source> <translation>Dynamische Eigenschaft '%1' von '%2' entfernen</translation> </message> <message numerus="yes"> - <location line="+3"/> <source>Remove dynamic property '%1' from %n objects</source> <translation> <numerusform>Dynamische Eigenschaft '%1' des Objektes entfernen</numerusform> @@ -679,22 +541,18 @@ <context> <name>ConnectDialog</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui"/> <source>Configure Connection</source> <translation>Verbindung bearbeiten</translation> </message> <message> - <location/> <source>GroupBox</source> <translation>GroupBox</translation> </message> <message> - <location/> <source>Edit...</source> <translation>Ändern...</translation> </message> <message> - <location/> <source>Show signals and slots inherited from QWidget</source> <translation>Signale und Slots von QWidget anzeigen</translation> </message> @@ -702,17 +560,14 @@ <context> <name>ConnectionDelegate</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+644"/> <source><object></source> <translation><Objekt></translation> </message> <message> - <location line="+18"/> <source><signal></source> <translation><Signal></translation> </message> <message> - <location line="+0"/> <source><slot></source> <translation><Slot></translation> </message> @@ -720,19 +575,16 @@ <context> <name>DPI_Chooser</name> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+69"/> <source>Standard (96 x 96)</source> <extracomment>Embedded device standard screen resolution</extracomment> <translation>Standardauflösung (96 x 96)</translation> </message> <message> - <location line="+2"/> <source>Greenphone (179 x 185)</source> <extracomment>Embedded device screen resolution</extracomment> <translation>Greenphone (179 x 185)</translation> </message> <message> - <location line="+2"/> <source>High (192 x 192)</source> <extracomment>Embedded device high definition screen resolution</extracomment> <translation>Hohe Auflösung (192 x 192)</translation> @@ -741,89 +593,72 @@ <context> <name>Designer</name> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+446"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="+682"/> <source>Unable to launch %1.</source> <translation>%1 konnte nicht gestartet werden.</translation> </message> <message> - <location line="+4"/> <source>%1 timed out.</source> <translation>Zeitüberschreitung bei der Ausführung von %1.</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+10"/> <source>This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form.</source> <translation>Das Formular enthält freistehende Layoutelemente, die <b>nicht</b> gespeichert wurden.</translation> </message> <message> - <location line="+2"/> <source>Perhaps you forgot to create a layout?</source> <translation>Haben Sie ein Layout eingefügt?</translation> </message> <message> - <location line="+205"/> <source>This file cannot be read because it was created using %1.</source> <translation>Die Datei kann nicht gelesen werden, da sie mit %1 erzeugt wurde.</translation> </message> <message> - <location line="+14"/> <source>This file was created using Designer from Qt-%1 and cannot be read.</source> <translation>Die Datei kann nicht gelesen werden, da sie mit dem Designer der Version %1 erzeugt wurde.</translation> </message> <message> - <location line="+82"/> <source>This file cannot be read because the extra info extension failed to load.</source> <translation>Die Datei kann nicht gelesen werden (Fehler beim Laden der Daten der ExtraInfoExtension).</translation> </message> <message> - <location line="-52"/> <source>The converted file could not be read.</source> <translation>Die konvertierte Datei konnte nicht gelesen werden.</translation> </message> <message> - <location line="-76"/> <source>Invalid UI file: The root element <ui> is missing.</source> <translation>Fehler beim Lesen der ui-Datei: Das Wurzelelement <ui> fehlt.</translation> </message> <message> - <location line="+6"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> <translation>Fehler beim Lesen der ui-Datei bei Zeile %1, Spalte %2: %3</translation> </message> <message> - <location line="+74"/> <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source> <translation>Die Datei wurde mit dem Designer der Version %1 erzeugt und wird zu einem neuen Formular konvertiert.</translation> </message> <message> - <location line="+3"/> <source>The old form has not been touched, but you will have to save the form under a new name.</source> <translation>Sie bleibt unverändert.Das neue Formular muss unter einem neuen Namen abgespeichert werden. </translation> </message> <message> - <location line="+11"/> <source>This file was created using Designer from Qt-%1 and could not be read: %2</source> <translation>Das Lesen der von Designer %1 erzeugten Datei schlug fehl: %2</translation> </message> <message> - <location line="+3"/> <source>Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format.</source> <translation>Bitte wandeln Sie sie mit dem Befehl <b>uic3&nbsp;-convert</b> zum Format von Qt 4.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="+339"/> <source>Custom Widgets</source> <translation>Benutzerdefinierte Widgets</translation> </message> <message> - <location line="+12"/> <source>Promoted Widgets</source> <translation>Platzhalter für benutzerdefinierte Klassen</translation> </message> @@ -831,12 +666,10 @@ <context> <name>DesignerMetaEnum</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="-513"/> <source>%1 is not a valid enumeration value of '%2'.</source> <translation>%1 ist kein gültiger Wert der Aufzählung '%2'.</translation> </message> <message> - <location line="+5"/> <source>'%1' could not be converted to an enumeration value of type '%2'.</source> <translation>'%1' konnte nicht in einen Wert der Aufzählung '%2' konvertiert werden.</translation> </message> @@ -844,7 +677,6 @@ <context> <name>DesignerMetaFlags</name> <message> - <location line="+78"/> <source>'%1' could not be converted to a flag value of type '%2'.</source> <translation>'%1' konnte nicht in einen Wert des Maskentyps '%2' konvertiert werden.</translation> </message> @@ -852,13 +684,11 @@ <context> <name>DeviceProfile</name> <message> - <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="+397"/> <source>'%1' is not a number.</source> <extracomment>Reading a number for an embedded device profile</extracomment> <translation>'%1' ist keine gültige Zahl.</translation> </message> <message> - <location line="+23"/> <source>An invalid tag <%1> was encountered.</source> <translation>Ein ungültiges Element '%1' wurde festgestellt.</translation> </message> @@ -866,27 +696,22 @@ <context> <name>DeviceProfileDialog</name> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui"/> <source>&Family</source> <translation>Schrift&familie</translation> </message> <message> - <location/> <source>&Point Size</source> <translation>Punktgröße</translation> </message> <message> - <location/> <source>Style</source> <translation>Stil</translation> </message> <message> - <location/> <source>Device DPI</source> <translation>Bildschirmauflösung</translation> </message> <message> - <location/> <source>Name</source> <translation>Name</translation> </message> @@ -894,57 +719,46 @@ <context> <name>DeviceSkin</name> <message> - <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="+79"/> <source>The image file '%1' could not be loaded.</source> <translation>Die Pixmap-Datei '%1' konnte nicht geladen werden.</translation> </message> <message> - <location line="+64"/> <source>The skin directory '%1' does not contain a configuration file.</source> <translation>Das Skin-Verzeichnis '%1' enthält keine Konfigurationsdatei.</translation> </message> <message> - <location line="+5"/> <source>The skin configuration file '%1' could not be opened.</source> <translation>Die Skin-Konfigurationsdatei '%1' konnte nicht geöffnet werden.</translation> </message> <message> - <location line="+76"/> <source>Syntax error: %1</source> <translation>Syntaxfehler: %1</translation> </message> <message> - <location line="+54"/> <source>The skin cursor image file '%1' does not exist.</source> <translation>Die Skin-Bilddatei '%1' für den Cursor existiert nicht.</translation> </message> <message> - <location line="+25"/> <source>Syntax error in area definition: %1</source> <translation>Die Bereichsdefinition enthält einen Syntaxfehler: %1</translation> </message> <message> - <location line="+38"/> <source>Mismatch in number of areas, expected %1, got %2.</source> <translation>Die angegebene Anzahl der Bereiche (%1) stimmt nicht; es wurden %2 Bereiche gefunden.</translation> </message> <message> - <location line="-187"/> <source>The skin configuration file '%1' could not be read: %2</source> <translation>Die Skin-Konfigurationsdatei '%1' konnte nicht gelesen werden: %2</translation> </message> <message> - <location line="+91"/> <source>The skin "up" image file '%1' does not exist.</source> <translation>Die Skin-Konfigurationsdatei '%1' (oben) existiert nicht.</translation> </message> <message> - <location line="+10"/> <source>The skin "down" image file '%1' does not exist.</source> <translation>Die Skin-Konfigurationsdatei '%1' (unten) existiert nicht.</translation> </message> <message> - <location line="+11"/> <source>The skin "closed" image file '%1' does not exist.</source> <translation>Die Skin-Konfigurationsdatei '%1' (geschlossen) existiert nicht.</translation> </message> @@ -952,7 +766,6 @@ <context> <name>EmbeddedOptionsControl</name> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="+307"/> <source><html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Resolution</b></td><td>%4 x %5</td></tr></table></html></source> <extracomment>Format embedded device profile description</extracomment> <translation><html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Stil</b></td><td>%3</td></tr><tr><td><b>Auflösung</b></td><td>%4 x %5</td></tr></table></html></translation> @@ -961,13 +774,11 @@ <context> <name>EmbeddedOptionsPage</name> <message> - <location line="+103"/> <source>Embedded Design</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Embedded-Entwurf</translation> </message> <message> - <location line="+10"/> <source>Device Profiles</source> <extracomment>EmbeddedOptionsControl group box"</extracomment> <translation>Profile</translation> @@ -976,27 +787,22 @@ <context> <name>FontPanel</name> <message> - <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> <source>Font</source> <translation>Schriftart</translation> </message> <message> - <location line="+11"/> <source>&Writing system</source> <translation>Schrifts&ystem</translation> </message> <message> - <location line="+3"/> <source>&Family</source> <translation>Schrift&familie</translation> </message> <message> - <location line="+4"/> <source>&Style</source> <translation>&Stil</translation> </message> <message> - <location line="+4"/> <source>&Point size</source> <translation>&Punktgröße</translation> </message> @@ -1004,22 +810,18 @@ <context> <name>FontPropertyManager</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="+62"/> <source>PreferDefault</source> <translation>Voreinstellung bevorzugt</translation> </message> <message> - <location line="+1"/> <source>NoAntialias</source> <translation>Keine Kantenglättung</translation> </message> <message> - <location line="+1"/> <source>PreferAntialias</source> <translation>Kantenglättung bevorzugen</translation> </message> <message> - <location line="+61"/> <source>Antialiasing</source> <translation>Kantenglättung</translation> </message> @@ -1027,43 +829,44 @@ <context> <name>FormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+375"/> <source>Invalid stretch value for '%1': '%2'</source> - <extracomment>Parsing layout stretch values</extracomment> + <extracomment>Parsing layout stretch values +---------- +Parsing layout stretch values +---------- +Parsing layout stretch values</extracomment> <translation>Ungültiger Stretch-Wert für '%1': '%2'</translation> </message> <message> - <location line="+62"/> <source>Invalid minimum size for '%1': '%2'</source> - <extracomment>Parsing grid layout minimum size values</extracomment> + <extracomment>Parsing grid layout minimum size values +---------- +Parsing grid layout minimum size values +---------- +Parsing grid layout minimum size values</extracomment> <translation></translation> </message> </context> <context> <name>FormEditorOptionsPage</name> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="+91"/> <source>%1 %</source> <translation>%1 %</translation> </message> <message> - <location line="+4"/> <source>Preview Zoom</source> <translation>Vergrößerungsfaktor für Vorschau</translation> </message> <message> - <location line="+2"/> <source>Default Zoom</source> <translation>Vorgabe für Vergrößerungsfaktor</translation> </message> <message> - <location line="+29"/> <source>Forms</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Formulare</translation> </message> <message> - <location line="+13"/> <source>Default Grid</source> <translation>Raster für neue Formulare</translation> </message> @@ -1071,37 +874,30 @@ <context> <name>FormLayoutRowDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui"/> <source>Add Form Layout Row</source> <translation>Formularlayoutzeile hinzufügen</translation> </message> <message> - <location/> <source>&Label text:</source> <translation>Be&schriftung:</translation> </message> <message> - <location/> <source>Field &type:</source> <translation>&Datentyp:</translation> </message> <message> - <location/> <source>&Field name:</source> <translation>&Feldname:</translation> </message> <message> - <location/> <source>&Buddy:</source> <translation>&Buddy:</translation> </message> <message> - <location/> <source>&Row:</source> <translation>&Zeile:</translation> </message> <message> - <location/> <source>Label &name:</source> <translation>&Label-Name:</translation> </message> @@ -1109,12 +905,10 @@ <context> <name>FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="+1754"/> <source>Unexpected element <%1></source> <translation>Ungültiges Element <%1></translation> </message> <message> - <location line="+7"/> <source>Error while pasting clipboard contents at line %1, column %2: %3</source> <translation>Fehler beim Einfügen der Zwischenablage, Zeile %1, Spalte %2: %3</translation> </message> @@ -1122,62 +916,50 @@ <context> <name>FormWindowSettings</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui"/> <source>Form Settings</source> <translation>Formulareinstellungen</translation> </message> <message> - <location/> <source>Layout &Default</source> <translation>&Layout-Standardwerte</translation> </message> <message> - <location/> <source>&Spacing:</source> <translation>A&bstand:</translation> </message> <message> - <location/> <source>&Margin:</source> <translation>&Rand:</translation> </message> <message> - <location/> <source>&Layout Function</source> <translation>Layout&funktion</translation> </message> <message> - <location/> <source>Ma&rgin:</source> <translation>Ra&nd:</translation> </message> <message> - <location/> <source>Spa&cing:</source> <translation>Abstan&d:</translation> </message> <message> - <location/> <source>Embedded Design</source> <translation>Embedded-Entwurf</translation> </message> <message> - <location/> <source>&Author</source> <translation>&Autor</translation> </message> <message> - <location/> <source>&Include Hints</source> <translation>&Include-Dateien</translation> </message> <message> - <location/> <source>&Pixmap Function</source> <translation>&Pixmapfunktion</translation> </message> <message> - <location/> <source>Grid</source> <translation>Raster</translation> </message> @@ -1185,7 +967,6 @@ <context> <name>IconSelector</name> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="+352"/> <source>All Pixmaps (</source> <translation>Alle Pixmap-Dateien (</translation> </message> @@ -1193,7 +974,6 @@ <context> <name>ItemPropertyBrowser</name> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+66"/> <source>XX Icon Selected off</source> <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment> <translation>Ausgewähltes Icon, aus</translation> @@ -1202,33 +982,27 @@ <context> <name>MainWindowBase</name> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+121"/> <source>Main</source> <extracomment>Not currently used (main tool bar)</extracomment> <translation>Haupt-Werkzeugleiste</translation> </message> <message> - <location line="+6"/> <source>File</source> <translation>Datei</translation> </message> <message> - <location line="+1"/> <source>Edit</source> <translation>Bearbeiten</translation> </message> <message> - <location line="+1"/> <source>Tools</source> <translation>Werkzeuge</translation> </message> <message> - <location line="+1"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location line="+7"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> @@ -1236,52 +1010,42 @@ <context> <name>NewForm</name> <message> - <location filename="../tools/designer/src/designer/newform.cpp" line="+79"/> <source>C&reate</source> <translation>&Neu von Vorlage</translation> </message> <message> - <location line="+1"/> <source>Recent</source> <translation>Zuletzt bearbeitet</translation> </message> <message> - <location line="+32"/> <source>&Close</source> <translation>&Schließen</translation> </message> <message> - <location line="+3"/> <source>&Open...</source> <translation>&Öffnen...</translation> </message> <message> - <location line="+4"/> <source>&Recent Forms</source> <translation>&Zuletzt bearbeitete Formulare</translation> </message> <message> - <location line="+64"/> <source>Read error</source> <translation>Lesefehler</translation> </message> <message> - <location line="-100"/> <source>New Form</source> <translation>Neues Formular</translation> </message> <message> - <location line="-5"/> <source>Show this Dialog on Startup</source> <translation>Diesen Dialog zu Beginn anzeigen</translation> </message> <message> - <location line="+128"/> <source>A temporary form file could not be created in %1.</source> <translation>In dem Verzeichnis %1 konnte keine temporäre Formulardatei angelegt werden.</translation> </message> <message> - <location line="+6"/> <source>The temporary form file %1 could not be written.</source> <translation>Die temporäre Formulardatei %1 konnte nicht geschrieben werden.</translation> </message> @@ -1289,22 +1053,18 @@ <context> <name>ObjectInspectorModel</name> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="+360"/> <source>Object</source> <translation>Objekt</translation> </message> <message> - <location line="+1"/> <source>Class</source> <translation>Klasse</translation> </message> <message> - <location line="+35"/> <source>separator</source> <translation>Trenner</translation> </message> <message> - <location line="+98"/> <source><noname></source> <translation><unbenannt></translation> </message> @@ -1312,12 +1072,10 @@ <context> <name>ObjectNameDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+158"/> <source>Change Object Name</source> <translation>Objektnamen bearbeiten</translation> </message> <message> - <location line="+4"/> <source>Object Name</source> <translation>Objektname</translation> </message> @@ -1325,12 +1083,10 @@ <context> <name>PluginDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.ui"/> <source>Plugin Information</source> <translation>Plugins</translation> </message> <message> - <location/> <source>1</source> <translation>1</translation> </message> @@ -1338,7 +1094,6 @@ <context> <name>PreferencesDialog</name> <message> - <location filename="../tools/designer/src/designer/preferencesdialog.ui"/> <source>Preferences</source> <translation>Einstellungen</translation> </message> @@ -1346,32 +1101,26 @@ <context> <name>PreviewConfigurationWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location/> <source>Print/Preview Configuration</source> <translation>Druck/Vorschau</translation> </message> <message> - <location/> <source>Style</source> <translation>Stil</translation> </message> <message> - <location/> <source>Style sheet</source> <translation>Style sheet</translation> </message> <message> - <location/> <source>...</source> <translation>...</translation> </message> <message> - <location/> <source>Device skin</source> <translation>Geräte-Skin</translation> </message> @@ -1379,7 +1128,6 @@ <context> <name>PromotionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+112"/> <source>Not used</source> <extracomment>Usage of promoted widgets</extracomment> <translation>Nicht verwendet</translation> @@ -1388,8 +1136,6 @@ <context> <name>Q3WizardContainer</name> <message> - <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="+172"/> - <location line="+5"/> <source>Page</source> <translation>Seite</translation> </message> @@ -1397,58 +1143,47 @@ <context> <name>QAbstractFormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="+206"/> <source>Unexpected element <%1></source> <translation>Ungültiges Element <%1></translation> </message> <message> - <location line="+5"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> <translation>Fehler beim Lesen der ui-Datei bei Zeile %1, Spalte %2: %3</translation> </message> <message> - <location line="+6"/> <source>Invalid UI file: The root element <ui> is missing.</source> <translation>Fehler beim Lesen der ui-Datei: Das Wurzelelement <ui> fehlt.</translation> </message> <message> - <location line="+104"/> <source>The creation of a widget of the class '%1' failed.</source> <translation>Es konnte kein Widget der Klasse '%1' erzeugt werden.</translation> </message> <message> - <location line="+296"/> <source>Attempt to add child that is not of class QWizardPage to QWizard.</source> <translation>Es wurde versucht, einem Objekt der Klasse QWizard eine Seite hinzuzufügen, die nicht vom Typ QWizardPage ist.</translation> </message> <message> - <location line="+86"/> <source>Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. This indicates an inconsistency in the ui-file.</source> <translation>Es wurde versucht, ein Layout auf das Widget '%1' (%2) zu setzen, welches bereits ein Layout vom Typ %3 hat. Das deutet auf eine Inkonsistenz in der ui-Datei hin.</translation> </message> <message> - <location line="+144"/> <source>Empty widget item in %1 '%2'.</source> <translation>Leeres Widget-Item in %1 '%2'.</translation> </message> <message> - <location line="+680"/> <source>Flags property are not supported yet.</source> <translation>Eigenschaften des Typs "Flag" werden nicht unterstützt.</translation> </message> <message> - <location line="+81"/> <source>While applying tab stops: The widget '%1' could not be found.</source> <translation>Fehler beim Setzen der Tabulatorreihenfolge: Es konnte kein Widget mit dem Namen '%1' gefunden werden.</translation> </message> <message> - <location line="+908"/> <source>Invalid QButtonGroup reference '%1' referenced by '%2'.</source> <translation>Ungültige Referenz der Buttongruppe '%1', referenziert von '%2'.</translation> </message> <message> - <location line="+511"/> <source>This version of the uitools library is linked without script support.</source> <translation>Dies Version der uitools-Bibliothek unterstützt keine Skripte.</translation> </message> @@ -1456,12 +1191,10 @@ This indicates an inconsistency in the ui-file.</source> <context> <name>QAxWidgetPlugin</name> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="+75"/> <source>ActiveX control</source> <translation>ActiveX-Steuerelement</translation> </message> <message> - <location line="+5"/> <source>ActiveX control widget</source> <translation>ActiveX-Widget</translation> </message> @@ -1469,22 +1202,18 @@ This indicates an inconsistency in the ui-file.</source> <context> <name>QAxWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="+119"/> <source>Set Control</source> <translation>Steuerelement setzen</translation> </message> <message> - <location line="+1"/> <source>Reset Control</source> <translation>Steuerelement zurücksetzen</translation> </message> <message> - <location line="+41"/> <source>Licensed Control</source> <translation>Lizensiertes Steuerelement</translation> </message> <message> - <location line="+1"/> <source>The control requires a design-time license</source> <translation>Das Steuerelement erfordert eine Lizenz zur Entwurfszeit</translation> </message> @@ -1492,67 +1221,54 @@ This indicates an inconsistency in the ui-file.</source> <context> <name>QCoreApplication</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="+83"/> <source>%1 is not a promoted class.</source> <translation>%1 ist kein Platzhalter für eine benutzerdefinierte Klasse.</translation> </message> <message> - <location line="+65"/> <source>The base class %1 is invalid.</source> <translation>%1 ist keine gültige Basisklasse.</translation> </message> <message> - <location line="+7"/> <source>The class %1 already exists.</source> <translation>Es existiert bereits eine Klasse namens %1.</translation> </message> <message> - <location line="+9"/> <source>Promoted Widgets</source> <translation>Platzhalter für benutzerdefinierte Klassen</translation> </message> <message> - <location line="+126"/> <source>The class %1 cannot be removed</source> <translation>Die Klasse %1 kann nicht gelöscht werden</translation> </message> <message> - <location line="+9"/> <source>The class %1 cannot be removed because it is still referenced.</source> <translation>Die Klasse %1 kann nicht gelöscht werden, da sie gegenwärtig verwendet wird.</translation> </message> <message> - <location line="+10"/> <source>The class %1 cannot be renamed</source> <translation>Die Klasse %1 kann nicht umbenannt werden</translation> </message> <message> - <location line="+7"/> <source>The class %1 cannot be renamed to an empty name.</source> <translation>Der Klassennamen darf nicht leer sein (%1).</translation> </message> <message> - <location line="+5"/> <source>There is already a class named %1.</source> <translation>Es existiert bereits eine Klasse namens %1.</translation> </message> <message> - <location line="+29"/> <source>Cannot set an empty include file.</source> <translation>Der Name der Include-Datei darf nicht leer sein.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="+88"/> <source>Exception at line %1: %2</source> <translation>Ausnahmefehler bei Zeile %1: %2</translation> </message> <message> - <location line="+36"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location line="+50"/> <source>An error occurred while running the script for %1: %2 Script: %3</source> <translation>Bei der Ausführung des Skripts für %1 trat ein Fehler auf: %2Skript: %3</translation> @@ -1561,17 +1277,14 @@ Script: %3</source> <context> <name>QDesigner</name> <message> - <location filename="../tools/designer/src/designer/qdesigner.cpp" line="+141"/> <source>%1 - warning</source> <translation>%1 - Warnung</translation> </message> <message> - <location line="+96"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> - <location line="+1"/> <source>This application cannot be used for the Console edition of Qt</source> <translation>Diese Anwendung kann in der Qt-Konsolen-Edition nicht benutzt werden</translation> </message> @@ -1579,207 +1292,162 @@ Script: %3</source> <context> <name>QDesignerActions</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+180"/> <source>Edit Widgets</source> <translation>Widgets bearbeiten</translation> </message> <message> - <location line="+10"/> <source>&Quit</source> <translation>&Beenden</translation> </message> <message> - <location line="+3"/> <source>&Minimize</source> <translation>&Minimieren</translation> </message> <message> - <location line="+2"/> <source>Bring All to Front</source> <translation>Alle Formulare anzeigen</translation> </message> <message> - <location line="+2"/> <source>Preferences...</source> <translation>Einstellungen...</translation> </message> <message> - <location line="+321"/> <source>Clear &Menu</source> <translation>Menü &löschen</translation> </message> <message> - <location line="-246"/> <source>CTRL+SHIFT+S</source> <translation>CTRL+SHIFT+S</translation> </message> <message> - <location line="+126"/> <source>CTRL+R</source> <translation>CTRL+R</translation> </message> <message> - <location line="+18"/> <source>CTRL+M</source> <translation>CTRL+M</translation> </message> <message> - <location line="+31"/> <source>Qt Designer &Help</source> <translation>&Hilfe zum Qt Designer</translation> </message> <message> - <location line="+7"/> <source>Current Widget Help</source> <translation>Hilfe zum ausgewählten Widget</translation> </message> <message> - <location line="+7"/> <source>What's New in Qt Designer?</source> <translation>Was gibt es Neues beim Qt Designer?</translation> </message> <message> - <location line="+7"/> <source>About Plugins</source> <translation>Plugins</translation> </message> <message> - <location line="+6"/> - <location line="+601"/> <source>About Qt Designer</source> <translation>Über Qt Designer</translation> </message> <message> - <location line="-595"/> <source>About Qt</source> <translation>Über Qt</translation> </message> <message> - <location line="+121"/> - <location line="+197"/> <source>Open Form</source> <translation>Formular öffnen</translation> </message> <message> - <location line="-196"/> - <location line="+37"/> - <location line="+160"/> <source>Designer UI files (*.%1);;All Files (*)</source> <translation>Designer-UI-Dateien (*.%1);;Alle Dateien (*)</translation> </message> <message> - <location line="-643"/> <source>%1 already exists. Do you want to replace it?</source> <translation>Die Datei %1 existiert bereits. Möchten Sie sie überschreiben?</translation> </message> <message> - <location line="-26"/> <source>Saved %1.</source> <translation>Das Formular %1 wurde gespeichert...</translation> </message> <message> - <location line="+394"/> <source>&Recent Forms</source> <translation>&Zuletzt bearbeitete Formulare</translation> </message> <message> - <location line="+202"/> <source>Designer</source> <translation>Designer</translation> </message> <message> - <location line="+0"/> <source>Feature not implemented yet!</source> <translation>Diese Funktionalität ist noch nicht implementiert.</translation> </message> <message> - <location line="+59"/> <source>Read error</source> <translation>Lesefehler</translation> </message> <message> - <location line="+1"/> <source>%1 Do you want to update the file location or generate a new form?</source> <translation>%1 Möchten Sie einen anderen Namen eingeben oder ein neues Formular erzeugen?</translation> </message> <message> - <location line="+3"/> <source>&Update</source> <translation>&Anderer Name</translation> </message> <message> - <location line="+1"/> <source>&New Form</source> <translation>&Neues Formular</translation> </message> <message> - <location line="+77"/> - <location line="+40"/> <source>Save Form?</source> <translation>Formular speichern?</translation> </message> <message> - <location line="-39"/> <source>Could not open file</source> <translation>Die Datei konnte nicht geöffnet werden</translation> </message> <message> - <location line="+282"/> - <location line="+23"/> <source>The backup file %1 could not be written.</source> <translation>Hintergrundsicherung: Die Datei %1 konnte nicht geschrieben werden.</translation> </message> <message> - <location line="+107"/> <source>The backup directory %1 could not be created.</source> <translation>Hintergrundsicherung: Das Verzeichnis %1 konnte nicht angelegt werden.</translation> </message> <message> - <location line="+6"/> <source>The temporary backup directory %1 could not be created.</source> <translation>Hintergrundsicherung: Das temporäre Verzeichnis %1 konnte nicht angelegt werden.</translation> </message> <message> - <location line="+94"/> <source>Please close all forms to enable the loading of additional fonts.</source> <translation>Bitte schließen Sie alle Formulare, um zusätzliche Schriftarten zu laden.</translation> </message> <message> - <location line="-502"/> <source>Select New File</source> <translation>Andere Datei</translation> </message> <message> - <location line="+30"/> <source>Could not write file</source> <translation>Die Datei konnte nicht geschrieben werden</translation> </message> <message> - <location line="+201"/> <source>&Close Preview</source> <translation>Vorschau &schließen</translation> </message> <message> - <location line="-921"/> <source>Save &Image...</source> <translation>&Vorschaubild speichern...</translation> </message> <message> - <location line="+1"/> <source>&Print...</source> <translation>&Drucken...</translation> </message> <message> - <location line="+9"/> <source>Additional Fonts...</source> <translation>&Zusätzliche Schriftarten...</translation> </message> <message> - <location line="+674"/> <source>The file %1 could not be opened. Reason: %2 Would you like to retry or select a different file?</source> @@ -1788,7 +1456,6 @@ Would you like to retry or select a different file?</source> Möchten Sie es noch einmal versuchen oder eine andere Datei auswählen?</translation> </message> <message> - <location line="+39"/> <source>It was not possible to write the entire file %1 to disk. Reason:%2 Would you like to retry?</source> @@ -1797,96 +1464,74 @@ Would you like to retry?</source> Möchten Sie es noch einmal versuchen?</translation> </message> <message> - <location line="+429"/> <source>Image files (*.%1)</source> <translation>Bilddateien (*.%1)</translation> </message> <message> - <location line="+9"/> - <location line="+17"/> <source>Save Image</source> <translation>Bild speichern</translation> </message> <message> - <location line="+1"/> <source>The file %1 could not be written.</source> <translation>Die Datei %1 konnte nicht geschrieben werden.</translation> </message> <message> - <location line="-1186"/> <source>&New...</source> <translation>&Neu...</translation> </message> <message> - <location line="+1"/> <source>&Open...</source> <translation>&Öffnen...</translation> </message> <message> - <location line="+1"/> <source>&Save</source> <translation>&Speichern</translation> </message> <message> - <location line="+1"/> <source>Save &As...</source> <translation>Speichern &unter...</translation> </message> <message> - <location line="+1"/> <source>Save A&ll</source> <translation>&Alles speichern</translation> </message> <message> - <location line="+1"/> <source>Save As &Template...</source> <translation>Als Vor&lage abspeichern...</translation> </message> <message> - <location line="+1"/> - <location line="+924"/> <source>&Close</source> <translation>&Schließen</translation> </message> <message> - <location line="-919"/> <source>View &Code...</source> <translation>&Code anzeigen...</translation> </message> <message> - <location line="+447"/> - <location line="+248"/> <source>Save Form As</source> <translation>Formular unter einem anderen Namen speichern</translation> </message> <message> - <location line="+429"/> <source>Preview failed</source> <translation>Es konnte keine Vorschau erzeugt werden</translation> </message> <message> - <location line="-575"/> <source>Code generation failed</source> <translation>Es konnte kein Code generiert werden</translation> </message> <message> - <location line="+328"/> - <location line="+34"/> <source>Assistant</source> <translation>Assistant</translation> </message> <message> - <location line="+259"/> <source>Saved image %1.</source> <translation>Das Vorschaubild wurde unter %1 gespeichert.</translation> </message> <message> - <location line="+70"/> <source>Printed %1.</source> <translation>%1 wurde gedruckt.</translation> </message> <message> - <location line="-1162"/> <source>ALT+CTRL+S</source> <translation>ALT+CTRL+S</translation> </message> @@ -1894,7 +1539,6 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerAppearanceOptionsPage</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="+138"/> <source>Appearance</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Ansicht</translation> @@ -1903,17 +1547,14 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerAppearanceOptionsWidget</name> <message> - <location line="-53"/> <source>Docked Window</source> <translation>Dockfenster-Modus</translation> </message> <message> - <location line="+1"/> <source>Multiple Top-Level Windows</source> <translation>Multifenster-Modus</translation> </message> <message> - <location line="+5"/> <source>Toolwindow Font</source> <translation>Font für Dockfenster</translation> </message> @@ -1921,22 +1562,18 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerAxWidget</name> <message> - <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="-71"/> <source>Reset control</source> <translation>Steuerelement zurücksetzen</translation> </message> <message> - <location line="+2"/> <source>Set control</source> <translation>Steuerelement setzen</translation> </message> <message> - <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="+179"/> <source>Control loaded</source> <translation>Steuerelement geladen</translation> </message> <message> - <location line="+40"/> <source>A COM exception occurred when executing a meta call of type %1, index %2 of "%3".</source> <translation>Beim Methodenaufruf des Typs %1, index %2 von "%3" trat eine COM-Ausnahme auf.</translation> </message> @@ -1944,17 +1581,14 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerFormBuilder</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="+89"/> <source>Script errors occurred:</source> <translation>Es sind Skriptfehler aufgetreten:</translation> </message> <message> - <location line="+307"/> <source>The preview failed to build.</source> <translation>Es konnte keine Vorschau erzeugt werden.</translation> </message> <message> - <location line="+65"/> <source>Designer</source> <translation>Designer</translation> </message> @@ -1962,22 +1596,18 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerFormWindow</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="+217"/> <source>%1 - %2[*]</source> <translation>%1 - %2[*]</translation> </message> <message> - <location line="+10"/> <source>Save Form?</source> <translation>Formular speichern?</translation> </message> <message> - <location line="+1"/> <source>Do you want to save the changes to this document before closing?</source> <translation>Möchten Sie die Änderungen an diesem Formular speichern?</translation> </message> <message> - <location line="+2"/> <source>If you don't save, your changes will be lost.</source> <translation>Die Änderungen gehen verloren, wenn Sie nicht speichern. </translation> </message> @@ -1985,38 +1615,30 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1179"/> <source>Type Here</source> <translation>Geben Sie Text ein</translation> </message> <message> - <location line="+3"/> <source>Add Separator</source> <translation>Trenner hinzufügen</translation> </message> <message> - <location line="+371"/> <source>Insert separator</source> <translation>Trenner einfügen</translation> </message> <message> - <location line="+7"/> <source>Remove action '%1'</source> <translation>Aktion '%1' löschen</translation> </message> <message> - <location line="-2"/> <source>Remove separator</source> <translation>Trenner löschen</translation> </message> <message> - <location line="+27"/> - <location line="+648"/> <source>Add separator</source> <translation>Trenner hinzufügen</translation> </message> <message> - <location line="-348"/> <source>Insert action</source> <translation>Aktion einfügen</translation> </message> @@ -2024,22 +1646,18 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerMenuBar</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-375"/> <source>Type Here</source> <translation>Geben Sie Text ein</translation> </message> <message> - <location line="+298"/> <source>Remove Menu '%1'</source> <translation>Menü '%1' öschen</translation> </message> <message> - <location line="+12"/> <source>Remove Menu Bar</source> <translation>Menüleiste löschen</translation> </message> <message> - <location line="+70"/> <source>Menu</source> <translation>Menü</translation> </message> @@ -2047,37 +1665,30 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerPluginManager</name> <message> - <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="+271"/> <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source> <translation>Fehler beim Auswerten des XML des benutzerdefinierten Widgets %1: %2</translation> </message> <message> - <location line="+5"/> <source>A required attribute ('%1') is missing.</source> <translation>Bei dem Element fehlt ein erforderliches Attribut ('%1').</translation> </message> <message> - <location line="+38"/> <source>An invalid property specification ('%1') was encountered. Supported types: %2</source> <translation>'%1' ist keine gültige Spezifikation einer Eigenschaft. Die folgenden Typen werden unterstützt: %2</translation> </message> <message> - <location line="+20"/> <source>'%1' is not a valid string property specification.</source> <translation>'%1' ist keine gültige Spezifikation einer Zeichenketten-Eigenschaft.</translation> </message> <message> - <location line="+40"/> <source>The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>.</source> <translation>Der XML-Code für das Widget %1 enthält kein gültiges Wurzelelement (<widget>, <ui>).</translation> </message> <message> - <location line="+12"/> <source>The class attribute for the class %1 is missing.</source> <translation>Das Klassenattribut der Klasse %1 fehlt.</translation> </message> <message> - <location line="+4"/> <source>The class attribute for the class %1 does not match the class name %2.</source> <translation>Das Klassenattribut der Klasse %1 entspricht nicht dem Klassennamen (%2).</translation> </message> @@ -2085,7 +1696,6 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerPropertySheet</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+758"/> <source>Dynamic Properties</source> <translation>Dynamische Eigenschaften</translation> </message> @@ -2093,31 +1703,26 @@ Möchten Sie es noch einmal versuchen?</translation> <context> <name>QDesignerResource</name> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+492"/> <source>The layout type '%1' is not supported, defaulting to grid.</source> <translation>Der Layout-Typ '%1' wird nicht unterstützt; es wurde ein Grid-Layout erzeugt.</translation> </message> <message> - <location line="+239"/> <source>The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source> <translation>Die Container-Extension des Widgets '%1' (%2) gab für Seite %5 ein Widget '%3' (%4) zurück, was nicht von Designer verwaltet wird. Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifiziert werden.</translation> </message> <message> - <location line="+545"/> <source>Unexpected element <%1></source> <extracomment>Parsing clipboard contents</extracomment> <translation>Ungültiges Element <%1></translation> </message> <message> - <location line="+6"/> <source>Error while pasting clipboard contents at line %1, column %2: %3</source> <extracomment>Parsing clipboard contents</extracomment> <translation>Fehler beim Einfügen der Zwischenablage, Zeile %1, Spalte %2: %3</translation> </message> <message> - <location line="+6"/> <source>Error while pasting clipboard contents: The root element <ui> is missing.</source> <extracomment>Parsing clipboard contents</extracomment> <translation>Fehler beim Einfügen der Zwischenablage: Das Wurzelelement <ui> fehlt.</translation> @@ -2126,12 +1731,10 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QDesignerSharedSettings</name> <message> - <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="+83"/> <source>The template path %1 could not be created.</source> <translation>Das Vorlagenverzeichnis %1 konnte nicht angelegt werden.</translation> </message> <message> - <location line="+184"/> <source>An error has been encountered while parsing device profile XML: %1</source> <translation>Beim Lesen des Profils trat ein Fehler auf: %1</translation> </message> @@ -2139,32 +1742,26 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QDesignerToolWindow</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="+190"/> <source>Property Editor</source> <translation>Eigenschaften</translation> </message> <message> - <location line="+54"/> <source>Action Editor</source> <translation>Aktionseditor</translation> </message> <message> - <location line="+42"/> <source>Object Inspector</source> <translation>Objektanzeige</translation> </message> <message> - <location line="+35"/> <source>Resource Browser</source> <translation>Ressourcen</translation> </message> <message> - <location line="+34"/> <source>Signal/Slot Editor</source> <translation>Signale und Slots</translation> </message> <message> - <location line="+41"/> <source>Widget Box</source> <translation>Widget-Box</translation> </message> @@ -2172,97 +1769,78 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QDesignerWorkbench</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="+199"/> <source>&File</source> <translation>&Datei</translation> </message> <message> - <location line="+6"/> <source>F&orm</source> <translation>F&ormular</translation> </message> <message> - <location line="+1"/> <source>Preview in</source> <translation>Vorschau im</translation> </message> <message> - <location line="+8"/> <source>&Window</source> <translation>&Fenster</translation> </message> <message> - <location line="+2"/> <source>&Help</source> <translation>&Hilfe</translation> </message> <message> - <location line="-15"/> <source>Edit</source> <translation>Bearbeiten</translation> </message> <message> - <location line="+38"/> <source>Toolbars</source> <translation>Werkzeugleisten</translation> </message> <message> - <location line="+466"/> <source>Save Forms?</source> <translation>Formulare speichern?</translation> </message> <message> - <location line="-495"/> <source>&View</source> <translation>&Ansicht</translation> </message> <message> - <location line="+2"/> <source>&Settings</source> <translation>&Einstellungen</translation> </message> <message> - <location line="+204"/> <source>Widget Box</source> <translation>Widgetbox</translation> </message> <message> - <location line="+293"/> <source>If you do not review your documents, all your changes will be lost.</source> <translation>Die Änderungen gehen verloren, wenn Sie sich die Formulare nicht noch einmal ansehen.</translation> </message> <message> - <location line="+1"/> <source>Discard Changes</source> <translation>Änderungen verwerfen</translation> </message> <message> - <location line="+2"/> <source>Review Changes</source> <translation>Änderungen ansehen</translation> </message> <message> - <location line="+95"/> <source>Backup Information</source> <translation>Information zur Hintergrundsicherung</translation> </message> <message> - <location line="+1"/> <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source> <translation>Designer wurde offenbar nicht ordnungsgemäß beendet; es existieren noch Dateien von der Hintergrundsicherung. Möchten Sie sie laden?</translation> </message> <message> - <location line="+111"/> <source>The file <b>%1</b> could not be opened.</source> <translation>Die Datei <b>%1</b> konnte nicht geöffnet werden.</translation> </message> <message> - <location line="+46"/> <source>The file <b>%1</b> is not a valid Designer UI file.</source> <translation>Die Datei <b>%1</b> ist keine gültige Designer-Datei.</translation> </message> <message numerus="yes"> - <location line="-259"/> <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source> <translation> <numerusform>Das Formular wurde geändert. Möchten Sie sich die Änderungen ansehen, bevor Sie das Programm beenden?</numerusform> @@ -2273,53 +1851,47 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QFormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+168"/> <source>An empty class name was passed on to %1 (object name: '%2').</source> - <extracomment>Empty class name passed to widget factory method</extracomment> + <extracomment>Empty class name passed to widget factory method +---------- +Empty class name passed to widget factory method +---------- +Empty class name passed to widget factory method</extracomment> <translation>Der Methode %1 wurde ein leerer Klassennamen übergeben (Name '%2').</translation> </message> <message> - <location line="+56"/> <source>QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.</source> <translation>QFormBuilder konnte kein benutzerdefiniertes Widget der Klasse '%1' erzeugen; es wurde ein Widget der Basisklasse '%2' erzeugt.</translation> </message> <message> - <location line="+6"/> <source>QFormBuilder was unable to create a widget of the class '%1'.</source> <translation>QFormBuilder konnte kein Objekt der Klasse '%1' erzeugen.</translation> </message> <message> - <location line="+61"/> <source>The layout type `%1' is not supported.</source> <translation>Layouts des Typs `%1' werden nicht unterstützt.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="+106"/> <source>The set-type property %1 could not be read.</source> <translation>Die Eigenschaft %1 konnte nicht gelesen werden (Typ: Menge).</translation> </message> <message> - <location line="+23"/> <source>The enumeration-type property %1 could not be read.</source> <translation>Die Eigenschaft %1 konnte nicht gelesen werden (Typ: Aufzählung).</translation> </message> <message> - <location line="+190"/> <source>Reading properties of the type %1 is not supported yet.</source> <translation>Das Lesen von Eigenschaften des Typs %1 wird nicht unterstützt.</translation> </message> <message> - <location line="+266"/> <source>The property %1 could not be written. The type %2 is not supported yet.</source> <translation>Die Eigenschaft %1 konnte nicht geschrieben werden, da der Typ %2 nicht unterstützt wird.</translation> </message> <message> - <location filename="../tools/designer/src/lib/uilib/properties_p.h" line="+132"/> <source>The enumeration-value '%1' is invalid. The default value '%2' will be used instead.</source> <translation>Der Aufzählungswert '%1' ist ungültig. Es wird der Vorgabewert '%2' verwendet.</translation> </message> <message> - <location line="+14"/> <source>The flag-value '%1' is invalid. Zero will be used instead.</source> <translation>Der Flag-Wert '%1' ist ungültig. Es wird der Wert 0 verwendet.</translation> </message> @@ -2327,48 +1899,38 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QStackedWidgetEventFilter</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="+194"/> <source>Previous Page</source> <translation>Vorige Seite</translation> </message> <message> - <location line="+1"/> <source>Next Page</source> <translation>Nächste Seite</translation> </message> <message> - <location line="+1"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+1"/> <source>Before Current Page</source> <translation>Davor</translation> </message> <message> - <location line="+1"/> <source>After Current Page</source> <translation>Danach</translation> </message> <message> - <location line="+1"/> <source>Change Page Order...</source> <translation>Seiten umordnen....</translation> </message> <message> - <location line="+72"/> <source>Change Page Order</source> <translation>Seiten umordnen</translation> </message> <message> - <location line="+49"/> <source>Page %1 of %2</source> <translation>Seite %1 von %2</translation> </message> <message> - <location line="+10"/> - <location line="+4"/> <source>Insert Page</source> <translation>Seite einfügen</translation> </message> @@ -2376,12 +1938,10 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QStackedWidgetPreviewEventFilter</name> <message> - <location line="-153"/> <source>Go to previous page of %1 '%2' (%3/%4).</source> <translation>Gehe zur vorigen Seite von %1 '%2' (%3/%4).</translation> </message> <message> - <location line="+4"/> <source>Go to next page of %1 '%2' (%3/%4).</source> <translation>Gehe zur nächste Seite von %1 '%2' (%3/%4).</translation> </message> @@ -2389,28 +1949,22 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QTabWidgetEventFilter</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="+89"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+1"/> <source>Before Current Page</source> <translation>Davor</translation> </message> <message> - <location line="+1"/> <source>After Current Page</source> <translation>Danach</translation> </message> <message> - <location line="+283"/> <source>Page %1 of %2</source> <translation>Seite %1 von %2</translation> </message> <message> - <location line="+10"/> - <location line="+4"/> <source>Insert Page</source> <translation>Seite einfügen</translation> </message> @@ -2418,37 +1972,30 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QToolBoxHelper</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="+64"/> <source>Delete Page</source> <translation>Seite löschen</translation> </message> <message> - <location line="+1"/> <source>Before Current Page</source> <translation>Davor</translation> </message> <message> - <location line="+1"/> <source>After Current Page</source> <translation>Danach</translation> </message> <message> - <location line="+1"/> <source>Change Page Order...</source> <translation>Seiten umordnen....</translation> </message> <message> - <location line="+116"/> <source>Change Page Order</source> <translation>Seiten umordnen</translation> </message> <message> - <location line="+44"/> <source>Page %1 of %2</source> <translation>Seite %1 von %2</translation> </message> <message> - <location line="+12"/> <source>Insert Page</source> <translation>Seite einfügen</translation> </message> @@ -2456,15 +2003,10 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtBoolEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+255"/> - <location line="+10"/> - <location line="+25"/> <source>True</source> <translation>Wahr</translation> </message> <message> - <location line="-25"/> - <location line="+25"/> <source>False</source> <translation>Falsch</translation> </message> @@ -2472,12 +2014,10 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtBoolPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1507"/> <source>True</source> <translation>Wahr</translation> </message> <message> - <location line="+1"/> <source>False</source> <translation>Falsch</translation> </message> @@ -2485,7 +2025,6 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtCharEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1584"/> <source>Clear Char</source> <translation>Zeichen löschen</translation> </message> @@ -2493,7 +2032,6 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtColorEditWidget</name> <message> - <location line="+605"/> <source>...</source> <translation>...</translation> </message> @@ -2501,22 +2039,18 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtColorPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4718"/> <source>Red</source> <translation>Rot</translation> </message> <message> - <location line="+8"/> <source>Green</source> <translation>Grün</translation> </message> <message> - <location line="+8"/> <source>Blue</source> <translation>Blau</translation> </message> <message> - <location line="+8"/> <source>Alpha</source> <translation>Alpha</translation> </message> @@ -2524,97 +2058,78 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtCursorDatabase</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-234"/> <source>Arrow</source> <translation>Pfeil</translation> </message> <message> - <location line="+2"/> <source>Up Arrow</source> <translation>Pfeil hoch</translation> </message> <message> - <location line="+2"/> <source>Cross</source> <translation>Kreuzende Linien</translation> </message> <message> - <location line="+2"/> <source>Wait</source> <translation>Sanduhr</translation> </message> <message> - <location line="+2"/> <source>IBeam</source> <translation>IBeam</translation> </message> <message> - <location line="+2"/> <source>Size Vertical</source> <translation>Vertikal vergrößern</translation> </message> <message> - <location line="+2"/> <source>Size Horizontal</source> <translation>Horizontal vergrößern</translation> </message> <message> - <location line="+2"/> <source>Size Backslash</source> <translation>Vergrößern/Backslash</translation> </message> <message> - <location line="+2"/> <source>Size Slash</source> <translation>Vergrößern/Slash</translation> </message> <message> - <location line="+2"/> <source>Size All</source> <translation>Alles vergrößern</translation> </message> <message> - <location line="+2"/> <source>Blank</source> <translation>Leer</translation> </message> <message> - <location line="+2"/> <source>Split Vertical</source> <translation>Vertikal aufteilen</translation> </message> <message> - <location line="+2"/> <source>Split Horizontal</source> <translation>Horizontal aufteilen</translation> </message> <message> - <location line="+2"/> <source>Pointing Hand</source> <translation>Hand</translation> </message> <message> - <location line="+2"/> <source>Forbidden</source> <translation>Verboten</translation> </message> <message> - <location line="+2"/> <source>Open Hand</source> <translation>Geöffnete Hand</translation> </message> <message> - <location line="+2"/> <source>Closed Hand</source> <translation>Geschlossene Hand</translation> </message> <message> - <location line="+2"/> <source>What's This</source> <translation>What's This</translation> </message> <message> - <location line="+2"/> <source>Busy</source> <translation>Beschäftigt</translation> </message> @@ -2622,12 +2137,10 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtFontEditWidget</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+198"/> <source>...</source> <translation>...</translation> </message> <message> - <location line="+20"/> <source>Select Font</source> <translation>Schriftart auswählen</translation> </message> @@ -2635,37 +2148,30 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtFontPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-351"/> <source>Family</source> <translation>Familie</translation> </message> <message> - <location line="+13"/> <source>Point Size</source> <translation>Punktgröße</translation> </message> <message> - <location line="+8"/> <source>Bold</source> <translation>Fett</translation> </message> <message> - <location line="+7"/> <source>Italic</source> <translation>Kursiv</translation> </message> <message> - <location line="+7"/> <source>Underline</source> <translation>Unterstreichen</translation> </message> <message> - <location line="+7"/> <source>Strikeout</source> <translation>Durchgestrichen</translation> </message> <message> - <location line="+7"/> <source>Kerning</source> <translation>Kerning</translation> </message> @@ -2673,7 +2179,6 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtGradientDialog</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui"/> <source>Edit Gradient</source> <translation>Gradienten bearbeiten</translation> </message> @@ -2681,304 +2186,242 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtGradientEditor</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="+431"/> <source>Start X</source> <translation>Anfangswert X</translation> </message> <message> - <location line="+4"/> <source>Start Y</source> <translation>Anfangswert Y</translation> </message> <message> - <location line="+4"/> <source>Final X</source> <translation>Endwert X</translation> </message> <message> - <location line="+4"/> <source>Final Y</source> <translation>Endwert Y</translation> </message> <message> - <location line="+7"/> - <location line="+24"/> <source>Central X</source> <translation>Mittelpunkt X</translation> </message> <message> - <location line="-20"/> - <location line="+24"/> <source>Central Y</source> <translation>Mittelpunkt Y</translation> </message> <message> - <location line="-20"/> <source>Focal X</source> <translation>Fokus X</translation> </message> <message> - <location line="+4"/> <source>Focal Y</source> <translation>Fokus Y</translation> </message> <message> - <location line="+4"/> <source>Radius</source> <translation>Radius</translation> </message> <message> - <location line="+16"/> <source>Angle</source> <translation>Winkel</translation> </message> <message> - <location line="+288"/> <source>Linear</source> <translation>Linear</translation> </message> <message> - <location line="+1"/> <source>Radial</source> <translation>Radial</translation> </message> <message> - <location line="+1"/> <source>Conical</source> <translation>Konisch</translation> </message> <message> - <location line="+20"/> <source>Pad</source> <translation>Auffüllen</translation> </message> <message> - <location line="+1"/> <source>Repeat</source> <translation>Wiederholen</translation> </message> <message> - <location line="+1"/> <source>Reflect</source> <translation>Spiegeln</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui"/> <source>Form</source> <translation>Form</translation> </message> <message> - <location/> <source>Gradient Editor</source> <translation>Gradienten bearbeiten</translation> </message> <message> - <location/> <source>1</source> <translation>1</translation> </message> <message> - <location/> <source>2</source> <translation>2</translation> </message> <message> - <location/> <source>3</source> <translation>3</translation> </message> <message> - <location/> <source>4</source> <translation>4</translation> </message> <message> - <location/> <source>5</source> <translation>5</translation> </message> <message> - <location/> <source>Gradient Stops Editor</source> <translation>Bezugspunkte</translation> </message> <message> - <location/> <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source> <translation>Diese Fläche dient zum Bearbeiten der Bezugspunkte. Doppelklicken Sie auf einen Bezugspunkt, um ihn zu duplizieren. Doppelklicken Sie auf die Fläche, um einen neuen Bezugspunkt zu erzeugen. Benutzen Sie Drag & Drop um einen Punkt zu verschieben. Die rechte Maustaste aktiviert ein Menü mit weiteren Optionen.</translation> </message> <message> - <location/> <source>Zoom</source> <translation>Vergrößern</translation> </message> <message> - <location/> <source>Position</source> <translation>Position</translation> </message> <message> - <location/> <source>Hue</source> <translation>Farbton</translation> </message> <message> - <location/> <source>H</source> <translation>H</translation> </message> <message> - <location/> <source>Saturation</source> <translation>Sättigung</translation> </message> <message> - <location/> <source>S</source> <translation>S</translation> </message> <message> - <location/> <source>Sat</source> <translation>Sättigung</translation> </message> <message> - <location/> <source>Value</source> <translation>Wert</translation> </message> <message> - <location/> <source>V</source> <translation>V</translation> </message> <message> - <location/> <source>Val</source> <translation>Wert</translation> </message> <message> - <location/> <source>Alpha</source> <translation>Alpha</translation> </message> <message> - <location/> <source>A</source> <translation>A</translation> </message> <message> - <location/> <source>Type</source> <translation>Typ</translation> </message> <message> - <location/> <source>Spread</source> <translation>Ausbreitung</translation> </message> <message> - <location/> <source>Color</source> <translation>Farbe</translation> </message> <message> - <location/> <source>Current stop's color</source> <translation>Farbe des Bezugspunkts</translation> </message> <message> - <location/> <source>HSV</source> <translation>HSV</translation> </message> <message> - <location/> <source>RGB</source> <translation>RGB</translation> </message> <message> - <location/> <source>Current stop's position</source> <translation>Position des Bezugspunkts</translation> </message> <message> - <location/> <source>%</source> <translation>%</translation> </message> <message> - <location/> <source>Zoom In</source> <translation>Vergrößern</translation> </message> <message> - <location/> <source>Zoom Out</source> <translation>Verkleinern</translation> </message> <message> - <location/> <source>Toggle details extension</source> <translation>Weiter Optionen einblenden</translation> </message> <message> - <location/> <source>></source> <translation>></translation> </message> <message> - <location/> <source>Linear Type</source> <translation>Typ linear</translation> </message> <message> - <location/> <source>...</source> <translation>...</translation> </message> <message> - <location/> <source>Radial Type</source> <translation>Typ radial</translation> </message> <message> - <location/> <source>Conical Type</source> <translation>Typ konisch</translation> </message> <message> - <location/> <source>Pad Spread</source> <translation>Auffüllen</translation> </message> <message> - <location/> <source>Repeat Spread</source> <translation>Wiederholen</translation> </message> <message> - <location/> <source>Reflect Spread</source> <translation>Spiegeln</translation> </message> <message> - <location/> <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop.</source> <translation>Dieser Bereich zeigt eine Vorschau des in Bearbeitung befindlichen Gradienten. Hier können Gradienttyp-spezifische Parameter, wie Start- und Endpunkt, Radius etc. per Drag & Drop bearbeitet werden.</translation> </message> <message> - <location/> <source>Show HSV specification</source> <translation>HSV-Spezifikation anzeigen</translation> </message> <message> - <location/> <source>Show RGB specification</source> <translation>RGB-Spezifikation anzeigen</translation> </message> <message> - <location/> <source>Reset Zoom</source> <translation>Vergrößerung zurücksetzen</translation> </message> @@ -2986,37 +2429,30 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtGradientStopsWidget</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="+947"/> <source>New Stop</source> <translation>Neuer Bezugspunkt</translation> </message> <message> - <location line="+1"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+1"/> <source>Flip All</source> <translation>Alles umkehren</translation> </message> <message> - <location line="+1"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> <message> - <location line="+1"/> <source>Zoom In</source> <translation>Vergrößern</translation> </message> <message> - <location line="+1"/> <source>Zoom Out</source> <translation>Verkleinern</translation> </message> <message> - <location line="+1"/> <source>Reset Zoom</source> <translation>Vergrößerung zurücksetzen</translation> </message> @@ -3024,46 +2460,34 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtGradientView</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+107"/> <source>Grad</source> <translation>Grad</translation> </message> <message> - <location line="+26"/> <source>Remove Gradient</source> <translation>Gradient löschen</translation> </message> <message> - <location line="+1"/> <source>Are you sure you want to remove the selected gradient?</source> <translation>Möchten Sie den ausgewählten Gradienten löschen?</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui"/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+74"/> <source>New...</source> <translation>Neu...</translation> </message> <message> - <location/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Edit...</source> <translation>Ändern...</translation> </message> <message> - <location/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Rename</source> <translation>Umbenennen</translation> </message> <message> - <location/> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Remove</source> <translation>Löschen</translation> </message> <message> - <location/> <source>Gradient View</source> <translation>Gradientenanzeige</translation> </message> @@ -3071,8 +2495,6 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtGradientViewDialog</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui"/> - <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.h" line="+62"/> <source>Select Gradient</source> <translation>Gradienten auswählen</translation> </message> @@ -3080,7 +2502,6 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtKeySequenceEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+249"/> <source>Clear Shortcut</source> <translation>Tastenkürzel löschen</translation> </message> @@ -3088,17 +2509,14 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtLocalePropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-3541"/> <source>%1, %2</source> <translation>%1, %2</translation> </message> <message> - <location line="+53"/> <source>Language</source> <translation>Sprache</translation> </message> <message> - <location line="+8"/> <source>Country</source> <translation>Land</translation> </message> @@ -3106,17 +2524,14 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtPointFPropertyManager</name> <message> - <location line="+411"/> <source>(%1, %2)</source> <translation>(%1, %2)</translation> </message> <message> - <location line="+71"/> <source>X</source> <translation>X</translation> </message> <message> - <location line="+8"/> <source>Y</source> <translation>Y</translation> </message> @@ -3124,17 +2539,14 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtPointPropertyManager</name> <message> - <location line="-320"/> <source>(%1, %2)</source> <translation>(%1, %2)</translation> </message> <message> - <location line="+37"/> <source>X</source> <translation>X</translation> </message> <message> - <location line="+7"/> <source>Y</source> <translation>Y</translation> </message> @@ -3142,12 +2554,10 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtPropertyBrowserUtils</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-156"/> <source>[%1, %2, %3] (%4)</source> <translation>[%1, %2, %3] (%4)</translation> </message> <message> - <location line="+30"/> <source>[%1, %2]</source> <translation>[%1, %2]</translation> </message> @@ -3155,27 +2565,22 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtRectFPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1706"/> <source>[(%1, %2), %3 x %4]</source> <translation>[(%1, %2), %3 x %4]</translation> </message> <message> - <location line="+156"/> <source>X</source> <translation>X</translation> </message> <message> - <location line="+8"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location line="+8"/> <source>Width</source> <translation>Breite</translation> </message> <message> - <location line="+9"/> <source>Height</source> <translation>Höhe</translation> </message> @@ -3183,27 +2588,22 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtRectPropertyManager</name> <message> - <location line="-612"/> <source>[(%1, %2), %3 x %4]</source> <translation>[(%1, %2), %3 x %4]</translation> </message> <message> - <location line="+120"/> <source>X</source> <translation>X</translation> </message> <message> - <location line="+7"/> <source>Y</source> <translation>Y</translation> </message> <message> - <location line="+7"/> <source>Width</source> <translation>Breite</translation> </message> <message> - <location line="+8"/> <source>Height</source> <translation>Höhe</translation> </message> @@ -3211,33 +2611,26 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier <context> <name>QtResourceEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="+1961"/> <source>Edit Resources</source> <translation>Ressourcen bearbeiten</translation> </message> <message> - <location line="+35"/> <source>New...</source> <translation>Neu...</translation> </message> <message> - <location line="-565"/> - <location line="+566"/> <source>New Resource File</source> <translation>Neue Ressourcendatei</translation> </message> <message> - <location line="-413"/> <source><p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p></source> <translation><p><b>Hinweis:</b><p>Die gewählte Datei: </p><p>%1</p><p>befindet sich außerhalb des Verzeichnisses der Ressourcendatei:</p></translation> </message> <message> - <location line="+8"/> <source><p>To resolve the issue, press:</p><table><tr><th align="left">Copy</th><td>to copy the file to the resource file's parent directory.</td></tr><tr><th align="left">Copy As...</th><td>to copy the file into a subdirectory of the resource file's parent directory.</td></tr><tr><th align="left">Keep</th><td>to use its current location.</td></tr></table></source> <translation><p>Bitte wählen Sie:</p><table><tr><th align="left">Kopieren</th><td>um die Datei in das Verzeichnis der Ressourcendatei zu kopieren.</td></tr><tr><th align="left">Kopieren nach...</th><td>um die Datei in ein Unterverzeichnis der Ressourcendatei zu kopieren.</td></tr><tr><th align="left">Beibehalten</th><td>um die Datei in ihrem gegenwärtigen Verzeichnis zu verwenden.</td></tr></table></translation> </message> <message> - <location line="+288"/> <source>Could not copy %1 to @@ -3248,248 +2641,192 @@ zu: %2</translation> </message> <message> - <location line="+35"/> <source>A parse error occurred at line %1, column %2 of %3: %4</source> <translation>In der Datei %3 wurde bei Zeile %1, Spalte %2 ein Fehler gefunden: %4</translation> </message> <message> - <location line="+83"/> <source>Open...</source> <translation>Öffnen...</translation> </message> <message> - <location line="+2"/> - <location line="+11"/> <source>Remove</source> <translation>Löschen</translation> </message> <message> - <location line="-10"/> - <location line="+11"/> <source>Move Up</source> <translation>Nach oben</translation> </message> <message> - <location line="-10"/> - <location line="+11"/> <source>Move Down</source> <translation>Nach unten</translation> </message> <message> - <location line="-9"/> - <location line="+1"/> <source>Add Prefix</source> <translation>Präfix hinzufügen</translation> </message> <message> - <location line="+1"/> <source>Add Files...</source> <translation>Dateien hinzufügen...</translation> </message> <message> - <location line="+1"/> <source>Change Prefix</source> <translation>Präfix ändern</translation> </message> <message> - <location line="+1"/> <source>Change Language</source> <translation>Sprache ändern</translation> </message> <message> - <location line="+1"/> <source>Change Alias</source> <translation>Alias ändern</translation> </message> <message> - <location line="+1"/> <source>Clone Prefix...</source> <translation>Präfix doppeln...</translation> </message> <message> - <location line="+37"/> <source>Prefix / Path</source> <translation>Präfix / Pfad</translation> </message> <message> - <location line="+1"/> <source>Language / Alias</source> <translation>Sprache / Alias</translation> </message> <message> - <location line="+117"/> <source><html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html></source> <translation><html><p><b>Warnung:</b> Beim Neuladen der Ressourcen traten Fehler auf:</p><pre>%1</pre></html></translation> </message> <message> - <location line="+2"/> <source>Resource Warning</source> <translation>Ressourcen - Warnung</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui"/> <source>Dialog</source> <translation>Dialog</translation> </message> <message> - <location/> <source>New File</source> <translation>Neue Datei</translation> </message> <message> - <location/> <source>N</source> <translation>N</translation> </message> <message> - <location/> <source>Remove File</source> <translation>Datei löschen</translation> </message> <message> - <location/> <source>R</source> <translation>L</translation> </message> <message> - <location/> <source>I</source> <translation>I</translation> </message> <message> - <location/> <source>New Resource</source> <translation>Neue Ressource</translation> </message> <message> - <location/> <source>A</source> <translation>A</translation> </message> <message> - <location/> <source>Remove Resource or File</source> <translation>Datei oder Ressource löschen</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="-2091"/> <source>%1 already exists. Do you want to replace it?</source> <translation>Die Datei %1 existiert bereits. Wollen Sie sie überschreiben?</translation> </message> <message> - <location line="+5"/> <source>The file does not appear to be a resource file; element '%1' was found where '%2' was expected.</source> <translation>Die Datei ist offenbar keine Ressourcendatei; an Stelle des erwarteten Elements '%2' wurde das Element '%1' gefunden.</translation> </message> <message> - <location line="+902"/> <source>%1 [read-only]</source> <translation>%1 [schreibgeschützt]</translation> </message> <message> - <location line="+2"/> - <location line="+198"/> <source>%1 [missing]</source> <translation>%1 [fehlt]</translation> </message> <message> - <location line="-72"/> <source><no prefix></source> <translation><kein Präfix></translation> </message> <message> - <location line="+322"/> - <location line="+25"/> <source>Resource files (*.qrc)</source> <translation>Ressourcendateien (*.qrc)</translation> </message> <message> - <location line="-2"/> <source>Import Resource File</source> <translation>Ressourcendatei importieren</translation> </message> <message> - <location line="+112"/> <source>newPrefix</source> <translation>newPrefix</translation> </message> <message> - <location line="+49"/> <source>Add Files</source> <translation>Dateien hinzufügen</translation> </message> <message> - <location line="+21"/> <source>Incorrect Path</source> <translation>Fehlerhafte Pfadangabe</translation> </message> <message> - <location line="+3"/> - <location line="+19"/> - <location line="+212"/> - <location line="+7"/> <source>Copy</source> <translation>Kopieren</translation> </message> <message> - <location line="-236"/> <source>Copy As...</source> <translation>Kopieren nach...</translation> </message> <message> - <location line="+2"/> <source>Keep</source> <translation>Beibehalten</translation> </message> <message> - <location line="+2"/> <source>Skip</source> <translation>Überspringen</translation> </message> <message> - <location line="+87"/> <source>Clone Prefix</source> <translation>Präfix doppeln</translation> </message> <message> - <location line="+1"/> <source>Enter the suffix which you want to add to the names of the cloned files. This could for example be a language extension like "_de".</source> <translation>Bitte geben Sie den Suffix ein, der an den Namen der gedoppelten Dateien angehängt werden soll. Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation> </message> <message> - <location line="+113"/> - <location line="+4"/> <source>Copy As</source> <translation>Kopieren nach</translation> </message> <message> - <location line="+1"/> <source><p>The selected file:</p><p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p><p>Please select another path within this directory.<p></source> <translation><p>Die gewählte Datei: </p><p>%1</p><p>befindet sich außerhalb des Verzeichnisses der Ressourcendatei:</p><p>%2</p><p>Bitte wählen Sie einen anderen Pfad, der im Verzeichnis der Ressourcendatei enthalten ist.</p></translation> </message> <message> - <location line="+20"/> <source>Could not overwrite %1.</source> <translation>%1 konnte nicht überschrieben werden.</translation> </message> <message> - <location line="+54"/> <source>Save Resource File</source> <translation>Ressourcendatei speichern</translation> </message> <message> - <location line="+1"/> <source>Could not write %1: %2</source> <translation>Die Datei %1konnte nicht geschrieben werden: %2</translation> </message> <message> - <location line="+71"/> <source>Open Resource File</source> <translation>Ressourcendatei öffnen</translation> </message> @@ -3497,24 +2834,20 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtResourceView</name> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+567"/> <source>Size: %1 x %2 %3</source> <translation>Größe: %1 x %2 %3</translation> </message> <message> - <location line="+20"/> <source>Edit Resources...</source> <translation>Ressourcen bearbeiten...</translation> </message> <message> - <location line="+6"/> <source>Reload</source> <translation>Neu laden</translation> </message> <message> - <location line="+7"/> <source>Copy Path</source> <translation>Pfad kopieren</translation> </message> @@ -3522,7 +2855,6 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtResourceViewDialog</name> <message> - <location line="+252"/> <source>Select Resource</source> <translation>Ressource auswählen</translation> </message> @@ -3530,17 +2862,14 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtSizeFPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="-535"/> <source>%1 x %2</source> <translation>%1 x %2</translation> </message> <message> - <location line="+130"/> <source>Width</source> <translation>Breite</translation> </message> <message> - <location line="+9"/> <source>Height</source> <translation>Höhe</translation> </message> @@ -3548,33 +2877,26 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtSizePolicyPropertyManager</name> <message> - <location line="+1709"/> - <location line="+1"/> <source><Invalid></source> <translation><Ungültig></translation> </message> <message> - <location line="+1"/> <source>[%1, %2, %3, %4]</source> <translation>[%1, %2, %3, %4]</translation> </message> <message> - <location line="+45"/> <source>Horizontal Policy</source> <translation>Horizontale Einstellung</translation> </message> <message> - <location line="+9"/> <source>Vertical Policy</source> <translation>Vertikale Einstellung</translation> </message> <message> - <location line="+9"/> <source>Horizontal Stretch</source> <translation>Horizontaler Dehnungsfaktor</translation> </message> <message> - <location line="+8"/> <source>Vertical Stretch</source> <translation>Vertikaler Dehnungsfaktor</translation> </message> @@ -3582,17 +2904,14 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtSizePropertyManager</name> <message> - <location line="-2286"/> <source>%1 x %2</source> <translation>%1 x %2</translation> </message> <message> - <location line="+96"/> <source>Width</source> <translation>Breite</translation> </message> <message> - <location line="+8"/> <source>Height</source> <translation>Höhe</translation> </message> @@ -3600,107 +2919,86 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtToolBarDialog</name> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="+1784"/> <source>< S E P A R A T O R ></source> <translation>< T R E N N E R ></translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/> <source>Customize Toolbars</source> <translation>Werkzeugleisten anpassen</translation> </message> <message> - <location/> <source>1</source> <translation>1</translation> </message> <message> - <location/> <source>Actions</source> <translation>Aktionen</translation> </message> <message> - <location/> <source>Toolbars</source> <translation>Werkzeugleisten</translation> </message> <message> - <location/> <source>New</source> <translation>Neu</translation> </message> <message> - <location/> <source>Remove</source> <translation>Löschen</translation> </message> <message> - <location/> <source>Rename</source> <translation>Umbenennen</translation> </message> <message> - <location/> <source>Up</source> <translation>Nach oben</translation> </message> <message> - <location/> <source><-</source> <translation><-</translation> </message> <message> - <location/> <source>-></source> <translation>-></translation> </message> <message> - <location/> <source>Down</source> <translation>Nach unten</translation> </message> <message> - <location/> <source>Current Toolbar Actions</source> <translation>Aktionen</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="-544"/> <source>Custom Toolbar</source> <translation>Benutzerdefinierte Werkzeugleiste</translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/> <source>Add new toolbar</source> <translation>Neue Werkzeugleiste hinzufügen</translation> </message> <message> - <location/> <source>Remove selected toolbar</source> <translation>Ausgewählte Werkzeugleiste '%1' löschen</translation> </message> <message> - <location/> <source>Rename toolbar</source> <translation>Werkzeugleiste umbenennen</translation> </message> <message> - <location/> <source>Move action up</source> <translation>Aktion eins nach oben</translation> </message> <message> - <location/> <source>Remove action from toolbar</source> <translation>Aktion aus Werkzeugleiste entfernen</translation> </message> <message> - <location/> <source>Add action to toolbar</source> <translation>Aktion zu Werkzeugleiste hinzufügen</translation> </message> <message> - <location/> <source>Move action down</source> <translation>Aktion eins nach unten</translation> </message> @@ -3708,12 +3006,10 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>QtTreePropertyBrowser</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="+442"/> <source>Property</source> <translation>Eigenschaft</translation> </message> <message> - <location line="+1"/> <source>Value</source> <translation>Wert</translation> </message> @@ -3721,64 +3017,52 @@ Dies kann zum Beispiel eine Sprachkennung wie "_de" sein.</translation <context> <name>SaveFormAsTemplate</name> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="+72"/> <source>Add path...</source> <translation>Verzeichnis anlegen...</translation> </message> <message> - <location line="+23"/> <source>Template Exists</source> <translation>Die Vorlage existiert bereits</translation> </message> <message> - <location line="+1"/> <source>A template with the name %1 already exists. Do you want overwrite the template?</source> <translation>Es existiert bereits eine Vorlage mit dem Namen %1. Möchten Sie sie überschreiben?</translation> </message> <message> - <location line="+3"/> <source>Overwrite Template</source> <translation>Vorlage überschreiben</translation> </message> <message> - <location line="+7"/> <source>Open Error</source> <translation>Fehler beim Öffnen</translation> </message> <message> - <location line="+1"/> <source>There was an error opening template %1 for writing. Reason: %2</source> <translation>Die Vorlage %1 konnte nicht in eine Datei geschrieben werden: %2</translation> </message> <message> - <location line="+13"/> <source>Write Error</source> <translation>Schreibfehler</translation> </message> <message> - <location line="+1"/> <source>There was an error writing the template %1 to disk. Reason: %2</source> <translation>Die Vorlage %1 konnte nicht in eine Datei geschrieben werden: %2</translation> </message> <message> - <location line="+27"/> <source>Pick a directory to save templates in</source> <translation>Wählen Sie ein Verzeichnis zum Abspeichern der Vorlagen aus</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.ui"/> <source>Save Form As Template</source> <translation>Formular als Vorlage abspeichern</translation> </message> <message> - <location/> <source>&Category:</source> <translation>&Kategorie:</translation> </message> <message> - <location/> <source>&Name:</source> <translation>&Name:</translation> </message> @@ -3786,7 +3070,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>ScriptErrorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+59"/> <source>An error occurred while running the scripts for "%1": </source> <translation>Bei der Ausführung der Skripte für "%1" sind Fehler aufgetreten: @@ -3796,22 +3079,18 @@ Möchten Sie sie überschreiben?</translation> <context> <name>SelectSignalDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui"/> <source>Go to slot</source> <translation></translation> </message> <message> - <location/> <source>Select signal</source> <translation></translation> </message> <message> - <location/> <source>signal</source> <translation>Signal</translation> </message> <message> - <location/> <source>class</source> <translation>Klasse</translation> </message> @@ -3819,7 +3098,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>SignalSlotConnection</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="-358"/> <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source> <translation>SENDER(%1), SIGNAL(%2), EMPFÄNGER(%3), SLOT(%4)</translation> </message> @@ -3827,32 +3105,26 @@ Möchten Sie sie überschreiben?</translation> <context> <name>SignalSlotDialogClass</name> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui"/> <source>Signals and slots</source> <translation>Signale und Slots</translation> </message> <message> - <location/> <source>Slots</source> <translation>Slots</translation> </message> <message> - <location/> <source>...</source> <translation>...</translation> </message> <message> - <location/> <source>Signals</source> <translation>Signale</translation> </message> <message> - <location/> <source>Add</source> <translation>Hinzufügen</translation> </message> <message> - <location/> <source>Delete</source> <translation>Löschen</translation> </message> @@ -3860,12 +3132,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>Spacer</name> <message> - <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="+275"/> <source>Horizontal Spacer '%1', %2 x %3</source> <translation>Horizontales Füllelement '%1', %2 x %3</translation> </message> <message> - <location line="+0"/> <source>Vertical Spacer '%1', %2 x %3</source> <translation>Vertikales Füllelement '%1', %2 x %3</translation> </message> @@ -3873,7 +3143,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>TemplateOptionsPage</name> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="+156"/> <source>Template Paths</source> <extracomment>Tab in preferences dialog</extracomment> <translation>Verzeichnisse für Vorlagen</translation> @@ -3882,52 +3151,42 @@ Möchten Sie sie überschreiben?</translation> <context> <name>ToolBarManager</name> <message> - <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+89"/> <source>Configure Toolbars...</source> <translation>Werkzeugleiste konfigurieren...</translation> </message> <message> - <location line="+15"/> <source>Window</source> <translation>Fenster</translation> </message> <message> - <location line="+1"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location line="+7"/> <source>Style</source> <translation>Stil</translation> </message> <message> - <location line="+2"/> <source>Dock views</source> <translation>Dockfenster</translation> </message> <message> - <location line="+6"/> <source>File</source> <translation>Datei</translation> </message> <message> - <location line="+4"/> <source>Edit</source> <translation>Bearbeiten</translation> </message> <message> - <location line="+4"/> <source>Tools</source> <translation>Werkzeuge</translation> </message> <message> - <location line="+4"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location line="+4"/> <source>Toolbars</source> <translation>Werkzeugleisten</translation> </message> @@ -3935,30 +3194,64 @@ Möchten Sie sie überschreiben?</translation> <context> <name>VersionDialog</name> <message> - <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+170"/> <source><h3>%1</h3><br/><br/>Version %2</source> <translation><h3>%1</h3><br/><br/>Version %2</translation> </message> <message> - <location line="+1"/> <source>Qt Designer</source> <translation>Qt Designer</translation> </message> <message> - <location line="+1"/> <source><br/>Qt Designer is a graphical user interface designer for Qt applications.<br/></source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> <source>%1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> <translation type="unfinished"></translation> </message> </context> <context> + <name>VideoPlayerTaskMenu</name> + <message> + <source>Available Mime Types</source> + <translation>Verfügbare Mime-Typen</translation> + </message> + <message> + <source>Display supported mime types...</source> + <translation>Verfügbare Mime-Typen anzeigen...</translation> + </message> + <message> + <source>Load...</source> + <translation>Laden...</translation> + </message> + <message> + <source>Play</source> + <translation>Wiedergabe</translation> + </message> + <message> + <source>Pause</source> + <translation>Pause</translation> + </message> + <message> + <source>Stop</source> + <translation>Stop</translation> + </message> + <message> + <source>Choose Video Player Media Source</source> + <translation>Medienquelle wählen</translation> + </message> + <message> + <source>An error has occurred in '%1': %2</source> + <translation>In '%1' ist ein Fehler aufgetreten: %2</translation> + </message> + <message> + <source>Video Player Error</source> + <translation>Video Player Fehler</translation> + </message> +</context> +<context> <name>WidgetDataBase</name> <message> - <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="+814"/> <source>The file contains a custom widget '%1' whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source> <translation>Die Datei enthält ein benutzerdefiniertes Widget '%1' dessen Basisklasse (%2) nicht mit dem Eintrag in der Widget-Datenbank übereinstimmt. Die Widget-Datenbank wird nicht geändert.</translation> </message> @@ -3966,87 +3259,70 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ActionEditor</name> <message> - <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="+139"/> <source>Actions</source> <translation>Aktionen</translation> </message> <message> - <location line="-16"/> <source>New...</source> <translation>Neu...</translation> </message> <message> - <location line="+7"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+313"/> <source>New action</source> <translation>Neue Aktion</translation> </message> <message> - <location line="+98"/> <source>Edit action</source> <translation>Aktion ändern</translation> </message> <message> - <location line="-417"/> <source>Edit...</source> <translation>Ändern...</translation> </message> <message> - <location line="+1"/> <source>Go to slot...</source> <translation>Slot anzeigen...</translation> </message> <message> - <location line="+1"/> <source>Copy</source> <translation>Kopieren</translation> </message> <message> - <location line="+1"/> <source>Cut</source> <translation>Ausschneiden</translation> </message> <message> - <location line="+1"/> <source>Paste</source> <translation>Einfügen</translation> </message> <message> - <location line="+1"/> <source>Select all</source> <translation>Alles auswählen</translation> </message> <message> - <location line="+62"/> <source>Icon View</source> <translation>Icon-Ansicht</translation> </message> <message> - <location line="+6"/> <source>Detailed View</source> <translation>Detaillierte Ansicht</translation> </message> <message> - <location line="+413"/> <source>Remove actions</source> <translation> Aktionen löschen</translation> </message> <message> - <location line="+0"/> <source>Remove action '%1'</source> <translation>Aktion '%1' löschen</translation> </message> <message> - <location line="+186"/> <source>Used In</source> <translation>Verwendet in</translation> </message> <message> - <location line="-608"/> <source>Configure Action Editor</source> <translation>Aktionseditor konfigurieren</translation> </message> @@ -4054,32 +3330,26 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ActionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+89"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+1"/> <source>Used</source> <translation>Verwendet</translation> </message> <message> - <location line="+1"/> <source>Text</source> <translation>Text</translation> </message> <message> - <location line="+1"/> <source>Shortcut</source> <translation>Tastenkürzel</translation> </message> <message> - <location line="+1"/> <source>Checkable</source> <translation>Ankreuzbar</translation> </message> <message> - <location line="+1"/> <source>ToolTip</source> <translation>ToolTip</translation> </message> @@ -4087,27 +3357,22 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::BrushManagerProxy</name> <message> - <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="+219"/> <source>The element '%1' is missing the required attribute '%2'.</source> <translation>Bei dem Element fehlt das erforderliche Attribut '%2'.</translation> </message> <message> - <location line="+11"/> <source>Empty brush name encountered.</source> <translation>Fehlender Name bei der Brush-Definition.</translation> </message> <message> - <location line="+10"/> <source>An unexpected element '%1' was encountered.</source> <translation>Ein ungültiges Element '%1' wurde festgestellt.</translation> </message> <message> - <location line="+7"/> <source>An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4</source> <translation>Fehler beim Lesen der Brush-Datei '%1' bei Zeile %2, Spalte %3: %4</translation> </message> <message> - <location line="+43"/> <source>An error occurred when reading the resource file '%1' at line %2, column %3: %4</source> <translation>Fehler beim Lesen der Ressourcen-Datei '%1' bei Zeile %2, Spalte %3: %4</translation> </message> @@ -4115,17 +3380,14 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::BuddyEditor</name> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="+261"/> <source>Add buddy</source> <translation>Buddy hinzufügen</translation> </message> <message> - <location line="+52"/> <source>Remove buddies</source> <translation>Buddies löschen</translation> </message> <message numerus="yes"> - <location line="+24"/> <source>Remove %n buddies</source> <translation> <numerusform>Buddy löschen</numerusform> @@ -4133,7 +3395,6 @@ Möchten Sie sie überschreiben?</translation> </translation> </message> <message numerus="yes"> - <location line="+51"/> <source>Add %n buddies</source> <translation> <numerusform>Buddy hinzufügen</numerusform> @@ -4141,7 +3402,6 @@ Möchten Sie sie überschreiben?</translation> </translation> </message> <message> - <location line="+47"/> <source>Set automatically</source> <translation>Automatisch setzen</translation> </message> @@ -4149,7 +3409,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::BuddyEditorPlugin</name> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_plugin.cpp" line="+73"/> <source>Edit Buddies</source> <translation>Buddies bearbeiten</translation> </message> @@ -4157,7 +3416,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::BuddyEditorTool</name> <message> - <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_tool.cpp" line="+56"/> <source>Edit Buddies</source> <translation>Buddies bearbeiten</translation> </message> @@ -4165,12 +3423,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ButtonGroupMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+7"/> <source>Select members</source> <translation>Mitglieder auswählen</translation> </message> <message> - <location line="+1"/> <source>Break</source> <translation>Aufheben</translation> </message> @@ -4178,32 +3434,26 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ButtonTaskMenu</name> <message> - <location line="+121"/> <source>Assign to button group</source> <translation>Gruppierung</translation> </message> <message> - <location line="+2"/> <source>Button group</source> <translation>Gruppierung</translation> </message> <message> - <location line="+1"/> <source>New button group</source> <translation>Neue Gruppierung</translation> </message> <message> - <location line="+1"/> <source>Change text...</source> <translation>Text ändern...</translation> </message> <message> - <location line="+1"/> <source>None</source> <translation>Keine</translation> </message> <message> - <location line="+101"/> <source>Button group '%1'</source> <translation>Gruppierung '%1'</translation> </message> @@ -4211,57 +3461,46 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::CodeDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="+95"/> <source>Save...</source> <translation>Speichern...</translation> </message> <message> - <location line="+4"/> <source>Copy All</source> <translation>Alles kopieren</translation> </message> <message> - <location line="+5"/> <source>&Find in Text...</source> <translation>&Suchen...</translation> </message> <message> - <location line="+75"/> <source>A temporary form file could not be created in %1.</source> <translation>In dem Verzeichnis %1 konnte keine temporäre Formulardatei angelegt werden.</translation> </message> <message> - <location line="+6"/> <source>The temporary form file %1 could not be written.</source> <translation>Die temporäre Formulardatei %1 konnte nicht geschrieben werden.</translation> </message> <message> - <location line="+21"/> <source>%1 - [Code]</source> <translation>%1 - [Code]</translation> </message> <message> - <location line="+23"/> <source>Save Code</source> <translation>Code speichern</translation> </message> <message> - <location line="+0"/> <source>Header Files (*.%1)</source> <translation>Include-Dateien (*.%1)</translation> </message> <message> - <location line="+6"/> <source>The file %1 could not be opened: %2</source> <translation>Die Datei %1 konnte nicht geöffnet werden: %2</translation> </message> <message> - <location line="+5"/> <source>The file %1 could not be written: %2</source> <translation>Die Datei %1 konnte nicht geschrieben werden: %2</translation> </message> <message> - <location line="+11"/> <source>%1 - Error</source> <translation>%1 - Fehler</translation> </message> @@ -4269,7 +3508,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ColorAction</name> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+246"/> <source>Text Color</source> <translation>Schriftfarbe</translation> </message> @@ -4277,12 +3515,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ComboBoxTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="+68"/> <source>Edit Items...</source> <translation>Einträge ändern...</translation> </message> <message> - <location line="+38"/> <source>Change Combobox Contents</source> <translation>Inhalt der Combobox ändern</translation> </message> @@ -4290,7 +3526,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::CommandLinkButtonTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="+156"/> <source>Change description...</source> <translation>Beschreibung ändern...</translation> </message> @@ -4298,17 +3533,14 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ConnectionEdit</name> <message> - <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="+1313"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> <message> - <location line="+8"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="-5"/> <source>Deselect All</source> <translation>Auswahl rücksetzen</translation> </message> @@ -4316,52 +3548,42 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ConnectionModel</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="-465"/> <source>Sender</source> <translation>Sender</translation> </message> <message> - <location line="+1"/> <source>Signal</source> <translation></translation> </message> <message> - <location line="+1"/> <source>Receiver</source> <translation>Empfänger</translation> </message> <message> - <location line="+1"/> <source>Slot</source> <translation>Slot</translation> </message> <message> - <location line="+90"/> <source><sender></source> <translation><Sender></translation> </message> <message> - <location line="+1"/> <source><signal></source> <translation><Signal></translation> </message> <message> - <location line="+1"/> <source><receiver></source> <translation><Receiver></translation> </message> <message> - <location line="+1"/> <source><slot></source> <translation><Slot></translation> </message> <message> - <location line="+110"/> <source>Signal and Slot Editor</source> <translation>Signal/Slot editor</translation> </message> <message> - <location line="-2"/> <source>The connection already exists!<br>%1</source> <translation>Diese Verbindung existiert bereits!<br>%1</br></translation> </message> @@ -4369,42 +3591,34 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ContainerWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+107"/> <source>Insert Page Before Current Page</source> <translation>Seite davor einfügen</translation> </message> <message> - <location line="+4"/> <source>Insert Page After Current Page</source> <translation>Seite danach einfügen</translation> </message> <message> - <location line="+8"/> <source>Add Subwindow</source> <translation>Subfenster hinzufügen</translation> </message> <message> - <location line="-40"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+25"/> <source>Insert</source> <translation>Einfügen</translation> </message> <message> - <location line="+53"/> <source>Subwindow</source> <translation>Subwindow</translation> </message> <message> - <location line="+2"/> <source>Page</source> <translation>Seite</translation> </message> <message> - <location line="+1"/> <source>Page %1 of %2</source> <translation>Seite %1 von %2</translation> </message> @@ -4412,19 +3626,16 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::DPI_Chooser</name> <message> - <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="+52"/> <source> x </source> <extracomment>DPI X/Y separator</extracomment> <translation> x </translation> </message> <message> - <location line="-25"/> <source>System (%1 x %2)</source> <extracomment>System resolution</extracomment> <translation>System (%1 x %2)</translation> </message> <message> - <location line="+7"/> <source>User defined</source> <translation>Benutzerdefiniert</translation> </message> @@ -4432,49 +3643,38 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::DesignerPropertyManager</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="+647"/> - <location line="+6"/> <source>AlignLeft</source> <translation>Linksbündig ausrichten</translation> </message> <message> - <location line="-5"/> <source>AlignHCenter</source> <translation>Horizontal zentrieren</translation> </message> <message> - <location line="+1"/> <source>AlignRight</source> <translation>Rechtsbündig ausrichten</translation> </message> <message> - <location line="+1"/> <source>AlignJustify</source> <translation>Blocksatz</translation> </message> <message> - <location line="+9"/> <source>AlignTop</source> <translation>Am oberen Rand ausrichten</translation> </message> <message> - <location line="+1"/> - <location line="+4"/> <source>AlignVCenter</source> <translation>Vertikal zentrieren</translation> </message> <message> - <location line="-3"/> <source>AlignBottom</source> <translation>Am unteren Rand zentrieren</translation> </message> <message> - <location line="+565"/> <source>%1, %2</source> <translation>%1, %2</translation> </message> <message numerus="yes"> - <location line="+6"/> <source>Customized (%n roles)</source> <translation> <numerusform>Angepasst (eine Rolle)</numerusform> @@ -4482,75 +3682,58 @@ Möchten Sie sie überschreiben?</translation> </translation> </message> <message> - <location line="+1"/> <source>Inherited</source> <translation>Geerbt</translation> </message> <message> - <location line="+566"/> <source>Horizontal</source> <translation>Horizontal</translation> </message> <message> - <location line="+9"/> <source>Vertical</source> <translation>Vertikal</translation> </message> <message> - <location line="+15"/> <source>Normal Off</source> <translation>Normal, aus</translation> </message> <message> - <location line="+1"/> <source>Normal On</source> <translation>Normal, ein</translation> </message> <message> - <location line="+1"/> <source>Disabled Off</source> <translation>Nicht verfügbar, aus</translation> </message> <message> - <location line="+1"/> <source>Disabled On</source> <translation>Verfügbar, ein</translation> </message> <message> - <location line="+1"/> <source>Active Off</source> <translation>Aktiv, aus</translation> </message> <message> - <location line="+1"/> <source>Active On</source> <translation>Aktiv, ein</translation> </message> <message> - <location line="+1"/> <source>Selected Off</source> <translation>Ausgewählt, aus</translation> </message> <message> - <location line="+1"/> <source>Selected On</source> <translation>Ausgewählt, ein</translation> </message> <message> - <location line="+7"/> - <location line="+21"/> <source>translatable</source> <translation>Übersetzung</translation> </message> <message> - <location line="-15"/> - <location line="+21"/> <source>disambiguation</source> <translation>Kennung</translation> </message> <message> - <location line="-15"/> - <location line="+21"/> <source>comment</source> <translation>Kommentar</translation> </message> @@ -4558,48 +3741,38 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::DeviceProfileDialog</name> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="+63"/> <source>Device Profiles (*.%1)</source> <translation>Profile</translation> </message> <message> - <location line="+31"/> <source>Default</source> <translation>Vorgabe</translation> </message> <message> - <location line="+67"/> <source>Save Profile</source> <translation>Profil speichern</translation> </message> <message> - <location line="+10"/> <source>Save Profile - Error</source> <translation>Fehler beim Speichern des Profils</translation> </message> <message> - <location line="+0"/> <source>Unable to open the file '%1' for writing: %2</source> <translation>Die Datei '%1' konnte nicht zum Schreiben geöffnet werden: %2</translation> </message> <message> - <location line="+14"/> <source>Unable to open the file '%1' for reading: %2</source> <translation>Die Datei '%1' konnte nicht zum Lesen geöffnet werden: %2</translation> </message> <message> - <location line="+6"/> <source>'%1' is not a valid profile: %2</source> <translation>'%1' ist kein gültiges Profil: %2</translation> </message> <message> - <location line="-12"/> <source>Open profile</source> <translation>Profil öffnen</translation> </message> <message> - <location line="+6"/> - <location line="+6"/> <source>Open Profile - Error</source> <translation>Fehler beim Öffnen des Profils</translation> </message> @@ -4607,57 +3780,46 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::Dialog</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui"/> <source>Dialog</source> <translation>Dialog</translation> </message> <message> - <location/> <source>StringList</source> <translation>Liste von Zeichenketten</translation> </message> <message> - <location/> <source>New String</source> <translation>Neue Zeichenkette</translation> </message> <message> - <location/> <source>&New</source> <translation>&Neu</translation> </message> <message> - <location/> <source>Delete String</source> <translation>Zeichenkette löschen</translation> </message> <message> - <location/> <source>&Delete</source> <translation>&Löschen</translation> </message> <message> - <location/> <source>&Value:</source> <translation>&Wert:</translation> </message> <message> - <location/> <source>Move String Up</source> <translation>Zeichenkette eins nach oben</translation> </message> <message> - <location/> <source>Up</source> <translation>Hoch</translation> </message> <message> - <location/> <source>Move String Down</source> <translation>Zeichenkette eins nach unten</translation> </message> <message> - <location/> <source>Down</source> <translation>Runter</translation> </message> @@ -4665,52 +3827,42 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::EmbeddedOptionsControl</name> <message> - <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="-260"/> <source>None</source> <translation>Vorgabe</translation> </message> <message> - <location line="+4"/> <source>Add a profile</source> <translation>Profil hinzufügen</translation> </message> <message> - <location line="+6"/> <source>Edit the selected profile</source> <translation>Ausgewähltes Profil modifizieren</translation> </message> <message> - <location line="+4"/> <source>Delete the selected profile</source> <translation>Ausgewähltes Profil löschen</translation> </message> <message> - <location line="+22"/> <source>Add Profile</source> <translation>Profil hinzufügen</translation> </message> <message> - <location line="+7"/> <source>New profile</source> <translation>Neues Profil</translation> </message> <message> - <location line="+35"/> <source>Edit Profile</source> <translation>Profil ändern</translation> </message> <message> - <location line="+26"/> <source>Delete Profile</source> <translation>Profil löschen</translation> </message> <message> - <location line="+1"/> <source>Would you like to delete the profile '%1'?</source> <translation>Möchten Sie das Profil '%1' löschen?</translation> </message> <message> - <location line="+55"/> <source>Default</source> <translation>Vorgabe</translation> </message> @@ -4718,12 +3870,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FilterWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+160"/> <source>Filter</source> <translation>Filter</translation> </message> <message> - <location line="+36"/> <source>Clear text</source> <translation>Text löschen</translation> </message> @@ -4731,12 +3881,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FormEditor</name> <message> - <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="+190"/> <source>Resource File Changed</source> <translation>Änderung einer Ressourcendatei</translation> </message> <message> - <location line="+1"/> <source>The file "%1" has changed outside Designer. Do you want to reload it?</source> <translation>Die Ressourcendatei "%1" wurde außerhalb Designer geändert. Möchten Sie sie neu laden?</translation> </message> @@ -4744,7 +3892,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FormLayoutMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="+24"/> <source>Add form layout row...</source> <translation>Zeile hinzufügen...</translation> </message> @@ -4752,43 +3899,34 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FormWindow</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="-1322"/> <source>Edit contents</source> <translation>Ändern</translation> </message> <message> - <location line="+1"/> <source>F2</source> <translation>F2</translation> </message> <message> - <location line="+840"/> <source>Resize</source> <translation>Größe ändern</translation> </message> <message> - <location line="+248"/> <source>Key Move</source> <translation>Verschieben mittels Tastatur</translation> </message> <message> - <location line="+317"/> <source>Paste error</source> <translation>Fehler beim Einfügen</translation> </message> <message> - <location line="+448"/> <source>Lay out</source> <translation>Layout</translation> </message> <message> - <location line="+485"/> - <location line="+55"/> <source>Drop widget</source> <translation>Widget einfügen</translation> </message> <message numerus="yes"> - <location line="-1053"/> <source>Paste %n action(s)</source> <translation> <numerusform>Eine Aktion einfügen</numerusform> @@ -4796,17 +3934,14 @@ Möchten Sie sie überschreiben?</translation> </translation> </message> <message> - <location line="-565"/> <source>Insert widget '%1'</source> <translation>Widget '%1' einfügen</translation> </message> <message> - <location line="+313"/> <source>Key Resize</source> <translation>Größe ändern mittels Tastatur</translation> </message> <message numerus="yes"> - <location line="+254"/> <source>Paste %n widget(s)</source> <translation> <numerusform>Widget einfügen</numerusform> @@ -4814,37 +3949,30 @@ Möchten Sie sie überschreiben?</translation> </translation> </message> <message> - <location line="+1"/> <source>Paste (%1 widgets, %2 actions)</source> <translation>Einfügen (%1 Widgets, %2 Aktionen)</translation> </message> <message> - <location line="+56"/> <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source> <translation>Die Widgets konnten nicht eingefügt werden, da kein Container gefunden werden konnte, der nicht bereits ein Layout hat.</translation> </message> <message> - <location line="+2"/> <source>Break the layout of the container you want to paste into, select this container and then paste again.</source> <translation>Bitte lösen Sie das Layout des gewünschten Containers auf und wählen Sie ihn erneut aus, um die Widgets einzufügen.</translation> </message> <message> - <location line="+406"/> <source>Select Ancestor</source> <translation>Übergeordnetes Widget auswählen</translation> </message> <message> - <location line="+573"/> <source>A QMainWindow-based form does not contain a central widget.</source> <translation>Ein auf QMainWindow basierendes Formular enthält kein zentrales Widget.</translation> </message> <message> - <location line="-794"/> <source>Raise widgets</source> <translation>Widgets nach vorn bringen</translation> </message> <message> - <location line="+17"/> <source>Lower widgets</source> <translation>Widgets nach hinten setzen</translation> </message> @@ -4852,12 +3980,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FormWindowBase</name> <message> - <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+404"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+0"/> <source>Delete '%1'</source> <translation> '%1' löschen</translation> </message> @@ -4865,200 +3991,159 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FormWindowManager</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+365"/> <source>Cu&t</source> <translation>&Ausschneiden</translation> </message> <message> - <location line="+3"/> <source>Cuts the selected widgets and puts them on the clipboard</source> <translation>Schneidet die ausgewählten Widgets aus und legt sie in der Zwischenablage ab</translation> </message> <message> - <location line="+5"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> <message> - <location line="+3"/> <source>Copies the selected widgets to the clipboard</source> <translation>Kopiert die ausgewählten Widgets in die Zwischenablage</translation> </message> <message> - <location line="+5"/> <source>&Paste</source> <translation>&Einfügen</translation> </message> <message> - <location line="+3"/> <source>Pastes the clipboard's contents</source> <translation>Fügt den Inhalt der Zwischenablage ein</translation> </message> <message> - <location line="+5"/> <source>&Delete</source> <translation>&Löschen</translation> </message> <message> - <location line="+2"/> <source>Deletes the selected widgets</source> <translation>Löscht die ausgewählten Widgets</translation> </message> <message> - <location line="+5"/> <source>Select &All</source> <translation>&Alles auswählen</translation> </message> <message> - <location line="+3"/> <source>Selects all widgets</source> <translation>Wählt alle Widget aus</translation> </message> <message> - <location line="+5"/> <source>Bring to &Front</source> <translation>Nach &vorn</translation> </message> <message> - <location line="+3"/> - <location line="+1"/> <source>Raises the selected widgets</source> <translation>Bringt das ausgewählte Widget nach vorn</translation> </message> <message> - <location line="+4"/> <source>Send to &Back</source> <translation>Nach &hinten</translation> </message> <message> - <location line="+3"/> - <location line="+1"/> <source>Lowers the selected widgets</source> <translation>Stellt das ausgewählte Widget nach hinten</translation> </message> <message> - <location line="+4"/> <source>Adjust &Size</source> <translation>&Größe anpassen</translation> </message> <message> - <location line="+3"/> <source>Adjusts the size of the selected widget</source> <translation>Berechnet die Größe des ausgewählten Widgets aus dem Layout und passt das Widget an</translation> </message> <message> - <location line="+6"/> <source>Lay Out &Horizontally</source> <translation>Objekte &waagrecht anordnen</translation> </message> <message> - <location line="+3"/> <source>Lays out the selected widgets horizontally</source> <translation>Ordnet die ausgewähltenObjekte waagrecht an</translation> </message> <message> - <location line="+6"/> <source>Lay Out &Vertically</source> <translation>Objekte &senkrecht anordnen</translation> </message> <message> - <location line="+3"/> <source>Lays out the selected widgets vertically</source> <translation>Ordnet die ausgewählten Objekte senkrecht an</translation> </message> <message> - <location line="+17"/> <source>Lay Out in a &Grid</source> <translation>Objekte &tabellarisch anordnen</translation> </message> <message> - <location line="+3"/> <source>Lays out the selected widgets in a grid</source> <translation>Ordnet die ausgewählten Objekte tabellarisch an</translation> </message> <message> - <location line="+7"/> <source>Lay Out Horizontally in S&plitter</source> <translation>Objekte waagrecht um Spl&itter anordnen</translation> </message> <message> - <location line="+3"/> <source>Lays out the selected widgets horizontally in a splitter</source> <translation>Ordnet die ausgewählten Objekte um einen Splitter waagrecht an</translation> </message> <message> - <location line="+7"/> <source>Lay Out Vertically in Sp&litter</source> <translation>Objekte senkrecht um Spl&itter anordnen</translation> </message> <message> - <location line="+3"/> <source>Lays out the selected widgets vertically in a splitter</source> <translation>Ordnet die ausgewählten Objekte um einen Splitter senkecht an</translation> </message> <message> - <location line="+7"/> <source>&Break Layout</source> <translation>La&yout auflösen</translation> </message> <message> - <location line="+3"/> <source>Breaks the selected layout</source> <translation>Löst das ausgewählte Layout auf</translation> </message> <message> - <location line="+13"/> <source>&Preview...</source> <translation>&Vorschau...</translation> </message> <message> - <location line="+2"/> <source>Preview current form</source> <translation>Vorschau des Formulars</translation> </message> <message> - <location line="+15"/> <source>Form &Settings...</source> <translation>Formular&einstellungen...</translation> </message> <message> - <location line="+94"/> <source>Break Layout</source> <translation>Layout auflösen</translation> </message> <message> - <location line="+26"/> <source>Adjust Size</source> <translation>Größe anpassen</translation> </message> <message> - <location line="+43"/> <source>Could not create form preview</source> <comment>Title of warning message box</comment> <translation>Es konnte keine Vorschau erzeugt werden</translation> </message> <message> - <location line="+341"/> <source>Form Settings - %1</source> <translation>Formulareinstellungen - %1</translation> </message> <message> - <location line="-527"/> <source>Removes empty columns and rows</source> <translation>Entfernt unbesetzte Zeilen und Spalten</translation> </message> <message> - <location line="-50"/> <source>Lay Out in a &Form Layout</source> <translation>Objekte in &Formularlayout anordnen</translation> </message> <message> - <location line="+3"/> <source>Lays out the selected widgets in a form layout</source> <translation>Ordnet die ausgewählten Objekte in einem zweispaltigen Formularlayout an</translation> </message> <message> - <location line="+45"/> <source>Si&mplify Grid Layout</source> <translation>Tabellarisches Layout &vereinfachen</translation> </message> @@ -5066,12 +4151,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::FormWindowSettings</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="+193"/> <source>None</source> <translation>Kein</translation> </message> <message> - <location line="+1"/> <source>Device Profile: %1</source> <translation>Profil: %1</translation> </message> @@ -5079,37 +4162,30 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::GridPanel</name> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui"/> <source>Visible</source> <translation>Sichtbar</translation> </message> <message> - <location/> <source>Snap</source> <translation>Einschnappen</translation> </message> <message> - <location/> <source>Reset</source> <translation>Rücksetzen</translation> </message> <message> - <location/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location/> <source>Grid</source> <translation>Raster</translation> </message> <message> - <location/> <source>Grid &X</source> <translation>Raster &X</translation> </message> <message> - <location/> <source>Grid &Y</source> <translation>Raster &Y</translation> </message> @@ -5117,7 +4193,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::GroupBoxTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/groupbox_taskmenu.cpp" line="+82"/> <source>Change title...</source> <translation>Titel ändern...</translation> </message> @@ -5125,7 +4200,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::HtmlTextEdit</name> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="-58"/> <source>Insert HTML entity</source> <translation>HTML-Sonderzeichen einfügen</translation> </message> @@ -5133,92 +4207,74 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::IconSelector</name> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-24"/> <source>The pixmap file '%1' cannot be read.</source> <translation>Die Pixmap-Datei '%1' kann nicht gelesen werden.</translation> </message> <message> - <location line="+6"/> <source>The file '%1' does not appear to be a valid pixmap file: %2</source> <translation>Die Datei '%1' ist keine gültige Pixmap-Datei: %2</translation> </message> <message> - <location line="+9"/> <source>The file '%1' could not be read: %2</source> <translation>Die Datei '%1' konnte nicht gelesen werden: %2</translation> </message> <message> - <location line="+40"/> <source>Pixmap Read Error</source> <translation>Fehler beim Lesen der Pixmap</translation> </message> <message> - <location line="+54"/> <source>...</source> <translation>...</translation> </message> <message> - <location line="+6"/> <source>Normal Off</source> <translation>Normal, aus</translation> </message> <message> - <location line="+1"/> <source>Normal On</source> <translation>Normal, ein</translation> </message> <message> - <location line="+1"/> <source>Disabled Off</source> <translation>Nicht verfügbar, aus</translation> </message> <message> - <location line="+1"/> <source>Disabled On</source> <translation>Verfügbar, ein</translation> </message> <message> - <location line="+1"/> <source>Active Off</source> <translation>Aktiv, aus</translation> </message> <message> - <location line="+1"/> <source>Active On</source> <translation>Aktiv, ein</translation> </message> <message> - <location line="+1"/> <source>Selected Off</source> <translation>Ausgewählt, aus</translation> </message> <message> - <location line="+1"/> <source>Selected On</source> <translation>Ausgewählt, ein</translation> </message> <message> - <location line="+8"/> <source>Choose Resource...</source> <translation>Ressource auswählen...</translation> </message> <message> - <location line="+1"/> <source>Choose File...</source> <translation>Datei auswählen...</translation> </message> <message> - <location line="+1"/> <source>Reset</source> <translation>Rücksetzen</translation> </message> <message> - <location line="+1"/> <source>Reset All</source> <translation>Alle rücksetzen</translation> </message> <message> - <location line="-85"/> <source>Choose a Pixmap</source> <translation>Pixmap-Datei auswählen</translation> </message> @@ -5226,58 +4282,46 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ItemListEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+358"/> <source>Properties &<<</source> <translation>Eigenschaften &<<</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui"/> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+2"/> <source>Properties &>></source> <translation>Eigenschaften &>></translation> </message> <message> - <location/> <source>Items List</source> <translation>Liste der Elemente</translation> </message> <message> - <location/> <source>New Item</source> <translation>Neues Element</translation> </message> <message> - <location/> <source>&New</source> <translation>&Neu</translation> </message> <message> - <location/> <source>Delete Item</source> <translation>Element löschen</translation> </message> <message> - <location/> <source>&Delete</source> <translation>&Löschen</translation> </message> <message> - <location/> <source>Move Item Up</source> <translation>Element eins nach oben</translation> </message> <message> - <location/> <source>U</source> <translation>U</translation> </message> <message> - <location/> <source>Move Item Down</source> <translation>Element eins nach unten</translation> </message> <message> - <location/> <source>D</source> <translation>D</translation> </message> @@ -5285,12 +4329,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::LabelTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="+85"/> <source>Change rich text...</source> <translation>Formatierbaren Text ändern...</translation> </message> <message> - <location line="+1"/> <source>Change plain text...</source> <translation>Text ändern...</translation> </message> @@ -5298,7 +4340,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::LanguageResourceDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="-258"/> <source>Choose Resource</source> <translation>Ressource auswählen</translation> </message> @@ -5306,7 +4347,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::LineEditTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/lineedit_taskmenu.cpp" line="+80"/> <source>Change text...</source> <translation>Text ändern...</translation> </message> @@ -5314,17 +4354,14 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ListWidgetEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="+101"/> <source>Edit List Widget</source> <translation>List-Widget ändern</translation> </message> <message> - <location line="+19"/> <source>Edit Combobox</source> <translation>Combobox ändern</translation> </message> <message> - <location line="-51"/> <source>New Item</source> <translation>Neues Element</translation> </message> @@ -5332,12 +4369,10 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::ListWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="+67"/> <source>Edit Items...</source> <translation> Elemente ändern...</translation> </message> <message> - <location line="+38"/> <source>Change List Contents</source> <translation>Inhalt der Liste ändern</translation> </message> @@ -5345,22 +4380,18 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="+118"/> <source>Next Subwindow</source> <translation>Nächste Unterfenster</translation> </message> <message> - <location line="+1"/> <source>Previous Subwindow</source> <translation>Voriges Unterfenster</translation> </message> <message> - <location line="+1"/> <source>Tile</source> <translation>Nebeneinander anordnen</translation> </message> <message> - <location line="+1"/> <source>Cascade</source> <translation>Stapeln</translation> </message> @@ -5368,7 +4399,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::MenuTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/menutaskmenu.cpp" line="+56"/> <source>Remove</source> <translation>Löschen</translation> </message> @@ -5376,7 +4406,6 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::MorphMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="+264"/> <source>Morph into</source> <translation>Widget umwandeln in</translation> </message> @@ -5384,42 +4413,34 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::NewActionDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui"/> <source>New Action...</source> <translation>Neue Aktion...</translation> </message> <message> - <location/> <source>&Text:</source> <translation>&Text:</translation> </message> <message> - <location/> <source>Shortcut:</source> <translation>Tastenkürzel</translation> </message> <message> - <location/> <source>Checkable:</source> <translation>Ankreuzbar:</translation> </message> <message> - <location/> <source>ToolTip:</source> <translation>ToolTip:</translation> </message> <message> - <location/> <source>...</source> <translation>...</translation> </message> <message> - <location/> <source>&Icon:</source> <translation>&Icon:</translation> </message> <message> - <location/> <source>Object &name:</source> <translation>Objekt&name:</translation> </message> @@ -5427,40 +4448,33 @@ Möchten Sie sie überschreiben?</translation> <context> <name>qdesigner_internal::NewDynamicPropertyDialog</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="+134"/> <source>Set Property Name</source> <translation>Namen der Eigenschaft setzen</translation> </message> <message> - <location line="+11"/> <source>The current object already has a property named '%1'. Please select another, unique one.</source> <translation>Das Objekt besitzt eine bereits eine Eigenschaft namens '%1'. Bitte wählen Sie einen anderen, eindeutigen Namen.</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/> <source>Create Dynamic Property</source> <translation>Dynamische Eigenschaft erzeugen</translation> </message> <message> - <location/> <source>Property Name</source> <translation>Name der Eigenschaft</translation> </message> <message> - <location/> <source>Property Type</source> <translation>Typ der Eigenschaft</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="+4"/> <source>The '_q_' prefix is reserved for the Qt library. Please select another name.</source> <translation>Der Präfix '_q_' wird von der Qt-Bibliothek für interne Zwecke verwendet.Bitte wählen Sie einen anderen Namen.</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/> <source>horizontalSpacer</source> <translation></translation> </message> @@ -5468,83 +4482,67 @@ Please select another name.</source> <context> <name>qdesigner_internal::NewFormWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="+104"/> <source>Default size</source> <translation>Vorgabe</translation> </message> <message> - <location line="+1"/> <source>QVGA portrait (240x320)</source> <translation>QVGA Hochformat (240x320)</translation> </message> <message> - <location line="+1"/> <source>QVGA landscape (320x240)</source> <translation>QVGA Querformat (320x240)</translation> </message> <message> - <location line="+1"/> <source>VGA portrait (480x640)</source> <translation>VGA Hochformat (480x640)</translation> </message> <message> - <location line="+1"/> <source>VGA landscape (640x480)</source> <translation>VGA Querformat (640x480)</translation> </message> <message> - <location line="+66"/> <source>Widgets</source> <extracomment>New Form Dialog Categories</extracomment> <translation>Widgets</translation> </message> <message> - <location line="+1"/> <source>Custom Widgets</source> <translation>Benutzerdefinierte Widgets</translation> </message> <message> - <location line="+18"/> <source>None</source> <translation>Kein</translation> </message> <message> - <location line="+57"/> <source>Error loading form</source> <translation>Das Formular konnte nicht geladen werden</translation> </message> <message> - <location line="+244"/> <source>Unable to open the form template file '%1': %2</source> <translation>Die Formularvorlage '%1' konnte nicht geöffnet werden: %2</translation> </message> <message> - <location line="+67"/> <source>Internal error: No template selected.</source> <translation>Interner Fehler: Es ist keine Vorlage selektiert.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.ui"/> <source>0</source> <translation>0</translation> </message> <message> - <location/> <source>Choose a template for a preview</source> <translation>Wählen Sie eine Vorlage für die Vorschau</translation> </message> <message> - <location/> <source>Embedded Design</source> <translation>Embedded-Entwurf</translation> </message> <message> - <location/> <source>Device:</source> <translation>Geräteprofil:</translation> </message> <message> - <location/> <source>Screen Size:</source> <translation>Bildschirmgröße:</translation> </message> @@ -5552,37 +4550,30 @@ Please select another name.</source> <context> <name>qdesigner_internal::NewPromotedClassPanel</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+92"/> <source>Add</source> <translation>Hinzufügen</translation> </message> <message> - <location line="+2"/> <source>New Promoted Class</source> <translation>Neue Klasse</translation> </message> <message> - <location line="+15"/> <source>Base class name:</source> <translation>Basisklasse:</translation> </message> <message> - <location line="+1"/> <source>Promoted class name:</source> <translation>Klassenname:</translation> </message> <message> - <location line="+1"/> <source>Header file:</source> <translation>Include-Datei:</translation> </message> <message> - <location line="+1"/> <source>Global include</source> <translation>Globale Include-Datei</translation> </message> <message> - <location line="+11"/> <source>Reset</source> <translation>Rücksetzen</translation> </message> @@ -5590,12 +4581,10 @@ Please select another name.</source> <context> <name>qdesigner_internal::ObjectInspector</name> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+316"/> <source>Change Current Page</source> <translation>Seite wechseln</translation> </message> <message> - <location line="+438"/> <source>&Find in Text...</source> <translation>&Suchen...</translation> </message> @@ -5603,32 +4592,26 @@ Please select another name.</source> <context> <name>qdesigner_internal::OrderDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="+109"/> <source>Index %1 (%2)</source> <translation>Position %1 (%2)</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.ui"/> <source>Change Page Order</source> <translation>Seiten umordnen</translation> </message> <message> - <location/> <source>Page Order</source> <translation>Reihenfolge</translation> </message> <message> - <location/> <source>Move page up</source> <translation>Seite eins nach oben</translation> </message> <message> - <location/> <source>Move page down</source> <translation>Seite eins nach unten</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="+3"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> @@ -5636,47 +4619,38 @@ Please select another name.</source> <context> <name>qdesigner_internal::PaletteEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui"/> <source>Edit Palette</source> <translation>Palette ändern</translation> </message> <message> - <location/> <source>Tune Palette</source> <translation>Palette</translation> </message> <message> - <location/> <source>Show Details</source> <translation>Details einblenden</translation> </message> <message> - <location/> <source>Compute Details</source> <translation>Details berechnen</translation> </message> <message> - <location/> <source>Quick</source> <translation>Einfach</translation> </message> <message> - <location/> <source>Preview</source> <translation>Vorschau</translation> </message> <message> - <location/> <source>Disabled</source> <translation>Ausgegraut</translation> </message> <message> - <location/> <source>Inactive</source> <translation>Inaktiv</translation> </message> <message> - <location/> <source>Active</source> <translation>Aktiv</translation> </message> @@ -5684,7 +4658,6 @@ Please select another name.</source> <context> <name>qdesigner_internal::PaletteEditorButton</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditorbutton.cpp" line="+57"/> <source>Change Palette</source> <translation>Palette ändern</translation> </message> @@ -5692,22 +4665,18 @@ Please select another name.</source> <context> <name>qdesigner_internal::PaletteModel</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="+374"/> <source>Color Role</source> <translation>Farbrolle</translation> </message> <message> - <location line="+2"/> <source>Active</source> <translation>Aktiv</translation> </message> <message> - <location line="+2"/> <source>Inactive</source> <translation>Inaktiv</translation> </message> <message> - <location line="+2"/> <source>Disabled</source> <translation>Ausgegraut</translation> </message> @@ -5715,28 +4684,22 @@ Please select another name.</source> <context> <name>qdesigner_internal::PixmapEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-1539"/> <source>Copy Path</source> <translation>Pfad kopieren</translation> </message> <message> - <location line="+1"/> <source>Paste Path</source> <translation>Pfad einfügen</translation> </message> <message> - <location line="-3"/> <source>Choose Resource...</source> <translation>Ressource auswählen...</translation> </message> <message> - <location line="+1"/> <source>Choose File...</source> <translation>Datei auswählen...</translation> </message> <message> - <location line="+8"/> - <location line="+16"/> <source>...</source> <translation>...</translation> </message> @@ -5744,7 +4707,6 @@ Please select another name.</source> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/plaintexteditor.cpp" line="+65"/> <source>Edit text</source> <translation>Text bearbeiten</translation> </message> @@ -5752,37 +4714,30 @@ Please select another name.</source> <context> <name>qdesigner_internal::PluginDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="+72"/> <source>Components</source> <translation>Komponenten</translation> </message> <message> - <location line="+13"/> <source>Plugin Information</source> <translation>Plugins</translation> </message> <message> - <location line="+4"/> <source>Refresh</source> <translation>Neu laden</translation> </message> <message> - <location line="+1"/> <source>Scan for newly installed custom widget plugins.</source> <translation>Nach neu installierten Plugins mit benutzerdefinierten Widgets suchen.</translation> </message> <message> - <location line="+48"/> <source>Qt Designer couldn't find any plugins</source> <translation>Qt Designer kann keine Plugins finden</translation> </message> <message> - <location line="+3"/> <source>Qt Designer found the following plugins</source> <translation>Qt Designer hat die folgenden Plugins gefunden</translation> </message> <message> - <location line="+55"/> <source>New custom widget plugins have been found.</source> <translation>Es wurden neu installierte Plugins mit benutzerdefinierten Widgets gefunden.</translation> </message> @@ -5790,7 +4745,6 @@ Please select another name.</source> <context> <name>qdesigner_internal::PreviewActionGroup</name> <message> - <location filename="../tools/designer/src/components/formeditor/previewactiongroup.cpp" line="+95"/> <source>%1 Style</source> <translation>%1-Stil</translation> </message> @@ -5798,47 +4752,38 @@ Please select another name.</source> <context> <name>qdesigner_internal::PreviewConfigurationWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="+139"/> <source>Default</source> <translation>Vorgabe</translation> </message> <message> - <location line="+22"/> <source>None</source> <translation>Kein</translation> </message> <message> - <location line="+6"/> <source>Browse...</source> <translation>Durchsuchen...</translation> </message> <message> - <location line="+118"/> <source>Load Custom Device Skin</source> <translation>Benutzerdefinierten Geräte-Skin laden </translation> </message> <message> - <location line="+2"/> <source>All QVFB Skins (*.%1)</source> <translation>Alle QVFB-Skins (*.%1)</translation> </message> <message> - <location line="+16"/> <source>%1 - Duplicate Skin</source> <translation>%1 - Skin bereits vorhanden</translation> </message> <message> - <location line="+1"/> <source>The skin '%1' already exists.</source> <translation>Der Skin '%1' ist bereits vorhanden.</translation> </message> <message> - <location line="+14"/> <source>%1 - Error</source> <translation>%1 - Fehler</translation> </message> <message> - <location line="+1"/> <source>%1 is not a valid skin directory: %2</source> <translation>%1 ist kein gültiges Verzeichnis eines Skins: @@ -5848,24 +4793,20 @@ Please select another name.</source> <context> <name>qdesigner_internal::PreviewDeviceSkin</name> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="+259"/> <source>&Portrait</source> <translation>&Hochformat</translation> </message> <message> - <location line="+2"/> <source>Landscape (&CCW)</source> <extracomment>Rotate form preview counter-clockwise</extracomment> <translation>Querformat (&entgegen Uhrzeigersinn)</translation> </message> <message> - <location line="+2"/> <source>&Landscape (CW)</source> <extracomment>Rotate form preview clockwise</extracomment> <translation>Querformat (im &Uhrzeigersinn)</translation> </message> <message> - <location line="+1"/> <source>&Close</source> <translation>&Schließen</translation> </message> @@ -5873,7 +4814,6 @@ Please select another name.</source> <context> <name>qdesigner_internal::PreviewManager</name> <message> - <location line="+426"/> <source>%1 - [Preview]</source> <translation>%1 - [Vorschau]</translation> </message> @@ -5881,7 +4821,6 @@ Please select another name.</source> <context> <name>qdesigner_internal::PreviewMdiArea</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewframe.cpp" line="+72"/> <source>The moose in the noose ate the goose who was loose.</source> <extracomment>Palette editor background</extracomment> @@ -5891,57 +4830,46 @@ ate the goose who was loose.</source> <context> <name>qdesigner_internal::PreviewWidget</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui"/> <source>Preview Window</source> <translation>Vorschaufenster</translation> </message> <message> - <location/> <source>LineEdit</source> <translation></translation> </message> <message> - <location/> <source>ComboBox</source> <translation></translation> </message> <message> - <location/> <source>PushButton</source> <translation></translation> </message> <message> - <location/> <source>ButtonGroup2</source> <translation></translation> </message> <message> - <location/> <source>CheckBox1</source> <translation></translation> </message> <message> - <location/> <source>CheckBox2</source> <translation></translation> </message> <message> - <location/> <source>ButtonGroup</source> <translation></translation> </message> <message> - <location/> <source>RadioButton1</source> <translation></translation> </message> <message> - <location/> <source>RadioButton2</source> <translation></translation> </message> <message> - <location/> <source>RadioButton3</source> <translation></translation> </message> @@ -5949,22 +4877,18 @@ ate the goose who was loose.</source> <context> <name>qdesigner_internal::PromotionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="+17"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+1"/> <source>Header file</source> <translation>Include-Datei</translation> </message> <message> - <location line="+1"/> <source>Global include</source> <translation>Globale Include-Datei</translation> </message> <message> - <location line="+1"/> <source>Usage</source> <translation>Verwendet</translation> </message> @@ -5972,27 +4896,22 @@ ate the goose who was loose.</source> <context> <name>qdesigner_internal::PromotionTaskMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="+85"/> <source>Promoted widgets...</source> <translation>Benutzerdefinierte Klassen...</translation> </message> <message> - <location line="+1"/> <source>Promote to ...</source> <translation>Als Platzhalter für benutzerdefinierte Klasse festlegen...</translation> </message> <message> - <location line="+2"/> <source>Promote to</source> <translation>Als Platzhalter für benutzerdefinierte Klasse festlegen</translation> </message> <message> - <location line="+1"/> <source>Demote to %1</source> <translation>Platzhalter für benutzerdefinierte Klasse entfernen und in %1 wandeln</translation> </message> <message> - <location line="-2"/> <source>Change signals/slots...</source> <translation>Signale/Slots ändern...</translation> </message> @@ -6000,59 +4919,48 @@ ate the goose who was loose.</source> <context> <name>qdesigner_internal::PropertyEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+231"/> <source>Add Dynamic Property...</source> <translation>Dynamische Eigenschaft hinzufügen...</translation> </message> <message> - <location line="+1"/> <source>Remove Dynamic Property</source> <translation>Dynamische Eigenschaft löschen</translation> </message> <message> - <location line="+3"/> <source>Tree View</source> <translation>Baumansicht</translation> </message> <message> - <location line="+1"/> <source>Drop Down Button View</source> <translation>Detailansicht</translation> </message> <message> - <location line="+598"/> <source>Object: %1 Class: %2</source> <translation>Objekt: %1 Klasse: %2</translation> </message> <message> - <location line="-601"/> <source>Sorting</source> <translation>Sortiert</translation> </message> <message> - <location line="+1"/> <source>Color Groups</source> <translation>Farbige Hervorhebung</translation> </message> <message> - <location line="+61"/> <source>Configure Property Editor</source> <translation>Anzeige der Eigenschaften konfigurieren</translation> </message> <message> - <location line="-14"/> <source>String...</source> <translation>Zeichenkette...</translation> </message> <message> - <location line="+3"/> <source>Bool...</source> <translation>Boolescher Wert...</translation> </message> <message> - <location line="+4"/> <source>Other...</source> <translation>Anderer Typ...</translation> </message> @@ -6060,7 +4968,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::PropertyLineEdit</name> <message> - <location filename="../tools/designer/src/lib/shared/propertylineedit.cpp" line="+88"/> <source>Insert line break</source> <translation>Zeilenumbruch einfügen</translation> </message> @@ -6068,27 +4975,22 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::QDesignerPromotionDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="+85"/> <source>Promoted Widgets</source> <translation>Platzhalter für benutzerdefinierte Widgets</translation> </message> <message> - <location line="+7"/> <source>Promoted Classes</source> <translation>Platzhalter für benutzerdefinierte Klassen</translation> </message> <message> - <location line="+60"/> <source>Promote</source> <translation>Anwenden</translation> </message> <message> - <location line="+169"/> <source>%1 - Error</source> <translation>%1 - Fehler</translation> </message> <message> - <location line="-17"/> <source>Change signals/slots...</source> <translation>Signale/Slots ändern...</translation> </message> @@ -6096,22 +4998,18 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::QDesignerResource</name> <message> - <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+277"/> <source>Loading qrc file</source> <translation>Laden der Ressourcendatei</translation> </message> <message> - <location line="+1"/> <source>The specified qrc file <p><b>%1</b></p><p>could not be found. Do you want to update the file location?</p></source> <translation>Die Ressourcendatei <p><b>%1</b></p><p> konnte nicht gefunden werden. Möchten Sie einen neuen Pfad eingeben?</p></translation> </message> <message> - <location line="+6"/> <source>New location for %1</source> <translation>Neuer Pfad für %1</translation> </message> <message> - <location line="+1"/> <source>Resource files (*.qrc)</source> <translation>Ressourcendateien (*.qrc)</translation> </message> @@ -6119,67 +5017,54 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::QDesignerTaskMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="+68"/> <source>Change objectName...</source> <translation>Objektnamen ändern...</translation> </message> <message> - <location line="+1"/> <source>Change toolTip...</source> <translation>ToolTip ändern...</translation> </message> <message> - <location line="+1"/> <source>Change whatsThis...</source> <translation>WhatsThis ändern...</translation> </message> <message> - <location line="+1"/> <source>Change styleSheet...</source> <translation>Stylesheet ändern...</translation> </message> <message> - <location line="+3"/> <source>Create Menu Bar</source> <translation>Menüleiste erzeugen</translation> </message> <message> - <location line="+1"/> <source>Add Tool Bar</source> <translation>Werkzeugleiste hinzufügen</translation> </message> <message> - <location line="+1"/> <source>Create Status Bar</source> <translation>Statuszeile hinzufügen</translation> </message> <message> - <location line="+1"/> <source>Remove Status Bar</source> <translation>Statuszeile löschen</translation> </message> <message> - <location line="+1"/> <source>Change script...</source> <translation>Skript ändern...</translation> </message> <message> - <location line="+1"/> <source>Change signals/slots...</source> <translation>Signale/Slots ändern...</translation> </message> <message> - <location line="+1"/> <source>Go to slot...</source> <translation>Slot anzeigen...</translation> </message> <message> - <location line="+413"/> <source>no signals available</source> <translation>Es sind keine Signale vorhanden</translation> </message> <message numerus="yes"> - <location line="+67"/> <source>Set size constraint on %n widget(s)</source> <translation> <numerusform>Größenbeschränkung eines Widgets festlegen</numerusform> @@ -6187,47 +5072,38 @@ Klasse: %2</translation> </translation> </message> <message> - <location line="-477"/> <source>Size Constraints</source> <translation>Größe</translation> </message> <message> - <location line="+4"/> <source>Set Minimum Width</source> <translation>Minimalbreite festlegen</translation> </message> <message> - <location line="+4"/> <source>Set Minimum Height</source> <translation>Minimalhöhe festlegen</translation> </message> <message> - <location line="+4"/> <source>Set Minimum Size</source> <translation>Minimalgröße festlegen</translation> </message> <message> - <location line="+6"/> <source>Set Maximum Width</source> <translation>Maximalbreite festlegen</translation> </message> <message> - <location line="+4"/> <source>Set Maximum Height</source> <translation>Maximalhöhe festlegen</translation> </message> <message> - <location line="+4"/> <source>Set Maximum Size</source> <translation>Maximalgröße festlegen</translation> </message> <message> - <location line="+235"/> <source>Edit ToolTip</source> <translation>ToolTip bearbeiten</translation> </message> <message> - <location line="+5"/> <source>Edit WhatsThis</source> <translation>What'sThis bearbeiten</translation> </message> @@ -6235,41 +5111,33 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::QDesignerWidgetBox</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="+123"/> - <location line="+13"/> <source>Unexpected element <%1></source> <translation>Ungültiges Element <%1></translation> </message> <message> - <location line="+7"/> <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4 %5</source> <translation>Der XML-Code für das Widget %3 enthält einen Fehler bei Zeile %1, Spalte %2:%4: %5</translation> </message> <message> - <location line="+9"/> <source>The XML code specified for the widget %1 does not contain any widget elements. %2</source> <translation>Der XML-Code für das Widget %1 enthält keine Widgets.%2</translation> </message> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="+349"/> <source>An error has been encountered at line %1 of %2: %3</source> <translation>Fehler bei Zeile %1 von %2: %3</translation> </message> <message> - <location line="+139"/> <source>Unexpected element <%1> encountered when parsing for <widget> or <ui></source> <translation>An Stelle des erwarteten <widget>- oder <ui>-Elementes wurde <%1> gefunden</translation> </message> <message> - <location line="+19"/> <source>Unexpected end of file encountered when parsing widgets.</source> <translation>Vorzeitiges Dateiende beim Lesen der Widget-Box-Konfiguration.</translation> </message> <message> - <location line="+9"/> <source>A widget element could not be found.</source> <translation>Es fehlt das Widget-Element.</translation> </message> @@ -6277,73 +5145,58 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::QtGradientStopsController</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="+173"/> <source>H</source> <translation>H</translation> </message> <message> - <location line="+1"/> <source>S</source> <translation>S</translation> </message> <message> - <location line="+1"/> <source>V</source> <translation>V</translation> </message> <message> - <location line="+6"/> - <location line="+4"/> <source>Hue</source> <translation>Farbton</translation> </message> <message> - <location line="-3"/> <source>Sat</source> <translation>Sättigung</translation> </message> <message> - <location line="+1"/> <source>Val</source> <translation>Wert</translation> </message> <message> - <location line="+3"/> <source>Saturation</source> <translation>Sättigung</translation> </message> <message> - <location line="+1"/> <source>Value</source> <translation>Wert</translation> </message> <message> - <location line="+22"/> <source>R</source> <translation>R</translation> </message> <message> - <location line="+1"/> <source>G</source> <translation>G</translation> </message> <message> - <location line="+1"/> <source>B</source> <translation>B</translation> </message> <message> - <location line="+6"/> <source>Red</source> <translation>Rot</translation> </message> <message> - <location line="+1"/> <source>Green</source> <translation>Grün</translation> </message> <message> - <location line="+1"/> <source>Blue</source> <translation>Blau</translation> </message> @@ -6351,27 +5204,22 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::RichTextEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="+436"/> <source>Edit text</source> <translation>Text bearbeiten</translation> </message> <message> - <location line="+30"/> <source>&OK</source> <translation>&OK</translation> </message> <message> - <location line="+2"/> <source>&Cancel</source> <translation>&Abbrechen</translation> </message> <message> - <location line="-9"/> <source>Rich Text</source> <translation>Text</translation> </message> <message> - <location line="+1"/> <source>Source</source> <translation>Quelltext</translation> </message> @@ -6379,72 +5227,58 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::RichTextEditorToolBar</name> <message> - <location line="-294"/> <source>Bold</source> <translation>Fett</translation> </message> <message> - <location line="+1"/> <source>CTRL+B</source> <translation>CTRL+F</translation> </message> <message> - <location line="+5"/> <source>Italic</source> <translation>Kursiv</translation> </message> <message> - <location line="+1"/> <source>CTRL+I</source> <translation>CTRL+K</translation> </message> <message> - <location line="+5"/> <source>Underline</source> <translation>Unterstreichen</translation> </message> <message> - <location line="+1"/> <source>CTRL+U</source> <translation>CTRL+U</translation> </message> <message> - <location line="+13"/> <source>Left Align</source> <translation>Linksbündig ausrichten</translation> </message> <message> - <location line="+5"/> <source>Center</source> <translation>Zentrieren</translation> </message> <message> - <location line="+5"/> <source>Right Align</source> <translation>Rechtsbündig ausrichten</translation> </message> <message> - <location line="+5"/> <source>Justify</source> <translation>Blocksatz</translation> </message> <message> - <location line="+9"/> <source>Superscript</source> <translation>Hochstellung</translation> </message> <message> - <location line="+6"/> <source>Subscript</source> <translation>Tiefstellung</translation> </message> <message> - <location line="+9"/> <source>Insert &Link</source> <translation>&Link einfügen</translation> </message> <message> - <location line="+5"/> <source>Insert &Image</source> <translation>&Bild einfügen</translation> </message> @@ -6452,17 +5286,14 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::ScriptDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="+66"/> <source>Edit script</source> <translation>Skript bearbeiten</translation> </message> <message> - <location line="+56"/> <source>Syntax error</source> <translation>Syntaxfehler</translation> </message> <message> - <location line="-51"/> <source><html>Enter a Qt Script snippet to be executed while loading the form.<br>The widget and its children are accessible via the variables <i>widget</i> and <i>childWidgets</i>, respectively.</source> <translation><html>Geben Sie ein Qt-Skript zur Ausführung während des Formularaufbaus ein.<br>Auf das Widget und seine untergeordneten Widgets kann durch die Variablen <i>widget</i> und <i>childWidgets</i> zugegriffen werden.</translation> </message> @@ -6470,7 +5301,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::ScriptErrorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="+27"/> <source>Script errors</source> <translation>Skriptfehler</translation> </message> @@ -6478,23 +5308,18 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::SignalSlotDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="+199"/> <source>There is already a slot with the signature '%1'.</source> <translation>Es existiert bereits ein Slot mit der Signatur '%1'.</translation> </message> <message> - <location line="+5"/> <source>There is already a signal with the signature '%1'.</source> <translation>Es existiert bereits ein Signal mit der Signatur '%1'.</translation> </message> <message> - <location line="+7"/> <source>%1 - Duplicate Signature</source> <translation>%1 - Doppelte Signatur</translation> </message> <message> - <location line="+21"/> - <location line="+76"/> <source>Signals/Slots of %1</source> <translation>Signale/Slots von %1</translation> </message> @@ -6502,12 +5327,10 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::SignalSlotEditorPlugin</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="+72"/> <source>Edit Signals/Slots</source> <translation>Signale und Slots bearbeiten</translation> </message> <message> - <location line="+2"/> <source>F4</source> <translation>F4</translation> </message> @@ -6515,7 +5338,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::SignalSlotEditorTool</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp" line="+58"/> <source>Edit Signals/Slots</source> <translation>Signale und Slots bearbeiten</translation> </message> @@ -6523,7 +5345,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::StatusBarTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/toolbar_taskmenu.cpp" line="+81"/> <source>Remove</source> <translation>Löschen</translation> </message> @@ -6531,7 +5352,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::StringListEditorButton</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditorbutton.cpp" line="+56"/> <source>Change String List</source> <translation>Zeichenkettenliste ändern</translation> </message> @@ -6539,38 +5359,30 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::StyleSheetEditorDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="+97"/> <source>Edit Style Sheet</source> <translation>Stylesheet bearbeiten</translation> </message> <message> - <location line="-7"/> - <location line="+280"/> <source>Valid Style Sheet</source> <translation>Stylesheet gültig</translation> </message> <message> - <location line="+3"/> <source>Invalid Style Sheet</source> <translation>Stylesheet ungültig</translation> </message> <message> - <location line="-281"/> <source>Add Resource...</source> <translation>Ressource hinzufügen...</translation> </message> <message> - <location line="+1"/> <source>Add Gradient...</source> <translation>Gradient hinzufügen...</translation> </message> <message> - <location line="+1"/> <source>Add Color...</source> <translation>Farbe hinzufügen...</translation> </message> <message> - <location line="+1"/> <source>Add Font...</source> <translation>Font hinzufügen...</translation> </message> @@ -6578,27 +5390,22 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TabOrderEditor</name> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="+363"/> <source>Start from Here</source> <translation>Hier neu beginnen</translation> </message> <message> - <location line="+3"/> <source>Restart</source> <translation>Neu beginnen</translation> </message> <message> - <location line="+2"/> <source>Tab Order List...</source> <translation>Tabulatorreihenfolge...</translation> </message> <message> - <location line="+44"/> <source>Tab Order List</source> <translation>Tabulatorreihenfolge</translation> </message> <message> - <location line="+1"/> <source>Tab Order</source> <translation>Tabulatorreihenfolge</translation> </message> @@ -6606,7 +5413,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TabOrderEditorPlugin</name> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_plugin.cpp" line="+73"/> <source>Edit Tab Order</source> <translation>Tabulatorreihenfolge bearbeiten</translation> </message> @@ -6614,7 +5420,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TabOrderEditorTool</name> <message> - <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_tool.cpp" line="+57"/> <source>Edit Tab Order</source> <translation>Tabulatorreihenfolge bearbeiten</translation> </message> @@ -6622,48 +5427,38 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TableWidgetEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+67"/> <source>New Column</source> <translation>Neue Spalte</translation> </message> <message> - <location line="+3"/> <source>New Row</source> <translation>Neue Zeile</translation> </message> <message> - <location line="+8"/> <source>&Columns</source> <translation>&Spalten</translation> </message> <message> - <location line="+1"/> <source>&Rows</source> <translation>&Zeilen</translation> </message> <message> - <location line="+137"/> <source>Properties &<<</source> <translation>Eigenschaften &<<</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui"/> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+2"/> <source>Properties &>></source> <translation>Eigenschaften &>></translation> </message> <message> - <location/> <source>Edit Table Widget</source> <translation>Table Widget ändern</translation> </message> <message> - <location/> <source>&Items</source> <translation>&Inhalt</translation> </message> <message> - <location/> <source>Table Items</source> <translation>Tabellenelemente</translation> </message> @@ -6671,7 +5466,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TableWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp" line="+64"/> <source>Edit Items...</source> <translation>Elemente ändern...</translation> </message> @@ -6679,22 +5473,18 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TemplateOptionsWidget</name> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="-18"/> <source>Pick a directory to save templates in</source> <translation>Wählen Sie ein Verzeichnis zum Abspeichern der Vorlagen aus</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui"/> <source>Form</source> <translation></translation> </message> <message> - <location/> <source>Additional Template Paths</source> <translation>Zusätzliche Verzeichnisse für Vorlagen</translation> </message> <message> - <location/> <source>...</source> <translation>...</translation> </message> @@ -6702,22 +5492,18 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TextEditTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="+59"/> <source>Change HTML...</source> <translation>HTML ändern...</translation> </message> <message> - <location line="-1"/> <source>Edit HTML</source> <translation>HTML bearbeiten</translation> </message> <message> - <location line="+10"/> <source>Edit Text</source> <translation>Text bearbeiten</translation> </message> <message> - <location line="+1"/> <source>Change Plain Text...</source> <translation>Text ändern...</translation> </message> @@ -6725,22 +5511,18 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TextEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="-204"/> <source>Choose Resource...</source> <translation>Ressource auswählen...</translation> </message> <message> - <location line="+1"/> <source>Choose File...</source> <translation>Datei auswählen...</translation> </message> <message> - <location line="+123"/> <source>Choose a File</source> <translation></translation> </message> <message> - <location line="-118"/> <source>...</source> <translation>...</translation> </message> @@ -6748,27 +5530,22 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::ToolBarEventFilter</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="+234"/> <source>Insert Separator</source> <translation>Trenner einfügen</translation> </message> <message> - <location line="-65"/> <source>Remove action '%1'</source> <translation>Aktion '%1' löschen</translation> </message> <message> - <location line="+7"/> <source>Remove Toolbar '%1'</source> <translation>Werkzeugleiste '%1' löschen</translation> </message> <message> - <location line="-28"/> <source>Insert Separator before '%1'</source> <translation>Trenner vor '%1' einfügen</translation> </message> <message> - <location line="+9"/> <source>Append Separator</source> <translation>Trenner hinzufügen</translation> </message> @@ -6776,125 +5553,98 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TreeWidgetEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+76"/> <source>&Columns</source> <translation>&Spalten</translation> </message> <message> - <location line="+69"/> <source>Per column properties</source> <translation>Spalteneigenschaften</translation> </message> <message> - <location line="+1"/> <source>Common properties</source> <translation>Gemeinsame Eigenschaften</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+53"/> <source>New Item</source> <translation>Neues Element</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+194"/> <source>Properties &<<</source> <translation>Eigenschaften &<<</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+2"/> <source>Properties &>></source> <translation>Eigenschaften &>></translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="-327"/> <source>New Column</source> <translation>Neue Spalte</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> <source>Edit Tree Widget</source> <translation>Tree Widget ändern</translation> </message> <message> - <location/> <source>&Items</source> <translation>&Inhalt</translation> </message> <message> - <location/> <source>Tree Items</source> <translation>Elemente</translation> </message> <message> - <location/> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+150"/> <source>New Subitem</source> <translation></translation> </message> <message> - <location/> <source>New &Subitem</source> <translation>Neues &untergeordnetes Element</translation> </message> <message> - <location/> <source>Delete Item</source> <translation>Element löschen</translation> </message> <message> - <location/> <source>Move Item Left (before Parent Item)</source> <translation>Element nach links (vor übergeordnetes Element)</translation> </message> <message> - <location/> <source>L</source> <translation>L</translation> </message> <message> - <location/> <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source> <translation>Element nach rechts (als untergeordnetes Element des nächsten gleichrangigen Elements)</translation> </message> <message> - <location/> <source>R</source> <translation>R</translation> </message> <message> - <location/> <source>Move Item Up</source> <translation>Element eins nach oben</translation> </message> <message> - <location/> <source>U</source> <translation>U</translation> </message> <message> - <location/> <source>Move Item Down</source> <translation>Element eins nach unten</translation> </message> <message> - <location/> <source>D</source> <translation>D</translation> </message> <message> - <location/> <source>1</source> <translation>1</translation> </message> <message> - <location/> <source>&New</source> <translation>&Neu</translation> </message> <message> - <location/> <source>&Delete</source> <translation>&Löschen</translation> </message> @@ -6902,7 +5652,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::TreeWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp" line="+63"/> <source>Edit Items...</source> <translation>Elemente ändern...</translation> </message> @@ -6910,7 +5659,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::WidgetBox</name> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetbox_dnditem.cpp" line="+115"/> <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source> <translation>Warnung: Die Erzeugung des Widgets in der Widget-Box schlug fehl. Das könnte durch fehlerhaften XML-Code benutzerdefinierter Widgets verursacht worden sein.</translation> </message> @@ -6918,42 +5666,34 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::WidgetBoxTreeWidget</name> <message> - <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="-268"/> <source>Scratchpad</source> <translation>Ablage</translation> </message> <message> - <location line="+370"/> <source>Custom Widgets</source> <translation>Benutzerdefinierte Widgets</translation> </message> <message> - <location line="+263"/> <source>Expand all</source> <translation>Alles aufklappen</translation> </message> <message> - <location line="+1"/> <source>Collapse all</source> <translation>Alles zuklappen</translation> </message> <message> - <location line="+3"/> <source>List View</source> <translation>Listenansicht</translation> </message> <message> - <location line="+1"/> <source>Icon View</source> <translation>Icon-Ansicht</translation> </message> <message> - <location line="+15"/> <source>Remove</source> <translation>Löschen</translation> </message> <message> - <location line="+2"/> <source>Edit name</source> <translation>Namen ändern</translation> </message> @@ -6961,7 +5701,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::WidgetDataBase</name> <message> - <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="-411"/> <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source> <translation>Es wurde ein Plugin gefunden, das ein benutzerdefiniertes Widget enthält, dessen Klassenname (%1) einer existierenden Klasse entspricht.</translation> </message> @@ -6969,7 +5708,6 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::WidgetEditorTool</name> <message> - <location filename="../tools/designer/src/components/formeditor/tool_widgeteditor.cpp" line="+67"/> <source>Edit Widgets</source> <translation>Widgets bearbeiten</translation> </message> @@ -6977,33 +5715,27 @@ Klasse: %2</translation> <context> <name>qdesigner_internal::WidgetFactory</name> <message> - <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="+263"/> <source>The custom widget factory registered for widgets of class %1 returned 0.</source> <translation>Die Factory für benutzerdefinierte Widgets der Klasse %1 gab einen 0-Zeiger zurück.</translation> </message> <message> - <location line="+44"/> <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source> <translation>Bei der Erzeugung von Widgets wurden widersprüchliche Klassennamen festgestellt: Die Factory für benutzerdefinierte Widgets der Klasse %1 gab ein Widget der Klasse %2 zurück.</translation> </message> <message> - <location line="+189"/> <source>The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source> <translation>Der Container '%1' (%2) hat keine Seite, auf der ein Layout angelegt werden könnte. Das deutet auf eine inkonsistente ui-Datei hin; wahrscheinlich wurde ein Layout direkt auf dem Container spezifiziert.</translation> </message> <message> - <location line="+53"/> <source>Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. This indicates an inconsistency in the ui-file.</source> <translation>Es wurde versucht, ein Layout auf das Widget '%1' (%2) zu setzen, welches bereits ein Layout vom Typ %3 hat. Das deutet auf eine Inkonsistenz in der ui-Datei hin.</translation> </message> <message> - <location line="+211"/> <source>Cannot create style '%1'.</source> <translation>Der Stil '%1' konnte nicht erzeugt werden.</translation> </message> <message> - <location line="-354"/> <source>%1 Widget</source> <translation>%1 Widget</translation> </message> @@ -7011,12 +5743,10 @@ This indicates an inconsistency in the ui-file.</source> <context> <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name> <message> - <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="-49"/> <source>Next</source> <translation>Nächste</translation> </message> <message> - <location line="+1"/> <source>Back</source> <translation>Vorige</translation> </message> @@ -7024,7 +5754,6 @@ This indicates an inconsistency in the ui-file.</source> <context> <name>qdesigner_internal::ZoomMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/zoomwidget.cpp" line="+84"/> <source>%1 %</source> <extracomment>Zoom factor</extracomment> <translation>%1 %</translation> @@ -7033,7 +5762,6 @@ This indicates an inconsistency in the ui-file.</source> <context> <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name> <message> - <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="-270"/> <source>&Zoom</source> <translation>&Vergrößern</translation> </message> diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts index 5597458..b4e0a45 100644 --- a/translations/linguist_de.ts +++ b/translations/linguist_de.ts @@ -4,7 +4,6 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1366"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> @@ -12,27 +11,22 @@ <context> <name>BatchTranslationDialog</name> <message> - <location filename="../tools/linguist/linguist/batchtranslationdialog.cpp" line="+79"/> <source>Batch Translation of '%1' - Qt Linguist</source> <translation>Automatische Übersetzung von '%1' - Qt Linguist</translation> </message> <message> - <location line="+37"/> <source>Searching, please wait...</source> <translation>Suche, bitte warten ...</translation> </message> <message> - <location line="+0"/> <source>&Cancel</source> <translation>&Abbrechen</translation> </message> <message> - <location line="+42"/> <source>Linguist batch translator</source> <translation>Automatischer Übersetzer (Linguist)</translation> </message> <message numerus="yes"> - <location line="+1"/> <source>Batch translated %n entries</source> <translation> <numerusform>1 Eintrag wurde automatisch übersetzt</numerusform> @@ -40,62 +34,50 @@ </translation> </message> <message> - <location filename="../tools/linguist/linguist/batchtranslation.ui"/> <source>Qt Linguist - Batch Translation</source> <translation>Qt Linguist - Automatische Übersetzung</translation> </message> <message> - <location/> <source>Options</source> <translation>Optionen</translation> </message> <message> - <location/> <source>Set translated entries to finished</source> <translation>Übersetzung als erledigt markieren</translation> </message> <message> - <location/> <source>Retranslate entries with existing translation</source> <translation>Einträge mit bereits existierender Übersetzung neu übersetzen</translation> </message> <message> - <location/> <source>Translate also finished entries</source> <translation>Erledigte Einträge übersetzen</translation> </message> <message> - <location/> <source>Phrase book preference</source> <translation>Wörterbücher</translation> </message> <message> - <location/> <source>Move up</source> <translation>Nach oben</translation> </message> <message> - <location/> <source>Move down</source> <translation>Nach unten</translation> </message> <message> - <location/> <source>&Run</source> <translation>&Ausführen</translation> </message> <message> - <location/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location/> <source>Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked</source> <translation>Geänderte Einträge werden als unerledigt gekennzeichnet, wenn die obige Einstellung 'Übersetzung als erledigt markieren' nicht aktiviert ist</translation> </message> <message> - <location/> <source>The batch translator will search through the selected phrase books in the order given above</source> <translation>Der automatische Übersetzer wird in der angegebenen Reihenfolge durch die ausgewählten Wörterbücher gehen</translation> </message> @@ -103,45 +85,36 @@ <context> <name>DataModel</name> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+214"/> <source><qt>Duplicate messages found in '%1':</source> <translation><qt>Mehrfach vorhandene Meldungen in '%1':</translation> </message> <message> - <location line="+4"/> - <location line="+8"/> <source><p>[more duplicates omitted]</source> <translation><p>[weitere mehrfach vorhandene Nachrichten weggelassen]</translation> </message> <message> - <location line="-5"/> <source><p>* ID: %1</source> <translation><p>* ID: %1</translation> </message> <message> - <location line="+8"/> <source><p>* Context: %1<br>* Source: %2</source> <translation><p>* Kontext: %1<br>* Quelle: %2</translation> </message> <message> - <location line="+3"/> <source><br>* Comment: %3</source> <translation><br>* Kommentar: %3</translation> </message> <message> - <location line="+71"/> <source>Linguist does not know the plural rules for '%1'. Will assume a single universal form.</source> <translation>Die Regeln zur Pluralbildung der Sprache '%1' sind in Linguist nicht definiert. Es wird mit einer einfachen Universalform gearbeitet.</translation> </message> <message> - <location line="+56"/> <source>Cannot create '%2': %1</source> <translation>'%2' kann nicht erzeugt werden: %1</translation> </message> <message> - <location line="+56"/> <source>Universal Form</source> <translation>Universalform</translation> </message> @@ -149,37 +122,30 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>ErrorsView</name> <message> - <location filename="../tools/linguist/linguist/errorsview.cpp" line="+76"/> <source>Accelerator possibly superfluous in translation.</source> <translation>Möglicherweise überflüssiger Kurzbefehl im Übersetzungstext.</translation> </message> <message> - <location line="+3"/> <source>Accelerator possibly missing in translation.</source> <translation>Kurzbefehl fehlt im Übersetzungstext.</translation> </message> <message> - <location line="+3"/> <source>Translation does not end with the same punctuation as the source text.</source> <translation>Interpunktion am Ende des Übersetzungstextes unterscheidet sich von Interpunktion des Ursprungstextes.</translation> </message> <message> - <location line="+3"/> <source>A phrase book suggestion for '%1' was ignored.</source> <translation>Ein Vorschlag aus dem Wörterbuch für '%1' wurde nicht berücksichtigt.</translation> </message> <message> - <location line="+3"/> <source>Translation does not refer to the same place markers as in the source text.</source> <translation>Platzhalter im Übersetzungstext und Ursprungstext unterscheiden sich.</translation> </message> <message> - <location line="+3"/> <source>Translation does not contain the necessary %n place marker.</source> <translation>Der erforderliche Platzhalter (%n) fehlt in der Übersetzung.</translation> </message> <message> - <location line="+3"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> @@ -187,97 +153,78 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>FindDialog</name> <message> - <location filename="../tools/linguist/linguist/finddialog.ui"/> <source>This window allows you to search for some text in the translation source file.</source> <translation>Dieses Fenster erlaubt die Suche in der Übersetzungsdatei.</translation> </message> <message> - <location/> <source>Type in the text to search for.</source> <translation>Geben Sie den Text ein, nach dem gesucht werden soll.</translation> </message> <message> - <location/> <source>Options</source> <translation>Optionen</translation> </message> <message> - <location/> <source>Source texts are searched when checked.</source> <translation>Wenn aktiviert, wird in den Ursprungstexten gesucht.</translation> </message> <message> - <location/> <source>Translations are searched when checked.</source> <translation>Wenn ausgewählt, wird in den Übersetzungen gesucht.</translation> </message> <message> - <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation>Wenn aktiviert, werden Texte wie 'TeX' und 'tex' als unterschiedlich betrachtet.</translation> </message> <message> - <location/> <source>Comments and contexts are searched when checked.</source> <translation>Wenn ausgewählt, werden Kommentare und Kontextnamen durchsucht.</translation> </message> <message> - <location/> <source>Find</source> <translation>Suchen</translation> </message> <message> - <location/> <source>&Find what:</source> <translation>&Suchmuster:</translation> </message> <message> - <location/> <source>&Source texts</source> <translation>&Ursprungstexte</translation> </message> <message> - <location/> <source>&Translations</source> <translation>&Übersetzungen</translation> </message> <message> - <location/> <source>&Match case</source> <translation>&Groß-/Kleinschreibung beachten</translation> </message> <message> - <location/> <source>&Comments</source> <translation>&Kommentare</translation> </message> <message> - <location/> <source>Ignore &accelerators</source> <translation>Tastenkürzel &ignorieren</translation> </message> <message> - <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation>Klicken Sie hier, um zum nächsten Vorkommen des Suchtextes zu springen.</translation> </message> <message> - <location/> <source>Find Next</source> <translation>Weitersuchen</translation> </message> <message> - <location/> <source>Click here to close this window.</source> <translation>Klicken Sie hier, um das Fenster zu schließen.</translation> </message> <message> - <location/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location filename="../tools/linguist/linguist/finddialog.cpp" line="+12"/> <source></source> <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment> <translation></translation> @@ -286,30 +233,25 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>FormMultiWidget</name> <message> - <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+302"/> <source>Alt+Delete</source> <extracomment>translate, but don't change</extracomment> <translation>Alt+Delete</translation> </message> <message> - <location line="+1"/> <source>Shift+Alt+Insert</source> <extracomment>translate, but don't change</extracomment> <translation>Shift+Alt+Insert</translation> </message> <message> - <location line="+1"/> <source>Alt+Insert</source> <extracomment>translate, but don't change</extracomment> <translation>Alt+Insert</translation> </message> <message> - <location line="+131"/> <source>Confirmation - Qt Linguist</source> <translation>Bestätigung - Qt Linguist</translation> </message> <message> - <location line="+1"/> <source>Delete non-empty length variant?</source> <translation>Soll die ausgefüllte Längenvariante gelöscht werden?</translation> </message> @@ -317,7 +259,6 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>LRelease</name> <message numerus="yes"> - <location filename="../tools/linguist/shared/qm.cpp" line="+763"/> <source>Dropped %n message(s) which had no ID.</source> <translation> <numerusform>Es wurde ein Eintrag ohne Bezeichner gelöscht.</numerusform> @@ -325,7 +266,6 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> </translation> </message> <message numerus="yes"> - <location line="+4"/> <source>Excess context/disambiguation dropped from %n message(s).</source> <translation> <numerusform>Es wurde überflüssiger Kontext beziehungsweise überflüssige Infomation zur Unterscheidung bei einem Eintrag entfernt.</numerusform> @@ -333,10 +273,23 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> </translation> </message> <message numerus="yes"> - <location line="+8"/> + <source> Generated %n translation(s) (%1 finished and %2 unfinished)</source> + <translation> + <numerusform> Eine Übersetzung wurde erzeugt (%1 abgeschlossen und %2 nicht abgeschlossen)</numerusform> + <numerusform> %n Übersetzungen wurden erzeugt (%1 abgeschlossen und %2 nicht abgeschlossen)</numerusform> + </translation> + </message> + <message numerus="yes"> + <source> Ignored %n untranslated source text(s)</source> + <translation> + <numerusform> Ein nicht übersetzter Text wurde ignoriert</numerusform> + <numerusform> %n nicht übersetzte Texte wurden ignoriert</numerusform> + </translation> + </message> + <message numerus="yes"> <source> Generated %n translation(s) (%1 finished and %2 unfinished) </source> - <translation> + <translation type="obsolete"> <numerusform> Eine Übersetzung wurde erzeugt (%1 abgeschlossen und %2 nicht abgeschlossen) </numerusform> <numerusform> %n Übersetzungen wurden erzeugt (%1 abgeschlossene und %2 nicht abgeschlossene) @@ -344,10 +297,9 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> </translation> </message> <message numerus="yes"> - <location line="+4"/> <source> Ignored %n untranslated source text(s) </source> - <translation> + <translation type="obsolete"> <numerusform> Ein nicht übersetzter Text wurde ignoriert </numerusform> <numerusform> %n nicht übersetzte Texte wurden ignoriert @@ -358,628 +310,496 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>MainWindow</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>MainWindow</source> <translation>Hauptfenster</translation> </message> <message> - <location/> <source>&Phrases</source> <translation>&Wörterbuch</translation> </message> <message> - <location/> <source>&Close Phrase Book</source> <translation>Wörterbuch &Schließen</translation> </message> <message> - <location/> <source>&Edit Phrase Book</source> <translation>Wörterbuch &bearbeiten</translation> </message> <message> - <location/> <source>&Print Phrase Book</source> <translation>Wörterbuch &drucken</translation> </message> <message> - <location/> <source>V&alidation</source> <translation>V&alidierung</translation> </message> <message> - <location/> <source>&View</source> <translation>&Ansicht</translation> </message> <message> - <location/> <source>Vie&ws</source> <translation>&Ansichten</translation> </message> <message> - <location/> <source>&Toolbars</source> <translation>&Werkzeugleisten</translation> </message> <message> - <location/> <source>&Help</source> <translation>&Hilfe</translation> </message> <message> - <location/> <source>&Translation</source> <translation>&Übersetzung</translation> </message> <message> - <location/> <source>&File</source> <translation>&Datei</translation> </message> <message> - <location/> <source>&Edit</source> <translation>&Bearbeiten</translation> </message> <message> - <location/> <source>&Open...</source> <translation>Ö&ffnen ...</translation> </message> <message> - <location/> <source>Open a Qt translation source file (TS file) for editing</source> <translation>Qt-Übersetzungsdatei (TS-Datei) zum Bearbeiten öffnen</translation> </message> <message> - <location/> <source>Ctrl+O</source> <translation>Ctrl+O</translation> </message> <message> - <location/> <source>E&xit</source> <translation>&Beenden</translation> </message> <message> - <location/> <source>Close this window and exit.</source> <translation>Dieses Fenster schließen und das Programm beenden.</translation> </message> <message> - <location/> <source>Ctrl+Q</source> <translation>Ctrl+Q</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+668"/> - <location line="+15"/> <source>&Save</source> <translation>&Speichern</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Save changes made to this Qt translation source file</source> <translation>Änderungen an der Qt-Übersetzungsdatei speichern</translation> </message> <message> - <location/> <source>Move to the previous unfinished item.</source> <translation>Zum vorherigen unerledigten Eintrag gehen.</translation> </message> <message> - <location/> <source>Move to the next unfinished item.</source> <translation>Zum nächsten unerledigten Eintrag gehen.</translation> </message> <message> - <location/> <source>Move to the previous item.</source> <translation>Zum vorigen Eintrag gehen.</translation> </message> <message> - <location/> <source>Move to the next item.</source> <translation>Zum nächsten Eintrag gehen.</translation> </message> <message> - <location/> <source>Mark this item as done and move to the next unfinished item.</source> <translation>Diesen Eintrag als erledigt markieren und zum nächsten unerledigten Eintrag gehen.</translation> </message> <message> - <location/> <source>Copy from source text</source> <translation>Ursprungstext übernehmen</translation> </message> <message> - <location/> <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source> <translation>Die Prüfung der Tastenkürzel, das heißt, die Übereinstimmung der kaufmännischen Und-Zeichen in Quelle und Übersetzung ein- bzw. ausschalten. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation> </message> <message> - <location/> <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source> <translation>Die Prüfung der Satzendezeichen am Ende des Textes ein- bzw. ausschalten. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation> </message> <message> - <location/> <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source> <translation>Die Prüfung der Verwendung der Wörterbuchvorschläge ein- bzw. ausschalten. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation> </message> <message> - <location/> <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source> <translation>Die Prüfung der Platzhalter, das heißt, ob %1, %2 usw. in Ursprungstext und Übersetzung übereinstimmend verwendet werden, ein- bzw. ausschalten. Bei Fehlschlag wird eine Warnung im Hinweis-Fenster angezeigt.</translation> </message> <message> - <location/> <source>Open Read-O&nly...</source> <translation>Schr&eibgeschützt öffnen ...</translation> </message> <message> - <location/> <source>&Save All</source> <translation>&Alle speichern</translation> </message> <message> - <location/> <source>Ctrl+S</source> <translation>Ctrl+S</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-14"/> - <location line="+11"/> <source>Save &As...</source> <translation>Speichern &unter...</translation> </message> <message> - <location/> <source>Save As...</source> <translation>Speichern unter ...</translation> </message> <message> - <location/> <source>Save changes made to this Qt translation source file into a new file.</source> <translation>Änderungen an dieser Qt-Übersetzungsdatei in einer neuen Datei speichern.</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+4"/> <source>&Release</source> <translation>&Freigeben</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Create a Qt message file suitable for released applications from the current message file.</source> <translation>Qt-Nachrichtendatei (QM-Datei) aus der aktuellen Übersetzungsdatei erzeugen.</translation> </message> <message> - <location/> <source>&Print...</source> <translation>&Drucken ...</translation> </message> <message> - <location/> <source>Ctrl+P</source> <translation>Ctrl+P</translation> </message> <message> - <location/> <source>&Undo</source> <translation>&Rückgängig</translation> </message> <message> - <location/> <source>Recently Opened &Files</source> <translation>Zu&letzt bearbeitete Dateien</translation> </message> <message> - <location/> <source>Save</source> <translation>Speichern</translation> </message> <message> - <location/> <source>Print a list of all the translation units in the current translation source file.</source> <translation>Liste aller Übersetzungseinheiten in der aktuellen Übersetzungsdatei drucken.</translation> </message> <message> - <location/> <source>Undo the last editing operation performed on the current translation.</source> <translation>Die letzte Änderung an der Übersetzung rückgängig machen.</translation> </message> <message> - <location/> <source>Ctrl+Z</source> <translation>Ctrl+Z</translation> </message> <message> - <location/> <source>&Redo</source> <translation>&Wiederherstellen</translation> </message> <message> - <location/> <source>Redo an undone editing operation performed on the translation.</source> <translation>Die letzte rückgängig gemachte Änderung wieder herstellen.</translation> </message> <message> - <location/> <source>Ctrl+Y</source> <translation>Ctrl+Y</translation> </message> <message> - <location/> <source>Cu&t</source> <translation>&Ausschneiden</translation> </message> <message> - <location/> <source>Copy the selected translation text to the clipboard and deletes it.</source> <translation>Den ausgewählten Übersetzungstext in die Zwischenablage kopieren und löschen.</translation> </message> <message> - <location/> <source>Ctrl+X</source> <translation>Ctrl+X</translation> </message> <message> - <location/> <source>&Copy</source> <translation>&Kopieren</translation> </message> <message> - <location/> <source>Copy the selected translation text to the clipboard.</source> <translation>Den ausgewählten Übersetzungstext in die Zwischenablage kopieren.</translation> </message> <message> - <location/> <source>Ctrl+C</source> <translation>Ctrl+C</translation> </message> <message> - <location/> <source>&Paste</source> <translation>&Einfügen</translation> </message> <message> - <location/> <source>Paste the clipboard text into the translation.</source> <translation>Text aus der Zwischenablage in die Übersetzung einfügen.</translation> </message> <message> - <location/> <source>Ctrl+V</source> <translation>Ctrl+V</translation> </message> <message> - <location/> <source>Select &All</source> <translation>Alles &markieren</translation> </message> <message> - <location/> <source>Select the whole translation text.</source> <translation>Den gesamten Übersetzungstext auswählen.</translation> </message> <message> - <location/> <source>Ctrl+A</source> <translation>Ctrl+A</translation> </message> <message> - <location/> <source>&Find...</source> <translation>&Suchen ...</translation> </message> <message> - <location/> <source>Search for some text in the translation source file.</source> <translation>In der Übersetzungsdatei nach Text suchen.</translation> </message> <message> - <location/> <source>Ctrl+F</source> <translation>Ctrl+F</translation> </message> <message> - <location/> <source>Find &Next</source> <translation>&Weitersuchen</translation> </message> <message> - <location/> <source>Continue the search where it was left.</source> <translation>Die Suche fortsetzen.</translation> </message> <message> - <location/> <source>F3</source> <translation>F3</translation> </message> <message> - <location/> <source>&Prev Unfinished</source> <translation>&Vorheriger Unerledigter</translation> </message> <message> - <location/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location/> <source>&Close All</source> <translation>A&lle schließen</translation> </message> <message> - <location/> <source>Ctrl+W</source> <translation>Ctrl+W</translation> </message> <message> - <location/> <source>Ctrl+K</source> <translation>Ctrl+K</translation> </message> <message> - <location/> <source>&Next Unfinished</source> <translation>&Nächster Unerledigter</translation> </message> <message> - <location/> <source>P&rev</source> <translation>V&orheriger</translation> </message> <message> - <location/> <source>Ctrl+Shift+K</source> <translation>Ctrl+Shift+K</translation> </message> <message> - <location/> <source>Ne&xt</source> <translation>Nä&chster</translation> </message> <message> - <location/> <source>&Done and Next</source> <translation>&Fertig und Nächster</translation> </message> <message> - <location/> <source>Copies the source text into the translation field.</source> <translation>Kopiert den Ursprungstext in das Übersetzungsfeld.</translation> </message> <message> - <location/> <source>Ctrl+B</source> <translation>Ctrl+B</translation> </message> <message> - <location/> <source>&Accelerators</source> <translation>&Kurzbefehle</translation> </message> <message> - <location/> <source>&Ending Punctuation</source> <translation>&Punktierung am Ende</translation> </message> <message> - <location/> <source>&Phrase matches</source> <translation>&Wörterbuch</translation> </message> <message> - <location/> <source>Place &Marker Matches</source> <translation>Platz&halter</translation> </message> <message> - <location/> <source>&New Phrase Book...</source> <translation>&Neues Wörterbuch ...</translation> </message> <message> - <location/> <source>Create a new phrase book.</source> <translation>Ein neues Wörterbuch erzeugen.</translation> </message> <message> - <location/> <source>Ctrl+N</source> <translation>Ctrl+N</translation> </message> <message> - <location/> <source>&Open Phrase Book...</source> <translation>&Wörterbuch öffnen ...</translation> </message> <message> - <location/> <source>Open a phrase book to assist translation.</source> <translation>Ein Wörterbuch zur Unterstützung bei der Übersetzung öffnen.</translation> </message> <message> - <location/> <source>Ctrl+H</source> <translation>Ctrl+H</translation> </message> <message> - <location/> <source>&Reset Sorting</source> <translation>&Sortierung zurücksetzen</translation> </message> <message> - <location/> <source>Sort the items back in the same order as in the message file.</source> <translation>Die Einträge in der gleichen Reihenfolge wie in der ursprünglichen Übersetzungsdatei sortieren.</translation> </message> <message> - <location/> <source>&Display guesses</source> <translation>&Vorschläge anzeigen</translation> </message> <message> - <location/> <source>Set whether or not to display translation guesses.</source> <translation>Darstellung von Übersetzungsvorschlägen aktivieren/deaktivieren.</translation> </message> <message> - <location/> <source>&Statistics</source> <translation>S&tatistik</translation> </message> <message> - <location/> <source>Display translation statistics.</source> <translation>Zeige Übersetzungsstatistik an.</translation> </message> <message> - <location/> <source>&Manual</source> <translation>&Handbuch</translation> </message> <message> - <location/> <source>F1</source> <translation>F1</translation> </message> <message> - <location/> <source>About Qt Linguist</source> <translation>Über Qt Linguist</translation> </message> <message> - <location/> <source>About Qt</source> <translation>Über Qt</translation> </message> <message> - <location/> <source>&What's This?</source> <translation>&Direkthilfe</translation> </message> <message> - <location/> <source>What's This?</source> <translation>Direkthilfe</translation> </message> <message> - <location/> <source>Enter What's This? mode.</source> <translation>Direkthilfe-Modus aktivieren.</translation> </message> <message> - <location/> <source>Shift+F1</source> <translation>Shift+F1</translation> </message> <message> - <location/> <source>&Search And Translate...</source> <translation>Suchen und &übersetzen ...</translation> </message> <message> - <location/> <source>Replace the translation on all entries that matches the search source text.</source> <translation>Die Übersetzung aller Einträge ersetzen, die dem Suchtext entsprechen.</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+21"/> <source>&Batch Translation...</source> <translation>&Automatische Übersetzung ...</translation> </message> <message> - <location/> <source>Batch translate all entries using the information in the phrase books.</source> <translation>Alle Einträge automatisch mit Hilfe des Wörterbuchs übersetzen.</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-34"/> - <location line="+10"/> <source>Release As...</source> <translation>Freigeben unter ...</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2035"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> </message> <message> - <location line="+190"/> <source>Source text</source> <translation>Ursprungstext</translation> </message> <message> - <location line="+1"/> - <location line="+25"/> <source>Index</source> <translation>Index</translation> </message> <message> - <location line="-2"/> - <location line="+63"/> <source>Context</source> <translation>Kontext</translation> </message> <message> - <location line="-62"/> <source>Items</source> <translation>Einträge</translation> </message> <message> - <location line="+79"/> <source>This panel lists the source contexts.</source> <translation>Dieser Bereich zeigt die Kontexte an.</translation> </message> <message> - <location line="+13"/> <source>Strings</source> <translation>Zeichenketten</translation> </message> <message> - <location line="+37"/> <source>Phrases and guesses</source> <translation>Wörterbuch und Vorschläge</translation> </message> <message> - <location line="+10"/> <source>Sources and Forms</source> <translation>Quelldateien und Formulare</translation> </message> <message> - <location line="+15"/> <source>Warnings</source> <translation>Hinweise</translation> </message> <message> - <location line="+59"/> <source> MOD </source> <comment>status bar: file(s) modified</comment> <translation>Geändert</translation> </message> <message> - <location line="+139"/> <source>Loading...</source> <translation>Lade ...</translation> </message> <message> - <location line="+32"/> - <location line="+22"/> <source>Loading File - Qt Linguist</source> <translation>Laden - Qt Linguist</translation> </message> <message> - <location line="-21"/> <source>The file '%1' does not seem to be related to the currently open file(s) '%2'. Close the open file(s) first?</source> @@ -988,7 +808,6 @@ Close the open file(s) first?</source> Sollen die bereits geöffneten Dateien vorher geschlossen werden?</translation> </message> <message> - <location line="+22"/> <source>The file '%1' does not seem to be related to the file '%2' which is being loaded as well. Skip loading the first named file?</source> @@ -997,7 +816,6 @@ Skip loading the first named file?</source> Soll die erstgenannte Datei übersprungen werden?</translation> </message> <message numerus="yes"> - <location line="+61"/> <source>%n translation unit(s) loaded.</source> <translation> <numerusform>Eine Übersetzungseinheit geladen.</numerusform> @@ -1005,124 +823,84 @@ Soll die erstgenannte Datei übersprungen werden?</translation> </translation> </message> <message> - <location line="+94"/> <source>Related files (%1);;</source> <translation>Verwandte Dateien (%1);;</translation> </message> <message> - <location line="+4"/> <source>Open Translation Files</source> <translation>Übersetzungsdateien öffnen</translation> </message> <message> - <location line="+10"/> - <location line="+31"/> <source>File saved.</source> <translation>Datei gespeichert.</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+15"/> - <location line="+1187"/> <source>Release</source> <translation>Freigeben</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1186"/> <source>Qt message files for released applications (*.qm) All files (*)</source> <translation>Qt-Nachrichtendateien (*.qm) Alle Dateien (*)</translation> </message> <message> - <location line="+3"/> - <location line="+12"/> <source>File created.</source> <translation>Datei erzeugt.</translation> </message> <message> - <location line="+34"/> - <location line="+355"/> <source>Printing...</source> <translation>Drucke ...</translation> </message> <message> - <location line="-347"/> <source>Context: %1</source> <translation>Kontext: %1</translation> </message> <message> - <location line="+32"/> <source>finished</source> <translation>erledigt</translation> </message> <message> - <location line="+3"/> <source>unresolved</source> <translation>ungelöst</translation> </message> <message> - <location line="+3"/> <source>obsolete</source> <translation>veraltet</translation> </message> <message> - <location line="+15"/> - <location line="+307"/> <source>Printing... (page %1)</source> <translation>Drucke ... (Seite %1)</translation> </message> <message> - <location line="-300"/> - <location line="+307"/> <source>Printing completed</source> <translation>Drucken beendet</translation> </message> <message> - <location line="-305"/> - <location line="+307"/> <source>Printing aborted</source> <translation>Drucken abgebrochen</translation> </message> <message> - <location line="-232"/> <source>Search wrapped.</source> <translation>Suche beginnt von oben.</translation> </message> <message> - <location line="+17"/> - <location line="+278"/> - <location line="+34"/> - <location line="+24"/> - <location line="+22"/> - <location line="+538"/> - <location line="+1"/> - <location line="+274"/> - <location line="+40"/> - <location line="+10"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> <message> - <location line="-1220"/> - <location line="+102"/> <source>Cannot find the string '%1'.</source> <translation>Kann Zeichenkette '%1' nicht finden.</translation> </message> <message> - <location line="-82"/> <source>Search And Translate in '%1' - Qt Linguist</source> <translation>Suchen und übersetzen in '%1' - Qt Linguist</translation> </message> <message> - <location line="+34"/> - <location line="+23"/> - <location line="+24"/> <source>Translate - Qt Linguist</source> <translation>Übersetzung - Qt Linguist</translation> </message> <message numerus="yes"> - <location line="-46"/> <source>Translated %n entry(s)</source> <translation> <numerusform>Ein Eintrag übersetzt</numerusform> @@ -1130,39 +908,32 @@ Alle Dateien (*)</translation> </translation> </message> <message> - <location line="+23"/> <source>No more occurrences of '%1'. Start over?</source> <translation>Keine weiteren Vorkommen von '%1'. Von vorne beginnen?</translation> </message> <message> - <location line="+30"/> <source>Create New Phrase Book</source> <translation>Erzeugen eines neuen Wörterbuchs</translation> </message> <message> - <location line="+1"/> <source>Qt phrase books (*.qph) All files (*)</source> <translation>Qt-Wörterbücher (*.qph) Alle Dateien (*)</translation> </message> <message> - <location line="+11"/> <source>Phrase book created.</source> <translation>Wörterbuch erzeugt.</translation> </message> <message> - <location line="+17"/> <source>Open Phrase Book</source> <translation>Wörterbuch öffnen</translation> </message> <message> - <location line="+1"/> <source>Qt phrase books (*.qph);;All files (*)</source> <translation>Qt-Wörterbücher (*.qph);;Alle Dateien (*)</translation> </message> <message numerus="yes"> - <location line="+7"/> <source>%n phrase(s) loaded.</source> <translation> <numerusform>Ein Wörterbucheintrag geladen.</numerusform> @@ -1170,328 +941,254 @@ Alle Dateien (*)</translation> </translation> </message> <message> - <location line="+93"/> - <location line="+3"/> - <location line="+7"/> <source>Add to phrase book</source> <translation>Hinzufügen zum Wörterbuch</translation> </message> <message> - <location line="-9"/> <source>No appropriate phrasebook found.</source> <translation>Es kann kein geeignetes Wörterbuch gefunden werden.</translation> </message> <message> - <location line="+3"/> <source>Adding entry to phrasebook %1</source> <translation>Eintrag zu Wörterbuch %1 hinzufügen</translation> </message> <message> - <location line="+7"/> <source>Select phrase book to add to</source> <translation>Zu welchem Wörterbuch soll der Eintrag hinzugefügt werden?</translation> </message> <message> - <location line="+29"/> <source>Unable to launch Qt Assistant (%1)</source> <translation>Qt Assistant kann nicht gestartet werden (%1)</translation> </message> <message> - <location line="+17"/> <source>Version %1</source> <translation>Version %1</translation> </message> <message> - <location line="+3"/> <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> <translation type="unfinished"></translation> </message> <message> - <location line="+38"/> <source>Do you want to save the modified files?</source> <translation>Möchten Sie die geänderten Dateien speichern?</translation> </message> <message> - <location line="+22"/> <source>Do you want to save '%1'?</source> <translation>Möchten Sie '%1' speichern?</translation> </message> <message> - <location line="+43"/> <source>Qt Linguist[*]</source> <translation>Qt Linguist[*]</translation> </message> <message> - <location line="+2"/> <source>%1[*] - Qt Linguist</source> <translation>%1[*] - Qt Linguist</translation> </message> <message> - <location line="+267"/> - <location line="+12"/> <source>No untranslated translation units left.</source> <translation>Es wurden alle Übersetzungseinheiten abgearbeitet.</translation> </message> <message> - <location line="+198"/> <source>&Window</source> <translation>&Fenster</translation> </message> <message> - <location line="+2"/> <source>Minimize</source> <translation>Minimieren</translation> </message> <message> - <location line="+1"/> <source>Ctrl+M</source> <translation>Ctrl+M</translation> </message> <message> - <location line="+12"/> <source>Display the manual for %1.</source> <translation>Handbuch zu %1 anzeigen.</translation> </message> <message> - <location line="+1"/> <source>Display information about %1.</source> <translation>Informationen über %1 anzeigen.</translation> </message> <message> - <location line="+70"/> <source>&Save '%1'</source> <translation>'%1' &speichern</translation> </message> <message> - <location line="+1"/> <source>Save '%1' &As...</source> <translation>'%1' speichern &unter ...</translation> </message> <message> - <location line="+1"/> <source>Release '%1'</source> <translation>'%1' freigeben</translation> </message> <message> - <location line="+1"/> <source>Release '%1' As...</source> <translation>'%1' freigeben unter ...</translation> </message> <message> - <location line="+1"/> <source>&Close '%1'</source> <translation>'%1' &schließen</translation> </message> <message> - <location line="+6"/> - <location line="+13"/> <source>&Close</source> <translation>&Schließen</translation> </message> <message> - <location line="-10"/> <source>Save All</source> <translation>Alles speichern</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/> <source>&Release All</source> <translation>Alles f&reigeben</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/> <source>Close All</source> <translation>Alle schließen</translation> </message> <message> - <location line="+23"/> <source>Translation File &Settings for '%1'...</source> <translation>Einstellungen der Übersetzungs&datei für '%1' ...</translation> </message> <message> - <location line="+1"/> <source>&Batch Translation of '%1'...</source> <translation>&Automatische Übersetzung von '%1' ...</translation> </message> <message> - <location line="+1"/> <source>Search And &Translate in '%1'...</source> <translation>Suchen und &übersetzen in '%1' ...</translation> </message> <message> - <location line="+4"/> <source>Search And &Translate...</source> <translation>Suchen und &übersetzen ...</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+51"/> <source>File</source> <translation>Datei</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/> <source>Edit</source> <translation>Bearbeiten</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/> <source>Translation</source> <translation>Übersetzung</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/> <source>Validation</source> <translation>Validierung</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+84"/> <source>Cannot read from phrase book '%1'.</source> <translation>Wörterbuch '%1' kann nicht gelesen werden.</translation> </message> <message> - <location line="+15"/> <source>Close this phrase book.</source> <translation>Dieses Wörterbuch schließen.</translation> </message> <message> - <location line="+4"/> <source>Enables you to add, modify, or delete entries in this phrase book.</source> <translation>Erlaubt das Hinzufügen, Ändern und Entfernen von Wörterbuch-Einträgen.</translation> </message> <message> - <location line="+5"/> <source>Print the entries in this phrase book.</source> <translation>Die Einträge des Wörterbuchs drucken.</translation> </message> <message> - <location line="+16"/> <source>Cannot create phrase book '%1'.</source> <translation>Wörterbuch '%1' kann nicht erzeugt werden.</translation> </message> <message> - <location line="+10"/> <source>Do you want to save phrase book '%1'?</source> <translation>Möchten Sie das Wörterbuch '%1' speichern?</translation> </message> <message> - <location line="+349"/> <source>All</source> <translation>Alle</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Open/Refresh Form &Preview</source> <translation>&Vorschau öffnen/aktualisieren</translation> </message> <message> - <location/> <source>Form Preview Tool</source> <translation>Vorschau für Eingabemasken</translation> </message> <message> - <location/> <source>F5</source> <translation>F5</translation> </message> <message> - <location/> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-562"/> <source>Translation File &Settings...</source> <translation>E&instellungen ...</translation> </message> <message> - <location/> <source>&Add to Phrase Book</source> <translation>Zum Wörterbuch &hinzufügen</translation> </message> <message> - <location/> <source>Ctrl+T</source> <translation>Ctrl+T</translation> </message> <message> - <location/> <source>Ctrl+J</source> <translation>Ctrl+J</translation> </message> <message> - <location/> <source>Ctrl+Shift+J</source> <translation>Ctrl+Shift+J</translation> </message> <message> - <location/> <source>Previous unfinished item</source> <translation>Vorheriger unerledigter Eintrag</translation> </message> <message> - <location/> <source>Next unfinished item</source> <translation>Nächster unerledigter Eintrag</translation> </message> <message> - <location/> <source>Move to previous item</source> <translation>Zum vorigen Eintrag gehen</translation> </message> <message> - <location/> <source>Next item</source> <translation>Nächster Eintrag</translation> </message> <message> - <location/> <source>Mark item as done and move to the next unfinished item</source> <translation>Eintrag als erledigt markieren und zum nächsten unerledigten Eintrag gehen</translation> </message> <message> - <location/> <source>Copies the source text into the translation field</source> <translation>Kopiert den Ursprungstext in das Übersetzungsfeld</translation> </message> <message> - <location/> <source>Toggle the validity check of accelerators</source> <translation>Prüfung der Tastenkürzel ein- bzw. ausschalten</translation> </message> <message> - <location/> <source>Toggle the validity check of ending punctuation</source> <translation>Prüfung der Satzendezeichen am Ende des Textes ein- bzw. ausschalten</translation> </message> <message> - <location/> <source>Toggle checking that phrase suggestions are used</source> <translation>Überprüfung, ob Wörterbucheinträge benutzt werden, aktivieren/deaktivieren</translation> </message> <message> - <location/> <source>Toggle the validity check of place markers</source> <translation>Prüfung der Platzhalter ein- bzw. ausschalten'</translation> </message> <message> - <location/> <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source> <translation>Eine Qt-Nachrichtendatei aus der aktuellen Übersetzungsdatei erzeugen. Der Dateiname wird automatisch aus dem Namen der TS-Datei abgeleitet.</translation> </message> <message> - <location/> <source>Length Variants</source> <translation>Längenvarianten</translation> </message> <message> - <location/> <source>Display information about the Qt toolkit by Nokia.</source> <translation>Zeigt Informationen über das Qt-Toolkit von Nokia an.</translation> </message> @@ -1499,103 +1196,83 @@ Alle Dateien (*)</translation> <context> <name>MessageEditor</name> <message> - <location filename="../tools/linguist/linguist/messageeditor.cpp" line="+42"/> <source></source> <comment>This is the right panel of the main window.</comment> <translation></translation> </message> <message> - <location line="+30"/> <source>Russian</source> <translation>Russisch</translation> </message> <message> - <location line="+1"/> <source>German</source> <translation>Deutsch</translation> </message> <message> - <location line="+1"/> <source>Japanese</source> <translation>Japanisch</translation> </message> <message> - <location line="+1"/> <source>French</source> <translation>Französisch</translation> </message> <message> - <location line="+1"/> <source>Polish</source> <translation>Polnisch</translation> </message> <message> - <location line="+1"/> <source>Chinese</source> <translation>Chinesisch</translation> </message> <message> - <location line="+47"/> <source>This whole panel allows you to view and edit the translation of some source text.</source> <translation>Dieser Bereich erlaubt die Darstellung und Änderung der Übersetzung eines Textes.</translation> </message> <message> - <location line="+10"/> <source>Source text</source> <translation>Ursprungstext</translation> </message> <message> - <location line="+2"/> <source>This area shows the source text.</source> <translation>Dieser Bereich zeigt den Ursprungstext.</translation> </message> <message> - <location line="+4"/> <source>Source text (Plural)</source> <translation>Ursprungstext (Plural)</translation> </message> <message> - <location line="+2"/> <source>This area shows the plural form of the source text.</source> <translation>Dieser Bereich zeigt die Pluralform des Ursprungstexts.</translation> </message> <message> - <location line="+4"/> <source>Developer comments</source> <translation>Hinweise des Entwicklers</translation> </message> <message> - <location line="+3"/> <source>This area shows a comment that may guide you, and the context in which the text occurs.</source> <translation>Dieser Bereich zeigt eventuelle Kommentare und den Kontext, in dem der Text auftritt.</translation> </message> <message> - <location line="+59"/> <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source> <translation>Hier können Sie Hinweise für den eigenen Gebrauch eintragen. Diese haben keinen Einflusse auf die Übersetzung.</translation> </message> <message> - <location line="+234"/> <source>%1 translation (%2)</source> <translation>Übersetzung %1 (%2)</translation> </message> <message> - <location line="+9"/> <source>This is where you can enter or modify the translation of the above source text.</source> <translation>Hier können Sie die Übersetzung des Ursprungstextes eingeben bzw. ändern.</translation> </message> <message> - <location line="+5"/> <source>%1 translation</source> <translation>Übersetzung %1</translation> </message> <message> - <location line="+1"/> <source>%1 translator comments</source> <translation>%1 Hinweise des Übersetzers</translation> </message> <message> - <location line="+157"/> <source>'%1' Line: %2</source> <translation>'%1' @@ -1605,22 +1282,18 @@ Zeile: %2</translation> <context> <name>MessageModel</name> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+839"/> <source>Completion status for %1</source> <translation>Bearbeitungsstand von %1</translation> </message> <message> - <location line="+15"/> <source><file header></source> <translation><Dateikopf></translation> </message> <message> - <location line="+2"/> <source><context comment></source> <translation><Kontexthinweis></translation> </message> <message> - <location line="+71"/> <source><unnamed context></source> <translation><unbenannter Kontext></translation> </message> @@ -1628,7 +1301,6 @@ Zeile: %2</translation> <context> <name>MsgEdit</name> <message> - <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-602"/> <source></source> <comment>This is the right panel of the main window.</comment> <translation></translation> @@ -1637,113 +1309,91 @@ Zeile: %2</translation> <context> <name>PhraseBookBox</name> <message> - <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="+12"/> <source></source> <comment>Go to Phrase > Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment> <translation></translation> </message> <message> - <location line="+54"/> <source>(New Entry)</source> <translation>(Neuer Eintrag)</translation> </message> <message> - <location line="+3"/> <source>%1[*] - Qt Linguist</source> <translation>%1[*] - Qt Linguist</translation> </message> <message> - <location line="+90"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> <message> - <location line="+1"/> <source>Cannot save phrase book '%1'.</source> <translation>Wörterbuch '%1' kann nicht gespeichert werden.</translation> </message> <message> - <location filename="../tools/linguist/linguist/phrasebookbox.ui"/> <source>Edit Phrase Book</source> <translation>Wörterbuch bearbeiten</translation> </message> <message> - <location/> <source>This window allows you to add, modify, or delete entries in a phrase book.</source> <translation>Dieses Fenster erlaubt das Hinzufügen, Ändern und Entfernen von Wörterbuch-Einträgen.</translation> </message> <message> - <location/> <source>&Translation:</source> <translation>&Übersetzung:</translation> </message> <message> - <location/> <source>This is the phrase in the target language corresponding to the source phrase.</source> <translation>Dies ist der Text, der in der Zielsprache dem Ursprungstext entspricht.</translation> </message> <message> - <location/> <source>S&ource phrase:</source> <translation>&Ursprungstext:</translation> </message> <message> - <location/> <source>This is a definition for the source phrase.</source> <translation>Dies ist die Definition des Ursprungstextes.</translation> </message> <message> - <location/> <source>This is the phrase in the source language.</source> <translation>Dies ist der Text der Ursprungssprache.</translation> </message> <message> - <location/> <source>&Definition:</source> <translation>&Definition:</translation> </message> <message> - <location/> <source>Click here to add the phrase to the phrase book.</source> <translation>Einen neuen Eintrag ins Wörterbuch einfügen.</translation> </message> <message> - <location/> <source>&New Entry</source> <translation>&Neuer Eintrag</translation> </message> <message> - <location/> <source>Click here to remove the entry from the phrase book.</source> <translation>Den Eintrag aus dem Wörterbuch entfernen.</translation> </message> <message> - <location/> <source>&Remove Entry</source> <translation>&Eintrag entfernen</translation> </message> <message> - <location/> <source>Settin&gs...</source> <translation>&Einstellungen ...</translation> </message> <message> - <location/> <source>Click here to save the changes made.</source> <translation>Änderungen speichern.</translation> </message> <message> - <location/> <source>&Save</source> <translation>&Speichern</translation> </message> <message> - <location/> <source>Click here to close this window.</source> <translation>Klicken Sie hier, um das Fenster zu schließen.</translation> </message> <message> - <location/> <source>Close</source> <translation>Schließen</translation> </message> @@ -1751,17 +1401,14 @@ Zeile: %2</translation> <context> <name>PhraseModel</name> <message> - <location filename="../tools/linguist/linguist/phrasemodel.cpp" line="+117"/> <source>Source phrase</source> <translation>Ursprungstext</translation> </message> <message> - <location line="+2"/> <source>Translation</source> <translation>Übersetzung</translation> </message> <message> - <location line="+2"/> <source>Definition</source> <translation>Definition</translation> </message> @@ -1769,22 +1416,18 @@ Zeile: %2</translation> <context> <name>PhraseView</name> <message> - <location filename="../tools/linguist/linguist/phraseview.cpp" line="+122"/> <source>Insert</source> <translation>Einfügen</translation> </message> <message> - <location line="+3"/> <source>Edit</source> <translation>Bearbeiten</translation> </message> <message> - <location line="+113"/> <source>Guess (%1)</source> <translation>Vorschlag (%1)</translation> </message> <message> - <location line="+2"/> <source>Guess</source> <translation>Vorschlag</translation> </message> @@ -1792,63 +1435,46 @@ Zeile: %2</translation> <context> <name>QObject</name> <message> - <location filename="../tools/linguist/shared/qm.cpp" line="+12"/> <source>Compiled Qt translations</source> <translation>Kompilierte Qt-Übersetzungen</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1302"/> <source>Translation files (%1);;</source> <translation>Übersetzungsdateien (%1);;</translation> </message> <message> - <location line="+5"/> <source>All files (*)</source> <translation>Alle Dateien (*)</translation> </message> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1134"/> - <location line="+27"/> - <location line="+67"/> - <location line="+39"/> - <location line="+17"/> - <location line="+15"/> - <location filename="../tools/linguist/linguist/phrase.cpp" line="+196"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> <message> - <location filename="../tools/linguist/shared/po.cpp" line="+817"/> <source>GNU Gettext localization files</source> <translation>GNU-Gettext-Übersetzungsdateien</translation> </message> <message> - <location line="+7"/> <source>GNU Gettext localization template files</source> <translation>Vorlagen für GNU-Gettext-Übersetzungsdateien</translation> </message> <message> - <location filename="../tools/linguist/shared/ts.cpp" line="+752"/> <source>Qt translation sources (format 1.1)</source> <translation>Qt-Übersetzungsdateien (Formatversion 1.1)</translation> </message> <message> - <location line="+8"/> <source>Qt translation sources (format 2.0)</source> <translation>Qt-Übersetzungsdateien (Formatversion 2.0)</translation> </message> <message> - <location line="+9"/> <source>Qt translation sources (latest format)</source> <translation>Qt-Übersetzungsdateien (aktuelles Format)</translation> </message> <message> - <location filename="../tools/linguist/shared/xliff.cpp" line="+829"/> <source>XLIFF localization files</source> <translation>XLIFF-Übersetzungsdateien</translation> </message> <message> - <location filename="../tools/linguist/shared/qph.cpp" line="+195"/> <source>Qt Linguist 'Phrase Book'</source> <translation>Qt-Linguist-Wörterbuch</translation> </message> @@ -1856,17 +1482,14 @@ Zeile: %2</translation> <context> <name>SourceCodeView</name> <message> - <location filename="../tools/linguist/linguist/sourcecodeview.cpp" line="+70"/> <source><i>Source code not available</i></source> <translation><i>Quelltext nicht verfügbar</i></translation> </message> <message> - <location line="+33"/> <source><i>File %1 not available</i></source> <translation><i>Datei %1 nicht vorhanden</i></translation> </message> <message> - <location line="+5"/> <source><i>File %1 not readable</i></source> <translation><i>Datei %1 nicht lesbar</i></translation> </message> @@ -1874,42 +1497,34 @@ Zeile: %2</translation> <context> <name>Statistics</name> <message> - <location filename="../tools/linguist/linguist/statistics.ui"/> <source>Statistics</source> <translation>Statistiken</translation> </message> <message> - <location/> <source>Translation</source> <translation>Übersetzung</translation> </message> <message> - <location/> <source>Source</source> <translation>Quelle</translation> </message> <message> - <location/> <source>0</source> <translation>0</translation> </message> <message> - <location/> <source>Words:</source> <translation>Wörter:</translation> </message> <message> - <location/> <source>Characters:</source> <translation>Zeichen:</translation> </message> <message> - <location/> <source>Characters (with spaces):</source> <translation>Zeichen (mit Leerzeichen):</translation> </message> <message> - <location/> <source>Close</source> <translation>Schließen</translation> </message> @@ -1917,72 +1532,58 @@ Zeile: %2</translation> <context> <name>TranslateDialog</name> <message> - <location filename="../tools/linguist/linguist/translatedialog.ui"/> <source>This window allows you to search for some text in the translation source file.</source> <translation>Dieses Fenster erlaubt die Suche in der Übersetzungsdatei.</translation> </message> <message> - <location/> <source>Type in the text to search for.</source> <translation>Geben Sie den Text ein, nach dem gesucht werden soll.</translation> </message> <message> - <location/> <source>Find &source text:</source> <translation>&Ursprungstext:</translation> </message> <message> - <location/> <source>&Translate to:</source> <translation>&Übersetzung:</translation> </message> <message> - <location/> <source>Search options</source> <translation>Sucheinstellungen</translation> </message> <message> - <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation>Wenn aktiviert, werden Texte wie 'TeX' und 'tex' als unterschiedlich betrachtet.</translation> </message> <message> - <location/> <source>Match &case</source> <translation>&Groß-/Kleinschreibung beachten</translation> </message> <message> - <location/> <source>Mark new translation as &finished</source> <translation>Neue Übersetzung als &erledigt markieren</translation> </message> <message> - <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation>Klicken Sie hier, um zum nächsten Vorkommen des Suchtextes zu springen.</translation> </message> <message> - <location/> <source>Find Next</source> <translation>Weitersuchen</translation> </message> <message> - <location/> <source>Translate</source> <translation>Übersetzen</translation> </message> <message> - <location/> <source>Translate All</source> <translation>Alle übersetzen</translation> </message> <message> - <location/> <source>Click here to close this window.</source> <translation>Klicken Sie hier, um das Fenster zu schließen.</translation> </message> <message> - <location/> <source>Cancel</source> <translation>Abbrechen</translation> </message> @@ -1990,33 +1591,26 @@ Zeile: %2</translation> <context> <name>TranslationSettingsDialog</name> <message> - <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+93"/> <source>Any Country</source> <translation>Land</translation> </message> <message> - <location line="-22"/> - <location line="+8"/> <source>Settings for '%1' - Qt Linguist</source> <translation>Einstellungen für '%1' - Qt Linguist</translation> </message> <message> - <location filename="../tools/linguist/linguist/translationsettings.ui"/> <source>Source language</source> <translation>Ursprungssprache</translation> </message> <message> - <location/> <source>Language</source> <translation>Sprache</translation> </message> <message> - <location/> <source>Country/Region</source> <translation>Land/Region</translation> </message> <message> - <location/> <source>Target language</source> <translation>Zielsprache</translation> </message> diff --git a/translations/qt_de.ts b/translations/qt_de.ts index 74bd048..7a062dc 100644 --- a/translations/qt_de.ts +++ b/translations/qt_de.ts @@ -4,7 +4,6 @@ <context> <name>CloseButton</name> <message> - <location filename="../src/gui/widgets/qtabbar.cpp" line="+2313"/> <source>Close Tab</source> <translation>Schließen</translation> </message> @@ -12,12 +11,10 @@ <context> <name>FakeReply</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2278"/> <source>Fake error !</source> <translation>Fake error !</translation> </message> <message> - <location line="+3"/> <source>Invalid URL</source> <translation>Ungültige URL</translation> </message> @@ -25,37 +22,30 @@ <context> <name>MAC_APPLICATION_MENU</name> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2348"/> <source>Services</source> <translation>Dienste</translation> </message> <message> - <location line="+1"/> <source>Hide %1</source> <translation>%1 ausblenden</translation> </message> <message> - <location line="+1"/> <source>Hide Others</source> <translation>Andere ausblenden</translation> </message> <message> - <location line="+1"/> <source>Show All</source> <translation>Alle anzeigen</translation> </message> <message> - <location line="+1"/> <source>Preferences...</source> <translation>Einstellungen...</translation> </message> <message> - <location line="+1"/> <source>Quit %1</source> <translation>%1 beenden</translation> </message> <message> - <location line="+1"/> <source>About %1</source> <translation>Über %1</translation> </message> @@ -63,32 +53,26 @@ <context> <name>Phonon::</name> <message> - <location filename="../src/3rdparty/phonon/phonon/phononnamespace.cpp" line="+55"/> <source>Notifications</source> <translation>Benachrichtigungen</translation> </message> <message> - <location line="+2"/> <source>Music</source> <translation>Musik</translation> </message> <message> - <location line="+2"/> <source>Video</source> <translation>Video</translation> </message> <message> - <location line="+2"/> <source>Communication</source> <translation>Kommunikation</translation> </message> <message> - <location line="+2"/> <source>Games</source> <translation>Spiele</translation> </message> <message> - <location line="+2"/> <source>Accessibility</source> <translation>Eingabehilfen</translation> </message> @@ -96,24 +80,18 @@ <context> <name>Phonon::AudioOutput</name> <message> - <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+444"/> - <location line="+34"/> <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> <translation><html>Das Audiogerät <b>%1</b> funktioniert nicht.<br/>Es wird stattdessen <b>%2</b> verwendet.</html></translation> </message> <message> - <location line="-21"/> <source><html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html></source> <translation><html>Das Audiogerät <b>%1</b> wurde aktiviert,<br/>da es gerade verfügbar und höher priorisiert ist.</html></translation> </message> <message> - <location line="+3"/> - <location line="+14"/> <source>Revert back to device '%1'</source> <translation>Zurückschalten zum Gerät '%1'</translation> </message> <message> - <location line="-3"/> <source><html>Switching to the audio playback device <b>%1</b><br/>which has higher preference or is specifically configured for this stream.</html></source> <translation><html>Es wird zum Audiogerät <b>%1</b> geschaltet, <br/>da es höher priorisiert ist oder spezifisch für diesen Stream konfiguriert wurde.</html></translation> </message> @@ -121,14 +99,12 @@ <context> <name>Phonon::Gstreamer::Backend</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+188"/> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.</source> <translation>Achtung: Das Paket gstreamer0.10-plugins-good ist nicht installiert. Einige Video-Funktionen stehen nicht zur Verfügung.</translation> </message> <message> - <location line="+5"/> <source>Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled</source> <translation>Achtung: Die grundlegenden GStreamer-Plugins sind nicht installiert. @@ -138,7 +114,6 @@ Die Audio- und Video-Unterstützung steht nicht zur Verfügung.</translation> <context> <name>Phonon::Gstreamer::MediaObject</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+93"/> <source>Cannot start playback. Check your GStreamer installation and make sure you @@ -148,49 +123,34 @@ have libgstreamer-plugins-base installed.</source> Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.</translation> </message> <message> - <location line="+129"/> <source>Missing codec helper script assistant.</source> <translation>Der Skript-Hilfsassistent des Codecs fehlt.</translation> </message> <message> - <location line="+2"/> <source>Plugin codec installation failed for codec: %0</source> <translation>Die Installation des Codec-Plugins schlug fehl für: %0</translation> </message> <message> - <location line="+11"/> <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source> <translation>Es sind nicht alle erforderlichen Codecs installiert. Um diesen Inhalt abzuspielen, muss der folgende Codec installiert werden: %0</translation> </message> <message> - <location line="+730"/> - <location line="+6"/> - <location line="+13"/> - <location line="+24"/> - <location line="+6"/> - <location line="+18"/> - <location line="+434"/> - <location line="+24"/> <source>Could not open media source.</source> <translation>Die Medienquelle konnte nicht geöffnet werden.</translation> </message> <message> - <location line="-514"/> <source>Invalid source type.</source> <translation>Ungültiger Typ der Medienquelle.</translation> </message> <message> - <location line="+488"/> <source>Could not locate media source.</source> <translation>Die Medienquelle konnte nicht gefunden werden.</translation> </message> <message> - <location line="+10"/> <source>Could not open audio device. The device is already in use.</source> <translation>Das Audiogerät konnte nicht geöffnet werden, da es bereits in Benutzung ist.</translation> </message> <message> - <location line="+13"/> <source>Could not decode media source.</source> <translation>Die Medienquelle konnte nicht gefunden werden.</translation> </message> @@ -198,162 +158,130 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF</name> <message> - <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+103"/> <source>Audio Output</source> <translation>Audio-Ausgabe</translation> </message> <message> - <location line="+1"/> <source>The audio output device</source> <translation>Audio-Ausgabegerät</translation> </message> <message> - <location filename="../src/3rdparty/phonon/mmf/utils.cpp" line="+89"/> <source>No error</source> <translation>Kein Fehler</translation> </message> <message> - <location line="+2"/> <source>Not found</source> <translation>Nicht gefunden</translation> </message> <message> - <location line="+2"/> <source>Out of memory</source> <translation>Es ist kein Speicher mehr verfügbar</translation> </message> <message> - <location line="+2"/> <source>Not supported</source> <translation>Nicht unterstützt</translation> </message> <message> - <location line="+2"/> <source>Overflow</source> <translation>Überlauf</translation> </message> <message> - <location line="+2"/> <source>Underflow</source> <translation>Unterlauf</translation> </message> <message> - <location line="+2"/> <source>Already exists</source> <translation>Existiert bereits</translation> </message> <message> - <location line="+2"/> <source>Path not found</source> <translation>Pfad konnte nicht gefunden werden</translation> </message> <message> - <location line="+2"/> <source>In use</source> <translation>Bereits in Verwendung</translation> </message> <message> - <location line="+2"/> <source>Not ready</source> <translation>Nicht bereit</translation> </message> <message> - <location line="+2"/> <source>Access denied</source> <translation>Zugriff verweigert</translation> </message> <message> - <location line="+2"/> <source>Could not connect</source> <translation>Es konnte keine Verbindung hergestellt werden</translation> </message> <message> - <location line="+2"/> <source>Disconnected</source> <translation>Getrennt</translation> </message> <message> - <location line="+2"/> <source>Permission denied</source> <translation>Zugriff verweigert</translation> </message> <message> - <location line="+4"/> <source>Insufficient bandwidth</source> <translation>Unzureichende Bandweite</translation> </message> <message> - <location line="+3"/> <source>Network unavailable</source> <translation>Netzwerk nicht verfügbar</translation> </message> <message> - <location line="+4"/> <source>Network communication error</source> <translation>Fehler bei der Kommunikation über das Netzwerk</translation> </message> <message> - <location line="+2"/> <source>Streaming not supported</source> <translation>Streaming nicht unterstützt</translation> </message> <message> - <location line="+2"/> <source>Server alert</source> <translation>Server alert</translation> </message> <message> - <location line="+2"/> <source>Invalid protocol</source> <translation>Ungültiges Protokoll</translation> </message> <message> - <location line="+2"/> <source>Invalid URL</source> <translation>Ungültige URL</translation> </message> <message> - <location line="+2"/> <source>Multicast error</source> <translation>Multicast-Fehler</translation> </message> <message> - <location line="+3"/> <source>Proxy server error</source> <translation>Fehler bei Proxy-Server-Kommunikation</translation> </message> <message> - <location line="+2"/> <source>Proxy server not supported</source> <translation>Proxy-Server nicht unterstützt</translation> </message> <message> - <location line="+2"/> <source>Audio output error</source> <translation>Fehler bei Audio-Ausgabe</translation> </message> <message> - <location line="+2"/> <source>Video output error</source> <translation>Fehler bei Video-Ausgabe</translation> </message> <message> - <location line="+2"/> <source>Decoder error</source> <translation>Fehler im Decoder</translation> </message> <message> - <location line="+2"/> <source>Audio or video components could not be played</source> <translation>Audio- oder Videokomponenten konnten nicht abgespielt werden</translation> </message> <message> - <location line="+2"/> <source>DRM error</source> <translation>DRM-Fehler</translation> </message> <message> - <location line="+15"/> <source>Unknown error (%1)</source> <translation>Unbekannter Fehler (%1)</translation> </message> @@ -361,33 +289,34 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::AbstractMediaPlayer</name> <message> - <location filename="../src/3rdparty/phonon/mmf/abstractmediaplayer.cpp" line="+73"/> <source>Not ready to play</source> <translation>Das Abspielen ist im Grundzustand nicht möglich</translation> </message> <message> - <location line="+161"/> - <location line="+10"/> <source>Error opening file</source> <translation>Die Datei konnte nicht geöffnet werden</translation> </message> <message> - <location line="+4"/> <source>Error opening URL</source> <translation>Der URL konnte nicht geöffnet werden</translation> </message> <message> - <location line="+83"/> + <source>Error opening resource</source> + <translation>Die Ressource konnte nicht geöffnet werden</translation> + </message> + <message> + <source>Error opening source: resource not opened</source> + <translation>Die Quelle konnte nicht geöffnet werden: Ressource nicht geöffnet</translation> + </message> + <message> <source>Setting volume failed</source> <translation>Die Lautstärke konnte nicht eingestellt werden</translation> </message> <message> - <location line="+45"/> <source>Loading clip failed</source> <translation>Das Laden des Clips schlug fehl</translation> </message> <message> - <location line="+24"/> <source>Playback complete</source> <translation>Abspielen beendet</translation> </message> @@ -395,22 +324,18 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::AbstractVideoPlayer</name> <message> - <location filename="../src/3rdparty/phonon/mmf/abstractvideoplayer.cpp" line="+108"/> <source>Pause failed</source> <translation>Fehler bei Pause-Funktion</translation> </message> <message> - <location line="+16"/> <source>Seek failed</source> <translation>Suchoperation fehlgeschlagen</translation> </message> <message> - <location line="+54"/> <source>Getting position failed</source> <translation>Die Position konnte nicht bestimmt werden</translation> </message> <message> - <location line="+66"/> <source>Opening clip failed</source> <translation>Der Clip konnte nicht geöffnet werden</translation> </message> @@ -418,7 +343,6 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::AudioEqualizer</name> <message> - <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+92"/> <source>%1 Hz</source> <translation>%1 Hz</translation> </message> @@ -426,7 +350,6 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::AudioPlayer</name> <message> - <location filename="../src/3rdparty/phonon/mmf/audioplayer.cpp" line="+173"/> <source>Getting position failed</source> <translation>Die Position konnte nicht bestimmt werden</translation> </message> @@ -434,11 +357,6 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::DsaVideoPlayer</name> <message> - <location filename="../src/3rdparty/phonon/mmf/videoplayer_dsa.cpp" line="+238"/> - <location line="+15"/> - <location line="+8"/> - <location line="+22"/> - <location line="+22"/> <source>Video display error</source> <translation>Fehler bei der Video-Anzeige</translation> </message> @@ -446,7 +364,6 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::EffectFactory</name> <message> - <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+181"/> <source>Enabled</source> <translation>Aktiviert</translation> </message> @@ -454,61 +371,51 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::EnvironmentalReverb</name> <message> - <location filename="../src/3rdparty/phonon/mmf/environmentalreverb.cpp" line="+146"/> <source>Decay HF ratio (%)</source> <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment> <translation>Hochfrequenz-Abklingverhältnis (%)</translation> </message> <message> - <location line="+6"/> <source>Decay time (ms)</source> <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment> <translation>Abklingzeit (ms)</translation> </message> <message> - <location line="+7"/> <source>Density (%)</source> <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment> <translation>Dichte (%)</translation> </message> <message> - <location line="+6"/> <source>Diffusion (%)</source> <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment> <translation>Diffusion (%)</translation> </message> <message> - <location line="+5"/> <source>Reflections delay (ms)</source> <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> <translation>Verzögerung des Echos (ms)</translation> </message> <message> - <location line="+7"/> <source>Reflections level (mB)</source> <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment> <translation>Stärke des Echos (mB)</translation> </message> <message> - <location line="+7"/> <source>Reverb delay (ms)</source> <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment> <translation>Verzögerung des Nachhalls (ms)</translation> </message> <message> - <location line="+8"/> <source>Reverb level (mB)</source> <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> <translation>Stärke des Nachhalls (mB)</translation> </message> <message> - <location line="+7"/> <source>Room HF level</source> <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment> <translation>Hochfrequenz-Pegel des Raums</translation> </message> <message> - <location line="+6"/> <source>Room level (mB)</source> <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment> <translation>Pegel des Raums (mB)</translation> @@ -517,12 +424,18 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::MediaObject</name> <message> - <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+276"/> <source>Error opening source: type not supported</source> <translation>Die Quelle konnte nicht geöffnet werden: Dieser Typ wird nicht unterstützt</translation> </message> <message> - <location line="+18"/> + <source>Error opening source: resource is compressed</source> + <translation>Die Quelle konnte nicht geöffnet werden: Die Ressource ist komprimiert</translation> + </message> + <message> + <source>Error opening source: resource not valid</source> + <translation>Die Quelle konnte nicht geöffnet werden: Ungültige Ressource</translation> + </message> + <message> <source>Error opening source: media type could not be determined</source> <translation>Die Quelle konnte nicht geöffnet werden: Der Medientyp konnte nicht bestimmt werden</translation> </message> @@ -530,7 +443,6 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::StereoWidening</name> <message> - <location filename="../src/3rdparty/phonon/mmf/stereowidening.cpp" line="+79"/> <source>Level (%)</source> <translation>Stärke (%)</translation> </message> @@ -538,8 +450,6 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::MMF::SurfaceVideoPlayer</name> <message> - <location filename="../src/3rdparty/phonon/mmf/videoplayer_surface.cpp" line="+126"/> - <location line="+16"/> <source>Video display error</source> <translation>Fehler bei der Video-Anzeige</translation> </message> @@ -547,22 +457,14 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Phonon::VolumeSlider</name> <message> - <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+42"/> - <location line="+18"/> - <location line="+129"/> - <location line="+15"/> <source>Volume: %1%</source> <translation>Lautstärke: %1%</translation> </message> <message> - <location line="-159"/> - <location line="+18"/> - <location line="+54"/> <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> <translation>Mit diesem Regler stellen Sie die Lautstärke ein. Die Position links entspricht 0%; die Position rechts entspricht %1%</translation> </message> <message> - <location line="+67"/> <source>Muted</source> <translation>Stummschaltung</translation> </message> @@ -570,12 +472,10 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Q3Accel</name> <message> - <location filename="../src/qt3support/other/q3accel.cpp" line="+481"/> <source>%1, %2 not defined</source> <translation>%1, %2 sind nicht definiert</translation> </message> <message> - <location line="+36"/> <source>Ambiguous %1 not handled</source> <translation>Mehrdeutige %1 können nicht verarbeitet werden</translation> </message> @@ -583,27 +483,22 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Q3DataTable</name> <message> - <location filename="../src/qt3support/sql/q3datatable.cpp" line="+285"/> <source>True</source> <translation>Wahr</translation> </message> <message> - <location line="+1"/> <source>False</source> <translation>Falsch</translation> </message> <message> - <location line="+505"/> <source>Insert</source> <translation>Einfügen</translation> </message> <message> - <location line="+1"/> <source>Update</source> <translation>Aktualisieren</translation> </message> <message> - <location line="+1"/> <source>Delete</source> <translation>Löschen</translation> </message> @@ -611,313 +506,238 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass <context> <name>Q3FileDialog</name> <message> - <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+835"/> <source>Copy or Move a File</source> <translation>Datei kopieren oder verschieben</translation> </message> <message> - <location line="+8"/> <source>Read: %1</source> <translation>Lesen: %1</translation> </message> <message> - <location line="+6"/> - <location line="+30"/> <source>Write: %1</source> <translation>Schreiben: %1</translation> </message> <message> - <location line="-22"/> - <location line="+1579"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location line="-157"/> - <location line="+49"/> - <location line="+2149"/> - <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+133"/> <source>All Files (*)</source> <translation>Alle Dateien (*)</translation> </message> <message> - <location line="-2085"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+1"/> <source>Size</source> <translation>Größe</translation> </message> <message> - <location line="+2"/> <source>Type</source> <translation>Typ</translation> </message> <message> - <location line="+1"/> <source>Date</source> <translation>Datum</translation> </message> <message> - <location line="+1"/> <source>Attributes</source> <translation>Attribute</translation> </message> <message> - <location line="+35"/> - <location line="+2027"/> <source>&OK</source> <translation>&OK</translation> </message> <message> - <location line="-1987"/> <source>Look &in:</source> <translation>Su&chen in:</translation> </message> <message> - <location line="+1"/> - <location line="+1977"/> - <location line="+16"/> <source>File &name:</source> <translation>Datei&name:</translation> </message> <message> - <location line="-1992"/> <source>File &type:</source> <translation>Datei&typ:</translation> </message> <message> - <location line="+7"/> <source>Back</source> <translation>Zurück</translation> </message> <message> - <location line="+7"/> <source>One directory up</source> <translation>Ein Verzeichnis zurück</translation> </message> <message> - <location line="+9"/> <source>Create New Folder</source> <translation>Neuen Ordner erstellen</translation> </message> <message> - <location line="+18"/> <source>List View</source> <translation>Liste</translation> </message> <message> - <location line="+8"/> <source>Detail View</source> <translation>Ausführlich</translation> </message> <message> - <location line="+9"/> <source>Preview File Info</source> <translation>Vorschau der Datei-Informationen</translation> </message> <message> - <location line="+19"/> <source>Preview File Contents</source> <translation>Vorschau des Datei-Inhalts</translation> </message> <message> - <location line="+88"/> <source>Read-write</source> <translation>Lesen/Schreiben</translation> </message> <message> - <location line="+1"/> <source>Read-only</source> <translation>Nur Lesen</translation> </message> <message> - <location line="+1"/> <source>Write-only</source> <translation>Nur Schreiben</translation> </message> <message> - <location line="+1"/> <source>Inaccessible</source> <translation>Gesperrt</translation> </message> <message> - <location line="+2"/> <source>Symlink to File</source> <translation>Verknüpfung mit Datei</translation> </message> <message> - <location line="+1"/> <source>Symlink to Directory</source> <translation>Verknüpfung mit Verzeichnis</translation> </message> <message> - <location line="+1"/> <source>Symlink to Special</source> <translation>Verknüpfung mit Spezialdatei</translation> </message> <message> - <location line="+1"/> <source>File</source> <translation>Datei</translation> </message> <message> - <location line="+1"/> <source>Dir</source> <translation>Verzeichnis</translation> </message> <message> - <location line="+1"/> <source>Special</source> <translation>Spezialattribut</translation> </message> <message> - <location line="+704"/> - <location line="+1999"/> - <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+209"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> - <location line="-1889"/> - <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="+71"/> <source>Save As</source> <translation>Speichern unter</translation> </message> <message> - <location line="+642"/> - <location line="+5"/> - <location line="+355"/> <source>&Open</source> <translation>&Öffnen</translation> </message> <message> - <location line="-357"/> - <location line="+341"/> <source>&Save</source> <translation>S&peichern</translation> </message> <message> - <location line="-334"/> <source>&Rename</source> <translation>&Umbenennen</translation> </message> <message> - <location line="+1"/> <source>&Delete</source> <translation>&Löschen</translation> </message> <message> - <location line="+20"/> <source>R&eload</source> <translation>Erne&ut laden</translation> </message> <message> - <location line="+4"/> <source>Sort by &Name</source> <translation>Nach &Namen sortieren</translation> </message> <message> - <location line="+2"/> <source>Sort by &Size</source> <translation>Nach &Größe sortieren</translation> </message> <message> - <location line="+1"/> <source>Sort by &Date</source> <translation>Nach &Datum sortieren</translation> </message> <message> - <location line="+2"/> <source>&Unsorted</source> <translation>&Unsortiert</translation> </message> <message> - <location line="+15"/> <source>Sort</source> <translation>Sortieren</translation> </message> <message> - <location line="+4"/> <source>Show &hidden files</source> <translation>&Versteckte Dateien anzeigen</translation> </message> <message> - <location line="+31"/> <source>the file</source> <translation>die Datei</translation> </message> <message> - <location line="+2"/> <source>the directory</source> <translation>das Verzeichnis</translation> </message> <message> - <location line="+2"/> <source>the symlink</source> <translation>die Verknüpfung</translation> </message> <message> - <location line="+3"/> <source>Delete %1</source> <translation>%1 löschen</translation> </message> <message> - <location line="+1"/> <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source> <translation><qt>Sind Sie sicher, dass Sie %1 "%2" löschen möchten?</qt></translation> </message> <message> - <location line="+2"/> <source>&Yes</source> <translation>&Ja</translation> </message> <message> - <location line="+0"/> <source>&No</source> <translation>&Nein</translation> </message> <message> - <location line="+36"/> <source>New Folder 1</source> <translation>Neues Verzeichnis 1</translation> </message> <message> - <location line="+5"/> <source>New Folder</source> <translation>Neues Verzeichnis</translation> </message> <message> - <location line="+5"/> <source>New Folder %1</source> <translation>Neues Verzeichnis %1</translation> </message> <message> - <location line="+98"/> <source>Find Directory</source> <translation>Verzeichnis suchen</translation> </message> <message> - <location line="+5"/> - <location line="+108"/> <source>Directories</source> <translation>Verzeichnisse</translation> </message> <message> - <location line="-2"/> <source>Directory:</source> <translation>Verzeichnis:</translation> </message> <message> - <location line="+40"/> - <location line="+1009"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location line="-1008"/> <source>%1 File not found. Check path and filename.</source> @@ -926,17 +746,14 @@ Datei kann nicht gefunden werden. Überprüfen Sie Pfad und Dateinamen.</translation> </message> <message> - <location filename="../src/qt3support/dialogs/q3filedialog_win.cpp" line="-191"/> <source>All Files (*.*)</source> <translation>Alle Dateien (*.*)</translation> </message> <message> - <location line="+264"/> <source>Open </source> <translation>Öffnen</translation> </message> <message> - <location line="+107"/> <source>Select a Directory</source> <translation>Wählen Sie ein Verzeichnis</translation> </message> @@ -944,29 +761,24 @@ Datei kann nicht gefunden werden. <context> <name>Q3LocalFs</name> <message> - <location filename="../src/qt3support/network/q3localfs.cpp" line="+130"/> - <location line="+10"/> <source>Could not read directory %1</source> <translation>Konnte Verzeichnis nicht lesen %1</translation> </message> <message> - <location line="+45"/> <source>Could not create directory %1</source> <translation>Konnte Verzeichnis nicht erstellen %1</translation> </message> <message> - <location line="+34"/> <source>Could not remove file or directory %1</source> <translation>Konnte Datei oder Verzeichnis nicht löschen %1</translation> </message> <message> - <location line="+27"/> <source>Could not rename %1 to @@ -977,14 +789,12 @@ nach %2</translation> </message> <message> - <location line="+25"/> <source>Could not open %1</source> <translation>Konnte nicht geöffnet werden: %1</translation> </message> <message> - <location line="+68"/> <source>Could not write %1</source> <translation>Konnte nicht geschrieben werden: @@ -994,12 +804,10 @@ nach <context> <name>Q3MainWindow</name> <message> - <location filename="../src/qt3support/widgets/q3mainwindow.cpp" line="+2051"/> <source>Line up</source> <translation>Ausrichten</translation> </message> <message> - <location line="+2"/> <source>Customize...</source> <translation>Anpassen...</translation> </message> @@ -1007,7 +815,6 @@ nach <context> <name>Q3NetworkProtocol</name> <message> - <location filename="../src/qt3support/network/q3networkprotocol.cpp" line="+854"/> <source>Operation stopped by the user</source> <translation>Operation von Benutzer angehalten</translation> </message> @@ -1015,8 +822,6 @@ nach <context> <name>Q3ProgressDialog</name> <message> - <location filename="../src/qt3support/dialogs/q3progressdialog.cpp" line="+224"/> - <location line="+61"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> @@ -1024,28 +829,22 @@ nach <context> <name>Q3TabDialog</name> <message> - <location filename="../src/qt3support/dialogs/q3tabdialog.cpp" line="+190"/> - <location line="+824"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location line="-366"/> <source>Apply</source> <translation>Anwenden</translation> </message> <message> - <location line="+43"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location line="+45"/> <source>Defaults</source> <translation>Voreinstellungen</translation> </message> <message> - <location line="+50"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> @@ -1053,38 +852,30 @@ nach <context> <name>Q3TextEdit</name> <message> - <location filename="../src/qt3support/text/q3textedit.cpp" line="+5429"/> <source>&Undo</source> <translation>&Rückgängig</translation> </message> <message> - <location line="+1"/> <source>&Redo</source> <translation>Wieder&herstellen</translation> </message> <message> - <location line="+5"/> <source>Cu&t</source> <translation>&Ausschneiden</translation> </message> <message> - <location line="+1"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> <message> - <location line="+2"/> <source>&Paste</source> <translation>Einf&ügen</translation> </message> <message> - <location line="+3"/> <source>Clear</source> <translation>Löschen</translation> </message> <message> - <location line="+4"/> - <location line="+2"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> @@ -1092,67 +883,54 @@ nach <context> <name>Q3TitleBar</name> <message> - <location filename="../src/plugins/accessible/compat/q3complexwidgets.cpp" line="+246"/> <source>System</source> <translation>System</translation> </message> <message> - <location line="+3"/> <source>Restore up</source> <translation>Wiederherstellen</translation> </message> <message> - <location line="+1"/> <source>Minimize</source> <translation>Minimieren</translation> </message> <message> - <location line="+3"/> <source>Restore down</source> <translation>Wiederherstellen</translation> </message> <message> - <location line="+1"/> <source>Maximize</source> <translation>Maximieren</translation> </message> <message> - <location line="+2"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="+18"/> <source>Contains commands to manipulate the window</source> <translation>Enthält Befehle zum Ändern der Fenstergröße</translation> </message> <message> - <location line="+3"/> <source>Puts a minimized window back to normal</source> <translation>Stellt ein minimiertes Fenster wieder her</translation> </message> <message> - <location line="+1"/> <source>Moves the window out of the way</source> <translation>Minimiert das Fenster</translation> </message> <message> - <location line="+3"/> <source>Puts a maximized window back to normal</source> <translation>Stellt ein maximiertes Fenster wieder her</translation> </message> <message> - <location line="+1"/> <source>Makes the window full screen</source> <translation>Vollbildmodus</translation> </message> <message> - <location line="+2"/> <source>Closes the window</source> <translation>Schließt das Fenster</translation> </message> <message> - <location line="+2"/> <source>Displays the name of the window and contains controls to manipulate it</source> <translation>Zeigt den Namen des Fensters und enthält Befehle zum Ändern</translation> </message> @@ -1160,7 +938,6 @@ nach <context> <name>Q3ToolBar</name> <message> - <location filename="../src/qt3support/widgets/q3toolbar.cpp" line="+692"/> <source>More...</source> <translation>Mehr...</translation> </message> @@ -1168,51 +945,38 @@ nach <context> <name>Q3UrlOperator</name> <message> - <location filename="../src/qt3support/network/q3urloperator.cpp" line="+386"/> - <location line="+260"/> - <location line="+4"/> <source>The protocol `%1' is not supported</source> <translation>Das Protokoll `%1' wird nicht unterstützt</translation> </message> <message> - <location line="-260"/> <source>The protocol `%1' does not support listing directories</source> <translation>Das Protokoll `%1' unterstützt nicht das Auflisten von Verzeichnissen</translation> </message> <message> - <location line="+3"/> <source>The protocol `%1' does not support creating new directories</source> <translation>Das Protokoll `%1' unterstützt nicht das Anlegen neuer Verzeichnisse</translation> </message> <message> - <location line="+3"/> <source>The protocol `%1' does not support removing files or directories</source> <translation>Das Protokoll `%1' unterstützt nicht das Löschen von Dateien oder Verzeichnissen</translation> </message> <message> - <location line="+3"/> <source>The protocol `%1' does not support renaming files or directories</source> <translation>Das Protokoll `%1' unterstützt nicht das Umbenennen von Dateien oder Verzeichnissen</translation> </message> <message> - <location line="+3"/> <source>The protocol `%1' does not support getting files</source> <translation>Das Protokoll `%1' unterstützt nicht das Laden von Dateien</translation> </message> <message> - <location line="+3"/> <source>The protocol `%1' does not support putting files</source> <translation>Das Protokoll `%1' unterstützt nicht das Speichern von Dateien</translation> </message> <message> - <location line="+243"/> - <location line="+4"/> <source>The protocol `%1' does not support copying or moving files or directories</source> <translation>Das Protokoll `%1' unterstützt nicht das Kopieren oder Verschieben von Dateien oder Verzeichnissen</translation> </message> <message> - <location line="+237"/> - <location line="+1"/> <source>(unknown)</source> <translation>(unbekannt)</translation> </message> @@ -1220,27 +984,22 @@ nach <context> <name>Q3Wizard</name> <message> - <location filename="../src/qt3support/dialogs/q3wizard.cpp" line="+177"/> <source>&Cancel</source> <translation>&Abbrechen</translation> </message> <message> - <location line="+1"/> <source>< &Back</source> <translation>< &Zurück</translation> </message> <message> - <location line="+1"/> <source>&Next ></source> <translation>&Weiter ></translation> </message> <message> - <location line="+1"/> <source>&Finish</source> <translation>Ab&schließen</translation> </message> <message> - <location line="+1"/> <source>&Help</source> <translation>&Hilfe</translation> </message> @@ -1248,45 +1007,30 @@ nach <context> <name>QAbstractSocket</name> <message> - <location filename="../src/network/socket/qabstractsocket.cpp" line="+916"/> - <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+629"/> - <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/> - <location line="+26"/> <source>Host not found</source> <translation>Rechner konnte nicht gefunden werden</translation> </message> <message> - <location line="+50"/> - <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+3"/> - <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+4"/> <source>Connection refused</source> <translation>Verbindung verweigert</translation> </message> <message> - <location line="+142"/> <source>Connection timed out</source> <translation>Das Zeitlimit für die Verbindung wurde überschritten</translation> </message> <message> - <location line="-559"/> - <location line="+809"/> - <location line="+220"/> <source>Operation on socket is not supported</source> <translation>Diese Socket-Operation wird nicht unterstützt</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+625"/> - <location filename="../src/network/socket/qabstractsocket.cpp" line="+203"/> <source>Socket operation timed out</source> <translation>Das Zeitlimit für die Operation wurde überschritten</translation> </message> <message> - <location filename="../src/network/socket/qabstractsocket.cpp" line="+380"/> <source>Socket is not connected</source> <translation>Nicht verbunden</translation> </message> <message> - <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-8"/> <source>Network unreachable</source> <translation>Das Netzwerk ist nicht erreichbar</translation> </message> @@ -1294,17 +1038,14 @@ nach <context> <name>QAbstractSpinBox</name> <message> - <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1263"/> <source>&Step up</source> <translation>&Inkrementieren</translation> </message> <message> - <location line="+2"/> <source>Step &down</source> <translation>&Dekrementieren</translation> </message> <message> - <location line="-8"/> <source>&Select All</source> <translation>&Alles auswählen</translation> </message> @@ -1312,7 +1053,6 @@ nach <context> <name>QAccessibleButton</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+250"/> <source>Press</source> <translation>Drücken</translation> </message> @@ -1320,28 +1060,23 @@ nach <context> <name>QApplication</name> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="-13"/> <source>QT_LAYOUT_DIRECTION</source> <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> <translation>LTR</translation> </message> <message> - <location filename="../src/gui/dialogs/qmessagebox.h" line="+354"/> <source>Executable '%1' requires Qt %2, found Qt %3.</source> <translation>Die Anwendung '%1' benötigt Qt %2; es wurde aber Qt %3 gefunden.</translation> </message> <message> - <location line="+2"/> <source>Incompatible Qt Library Error</source> <translation>Die Qt-Bibliothek ist inkompatibel</translation> </message> <message> - <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/> <source>Activate</source> <translation>Aktivieren</translation> </message> <message> - <location line="+2"/> <source>Activates the program's main window</source> <translation>Aktiviert das Hauptfenster der Anwendung</translation> </message> @@ -1349,22 +1084,18 @@ nach <context> <name>QAxSelect</name> <message> - <location filename="../src/activeqt/container/qaxselect.ui"/> <source>Select ActiveX Control</source> <translation>ActiveX-Element auswählen</translation> </message> <message> - <location/> <source>OK</source> <translation>OK</translation> </message> <message> - <location/> <source>&Cancel</source> <translation>&Abbrechen</translation> </message> <message> - <location/> <source>COM &Object:</source> <translation>COM-&Objekt:</translation> </message> @@ -1372,17 +1103,14 @@ nach <context> <name>QCheckBox</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-136"/> <source>Uncheck</source> <translation>Löschen</translation> </message> <message> - <location line="+3"/> <source>Check</source> <translation>Ankreuzen</translation> </message> <message> - <location line="+1"/> <source>Toggle</source> <translation>Umschalten</translation> </message> @@ -1390,57 +1118,46 @@ nach <context> <name>QColorDialog</name> <message> - <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1378"/> <source>Hu&e:</source> <translation>Farb&ton:</translation> </message> <message> - <location line="+1"/> <source>&Sat:</source> <translation>&Sättigung:</translation> </message> <message> - <location line="+1"/> <source>&Val:</source> <translation>&Helligkeit:</translation> </message> <message> - <location line="+1"/> <source>&Red:</source> <translation>&Rot:</translation> </message> <message> - <location line="+1"/> <source>&Green:</source> <translation>&Grün:</translation> </message> <message> - <location line="+1"/> <source>Bl&ue:</source> <translation>Bla&u:</translation> </message> <message> - <location line="+1"/> <source>A&lpha channel:</source> <translation>A&lphakanal:</translation> </message> <message> - <location line="+101"/> <source>Select Color</source> <translation>Farbauswahl</translation> </message> <message> - <location line="+183"/> <source>&Basic colors</source> <translation>Grundfar&ben</translation> </message> <message> - <location line="+1"/> <source>&Custom colors</source> <translation>&Benutzerdefinierte Farben</translation> </message> <message> - <location line="+1"/> <source>&Add to Custom Colors</source> <translation>Zu benutzerdefinierten Farben &hinzufügen</translation> </message> @@ -1448,23 +1165,18 @@ nach <context> <name>QComboBox</name> <message> - <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1772"/> - <location line="+65"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> - <location filename="../src/gui/itemviews/qitemeditorfactory.cpp" line="+556"/> <source>False</source> <translation>Falsch</translation> </message> <message> - <location line="+1"/> <source>True</source> <translation>Wahr</translation> </message> <message> - <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+0"/> <source>Close</source> <translation>Schließen</translation> </message> @@ -1472,43 +1184,36 @@ nach <context> <name>QCoreApplication</name> <message> - <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="+119"/> <source>%1: key is empty</source> <comment>QSystemSemaphore</comment> <translation>%1: Ungültige Schlüsselangabe (leer)</translation> </message> <message> - <location line="+12"/> <source>%1: unable to make key</source> <comment>QSystemSemaphore</comment> <translation>%1: Es kann kein Schlüssel erzeugt werden</translation> </message> <message> - <location line="+9"/> <source>%1: ftok failed</source> <comment>QSystemSemaphore</comment> <translation>%1: ftok-Aufruf schlug fehl</translation> </message> <message> - <location filename="../src/corelib/kernel/qsystemsemaphore_symbian.cpp" line="+65"/> <source>%1: already exists</source> <comment>QSystemSemaphore</comment> <translation>%1: existiert bereits</translation> </message> <message> - <location line="+4"/> <source>%1: does not exist</source> <comment>QSystemSemaphore</comment> <translation>%1: Nicht existent</translation> </message> <message> - <location line="+5"/> <source>%1: out of resources</source> <comment>QSystemSemaphore</comment> <translation>%1: Keine Ressourcen mehr verfügbar</translation> </message> <message> - <location line="+4"/> <source>%1: unknown error %2</source> <comment>QSystemSemaphore</comment> <translation>%1: Unbekannter Fehler %2</translation> @@ -1517,22 +1222,18 @@ nach <context> <name>QDB2Driver</name> <message> - <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1253"/> <source>Unable to connect</source> <translation>Es kann keine Verbindung aufgebaut werden</translation> </message> <message> - <location line="+298"/> <source>Unable to commit transaction</source> <translation>Die Transaktion kann nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+17"/> <source>Unable to rollback transaction</source> <translation>Die Transaktion kann nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen)</translation> </message> <message> - <location line="+15"/> <source>Unable to set autocommit</source> <translation>'autocommit' kann nicht aktiviert werden</translation> </message> @@ -1540,33 +1241,26 @@ nach <context> <name>QDB2Result</name> <message> - <location line="-1030"/> - <location line="+240"/> <source>Unable to execute statement</source> <translation>Der Befehl kann nicht ausgeführt werden</translation> </message> <message> - <location line="-203"/> <source>Unable to prepare statement</source> <translation>Der Befehl kann nicht initialisiert werden</translation> </message> <message> - <location line="+193"/> <source>Unable to bind variable</source> <translation>Die Variable kann nicht gebunden werden</translation> </message> <message> - <location line="+89"/> <source>Unable to fetch record %1</source> <translation>Der Datensatz %1 kann nicht abgeholt werden</translation> </message> <message> - <location line="+19"/> <source>Unable to fetch next</source> <translation>Der nächste Datensatz kann nicht abgeholt werden</translation> </message> <message> - <location line="+21"/> <source>Unable to fetch first</source> <translation>Der erste Datensatz kann nicht abgeholt werden</translation> </message> @@ -1574,22 +1268,18 @@ nach <context> <name>QDateTimeEdit</name> <message> - <location filename="../src/gui/widgets/qdatetimeedit.cpp" line="+2287"/> <source>AM</source> <translation>AM</translation> </message> <message> - <location line="+0"/> <source>am</source> <translation>am</translation> </message> <message> - <location line="+2"/> <source>PM</source> <translation>PM</translation> </message> <message> - <location line="+0"/> <source>pm</source> <translation>pm</translation> </message> @@ -1597,17 +1287,14 @@ nach <context> <name>QDeclarativeAbstractAnimation</name> <message> - <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+166"/> <source>Cannot animate non-existent property "%1"</source> <translation>Die Eigenschaft '%1" existiert nicht und kann daher nicht animiert werden</translation> </message> <message> - <location line="+3"/> <source>Cannot animate read-only property "%1"</source> <translation>Die Eigenschaft '%1" ist schreibgeschützt und kann daher nicht animiert werden</translation> </message> <message> - <location filename="../src/declarative/util/qdeclarativeutilmodule.cpp" line="+122"/> <source>Animation is an abstract class</source> <translation>Die Klasse Animation ist abstrakt</translation> </message> @@ -1615,7 +1302,6 @@ nach <context> <name>QDeclarativeAnchorAnimation</name> <message> - <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+2568"/> <source>Cannot set a duration of < 0</source> <translation>Es kann keine Zeitdauer <0 gesetzt werden</translation> </message> @@ -1623,67 +1309,50 @@ nach <context> <name>QDeclarativeAnchors</name> <message> - <location filename="../src/declarative/graphicsitems/qdeclarativeanchors.cpp" line="+180"/> <source>Possible anchor loop detected on fill.</source> <translation>Bei der Fülloperation wurde eine potentielle Endlosschleife der Anker festgestellt.</translation> </message> <message> - <location line="+29"/> <source>Possible anchor loop detected on centerIn.</source> <translation>Bei der Operation 'centerIn' wurde eine potentielle Endlosschleife der Anker festgestellt.</translation> </message> <message> - <location line="+201"/> - <location line="+34"/> - <location line="+610"/> - <location line="+37"/> <source>Cannot anchor to an item that isn't a parent or sibling.</source> <translation>Das Ziel eines Anker muss ein Elternelement oder Element der gleichen Ebene sein.</translation> </message> <message> - <location line="-534"/> <source>Possible anchor loop detected on vertical anchor.</source> <translation>Bei einem vertikalen Anker wurde eine potentielle Endlosschleife der Anker festgestellt.</translation> </message> <message> - <location line="+59"/> <source>Possible anchor loop detected on horizontal anchor.</source> <translation>Bei einem horizontalen Anker wurde eine potentielle Endlosschleife der Anker festgestellt.</translation> </message> <message> - <location line="+422"/> <source>Cannot specify left, right, and hcenter anchors.</source> <translation>Ankerangaben für links, rechts und horizontal zentriert dürfen nicht zusammen auftreten.</translation> </message> <message> - <location line="+10"/> - <location line="+37"/> <source>Cannot anchor to a null item.</source> <translation>Es kann kein Anker zu einem Null-Element angegeben werden.</translation> </message> <message> - <location line="-34"/> <source>Cannot anchor a horizontal edge to a vertical edge.</source> <translation>Es kann kein Anker zu einer horizontalen oder vertikalen Kante angegeben werden.</translation> </message> <message> - <location line="+6"/> - <location line="+37"/> <source>Cannot anchor item to self.</source> <translation>Ein Element kann keinen Anker zu sich selbst haben.</translation> </message> <message> - <location line="-25"/> <source>Cannot specify top, bottom, and vcenter anchors.</source> <translation>Ankerangaben für oben, unten und vertikal zentriert dürfen nicht zusammen auftreten.</translation> </message> <message> - <location line="+6"/> <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source> <translation>Ein Baseline-Anker darf nicht mit zusammen mit weiteren Ankerangaben für oben, unten und vertikal zentriert verwendet werden.</translation> </message> <message> - <location line="+13"/> <source>Cannot anchor a vertical edge to a horizontal edge.</source> <translation>Vertikale und horizontale Kanten können nicht mit Ankern verbunden werden.</translation> </message> @@ -1691,7 +1360,6 @@ nach <context> <name>QDeclarativeAnimatedImage</name> <message> - <location filename="../src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp" line="+86"/> <source>Qt was built without support for QMovie</source> <translation>Diese Version der Qt-Bibliothek wurde ohne Unterstützung für die Klasse QMovie erstellt</translation> </message> @@ -1699,7 +1367,6 @@ nach <context> <name>QDeclarativeBehavior</name> <message> - <location filename="../src/declarative/util/qdeclarativebehavior.cpp" line="+127"/> <source>Cannot change the animation assigned to a Behavior.</source> <translation>Die zu einem Behavior-Element gehörende Animation kann nicht geändert werden.</translation> </message> @@ -1707,7 +1374,6 @@ nach <context> <name>QDeclarativeBinding</name> <message> - <location filename="../src/declarative/qml/qdeclarativebinding.cpp" line="+238"/> <source>Binding loop detected for property "%1"</source> <translation>Bei der für die Eigenschaft "%1" angegebenen Bindung wurde eine Endlosschleife festgestellt</translation> </message> @@ -1715,7 +1381,6 @@ nach <context> <name>QDeclarativeCompiledBindings</name> <message> - <location filename="../src/declarative/qml/qdeclarativecompiledbindings.cpp" line="+372"/> <source>Binding loop detected for property "%1"</source> <translation>Bei der für die Eigenschaft "%1" angegebenen Bindung wurde eine Endlosschleife festgestellt</translation> </message> @@ -1723,390 +1388,310 @@ nach <context> <name>QDeclarativeCompiler</name> <message> - <location filename="../src/declarative/qml/qdeclarativecompiler.cpp" line="+186"/> - <location line="+1596"/> - <location line="+186"/> - <location line="+81"/> - <location line="+75"/> - <location line="+487"/> <source>Invalid property assignment: "%1" is a read-only property</source> <translation>Ungültige Zuweisung bei Eigenschaft: "%1" ist schreibgeschützt</translation> </message> <message> - <location line="-2416"/> <source>Invalid property assignment: unknown enumeration</source> <translation>Ungültige Zuweisung bei Eigenschaft: Ungültiger Aufzählungswert</translation> </message> <message> - <location line="+8"/> <source>Invalid property assignment: string expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Zeichenkette erwartet</translation> </message> <message> - <location line="+3"/> <source>Invalid property assignment: url expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine URL erwartet</translation> </message> <message> - <location line="+10"/> <source>Invalid property assignment: unsigned int expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine vorzeichenloser Ganzzahlwert erwartet</translation> </message> <message> - <location line="+11"/> <source>Invalid property assignment: int expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird ein Ganzzahlwert erwartet</translation> </message> <message> - <location line="+4"/> <source>Invalid property assignment: float expected</source> - <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl erwartet</translation> + <translation type="obsolete">Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl erwartet</translation> </message> <message> - <location line="+3"/> <source>Invalid property assignment: double expected</source> - <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl (double) erwartet</translation> + <translation type="obsolete">Ungültige Zuweisung bei Eigenschaft: Es wird eine Gleitkommazahl (double) erwartet</translation> </message> <message> - <location line="+6"/> <source>Invalid property assignment: color expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Farbspezifikation erwartet</translation> </message> <message> - <location line="+8"/> <source>Invalid property assignment: date expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Datumsangabe erwartet</translation> </message> <message> - <location line="+7"/> <source>Invalid property assignment: time expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Zeitangabe erwartet</translation> </message> <message> - <location line="+7"/> <source>Invalid property assignment: datetime expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Datumsangabe erwartet</translation> </message> <message> - <location line="+9"/> <source>Invalid property assignment: point expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Koordinatenangabe für einen Punkt erwartet</translation> </message> <message> - <location line="+8"/> <source>Invalid property assignment: size expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Größenangabe erwartet</translation> </message> <message> - <location line="+8"/> <source>Invalid property assignment: rect expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es werden Parameter für ein Rechteck erwartet</translation> </message> <message> - <location line="+5"/> <source>Invalid property assignment: boolean expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird ein Boolescher Wert erwartet</translation> </message> <message> - <location line="+7"/> <source>Invalid property assignment: 3D vector expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird ein dreidimensionaler Vektor erwartet</translation> </message> <message> - <location line="+9"/> <source>Invalid property assignment: unsupported type "%1"</source> <translation>Ungültige Zuweisung bei Eigenschaft: Der Typ "%1" ist nicht unterstützt</translation> </message> <message> - <location line="+277"/> <source>Element is not creatable.</source> <translation>Das Element kann nicht erzeugt werden.</translation> </message> <message> - <location line="+618"/> <source>Component elements may not contain properties other than id</source> <translation>Komponenten dürfen außer id keine weiteren Eigenschaften enthalten.</translation> </message> <message> - <location line="+7"/> <source>Invalid component id specification</source> <translation>Ungültige Komponentenspezifikation</translation> </message> <message> - <location line="+6"/> - <location line="+478"/> <source>id is not unique</source> <translation>ID-Wert nicht eindeutig</translation> </message> <message> - <location line="-468"/> <source>Invalid component body specification</source> <translation>Inhalt der Komponente ungültig</translation> </message> <message> - <location line="+14"/> <source>Cannot create empty component specification</source> <translation>Es kann keine leere Komponentenangabe erzeugt werden</translation> </message> <message> - <location line="+105"/> <source>Empty signal assignment</source> <translation>Leere Signalzuweisung</translation> </message> <message> - <location line="+38"/> <source>Empty property assignment</source> <translation>Leere Eigenschaftszuweisung</translation> </message> <message> - <location line="+12"/> <source>Attached properties cannot be used here</source> <translation>An dieser Stelle können keine Eigenschaften des Typs 'attached' verwendet werden</translation> </message> <message> - <location line="+15"/> - <location line="+102"/> <source>Non-existent attached object</source> <translation>Es existiert kein Bezugselement für die Eigenschaft</translation> </message> <message> - <location line="-98"/> - <location line="+101"/> <source>Invalid attached object assignment</source> <translation>Ungültige Zuweisung des Bezugselements</translation> </message> <message> - <location line="-48"/> <source>Cannot assign to non-existent default property</source> <translation>Es kann keine Zuweisung erfolgen, da keine Vorgabe-Eigenschaft existiert</translation> </message> <message> - <location line="+2"/> - <location line="+352"/> <source>Cannot assign to non-existent property "%1"</source> <translation>Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens '%1" existiert</translation> </message> <message> - <location line="-322"/> <source>Invalid use of namespace</source> <translation>Ungültige Verwendung eines Namensraums</translation> </message> <message> - <location line="+5"/> <source>Not an attached property name</source> <translation>Kein gültiger Name einer Eigenschaft des Typs 'attached'</translation> </message> <message> - <location line="+182"/> <source>Invalid use of id property</source> <translation>Ungültige Verwendung einer Eigenschaft des Typs 'Id'</translation> </message> <message> - <location line="-357"/> <source>Incorrectly specified signal assignment</source> <translation></translation> </message> <message> - <location line="-100"/> + <source>Invalid property assignment: number expected</source> + <translation>Ungültige Zuweisung bei Eigenschaft: Es wird eine Zahl erwartet</translation> + </message> + <message> <source>Component objects cannot declare new properties.</source> <translation>Komponentenobjekte können keine neuen Eigenschaften deklarieren.</translation> </message> <message> - <location line="+2"/> <source>Component objects cannot declare new signals.</source> <translation>Komponentenobjekte können keine neuen Signale deklarieren.</translation> </message> <message> - <location line="+2"/> <source>Component objects cannot declare new functions.</source> <translation>Komponentenobjekte können keine neuen Funktionen deklarieren.</translation> </message> <message> - <location line="+108"/> <source>Cannot assign a value to a signal (expecting a script to be run)</source> <translation>Einem Signal können keine Werte zugewiesen werden (es wird ein Skript erwartet)</translation> </message> <message> - <location line="+434"/> - <location line="+2"/> <source>Property has already been assigned a value</source> <translation>Der Eigenschaft wurde bereits ein Wert zugewiesen</translation> </message> <message> - <location line="+12"/> - <location line="+7"/> <source>Invalid grouped property access</source> <translation>Falsche Gruppierung bei Zugriff auf Eigenschaft</translation> </message> <message> - <location line="+3"/> <source>Cannot assign a value directly to a grouped property</source> <translation>Bei einer Eigenschaft, die Teil einer Gruppierung ist, ist keine direkte Wertzuweisung zulässig</translation> </message> <message> - <location line="+16"/> <source>Invalid property use</source> <translation>Ungültige Verwendung von Eigenschaften</translation> </message> <message> - <location line="+13"/> <source>Property assignment expected</source> <translation>Zuweisung an Eigenschaft erwartet</translation> </message> <message> - <location line="+3"/> <source>Single property assignment expected</source> <translation>Einzelne Zuweisung an Eigenschaft erwartet</translation> </message> <message> - <location line="+5"/> <source>Unexpected object assignment</source> <translation>Zuweisung des Objekts nicht zulässig</translation> </message> <message> - <location line="+57"/> <source>Cannot assign object to list</source> <translation>Zuweisung eines Objekts an eine Liste nicht zulässig</translation> </message> <message> - <location line="+6"/> <source>Can only assign one binding to lists</source> <translation>Listen kann nur eine einzige Bindung zugewiesen werden</translation> </message> <message> - <location line="+6"/> <source>Cannot assign primitives to lists</source> <translation>Zuweisung eines einfachen Werts (primitive) an eine Liste nicht zulässig</translation> </message> <message> - <location line="+13"/> <source>Cannot assign multiple values to a script property</source> <translation>Eine Zuweisung mehrerer Werte an eine Skript-Eigenschaft ist nicht zulässig</translation> </message> <message> - <location line="+3"/> <source>Invalid property assignment: script expected</source> <translation>Ungültige Zuweisung bei Eigenschaft: Es wird ein Skript erwartet</translation> </message> <message> - <location line="+105"/> <source>Cannot assign object to property</source> <translation>Zuweisung eines Objekts an eine Eigenschaft nicht zulässig</translation> </message> <message> - <location line="+50"/> <source>"%1" cannot operate on "%2"</source> <translation>"%1" kann nicht auf "%2" angewandt werden</translation> </message> <message> - <location line="+117"/> <source>Duplicate default property</source> <translation>Mehrfaches Auftreten der Vorgabe-Eigenschaft</translation> </message> <message> - <location line="+5"/> <source>Duplicate property name</source> <translation>Mehrfaches Auftreten eines Eigenschaftsnamens</translation> </message> <message> - <location line="+3"/> <source>Property names cannot begin with an upper case letter</source> <translation>Eigenschaftsnamen dürfen nicht mit einem Großbuchstaben beginnen</translation> </message> <message> - <location line="+7"/> + <source>Illegal property name</source> + <translation>Ungültiger Name der Eigenschaft</translation> + </message> + <message> <source>Duplicate signal name</source> <translation>Mehrfaches Auftreten eines Signalnamens</translation> </message> <message> - <location line="+2"/> <source>Signal names cannot begin with an upper case letter</source> <translation>Signalnamen dürfen nicht mit einem Großbuchstaben beginnen</translation> </message> <message> - <location line="+2"/> <source>Illegal signal name</source> <translation>Ungültiger Name für Signal</translation> </message> <message> - <location line="+6"/> <source>Duplicate method name</source> <translation>Mehrfaches Auftreten eines Methodennamens</translation> </message> <message> - <location line="+2"/> <source>Method names cannot begin with an upper case letter</source> <translation>Methodennamen dürfen nicht mit einem Großbuchstaben beginnen</translation> </message> <message> - <location line="+2"/> <source>Illegal method name</source> <translation>Ungültiger Name für Methode</translation> </message> <message> - <location line="+21"/> <source>Property value set multiple times</source> <translation>Mehrfache Zuweisung eines Wertes an eine Eigenschaft</translation> </message> <message> - <location line="+4"/> <source>Invalid property nesting</source> <translation>Ungültige Schachtelung von Eigenschaften</translation> </message> <message> - <location line="+53"/> <source>Cannot override FINAL property</source> <translation>Eine als 'FINAL' ausgewiesene Eigenschaft kann nicht überschrieben werden</translation> </message> <message> - <location line="+24"/> <source>Invalid property type</source> <translation>Ungültiger Typ der Eigenschaft</translation> </message> <message> - <location line="+159"/> <source>Invalid empty ID</source> <translation>Ungültiger (leerer) Id-Wert</translation> </message> <message> - <location line="+3"/> <source>IDs cannot start with an uppercase letter</source> <translation>Id-Werte dürfen nicht mit einem Großbuchstaben beginnen</translation> </message> <message> - <location line="+6"/> <source>IDs must start with a letter or underscore</source> <translation>Id-Werte müssen mit einem Buchstaben oder dem Zeichen '_' beginnen</translation> </message> <message> - <location line="+2"/> <source>IDs must contain only letters, numbers, and underscores</source> <translation>Id-Werte dürfen nur Buchstaben oder Unterstriche enthalten</translation> </message> <message> - <location line="+6"/> <source>ID illegally masks global JavaScript property</source> <translation>Der Id-Wert überdeckt eine globale Eigenschaft aus JavaScript</translation> </message> <message> - <location line="+31"/> - <location line="+9"/> <source>No property alias location</source> <translation>Alias-Eigenschaft ohne Quellangabe</translation> </message> <message> - <location line="-4"/> - <location line="+25"/> <source>Invalid alias location</source> <translation>Ungültige Quellangabe bei Alias-Eigenschaft</translation> </message> <message> - <location line="-16"/> <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> <translation>Ungültige Referenzierung einer Alias-Eigenschaft. Die Referenz muss in der Form <id> oder <id>.<property> angegeben werden</translation> </message> <message> - <location line="+3"/> <source>Invalid alias reference. Unable to find id "%1"</source> <translation>Ungültige Referenzierung einer Alias-Eigenschaft. Der Id-Wert "%1" konnte nicht gefunden werden</translation> </message> @@ -2114,7 +1699,6 @@ nach <context> <name>QDeclarativeComponent</name> <message> - <location filename="../src/declarative/qml/qdeclarativecomponent.cpp" line="+459"/> <source>Invalid empty URL</source> <translation>Ungültige (leere) URL</translation> </message> @@ -2122,23 +1706,18 @@ nach <context> <name>QDeclarativeCompositeTypeManager</name> <message> - <location filename="../src/declarative/qml/qdeclarativecompositetypemanager.cpp" line="+475"/> - <location line="+266"/> <source>Resource %1 unavailable</source> <translation>Auf die Ressource %1 konnte nicht zugegriffen werden</translation> </message> <message> - <location line="-122"/> <source>Namespace %1 cannot be used as a type</source> <translation>Der Namensraum %1 kann nicht als Typangabe verwendet werden</translation> </message> <message> - <location line="+2"/> <source>%1 %2</source> <translation>%1 %2</translation> </message> <message> - <location line="+47"/> <source>Type %1 unavailable</source> <translation>Der Typ %1 ist nicht verfügbar</translation> </message> @@ -2146,23 +1725,18 @@ nach <context> <name>QDeclarativeConnections</name> <message> - <location filename="../src/declarative/util/qdeclarativeconnections.cpp" line="+209"/> - <location line="+60"/> <source>Cannot assign to non-existent property "%1"</source> <translation>Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens '%1" existiert</translation> </message> <message> - <location line="-50"/> <source>Connections: nested objects not allowed</source> <translation>Verbindungen: Verschachtelte Objekte sind nicht zulässig</translation> </message> <message> - <location line="+3"/> <source>Connections: syntax error</source> <translation>Verbindungen: Syntaxfehler</translation> </message> <message> - <location line="+8"/> <source>Connections: script expected</source> <translation>Verbindungen: Skript erwartet</translation> </message> @@ -2170,33 +1744,26 @@ nach <context> <name>QDeclarativeEngine</name> <message> - <location filename="../src/declarative/qml/qdeclarativesqldatabase.cpp" line="+204"/> <source>executeSql called outside transaction()</source> <translation>'executeSql' wurde außerhalb von 'transaction()' aufgerufen</translation> </message> <message> - <location line="+58"/> <source>Read-only Transaction</source> <translation>Schreibgeschützte Transaktion</translation> </message> <message> - <location line="+20"/> <source>Version mismatch: expected %1, found %2</source> <translation>Die Version %2 kann nicht verwendet werden; es wird %1 benötigt</translation> </message> <message> - <location line="+14"/> <source>SQL transaction failed</source> <translation>Die SQL-Transaktion schlug fehl</translation> </message> <message> - <location line="+21"/> <source>transaction: missing callback</source> <translation>callback fehlt bei Transaktion</translation> </message> <message> - <location line="+57"/> - <location line="+16"/> <source>SQL: database version mismatch</source> <translation>SQL: Die Version der Datenbank entspricht nicht der erwarteten Version</translation> </message> @@ -2204,12 +1771,10 @@ nach <context> <name>QDeclarativeFlipable</name> <message> - <location filename="../src/declarative/graphicsitems/qdeclarativeflipable.cpp" line="+129"/> <source>front is a write-once property</source> <translation>'front' kann nur einmal zugewiesen werden</translation> </message> <message> - <location line="+19"/> <source>back is a write-once property</source> <translation>'back' kann nur einmal zugewiesen werden</translation> </message> @@ -2217,75 +1782,58 @@ nach <context> <name>QDeclarativeImportDatabase</name> <message> - <location filename="../src/declarative/qml/qdeclarativeimport.cpp" line="+294"/> <source>module "%1" definition "%2" not readable</source> <translation>Modul "%1" Definition "%2" kann nicht gelesen werden</translation> </message> <message> - <location line="+20"/> <source>plugin cannot be loaded for module "%1": %2</source> <translation>Das Plugin des Moduls "%1" konnte nicht geladen werden: %2</translation> </message> <message> - <location line="+5"/> <source>module "%1" plugin "%2" not found</source> <translation>Modul "%1" Plugin "%2" konnte nicht gefunden werden</translation> </message> <message> - <location line="+79"/> - <location line="+55"/> <source>module "%1" version %2.%3 is not installed</source> <translation>Modul "%1" Version %2.%3 ist nicht installiert</translation> </message> <message> - <location line="-53"/> <source>module "%1" is not installed</source> <translation>Modul "%1" ist nicht installiert</translation> </message> <message> - <location line="+14"/> - <location line="+19"/> <source>"%1": no such directory</source> <translation>Das Verzeichnis "%1" existiert nicht</translation> </message> <message> - <location line="-2"/> <source>import "%1" has no qmldir and no namespace</source> <translation>"qmldir" und Namensraum fehlen bei dem Import "%1"</translation> </message> <message> - <location line="+46"/> <source>- %1 is not a namespace</source> <translation>- %1 ist kein gültiger Namensraum</translation> </message> <message> - <location line="+6"/> <source>- nested namespaces not allowed</source> <translation>- geschachtelte Namensräume sind nicht zulässig</translation> </message> <message> - <location line="+47"/> - <location line="+4"/> <source>local directory</source> <translation>Lokales Verzeichnis'</translation> </message> <message> - <location line="+6"/> <source>is ambiguous. Found in %1 and in %2</source> <translation>ist mehrdeutig. Es kommt in %1 und in %2 vor</translation> </message> <message> - <location line="+4"/> <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source> <translation>ist mehrdeutig. Es kommt in %1 in den Version %2.%3 und %4.%5 vor</translation> </message> <message> - <location line="+14"/> <source>is instantiated recursively</source> <translation>wird rekursiv instanziiert</translation> </message> <message> - <location line="+2"/> <source>is not a type</source> <translation>ist kein Typ</translation> </message> @@ -2293,7 +1841,6 @@ nach <context> <name>QDeclarativeKeyNavigationAttached</name> <message> - <location filename="../src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp" line="+70"/> <source>KeyNavigation is only available via attached properties</source> <translation>Tastennavigation ist nur über Eigenschaften des Typs 'attached' verfügbar</translation> </message> @@ -2301,7 +1848,6 @@ nach <context> <name>QDeclarativeKeysAttached</name> <message> - <location line="+1"/> <source>Keys is only available via attached properties</source> <translation>Die Unterstützung für Tasten ist nur über Eigenschaften des Typs 'attached' verfügbar</translation> </message> @@ -2309,59 +1855,46 @@ nach <context> <name>QDeclarativeListModel</name> <message> - <location filename="../src/declarative/util/qdeclarativelistmodel.cpp" line="+399"/> <source>remove: index %1 out of range</source> <translation>remove: Der Index %1 ist außerhalb des gültigen Bereichs</translation> </message> <message> - <location line="+33"/> <source>insert: value is not an object</source> <translation>insert: Der Wert ist kein Objekt</translation> </message> <message> - <location line="+5"/> <source>insert: index %1 out of range</source> <translation>insert: Der Index %1 ist außerhalb des gültigen Bereichs</translation> </message> <message> - <location line="+30"/> <source>move: out of range</source> <translation>move: Außerhalb des gültigen Bereichs</translation> </message> <message> - <location line="+40"/> <source>append: value is not an object</source> <translation>append: Der Wert ist kein Objekt</translation> </message> <message> - <location line="+55"/> <source>set: value is not an object</source> <translation>set: Der Wert ist kein Objekt</translation> </message> <message> - <location line="+4"/> - <location line="+34"/> <source>set: index %1 out of range</source> <translation>set: Der Index %1 ist außerhalb des gültigen Bereichs</translation> </message> <message> - <location line="+39"/> - <location line="+15"/> <source>ListElement: cannot contain nested elements</source> <translation>ListElement kann keine geschachtelten Elemente enthalten</translation> </message> <message> - <location line="+4"/> <source>ListElement: cannot use reserved "id" property</source> <translation>ListElement: Die "id"-Eigenschaft kann nicht verwendet werden</translation> </message> <message> - <location line="+49"/> <source>ListElement: cannot use script for property value</source> <translation>ListElement: Es kann kein Skript für den Wert der Eigenschaft verwendet werden</translation> </message> <message> - <location line="+29"/> <source>ListModel: undefined property '%1'</source> <translation>ListModel: Die Eigenschaft '%1' ist nicht definiert</translation> </message> @@ -2369,7 +1902,6 @@ nach <context> <name>QDeclarativeLoader</name> <message> - <location filename="../src/declarative/graphicsitems/qdeclarativeloader.cpp" line="+323"/> <source>Loader does not support loading non-visual elements.</source> <translation>Das Laden nicht-visueller Elemente ist nicht unterstützt.</translation> </message> @@ -2377,18 +1909,14 @@ nach <context> <name>QDeclarativeParentAnimation</name> <message> - <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-169"/> <source>Unable to preserve appearance under complex transform</source> <translation>Das Erscheinungsbild kann bei einer komplexen Transformation nicht beibehalten werden</translation> </message> <message> - <location line="+10"/> - <location line="+7"/> <source>Unable to preserve appearance under non-uniform scale</source> <translation>Das Erscheinungsbild kann bei einer nicht-uniformen Skalierung nicht beibehalten werden</translation> </message> <message> - <location line="+7"/> <source>Unable to preserve appearance under scale of 0</source> <translation>Das Erscheinungsbild kann bei einer Skalierung mit 0 nicht beibehalten werden</translation> </message> @@ -2396,18 +1924,14 @@ nach <context> <name>QDeclarativeParentChange</name> <message> - <location filename="../src/declarative/util/qdeclarativestateoperations.cpp" line="+95"/> <source>Unable to preserve appearance under complex transform</source> <translation>Das Erscheinungsbild kann bei einer komplexen Transformation nicht beibehalten werden</translation> </message> <message> - <location line="+10"/> - <location line="+7"/> <source>Unable to preserve appearance under non-uniform scale</source> <translation>Das Erscheinungsbild kann bei einer nicht-uniformen Skalierung nicht beibehalten werden</translation> </message> <message> - <location line="+7"/> <source>Unable to preserve appearance under scale of 0</source> <translation>Das Erscheinungsbild kann bei einer Skalierung mit 0 nicht beibehalten werden</translation> </message> @@ -2415,144 +1939,110 @@ nach <context> <name>QDeclarativeParser</name> <message> - <location filename="../src/declarative/qml/parser/qdeclarativejslexer.cpp" line="+579"/> <source>Illegal character</source> <translation>Ungültiges Zeichen</translation> </message> <message> - <location line="+14"/> <source>Unclosed string at end of line</source> <translation>Zeichenkette am Zeilenende nicht abgeschlossen</translation> </message> <message> - <location line="+26"/> <source>Illegal escape squence</source> <translation>Ungültiges Escape-Sequenz</translation> </message> <message> - <location line="-77"/> - <location line="+123"/> - <location line="+54"/> <source>Illegal unicode escape sequence</source> <translation>Ungültige Unicode-Escape-Sequenz</translation> </message> <message> - <location line="-28"/> <source>Unclosed comment at end of file</source> <translation>Kommentar am Dateiende nicht abgeschlossen</translation> </message> <message> - <location line="+102"/> <source>Illegal syntax for exponential number</source> <translation>Ungültige Syntax des Exponenten</translation> </message> <message> - <location line="+26"/> <source>Identifier cannot start with numeric literal</source> <translation>Ein Bezeichner darf nicht mit einem numerischen Literal beginnen</translation> </message> <message> - <location line="+338"/> <source>Unterminated regular expression literal</source> <translation>Regulärer Ausdruck nicht abgeschlossen</translation> </message> <message> - <location line="+15"/> <source>Invalid regular expression flag '%0'</source> <translation>Ungültiger Modifikator '%0' bei regulärem Ausdruck</translation> </message> <message> - <location line="+16"/> - <location line="+22"/> <source>Unterminated regular expression backslash sequence</source> <translation>Regulärer Ausdruck nicht abgeschlossen</translation> </message> <message> - <location line="+13"/> <source>Unterminated regular expression class</source> <translation>Klasse im regulären Ausdruck nicht abgeschlossen</translation> </message> <message> - <location filename="../src/declarative/qml/parser/qdeclarativejsparser.cpp" line="+1828"/> - <location line="+67"/> <source>Syntax error</source> <translation>Syntaxfehler</translation> </message> <message> - <location line="-65"/> <source>Unexpected token `%1'</source> <translation>Unerwartetes Element '%1'</translation> </message> <message> - <location line="+28"/> - <location line="+24"/> <source>Expected token `%1'</source> <translation>Es wird das Element '%1' erwartet</translation> </message> <message> - <location filename="../src/declarative/qml/qdeclarativescriptparser.cpp" line="+260"/> - <location line="+431"/> - <location line="+59"/> <source>Property value set multiple times</source> <translation>Mehrfache Zuweisung eines Wertes an eine Eigenschaft</translation> </message> <message> - <location line="-479"/> <source>Expected type name</source> <translation>Es wird ein Typname erwartet</translation> </message> <message> - <location line="+136"/> <source>Invalid import qualifier ID</source> <translation>Ungültige Id-Angabe bei Import</translation> </message> <message> - <location line="+8"/> <source>Reserved name "Qt" cannot be used as an qualifier</source> <translation>Der reservierte Name "Qt" kann nicht als Bezeichner verwendet werden</translation> </message> <message> - <location line="+15"/> <source>Script import qualifiers must be unique.</source> <translation>Der für den Skript-Import angegebene Qualifizierer muss eindeutig sein.</translation> </message> <message> - <location line="+10"/> <source>Script import requires a qualifier</source> <translation>Der Skript-Import erfordert die Angabe eines Qualifizierers.</translation> </message> <message> - <location line="+11"/> <source>Library import requires a version</source> <translation>Der Import einer Bibliothek erfordert eine Versionsangabe</translation> </message> <message> - <location line="+59"/> <source>Expected parameter type</source> <translation>Es wird eine Typangabe für den Parameter erwartet</translation> </message> <message> - <location line="+42"/> <source>Invalid property type modifier</source> <translation>Ungültiger Modifikator für den Typ der Eigenschaft</translation> </message> <message> - <location line="+9"/> <source>Unexpected property type modifier</source> <translation>Modifikator für den Typ der Eigenschaft an dieser Stelle nicht zulässig</translation> </message> <message> - <location line="+9"/> <source>Expected property type</source> <translation>Typangabe für Eigenschaft erwartet</translation> </message> <message> - <location line="+9"/> <source>Readonly not yet supported</source> <translation>'read-only' wird an dieser Stelle noch nicht unterstützt</translation> </message> <message> - <location line="+215"/> <source>JavaScript declaration outside Script element</source> <translation>Eine JavaScript-Deklaration ist außerhalb eines Skriptelementes nicht zulässig</translation> </message> @@ -2560,39 +2050,47 @@ nach <context> <name>QDeclarativePauseAnimation</name> <message> - <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-1990"/> <source>Cannot set a duration of < 0</source> <translation>Es kann keine Zeitdauer <0 gesetzt werden</translation> </message> </context> <context> - <name>QDeclarativePixmapCache</name> + <name>QDeclarativePixmap</name> <message> - <location filename="../src/declarative/util/qdeclarativepixmapcache.cpp" line="+190"/> <source>Error decoding: %1: %2</source> <translation>Fehler beim Decodieren: %1: %2</translation> </message> <message> - <location line="+70"/> <source>Failed to get image from provider: %1</source> <translation>Bilddaten konnten nicht erhalten werden: %1</translation> </message> <message> - <location line="+19"/> - <location line="+345"/> <source>Cannot open: %1</source> <translation>Fehlschlag beim Öffnen: %1</translation> </message> +</context> +<context> + <name>QDeclarativePixmapCache</name> + <message> + <source>Error decoding: %1: %2</source> + <translation type="obsolete">Fehler beim Decodieren: %1: %2</translation> + </message> + <message> + <source>Failed to get image from provider: %1</source> + <translation type="obsolete">Bilddaten konnten nicht erhalten werden: %1</translation> + </message> + <message> + <source>Cannot open: %1</source> + <translation type="obsolete">Fehlschlag beim Öffnen: %1</translation> + </message> <message> - <location line="+37"/> <source>Unknown Error loading %1</source> - <translation>Unbekannter Fehler beim Laden von %1</translation> + <translation type="obsolete">Unbekannter Fehler beim Laden von %1</translation> </message> </context> <context> <name>QDeclarativePropertyAnimation</name> <message> - <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+1113"/> <source>Cannot set a duration of < 0</source> <translation>Es kann keine Zeitdauer <0 gesetzt werden</translation> </message> @@ -2600,17 +2098,14 @@ nach <context> <name>QDeclarativePropertyChanges</name> <message> - <location filename="../src/declarative/util/qdeclarativepropertychanges.cpp" line="+267"/> <source>PropertyChanges does not support creating state-specific objects.</source> <translation>Die Erzeugung von Objekten, die einem Zustand zugeordnet sind, wird von PropertyChanges nicht unterstützt.</translation> </message> <message> - <location line="+157"/> <source>Cannot assign to non-existent property "%1"</source> <translation>Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens '%1" existiert</translation> </message> <message> - <location line="+3"/> <source>Cannot assign to read-only property "%1"</source> <translation>Die Eigenschaft '%1" ist schreibgeschützt und kann daher nicht zugewiesen werden</translation> </message> @@ -2618,13 +2113,10 @@ nach <context> <name>QDeclarativeTextInput</name> <message> - <location filename="../src/declarative/graphicsitems/qdeclarativetextinput.cpp" line="+793"/> - <location line="+8"/> <source>Could not load cursor delegate</source> <translation>Cursor-Delegate konnte nicht geladen werden</translation> </message> <message> - <location line="+11"/> <source>Could not instantiate cursor delegate</source> <translation>Cursor-Delegate konnte angelegt werden</translation> </message> @@ -2632,47 +2124,38 @@ nach <context> <name>QDeclarativeVME</name> <message> - <location filename="../src/declarative/qml/qdeclarativevme.cpp" line="+194"/> <source>Unable to create object of type %1</source> <translation>Es konnte kein Objekt des Typs %1 erzeugt werden</translation> </message> <message> - <location line="+390"/> <source>Cannot assign value %1 to property %2</source> <translation>Der Wert '%1' kann nicht der Eigenschaft %2 zugewiesen werden</translation> </message> <message> - <location line="+22"/> <source>Cannot assign object type %1 with no default method</source> <translation>Der Objekttyp %1 kann nicht zugewiesen werden, da keine Vorgabe-Methode existiert</translation> </message> <message> - <location line="+3"/> <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> <translation>Es kann keine Verbindung zwischen dem Signal %1 und dem Slot %2 hergestellt werden, da sie nicht zusammenpassen</translation> </message> <message> - <location line="+5"/> <source>Cannot assign an object to signal property %1</source> <translation>Der Signal-Eigenschaft %1 kann kein Objekt zugewiesen werden</translation> </message> <message> - <location line="+146"/> <source>Cannot assign object to list</source> <translation>Zuweisung eines Objekts an eine Liste nicht zulässig</translation> </message> <message> - <location line="+41"/> <source>Cannot assign object to interface property</source> <translation>Der Eigenschaft der Schnittstelle kann kein Objekt zugewiesen werden</translation> </message> <message> - <location line="+11"/> <source>Unable to create attached object</source> <translation>Es konnte kein 'attached'-Objekt erzeugt werden</translation> </message> <message> - <location line="+32"/> <source>Cannot set properties on %1 as it is null</source> <translation>Es können keine Eigenschaften auf %1 gesetzt werden, da es 'null' ist</translation> </message> @@ -2680,7 +2163,6 @@ nach <context> <name>QDeclarativeVisualDataModel</name> <message> - <location filename="../src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp" line="+1090"/> <source>Delegate component must be Item type.</source> <translation>Delegate-Komponente muss vom Typ 'Item' sein</translation> </message> @@ -2688,8 +2170,6 @@ nach <context> <name>QDeclarativeXmlListModel</name> <message> - <location filename="../src/declarative/util/qdeclarativeutilmodule.cpp" line="-12"/> - <location line="+2"/> <source>Qt was built without support for xmlpatterns</source> <translation>Diese Version der Qt-Bibliothek wurde ohne Unterstützung für xmlpatterns erstellt</translation> </message> @@ -2697,7 +2177,6 @@ nach <context> <name>QDeclarativeXmlListModelRole</name> <message> - <location filename="../src/declarative/util/qdeclarativexmllistmodel_p.h" line="+174"/> <source>An XmlRole query must not start with '/'</source> <translation>Eine XmlRole-Abfrage darf nicht mit '/' beginnen</translation> </message> @@ -2705,7 +2184,6 @@ nach <context> <name>QDeclarativeXmlRoleList</name> <message> - <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="+712"/> <source>An XmlListModel query must start with '/' or "//"</source> <translation>Eine XmlListModel-Abfrage muss mit '/' oder "//" beginnen</translation> </message> @@ -2713,17 +2191,14 @@ nach <context> <name>QDial</name> <message> - <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+951"/> <source>QDial</source> <translation>QDial</translation> </message> <message> - <location line="+2"/> <source>SpeedoMeter</source> <translation>Tachometer</translation> </message> <message> - <location line="+2"/> <source>SliderHandle</source> <translation>Schieberegler</translation> </message> @@ -2731,12 +2206,10 @@ nach <context> <name>QDialog</name> <message> - <location filename="../src/gui/dialogs/qdialog.cpp" line="+645"/> <source>What's This?</source> <translation>Direkthilfe</translation> </message> <message> - <location line="-122"/> <source>Done</source> <translation>Fertig</translation> </message> @@ -2744,124 +2217,98 @@ nach <context> <name>QDialogButtonBox</name> <message> - <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1920"/> - <location line="+464"/> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+649"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+3"/> <source>Save</source> <translation>Speichern</translation> </message> <message> - <location line="+0"/> <source>&Save</source> <translation>S&peichern</translation> </message> <message> - <location line="+3"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> - <location line="+3"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location line="+0"/> <source>&Cancel</source> <translation>&Abbrechen</translation> </message> <message> - <location line="+3"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="+0"/> <source>&Close</source> <translation>Schl&ießen</translation> </message> <message> - <location line="+3"/> <source>Apply</source> <translation>Anwenden</translation> </message> <message> - <location line="+3"/> <source>Reset</source> <translation>Zurücksetzen</translation> </message> <message> - <location line="+3"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location line="+4"/> <source>Don't Save</source> <translation>Nicht speichern</translation> </message> <message> - <location line="+4"/> <source>Discard</source> <translation>Verwerfen</translation> </message> <message> - <location line="+3"/> <source>&Yes</source> <translation>&Ja</translation> </message> <message> - <location line="+3"/> <source>Yes to &All</source> <translation>Ja, &alle</translation> </message> <message> - <location line="+3"/> <source>&No</source> <translation>&Nein</translation> </message> <message> - <location line="+3"/> <source>N&o to All</source> <translation>N&ein, keine</translation> </message> <message> - <location line="+3"/> <source>Save All</source> <translation>Alles speichern</translation> </message> <message> - <location line="+3"/> <source>Abort</source> <translation>Abbrechen</translation> </message> <message> - <location line="+3"/> <source>Retry</source> <translation>Wiederholen</translation> </message> <message> - <location line="+3"/> <source>Ignore</source> <translation>Ignorieren</translation> </message> <message> - <location line="+3"/> <source>Restore Defaults</source> <translation>Voreinstellungen</translation> </message> <message> - <location line="-29"/> <source>Close without Saving</source> <translation>Schließen ohne Speichern</translation> </message> <message> - <location line="-27"/> <source>&OK</source> <translation>&OK</translation> </message> @@ -2869,29 +2316,24 @@ nach <context> <name>QDirModel</name> <message> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+457"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+1"/> <source>Size</source> <translation>Größe</translation> </message> <message> - <location line="+3"/> <source>Kind</source> <comment>Match OS X Finder</comment> <translation>Art</translation> </message> <message> - <location line="+2"/> <source>Type</source> <comment>All other platforms</comment> <translation>Typ</translation> </message> <message> - <location line="+6"/> <source>Date Modified</source> <translation>Änderungsdatum</translation> </message> @@ -2899,17 +2341,14 @@ nach <context> <name>QDockWidget</name> <message> - <location filename="../src/plugins/accessible/widgets/qaccessiblewidgets.cpp" line="+1239"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="+2"/> <source>Dock</source> <translation>Andocken</translation> </message> <message> - <location line="+1"/> <source>Float</source> <translation>Herauslösen</translation> </message> @@ -2917,12 +2356,10 @@ nach <context> <name>QDoubleSpinBox</name> <message> - <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-537"/> <source>More</source> <translation>Mehr</translation> </message> <message> - <location line="+2"/> <source>Less</source> <translation>Weniger</translation> </message> @@ -2930,27 +2367,22 @@ nach <context> <name>QErrorMessage</name> <message> - <location filename="../src/gui/dialogs/qerrormessage.cpp" line="+414"/> <source>&Show this message again</source> <translation>Diese Meldung wieder an&zeigen</translation> </message> <message> - <location line="+1"/> <source>&OK</source> <translation>&OK</translation> </message> <message> - <location line="-207"/> <source>Debug Message:</source> <translation>Debug-Ausgabe:</translation> </message> <message> - <location line="+3"/> <source>Warning:</source> <translation>Achtung:</translation> </message> <message> - <location line="+3"/> <source>Fatal Error:</source> <translation>Fehler:</translation> </message> @@ -2958,38 +2390,30 @@ nach <context> <name>QFile</name> <message> - <location filename="../src/corelib/io/qfile.cpp" line="+703"/> - <location line="+155"/> <source>Destination file exists</source> <translation>Die Zieldatei existiert bereits</translation> </message> <message> - <location line="-140"/> <source>Will not rename sequential file using block copy</source> <translation>Eine sequentielle Datei kann nicht durch blockweises Kopieren umbenannt werden</translation> </message> <message> - <location line="+23"/> <source>Cannot remove source file</source> <translation>Die Quelldatei kann nicht entfernt werden</translation> </message> <message> - <location line="+130"/> <source>Cannot open %1 for input</source> <translation>%1 kann nicht zum Lesen geöffnet werden</translation> </message> <message> - <location line="+17"/> <source>Cannot open for output</source> <translation>Das Öffnen zum Schreiben ist fehlgeschlagen</translation> </message> <message> - <location line="+10"/> <source>Failure to write block</source> <translation>Der Datenblock konnte nicht geschrieben werden</translation> </message> <message> - <location line="+13"/> <source>Cannot create %1 for output</source> <translation>%1 kann nicht erstellt werden</translation> </message> @@ -2997,113 +2421,84 @@ nach <context> <name>QFileDialog</name> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+558"/> - <location line="+481"/> <source>All Files (*)</source> <translation>Alle Dateien (*)</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.ui"/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Back</source> <translation>Zurück</translation> </message> <message> - <location/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>List View</source> <translation>Liste</translation> </message> <message> - <location/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Detail View</source> <translation>Details</translation> </message> <message> - <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+467"/> - <location line="+1"/> <source>File</source> <translation>Datei</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-498"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> - <location line="+2"/> <source>Save As</source> <translation>Speichern unter</translation> </message> <message> - <location line="+709"/> - <location line="+55"/> - <location line="+1532"/> <source>&Open</source> <translation>&Öffnen</translation> </message> <message> - <location line="-1587"/> - <location line="+55"/> <source>&Save</source> <translation>S&peichern</translation> </message> <message> - <location line="+1805"/> <source>Recent Places</source> <translation>Zuletzt besucht</translation> </message> <message> - <location line="-2540"/> <source>&Rename</source> <translation>&Umbenennen</translation> </message> <message> - <location line="+1"/> <source>&Delete</source> <translation>&Löschen</translation> </message> <message> - <location line="+1"/> <source>Show &hidden files</source> <translation>&Versteckte Dateien anzeigen</translation> </message> <message> - <location line="+1986"/> <source>New Folder</source> <translation>Neues Verzeichnis</translation> </message> <message> - <location line="-2021"/> <source>Find Directory</source> <translation>Verzeichnis suchen</translation> </message> <message> - <location line="+716"/> <source>Directories</source> <translation>Verzeichnisse</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog_win.cpp" line="+148"/> <source>All Files (*.*)</source> <translation>Alle Dateien (*.*)</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-675"/> - <location line="+679"/> <source>Directory:</source> <translation>Verzeichnis:</translation> </message> <message> - <location line="+819"/> <source>%1 already exists. Do you want to replace it?</source> <translation>Die Datei %1 existiert bereits. Soll sie überschrieben werden?</translation> </message> <message> - <location line="+20"/> <source>%1 File not found. Please verify the correct file name was given.</source> @@ -3112,25 +2507,18 @@ Die Datei konnte nicht gefunden werden. Stellen Sie sicher, dass der Dateiname richtig ist.</translation> </message> <message> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+402"/> <source>My Computer</source> <translation>Mein Computer</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.ui"/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Parent Directory</source> <translation>Übergeordnetes Verzeichnis</translation> </message> <message> - <location/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Files of type:</source> <translation>Dateien des Typs:</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-54"/> - <location line="+862"/> <source>%1 Directory not found. Please verify the correct directory name was given.</source> @@ -3139,128 +2527,100 @@ Das Verzeichnis konnte nicht gefunden werden. Stellen Sie sicher, dass der Verzeichnisname richtig ist.</translation> </message> <message> - <location line="-218"/> <source>'%1' is write protected. Do you want to delete it anyway?</source> <translation>'%1' ist schreibgeschützt. Möchten Sie die Datei trotzdem löschen?</translation> </message> <message> - <location line="+5"/> <source>Are sure you want to delete '%1'?</source> <translation>Sind Sie sicher, dass Sie '%1' löschen möchten?</translation> </message> <message> - <location line="+15"/> <source>Could not delete directory.</source> <translation>Konnte Verzeichnis nicht löschen.</translation> </message> <message> - <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="-4"/> <source>Drive</source> <translation>Laufwerk</translation> </message> <message> - <location line="+9"/> <source>File Folder</source> <comment>Match Windows Explorer</comment> <translation>Ordner</translation> </message> <message> - <location line="+2"/> <source>Folder</source> <comment>All other platforms</comment> <translation>Order</translation> </message> <message> - <location line="+9"/> <source>Alias</source> <comment>Mac OS X Finder</comment> <translation>Alias</translation> </message> <message> - <location line="+2"/> <source>Shortcut</source> <comment>All other platforms</comment> <translation>Symbolischer Link</translation> </message> <message> - <location line="+7"/> <source>Unknown</source> <translation>Unbekannt</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2140"/> <source>Show </source> <translation>Anzeigen </translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.ui"/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Forward</source> <translation>Vorwärts</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+7"/> <source>&New Folder</source> <translation>&Neues Verzeichnis</translation> </message> <message> - <location line="+687"/> - <location line="+43"/> <source>&Choose</source> <translation>&Auswählen</translation> </message> <message> - <location filename="../src/gui/dialogs/qsidebar.cpp" line="+442"/> <source>Remove</source> <translation>Löschen</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-723"/> - <location line="+683"/> <source>File &name:</source> <translation>Datei&name:</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.ui"/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Look in:</source> <translation>Suchen in:</translation> </message> <message> - <location/> - <location filename="../src/gui/dialogs/qfiledialog_embedded.ui"/> <source>Create New Folder</source> <translation>Neuen Ordner erstellen</translation> </message> <message> - <location/> <source>Go back</source> <translation>Zurück</translation> </message> <message> - <location/> <source>Go forward</source> <translation>Vor</translation> </message> <message> - <location/> <source>Go to the parent directory</source> <translation>Gehe zum übergeordneten Verzeichnis</translation> </message> <message> - <location/> <source>Create a New Folder</source> <translation>Neuen Ordner erstellen</translation> </message> <message> - <location/> <source>Change to list view mode</source> <translation>Wechsle zu Listenansicht</translation> </message> <message> - <location/> <source>Change to detail view mode</source> <translation>Wechsle zu Detailansicht</translation> </message> @@ -3268,83 +2628,64 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QFileSystemModel</name> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+740"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+482"/> <source>%1 TB</source> <translation>%1 TB</translation> </message> <message> - <location line="+2"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> <source>%1 GB</source> <translation>%1 GB</translation> </message> <message> - <location line="+2"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> <source>%1 MB</source> <translation>%1 MB</translation> </message> <message> - <location line="+2"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+2"/> <source>%1 KB</source> <translation>%1 KB</translation> </message> <message> - <location line="+1"/> <source>%1 bytes</source> <translation>%1 Byte</translation> </message> <message> - <location line="+89"/> <source>Invalid filename</source> <translation>Ungültiger Dateiname</translation> </message> <message> - <location line="+1"/> <source><b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.</source> <translation><b>Der Name "%1" kann nicht verwendet werden.</b><p>Versuchen Sie, die Sonderzeichen zu entfernen oder einen kürzeren Namen zu verwenden.</translation> </message> <message> - <location line="+64"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+2"/> <source>Size</source> <translation>Größe</translation> </message> <message> - <location line="+4"/> <source>Kind</source> <comment>Match OS X Finder</comment> <translation>Art</translation> </message> <message> - <location line="+2"/> <source>Type</source> <comment>All other platforms</comment> <translation>Typ</translation> </message> <message> - <location line="+7"/> <source>Date Modified</source> <translation>Änderungsdatum</translation> </message> <message> - <location filename="../src/gui/dialogs/qfilesystemmodel_p.h" line="+261"/> <source>My Computer</source> <translation>Mein Computer</translation> </message> <message> - <location line="+2"/> <source>Computer</source> <translation>Computer</translation> </message> <message> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> <source>%1 byte(s)</source> <translation>%1 byte</translation> </message> @@ -3352,221 +2693,170 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QFontDatabase</name> <message> - <location filename="../src/gui/text/qfontdatabase.cpp" line="+102"/> - <location line="+1342"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location line="-1339"/> - <location line="+12"/> - <location line="+1315"/> <source>Bold</source> <translation>Fett</translation> </message> <message> - <location line="-1324"/> - <location line="+1326"/> <source>Demi Bold</source> <translation>Halbfett</translation> </message> <message> - <location line="-1323"/> - <location line="+18"/> - <location line="+1301"/> <source>Black</source> <translation>Schwarz</translation> </message> <message> - <location line="-1311"/> <source>Demi</source> <translation>Semi</translation> </message> <message> - <location line="+6"/> - <location line="+1311"/> <source>Light</source> <translation>Leicht</translation> </message> <message> - <location line="-1165"/> - <location line="+1168"/> <source>Italic</source> <translation>Kursiv</translation> </message> <message> - <location line="-1165"/> - <location line="+1167"/> <source>Oblique</source> <translation>Schräggestellt</translation> </message> <message> - <location line="+704"/> <source>Any</source> <translation>Alle</translation> </message> <message> - <location line="+3"/> <source>Latin</source> <translation>Lateinisch</translation> </message> <message> - <location line="+3"/> <source>Greek</source> <translation>Griechisch</translation> </message> <message> - <location line="+3"/> <source>Cyrillic</source> <translation>Kyrillisch</translation> </message> <message> - <location line="+3"/> <source>Armenian</source> <translation>Armenisch</translation> </message> <message> - <location line="+3"/> <source>Hebrew</source> <translation>Hebräisch</translation> </message> <message> - <location line="+3"/> <source>Arabic</source> <translation>Arabisch</translation> </message> <message> - <location line="+3"/> <source>Syriac</source> <translation>Syrisch</translation> </message> <message> - <location line="+3"/> <source>Thaana</source> <translation>Thaana</translation> </message> <message> - <location line="+3"/> <source>Devanagari</source> <translation>Devanagari</translation> </message> <message> - <location line="+3"/> <source>Bengali</source> <translation>Bengalisch</translation> </message> <message> - <location line="+3"/> <source>Gurmukhi</source> <translation>Gurmukhi</translation> </message> <message> - <location line="+3"/> <source>Gujarati</source> <translation>Gujarati</translation> </message> <message> - <location line="+3"/> <source>Oriya</source> <translation>Oriya</translation> </message> <message> - <location line="+3"/> <source>Tamil</source> <translation>Tamilisch</translation> </message> <message> - <location line="+3"/> <source>Telugu</source> <translation>Telugu</translation> </message> <message> - <location line="+3"/> <source>Kannada</source> <translation>Kannada</translation> </message> <message> - <location line="+3"/> <source>Malayalam</source> <translation>Malayalam</translation> </message> <message> - <location line="+3"/> <source>Sinhala</source> <translation>Sinhala</translation> </message> <message> - <location line="+3"/> <source>Thai</source> <translation>Thailändisch</translation> </message> <message> - <location line="+3"/> <source>Lao</source> <translation>Laotisch</translation> </message> <message> - <location line="+3"/> <source>Tibetan</source> <translation>Tibetisch</translation> </message> <message> - <location line="+3"/> <source>Myanmar</source> <translation>Myanmar</translation> </message> <message> - <location line="+3"/> <source>Georgian</source> <translation>Georgisch</translation> </message> <message> - <location line="+3"/> <source>Khmer</source> <translation>Khmer</translation> </message> <message> - <location line="+3"/> <source>Simplified Chinese</source> <translation>Chinesisch (Kurzzeichen)</translation> </message> <message> - <location line="+3"/> <source>Traditional Chinese</source> <translation>Chinesisch (Langzeichen)</translation> </message> <message> - <location line="+3"/> <source>Japanese</source> <translation>Japanisch</translation> </message> <message> - <location line="+3"/> <source>Korean</source> <translation>Koreanisch</translation> </message> <message> - <location line="+3"/> <source>Vietnamese</source> <translation>Vietnamesisch</translation> </message> <message> - <location line="+3"/> <source>Symbol</source> <translation>Symbol</translation> </message> <message> - <location line="+3"/> <source>Ogham</source> <translation>Ogham</translation> </message> <message> - <location line="+3"/> <source>Runic</source> <translation>Runen</translation> </message> <message> - <location line="+3"/> <source>N'Ko</source> <translation>N'Ko</translation> </message> @@ -3574,47 +2864,38 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QFontDialog</name> <message> - <location filename="../src/gui/dialogs/qfontdialog.cpp" line="+768"/> <source>&Font</source> <translation>&Schriftart</translation> </message> <message> - <location line="+1"/> <source>Font st&yle</source> <translation>Schrifts&til</translation> </message> <message> - <location line="+1"/> <source>&Size</source> <translation>&Größe</translation> </message> <message> - <location line="+4"/> <source>Effects</source> <translation>Effekte</translation> </message> <message> - <location line="+2"/> <source>Stri&keout</source> <translation>Durch&gestrichen</translation> </message> <message> - <location line="+1"/> <source>&Underline</source> <translation>&Unterstrichen</translation> </message> <message> - <location line="+1"/> <source>Sample</source> <translation>Beispiel</translation> </message> <message> - <location line="-595"/> <source>Select Font</source> <translation>Schriftart auswählen</translation> </message> <message> - <location line="+596"/> <source>Wr&iting System</source> <translation>&Schriftsystem</translation> </message> @@ -3622,145 +2903,104 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QFtp</name> <message> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+2303"/> <source>Host %1 found</source> <translation>Rechner %1 gefunden</translation> </message> <message> - <location line="+7"/> <source>Host found</source> <translation>Rechner gefunden</translation> </message> <message> - <location filename="../src/network/access/qftp.cpp" line="+1008"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="-1456"/> - <location line="+1451"/> <source>Connected to host %1</source> <translation>Verbunden mit Rechner %1</translation> </message> <message> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+7"/> <source>Connected to host</source> <translation>Verbindung mit Rechner besteht</translation> </message> <message> - <location line="-5"/> <source>Connection to %1 closed</source> <translation>Verbindung mit %1 beendet</translation> </message> <message> - <location filename="../src/network/access/qftp.cpp" line="+1383"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="-243"/> - <location line="+250"/> <source>Connection closed</source> <translation>Verbindung beendet</translation> </message> <message> - <location line="-1495"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="-1566"/> <source>Host %1 not found</source> <translation>Rechner %1 konnte nicht gefunden werden</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+4"/> <source>Connection refused to host %1</source> <translation>Verbindung mit %1 verweigert</translation> </message> <message> - <location line="+4"/> <source>Connection timed out to host %1</source> <translation>Das Zeitlimit für die Verbindung zu '%1' wurde überschritten</translation> </message> <message> - <location line="+501"/> - <location line="+29"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+458"/> - <location line="+728"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location line="+897"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+77"/> <source>Connecting to host failed: %1</source> <translation>Verbindung mit Rechner schlug fehl: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Login failed: %1</source> <translation>Anmeldung schlug fehl: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Listing directory failed: %1</source> <translation>Der Inhalt des Verzeichnisses kann nicht angezeigt werden: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Changing directory failed: %1</source> <translation>Ändern des Verzeichnisses schlug fehl: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Downloading file failed: %1</source> <translation>Herunterladen der Datei schlug fehl: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Uploading file failed: %1</source> <translation>Hochladen der Datei schlug fehl: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Removing file failed: %1</source> <translation>Löschen der Datei schlug fehl: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Creating directory failed: %1</source> <translation>Erstellen des Verzeichnisses schlug fehl: %1</translation> </message> <message> - <location line="+4"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Removing directory failed: %1</source> <translation>Löschen des Verzeichnisses schlug fehl: %1</translation> </message> <message> - <location line="-1535"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="-1356"/> <source>Not connected</source> <translation>Keine Verbindung</translation> </message> <message> - <location line="+399"/> - <location filename="../src/qt3support/network/q3ftp.cpp" line="+332"/> <source>Connection refused for data connection</source> <translation>Verbindung für die Daten Verbindung verweigert</translation> </message> @@ -3768,12 +3008,10 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHostInfo</name> <message> - <location filename="../src/network/kernel/qhostinfo_p.h" line="+103"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location filename="../src/network/kernel/qhostinfo.cpp" line="+171"/> <source>No host name given</source> <translation>Es wurde kein Hostname angegeben</translation> </message> @@ -3781,37 +3019,22 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHostInfoAgent</name> <message> - <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+260"/> - <location line="+32"/> - <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+215"/> - <location line="+27"/> <source>Host not found</source> <translation>Rechner konnte nicht gefunden werden</translation> </message> <message> - <location line="-45"/> - <location line="+39"/> - <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-34"/> - <location line="+29"/> <source>Unknown address type</source> <translation>Unbekannter Adresstyp</translation> </message> <message> - <location line="+10"/> - <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-19"/> - <location line="+27"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location line="-98"/> - <location filename="../src/network/kernel/qhostinfo_win.cpp" line="-67"/> <source>No host name given</source> <translation>Es wurde kein Hostname angegeben</translation> </message> <message> - <location line="+1"/> - <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+0"/> <source>Invalid hostname</source> <translation>Ungültiger Rechnername</translation> </message> @@ -3819,153 +3042,110 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHttp</name> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-6"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+1835"/> <source>Connection refused</source> <translation>Verbindung verweigert</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="+2639"/> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> <source>Host %1 not found</source> <translation>Rechner %1 konnte nicht gefunden werden</translation> </message> <message> - <location line="-62"/> - <location filename="../src/qt3support/network/q3http.cpp" line="-45"/> <source>Wrong content length</source> <translation>Ungültige Längenangabe</translation> </message> <message> - <location line="+82"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+48"/> <source>HTTP request failed</source> <translation>HTTP-Anfrage fehlgeschlagen</translation> </message> <message> - <location filename="../src/qt3support/network/q3http.cpp" line="+450"/> <source>Host %1 found</source> <translation>Rechner %1 gefunden</translation> </message> <message> - <location line="+14"/> <source>Host found</source> <translation>Rechner gefunden</translation> </message> <message> - <location line="-11"/> <source>Connected to host %1</source> <translation>Verbunden mit Rechner %1</translation> </message> <message> - <location line="+14"/> <source>Connected to host</source> <translation>Verbindung mit Rechner besteht</translation> </message> <message> - <location line="-11"/> <source>Connection to %1 closed</source> <translation>Verbindung mit %1 beendet</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+7"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+14"/> <source>Connection closed</source> <translation>Verbindung beendet</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-1077"/> - <location line="+820"/> - <location filename="../src/qt3support/network/q3http.cpp" line="-1152"/> - <location line="+567"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location line="-568"/> - <location filename="../src/qt3support/network/q3http.cpp" line="-370"/> <source>Request aborted</source> <translation>Anfrage wurde abgebrochen</translation> </message> <message> - <location line="+579"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+381"/> <source>No server set to connect to</source> <translation>Für die Verbindung wurde kein Server-Rechner angegeben</translation> </message> <message> - <location line="+168"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+60"/> <source>Server closed connection unexpectedly</source> <translation>Der Server hat die Verbindung unerwartet geschlossen</translation> </message> <message> - <location line="+172"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+113"/> <source>Invalid HTTP response header</source> <translation>Der Kopfteil der HTTP-Antwort ist ungültig</translation> </message> <message> - <location line="+28"/> <source>Unknown authentication method</source> <translation>Unbekannte Authentifizierungsmethode</translation> </message> <message> - <location line="+97"/> - <location line="+48"/> - <location filename="../src/qt3support/network/q3http.cpp" line="+40"/> - <location line="+47"/> <source>Invalid HTTP chunked body</source> <translation>Der Inhalt (chunked body) der HTTP-Antwort ist ungültig</translation> </message> <message> - <location line="+38"/> <source>Error writing response to device</source> <translation>Beim Schreiben der Antwort auf das Ausgabegerät ist ein Fehler aufgetreten</translation> </message> <message> - <location line="-173"/> <source>Proxy authentication required</source> <translation>Proxy-Authentifizierung erforderlich</translation> </message> <message> - <location line="+4"/> <source>Authentication required</source> <translation>Authentifizierung erforderlich</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+6"/> <source>Proxy requires authentication</source> <translation>Der Proxy-Server verlangt eine Authentifizierung</translation> </message> <message> - <location line="+3"/> <source>Host requires authentication</source> <translation>Der Hostrechner verlangt eine Authentifizierung</translation> </message> <message> - <location line="+3"/> <source>Data corrupted</source> <translation>Die Daten sind verfälscht</translation> </message> <message> - <location line="+6"/> <source>SSL handshake failed</source> <translation>Im Ablauf des SSL-Protokolls ist ein Fehler aufgetreten.</translation> </message> <message> - <location line="-3"/> <source>Unknown protocol specified</source> <translation>Es wurde ein unbekanntes Protokoll angegeben</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-159"/> <source>Connection refused (or timed out)</source> <translation>Verbindung verweigert oder Zeitlimit überschritten</translation> </message> <message> - <location line="-2266"/> <source>HTTPS connection requested but SSL support not compiled in</source> <translation>Die angeforderte HTTPS-Verbindung kann nicht aufgebaut werden, da keine SSL-Unterstützung vorhanden ist</translation> </message> @@ -3973,47 +3153,38 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHttpSocketEngine</name> <message> - <location filename="../src/network/socket/qhttpsocketengine.cpp" line="-89"/> <source>Did not receive HTTP response from proxy</source> <translation>Keine HTTP-Antwort vom Proxy-Server</translation> </message> <message> - <location line="+25"/> <source>Error parsing authentication request from proxy</source> <translation>Fehler beim Auswerten der Authentifizierungsanforderung des Proxy-Servers</translation> </message> <message> - <location line="+31"/> <source>Authentication required</source> <translation>Authentifizierung erforderlich</translation> </message> <message> - <location line="+27"/> <source>Proxy denied connection</source> <translation>Der Proxy-Server hat den Aufbau einer Verbindung verweigert</translation> </message> <message> - <location line="+10"/> <source>Error communicating with HTTP proxy</source> <translation>Fehler bei der Kommunikation mit dem Proxy-Server</translation> </message> <message> - <location line="+23"/> <source>Proxy server not found</source> <translation>Es konnte kein Proxy-Server gefunden werden</translation> </message> <message> - <location line="+2"/> <source>Proxy connection refused</source> <translation>Der Proxy-Server hat den Aufbau einer Verbindung verweigert</translation> </message> <message> - <location line="+2"/> <source>Proxy server connection timed out</source> <translation>Bei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit überschritten</translation> </message> <message> - <location line="+2"/> <source>Proxy connection closed prematurely</source> <translation>Der Proxy-Server hat die Verbindung vorzeitig beendet</translation> </message> @@ -4021,22 +3192,18 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QIBaseDriver</name> <message> - <location filename="../src/sql/drivers/ibase/qsql_ibase.cpp" line="+1491"/> <source>Error opening database</source> <translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation> </message> <message> - <location line="+54"/> <source>Could not start transaction</source> <translation>Es konnte keine Transaktion gestartet werden</translation> </message> <message> - <location line="+13"/> <source>Unable to commit transaction</source> <translation>Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+13"/> <source>Unable to rollback transaction</source> <translation>Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen)</translation> </message> @@ -4044,89 +3211,70 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QIBaseResult</name> <message> - <location line="-1149"/> <source>Unable to create BLOB</source> <translation>Es konnte kein BLOB erzeugt werden</translation> </message> <message> - <location line="+6"/> <source>Unable to write BLOB</source> <translation>Der BLOB konnte nicht geschrieben werden</translation> </message> <message> - <location line="+14"/> <source>Unable to open BLOB</source> <translation>Der BLOB konnte nicht geöffnet werden</translation> </message> <message> - <location line="+16"/> <source>Unable to read BLOB</source> <translation>Der BLOB konnte nicht gelesen werden</translation> </message> <message> - <location line="+125"/> - <location line="+187"/> <source>Could not find array</source> <translation>Das Feld konnte nicht gefunden werden</translation> </message> <message> - <location line="-155"/> <source>Could not get array data</source> <translation>Die Daten des Feldes konnten nicht gelesen werden</translation> </message> <message> - <location line="+210"/> <source>Could not get query info</source> <translation>Die erforderlichen Informationen zur Abfrage sind nicht verfügbar</translation> </message> <message> - <location line="+20"/> <source>Could not start transaction</source> <translation>Es konnte keine Transaktion gestartet werden</translation> </message> <message> - <location line="+19"/> <source>Unable to commit transaction</source> <translation>Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+42"/> <source>Could not allocate statement</source> <translation>Die Allokation des Befehls schlug fehl</translation> </message> <message> - <location line="+5"/> <source>Could not prepare statement</source> <translation>Der Befehl konnte nicht initialisiert werden</translation> </message> <message> - <location line="+5"/> - <location line="+11"/> <source>Could not describe input statement</source> <translation>Es konnte keine Beschreibung des Eingabebefehls erhalten werden</translation> </message> <message> - <location line="+14"/> <source>Could not describe statement</source> <translation>Es konnte keine Beschreibung des Befehls erhalten werden</translation> </message> <message> - <location line="+115"/> <source>Unable to close statement</source> <translation>Der Befehl konnte nicht geschlossen werden</translation> </message> <message> - <location line="+8"/> <source>Unable to execute query</source> <translation>Der Befehl konnte nicht ausgeführt werden</translation> </message> <message> - <location line="+46"/> <source>Could not fetch next item</source> <translation>Das nächste Element konnte nicht abgeholt werden</translation> </message> <message> - <location line="+197"/> <source>Could not get statement info</source> <translation>Es ist keine Information zum Befehl verfügbar</translation> </message> @@ -4134,27 +3282,22 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QIODevice</name> <message> - <location filename="../src/corelib/global/qglobal.cpp" line="+2120"/> <source>Permission denied</source> <translation>Zugriff verweigert</translation> </message> <message> - <location line="+3"/> <source>Too many open files</source> <translation>Zu viele Dateien geöffnet</translation> </message> <message> - <location line="+3"/> <source>No such file or directory</source> <translation>Die Datei oder das Verzeichnis konnte nicht gefunden werden</translation> </message> <message> - <location line="+3"/> <source>No space left on device</source> <translation>Kein freier Speicherplatz auf dem Gerät vorhanden</translation> </message> <message> - <location filename="../src/corelib/io/qiodevice.cpp" line="+1598"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> @@ -4162,32 +3305,26 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QInputContext</name> <message> - <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+301"/> <source>XIM</source> <translation>XIM</translation> </message> <message> - <location line="+4"/> <source>FEP</source> <translation>FEP</translation> </message> <message> - <location line="+23"/> <source>XIM input method</source> <translation>XIM-Eingabemethode</translation> </message> <message> - <location line="+4"/> <source>Windows input method</source> <translation>Windows-Eingabemethode</translation> </message> <message> - <location line="+4"/> <source>Mac OS X input method</source> <translation>Mac OS X-Eingabemethode</translation> </message> <message> - <location line="+4"/> <source>S60 FEP input method</source> <translation>S60-FEP-Eingabemethode</translation> </message> @@ -4195,7 +3332,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QInputDialog</name> <message> - <location filename="../src/gui/dialogs/qinputdialog.cpp" line="+223"/> <source>Enter a value:</source> <translation>Geben Sie einen Wert ein:</translation> </message> @@ -4203,67 +3339,50 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QLibrary</name> <message> - <location filename="../src/corelib/plugin/qlibrary.cpp" line="+383"/> <source>Could not mmap '%1': %2</source> <translation>Operation mmap fehlgeschlagen für '%1': %2</translation> </message> <message> - <location line="+22"/> <source>Plugin verification data mismatch in '%1'</source> <translation>Die Prüfdaten des Plugins '%1' stimmen nicht überein</translation> </message> <message> - <location line="+6"/> <source>Could not unmap '%1': %2</source> <translation>Operation unmap fehlgeschlagen für '%1': %2</translation> </message> <message> - <location line="+375"/> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> <translation>Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]</translation> </message> <message> - <location line="+20"/> <source>The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3"</source> <translation>Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. Erforderlicher build-spezifischer Schlüssel "%2", erhalten "%3"</translation> </message> <message> - <location line="+365"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location line="-540"/> - <location line="+138"/> - <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+343"/> <source>The shared library was not found.</source> <translation>Die dynamische Bibliothek konnte nicht gefunden werden.</translation> </message> <message> - <location line="+2"/> <source>The file '%1' is not a valid Qt plugin.</source> <translation>Die Datei '%1' ist kein gültiges Qt-Plugin.</translation> </message> <message> - <location line="+43"/> <source>The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.)</source> <translation>Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (Im Debug- bzw. Release-Modus erstellte Bibliotheken können nicht zusammen verwendet werden.)</translation> </message> <message> - <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+236"/> - <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+87"/> <source>Cannot load library %1: %2</source> <translation>Die Bibliothek %1 kann nicht geladen werden: %2</translation> </message> <message> - <location line="+17"/> - <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+22"/> <source>Cannot unload library %1: %2</source> <translation>Die Bibliothek %1 kann nicht entladen werden: %2</translation> </message> <message> - <location line="+34"/> - <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+15"/> <source>Cannot resolve symbol "%1" in %2: %3</source> <translation>Das Symbol "%1" kann in %2 nicht aufgelöst werden: %3</translation> </message> @@ -4271,37 +3390,30 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QLineEdit</name> <message> - <location filename="../src/gui/widgets/qlineedit.cpp" line="+2116"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> <message> - <location line="-40"/> <source>&Undo</source> <translation>&Rückgängig</translation> </message> <message> - <location line="+4"/> <source>&Redo</source> <translation>Wieder&herstellen</translation> </message> <message> - <location line="+9"/> <source>Cu&t</source> <translation>&Ausschneiden</translation> </message> <message> - <location line="+6"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> <message> - <location line="+6"/> <source>&Paste</source> <translation>Einf&ügen</translation> </message> <message> - <location line="+7"/> <source>Delete</source> <translation>Löschen</translation> </message> @@ -4309,23 +3421,18 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QLocalServer</name> <message> - <location filename="../src/network/socket/qlocalserver.cpp" line="+224"/> - <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+246"/> <source>%1: Name error</source> <translation>%1: Fehlerhafter Name</translation> </message> <message> - <location filename="../src/network/socket/qlocalserver_unix.cpp" line="-8"/> <source>%1: Permission denied</source> <translation>%1: Zugriff verweigert</translation> </message> <message> - <location line="+12"/> <source>%1: Address in use</source> <translation>%1: Die Adresse wird bereits verwendet</translation> </message> <message> - <location line="+5"/> <source>%1: Unknown error %2</source> <translation>%1: Unbekannter Fehler %2</translation> </message> @@ -4333,70 +3440,46 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QLocalSocket</name> <message> - <location filename="../src/network/socket/qlocalsocket_tcp.cpp" line="+132"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+139"/> <source>%1: Connection refused</source> <translation>%1: Der Verbindungsaufbau wurde verweigert</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <source>%1: Remote closed</source> <translation>%1: Die Verbindung wurde von der Gegenseite geschlossen</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> - <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+79"/> - <location line="+59"/> <source>%1: Invalid name</source> <translation>%1: Ungültiger Name</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <source>%1: Socket access error</source> <translation>%1: Fehler beim Zugriff auf den Socket</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <source>%1: Socket resource error</source> <translation>%1: Socket-Fehler (Ressourcenproblem)</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <source>%1: Socket operation timed out</source> <translation>%1: Zeitüberschreitung bei Socket-Operation</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <source>%1: Datagram too large</source> <translation>%1: Das Datagramm ist zu groß</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> - <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-64"/> <source>%1: Connection error</source> <translation>%1: Verbindungsfehler</translation> </message> <message> - <location line="+3"/> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <source>%1: The socket operation is not supported</source> <translation>%1: Diese Socket-Operation wird nicht unterstützt</translation> </message> <message> - <location line="+4"/> <source>%1: Unknown error</source> <translation>%1: Unbekannter Fehler</translation> </message> <message> - <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+4"/> - <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+10"/> <source>%1: Unknown error %2</source> <translation>%1: Unbekannter Fehler %2</translation> </message> @@ -4404,27 +3487,22 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMYSQLDriver</name> <message> - <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1287"/> <source>Unable to open database '</source> <translation>Die Datenbankverbindung kann nicht geöffnet werden '</translation> </message> <message> - <location line="+11"/> <source>Unable to connect</source> <translation>Es kann keine Verbindung aufgebaut werden</translation> </message> <message> - <location line="+150"/> <source>Unable to begin transaction</source> <translation>Es kann keine Transaktion gestartet werden</translation> </message> <message> - <location line="+17"/> <source>Unable to commit transaction</source> <translation>Die Transaktion kann nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+17"/> <source>Unable to rollback transaction</source> <translation>Die Transaktion kann nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen)</translation> </message> @@ -4432,60 +3510,46 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMYSQLResult</name> <message> - <location line="-977"/> - <location line="+31"/> <source>Unable to fetch data</source> <translation>Es konnten keine Daten abgeholt werden</translation> </message> <message> - <location line="+161"/> <source>Unable to execute query</source> <translation>Die Abfrage konnte nicht ausgeführt werden</translation> </message> <message> - <location line="+6"/> <source>Unable to store result</source> <translation>Das Ergebnis konnte nicht gespeichert werden</translation> </message> <message> - <location line="+191"/> - <location line="+8"/> <source>Unable to prepare statement</source> <translation>Der Befehl konnte nicht initialisiert werden</translation> </message> <message> - <location line="+37"/> <source>Unable to reset statement</source> <translation>Der Befehl konnte nicht zurückgesetzt werden</translation> </message> <message> - <location line="+86"/> <source>Unable to bind value</source> <translation>Der Wert konnte nicht gebunden werden</translation> </message> <message> - <location line="+11"/> <source>Unable to execute statement</source> <translation>Der Befehl konnte nicht ausgeführt werden</translation> </message> <message> - <location line="+14"/> - <location line="+21"/> <source>Unable to bind outvalues</source> <translation>Die Ausgabewerte konnten nicht gebunden werden</translation> </message> <message> - <location line="-12"/> <source>Unable to store statement results</source> <translation>Die Ergebnisse des Befehls konnten nicht gespeichert werden</translation> </message> <message> - <location line="-253"/> <source>Unable to execute next query</source> <translation>Die folgende Abfrage kann nicht ausgeführt werden</translation> </message> <message> - <location line="+10"/> <source>Unable to store next result</source> <translation>Das folgende Ergebnis kann nicht gespeichert werden</translation> </message> @@ -4493,7 +3557,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMdiArea</name> <message> - <location filename="../src/gui/widgets/qmdiarea.cpp" line="+290"/> <source>(Untitled)</source> <translation>(Unbenannt)</translation> </message> @@ -4501,92 +3564,74 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMdiSubWindow</name> <message> - <location filename="../src/gui/widgets/qmdisubwindow.cpp" line="+280"/> <source>%1 - [%2]</source> <translation>%1 - [%2]</translation> </message> <message> - <location line="+72"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="-18"/> <source>Minimize</source> <translation>Minimieren</translation> </message> <message> - <location line="+13"/> <source>Restore Down</source> <translation>Wiederherstellen</translation> </message> <message> - <location line="+707"/> <source>&Restore</source> <translation>Wieder&herstellen</translation> </message> <message> - <location line="+3"/> <source>&Move</source> <translation>Ver&schieben</translation> </message> <message> - <location line="+1"/> <source>&Size</source> <translation>Größe ä&ndern</translation> </message> <message> - <location line="+1"/> <source>Mi&nimize</source> <translation>M&inimieren</translation> </message> <message> - <location line="+2"/> <source>Ma&ximize</source> <translation>Ma&ximieren</translation> </message> <message> - <location line="+2"/> <source>Stay on &Top</source> <translation>Im &Vordergrund bleiben</translation> </message> <message> - <location line="+3"/> <source>&Close</source> <translation>Schl&ießen</translation> </message> <message> - <location line="-729"/> <source>Maximize</source> <translation>Maximieren</translation> </message> <message> - <location line="+3"/> <source>Unshade</source> <translation>Herabrollen</translation> </message> <message> - <location line="+3"/> <source>Shade</source> <translation>Aufrollen</translation> </message> <message> - <location line="+6"/> <source>Restore</source> <translation>Wiederherstellen</translation> </message> <message> - <location line="+6"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location line="+3"/> <source>Menu</source> <translation>Menü</translation> </message> <message> - <location line="-79"/> <source>- [%1]</source> <translation>- [%1]</translation> </message> @@ -4594,21 +3639,14 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMenu</name> <message> - <location filename="../src/plugins/accessible/widgets/qaccessiblemenu.cpp" line="+157"/> - <location line="+225"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="-224"/> - <location line="+225"/> <source>Open</source> <translation>Öffnen</translation> </message> <message> - <location line="-223"/> - <location line="+225"/> - <location line="+51"/> <source>Execute</source> <translation>Ausführen</translation> </message> @@ -4616,7 +3654,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMenuBar</name> <message> - <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+456"/> <source>Actions</source> <translation>Optionen</translation> </message> @@ -4624,40 +3661,30 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMessageBox</name> <message> - <location filename="../src/gui/dialogs/qmessagebox.cpp" line="-1964"/> - <location line="+847"/> - <location filename="../src/gui/dialogs/qmessagebox.h" line="-52"/> - <location line="+8"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location line="+477"/> <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> <translation type="unfinished"></translation> </message> <message> - <location line="+31"/> <source>About Qt</source> <translation>Über Qt</translation> </message> <message> - <location line="-512"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location line="-1129"/> <source>Show Details...</source> <translation>Details einblenden...</translation> </message> <message> - <location line="+0"/> <source>Hide Details...</source> <translation>Details ausblenden...</translation> </message> @@ -4665,7 +3692,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMultiInputContext</name> <message> - <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontext.cpp" line="+88"/> <source>Select IM</source> <translation>Eingabemethode auswählen</translation> </message> @@ -4673,12 +3699,10 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMultiInputContextPlugin</name> <message> - <location filename="../src/plugins/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp" line="+95"/> <source>Multiple input method switcher</source> <translation>Umschalter für Eingabemethoden</translation> </message> <message> - <location line="+7"/> <source>Multiple input method switcher that uses the context menu of the text widgets</source> <translation>Mehrfachumschalter für Eingabemethoden, der das Kontextmenü des Text-Widgets verwendet</translation> </message> @@ -4686,132 +3710,106 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNativeSocketEngine</name> <message> - <location filename="../src/network/socket/qnativesocketengine.cpp" line="+209"/> <source>The remote host closed the connection</source> <translation>Der entfernte Rechner hat die Verbindung geschlossen</translation> </message> <message> - <location line="+3"/> <source>Network operation timed out</source> <translation>Das Zeitlimit für die Operation wurde überschritten</translation> </message> <message> - <location line="+3"/> <source>Out of resources</source> <translation>Keine Ressourcen verfügbar</translation> </message> <message> - <location line="+3"/> <source>Unsupported socket operation</source> <translation> Socket-Kommando nicht unterstützt</translation> </message> <message> - <location line="+3"/> <source>Protocol type not supported</source> <translation>Das Protokoll wird nicht unterstützt</translation> </message> <message> - <location line="+3"/> <source>Invalid socket descriptor</source> <translation>Ungültiger Socket-Deskriptor</translation> </message> <message> - <location line="+6"/> <source>Network unreachable</source> <translation>Das Netzwerk ist nicht erreichbar</translation> </message> <message> - <location line="+3"/> <source>Permission denied</source> <translation>Zugriff verweigert</translation> </message> <message> - <location line="+3"/> <source>Connection timed out</source> <translation>Das Zeitlimit für die Verbindung wurde überschritten</translation> </message> <message> - <location line="+3"/> <source>Connection refused</source> <translation>Verbindung verweigert</translation> </message> <message> - <location line="+3"/> <source>The bound address is already in use</source> <translation>Die angegebene Adresse ist bereits in Gebrauch</translation> </message> <message> - <location line="+3"/> <source>The address is not available</source> <translation>Die Adresse ist nicht verfügbar</translation> </message> <message> - <location line="+3"/> <source>The address is protected</source> <translation>Die Adresse ist geschützt</translation> </message> <message> - <location line="+6"/> <source>Unable to send a message</source> <translation>Die Nachricht konnte nicht gesendet werden</translation> </message> <message> - <location line="+3"/> <source>Unable to receive a message</source> <translation>Die Nachricht konnte nicht empfangen werden</translation> </message> <message> - <location line="+3"/> <source>Unable to write</source> <translation>Der Schreibvorgang konnte nicht ausgeführt werden</translation> </message> <message> - <location line="+3"/> <source>Network error</source> <translation>Netzwerkfehler</translation> </message> <message> - <location line="+3"/> <source>Another socket is already listening on the same port</source> <translation>Auf diesem Port hört bereits ein anderer Socket</translation> </message> <message> - <location line="-66"/> <source>Unable to initialize non-blocking socket</source> <translation>Der nichtblockierende Socket konnte nicht initialisiert werden</translation> </message> <message> - <location line="+3"/> <source>Unable to initialize broadcast socket</source> <translation>Der Broadcast-Socket konnte nicht initialisiert werden</translation> </message> <message> - <location line="+3"/> <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> <translation>Es wurde versucht, einen IPv6-Socket auf einem System ohne IPv6-Unterstützung zu verwenden</translation> </message> <message> - <location line="+21"/> <source>Host unreachable</source> <translation>Der Zielrechner kann nicht erreicht werden</translation> </message> <message> - <location line="+24"/> <source>Datagram was too large to send</source> <translation>Das Datagram konnte nicht gesendet werden, weil es zu groß ist</translation> </message> <message> - <location line="+18"/> <source>Operation on non-socket</source> <translation>Operation kann nur auf einen Socket angewandt werden</translation> </message> <message> - <location line="+6"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location line="-3"/> <source>The proxy type is invalid for this operation</source> <translation>Die Operation kann mit dem Proxy-Typ nicht durchgeführt werden</translation> </message> @@ -4819,7 +3817,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessCacheBackend</name> <message> - <location filename="../src/network/access/qnetworkaccesscachebackend.cpp" line="+66"/> <source>Error opening %1</source> <translation>%1 konnte nicht geöffnet werden</translation> </message> @@ -4827,12 +3824,10 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessDataBackend</name> <message> - <location filename="../src/network/access/qnetworkaccessdatabackend.cpp" line="+76"/> <source>Operation not supported on %1</source> <translation>Diese Operation wird von %1 nicht unterstützt</translation> </message> <message> - <location line="+25"/> <source>Invalid URI: %1</source> <translation>Ungültiger URI: %1</translation> </message> @@ -4840,17 +3835,14 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessDebugPipeBackend</name> <message> - <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+195"/> <source>Write error writing to %1: %2</source> <translation>Fehler beim Schreiben zu %1: %2</translation> </message> <message> - <location line="+60"/> <source>Socket error on %1: %2</source> <translation>Socket-Fehler bei %1: %2</translation> </message> <message> - <location line="+15"/> <source>Remote host closed the connection prematurely on %1</source> <translation>Der entfernte Rechner hat die Verbindung zu %1 vorzeitig beendet</translation> </message> @@ -4858,30 +3850,22 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessFileBackend</name> <message> - <location filename="../src/network/access/qfilenetworkreply.cpp" line="+85"/> - <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/> <source>Request for opening non-local file %1</source> <translation>Anforderung zum Öffnen einer Datei über Netzwerk %1</translation> </message> <message> - <location line="+33"/> - <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+45"/> <source>Error opening %1: %2</source> <translation>%1 konnte nicht geöffnet werden: %2</translation> </message> <message> - <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+38"/> <source>Write error writing to %1: %2</source> <translation>Fehler beim Schreiben zur Datei %1: %2</translation> </message> <message> - <location filename="../src/network/access/qfilenetworkreply.cpp" line="-13"/> - <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+48"/> <source>Cannot open %1: Path is a directory</source> <translation>%1 kann nicht geöffnet werden: Der Pfad spezifiziert ein Verzeichnis</translation> </message> <message> - <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+21"/> <source>Read error reading from %1: %2</source> <translation>Beim Lesen von der Datei %1 trat ein Fehler auf: %2</translation> </message> @@ -4889,27 +3873,22 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessFtpBackend</name> <message> - <location filename="../src/network/access/qnetworkaccessftpbackend.cpp" line="+131"/> <source>No suitable proxy found</source> <translation>Es konnte kein geeigneter Proxy-Server gefunden werden</translation> </message> <message> - <location line="+14"/> <source>Cannot open %1: is a directory</source> <translation>%1 kann nicht geöffnet werden: Es handelt sich um ein Verzeichnis</translation> </message> <message> - <location line="+112"/> <source>Logging in to %1 failed: authentication required</source> <translation>Die Anmeldung bei %1 schlug fehl: Es ist eine Authentifizierung erforderlich</translation> </message> <message> - <location line="+39"/> <source>Error while downloading %1: %2</source> <translation>Beim Herunterladen von %1 trat ein Fehler auf: %2</translation> </message> <message> - <location line="+2"/> <source>Error while uploading %1: %2</source> <translation>Beim Hochladen von %1 trat ein Fehler auf: %2</translation> </message> @@ -4917,7 +3896,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessHttpBackend</name> <message> - <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+652"/> <source>No suitable proxy found</source> <translation>Es konnte kein geeigneter Proxy-Server gefunden werden</translation> </message> @@ -4925,7 +3903,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessManager</name> <message> - <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+942"/> <source>Network access is disabled.</source> <translation>Der Zugriff auf das Netzwerk ist nicht gestattet.</translation> </message> @@ -4933,22 +3910,18 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkReply</name> <message> - <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+100"/> <source>Error downloading %1 - server replied: %2</source> <translation>Beim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2</translation> </message> <message> - <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="-860"/> <source>Protocol "%1" is unknown</source> <translation>Das Protokoll "%1" ist unbekannt</translation> </message> <message> - <location line="+192"/> <source>Network session error.</source> <translation>Fehler bei Netzwerkverbindung.</translation> </message> <message> - <location line="+352"/> <source>Temporary network failure.</source> <translation>Das Netzwerk ist zur Zeit ausgefallen.</translation> </message> @@ -4956,8 +3929,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkReplyImpl</name> <message> - <location line="+120"/> - <location line="+28"/> <source>Operation canceled</source> <translation>Operation abgebrochen</translation> </message> @@ -4965,7 +3936,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkSession</name> <message> - <location filename="../src/network/bearer/qnetworksession.cpp" line="+449"/> <source>Invalid configuration.</source> <translation>Ungültige Konfiguration.</translation> </message> @@ -4973,47 +3943,34 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkSessionPrivateImpl</name> <message> - <location filename="../src/plugins/bearer/qnetworksession_impl.cpp" line="+272"/> - <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+271"/> <source>Unknown session error.</source> <translation>Unbekannter Fehler bei Netzwerkverbindung.</translation> </message> <message> - <location line="+2"/> - <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> <source>The session was aborted by the user or system.</source> <translation>Die Verbindung wurde vom Nutzer oder vom Betriebssystem unterbrochen.</translation> </message> <message> - <location line="+2"/> - <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> <source>The requested operation is not supported by the system.</source> <translation>Die angeforderte Operation wird vom System nicht unterstützt.</translation> </message> <message> - <location line="+2"/> - <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> <source>The specified configuration cannot be used.</source> <translation>Die angegebene Konfiguration kann nicht verwendet werden.</translation> </message> <message> - <location line="+2"/> - <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+2"/> <source>Roaming was aborted or is not possible.</source> <translation>Das Roaming wurde abgebrochen oder ist hier nicht möglich.</translation> </message> <message> - <location filename="../src/plugins/bearer/icd/qnetworksession_impl.cpp" line="+1005"/> <source>Roaming error</source> <translation>Fehler beim Roaming</translation> </message> <message> - <location line="+3"/> <source>Session aborted by user or system</source> <translation>Die Verbindung wurde vom Nutzer oder vom Betriebssystem unterbrochen</translation> </message> <message> - <location line="+4"/> <source>Unidentified Error</source> <translation>Unbekannter Fehler</translation> </message> @@ -5021,28 +3978,23 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QOCIDriver</name> <message> - <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2088"/> <source>Unable to logon</source> <translation>Logon-Vorgang fehlgeschlagen</translation> </message> <message> - <location line="-144"/> <source>Unable to initialize</source> <comment>QOCIDriver</comment> <translation>Initialisierung fehlgeschlagen</translation> </message> <message> - <location line="+215"/> <source>Unable to begin transaction</source> <translation>Es konnte keine Transaktion gestartet werden</translation> </message> <message> - <location line="+19"/> <source>Unable to commit transaction</source> <translation>Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+19"/> <source>Unable to rollback transaction</source> <translation>Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen)</translation> </message> @@ -5050,44 +4002,34 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QOCIResult</name> <message> - <location line="-979"/> - <location line="+168"/> - <location line="+15"/> <source>Unable to bind column for batch execute</source> <translation>Die Spalte konnte nicht für den Stapelverarbeitungs-Befehl gebunden werden</translation> </message> <message> - <location line="+15"/> <source>Unable to execute batch statement</source> <translation>Der Stapelverarbeitungs-Befehl konnte nicht ausgeführt werden</translation> </message> <message> - <location line="+304"/> <source>Unable to goto next</source> <translation>Kann nicht zum nächsten Element gehen</translation> </message> <message> - <location line="+59"/> <source>Unable to alloc statement</source> <translation>Die Allokation des Befehls schlug fehl</translation> </message> <message> - <location line="+15"/> <source>Unable to prepare statement</source> <translation>Der Befehl konnte nicht initialisiert werden</translation> </message> <message> - <location line="+26"/> <source>Unable to get statement type</source> <translation>Der Anweisungstyp kann nicht bestimmt werden</translation> </message> <message> - <location line="+20"/> <source>Unable to bind value</source> <translation>Der Wert konnte nicht gebunden werden</translation> </message> <message> - <location line="+19"/> <source>Unable to execute statement</source> <translation>Der Befehl konnte nicht ausgeführt werden</translation> </message> @@ -5095,32 +4037,26 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QODBCDriver</name> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1888"/> <source>Unable to connect</source> <translation>Es kann keine Verbindung aufgebaut werden</translation> </message> <message> - <location line="+269"/> <source>Unable to disable autocommit</source> <translation>'autocommit' konnte nicht deaktiviert werden</translation> </message> <message> - <location line="+17"/> <source>Unable to commit transaction</source> <translation>Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+17"/> <source>Unable to rollback transaction</source> <translation>Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen)</translation> </message> <message> - <location line="+15"/> <source>Unable to enable autocommit</source> <translation>'autocommit' konnte nicht aktiviert werden</translation> </message> <message> - <location line="-312"/> <source>Unable to connect - Driver doesn't support all functionality required</source> <translation>Es kann keine Verbindung aufgebaut werden weil der Treiber die benötigte Funktionalität nicht vollständig unterstützt</translation> </message> @@ -5128,51 +4064,38 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QODBCResult</name> <message> - <location line="-941"/> - <location line="+351"/> <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> <translation>QODBCResult::reset: 'SQL_CURSOR_STATIC' konnte nicht als Attribut des Befehls gesetzt werden. Bitte prüfen Sie die Konfiguration Ihres ODBC-Treibers</translation> </message> <message> - <location line="-334"/> - <location line="+627"/> <source>Unable to execute statement</source> <translation>Der Befehl konnte nicht ausgeführt werden</translation> </message> <message> - <location line="-546"/> <source>Unable to fetch next</source> <translation>Der nächste Datensatz konnte nicht abgeholt werden</translation> </message> <message> - <location line="+271"/> <source>Unable to prepare statement</source> <translation>Der Befehl konnte nicht initialisiert werden</translation> </message> <message> - <location line="+267"/> <source>Unable to bind variable</source> <translation>Die Variable konnte nicht gebunden werden</translation> </message> <message> - <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+189"/> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-466"/> - <location line="+578"/> <source>Unable to fetch last</source> <translation>Der letzte Datensatz konnte nicht abgeholt werden</translation> </message> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-672"/> <source>Unable to fetch</source> <translation>Es konnten keine Daten abgeholt werden</translation> </message> <message> - <location line="+44"/> <source>Unable to fetch first</source> <translation>Der erste Datensatz konnte nicht abgeholt werden</translation> </message> <message> - <location line="+19"/> <source>Unable to fetch previous</source> <translation>Der vorangegangene Datensatz kann nicht abgeholt werden</translation> </message> @@ -5180,19 +4103,14 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QObject</name> <message> - <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="-241"/> <source>"%1" duplicates a previous role name and will be disabled.</source> <translation>"%1" ist bereits als Name einer Rolle vergeben und wird daher deaktiviert.</translation> </message> <message> - <location line="+515"/> - <location line="+4"/> <source>invalid query: "%1"</source> <translation>Ungültige Abfrage: "%1"</translation> </message> <message> - <location filename="../src/3rdparty/phonon/phonon/pulsesupport.cpp" line="+162"/> - <location line="+11"/> <source>PulseAudio Sound Server</source> <translation>PulseAudio Sound Server</translation> </message> @@ -5200,12 +4118,10 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPPDOptionsModel</name> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1238"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+2"/> <source>Value</source> <translation>Wert</translation> </message> @@ -5213,32 +4129,26 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPSQLDriver</name> <message> - <location filename="../src/sql/drivers/psql/qsql_psql.cpp" line="+782"/> <source>Unable to connect</source> <translation>Es kann keine Verbindung aufgebaut werden</translation> </message> <message> - <location line="+49"/> <source>Could not begin transaction</source> <translation>Es konnte keine Transaktion gestartet werden</translation> </message> <message> - <location line="+30"/> <source>Could not commit transaction</source> <translation>Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+16"/> <source>Could not rollback transaction</source> <translation>Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen)</translation> </message> <message> - <location line="+374"/> <source>Unable to subscribe</source> <translation>Die Registrierung schlug fehl</translation> </message> <message> - <location line="+32"/> <source>Unable to unsubscribe</source> <translation>Die Registrierung konnte nicht aufgehoben werden</translation> </message> @@ -5246,12 +4156,10 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPSQLResult</name> <message> - <location line="-1085"/> <source>Unable to create query</source> <translation>Es konnte keine Abfrage erzeugt werden</translation> </message> <message> - <location line="+372"/> <source>Unable to prepare statement</source> <translation>Der Befehl konnte nicht initialisiert werden</translation> </message> @@ -5259,102 +4167,82 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPageSetupWidget</name> <message> - <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="+304"/> <source>Centimeters (cm)</source> <translation>Zentimeter (cm)</translation> </message> <message> - <location line="+0"/> <source>Millimeters (mm)</source> <translation>Millimeter (mm)</translation> </message> <message> - <location line="+0"/> <source>Inches (in)</source> <translation>Zoll (in)</translation> </message> <message> - <location line="+0"/> <source>Points (pt)</source> <translation>Punkte (pt)</translation> </message> <message> - <location filename="../src/gui/dialogs/qpagesetupwidget.ui"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location/> <source>Paper</source> <translation>Papier</translation> </message> <message> - <location/> <source>Page size:</source> <translation>Seitengröße:</translation> </message> <message> - <location/> <source>Width:</source> <translation>Breite:</translation> </message> <message> - <location/> <source>Height:</source> <translation>Höhe:</translation> </message> <message> - <location/> <source>Paper source:</source> <translation>Papierquelle:</translation> </message> <message> - <location/> <source>Orientation</source> <translation>Ausrichtung</translation> </message> <message> - <location/> <source>Portrait</source> <translation>Hochformat</translation> </message> <message> - <location/> <source>Landscape</source> <translation>Querformat</translation> </message> <message> - <location/> <source>Reverse landscape</source> <translation>Umgekehrtes Querformat</translation> </message> <message> - <location/> <source>Reverse portrait</source> <translation>Umgekehrtes Hochformat</translation> </message> <message> - <location/> <source>Margins</source> <translation>Ränder</translation> </message> <message> - <location/> <source>top margin</source> <translation>Oberer Rand</translation> </message> <message> - <location/> <source>left margin</source> <translation>Linker Rand</translation> </message> <message> - <location/> <source>right margin</source> <translation>Rechter Rand</translation> </message> <message> - <location/> <source>bottom margin</source> <translation>Unterer Rand</translation> </message> @@ -5362,12 +4250,10 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPluginLoader</name> <message> - <location filename="../src/corelib/plugin/qpluginloader.cpp" line="+24"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> <message> - <location line="-113"/> <source>The plugin was not loaded.</source> <translation>Das Plugin wurde nicht geladen.</translation> </message> @@ -5375,433 +4261,344 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPrintDialog</name> <message> - <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+110"/> <source>locally connected</source> <translation>direkt verbunden</translation> </message> <message> - <location line="+23"/> - <location line="+225"/> <source>Aliases: %1</source> <translation>Alias: %1</translation> </message> <message> - <location line="+225"/> - <location line="+199"/> <source>unknown</source> <translation>unbekannt</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+272"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="+379"/> <source>Print all</source> <translation>Alles drucken</translation> </message> <message> - <location line="+2"/> <source>Print range</source> <translation>Bereich drucken</translation> </message> <message> - <location line="-48"/> <source>A0 (841 x 1189 mm)</source> <translation>A0 (841 x 1189 mm)</translation> </message> <message> - <location line="+1"/> <source>A1 (594 x 841 mm)</source> <translation>A1 (594 x 841 mm)</translation> </message> <message> - <location line="+1"/> <source>A2 (420 x 594 mm)</source> <translation>A2 (420 x 594 mm)</translation> </message> <message> - <location line="+1"/> <source>A3 (297 x 420 mm)</source> <translation>A3 (297 x 420 mm)</translation> </message> <message> - <location line="+2"/> <source>A5 (148 x 210 mm)</source> <translation>A5 (148 x 210 mm)</translation> </message> <message> - <location line="+1"/> <source>A6 (105 x 148 mm)</source> <translation>A6 (105 x 148 mm)</translation> </message> <message> - <location line="+1"/> <source>A7 (74 x 105 mm)</source> <translation>A7 (74 x 105 mm)</translation> </message> <message> - <location line="+1"/> <source>A8 (52 x 74 mm)</source> <translation>A8 (52 x 74 mm)</translation> </message> <message> - <location line="+1"/> <source>A9 (37 x 52 mm)</source> <translation>A9 (37 x 52 mm)</translation> </message> <message> - <location line="+1"/> <source>B0 (1000 x 1414 mm)</source> <translation>B0 (1000 x 1414 mm)</translation> </message> <message> - <location line="+1"/> <source>B1 (707 x 1000 mm)</source> <translation>B1 (707 x 1000 mm)</translation> </message> <message> - <location line="+1"/> <source>B2 (500 x 707 mm)</source> <translation>B2 (500 x 707 mm)</translation> </message> <message> - <location line="+1"/> <source>B3 (353 x 500 mm)</source> <translation>B3 (353 x 500 mm)</translation> </message> <message> - <location line="+1"/> <source>B4 (250 x 353 mm)</source> <translation>B4 (250 x 353 mm)</translation> </message> <message> - <location line="+2"/> <source>B6 (125 x 176 mm)</source> <translation>B6 (125 x 176 mm)</translation> </message> <message> - <location line="+1"/> <source>B7 (88 x 125 mm)</source> <translation>B7 (88 x 125 mm)</translation> </message> <message> - <location line="+1"/> <source>B8 (62 x 88 mm)</source> <translation>B8 (62 x 88 mm)</translation> </message> <message> - <location line="+1"/> <source>B9 (44 x 62 mm)</source> <translation>B9 (44 x 62 mm)</translation> </message> <message> - <location line="+1"/> <source>B10 (31 x 44 mm)</source> <translation>B10 (31 x 44 mm)</translation> </message> <message> - <location line="+1"/> <source>C5E (163 x 229 mm)</source> <translation>C5E (163 x 229 mm)</translation> </message> <message> - <location line="+1"/> <source>DLE (110 x 220 mm)</source> <translation>DLE (110 x 220 mm)</translation> </message> <message> - <location line="+2"/> <source>Folio (210 x 330 mm)</source> <translation>Folio (210 x 330 mm)</translation> </message> <message> - <location line="+1"/> <source>Ledger (432 x 279 mm)</source> <translation>Ledger (432 x 279 mm)</translation> </message> <message> - <location line="+3"/> <source>Tabloid (279 x 432 mm)</source> <translation>Tabloid (279 x 432 mm)</translation> </message> <message> - <location line="+1"/> <source>US Common #10 Envelope (105 x 241 mm)</source> <translation>US Common #10 Envelope (105 x 241 mm)</translation> </message> <message> - <location line="+20"/> <source>Print current page</source> <translation>Diese Seite drucken</translation> </message> <message> - <location line="-45"/> <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source> <translation>A4 (210 x 297 mm)</translation> </message> <message> - <location line="+11"/> <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source> <translation>B5 (176 x 250 mm)</translation> </message> <message> - <location line="+8"/> <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source> <translation>Executive (7,5 x 10 Zoll, 191 x 254 mm)</translation> </message> <message> - <location line="+3"/> <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source> <translation>Legal (8,5 x 14 Zoll, 216 x 356 mm)</translation> </message> <message> - <location line="+1"/> <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source> <translation>Letter (8,5 x 11 Zoll, 216 x 279 mm)</translation> </message> <message> - <location line="+20"/> <source>Print selection</source> <translation>Auswahl drucken</translation> </message> <message> - <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+113"/> - <location line="+13"/> - <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="-2"/> <source>Print</source> <translation>Drucken</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-392"/> <source>Print To File ...</source> <translation>In Datei drucken ...</translation> </message> <message> - <location line="+82"/> <source>File %1 is not writable. Please choose a different file name.</source> <translation>Die Datei %1 ist schreibgeschützt. Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> - <location line="+4"/> <source>%1 already exists. Do you want to overwrite it?</source> <translation>Die Datei %1 existiert bereits. Soll sie überschrieben werden?</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-232"/> <source>File exists</source> <translation>Die Datei existiert bereits</translation> </message> <message> - <location line="+1"/> <source><qt>Do you want to overwrite it?</qt></source> <translation><qt>Soll sie überschrieben werden?</qt></translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-8"/> <source>%1 is a directory. Please choose a different file name.</source> <translation>%1 ist ein Verzeichnis. Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_win.cpp" line="+1"/> <source>The 'From' value cannot be greater than the 'To' value.</source> <translation>Die Angabe für die erste Seite darf nicht größer sein als die für die letzte Seite.</translation> </message> <message> - <location filename="../src/gui/dialogs/qpagesetupdialog_unix.cpp" line="-232"/> <source>A0</source> <translation>A0</translation> </message> <message> - <location line="+1"/> <source>A1</source> <translation>A1</translation> </message> <message> - <location line="+1"/> <source>A2</source> <translation>A2</translation> </message> <message> - <location line="+1"/> <source>A3</source> <translation>A3</translation> </message> <message> - <location line="+1"/> <source>A4</source> <translation>A4</translation> </message> <message> - <location line="+1"/> <source>A5</source> <translation>A5</translation> </message> <message> - <location line="+1"/> <source>A6</source> <translation>A6</translation> </message> <message> - <location line="+1"/> <source>A7</source> <translation>A7</translation> </message> <message> - <location line="+1"/> <source>A8</source> <translation>A8</translation> </message> <message> - <location line="+1"/> <source>A9</source> <translation>A9</translation> </message> <message> - <location line="+1"/> <source>B0</source> <translation>B0</translation> </message> <message> - <location line="+1"/> <source>B1</source> <translation>B1</translation> </message> <message> - <location line="+1"/> <source>B2</source> <translation>B2</translation> </message> <message> - <location line="+1"/> <source>B3</source> <translation>B3</translation> </message> <message> - <location line="+1"/> <source>B4</source> <translation>B4</translation> </message> <message> - <location line="+1"/> <source>B5</source> <translation>B5</translation> </message> <message> - <location line="+1"/> <source>B6</source> <translation>B6</translation> </message> <message> - <location line="+1"/> <source>B7</source> <translation>B7</translation> </message> <message> - <location line="+1"/> <source>B8</source> <translation>B8</translation> </message> <message> - <location line="+1"/> <source>B9</source> <translation>B9</translation> </message> <message> - <location line="+1"/> <source>B10</source> <translation>B10</translation> </message> <message> - <location line="+1"/> <source>C5E</source> <translation>C5E</translation> </message> <message> - <location line="+1"/> <source>DLE</source> <translation>DLE</translation> </message> <message> - <location line="+1"/> <source>Executive</source> <translation>Executive</translation> </message> <message> - <location line="+1"/> <source>Folio</source> <translation>Folio</translation> </message> <message> - <location line="+1"/> <source>Ledger</source> <translation>Ledger</translation> </message> <message> - <location line="+1"/> <source>Legal</source> <translation>Legal</translation> </message> <message> - <location line="+1"/> <source>Letter</source> <translation>Letter</translation> </message> <message> - <location line="+1"/> <source>Tabloid</source> <translation>Tabloid</translation> </message> <message> - <location line="+1"/> <source>US Common #10 Envelope</source> <translation>US Common #10 Envelope</translation> </message> <message> - <location line="+1"/> <source>Custom</source> <translation>Benutzerdefiniert</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-530"/> - <location line="+68"/> <source>&Options >></source> <translation>&Einstellungen >></translation> </message> <message> - <location line="+4"/> <source>&Options <<</source> <translation>&Einstellungen << </translation> </message> <message> - <location line="+260"/> <source>Print to File (PDF)</source> <translation>In PDF-Datei drucken</translation> </message> <message> - <location line="+1"/> <source>Print to File (Postscript)</source> <translation>In Postscript-Datei drucken</translation> </message> <message> - <location line="+47"/> <source>Local file</source> <translation>Lokale Datei</translation> </message> <message> - <location line="+1"/> <source>Write %1 file</source> <translation>Schreiben der Datei %1</translation> </message> <message> - <location line="-376"/> <source>&Print</source> <translation>&Drucken</translation> </message> @@ -5809,108 +4606,86 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QPrintPreviewDialog</name> <message> - <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+249"/> <source>%1%</source> <translation>%1%</translation> </message> <message> - <location line="+84"/> <source>Print Preview</source> <translation>Druckvorschau</translation> </message> <message> - <location line="+30"/> <source>Next page</source> <translation>Nächste Seite</translation> </message> <message> - <location line="+1"/> <source>Previous page</source> <translation>Vorige Seite</translation> </message> <message> - <location line="+1"/> <source>First page</source> <translation>Erste Seite</translation> </message> <message> - <location line="+1"/> <source>Last page</source> <translation>Letzte Seite</translation> </message> <message> - <location line="+9"/> <source>Fit width</source> <translation>Breite anpassen</translation> </message> <message> - <location line="+1"/> <source>Fit page</source> <translation>Seite anpassen</translation> </message> <message> - <location line="+11"/> <source>Zoom in</source> <translation>Vergrößern</translation> </message> <message> - <location line="+1"/> <source>Zoom out</source> <translation>Verkleinern</translation> </message> <message> - <location line="+6"/> <source>Portrait</source> <translation>Hochformat</translation> </message> <message> - <location line="+1"/> <source>Landscape</source> <translation>Querformat</translation> </message> <message> - <location line="+10"/> <source>Show single page</source> <translation>Einzelne Seite anzeigen</translation> </message> <message> - <location line="+1"/> <source>Show facing pages</source> <translation>Gegenüberliegende Seiten anzeigen</translation> </message> <message> - <location line="+1"/> <source>Show overview of all pages</source> <translation>Übersicht aller Seiten</translation> </message> <message> - <location line="+15"/> <source>Print</source> <translation>Drucken</translation> </message> <message> - <location line="+1"/> <source>Page setup</source> <translation>Seite einrichten</translation> </message> <message> - <location line="+6"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="+148"/> <source>Export to PDF</source> <translation>PDF exportieren</translation> </message> <message> - <location line="+3"/> <source>Export to PostScript</source> <translation>PostScript exportieren</translation> </message> <message> - <location filename="../src/gui/dialogs/qabstractpagesetupdialog.cpp" line="+68"/> - <location line="+12"/> <source>Page Setup</source> <translation>Seite einrichten</translation> </message> @@ -5918,17 +4693,14 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QPrintPropertiesWidget</name> <message> - <location filename="../src/gui/dialogs/qprintpropertieswidget.ui"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location/> <source>Page</source> <translation>Seite</translation> </message> <message> - <location/> <source>Advanced</source> <translation>Erweitert</translation> </message> @@ -5936,102 +4708,82 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QPrintSettingsOutput</name> <message> - <location filename="../src/gui/dialogs/qprintsettingsoutput.ui"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location/> <source>Copies</source> <translation>Anzahl Exemplare</translation> </message> <message> - <location/> <source>Print range</source> <translation>Bereich drucken</translation> </message> <message> - <location/> <source>Print all</source> <translation>Alles drucken</translation> </message> <message> - <location/> <source>Pages from</source> <translation>Seiten von</translation> </message> <message> - <location/> <source>to</source> <translation>bis</translation> </message> <message> - <location/> <source>Selection</source> <translation>Auswahl</translation> </message> <message> - <location/> <source>Output Settings</source> <translation>Ausgabeeinstellungen</translation> </message> <message> - <location/> <source>Copies:</source> <translation>Anzahl Exemplare:</translation> </message> <message> - <location/> <source>Collate</source> <translation>Sortieren</translation> </message> <message> - <location/> <source>Reverse</source> <translation>Umgekehrt</translation> </message> <message> - <location/> <source>Options</source> <translation>Optionen</translation> </message> <message> - <location/> <source>Color Mode</source> <translation>Farbmodus</translation> </message> <message> - <location/> <source>Color</source> <translation>Farbe</translation> </message> <message> - <location/> <source>Grayscale</source> <translation>Graustufen</translation> </message> <message> - <location/> <source>Duplex Printing</source> <translation>Duplexdruck</translation> </message> <message> - <location/> <source>None</source> <translation>Kein</translation> </message> <message> - <location/> <source>Long side</source> <translation>Lange Seite</translation> </message> <message> - <location/> <source>Short side</source> <translation>Kurze Seite</translation> </message> <message> - <location/> <source>Current Page</source> <translation></translation> </message> @@ -6039,47 +4791,38 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QPrintWidget</name> <message> - <location filename="../src/gui/dialogs/qprintwidget.ui"/> <source>Form</source> <translation>Formular</translation> </message> <message> - <location/> <source>Printer</source> <translation>Drucker</translation> </message> <message> - <location/> <source>&Name:</source> <translation>&Name:</translation> </message> <message> - <location/> <source>P&roperties</source> <translation>&Eigenschaften</translation> </message> <message> - <location/> <source>Location:</source> <translation>Standort:</translation> </message> <message> - <location/> <source>Preview</source> <translation>Vorschau</translation> </message> <message> - <location/> <source>Type:</source> <translation>Typ:</translation> </message> <message> - <location/> <source>Output &file:</source> <translation>Ausgabe&datei:</translation> </message> <message> - <location/> <source>...</source> <translation>...</translation> </message> @@ -6087,62 +4830,38 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QProcess</name> <message> - <location filename="../src/corelib/io/qprocess_unix.cpp" line="+406"/> - <location filename="../src/corelib/io/qprocess_win.cpp" line="+137"/> <source>Could not open input redirection for reading</source> <translation>Die Eingabeumleitung konnte nicht zum Lesen geöffnet werden</translation> </message> <message> - <location line="+12"/> - <location filename="../src/corelib/io/qprocess_win.cpp" line="+20"/> <source>Could not open output redirection for writing</source> <translation>Die Ausgabeumleitung konnte nicht zum Lesen geöffnet werden</translation> </message> <message> - <location line="+239"/> <source>Resource error (fork failure): %1</source> <translation>Ressourcenproblem ("fork failure"): %1</translation> </message> <message> - <location line="+258"/> - <location line="+52"/> - <location line="+74"/> - <location line="+66"/> - <location filename="../src/corelib/io/qprocess_win.cpp" line="+406"/> - <location line="+50"/> - <location line="+75"/> - <location line="+42"/> - <location line="+54"/> <source>Process operation timed out</source> <translation>Zeitüberschreitung</translation> </message> <message> - <location filename="../src/corelib/io/qprocess.cpp" line="+866"/> - <location line="+52"/> - <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/> - <location line="+50"/> <source>Error reading from process</source> <translation>Das Lesen vom Prozess schlug fehl</translation> </message> <message> - <location line="+47"/> - <location line="+826"/> - <location filename="../src/corelib/io/qprocess_win.cpp" line="+140"/> <source>Error writing to process</source> <translation>Das Schreiben zum Prozess schlug fehl</translation> </message> <message> - <location line="-756"/> <source>Process crashed</source> <translation>Der Prozess ist abgestürzt</translation> </message> <message> - <location line="+959"/> <source>No program defined</source> <translation>Es wurde kein Programm angegeben</translation> </message> <message> - <location filename="../src/corelib/io/qprocess_win.cpp" line="-360"/> <source>Process failed to start: %1</source> <translation>Das Starten des Prozesses schlug fehl: %1</translation> </message> @@ -6150,7 +4869,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QProgressDialog</name> <message> - <location filename="../src/gui/dialogs/qprogressdialog.cpp" line="+196"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> @@ -6158,7 +4876,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QPushButton</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-8"/> <source>Open</source> <translation>Öffnen</translation> </message> @@ -6166,7 +4883,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QRadioButton</name> <message> - <location line="+12"/> <source>Check</source> <translation>Ankreuzen</translation> </message> @@ -6174,57 +4890,46 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QRegExp</name> <message> - <location filename="../src/corelib/tools/qregexp.cpp" line="+65"/> <source>no error occurred</source> <translation>kein Fehler</translation> </message> <message> - <location line="+1"/> <source>disabled feature used</source> <translation>deaktivierte Eigenschaft wurde benutzt</translation> </message> <message> - <location line="+1"/> <source>bad char class syntax</source> <translation>falsche Syntax für Zeichenklasse</translation> </message> <message> - <location line="+1"/> <source>bad lookahead syntax</source> <translation>falsche Syntax für Lookahead</translation> </message> <message> - <location line="+1"/> <source>bad repetition syntax</source> <translation>falsche Syntax für Wiederholungen</translation> </message> <message> - <location line="+1"/> <source>invalid octal value</source> <translation>ungültiger Oktal-Wert</translation> </message> <message> - <location line="+1"/> <source>missing left delim</source> <translation>fehlende linke Begrenzung</translation> </message> <message> - <location line="+1"/> <source>unexpected end</source> <translation>unerwartetes Ende</translation> </message> <message> - <location line="+1"/> <source>met internal limit</source> <translation>internes Limit erreicht</translation> </message> <message> - <location line="+1"/> <source>invalid interval</source> <translation>ungültiges Intervall</translation> </message> <message> - <location line="+1"/> <source>invalid category</source> <translation>ungültige Kategorie</translation> </message> @@ -6232,22 +4937,18 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLite2Driver</name> <message> - <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+399"/> <source>Error opening database</source> <translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation> </message> <message> - <location line="+41"/> <source>Unable to begin transaction</source> <translation>Es konnte keine Transaktion gestartet werden</translation> </message> <message> - <location line="+17"/> <source>Unable to commit transaction</source> <translation>Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+17"/> <source>Unable to rollback transaction</source> <translation>Die Transaktion kann nicht rückgängig gemacht werden</translation> </message> @@ -6255,12 +4956,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLite2Result</name> <message> - <location line="-326"/> <source>Unable to fetch results</source> <translation>Das Ergebnis konnte nicht abgeholt werden</translation> </message> <message> - <location line="+150"/> <source>Unable to execute statement</source> <translation>Der Befehl konnte nicht ausgeführt werden</translation> </message> @@ -6268,27 +4967,22 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteDriver</name> <message> - <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+539"/> <source>Error opening database</source> <translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation> </message> <message> - <location line="+11"/> <source>Error closing database</source> <translation>Die Datenbankverbindung konnte nicht geschlossen werden</translation> </message> <message> - <location line="+20"/> <source>Unable to begin transaction</source> <translation>Es konnte keine Transaktion gestartet werden</translation> </message> <message> - <location line="+15"/> <source>Unable to commit transaction</source> <translation>Die Transaktion konnte nicht durchgeführt werden (Operation 'commit' fehlgeschlagen)</translation> </message> <message> - <location line="+15"/> <source>Unable to rollback transaction</source> <translation>Die Transaktion konnte nicht rückgängig gemacht werden (Operation 'rollback' fehlgeschlagen)</translation> </message> @@ -6296,34 +4990,26 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteResult</name> <message> - <location line="-396"/> - <location line="+63"/> - <location line="+8"/> <source>Unable to fetch row</source> <translation>Der Datensatz konnte nicht abgeholt werden</translation> </message> <message> - <location line="+59"/> <source>Unable to execute statement</source> <translation>Der Befehl konnte nicht ausgeführt werden</translation> </message> <message> - <location line="+20"/> <source>Unable to reset statement</source> <translation>Der Befehl konnte nicht zurückgesetzt werden</translation> </message> <message> - <location line="+45"/> <source>Unable to bind parameters</source> <translation>Die Parameter konnte nicht gebunden werden</translation> </message> <message> - <location line="+7"/> <source>Parameter count mismatch</source> <translation>Die Anzahl der Parameter ist falsch</translation> </message> <message> - <location line="-201"/> <source>No query</source> <translation>Kein Abfrage</translation> </message> @@ -6331,32 +5017,26 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptBreakpointsModel</name> <message> - <location filename="../src/scripttools/debugging/qscriptbreakpointsmodel.cpp" line="+455"/> <source>ID</source> <translation>ID</translation> </message> <message> - <location line="+2"/> <source>Location</source> <translation>Stelle</translation> </message> <message> - <location line="+2"/> <source>Condition</source> <translation>Bedingung</translation> </message> <message> - <location line="+2"/> <source>Ignore-count</source> <translation>Auslösen nach</translation> </message> <message> - <location line="+2"/> <source>Single-shot</source> <translation>Einmal auslösen</translation> </message> <message> - <location line="+2"/> <source>Hit-count</source> <translation>Ausgelöst</translation> </message> @@ -6364,12 +5044,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptBreakpointsWidget</name> <message> - <location filename="../src/scripttools/debugging/qscriptbreakpointswidget.cpp" line="+298"/> <source>New</source> <translation>Neu</translation> </message> <message> - <location line="+6"/> <source>Delete</source> <translation>Löschen</translation> </message> @@ -6377,143 +5055,114 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptDebugger</name> <message> - <location filename="../src/scripttools/debugging/qscriptdebugger.cpp" line="+885"/> - <location line="+1013"/> <source>Go to Line</source> <translation>Gehe zu Zeile</translation> </message> <message> - <location line="-1012"/> <source>Line:</source> <translation>Zeile:</translation> </message> <message> - <location line="+791"/> <source>Interrupt</source> <translation>Unterbrechen</translation> </message> <message> - <location line="+2"/> <source>Shift+F5</source> <translation>Shift+F5</translation> </message> <message> - <location line="+15"/> <source>Continue</source> <translation>Weiter</translation> </message> <message> - <location line="+2"/> <source>F5</source> <translation>F5</translation> </message> <message> - <location line="+15"/> <source>Step Into</source> <translation>Einzelschritt herein</translation> </message> <message> - <location line="+2"/> <source>F11</source> <translation>F11</translation> </message> <message> - <location line="+15"/> <source>Step Over</source> <translation>Einzelschritt über</translation> </message> <message> - <location line="+2"/> <source>F10</source> <translation>F10</translation> </message> <message> - <location line="+15"/> <source>Step Out</source> <translation>Einzelschritt heraus</translation> </message> <message> - <location line="+2"/> <source>Shift+F11</source> <translation>Shift+F11</translation> </message> <message> - <location line="+15"/> <source>Run to Cursor</source> <translation>Bis Cursor ausführen</translation> </message> <message> - <location line="+2"/> <source>Ctrl+F10</source> <translation>Ctrl+F10</translation> </message> <message> - <location line="+16"/> <source>Run to New Script</source> <translation>Bis zu neuem Skript ausführen</translation> </message> <message> - <location line="+15"/> <source>Toggle Breakpoint</source> <translation>Haltepunkt umschalten</translation> </message> <message> - <location line="+1"/> <source>F9</source> <translation>F9</translation> </message> <message> - <location line="+14"/> <source>Clear Debug Output</source> <translation>Debug-Ausgabe löschen</translation> </message> <message> - <location line="+13"/> <source>Clear Error Log</source> <translation>Fehlerausgabe löschen</translation> </message> <message> - <location line="+13"/> <source>Clear Console</source> <translation>Konsole löschen</translation> </message> <message> - <location line="+14"/> <source>&Find in Script...</source> <translation>&Suche im Skript...</translation> </message> <message> - <location line="+1"/> <source>Ctrl+F</source> <translation>Ctrl+F</translation> </message> <message> - <location line="+17"/> <source>Find &Next</source> <translation>&Nächste Fundstelle</translation> </message> <message> - <location line="+2"/> <source>F3</source> <translation>F3</translation> </message> <message> - <location line="+13"/> <source>Find &Previous</source> <translation>Vorhergehende Fundstelle</translation> </message> <message> - <location line="+2"/> <source>Shift+F3</source> <translation>Shift+F3</translation> </message> <message> - <location line="+14"/> <source>Ctrl+G</source> <translation>Ctrl+G</translation> </message> <message> - <location line="+11"/> <source>Debug</source> <translation>Debuggen</translation> </message> @@ -6521,32 +5170,26 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptDebuggerCodeFinderWidget</name> <message> - <location filename="../src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp" line="+141"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="+13"/> <source>Previous</source> <translation>Vorige</translation> </message> <message> - <location line="+7"/> <source>Next</source> <translation>Nächste</translation> </message> <message> - <location line="+5"/> <source>Case Sensitive</source> <translation>Groß/Kleinschreibung beachten</translation> </message> <message> - <location line="+3"/> <source>Whole words</source> <translation>Ganze Worte</translation> </message> <message> - <location line="+9"/> <source><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped</source> <translation><img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Die Suche hat das Ende erreicht</translation> </message> @@ -6554,12 +5197,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptDebuggerLocalsModel</name> <message> - <location filename="../src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp" line="+897"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+2"/> <source>Value</source> <translation>Wert</translation> </message> @@ -6567,17 +5208,14 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptDebuggerStackModel</name> <message> - <location filename="../src/scripttools/debugging/qscriptdebuggerstackmodel.cpp" line="+161"/> <source>Level</source> <translation>Ebene</translation> </message> <message> - <location line="+2"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location line="+2"/> <source>Location</source> <translation>Stelle</translation> </message> @@ -6585,22 +5223,18 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptEdit</name> <message> - <location filename="../src/scripttools/debugging/qscriptedit.cpp" line="+411"/> <source>Toggle Breakpoint</source> <translation>Haltepunkt umschalten</translation> </message> <message> - <location line="+2"/> <source>Disable Breakpoint</source> <translation>Haltepunkt deaktivieren</translation> </message> <message> - <location line="+1"/> <source>Enable Breakpoint</source> <translation>Haltepunkt aktivieren</translation> </message> <message> - <location line="+4"/> <source>Breakpoint Condition:</source> <translation>Bedingung:</translation> </message> @@ -6608,52 +5242,42 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptEngineDebugger</name> <message> - <location filename="../src/scripttools/debugging/qscriptenginedebugger.cpp" line="+523"/> <source>Loaded Scripts</source> <translation>Geladene Skripte</translation> </message> <message> - <location line="+6"/> <source>Breakpoints</source> <translation>Haltepunkte</translation> </message> <message> - <location line="+6"/> <source>Stack</source> <translation>Stapel</translation> </message> <message> - <location line="+6"/> <source>Locals</source> <translation>Lokale Variablen</translation> </message> <message> - <location line="+6"/> <source>Console</source> <translation>Konsole</translation> </message> <message> - <location line="+6"/> <source>Debug Output</source> <translation>Debug-Ausgabe</translation> </message> <message> - <location line="+6"/> <source>Error Log</source> <translation>Fehlerausgabe</translation> </message> <message> - <location line="+12"/> <source>Search</source> <translation>Suche</translation> </message> <message> - <location line="+7"/> <source>View</source> <translation>Ansicht</translation> </message> <message> - <location line="+18"/> <source>Qt Script Debugger</source> <translation>Qt Script Debugger</translation> </message> @@ -6661,7 +5285,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScriptNewBreakpointWidget</name> <message> - <location filename="../src/scripttools/debugging/qscriptbreakpointswidget.cpp" line="-223"/> <source>Close</source> <translation>Schließen</translation> </message> @@ -6669,84 +5292,66 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QScrollBar</name> <message> - <location filename="../src/gui/widgets/qscrollbar.cpp" line="+454"/> <source>Scroll here</source> <translation>Hierher scrollen</translation> </message> <message> - <location line="+2"/> <source>Left edge</source> <translation>Linker Rand</translation> </message> <message> - <location line="+0"/> <source>Top</source> <translation>Anfang</translation> </message> <message> - <location line="+1"/> <source>Right edge</source> <translation>Rechter Rand</translation> </message> <message> - <location line="+0"/> <source>Bottom</source> <translation>Ende</translation> </message> <message> - <location line="+2"/> <source>Page left</source> <translation>Eine Seite nach links</translation> </message> <message> - <location line="+0"/> - <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+143"/> <source>Page up</source> <translation>Eine Seite nach oben</translation> </message> <message> - <location line="+1"/> <source>Page right</source> <translation>Eine Seite nach rechts</translation> </message> <message> - <location line="+0"/> - <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+4"/> <source>Page down</source> <translation>Eine Seite nach unten</translation> </message> <message> - <location line="+2"/> <source>Scroll left</source> <translation>Nach links scrollen</translation> </message> <message> - <location line="+0"/> <source>Scroll up</source> <translation>Nach oben scrollen</translation> </message> <message> - <location line="+1"/> <source>Scroll right</source> <translation>Nach rechts scrollen</translation> </message> <message> - <location line="+0"/> <source>Scroll down</source> <translation>Nach unten scrollen</translation> </message> <message> - <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-6"/> <source>Line up</source> <translation>Ausrichten</translation> </message> <message> - <location line="+4"/> <source>Position</source> <translation>Position</translation> </message> <message> - <location line="+4"/> <source>Line down</source> <translation>Eine Zeile nach unten</translation> </message> @@ -6754,111 +5359,78 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSharedMemory</name> <message> - <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+304"/> <source>%1: create size is less then 0</source> <translation>%1: Die Größenangabe für die Erzeugung ist kleiner als Null</translation> </message> <message> - <location line="+168"/> - <location filename="../src/corelib/kernel/qsharedmemory_p.h" line="+155"/> <source>%1: unable to lock</source> <translation>%1: Sperrung fehlgeschlagen</translation> </message> <message> - <location line="+22"/> <source>%1: unable to unlock</source> <translation>%1: Die Sperrung konnte nicht aufgehoben werden</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+83"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+81"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/> <source>%1: permission denied</source> <translation>%1: Zugriff verweigert</translation> </message> <message> - <location line="-16"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+4"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-22"/> <source>%1: already exists</source> <translation>%1: existiert bereits</translation> </message> <message> - <location line="+4"/> <source>%1: doesn't exists</source> <translation>%1: existiert nicht</translation> </message> <message> - <location line="+8"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+10"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+18"/> <source>%1: out of resources</source> <translation>%1: Keine Ressourcen mehr verfügbar</translation> </message> <message> - <location line="+7"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+4"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+7"/> <source>%1: unknown error %2</source> <translation>%1: Unbekannter Fehler %2</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+21"/> <source>%1: key is empty</source> <translation>%1: Ungültige Schlüsselangabe (leer)</translation> </message> <message> - <location line="+15"/> <source>%1: ftok failed</source> <translation>%1: ftok-Aufruf schlug fehl</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+56"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+51"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+15"/> <source>%1: unable to make key</source> <translation>%1: Es kann kein Schlüssel erzeugt werden</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="-97"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-31"/> <source>%1: doesn't exist</source> <translation>%1: existiert nicht</translation> </message> <message> - <location line="+39"/> <source>%1: UNIX key file doesn't exist</source> <translation>%1: Die Unix-Schlüsseldatei existiert nicht</translation> </message> <message> - <location line="+78"/> <source>%1: system-imposed size restrictions</source> <translation>%1: Ein systembedingtes Limit der Größe wurde erreicht</translation> </message> <message> - <location line="+53"/> <source>%1: not attached</source> <translation>%1: nicht verbunden</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="-67"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+4"/> <source>%1: invalid size</source> <translation>%1: Ungültige Größe</translation> </message> <message> - <location line="+40"/> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+63"/> <source>%1: key error</source> <translation>%1: Fehlerhafter Schlüssel</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+32"/> <source>%1: size query failed</source> <translation>%1: Die Abfrage der Größe schlug fehl</translation> </message> <message> - <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="-271"/> <source>%1: unable to set key on lock</source> <translation>%1: Es kann kein Schlüssel für die Sperrung gesetzt werden</translation> </message> @@ -6866,1095 +5438,884 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QShortcut</name> <message> - <location filename="../src/gui/kernel/qkeysequence.cpp" line="+396"/> <source>Space</source> <extracomment>This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment> <translation>Leertaste</translation> </message> <message> - <location line="+1"/> <source>Esc</source> <translation>Esc</translation> </message> <message> - <location line="+1"/> <source>Tab</source> <translation>Tab</translation> </message> <message> - <location line="+1"/> <source>Backtab</source> <translation>Rück-Tab</translation> </message> <message> - <location line="+1"/> <source>Backspace</source> <translation>Rücktaste</translation> </message> <message> - <location line="+1"/> <source>Return</source> <translation>Return</translation> </message> <message> - <location line="+1"/> <source>Enter</source> <translation>Enter</translation> </message> <message> - <location line="+1"/> <source>Ins</source> <translation>Einfg</translation> </message> <message> - <location line="+1"/> <source>Del</source> <translation>Entf</translation> </message> <message> - <location line="+1"/> <source>Pause</source> <translation>Pause</translation> </message> <message> - <location line="+1"/> <source>Print</source> <translation>Druck</translation> </message> <message> - <location line="+1"/> <source>SysReq</source> <translation>SysReq</translation> </message> <message> - <location line="+1"/> <source>Home</source> <translation>Pos1</translation> </message> <message> - <location line="+1"/> <source>End</source> <translation>Ende</translation> </message> <message> - <location line="+1"/> <source>Left</source> <translation>Links</translation> </message> <message> - <location line="+1"/> <source>Up</source> <translation>Hoch</translation> </message> <message> - <location line="+1"/> <source>Right</source> <translation>Rechts</translation> </message> <message> - <location line="+1"/> <source>Down</source> <translation>Runter</translation> </message> <message> - <location line="+1"/> <source>PgUp</source> <translation>Bild aufwärts</translation> </message> <message> - <location line="+1"/> <source>PgDown</source> <translation>Bild abwärts</translation> </message> <message> - <location line="+1"/> <source>CapsLock</source> <translation>Feststelltaste</translation> </message> <message> - <location line="+1"/> <source>NumLock</source> <translation>Zahlen-Feststelltaste</translation> </message> <message> - <location line="+1"/> <source>ScrollLock</source> <translation>Rollen-Feststelltaste</translation> </message> <message> - <location line="+1"/> <source>Menu</source> <translation>Menü</translation> </message> <message> - <location line="+1"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location line="+5"/> <source>Back</source> <translation>Zurück</translation> </message> <message> - <location line="+1"/> <source>Forward</source> <translation>Vorwärts</translation> </message> <message> - <location line="+1"/> <source>Stop</source> <translation>Abbrechen</translation> </message> <message> - <location line="+1"/> <source>Refresh</source> <translation>Aktualisieren</translation> </message> <message> - <location line="+1"/> <source>Volume Down</source> <translation>Lautstärke -</translation> </message> <message> - <location line="+1"/> <source>Volume Mute</source> <translation>Ton aus</translation> </message> <message> - <location line="+1"/> <source>Volume Up</source> <translation>Lautstärke +</translation> </message> <message> - <location line="+1"/> <source>Bass Boost</source> <translation>Bass-Boost</translation> </message> <message> - <location line="+1"/> <source>Bass Up</source> <translation>Bass +</translation> </message> <message> - <location line="+1"/> <source>Bass Down</source> <translation>Bass -</translation> </message> <message> - <location line="+1"/> <source>Treble Up</source> <translation>Höhen +</translation> </message> <message> - <location line="+1"/> <source>Treble Down</source> <translation>Höhen -</translation> </message> <message> - <location line="+1"/> <source>Media Play</source> <translation>Wiedergabe</translation> </message> <message> - <location line="+1"/> <source>Media Stop</source> <translation>Stopp</translation> </message> <message> - <location line="+1"/> <source>Media Previous</source> <translation>Vorheriger</translation> </message> <message> - <location line="+1"/> <source>Media Next</source> <translation>Nächster</translation> </message> <message> - <location line="+1"/> <source>Media Record</source> <translation>Aufzeichnen</translation> </message> <message> - <location line="+2"/> + <source>Media Pause</source> + <extracomment>Media player pause button</extracomment> + <translation>Pause</translation> + </message> + <message> + <source>Toggle Media Play/Pause</source> + <extracomment>Media player button to toggle between playing and paused</extracomment> + <translation>Pause</translation> + </message> + <message> <source>Favorites</source> <translation>Favoriten</translation> </message> <message> - <location line="+1"/> <source>Search</source> <translation>Suchen</translation> </message> <message> - <location line="+1"/> <source>Standby</source> <translation>Standby</translation> </message> <message> - <location line="+1"/> <source>Open URL</source> <translation>URL öffnen</translation> </message> <message> - <location line="+1"/> <source>Launch Mail</source> <translation>Mail starten</translation> </message> <message> - <location line="+1"/> <source>Launch Media</source> <translation>Medienspieler starten</translation> </message> <message> - <location line="+1"/> <source>Launch (0)</source> <translation>(0) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (1)</source> <translation>(1) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (2)</source> <translation>(2) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (3)</source> <translation>(3) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (4)</source> <translation>(4) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (5)</source> <translation>(5) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (6)</source> <translation>(6) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (7)</source> <translation>(7) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (8)</source> <translation>(8) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (9)</source> <translation>(9) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (A)</source> <translation>(A) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (B)</source> <translation>(B) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (C)</source> <translation>(C) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (D)</source> <translation>(D) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (E)</source> <translation>(E) starten</translation> </message> <message> - <location line="+1"/> <source>Launch (F)</source> <translation>(F) starten</translation> </message> <message> - <location line="+1"/> <source>Monitor Brightness Up</source> <translation>Monitor heller</translation> </message> <message> - <location line="+1"/> <source>Monitor Brightness Down</source> <translation>Monitor dunkler</translation> </message> <message> - <location line="+1"/> <source>Keyboard Light On/Off</source> <translation>Tastaturbeleuchtung Ein/Aus</translation> </message> <message> - <location line="+1"/> <source>Keyboard Brightness Up</source> <translation>Tastaturbeleuchtung heller</translation> </message> <message> - <location line="+1"/> <source>Keyboard Brightness Down</source> <translation>Tastaturbeleuchtung dunkler</translation> </message> <message> - <location line="+1"/> <source>Power Off</source> <translation>Ausschalten</translation> </message> <message> - <location line="+1"/> <source>Wake Up</source> <translation>Aufwecken</translation> </message> <message> - <location line="+1"/> <source>Eject</source> <translation>Auswerfen</translation> </message> <message> - <location line="+1"/> <source>Screensaver</source> <translation>Bildschirmschoner</translation> </message> <message> - <location line="+1"/> <source>WWW</source> <translation>Internet</translation> </message> <message> - <location line="+1"/> <source>Sleep</source> <translation>Schlafmodus</translation> </message> <message> - <location line="+1"/> <source>LightBulb</source> <translation>Beleuchtung</translation> </message> <message> - <location line="+1"/> <source>Shop</source> <translation>Shop</translation> </message> <message> - <location line="+1"/> <source>History</source> <translation>Verlauf</translation> </message> <message> - <location line="+1"/> <source>Add Favorite</source> <translation>Lesezeichen hinzufügen</translation> </message> <message> - <location line="+1"/> <source>Hot Links</source> <translation>Empfohlene Verweise</translation> </message> <message> - <location line="+1"/> <source>Adjust Brightness</source> <translation>Helligkeit einstellen</translation> </message> <message> - <location line="+1"/> <source>Finance</source> <translation>Finanzen</translation> </message> <message> - <location line="+1"/> <source>Community</source> <translation>Community</translation> </message> <message> - <location line="+1"/> <source>Audio Rewind</source> <translation>Audio rückspulen</translation> </message> <message> - <location line="+1"/> <source>Back Forward</source> <translation>Hinterstes nach vorn</translation> </message> <message> - <location line="+1"/> <source>Application Left</source> <translation>Anwendung links</translation> </message> <message> - <location line="+1"/> <source>Application Right</source> <translation>Anwendung rechts</translation> </message> <message> - <location line="+1"/> <source>Book</source> <translation>Buch</translation> </message> <message> - <location line="+1"/> <source>CD</source> <translation>CD</translation> </message> <message> - <location line="+1"/> <source>Calculator</source> <translation>Rechner</translation> </message> <message> - <location line="+1"/> <source>Clear</source> <translation>Löschen</translation> </message> <message> - <location line="+1"/> <source>Clear Grab</source> <translation>Zugriff löschen</translation> </message> <message> - <location line="+1"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="+1"/> <source>Copy</source> <translation>Kopieren</translation> </message> <message> - <location line="+1"/> <source>Cut</source> <translation>Ausschneiden</translation> </message> <message> - <location line="+1"/> <source>Display</source> <translation>Anzeigen</translation> </message> <message> - <location line="+1"/> <source>DOS</source> <translation>DOS</translation> </message> <message> - <location line="+1"/> <source>Documents</source> <translation>Dokumente</translation> </message> <message> - <location line="+1"/> <source>Spreadsheet</source> <translation>Spreadsheet</translation> </message> <message> - <location line="+1"/> <source>Browser</source> <translation>Browser</translation> </message> <message> - <location line="+1"/> <source>Game</source> <translation>Spiel</translation> </message> <message> - <location line="+1"/> <source>Go</source> <translation>Los</translation> </message> <message> - <location line="+1"/> <source>iTouch</source> <translation>iTouch</translation> </message> <message> - <location line="+1"/> <source>Logoff</source> <translation>Logoff</translation> </message> <message> - <location line="+1"/> <source>Market</source> <translation>Markt</translation> </message> <message> - <location line="+1"/> <source>Meeting</source> <translation>Versammlung</translation> </message> <message> - <location line="+1"/> <source>Keyboard Menu</source> <translation>Tastaturmenü</translation> </message> <message> - <location line="+1"/> <source>Menu PB</source> <translation>Menü PB</translation> </message> <message> - <location line="+1"/> <source>My Sites</source> <translation>Meine Orte</translation> </message> <message> - <location line="+1"/> <source>News</source> <translation>Nachrichten</translation> </message> <message> - <location line="+1"/> <source>Home Office</source> <translation>Home Office</translation> </message> <message> - <location line="+1"/> <source>Option</source> <translation>Option</translation> </message> <message> - <location line="+1"/> <source>Paste</source> <translation>Einfügen</translation> </message> <message> - <location line="+1"/> <source>Phone</source> <translation>Telefon</translation> </message> <message> - <location line="+1"/> <source>Reply</source> <translation>Antworten</translation> </message> <message> - <location line="+1"/> <source>Reload</source> <translation>Neu laden</translation> </message> <message> - <location line="+1"/> <source>Rotate Windows</source> <translation>Fenster rotieren</translation> </message> <message> - <location line="+1"/> <source>Rotation PB</source> <translation>Rotation PB</translation> </message> <message> - <location line="+1"/> <source>Rotation KB</source> <translation>Rotation KB</translation> </message> <message> - <location line="+1"/> <source>Save</source> <translation>Speichern</translation> </message> <message> - <location line="+1"/> <source>Send</source> <translation>Senden</translation> </message> <message> - <location line="+1"/> <source>Spellchecker</source> <translation>Rechtschreibprüfung</translation> </message> <message> - <location line="+1"/> <source>Split Screen</source> <translation>Bildschirm teilen</translation> </message> <message> - <location line="+1"/> <source>Support</source> <translation>Hilfe</translation> </message> <message> - <location line="+1"/> <source>Task Panel</source> <translation>Task-Leiste</translation> </message> <message> - <location line="+1"/> <source>Terminal</source> <translation>Terminal</translation> </message> <message> - <location line="+1"/> <source>Tools</source> <translation>Werkzeuge</translation> </message> <message> - <location line="+1"/> <source>Travel</source> <translation>Reise</translation> </message> <message> - <location line="+1"/> <source>Video</source> <translation>Video</translation> </message> <message> - <location line="+1"/> <source>Word Processor</source> <translation>Textverarbeitung</translation> </message> <message> - <location line="+1"/> <source>XFer</source> <translation>XFer</translation> </message> <message> - <location line="+1"/> <source>Zoom In</source> <translation>Vergrößern</translation> </message> <message> - <location line="+1"/> <source>Zoom Out</source> <translation>Verkleinern</translation> </message> <message> - <location line="+1"/> <source>Away</source> <translation>Abwesend</translation> </message> <message> - <location line="+1"/> <source>Messenger</source> <translation>Messenger</translation> </message> <message> - <location line="+1"/> <source>WebCam</source> <translation>WebCam</translation> </message> <message> - <location line="+1"/> <source>Mail Forward</source> <translation>Weiterleitung</translation> </message> <message> - <location line="+1"/> <source>Pictures</source> <translation>Bilder</translation> </message> <message> - <location line="+1"/> <source>Music</source> <translation>Musik</translation> </message> <message> - <location line="+1"/> <source>Battery</source> <translation>Batterie</translation> </message> <message> - <location line="+1"/> <source>Bluetooth</source> <translation>Bluetooth</translation> </message> <message> - <location line="+1"/> <source>Wireless</source> <translation>Drahtlos</translation> </message> <message> - <location line="+1"/> <source>Ultra Wide Band</source> <translation>Ultra Wide Band</translation> </message> <message> - <location line="+1"/> <source>Audio Forward</source> <translation>Audio vorspulen</translation> </message> <message> - <location line="+1"/> <source>Audio Repeat</source> <translation>Audio wiederholen</translation> </message> <message> - <location line="+1"/> <source>Audio Random Play</source> <translation>Audio zufällige Auswahl spielen</translation> </message> <message> - <location line="+1"/> <source>Subtitle</source> <translation>Untertitel</translation> </message> <message> - <location line="+1"/> <source>Audio Cycle Track</source> <translation>Audiospur wechseln</translation> </message> <message> - <location line="+1"/> <source>Time</source> <translation>Zeit</translation> </message> <message> - <location line="+2"/> <source>View</source> <translation>Ansicht</translation> </message> <message> - <location line="+1"/> <source>Top Menu</source> <translation>Hauptmenü</translation> </message> <message> - <location line="+1"/> <source>Suspend</source> <translation>Pause</translation> </message> <message> - <location line="+1"/> <source>Hibernate</source> <translation>Hibernate</translation> </message> <message> - <location line="+4"/> <source>Print Screen</source> <translation>Bildschirm drucken</translation> </message> <message> - <location line="+1"/> <source>Page Up</source> <translation>Bild aufwärts</translation> </message> <message> - <location line="+1"/> <source>Page Down</source> <translation>Bild abwärts</translation> </message> <message> - <location line="+1"/> <source>Caps Lock</source> <translation>Feststelltaste</translation> </message> <message> - <location line="+1"/> <source>Num Lock</source> <translation>Zahlen-Feststelltaste</translation> </message> <message> - <location line="+1"/> <source>Number Lock</source> <translation>Zahlen-Feststelltaste</translation> </message> <message> - <location line="+1"/> <source>Scroll Lock</source> <translation>Rollen-Feststelltaste</translation> </message> <message> - <location line="+1"/> <source>Insert</source> <translation>Einfügen</translation> </message> <message> - <location line="+1"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+1"/> <source>Escape</source> <translation>Escape</translation> </message> <message> - <location line="+1"/> <source>System Request</source> <translation>System Request</translation> </message> <message> - <location line="-18"/> - <location line="+22"/> <source>Select</source> <translation>Auswählen</translation> </message> <message> - <location line="+1"/> <source>Yes</source> <translation>Ja</translation> </message> <message> - <location line="+1"/> <source>No</source> <translation>Nein</translation> </message> <message> - <location line="+4"/> <source>Context1</source> <translation>Kontext1</translation> </message> <message> - <location line="+1"/> <source>Context2</source> <translation>Kontext2</translation> </message> <message> - <location line="+1"/> <source>Context3</source> <translation>Kontext3</translation> </message> <message> - <location line="+1"/> <source>Context4</source> <translation>Kontext4</translation> </message> <message> - <location line="+2"/> <source>Call</source> <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment> <translation>Anruf</translation> </message> <message> - <location line="+2"/> <source>Hangup</source> <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment> <translation>Auflegen</translation> </message> <message> - <location line="+2"/> <source>Toggle Call/Hangup</source> <extracomment>Button that will hang up if we're in call, or make a call if we're not.</extracomment> <translation>Anrufen/Aufhängen</translation> </message> <message> - <location line="+1"/> <source>Flip</source> <translation>Umdrehen</translation> </message> <message> - <location line="+2"/> <source>Voice Dial</source> <extracomment>Button to trigger voice dialling</extracomment> <translation>Sprachwahl</translation> </message> <message> - <location line="+2"/> <source>Last Number Redial</source> <extracomment>Button to redial the last number called</extracomment> <translation>Wahlwiederholung</translation> </message> <message> - <location line="+2"/> <source>Camera Shutter</source> <extracomment>Button to trigger the camera shutter (take a picture)</extracomment> <translation>Auslöser</translation> </message> <message> - <location line="+2"/> <source>Camera Focus</source> <extracomment>Button to focus the camera</extracomment> <translation>Scharfstellen</translation> </message> <message> - <location line="+4"/> <source>Kanji</source> <translation>Kanji</translation> </message> <message> - <location line="+1"/> <source>Muhenkan</source> <translation>Muhenkan</translation> </message> <message> - <location line="+1"/> <source>Henkan</source> <translation>Henkan</translation> </message> <message> - <location line="+1"/> <source>Romaji</source> <translation>Romaji</translation> </message> <message> - <location line="+1"/> <source>Hiragana</source> <translation>Hiragana</translation> </message> <message> - <location line="+1"/> <source>Katakana</source> <translation>Katakana</translation> </message> <message> - <location line="+1"/> <source>Hiragana Katakana</source> <translation>Hiragana Katakana</translation> </message> <message> - <location line="+1"/> <source>Zenkaku</source> <translation>Zenkaku</translation> </message> <message> - <location line="+1"/> <source>Hankaku</source> <translation>Hankaku</translation> </message> <message> - <location line="+1"/> <source>Zenkaku Hankaku</source> <translation>Zenkaku Hankaku</translation> </message> <message> - <location line="+1"/> <source>Touroku</source> <translation>Touroku</translation> </message> <message> - <location line="+1"/> <source>Massyo</source> <translation>Massyo</translation> </message> <message> - <location line="+1"/> <source>Kana Lock</source> <translation>Kana Lock</translation> </message> <message> - <location line="+1"/> <source>Kana Shift</source> <translation>Kana Shift</translation> </message> <message> - <location line="+1"/> <source>Eisu Shift</source> <translation>Eisu Shift</translation> </message> <message> - <location line="+1"/> <source>Eisu toggle</source> <translation>Eisu toggle</translation> </message> <message> - <location line="+1"/> <source>Code input</source> <translation>Code-Eingabe</translation> </message> <message> - <location line="+1"/> <source>Multiple Candidate</source> <translation>Mehrere Vorschläge</translation> </message> <message> - <location line="+1"/> <source>Previous Candidate</source> <translation>Vorangegangener Vorschlag</translation> </message> <message> - <location line="+4"/> <source>Hangul</source> <translation>Hangul</translation> </message> <message> - <location line="+1"/> <source>Hangul Start</source> <translation>Hangul Anfang</translation> </message> <message> - <location line="+1"/> <source>Hangul End</source> <translation>Hangul Ende</translation> </message> <message> - <location line="+1"/> <source>Hangul Hanja</source> <translation>Hangul Hanja</translation> </message> <message> - <location line="+1"/> <source>Hangul Jamo</source> <translation>Hangul Jamo</translation> </message> <message> - <location line="+1"/> <source>Hangul Romaja</source> <translation>Hangul Romaja</translation> </message> <message> - <location line="+1"/> <source>Hangul Jeonja</source> <translation>Hangul Jeonja</translation> </message> <message> - <location line="+1"/> <source>Hangul Banja</source> <translation>Hangul Banja</translation> </message> <message> - <location line="+1"/> <source>Hangul PreHanja</source> <translation>Hangul PreHanja</translation> </message> <message> - <location line="+1"/> <source>Hangul PostHanja</source> <translation>Hangul PostHanja</translation> </message> <message> - <location line="+1"/> <source>Hangul Special</source> <translation>Hangul Special</translation> </message> <message> - <location line="+602"/> - <location line="+135"/> <source>Ctrl</source> <translation>Strg</translation> </message> <message> - <location line="-134"/> - <location line="+138"/> <source>Shift</source> <translation>Umschalt</translation> </message> <message> - <location line="-137"/> - <location line="+135"/> <source>Alt</source> <translation>Alt</translation> </message> <message> - <location line="-134"/> - <location line="+130"/> <source>Meta</source> <translation>Meta</translation> </message> <message> - <location line="-40"/> <source>+</source> <translation>+</translation> </message> <message> - <location line="+61"/> <source>F%1</source> <translation>F%1</translation> </message> <message> - <location line="-934"/> <source>Home Page</source> <translation>Startseite</translation> </message> @@ -7962,27 +6323,22 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSlider</name> <message> - <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="+151"/> <source>Page left</source> <translation>Eine Seite nach links</translation> </message> <message> - <location line="+0"/> <source>Page up</source> <translation>Eine Seite nach oben</translation> </message> <message> - <location line="+2"/> <source>Position</source> <translation>Position</translation> </message> <message> - <location line="+3"/> <source>Page right</source> <translation>Eine Seite nach rechts</translation> </message> <message> - <location line="+0"/> <source>Page down</source> <translation>Eine Seite nach unten</translation> </message> @@ -7990,72 +6346,58 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSocks5SocketEngine</name> <message> - <location filename="../src/network/socket/qsocks5socketengine.cpp" line="-67"/> <source>Connection to proxy refused</source> <translation>Der Proxy-Server hat den Aufbau einer Verbindung verweigert</translation> </message> <message> - <location line="+4"/> <source>Connection to proxy closed prematurely</source> <translation>Der Proxy-Server hat die Verbindung vorzeitig beendet</translation> </message> <message> - <location line="+4"/> <source>Proxy host not found</source> <translation>Der Proxy-Server konnte nicht gefunden werden</translation> </message> <message> - <location line="+5"/> <source>Connection to proxy timed out</source> <translation>Bei der Verbindung mit dem Proxy-Server wurde ein Zeitlimit überschritten</translation> </message> <message> - <location line="+17"/> <source>Proxy authentication failed</source> <translation>Die Authentifizierung beim Proxy-Server schlug fehl</translation> </message> <message> - <location line="+1"/> <source>Proxy authentication failed: %1</source> <translation>Die Authentifizierung beim Proxy-Server schlug fehl: %1</translation> </message> <message> - <location line="+9"/> <source>SOCKS version 5 protocol error</source> <translation>Protokoll-Fehler (SOCKS version 5)</translation> </message> <message> - <location line="+19"/> <source>General SOCKSv5 server failure</source> <translation>Allgemeiner Fehler bei der Kommunikation mit dem SOCKSv5-Server</translation> </message> <message> - <location line="+4"/> <source>Connection not allowed by SOCKSv5 server</source> <translation>Der SOCKSv5-Server hat die Verbindung verweigert</translation> </message> <message> - <location line="+16"/> <source>TTL expired</source> <translation>TTL verstrichen</translation> </message> <message> - <location line="+4"/> <source>SOCKSv5 command not supported</source> <translation>Dieses SOCKSv5-Kommando wird nicht unterstützt</translation> </message> <message> - <location line="+4"/> <source>Address type not supported</source> <translation>Dieser Adresstyp wird nicht unterstützt</translation> </message> <message> - <location line="+5"/> <source>Unknown SOCKSv5 proxy error code 0x%1</source> <translation>Unbekannten Fehlercode vom SOCKSv5-Proxy-Server erhalten: 0x%1</translation> </message> <message> - <location line="+689"/> <source>Network operation timed out</source> <translation>Das Zeitlimit für die Operation wurde überschritten</translation> </message> @@ -8063,32 +6405,26 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSoftKeyManager</name> <message> - <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+63"/> <source>Ok</source> <translation>Ok</translation> </message> <message> - <location line="+3"/> <source>Select</source> <translation>Auswählen</translation> </message> <message> - <location line="+3"/> <source>Done</source> <translation>Fertig</translation> </message> <message> - <location line="+3"/> <source>Options</source> <translation>Optionen</translation> </message> <message> - <location line="+3"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+321"/> <source>Exit</source> <translation>Beenden</translation> </message> @@ -8096,12 +6432,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSpinBox</name> <message> - <location filename="../src/plugins/accessible/widgets/rangecontrols.cpp" line="-574"/> <source>More</source> <translation>Mehr</translation> </message> <message> - <location line="+2"/> <source>Less</source> <translation>Weniger</translation> </message> @@ -8109,56 +6443,42 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSql</name> <message> - <location filename="../src/qt3support/sql/q3sqlmanager_p.cpp" line="+890"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+1"/> <source>Delete this record?</source> <translation>Diesen Datensatz löschen?</translation> </message> <message> - <location line="+1"/> - <location line="+16"/> - <location line="+36"/> <source>Yes</source> <translation>Ja</translation> </message> <message> - <location line="-51"/> - <location line="+16"/> - <location line="+36"/> <source>No</source> <translation>Nein</translation> </message> <message> - <location line="-44"/> <source>Insert</source> <translation>Einfügen</translation> </message> <message> - <location line="+2"/> <source>Update</source> <translation>Aktualisieren</translation> </message> <message> - <location line="+4"/> <source>Save edits?</source> <translation>Änderungen speichern?</translation> </message> <message> - <location line="+3"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location line="+32"/> <source>Confirm</source> <translation>Bestätigen</translation> </message> <message> - <location line="+1"/> <source>Cancel your edits?</source> <translation>Änderungen verwerfen?</translation> </message> @@ -8166,177 +6486,142 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSslSocket</name> <message> - <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+550"/> <source>Unable to write data: %1</source> <translation>Die Daten konnten nicht geschrieben werden: %1</translation> </message> <message> - <location line="+63"/> <source>Unable to decrypt data: %1</source> <translation>Die Daten konnten nicht entschlüsselt werden: %1</translation> </message> <message> - <location line="+76"/> <source>Error while reading: %1</source> <translation>Beim Lesen ist ein Fehler aufgetreten: %1</translation> </message> <message> - <location line="+96"/> <source>Error during SSL handshake: %1</source> <translation>Im Ablauf des SSL-Protokolls ist ein Fehler aufgetreten: %1</translation> </message> <message> - <location line="-524"/> <source>Error creating SSL context (%1)</source> <translation>Es konnte keine SSL-Kontextstruktur erzeugt werden (%1)</translation> </message> <message> - <location line="+25"/> <source>Invalid or empty cipher list (%1)</source> <translation>Ungültige oder leere Schlüsselliste (%1)</translation> </message> <message> - <location line="+45"/> <source>Private key does not certify public key, %1</source> <translation>Der private Schlüssel passt nicht zum öffentlichen Schlüssel, %1</translation> </message> <message> - <location line="+20"/> <source>Error creating SSL session, %1</source> <translation>Es konnte keine SSL-Sitzung erzeugt werden, %1</translation> </message> <message> - <location line="+15"/> <source>Error creating SSL session: %1</source> <translation>Es konnte keine SSL-Sitzung erzeugt werden: %1</translation> </message> <message> - <location line="-64"/> <source>Cannot provide a certificate with no key, %1</source> <translation>Ohne Schlüssel kann kein Zertifikat zur Verfügung gestellt werden, %1</translation> </message> <message> - <location line="+7"/> <source>Error loading local certificate, %1</source> <translation>Das lokale Zertifikat konnte nicht geladen werden, %1</translation> </message> <message> - <location line="+15"/> <source>Error loading private key, %1</source> <translation>Der private Schlüssel konnte nicht geladen werden, %1</translation> </message> <message> - <location filename="../src/network/ssl/qsslerror.cpp" line="+213"/> <source>No error</source> <translation>Kein Fehler</translation> </message> <message> - <location line="+3"/> <source>The issuer certificate could not be found</source> <translation>Das Zertifikat des Ausstellers konnte nicht gefunden werden</translation> </message> <message> - <location line="+3"/> <source>The certificate signature could not be decrypted</source> <translation>Die Signatur des Zertifikats konnte nicht entschlüsselt werden</translation> </message> <message> - <location line="+3"/> <source>The public key in the certificate could not be read</source> <translation>Der öffentliche Schlüssel konnte nicht gelesen werden</translation> </message> <message> - <location line="+3"/> <source>The signature of the certificate is invalid</source> <translation>Die Signatur des Zertifikats ist ungültig</translation> </message> <message> - <location line="+3"/> <source>The certificate is not yet valid</source> <translation>Das Zertifikat ist noch nicht gültig</translation> </message> <message> - <location line="+3"/> <source>The certificate has expired</source> <translation>Die Gültigkeit des Zertifikats ist abgelaufen</translation> </message> <message> - <location line="+3"/> <source>The certificate's notBefore field contains an invalid time</source> <translation>Das Feld 'notBefore' des Zertifikats enthält eine ungültige Zeit</translation> </message> <message> - <location line="+3"/> <source>The certificate's notAfter field contains an invalid time</source> <translation>Das Feld 'notAfter' des Zertifikats enthält eine ungültige Zeit</translation> </message> <message> - <location line="+3"/> <source>The certificate is self-signed, and untrusted</source> <translation>Das Zertifikat ist selbstsigniert und daher nicht vertrauenswürdig</translation> </message> <message> - <location line="+3"/> <source>The root certificate of the certificate chain is self-signed, and untrusted</source> <translation>Das oberste Zertifikat der Kette ist selbstsigniert und daher nicht vertrauenswürdig</translation> </message> <message> - <location line="+3"/> <source>The issuer certificate of a locally looked up certificate could not be found</source> <translation>Das Zertifikat des Ausstellers eines lokal gefundenen Zertifikats konnte nicht gefunden werden</translation> </message> <message> - <location line="+3"/> <source>No certificates could be verified</source> <translation>Keines der Zertifikate konnte verifiziert werden</translation> </message> <message> - <location line="+3"/> <source>One of the CA certificates is invalid</source> <translation>Eines der Zertifikate der Zertifizierungsstelle ist ungültig</translation> </message> <message> - <location line="+3"/> <source>The basicConstraints path length parameter has been exceeded</source> <translation>Die Länge des basicConstraints-Pfades wurde überschritten</translation> </message> <message> - <location line="+3"/> <source>The supplied certificate is unsuitable for this purpose</source> <translation>Das angegebene Zertifikat kann in diesem Fall nicht verwendet werden</translation> </message> <message> - <location line="+3"/> <source>The root CA certificate is not trusted for this purpose</source> <translation>Das oberste Zertifikat der Zertifizierungsstelle ist für diesen Fall nicht vertrauenswürdig</translation> </message> <message> - <location line="+3"/> <source>The root CA certificate is marked to reject the specified purpose</source> <translation>Das oberste Zertifikat der Zertifizierungsstelle weist diesen Fall auf Grund einer speziellen Kennzeichnung zurück</translation> </message> <message> - <location line="+3"/> <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> <translation>Das Zertifikat des betrachteten Ausstellers wurde zurückgewiesen da sein Subjektname nicht dem Namen des Austellers des aktuellen Zertifikats entspricht</translation> </message> <message> - <location line="+4"/> <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source> <translation>Das Zertifikat des betrachteten Ausstellers wurde zurückgewiesen da Ausstellername und Seriennummer vorhanden sind und nicht dem Bezeichner der Zertifizierungsstelle des aktuellen Zertifikats entsprechen</translation> </message> <message> - <location line="+5"/> <source>The peer did not present any certificate</source> <translation>Die Gegenstelle hat kein Zertifikat angegeben</translation> </message> <message> - <location line="+3"/> <source>The host name did not match any of the valid hosts for this certificate</source> <translation>Der Name des Hosts ist keiner aus der Liste der für dieses Zertifikat gültigen Hosts</translation> </message> <message> - <location line="+6"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> @@ -8344,22 +6629,18 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QStateMachine</name> <message> - <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+1028"/> <source>Missing initial state in compound state '%1'</source> <translation>Der Anfangszustand des zusammengesetzten Zustands '%1' fehlt</translation> </message> <message> - <location line="+7"/> <source>Missing default state in history state '%1'</source> <translation>Der Anfangszustand im Verlauf bei Zustand '%1' fehlt</translation> </message> <message> - <location line="+7"/> <source>No common ancestor for targets and source of transition from state '%1'</source> <translation>Die Ziele und die Quelle des Übergangs vom Zustand '%1' haben keinen gemeinsamen Ursprung</translation> </message> <message> - <location line="+4"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> @@ -8367,30 +6648,22 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSystemSemaphore</name> <message> - <location filename="../src/corelib/kernel/qsystemsemaphore_unix.cpp" line="-46"/> <source>%1: does not exist</source> <translation>%1: Nicht existent</translation> </message> <message> - <location line="+5"/> - <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+66"/> <source>%1: out of resources</source> <translation>%1: Keine Ressourcen mehr verfügbar</translation> </message> <message> - <location line="-13"/> - <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+4"/> <source>%1: permission denied</source> <translation>%1: Zugriff verweigert</translation> </message> <message> - <location line="+4"/> <source>%1: already exists</source> <translation>%1: Existiert bereits</translation> </message> <message> - <location line="+13"/> - <location filename="../src/corelib/kernel/qsystemsemaphore_win.cpp" line="+3"/> <source>%1: unknown error %2</source> <translation>%1: Unbekannter Fehler %2</translation> </message> @@ -8398,12 +6671,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTDSDriver</name> <message> - <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+595"/> <source>Unable to open connection</source> <translation>Die Datenbankverbindung kann nicht geöffnet werden</translation> </message> <message> - <location line="+5"/> <source>Unable to use database</source> <translation>Die Datenbank kann nicht verwendet werden</translation> </message> @@ -8411,12 +6682,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTabBar</name> <message> - <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="-326"/> <source>Scroll Left</source> <translation>Nach links scrollen</translation> </message> <message> - <location line="+0"/> <source>Scroll Right</source> <translation>Nach rechts scrollen</translation> </message> @@ -8424,7 +6693,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTcpServer</name> <message> - <location filename="../src/network/socket/qtcpserver.cpp" line="+292"/> <source>Operation on socket is not supported</source> <translation>Diese Socket-Operation wird nicht unterstützt</translation> </message> @@ -8432,42 +6700,34 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTextControl</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+2046"/> <source>&Undo</source> <translation>&Rückgängig</translation> </message> <message> - <location line="+2"/> <source>&Redo</source> <translation>Wieder&herstellen</translation> </message> <message> - <location line="+4"/> <source>Cu&t</source> <translation>&Ausschneiden</translation> </message> <message> - <location line="+5"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> <message> - <location line="+7"/> <source>Copy &Link Location</source> <translation>&Link-Adresse kopieren</translation> </message> <message> - <location line="+6"/> <source>&Paste</source> <translation>Einf&ügen</translation> </message> <message> - <location line="+3"/> <source>Delete</source> <translation>Löschen</translation> </message> <message> - <location line="+7"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> @@ -8475,14 +6735,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QToolButton</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+310"/> - <location line="+6"/> <source>Press</source> <translation>Drücken</translation> </message> <message> - <location line="-4"/> - <location line="+8"/> <source>Open</source> <translation>Öffnen</translation> </message> @@ -8490,7 +6746,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QUdpSocket</name> <message> - <location filename="../src/network/socket/qudpsocket.cpp" line="+189"/> <source>This platform does not support IPv6</source> <translation>Diese Plattform unterstützt kein IPv6</translation> </message> @@ -8498,12 +6753,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QUndoGroup</name> <message> - <location filename="../src/gui/util/qundogroup.cpp" line="+385"/> <source>Undo</source> <translation>Rückgängig</translation> </message> <message> - <location line="+28"/> <source>Redo</source> <translation>Wiederherstellen</translation> </message> @@ -8511,7 +6764,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QUndoModel</name> <message> - <location filename="../src/gui/util/qundoview.cpp" line="+101"/> <source><empty></source> <translation><leer></translation> </message> @@ -8519,12 +6771,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QUndoStack</name> <message> - <location filename="../src/gui/util/qundostack.cpp" line="+832"/> <source>Undo</source> <translation>Rückgängig</translation> </message> <message> - <location line="+27"/> <source>Redo</source> <translation>Wiederherstellen</translation> </message> @@ -8532,57 +6782,46 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QUnicodeControlCharacterMenu</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+899"/> <source>LRM Left-to-right mark</source> <translation>LRM Left-to-right mark</translation> </message> <message> - <location line="+1"/> <source>RLM Right-to-left mark</source> <translation>RLM Right-to-left mark</translation> </message> <message> - <location line="+1"/> <source>ZWJ Zero width joiner</source> <translation>ZWJ Zero width joiner</translation> </message> <message> - <location line="+1"/> <source>ZWNJ Zero width non-joiner</source> <translation>ZWNJ Zero width non-joiner</translation> </message> <message> - <location line="+1"/> <source>ZWSP Zero width space</source> <translation>ZWSP Zero width space</translation> </message> <message> - <location line="+1"/> <source>LRE Start of left-to-right embedding</source> <translation>LRE Start of left-to-right embedding</translation> </message> <message> - <location line="+1"/> <source>RLE Start of right-to-left embedding</source> <translation>RLE Start of right-to-left embedding</translation> </message> <message> - <location line="+1"/> <source>LRO Start of left-to-right override</source> <translation>LRO Start of left-to-right override</translation> </message> <message> - <location line="+1"/> <source>RLO Start of right-to-left override</source> <translation>RLO Start of right-to-left override</translation> </message> <message> - <location line="+1"/> <source>PDF Pop directional formatting</source> <translation>PDF Pop directional formatting</translation> </message> <message> - <location line="+6"/> <source>Insert Unicode control character</source> <translation>Unicode-Kontrollzeichen einfügen</translation> </message> @@ -8590,32 +6829,26 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWebFrame</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+753"/> <source>Request cancelled</source> <translation>Anfrage wurde abgebrochen</translation> </message> <message> - <location line="+19"/> <source>Request blocked</source> <translation>Anfrage wurde abgewiesen</translation> </message> <message> - <location line="+7"/> <source>Cannot show URL</source> <translation>Der URL kann nicht angezeigt werden</translation> </message> <message> - <location line="+6"/> <source>Frame load interrupted by policy change</source> <translation>Das Laden des Rahmens wurde durch eine Änderung der Richtlinien unterbrochen</translation> </message> <message> - <location line="+6"/> <source>Cannot show mimetype</source> <translation>Dieser Mime-Typ kann nicht angezeigt werden</translation> </message> <message> - <location line="+6"/> <source>File does not exist</source> <translation>Die Datei existiert nicht</translation> </message> @@ -8623,621 +6856,515 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWebPage</name> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+44"/> <source>Submit</source> <comment>default label for Submit buttons in forms on web pages</comment> <translation>Senden</translation> </message> <message> - <location line="+5"/> <source>Submit</source> <comment>Submit (input element) alt text for <input> elements with no alt, title, or value</comment> <translation>Senden</translation> </message> <message> - <location line="+5"/> <source>Reset</source> <comment>default label for Reset buttons in forms on web pages</comment> <translation>Rücksetzen</translation> </message> <message> - <location line="+16"/> <source>Choose File</source> <comment>title for file button used in HTML forms</comment> <translation>Durchsuchen</translation> </message> <message> - <location line="+5"/> <source>No file selected</source> <comment>text to display in file button used in HTML forms when no file is selected</comment> <translation>Es ist keine Datei ausgewählt</translation> </message> <message> - <location line="+5"/> <source>Open in New Window</source> <comment>Open in New Window context menu item</comment> <translation>In neuem Fenster öffnen</translation> </message> <message> - <location line="+5"/> <source>Save Link...</source> <comment>Download Linked File context menu item</comment> <translation>Ziel speichern unter...</translation> </message> <message> - <location line="+5"/> <source>Copy Link</source> <comment>Copy Link context menu item</comment> <translation>Link-Adresse kopieren</translation> </message> <message> - <location line="+5"/> <source>Open Image</source> <comment>Open Image in New Window context menu item</comment> <translation>Grafik in neuem Fenster öffnen</translation> </message> <message> - <location line="+5"/> <source>Save Image</source> <comment>Download Image context menu item</comment> <translation>Grafik speichern unter</translation> </message> <message> - <location line="+5"/> <source>Copy Image</source> <comment>Copy Link context menu item</comment> <translation>Grafik kopieren</translation> </message> <message> - <location line="+5"/> <source>Open Frame</source> <comment>Open Frame in New Window context menu item</comment> <translation>Frame öffnen</translation> </message> <message> - <location line="+5"/> <source>Copy</source> <comment>Copy context menu item</comment> <translation>Kopieren</translation> </message> <message> - <location line="+5"/> <source>Go Back</source> <comment>Back context menu item</comment> <translation>Zurück</translation> </message> <message> - <location line="+5"/> <source>Go Forward</source> <comment>Forward context menu item</comment> <translation>Vor</translation> </message> <message> - <location line="+5"/> <source>Stop</source> <comment>Stop context menu item</comment> <translation>Abbrechen</translation> </message> <message> - <location line="+5"/> <source>Reload</source> <comment>Reload context menu item</comment> <translation>Neu laden</translation> </message> <message> - <location line="+5"/> <source>Cut</source> <comment>Cut context menu item</comment> <translation>Ausschneiden</translation> </message> <message> - <location line="+5"/> <source>Paste</source> <comment>Paste context menu item</comment> <translation>Einfügen</translation> </message> <message> - <location line="+5"/> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> <translation>Keine Vorschläge gefunden</translation> </message> <message> - <location line="+5"/> <source>Ignore</source> <comment>Ignore Spelling context menu item</comment> <translation>Ignorieren</translation> </message> <message> - <location line="+5"/> <source>Add To Dictionary</source> <comment>Learn Spelling context menu item</comment> <translation>In Wörterbuch aufnehmen</translation> </message> <message> - <location line="+5"/> <source>Search The Web</source> <comment>Search The Web context menu item</comment> <translation>Im Web suchen</translation> </message> <message> - <location line="+5"/> <source>Look Up In Dictionary</source> <comment>Look Up in Dictionary context menu item</comment> <translation>Im Wörterbuch nachschauen</translation> </message> <message> - <location line="+5"/> <source>Open Link</source> <comment>Open Link context menu item</comment> <translation>Adresse öffnen</translation> </message> <message> - <location line="+5"/> <source>Ignore</source> <comment>Ignore Grammar context menu item</comment> <translation>Ignorieren</translation> </message> <message> - <location line="+5"/> <source>Spelling</source> <comment>Spelling and Grammar context sub-menu item</comment> <translation>Rechtschreibung</translation> </message> <message> - <location line="+5"/> <source>Show Spelling and Grammar</source> <comment>menu item title</comment> <translation>Rechtschreibung und Grammatik anzeigen</translation> </message> <message> - <location line="+1"/> <source>Hide Spelling and Grammar</source> <comment>menu item title</comment> <translation>Rechtschreibung und Grammatik nicht anzeigen</translation> </message> <message> - <location line="+5"/> <source>Check Spelling</source> <comment>Check spelling context menu item</comment> <translation>Rechtschreibung prüfen</translation> </message> <message> - <location line="+5"/> <source>Check Spelling While Typing</source> <comment>Check spelling while typing context menu item</comment> <translation>Rechtschreibung während des Schreibens überprüfen</translation> </message> <message> - <location line="+5"/> <source>Check Grammar With Spelling</source> <comment>Check grammar with spelling context menu item</comment> <translation>Grammatik mit Rechtschreibung zusammen überprüfen</translation> </message> <message> - <location line="+5"/> <source>Fonts</source> <comment>Font context sub-menu item</comment> <translation>Fonts</translation> </message> <message> - <location line="+5"/> <source>Bold</source> <comment>Bold context menu item</comment> <translation>Fett</translation> </message> <message> - <location line="+5"/> <source>Italic</source> <comment>Italic context menu item</comment> <translation>Kursiv</translation> </message> <message> - <location line="+5"/> <source>Underline</source> <comment>Underline context menu item</comment> <translation>Unterstrichen</translation> </message> <message> - <location line="+5"/> <source>Outline</source> <comment>Outline context menu item</comment> <translation>Umriss</translation> </message> <message> - <location line="+5"/> <source>Direction</source> <comment>Writing direction context sub-menu item</comment> <translation>Schreibrichtung</translation> </message> <message> - <location line="+5"/> <source>Text Direction</source> <comment>Text direction context sub-menu item</comment> <translation>Schreibrichtung</translation> </message> <message> - <location line="+5"/> <source>Default</source> <comment>Default writing direction context menu item</comment> <translation>Vorgabe</translation> </message> <message> - <location line="+5"/> <source>Left to Right</source> <comment>Left to Right context menu item</comment> <translation>Von links nach rechts</translation> </message> <message> - <location line="+5"/> <source>Right to Left</source> <comment>Right to Left context menu item</comment> <translation>Von rechts nach links</translation> </message> <message> - <location line="+100"/> <source>Missing Plug-in</source> <comment>Label text to be used when a plug-in is missing</comment> <translation>Fehlendes Plugin</translation> </message> <message> - <location line="+20"/> <source>Loading...</source> <comment>Media controller status message when the media is loading</comment> <translation>Lädt...</translation> </message> <message> - <location line="+5"/> <source>Live Broadcast</source> <comment>Media controller status message when watching a live broadcast</comment> <translation>Live-Übertragung</translation> </message> <message> - <location line="+8"/> <source>Audio Element</source> <comment>Media controller element</comment> <translation>Audio-Element</translation> </message> <message> - <location line="+2"/> <source>Video Element</source> <comment>Media controller element</comment> <translation>Video-Element</translation> </message> <message> - <location line="+2"/> <source>Mute Button</source> <comment>Media controller element</comment> <translation>Stummschalttaste</translation> </message> <message> - <location line="+2"/> <source>Unmute Button</source> <comment>Media controller element</comment> <translation>Abstelltaste für Stummschaltung</translation> </message> <message> - <location line="+2"/> <source>Play Button</source> <comment>Media controller element</comment> <translation>Abspielknopf</translation> </message> <message> - <location line="+2"/> <source>Pause Button</source> <comment>Media controller element</comment> <translation>Pause-Knopf</translation> </message> <message> - <location line="+2"/> <source>Slider</source> <comment>Media controller element</comment> <translation>Schieberegler</translation> </message> <message> - <location line="+2"/> <source>Slider Thumb</source> <comment>Media controller element</comment> <translation>Schieberegler-Griff</translation> </message> <message> - <location line="+2"/> <source>Rewind Button</source> <comment>Media controller element</comment> <translation>Rückspultaste</translation> </message> <message> - <location line="+2"/> <source>Return to Real-time Button</source> <comment>Media controller element</comment> <translation>Kehre zu Echtzeit zurück</translation> </message> <message> - <location line="+2"/> <source>Elapsed Time</source> <comment>Media controller element</comment> <translation>Spielzeit</translation> </message> <message> - <location line="+2"/> <source>Remaining Time</source> <comment>Media controller element</comment> <translation>Verbleibende Zeit</translation> </message> <message> - <location line="+2"/> <source>Status Display</source> <comment>Media controller element</comment> <translation>Statusanzeige</translation> </message> <message> - <location line="+2"/> <source>Fullscreen Button</source> <comment>Media controller element</comment> <translation>Vollbild-Taste</translation> </message> <message> - <location line="+2"/> <source>Seek Forward Button</source> <comment>Media controller element</comment> <translation>Vorlauftaste</translation> </message> <message> - <location line="+2"/> <source>Seek Back Button</source> <comment>Media controller element</comment> <translation>Rücklauftaste</translation> </message> <message> - <location line="+8"/> <source>Audio element playback controls and status display</source> <comment>Media controller element</comment> <translation>Audio-Steuerung und Statusanzeige</translation> </message> <message> - <location line="+2"/> <source>Video element playback controls and status display</source> <comment>Media controller element</comment> <translation>Video-Steuerung und Statusanzeige</translation> </message> <message> - <location line="+2"/> <source>Mute audio tracks</source> <comment>Media controller element</comment> <translation>Schalte Tonspuren stumm</translation> </message> <message> - <location line="+2"/> <source>Unmute audio tracks</source> <comment>Media controller element</comment> <translation>Stummschaltung der Tonspuren aufheben</translation> </message> <message> - <location line="+2"/> <source>Begin playback</source> <comment>Media controller element</comment> <translation>Abspielen</translation> </message> <message> - <location line="+2"/> <source>Pause playback</source> <comment>Media controller element</comment> <translation>Pause</translation> </message> <message> - <location line="+2"/> <source>Movie time scrubber</source> <comment>Media controller element</comment> <translation>Abspielzeit</translation> </message> <message> - <location line="+2"/> <source>Movie time scrubber thumb</source> <comment>Media controller element</comment> <translation>Griff zur Einstellung der Abspielzeit</translation> </message> <message> - <location line="+2"/> <source>Rewind movie</source> <comment>Media controller element</comment> <translation>Film zurückspulen</translation> </message> <message> - <location line="+2"/> <source>Return streaming movie to real-time</source> <comment>Media controller element</comment> <translation>Setze Film auf Echtzeit zurück</translation> </message> <message> - <location line="+2"/> <source>Current movie time</source> <comment>Media controller element</comment> <translation>Abspielzeit des Films</translation> </message> <message> - <location line="+2"/> <source>Remaining movie time</source> <comment>Media controller element</comment> <translation>Verbleibende Zeit des Films</translation> </message> <message> - <location line="+2"/> <source>Current movie status</source> <comment>Media controller element</comment> <translation>Status des Films</translation> </message> <message> - <location line="+2"/> <source>Play movie in full-screen mode</source> <comment>Media controller element</comment> <translation>Film im Vollbildmodus abspielen</translation> </message> <message> - <location line="+2"/> <source>Seek quickly back</source> <comment>Media controller element</comment> <translation>Schnelles Rückwärtssuchen</translation> </message> <message> - <location line="+2"/> <source>Seek quickly forward</source> <comment>Media controller element</comment> <translation>Schnelles Vorwärtssuchen</translation> </message> <message> - <location line="+9"/> <source>Indefinite time</source> <comment>Media time description</comment> <translation>Unbegrenzte Zeit</translation> </message> <message> - <location line="+9"/> <source>%1 days %2 hours %3 minutes %4 seconds</source> <comment>Media time description</comment> <translation>%1 Tage %2 Stunden %3 Minuten %4 Sekunden</translation> </message> <message> - <location line="+4"/> <source>%1 hours %2 minutes %3 seconds</source> <comment>Media time description</comment> <translation>%1 Stunden %2 Minuten %3 Sekunden</translation> </message> <message> - <location line="+4"/> <source>%1 minutes %2 seconds</source> <comment>Media time description</comment> <translation>%1 Minuten %2 Sekunden</translation> </message> <message> - <location line="+3"/> <source>%1 seconds</source> <comment>Media time description</comment> <translation>%1 Sekunden</translation> </message> <message> - <location line="-225"/> <source>Inspect</source> <comment>Inspect Element context menu item</comment> <translation>Prüfen</translation> </message> <message> - <location line="+5"/> <source>No recent searches</source> <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment> <translation>Es existieren noch keine Suchanfragen</translation> </message> <message> - <location line="+5"/> <source>Recent searches</source> <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment> <translation>Bisherige Suchanfragen</translation> </message> <message> - <location line="+5"/> <source>Clear recent searches</source> <comment>menu item in Recent Searches menu that empties menu's contents</comment> <translation>Gespeicherte Suchanfragen löschen</translation> </message> <message> - <location line="+90"/> <source>Unknown</source> <comment>Unknown filesize FTP directory listing item</comment> <translation>Unbekannt</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+253"/> <source>Web Inspector - %2</source> <translation>Web Inspector - %2</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+5"/> <source>%1 (%2x%3 pixels)</source> <comment>Title string for images</comment> <translation>%1 (%2x%3 Pixel)</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+347"/> <source>Redirection limit reached</source> <translation>Maximal Anzahl von Weiterleitungen wurde erreicht</translation> </message> <message> - <location line="+121"/> <source>Bad HTTP request</source> <translation>Ungültige HTTP-Anforderung</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-306"/> <source>This is a searchable index. Enter search keywords: </source> <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> <translation>Dieser Index verfügt über eine Suchfunktion. Geben Sie einen Suchbegriff ein:</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/> <source>Scroll here</source> <translation>Hierher scrollen</translation> </message> <message> - <location line="+3"/> <source>Left edge</source> <translation>Linker Rand</translation> </message> <message> - <location line="+0"/> <source>Top</source> <translation>Anfang</translation> </message> <message> - <location line="+1"/> <source>Right edge</source> <translation>Rechter Rand</translation> </message> <message> - <location line="+0"/> <source>Bottom</source> <translation>Ende</translation> </message> <message> - <location line="+3"/> <source>Page left</source> <translation>Eine Seite nach links</translation> </message> <message> - <location line="+0"/> <source>Page up</source> <translation>Eine Seite nach oben</translation> </message> <message> - <location line="+1"/> <source>Page right</source> <translation>Eine Seite nach rechts</translation> </message> <message> - <location line="+0"/> <source>Page down</source> <translation>Eine Seite nach unten</translation> </message> <message> - <location line="+3"/> <source>Scroll left</source> <translation>Nach links scrollen</translation> </message> <message> - <location line="+0"/> <source>Scroll up</source> <translation>Nach oben scrollen</translation> </message> <message> - <location line="+1"/> <source>Scroll right</source> <translation>Nach rechts scrollen</translation> </message> <message> - <location line="+0"/> <source>Scroll down</source> <translation>Nach unten scrollen</translation> </message> <message numerus="yes"> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp" line="+45"/> <source>%n file(s)</source> <comment>number of chosen file</comment> <translation> @@ -9246,237 +7373,190 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+2033"/> <source>JavaScript Alert - %1</source> <translation>JavaScript-Hinweis - %1</translation> </message> <message> - <location line="+17"/> <source>JavaScript Confirm - %1</source> <translation>JavaScript-Bestätigung - %1</translation> </message> <message> - <location line="+20"/> <source>JavaScript Prompt - %1</source> <translation>JavaScript-Eingabeaufforderung - %1</translation> </message> <message> - <location line="+26"/> <source>JavaScript Problem - %1</source> <translation>JavaScript-Problem - %1</translation> </message> <message> - <location line="+0"/> <source>The script on this page appears to have a problem. Do you want to stop the script?</source> <translation>Das Skript dieser Webseite ist fehlerhaft. Möchten Sie es anhalten?</translation> </message> <message> - <location line="+395"/> <source>Move the cursor to the next character</source> <translation>Positionsmarke auf folgendes Zeichen setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the previous character</source> <translation>Positionsmarke auf vorangehendes Zeichen setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the next word</source> <translation>Positionsmarke auf folgendes Wort setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the previous word</source> <translation>Positionsmarke auf vorangehendes Wort setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the next line</source> <translation>Positionsmarke auf folgende Zeile setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the previous line</source> <translation>Positionsmarke auf vorangehende Zeile setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the start of the line</source> <translation>Positionsmarke auf Zeilenanfang setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the end of the line</source> <translation>Positionsmarke auf Zeilenende setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the start of the block</source> <translation>Positionsmarke auf Anfang des Blocks setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the end of the block</source> <translation>Positionsmarke auf Ende des Blocks setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the start of the document</source> <translation>Positionsmarke auf Anfang des Dokumentes setzen</translation> </message> <message> - <location line="+3"/> <source>Move the cursor to the end of the document</source> <translation>Positionsmarke auf Ende des Dokumentes setzen</translation> </message> <message> - <location line="+3"/> <source>Select all</source> <translation>Alles auswählen</translation> </message> <message> - <location line="+3"/> <source>Select to the next character</source> <translation>Bis zum nächsten Zeichen markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the previous character</source> <translation>Bis zum vorherigen Zeichen markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the next word</source> <translation>Bis zum nächsten Wort markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the previous word</source> <translation>Bis zum vorherigen Wort markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the next line</source> <translation>Bis zur nächsten Zeile markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the previous line</source> <translation>Bis zur vorherigen Zeile markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the start of the line</source> <translation>Bis zum Zeilenanfang markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the end of the line</source> <translation>Bis zum Zeilenende markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the start of the block</source> <translation>Bis zum Anfang des Blocks markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the end of the block</source> <translation>Bis zum Ende des Blocks markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the start of the document</source> <translation>Bis zum Anfang des Dokuments markieren</translation> </message> <message> - <location line="+3"/> <source>Select to the end of the document</source> <translation>Bis zum Ende des Dokuments markieren</translation> </message> <message> - <location line="+3"/> <source>Delete to the start of the word</source> <translation>Bis zum Anfang des Wortes löschen</translation> </message> <message> - <location line="+3"/> <source>Delete to the end of the word</source> <translation>Bis zum Ende des Wortes löschen</translation> </message> <message> - <location line="+33"/> <source>Insert a new paragraph</source> <translation>Neuen Abschnitt einfügen</translation> </message> <message> - <location line="+3"/> <source>Insert a new line</source> <translation>Neue Zeile einfügen</translation> </message> <message> - <location line="+4"/> <source>Paste and Match Style</source> <translation>Einfügen und dem Stil anpassen</translation> </message> <message> - <location line="+3"/> <source>Remove formatting</source> <translation>Formatierung entfernen</translation> </message> <message> - <location line="+4"/> <source>Strikethrough</source> <translation>Durchgestrichen</translation> </message> <message> - <location line="+4"/> <source>Subscript</source> <translation>Tiefstellung</translation> </message> <message> - <location line="+4"/> <source>Superscript</source> <translation>Hochstellung</translation> </message> <message> - <location line="+4"/> <source>Insert Bulleted List</source> <translation>Liste mit Punkten einfügen</translation> </message> <message> - <location line="+4"/> <source>Insert Numbered List</source> <translation>Nummerierte Liste einfügen</translation> </message> <message> - <location line="+4"/> <source>Indent</source> <translation>Einrücken</translation> </message> <message> - <location line="+3"/> <source>Outdent</source> <translation>Einrückung aufheben</translation> </message> <message> - <location line="+3"/> <source>Center</source> <translation>Zentrieren</translation> </message> <message> - <location line="+3"/> <source>Justify</source> <translation>Ausrichten</translation> </message> <message> - <location line="+3"/> <source>Align Left</source> <translation>Linksbündig ausrichten</translation> </message> <message> - <location line="+3"/> <source>Align Right</source> <translation>Rechtsbündig ausrichten</translation> </message> @@ -9484,7 +7564,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWhatsThisAction</name> <message> - <location filename="../src/gui/kernel/qwhatsthis.cpp" line="+527"/> <source>What's This?</source> <translation>Direkthilfe</translation> </message> @@ -9492,7 +7571,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWidget</name> <message> - <location filename="../src/gui/kernel/qwidget.cpp" line="+5806"/> <source>*</source> <translation>*</translation> </message> @@ -9500,57 +7578,46 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWizard</name> <message> - <location filename="../src/gui/dialogs/qwizard.cpp" line="+701"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location line="+2"/> <source>Help</source> <translation>Hilfe</translation> </message> <message> - <location line="-14"/> <source>< &Back</source> <translation>< &Zurück</translation> </message> <message> - <location line="+10"/> <source>&Finish</source> <translation>Ab&schließen</translation> </message> <message> - <location line="+4"/> <source>&Help</source> <translation>&Hilfe</translation> </message> <message> - <location line="-14"/> <source>Go Back</source> <translation>Zurück</translation> </message> <message> - <location line="+3"/> <source>Continue</source> <translation>Weiter</translation> </message> <message> - <location line="+5"/> <source>Commit</source> <translation>Anwenden</translation> </message> <message> - <location line="+2"/> <source>Done</source> <translation>Fertig</translation> </message> <message> - <location line="-4"/> <source>&Next</source> <translation>&Weiter</translation> </message> <message> - <location line="+0"/> <source>&Next ></source> <translation>&Weiter ></translation> </message> @@ -9558,69 +7625,54 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWorkspace</name> <message> - <location filename="../src/gui/widgets/qworkspace.cpp" line="+1089"/> <source>&Restore</source> <translation>Wieder&herstellen</translation> </message> <message> - <location line="+1"/> <source>&Move</source> <translation>Ver&schieben</translation> </message> <message> - <location line="+1"/> <source>&Size</source> <translation>&Größe ändern</translation> </message> <message> - <location line="+2"/> <source>Mi&nimize</source> <translation>M&inimieren</translation> </message> <message> - <location line="+2"/> <source>Ma&ximize</source> <translation>Ma&ximieren</translation> </message> <message> - <location line="+2"/> <source>&Close</source> <translation>Schl&ießen</translation> </message> <message> - <location line="+6"/> <source>Stay on &Top</source> <translation>Im &Vordergrund bleiben</translation> </message> <message> - <location line="-988"/> <source>Minimize</source> <translation>Minimieren</translation> </message> <message> - <location line="+2"/> <source>Restore Down</source> <translation>Wiederherstellen</translation> </message> <message> - <location line="-4"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location line="+993"/> - <location line="+1059"/> <source>Sh&ade</source> <translation>&Aufrollen</translation> </message> <message> - <location line="-278"/> - <location line="+60"/> <source>%1 - [%2]</source> <translation>%1 - [%2]</translation> </message> <message> - <location line="+214"/> <source>&Unshade</source> <translation>&Herabrollen</translation> </message> @@ -9628,117 +7680,94 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QXml</name> <message> - <location filename="../src/xml/sax/qxml.cpp" line="+58"/> <source>no error occurred</source> <translation>kein Fehler</translation> </message> <message> - <location line="+1"/> <source>error triggered by consumer</source> <translation>Konsument löste Fehler aus</translation> </message> <message> - <location line="+1"/> <source>unexpected end of file</source> <translation>unerwartetes Ende der Datei</translation> </message> <message> - <location line="+1"/> <source>more than one document type definition</source> <translation>mehrere Dokumenttypdefinitionen</translation> </message> <message> - <location line="+1"/> <source>error occurred while parsing element</source> <translation>Fehler beim Parsen eines Elements</translation> </message> <message> - <location line="+1"/> <source>tag mismatch</source> <translation>Element-Tags sind nicht richtig geschachtelt</translation> </message> <message> - <location line="+1"/> <source>error occurred while parsing content</source> <translation>Fehler beim Parsen des Inhalts eines Elements</translation> </message> <message> - <location line="+1"/> <source>unexpected character</source> <translation>unerwartetes Zeichen</translation> </message> <message> - <location line="+1"/> <source>invalid name for processing instruction</source> <translation>kein gültiger Name für eine Processing-Instruktion</translation> </message> <message> - <location line="+1"/> <source>version expected while reading the XML declaration</source> <translation>fehlende Version beim Parsen der XML-Deklaration</translation> </message> <message> - <location line="+1"/> <source>wrong value for standalone declaration</source> <translation>falscher Wert für die Standalone-Deklaration</translation> </message> <message> - <location line="+3"/> <source>error occurred while parsing document type definition</source> <translation>Fehler beim Parsen der Dokumenttypdefinition</translation> </message> <message> - <location line="+1"/> <source>letter is expected</source> <translation>ein Buchstabe ist an dieser Stelle erforderlich</translation> </message> <message> - <location line="+1"/> <source>error occurred while parsing comment</source> <translation>Fehler beim Parsen eines Kommentars</translation> </message> <message> - <location line="+1"/> <source>error occurred while parsing reference</source> <translation>Fehler beim Parsen einer Referenz</translation> </message> <message> - <location line="+1"/> <source>internal general entity reference not allowed in DTD</source> <translation>in einer DTD ist keine interne allgemeine Entity-Referenz erlaubt</translation> </message> <message> - <location line="+1"/> <source>external parsed general entity reference not allowed in attribute value</source> <translation>in einem Attribut-Wert sind keine externen Entity-Referenzen erlaubt</translation> </message> <message> - <location line="+1"/> <source>external parsed general entity reference not allowed in DTD</source> <translation>in der DTD sind keine externen Entity-Referenzen erlaubt </translation> </message> <message> - <location line="+1"/> <source>unparsed entity reference in wrong context</source> <translation>nicht-analysierte Entity-Referenz im falschen Kontext verwendet</translation> </message> <message> - <location line="+1"/> <source>recursive entities</source> <translation>rekursive Entity</translation> </message> <message> - <location line="+1"/> <source>error in the text declaration of an external entity</source> <translation>Fehler in der Text-Deklaration einer externen Entity</translation> </message> <message> - <location line="-11"/> <source>encoding declaration or standalone declaration expected while reading the XML declaration</source> <translation>fehlende Encoding-Deklaration oder Standalone-Deklaration beim Parsen der XML-Deklaration</translation> </message> <message> - <location line="+1"/> <source>standalone declaration expected while reading the XML declaration</source> <translation>fehlende Standalone-Deklaration beim Parsen der XML Deklaration</translation> </message> @@ -9746,27 +7775,22 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QXmlPatternistCLI</name> <message> - <location filename="../src/xmlpatterns/api/qcoloringmessagehandler.cpp" line="+87"/> <source>Warning in %1, at line %2, column %3: %4</source> <translation>Warnung in %1, bei Zeile %2, Spalte %3: %4</translation> </message> <message> - <location line="+7"/> <source>Warning in %1: %2</source> <translation>Warnung in %1: %2</translation> </message> <message> - <location line="+16"/> <source>Unknown location</source> <translation>unbekannt</translation> </message> <message> - <location line="+14"/> <source>Error %1 in %2, at line %3, column %4: %5</source> <translation>Fehler %1 in %2, bei Zeile %3, Spalte %4: %5</translation> </message> <message> - <location line="+8"/> <source>Error %1 in %2: %3</source> <translation>Fehler %1 in %2: %3</translation> </message> @@ -9774,184 +7798,142 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QXmlStream</name> <message> - <location filename="../src/corelib/xml/qxmlstream.cpp" line="+611"/> - <location filename="../src/corelib/xml/qxmlstream_p.h" line="+1770"/> <source>Extra content at end of document.</source> <translation>Überzähliger Inhalt nach Ende des Dokumentes.</translation> </message> <message> - <location line="+271"/> <source>Invalid entity value.</source> <translation>Ungültiger Entity-Wert.</translation> </message> <message> - <location line="+109"/> <source>Invalid XML character.</source> <translation>Ungültiges XML-Zeichen.</translation> </message> <message> - <location line="+259"/> <source>Sequence ']]>' not allowed in content.</source> <translation>Im Inhalt ist die Zeichenfolge ']]>' nicht erlaubt.</translation> </message> <message> - <location line="+309"/> <source>Namespace prefix '%1' not declared</source> <translation>Der Namensraum-Präfix '%1' wurde nicht deklariert</translation> </message> <message> - <location line="+78"/> <source>Attribute redefined.</source> <translation>Redefinition eines Attributes.</translation> </message> <message> - <location line="+115"/> <source>Unexpected character '%1' in public id literal.</source> <translation>'%1' ist kein gültiges Zeichen in einer public-id-Angabe.</translation> </message> <message> - <location line="+28"/> <source>Invalid XML version string.</source> <translation>Ungültige XML-Versionsangabe.</translation> </message> <message> - <location line="+2"/> <source>Unsupported XML version.</source> <translation>Diese XML-Version wird nicht unterstützt.</translation> </message> <message> - <location line="+23"/> <source>%1 is an invalid encoding name.</source> <translation>%1 ist kein gültiger Name für das Encoding.</translation> </message> <message> - <location line="+7"/> <source>Encoding %1 is unsupported</source> <translation>Das Encoding %1 wird nicht unterstützt</translation> </message> <message> - <location line="+16"/> <source>Standalone accepts only yes or no.</source> <translation>Der Wert für das 'Standalone'-Attribut kann nur 'yes' oder 'no' sein.</translation> </message> <message> - <location line="+2"/> <source>Invalid attribute in XML declaration.</source> <translation>Die XML-Deklaration enthält ein ungültiges Attribut.</translation> </message> <message> - <location line="+16"/> <source>Premature end of document.</source> <translation>Vorzeitiges Ende des Dokuments.</translation> </message> <message> - <location line="+2"/> <source>Invalid document.</source> <translation>Ungültiges Dokument.</translation> </message> <message> - <location line="+40"/> <source>Expected </source> <translation>Es wurde </translation> </message> <message> - <location line="+11"/> <source>, but got '</source> <translation>erwartet, stattdessen erhalten '</translation> </message> <message> - <location line="+4"/> <source>Unexpected '</source> <translation>Ungültig an dieser Stelle ' </translation> </message> <message> - <location line="+225"/> <source>Expected character data.</source> <translation>Es wurden Zeichendaten erwartet.</translation> </message> <message> - <location filename="../src/corelib/xml/qxmlstream_p.h" line="-995"/> <source>Recursive entity detected.</source> <translation>Es wurde eine rekursive Entity festgestellt.</translation> </message> <message> - <location line="+516"/> <source>Start tag expected.</source> <translation>Öffnendes Element erwartet.</translation> </message> <message> - <location line="+222"/> <source>XML declaration not at start of document.</source> <translation>Die XML-Deklaration befindet sich nicht am Anfang des Dokuments.</translation> </message> <message> - <location line="-31"/> <source>NDATA in parameter entity declaration.</source> <translation>Eine Parameter-Entity-Deklaration darf kein NDATA enthalten.</translation> </message> <message> - <location line="+34"/> <source>%1 is an invalid processing instruction name.</source> <translation>%1 ist kein gültiger Name für eine Prozessing-Instruktion.</translation> </message> <message> - <location line="+11"/> <source>Invalid processing instruction name.</source> <translation>Der Name der Prozessing-Instruktion ist ungültig.</translation> </message> <message> - <location filename="../src/corelib/xml/qxmlstream.cpp" line="-536"/> - <location line="+12"/> - <location filename="../src/corelib/xml/qxmlstream_p.h" line="+164"/> - <location line="+53"/> <source>Illegal namespace declaration.</source> <translation>Ungültige Namensraum-Deklaration.</translation> </message> <message> - <location filename="../src/corelib/xml/qxmlstream_p.h" line="+15"/> <source>Invalid XML name.</source> <translation>Ungültiger XML-Name.</translation> </message> <message> - <location line="+23"/> <source>Opening and ending tag mismatch.</source> <translation>Die Anzahl der öffnenden Elemente stimmt nicht mit der Anzahl der schließenden Elemente überein.</translation> </message> <message> - <location line="+18"/> <source>Reference to unparsed entity '%1'.</source> <translation>Es wurde die ungeparste Entity '%1' referenziert.</translation> </message> <message> - <location line="-13"/> - <location line="+61"/> - <location line="+40"/> <source>Entity '%1' not declared.</source> <translation>Die Entity '%1' ist nicht deklariert.</translation> </message> <message> - <location line="-26"/> <source>Reference to external entity '%1' in attribute value.</source> <translation>Im Attributwert wurde die externe Entity '%1' referenziert.</translation> </message> <message> - <location line="+40"/> <source>Invalid character reference.</source> <translation>Ungültige Zeichenreferenz.</translation> </message> <message> - <location filename="../src/corelib/xml/qxmlstream.cpp" line="-75"/> - <location filename="../src/corelib/xml/qxmlstream_p.h" line="-823"/> <source>Encountered incorrectly encoded content.</source> <translation>Es wurde Inhalt mit einer ungültigen Kodierung gefunden.</translation> </message> <message> - <location line="+274"/> <source>The standalone pseudo attribute must appear after the encoding.</source> <translation>Das Standalone-Pseudoattribut muss dem Encoding unmittelbar folgen.</translation> </message> <message> - <location filename="../src/corelib/xml/qxmlstream_p.h" line="+562"/> <source>%1 is an invalid PUBLIC identifier.</source> <translation>%1 ist keine gültige Angabe für eine PUBLIC-Id.</translation> </message> @@ -9959,702 +7941,558 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QtXmlPatterns</name> <message> - <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/> - <location line="+15"/> <source>At least one component must be present.</source> <translation>Es muss mindestens eine Komponente vorhanden sein.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qanyuri_p.h" line="+132"/> <source>%1 is not a valid value of type %2.</source> <translation>%1 ist kein gültiger Wert des Typs %2.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qatomiccasters_p.h" line="+223"/> <source>When casting to %1 from %2, the source value cannot be %3.</source> <translation>Bei einer "cast"-Operation von %1 zu %2 darf der Wert nicht %3 sein.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qboolean.cpp" line="+78"/> <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source> <translation>Der effektive Boolesche Wert einer Sequenz aus zwei oder mehreren atomaren Werten kann nicht berechnet werden.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qprocessinginstructionconstructor.cpp" line="+84"/> <source>The data of a processing instruction cannot contain the string %1</source> <translation>Die Daten einer Processing-Anweisung dürfen nicht die Zeichenkette %1 enthalten</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="+168"/> - <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+69"/> <source>%1 is an invalid %2</source> <translation>%1 ist kein gültiges %2</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qassemblestringfns.cpp" line="+88"/> <source>%1 is not a valid XML 1.0 character.</source> <translation>%1 ist kein gültiges XML 1.0 Zeichen.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qerrorfn.cpp" line="+61"/> <source>%1 was called.</source> <translation>%1 wurde gerufen.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="+133"/> <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source> <translation>In der Ersetzung muss auf %1 eine Ziffer folgen, wenn es nicht durch ein Escape-Zeichen geschützt ist.</translation> </message> <message> - <location line="+26"/> <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> <translation>In der Ersetzung kann %1 nur verwendet werden, um sich selbst oder %2 schützen, nicht jedoch für %3</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="+92"/> <source>%1 matches newline characters</source> <translation>Der Ausdruck '%1' schließt Zeilenvorschübe ein</translation> </message> <message> - <location line="+10"/> <source>Matches are case insensitive</source> <translation>Groß/Kleinschreibung wird nicht beachtet</translation> </message> <message> - <location line="+104"/> <source>%1 is an invalid regular expression pattern: %2</source> <translation>%1 ist kein gültiger regulärer Ausdruck: %2</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qsequencefns.cpp" line="+346"/> <source>It will not be possible to retrieve %1.</source> <translation>%1 kann nicht bestimmt werden.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qsequencegeneratingfns.cpp" line="+266"/> <source>The default collection is undefined</source> <translation>Für eine Kollektion ist keine Vorgabe definiert</translation> </message> <message> - <location line="+13"/> <source>%1 cannot be retrieved</source> <translation>%1 kann nicht bestimmt werden</translation> </message> <message> - <location filename="../src/xmlpatterns/janitors/qitemverifier.cpp" line="+67"/> <source>The item %1 did not match the required type %2.</source> <translation>Das Element %1 entspricht nicht dem erforderlichen Typ %2.</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+352"/> - <location line="+7323"/> <source>%1 is an unknown schema type.</source> <translation>%1 ist ein unbekannter Schema-Typ.</translation> </message> <message> - <location line="-7254"/> <source>A template with name %1 has already been declared.</source> <translation>Eine Vorlage des Namens %1 existiert bereits.</translation> </message> <message> - <location line="+213"/> <source>Only one %1 declaration can occur in the query prolog.</source> <translation>Der Anfrage-Prolog darf nur eine %1-Deklaration enthalten.</translation> </message> <message> - <location line="+188"/> <source>The initialization of variable %1 depends on itself</source> <translation>Die Initialisierung der Variable %1 hängt von ihrem eigenem Wert ab</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/> <source>The variable %1 is unused</source> <translation>Die Variable %1 wird nicht verwendet</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2904"/> <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> <translation>Die Version %1 wird nicht unterstützt. Die unterstützte Version von XQuery ist 1.0.</translation> </message> <message> - <location line="+71"/> <source>No function with signature %1 is available</source> <translation>Es existiert keine Funktion mit der Signatur %1</translation> </message> <message> - <location line="+303"/> <source>It is not possible to redeclare prefix %1.</source> <translation>Der Präfix %1 kann nicht redeklariert werden.</translation> </message> <message> - <location line="+18"/> <source>Prefix %1 is already declared in the prolog.</source> <translation>Der Präfix %1 wurde bereits im Prolog deklariert.</translation> </message> <message> - <location line="+95"/> <source>The name of an option must have a prefix. There is no default namespace for options.</source> <translation>Der Name einer Option muss einen Präfix haben. Es gibt keine Namensraum-Vorgabe für Optionen.</translation> </message> <message> - <location line="+171"/> <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> <translation>Die Deklaration %1 ist unzulässig, da Schema-Import nicht unterstützt wird.</translation> </message> <message> - <location line="+13"/> <source>The target namespace of a %1 cannot be empty.</source> <translation>Der Ziel-Namensraum von %1 darf nicht leer sein.</translation> </message> <message> - <location line="+8"/> <source>The module import feature is not supported</source> <translation>Modul-Import wird nicht unterstützt</translation> </message> <message> - <location line="+178"/> <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> <translation>Der Namensraum einer nutzerdefinierten Funktion aus einem Bibliotheksmodul muss dem Namensraum des Moduls entsprechen (%1 anstatt %2) </translation> </message> <message> - <location line="+34"/> <source>A function already exists with the signature %1.</source> <translation>Es existiert bereits eine Funktion mit der Signatur %1.</translation> </message> <message> - <location line="+23"/> <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> <translation>Externe Funktionen werden nicht unterstützt. Alle unterstützten Funktionen können direkt verwendet werden, ohne sie als extern zu deklarieren</translation> </message> <message> - <location line="+1709"/> <source>The %1-axis is unsupported in XQuery</source> <translation>Die %1-Achse wird in XQuery nicht unterstützt</translation> </message> <message> - <location line="+435"/> <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> <translation>Der Namensraum-URI darf nicht leer sein, wenn er an den Präfix %1 gebunden ist.</translation> </message> <message> - <location line="+7"/> <source>%1 is an invalid namespace URI.</source> <translation>%1 ist kein gültiger Namensraum-URI.</translation> </message> <message> - <location line="+6"/> <source>It is not possible to bind to the prefix %1</source> <translation>Der Präfix %1 kann nicht gebunden werden</translation> </message> <message> - <location line="+30"/> <source>Two namespace declaration attributes have the same name: %1.</source> <translation>Es wurden zwei Namensraum-Deklarationsattribute gleichen Namens (%1) gefunden.</translation> </message> <message> - <location line="+89"/> <source>The namespace URI must be a constant and cannot use enclosed expressions.</source> <translation>Ein Namensraum-URI muss eine Konstante sein und darf keine eingebetteten Ausdrücke verwenden.</translation> </message> <message> - <location line="+699"/> - <location line="+71"/> <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> <translation>%1 befindet sich nicht unter den Attributdeklarationen im Bereich. Schema-Import wird nicht unterstützt.</translation> </message> <message> - <location filename="../src/xmlpatterns/type/qcardinality.cpp" line="+55"/> <source>empty</source> <translation>leer</translation> </message> <message> - <location line="+2"/> <source>zero or one</source> <translation>kein oder ein</translation> </message> <message> - <location line="+2"/> <source>exactly one</source> <translation>genau ein</translation> </message> <message> - <location line="+2"/> <source>one or more</source> <translation>ein oder mehrere</translation> </message> <message> - <location line="+2"/> <source>zero or more</source> <translation>kein oder mehrere</translation> </message> <message> - <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="+156"/> <source>The focus is undefined.</source> <translation>Es ist kein Fokus definiert.</translation> </message> <message> - <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="+93"/> <source>An attribute by name %1 has already been created.</source> <translation>Es wurde bereits ein Attribut mit dem Namen %1 erzeugt.</translation> </message> <message> - <location filename="../src/xmlpatterns/api/qiodevicedelegate.cpp" line="+84"/> <source>Network timeout.</source> <translation>Das Zeitlimit der Netzwerkoperation wurde überschritten.</translation> </message> <message> - <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+320"/> <source>Element %1 can't be serialized because it appears outside the document element.</source> <translation>Das Element %1 kann nicht serialisiert werden, da es außerhalb des Dokumentenelements erscheint.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qabstractdatetime.cpp" line="+80"/> <source>Year %1 is invalid because it begins with %2.</source> <translation>%1 ist keine gültige Jahresangabe, da es mit %2 beginnt.</translation> </message> <message> - <location line="+19"/> <source>Day %1 is outside the range %2..%3.</source> <translation>Die Tagesangabe %1 ist außerhalb des Bereiches %2..%3.</translation> </message> <message> - <location line="+7"/> <source>Month %1 is outside the range %2..%3.</source> <translation>Die Monatsangabe %1 ist außerhalb des Bereiches %2..%3.</translation> </message> <message> - <location line="+10"/> <source>Overflow: Can't represent date %1.</source> <translation>Das Datum %1 kann nicht dargestellt werden (Überlauf).</translation> </message> <message> - <location line="+9"/> <source>Day %1 is invalid for month %2.</source> <translation>Die Tagesangabe %1 ist für den Monat %2 ungültig.</translation> </message> <message> - <location line="+49"/> <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source> <translation>Die Zeitangabe 24:%1:%2.%3 ist ungültig. Bei der Stundenangabe 24 müssen Minuten, Sekunden und Millisekunden 0 sein.</translation> </message> <message> - <location line="+13"/> <source>Time %1:%2:%3.%4 is invalid.</source> <translation>Die Zeitangabe %1:%2:%3.%4 ist ungültig.</translation> </message> <message> - <location line="+115"/> <source>Overflow: Date can't be represented.</source> <translation>Das Datum kann nicht dargestellt werden (Überlauf).</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="-7"/> <source>At least one time component must appear after the %1-delimiter.</source> <translation>Bei Vorhandensein eines %1-Begrenzers muss mindestens eine Komponente vorhanden sein.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="+201"/> - <location line="+32"/> <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source> <translation>Die Division eines Werts des Typs %1 durch %2 (kein numerischer Wert) ist nicht zulässig.</translation> </message> <message> - <location line="-20"/> <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source> <translation>Die Division eines Werts des Typs %1 durch %2 oder %3 (positiv oder negativ Null) ist nicht zulässig.</translation> </message> <message> - <location line="+32"/> <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source> <translation>Die Multiplikation eines Werts des Typs %1 mit %2 oder %3 (positiv oder negativ unendlich) ist nicht zulässig.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qatomicvalue.cpp" line="+79"/> <source>A value of type %1 cannot have an Effective Boolean Value.</source> <translation>Ein Wert des Typs %1 kann keinen effektiven Booleschen Wert haben.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qderivedinteger_p.h" line="+402"/> <source>Value %1 of type %2 exceeds maximum (%3).</source> <translation>Der Wert %1 des Typs %2 überschreitet das Maximum (%3).</translation> </message> <message> - <location line="+9"/> <source>Value %1 of type %2 is below minimum (%3).</source> <translation>Der Wert %1 des Typs %2 unterschreitet das Minimum (%3).</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qhexbinary.cpp" line="+91"/> <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source> <translation>Die Stellenzahl eines Wertes des Typs %1 muss geradzahlig sein. Das ist bei %2 nicht der Fall.</translation> </message> <message> - <location line="+19"/> <source>%1 is not valid as a value of type %2.</source> <translation>%1 ist kein gültiger Wert des Typs %2.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qarithmeticexpression.cpp" line="+207"/> <source>Operator %1 cannot be used on type %2.</source> <translation>Der Operator %1 kann nicht auf den Typ %2 angewandt werden.</translation> </message> <message> - <location line="+17"/> <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source> <translation>Der Operator %1 kann nicht auf atomare Werte der Typen %2 und %3 angewandt werden.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qattributenamevalidator.cpp" line="+66"/> <source>The namespace URI in the name for a computed attribute cannot be %1.</source> <translation>Der Namensraum-URI im Namen eines berechneten Attributes darf nicht %1 sein.</translation> </message> <message> - <location line="+9"/> <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source> <translation>Der Name eines berechneten Attributes darf keinen Namensraum-URI %1 mit dem lokalen Namen %2 haben.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qcastas.cpp" line="+88"/> <source>Type error in cast, expected %1, received %2.</source> <translation>Typfehler bei "cast"-Operation; es wurde %1 erwartet, aber %2 empfangen.</translation> </message> <message> - <location line="+29"/> <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source> <translation>Bei einer "cast"-Operation zum Typ %1 oder abgeleitetenTypen muss der Quellwert ein Zeichenketten-Literal oder ein Wert gleichen Typs sein. Der Typ %2 ist ungültig.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+67"/> <source>A comment cannot contain %1</source> <translation>Ein Kommentar darf nicht'%1 enthalten</translation> </message> <message> - <location line="+6"/> <source>A comment cannot end with a %1.</source> <translation>Ein Kommentar darf nicht auf %1 enden.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qdocumentcontentvalidator.cpp" line="+86"/> <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source> <translation>Ein Attributknoten darf nicht als Kind eines Dokumentknotens erscheinen. Es erschien ein Attributknoten mit dem Namen %1.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qexpressionfactory.cpp" line="+162"/> <source>A library module cannot be evaluated directly. It must be imported from a main module.</source> <translation>Ein Bibliotheksmodul kann nicht direkt ausgewertet werden, er muss von einem Hauptmodul importiert werden.</translation> </message> <message> - <location line="+40"/> <source>No template by name %1 exists.</source> <translation>Es existiert keine Vorlage mit dem Namen %1.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qgenericpredicate.cpp" line="+106"/> <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source> <translation>Werte des Typs %1 dürfen keine Prädikate sein. Für Prädikate sind nur numerische oder effektiv Boolesche Typen zulässig.</translation> </message> <message> - <location line="+32"/> <source>A positional predicate must evaluate to a single numeric value.</source> <translation>Ein positionales Prädikat muss sich als einfacher, numerischer Wert auswerten lassen.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/> <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source> <translation>Der Zielname einer Processing-Anweisung kann nicht %1 (unabhängig von Groß/Kleinschreibung sein). %2 ist daher ungültig.</translation> </message> <message> - <location line="+24"/> <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source> <translation>%1 ist kein gültiger Zielname einer Processing-Anweisung, es muss ein %2 Wert wie zum Beispiel %3 sein.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qpath.cpp" line="+109"/> <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source> <translation>Der letzte Schritt eines Pfades kann entweder nur Knoten oder nur atomare Werte enthalten. Sie dürfen nicht zusammen auftreten.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qqnameconstructor.cpp" line="+82"/> <source>No namespace binding exists for the prefix %1</source> <translation>Es existiert keine Namensraum-Bindung für den Präfix %1</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qqnameconstructor_p.h" line="-12"/> <source>No namespace binding exists for the prefix %1 in %2</source> <translation>Es existiert keine Namensraum-Bindung für den Präfix %1 in %2</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qaggregatefns.cpp" line="+120"/> <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source> <translation>Das erste Argument von %1 darf nicht vom Typ %2 sein; es muss numerisch, xs:yearMonthDuration oder xs:dayTimeDuration sein.</translation> </message> <message> - <location line="+74"/> <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> <translation>Das erste Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein.</translation> </message> <message> - <location line="+91"/> <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source> <translation>Das zweite Argument von %1 kann nicht vom Typ %2 sein, es muss einer der Typen %3, %4 oder %5 sein.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qdatetimefn.cpp" line="+86"/> <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source> <translation>Wenn beide Werte mit Zeitzonen angegeben werden, müssen diese übereinstimmen. %1 und %2 sind daher unzulässig.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qpatternmatchingfns.cpp" line="-65"/> <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source> <translation>Auf %1 muss %2 oder %3 folgen; es kann nicht am Ende der Ersetzung erscheinen.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qpatternplatform.cpp" line="-110"/> <source>%1 and %2 match the start and end of a line.</source> <translation>Die Ausdrücke %1 und %2 passen jeweils auf den Anfang oder das Ende einer beliebigen Zeile.</translation> </message> <message> - <location line="+10"/> <source>Whitespace characters are removed, except when they appear in character classes</source> <translation>Leerzeichen werden entfernt, sofern sie nicht in Zeichenklassen erscheinen</translation> </message> <message> - <location line="+130"/> <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> <translation>%1 ist kein gültiger Modifikator für reguläre Ausdrücke. Gültige Modifikatoren sind:</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+17"/> <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source> <translation>Es kann kein Präfix angegeben werden, wenn das erste Argument leer oder eine leere Zeichenkette (kein Namensraum) ist. Es wurde der Präfix %1 angegeben.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qstringvaluefns.cpp" line="+252"/> <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source> <translation>Die Normalisierungsform %1 wird nicht unterstützt. Die unterstützten Normalisierungsformen sind %2, %3, %4 and %5, und "kein" (eine leere Zeichenkette steht für "keine Normalisierung").</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+87"/> <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source> <translation>Eine Zeitzonen-Differenz muss im Bereich %1..%2 (einschließlich) liegen. %3 liegt außerhalb des Bereiches.</translation> </message> <message> - <location filename="../src/xmlpatterns/janitors/qcardinalityverifier.cpp" line="+58"/> <source>Required cardinality is %1; got cardinality %2.</source> <translation>Die erforderliche Kardinalität ist %1 (gegenwärtig %2).</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-3944"/> <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source> <translation>Die Kodierung %1 ist ungültig; sie darf nur aus lateinischen Buchstaben bestehen und muss dem regulären Ausdruck %2 entsprechen.</translation> </message> <message> - <location line="+260"/> <source>The keyword %1 cannot occur with any other mode name.</source> <translation>Das Schlüsselwort %1 kann nicht mit einem anderen Modusnamen zusammen verwendet werden.</translation> </message> <message> - <location line="-3117"/> <source>No variable with name %1 exists</source> <translation>Es existiert keine Variable des Namens %1</translation> </message> <message> - <location line="+3146"/> <source>The value of attribute %1 must be of type %2, which %3 isn't.</source> <translation>Der Wert des Attributs %1 muss vom Typ %2 sein, was bei %3 nicht der Fall ist.</translation> </message> <message> - <location line="+75"/> <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source> <translation>Der Präfix %1 kann nicht gebunden werden. Er ist bereits per Vorgabe an den Namensraum %2 gebunden.</translation> </message> <message> - <location line="+312"/> <source>A variable with name %1 has already been declared.</source> <translation>Eine Variable des Namens %1 wurde bereits deklariert.</translation> </message> <message> - <location line="+39"/> <source>No value is available for the external variable with name %1.</source> <translation>Es ist kein Wert für die externe Variable des Namens %1 verfügbar.</translation> </message> <message> - <location line="+96"/> <source>A stylesheet function must have a prefixed name.</source> <translation>Der Name einer Stylesheet-Funktion muss einen Präfix haben.</translation> </message> <message> - <location line="+18"/> <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> <translation>Der Namensraum %1 ist reserviert und kann daher von nutzerdefinierten Funktionen nicht verwendet werden (für diesen Zweck gibt es den vordefinierten Präfix %2).</translation> </message> <message> - <location line="+106"/> <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> <translation>Es wurde bereits ein Argument des Namens %1 deklariert. Argumentnamen müssen eindeutig sein.</translation> </message> <message> - <location line="+179"/> <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source> <translation>Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein Zeichenketten-Literal sein.</translation> </message> <message> - <location line="+11"/> <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source> <translation>Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Zeichenketten-Literal sein.</translation> </message> <message> - <location line="+14"/> <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source> <translation>Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Literal oder eine Variablenreferenz sein.</translation> </message> <message> - <location line="+9"/> <source>In an XSL-T pattern, function %1 cannot have a third argument.</source> <translation>Bei einem XSL-T-Suchmuster darf die Funktion %1 kein drittes Argument haben.</translation> </message> <message> - <location line="+10"/> <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source> <translation>Bei einem XSL-T-Suchmuster dürfen nur die Funktionen %1 und %2, nicht jedoch %3 zur Suche verwendet werden.</translation> </message> <message> - <location line="+63"/> <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source> <translation>Bei einem XSL-T-Suchmuster dürfen nur die Achsen %2 oder %3 verwendet werden, nicht jedoch %1.</translation> </message> <message> - <location line="+126"/> <source>%1 is an invalid template mode name.</source> <translation>%1 ist kein gültiger Name für einen Vorlagenmodus.</translation> </message> <message> - <location line="+44"/> <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source> <translation>Der Name der gebundenen Variablen eines for-Ausdrucks muss sich von dem der Positionsvariable unterscheiden. Die zwei Variablen mit dem Namen %1 stehen im Konflikt.</translation> </message> <message> - <location line="+778"/> <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source> <translation>%1-Ausdrücke können nicht verwendet werden, da Schemavalidierung nicht unterstützt wird. </translation> </message> <message> - <location line="+40"/> <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source> <translation>Es muss ein fallback-Ausdruck vorhanden sein, da keine pragma-Ausdrücke unterstützt werden</translation> </message> <message> - <location line="+269"/> <source>Each name of a template parameter must be unique; %1 is duplicated.</source> <translation>Die Namen von Vorlagenparametern müssen eindeutig sein, %1 existiert bereits.</translation> </message> <message> - <location line="+462"/> <source>No function with name %1 is available.</source> <translation>Es ist keine Funktion des Namens %1 verfügbar.</translation> </message> <message> - <location line="-6235"/> <source>%1 is not a valid numeric literal.</source> <translation>%1 ist kein gültiger numerischer Literal.</translation> </message> <message> - <location line="-152"/> <source>W3C XML Schema identity constraint selector</source> <translation>W3C XML Schema identity constraint selector</translation> </message> <message> - <location line="+3"/> <source>W3C XML Schema identity constraint field</source> <translation>W3C XML Schema identity constraint field</translation> </message> <message> - <location line="+4"/> <source>A construct was encountered which is disallowed in the current language(%1).</source> <translation>Es wurde ein Sprachkonstrukt angetroffen, was in der aktuellen Sprache (%1) nicht erlaubt ist.</translation> </message> <message> - <location line="+6502"/> <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> <translation>Der Namensraum %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.</translation> </message> <message> - <location line="+8"/> <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> <translation>Der Präfix %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.</translation> </message> <message> - <location line="+120"/> <source>An attribute with name %1 has already appeared on this element.</source> <translation>Das Element hat bereits ein Attribut des Namens %1.</translation> </message> <message> - <location line="+61"/> <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> <translation>Es wurde ein fehlerhafter direkter Element-Konstruktor gefunden. %1 endet mit %2.</translation> </message> <message> - <location line="+458"/> <source>The name %1 does not refer to any schema type.</source> <translation>Der Name %1 hat keinen Bezug zu einem Schematyp.</translation> </message> <message> - <location line="+10"/> <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source> <translation>%1 ist ein komplexer Typ. Eine "cast"-Operation zu komplexen Typen ist nicht möglich. Es können allerdings "cast"-Operationen zu atomare Typen wie %2 durchgeführt werden.</translation> </message> <message> - <location line="+9"/> <source>%1 is not an atomic type. Casting is only possible to atomic types.</source> <translation>%1 ist kein atomarer Typ. "cast"-Operation können nur zu atomaren Typen durchgeführt werden.</translation> </message> <message> - <location line="+76"/> <source>%1 is not a valid name for a processing-instruction.</source> <translation>%1 ist kein gültiger Name für eine Processing-Instruktion.</translation> </message> <message> - <location line="+188"/> <source>The name of an extension expression must be in a namespace.</source> <translation>Der Name eines Erweiterungsausdrucks muss sich in einem Namensraum befinden.</translation> </message> <message> - <location filename="../src/xmlpatterns/type/qtypechecker.cpp" line="-93"/> <source>Required type is %1, but %2 was found.</source> <translation>Der erforderliche Typ ist %1, es wurde aber %2 angegeben.</translation> </message> <message> - <location line="+44"/> <source>Promoting %1 to %2 may cause loss of precision.</source> <translation>Die Wandlung von %1 zu %2 kann zu einem Verlust an Genauigkeit führen.</translation> </message> <message> - <location filename="../src/xmlpatterns/utils/qoutputvalidator.cpp" line="-7"/> <source>It's not possible to add attributes after any other kind of node.</source> <translation>Attribute dürfen nicht auf andere Knoten folgen.</translation> </message> <message> - <location filename="../src/xmlpatterns/utils/qxpathhelper_p.h" line="+120"/> <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source> <translation>Es wird nur Unicode Codepoint Collation unterstützt (%1). %2 wird nicht unterstützt.</translation> </message> <message> - <location filename="../src/xmlpatterns/data/qatomicmathematicians.cpp" line="-180"/> <source>Integer division (%1) by zero (%2) is undefined.</source> <translation>Die Ganzzahldivision (%1) durch Null (%2) ist nicht definiert.</translation> </message> <message> - <location line="+7"/> <source>Division (%1) by zero (%2) is undefined.</source> <translation>Die Division (%1) durch Null (%2) ist nicht definiert.</translation> </message> <message> - <location line="+7"/> <source>Modulus division (%1) by zero (%2) is undefined.</source> <translation>Die Modulo-Division (%1) durch Null (%2) ist nicht definiert.</translation> </message> <message numerus="yes"> - <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/> <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> <translation> <numerusform>%1 hat nur %n Argument; die Angabe %2 ist daher ungültig.</numerusform> @@ -10662,7 +8500,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </translation> </message> <message numerus="yes"> - <location line="+11"/> <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source> <translation> <numerusform>%1 erfordert mindestens ein Argument; die Angabe %3 ist daher ungültig.</numerusform> @@ -10670,1655 +8507,1258 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qcontextnodechecker.cpp" line="+54"/> <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source> <translation>Der übergeordnete Knoten des zweiten Arguments der Funktion %1 muss ein Dokumentknoten sein, was bei %2 nicht der Fall ist.</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="-3172"/> <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> <translation>Der Namensraum einer benutzerdefinierten Funktion darf nicht leer sein (für diesen Zweck gibt es den vordefinierten Präfix %1)</translation> </message> <message> - <location line="-693"/> - <location line="+10"/> <source>A default namespace declaration must occur before function, variable, and option declarations.</source> <translation>Die Deklaration des Default-Namensraums muss vor Funktions-, Variablen- oder Optionsdeklaration erfolgen.</translation> </message> <message> - <location line="+10"/> <source>Namespace declarations must occur before function, variable, and option declarations.</source> <translation>Namensraums-Deklarationen müssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.</translation> </message> <message> - <location line="+11"/> <source>Module imports must occur before function, variable, and option declarations.</source> <translation>Modul-Importe müssen vor Funktions-, Variablen- oder Optionsdeklarationen stehen.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+12"/> <source>%1 is not a whole number of minutes.</source> <translation>%1 ist keine ganzzahlige Minutenangabe.</translation> </message> <message> - <location filename="../src/xmlpatterns/api/qxmlserializer.cpp" line="+60"/> <source>Attribute %1 can't be serialized because it appears at the top level.</source> <translation>Das Attributelement %1 kann nicht serialisiert werden, da es auf der höchsten Ebene erscheint.</translation> </message> <message> - <location filename="../src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp" line="+344"/> <source>%1 is an unsupported encoding.</source> <translation>Das Encoding %1 wird nicht unterstützt.</translation> </message> <message> - <location line="+16"/> <source>%1 contains octets which are disallowed in the requested encoding %2.</source> <translation>%1 enthält Oktette, die im Encoding %2 nicht zulässig sind.</translation> </message> <message> - <location line="+18"/> <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source> <translation>Der Code-Punkt %1 aus %2 mit Encoding %3 ist kein gültiges XML-Zeichen.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qapplytemplate.cpp" line="+119"/> <source>Ambiguous rule match.</source> <translation>Mehrdeutige Regel.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/> <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source> <translation>Im Konstruktor eines Namensraums darf der Wert des Namensraumes keine leere Zeichenkette sein.</translation> </message> <message> - <location line="+11"/> <source>The prefix must be a valid %1, which %2 is not.</source> <translation>Der Präfix muss ein gültiger %1 sein. Das ist bei %2 nicht der Fall.</translation> </message> <message> - <location line="+14"/> <source>The prefix %1 cannot be bound.</source> <translation>Der Präfix %1 kann nicht gebunden werden</translation> </message> <message> - <location line="+10"/> <source>Only the prefix %1 can be bound to %2 and vice versa.</source> <translation>An %2 kann nur der Präfix %1 gebunden werden (und umgekehrt).</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qtemplate.cpp" line="+145"/> <source>The parameter %1 is required, but no corresponding %2 is supplied.</source> <translation>Es wurde kein entsprechendes %2 für den erforderlichen Parameter %1 angegeben.</translation> </message> <message> - <location line="-71"/> <source>The parameter %1 is passed, but no corresponding %2 exists.</source> <translation>Es existiert kein entsprechendes %2 für den übergebenen Parameter %1.</translation> </message> <message> - <location filename="../src/xmlpatterns/functions/qunparsedtextfn.cpp" line="+65"/> <source>The URI cannot have a fragment</source> <translation>Der URI darf kein Fragment enthalten.</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qxslttokenizer.cpp" line="+519"/> <source>Element %1 is not allowed at this location.</source> <translation>Das Element %1 darf nicht an dieser Stelle stehen.</translation> </message> <message> - <location line="+9"/> <source>Text nodes are not allowed at this location.</source> <translation>An dieser Stelle dürfen keine Textknoten stehen.</translation> </message> <message> - <location line="+20"/> <source>Parse error: %1</source> <translation>Parse-Fehler: %1</translation> </message> <message> - <location line="+62"/> <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.</source> <translation>Der Wert eines XSL-T-Versionsattributes muss vom Typ %1 sein, was bei %2 nicht der Fall ist.</translation> </message> <message> - <location line="+20"/> <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source> <translation>Es wird ein XSL-T-1.0-Stylesheet mit einem Prozessor der Version 2.0 verarbeitet.</translation> </message> <message> - <location line="+108"/> <source>Unknown XSL-T attribute %1.</source> <translation>Unbekanntes XSL-T-Attribut: %1.</translation> </message> <message> - <location line="+23"/> <source>Attribute %1 and %2 are mutually exclusive.</source> <translation>Die Attribute %1 und %2 schließen sich gegenseitig aus.</translation> </message> <message> - <location line="+166"/> <source>In a simplified stylesheet module, attribute %1 must be present.</source> <translation>In einem vereinfachten Stylesheet-Modul muss das Attribut %1 vorhanden sein.</translation> </message> <message> - <location line="+72"/> <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source> <translation>Das Element %1 darf keines der Attribute %3 oder %4 haben, solange es nicht das Attribut %2 hat.</translation> </message> <message> - <location line="+9"/> <source>Element %1 must have at least one of the attributes %2 or %3.</source> <translation>Das Element %1 muss mindestens eines der Attribute %2 oder %3 haben.</translation> </message> <message> - <location line="+28"/> <source>At least one mode must be specified in the %1-attribute on element %2.</source> <translation>Im %1-Attribut des Elements %2 muss mindestens ein Modus angegeben werden.</translation> </message> <message> - <location line="+123"/> <source>Element %1 must come last.</source> <translation>Das Element %1 muss zuletzt stehen.</translation> </message> <message> - <location line="+24"/> <source>At least one %1-element must occur before %2.</source> <translation>Vor %2 muss mindestens ein %1-Element stehen.</translation> </message> <message> - <location line="+7"/> <source>Only one %1-element can appear.</source> <translation>Es darf nur ein einziges %1-Element stehen.</translation> </message> <message> - <location line="+31"/> <source>At least one %1-element must occur inside %2.</source> <translation>In %2 muss mindestens ein %1-Element stehen.</translation> </message> <message> - <location line="+58"/> <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source> <translation>Es kann kein Sequenzkonstruktor verwendet werden, wenn %2 ein Attribut %1 hat.</translation> </message> <message> - <location line="+13"/> <source>Element %1 must have either a %2-attribute or a sequence constructor.</source> <translation>Das Element %1 muss entweder ein %2-Attribut haben oder es muss ein Sequenzkonstruktor verwendet werden.</translation> </message> <message> - <location line="+125"/> <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source> <translation>Der Defaultwert eines erforderlichen Parameters kann weder durch ein %1-Attribut noch durch einen Sequenzkonstruktor angegeben werden. </translation> </message> <message> - <location line="+270"/> <source>Element %1 cannot have children.</source> <translation>Das Element %1 kann keine Kindelemente haben.</translation> </message> <message> - <location line="+434"/> <source>Element %1 cannot have a sequence constructor.</source> <translation>Das Element %1 kann keinen Sequenzkonstruktor haben.</translation> </message> <message> - <location line="+86"/> - <location line="+9"/> <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source> <translation>%2 darf nicht das Attribut %1 haben, wenn es ein Kindelement von %3 ist.</translation> </message> <message> - <location line="+15"/> <source>A parameter in a function cannot be declared to be a tunnel.</source> <translation>Der Parameter einer Funktion kann nicht als Tunnel deklariert werden.</translation> </message> <message> - <location line="+149"/> <source>This processor is not Schema-aware and therefore %1 cannot be used.</source> <translation>%1 kann nicht verwendet werden, da dieser Prozessor keine Schemas unterstützt.</translation> </message> <message> - <location line="+57"/> <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn't.</source> <translation>Die zuoberst stehenden Elemente eines Stylesheets dürfen sich nicht im Null-Namensraum befinden, was bei %1 der Fall ist.</translation> </message> <message> - <location line="+48"/> <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source> <translation>Der Wert des Attributs %1 des Elements %2 kann nur %3 oder %4 sein, nicht jedoch %5.</translation> </message> <message> - <location line="+20"/> <source>Attribute %1 cannot have the value %2.</source> <translation>Das Attribut %1 darf nicht den Wert %2 haben.</translation> </message> <message> - <location line="+58"/> <source>The attribute %1 can only appear on the first %2 element.</source> <translation>Nur das erste %2-Element darf das Attribut %1 haben.</translation> </message> <message> - <location line="+99"/> <source>At least one %1 element must appear as child of %2.</source> <translation>%2 muss mindestens ein %1-Kindelement haben.</translation> </message> <message> - <location filename="../src/xmlpatterns/schema/qxsdschemachecker.cpp" line="+227"/> <source>%1 has inheritance loop in its base type %2.</source> <translation>%1 hat eine zirkuläre Vererbung im Basistyp %2.</translation> </message> <message> - <location line="+5"/> - <location line="+24"/> <source>Circular inheritance of base type %1.</source> <translation>Zirkuläre Vererbung im Basistyp %1.</translation> </message> <message> - <location line="+11"/> <source>Circular inheritance of union %1.</source> <translation>Zirkuläre Vererbung bei der Vereinigung %1.</translation> </message> <message> - <location line="+25"/> <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source> <translation>%1 darf nicht durch Einschränkung von %2 abgeleitet werden, da letzterer sie als final deklariert.</translation> </message> <message> - <location line="+5"/> <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source> <translation>%1 darf nicht durch Erweiterung von %2 abgeleitet werden, da letzterer sie als final deklariert.</translation> </message> <message> - <location line="+31"/> <source>Base type of simple type %1 cannot be complex type %2.</source> <translation>Der komplexe Typ %2 kann nicht Basisklasse des einfachen Typs %1 sein.</translation> </message> <message> - <location line="+9"/> <source>Simple type %1 cannot have direct base type %2.</source> <translation>Der einfache Typ %1 kann nicht den unmittelbaren Basistyp %2 haben.</translation> </message> <message> - <location line="+33"/> - <location line="+9"/> <source>Simple type %1 is not allowed to have base type %2.</source> <translation>Der einfache Typ %1 darf nicht den Basistyp %2 haben.</translation> </message> <message> - <location line="+12"/> <source>Simple type %1 can only have simple atomic type as base type.</source> <translation>Der einfache Typ %1 kann nur einen einfachen. atomaren Basistyp haben.</translation> </message> <message> - <location line="+6"/> <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source> <translation>%1 darf nicht von %2 abgeleitet werden, da letzterer die Einschränkung als final deklariert.</translation> </message> <message> - <location line="+13"/> - <location line="+484"/> <source>Variety of item type of %1 must be either atomic or union.</source> <translation>Die Varietät der Typen von %1 muss entweder atomar oder eine Vereinigung sein.</translation> </message> <message> - <location line="-474"/> - <location line="+483"/> <source>Variety of member types of %1 must be atomic.</source> <translation>Die Varietät der Typen von %1 muss atomar sein.</translation> </message> <message> - <location line="-470"/> - <location line="+451"/> <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source> <translation>%1 darf nicht durch Listen von %2 abgeleitet werden, da letzterer sie als final deklariert.</translation> </message> <message> - <location line="-431"/> <source>Simple type %1 is only allowed to have %2 facet.</source> <translation>Der einfache Typ %1 darf nur die Facette %2 haben.</translation> </message> <message> - <location line="+10"/> <source>Base type of simple type %1 must have variety of type list.</source> <translation>Der Basistyp des einfachen Typs %1 muss eine Varietät des Typs Liste haben.</translation> </message> <message> - <location line="+6"/> <source>Base type of simple type %1 has defined derivation by restriction as final.</source> <translation>Der Basistyp des einfachen Typs %1 definiert Vererbung durch Einschränkung als final.</translation> </message> <message> - <location line="+6"/> <source>Item type of base type does not match item type of %1.</source> <translation>Der Elementtyp des Basistyps entspricht nicht dem Elementtyp von %1.</translation> </message> <message> - <location line="+26"/> - <location line="+93"/> <source>Simple type %1 contains not allowed facet type %2.</source> <translation>Der einfache Typ %1 enthält einen nicht erlaubten Facettentyp %2.</translation> </message> <message> - <location line="-72"/> - <location line="+413"/> <source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source> <translation>%1 darf nicht durch Vereinigung von %2 abgeleitet werden, da sie letzterer sie als final deklariert.</translation> </message> <message> - <location line="-404"/> <source>%1 is not allowed to have any facets.</source> <translation>%1 darf keine Facetten haben.</translation> </message> <message> - <location line="+8"/> <source>Base type %1 of simple type %2 must have variety of union.</source> <translation>Der Basistyp %1 des einfachen Typs %2 muss eine Varietät des Typs Vereinigung haben.</translation> </message> <message> - <location line="+9"/> <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source> <translation>Der Basistyp %1 des einfachen Typs %2 darf keine Einschränkung im %3 Attribut haben.</translation> </message> <message> - <location line="+18"/> <source>Member type %1 cannot be derived from member type %2 of %3's base type %4.</source> <translation>Der Typ %1 des Mitglieds darf nicht vom Typ %2 des Mitglieds vom Basistyp %4 von %3 sein.</translation> </message> <message> - <location line="+65"/> <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source> <translation>Erweiterung muss als Vererbungsmethode für %1 verwendet werden, da der Basistyp %2 ein einfacher Typ ist.</translation> </message> <message> - <location line="+30"/> <source>Complex type %1 has duplicated element %2 in its content model.</source> <translation>Der komplexe Typ %1 hat ein dupliziertes Element %2 in seinem Inhaltsmodell.</translation> </message> <message> - <location line="+8"/> <source>Complex type %1 has non-deterministic content.</source> <translation>Der komplexe Typ %1 hat nicht-deterministischen Inhalt.</translation> </message> <message> - <location line="+21"/> <source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source> <translation>Die Attribute des komplexen Typs %1 sind keine gültige Erweiterung der Attribute des Basistyps %2: %3.</translation> </message> <message> - <location line="+37"/> <source>Content model of complex type %1 is not a valid extension of content model of %2.</source> <translation>Das Inhaltsmodell des komplexen Typs %1 ist keine gültige Erweiterung des Inhaltsmodells von %2.</translation> </message> <message> - <location line="+10"/> <source>Complex type %1 must have simple content.</source> <translation>Der komplexe Typ %1 kann nur einfachen Inhalt haben.</translation> </message> <message> - <location line="+7"/> <source>Complex type %1 must have the same simple type as its base class %2.</source> <translation>Der komplexe Typ %1 kann nur einen einfachen Typ als Basisklasse %2 haben.</translation> </message> <message> - <location line="+67"/> <source>Complex type %1 cannot be derived from base type %2%3.</source> <translation>Der komplexe Typ %1 kann nicht vom Basistyp %2 abgeleitet werden%3.</translation> </message> <message> - <location line="+14"/> <source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source> <translation>Die Attribute des komplexen Typs %1 sind keine gültige Einschränkung der Attribute des Basistyps %2: %3.</translation> </message> <message> - <location line="+14"/> <source>Complex type %1 with simple content cannot be derived from complex base type %2.</source> <translation>Der komplexe Typ %1 einfachen Inhalts darf nicht vom komplexen Basistyp %2 abgeleitet werden.</translation> </message> <message> - <location line="+35"/> <source>Item type of simple type %1 cannot be a complex type.</source> <translation>Der Elementtyp des einfachen Typs %1 kann kein komplexer Typ sein.</translation> </message> <message> - <location line="+44"/> <source>Member type of simple type %1 cannot be a complex type.</source> <translation>Der Typ eines Mitglieds des einfachen Typs %1 kann kein komplexer Typ sein.</translation> </message> <message> - <location line="+8"/> <source>%1 is not allowed to have a member type with the same name as itself.</source> <translation>%1 darf keinen Typ eines Mitglieds desselben Namens haben.</translation> </message> <message> - <location line="+83"/> - <location line="+29"/> - <location line="+34"/> <source>%1 facet collides with %2 facet.</source> <translation>Die Facette %1 steht im Widerspruch zu der Facette %2.</translation> </message> <message> - <location line="-20"/> <source>%1 facet must have the same value as %2 facet of base type.</source> <translation>Die Facette %1 muss denselben Wert wie die Facette %2 des Basistyps haben.</translation> </message> <message> - <location line="+37"/> <source>%1 facet must be equal or greater than %2 facet of base type.</source> <translation>Die Facette %1 muss größer oder gleich der Facette %2 des Basistyps sein.</translation> </message> <message> - <location line="+19"/> - <location line="+125"/> - <location line="+55"/> - <location line="+12"/> - <location line="+91"/> - <location line="+58"/> - <location line="+34"/> - <location line="+35"/> <source>%1 facet must be less than or equal to %2 facet of base type.</source> <translation>Die Facette %1 muss kleiner oder gleich der Facette %2 des Basistyps sein.</translation> </message> <message> - <location line="-389"/> <source>%1 facet contains invalid regular expression</source> <translation>Die Facette %1 enthält einen ungültigen regulären Ausdruck</translation> </message> <message> - <location line="+15"/> <source>Unknown notation %1 used in %2 facet.</source> <translation>Die Facette %2 enthält eine ungültige Notation %1.</translation> </message> <message> - <location line="+20"/> <source>%1 facet contains invalid value %2: %3.</source> <translation>Die Facette %1 enthält einen ungültigen Wert %2: %3.</translation> </message> <message> - <location line="+22"/> <source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source> <translation>Die Facette %1 kann nicht %2 oder %3 sein, wenn die Facette %4 des Basistyps %5 ist.</translation> </message> <message> - <location line="+11"/> <source>%1 facet cannot be %2 if %3 facet of base type is %4.</source> <translation>Die Facette %1 kann nicht %2 sein, wenn die Facette %3 des Basistyps %4 ist.</translation> </message> <message> - <location line="+20"/> - <location line="+55"/> - <location line="+230"/> <source>%1 facet must be less than or equal to %2 facet.</source> <translation>Die Facette %1 muss kleiner oder gleich der Facette %2 sein.</translation> </message> <message> - <location line="-257"/> - <location line="+134"/> - <location line="+82"/> <source>%1 facet must be less than %2 facet of base type.</source> <translation>Die Facette %1 muss kleiner der Facette %2 des Basistyps sein.</translation> </message> <message> - <location line="-201"/> - <location line="+79"/> <source>%1 facet and %2 facet cannot appear together.</source> <translation>Die Facetten %1 und %2 können nicht zusammen erscheinen.</translation> </message> <message> - <location line="-27"/> - <location line="+12"/> - <location line="+113"/> <source>%1 facet must be greater than %2 facet of base type.</source> <translation>Die Facette %1 muss größer als die Facette %2 des Basistyps sein.</translation> </message> <message> - <location line="-86"/> - <location line="+58"/> <source>%1 facet must be less than %2 facet.</source> <translation>Die Facette %1 muss kleiner als die Facette %2 sein.</translation> </message> <message> - <location line="-42"/> - <location line="+58"/> <source>%1 facet must be greater than or equal to %2 facet of base type.</source> <translation>Die Facette %1 muss größer oder gleich der Facette %2 des Basistyps sein.</translation> </message> <message> - <location line="+113"/> <source>Simple type contains not allowed facet %1.</source> <translation>Der einfache Typ enthält eine unzulässige Facette %1.</translation> </message> <message> - <location line="+12"/> <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source> <translation>Die Facetten %1, %2, %3, %4, %5 und %6 sind bei Vererbung durch Listen nicht zulässig.</translation> </message> <message> - <location line="+16"/> <source>Only %1 and %2 facets are allowed when derived by union.</source> <translation>Bei Vererbung durch Vereinigung sind nur die Facetten %1 und %2 zulässig.</translation> </message> <message> - <location line="+23"/> - <location line="+16"/> <source>%1 contains %2 facet with invalid data: %3.</source> <translation>%1 enthält eine Facette %2 mit ungültigen Daten: %3.</translation> </message> <message> - <location line="+24"/> <source>Attribute group %1 contains attribute %2 twice.</source> <translation>Die Attributgruppe %1 enthält das Attribut %2 zweimal.</translation> </message> <message> - <location line="+9"/> <source>Attribute group %1 contains two different attributes that both have types derived from %2.</source> <translation>Die Attributgruppe %1 enthält zwei verschiedene Attribute mit Typen, die von %2 abgeleitet sind.</translation> </message> <message> - <location line="+8"/> <source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source> <translation>Die Attributgruppe %1 enthält ein Attribut %2 mit einer Einschränkung des Werts, dessen Typ aber von %3 abgeleitet ist.</translation> </message> <message> - <location line="+23"/> <source>Complex type %1 contains attribute %2 twice.</source> <translation>Der komplexe Typ %1 enthält das Attribut %2 doppelt.</translation> </message> <message> - <location line="+9"/> <source>Complex type %1 contains two different attributes that both have types derived from %2.</source> <translation>Die Attributgruppe %1 enthält zwei verschiedene Attribute mit Typen, die beide von %2 abgeleitet sind.</translation> </message> <message> - <location line="+8"/> <source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source> <translation>Der komplexe Typ %1 enthält ein Attribut %2 mit einer Einschränkung des Werts, dessen Typ aber von %3 abgeleitet ist.</translation> </message> <message> - <location line="+43"/> <source>Element %1 is not allowed to have a value constraint if its base type is complex.</source> <translation>Das Element %1 darf keine Einschränkung des Werts haben, wenn der Basistyp komplex ist.</translation> </message> <message> - <location line="+7"/> <source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source> <translation>Das Element %1 darf keine Einschränkung des Werts haben, wenn sein Typ von %2 abgeleitet ist.</translation> </message> <message> - <location line="+10"/> - <location line="+11"/> <source>Value constraint of element %1 is not of elements type: %2.</source> <translation>Die Einschränkung des Werts des Elements %1 ist nicht vom Typ des Elements: %2.</translation> </message> <message> - <location line="+13"/> <source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source> <translation>Das Element %1 kann nicht zu einer Substitutionsgruppe gehören, da es kein globales Element ist.</translation> </message> <message> - <location line="+28"/> <source>Type of element %1 cannot be derived from type of substitution group affiliation.</source> <translation>Der Typ des Elements %1 kann nicht vom Typ der zugehörigen Substitutionsgruppe abgeleitet werden.</translation> </message> <message> - <location line="+41"/> <source>Value constraint of attribute %1 is not of attributes type: %2.</source> <translation>Die Einschränkung des Werts des Attributs %1 ist nicht vom Typ des Attributs: %2.</translation> </message> <message> - <location line="+9"/> <source>Attribute %1 has value constraint but has type derived from %2.</source> <translation>Das Attribut %1 hat eine Einschränkung des Werts, während sein Typ von %2 abgeleitet ist.</translation> </message> <message> - <location line="+56"/> <source>%1 attribute in derived complex type must be %2 like in base type.</source> <translation>Das Attribut %1 in einem abgeleiteten komplexen Typ muss wie im Basistyp '%2' sein.</translation> </message> <message> - <location line="+11"/> <source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source> <translation>Das Attribut %1 in einem abgeleiteten komplexen Typ muss wie der Basistyp eine Einschränkung des Werts (%2) haben.</translation> </message> <message> - <location line="+9"/> <source>Attribute %1 in derived complex type must have the same %2 value constraint like in base type.</source> <translation>Das Attribut %1 in einem abgeleiteten komplexen Typ muss die gleiche Einschränkung des Werts (%2) wie der Basistyp haben.</translation> </message> <message> - <location line="+7"/> <source>Attribute %1 in derived complex type must have %2 value constraint.</source> <translation>Das Attribut %1 in einem abgeleiteten komplexen Typ muss die Einschränkung des Werts '%2' haben.</translation> </message> <message> - <location line="+18"/> <source>processContent of base wildcard must be weaker than derived wildcard.</source> <translation>Das 'processContent'-Attribut des Basissuchmusters muss schwächer sein als das des abgeleiteten Suchmusters.</translation> </message> <message> - <location line="+39"/> - <location line="+15"/> <source>Element %1 exists twice with different types.</source> <translation>Es existieren zwei Vorkommen verschiedenen Typs des Elements %1.</translation> </message> <message> - <location line="+28"/> <source>Particle contains non-deterministic wildcards.</source> <translation>Der Partikel enthält nicht-deterministische Suchmuster.</translation> </message> <message> - <location filename="../src/xmlpatterns/schema/qxsdschemahelper.cpp" line="+691"/> - <location line="+63"/> <source>Base attribute %1 is required but derived attribute is not.</source> <translation>Das Basisattribut %1 ist erforderlich, nicht jedoch das abgeleitete Attribut.</translation> </message> <message> - <location line="-57"/> <source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source> <translation>Der Typ des abgeleiteten Attributs %1 kann nicht aus Typ des Basisattributs bestimmt werden.</translation> </message> <message> - <location line="+28"/> <source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source> <translation>Die Einschränkung des Werts des abgeleiteten Attributs %1 entspricht nicht der Einschränkung des Werts des Basisattributs.</translation> </message> <message> - <location line="+5"/> <source>Derived attribute %1 does not exist in the base definition.</source> <translation>Das abgeleitete Attribut %1 existiert in der Basisdefinition nicht.</translation> </message> <message> - <location line="+11"/> <source>Derived attribute %1 does not match the wildcard in the base definition.</source> <translation>Das abgeleitete Attribut %1 entspricht nicht dem Suchmuster in der Basisdefinition.</translation> </message> <message> - <location line="+17"/> <source>Base attribute %1 is required but missing in derived definition.</source> <translation>Das erforderliche Basisattribut %1 fehlt in der abgeleiteten Definition.</translation> </message> <message> - <location line="+9"/> <source>Derived definition contains an %1 element that does not exists in the base definition</source> <translation>Die abgeleitete Definition enthält ein Element %1, was in der Basisdefinition nicht existiert</translation> </message> <message> - <location line="+5"/> <source>Derived wildcard is not a subset of the base wildcard.</source> <translation>Das abgeleitete Suchmuster ist keine Untermenge des Basissuchmusters.</translation> </message> <message> - <location line="+5"/> <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source> <translation>Das Attribut %1 des abgeleiteten Suchmusters ist keine gültige Einschränkung des Attributs '%2' des Basissuchmusters</translation> </message> <message> - <location line="+23"/> <source>Attribute %1 from base type is missing in derived type.</source> <translation>Das Attribut %1 des Basistyps fehlt im abgeleiteten Typ.</translation> </message> <message> - <location line="+5"/> <source>Type of derived attribute %1 differs from type of base attribute.</source> <translation>Der Typ des abgeleiteten Attributs %1 unterscheidet sich vom Basistyp.</translation> </message> <message> - <location line="+8"/> <source>Base definition contains an %1 element that is missing in the derived definition</source> <translation>Das Element %1 des Basistyps fehlt in der abgeleiteten Definition</translation> </message> <message> - <location filename="../src/xmlpatterns/schema/qxsdschemaresolver.cpp" line="+354"/> <source>%1 references unknown %2 or %3 element %4.</source> <translation>%1 verweist auf ein unbekanntes Element %4 ('%2' oder '%3').</translation> </message> <message> - <location line="+10"/> <source>%1 references identity constraint %2 that is no %3 or %4 element.</source> <translation>%1 verweist auf eine Identitätseinschränkung %2, die weder ein '%3' noch ein '%4' Element ist.</translation> </message> <message> - <location line="+10"/> <source>%1 has a different number of fields from the identity constraint %2 that it references.</source> <translation>Bei %1 unterscheidet sich die Anzahl der Felder von der der Identitätseinschränkung %2, auf die es verweist.</translation> </message> <message> - <location line="+23"/> <source>Base type %1 of %2 element cannot be resolved.</source> <translation>Der Basistyp %1 des Elements %2 kann nicht aufgelöst werden.</translation> </message> <message> - <location line="+84"/> <source>Item type %1 of %2 element cannot be resolved.</source> <translation>Der Subtyp %1 des Elements %2 kann nicht aufgelöst werden.</translation> </message> <message> - <location line="+31"/> <source>Member type %1 of %2 element cannot be resolved.</source> <translation>Der Subtyp %1 des Elements %2 kann nicht aufgelöst werden.</translation> </message> <message> - <location line="+28"/> - <location line="+415"/> - <location line="+30"/> <source>Type %1 of %2 element cannot be resolved.</source> <translation>Der Typ %1 des Elements %2 kann nicht aufgelöst werden.</translation> </message> <message> - <location line="-423"/> <source>Base type %1 of complex type cannot be resolved.</source> <translation>Der Basistyp %1 des komplexen Typs kann nicht aufgelöst werden.</translation> </message> <message> - <location line="+9"/> <source>%1 cannot have complex base type that has a %2.</source> <translation>%1 kann keinen komplexen Basistyp haben, der '%2' spezifiziert.</translation> </message> <message> - <location line="+286"/> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> <translation>Das Inhaltsmodell des komplexen Typs %1enthält ein Element '%2'; es kann daher nicht durch Erweiterung von einem Typ abgeleitet werden, der nicht leer ist.</translation> </message> <message> - <location line="+6"/> <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source> <translation>Der komplexe Typ %1 kann nicht durch Erweiterung von %2 abgeleitet werden, da letzterer ein '%3'-Element in seinem Inhaltsmodell hat.</translation> </message> <message> - <location line="+101"/> <source>Type of %1 element must be a simple type, %2 is not.</source> <translation>Der Typ des Elements %1 muss ein einfacher Typ sein, was %2 nicht ist.</translation> </message> <message> - <location line="+62"/> <source>Substitution group %1 of %2 element cannot be resolved.</source> <translation>Die Substitutionsgruppe %1 des Elements %2 kann nicht aufgelöst werden.</translation> </message> <message> - <location line="+9"/> <source>Substitution group %1 has circular definition.</source> <translation>Die Substitutionsgruppe %1 hat eine zirkuläre Definition.</translation> </message> <message> - <location line="+120"/> - <location line="+7"/> <source>Duplicated element names %1 in %2 element.</source> <translation>Der Elementname %1 kommt im Element %2 mehrfach vor.</translation> </message> <message> - <location line="+29"/> - <location line="+52"/> - <location line="+71"/> - <location line="+28"/> <source>Reference %1 of %2 element cannot be resolved.</source> <translation>Der Verweis %1 des Elements %2 kann nicht aufgelöst werden.</translation> </message> <message> - <location line="-138"/> <source>Circular group reference for %1.</source> <translation>Zirkulärer Verweis bei %1.</translation> </message> <message> - <location line="+16"/> <source>%1 element is not allowed in this scope</source> <translation>Das Element %1 ist in diesem Bereich nicht zulässig</translation> </message> <message> - <location line="+5"/> <source>%1 element cannot have %2 attribute with value other than %3.</source> <translation>Der Wert des Attributs %2 des Elements %1 kann nur %3 sein.</translation> </message> <message> - <location line="+8"/> <source>%1 element cannot have %2 attribute with value other than %3 or %4.</source> <translation>Der Wert des Attributs %2 des Elements %1 kann nur %3 oder %4 sein.</translation> </message> <message> - <location line="+91"/> <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source> <translation>Das Attribut %1 oder %2 des Verweises %3 entspricht nicht der Attributsdeklaration %4.</translation> </message> <message> - <location line="+25"/> <source>Attribute group %1 has circular reference.</source> <translation>Die Attributgruppe %1 hat einen zirkulären Verweis.</translation> </message> <message> - <location line="+131"/> <source>%1 attribute in %2 must have %3 use like in base type %4.</source> <translation>Das Attribut %1 aus %2 muss die Verwendung '%3' spezifizieren, wie im Basistyp %4.</translation> </message> <message> - <location line="+52"/> <source>Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2.</source> <translation>Das Attributssuchmuster %1 ist keine gültige Einschränkung des Attributssuchmuster des Basistyps %2.</translation> </message> <message> - <location line="+7"/> <source>%1 has attribute wildcard but its base type %2 has not.</source> <translation>%1 hat ein Attributssuchmuster, nicht jedoch sein Basistyp %2.</translation> </message> <message> - <location line="+26"/> <source>Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible.</source> <translation>Die Vereinigung der Attributssuchmuster des Typs %1 und seines Basistyps %2 ergibt keinen gültigen Ausdruck.</translation> </message> <message> - <location line="+48"/> <source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source> <translation>Ungültiger Inhalt einer Aufzählungsfacette: {%1} ist kein Wert des Typs %2.</translation> </message> <message> - <location line="+10"/> <source>Namespace prefix of qualified name %1 is not defined.</source> <translation>Der Namensraum-Präfix des qualifizierten Namens %1 ist nicht definiert.</translation> </message> <message> - <location line="+51"/> - <location line="+18"/> <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source> <translation>Das Element %2 (%1) ist keine gültige Einschränkung des überschriebenen Elements (%3): %4.</translation> </message> <message> - <location filename="../src/xmlpatterns/schema/qxsdparticlechecker.cpp" line="+165"/> <source>Empty particle cannot be derived from non-empty particle.</source> <translation>Es kann kein leerer Partikel von einem Partikel abgeleitet werden, der nicht leer ist.</translation> </message> <message> - <location line="+15"/> <source>Derived particle is missing element %1.</source> <translation>Das Element %1 fehlt im abgeleiteten Partikel.</translation> </message> <message> - <location line="+7"/> <source>Derived element %1 is missing value constraint as defined in base particle.</source> <translation>Im abgeleiteten Element %1 fehlt Einschränkung des Wertes, wie sie im Basispartikel definiert ist.</translation> </message> <message> - <location line="+5"/> <source>Derived element %1 has weaker value constraint than base particle.</source> <translation>Das abgeleitete Element %1 hat eine schwächere Einschränkung des Wertes als der Basispartikel.</translation> </message> <message> - <location line="+7"/> <source>Fixed value constraint of element %1 differs from value constraint in base particle.</source> <translation>Die feste Einschränkung des Wertes des Elements %1 unterscheidet sich von der Einschränkung des Wertes des Basispartikels.</translation> </message> <message> - <location line="+7"/> <source>Derived element %1 cannot be nillable as base element is not nillable.</source> <translation>Das abgeleitete Element %1 kann kein 'nillable'-Attribut haben, da das Basiselement keines spezifiziert.</translation> </message> <message> - <location line="+10"/> <source>Block constraints of derived element %1 must not be more weaker than in the base element.</source> <translation>Die Blockeinschränkung des abgeleiteten Elements %1 darf nicht schwächer sein als im Basiselement.</translation> </message> <message> - <location line="+11"/> <source>Simple type of derived element %1 cannot be validly derived from base element.</source> <translation>Der einfache Typ des abgeleiteten Elements %1 kann nicht vom Basiselement abgeleitet werden.</translation> </message> <message> - <location line="+5"/> <source>Complex type of derived element %1 cannot be validly derived from base element.</source> <translation>Der komplexe Typ des abgeleiteten Elements %1 kann nicht vom Basiselement abgeleitet werden.</translation> </message> <message> - <location line="+24"/> <source>Element %1 is missing in derived particle.</source> <translation>Das Element %1 fehlt im abgeleiteten Partikel.</translation> </message> <message> - <location line="+18"/> <source>Element %1 does not match namespace constraint of wildcard in base particle.</source> <translation>Das Element %1 entspricht nicht der Namensraumeinschränkung des Basispartikels.</translation> </message> <message> - <location line="+11"/> <source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source> <translation>Das Suchmuster im abgeleiteten Partikel ist keine gültige Untermenge des Suchmusters des Basispartikels.</translation> </message> <message> - <location line="+5"/> <source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source> <translation>Das processContent-Attribut des Suchmusters des abgeleiteten Partikels ist schwächer als das Suchmuster des Basispartikels.</translation> </message> <message> - <location line="+240"/> <source>Derived particle allows content that is not allowed in the base particle.</source> <translation>Der abgeleitete Partikel gestattet Inhalt, der für den Basispartikel nicht zulässig ist.</translation> </message> <message> - <location filename="../src/xmlpatterns/schema/qxsdschemaparser.cpp" line="+170"/> <source>Can not process unknown element %1, expected elements are: %2.</source> <translation>Das unbekannte Element %1 kann nicht verarbeitet werden; zulässig wären: %2.</translation> </message> <message> - <location line="+13"/> <source>Element %1 is not allowed in this scope, possible elements are: %2.</source> <translation>Das Element %1 ist in diesem Bereich nicht zulässig; möglich wären: %2.</translation> </message> <message> - <location line="+16"/> <source>Child element is missing in that scope, possible child elements are: %1.</source> <translation>Das Unterelement fehlt im Bereich; mögliche Unterelemente wären: %1.</translation> </message> <message> - <location line="+143"/> <source>Document is not a XML schema.</source> <translation>Das Dokument ist kein XML-Schema.</translation> </message> <message> - <location line="+22"/> <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4.</source> <translation>Das Attribut %1 des Elements %2 enthält ungültigen Inhalt: {%3} ist kein Wert des Typs %4.</translation> </message> <message> - <location line="+6"/> <source>%1 attribute of %2 element contains invalid content: {%3}.</source> <translation>Das Attribut %1 des Elements %2 enthält ungültigen Inhalt: {%3}.</translation> </message> <message> - <location line="+26"/> <source>Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema.</source> <translation>Der Zielnamensraum %1 des eingebundenen Schemas unterscheidet sich vom dem von ihm definierten Zielnamensraum %2.</translation> </message> <message> - <location line="+14"/> - <location line="+11"/> <source>Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema.</source> <translation>Der Zielnamensraum %1 des importierten Schemas unterscheidet sich vom dem von ihm definierten Zielnamensraum %2.</translation> </message> <message> - <location line="+243"/> <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source> <translation>Das Element %1 kann nicht den Zielnamensraum %3 als Wert des Attributs '%2' spezifizieren.</translation> </message> <message> - <location line="+8"/> <source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source> <translation>In einem Schema ohne Namensraum muss das Element %1 ein Attribut %2 haben.</translation> </message> <message> - <location line="+851"/> - <location line="+158"/> <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source> <translation>Wenn das Attribut %3 vorhanden ist, darf das Element %1 nicht im Element %2 vorkommen.</translation> </message> <message> - <location line="-97"/> - <location line="+119"/> - <location line="+92"/> <source>%1 element has neither %2 attribute nor %3 child element.</source> <translation>Das Element %1 hat weder das Attribut %2 noch ein Unterelement %3.</translation> </message> <message> - <location line="+835"/> - <location line="+1474"/> - <location line="+232"/> - <location line="+7"/> - <location line="+260"/> - <location line="+17"/> - <location line="+258"/> - <location line="+6"/> - <location line="+17"/> - <location line="+6"/> - <location line="+17"/> - <location line="+11"/> - <location line="+11"/> - <location line="+11"/> <source>%1 element with %2 child element must not have a %3 attribute.</source> <translation>Das Element %1 darf kein Attribut %3 haben, wenn das Unterelement %2 vorhanden ist.</translation> </message> <message> - <location line="-1325"/> <source>%1 attribute of %2 element must be %3 or %4.</source> <translation>Das Attribut %1 des Elements %2 kann nur %3 oder %4 sein.</translation> </message> <message> - <location line="+36"/> <source>%1 attribute of %2 element must have a value of %3.</source> <translation>Das Attribut %1 des Elements %2 muss den Wert %3 haben.</translation> </message> <message> - <location line="+7"/> - <location line="+34"/> <source>%1 attribute of %2 element must have a value of %3 or %4.</source> <translation>Das Attribut %1 des Elements %2 kann nur einen der Werte %3 oder %4 haben.</translation> </message> <message> - <location line="+319"/> - <location line="+129"/> - <location line="+9"/> - <location line="+7"/> - <location line="+7"/> - <location line="+327"/> - <location line="+203"/> - <location line="+6"/> - <location line="+6"/> - <location line="+6"/> - <location line="+6"/> - <location line="+6"/> - <location line="+6"/> - <location line="+77"/> <source>%1 element must not have %2 and %3 attribute together.</source> <translation>Die Attribute %2 und %3 können nicht zusammen im Element %1 erscheinen.</translation> </message> <message> - <location line="-768"/> - <location line="+222"/> <source>Content of %1 attribute of %2 element must not be from namespace %3.</source> <translation>Der Inhalt des Attributs %1 des Elements %2 kann nicht vom Namensraum %3 stammen.</translation> </message> <message> - <location line="-215"/> - <location line="+222"/> <source>%1 attribute of %2 element must not be %3.</source> <translation>Das Attribut %1 des Elements %2 kann nicht %3 sein.</translation> </message> <message> - <location line="-64"/> <source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set.</source> <translation>Das Attribut %1 des Elements %2 muss den Wert %3 haben, da das Attribut %4 gesetzt ist.</translation> </message> <message> - <location line="+187"/> <source>Specifying use='prohibited' inside an attribute group has no effect.</source> <translation>Die Angabe von use='prohibited' in einer Attributgruppe hat keinerlei Auswirkungen.</translation> </message> <message> - <location line="+353"/> <source>%1 element must have either %2 or %3 attribute.</source> <translation>Das Element %1 muss eines der Attribute %2 oder %3 spezifizieren.</translation> </message> <message> - <location line="+554"/> <source>%1 element must have either %2 attribute or %3 or %4 as child element.</source> <translation>Das Element %1 muss entweder das Attribut %2 spezifizieren oder über eines der Unterelemente %3 oder %4 verfügen.</translation> </message> <message> - <location line="+55"/> <source>%1 element requires either %2 or %3 attribute.</source> <translation>Das Element %1 erfordert eines der Attribute %2 oder %3.</translation> </message> <message> - <location line="+19"/> <source>Text or entity references not allowed inside %1 element</source> <translation>Text- oder Entitätsreferenzen sind innerhalb eines %1-Elements nicht zulässig.</translation> </message> <message> - <location line="+41"/> - <location line="+112"/> <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source> <translation>Das Attribut %1 des Elements %2 muss %3, %4 oder eine Liste der URIs enthalten.</translation> </message> <message> - <location line="+126"/> <source>%1 element is not allowed in this context.</source> <translation>Das Element %1 ist in diesem Kontext nicht zulässig.</translation> </message> <message> - <location line="+53"/> <source>%1 attribute of %2 element has larger value than %3 attribute.</source> <translation>Der Wert des Attributs %1 des Elements %2 ist größer als der des Attributs %3.</translation> </message> <message> - <location line="+25"/> <source>Prefix of qualified name %1 is not defined.</source> <translation>Der Präfix des qualifizierten Namens %1 ist nicht definiert.</translation> </message> <message> - <location line="+65"/> - <location line="+61"/> <source>%1 attribute of %2 element must either contain %3 or the other values.</source> <translation>Der Wert des Attributs %1 des Elements %2 muss entweder %3 oder die anderen Werte enthalten.</translation> </message> <message> - <location line="+131"/> <source>Component with ID %1 has been defined previously.</source> <translation>Es wurde bereits eine Komponente mit der ID %1 definiert.</translation> </message> <message> - <location line="+17"/> <source>Element %1 already defined.</source> <translation>Das Element %1 ist bereits definiert.</translation> </message> <message> - <location line="+11"/> <source>Attribute %1 already defined.</source> <translation>Das Attribut %1 ist bereits definiert.</translation> </message> <message> - <location line="+15"/> <source>Type %1 already defined.</source> <translation>Der Typ %1 ist bereits definiert.</translation> </message> <message> - <location line="+23"/> <source>Attribute group %1 already defined.</source> <translation>Die Attributgruppe %1 ist bereits definiert.</translation> </message> <message> - <location line="+11"/> <source>Element group %1 already defined.</source> <translation>Die Elementgruppe %1 ist bereits definiert.</translation> </message> <message> - <location line="+11"/> <source>Notation %1 already defined.</source> <translation>Die Notation %1 ist bereits definiert.</translation> </message> <message> - <location line="+11"/> <source>Identity constraint %1 already defined.</source> <translation>Die Identitätseinschränkung %1 ist bereits definiert.</translation> </message> <message> - <location line="+11"/> <source>Duplicated facets in simple type %1.</source> <translation>Im einfachen Typ %1 kommen Facetten mehrfach vor.</translation> </message> <message> - <location filename="../src/xmlpatterns/schema/qxsdtypechecker.cpp" line="+233"/> - <location line="+7"/> - <location line="+21"/> <source>%1 is not valid according to %2.</source> <translation>%1 ist nach %2 ungültig.</translation> </message> <message> - <location line="+167"/> <source>String content does not match the length facet.</source> <translation>Der Zeichenketteninhalt entspricht nicht der Längenfacette.</translation> </message> <message> - <location line="+8"/> <source>String content does not match the minLength facet.</source> <translation>Der Zeichenketteninhalt entspricht nicht der Längenfacette (Minimumangabe).</translation> </message> <message> - <location line="+8"/> <source>String content does not match the maxLength facet.</source> <translation>Der Zeichenketteninhalt entspricht nicht der Längenfacette (Maximumangabe).</translation> </message> <message> - <location line="+18"/> <source>String content does not match pattern facet.</source> <translation>Der Zeichenketteninhalt entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+18"/> <source>String content is not listed in the enumeration facet.</source> <translation>Der Zeichenketteninhalt ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+17"/> <source>Signed integer content does not match the maxInclusive facet.</source> <translation>Der vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'maxInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Signed integer content does not match the maxExclusive facet.</source> <translation>Der vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'maxExclusive'.</translation> </message> <message> - <location line="+8"/> <source>Signed integer content does not match the minInclusive facet.</source> <translation>Der vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'minInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Signed integer content does not match the minExclusive facet.</source> <translation>Der vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'minExclusive'.</translation> </message> <message> - <location line="+18"/> <source>Signed integer content is not listed in the enumeration facet.</source> <translation>Der vorzeichenbehaftete Ganzzahlwert ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>Signed integer content does not match pattern facet.</source> <translation>Der vorzeichenbehaftete Ganzzahlwert entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+9"/> <source>Signed integer content does not match in the totalDigits facet.</source> <translation>Der vorzeichenbehaftete Ganzzahlwert entspricht nicht der Facette 'totalDigits'.</translation> </message> <message> - <location line="+17"/> <source>Unsigned integer content does not match the maxInclusive facet.</source> <translation>Der vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'maxInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Unsigned integer content does not match the maxExclusive facet.</source> <translation>Der vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'maxExclusive'.</translation> </message> <message> - <location line="+8"/> <source>Unsigned integer content does not match the minInclusive facet.</source> <translation>Der vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'minInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Unsigned integer content does not match the minExclusive facet.</source> <translation>Der vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'minExclusive'.</translation> </message> <message> - <location line="+18"/> <source>Unsigned integer content is not listed in the enumeration facet.</source> <translation>Der vorzeichenlose Ganzzahlwert ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>Unsigned integer content does not match pattern facet.</source> <translation>Der vorzeichenlose Ganzzahlwert entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+9"/> <source>Unsigned integer content does not match in the totalDigits facet.</source> <translation>Der vorzeichenlose Ganzzahlwert entspricht nicht der Facette 'totalDigits'.</translation> </message> <message> - <location line="+17"/> <source>Double content does not match the maxInclusive facet.</source> <translation>Die Gleitkommazahl entspricht nicht der Facette 'maxInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Double content does not match the maxExclusive facet.</source> <translation>Die Gleitkommazahl entspricht nicht der Facette 'maxExclusive'.</translation> </message> <message> - <location line="+8"/> <source>Double content does not match the minInclusive facet.</source> <translation>Die Gleitkommazahl entspricht nicht der Facette 'minInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Double content does not match the minExclusive facet.</source> <translation>Die Gleitkommazahl entspricht nicht der Facette 'minExclusive'.</translation> </message> <message> - <location line="+18"/> <source>Double content is not listed in the enumeration facet.</source> <translation>Die Gleitkommazahl ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>Double content does not match pattern facet.</source> <translation>Die Gleitkommazahl entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+18"/> <source>Decimal content does not match in the fractionDigits facet.</source> <translation>Die Dezimalzahl entspricht nicht der Facette 'fractionDigit'.</translation> </message> <message> - <location line="+9"/> <source>Decimal content does not match in the totalDigits facet.</source> <translation>Die Dezimalzahl entspricht nicht der Facette 'totalDigits'.</translation> </message> <message> - <location line="+14"/> <source>Date time content does not match the maxInclusive facet.</source> <translation>Die Datumsangabe entspricht nicht der Facette 'maxInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Date time content does not match the maxExclusive facet.</source> <translation>Die Datumsangabe entspricht nicht der Facette 'maxExclusive'.</translation> </message> <message> - <location line="+8"/> <source>Date time content does not match the minInclusive facet.</source> <translation>Die Datumsangabe entspricht nicht der Facette 'minInclusive'.</translation> </message> <message> - <location line="+8"/> <source>Date time content does not match the minExclusive facet.</source> <translation>Die Datumsangabe entspricht nicht der Facette 'minExclusive'.</translation> </message> <message> - <location line="+18"/> <source>Date time content is not listed in the enumeration facet.</source> <translation>Die Datumsangabe ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>Date time content does not match pattern facet.</source> <translation>Die Datumsangabe entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+15"/> <source>Duration content does not match the maxInclusive facet.</source> <translation>Die Angabe der Zeitdauer entspricht nicht der Facette 'maxInclusive'.</translation> </message> <message> - <location line="+9"/> <source>Duration content does not match the maxExclusive facet.</source> <translation>Die Angabe der Zeitdauer entspricht nicht der Facette 'maxExclusive'.</translation> </message> <message> - <location line="+9"/> <source>Duration content does not match the minInclusive facet.</source> <translation>Die Angabe der Zeitdauer entspricht nicht der Facette 'minInclusive'.</translation> </message> <message> - <location line="+9"/> <source>Duration content does not match the minExclusive facet.</source> <translation>Die Angabe der Zeitdauer entspricht nicht der Facette 'minExclusive'.</translation> </message> <message> - <location line="+18"/> <source>Duration content is not listed in the enumeration facet.</source> <translation>Die Angabe der Zeitdauer ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>Duration content does not match pattern facet.</source> <translation>Die Angabe der Zeitdauer entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+27"/> <source>Boolean content does not match pattern facet.</source> <translation>Der Boolesche Wert entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+17"/> <source>Binary content does not match the length facet.</source> <translation>Der binäre Inhalt entspricht nicht der Längenfacette.</translation> </message> <message> - <location line="+8"/> <source>Binary content does not match the minLength facet.</source> <translation>Der binäre Inhalt entspricht nicht der Facette 'minLength'.</translation> </message> <message> - <location line="+8"/> <source>Binary content does not match the maxLength facet.</source> <translation>Der binäre Inhalt entspricht nicht der Facette 'maxLength'.</translation> </message> <message> - <location line="+18"/> <source>Binary content is not listed in the enumeration facet.</source> <translation>Der binäre Inhalt ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+27"/> <source>Invalid QName content: %1.</source> <translation>Der Inhalt des qualifizierten Namens ist ungültig: %1.</translation> </message> <message> - <location line="+17"/> <source>QName content is not listed in the enumeration facet.</source> <translation>Der Inhalt des qualifizierten Namens ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>QName content does not match pattern facet.</source> <translation>Der Inhalt des qualifizierten Namens entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+36"/> <source>Notation content is not listed in the enumeration facet.</source> <translation>Der Inhalt der Notation ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+19"/> <source>List content does not match length facet.</source> <translation>Der Listeninhalt entspricht nicht der Längenfacette.</translation> </message> <message> - <location line="+7"/> <source>List content does not match minLength facet.</source> <translation>Der Listeninhalt entspricht nicht der Facette 'minLength'.</translation> </message> <message> - <location line="+7"/> <source>List content does not match maxLength facet.</source> <translation>Der Listeninhalt entspricht nicht der Facette 'maxLength'.</translation> </message> <message> - <location line="+90"/> <source>List content is not listed in the enumeration facet.</source> <translation>Der Listeninhalt ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>List content does not match pattern facet.</source> <translation>Der Listeninhalt entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+39"/> <source>Union content is not listed in the enumeration facet.</source> <translation>Der Inhalt der Vereinigung ist nicht in der Aufzählungsfacette enthalten.</translation> </message> <message> - <location line="+18"/> <source>Union content does not match pattern facet.</source> <translation>Der Inhalt der Vereinigung entspricht nicht der Suchmusterfacette.</translation> </message> <message> - <location line="+15"/> <source>Data of type %1 are not allowed to be empty.</source> <translation>Daten vom Typ %1 können nicht leer sein.</translation> </message> <message> - <location filename="../src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp" line="+160"/> <source>Element %1 is missing child element.</source> <translation>Beim Element %1 fehlt ein Unterelement.</translation> </message> <message> - <location line="+16"/> <source>There is one IDREF value with no corresponding ID: %1.</source> <translation>Es existiert ein IDREF-Wert, für den keine zugehörige ID vorhanden ist: %1.</translation> </message> <message> - <location line="+27"/> <source>Loaded schema file is invalid.</source> <translation>Das geladene Schema ist ungültig.</translation> </message> <message> - <location line="+16"/> <source>%1 contains invalid data.</source> <translation>%1 enthält ungültige Daten.</translation> </message> <message> - <location line="+13"/> <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source> <translation>xsi:schemaLocation namespace %1 wurde im Instanzdokument bereits spezifiziert.</translation> </message> <message> - <location line="+22"/> <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source> <translation>xsi:noNamespaceSchemaLocation kann nicht nach dem ersten Element oder Attribut ohne Namensraum erscheinen.</translation> </message> <message> - <location line="+18"/> <source>No schema defined for validation.</source> <translation>Es ist kein Schema für die Validierung definiert.</translation> </message> <message> - <location line="+10"/> <source>No definition for element %1 available.</source> <translation>Für das Element %1 ist keine Definition verfügbar.</translation> </message> <message> - <location line="+18"/> - <location line="+49"/> - <location line="+142"/> <source>Specified type %1 is not known to the schema.</source> <translation>Der angegebene Typ %1 ist im Schema nicht spezifiziert.</translation> </message> <message> - <location line="-176"/> <source>Element %1 is not defined in this scope.</source> <translation>Das Element %1 ist in diesem Bereich nicht definiert.</translation> </message> <message> - <location line="+43"/> <source>Declaration for element %1 does not exist.</source> <translation>Für das Element %1 ist keine Deklaration verfügbar.</translation> </message> <message> - <location line="+12"/> <source>Element %1 contains invalid content.</source> <translation>Das Element %1 enthält ungültigen Inhalt.</translation> </message> <message> - <location line="+73"/> <source>Element %1 is declared as abstract.</source> <translation>Das Element %1 ist als abstrakt deklariert.</translation> </message> <message> - <location line="+7"/> <source>Element %1 is not nillable.</source> <translation>Das Element %1 hat das Attribut 'nillable' nicht spezifiziert.</translation> </message> <message> - <location line="+8"/> <source>Attribute %1 contains invalid data: %2</source> <translation>Das Attribut %1 enthält ungültige Daten: %2</translation> </message> <message> - <location line="+8"/> <source>Element contains content although it is nillable.</source> <translation>Das Element hat Inhalt, obwohl es 'nillable' spezifiziert.</translation> </message> <message> - <location line="+6"/> <source>Fixed value constraint not allowed if element is nillable.</source> <translation>Eine Beschränkung auf einen festen Wert ist nicht zulässig, wenn das Element 'nillable' spezifiziert.</translation> </message> <message> - <location line="+230"/> <source>Element %1 cannot contain other elements, as it has a fixed content.</source> <translation>Das Element %1 kann keine anderen Element enthalten, da sein Inhalt festgelegt ist.</translation> </message> <message> - <location line="-198"/> <source>Specified type %1 is not validly substitutable with element type %2.</source> <translation>Der angebenene Typ %1 kann nicht durch den Elementtyp %2 substituiert werden.</translation> </message> <message> - <location line="+23"/> <source>Complex type %1 is not allowed to be abstract.</source> <translation>Der komplexe Typ %1 kann nicht abstrakt sein.</translation> </message> <message> - <location line="+21"/> <source>Element %1 contains not allowed attributes.</source> <translation>Das Element %1 enthält unzulässige Attribute.</translation> </message> <message> - <location line="+6"/> - <location line="+97"/> <source>Element %1 contains not allowed child element.</source> <translation>Das Element %1 enthält ein unzulässiges Unterelement.</translation> </message> <message> - <location line="-76"/> - <location line="+93"/> <source>Content of element %1 does not match its type definition: %2.</source> <translation>Der Inhalt des Elements %1 entspricht nicht seiner Typdefinition: %2.</translation> </message> <message> - <location line="-85"/> - <location line="+92"/> - <location line="+41"/> <source>Content of element %1 does not match defined value constraint.</source> <translation>Der Inhalt des Elements %1 entspricht nicht der definierten Einschränkung des Werts.</translation> </message> <message> - <location line="-73"/> <source>Element %1 contains not allowed child content.</source> <translation>Das Element %1 enthält unzulässigen Unterinhalt.</translation> </message> <message> - <location line="+41"/> <source>Element %1 contains not allowed text content.</source> <translation>Das Element %1 enthält unzulässigen Textinhalt.</translation> </message> <message> - <location line="+61"/> <source>Element %1 is missing required attribute %2.</source> <translation>Bei dem Element %1 fehlt ein erforderliches Attribut %2.</translation> </message> <message> - <location line="+29"/> <source>Attribute %1 does not match the attribute wildcard.</source> <translation>Das Attribut %1 entspricht nicht dem Attributssuchmuster.</translation> </message> <message> - <location line="+9"/> <source>Declaration for attribute %1 does not exist.</source> <translation>Für das Attribut %1 ist keine Deklaration verfügbar.</translation> </message> <message> - <location line="+6"/> <source>Element %1 contains two attributes of type %2.</source> <translation>Das Element %1 enthält zwei Attribute des Typs %2.</translation> </message> <message> - <location line="+11"/> <source>Attribute %1 contains invalid content.</source> <translation>Das Attribut %1 enthält ungültigen Inhalt.</translation> </message> <message> - <location line="+7"/> <source>Element %1 contains unknown attribute %2.</source> <translation>Das Element %1 enthält ein unbekanntes Attribut %2.</translation> </message> <message> - <location line="+40"/> - <location line="+46"/> <source>Content of attribute %1 does not match its type definition: %2.</source> <translation>Der Inhalt des Attributs %1 entspricht nicht seiner Typdefinition: %2.</translation> </message> <message> - <location line="-38"/> - <location line="+46"/> <source>Content of attribute %1 does not match defined value constraint.</source> <translation>Der Inhalt des Attributs %1 entspricht nicht der definierten Einschränkung des Werts.</translation> </message> <message> - <location line="+88"/> <source>Non-unique value found for constraint %1.</source> <translation>Für die Einschränkung %1 wurde ein nicht eindeutiger Wert gefunden.</translation> </message> <message> - <location line="+20"/> <source>Key constraint %1 contains absent fields.</source> <translation>Die Einschränkung des Schlüssels %1 enthält nicht vorhandene Felder.</translation> </message> <message> - <location line="+18"/> <source>Key constraint %1 contains references nillable element %2.</source> <translation>Die Einschränkung des Schlüssels %1 verweist auf das Element %2, was 'nillable' spezifiziert.</translation> </message> <message> - <location line="+40"/> <source>No referenced value found for key reference %1.</source> <translation>Der referenzierte Wert der Schlüsselreferenz %1 konnte nicht gefunden werden.</translation> </message> <message> - <location line="+64"/> <source>More than one value found for field %1.</source> <translation>Für das Feld %1 wurden mehrere Werte gefunden.</translation> </message> <message> - <location line="+20"/> <source>Field %1 has no simple type.</source> <translation>Das Feld %1 hat keinen einfachen Typ.</translation> </message> <message> - <location line="+73"/> <source>ID value '%1' is not unique.</source> <translation>Der ID-Wert '%1' ist nicht eindeutig.</translation> </message> <message> - <location line="+11"/> <source>'%1' attribute contains invalid QName content: %2.</source> <translation>Das Attribut '%1' enthält einen ungültigen qualifizierten Namen: %2.</translation> </message> diff --git a/translations/qt_help_de.ts b/translations/qt_help_de.ts index c7a8103..1f0cf32 100644 --- a/translations/qt_help_de.ts +++ b/translations/qt_help_de.ts @@ -4,106 +4,92 @@ <context> <name>QCLuceneResultWidget</name> <message> - <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+110"/> <source>Search Results</source> <translation>Suchergebnisse</translation> </message> <message> - <location line="+7"/> <source>Note:</source> <translation>Achtung:</translation> </message> <message> - <location line="+1"/> <source>The search results may not be complete since the documentation is still being indexed!</source> <translation>Es können nicht alle möglichen Ergebnisse angezeigt werden, da die Dokumentation noch indiziert wird.</translation> </message> <message> - <location line="+11"/> <source>Your search did not match any documents.</source> <translation>Es wurden keine mit Ihrer Suche übereinstimmenden Dokumente gefunden.</translation> </message> <message> - <location line="+4"/> <source>(The reason for this might be that the documentation is still being indexed.)</source> <translation>(Ein Grund dafür könnte sein, das die Dokumentation noch nicht vollständig indiziert ist.)</translation> </message> </context> <context> + <name>QHelp</name> + <message> + <source>Untitled</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>QHelpCollectionHandler</name> <message> - <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/> <source>The collection file '%1' is not set up yet!</source> <translation>Die Katalogdatei '%1' ist noch nicht eingerichtet.</translation> </message> <message> - <location line="+23"/> <source>Cannot load sqlite database driver!</source> <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden.</translation> </message> <message> - <location line="+11"/> - <location line="+52"/> <source>Cannot open collection file: %1</source> <translation>Katalogdatei kann nicht geöffnet werden: %1</translation> </message> <message> - <location line="-40"/> <source>Cannot create tables in file %1!</source> <translation>In Datei %1 können keine Tabellen angelegt werden.</translation> </message> <message> - <location line="+16"/> <source>The collection file '%1' already exists!</source> <translation>Die Katalogdatei '%1' existiert bereits.</translation> </message> <message> - <location line="+151"/> <source>Unknown filter '%1'!</source> <translation>Unbekannter Filter '%1'.</translation> </message> <message> - <location line="+103"/> <source>Invalid documentation file '%1'!</source> <translation>Ungültige Dokumentationsdatei '%1'.</translation> </message> <message> - <location line="+167"/> <source>Cannot register namespace '%1'!</source> <translation>Der Namensraum '%1' kann nicht registriert werden.</translation> </message> <message> - <location line="+24"/> <source>Cannot open database '%1' to optimize!</source> <translation>Die Datenbank '%1' kann nicht zur Optimierung geöffnet werden.</translation> </message> <message> - <location line="-439"/> <source>Cannot create directory: %1</source> <translation>Das Verzeichnis kann nicht angelegt werden: %1</translation> </message> <message> - <location line="+26"/> <source>Cannot copy collection file: %1</source> <translation>Die Katalogdatei kann nicht kopiert werden: %1</translation> </message> <message> - <location line="+172"/> <source>Cannot register filter %1!</source> <translation>Der Filter kann nicht registriert werden: %1</translation> </message> <message> - <location line="+44"/> <source>Cannot open documentation file %1!</source> <translation>Die Dokumentationsdatei kann nicht geöffnet werden: %1</translation> </message> <message> - <location line="+40"/> <source>The namespace %1 was not registered!</source> <translation>Der Namensraum %1 wurde nicht registriert.</translation> </message> <message> - <location line="+120"/> <source>Namespace %1 already exists!</source> <translation>Der Namensraum %1 existiert bereits.</translation> </message> @@ -111,7 +97,6 @@ <context> <name>QHelpDBReader</name> <message> - <location filename="../tools/assistant/lib/qhelpdbreader.cpp" line="+98"/> <source>Cannot open database '%1' '%2': %3</source> <extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string</extracomment> <translation>Kann Datenbank nicht öffnen: '%1' '%2': %3</translation> @@ -120,12 +105,10 @@ <context> <name>QHelpEngineCore</name> <message> - <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+122"/> <source>Cannot open documentation file %1: %2!</source> <translation>Die Dokumentationsdatei %1 kann nicht geöffnet werden: %2!</translation> </message> <message> - <location line="+404"/> <source>The specified namespace does not exist!</source> <translation>Der angegebene Namensraum existiert nicht.</translation> </message> @@ -133,132 +116,106 @@ <context> <name>QHelpGenerator</name> <message> - <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+158"/> <source>Invalid help data!</source> <translation>Ungültige Hilfe-Daten.</translation> </message> <message> - <location line="+6"/> <source>No output file name specified!</source> <translation>Für die Ausgabe-Datei wurde kein Name angegeben.</translation> </message> <message> - <location line="+14"/> <source>Building up file structure...</source> <translation>Dateistruktur wird erzeugt...</translation> </message> <message> - <location line="-7"/> <source>The file %1 cannot be overwritten!</source> <translation>Die Datei %1 kann nicht überschrieben werden.</translation> </message> <message> - <location line="+18"/> <source>Cannot open data base file %1!</source> <translation>Die Datenbank-Datei %1 kann nicht geöffnet werden.</translation> </message> <message> - <location line="+14"/> <source>Cannot register namespace %1!</source> <translation>Der Namensraum %1 kann nicht registriert werden.</translation> </message> <message> - <location line="+6"/> <source>Insert custom filters...</source> <translation>Benutzerdefinierte Filter einfügen...</translation> </message> <message> - <location line="+12"/> <source>Insert help data for filter section (%1 of %2)...</source> <translation>Hilfe-Daten für Filter-Sektion (%1 von %2) einfügen...</translation> </message> <message> - <location line="+18"/> <source>Documentation successfully generated.</source> <translation>Dokumentation erfolgreich generiert.</translation> </message> <message> - <location line="+76"/> <source>Some tables already exist!</source> <translation>Einige Tabellen existieren bereits.</translation> </message> <message> - <location line="+61"/> <source>Cannot create tables!</source> <translation>Tabellen können nicht erstellt werden.</translation> </message> <message> - <location line="+86"/> <source>Cannot register virtual folder!</source> <translation>Virtuelles Verzeichnis nicht registriert werden.</translation> </message> <message> - <location line="+10"/> <source>Insert files...</source> <translation>Dateien einfügen...</translation> </message> <message> - <location line="+42"/> <source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source> <translation>Die referenzierte Datei %1 muss sich im Verzeichnis %2 oder in einem Unterverzeichnis davon befinden. Sie wird übersprungen.</translation> </message> <message> - <location line="+7"/> <source>The file %1 does not exist! Skipping it.</source> <translation>Die Datei %1 existiert nicht. Wird übersprungen.</translation> </message> <message> - <location line="+6"/> <source>Cannot open file %1! Skipping it.</source> <translation>Die Datei %1 kann nicht geöffnet werden. Wird übersprungen.</translation> </message> <message> - <location line="+133"/> <source>The filter %1 is already registered!</source> <translation>Der Filter %1 ist bereits registriert.</translation> </message> <message> - <location line="+5"/> <source>Cannot register filter %1!</source> <translation>Der Filter %1 kann nicht registriert werden.</translation> </message> <message> - <location line="+24"/> <source>Insert indices...</source> <translation>Indizes einfügen...</translation> </message> <message> - <location line="+91"/> <source>Insert contents...</source> <translation>Inhalt einfügen...</translation> </message> <message> - <location line="+8"/> <source>Cannot insert contents!</source> <translation>Inhalt kann nicht eingefügt werden.</translation> </message> <message> - <location line="+12"/> <source>Cannot register contents!</source> <translation>Inhalt kann nicht registriert werden.</translation> </message> <message> - <location line="+56"/> <source>File '%1' does not exist.</source> <translation>Die Datei '%1' existiert nicht.</translation> </message> <message> - <location line="+19"/> <source>File '%1' cannot be opened.</source> <translation>Die Datei '%1' kann nicht geöffnet werden.</translation> </message> <message> - <location line="+19"/> <source>File '%1' contains an invalid link to file '%2'</source> <translation>Die Datei '%1' enthält einen ungültigen Verweis auf die Datei '%2'</translation> </message> <message> - <location line="+9"/> <source>Invalid links in HTML files.</source> <translation>Es wurden ungültige Verweise in HTML-Dateien gefunden.</translation> </message> @@ -266,47 +223,38 @@ <context> <name>QHelpProject</name> <message> - <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+88"/> <source>Unknown token.</source> <translation>Unbekanntes Token.</translation> </message> <message> - <location line="+13"/> <source>Unknown token. Expected "QtHelpProject"!</source> <translation>Unbekanntes Token. "QtHelpProject" erwartet.</translation> </message> <message> - <location line="+6"/> <source>Error in line %1: %2</source> <translation>Fehler in Zeile %1: %2</translation> </message> <message> - <location line="+14"/> <source>Virtual folder has invalid syntax.</source> <translation>Ungültige Syntax bei Angabe des virtuellen Verzeichnisses.</translation> </message> <message> - <location line="+5"/> <source>Namespace has invalid syntax.</source> <translation>Ungültige Syntax der Namensraum-Angabe.</translation> </message> <message> - <location line="+19"/> <source>Missing namespace in QtHelpProject.</source> <translation>Fehlender Namensraum in QtHelpProject.</translation> </message> <message> - <location line="+3"/> <source>Missing virtual folder in QtHelpProject</source> <translation>Fehlendes virtuelles Verzeichnis in QtHelpProject.</translation> </message> <message> - <location line="+89"/> <source>Missing attribute in keyword at line %1.</source> <translation>Fehlendes Attribut in Schlagwort in Zeile %1.</translation> </message> <message> - <location line="+141"/> <source>The input file %1 could not be opened!</source> <translation>Die Eingabe-Datei %1 kann nicht geöffnet werden.</translation> </message> @@ -314,52 +262,42 @@ <context> <name>QHelpSearchQueryWidget</name> <message> - <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+124"/> <source>Search for:</source> <translation>Suche nach:</translation> </message> <message> - <location line="+1"/> <source>Previous search</source> <translation>Vorige Suche</translation> </message> <message> - <location line="+1"/> <source>Next search</source> <translation>Nächste Suche</translation> </message> <message> - <location line="+1"/> <source>Search</source> <translation>Suche</translation> </message> <message> - <location line="+2"/> <source>Advanced search</source> <translation>Erweiterte Suche</translation> </message> <message> - <location line="+1"/> <source>words <B>similar</B> to:</source> <translation>Worte <B>ähnlich</B> zu:</translation> </message> <message> - <location line="+1"/> <source><B>without</B> the words:</source> <translation><B>ohne</B> die Wörter:</translation> </message> <message> - <location line="+1"/> <source>with <B>exact phrase</B>:</source> <translation>mit der <B>genauen Wortgruppe</B>:</translation> </message> <message> - <location line="+1"/> <source>with <B>all</B> of the words:</source> <translation>mit <B>allen</B> Wörtern:</translation> </message> <message> - <location line="+1"/> <source>with <B>at least one</B> of the words:</source> <translation>mit <B>irgendeinem</B> der Wörter:</translation> </message> @@ -367,7 +305,6 @@ <context> <name>QHelpSearchResultWidget</name> <message numerus="yes"> - <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+174"/> <source>%1 - %2 of %n Hits</source> <translation> <numerusform>%1 - %2 - Ein Treffer</numerusform> @@ -375,7 +312,6 @@ </translation> </message> <message> - <location line="+61"/> <source>0 - 0 of 0 Hits</source> <translation>0 - 0 von 0 Treffern</translation> </message> -- cgit v0.12 From c122bd5c6da90d801188131492d015040f865d18 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 5 Aug 2010 12:09:01 +0200 Subject: qdoc: Removed three unused config variables. These no longer do anything in qdocconf files: online = false offline = false creator = true (cherry picked from commit 7de8a0c487ce6a7f13c2028e93648807ef7d8e8b) --- tools/qdoc3/test/assistant.qdocconf | 3 --- tools/qdoc3/test/designer.qdocconf | 3 --- tools/qdoc3/test/linguist.qdocconf | 3 --- tools/qdoc3/test/qdeclarative.qdocconf | 3 --- tools/qdoc3/test/qmake.qdocconf | 3 --- tools/qdoc3/test/qt-api-only.qdocconf | 3 --- tools/qdoc3/test/qt-build-docs.qdocconf | 3 --- tools/qdoc3/test/qt.qdocconf | 3 --- 8 files changed, 24 deletions(-) diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index 119a676..8cf5722 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -7,9 +7,6 @@ include(qt-defines.qdocconf) project = Qt Assistant description = Qt Assistant Manual url = http://qt.nokia.com/doc/4.7 -online = false -offline = false -creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf index 0595417..b1f37dc 100644 --- a/tools/qdoc3/test/designer.qdocconf +++ b/tools/qdoc3/test/designer.qdocconf @@ -7,9 +7,6 @@ include(qt-defines.qdocconf) project = Qt Designer description = Qt Designer Manual url = http://qt.nokia.com/doc/4.7 -online = false -offline = false -creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf index 7dd57fb..26fb55c 100644 --- a/tools/qdoc3/test/linguist.qdocconf +++ b/tools/qdoc3/test/linguist.qdocconf @@ -7,9 +7,6 @@ include(qt-defines.qdocconf) project = Qt Linguist description = Qt Linguist Manual url = http://qt.nokia.com/doc/4.7 -online = false -offline = false -creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf index 7628519..80bca29 100644 --- a/tools/qdoc3/test/qdeclarative.qdocconf +++ b/tools/qdoc3/test/qdeclarative.qdocconf @@ -8,9 +8,6 @@ project = Qml description = Qml Reference Documentation url = http://qt.nokia.com/doc/4.7/ qmlonly = true -online = false -offline = false -creator = true edition.Console.modules = QtCore QtDBus QtNetwork QtScript QtSql QtXml \ QtXmlPatterns QtTest diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf index c666288..f069129 100644 --- a/tools/qdoc3/test/qmake.qdocconf +++ b/tools/qdoc3/test/qmake.qdocconf @@ -7,9 +7,6 @@ include(qt-defines.qdocconf) project = QMake description = QMake Manual url = http://qt.nokia.com/doc/4.7 -online = false -offline = false -creator = true indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index diff --git a/tools/qdoc3/test/qt-api-only.qdocconf b/tools/qdoc3/test/qt-api-only.qdocconf index 7387810..cdd7a7c 100644 --- a/tools/qdoc3/test/qt-api-only.qdocconf +++ b/tools/qdoc3/test/qt-api-only.qdocconf @@ -5,9 +5,6 @@ include(qt-build-docs.qdocconf) # qmake.qdocconf). url = ./ -online = false -offline = false -creator = true # Ensures that the documentation for the tools is not included in the generated # .qhp file. diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf index 415457e..bb47b57 100644 --- a/tools/qdoc3/test/qt-build-docs.qdocconf +++ b/tools/qdoc3/test/qt-build-docs.qdocconf @@ -7,9 +7,6 @@ include(qt-defines.qdocconf) project = Qt description = Qt Reference Documentation url = http://qt.nokia.com/doc/4.7 -online = false -offline = false -creator = true sourceencoding = UTF-8 outputencoding = UTF-8 diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf index a5e6578..f78bd38 100644 --- a/tools/qdoc3/test/qt.qdocconf +++ b/tools/qdoc3/test/qt.qdocconf @@ -9,9 +9,6 @@ versionsym = version = %VERSION% description = Qt Reference Documentation url = http://qt.nokia.com/doc/4.7 -online = true -offline = false -creator = false sourceencoding = UTF-8 outputencoding = UTF-8 -- cgit v0.12 From f41231f6a0cec06cdc8653cb424ca0d066469f12 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Tue, 3 Aug 2010 09:49:14 +0200 Subject: Made changes to qdoc to allow it to accept a "style level" flag (cherry picked from commit a53b98f9269e6ee0b524fe7477e8fb46f189f9d3) --- tools/qdoc3/config.h | 1 + tools/qdoc3/main.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/tools/qdoc3/config.h b/tools/qdoc3/config.h index b087b1c..7665f1a 100644 --- a/tools/qdoc3/config.h +++ b/tools/qdoc3/config.h @@ -119,6 +119,7 @@ class Config }; #define CONFIG_ALIAS "alias" +#define CONFIG_APPLICATION "application" #define CONFIG_BASE "base" // ### don't document for now #define CONFIG_CODEINDENT "codeindent" #define CONFIG_DEFINES "defines" diff --git a/tools/qdoc3/main.cpp b/tools/qdoc3/main.cpp index ba3e387..47a4b67 100644 --- a/tools/qdoc3/main.cpp +++ b/tools/qdoc3/main.cpp @@ -105,6 +105,8 @@ static bool showInternal = false; static bool obsoleteLinks = false; static QStringList defines; static QHash<QString, Tree *> trees; +static QString application = "base"; //application +static bool applicationArg = 0; //if 1, then the argument is provided and it will override the qdocconf file /*! Find the Tree for language \a lang and return a pointer to it. @@ -192,6 +194,38 @@ static void processQdocconfFile(const QString &fileName) config.load(fileName); /* + Set the application to which qdoc will create the output. + The three applications are: + base: simple, basic html output. Best suited for offline viewing + creator: additional formatting. + online: full-featured online version with search and links to Qt topics + + Note: This will override the offline, online, creator defines. + */ + if(applicationArg == false){ + + QString appConfig = config.getString(CONFIG_APPLICATION); + if (!appConfig.isEmpty()){ + application = appConfig; + } + } + if(application == "online"){ + config.setStringList(CONFIG_ONLINE, QStringList("true")); + config.setStringList(CONFIG_OFFLINE, QStringList("false")); + config.setStringList(CONFIG_CREATOR, QStringList("false")); + } + else if(application == "creator"){ + config.setStringList(CONFIG_ONLINE, QStringList("false")); + config.setStringList(CONFIG_OFFLINE, QStringList("true")); + config.setStringList(CONFIG_CREATOR, QStringList("false")); + } + else if(application == "base"){ + config.setStringList(CONFIG_ONLINE, QStringList("false")); + config.setStringList(CONFIG_OFFLINE, QStringList("false")); + config.setStringList(CONFIG_CREATOR, QStringList("true")); + } + + /* Add the defines to the configuration variables. */ QStringList defs = defines + config.getStringList(CONFIG_DEFINES); @@ -462,12 +496,24 @@ int main(int argc, char **argv) else if (opt == "-obsoletelinks") { obsoleteLinks = true; } + else if (opt == "-base") { + application = "base"; + applicationArg = true; + } + else if (opt == "-creator") { + application = "creator"; + applicationArg = true; + } + else if (opt == "-online") { + application = "online"; + applicationArg = true; + } else { qdocFiles.append(opt); } } - if (qdocFiles.isEmpty()) { + if (qdocFiles.isEmpty()) { printHelp(); return EXIT_FAILURE; } -- cgit v0.12 From 2e95910564bab2fb1b298dac253f790668a2cf0d Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 5 Aug 2010 11:51:23 +0200 Subject: qdoc: Cleaned up the application option specification and use. The flags allowed on the command line are now: -online (default), -base, -assistant (same as -base), and -creator. If you don't specify one of these, you see a warning in the error output telling you that it didn't find an application flag and that it generated online docs by defualt. (cherry picked from commit d4dceca5dcd9252e09a421b65b318a7178049cd1) --- tools/qdoc3/config.h | 4 +- tools/qdoc3/ditaxmlgenerator.cpp | 1 - tools/qdoc3/htmlgenerator.cpp | 127 +++++++++++++++++++-------------------- tools/qdoc3/htmlgenerator.h | 9 ++- tools/qdoc3/main.cpp | 70 +++++++++------------ 5 files changed, 95 insertions(+), 116 deletions(-) diff --git a/tools/qdoc3/config.h b/tools/qdoc3/config.h index 7665f1a..335a0d6 100644 --- a/tools/qdoc3/config.h +++ b/tools/qdoc3/config.h @@ -143,9 +143,7 @@ class Config #define CONFIG_MACRO "macro" #define CONFIG_NATURALLANGUAGE "naturallanguage" #define CONFIG_OBSOLETELINKS "obsoletelinks" -#define CONFIG_ONLINE "online" -#define CONFIG_OFFLINE "offline" -#define CONFIG_CREATOR "creator" +#define CONFIG_APPLICATION "application" #define CONFIG_OUTPUTDIR "outputdir" #define CONFIG_OUTPUTENCODING "outputencoding" #define CONFIG_OUTPUTLANGUAGE "outputlanguage" diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index 4789c67..816ab9f 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -440,7 +440,6 @@ void DitaXmlGenerator::initializeGenerator(const Config &config) DITAXMLGENERATOR_GENERATEMACREFS); project = config.getString(CONFIG_PROJECT); - offlineDocs = !config.getBool(CONFIG_ONLINE); projectDescription = config.getString(CONFIG_DESCRIPTION); if (projectDescription.isEmpty() && !project.isEmpty()) projectDescription = project + " Reference Documentation"; diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 34c2565..b0c3150 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -219,9 +219,7 @@ HtmlGenerator::HtmlGenerator() inTableHeader(false), numTableRows(0), threeColumnEnumValueTable(true), - offlineDocs(false), - onlineDocs(false), - creatorDocs(true), + application(Online), funcLeftParen("\\S(\\()"), myTree(0), slow(false), @@ -290,11 +288,17 @@ void HtmlGenerator::initializeGenerator(const Config &config) project = config.getString(CONFIG_PROJECT); - onlineDocs = config.getBool(CONFIG_ONLINE); - - offlineDocs = config.getBool(CONFIG_OFFLINE); - - creatorDocs = config.getBool(CONFIG_CREATOR); + QString app = config.getString(CONFIG_APPLICATION); + if (app == "online") + application = Online; + else if (app == "creator") + application = Creator; + else if (app == "assistant") + application = Assistant; + else if (app == "base") + application = Assistant; + else + application = Online; projectDescription = config.getString(CONFIG_DESCRIPTION); if (projectDescription.isEmpty() && !project.isEmpty()) @@ -1811,9 +1815,8 @@ void HtmlGenerator::generateHeader(const QString& title, // Setting some additional style sheet related details depending on configuration (e.g. online/offline) - - if(onlineDocs==true) // onlineDocs is for the web - { + switch (application) { + case Online: // Browser spec styles out() << " <!--[if IE]>\n"; out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; @@ -1832,22 +1835,19 @@ void HtmlGenerator::generateHeader(const QString& title, out() << "</head>\n"; // CheckEmptyAndLoadList activating search out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; - } - else if (offlineDocs == true) // offlineDocs is for ??? - { + break; + case Assistant: out() << "</head>\n"; - out() << "<body class=\"offline \">\n"; // offline - } - else if (creatorDocs == true) // creatorDocs is for Assistant/Creator - { + out() << "<body class=\"offline \">\n"; + break; + case Creator: out() << "</head>\n"; out() << "<body class=\"offline narrow creator\">\n"; // offline narrow - } - // default -- not used except if one forgets to set any of the above settings to true - else - { + break; + default: out() << "</head>\n"; - out() << "<body>\n"; + out() << "<body>\n"; + break; } #ifdef GENERATE_MAC_REFS @@ -1855,31 +1855,27 @@ void HtmlGenerator::generateHeader(const QString& title, generateMacRef(node, marker); #endif - - if(onlineDocs==true) // onlineDocs is for the web - { + switch (application) { + case Online: out() << QString(postHeader).replace("\\" + COMMAND_VERSION, myTree->version()); generateBreadCrumbs(title,node,marker); out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); - } - else if (offlineDocs == true) // offlineDocs is for ??? - { + break; + case Assistant: out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); generateBreadCrumbs(title,node,marker); - out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); - } - else if (creatorDocs == true) // creatorDocs is for Assistant/Creator - { + out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + break; + case Creator: out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); generateBreadCrumbs(title,node,marker); out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); - } - // default -- not used except if one forgets to set any of the above settings to true - else - { + break; + default: // default -- not used except if one forgets to set any of the above settings to true out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); generateBreadCrumbs(title,node,marker); - out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); + break; } navigationLinks.clear(); @@ -2024,34 +2020,33 @@ void HtmlGenerator::generateFooter(const Node *node) out() << QString(footer).replace("\\" + COMMAND_VERSION, myTree->version()) << QString(address).replace("\\" + COMMAND_VERSION, myTree->version()); - - if (onlineDocs == true) - { - out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; - out() << " <!-- <script type=\"text/javascript\">\n"; - out() << " var _gaq = _gaq || [];\n"; - out() << " _gaq.push(['_setAccount', 'UA-4457116-5']);\n"; - out() << " _gaq.push(['_trackPageview']);\n"; - out() << " (function() {\n"; - out() << " var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n"; - out() << " ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n"; - out() << " var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n"; - out() << " })();\n"; - out() << " </script> -->\n"; - out() << "</body>\n"; - } - else if (offlineDocs == true) - { - out() << "</body>\n"; - } - else if (creatorDocs == true) - { - out() << "</body>\n"; - } - else - { - out() << "</body>\n"; - } + + switch (application) { + case Online: + out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; + out() << " <!-- <script type=\"text/javascript\">\n"; + out() << " var _gaq = _gaq || [];\n"; + out() << " _gaq.push(['_setAccount', 'UA-4457116-5']);\n"; + out() << " _gaq.push(['_trackPageview']);\n"; + out() << " (function() {\n"; + out() << " var ga = document.createElement('script'); "; + out() << "ga.type = 'text/javascript'; ga.async = true;\n"; + out() << " ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + "; + out() << "'.google-analytics.com/ga.js';\n"; + out() << " var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n"; + out() << " })();\n"; + out() << " </script> -->\n"; + out() << "</body>\n"; + break; + case Assistant: + out() << "</body>\n"; + break; + case Creator: + out() << "</body>\n"; + break; + default: + out() << "</body>\n"; + } out() << "</html>\n"; } diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index d92c349..ec79896 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -95,6 +95,11 @@ class HtmlGenerator : public PageGenerator LastSinceType }; + enum Application { + Online, + Assistant, + Creator}; + public: HtmlGenerator(); ~HtmlGenerator(); @@ -294,9 +299,7 @@ class HtmlGenerator : public PageGenerator bool inTableHeader; int numTableRows; bool threeColumnEnumValueTable; - bool onlineDocs; - bool offlineDocs; - bool creatorDocs; + Application application; QString link; QStringList sectionNumber; QRegExp funcLeftParen; diff --git a/tools/qdoc3/main.cpp b/tools/qdoc3/main.cpp index 47a4b67..38b76a4 100644 --- a/tools/qdoc3/main.cpp +++ b/tools/qdoc3/main.cpp @@ -105,8 +105,7 @@ static bool showInternal = false; static bool obsoleteLinks = false; static QStringList defines; static QHash<QString, Tree *> trees; -static QString application = "base"; //application -static bool applicationArg = 0; //if 1, then the argument is provided and it will override the qdocconf file +static QString appArg; // application /*! Find the Tree for language \a lang and return a pointer to it. @@ -194,36 +193,25 @@ static void processQdocconfFile(const QString &fileName) config.load(fileName); /* - Set the application to which qdoc will create the output. - The three applications are: - base: simple, basic html output. Best suited for offline viewing - creator: additional formatting. - online: full-featured online version with search and links to Qt topics - - Note: This will override the offline, online, creator defines. + Set the application to which qdoc will create the output. + The three applications are: + + base or assistant: simple, basic html output + for offline viewing in the Assistant application. + + creator: additional formatting for viewing in + the Creator application. + + online: full-featured online version with search and + links to Qt topics */ - if(applicationArg == false){ - - QString appConfig = config.getString(CONFIG_APPLICATION); - if (!appConfig.isEmpty()){ - application = appConfig; - } - } - if(application == "online"){ - config.setStringList(CONFIG_ONLINE, QStringList("true")); - config.setStringList(CONFIG_OFFLINE, QStringList("false")); - config.setStringList(CONFIG_CREATOR, QStringList("false")); - } - else if(application == "creator"){ - config.setStringList(CONFIG_ONLINE, QStringList("false")); - config.setStringList(CONFIG_OFFLINE, QStringList("true")); - config.setStringList(CONFIG_CREATOR, QStringList("false")); - } - else if(application == "base"){ - config.setStringList(CONFIG_ONLINE, QStringList("false")); - config.setStringList(CONFIG_OFFLINE, QStringList("false")); - config.setStringList(CONFIG_CREATOR, QStringList("true")); + if (appArg.isEmpty()) { + qDebug() << "Warning: Application flag not specified on" + << "command line. Options are -assistant, -creator," + << "and -online (default)."; + appArg = "online"; } + config.setStringList(CONFIG_APPLICATION, QStringList(appArg)); /* Add the defines to the configuration variables. @@ -496,18 +484,14 @@ int main(int argc, char **argv) else if (opt == "-obsoletelinks") { obsoleteLinks = true; } - else if (opt == "-base") { - application = "base"; - applicationArg = true; - } - else if (opt == "-creator") { - application = "creator"; - applicationArg = true; - } - else if (opt == "-online") { - application = "online"; - applicationArg = true; - } + else if (opt == "-base") + appArg = "base"; + else if (opt == "-assistant") + appArg = "assistant"; + else if (opt == "-creator") + appArg = "creator"; + else if (opt == "-online") + appArg = "online"; else { qdocFiles.append(opt); } @@ -522,7 +506,7 @@ int main(int argc, char **argv) Main loop. */ foreach (QString qf, qdocFiles) { - qDebug() << "PROCESSING:" << qf; + //qDebug() << "PROCESSING:" << qf; processQdocconfFile(qf); } -- cgit v0.12 From be79edc572527b33197b7258f5614a8ee9ac3679 Mon Sep 17 00:00:00 2001 From: Jerome Pasion <jerome.pasion@nokia.com> Date: Mon, 9 Aug 2010 10:14:27 +0200 Subject: Fixed missing link tag in declarativeui.qdoc. Fix for QTBUG-12750 (cherry picked from commit ac355872573c7131e4b783cabe00c5656dc668af) --- doc/src/declarative/declarativeui.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 1fc9d69..b25d000 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -43,7 +43,7 @@ C++ module, you can load and interact with QML files from your Qt application. QML provides mechanisms to declaratively build an object tree using \l {QML Elements}{QML elements}. QML improves the integration between -{http://www.ecma-international.org/publications/standards/Ecma-262.htm}{JavaScript} +\l {http://www.ecma-international.org/publications/standards/Ecma-262.htm}{JavaScript} and Qt's existing QObject based type system, adds support for automatic \l {Property Binding}{property bindings} and provides \l {Network Transparency}{network transparency} -- cgit v0.12 From da0303d1ba6acc58f60c7448fefeffc88e8e331b Mon Sep 17 00:00:00 2001 From: Justin McPherson <justin.mcpherson@nokia.com> Date: Thu, 12 Aug 2010 16:32:11 +1000 Subject: QAudioOutput(ALSA); Fix check for available devices. ALSA can return a list of one empty item when no devices are available. Task-number: QTBUG-12690 Reviewed-by: Andrew den Exter --- src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp | 31 +++++++++++++----------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index f663dd2..633b309 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -431,21 +431,24 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) while (*n != NULL) { name = snd_device_name_get_hint(*n, "NAME"); - descr = snd_device_name_get_hint(*n, "DESC"); - io = snd_device_name_get_hint(*n, "IOID"); - if((name != NULL) && (descr != NULL) && ((io == NULL) || (io == filter))) { - QString deviceName = QLatin1String(name); - QString deviceDescription = QLatin1String(descr); - allDevices.append(deviceName.toLocal8Bit().constData()); - if(deviceDescription.contains(QLatin1String("Default Audio Device"))) - devices.append(deviceName.toLocal8Bit().constData()); - } - if(name != NULL) + if (name != 0 && qstrcmp(name, "null") != 0) { + descr = snd_device_name_get_hint(*n, "DESC"); + io = snd_device_name_get_hint(*n, "IOID"); + + if ((descr != NULL) && ((io == NULL) || (io == filter))) { + QString deviceName = QLatin1String(name); + QString deviceDescription = QLatin1String(descr); + allDevices.append(deviceName.toLocal8Bit().constData()); + if (deviceDescription.contains(QLatin1String("Default Audio Device"))) + devices.append(deviceName.toLocal8Bit().constData()); + } + free(name); - if(descr != NULL) - free(descr); - if(io != NULL) - free(io); + if (descr != NULL) + free(descr); + if (io != NULL) + free(io); + } ++n; } snd_device_name_free_hint(hints); -- cgit v0.12 From 8da0be0dd2cffe739733f53500b1fc5d8ac4a49a Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Tue, 10 Aug 2010 16:18:22 +0200 Subject: Updated WebKit to 72b1c38579ca1fdb3f242e29cd16e5bfb4925813 Integrated changes: || <https://webkit.org/b/43782> || [Qt] NPAPI plugins not drawn until page scrolled || (cherry picked from commit 87b7587f25928272900900a106f360a4fbb4d6cd) --- src/3rdparty/webkit/.tag | 2 +- src/3rdparty/webkit/VERSION | 2 +- src/3rdparty/webkit/WebCore/ChangeLog | 10 ++++++++++ src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm | 5 ++++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index fb2703e..d31a2b4 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -413404da27312051bb3ff2cfd0f3fca42aa4b245 +72b1c38579ca1fdb3f242e29cd16e5bfb4925813 diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index c256434..62aa8ce 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - 413404da27312051bb3ff2cfd0f3fca42aa4b245 + 72b1c38579ca1fdb3f242e29cd16e5bfb4925813 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 5b78226..98d4d51 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,13 @@ +2010-08-10 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Simon Hausmann. + + Make sure NPAPI plugins get an initial setNPWindow on Mac + + https://bugs.webkit.org/show_bug.cgi?id=43782 + + * plugins/mac/PluginViewMac.mm: + 2010-06-14 Andreas Kling <andreas.kling@nokia.com> Reviewed by Tor Arne Vestbø. diff --git a/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm b/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm index 57d74ab..c8781a8 100644 --- a/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm +++ b/src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.mm @@ -227,7 +227,10 @@ bool PluginView::platformStart() #endif } - show(); + updatePluginWidget(); + + if (!m_plugin->quirks().contains(PluginQuirkDeferFirstSetWindowCall)) + setNPWindowIfNeeded(); // TODO: Implement null timer throttling depending on plugin activation m_nullEventTimer.set(new Timer<PluginView>(this, &PluginView::nullEventTimerFired)); -- cgit v0.12 From 141963b1c66fe530e55e185f4889ef80c9234d1e Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Fri, 16 Jul 2010 11:42:16 +0200 Subject: Fix RightBearing confusion in text layout Negative RightBearing was wrongly taken into account when calculating the line wrap Reviewed-by: Eskil Abrahamsen Blomfeldt (cherry picked from commit 975b1913e44128a3e9b9055f9bf2ff40d86adf2a) --- src/gui/text/qtextlayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index d6535ea..674064e 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1935,7 +1935,7 @@ void QTextLine::layout_helper(int maxGlyphs) // We ignore the right bearing if the minimum negative bearing is too little to // expand the text beyond the edge. if (sb_or_ws|breakany) { - if (lbh.calculateNewWidth(line) + lbh.minimumRightBearing > line.width) + if (lbh.calculateNewWidth(line) - lbh.minimumRightBearing > line.width) lbh.adjustRightBearing(); if (lbh.checkFullOtherwiseExtend(line)) { if (!breakany) { -- cgit v0.12 From ff18bf04c49c261626a3f73b0def07ee8ecc472d Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Thu, 5 Aug 2010 11:21:03 +0200 Subject: Fix QTextEngine overflow caused by extremely long text Internally, QTextEngine use int to calculate most of the layout data required. If a string longer than 2^24 is passed into either QTextEngine or classes using it (QStackTextEngine, QPainter, QFontMetrics, etc.), overflow will happen because the memory size required to allocate for layout will become too large for int to handle. This patch will prevent these cases and add error handling mechanism for relevant code. Task-number: QT-3658 Reviewed-by: Eskil Abrahamsen Blomfeldt (cherry picked from commit 05bb249c2ad3ee15eb205a806f8546c105683096) --- src/gui/text/qtextengine.cpp | 87 ++++++++++++++++++++++++++++++++------------ src/gui/text/qtextengine_p.h | 14 +++++-- src/gui/text/qtextlayout.cpp | 19 +++++++--- 3 files changed, 87 insertions(+), 33 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 439f2a4..5670e29 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -923,6 +923,13 @@ void QTextEngine::shapeText(int item) const si.width += glyphs.advances_x[i]; } +static inline bool hasCaseChange(const QScriptItem &si) +{ + return si.analysis.flags == QScriptAnalysis::SmallCaps || + si.analysis.flags == QScriptAnalysis::Uppercase || + si.analysis.flags == QScriptAnalysis::Lowercase; +} + #if defined(Q_WS_WINCE) //TODO // set the glyph attributes heuristically. Assumes a 1 to 1 relationship between chars and glyphs // and no reordering. @@ -1050,14 +1057,15 @@ void QTextEngine::shapeTextWithCE(int item) const if (option.useDesignMetrics()) flags |= DesignMetrics; - attributes(); // pre-initialize char attributes + // pre-initialize char attributes + if (! attributes()) + return; const int len = length(item); int num_glyphs = length(item); const QChar *str = layoutData->string.unicode() + si.position; ushort upperCased[256]; - if (si.analysis.flags == QScriptAnalysis::SmallCaps || si.analysis.flags == QScriptAnalysis::Uppercase - || si.analysis.flags == QScriptAnalysis::Lowercase) { + if (hasCaseChange(si)) { ushort *uc = upperCased; if (len > 256) uc = new ushort[len]; @@ -1071,7 +1079,14 @@ void QTextEngine::shapeTextWithCE(int item) const } while (true) { - ensureSpace(num_glyphs); + if (! ensureSpace(num_glyphs)) { + // If str is converted to uppercase/lowercase form with a new buffer, + // we need to delete that buffer before return for error + const ushort *uc = reinterpret_cast<const ushort *>(str); + if (hasCaseChange(si) && uc != upperCased) + delete [] uc; + return; + } num_glyphs = layoutData->glyphLayout.numGlyphs - layoutData->used; QGlyphLayout g = availableGlyphs(&si); @@ -1092,9 +1107,7 @@ void QTextEngine::shapeTextWithCE(int item) const layoutData->used += si.num_glyphs; const ushort *uc = reinterpret_cast<const ushort *>(str); - if ((si.analysis.flags == QScriptAnalysis::SmallCaps || si.analysis.flags == QScriptAnalysis::Uppercase - || si.analysis.flags == QScriptAnalysis::Lowercase) - && uc != upperCased) + if (hasCaseChange(si) && uc != upperCased) delete [] uc; } #endif @@ -1133,8 +1146,7 @@ void QTextEngine::shapeTextWithHarfbuzz(int item) const entire_shaper_item.item.bidiLevel = si.analysis.bidiLevel; HB_UChar16 upperCased[256]; // XXX what about making this 4096, so we don't have to extend it ever. - if (si.analysis.flags == QScriptAnalysis::SmallCaps || si.analysis.flags == QScriptAnalysis::Uppercase - || si.analysis.flags == QScriptAnalysis::Lowercase) { + if (hasCaseChange(si)) { HB_UChar16 *uc = upperCased; if (entire_shaper_item.item.length > 256) uc = new HB_UChar16[entire_shaper_item.item.length]; @@ -1156,17 +1168,24 @@ void QTextEngine::shapeTextWithHarfbuzz(int item) const entire_shaper_item.shaperFlags |= HB_ShaperFlag_UseDesignMetrics; entire_shaper_item.num_glyphs = qMax(layoutData->glyphLayout.numGlyphs - layoutData->used, int(entire_shaper_item.item.length)); - ensureSpace(entire_shaper_item.num_glyphs); + if (! ensureSpace(entire_shaper_item.num_glyphs)) { + if (hasCaseChange(si)) + delete [] const_cast<HB_UChar16 *>(entire_shaper_item.string); + return; + } QGlyphLayout initialGlyphs = availableGlyphs(&si).mid(0, entire_shaper_item.num_glyphs); if (!stringToGlyphs(&entire_shaper_item, &initialGlyphs, font)) { - ensureSpace(entire_shaper_item.num_glyphs); + if (! ensureSpace(entire_shaper_item.num_glyphs)) { + if (hasCaseChange(si)) + delete [] const_cast<HB_UChar16 *>(entire_shaper_item.string); + return; + } initialGlyphs = availableGlyphs(&si).mid(0, entire_shaper_item.num_glyphs); if (!stringToGlyphs(&entire_shaper_item, &initialGlyphs, font)) { // ############ if this happens there's a bug in the fontengine - if ((si.analysis.flags == QScriptAnalysis::SmallCaps || si.analysis.flags == QScriptAnalysis::Uppercase - || si.analysis.flags == QScriptAnalysis::Lowercase) && entire_shaper_item.string != upperCased) + if (hasCaseChange(si) && entire_shaper_item.string != upperCased) delete [] const_cast<HB_UChar16 *>(entire_shaper_item.string); return; } @@ -1231,7 +1250,11 @@ void QTextEngine::shapeTextWithHarfbuzz(int item) const remaining_glyphs -= shaper_item.initialGlyphCount; do { - ensureSpace(glyph_pos + shaper_item.num_glyphs + remaining_glyphs); + if (! ensureSpace(glyph_pos + shaper_item.num_glyphs + remaining_glyphs)) { + if (hasCaseChange(si)) + delete [] const_cast<HB_UChar16 *>(entire_shaper_item.string); + return; + } const QGlyphLayout g = availableGlyphs(&si).mid(glyph_pos); moveGlyphData(g.mid(shaper_item.num_glyphs), g.mid(shaper_item.initialGlyphCount), remaining_glyphs); @@ -1271,8 +1294,7 @@ void QTextEngine::shapeTextWithHarfbuzz(int item) const layoutData->used += si.num_glyphs; - if ((si.analysis.flags == QScriptAnalysis::SmallCaps || si.analysis.flags == QScriptAnalysis::Uppercase) - && entire_shaper_item.string != upperCased) + if (hasCaseChange(si) && entire_shaper_item.string != upperCased) delete [] const_cast<HB_UChar16 *>(entire_shaper_item.string); } @@ -1317,7 +1339,8 @@ const HB_CharAttributes *QTextEngine::attributes() const return (HB_CharAttributes *) layoutData->memory; itemize(); - ensureSpace(layoutData->string.length()); + if (! ensureSpace(layoutData->string.length())) + return NULL; QVarLengthArray<HB_ScriptItem> hbScriptItems(layoutData->items.size()); @@ -1864,7 +1887,10 @@ void QTextEngine::justify(const QScriptLine &line) // don't include trailing white spaces when doing justification int line_length = line.length; - const HB_CharAttributes *a = attributes()+line.from; + const HB_CharAttributes *a = attributes(); + if (! a) + return; + a += line.from; while (line_length && a[line_length-1].whiteSpace) --line_length; // subtract one char more, as we can't justfy after the last character @@ -2045,7 +2071,7 @@ QTextEngine::LayoutData::LayoutData() memory_on_stack = false; used = 0; hasBidi = false; - inLayout = false; + layoutState = LayoutEmpty; haveCharAttributes = false; logClustersPtr = 0; available_glyphs = 0; @@ -2079,7 +2105,7 @@ QTextEngine::LayoutData::LayoutData(const QString &str, void **stack_memory, int } used = 0; hasBidi = false; - inLayout = false; + layoutState = LayoutEmpty; haveCharAttributes = false; } @@ -2090,12 +2116,12 @@ QTextEngine::LayoutData::~LayoutData() memory = 0; } -void QTextEngine::LayoutData::reallocate(int totalGlyphs) +bool QTextEngine::LayoutData::reallocate(int totalGlyphs) { Q_ASSERT(totalGlyphs >= glyphLayout.numGlyphs); if (memory_on_stack && available_glyphs >= totalGlyphs) { glyphLayout.grow(glyphLayout.data(), totalGlyphs); - return; + return true; } int space_charAttributes = sizeof(HB_CharAttributes)*string.length()/sizeof(void*) + 1; @@ -2103,7 +2129,14 @@ void QTextEngine::LayoutData::reallocate(int totalGlyphs) int space_glyphs = QGlyphLayout::spaceNeededForGlyphLayout(totalGlyphs)/sizeof(void*) + 2; int newAllocated = space_charAttributes + space_glyphs + space_logClusters; - Q_ASSERT(newAllocated >= allocated); + // These values can be negative if the length of string/glyphs causes overflow, + // we can't layout such a long string all at once, so return false here to + // indicate there is a failure + if (space_charAttributes < 0 || space_logClusters < 0 || space_glyphs < 0 || newAllocated < allocated) { + layoutState = LayoutFailed; + return false; + } + void **newMem = memory; newMem = (void **)::realloc(memory_on_stack ? 0 : memory, newAllocated*sizeof(void *)); Q_CHECK_PTR(newMem); @@ -2124,6 +2157,7 @@ void QTextEngine::LayoutData::reallocate(int totalGlyphs) glyphLayout.grow(reinterpret_cast<char *>(m), totalGlyphs); allocated = newAllocated; + return true; } // grow to the new size, copying the existing data to the new layout @@ -2155,7 +2189,7 @@ void QTextEngine::freeMemory() } else { layoutData->used = 0; layoutData->hasBidi = false; - layoutData->inLayout = false; + layoutData->layoutState = LayoutEmpty; layoutData->haveCharAttributes = false; } for (int i = 0; i < lines.size(); ++i) { @@ -2314,6 +2348,9 @@ QString QTextEngine::elidedText(Qt::TextElideMode mode, const QFixed &width, int shape(i); HB_CharAttributes *attributes = const_cast<HB_CharAttributes *>(this->attributes()); + if (!attributes) + return QString(); + unsigned short *logClusters = this->logClusters(&si); QGlyphLayout glyphs = shapedGlyphs(&si); @@ -2385,6 +2422,8 @@ QString QTextEngine::elidedText(Qt::TextElideMode mode, const QFixed &width, int return QString(); const HB_CharAttributes *attributes = this->attributes(); + if (!attributes) + return QString(); if (mode == Qt::ElideRight) { QFixed currentWidth; diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index e623fa5..4cbe81f 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -416,6 +416,11 @@ class QTextFormatCollection; class Q_GUI_EXPORT QTextEngine { public: + enum LayoutState { + LayoutEmpty, + InLayout, + LayoutFailed, + }; struct LayoutData { LayoutData(const QString &str, void **stack_memory, int mem_size); LayoutData(); @@ -428,11 +433,11 @@ public: QGlyphLayout glyphLayout; mutable int used; uint hasBidi : 1; - uint inLayout : 1; + uint layoutState : 2; uint memory_on_stack : 1; bool haveCharAttributes; QString string; - void reallocate(int totalGlyphs); + bool reallocate(int totalGlyphs); }; QTextEngine(LayoutData *data); @@ -520,9 +525,10 @@ public: return layoutData->glyphLayout.mid(si->glyph_data_offset, si->num_glyphs); } - inline void ensureSpace(int nGlyphs) const { + inline bool ensureSpace(int nGlyphs) const { if (layoutData->glyphLayout.numGlyphs - layoutData->used < nGlyphs) - layoutData->reallocate((((layoutData->used + nGlyphs)*3/2 + 15) >> 4) << 4); + return layoutData->reallocate((((layoutData->used + nGlyphs)*3/2 + 15) >> 4) << 4); + return true; } void freeMemory(); diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 674064e..5a11c87 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -74,6 +74,8 @@ static inline QFixed leadingSpaceWidth(QTextEngine *eng, const QScriptLine &line int pos = line.length; const HB_CharAttributes *attributes = eng->attributes(); + if (!attributes) + return QFixed(); while (pos > 0 && attributes[line.from + pos - 1].whiteSpace) --pos; return eng->width(line.from + pos, line.length - pos); @@ -601,7 +603,7 @@ bool QTextLayout::cacheEnabled() const void QTextLayout::beginLayout() { #ifndef QT_NO_DEBUG - if (d->layoutData && d->layoutData->inLayout) { + if (d->layoutData && d->layoutData->layoutState == QTextEngine::InLayout) { qWarning("QTextLayout::beginLayout: Called while already doing layout"); return; } @@ -609,7 +611,7 @@ void QTextLayout::beginLayout() d->invalidate(); d->clearLineData(); d->itemize(); - d->layoutData->inLayout = true; + d->layoutData->layoutState = QTextEngine::InLayout; } /*! @@ -618,7 +620,7 @@ void QTextLayout::beginLayout() void QTextLayout::endLayout() { #ifndef QT_NO_DEBUG - if (!d->layoutData || !d->layoutData->inLayout) { + if (!d->layoutData || d->layoutData->layoutState == QTextEngine::LayoutEmpty) { qWarning("QTextLayout::endLayout: Called without beginLayout()"); return; } @@ -627,7 +629,7 @@ void QTextLayout::endLayout() if (l && d->lines.at(l-1).length < 0) { QTextLine(l-1, d).setNumColumns(INT_MAX); } - d->layoutData->inLayout = false; + d->layoutData->layoutState = QTextEngine::LayoutEmpty; if (!d->cacheGlyphs) d->freeMemory(); } @@ -757,11 +759,14 @@ bool QTextLayout::isValidCursorPosition(int pos) const QTextLine QTextLayout::createLine() { #ifndef QT_NO_DEBUG - if (!d->layoutData || !d->layoutData->inLayout) { + if (!d->layoutData || d->layoutData->layoutState == QTextEngine::LayoutEmpty) { qWarning("QTextLayout::createLine: Called without layouting"); return QTextLine(); } #endif + if (d->layoutData->layoutState == QTextEngine::LayoutFailed) + return QTextLine(); + int l = d->lines.size(); if (l && d->lines.at(l-1).length < 0) { QTextLine(l-1, d).setNumColumns(INT_MAX); @@ -1801,6 +1806,8 @@ void QTextLine::layout_helper(int maxGlyphs) Qt::Alignment alignment = eng->option.alignment(); const HB_CharAttributes *attributes = eng->attributes(); + if (!attributes) + return; lbh.currentPosition = line.from; int end = 0; lbh.logClusters = eng->layoutData->logClustersPtr; @@ -1814,6 +1821,8 @@ void QTextLine::layout_helper(int maxGlyphs) if (!current.num_glyphs) { eng->shape(item); attributes = eng->attributes(); + if (!attributes) + return; lbh.logClusters = eng->layoutData->logClustersPtr; } lbh.currentPosition = qMax(line.from, current.position); -- cgit v0.12 From 1d4e8c0a4c0fc41267907c8b1e41bb0b568706cf Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Mon, 9 Aug 2010 10:31:16 +0200 Subject: Fix scrollbar randomly popping up in QPlainTextEdit When a line break was detected, we would retain the value of the right bearing for the character after the break instead of resetting it to the right bearing of the previous value. This could in some cases cause the bounding rect of the text to be wrong, and could cause unnecessary horizontal scrollbars to pop up. It was especially visible when using WrapAnywhere. Visible e.g. in the compile output in Creator. Done-by: mae Reviewed-by: Eskil Reviewed-by: Lars (cherry picked from commit c5fa9eb1cb02d979502e2c9918d752c6708fb406) --- src/gui/text/qtextlayout.cpp | 21 +++++++++++++++++---- tests/auto/qtextlayout/tst_qtextlayout.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 5a11c87..da43913 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1709,14 +1709,18 @@ namespace { return glyphs.glyphs[logClusters[currentPosition - 1]]; } + inline void adjustRightBearing(glyph_t glyph) + { + qreal rb; + fontEngine->getGlyphBearings(glyph, 0, &rb); + rightBearing = qMin(QFixed(), QFixed::fromReal(rb)); + } + inline void adjustRightBearing() { if (currentPosition <= 0) return; - - qreal rb; - fontEngine->getGlyphBearings(currentGlyph(), 0, &rb); - rightBearing = qMin(QFixed(), QFixed::fromReal(rb)); + adjustRightBearing(currentGlyph()); } inline void resetRightBearing() @@ -1901,6 +1905,9 @@ void QTextLine::layout_helper(int maxGlyphs) } else { lbh.whiteSpaceOrObject = false; bool sb_or_ws = false; + glyph_t previousGlyph = 0; + if (lbh.currentPosition > 0 && lbh.logClusters[lbh.currentPosition - 1] <lbh.glyphs.numGlyphs) + previousGlyph = lbh.currentGlyph(); // needed to calculate right bearing later do { addNextCluster(lbh.currentPosition, end, lbh.tmpData, lbh.glyphCount, current, lbh.logClusters, lbh.glyphs); @@ -1944,9 +1951,15 @@ void QTextLine::layout_helper(int maxGlyphs) // We ignore the right bearing if the minimum negative bearing is too little to // expand the text beyond the edge. if (sb_or_ws|breakany) { + QFixed rightBearing = lbh.rightBearing; // store previous right bearing if (lbh.calculateNewWidth(line) - lbh.minimumRightBearing > line.width) lbh.adjustRightBearing(); if (lbh.checkFullOtherwiseExtend(line)) { + // we are too wide, fix right bearing + if (rightBearing <= 0) + lbh.rightBearing = rightBearing; // take from cache + else if (previousGlyph > 0) + lbh.adjustRightBearing(previousGlyph); if (!breakany) { line.textWidth += lbh.softHyphenWidth; } diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index f798faf..659ba1a 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -122,6 +122,7 @@ private slots: void smallTextLengthWrapAtWordBoundaryOrAnywhere(); void testLineBreakingAllSpaces(); void lineWidthFromBOM(); + void textWidthVsWIdth(); private: @@ -1359,5 +1360,34 @@ void tst_QTextLayout::glyphLessItems() } } +void tst_QTextLayout::textWidthVsWIdth() +{ + QTextLayout layout; + QTextOption opt; + opt.setWrapMode(QTextOption::WrapAnywhere); + layout.setTextOption(opt); + layout.setText(QString::fromLatin1( + "g++ -c -m64 -pipe -g -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIC -DCORE_LIBRARY -DIDE_LIBRARY_BASENAME=\"lib\" -DWITH_TESTS " + "-DQT_NO_CAST_TO_ASCII -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DQT_PLUGIN -DQT_TESTLIB_LIB -DQT_SCRIPT_LIB -DQT_SVG_LIB -DQT_SQL_LIB -DQT_XM" + "L_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../../qt-qml/mkspecs/linux-g++-64 -I. -I../../../../qt-qml/include/QtCore -I../../../." + "./qt-qml/include/QtNetwork -I../../../../qt-qml/include/QtGui -I../../../../qt-qml/include/QtXml -I../../../../qt-qml/include/QtSql -I../../../../qt-qml/inc" + "lude/QtSvg -I../../../../qt-qml/include/QtScript -I../../../../qt-qml/include/QtTest -I../../../../qt-qml/include -I../../../../qt-qml/include/QtHelp -I../." + "./libs -I/home/ettrich/dev/creator/tools -I../../plugins -I../../shared/scriptwrapper -I../../libs/3rdparty/botan/build -Idialogs -Iactionmanager -Ieditorma" + "nager -Iprogressmanager -Iscriptmanager -I.moc/debug-shared -I.uic -o .obj/debug-shared/sidebar.o sidebar.cpp")); + + // textWidth includes right bearing, but it should never be LARGER than width if there is space for at least one character + for (int width = 100; width < 1000; ++width) { + layout.beginLayout(); + QTextLine line = layout.createLine(); + line.setLineWidth(width); + layout.endLayout(); + + qreal textWidthIsLargerBy = qMax(qreal(0), line.naturalTextWidth() - line.width()); + qreal thisMustBeZero = 0; + QCOMPARE(textWidthIsLargerBy, thisMustBeZero); + } +} + + QTEST_MAIN(tst_QTextLayout) #include "tst_qtextlayout.moc" -- cgit v0.12 From 6419a9c35e2ee1305b7f9cfe9213a152aafeb2e5 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Wed, 11 Aug 2010 11:49:35 +0200 Subject: Disable minRightBearing optimization in QTextLayout on Mac Neither of the Mac font engines have implemented minimum right bearing, which will cause them to return 0 for the minimum value. This will cause the right bearing to never be calculated prior to breaking and thus never be a part of the breaking width. Since actually implementing the functions is too time consuming for right now, we will disable the optimization for the time being. Reviewed-by: Olivier (cherry picked from commit bb696453f6f87cad58982af3455335478fedb8cc) --- src/gui/text/qtextlayout.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index da43913..7d5fa43 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1952,7 +1952,9 @@ void QTextLine::layout_helper(int maxGlyphs) // expand the text beyond the edge. if (sb_or_ws|breakany) { QFixed rightBearing = lbh.rightBearing; // store previous right bearing +#if !defined(Q_WS_MAC) if (lbh.calculateNewWidth(line) - lbh.minimumRightBearing > line.width) +#endif lbh.adjustRightBearing(); if (lbh.checkFullOtherwiseExtend(line)) { // we are too wide, fix right bearing -- cgit v0.12 From 1a378511576b32ec26dcbd85b66a94e366422d61 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Wed, 11 Aug 2010 15:32:28 +0200 Subject: doc: The QML Qt element was missing from the documentation. Either someone removed the QML: prefix, or it was never there. (cherry picked from commit a4d19eef86b07d670b8b2a3f9ad6b3448800bae5) --- doc/src/declarative/elements.qdoc | 1 + src/declarative/qml/qdeclarativeengine.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index c2930b3..c008404 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -114,6 +114,7 @@ The following table lists the QML elements provided by the \l {QtDeclarative}{Qt \row \o \l {Component} \o Encapsulate QML items as a component \row \o \l {Timer} \o Provides timed triggers \row \o \l {QML:QtObject} {QtObject} \o Basic element containing only the objectName property +\row \o \l {QML:Qt} {Qt} \o The QML global Qt object provides useful enums and functions from Qt. \row \o \l {WorkerScript} \o Enables the use of threads in QML \row \o \l {Loader} \o Controls the loading of items or components \row \o \l {Repeater} \o Uses a model to create multiples of components diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index b2f3cd1..1b58804 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -184,11 +184,12 @@ void QDeclarativeEnginePrivate::defineModule() } /*! -\keyword QmlGlobalQtObject -\qmlclass Qt QDeclarativeEnginePrivate +\qmlclass QML:Qt QDeclarativeEnginePrivate \brief The QML global Qt object provides useful enums and functions from Qt. -The \c Qt object provides useful enums and functions from Qt, for use in all QML files. +\keyword QmlGlobalQtObject + +\brief The \c Qt object provides useful enums and functions from Qt, for use in all QML files. The \c Qt object is not a QML element; it cannot be instantiated. It is a global object with enums and functions. To use it, call the members of the global \c Qt object directly. -- cgit v0.12 From fe131fca53545c45cbddf436400921f2e0f03bad Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Wed, 11 Aug 2010 11:29:07 +0200 Subject: qdoc: Added list of all members (including inherited) page to QML elements. (cherry picked from commit 62968f33452016b31020e524fa6ba6d2cefd0278) --- .../qdeclarativeitem/data/childrenRectBug3.qml | 30 +++++++-------- tools/qdoc3/codemarker.cpp | 4 +- tools/qdoc3/codemarker.h | 3 +- tools/qdoc3/cppcodemarker.cpp | 45 +++++++++++++++++++++- tools/qdoc3/cppcodemarker.h | 3 +- tools/qdoc3/ditaxmlgenerator.cpp | 4 +- tools/qdoc3/htmlgenerator.cpp | 43 ++++++++++++++++++++- tools/qdoc3/htmlgenerator.h | 5 ++- 8 files changed, 113 insertions(+), 24 deletions(-) diff --git a/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml b/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml index f19ab4f..54b5b68 100644 --- a/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml +++ b/tests/auto/declarative/qdeclarativeitem/data/childrenRectBug3.qml @@ -1,15 +1,15 @@ -import Qt 4.7 - -Rectangle { - width: 300 - height: 300 - - Rectangle { - height: childrenRect.height - - Repeater { - model: 1 - Rectangle { } - } - } -} +import Qt 4.7 + +Rectangle { + width: 300 + height: 300 + + Rectangle { + height: childrenRect.height + + Repeater { + model: 1 + Rectangle { } + } + } +} diff --git a/tools/qdoc3/codemarker.cpp b/tools/qdoc3/codemarker.cpp index 7130d61..ec86ae3 100644 --- a/tools/qdoc3/codemarker.cpp +++ b/tools/qdoc3/codemarker.cpp @@ -624,7 +624,9 @@ QString CodeMarker::macName(const Node *node, const QString &name) Get the list of documentation sections for the children of the specified QmlClassNode. */ -QList<Section> CodeMarker::qmlSections(const QmlClassNode* , SynopsisStyle ) +QList<Section> CodeMarker::qmlSections(const QmlClassNode* , + SynopsisStyle , + const Tree* ) { return QList<Section>(); } diff --git a/tools/qdoc3/codemarker.h b/tools/qdoc3/codemarker.h index 53ad4a8..f17b28e 100644 --- a/tools/qdoc3/codemarker.h +++ b/tools/qdoc3/codemarker.h @@ -153,7 +153,8 @@ class CodeMarker Status status) = 0; #ifdef QDOC_QML virtual QList<Section> qmlSections(const QmlClassNode* qmlClassNode, - SynopsisStyle style); + SynopsisStyle style, + const Tree* tree); #endif virtual const Node* resolveTarget(const QString& target, const Tree* tree, diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp index 562e92b..3615a84 100644 --- a/tools/qdoc3/cppcodemarker.cpp +++ b/tools/qdoc3/cppcodemarker.cpp @@ -1127,7 +1127,8 @@ QString CppCodeMarker::addMarkUp(const QString& protectedCode, Currently, it only handles QML property groups. */ QList<Section> CppCodeMarker::qmlSections(const QmlClassNode* qmlClassNode, - SynopsisStyle style) + SynopsisStyle style, + const Tree* tree) { QList<Section> sections; if (qmlClassNode) { @@ -1244,6 +1245,48 @@ QList<Section> CppCodeMarker::qmlSections(const QmlClassNode* qmlClassNode, append(sections,qmlmethods); append(sections,qmlattachedmethods); } + else { + FastSection all(qmlClassNode,"","","member","members"); + + QStack<const QmlClassNode*> stack; + stack.push(qmlClassNode); + + while (!stack.isEmpty()) { + const QmlClassNode* ancestorClass = stack.pop(); + + NodeList::ConstIterator c = ancestorClass->childNodes().begin(); + while (c != ancestorClass->childNodes().end()) { + // if ((*c)->access() != Node::Private) + if ((*c)->subType() == Node::QmlPropertyGroup) { + const QmlPropGroupNode* qpgn = static_cast<const QmlPropGroupNode*>(*c); + NodeList::ConstIterator p = qpgn->childNodes().begin(); + while (p != qpgn->childNodes().end()) { + if ((*p)->type() == Node::QmlProperty) { + insert(all,*p,style,Okay); + } + ++p; + } + } + else + insert(all,*c,style,Okay); + ++c; + } + + if (!ancestorClass->links().empty()) { + if (ancestorClass->links().contains(Node::InheritsLink)) { + QPair<QString,QString> linkPair; + linkPair = ancestorClass->links()[Node::InheritsLink]; + QStringList strList(linkPair.first); + const Node* n = tree->findNode(strList,Node::Fake); + if (n && n->subType() == Node::QmlClass) { + const QmlClassNode* qcn = static_cast<const QmlClassNode*>(n); + stack.prepend(qcn); + } + } + } + } + append(sections, all); + } } return sections; diff --git a/tools/qdoc3/cppcodemarker.h b/tools/qdoc3/cppcodemarker.h index eca3936..804a302 100644 --- a/tools/qdoc3/cppcodemarker.h +++ b/tools/qdoc3/cppcodemarker.h @@ -80,7 +80,8 @@ class CppCodeMarker : public CodeMarker SynopsisStyle style, Status status); QList<Section> qmlSections(const QmlClassNode* qmlClassNode, - SynopsisStyle style); + SynopsisStyle style, + const Tree* tree); const Node* resolveTarget(const QString& target, const Tree* tree, const Node* relative, diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index 816ab9f..7892025 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -1764,7 +1764,7 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker generateQmlInstantiates(qml_cn, marker); generateBrief(qml_cn, marker); generateQmlInheritedBy(qml_cn, marker); - sections = marker->qmlSections(qml_cn,CodeMarker::Summary); + sections = marker->qmlSections(qml_cn,CodeMarker::Summary,0); s = sections.begin(); while (s != sections.end()) { out() << "<a name=\"" << registerRef((*s).name) << "\"></a>\n"; @@ -1781,7 +1781,7 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker generateAlsoList(fake, marker); out() << "<hr />\n"; - sections = marker->qmlSections(qml_cn,CodeMarker::Detailed); + sections = marker->qmlSections(qml_cn,CodeMarker::Detailed,0); s = sections.begin(); while (s != sections.end()) { out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index b0c3150..198745b 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1493,7 +1493,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) const QmlClassNode* qml_cn = 0; if (fake->subType() == Node::QmlClass) { qml_cn = static_cast<const QmlClassNode*>(fake); - sections = marker->qmlSections(qml_cn,CodeMarker::Summary); + sections = marker->qmlSections(qml_cn,CodeMarker::Summary,0); generateTableOfContents(fake,marker,§ions); } else if (fake->name() != QString("index.html")) @@ -1575,6 +1575,13 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) generateQmlInherits(qml_cn, marker); generateQmlInheritedBy(qml_cn, marker); generateQmlInstantiates(qml_cn, marker); + + QString allQmlMembersLink = generateAllQmlMembersFile(qml_cn, marker); + if (!allQmlMembersLink.isEmpty()) { + out() << "<li><a href=\"" << allQmlMembersLink << "\">" + << "List of all members, including inherited members</a></li>\n"; + } + s = sections.begin(); while (s != sections.end()) { out() << "<a name=\"" << registerRef((*s).name.toLower()) @@ -1594,7 +1601,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) generateExtractionMark(fake, EndMark); //out() << "<hr />\n"; - sections = marker->qmlSections(qml_cn,CodeMarker::Detailed); + sections = marker->qmlSections(qml_cn,CodeMarker::Detailed,0); s = sections.begin(); while (s != sections.end()) { out() << "<h2>" << protectEnc((*s).name) << "</h2>\n"; @@ -2346,6 +2353,38 @@ QString HtmlGenerator::generateListOfAllMemberFile(const InnerNode *inner, return fileName; } +/*! + This function creates an html page on which are listed all + the members of QML class \a qml_cn, including the inherited + members. The \a marker is used for formatting stuff. + */ +QString HtmlGenerator::generateAllQmlMembersFile(const QmlClassNode* qml_cn, + CodeMarker* marker) +{ + QList<Section> sections; + QList<Section>::ConstIterator s; + + sections = marker->qmlSections(qml_cn,CodeMarker::SeparateList,myTree); + if (sections.isEmpty()) + return QString(); + + QString fileName = fileBase(qml_cn) + "-members." + fileExtension(qml_cn); + beginSubPage(qml_cn->location(), fileName); + QString title = "List of All Members for " + qml_cn->name(); + generateHeader(title, qml_cn, marker); + generateTitle(title, Text(), SmallSubTitle, qml_cn, marker); + out() << "<p>This is the complete list of members for "; + generateFullName(qml_cn, 0, marker); + out() << ", including inherited members.</p>\n"; + + Section section = sections.first(); + generateSectionList(section, 0, marker, CodeMarker::SeparateList); + + generateFooter(); + endSubPage(); + return fileName; +} + QString HtmlGenerator::generateLowStatusMemberFile(const InnerNode *inner, CodeMarker *marker, CodeMarker::Status status) diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index ec79896..07226f5 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -169,7 +169,10 @@ class HtmlGenerator : public PageGenerator void generateTableOfContents(const Node *node, CodeMarker *marker, QList<Section>* sections = 0); - QString generateListOfAllMemberFile(const InnerNode *inner, CodeMarker *marker); + QString generateListOfAllMemberFile(const InnerNode *inner, + CodeMarker *marker); + QString generateAllQmlMembersFile(const QmlClassNode* qml_cn, + CodeMarker* marker); QString generateLowStatusMemberFile(const InnerNode *inner, CodeMarker *marker, CodeMarker::Status status); -- cgit v0.12 From 810b8c896d9fabfebd675db2b03c69eefef40d19 Mon Sep 17 00:00:00 2001 From: Kevin Wright <kevin.wright@nokia.com> Date: Tue, 27 Jul 2010 09:32:59 +0200 Subject: Added files that had been renamed. (cherry picked from commit a98af1c7f1bba3c791d08e76e4896e48ea6ea019) --- doc/src/examples/touch-dials.qdoc | 36 +++++ doc/src/examples/touch-knobs.qdoc | 36 +++++ doc/src/images/touch-dials-example.png | Bin 0 -> 17676 bytes doc/src/images/touch-examples.png | Bin 0 -> 6691 bytes doc/src/images/touch-fingerpaint-example.png | Bin 0 -> 17026 bytes doc/src/images/touch-knobs-example.png | Bin 0 -> 1290 bytes doc/src/images/touch-pinchzoom-example.png | Bin 0 -> 48154 bytes examples/touch/dials/dials.pro | 8 + examples/touch/dials/dials.ui | 77 ++++++++++ examples/touch/dials/main.cpp | 58 +++++++ examples/touch/fingerpaint/fingerpaint.pro | 11 ++ examples/touch/fingerpaint/main.cpp | 51 +++++++ examples/touch/fingerpaint/mainwindow.cpp | 217 +++++++++++++++++++++++++++ examples/touch/fingerpaint/mainwindow.h | 88 +++++++++++ examples/touch/fingerpaint/scribblearea.cpp | 211 ++++++++++++++++++++++++++ examples/touch/fingerpaint/scribblearea.h | 80 ++++++++++ examples/touch/knobs/knob.cpp | 88 +++++++++++ examples/touch/knobs/knob.h | 54 +++++++ examples/touch/knobs/knobs.pro | 8 + examples/touch/knobs/main.cpp | 64 ++++++++ examples/touch/pinchzoom/graphicsview.cpp | 85 +++++++++++ examples/touch/pinchzoom/graphicsview.h | 55 +++++++ examples/touch/pinchzoom/main.cpp | 86 +++++++++++ examples/touch/pinchzoom/mice.qrc | 5 + examples/touch/pinchzoom/mouse.cpp | 199 ++++++++++++++++++++++++ examples/touch/pinchzoom/mouse.h | 70 +++++++++ examples/touch/pinchzoom/pinchzoom.pro | 16 ++ examples/touch/touch.pro | 2 + 28 files changed, 1605 insertions(+) create mode 100644 doc/src/examples/touch-dials.qdoc create mode 100644 doc/src/examples/touch-knobs.qdoc create mode 100644 doc/src/images/touch-dials-example.png create mode 100644 doc/src/images/touch-examples.png create mode 100644 doc/src/images/touch-fingerpaint-example.png create mode 100644 doc/src/images/touch-knobs-example.png create mode 100644 doc/src/images/touch-pinchzoom-example.png create mode 100644 examples/touch/dials/dials.pro create mode 100644 examples/touch/dials/dials.ui create mode 100644 examples/touch/dials/main.cpp create mode 100644 examples/touch/fingerpaint/fingerpaint.pro create mode 100644 examples/touch/fingerpaint/main.cpp create mode 100644 examples/touch/fingerpaint/mainwindow.cpp create mode 100644 examples/touch/fingerpaint/mainwindow.h create mode 100644 examples/touch/fingerpaint/scribblearea.cpp create mode 100644 examples/touch/fingerpaint/scribblearea.h create mode 100644 examples/touch/knobs/knob.cpp create mode 100644 examples/touch/knobs/knob.h create mode 100644 examples/touch/knobs/knobs.pro create mode 100644 examples/touch/knobs/main.cpp create mode 100644 examples/touch/pinchzoom/graphicsview.cpp create mode 100644 examples/touch/pinchzoom/graphicsview.h create mode 100644 examples/touch/pinchzoom/main.cpp create mode 100644 examples/touch/pinchzoom/mice.qrc create mode 100644 examples/touch/pinchzoom/mouse.cpp create mode 100644 examples/touch/pinchzoom/mouse.h create mode 100644 examples/touch/pinchzoom/pinchzoom.pro create mode 100644 examples/touch/touch.pro diff --git a/doc/src/examples/touch-dials.qdoc b/doc/src/examples/touch-dials.qdoc new file mode 100644 index 0000000..552d752 --- /dev/null +++ b/doc/src/examples/touch-dials.qdoc @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in a +** written agreement between you and Nokia. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example touch/dials + \title Touch Dials Example + + The Touch Dials example shows how to apply touch to a set of + standard Qt widgets. + + \image touch-dials-example.png +*/ diff --git a/doc/src/examples/touch-knobs.qdoc b/doc/src/examples/touch-knobs.qdoc new file mode 100644 index 0000000..deb4c28 --- /dev/null +++ b/doc/src/examples/touch-knobs.qdoc @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in a +** written agreement between you and Nokia. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example touch/knobs + \title Touch Knobs Example + + The Touch Knobs example shows how to create custom controls that + accept touch input. + + \image touch-knobs-example.png +*/ diff --git a/doc/src/images/touch-dials-example.png b/doc/src/images/touch-dials-example.png new file mode 100644 index 0000000..60e1776 Binary files /dev/null and b/doc/src/images/touch-dials-example.png differ diff --git a/doc/src/images/touch-examples.png b/doc/src/images/touch-examples.png new file mode 100644 index 0000000..b053cf3 Binary files /dev/null and b/doc/src/images/touch-examples.png differ diff --git a/doc/src/images/touch-fingerpaint-example.png b/doc/src/images/touch-fingerpaint-example.png new file mode 100644 index 0000000..c741b65 Binary files /dev/null and b/doc/src/images/touch-fingerpaint-example.png differ diff --git a/doc/src/images/touch-knobs-example.png b/doc/src/images/touch-knobs-example.png new file mode 100644 index 0000000..1cbd90d Binary files /dev/null and b/doc/src/images/touch-knobs-example.png differ diff --git a/doc/src/images/touch-pinchzoom-example.png b/doc/src/images/touch-pinchzoom-example.png new file mode 100644 index 0000000..1079fb2 Binary files /dev/null and b/doc/src/images/touch-pinchzoom-example.png differ diff --git a/examples/touch/dials/dials.pro b/examples/touch/dials/dials.pro new file mode 100644 index 0000000..8963153 --- /dev/null +++ b/examples/touch/dials/dials.pro @@ -0,0 +1,8 @@ +SOURCES += main.cpp +FORMS += dials.ui + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/touch/dials +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS dials.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/touch/dials +INSTALLS += target sources diff --git a/examples/touch/dials/dials.ui b/examples/touch/dials/dials.ui new file mode 100644 index 0000000..8ca7ae9 --- /dev/null +++ b/examples/touch/dials/dials.ui @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Dials</class> + <widget class="QWidget" name="Dials"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QDial" name="dial_1"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QDial" name="dial_2"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QDial" name="dial_3"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QDial" name="dial_4"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QDial" name="dial_5"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QDial" name="dial_6"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QDial" name="dial_7"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QDial" name="dial_8"> + <property name="notchesVisible"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/examples/touch/dials/main.cpp b/examples/touch/dials/main.cpp new file mode 100644 index 0000000..4c7cc1e --- /dev/null +++ b/examples/touch/dials/main.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> +#include <QWidget> +#include <QDial> + +#include "ui_dials.h" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + QWidget window; + Ui::Dials dialsUi; + dialsUi.setupUi(&window); + QList<QAbstractSlider *> sliders = window.findChildren<QAbstractSlider *>(); + foreach (QAbstractSlider *slider, sliders) + slider->setAttribute(Qt::WA_AcceptTouchEvents); + window.showMaximized(); + return app.exec(); +} diff --git a/examples/touch/fingerpaint/fingerpaint.pro b/examples/touch/fingerpaint/fingerpaint.pro new file mode 100644 index 0000000..f1c9d4c --- /dev/null +++ b/examples/touch/fingerpaint/fingerpaint.pro @@ -0,0 +1,11 @@ +HEADERS = mainwindow.h \ + scribblearea.h +SOURCES = main.cpp \ + mainwindow.cpp \ + scribblearea.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/touch/fingerpaint +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS fingerpaint.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/touch/fingerpaint +INSTALLS += target sources diff --git a/examples/touch/fingerpaint/main.cpp b/examples/touch/fingerpaint/main.cpp new file mode 100644 index 0000000..1d9b61d --- /dev/null +++ b/examples/touch/fingerpaint/main.cpp @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow window; + window.showMaximized(); + return app.exec(); +} diff --git a/examples/touch/fingerpaint/mainwindow.cpp b/examples/touch/fingerpaint/mainwindow.cpp new file mode 100644 index 0000000..ec42da3 --- /dev/null +++ b/examples/touch/fingerpaint/mainwindow.cpp @@ -0,0 +1,217 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "mainwindow.h" +#include "scribblearea.h" + +//! [0] +MainWindow::MainWindow() +{ + scribbleArea = new ScribbleArea; + setCentralWidget(scribbleArea); + + createActions(); + createMenus(); + + setWindowTitle(tr("Finger Paint")); + resize(500, 500); +} +//! [0] + +//! [1] +void MainWindow::closeEvent(QCloseEvent *event) +//! [1] //! [2] +{ + if (maybeSave()) { + event->accept(); + } else { + event->ignore(); + } +} +//! [2] + +//! [3] +void MainWindow::open() +//! [3] //! [4] +{ + if (maybeSave()) { + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open File"), QDir::currentPath()); + if (!fileName.isEmpty()) + scribbleArea->openImage(fileName); + } +} +//! [4] + +//! [5] +void MainWindow::save() +//! [5] //! [6] +{ + QAction *action = qobject_cast<QAction *>(sender()); + QByteArray fileFormat = action->data().toByteArray(); + saveFile(fileFormat); +} +//! [6] + +//! [11] +void MainWindow::about() +//! [11] //! [12] +{ + QMessageBox::about(this, tr("About Scribble"), + tr("<p>The <b>Scribble</b> example shows how to use QMainWindow as the " + "base widget for an application, and how to reimplement some of " + "QWidget's event handlers to receive the events generated for " + "the application's widgets:</p><p> We reimplement the mouse event " + "handlers to facilitate drawing, the paint event handler to " + "update the application and the resize event handler to optimize " + "the application's appearance. In addition we reimplement the " + "close event handler to intercept the close events before " + "terminating the application.</p><p> The example also demonstrates " + "how to use QPainter to draw an image in real time, as well as " + "to repaint widgets.</p>")); +} +//! [12] + +//! [13] +void MainWindow::createActions() +//! [13] //! [14] +{ + openAct = new QAction(tr("&Open..."), this); + openAct->setShortcut(tr("Ctrl+O")); + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); + + foreach (QByteArray format, QImageWriter::supportedImageFormats()) { + QString text = tr("%1...").arg(QString(format).toUpper()); + + QAction *action = new QAction(text, this); + action->setData(format); + connect(action, SIGNAL(triggered()), this, SLOT(save())); + saveAsActs.append(action); + } + + printAct = new QAction(tr("&Print..."), this); + connect(printAct, SIGNAL(triggered()), scribbleArea, SLOT(print())); + + exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcut(tr("Ctrl+Q")); + connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); + + clearScreenAct = new QAction(tr("&Clear Screen"), this); + clearScreenAct->setShortcut(tr("Ctrl+L")); + connect(clearScreenAct, SIGNAL(triggered()), + scribbleArea, SLOT(clearImage())); + + aboutAct = new QAction(tr("&About"), this); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + + aboutQtAct = new QAction(tr("About &Qt"), this); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); +} +//! [14] + +//! [15] +void MainWindow::createMenus() +//! [15] //! [16] +{ + saveAsMenu = new QMenu(tr("&Save As"), this); + foreach (QAction *action, saveAsActs) + saveAsMenu->addAction(action); + + fileMenu = new QMenu(tr("&File"), this); + fileMenu->addAction(openAct); + fileMenu->addMenu(saveAsMenu); + fileMenu->addAction(printAct); + fileMenu->addSeparator(); + fileMenu->addAction(exitAct); + + optionMenu = new QMenu(tr("&Options"), this); + optionMenu->addAction(clearScreenAct); + + helpMenu = new QMenu(tr("&Help"), this); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); + + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(optionMenu); + menuBar()->addMenu(helpMenu); +} +//! [16] + +//! [17] +bool MainWindow::maybeSave() +//! [17] //! [18] +{ + if (scribbleArea->isModified()) { + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Scribble"), + tr("The image has been modified.\n" + "Do you want to save your changes?"), + QMessageBox::Save | QMessageBox::Discard + | QMessageBox::Cancel); + if (ret == QMessageBox::Save) { + return saveFile("png"); + } else if (ret == QMessageBox::Cancel) { + return false; + } + } + return true; +} +//! [18] + +//! [19] +bool MainWindow::saveFile(const QByteArray &fileFormat) +//! [19] //! [20] +{ + QString initialPath = QDir::currentPath() + "/untitled." + fileFormat; + + QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), + initialPath, + tr("%1 Files (*.%2);;All Files (*)") + .arg(QString(fileFormat.toUpper())) + .arg(QString(fileFormat))); + if (fileName.isEmpty()) { + return false; + } else { + return scribbleArea->saveImage(fileName, fileFormat); + } +} +//! [20] diff --git a/examples/touch/fingerpaint/mainwindow.h b/examples/touch/fingerpaint/mainwindow.h new file mode 100644 index 0000000..714748e --- /dev/null +++ b/examples/touch/fingerpaint/mainwindow.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QList> +#include <QMainWindow> + +class ScribbleArea; + +//! [0] +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +protected: + void closeEvent(QCloseEvent *event); + +private slots: + void open(); + void save(); + void about(); + +private: + void createActions(); + void createMenus(); + bool maybeSave(); + bool saveFile(const QByteArray &fileFormat); + + ScribbleArea *scribbleArea; + + QMenu *saveAsMenu; + QMenu *fileMenu; + QMenu *optionMenu; + QMenu *helpMenu; + + QAction *openAct; + QList<QAction *> saveAsActs; + QAction *exitAct; + QAction *printAct; + QAction *clearScreenAct; + QAction *aboutAct; + QAction *aboutQtAct; +}; +//! [0] + +#endif diff --git a/examples/touch/fingerpaint/scribblearea.cpp b/examples/touch/fingerpaint/scribblearea.cpp new file mode 100644 index 0000000..f16c334 --- /dev/null +++ b/examples/touch/fingerpaint/scribblearea.cpp @@ -0,0 +1,211 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "scribblearea.h" + +//! [0] +ScribbleArea::ScribbleArea(QWidget *parent) + : QWidget(parent) +{ + setAttribute(Qt::WA_AcceptTouchEvents); + setAttribute(Qt::WA_StaticContents); + modified = false; + + myPenColors + << QColor("green") + << QColor("purple") + << QColor("red") + << QColor("blue") + << QColor("yellow") + + << QColor("pink") + << QColor("orange") + << QColor("brown") + << QColor("grey") + << QColor("black"); +} +//! [0] + +//! [1] +bool ScribbleArea::openImage(const QString &fileName) +//! [1] //! [2] +{ + QImage loadedImage; + if (!loadedImage.load(fileName)) + return false; + + QSize newSize = loadedImage.size().expandedTo(size()); + resizeImage(&loadedImage, newSize); + image = loadedImage; + modified = false; + update(); + return true; +} +//! [2] + +//! [3] +bool ScribbleArea::saveImage(const QString &fileName, const char *fileFormat) +//! [3] //! [4] +{ + QImage visibleImage = image; + resizeImage(&visibleImage, size()); + + if (visibleImage.save(fileName, fileFormat)) { + modified = false; + return true; + } else { + return false; + } +} +//! [4] + +//! [9] +void ScribbleArea::clearImage() +//! [9] //! [10] +{ + image.fill(qRgb(255, 255, 255)); + modified = true; + update(); +} +//! [10] + +//! [12] //! [13] +void ScribbleArea::paintEvent(QPaintEvent *event) +//! [13] //! [14] +{ + QPainter painter(this); + const QRect rect = event->rect(); + painter.drawImage(rect.topLeft(), image, rect); +} +//! [14] + +//! [15] +void ScribbleArea::resizeEvent(QResizeEvent *event) +//! [15] //! [16] +{ + if (width() > image.width() || height() > image.height()) { + int newWidth = qMax(width() + 128, image.width()); + int newHeight = qMax(height() + 128, image.height()); + resizeImage(&image, QSize(newWidth, newHeight)); + update(); + } + QWidget::resizeEvent(event); +} +//! [16] + +//! [19] +void ScribbleArea::resizeImage(QImage *image, const QSize &newSize) +//! [19] //! [20] +{ + if (image->size() == newSize) + return; + + QImage newImage(newSize, QImage::Format_RGB32); + newImage.fill(qRgb(255, 255, 255)); + QPainter painter(&newImage); + painter.drawImage(QPoint(0, 0), *image); + *image = newImage; +} +//! [20] + +//! [21] +void ScribbleArea::print() +{ +#ifndef QT_NO_PRINTER + QPrinter printer(QPrinter::HighResolution); + + QPrintDialog *printDialog = new QPrintDialog(&printer, this); +//! [21] //! [22] + if (printDialog->exec() == QDialog::Accepted) { + QPainter painter(&printer); + QRect rect = painter.viewport(); + QSize size = image.size(); + size.scale(rect.size(), Qt::KeepAspectRatio); + painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); + painter.setWindow(image.rect()); + painter.drawImage(0, 0, image); + } +#endif // QT_NO_PRINTER +} +//! [22] + +bool ScribbleArea::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + { + QList<QTouchEvent::TouchPoint> touchPoints = static_cast<QTouchEvent *>(event)->touchPoints(); + foreach (const QTouchEvent::TouchPoint &touchPoint, touchPoints) { + switch (touchPoint.state()) { + case Qt::TouchPointStationary: + // don't do anything if this touch point hasn't moved + continue; + default: + { + QRectF rect = touchPoint.rect(); + if (rect.isEmpty()) { + qreal diameter = qreal(50) * touchPoint.pressure(); + rect.setSize(QSizeF(diameter, diameter)); + } + + QPainter painter(&image); + painter.setPen(Qt::NoPen); + painter.setBrush(myPenColors.at(touchPoint.id() % myPenColors.count())); + painter.drawEllipse(rect); + painter.end(); + + modified = true; + int rad = 2; + update(rect.toRect().adjusted(-rad,-rad, +rad, +rad)); + } + break; + } + } + break; + } + default: + return QWidget::event(event); + } + return true; +} diff --git a/examples/touch/fingerpaint/scribblearea.h b/examples/touch/fingerpaint/scribblearea.h new file mode 100644 index 0000000..2e4fbda --- /dev/null +++ b/examples/touch/fingerpaint/scribblearea.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SCRIBBLEAREA_H +#define SCRIBBLEAREA_H + +#include <QColor> +#include <QImage> +#include <QPoint> +#include <QWidget> + +//! [0] +class ScribbleArea : public QWidget +{ + Q_OBJECT + +public: + ScribbleArea(QWidget *parent = 0); + + bool openImage(const QString &fileName); + bool saveImage(const QString &fileName, const char *fileFormat); + + bool isModified() const { return modified; } + +public slots: + void clearImage(); + void print(); + +protected: + void paintEvent(QPaintEvent *event); + void resizeEvent(QResizeEvent *event); + bool event(QEvent *event); + +private: + void resizeImage(QImage *image, const QSize &newSize); + + bool modified; + QList<QColor> myPenColors; + QImage image; +}; +//! [0] + +#endif diff --git a/examples/touch/knobs/knob.cpp b/examples/touch/knobs/knob.cpp new file mode 100644 index 0000000..6ddd9b3 --- /dev/null +++ b/examples/touch/knobs/knob.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "knob.h" + +#include <QBrush> +#include <QTouchEvent> + +Knob::Knob() + : QGraphicsEllipseItem(-50, -50, 100, 100) +{ + setAcceptTouchEvents(true); + setBrush(Qt::lightGray); + + QGraphicsEllipseItem *leftItem = new QGraphicsEllipseItem(0, 0, 20, 20, this); + leftItem->setPos(-40, -10); + leftItem->setBrush(Qt::darkGreen); + + QGraphicsEllipseItem *rightItem = new QGraphicsEllipseItem(0, 0, 20, 20, this); + rightItem->setPos(20, -10); + rightItem->setBrush(Qt::darkRed); +} + +bool Knob::sceneEvent(QEvent *event) +{ + switch (event->type()) { + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + { + QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event); + + if (touchEvent->touchPoints().count() == 2) { + const QTouchEvent::TouchPoint &touchPoint1 = touchEvent->touchPoints().first(); + const QTouchEvent::TouchPoint &touchPoint2 = touchEvent->touchPoints().last(); + + QLineF line1(touchPoint1.lastScenePos(), touchPoint2.lastScenePos()); + QLineF line2(touchPoint1.scenePos(), touchPoint2.scenePos()); + + rotate(line2.angleTo(line1)); + } + + break; + } + + default: + return QGraphicsItem::sceneEvent(event); + } + + return true; +} diff --git a/examples/touch/knobs/knob.h b/examples/touch/knobs/knob.h new file mode 100644 index 0000000..d4e8730 --- /dev/null +++ b/examples/touch/knobs/knob.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef KNOB_H +#define KNOB_H + +#include <QGraphicsItem> + +class Knob : public QGraphicsEllipseItem +{ +public: + Knob(); + + bool sceneEvent(QEvent *event); +}; + +#endif // KNOB_H diff --git a/examples/touch/knobs/knobs.pro b/examples/touch/knobs/knobs.pro new file mode 100644 index 0000000..ef01c9a --- /dev/null +++ b/examples/touch/knobs/knobs.pro @@ -0,0 +1,8 @@ +HEADERS = knob.h +SOURCES = main.cpp knob.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/touch/knobs +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS knobs.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/touch/knobs +INSTALLS += target sources diff --git a/examples/touch/knobs/main.cpp b/examples/touch/knobs/main.cpp new file mode 100644 index 0000000..0866f78 --- /dev/null +++ b/examples/touch/knobs/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> +#include <QGraphicsView> + +#include "knob.h" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + QGraphicsScene scene; + QGraphicsView view(&scene); + + Knob *knob1 = new Knob; + knob1->setPos(-110, 0); + Knob *knob2 = new Knob; + + scene.addItem(knob1); + scene.addItem(knob2); + + view.showMaximized(); + view.fitInView(scene.sceneRect().adjusted(-20, -20, 20, 20), Qt::KeepAspectRatio); + + return app.exec(); +} diff --git a/examples/touch/pinchzoom/graphicsview.cpp b/examples/touch/pinchzoom/graphicsview.cpp new file mode 100644 index 0000000..041e494 --- /dev/null +++ b/examples/touch/pinchzoom/graphicsview.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "graphicsview.h" + +#include <QScrollBar> +#include <QTouchEvent> + +GraphicsView::GraphicsView(QGraphicsScene *scene, QWidget *parent) + : QGraphicsView(scene, parent), totalScaleFactor(1) +{ + viewport()->setAttribute(Qt::WA_AcceptTouchEvents); + setDragMode(ScrollHandDrag); +} + +bool GraphicsView::viewportEvent(QEvent *event) +{ + switch (event->type()) { + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + { + QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event); + QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints(); + if (touchPoints.count() == 2) { + // determine scale factor + const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first(); + const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last(); + qreal currentScaleFactor = + QLineF(touchPoint0.pos(), touchPoint1.pos()).length() + / QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length(); + if (touchEvent->touchPointStates() & Qt::TouchPointReleased) { + // if one of the fingers is released, remember the current scale + // factor so that adding another finger later will continue zooming + // by adding new scale factor to the existing remembered value. + totalScaleFactor *= currentScaleFactor; + currentScaleFactor = 1; + } + setTransform(QTransform().scale(totalScaleFactor * currentScaleFactor, + totalScaleFactor * currentScaleFactor)); + } + return true; + } + default: + break; + } + return QGraphicsView::viewportEvent(event); +} diff --git a/examples/touch/pinchzoom/graphicsview.h b/examples/touch/pinchzoom/graphicsview.h new file mode 100644 index 0000000..c762786 --- /dev/null +++ b/examples/touch/pinchzoom/graphicsview.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#pragma once +#include <QGraphicsView> + +class GraphicsView : public QGraphicsView +{ + Q_OBJECT + +public: + GraphicsView(QGraphicsScene *scene = 0, QWidget *parent = 0); + + bool viewportEvent(QEvent *event); + +private: + qreal totalScaleFactor; +}; diff --git a/examples/touch/pinchzoom/main.cpp b/examples/touch/pinchzoom/main.cpp new file mode 100644 index 0000000..8abc993 --- /dev/null +++ b/examples/touch/pinchzoom/main.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "graphicsview.h" +#include "mouse.h" + +#include <QtGui> + +#include <math.h> + +static const int MouseCount = 7; + +//! [0] +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); +//! [0] + +//! [1] + QGraphicsScene scene; + scene.setSceneRect(-300, -300, 600, 600); +//! [1] //! [2] + scene.setItemIndexMethod(QGraphicsScene::NoIndex); +//! [2] + +//! [3] + for (int i = 0; i < MouseCount; ++i) { + Mouse *mouse = new Mouse; + mouse->setPos(::sin((i * 6.28) / MouseCount) * 200, + ::cos((i * 6.28) / MouseCount) * 200); + scene.addItem(mouse); + } +//! [3] + +//! [4] + GraphicsView view(&scene); + view.setRenderHint(QPainter::Antialiasing); + view.setBackgroundBrush(QPixmap(":/images/cheese.jpg")); +//! [4] //! [5] + view.setCacheMode(QGraphicsView::CacheBackground); + view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); +//! [5] //! [6] + view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Colliding Mice")); + view.showMaximized(); + + return app.exec(); +} +//! [6] diff --git a/examples/touch/pinchzoom/mice.qrc b/examples/touch/pinchzoom/mice.qrc new file mode 100644 index 0000000..accdb4d --- /dev/null +++ b/examples/touch/pinchzoom/mice.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/" > + <file>images/cheese.jpg</file> + </qresource> +</RCC> diff --git a/examples/touch/pinchzoom/mouse.cpp b/examples/touch/pinchzoom/mouse.cpp new file mode 100644 index 0000000..82617fe --- /dev/null +++ b/examples/touch/pinchzoom/mouse.cpp @@ -0,0 +1,199 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mouse.h" + +#include <QGraphicsScene> +#include <QPainter> +#include <QStyleOption> + +#include <math.h> + +static const double Pi = 3.14159265358979323846264338327950288419717; +static double TwoPi = 2.0 * Pi; + +static qreal normalizeAngle(qreal angle) +{ + while (angle < 0) + angle += TwoPi; + while (angle > TwoPi) + angle -= TwoPi; + return angle; +} + +//! [0] +Mouse::Mouse() + : angle(0), speed(0), mouseEyeDirection(0), + color(qrand() % 256, qrand() % 256, qrand() % 256) +{ + rotate(qrand() % (360 * 16)); + startTimer(1000 / 33); +} +//! [0] + +//! [1] +QRectF Mouse::boundingRect() const +{ + qreal adjust = 0.5; + return QRectF(-18 - adjust, -22 - adjust, + 36 + adjust, 60 + adjust); +} +//! [1] + +//! [2] +QPainterPath Mouse::shape() const +{ + QPainterPath path; + path.addRect(-10, -20, 20, 40); + return path; +} +//! [2] + +//! [3] +void Mouse::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) +{ + // Body + painter->setBrush(color); + painter->drawEllipse(-10, -20, 20, 40); + + // Eyes + painter->setBrush(Qt::white); + painter->drawEllipse(-10, -17, 8, 8); + painter->drawEllipse(2, -17, 8, 8); + + // Nose + painter->setBrush(Qt::black); + painter->drawEllipse(QRectF(-2, -22, 4, 4)); + + // Pupils + painter->drawEllipse(QRectF(-8.0 + mouseEyeDirection, -17, 4, 4)); + painter->drawEllipse(QRectF(4.0 + mouseEyeDirection, -17, 4, 4)); + + // Ears + painter->setBrush(scene()->collidingItems(this).isEmpty() ? Qt::darkYellow : Qt::red); + painter->drawEllipse(-17, -12, 16, 16); + painter->drawEllipse(1, -12, 16, 16); + + // Tail + QPainterPath path(QPointF(0, 20)); + path.cubicTo(-5, 22, -5, 22, 0, 25); + path.cubicTo(5, 27, 5, 32, 0, 30); + path.cubicTo(-5, 32, -5, 42, 0, 35); + painter->setBrush(Qt::NoBrush); + painter->drawPath(path); +} +//! [3] + +//! [4] +void Mouse::timerEvent(QTimerEvent *) +{ +//! [4] + // Don't move too far away +//! [5] + QLineF lineToCenter(QPointF(0, 0), mapFromScene(0, 0)); + if (lineToCenter.length() > 150) { + qreal angleToCenter = ::acos(lineToCenter.dx() / lineToCenter.length()); + if (lineToCenter.dy() < 0) + angleToCenter = TwoPi - angleToCenter; + angleToCenter = normalizeAngle((Pi - angleToCenter) + Pi / 2); + + if (angleToCenter < Pi && angleToCenter > Pi / 4) { + // Rotate left + angle += (angle < -Pi / 2) ? 0.25 : -0.25; + } else if (angleToCenter >= Pi && angleToCenter < (Pi + Pi / 2 + Pi / 4)) { + // Rotate right + angle += (angle < Pi / 2) ? 0.25 : -0.25; + } + } else if (::sin(angle) < 0) { + angle += 0.25; + } else if (::sin(angle) > 0) { + angle -= 0.25; +//! [5] //! [6] + } +//! [6] + + // Try not to crash with any other mice +//! [7] + QList<QGraphicsItem *> dangerMice = scene()->items(QPolygonF() + << mapToScene(0, 0) + << mapToScene(-30, -50) + << mapToScene(30, -50)); + foreach (QGraphicsItem *item, dangerMice) { + if (item == this) + continue; + + QLineF lineToMouse(QPointF(0, 0), mapFromItem(item, 0, 0)); + qreal angleToMouse = ::acos(lineToMouse.dx() / lineToMouse.length()); + if (lineToMouse.dy() < 0) + angleToMouse = TwoPi - angleToMouse; + angleToMouse = normalizeAngle((Pi - angleToMouse) + Pi / 2); + + if (angleToMouse >= 0 && angleToMouse < Pi / 2) { + // Rotate right + angle += 0.5; + } else if (angleToMouse <= TwoPi && angleToMouse > (TwoPi - Pi / 2)) { + // Rotate left + angle -= 0.5; +//! [7] //! [8] + } +//! [8] //! [9] + } +//! [9] + + // Add some random movement +//! [10] + if (dangerMice.size() > 1 && (qrand() % 10) == 0) { + if (qrand() % 1) + angle += (qrand() % 100) / 500.0; + else + angle -= (qrand() % 100) / 500.0; + } +//! [10] + +//! [11] + speed += (-50 + qrand() % 100) / 100.0; + + qreal dx = ::sin(angle) * 10; + mouseEyeDirection = (qAbs(dx / 5) < 1) ? 0 : dx / 5; + + rotate(dx); + setPos(mapToParent(0, -(3 + sin(speed) * 3))); +} +//! [11] diff --git a/examples/touch/pinchzoom/mouse.h b/examples/touch/pinchzoom/mouse.h new file mode 100644 index 0000000..241f8ab --- /dev/null +++ b/examples/touch/pinchzoom/mouse.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MOUSE_H +#define MOUSE_H + +#include <QGraphicsObject> + +//! [0] +class Mouse : public QGraphicsObject +{ + Q_OBJECT + +public: + Mouse(); + + QRectF boundingRect() const; + QPainterPath shape() const; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget); + +protected: + void timerEvent(QTimerEvent *event); + +private: + qreal angle; + qreal speed; + qreal mouseEyeDirection; + QColor color; +}; +//! [0] + +#endif diff --git a/examples/touch/pinchzoom/pinchzoom.pro b/examples/touch/pinchzoom/pinchzoom.pro new file mode 100644 index 0000000..804536b --- /dev/null +++ b/examples/touch/pinchzoom/pinchzoom.pro @@ -0,0 +1,16 @@ +HEADERS += \ + mouse.h \ + graphicsview.h +SOURCES += \ + main.cpp \ + mouse.cpp \ + graphicsview.cpp + +RESOURCES += \ + mice.qrc + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/touch/pinchzoom +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS pinchzoom.pro images +sources.path = $$[QT_INSTALL_EXAMPLES]/touch/pinchzoom +INSTALLS += target sources diff --git a/examples/touch/touch.pro b/examples/touch/touch.pro new file mode 100644 index 0000000..d5983eb --- /dev/null +++ b/examples/touch/touch.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS = pinchzoom fingerpaint knobs dials -- cgit v0.12 From 12f129eb1e1472e5eec561ab780ed709e5b66987 Mon Sep 17 00:00:00 2001 From: Markus Goetz <Markus.Goetz@nokia.com> Date: Thu, 12 Aug 2010 17:29:29 +0200 Subject: QNAM HTTP: Fix crash related to aborted uploads Task-number: QTBUG-12285 --- src/network/access/qhttpnetworkconnection.cpp | 2 ++ src/network/access/qhttpnetworkconnectionchannel.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index def4c34..5de199e 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -651,6 +651,8 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply) // is the reply associated the currently processing of this channel? if (channels[i].reply == reply) { channels[i].reply = 0; + channels[i].request = QHttpNetworkRequest(); + channels[i].resendCurrent = false; if (!reply->isFinished() && !channels[i].alreadyPipelinedRequests.isEmpty()) { // the reply had to be prematurely removed, e.g. it was not finished diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 6a13669..ddc5d05 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -644,8 +644,10 @@ void QHttpNetworkConnectionChannel::allDone() // finished request. // Note that this may trigger a segfault at some other point. But then we can fix the underlying // problem. - if (!resendCurrent) + if (!resendCurrent) { + request = QHttpNetworkRequest(); reply = 0; + } // move next from pipeline to current request if (!alreadyPipelinedRequests.isEmpty()) { -- cgit v0.12 From 6155050f68cc86c445552da61a5f240c16f5e2cd Mon Sep 17 00:00:00 2001 From: Rhys Weatherley <rhys.weatherley@nokia.com> Date: Fri, 13 Aug 2010 10:50:31 +1000 Subject: Don't define highp/mediump/lowp if desktop GL has them OpenGL 4.0 systems now have compatibility with ES2, including support for the precision qualifiers. If the GL_ARB_ES2_compatibility extension is present, then we don't define highp/mediump/lowp to the empty string. Task-number: QTBUG-12862 Reviewed-by: Sarah Smith --- dist/changes-4.6.4 | 5 +++-- src/opengl/qgl.cpp | 3 +++ src/opengl/qgl_p.h | 3 ++- src/opengl/qglshaderprogram.cpp | 10 ++++++++-- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/dist/changes-4.6.4 b/dist/changes-4.6.4 index 381023f..ab59dc5 100644 --- a/dist/changes-4.6.4 +++ b/dist/changes-4.6.4 @@ -63,8 +63,9 @@ QtNetwork QtOpenGL -------- - - foo - * bar + - QGLShaderProgram + * [QTBUG-12862] Don't #define highp/mediump/lowp if the desktop OpenGL + implementation has the GL_ARB_ES2_compatibility extension. QtScript -------- diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 0521bab..0137c85 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -4923,6 +4923,8 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions() glExtensions |= FragmentProgram; if (extensions.match("GL_ARB_fragment_shader")) glExtensions |= FragmentShader; + if (extensions.match("GL_ARB_ES2_compatibility")) + glExtensions |= ES2Compatibility; if (extensions.match("GL_ARB_texture_mirrored_repeat")) glExtensions |= MirroredRepeat; if (extensions.match("GL_EXT_framebuffer_object")) @@ -4941,6 +4943,7 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions() glExtensions |= FramebufferObject; glExtensions |= GenerateMipmap; glExtensions |= FragmentShader; + glExtensions |= ES2Compatibility; #endif #if defined(QT_OPENGL_ES_1) || defined(QT_OPENGL_ES_1_CL) if (extensions.match("GL_OES_framebuffer_object")) diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 4facb65..1603ca1 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -291,7 +291,8 @@ public: DDSTextureCompression = 0x00008000, ETC1TextureCompression = 0x00010000, PVRTCTextureCompression = 0x00020000, - FragmentShader = 0x00040000 + FragmentShader = 0x00040000, + ES2Compatibility = 0x00080000 }; Q_DECLARE_FLAGS(Extensions, Extension) diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp index edbb635..9bfe027 100644 --- a/src/opengl/qglshaderprogram.cpp +++ b/src/opengl/qglshaderprogram.cpp @@ -97,6 +97,10 @@ QT_BEGIN_NAMESPACE to just features that are present in GLSL/ES, and avoid standard variable names that only work on the desktop. + If the \c{GL_ARB_ES2_compatibility} extension is present, + then the above prefix is not added because the desktop OpenGL + implementation supports precision qualifiers. + \section1 Simple shader example \snippet doc/src/snippets/code/src_opengl_qglshaderprogram.cpp 1 @@ -390,8 +394,10 @@ bool QGLShader::compileSourceCode(const char *source) srclen.append(GLint(headerLen)); } #ifdef QGL_DEFINE_QUALIFIERS - src.append(qualifierDefines); - srclen.append(GLint(sizeof(qualifierDefines) - 1)); + if (!(QGLExtensions::glExtensions() & QGLExtensions::ES2Compatibility)) { + src.append(qualifierDefines); + srclen.append(GLint(sizeof(qualifierDefines) - 1)); + } #endif #ifdef QGL_REDEFINE_HIGHP if (d->shaderType == Fragment) { -- cgit v0.12 From 36a98407ce53e2d7ae6f1ef3b65794b113ae1606 Mon Sep 17 00:00:00 2001 From: Rhys Weatherley <rhys.weatherley@nokia.com> Date: Fri, 13 Aug 2010 11:25:55 +1000 Subject: Update changes-4.6.4 with recent shader program changes --- dist/changes-4.6.4 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dist/changes-4.6.4 b/dist/changes-4.6.4 index ab59dc5..dbb2189 100644 --- a/dist/changes-4.6.4 +++ b/dist/changes-4.6.4 @@ -64,6 +64,8 @@ QtOpenGL -------- - QGLShaderProgram + * [QTBUG-12478] Don't resolve GLSL extensions if no shaders. + * [QTBUG-12591] setUniformValue(QSize) was setting (w,w) not (w,h). * [QTBUG-12862] Don't #define highp/mediump/lowp if the desktop OpenGL implementation has the GL_ARB_ES2_compatibility extension. -- cgit v0.12 From 6a4bb9e215e0e33a1e1ca926f93bdea89d1ec042 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Wed, 11 Aug 2010 12:46:59 +0300 Subject: Gcce building support for symbian-sbsv2 It is now possible to use "release-gcce" and "debug-gcce" targets in symbian-sbsv2 mkspec. Exports and cleans should also now work properly for all target platforms under symbian-sbsv2. Task-number: QTBUG-12762 Reviewed-by: Jason Barron (cherry picked from commit bdfbedf971f3e9ef99977652308b9e2b1c213210) --- mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm | 2 +- mkspecs/symbian-sbsv2/flm/qt/qt.xml | 1 + qmake/generators/symbian/symmake_sbsv2.cpp | 176 ++++++++++++++++----- qmake/generators/symbian/symmake_sbsv2.h | 7 + 4 files changed, 145 insertions(+), 41 deletions(-) diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm index e0b6503..47c3f1e 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm +++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm @@ -38,7 +38,7 @@ $(STORE_BUILD_TARGET): echo "# make sis target." >> $(CACHE_FILENAME) && \ echo "# Version : " >> $(CACHE_FILENAME) && \ echo "# ==============================================================================" >> $(CACHE_FILENAME) && \ - echo QT_SIS_TARGET ?= $(VISUAL_CFG)-$(PLATFORM_PATH) >> $(CACHE_FILENAME) \ + echo QT_SIS_TARGET ?= $(VISUAL_CFG)-$(VARIANTPLATFORM) >> $(CACHE_FILENAME) $(call endrule,qmake_store_build) endef diff --git a/mkspecs/symbian-sbsv2/flm/qt/qt.xml b/mkspecs/symbian-sbsv2/flm/qt/qt.xml index 0f7db3c..12857a2 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qt.xml +++ b/mkspecs/symbian-sbsv2/flm/qt/qt.xml @@ -37,5 +37,6 @@ <interface name="qt.qmake_store_build" extends="Symbian.UserFLM" flm="qmake_store_build.flm"> + <param name='VARIANTPLATFORM' /> </interface> </build> diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index 78f6f85..534a080 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -56,6 +56,12 @@ SymbianSbsv2MakefileGenerator::~SymbianSbsv2MakefileGenerator() { } #define FLM_DEST_DIR "epoc32/tools/makefile_templates/qt" #define FLM_SOURCE_DIR "/mkspecs/symbian-sbsv2/flm/qt" +#define UNDETECTED_GCCE_VERSION "0" +#define PLATFORM_GCCE "gcce" +#define PLATFORM_WINSCW "winscw" +#define PLATFORM_ARMV5 "armv5" +#define BUILD_DEBUG "udeb" +#define BUILD_RELEASE "urel" // Copies Qt FLMs to correct location under epocroot. // This is not done by configure as it is possible to change epocroot after configure. @@ -90,6 +96,67 @@ void SymbianSbsv2MakefileGenerator::exportFlm() } } +QString SymbianSbsv2MakefileGenerator::gcceVersion() +{ + static QString gcceVersionStr; + + if (gcceVersionStr.isEmpty()) { + // First check if QT_GCCE_VERSION has been set, and use that if it is + QByteArray qtGcceVersion = qgetenv("QT_GCCE_VERSION"); + if (!qtGcceVersion.isEmpty()) { + // Check that QT_GCCE_VERSION is in proper format + QString check(qtGcceVersion); + check.replace(QRegExp("^\\d+\\.\\d+\\.\\d+$"),QString()); + if (check.isEmpty()) { + gcceVersionStr = PLATFORM_GCCE + QString(qtGcceVersion).replace(".","_"); + return gcceVersionStr; + } else { + fprintf(stderr, "Warning: Environment variable QT_GCCE_VERSION ('%s') is in incorrect " + "format, expected format is: '1.2.3'. Attempting to autodetect GCCE version.", + qtGcceVersion.constData()); + } + } + // Sbsv2 has separate env variable defined for each gcce version, so try to determine + // which user is likely to want to use by checking version 4.0.0 to 9.9.9 and taking + // the highest found version that actually points to a valid path. + // This is kind of a kludge, but since qmake doesn't bootstrap QProcess, there + // is no Qt API available to get all environment variables. + for (int i = 9; i >= 4; i--) { + for (int j = 9; j >= 0; j--) { + for (int k = 9; k >= 0; k--) { + QByteArray gcceVar = qgetenv(qPrintable(QString("SBS_GCCE%1%2%3BIN").arg(i).arg(j).arg(k))); + if (!gcceVar.isEmpty() && fileInfo(QString::fromLocal8Bit(gcceVar.constData())).exists()) { + gcceVersionStr = QString(PLATFORM_GCCE "%1_%2_%3").arg(i).arg(j).arg(k); + return gcceVersionStr; + } + } + } + } + } + + // Indicate undetected version to avoid rechecking multiple times + if (gcceVersionStr.isEmpty()) + gcceVersionStr = UNDETECTED_GCCE_VERSION; + + return gcceVersionStr; +} + +QString SymbianSbsv2MakefileGenerator::configClause(QString &platform, + QString &build, + QString &winscwClauseTemplate, + QString &gcceClauseTemplate, + QString &genericClauseTemplate) +{ + QString retval; + if (QString::compare(platform, PLATFORM_WINSCW) == 0) + retval = winscwClauseTemplate.arg(build); + else if (QString::compare(platform, PLATFORM_GCCE) == 0) + retval = gcceClauseTemplate.arg(build); + else + retval = genericClauseTemplate.arg(platform).arg(build); + return retval; +} + void SymbianSbsv2MakefileGenerator::writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t) { for (int i = 0; i < depList.size(); ++i) { @@ -118,21 +185,45 @@ void SymbianSbsv2MakefileGenerator::writeMkFile(const QString& wrapperFileName, void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile) { + static QString debugBuild(BUILD_DEBUG); + static QString releaseBuild(BUILD_RELEASE); + QStringList allPlatforms; foreach(QString platform, project->values("SYMBIAN_PLATFORMS")) { allPlatforms << platform.toLower(); } - QStringList debugPlatforms = allPlatforms; - QStringList releasePlatforms = allPlatforms; - releasePlatforms.removeAll("winscw"); // No release for emulator - QString testClause; if (project->isActiveConfig(SYMBIAN_TEST_CONFIG)) testClause = QLatin1String(".test"); else testClause = QLatin1String(""); + QString genericClause = " -c %1_%2" + testClause; + QString winscwClause = " -c winscw_%1.mwccinc" + testClause; + QString gcceClause; + if (QString::compare(gcceVersion(), UNDETECTED_GCCE_VERSION) == 0) + allPlatforms.removeAll(PLATFORM_GCCE); + else + gcceClause = " -c arm.v5.%1." + gcceVersion() + ".release_gcce" + testClause; + + QStringList allClauses; + QStringList debugClauses; + QStringList releaseClauses; + + QStringList debugPlatforms = allPlatforms; + QStringList releasePlatforms = allPlatforms; + releasePlatforms.removeAll(PLATFORM_WINSCW); // No release for emulator + + foreach(QString item, debugPlatforms) { + debugClauses << configClause(item, debugBuild, winscwClause, gcceClause, genericClause); + } + foreach(QString item, releasePlatforms) { + releaseClauses << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause); + } + allClauses << debugClauses << releaseClauses; + + QTextStream t(&wrapperFile); t << "# ==============================================================================" << endl; @@ -172,9 +263,9 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo } t << endl; t << "first: default" << endl; - if (debugPlatforms.contains("winscw")) + if (debugPlatforms.contains(PLATFORM_WINSCW)) t << "default: debug-winscw"; - else if (debugPlatforms.contains("armv5")) + else if (debugPlatforms.contains(PLATFORM_ARMV5)) t << "default: debug-armv5"; else if (debugPlatforms.size()) t << "default: debug-" << debugPlatforms.first(); @@ -195,52 +286,50 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << "\t$(QMAKE)" << endl; t << endl; - QString winscw("winscw"); + QString currentClause; + t << "debug: " << BLD_INF_FILENAME << endl; t << "\t$(SBS)"; - foreach(QString item, debugPlatforms) { - if(QString::compare(item, winscw) == 0) - t << " -c " << item << "_udeb.mwccinc" << testClause; - else - t << " -c " << item << "_udeb" << testClause; + foreach(QString item, debugClauses) { + t << item; } t << endl; t << "release: " << BLD_INF_FILENAME << endl; t << "\t$(SBS)"; - foreach(QString item, releasePlatforms) { - if(QString::compare(item, winscw) == 0) - t << " -c " << item << "_urel.mwccinc" << testClause; - else - t << " -c " << item << "_urel" << testClause; + foreach(QString item, releaseClauses) { + t << item; } t << endl; // For more specific builds, targets are in this form: build-platform, e.g. release-armv5 foreach(QString item, debugPlatforms) { t << "debug-" << item << ": " << BLD_INF_FILENAME << endl; - if(QString::compare(item, winscw) == 0) - t << "\t$(SBS) -c " << item << "_udeb.mwccinc" << testClause << endl; - else - t << "\t$(SBS) -c " << item << "_udeb" << testClause << endl; + t << "\t$(SBS)"; + t << configClause(item, debugBuild, winscwClause, gcceClause, genericClause); + t << endl; } foreach(QString item, releasePlatforms) { t << "release-" << item << ": " << BLD_INF_FILENAME << endl; - if(QString::compare(item, winscw) == 0) - t << "\t$(SBS) -c " << item << "_urel.mwccinc" << testClause << endl; - else - t << "\t$(SBS) -c " << item << "_urel" << testClause << endl; + t << "\t$(SBS)"; + t << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause); + t << endl; } t << endl; t << "export: " << BLD_INF_FILENAME << endl; - t << "\t$(SBS) export" << endl; - t << endl; + t << "\t$(SBS) export"; + foreach(QString clause, allClauses) { + t << clause; + } + t << endl << endl; t << "cleanexport: " << BLD_INF_FILENAME << endl; - t << "\t$(SBS) cleanexport" << endl; - t << endl; - + t << "\t$(SBS) cleanexport"; + foreach(QString clause, allClauses) { + t << clause; + } + t << endl << endl; } // Add all extra targets including extra compiler targest also to wrapper makefile, @@ -258,30 +347,37 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo generateDistcleanTargets(t); t << "clean: " << BLD_INF_FILENAME << endl; - t << "\t-$(SBS) reallyclean" << endl; - t << endl; + t << "\t-$(SBS) reallyclean"; + foreach(QString clause, allClauses) { + t << clause; + } + t << endl << endl; t << "clean-debug: " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean"; - foreach(QString item, debugPlatforms) { - t << " -c " << item << "_udeb" << testClause; + foreach(QString clause, debugClauses) { + t << clause; } - t << endl; + t << endl << endl; t << "clean-release: " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean"; - foreach(QString item, releasePlatforms) { - t << " -c " << item << "_urel" << testClause; + foreach(QString clause, releaseClauses) { + t << clause; } - t << endl; + t << endl << endl; // For more specific builds, targets are in this form: clean-build-platform, e.g. clean-release-armv5 foreach(QString item, debugPlatforms) { t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl; - t << "\t$(SBS) reallyclean -c " << item << "_udeb" << testClause << endl; + t << "\t$(SBS) reallyclean"; + t << configClause(item, debugBuild, winscwClause, gcceClause, genericClause); + t << endl; } foreach(QString item, releasePlatforms) { t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl; - t << "\t$(SBS) reallyclean -c " << item << "_urel" << testClause << endl; + t << "\t$(SBS) reallyclean"; + t << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause); + t << endl; } t << endl; } diff --git a/qmake/generators/symbian/symmake_sbsv2.h b/qmake/generators/symbian/symmake_sbsv2.h index 286c91c..6644a03 100644 --- a/qmake/generators/symbian/symmake_sbsv2.h +++ b/qmake/generators/symbian/symmake_sbsv2.h @@ -65,6 +65,13 @@ public: private: void exportFlm(); + QString gcceVersion(); + QString configClause(QString &platform, + QString &build, + QString &winscwClauseTemplate, + QString &gcceClauseTemplate, + QString &genericClauseTemplate); + void writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t); QString extraTargetsCache; -- cgit v0.12 From c5fad066761030489c9a0221a409518d18c45ef8 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Thu, 12 Aug 2010 15:03:06 +0300 Subject: Make bld.inf target in Symbian mkspecs to depend on .pro file Changes to .pro file weren't previously noticed and therefore qmake wasn't rerun. Qmake command itself was also incorrect. Task-number: QTBUG-12716 Reviewed-by: Shane Kearns (cherry picked from commit 142ce4d38094f1588b04758a6f9ff6787a784fe3) --- qmake/generators/symbian/symmake_abld.cpp | 12 ++++++++---- qmake/generators/symbian/symmake_sbsv2.cpp | 11 +++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp index d60528b..01954f5 100644 --- a/qmake/generators/symbian/symmake_abld.cpp +++ b/qmake/generators/symbian/symmake_abld.cpp @@ -253,13 +253,17 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool } else { t << "all: debug release" << endl; t << endl; + + QString qmakeCmd = "\t$(QMAKE) \"" + project->projectFile() + "\" " + buildArgs(); + t << "qmake:" << endl; - t << "\t$(QMAKE) -spec symbian-abld -o \"" << fileInfo(Option::output.fileName()).fileName() - << "\" \"" << project->projectFile() << "\"" << endl; + t << qmakeCmd << endl; t << endl; - t << BLD_INF_FILENAME ":" << endl; - t << "\t$(QMAKE)" << endl; + + t << BLD_INF_FILENAME ": " << project->projectFile() << endl; + t << qmakeCmd << endl; t << endl; + t << "$(ABLD): " BLD_INF_FILENAME << endl; t << "\tbldmake bldfiles" << endl; t << endl; diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index 534a080..036eb1d 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -278,12 +278,15 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo } else { t << "all: debug release" << endl; t << endl; + + QString qmakeCmd = "\t$(QMAKE) \"" + project->projectFile() + "\" " + buildArgs(); + t << "qmake:" << endl; - t << "\t$(QMAKE) -spec symbian-sbsv2 -o \"" << fileInfo(Option::output.fileName()).fileName() - << "\" \"" << project->projectFile() << "\"" << endl; + t << qmakeCmd << endl; t << endl; - t << BLD_INF_FILENAME ":" << endl; - t << "\t$(QMAKE)" << endl; + + t << BLD_INF_FILENAME ": " << project->projectFile() << endl; + t << qmakeCmd << endl; t << endl; QString currentClause; -- cgit v0.12 From baf23e4547d3fd471d7d60b63aab1a3c98daa35d Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Fri, 9 Jul 2010 14:33:16 +0200 Subject: Doc: fixing examples link (cherry picked from commit 653f180d4697e0c7ec1c58022622d5d140e7fda8) --- doc/src/index.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index f1820ef..466e170 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -44,7 +44,7 @@ <li><a href="installation.html">Installation</a></li> <li><a href="how-to-learn-qt.html">How to learn Qt</a></li> <li><a href="tutorials.html">Tutorials</a></li> - <li><a href="examples.html">Examples</a></li> + <li><a href="all-examples.html">Examples</a></li> <li><a href="qt4-7-intro.html">Whats new in Qt 4.7</a></li> </ul> </div> -- cgit v0.12 From b004dad34039300abfc1058439f6c57063ea8080 Mon Sep 17 00:00:00 2001 From: Justin McPherson <justin.mcpherson@nokia.com> Date: Thu, 12 Aug 2010 16:32:11 +1000 Subject: QAudioOutput(ALSA); Fix check for available devices. ALSA can return a list of one empty item when no devices are available. Task-number: QTBUG-12690 Reviewed-by: Andrew den Exter (cherry picked from commit baf8eabd2c647d6ba2bf0a9dc5103f4726808c3d) --- src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp | 31 +++++++++++++----------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index 36270a7..cea8410 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -426,21 +426,24 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) while (*n != NULL) { name = snd_device_name_get_hint(*n, "NAME"); - descr = snd_device_name_get_hint(*n, "DESC"); - io = snd_device_name_get_hint(*n, "IOID"); - if((name != NULL) && (descr != NULL) && ((io == NULL) || (io == filter))) { - QString deviceName = QLatin1String(name); - QString deviceDescription = QLatin1String(descr); - allDevices.append(deviceName.toLocal8Bit().constData()); - if(deviceDescription.contains(QLatin1String("Default Audio Device"))) - devices.append(deviceName.toLocal8Bit().constData()); - } - if(name != NULL) + if (name != 0 && qstrcmp(name, "null") != 0) { + descr = snd_device_name_get_hint(*n, "DESC"); + io = snd_device_name_get_hint(*n, "IOID"); + + if ((descr != NULL) && ((io == NULL) || (io == filter))) { + QString deviceName = QLatin1String(name); + QString deviceDescription = QLatin1String(descr); + allDevices.append(deviceName.toLocal8Bit().constData()); + if (deviceDescription.contains(QLatin1String("Default Audio Device"))) + devices.append(deviceName.toLocal8Bit().constData()); + } + free(name); - if(descr != NULL) - free(descr); - if(io != NULL) - free(io); + if (descr != NULL) + free(descr); + if (io != NULL) + free(io); + } ++n; } snd_device_name_free_hint(hints); -- cgit v0.12 From c12f452dc06a9a0dfb244dc5124cfca0b3973b0d Mon Sep 17 00:00:00 2001 From: Alexis Menard <alexis.menard@nokia.com> Date: Thu, 12 Aug 2010 14:31:24 +0200 Subject: Properly emit geometryChanged() when the position change. Also emit the signal at the very end, so people can rely on the resize event to adjust some stuff in their item. Reviewed-by:yoann (cherry picked from commit 3ee89bc0830f69d44f272eff5a0c886bff33c92e) --- src/gui/graphicsview/qgraphicswidget.cpp | 3 ++- tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp index c486c45..0fabd18 100644 --- a/src/gui/graphicsview/qgraphicswidget.cpp +++ b/src/gui/graphicsview/qgraphicswidget.cpp @@ -385,12 +385,12 @@ void QGraphicsWidget::setGeometry(const QRectF &rect) if (wd->inSetPos) { //set the new pos d->geom.moveTopLeft(pos()); + emit geometryChanged(); return; } } QSizeF oldSize = size(); QGraphicsLayoutItem::setGeometry(newGeom); - emit geometryChanged(); // Send resize event bool resized = newGeom.size() != oldSize; if (resized) { @@ -403,6 +403,7 @@ void QGraphicsWidget::setGeometry(const QRectF &rect) emit heightChanged(); QApplication::sendEvent(this, &re); } + emit geometryChanged(); } /*! diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index a771332..bda22eb 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -111,6 +111,7 @@ private slots: void fontPropagationSceneChange(); void geometry_data(); void geometry(); + void geometryChanged(); void width(); void height(); void getContentsMargins_data(); @@ -776,11 +777,28 @@ void tst_QGraphicsWidget::geometry() QFETCH(QSizeF, size); widget.setPos(pos); widget.resize(size); - if (!size.isNull()) + if (!size.isNull() && !pos.isNull()) + QCOMPARE(spy.count(), 2); + if (!size.isNull() && pos.isNull()) QCOMPARE(spy.count(), 1); QCOMPARE(widget.geometry(), QRectF(pos, size)); } +void tst_QGraphicsWidget::geometryChanged() +{ + QGraphicsWidget w; + w.setGeometry(0, 0, 200, 200); + QCOMPARE(w.geometry(), QRectF(0, 0, 200, 200)); + QSignalSpy spy(&w, SIGNAL(geometryChanged())); + w.setGeometry(0, 0, 100, 100); + QCOMPARE(spy.count(), 1); + QCOMPARE(w.geometry(), QRectF(0, 0, 100, 100)); + w.setPos(10, 10); + QCOMPARE(spy.count(), 2); + QCOMPARE(w.geometry(), QRectF(10, 10, 100, 100)); + +} + void tst_QGraphicsWidget::width() { QGraphicsWidget w; -- cgit v0.12 From 7723e081fb28c53eb08c0a88386c1a5f14a0a13e Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 5 Aug 2010 14:56:50 +0200 Subject: qdoc: added application flags in doc.pri and fixed QTBUG-12388 Task-nr: QTBUG-12388 (cherry picked from commit c1ce7b4b01c1049c61881bb7d701ed68b92a401b) --- doc/doc.pri | 4 ++-- doc/src/index.qdoc | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/doc.pri b/doc/doc.pri index f748f3d..e1efa21 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -19,8 +19,8 @@ $$unixstyle { QDOC = cd $$QT_SOURCE_TREE/tools/qdoc3/test && set QT_BUILD_TREE=$$QT_BUILD_TREE&& set QT_SOURCE_TREE=$$QT_SOURCE_TREE&& $$QT_BUILD_TREE/bin/qdoc3.exe $$DOCS_GENERATION_DEFINES QDOC = $$replace(QDOC, "/", "\\") } -ADP_DOCS_QDOCCONF_FILE = qt-build-docs.qdocconf -QT_DOCUMENTATION = ($$QDOC qt-api-only.qdocconf assistant.qdocconf designer.qdocconf \ +ADP_DOCS_QDOCCONF_FILE = -online qt-build-docs.qdocconf +QT_DOCUMENTATION = ($$QDOC -assistant qt-api-only.qdocconf assistant.qdocconf designer.qdocconf \ linguist.qdocconf qmake.qdocconf qdeclarative.qdocconf) && \ (cd $$QT_BUILD_TREE && \ $$GENERATOR doc-build/html-qt/qt.qhp -o doc/qch/qt.qch && \ diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 466e170..f15032c 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -94,12 +94,14 @@ </div> <div class="section sectionlist"> <ul> - <li><a href="http://doc.qt.nokia.com/qtcreator-2.0/index.html">Qt Creator</a> (online document)</li> + <li><a href="http://doc.qt.nokia.com/qtcreator-2.0/index.html">Qt Creator</a> (online)</li> <li><a href="designer-manual.html">Qt Designer</a></li> <li><a href="linguist-manual.html">Qt Linguist</a></li> <li><a href="assistant-manual.html">Qt Assistant</a></li> - <li><a href="http://doc.qt.nokia.com/qtsimulator-1.0/simulator-description.html">Qt Simulator</a> (online document)</li> - <li><a href="http://qt.nokia.com/developer/eclipse-integration">Integration</a> (online document) and <a href="http://qt.nokia.com/products/appdev">add-ins</a> (online document)</li> + <li><a href="qmake-manual.html">Qt qmake</a></li> + <li><a href="http://doc.qt.nokia.com/qtsimulator-1.0/simulator-description.html">Qt Simulator</a> (online)</li> + <li><a href="http://qt.nokia.com/developer/eclipse-integration">Eclipse Integration</a> (online)</li> + <li><a href="http://qt.nokia.com/products/appdev">Add-On Products and Services</a> (online)</li> <li><a href="qvfb.html">Virtual Framebuffer</a></li> </ul> </div> -- cgit v0.12 From 5580e37c0ea108560b30c6c830f44ce487536d22 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Thu, 12 Aug 2010 09:09:20 +0200 Subject: qdoc: All references to -assistant and -base were removed. Flags allowed are now -creator and -online. -creator is the default. (cherry picked from commit 03d9d3cf641c8dde22a903870ac2b6e58ada6eec) --- doc/doc.pri | 2 +- tools/qdoc3/htmlgenerator.cpp | 18 +----------------- tools/qdoc3/htmlgenerator.h | 1 - tools/qdoc3/main.cpp | 15 ++++----------- 4 files changed, 6 insertions(+), 30 deletions(-) diff --git a/doc/doc.pri b/doc/doc.pri index e1efa21..a5db3c7 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -20,7 +20,7 @@ $$unixstyle { QDOC = $$replace(QDOC, "/", "\\") } ADP_DOCS_QDOCCONF_FILE = -online qt-build-docs.qdocconf -QT_DOCUMENTATION = ($$QDOC -assistant qt-api-only.qdocconf assistant.qdocconf designer.qdocconf \ +QT_DOCUMENTATION = ($$QDOC -creator qt-api-only.qdocconf assistant.qdocconf designer.qdocconf \ linguist.qdocconf qmake.qdocconf qdeclarative.qdocconf) && \ (cd $$QT_BUILD_TREE && \ $$GENERATOR doc-build/html-qt/qt.qhp -o doc/qch/qt.qch && \ diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 198745b..52a61e0 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -293,12 +293,8 @@ void HtmlGenerator::initializeGenerator(const Config &config) application = Online; else if (app == "creator") application = Creator; - else if (app == "assistant") - application = Assistant; - else if (app == "base") - application = Assistant; else - application = Online; + application = Creator; projectDescription = config.getString(CONFIG_DESCRIPTION); if (projectDescription.isEmpty() && !project.isEmpty()) @@ -1843,10 +1839,6 @@ void HtmlGenerator::generateHeader(const QString& title, // CheckEmptyAndLoadList activating search out() << "<body class=\"\" onload=\"CheckEmptyAndLoadList();\">\n"; break; - case Assistant: - out() << "</head>\n"; - out() << "<body class=\"offline \">\n"; - break; case Creator: out() << "</head>\n"; out() << "<body class=\"offline narrow creator\">\n"; // offline narrow @@ -1868,11 +1860,6 @@ void HtmlGenerator::generateHeader(const QString& title, generateBreadCrumbs(title,node,marker); out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); break; - case Assistant: - out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); - generateBreadCrumbs(title,node,marker); - out() << QString(creatorPostPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); - break; case Creator: out() << QString(creatorPostHeader).replace("\\" + COMMAND_VERSION, myTree->version()); generateBreadCrumbs(title,node,marker); @@ -2045,9 +2032,6 @@ void HtmlGenerator::generateFooter(const Node *node) out() << " </script> -->\n"; out() << "</body>\n"; break; - case Assistant: - out() << "</body>\n"; - break; case Creator: out() << "</body>\n"; break; diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index 07226f5..eab10c6 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -97,7 +97,6 @@ class HtmlGenerator : public PageGenerator enum Application { Online, - Assistant, Creator}; public: diff --git a/tools/qdoc3/main.cpp b/tools/qdoc3/main.cpp index 38b76a4..fa7efee 100644 --- a/tools/qdoc3/main.cpp +++ b/tools/qdoc3/main.cpp @@ -194,10 +194,7 @@ static void processQdocconfFile(const QString &fileName) /* Set the application to which qdoc will create the output. - The three applications are: - - base or assistant: simple, basic html output - for offline viewing in the Assistant application. + The two applications are: creator: additional formatting for viewing in the Creator application. @@ -207,9 +204,9 @@ static void processQdocconfFile(const QString &fileName) */ if (appArg.isEmpty()) { qDebug() << "Warning: Application flag not specified on" - << "command line. Options are -assistant, -creator," - << "and -online (default)."; - appArg = "online"; + << "command line. Options are -creator (default)" + << "and -online."; + appArg = "creator"; } config.setStringList(CONFIG_APPLICATION, QStringList(appArg)); @@ -484,10 +481,6 @@ int main(int argc, char **argv) else if (opt == "-obsoletelinks") { obsoleteLinks = true; } - else if (opt == "-base") - appArg = "base"; - else if (opt == "-assistant") - appArg = "assistant"; else if (opt == "-creator") appArg = "creator"; else if (opt == "-online") -- cgit v0.12 From 0a94e2af3c29afa6e8d7ae3041bed4f187b3c1ca Mon Sep 17 00:00:00 2001 From: Rhys Weatherley <rhys.weatherley@nokia.com> Date: Mon, 16 Aug 2010 12:19:06 +1000 Subject: Fix OpenGLVersionFlags on OpenGL 4.0 systems If the OpenGL version was 4.0 or higher, the flags for 1.1, 1.5, 2.0, and so on were not being set. This lead to the flags indicating that older OpenGL versions were not supported when they clearly were. Back port parts of 28659c21d12a267b10e5b441bf4c776e04d69bdc from Qt 4.7 to fix this in Qt 4.6. Task-number: QTBUG-12554 Reviewed-by: Sarah Smith --- dist/changes-4.6.4 | 1 + src/opengl/qgl.cpp | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/dist/changes-4.6.4 b/dist/changes-4.6.4 index dbb2189..389aa3a 100644 --- a/dist/changes-4.6.4 +++ b/dist/changes-4.6.4 @@ -68,6 +68,7 @@ QtOpenGL * [QTBUG-12591] setUniformValue(QSize) was setting (w,w) not (w,h). * [QTBUG-12862] Don't #define highp/mediump/lowp if the desktop OpenGL implementation has the GL_ARB_ES2_compatibility extension. + * [QTBUG-12554] Wrong OpenGLVersionFlags on OpenGL 4.0 systems. QtScript -------- diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 0137c85..81e55b3 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1173,8 +1173,16 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co QGLFormat::OpenGL_Version_2_1 | QGLFormat::OpenGL_Version_3_0; } - else - qWarning("Unrecognised OpenGL version"); + else { + versionFlags |= QGLFormat::OpenGL_Version_1_1 | + QGLFormat::OpenGL_Version_1_2 | + QGLFormat::OpenGL_Version_1_3 | + QGLFormat::OpenGL_Version_1_4 | + QGLFormat::OpenGL_Version_1_5 | + QGLFormat::OpenGL_Version_2_0 | + QGLFormat::OpenGL_Version_2_1 | + QGLFormat::OpenGL_Version_3_0; + } } return versionFlags; } -- cgit v0.12 From c74a416ec459e262db0c55c7ef12b07a9768523b Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Fri, 13 Aug 2010 15:20:36 +0200 Subject: Doc: removed assistant style and reintroduced the index page icons. (cherry picked from commit 2dfd16e8a138da9d903b31ef461331016d16ec5b) --- doc/src/template/style/narrow.css | 4 ++-- doc/src/template/style/style.css | 41 ++------------------------------------- 2 files changed, 4 insertions(+), 41 deletions(-) diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css index e4ad135..349048f 100644 --- a/doc/src/template/style/narrow.css +++ b/doc/src/template/style/narrow.css @@ -54,7 +54,7 @@ .narrow .header .qtref a { - color: #363534; + color: #00732F; } .narrow .header .qtref span @@ -103,7 +103,7 @@ } .narrow .header #shortCut ul li a { - color: #44a51c; + color: #00732F; } .narrow .wrapper .hd diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 9b37693..2aff85f 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -1267,43 +1267,6 @@ -/* start of offline spec*/ - .offline .wrapper .hd - { - background: url(../images/page.png) no-repeat 0 -15px; - } - .offline .wrapper .bd - { - background: url(../images/bg_l_blank.png) repeat-y 0 0; - } - .offline .wrapper .ft - { - background: url(../images/page.png) no-repeat 0 -90px; - } - .offline .sidebar, - .offline .feedback, - .offline .t_button, - .offline #narrowsearch, - .offline #narrowmenu - { - display: none; - } - .offline .wrap - { - margin: 0 5px 0 5px; - } - .offline .wrap .breadcrumb - { - } - - .offline .wrap .content - { - padding-top: 15px; - } - - -/* end of offline spec*/ - /* start of creator spec*/ .creator { @@ -1323,9 +1286,9 @@ .creator #feedbackBox, .creator #feedback, .creator #blurpage, - .creator .indexbox .indexIcon span, + /*.creator .indexbox .indexIcon span,*/ .creator .wrapper .hd, - .creator .indexbox .indexIcon, +/* .creator .indexbox .indexIcon,*/ .creator .header #nav-logo, .creator #offlinemenu, .creator #offlinesearch, -- cgit v0.12 From 4fc3b97f1d4d0d8601616c1a0ec80c9af28cdcfd Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil <prasanth.ullattil@nokia.com> Date: Fri, 13 Aug 2010 12:27:55 +0200 Subject: Multiple "Edit/Special Characters" menu entries on Mac OS X (Cocoa) Every time [NSApp setMainMenu:] is called, Cocoa will add the 'Special Characters' item to the 'Edit' menu. Before adding a new entry it will make sure that menu items list doesn't contain an item with the selector 'orderFrontCharacterPalette' & a 'nil' target. We need to return the index for the first entry (we have QCocoaMenuLoader as target). Task-number: QTBUG-12842 Reviewed-by: Denis (cherry picked from commit b52da4ab2179079a6aff95891786d2f6598048b5) --- src/gui/kernel/qcocoamenuloader_mac.mm | 5 +++++ src/gui/kernel/qcocoamenuloader_mac_p.h | 1 + src/gui/widgets/qcocoamenu_mac.mm | 12 ++++++++++++ src/gui/widgets/qcocoamenu_mac_p.h | 1 + 4 files changed, 19 insertions(+) diff --git a/src/gui/kernel/qcocoamenuloader_mac.mm b/src/gui/kernel/qcocoamenuloader_mac.mm index 8d65aa1..8d38f45 100644 --- a/src/gui/kernel/qcocoamenuloader_mac.mm +++ b/src/gui/kernel/qcocoamenuloader_mac.mm @@ -255,5 +255,10 @@ QT_USE_NAMESPACE qApp->quit(); } } + + - (void)orderFrontCharacterPalette:(id)sender + { + [NSApp orderFrontCharacterPalette:sender]; + } @end #endif // QT_MAC_USE_COCOA diff --git a/src/gui/kernel/qcocoamenuloader_mac_p.h b/src/gui/kernel/qcocoamenuloader_mac_p.h index a75ad0a..edacfa5 100644 --- a/src/gui/kernel/qcocoamenuloader_mac_p.h +++ b/src/gui/kernel/qcocoamenuloader_mac_p.h @@ -88,6 +88,7 @@ - (IBAction)hide:(id)sender; - (IBAction)qtDispatcherToQAction:(id)sender; - (void)qtUpdateMenubar; +- (void)orderFrontCharacterPalette:(id)sender; @end #endif // QT_MAC_USE_COCOA diff --git a/src/gui/widgets/qcocoamenu_mac.mm b/src/gui/widgets/qcocoamenu_mac.mm index ce85919..15fae23 100644 --- a/src/gui/widgets/qcocoamenu_mac.mm +++ b/src/gui/widgets/qcocoamenu_mac.mm @@ -188,6 +188,18 @@ QT_USE_NAMESPACE return NO; } +- (NSInteger)indexOfItemWithTarget:(id)anObject andAction:(SEL)actionSelector +{ + NSInteger index = [super indexOfItemWithTarget:anObject andAction:actionSelector]; + static SEL selForOFCP = NSSelectorFromString(@"orderFrontCharacterPalette:"); + if (index == -1 && selForOFCP == actionSelector) { + // Check if the 'orderFrontCharacterPalette' SEL exists for QCocoaMenuLoader object + QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = [NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)]; + return [super indexOfItemWithTarget:loader andAction:actionSelector]; + } + return index; +} + @end QT_BEGIN_NAMESPACE diff --git a/src/gui/widgets/qcocoamenu_mac_p.h b/src/gui/widgets/qcocoamenu_mac_p.h index d6ac8c5..1a42642 100644 --- a/src/gui/widgets/qcocoamenu_mac_p.h +++ b/src/gui/widgets/qcocoamenu_mac_p.h @@ -76,6 +76,7 @@ QT_FORWARD_DECLARE_CLASS(QAction) } - (id)initWithQMenu:(QMenu*)menu; - (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event target:(id *)target action:(SEL *)action; +- (NSInteger)indexOfItemWithTarget:(id)anObject andAction:(SEL)actionSelector; @end #endif -- cgit v0.12 From ee8caa1a895d8febcfdb0a797bdbd7339e28e815 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen <richard.gustavsen@nokia.com> Date: Fri, 13 Aug 2010 14:05:17 +0200 Subject: Cocoa: Stacking order of modal dialogs is wrong Modal dialogs were sometimes hidden behind other normal windows on screen. The reason was that, upon going modal for a window, we actually resat the stacking level on the window in a faulty attempt to respect any stays-on-top window flags. This patch makes sure we avoid doing that, and at the same time, ensures we don't reintroduce the original bug as well. Task-number: QTBUG-12841 Reviewed-by: cduclos (cherry picked from commit 6d0d767e63df3c997d6d7a8cb6cd4bf8c0dfc835) --- src/gui/kernel/qeventdispatcher_mac.mm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index e26fbde..89f01d8 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -785,7 +785,7 @@ void QEventDispatcherMacPrivate::temporarilyStopAllModalSessions() // the stacking order of the windows while doing so, we put // up a block that is used in QCocoaWindow and QCocoaPanel: int stackSize = cocoaModalSessionStack.size(); - for (int i=stackSize-1; i>=0; --i) { + for (int i=0; i<stackSize; ++i) { QCocoaModalSessionInfo &info = cocoaModalSessionStack[i]; if (info.session) { [NSApp endModalSession:info.session]; @@ -822,12 +822,12 @@ NSModalSession QEventDispatcherMacPrivate::currentModalSession() QBoolBlocker block1(blockSendPostedEvents, true); info.nswindow = window; [(NSWindow*) info.nswindow retain]; - // When creating a modal session cocoa will rearrange the windows. - // In order to avoid windows to be put behind another we need to - // keep the window level. - int level = [window level]; + int levelBeforeEnterModal = [window level]; info.session = [NSApp beginModalSessionForWindow:window]; - [window setLevel:level]; + // Make sure we don't stack the window lower that it was before + // entering modal, in case it e.g. had the stays-on-top flag set: + if (levelBeforeEnterModal > [window level]) + [window setLevel:levelBeforeEnterModal]; } currentModalSessionCached = info.session; } -- cgit v0.12 From 45e958d7290104d2ab73a2262c0496cc90d1a6fa Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Fri, 13 Aug 2010 14:01:49 +0200 Subject: qdoc: Added the fix to change qml-qml-file.name to qml-file.name (cherry picked from commit 13d35e19a2bf78dd6a63b35f06a07d2b6e9c67c4) --- tools/qdoc3/tree.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp index 56e3484..540ffa9 100644 --- a/tools/qdoc3/tree.cpp +++ b/tools/qdoc3/tree.cpp @@ -1963,8 +1963,8 @@ QString Tree::fullDocumentLocation(const Node *node) const if ((node->subType() == Node::QmlClass) || (node->subType() == Node::QmlBasicType)) { QString fb = node->fileBase(); - if (fb.startsWith(QLatin1String("QML:"))) - return node->fileBase() + ".html"; + if (fb.startsWith(QLatin1String("qml-"))) + return fb + ".html"; else return "qml-" + node->fileBase() + ".html"; } else @@ -1981,7 +1981,7 @@ QString Tree::fullDocumentLocation(const Node *node) const else if ((parentNode = node->parent())) { if (parentNode->subType() == Node::QmlPropertyGroup) { parentNode = parentNode->parent(); - parentName = "qml-" + parentNode->fileBase() + ".html"; + parentName = fullDocumentLocation(parentNode); } else parentName = fullDocumentLocation(node->parent()); -- cgit v0.12 From aa53873c722352d513bf68ff7f11570def5900d9 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Mon, 16 Aug 2010 16:09:34 +0300 Subject: Fix QProcessManager destruction If QProcessManager destructor is ran as part of global static cleanup, manager thread will most likely be terminated by kernel at that point, so trying to delete QProcessActives and QProcessMediators will panic as they will still be active. They can also no longer be properly canceled as the thread is already gone. In case manager thread has already died, which implies that process exit is imminent, we simply do nothing and let the deletion of the main heap at process exit take care of stray objects. Task-number: QTBUG-11218 Reviewed-by: Janne Koskinen (cherry picked from commit 7cfc9f2245162944f3d9a29ad73cd93e2bcf197f) --- src/corelib/io/qprocess_symbian.cpp | 47 ++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/corelib/io/qprocess_symbian.cpp b/src/corelib/io/qprocess_symbian.cpp index af657b2..003e781 100644 --- a/src/corelib/io/qprocess_symbian.cpp +++ b/src/corelib/io/qprocess_symbian.cpp @@ -375,10 +375,9 @@ QProcessActive::QProcessActive() // Nothing to do } -// Called from ProcessManagerThread +// Called from main thread QProcessActive::~QProcessActive() { - Cancel(); process = NULL; pproc = NULL; } @@ -482,10 +481,9 @@ QProcessManagerMediator::QProcessManagerMediator() // Nothing to do } -// Called from ProcessManagerThread +// Called from main thread QProcessManagerMediator::~QProcessManagerMediator() { - Cancel(); processManagerThread.Close(); currentCommand = ENoCommand; currentObserver = NULL; @@ -648,25 +646,36 @@ QProcessManager::QProcessManager() QProcessManager::~QProcessManager() { QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager()"); - // Cancel death listening for all child processes - if (mediator) { - QMap<int, QProcessActive *>::Iterator it = children.begin(); - while (it != children.end()) { - // Remove all monitors - QProcessActive *active = it.value(); - mediator->remove(active); - - QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager() removed listening for a process"); - ++it; + + // Check if manager thread is still alive. If this destructor is ran as part of global + // static cleanup, manager thread will most likely be terminated by kernel at this point, + // so trying to delete QProcessActives and QProcessMediators will panic as they + // will still be active. They can also no longer be canceled as the thread is already gone. + // In case manager thread has already died, we simply do nothing and let the deletion of + // the main heap at process exit take care of stray objects. + + if (managerThread.Handle() && managerThread.ExitType() == EExitPending) { + // Cancel death listening for all child processes + if (mediator) { + QMap<int, QProcessActive *>::Iterator it = children.begin(); + while (it != children.end()) { + // Remove all monitors + QProcessActive *active = it.value(); + mediator->remove(active); + + QPROCESS_DEBUG_PRINT("QProcessManager::~QProcessManager() removed listening for a process"); + ++it; + } + + // Terminate process manager thread. + mediator->terminate(); + delete mediator; } - // Terminate process manager thread. - mediator->terminate(); - delete mediator; + qDeleteAll(children.values()); + children.clear(); } - qDeleteAll(children.values()); - children.clear(); managerThread.Close(); managerMutex.Close(); } -- cgit v0.12 From d4d9df15dd1bf5ad4eb607731a03b917dd32cdb8 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Fri, 13 Aug 2010 15:22:25 +0300 Subject: Fix "installer_sis" and "deploy" targets when TARGET has path Dependencies got generated wrong in Makefile because sis is always created in the .pro file directory but dependency included path that was in TARGET. Task-number: QTBUG-12884 Reviewed-by: Shane Kearns (cherry picked from commit 434ce6748ea7f082357b6d7ab542c9fa2285bd4c) --- mkspecs/features/sis_targets.prf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mkspecs/features/sis_targets.prf b/mkspecs/features/sis_targets.prf index 615bbe5..bcfdf8f 100644 --- a/mkspecs/features/sis_targets.prf +++ b/mkspecs/features/sis_targets.prf @@ -11,7 +11,6 @@ else:!equals(DEPLOYMENT, default_deployment) { equals(GENERATE_SIS_TARGETS, true) { symbian-abld|symbian-sbsv2 { - sis_destdir = make_cache_name = .make.cache sis_target.target = sis sis_target.commands = $(if $(wildcard $$basename(TARGET)_template.pkg), \ @@ -50,7 +49,7 @@ equals(GENERATE_SIS_TARGETS, true) { ok_unsigned_sis_target.target = ok_unsigned_sis ok_unsigned_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) -o $$basename(TARGET)_template.pkg $(QT_SIS_TARGET) - target_sis_target.target = $${sis_destdir}$${TARGET}.sis + target_sis_target.target = $$basename(TARGET).sis target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis installer_sis_target.target = installer_sis @@ -59,7 +58,7 @@ equals(GENERATE_SIS_TARGETS, true) { , \ $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) - installer_sis_target.depends = $${sis_destdir}$${TARGET}.sis + installer_sis_target.depends = $$basename(TARGET).sis ok_installer_sis_target.target = ok_installer_sis ok_installer_sis_target.commands = createpackage.bat $(QT_SIS_OPTIONS) $$basename(TARGET)_installer.pkg - \ -- cgit v0.12 From 2b6b8c5b52cb6bccbeca600ced1527f579405003 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Fri, 13 Aug 2010 13:25:46 +0300 Subject: Fix check to remove unnecessary deployments in Symbian Previously check to remove files from deployment in case the deployment target location was the same as the source location was done using QFileInfo equality, which resolved to true when file didn't yet exist at the time qmake was run. Changed the check to compare absolute paths instead. Task-number: QTBUG-12879 Reviewed-by: Shane Kearns (cherry picked from commit 448a8603bb0609bf880a2c1b92b26c2005e1cf63) --- qmake/generators/symbian/initprojectdeploy_symbian.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp index 382e012..776a646 100644 --- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp +++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp @@ -353,7 +353,11 @@ void initProjectDeploySymbian(QMakeProject* project, CopyItem &item = i.next(); QFileInfo fromItem(item.from); QFileInfo toItem(item.to); - if (fromItem == toItem) +#if defined(Q_OS_WIN) + if (0 == fromItem.absoluteFilePath().compare(toItem.absoluteFilePath(), Qt::CaseInsensitive)) +#else + if (0 == fromItem.absoluteFilePath().compare(toItem.absoluteFilePath())) +#endif i.remove(); } } -- cgit v0.12 From f087ad801b19ffa32a538269cd1475ead963f013 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Tue, 17 Aug 2010 16:00:17 +0200 Subject: qmake: fix assertion on Windows when DESTDIR is empty in static libs Basically replacing project->values("foo").first() with project->first("foo") which does a null check. Task-number: QTBUG-12851 Reviewed-by: ossi --- qmake/generators/win32/winmakefile.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index c36cc9c..4944d06 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -472,10 +472,13 @@ void Win32MakefileGenerator::processRcFileVar() resFile.replace(".rc", Option::res_ext); project->values("RES_FILE").prepend(fileInfo(resFile).fileName()); if (!project->values("OBJECTS_DIR").isEmpty()) { - if(project->isActiveConfig("staticlib")) - project->values("RES_FILE").first().prepend(fileInfo(project->values("DESTDIR").first()).absoluteFilePath() + Option::dir_sep); + QString resDestDir; + if (project->isActiveConfig("staticlib")) + resDestDir = fileInfo(project->first("DESTDIR")).absoluteFilePath(); else - project->values("RES_FILE").first().prepend(project->values("OBJECTS_DIR").first() + Option::dir_sep); + resDestDir = project->first("OBJECTS_DIR"); + resDestDir.append(Option::dir_sep); + project->values("RES_FILE").first().prepend(resDestDir); } project->values("RES_FILE").first() = Option::fixPathToTargetOS(project->values("RES_FILE").first(), false, false); project->values("POST_TARGETDEPS") += project->values("RES_FILE"); -- cgit v0.12 From 27b0eccae8239d8d95c0b13f57e1af23a2de07b6 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 17 Aug 2010 13:29:08 +1000 Subject: Update QtDeclarative def files Task-number: Reviewed-by: Martin Jones (cherry picked from commit cf0f53ecefd6914d533ffea057748480e3e5bd33) --- src/s60installs/bwins/QtDeclarativeu.def | 1 + src/s60installs/eabi/QtDeclarativeu.def | 1 + 2 files changed, 2 insertions(+) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 480d9ff..bc6d0aa 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -1684,4 +1684,5 @@ EXPORTS ?rootContext@QDeclarativeView@@QBEPAVQDeclarativeContext@@XZ @ 1683 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void) const ?rootContext@QDeclarativeEngine@@QBEPAVQDeclarativeContext@@XZ @ 1684 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) const ?qmlregister@QDeclarativePrivate@@YAHW4RegistrationType@1@PAX@Z @ 1685 NONAME ; int QDeclarativePrivate::qmlregister(enum QDeclarativePrivate::RegistrationType, void *) + ?hasValue@QDeclarativeOpenMetaObject@@QBE_NH@Z @ 1686 NONAME ; bool QDeclarativeOpenMetaObject::hasValue(int) const diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 9a3cefa..723f2ae 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -1714,4 +1714,5 @@ EXPORTS _ZNK16QDeclarativeView6engineEv @ 1713 NONAME _ZNK18QDeclarativeEngine11rootContextEv @ 1714 NONAME _ZN19QDeclarativePrivate11qmlregisterENS_16RegistrationTypeEPv @ 1715 NONAME + _ZNK26QDeclarativeOpenMetaObject8hasValueEi @ 1716 NONAME -- cgit v0.12 From d0071a6c8770e8b3d74c1d7f0a413a2799195356 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 17 Aug 2010 13:29:08 +1000 Subject: Update QtGui def files Task-number: Reviewed-by: Martin Jones (cherry picked from commit 875d5e374dce3dd7d7cce87b55e277e8e9497044) --- src/s60installs/bwins/QtGuiu.def | 4 +++- src/s60installs/eabi/QtGuiu.def | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index a81483c..6c2fd27 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -4148,7 +4148,7 @@ EXPORTS ?ensureSceneTransformRecursive@QGraphicsItemPrivate@@QAEXPAPAVQGraphicsItem@@@Z @ 4147 NONAME ; void QGraphicsItemPrivate::ensureSceneTransformRecursive(class QGraphicsItem * *) ?ensureSequentialSiblingIndex@QGraphicsItemPrivate@@QAEXXZ @ 4148 NONAME ; void QGraphicsItemPrivate::ensureSequentialSiblingIndex(void) ?ensureSortedChildren@QGraphicsItemPrivate@@QAEXXZ @ 4149 NONAME ; void QGraphicsItemPrivate::ensureSortedChildren(void) - ?ensureSpace@QTextEngine@@QBEXH@Z @ 4150 NONAME ; void QTextEngine::ensureSpace(int) const + ?ensureSpace@QTextEngine@@QBEXH@Z @ 4150 NONAME ABSENT ; void QTextEngine::ensureSpace(int) const ?ensureVisible@QGraphicsItem@@QAEXABVQRectF@@HH@Z @ 4151 NONAME ; void QGraphicsItem::ensureVisible(class QRectF const &, int, int) ?ensureVisible@QGraphicsItem@@QAEXMMMMHH@Z @ 4152 NONAME ; void QGraphicsItem::ensureVisible(float, float, float, float, int, int) ?ensureVisible@QGraphicsView@@QAEXABVQRectF@@HH@Z @ 4153 NONAME ; void QGraphicsView::ensureVisible(class QRectF const &, int, int) @@ -12886,4 +12886,6 @@ EXPORTS ?zScaleChanged@QGraphicsScale@@IAEXXZ @ 12885 NONAME ; void QGraphicsScale::zScaleChanged(void) ?xScaleChanged@QGraphicsScale@@IAEXXZ @ 12886 NONAME ; void QGraphicsScale::xScaleChanged(void) ?yScaleChanged@QGraphicsScale@@IAEXXZ @ 12887 NONAME ; void QGraphicsScale::yScaleChanged(void) + ?_q_aboutToQuit@QApplicationPrivate@@QAEXXZ @ 12888 NONAME ; void QApplicationPrivate::_q_aboutToQuit(void) + ?ensureSpace@QTextEngine@@QBE_NH@Z @ 12889 NONAME ; bool QTextEngine::ensureSpace(int) const diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index ede0021..1706a2b 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12091,4 +12091,5 @@ EXPORTS _ZN14QGraphicsScale13xScaleChangedEv @ 12090 NONAME _ZN14QGraphicsScale13yScaleChangedEv @ 12091 NONAME _ZN14QGraphicsScale13zScaleChangedEv @ 12092 NONAME + _ZN19QApplicationPrivate14_q_aboutToQuitEv @ 12093 NONAME -- cgit v0.12 From 7f7efe034902f98d5125343f7176491c7b503729 Mon Sep 17 00:00:00 2001 From: Toby Tomkins <toby.tomkins@nokia.com> Date: Wed, 18 Aug 2010 13:52:04 +1000 Subject: Modification of def files for non existing functions. Task-number: QT-2027 Reviewed-by: Joona Petrell --- src/s60installs/bwins/QtGuiu.def | 2 +- src/s60installs/eabi/QtGuiu.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 6c2fd27..878f54334 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12886,6 +12886,6 @@ EXPORTS ?zScaleChanged@QGraphicsScale@@IAEXXZ @ 12885 NONAME ; void QGraphicsScale::zScaleChanged(void) ?xScaleChanged@QGraphicsScale@@IAEXXZ @ 12886 NONAME ; void QGraphicsScale::xScaleChanged(void) ?yScaleChanged@QGraphicsScale@@IAEXXZ @ 12887 NONAME ; void QGraphicsScale::yScaleChanged(void) - ?_q_aboutToQuit@QApplicationPrivate@@QAEXXZ @ 12888 NONAME ; void QApplicationPrivate::_q_aboutToQuit(void) + ?_q_aboutToQuit@QApplicationPrivate@@QAEXXZ @ 12888 NONAME ABSENT ; void QApplicationPrivate::_q_aboutToQuit(void) ?ensureSpace@QTextEngine@@QBE_NH@Z @ 12889 NONAME ; bool QTextEngine::ensureSpace(int) const diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 1706a2b..6b79f92 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12091,5 +12091,5 @@ EXPORTS _ZN14QGraphicsScale13xScaleChangedEv @ 12090 NONAME _ZN14QGraphicsScale13yScaleChangedEv @ 12091 NONAME _ZN14QGraphicsScale13zScaleChangedEv @ 12092 NONAME - _ZN19QApplicationPrivate14_q_aboutToQuitEv @ 12093 NONAME + _ZN19QApplicationPrivate14_q_aboutToQuitEv @ 12093 NONAME ABSENT -- cgit v0.12 From 1ddbd9a855926d17e7de86c993a5f7d9e57c3401 Mon Sep 17 00:00:00 2001 From: Carlos Manuel Duclos Vergara <carlos.duclos@nokia.com> Date: Fri, 23 Jul 2010 17:03:42 +0200 Subject: Drawer widget in a MainWindow disappears after returning from full screen mode. The problem was in the toggleDrawer function. We were not checking the status of the last transition before setting the new transition, so all the transition were treated as non-intentional. Task-number: QTBUG-11373 Reviewed-by: Prasanth (cherry picked from commit 725d8e061ededee9a5ddf0914aabd0f6aa2ee741) --- src/gui/kernel/qwidget_mac.mm | 4 +++- tests/auto/qwidget/tst_qwidget.cpp | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index e57ec77..c2af6af 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -1599,12 +1599,14 @@ void QWidgetPrivate::toggleDrawers(bool visible) continue; QWidget *widget = static_cast<QWidget*>(object); if(qt_mac_is_macdrawer(widget)) { + bool oldState = widget->testAttribute(Qt::WA_WState_ExplicitShowHide); if(visible) { if (!widget->testAttribute(Qt::WA_WState_ExplicitShowHide)) widget->show(); } else { widget->hide(); - widget->setAttribute(Qt::WA_WState_ExplicitShowHide, false); + if(!oldState) + widget->setAttribute(Qt::WA_WState_ExplicitShowHide, false); } } } diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index fee7ef0..f722f89 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -397,6 +397,9 @@ private slots: void childAt(); #ifdef Q_WS_MAC void childAt_unifiedToolBar(); +#ifdef QT_MAC_USE_COCOA + void taskQTBUG_11373(); +#endif // QT_MAC_USE_COCOA #endif private: @@ -10433,6 +10436,26 @@ void tst_QWidget::childAt_unifiedToolBar() QCOMPARE(mainWindow.childAt(toolBarTopLeft), static_cast<QWidget *>(toolBar)); QCOMPARE(mainWindow.childAt(labelTopLeft), static_cast<QWidget *>(label)); } + +#ifdef QT_MAC_USE_COCOA +void tst_QWidget::taskQTBUG_11373() +{ + QMainWindow * myWindow = new QMainWindow(); + QWidget * center = new QWidget(); + myWindow -> setCentralWidget(center); + QWidget * drawer = new QWidget(myWindow, Qt::Drawer); + drawer -> hide(); + QCOMPARE(drawer->isVisible(), false); + myWindow -> show(); + myWindow -> raise(); + // The drawer shouldn't be visible now. + QCOMPARE(drawer->isVisible(), false); + myWindow -> setWindowState(Qt::WindowFullScreen); + myWindow -> setWindowState(Qt::WindowNoState); + // The drawer should still not be visible, since we haven't shown it. + QCOMPARE(drawer->isVisible(), false); +} +#endif // QT_MAC_USE_COCOA #endif QTEST_MAIN(tst_QWidget) -- cgit v0.12 From 279c5eb3bd7c8bb836f2a3f8f5a0b1dc046dc24a Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Thu, 12 Aug 2010 12:38:53 +1000 Subject: Only modify pixmap cache reply when protected by a mutex QTBUG-12729 (cherry picked from commit ee7c3b576ced47d3b68da1913cdf6995144bddd2) --- src/declarative/util/qdeclarativepixmapcache.cpp | 2 +- .../qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index 9ced14f..de2de21 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -525,6 +525,7 @@ void QDeclarativePixmapReader::cancel(QDeclarativePixmapReply *reply) mutex.lock(); if (reply->loading) { cancelled.append(reply); + reply->data = 0; // XXX if (threadObject) threadObject->processJobs(); } else { @@ -738,7 +739,6 @@ void QDeclarativePixmapData::release() if (refCount == 0) { if (reply) { - reply->data = 0; reply->reader->cancel(reply); reply = 0; } diff --git a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp index 16d2063..6b36224 100644 --- a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp +++ b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp @@ -71,6 +71,7 @@ private slots: void parallel(); void parallel_data(); void massive(); + void cancelcrash(); private: QDeclarativeEngine engine; @@ -316,6 +317,15 @@ void tst_qdeclarativepixmapcache::massive() } } +// QTBUG-12729 +void tst_qdeclarativepixmapcache::cancelcrash() +{ + QUrl url("http://127.0.0.1:14452/cancelcrash_notexist.png"); + for (int ii = 0; ii < 1000; ++ii) { + QDeclarativePixmap pix(&engine, url); + } +} + QTEST_MAIN(tst_qdeclarativepixmapcache) #include "tst_qdeclarativepixmapcache.moc" -- cgit v0.12 From 81bb682e280dc282ba965051e232f81f64c1f3fe Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Fri, 13 Aug 2010 12:23:46 +0200 Subject: diagramscene example: fix leak and crashes. In MainWindow::deleteItem, if there is arrow selected, we need to clean up the items from this arrow. We need to delete them first so there is no arrow in the list anymore when we calls removeArrows (which before, deleted arrow that were possibly in the list, resulting in crashes) Also avoid leak by giving parents to objects that needs it, and destroying items. Reviewed-by: Geir Vattekar Task-number: QTBUG-12753 (cherry picked from commit 5dedcd3c4cac993949295d109804a8f7cc3a5b0a) --- doc/src/examples/diagramscene.qdoc | 3 ++- examples/graphicsview/diagramscene/mainwindow.cpp | 29 ++++++++++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/doc/src/examples/diagramscene.qdoc b/doc/src/examples/diagramscene.qdoc index f4d6b0d..7c643c2 100644 --- a/doc/src/examples/diagramscene.qdoc +++ b/doc/src/examples/diagramscene.qdoc @@ -265,7 +265,8 @@ \snippet examples/graphicsview/diagramscene/mainwindow.cpp 3 - This slot deletes the selected item, if any, from the scene. If + This slot deletes the selected item, if any, from the scene. It + deletes the arrows first in order to avoid to delete them twice. If the item to be deleted is a \c DiagramItem, we also need to delete arrows connected to it; we don't want arrows in the scene that aren't connected to items in both ends. diff --git a/examples/graphicsview/diagramscene/mainwindow.cpp b/examples/graphicsview/diagramscene/mainwindow.cpp index f09c552..7d82df0 100644 --- a/examples/graphicsview/diagramscene/mainwindow.cpp +++ b/examples/graphicsview/diagramscene/mainwindow.cpp @@ -45,6 +45,7 @@ #include "diagramitem.h" #include "diagramscene.h" #include "diagramtextitem.h" +#include "arrow.h" const int InsertTextButton = 10; @@ -55,7 +56,7 @@ MainWindow::MainWindow() createToolBox(); createMenus(); - scene = new DiagramScene(itemMenu); + scene = new DiagramScene(itemMenu, this); scene->setSceneRect(QRectF(0, 0, 5000, 5000)); connect(scene, SIGNAL(itemInserted(DiagramItem*)), this, SLOT(itemInserted(DiagramItem*))); @@ -123,11 +124,22 @@ void MainWindow::buttonGroupClicked(int id) void MainWindow::deleteItem() { foreach (QGraphicsItem *item, scene->selectedItems()) { - if (item->type() == DiagramItem::Type) { - qgraphicsitem_cast<DiagramItem *>(item)->removeArrows(); + if (item->type() == Arrow::Type) { + scene->removeItem(item); + Arrow *arrow = qgraphicsitem_cast<Arrow *>(item); + arrow->startItem()->removeArrow(arrow); + arrow->endItem()->removeArrow(arrow); + delete item; } - scene->removeItem(item); } + + foreach (QGraphicsItem *item, scene->selectedItems()) { + if (item->type() == DiagramItem::Type) { + qgraphicsitem_cast<DiagramItem *>(item)->removeArrows(); + } + scene->removeItem(item); + delete item; + } } //! [3] @@ -313,7 +325,7 @@ void MainWindow::about() //! [21] void MainWindow::createToolBox() { - buttonGroup = new QButtonGroup; + buttonGroup = new QButtonGroup(this); buttonGroup->setExclusive(false); connect(buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(buttonGroupClicked(int))); @@ -345,7 +357,7 @@ void MainWindow::createToolBox() QWidget *itemWidget = new QWidget; itemWidget->setLayout(layout); - backgroundButtonGroup = new QButtonGroup; + backgroundButtonGroup = new QButtonGroup(this); connect(backgroundButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(backgroundButtonGroupClicked(QAbstractButton*))); @@ -460,7 +472,6 @@ void MainWindow::createToolbars() editToolBar->addAction(sendBackAction); fontCombo = new QFontComboBox(); - fontSizeCombo = new QComboBox(); connect(fontCombo, SIGNAL(currentFontChanged(QFont)), this, SLOT(currentFontChanged(QFont))); @@ -526,7 +537,7 @@ void MainWindow::createToolbars() linePointerButton->setCheckable(true); linePointerButton->setIcon(QIcon(":/images/linepointer.png")); - pointerTypeGroup = new QButtonGroup; + pointerTypeGroup = new QButtonGroup(this); pointerTypeGroup->addButton(pointerButton, int(DiagramScene::MoveItem)); pointerTypeGroup->addButton(linePointerButton, int(DiagramScene::InsertLine)); @@ -605,7 +616,7 @@ QMenu *MainWindow::createColorMenu(const char *slot, QColor defaultColor) names << tr("black") << tr("white") << tr("red") << tr("blue") << tr("yellow"); - QMenu *colorMenu = new QMenu; + QMenu *colorMenu = new QMenu(this); for (int i = 0; i < colors.count(); ++i) { QAction *action = new QAction(names.at(i), this); action->setData(colors.at(i)); -- cgit v0.12 From 946d1a895e9d7d87b45ae440b533745f35661969 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 11 Aug 2010 10:04:53 +1000 Subject: Don't destroy ListModel child list nodes. These are owned by the root and must not be destroyed by child lists. Task-number: QTBUG-12771 Reviewed-by: Bea Lam (cherry picked from commit 4026b2c7bc91f8f25f73b182687d5d2bed823217) --- src/declarative/util/qdeclarativelistmodel.cpp | 26 +++++++++++++--------- src/declarative/util/qdeclarativelistmodel_p_p.h | 13 +++++++++++ .../tst_qdeclarativelistmodel.cpp | 7 +++--- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index 3ede335..b0d47a9 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -108,9 +108,9 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM \snippet doc/src/snippets/declarative/listmodel-modify.qml delegate - When creating content dynamically, note that the set of available properties cannot be changed - except by first clearing the model. Whatever properties are first added to the model are then the - only permitted properties in the model until it is cleared. + Note that when creating content dynamically the set of available properties cannot be changed + once set. Whatever properties are first added to the model are the + only permitted properties in the model. \section2 Using threaded list models with WorkerScript @@ -283,8 +283,7 @@ int QDeclarativeListModel::count() const /*! \qmlmethod ListModel::clear() - Deletes all content from the model. The properties are cleared such that - different properties may be set on subsequent additions. + Deletes all content from the model. \sa append() remove() */ @@ -945,13 +944,14 @@ bool FlatListModel::addValue(const QScriptValue &value, QHash<int, QVariant> *ro } NestedListModel::NestedListModel(QDeclarativeListModel *base) - : _root(0), m_listModel(base), _rolesOk(false) + : _root(0), m_ownsRoot(false), m_listModel(base), _rolesOk(false) { } NestedListModel::~NestedListModel() { - delete _root; + if (m_ownsRoot) + delete _root; } QVariant NestedListModel::valueForNode(ModelNode *node, bool *hasNested) const @@ -1051,8 +1051,8 @@ void NestedListModel::clear() _rolesOk = false; roleStrings.clear(); - delete _root; - _root = 0; + if (_root) + _root->clear(); } void NestedListModel::remove(int index) @@ -1067,8 +1067,10 @@ void NestedListModel::remove(int index) bool NestedListModel::insert(int index, const QScriptValue& valuemap) { - if (!_root) + if (!_root) { _root = new ModelNode; + m_ownsRoot = true; + } ModelNode *mn = new ModelNode; mn->setObjectValue(valuemap); @@ -1099,8 +1101,10 @@ void NestedListModel::move(int from, int to, int n) bool NestedListModel::append(const QScriptValue& valuemap) { - if (!_root) + if (!_root) { _root = new ModelNode; + m_ownsRoot = true; + } ModelNode *mn = new ModelNode; mn->setObjectValue(valuemap); _root->values << qVariantFromValue(mn); diff --git a/src/declarative/util/qdeclarativelistmodel_p_p.h b/src/declarative/util/qdeclarativelistmodel_p_p.h index 532eefa..c41f016 100644 --- a/src/declarative/util/qdeclarativelistmodel_p_p.h +++ b/src/declarative/util/qdeclarativelistmodel_p_p.h @@ -130,6 +130,7 @@ public: void checkRoles() const; ModelNode *_root; + bool m_ownsRoot; QDeclarativeListModel *m_listModel; private: @@ -157,6 +158,18 @@ struct ModelNode QList<QVariant> values; QHash<QString, ModelNode *> properties; + void clear() { + ModelNode *node; + for (int ii = 0; ii < values.count(); ++ii) { + node = qvariant_cast<ModelNode *>(values.at(ii)); + if (node) { delete node; node = 0; } + } + values.clear(); + + qDeleteAll(properties.values()); + properties.clear(); + } + QDeclarativeListModel *model(const NestedListModel *model) { if (!modelCache) { modelCache = new QDeclarativeListModel; diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp index 858c26d..10805b4 100644 --- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp +++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp @@ -271,6 +271,9 @@ void tst_qdeclarativelistmodel::dynamic_data() QTest::newRow("nested-insert") << "{append({'foo':123});insert(0,{'bars':[{'a':1},{'b':2},{'c':3}]});get(0).bars.get(0).a}" << 1 << ""; QTest::newRow("nested-set") << "{append({'foo':123});set(0,{'foo':[{'x':123}]});get(0).foo.get(0).x}" << 123 << ""; + QTest::newRow("nested-count") << "{append({'foo':123,'bars':[{'a':1},{'a':2},{'a':3}]}); get(0).bars.count}" << 3 << ""; + QTest::newRow("nested-clear") << "{append({'foo':123,'bars':[{'a':1},{'a':2},{'a':3}]}); get(0).bars.clear(); get(0).bars.count}" << 0 << ""; + // XXX //QTest::newRow("nested-setprop") << "{append({'foo':123});setProperty(0,'foo',[{'x':123}]);get(0).foo.get(0).x}" << 123 << ""; } @@ -344,9 +347,7 @@ void tst_qdeclarativelistmodel::dynamic_worker() waitForWorker(item); QDeclarativeExpression e(eng.rootContext(), &model, operations.last().toString()); - if (QByteArray(QTest::currentDataTag()).startsWith("nested")) - QVERIFY(e.evaluate().toInt() != result); - else + if (!QByteArray(QTest::currentDataTag()).startsWith("nested")) QCOMPARE(e.evaluate().toInt(), result); } -- cgit v0.12 From 43483dba1fbb40bea5c69c3b87b7e2fc62371e57 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 11 Aug 2010 13:58:08 +1000 Subject: Compile on Symbian Task-number: QTBUG-12771 (cherry picked from commit e8d3e8e0b93271bb41fcdc264fc10ec59be5aa20) --- src/declarative/util/qdeclarativelistmodel.cpp | 12 +++++++++--- src/declarative/util/qdeclarativelistmodel_p_p.h | 12 +----------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index b0d47a9..20fe3a9 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -1209,16 +1209,22 @@ ModelNode::ModelNode() ModelNode::~ModelNode() { - qDeleteAll(properties.values()); + clear(); + if (modelCache) { modelCache->m_nested->_root = 0/* ==this */; delete modelCache; modelCache = 0; } + if (objectCache) { delete objectCache; objectCache = 0; } +} +void ModelNode::clear() +{ ModelNode *node; for (int ii = 0; ii < values.count(); ++ii) { node = qvariant_cast<ModelNode *>(values.at(ii)); if (node) { delete node; node = 0; } } + values.clear(); - if (modelCache) { modelCache->m_nested->_root = 0/* ==this */; delete modelCache; modelCache = 0; } - if (objectCache) { delete objectCache; objectCache = 0; } + qDeleteAll(properties.values()); + properties.clear(); } void ModelNode::setObjectValue(const QScriptValue& valuemap) { diff --git a/src/declarative/util/qdeclarativelistmodel_p_p.h b/src/declarative/util/qdeclarativelistmodel_p_p.h index c41f016..8231414 100644 --- a/src/declarative/util/qdeclarativelistmodel_p_p.h +++ b/src/declarative/util/qdeclarativelistmodel_p_p.h @@ -158,17 +158,7 @@ struct ModelNode QList<QVariant> values; QHash<QString, ModelNode *> properties; - void clear() { - ModelNode *node; - for (int ii = 0; ii < values.count(); ++ii) { - node = qvariant_cast<ModelNode *>(values.at(ii)); - if (node) { delete node; node = 0; } - } - values.clear(); - - qDeleteAll(properties.values()); - properties.clear(); - } + void clear(); QDeclarativeListModel *model(const NestedListModel *model) { if (!modelCache) { -- cgit v0.12 From 68d0e64e710537fbf17b9f2ebde1659d383e862f Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Fri, 13 Aug 2010 10:10:38 +1000 Subject: Fix configure -help output. declarative module is built by default. Task-number: QTBUG-12840 (cherry picked from commit d904fe2273be5d39b54b987eef6b9cc0d1b85c4b) --- configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 4d9bc46..05633fa 100755 --- a/configure +++ b/configure @@ -3602,8 +3602,8 @@ fi -no-scripttools .... Do not build the QtScriptTools module. + -scripttools ....... Build the QtScriptTools module. - + -no-declarative .....Do not build the declarative module. - -declarative ....... Build the declarative module. + -no-declarative .....Do not build the declarative module. + + -declarative ....... Build the declarative module. -platform target ... The operating system and compiler you are building on ($PLATFORM). -- cgit v0.12 From 54bc94e03648902e55fcd26a858d5287ad71c261 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Fri, 13 Aug 2010 14:01:52 +1000 Subject: Make this constructor explicit in Qt too. (cherry picked from commit 167b63d2250e7923d7b660076a80e82af07d9cdb) --- src/network/bearer/qnetworksession.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/network/bearer/qnetworksession.h b/src/network/bearer/qnetworksession.h index e7fffac..0b40147 100644 --- a/src/network/bearer/qnetworksession.h +++ b/src/network/bearer/qnetworksession.h @@ -89,11 +89,7 @@ public: OperationNotSupportedError, InvalidConfigurationError }; -#ifndef QT_MOBILITY_BEARER - QNetworkSession(const QNetworkConfiguration& connConfig, QObject* parent =0); -#else explicit QNetworkSession(const QNetworkConfiguration& connConfig, QObject* parent =0); -#endif virtual ~QNetworkSession(); bool isOpen() const; -- cgit v0.12 From aa664a9d193f450134540ef285a0e1ac755984e8 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Wed, 18 Aug 2010 14:05:55 +0200 Subject: fix epic fail from 4ba6646 Reviewed-by: ossi --- bin/syncqt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/syncqt b/bin/syncqt index d665e87..cee5398 100755 --- a/bin/syncqt +++ b/bin/syncqt @@ -961,7 +961,7 @@ if($check_includes) { my $lib = $_; my $dir = "$modules{$lib}"; { - my $current_dir = "$_"; + my $current_dir = $dir; #calc subdirs my @subdirs = ($current_dir); foreach (@subdirs) { -- cgit v0.12 From 0f7d34f1fc91fffd6f1264def27c6d353533050b Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen <richard.gustavsen@nokia.com> Date: Tue, 17 Aug 2010 10:08:20 +0200 Subject: Cocoa: parent windows shows on screen when they should be hidden The reason is the cocoa method that adds a window as a child of another, it ends up showing both the parent and the child window regardless. And this could in some cases also cause a crash. So we therefore need to be careful when calling that function, and be sure that the parent is actually visible. In addition, addChildWindow reset the stacking level of the child window, and made e.g. normal child windows pop in front of tool child windows. This could easily be seen in e.g. Designer. Task-number: QTBUG-12866 Reviewed-by: prasanth (cherry picked from commit cc6dc0aeefde881a95f5fea2b26f2f3d7bdc6e15) --- src/gui/kernel/qwidget_mac.mm | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index c2af6af..65128ec 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2796,10 +2796,16 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (QWidget *parent = q->parentWidget()) { if (parent->testAttribute(Qt::WA_WState_Created)) { - if (set) - [qt_mac_window_for(parent) addChildWindow:qt_mac_window_for(q) ordered:NSWindowAbove]; - else + if (set) { + if (parent->isVisible()) { + NSWindow *childwin = qt_mac_window_for(q); + int childLevel = [childwin level]; + [qt_mac_window_for(parent) addChildWindow:childwin ordered:NSWindowAbove]; + [childwin setLevel:childLevel]; + } + } else { [qt_mac_window_for(parent) removeChildWindow:qt_mac_window_for(q)]; + } } } @@ -2807,10 +2813,14 @@ void QWidgetPrivate::setSubWindowStacking(bool set) for (int i=0; i<widgets.size(); ++i) { QWidget *child = widgets.at(i); if (child->isWindow() && child->testAttribute(Qt::WA_WState_Created) && child->isVisibleTo(q)) { - if (set) - [qt_mac_window_for(q) addChildWindow:qt_mac_window_for(child) ordered:NSWindowAbove]; - else + if (set) { + NSWindow *childwin = qt_mac_window_for(child); + int childLevel = [childwin level]; + [qt_mac_window_for(q) addChildWindow:childwin ordered:NSWindowAbove]; + [childwin setLevel:childLevel]; + } else { [qt_mac_window_for(q) removeChildWindow:qt_mac_window_for(child)]; + } } } } -- cgit v0.12 From 3e095417325c6184203c346e850cfe1d1bb044a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Tue, 17 Aug 2010 10:29:03 +0200 Subject: Prevented Xorg crash in qtdemo when running corkboards example. The crash happens in the Nvidia driver in glXReleaseTexImageEXT when scrolling the corkboard using the mouse. To work around it we detect the Nvidia driver versions where this is known to be a problem and skip using the texture from pixmap extension in those cases. Task-number: QTBUG-12914 Reviewed-by: Trond (cherry picked from commit a76b8bf67696ae69888cc6237417e7c8f07f8da6) --- src/opengl/qgl.cpp | 30 +++++++++++++++++++++++++----- src/opengl/qgl_p.h | 3 +++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 2fa33bf..f69b421 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1688,6 +1688,10 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) workaround_needsFullClearOnEveryFrame = false; workaround_brokenFBOReadBack = false; workaroundsCached = false; + + workaround_brokenTextureFromPixmap = false; + workaround_brokenTextureFromPixmap_init = false; + for (int i = 0; i < QT_GL_VERTEX_ARRAY_TRACKED_COUNT; ++i) vertexAttributeArraysEnabledState[i] = false; } @@ -2570,11 +2574,27 @@ QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, && xinfo && xinfo->screen() == pixmap.x11Info().screen() && target == GL_TEXTURE_2D) { - texture = bindTextureFromNativePixmap(const_cast<QPixmap*>(&pixmap), key, options); - if (texture) { - texture->options |= QGLContext::MemoryManagedBindOption; - texture->boundPixmap = pd; - boundPixmaps.insert(pd, QPixmap(pixmap)); + if (!workaround_brokenTextureFromPixmap_init) { + workaround_brokenTextureFromPixmap_init = true; + + const QByteArray versionString(reinterpret_cast<const char*>(glGetString(GL_VERSION))); + const int pos = versionString.indexOf("NVIDIA "); + + if (pos >= 0) { + const QByteArray nvidiaVersionString = versionString.mid(pos + strlen("NVIDIA ")); + + if (nvidiaVersionString.startsWith("195") || nvidiaVersionString.startsWith("256")) + workaround_brokenTextureFromPixmap = true; + } + } + + if (!workaround_brokenTextureFromPixmap) { + texture = bindTextureFromNativePixmap(const_cast<QPixmap*>(&pixmap), key, options); + if (texture) { + texture->options |= QGLContext::MemoryManagedBindOption; + texture->boundPixmap = pd; + boundPixmaps.insert(pd, QPixmap(pixmap)); + } } } #endif diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 32feacd..ca0d3fa 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -393,6 +393,9 @@ public: uint workaround_brokenFBOReadBack : 1; uint workaroundsCached : 1; + uint workaround_brokenTextureFromPixmap : 1; + uint workaround_brokenTextureFromPixmap_init : 1; + QPaintDevice *paintDevice; QColor transpColor; QGLContext *q_ptr; -- cgit v0.12 From 8305a9e833003b9f5018f7ae0ad8d175b6361df8 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Fri, 6 Aug 2010 18:17:22 +0200 Subject: fix loading of module configs do it in qt_config.prf instead of in the autogenerated qconfig.pri files. this is waaaay more elegant, and allows us to easily use the magic in that file which avoids loading qt configuration from the qt install dir while building qt itself. Reviewed-by: joerg Reviewed-by: Simon Hausmann Task-number: QTBUG-12698 --- mkspecs/features/qt_config.prf | 1 + 1 file changed, 1 insertion(+) diff --git a/mkspecs/features/qt_config.prf b/mkspecs/features/qt_config.prf index 0a2d985..3145341 100644 --- a/mkspecs/features/qt_config.prf +++ b/mkspecs/features/qt_config.prf @@ -8,6 +8,7 @@ isEmpty(QMAKE_QT_CONFIG)|!exists($$QMAKE_QT_CONFIG) { debug(1, "Cannot load qconfig.pri!") } else { debug(1, "Loaded .qconfig.pri from ($$QMAKE_QT_CONFIG)") + for(mod, $$list($$files($$dirname(QMAKE_QT_CONFIG)/modules/qt_*.pri))):include($$mod) } load(qt_functions) -- cgit v0.12 From 16a1d531adc69fd4473b44b9d326784f52917245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Tue, 17 Aug 2010 10:45:17 +0200 Subject: Outline / fill inconsistency in X11 paint engine. Change ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6 broke outline / fill consistency in the X11 engine. Since the positioning of lines is more important we'll round the fill coordinates the same way. The bug was visible in the filltest.qps arthur test. Reviewed-by: Gunnar Sletta (cherry picked from commit ff405f5623d7ed18c881c097368e3e9afd2e9443) --- src/gui/painting/qpaintengine_x11.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index e521e01..5307142 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -1516,8 +1516,8 @@ void QX11PaintEnginePrivate::fillPolygon_translated(const QPointF *polygonPoints for (int i = 0; i < pointCount; ++i) { translated_points[i] = polygonPoints[i] + offset; - translated_points[i].rx() = qRound(translated_points[i].x()) + offs; - translated_points[i].ry() = qRound(translated_points[i].y()) + offs; + translated_points[i].rx() = qFloor(translated_points[i].x()) + offs; + translated_points[i].ry() = qFloor(translated_points[i].y()) + offs; } fillPolygon_dev(translated_points.data(), pointCount, gcMode, mode); @@ -1754,8 +1754,8 @@ void QX11PaintEnginePrivate::fillPath(const QPainterPath &path, QX11PaintEngineP for (int j = 0; j < polys.at(i).size(); ++j) { translated_points[j] = polys.at(i).at(j); if (!X11->use_xrender || !(render_hints & QPainter::Antialiasing)) { - translated_points[j].rx() = qRound(translated_points[j].rx() + aliasedCoordinateDelta) + offs; - translated_points[j].ry() = qRound(translated_points[j].ry() + aliasedCoordinateDelta) + offs; + translated_points[j].rx() = qFloor(translated_points[j].rx() + aliasedCoordinateDelta) + offs; + translated_points[j].ry() = qFloor(translated_points[j].ry() + aliasedCoordinateDelta) + offs; } } -- cgit v0.12 From 7aeb114a659d1550f7377a5108cff46213598371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Wed, 18 Aug 2010 17:06:19 +0200 Subject: Revert "Outline / fill inconsistency in X11 paint engine." This reverts commit ff405f5623d7ed18c881c097368e3e9afd2e9443. Reviewed-by: Trond (cherry picked from commit 3014b427aa8700890f9bd8ea2a0300fc152bf3d2) --- src/gui/painting/qpaintengine_x11.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index 5307142..e521e01 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -1516,8 +1516,8 @@ void QX11PaintEnginePrivate::fillPolygon_translated(const QPointF *polygonPoints for (int i = 0; i < pointCount; ++i) { translated_points[i] = polygonPoints[i] + offset; - translated_points[i].rx() = qFloor(translated_points[i].x()) + offs; - translated_points[i].ry() = qFloor(translated_points[i].y()) + offs; + translated_points[i].rx() = qRound(translated_points[i].x()) + offs; + translated_points[i].ry() = qRound(translated_points[i].y()) + offs; } fillPolygon_dev(translated_points.data(), pointCount, gcMode, mode); @@ -1754,8 +1754,8 @@ void QX11PaintEnginePrivate::fillPath(const QPainterPath &path, QX11PaintEngineP for (int j = 0; j < polys.at(i).size(); ++j) { translated_points[j] = polys.at(i).at(j); if (!X11->use_xrender || !(render_hints & QPainter::Antialiasing)) { - translated_points[j].rx() = qFloor(translated_points[j].rx() + aliasedCoordinateDelta) + offs; - translated_points[j].ry() = qFloor(translated_points[j].ry() + aliasedCoordinateDelta) + offs; + translated_points[j].rx() = qRound(translated_points[j].rx() + aliasedCoordinateDelta) + offs; + translated_points[j].ry() = qRound(translated_points[j].ry() + aliasedCoordinateDelta) + offs; } } -- cgit v0.12 From 5feec6d4433737849243fc862945ed15e63bd152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Wed, 18 Aug 2010 17:17:15 +0200 Subject: Revert "Fix the rendering of lines with the X11 paint engine" This reverts commit ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6, which broke fill / outline consistency, and when trying to fix that by rounding the fill the same way that broke rendering in Creator. Unfortunately the X11 paint engine is too sensitive to changes, there have already been tons of patches to make it as consistent as possible. It's simply not possible to get the same rounding for both fill and outlines and at the same time have consistency between fill and outline (no holes or fill outside the outline), while using the integer based Xlib rendering API. Hopefully in 4.8 we'll switch to raster and the X11 paint engine will be a legacy. Reviewed-by: Trond (cherry picked from commit 041a68007413a20a9a9c97d0f2f04f9e03428f67) --- src/gui/painting/qpaintengine_x11.cpp | 22 ++++++------ tests/auto/qpainter/tst_qpainter.cpp | 65 ----------------------------------- 2 files changed, 12 insertions(+), 75 deletions(-) diff --git a/src/gui/painting/qpaintengine_x11.cpp b/src/gui/painting/qpaintengine_x11.cpp index e521e01..910b2df 100644 --- a/src/gui/painting/qpaintengine_x11.cpp +++ b/src/gui/painting/qpaintengine_x11.cpp @@ -696,10 +696,11 @@ void QX11PaintEngine::drawLines(const QLine *lines, int lineCount) linef = d->matrix.map(QLineF(lines[i])); } if (clipLine(&linef, d->polygonClipper.boundingRect())) { - int x1 = qFloor(linef.x1() + aliasedCoordinateDelta); - int y1 = qFloor(linef.y1() + aliasedCoordinateDelta); - int x2 = qFloor(linef.x2() + aliasedCoordinateDelta); - int y2 = qFloor(linef.y2() + aliasedCoordinateDelta); + int x1 = qRound(linef.x1() + aliasedCoordinateDelta); + int y1 = qRound(linef.y1() + aliasedCoordinateDelta); + int x2 = qRound(linef.x2() + aliasedCoordinateDelta); + int y2 = qRound(linef.y2() + aliasedCoordinateDelta); + XDrawLine(d->dpy, d->hd, d->gc, x1, y1, x2, y2); } } @@ -729,10 +730,11 @@ void QX11PaintEngine::drawLines(const QLineF *lines, int lineCount) for (int i = 0; i < lineCount; ++i) { QLineF linef = d->matrix.map(lines[i]); if (clipLine(&linef, d->polygonClipper.boundingRect())) { - int x1 = qFloor(linef.x1() + aliasedCoordinateDelta); - int y1 = qFloor(linef.y1() + aliasedCoordinateDelta); - int x2 = qFloor(linef.x2() + aliasedCoordinateDelta); - int y2 = qFloor(linef.y2() + aliasedCoordinateDelta); + int x1 = qRound(linef.x1() + aliasedCoordinateDelta); + int y1 = qRound(linef.y1() + aliasedCoordinateDelta); + int x2 = qRound(linef.x2() + aliasedCoordinateDelta); + int y2 = qRound(linef.y2() + aliasedCoordinateDelta); + XDrawLine(d->dpy, d->hd, d->gc, x1, y1, x2, y2); } } @@ -1688,8 +1690,8 @@ void QX11PaintEnginePrivate::strokePolygon_dev(const QPointF *polygonPoints, int if (clippedCount > 0) { QVarLengthArray<XPoint> xpoints(clippedCount); for (int i = 0; i < clippedCount; ++i) { - xpoints[i].x = qFloor(clippedPoints[i].x + aliasedCoordinateDelta); - xpoints[i].y = qFloor(clippedPoints[i].y + aliasedCoordinateDelta); + xpoints[i].x = qRound(clippedPoints[i].x + aliasedCoordinateDelta); + xpoints[i].y = qRound(clippedPoints[i].y + aliasedCoordinateDelta); } uint numberPoints = qMin(clippedCount, xlibMaxLinePoints); XPoint *pts = xpoints.data(); diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp index 9c8cdd4..27ee6e7 100644 --- a/tests/auto/qpainter/tst_qpainter.cpp +++ b/tests/auto/qpainter/tst_qpainter.cpp @@ -118,12 +118,10 @@ private slots: void drawLine_task190634(); void drawLine_task229459(); void drawLine_task234891(); - void drawHorizontalLineF(); void drawRect_data() { fillData(); } void drawRect(); void drawRect2(); - void drawRectFHorizontalLine(); void fillRect(); void fillRect2(); @@ -253,7 +251,6 @@ private slots: void setPenColorOnPixmap(); void QTBUG5939_attachPainterPrivate(); - void drawHorizontalLine(); private: void fillData(); @@ -1221,26 +1218,6 @@ void tst_QPainter::drawLine_task234891() QCOMPARE(expected, img); } -void tst_QPainter::drawHorizontalLineF() -{ - QPixmap pixmap(100, 3); - pixmap.fill(); - - { - QPainter painter(&pixmap); - painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QImage refImage(100, 3, QImage::Format_ARGB32); - refImage.fill(0xFFFFFFFF); - { - QPainter painter(&refImage); - painter.drawLine(QLineF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); -} - void tst_QPainter::drawLine_task216948() { QImage img(1, 10, QImage::Format_ARGB32_Premultiplied); @@ -1325,26 +1302,6 @@ void tst_QPainter::drawRect2() } } -void tst_QPainter::drawRectFHorizontalLine() -{ - QPixmap pixmap(100, 3); - pixmap.fill(); - - { - QPainter painter(&pixmap); - painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QImage refImage(100, 3, QImage::Format_ARGB32); - refImage.fill(0xFFFFFFFF); - { - QPainter painter(&refImage); - painter.drawRect(QRectF(1.5f, 1.5f, 98.5f, 1.5f)); - } - - QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); -} - void tst_QPainter::fillRect() { QImage image(100, 100, QImage::Format_ARGB32_Premultiplied); @@ -4549,28 +4506,6 @@ void tst_QPainter::QTBUG5939_attachPainterPrivate() QCOMPARE(widget->deviceTransform, proxy->deviceTransform); } -void tst_QPainter::drawHorizontalLine() -{ - QPixmap pixmap(100, 3); - pixmap.fill(); - - { - QPainter painter(&pixmap); - painter.translate(0.3, 0.3); - painter.drawLine(QLine(1, 1, 99, 1)); - } - - QImage refImage(100, 3, QImage::Format_ARGB32); - refImage.fill(0xFFFFFFFF); - { - QPainter painter(&refImage); - painter.translate(0.3, 0.3); - painter.drawLine(QLine(1, 1, 99, 1)); - } - - QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32), refImage); -} - QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc" -- cgit v0.12 From 00bc7129d166f8f3e1486b8bf920d77f46400a6e Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen <richard.gustavsen@nokia.com> Date: Tue, 17 Aug 2010 17:33:42 +0200 Subject: Cocoa: revert parts of cc6dc0aeefde881a95f5fea2b26f2f3d7bdc6e15 The reason is that we tried to fix the stacking order of child windows while we fixed a crash. But the patch turned out to break an auto-test Reviewed-by: prasanth (cherry picked from commit 749ad26d255327c9fa3fe857a30983cc6dfef0d9) --- src/gui/kernel/qwidget_mac.mm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 65128ec..e92519b 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2799,9 +2799,7 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (set) { if (parent->isVisible()) { NSWindow *childwin = qt_mac_window_for(q); - int childLevel = [childwin level]; [qt_mac_window_for(parent) addChildWindow:childwin ordered:NSWindowAbove]; - [childwin setLevel:childLevel]; } } else { [qt_mac_window_for(parent) removeChildWindow:qt_mac_window_for(q)]; @@ -2815,9 +2813,7 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (child->isWindow() && child->testAttribute(Qt::WA_WState_Created) && child->isVisibleTo(q)) { if (set) { NSWindow *childwin = qt_mac_window_for(child); - int childLevel = [childwin level]; [qt_mac_window_for(q) addChildWindow:childwin ordered:NSWindowAbove]; - [childwin setLevel:childLevel]; } else { [qt_mac_window_for(q) removeChildWindow:qt_mac_window_for(child)]; } -- cgit v0.12 From f94c0ee4f818b417ea518a04ee88cdcee844c9fa Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Wed, 11 Aug 2010 12:45:58 +0200 Subject: Doc: Fixing bug involving header misplacement in Creator style Task-number: QTBUG-11408 (cherry picked from commit 997e4161cf937aa34a16bb2e708fa1bc7909355f) --- doc/src/template/style/style.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 2aff85f..6786a9f 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -1322,7 +1322,7 @@ .creator .wrapper { position:relative; - top:50px; + top:5px; } .creator .wrapper .bd { @@ -1433,7 +1433,7 @@ - position:fixed; + /* position:fixed;*/ } -- cgit v0.12 From 0f8498584fe3f3c5e200076c0a3b7fbe33db4b52 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Fri, 20 Aug 2010 17:04:23 +0200 Subject: fix shadow build of configure.exe Reviewed-by: ossi --- tools/configure/configure.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro index 91de7c2..ab4b155 100644 --- a/tools/configure/configure.pro +++ b/tools/configure/configure.pro @@ -27,7 +27,7 @@ INCPATH += $$QT_SOURCE_TREE/src/corelib/arch/generic \ $$QT_SOURCE_TREE/src/corelib/global \ $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ - $$QT_BUILD_TREE/tools/shared + $$QT_SOURCE_TREE/tools/shared HEADERS = configureapp.h environment.h tools.h\ $$QT_SOURCE_TREE/src/corelib/tools/qbytearray.h \ -- cgit v0.12 From 8c47746c8da6d9d431e69fb2a828e151c36318d0 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Fri, 20 Aug 2010 17:05:01 +0200 Subject: fix Norwegian Breakfast Network warnings in configure Reviewed-by: ossi --- tools/configure/configureapp.cpp | 16 ++++++++-------- tools/configure/environment.cpp | 7 +++---- tools/configure/tools.cpp | 10 +++++----- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index b35f454..5de4f27 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -313,7 +313,7 @@ Configure::Configure( int& argc, char** argv ) dictionary[ "ACCESSIBILITY" ] = "yes"; dictionary[ "OPENGL" ] = "yes"; dictionary[ "OPENVG" ] = "no"; - dictionary[ "IPV6" ] = "yes"; // Always, dynamicly loaded + dictionary[ "IPV6" ] = "yes"; // Always, dynamically loaded dictionary[ "OPENSSL" ] = "auto"; dictionary[ "DBUS" ] = "auto"; dictionary[ "S60" ] = "yes"; @@ -2094,7 +2094,7 @@ bool Configure::checkAvailability(const QString &part) available = (paths.size() == 0); if (!available) { - if (epocRoot.isNull() || epocRoot == "") + if (epocRoot.isEmpty()) epocRoot = "<empty string>"; cout << endl << "The QtMultimedia audio backend will not be built because required" << endl @@ -2625,7 +2625,7 @@ void Configure::generateOutputVars() QString set_config = dictionary["QCONFIG"]; if (possible_configs.contains(set_config)) { - foreach(QString cfg, possible_configs) { + foreach (const QString &cfg, possible_configs) { qtConfig += (cfg + "-config"); if (cfg == set_config) break; @@ -2736,7 +2736,7 @@ void Configure::generateCachefile() QStringList buildParts; buildParts << "libs" << "tools" << "examples" << "demos" << "docs" << "translations"; - foreach(QString item, disabledBuildParts) { + foreach (const QString &item, disabledBuildParts) { buildParts.removeAll(item); } cacheStream << "QT_BUILD_PARTS = " << buildParts.join( " " ) << endl; @@ -3041,7 +3041,7 @@ void Configure::generateConfigfiles() QStringList kbdDrivers = dictionary["KBD_DRIVERS"].split(" ");; QStringList allKbdDrivers; allKbdDrivers<<"tty"<<"usb"<<"sl5000"<<"yopy"<<"vr41xx"<<"qvfb"<<"um"; - foreach(QString kbd, allKbdDrivers) { + foreach (const QString &kbd, allKbdDrivers) { if( !kbdDrivers.contains(kbd)) tmpStream<<"#define QT_NO_QWS_KBD_"<<kbd.toUpper()<<endl; } @@ -3049,7 +3049,7 @@ void Configure::generateConfigfiles() QStringList mouseDrivers = dictionary["MOUSE_DRIVERS"].split(" "); QStringList allMouseDrivers; allMouseDrivers << "pc"<<"bus"<<"linuxtp"<<"yopy"<<"vr41xx"<<"tslib"<<"qvfb"; - foreach(QString mouse, allMouseDrivers) { + foreach (const QString &mouse, allMouseDrivers) { if( !mouseDrivers.contains(mouse) ) tmpStream<<"#define QT_NO_QWS_MOUSE_"<<mouse.toUpper()<<endl; } @@ -3057,7 +3057,7 @@ void Configure::generateConfigfiles() QStringList gfxDrivers = dictionary["GFX_DRIVERS"].split(" "); QStringList allGfxDrivers; allGfxDrivers<<"linuxfb"<<"transformed"<<"qvfb"<<"vnc"<<"multiscreen"<<"ahi"; - foreach(QString gfx, allGfxDrivers) { + foreach (const QString &gfx, allGfxDrivers) { if( !gfxDrivers.contains(gfx)) tmpStream<<"#define QT_NO_QWS_"<<gfx.toUpper()<<endl; } @@ -3065,7 +3065,7 @@ void Configure::generateConfigfiles() tmpStream<<"#define Q_WS_QWS"<<endl; QStringList depths = dictionary[ "QT_QWS_DEPTH" ].split(" "); - foreach(QString depth, depths) + foreach (const QString &depth, depths) tmpStream<<"#define QT_QWS_DEPTH_"+depth<<endl; } diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp index e93f9a0..62b32f1 100644 --- a/tools/configure/environment.cpp +++ b/tools/configure/environment.cpp @@ -277,8 +277,7 @@ static QByteArray qt_create_environment(const QStringList &environment) pos += tmpSize; } // add the user environment - for (QStringList::ConstIterator it = environment.begin(); it != environment.end(); it++ ) { - QString tmp = *it; + foreach (const QString &tmp, environment) { uint tmpSize = sizeof(wchar_t) * (tmp.length() + 1); envlist.resize(envlist.size() + tmpSize); memcpy(envlist.data() + pos, tmp.utf16(), tmpSize); @@ -382,7 +381,7 @@ int Environment::execute(QStringList arguments, const QStringList &additionalEnv switch(GetLastError()) { case E2BIG: cerr << "execute: Argument list exceeds 1024 bytes" << endl; - foreach(QString arg, arguments) + foreach (const QString &arg, arguments) cerr << " (" << arg.toLocal8Bit().constData() << ")" << endl; break; case ENOENT: @@ -396,7 +395,7 @@ int Environment::execute(QStringList arguments, const QStringList &additionalEnv break; default: cerr << "execute: Unknown error" << endl; - foreach(QString arg, arguments) + foreach (const QString &arg, arguments) cerr << " (" << arg.toLocal8Bit().constData() << ")" << endl; break; } diff --git a/tools/configure/tools.cpp b/tools/configure/tools.cpp index c4625af..c91f048 100644 --- a/tools/configure/tools.cpp +++ b/tools/configure/tools.cpp @@ -91,8 +91,8 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString QStringList components = buffer.split( '=' ); if ( components.size() >= 2 ) { QStringList::Iterator it = components.begin(); - QString key = (*it++).trimmed().replace( "\"", QString() ).toUpper(); - QString value = (*it++).trimmed().replace( "\"", QString() ); + QString key = (*it++).trimmed().remove('"').toUpper(); + QString value = (*it++).trimmed().remove('"'); licenseInfo[ key ] = value; } } @@ -111,7 +111,7 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString // Verify license info... QString licenseKey = licenseInfo["LICENSEKEYEXT"]; QByteArray clicenseKey = licenseKey.toLatin1(); - //We check the licence + //We check the license static const char * const SEP = "-"; char *licenseParts[NUMBER_OF_PARTS]; int partNumber = 0; @@ -218,7 +218,7 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString if (QFile::exists(dictionary["QT_SOURCE_TREE"] + "/.LICENSE")) { // Generic, no-suffix license - dictionary["LICENSE_EXTENSION"] = QString(); + dictionary["LICENSE_EXTENSION"].clear(); } else if (dictionary["LICENSE_EXTENSION"].isEmpty()) { cout << "License file does not contain proper license key." << endl; dictionary["DONE"] = "error"; @@ -239,7 +239,7 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString fromLicenseFile += "-US"; if (!CopyFile((wchar_t*)QDir::toNativeSeparators(fromLicenseFile).utf16(), - (wchar_t*)QDir::toNativeSeparators(toLicenseFile).utf16(), FALSE)) { + (wchar_t*)QDir::toNativeSeparators(toLicenseFile).utf16(), false)) { cout << "Failed to copy license file (" << fromLicenseFile << ")"; dictionary["DONE"] = "error"; return; -- cgit v0.12 From 96a74dabfde5b9ad9734d8b1a9d8e2b2870681c0 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Mon, 23 Aug 2010 07:21:51 +0200 Subject: Doc: Updating menu links --- tools/qdoc3/test/qt-html-templates.qdocconf | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf index c70bcaf..8d4d27f 100644 --- a/tools/qdoc3/test/qt-html-templates.qdocconf +++ b/tools/qdoc3/test/qt-html-templates.qdocconf @@ -98,10 +98,13 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " Qt Topics</h2>\n" \ " <div id=\"list002\" class=\"list\">\n" \ " <ul id=\"ul002\" >\n" \ - " <li class=\"defaultLink\"><a href=\"qt-basic-concepts.html\">Basic Qt architecture</a></li>\n" \ - " <li class=\"defaultLink\"><a href=\"qtquick.html\">Device UI's & Qt Quick</a></li>\n" \ - " <li class=\"defaultLink\"><a href=\"qt-gui-concepts.html\">Desktop UI components</a></li>\n" \ - " <li class=\"defaultLink\"><a href=\"platform-specific.html\">Platform-specific info</a></li>\n" \ + " <li><a href=\"qt-basic-concepts.html\">Programming with Qt</a></li> \n" \ + " <li><a href=\"qtquick.html\">Device UI's & Qt Quick</a></li> \n" \ + " <li><a href=\"qt-gui-concepts.html\">UI Design with Qt</a></li> \n" \ + " <li><a href=\"developing-with-qt.html\">Cross-platform and Platform-specific</a></li> \n" \ + " <li><a href=\"platform-specific.html\">Platform-specific info</a></li> \n" \ + " <li><a href=\"technology-apis.html\">Qt and Key Technologies</a></li> \n" \ + " <li><a href=\"best-practices.html\">How-To's and Best Practices</a></li> \n" \ " </ul> \n" \ " </div>\n" \ " </div>\n" \ -- cgit v0.12 From fa2a1a8c584494a0e75732444ad3d7561a39d6f7 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Mon, 23 Aug 2010 08:06:07 +0200 Subject: Doc: linking up orphant files --- doc/src/getting-started/examples.qdoc | 4 ++++ doc/src/platforms/x11overlays.qdoc | 1 + 2 files changed, 5 insertions(+) diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc index 708c44e..e8c85e6 100644 --- a/doc/src/getting-started/examples.qdoc +++ b/doc/src/getting-started/examples.qdoc @@ -255,6 +255,7 @@ \o \l{graphicsview/flowlayout}{Flow Layout} \o \l{graphicsview/simpleanchorlayout}{Simple Anchor Layout} \o \l{graphicsview/weatheranchorlayout}{Weather Anchor Layout} + \o \l{graphicsview/basicgraphicslayouts}{Basic Graphics Layouts} \endlist Some examples demonstrate the use of graphics effects with canvas items. @@ -471,6 +472,7 @@ \o \l{network/googlesuggest}{Google Suggest} \o \l{network/bearercloud}{Bearer Cloud}\raisedaster \o \l{network/bearermonitor}{Bearer Monitor} + \o \l{network/securesocketclient}{Secure Socket Client} \endlist Examples marked with an asterisk (*) are fully documented. @@ -609,6 +611,7 @@ \o \l{sql/querymodel}{Query Model} \o \l{sql/relationaltablemodel}{Relational Table Model} \o \l{sql/tablemodel}{Table Model} + \o \l{sql/masterdetail}{Master Detail} \o \l{sql/sqlwidgetmapper}{SQL Widget Mapper}\raisedaster \endlist @@ -633,6 +636,7 @@ \o \l{xml/streambookmarks}{QXmlStream Bookmarks}\raisedaster \o \l{xml/rsslisting}{RSS-Listing} \o \l{xml/xmlstreamlint}{XML Stream Lint Example}\raisedaster + \o \l{xml/htmlinfo}{XML HTML Info} \endlist The XQuery/XPath and XML Schema engines in the QtXmlPatterns modules diff --git a/doc/src/platforms/x11overlays.qdoc b/doc/src/platforms/x11overlays.qdoc index 1a03ea6..949a500 100644 --- a/doc/src/platforms/x11overlays.qdoc +++ b/doc/src/platforms/x11overlays.qdoc @@ -28,6 +28,7 @@ /*! \page x11overlays.html \title How to Use X11 Overlays with Qt + \ingroup best-practices X11 overlays are a powerful mechanism for drawing annotations etc., on top of an image without destroying it, thus saving -- cgit v0.12 From 6b1bcb2a469d21e409bb0dbd3b5b559627e5c2ea Mon Sep 17 00:00:00 2001 From: Kent Hansen <kent.hansen@nokia.com> Date: Wed, 30 Jun 2010 11:02:36 +0200 Subject: Streamline lupdate's QtScript frontend's error messaging Like the C++ parser, use a yyMsg() function. Make the lexer a member of the parser, so yyMsg() can access the filename and current line number. This refactoring is done in preparation of two changes that introduce quite a few more potential error message calls (comment processing and qtTrId support). Reviewed-by: Oswald Buddenhagen --- tools/linguist/lupdate/qscript.cpp | 61 ++++++++++++++++++++++++-------------- tools/linguist/lupdate/qscript.g | 61 ++++++++++++++++++++++++-------------- 2 files changed, 78 insertions(+), 44 deletions(-) diff --git a/tools/linguist/lupdate/qscript.cpp b/tools/linguist/lupdate/qscript.cpp index 188ac36..08670ac 100644 --- a/tools/linguist/lupdate/qscript.cpp +++ b/tools/linguist/lupdate/qscript.cpp @@ -790,9 +790,10 @@ public: Lexer(); ~Lexer(); - void setCode(const QString &c, int lineno); + void setCode(const QString &c, const QString &fileName, int lineno); int lex(); + QString fileName() const { return yyfilename; } int currentLineNo() const { return yylineno; } int currentColumnNo() const { return yycolumn; } @@ -872,6 +873,7 @@ public: { err = NoError; } private: + QString yyfilename; int yylineno; bool done; char *buffer8; @@ -1053,9 +1055,10 @@ QScript::Lexer::~Lexer() delete [] buffer16; } -void QScript::Lexer::setCode(const QString &c, int lineno) +void QScript::Lexer::setCode(const QString &c, const QString &fileName, int lineno) { errmsg = QString(); + yyfilename = fileName; yylineno = lineno; yycolumn = 1; restrKeyword = false; @@ -2052,10 +2055,12 @@ public: QScriptParser(); ~QScriptParser(); - bool parse(QScript::Lexer *lexer, - const QString &fileName, - Translator *translator); + void setLexer(QScript::Lexer *); + bool parse(Translator *translator); + + QString fileName() const + { return lexer->fileName(); } inline QString errorMessage() const { return error_message; } inline int errorLineNumber() const @@ -2072,6 +2077,8 @@ protected: inline Location &loc(int index) { return location_stack [tos + index - 2]; } + std::ostream &yyMsg(int line = 0); + protected: int tos; int stack_size; @@ -2081,6 +2088,9 @@ protected: QString error_message; int error_lineno; int error_column; + +private: + QScript::Lexer *lexer; }; inline void QScriptParser::reallocateStack() @@ -2107,7 +2117,8 @@ QScriptParser::QScriptParser(): stack_size(0), sym_stack(0), state_stack(0), - location_stack(0) + location_stack(0), + lexer(0) { } @@ -2129,10 +2140,14 @@ static inline QScriptParser::Location location(QScript::Lexer *lexer) return loc; } -bool QScriptParser::parse(QScript::Lexer *lexer, - const QString &fileName, - Translator *translator) +void QScriptParser::setLexer(QScript::Lexer *lex) +{ + lexer = lex; +} + +bool QScriptParser::parse(Translator *translator) { + Q_ASSERT(lexer != 0); const int INITIAL_STATE = 0; int yytoken = -1; @@ -2216,13 +2231,11 @@ case 66: { if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 2) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "() requires at least two arguments.\n"; + yyMsg(identLineNo) << qPrintable(name) << "() requires at least two arguments.\n"; } else { if ((args.at(0).type() != QVariant::String) || (args.at(1).type() != QVariant::String)) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "(): both arguments must be literal strings.\n"; + yyMsg(identLineNo) << qPrintable(name) << "(): both arguments must be literal strings.\n"; } else { QString context = args.at(0).toString(); QString text = args.at(1).toString(); @@ -2230,26 +2243,24 @@ case 66: { QString extracomment; bool plural = (args.size() > 4); recordMessage(translator, context, text, comment, extracomment, - plural, fileName, identLineNo); + plural, fileName(), identLineNo); } } } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 1) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "() requires at least one argument.\n"; + yyMsg(identLineNo) << qPrintable(name) << "() requires at least one argument.\n"; } else { if (args.at(0).type() != QVariant::String) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "(): text to translate must be a literal string.\n"; + yyMsg(identLineNo) << qPrintable(name) << "(): text to translate must be a literal string.\n"; } else { - QString context = QFileInfo(fileName).baseName(); + QString context = QFileInfo(fileName()).baseName(); QString text = args.at(0).toString(); QString comment = args.value(1).toString(); QString extracomment; bool plural = (args.size() > 2); recordMessage(translator, context, text, comment, extracomment, - plural, fileName, identLineNo); + plural, fileName(), identLineNo); } } } @@ -2356,6 +2367,11 @@ case 94: { return false; } +std::ostream &QScriptParser::yyMsg(int line) +{ + return std::cerr << qPrintable(fileName()) << ':' << (line ? line : lexer->startLineNo()) << ": "; +} + bool loadQScript(Translator &translator, const QString &filename, ConversionData &cd) { @@ -2376,9 +2392,10 @@ bool loadQScript(Translator &translator, const QString &filename, ConversionData QString code = ts.readAll(); QScript::Lexer lexer; - lexer.setCode(code, /*lineNumber=*/1); + lexer.setCode(code, filename, /*lineNumber=*/1); QScriptParser parser; - if (!parser.parse(&lexer, filename, &translator)) { + parser.setLexer(&lexer); + if (!parser.parse(&translator)) { std::cerr << qPrintable(filename) << ':' << parser.errorLineNumber() << ": " << qPrintable(parser.errorMessage()) << std::endl; return false; diff --git a/tools/linguist/lupdate/qscript.g b/tools/linguist/lupdate/qscript.g index 857c58a..2f82a55 100644 --- a/tools/linguist/lupdate/qscript.g +++ b/tools/linguist/lupdate/qscript.g @@ -121,9 +121,10 @@ public: Lexer(); ~Lexer(); - void setCode(const QString &c, int lineno); + void setCode(const QString &c, const QString &fileName, int lineno); int lex(); + QString fileName() const { return yyfilename; } int currentLineNo() const { return yylineno; } int currentColumnNo() const { return yycolumn; } @@ -203,6 +204,7 @@ public: { err = NoError; } private: + QString yyfilename; int yylineno; bool done; char *buffer8; @@ -384,9 +386,10 @@ QScript::Lexer::~Lexer() delete [] buffer16; } -void QScript::Lexer::setCode(const QString &c, int lineno) +void QScript::Lexer::setCode(const QString &c, const QString &fileName, int lineno) { errmsg = QString(); + yyfilename = fileName; yylineno = lineno; yycolumn = 1; restrKeyword = false; @@ -1383,10 +1386,12 @@ public: QScriptParser(); ~QScriptParser(); - bool parse(QScript::Lexer *lexer, - const QString &fileName, - Translator *translator); + void setLexer(QScript::Lexer *); + bool parse(Translator *translator); + + QString fileName() const + { return lexer->fileName(); } inline QString errorMessage() const { return error_message; } inline int errorLineNumber() const @@ -1403,6 +1408,8 @@ protected: inline Location &loc(int index) { return location_stack [tos + index - 2]; } + std::ostream &yyMsg(int line = 0); + protected: int tos; int stack_size; @@ -1412,6 +1419,9 @@ protected: QString error_message; int error_lineno; int error_column; + +private: + QScript::Lexer *lexer; }; inline void QScriptParser::reallocateStack() @@ -1438,7 +1448,8 @@ QScriptParser::QScriptParser(): stack_size(0), sym_stack(0), state_stack(0), - location_stack(0) + location_stack(0), + lexer(0) { } @@ -1460,10 +1471,14 @@ static inline QScriptParser::Location location(QScript::Lexer *lexer) return loc; } -bool QScriptParser::parse(QScript::Lexer *lexer, - const QString &fileName, - Translator *translator) +void QScriptParser::setLexer(QScript::Lexer *lex) +{ + lexer = lex; +} + +bool QScriptParser::parse(Translator *translator) { + Q_ASSERT(lexer != 0); const int INITIAL_STATE = 0; int yytoken = -1; @@ -1632,13 +1647,11 @@ case $rule_number: { if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 2) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "() requires at least two arguments.\n"; + yyMsg(identLineNo) << qPrintable(name) << "() requires at least two arguments.\n"; } else { if ((args.at(0).type() != QVariant::String) || (args.at(1).type() != QVariant::String)) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "(): both arguments must be literal strings.\n"; + yyMsg(identLineNo) << qPrintable(name) << "(): both arguments must be literal strings.\n"; } else { QString context = args.at(0).toString(); QString text = args.at(1).toString(); @@ -1646,26 +1659,24 @@ case $rule_number: { QString extracomment; bool plural = (args.size() > 4); recordMessage(translator, context, text, comment, extracomment, - plural, fileName, identLineNo); + plural, fileName(), identLineNo); } } } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) { QVariantList args = sym(2).toList(); if (args.size() < 1) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "() requires at least one argument.\n"; + yyMsg(identLineNo) << qPrintable(name) << "() requires at least one argument.\n"; } else { if (args.at(0).type() != QVariant::String) { - std::cerr << qPrintable(fileName) << ':' << identLineNo << ": " - << qPrintable(name) << "(): text to translate must be a literal string.\n"; + yyMsg(identLineNo) << qPrintable(name) << "(): text to translate must be a literal string.\n"; } else { - QString context = QFileInfo(fileName).baseName(); + QString context = QFileInfo(fileName()).baseName(); QString text = args.at(0).toString(); QString comment = args.value(1).toString(); QString extracomment; bool plural = (args.size() > 2); recordMessage(translator, context, text, comment, extracomment, - plural, fileName, identLineNo); + plural, fileName(), identLineNo); } } } @@ -1988,6 +1999,11 @@ PropertyNameAndValueListOpt: PropertyNameAndValueList ; return false; } +std::ostream &QScriptParser::yyMsg(int line) +{ + return std::cerr << qPrintable(fileName()) << ':' << (line ? line : lexer->startLineNo()) << ": "; +} + bool loadQScript(Translator &translator, const QString &filename, ConversionData &cd) { @@ -2008,9 +2024,10 @@ bool loadQScript(Translator &translator, const QString &filename, ConversionData QString code = ts.readAll(); QScript::Lexer lexer; - lexer.setCode(code, /*lineNumber=*/1); + lexer.setCode(code, filename, /*lineNumber=*/1); QScriptParser parser; - if (!parser.parse(&lexer, filename, &translator)) { + parser.setLexer(&lexer); + if (!parser.parse(&translator)) { std::cerr << qPrintable(filename) << ':' << parser.errorLineNumber() << ": " << qPrintable(parser.errorMessage()) << std::endl; return false; -- cgit v0.12 From 1c4e3cf9870df591c60dc7d59df2b98b8eb534b0 Mon Sep 17 00:00:00 2001 From: Kent Hansen <kent.hansen@nokia.com> Date: Tue, 29 Jun 2010 16:48:49 +0200 Subject: Add support for comments and meta-data in the lupdate QtScript frontend This brings the support more in line with the C++ frontend. No support for magic TRANSLATOR comment yet. Add a proper test for the QtScript parser. Support for qtTrId() and friends coming in a separate commit. Previously the lexer just skipped comments. Now the contents of each comment is retained and passed to a "comment processor" interface. The parser implements the interface and performs logic very similar to the C++ parser to extract data from the comment. Task-number: QTBUG-11774 Reviewed-by: Oswald Buddenhagen --- .../linguist/lupdate/testdata/good/parsejs/main.js | 83 ++++++++++ .../lupdate/testdata/good/parsejs/project.pro | 3 + .../testdata/good/parsejs/project.ts.result | 168 ++++++++++++++++++++ tools/linguist/lupdate/qscript.cpp | 159 +++++++++++++++++-- tools/linguist/lupdate/qscript.g | 174 +++++++++++++++++++-- 5 files changed, 565 insertions(+), 22 deletions(-) create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsejs/main.js create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsejs/project.pro create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js b/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js new file mode 100644 index 0000000..edd7529 --- /dev/null +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js @@ -0,0 +1,83 @@ +qsTr("One"); +qsTranslate("FooContext", "Two"); + +var greeting_strings = [ + QT_TR_NOOP("Hello"), + QT_TRANSLATE_NOOP("FooContext", "Goodbye") +]; + +qsTr("One", "not the same one"); + +//: My first comment. +qsTr("See comment"); + +//: My second comment. +qsTranslate("BarContext", "See other comment"); + +//: My third comment +//: spans two lines. +qsTr("The comment explains it all"); + +//: My fourth comment +//: spans a whopping +//: three lines. +qsTranslate("BazContext", "It should be clear by now"); + +/*: C-style comment. */ +qsTr("I love C++"); + +/*: Another C-style comment. */ +qsTranslate("FooContext", "I really love C++"); + +/*: C-style comment, followed by */ +/*: another one. */ +qsTr("Qt is the best"); + +/*: Another C-style comment, followed by */ +/*: yet another one. */ +qsTranslate("BarContext", "Qt is the very best"); + +// This comment doesn't have any effect. +qsTr("The comment had no effect"); + +// This comment doesn't have any effect either. +qsTranslate("BazContext", "The comment had no effect, really"); + +/* This C-style comment doesn't have any effect. */ +qsTr("No comment to your comment"); + +/* This C-style comment doesn't have any effect either. */ +qsTranslate("FooContext", "I refuse to comment on that"); + +//= id_foo +qsTr("This string has an identifier"); + +//= id_bar +qsTranslate("BarContext", "This string also has an identifier"); + +//~ loc-blank False +qsTr("This string has meta-data"); + +//~ loc-layout_id foo_dialog +qsTranslate("BazContext", "This string also has meta-data"); + +// This comment is to be ignored. +//: This is a comment for the translator. +//= id_baz +//~ foo 123 +//~ magic-stuff This means something special. +qsTr("This string has a lot of information"); + +// This comment is also to be ignored. +//: This is another comment for the translator. +//= id_babar +//~ foo-bar Important stuff +//~ needle-in-haystack Found +//~ overflow True +qsTranslate("FooContext", "This string has even more information"); + +qsTr("This string has disambiguation", "Disambiguation"); + +qsTranslate("BarContext", "This string also has disambiguation", "Another disambiguation"); + +qsTr("This string contains plurals", "", 10); diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.pro new file mode 100644 index 0000000..d549039 --- /dev/null +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.pro @@ -0,0 +1,3 @@ +SOURCES += main.js + +TRANSLATIONS = project.ts diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result new file mode 100644 index 0000000..d2016de --- /dev/null +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>BarContext</name> + <message> + <location filename="main.js" line="15"/> + <source>See other comment</source> + <extracomment>My second comment.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="38"/> + <source>Qt is the very best</source> + <extracomment>Another C-style comment, followed by yet another one.</extracomment> + <translation type="unfinished"></translation> + </message> + <message id="id_bar"> + <location filename="main.js" line="56"/> + <source>This string also has an identifier</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="81"/> + <source>This string also has disambiguation</source> + <comment>Another disambiguation</comment> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>BazContext</name> + <message> + <location filename="main.js" line="24"/> + <source>It should be clear by now</source> + <extracomment>My fourth comment spans a whopping three lines.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="44"/> + <source>The comment had no effect, really</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="62"/> + <source>This string also has meta-data</source> + <translation type="unfinished"></translation> + <extra-loc-layout_id>foo_dialog</extra-loc-layout_id> + </message> +</context> +<context> + <name>FooContext</name> + <message> + <location filename="main.js" line="2"/> + <source>Two</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="6"/> + <source>Goodbye</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="30"/> + <source>I really love C++</source> + <extracomment>Another C-style comment.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="50"/> + <source>I refuse to comment on that</source> + <translation type="unfinished"></translation> + </message> + <message id="id_babar"> + <location filename="main.js" line="77"/> + <source>This string has even more information</source> + <extracomment>This is another comment for the translator.</extracomment> + <translation type="unfinished"></translation> + <extra-needle-in-haystack>Found</extra-needle-in-haystack> + <extra-overflow>True</extra-overflow> + <extra-foo-bar>Important stuff</extra-foo-bar> + </message> +</context> +<context> + <name>main</name> + <message> + <location filename="main.js" line="1"/> + <source>One</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="5"/> + <source>Hello</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="9"/> + <source>One</source> + <comment>not the same one</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="12"/> + <source>See comment</source> + <extracomment>My first comment.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="19"/> + <source>The comment explains it all</source> + <extracomment>My third comment spans two lines.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="27"/> + <source>I love C++</source> + <extracomment>C-style comment.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="34"/> + <source>Qt is the best</source> + <extracomment>C-style comment, followed by another one.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="41"/> + <source>The comment had no effect</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="47"/> + <source>No comment to your comment</source> + <translation type="unfinished"></translation> + </message> + <message id="id_foo"> + <location filename="main.js" line="53"/> + <source>This string has an identifier</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="59"/> + <source>This string has meta-data</source> + <translation type="unfinished"></translation> + <extra-loc-blank>False</extra-loc-blank> + </message> + <message id="id_baz"> + <location filename="main.js" line="69"/> + <source>This string has a lot of information</source> + <extracomment>This is a comment for the translator.</extracomment> + <translation type="unfinished"></translation> + <extra-foo>123</extra-foo> + <extra-magic-stuff>This means something special.</extra-magic-stuff> + </message> + <message> + <location filename="main.js" line="79"/> + <source>This string has disambiguation</source> + <comment>Disambiguation</comment> + <translation type="unfinished"></translation> + </message> + <message numerus="yes"> + <location filename="main.js" line="83"/> + <source>This string contains plurals</source> + <translation type="unfinished"> + <numerusform></numerusform> + </translation> + </message> +</context> +</TS> diff --git a/tools/linguist/lupdate/qscript.cpp b/tools/linguist/lupdate/qscript.cpp index 08670ac..dc885a3 100644 --- a/tools/linguist/lupdate/qscript.cpp +++ b/tools/linguist/lupdate/qscript.cpp @@ -770,13 +770,16 @@ const int QScriptGrammar::action_check [] = { static void recordMessage( Translator *tor, const QString &context, const QString &text, const QString &comment, - const QString &extracomment, bool plural, const QString &fileName, int lineNo) + const QString &extracomment, const QString &msgid, const TranslatorMessage::ExtraData &extra, + bool plural, const QString &fileName, int lineNo) { TranslatorMessage msg( context, text, comment, QString(), fileName, lineNo, QStringList(), TranslatorMessage::Unfinished, plural); msg.setExtraComment(extracomment.simplified()); + msg.setId(msgid); + msg.setExtras(extra); tor->extend(msg); } @@ -784,10 +787,17 @@ static void recordMessage( namespace QScript { +class CommentProcessor +{ +public: + virtual ~CommentProcessor() {} + virtual void processComment(const QChar *chars, int length) = 0; +}; + class Lexer { public: - Lexer(); + Lexer(CommentProcessor *); ~Lexer(); void setCode(const QString &c, const QString &fileName, int lineno); @@ -927,6 +937,8 @@ private: void syncProhibitAutomaticSemicolon(); + void processComment(const QChar *, int); + const QChar *code; uint length; int yycolumn; @@ -953,6 +965,8 @@ private: ParenthesesState parenthesesState; int parenthesesCount; bool prohibitAutomaticSemicolon; + + CommentProcessor *commentProcessor; }; } // namespace QScript @@ -1029,7 +1043,7 @@ double integerFromString(const char *buf, int size, int radix) } // namespace QScript -QScript::Lexer::Lexer() +QScript::Lexer::Lexer(QScript::CommentProcessor *proc) : yylineno(0), size8(128), size16(128), restrKeyword(false), @@ -1040,7 +1054,8 @@ QScript::Lexer::Lexer() err(NoError), check_reserved(true), parenthesesState(IgnoreParentheses), - prohibitAutomaticSemicolon(false) + prohibitAutomaticSemicolon(false), + commentProcessor(proc) { // allocate space for read buffers buffer8 = new char[size8]; @@ -1407,10 +1422,12 @@ int QScript::Lexer::lex() } else if (current == '/' && next1 == '/') { recordStartPos(); shift(1); + Q_ASSERT(pos16 == 0); state = InSingleLineComment; } else if (current == '/' && next1 == '*') { recordStartPos(); shift(1); + Q_ASSERT(pos16 == 0); state = InMultiLineComment; } else if (current == 0) { syncProhibitAutomaticSemicolon(); @@ -1550,9 +1567,12 @@ int QScript::Lexer::lex() break; case InSingleLineComment: if (isLineTerminator()) { + record16(current); // include newline + processComment(buffer16, pos16); shiftWindowsLineBreak(); yylineno++; yycolumn = 0; + pos16 = 0; terminator = true; bol = true; if (restrKeyword) { @@ -1562,6 +1582,8 @@ int QScript::Lexer::lex() state = Start; } else if (current == 0) { setDone(Eof); + } else { + record16(current); } break; case InMultiLineComment: @@ -1573,8 +1595,12 @@ int QScript::Lexer::lex() shiftWindowsLineBreak(); yylineno++; } else if (current == '*' && next1 == '/') { + processComment(buffer16, pos16); + pos16 = 0; state = Start; shift(1); + } else { + record16(current); } break; case InIdentifier: @@ -2036,10 +2062,15 @@ void QScript::Lexer::syncProhibitAutomaticSemicolon() } } +void QScript::Lexer::processComment(const QChar *chars, int length) +{ + commentProcessor->processComment(chars, length); +} + class Translator; -class QScriptParser: protected QScriptGrammar +class QScriptParser: protected QScriptGrammar, public QScript::CommentProcessor { public: QVariant val; @@ -2079,6 +2110,8 @@ protected: std::ostream &yyMsg(int line = 0); + virtual void processComment(const QChar *, int); + protected: int tos; int stack_size; @@ -2091,6 +2124,10 @@ protected: private: QScript::Lexer *lexer; + QString extracomment; + QString msgid; + QString sourcetext; + TranslatorMessage::ExtraData extra; }; inline void QScriptParser::reallocateStack() @@ -2229,6 +2266,8 @@ case 8: { case 66: { QString name = sym(1).toString(); if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) { + if (!sourcetext.isEmpty()) + yyMsg(identLineNo) << "//% cannot be used with " << qPrintable(name) << "(). Ignoring\n"; QVariantList args = sym(2).toList(); if (args.size() < 2) { yyMsg(identLineNo) << qPrintable(name) << "() requires at least two arguments.\n"; @@ -2240,13 +2279,18 @@ case 66: { QString context = args.at(0).toString(); QString text = args.at(1).toString(); QString comment = args.value(2).toString(); - QString extracomment; bool plural = (args.size() > 4); recordMessage(translator, context, text, comment, extracomment, - plural, fileName(), identLineNo); + msgid, extra, plural, fileName(), identLineNo); } } + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) { + if (!sourcetext.isEmpty()) + yyMsg(identLineNo) << "//% cannot be used with " << qPrintable(name) << "(). Ignoring\n"; QVariantList args = sym(2).toList(); if (args.size() < 1) { yyMsg(identLineNo) << qPrintable(name) << "() requires at least one argument.\n"; @@ -2257,12 +2301,15 @@ case 66: { QString context = QFileInfo(fileName()).baseName(); QString text = args.at(0).toString(); QString comment = args.value(1).toString(); - QString extracomment; bool plural = (args.size() > 2); recordMessage(translator, context, text, comment, extracomment, - plural, fileName(), identLineNo); + msgid, extra, plural, fileName(), identLineNo); } } + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); } } break; @@ -2289,6 +2336,44 @@ case 94: { sym(1) = QVariant(); } break; + case 171: + + case 172: + + case 173: + + case 174: + + case 175: + + case 176: + + case 177: + + case 178: + + case 179: + + case 180: + + case 181: + + case 182: + + case 183: + + case 184: + + case 185: + if (!sourcetext.isEmpty() || !extracomment.isEmpty() || !msgid.isEmpty() || !extra.isEmpty()) { + yyMsg() << "Discarding unconsumed meta data\n"; + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); + } + break; + } // switch state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT); @@ -2372,6 +2457,58 @@ std::ostream &QScriptParser::yyMsg(int line) return std::cerr << qPrintable(fileName()) << ':' << (line ? line : lexer->startLineNo()) << ": "; } +void QScriptParser::processComment(const QChar *chars, int length) +{ + if (!length) + return; + // Try to match the logic of the C++ parser. + if (*chars == QLatin1Char(':') && chars[1].isSpace()) { + extracomment += QString(chars+2, length-2); + } else if (*chars == QLatin1Char('=') && chars[1].isSpace()) { + msgid = QString(chars+2, length-2).simplified(); + } else if (*chars == QLatin1Char('~') && chars[1].isSpace()) { + QString text = QString(chars+2, length-2).trimmed(); + int k = text.indexOf(QLatin1Char(' ')); + if (k > -1) + extra.insert(text.left(k), text.mid(k + 1).trimmed()); + } else if (*chars == QLatin1Char('%') && chars[1].isSpace()) { + sourcetext.reserve(sourcetext.length() + length-2); + ushort *ptr = (ushort *)sourcetext.data() + sourcetext.length(); + int p = 2, c; + forever { + if (p >= length) + break; + c = chars[p++].unicode(); + if (isspace(c)) + continue; + if (c != '"') { + yyMsg() << "Unexpected character in meta string\n"; + break; + } + forever { + if (p >= length) { + whoops: + yyMsg() << "Unterminated meta string\n"; + break; + } + c = chars[p++].unicode(); + if (c == '"') + break; + if (c == '\\') { + if (p >= length) + goto whoops; + c = chars[p++].unicode(); + if (c == '\n') + goto whoops; + *ptr++ = '\\'; + } + *ptr++ = c; + } + } + sourcetext.resize(ptr - (ushort *)sourcetext.data()); + } +} + bool loadQScript(Translator &translator, const QString &filename, ConversionData &cd) { @@ -2391,9 +2528,9 @@ bool loadQScript(Translator &translator, const QString &filename, ConversionData ts.setAutoDetectUnicode(true); QString code = ts.readAll(); - QScript::Lexer lexer; - lexer.setCode(code, filename, /*lineNumber=*/1); QScriptParser parser; + QScript::Lexer lexer(&parser); + lexer.setCode(code, filename, /*lineNumber=*/1); parser.setLexer(&lexer); if (!parser.parse(&translator)) { std::cerr << qPrintable(filename) << ':' << parser.errorLineNumber() << ": " diff --git a/tools/linguist/lupdate/qscript.g b/tools/linguist/lupdate/qscript.g index 2f82a55..200b641 100644 --- a/tools/linguist/lupdate/qscript.g +++ b/tools/linguist/lupdate/qscript.g @@ -101,13 +101,16 @@ QT_BEGIN_NAMESPACE static void recordMessage( Translator *tor, const QString &context, const QString &text, const QString &comment, - const QString &extracomment, bool plural, const QString &fileName, int lineNo) + const QString &extracomment, const QString &msgid, const TranslatorMessage::ExtraData &extra, + bool plural, const QString &fileName, int lineNo) { TranslatorMessage msg( context, text, comment, QString(), fileName, lineNo, QStringList(), TranslatorMessage::Unfinished, plural); msg.setExtraComment(extracomment.simplified()); + msg.setId(msgid); + msg.setExtras(extra); tor->extend(msg); } @@ -115,10 +118,17 @@ static void recordMessage( namespace QScript { +class CommentProcessor +{ +public: + virtual ~CommentProcessor() {} + virtual void processComment(const QChar *chars, int length) = 0; +}; + class Lexer { public: - Lexer(); + Lexer(CommentProcessor *); ~Lexer(); void setCode(const QString &c, const QString &fileName, int lineno); @@ -258,6 +268,8 @@ private: void syncProhibitAutomaticSemicolon(); + void processComment(const QChar *, int); + const QChar *code; uint length; int yycolumn; @@ -284,6 +296,8 @@ private: ParenthesesState parenthesesState; int parenthesesCount; bool prohibitAutomaticSemicolon; + + CommentProcessor *commentProcessor; }; } // namespace QScript @@ -360,7 +374,7 @@ double integerFromString(const char *buf, int size, int radix) } // namespace QScript -QScript::Lexer::Lexer() +QScript::Lexer::Lexer(QScript::CommentProcessor *proc) : yylineno(0), size8(128), size16(128), restrKeyword(false), @@ -371,7 +385,8 @@ QScript::Lexer::Lexer() err(NoError), check_reserved(true), parenthesesState(IgnoreParentheses), - prohibitAutomaticSemicolon(false) + prohibitAutomaticSemicolon(false), + commentProcessor(proc) { // allocate space for read buffers buffer8 = new char[size8]; @@ -738,10 +753,12 @@ int QScript::Lexer::lex() } else if (current == '/' && next1 == '/') { recordStartPos(); shift(1); + Q_ASSERT(pos16 == 0); state = InSingleLineComment; } else if (current == '/' && next1 == '*') { recordStartPos(); shift(1); + Q_ASSERT(pos16 == 0); state = InMultiLineComment; } else if (current == 0) { syncProhibitAutomaticSemicolon(); @@ -881,9 +898,12 @@ int QScript::Lexer::lex() break; case InSingleLineComment: if (isLineTerminator()) { + record16(current); // include newline + processComment(buffer16, pos16); shiftWindowsLineBreak(); yylineno++; yycolumn = 0; + pos16 = 0; terminator = true; bol = true; if (restrKeyword) { @@ -893,6 +913,8 @@ int QScript::Lexer::lex() state = Start; } else if (current == 0) { setDone(Eof); + } else { + record16(current); } break; case InMultiLineComment: @@ -904,8 +926,12 @@ int QScript::Lexer::lex() shiftWindowsLineBreak(); yylineno++; } else if (current == '*' && next1 == '/') { + processComment(buffer16, pos16); + pos16 = 0; state = Start; shift(1); + } else { + record16(current); } break; case InIdentifier: @@ -1367,10 +1393,15 @@ void QScript::Lexer::syncProhibitAutomaticSemicolon() } } +void QScript::Lexer::processComment(const QChar *chars, int length) +{ + commentProcessor->processComment(chars, length); +} + class Translator; -class QScriptParser: protected $table +class QScriptParser: protected $table, public QScript::CommentProcessor { public: QVariant val; @@ -1410,6 +1441,8 @@ protected: std::ostream &yyMsg(int line = 0); + virtual void processComment(const QChar *, int); + protected: int tos; int stack_size; @@ -1422,6 +1455,10 @@ protected: private: QScript::Lexer *lexer; + QString extracomment; + QString msgid; + QString sourcetext; + TranslatorMessage::ExtraData extra; }; inline void QScriptParser::reallocateStack() @@ -1645,6 +1682,8 @@ CallExpression: MemberExpression Arguments ; case $rule_number: { QString name = sym(1).toString(); if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) { + if (!sourcetext.isEmpty()) + yyMsg(identLineNo) << "//% cannot be used with " << qPrintable(name) << "(). Ignoring\n"; QVariantList args = sym(2).toList(); if (args.size() < 2) { yyMsg(identLineNo) << qPrintable(name) << "() requires at least two arguments.\n"; @@ -1656,13 +1695,18 @@ case $rule_number: { QString context = args.at(0).toString(); QString text = args.at(1).toString(); QString comment = args.value(2).toString(); - QString extracomment; bool plural = (args.size() > 4); recordMessage(translator, context, text, comment, extracomment, - plural, fileName(), identLineNo); + msgid, extra, plural, fileName(), identLineNo); } } + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) { + if (!sourcetext.isEmpty()) + yyMsg(identLineNo) << "//% cannot be used with " << qPrintable(name) << "(). Ignoring\n"; QVariantList args = sym(2).toList(); if (args.size() < 1) { yyMsg(identLineNo) << qPrintable(name) << "() requires at least one argument.\n"; @@ -1673,12 +1717,15 @@ case $rule_number: { QString context = QFileInfo(fileName()).baseName(); QString text = args.at(0).toString(); QString comment = args.value(1).toString(); - QString extracomment; bool plural = (args.size() > 2); recordMessage(translator, context, text, comment, extracomment, - plural, fileName(), identLineNo); + msgid, extra, plural, fileName(), identLineNo); } } + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); } } break; ./ @@ -1824,20 +1871,73 @@ ExpressionNotInOpt: ; ExpressionNotInOpt: ExpressionNotIn ; Statement: Block ; +/. + case $rule_number: +./ Statement: VariableStatement ; +/. + case $rule_number: +./ Statement: EmptyStatement ; +/. + case $rule_number: +./ Statement: ExpressionStatement ; +/. + case $rule_number: +./ Statement: IfStatement ; +/. + case $rule_number: +./ Statement: IterationStatement ; +/. + case $rule_number: +./ Statement: ContinueStatement ; +/. + case $rule_number: +./ Statement: BreakStatement ; +/. + case $rule_number: +./ Statement: ReturnStatement ; +/. + case $rule_number: +./ Statement: WithStatement ; +/. + case $rule_number: +./ Statement: LabelledStatement ; +/. + case $rule_number: +./ Statement: SwitchStatement ; +/. + case $rule_number: +./ Statement: ThrowStatement ; +/. + case $rule_number: +./ Statement: TryStatement ; +/. + case $rule_number: +./ Statement: DebuggerStatement ; +/. + case $rule_number: + if (!sourcetext.isEmpty() || !extracomment.isEmpty() || !msgid.isEmpty() || !extra.isEmpty()) { + yyMsg() << "Discarding unconsumed meta data\n"; + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); + } + break; +./ Block: T_LBRACE StatementListOpt T_RBRACE ; StatementList: Statement ; @@ -2004,6 +2104,58 @@ std::ostream &QScriptParser::yyMsg(int line) return std::cerr << qPrintable(fileName()) << ':' << (line ? line : lexer->startLineNo()) << ": "; } +void QScriptParser::processComment(const QChar *chars, int length) +{ + if (!length) + return; + // Try to match the logic of the C++ parser. + if (*chars == QLatin1Char(':') && chars[1].isSpace()) { + extracomment += QString(chars+2, length-2); + } else if (*chars == QLatin1Char('=') && chars[1].isSpace()) { + msgid = QString(chars+2, length-2).simplified(); + } else if (*chars == QLatin1Char('~') && chars[1].isSpace()) { + QString text = QString(chars+2, length-2).trimmed(); + int k = text.indexOf(QLatin1Char(' ')); + if (k > -1) + extra.insert(text.left(k), text.mid(k + 1).trimmed()); + } else if (*chars == QLatin1Char('%') && chars[1].isSpace()) { + sourcetext.reserve(sourcetext.length() + length-2); + ushort *ptr = (ushort *)sourcetext.data() + sourcetext.length(); + int p = 2, c; + forever { + if (p >= length) + break; + c = chars[p++].unicode(); + if (isspace(c)) + continue; + if (c != '"') { + yyMsg() << "Unexpected character in meta string\n"; + break; + } + forever { + if (p >= length) { + whoops: + yyMsg() << "Unterminated meta string\n"; + break; + } + c = chars[p++].unicode(); + if (c == '"') + break; + if (c == '\\') { + if (p >= length) + goto whoops; + c = chars[p++].unicode(); + if (c == '\n') + goto whoops; + *ptr++ = '\\'; + } + *ptr++ = c; + } + } + sourcetext.resize(ptr - (ushort *)sourcetext.data()); + } +} + bool loadQScript(Translator &translator, const QString &filename, ConversionData &cd) { @@ -2023,9 +2175,9 @@ bool loadQScript(Translator &translator, const QString &filename, ConversionData ts.setAutoDetectUnicode(true); QString code = ts.readAll(); - QScript::Lexer lexer; - lexer.setCode(code, filename, /*lineNumber=*/1); QScriptParser parser; + QScript::Lexer lexer(&parser); + lexer.setCode(code, filename, /*lineNumber=*/1); parser.setLexer(&lexer); if (!parser.parse(&translator)) { std::cerr << qPrintable(filename) << ':' << parser.errorLineNumber() << ": " -- cgit v0.12 From a5867a413d14f307c0f20b7080840b15bd8743e4 Mon Sep 17 00:00:00 2001 From: Kent Hansen <kent.hansen@nokia.com> Date: Tue, 29 Jun 2010 16:56:18 +0200 Subject: Make lupdate's QtScript frontend recognize qsTrId() / QT_TRID_NOOP() Extracting the translation data is only the first step; a separate commit will make the functions available in the QtScript runtime. Task-number: QTBUG-8454 Reviewed-by: Oswald Buddenhagen --- .../linguist/lupdate/testdata/good/parsejs/main.js | 8 +++++++ .../testdata/good/parsejs/project.ts.result | 27 ++++++++++++++++++++++ tools/linguist/lupdate/qscript.cpp | 20 ++++++++++++++++ tools/linguist/lupdate/qscript.g | 20 ++++++++++++++++ 4 files changed, 75 insertions(+) diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js b/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js index edd7529..9f61cea 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs/main.js @@ -81,3 +81,11 @@ qsTr("This string has disambiguation", "Disambiguation"); qsTranslate("BarContext", "This string also has disambiguation", "Another disambiguation"); qsTr("This string contains plurals", "", 10); + +qsTrId("qtn_foo_bar"); + +var more_greeting_strings = [ QT_TRID_NOOP("qtn_needle"), QT_TRID_NOOP("qtn_haystack") ]; + +//: qsTrId() with comment, meta-data and plurals. +//~ well-tested True +qsTrId("qtn_bar_baz", 10); diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result index d2016de..d03c713 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs/project.ts.result @@ -2,6 +2,33 @@ <!DOCTYPE TS> <TS version="2.0"> <context> + <name></name> + <message id="qtn_foo_bar"> + <location filename="main.js" line="85"/> + <source></source> + <translation type="unfinished"></translation> + </message> + <message id="qtn_needle"> + <location filename="main.js" line="87"/> + <source></source> + <translation type="unfinished"></translation> + </message> + <message id="qtn_haystack"> + <location filename="main.js" line="87"/> + <source></source> + <translation type="unfinished"></translation> + </message> + <message id="qtn_bar_baz" numerus="yes"> + <location filename="main.js" line="91"/> + <source></source> + <extracomment>qsTrId() with comment, meta-data and plurals.</extracomment> + <translation type="unfinished"> + <numerusform></numerusform> + </translation> + <extra-well-tested>True</extra-well-tested> + </message> +</context> +<context> <name>BarContext</name> <message> <location filename="main.js" line="15"/> diff --git a/tools/linguist/lupdate/qscript.cpp b/tools/linguist/lupdate/qscript.cpp index dc885a3..7ca0987 100644 --- a/tools/linguist/lupdate/qscript.cpp +++ b/tools/linguist/lupdate/qscript.cpp @@ -2310,6 +2310,26 @@ case 66: { extracomment.clear(); msgid.clear(); extra.clear(); + } else if ((name == QLatin1String("qsTrId")) || (name == QLatin1String("QT_TRID_NOOP"))) { + if (!msgid.isEmpty()) + yyMsg(identLineNo) << "//= cannot be used with " << qPrintable(name) << "(). Ignoring\n"; + QVariantList args = sym(2).toList(); + if (args.size() < 1) { + yyMsg(identLineNo) << qPrintable(name) << "() requires at least one argument.\n"; + } else { + if (args.at(0).type() != QVariant::String) { + yyMsg(identLineNo) << qPrintable(name) << "(): identifier must be a literal string.\n"; + } else { + msgid = args.at(0).toString(); + bool plural = (args.size() > 1); + recordMessage(translator, QString(), sourcetext, QString(), extracomment, + msgid, extra, plural, fileName(), identLineNo); + } + } + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); } } break; diff --git a/tools/linguist/lupdate/qscript.g b/tools/linguist/lupdate/qscript.g index 200b641..e4c2d22 100644 --- a/tools/linguist/lupdate/qscript.g +++ b/tools/linguist/lupdate/qscript.g @@ -1726,6 +1726,26 @@ case $rule_number: { extracomment.clear(); msgid.clear(); extra.clear(); + } else if ((name == QLatin1String("qsTrId")) || (name == QLatin1String("QT_TRID_NOOP"))) { + if (!msgid.isEmpty()) + yyMsg(identLineNo) << "//= cannot be used with " << qPrintable(name) << "(). Ignoring\n"; + QVariantList args = sym(2).toList(); + if (args.size() < 1) { + yyMsg(identLineNo) << qPrintable(name) << "() requires at least one argument.\n"; + } else { + if (args.at(0).type() != QVariant::String) { + yyMsg(identLineNo) << qPrintable(name) << "(): identifier must be a literal string.\n"; + } else { + msgid = args.at(0).toString(); + bool plural = (args.size() > 1); + recordMessage(translator, QString(), sourcetext, QString(), extracomment, + msgid, extra, plural, fileName(), identLineNo); + } + } + sourcetext.clear(); + extracomment.clear(); + msgid.clear(); + extra.clear(); } } break; ./ -- cgit v0.12 From d1c482180352aeecabcc8d9f65ab3883175c75c3 Mon Sep 17 00:00:00 2001 From: Kent Hansen <kent.hansen@nokia.com> Date: Tue, 29 Jun 2010 17:06:15 +0200 Subject: Make qsTrId() / QT_TRID_NOOP() accessible from QtScript QScriptEngine::installTranslatorFunctions() now installs wrapper functions for qsTrId and QT_TRID_NOOP (similar to the existing ones for tr() and translate()). Task-number: QTBUG-8454 Reviewed-by: Jedrzej Nowacki --- src/script/api/qscriptengine.cpp | 28 +++++++++ tests/auto/qscriptengine/idtranslatable.js | 5 ++ tests/auto/qscriptengine/qscriptengine.qrc | 1 + .../translations/idtranslatable_la.qm | Bin 0 -> 342 bytes .../translations/idtranslatable_la.ts | 30 +++++++++ tests/auto/qscriptengine/tst_qscriptengine.cpp | 69 +++++++++++++++++++++ 6 files changed, 133 insertions(+) create mode 100644 tests/auto/qscriptengine/idtranslatable.js create mode 100644 tests/auto/qscriptengine/translations/idtranslatable_la.qm create mode 100644 tests/auto/qscriptengine/translations/idtranslatable_la.ts diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index 8560214..8347626 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -782,6 +782,8 @@ static JSC::JSValue JSC_HOST_CALL functionQsTranslate(JSC::ExecState*, JSC::JSOb static JSC::JSValue JSC_HOST_CALL functionQsTranslateNoOp(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); static JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); static JSC::JSValue JSC_HOST_CALL functionQsTrNoOp(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); +static JSC::JSValue JSC_HOST_CALL functionQsTrId(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); +static JSC::JSValue JSC_HOST_CALL functionQsTrIdNoOp(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); JSC::JSValue JSC_HOST_CALL functionQsTranslate(JSC::ExecState *exec, JSC::JSObject*, JSC::JSValue, const JSC::ArgList &args) { @@ -892,6 +894,28 @@ JSC::JSValue JSC_HOST_CALL functionQsTrNoOp(JSC::ExecState *, JSC::JSObject*, JS return args.at(0); } +JSC::JSValue JSC_HOST_CALL functionQsTrId(JSC::ExecState *exec, JSC::JSObject*, JSC::JSValue, const JSC::ArgList &args) +{ + if (args.size() < 1) + return JSC::throwError(exec, JSC::GeneralError, "qsTrId() requires at least one argument"); + if (!args.at(0).isString()) + return JSC::throwError(exec, JSC::TypeError, "qsTrId(): first argument (id) must be a string"); + if ((args.size() > 1) && !args.at(1).isNumber()) + return JSC::throwError(exec, JSC::TypeError, "qsTrId(): second argument (n) must be a number"); + JSC::UString id = args.at(0).toString(exec); + int n = -1; + if (args.size() > 1) + n = args.at(1).toInt32(exec); + return JSC::jsString(exec, qtTrId(QScript::convertToLatin1(id).constData(), n)); +} + +JSC::JSValue JSC_HOST_CALL functionQsTrIdNoOp(JSC::ExecState *, JSC::JSObject*, JSC::JSValue, const JSC::ArgList &args) +{ + if (args.size() < 1) + return JSC::jsUndefined(); + return args.at(0); +} + static JSC::JSValue JSC_HOST_CALL stringProtoFuncArg(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); JSC::JSValue JSC_HOST_CALL stringProtoFuncArg(JSC::ExecState *exec, JSC::JSObject*, JSC::JSValue thisObject, const JSC::ArgList &args) @@ -3435,6 +3459,8 @@ void QScriptEngine::registerCustomType(int type, MarshalFunction mf, \row \o QT_TR_NOOP() \o QT_TR_NOOP() \row \o qsTranslate() \o QCoreApplication::translate() \row \o QT_TRANSLATE_NOOP() \o QT_TRANSLATE_NOOP() + \row \o qsTrId() (since 4.7) \o qtTrId() + \row \o QT_TRID_NOOP() (since 4.7) \o QT_TRID_NOOP() \endtable \sa {Internationalization with Qt} @@ -3453,6 +3479,8 @@ void QScriptEngine::installTranslatorFunctions(const QScriptValue &object) JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 2, JSC::Identifier(exec, "QT_TRANSLATE_NOOP"), QScript::functionQsTranslateNoOp)); JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 3, JSC::Identifier(exec, "qsTr"), QScript::functionQsTr)); JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "QT_TR_NOOP"), QScript::functionQsTrNoOp)); + JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "qsTrId"), QScript::functionQsTrId)); + JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "QT_TRID_NOOP"), QScript::functionQsTrIdNoOp)); glob->stringPrototype()->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "arg"), QScript::stringProtoFuncArg)); } diff --git a/tests/auto/qscriptengine/idtranslatable.js b/tests/auto/qscriptengine/idtranslatable.js new file mode 100644 index 0000000..554ca88 --- /dev/null +++ b/tests/auto/qscriptengine/idtranslatable.js @@ -0,0 +1,5 @@ +qsTrId("qtn_foo_bar"); + +var more_greeting_strings = [ QT_TRID_NOOP("qtn_needle"), QT_TRID_NOOP("qtn_haystack") ]; + +qsTrId("qtn_bar_baz", 10); diff --git a/tests/auto/qscriptengine/qscriptengine.qrc b/tests/auto/qscriptengine/qscriptengine.qrc index b87f985..fa55a5b 100644 --- a/tests/auto/qscriptengine/qscriptengine.qrc +++ b/tests/auto/qscriptengine/qscriptengine.qrc @@ -1,5 +1,6 @@ <!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>translations/translatable_la.qm</file> + <file>translations/idtranslatable_la.qm</file> </qresource> </RCC> diff --git a/tests/auto/qscriptengine/translations/idtranslatable_la.qm b/tests/auto/qscriptengine/translations/idtranslatable_la.qm new file mode 100644 index 0000000..c8c0b72 Binary files /dev/null and b/tests/auto/qscriptengine/translations/idtranslatable_la.qm differ diff --git a/tests/auto/qscriptengine/translations/idtranslatable_la.ts b/tests/auto/qscriptengine/translations/idtranslatable_la.ts new file mode 100644 index 0000000..b6d7053 --- /dev/null +++ b/tests/auto/qscriptengine/translations/idtranslatable_la.ts @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="nb_NO"> +<context> + <name></name> + <message id="qtn_foo_bar"> + <location filename="idtranslatable.js" line="1"/> + <source></source> + <translation>First string</translation> + </message> + <message id="qtn_needle"> + <location filename="idtranslatable.js" line="3"/> + <source></source> + <translation>Second string</translation> + </message> + <message id="qtn_haystack"> + <location filename="idtranslatable.js" line="3"/> + <source></source> + <translation>Third string</translation> + </message> + <message id="qtn_bar_baz" numerus="yes"> + <location filename="idtranslatable.js" line="5"/> + <source></source> + <translation> + <numerusform>Fourth string</numerusform> + <numerusform>%n fooish bar(s) found</numerusform> + </translation> + </message> +</context> +</TS> diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp index 7a732cc..4cff043 100644 --- a/tests/auto/qscriptengine/tst_qscriptengine.cpp +++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp @@ -162,6 +162,7 @@ private slots: void translateWithInvalidArgs(); void translationContext_data(); void translationContext(); + void translateScriptIdBased(); void functionScopes(); void nativeFunctionScopes(); void evaluateProgram(); @@ -4386,6 +4387,8 @@ void tst_QScriptEngine::installTranslatorFunctions() QVERIFY(!global.property("QT_TRANSLATE_NOOP").isValid()); QVERIFY(!global.property("qsTr").isValid()); QVERIFY(!global.property("QT_TR_NOOP").isValid()); + QVERIFY(!global.property("qsTrId").isValid()); + QVERIFY(!global.property("QT_TRID_NOOP").isValid()); QVERIFY(!globalOrig.property("String").property("prototype").property("arg").isValid()); eng.installTranslatorFunctions(); @@ -4393,6 +4396,8 @@ void tst_QScriptEngine::installTranslatorFunctions() QVERIFY(global.property("QT_TRANSLATE_NOOP").isFunction()); QVERIFY(global.property("qsTr").isFunction()); QVERIFY(global.property("QT_TR_NOOP").isFunction()); + QVERIFY(global.property("qsTrId").isFunction()); + QVERIFY(global.property("QT_TRID_NOOP").isFunction()); QVERIFY(globalOrig.property("String").property("prototype").property("arg").isFunction()); if (useCustomGlobalObject) { @@ -4400,6 +4405,8 @@ void tst_QScriptEngine::installTranslatorFunctions() QVERIFY(!globalOrig.property("QT_TRANSLATE_NOOP").isValid()); QVERIFY(!globalOrig.property("qsTr").isValid()); QVERIFY(!globalOrig.property("QT_TR_NOOP").isValid()); + QVERIFY(!globalOrig.property("qsTrId").isValid()); + QVERIFY(!globalOrig.property("QT_TRID_NOOP").isValid()); } { @@ -4427,6 +4434,17 @@ void tst_QScriptEngine::installTranslatorFunctions() QVERIFY(ret.isString()); QCOMPARE(ret.toString(), QString::fromLatin1("foobar")); } + + { + QScriptValue ret = eng.evaluate("qsTrId('foo')"); + QVERIFY(ret.isString()); + QCOMPARE(ret.toString(), QString::fromLatin1("foo")); + } + { + QScriptValue ret = eng.evaluate("QT_TRID_NOOP('foo')"); + QVERIFY(ret.isString()); + QCOMPARE(ret.toString(), QString::fromLatin1("foo")); + } } static QScriptValue callQsTr(QScriptContext *ctx, QScriptEngine *eng) @@ -4537,6 +4555,10 @@ void tst_QScriptEngine::translateWithInvalidArgs_data() QTest::newRow("qsTranslate('foo', 'bar', 'baz', 123)") << "qsTranslate('foo', 'bar', 'baz', 123)" << "Error: qsTranslate(): fourth argument (encoding) must be a string"; QTest::newRow("qsTranslate('foo', 'bar', 'baz', 'zab', 'rab')") << "qsTranslate('foo', 'bar', 'baz', 'zab', 'rab')" << "Error: qsTranslate(): fifth argument (n) must be a number"; QTest::newRow("qsTranslate('foo', 'bar', 'baz', 'zab', 123)") << "qsTranslate('foo', 'bar', 'baz', 'zab', 123)" << "Error: qsTranslate(): invalid encoding 'zab'"; + + QTest::newRow("qsTrId()") << "qsTrId()" << "Error: qsTrId() requires at least one argument"; + QTest::newRow("qsTrId(123)") << "qsTrId(123)" << "TypeError: qsTrId(): first argument (id) must be a string"; + QTest::newRow("qsTrId('foo', 'bar')") << "qsTrId('foo', 'bar')" << "TypeError: qsTrId(): second argument (n) must be a number"; } void tst_QScriptEngine::translateWithInvalidArgs() @@ -4598,6 +4620,53 @@ void tst_QScriptEngine::translationContext() QCoreApplication::instance()->removeTranslator(&translator); } +void tst_QScriptEngine::translateScriptIdBased() +{ + QScriptEngine engine; + + QTranslator translator; + translator.load(":/translations/idtranslatable_la"); + QCoreApplication::instance()->installTranslator(&translator); + engine.installTranslatorFunctions(); + + QString fileName = QString::fromLatin1("idtranslatable.js"); + + QHash<QString, QString> expectedTranslations; + expectedTranslations["qtn_foo_bar"] = "First string"; + expectedTranslations["qtn_needle"] = "Second string"; + expectedTranslations["qtn_haystack"] = "Third string"; + expectedTranslations["qtn_bar_baz"] = "Fourth string"; + + QHash<QString, QString>::const_iterator it; + for (it = expectedTranslations.constBegin(); it != expectedTranslations.constEnd(); ++it) { + for (int x = 0; x < 2; ++x) { + QString fn; + if (x) + fn = fileName; + // Top-level + QCOMPARE(engine.evaluate(QString::fromLatin1("qsTrId('%0')") + .arg(it.key()), fn).toString(), + it.value()); + QCOMPARE(engine.evaluate(QString::fromLatin1("QT_TRID_NOOP('%0')") + .arg(it.key()), fn).toString(), + it.key()); + // From function + QCOMPARE(engine.evaluate(QString::fromLatin1("(function() { return qsTrId('%0'); })()") + .arg(it.key()), fn).toString(), + it.value()); + QCOMPARE(engine.evaluate(QString::fromLatin1("(function() { return QT_TRID_NOOP('%0'); })()") + .arg(it.key()), fn).toString(), + it.key()); + } + } + + // Plural form + QCOMPARE(engine.evaluate("qsTrId('qtn_bar_baz', 10)").toString(), + QString::fromLatin1("10 fooish bar(s) found")); + QCOMPARE(engine.evaluate("qsTrId('qtn_foo_bar', 10)").toString(), + QString::fromLatin1("qtn_foo_bar")); // Doesn't have plural +} + void tst_QScriptEngine::functionScopes() { QScriptEngine eng; -- cgit v0.12 From 2d60953c4664958c665114c52ce2b92ed11b1488 Mon Sep 17 00:00:00 2001 From: Kent Hansen <kent.hansen@nokia.com> Date: Tue, 29 Jun 2010 15:28:00 +0200 Subject: Add test that exercises lupdate warnings for QtScript Reviewed-by: Oswald Buddenhagen --- .../testdata/good/parsejs2/expectedoutput.txt | 29 +++++++++++ .../lupdate/testdata/good/parsejs2/main.js | 56 ++++++++++++++++++++++ .../lupdate/testdata/good/parsejs2/project.pro | 3 ++ .../testdata/good/parsejs2/project.ts.result | 30 ++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsejs2/expectedoutput.txt create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsejs2/main.js create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsejs2/project.pro create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsejs2/project.ts.result diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs2/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/parsejs2/expectedoutput.txt new file mode 100644 index 0000000..d6c977f --- /dev/null +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs2/expectedoutput.txt @@ -0,0 +1,29 @@ +.*/lupdate/testdata/good/parsejs2/main.js:3: qsTranslate\(\) requires at least two arguments. +.*/lupdate/testdata/good/parsejs2/main.js:4: qsTranslate\(\) requires at least two arguments. +.*/lupdate/testdata/good/parsejs2/main.js:5: qsTranslate\(\): both arguments must be literal strings. +.*/lupdate/testdata/good/parsejs2/main.js:6: qsTranslate\(\): both arguments must be literal strings. +.*/lupdate/testdata/good/parsejs2/main.js:7: qsTranslate\(\): both arguments must be literal strings. +.*/lupdate/testdata/good/parsejs2/main.js:9: QT_TRANSLATE_NOOP\(\) requires at least two arguments. +.*/lupdate/testdata/good/parsejs2/main.js:10: QT_TRANSLATE_NOOP\(\) requires at least two arguments. +.*/lupdate/testdata/good/parsejs2/main.js:11: QT_TRANSLATE_NOOP\(\): both arguments must be literal strings. +.*/lupdate/testdata/good/parsejs2/main.js:12: QT_TRANSLATE_NOOP\(\): both arguments must be literal strings. +.*/lupdate/testdata/good/parsejs2/main.js:13: QT_TRANSLATE_NOOP\(\): both arguments must be literal strings. +.*/lupdate/testdata/good/parsejs2/main.js:15: qsTr\(\) requires at least one argument. +.*/lupdate/testdata/good/parsejs2/main.js:16: qsTr\(\): text to translate must be a literal string. +.*/lupdate/testdata/good/parsejs2/main.js:18: QT_TR_NOOP\(\) requires at least one argument. +.*/lupdate/testdata/good/parsejs2/main.js:19: QT_TR_NOOP\(\): text to translate must be a literal string. +.*/lupdate/testdata/good/parsejs2/main.js:21: qsTrId\(\) requires at least one argument. +.*/lupdate/testdata/good/parsejs2/main.js:22: qsTrId\(\): identifier must be a literal string. +.*/lupdate/testdata/good/parsejs2/main.js:24: QT_TRID_NOOP\(\) requires at least one argument. +.*/lupdate/testdata/good/parsejs2/main.js:25: QT_TRID_NOOP\(\): identifier must be a literal string. +.*/lupdate/testdata/good/parsejs2/main.js:27: Unexpected character in meta string +.*/lupdate/testdata/good/parsejs2/main.js:28: Unexpected character in meta string +.*/lupdate/testdata/good/parsejs2/main.js:29: Unterminated meta string +.*/lupdate/testdata/good/parsejs2/main.js:30: Unterminated meta string +.*/lupdate/testdata/good/parsejs2/main.js:33: //% cannot be used with qsTranslate\(\). Ignoring +.*/lupdate/testdata/good/parsejs2/main.js:35: //% cannot be used with QT_TRANSLATE_NOOP\(\). Ignoring +.*/lupdate/testdata/good/parsejs2/main.js:37: //% cannot be used with qsTr\(\). Ignoring +.*/lupdate/testdata/good/parsejs2/main.js:39: //% cannot be used with QT_TR_NOOP\(\). Ignoring +.*/lupdate/testdata/good/parsejs2/main.js:42: Discarding unconsumed meta data +.*/lupdate/testdata/good/parsejs2/main.js:44: Discarding unconsumed meta data +.*/lupdate/testdata/good/parsejs2/main.js:46: Discarding unconsumed meta data diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs2/main.js b/tests/auto/linguist/lupdate/testdata/good/parsejs2/main.js new file mode 100644 index 0000000..ea02957 --- /dev/null +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs2/main.js @@ -0,0 +1,56 @@ +// This script exercises lupdate errors and warnings. + +qsTranslate(); +qsTranslate(10); +qsTranslate(10, 20); +qsTranslate("10", 20); +qsTranslate(10, "20"); + +QT_TRANSLATE_NOOP(); +QT_TRANSLATE_NOOP(10); +QT_TRANSLATE_NOOP(10, 20); +QT_TRANSLATE_NOOP("10", 20); +QT_TRANSLATE_NOOP(10, "20"); + +qsTr(); +qsTr(10); + +QT_TR_NOOP(); +QT_TR_NOOP(10); + +qsTrId(); +qsTrId(10); + +QT_TRID_NOOP(); +QT_TRID_NOOP(10); + +//% This is wrong +//% "This is not wrong" This is wrong +//% "I forgot to close the meta string +//% "Being evil \ + +//% "Should cause a warning" +qsTranslate("FooContext", "Hello"); +//% "Should cause a warning" +QT_TRANSLATE_NOOP("FooContext", "World"); +//% "Should cause a warning" +qsTr("Hello"); +//% "Should cause a warning" +QT_TR_NOOP("World"); + +//: This comment will be discarded. +Math.sin(1); +//= id_foobar +Math.cos(2); +//~ underflow False +Math.tan(3); + +/* +Not tested for now, because these should perhaps not cause +translation entries to be generated at all; see QTBUG-11843. + +//= qtn_foo +qsTrId("qtn_foo"); +//= qtn_bar +QT_TRID_NOOP("qtn_bar"); +*/ diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs2/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsejs2/project.pro new file mode 100644 index 0000000..d549039 --- /dev/null +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs2/project.pro @@ -0,0 +1,3 @@ +SOURCES += main.js + +TRANSLATIONS = project.ts diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejs2/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsejs2/project.ts.result new file mode 100644 index 0000000..bfa1b3d --- /dev/null +++ b/tests/auto/linguist/lupdate/testdata/good/parsejs2/project.ts.result @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<context> + <name>FooContext</name> + <message> + <location filename="main.js" line="33"/> + <source>Hello</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="35"/> + <source>World</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>main</name> + <message> + <location filename="main.js" line="37"/> + <source>Hello</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="main.js" line="39"/> + <source>World</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> -- cgit v0.12 From 76b16095aae1e18f0189ac8e90df8be14f5d94c0 Mon Sep 17 00:00:00 2001 From: Geir Vattekar <geir.vattekar@nokia.com> Date: Wed, 28 Jul 2010 11:03:00 +0200 Subject: Doc: add link to new gettings started to index.html (cherry picked from commit 613ab517f46085580e81684cd5072f8c90fe84d5) --- doc/src/index.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index f15032c..2593048 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -40,7 +40,7 @@ </div> <div class="section sectionlist"> <ul> - <li><a href="how-to-learn-qt.html">Getting started</a></li> + <li><a href="gettingstarted.html">Getting started</a></li> <li><a href="installation.html">Installation</a></li> <li><a href="how-to-learn-qt.html">How to learn Qt</a></li> <li><a href="tutorials.html">Tutorials</a></li> -- cgit v0.12 From ec67f2d6ab333f2c8735ad4ccec36ca834dd8aab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= <tor.arne.vestbo@nokia.com> Date: Thu, 19 Aug 2010 17:27:10 +0200 Subject: Use Ctrl rather than Alt for switching tabs in the demo browser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Alt+1, Alt+2, etc produce actual symbols on some keyboard layouts, for example Norwegian, which prevents you from typing the @ symbol. Reviewed-by: Alexis Ménard <alexis.menard@nokia.com> (cherry picked from commit 5b177dd50d1ea0eb9130c631757a687782a23cd3) --- demos/browser/tabwidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/browser/tabwidget.cpp b/demos/browser/tabwidget.cpp index ae0c88e..cf1cd56 100644 --- a/demos/browser/tabwidget.cpp +++ b/demos/browser/tabwidget.cpp @@ -67,12 +67,12 @@ TabBar::TabBar(QWidget *parent) connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuRequested(QPoint))); - QString alt = QLatin1String("Alt+%1"); + QString ctrl = QLatin1String("Ctrl+%1"); for (int i = 1; i <= 10; ++i) { int key = i; if (key == 10) key = 0; - QShortcut *shortCut = new QShortcut(alt.arg(key), this); + QShortcut *shortCut = new QShortcut(ctrl.arg(key), this); m_tabShortcuts.append(shortCut); connect(shortCut, SIGNAL(activated()), this, SLOT(selectTabAction())); } -- cgit v0.12 From 146f85b57d534745b2a817d98908c88f3868a590 Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Wed, 18 Aug 2010 13:37:21 +0200 Subject: Doc: Fixing overlapping text in header list (cherry picked from commit ccb77caba466fe0e4d28a809129513cefdbd5575) --- doc/src/template/style/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index 6786a9f..a05efd2 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -384,9 +384,9 @@ .shortCut-topleft-inactive { padding-left: 3px; + padding-right: 3px; background: transparent url( ../images/sprites-combined.png) no-repeat 0px -58px; height: 20px; - width: 47px; } .shortCut-topleft-inactive span { -- cgit v0.12 From 44f923b115e5c9a34ff20d049192ba9125172456 Mon Sep 17 00:00:00 2001 From: Jesper Thomschutz <jesper.thomschutz@nokia.com> Date: Mon, 23 Aug 2010 13:33:04 +0200 Subject: Fixing qdoc index file...Commit hack to work around the massive amounts of dependencies in the upstream branch. Rev-by: MortenE --- doc/src/index.qdoc | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 2593048..e45892f 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -52,33 +52,33 @@ </div> <div class="indexbox api"> <div class="heading"> - Qt API Overviews</div> + Qt API</div> <div class="indexboxcont indexboxbar "> <div class="sectionlist tricol"> <ul> - <li><a href="classes.html">Class index</a></li> - <li><a href="functions.html">Function index</a></li> - <li><a href="modules.html">Modules</a></li> - <li><a href="namespaces.html">Namespaces</a></li> - <li><a href="qtglobal.html">Global stuff</a></li> + <li><a href="classes.html">All Classes</a></li> + <li><a href="functions.html">All Functions</a></li> + <li><a href="modules.html">All Modules</a></li> + <li><a href="namespaces.html">All Namespaces</a></li> + <li><a href="qtglobal.html">Global Declarations</a></li> + <li><a href="licensing.html">Licenses and Credits</a></li> </ul> </div> <div class="sectionlist tricol"> <ul> - <li><a href="qt-basic-concepts.html">Programming with Qt</a></li> - <li><a href="qt-basic-concepts.html">Qt Architecture</a></li> - <li><a href="developing-with-qt.html">Cross-platform & Platform-specific Development</a></li> - <li><a href="technology-apis.html">Qt & standard technologies </a></li> - <li><a href="best-practices.html">Qt How-to's & best practices</a></li> - </ul> + <li><a href="qt-basic-concepts.html">Programming with Qt</a></li> + <li><a href="qt-gui-concepts.html">UI Design with Qt</a></li> + <li><a href="developing-with-qt.html">Cross-platform and Platform-specific</a></li> + <li><a href="technology-apis.html">Qt and Key Technologies</a></li> + <li><a href="best-practices.html">Best Practices Guides</a></li> + </ul> </div> <div class="sectionlist"> <ul> - <li><a href="declarativeui.html">Qt Quick</a></li> - <li><a href="qdeclarativeintroduction.html">Introduction to QML</a></li> - <li><a href="qdeclarativeelements.html">QML Elements</a></li> - <li><a href="qt-gui-concepts.html">UI components</a></li> - <li><a href="declarativeui.html">Qt & GUI design</a></li> + <li><a href="qtquick.html">Qt Quick</a></li> + <li><a href="qdeclarativeintroduction.html">Introduction to QML</a></li> + <li><a href="qdeclarativeelements.html">QML Elements</a></li> + <li><a href="qdeclarativeexamples.html">QML Examples and Demos</a></li> </ul> </div> </div> @@ -94,19 +94,18 @@ </div> <div class="section sectionlist"> <ul> - <li><a href="http://doc.qt.nokia.com/qtcreator-2.0/index.html">Qt Creator</a> (online)</li> + <li><a href="http://doc.qt.nokia.com/qtcreator-2.0/index.html">Qt Creator</a></li> <li><a href="designer-manual.html">Qt Designer</a></li> <li><a href="linguist-manual.html">Qt Linguist</a></li> <li><a href="assistant-manual.html">Qt Assistant</a></li> <li><a href="qmake-manual.html">Qt qmake</a></li> - <li><a href="http://doc.qt.nokia.com/qtsimulator-1.0/simulator-description.html">Qt Simulator</a> (online)</li> - <li><a href="http://qt.nokia.com/developer/eclipse-integration">Eclipse Integration</a> (online)</li> - <li><a href="http://qt.nokia.com/products/appdev">Add-On Products and Services</a> (online)</li> + <li><a href="http://doc.qt.nokia.com/qtsimulator-1.0/simulator-description.html">Qt Simulator</a></li> + <li><a href="http://qt.nokia.com/developer/eclipse-integration">Eclipse Integration</a></li> + <li><a href="http://qt.nokia.com/products/appdev">Add-On Products and Services</a></li> <li><a href="qvfb.html">Virtual Framebuffer</a></li> </ul> </div> </div> - </div> + </div> \endraw - */ -- cgit v0.12 From 82d5f0ae622d2579b925a5f6a8054eeeccb9a233 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Wed, 18 Aug 2010 11:44:27 +0200 Subject: add indirect input/output specification capability to QMAKE_SUBSTITUTES like in SUBDIRS, the specified strings can now be basenames of "structures" which specify the actual input and output files: QMAKE_SUBSTITUTES += test test.input = infile.txt.in test.output = foobar.out Reviewed-by: joerg --- qmake/generators/makefile.cpp | 37 ++++++++++++++++++++----- tests/auto/qmake/testdata/substitutes/test.pro | 6 +++- tests/auto/qmake/testdata/substitutes/test3.txt | 1 + tests/auto/qmake/tst_qmake.cpp | 2 ++ 4 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 tests/auto/qmake/testdata/substitutes/test3.txt diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 852471d..03732ba 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -466,14 +466,37 @@ MakefileGenerator::init() if(!project->isEmpty("QMAKE_SUBSTITUTES")) { const QStringList &subs = v["QMAKE_SUBSTITUTES"]; for(int i = 0; i < subs.size(); ++i) { - if(!subs.at(i).endsWith(".in")) { - warn_msg(WarnLogic, "Substitute '%s' does not end with '.in'", - subs.at(i).toLatin1().constData()); - continue; + QString inn = subs.at(i) + ".input", outn = subs.at(i) + ".output"; + if (v.contains(inn) || v.contains(outn)) { + if (!v.contains(inn) || !v.contains(outn)) { + warn_msg(WarnLogic, "Substitute '%s' has only one of .input and .output", + subs.at(i).toLatin1().constData()); + continue; + } + const QStringList &tinn = v[inn], &toutn = v[outn]; + if (tinn.length() != 1) { + warn_msg(WarnLogic, "Substitute '%s.input' does not have exactly one value", + subs.at(i).toLatin1().constData()); + continue; + } + if (toutn.length() != 1) { + warn_msg(WarnLogic, "Substitute '%s.output' does not have exactly one value", + subs.at(i).toLatin1().constData()); + continue; + } + inn = tinn.first(); + outn = toutn.first(); + } else { + inn = subs.at(i); + if(!inn.endsWith(".in")) { + warn_msg(WarnLogic, "Substitute '%s' does not end with '.in'", + inn.toLatin1().constData()); + continue; + } + outn = inn.left(inn.length()-3); } - QFile in(fileFixify(subs.at(i))); - QFile out(fileFixify(subs.at(i).left(subs.at(i).length()-3), - qmake_getpwd(), Option::output_dir)); + QFile in(fileFixify(inn)); + QFile out(fileFixify(outn, qmake_getpwd(), Option::output_dir)); if(in.open(QFile::ReadOnly)) { QString contents; QStack<int> state; diff --git a/tests/auto/qmake/testdata/substitutes/test.pro b/tests/auto/qmake/testdata/substitutes/test.pro index ddad93f..26b0272 100644 --- a/tests/auto/qmake/testdata/substitutes/test.pro +++ b/tests/auto/qmake/testdata/substitutes/test.pro @@ -1 +1,5 @@ -QMAKE_SUBSTITUTES += test.in sub/test2.in +QMAKE_SUBSTITUTES += test.in sub/test2.in indirect + +indirect.input = $$PWD/test3.txt +indirect.output = $$OUT_PWD/sub/indirect_test.txt + diff --git a/tests/auto/qmake/testdata/substitutes/test3.txt b/tests/auto/qmake/testdata/substitutes/test3.txt new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/tests/auto/qmake/testdata/substitutes/test3.txt @@ -0,0 +1 @@ +hello diff --git a/tests/auto/qmake/tst_qmake.cpp b/tests/auto/qmake/tst_qmake.cpp index 060fa01..277e9f8 100644 --- a/tests/auto/qmake/tst_qmake.cpp +++ b/tests/auto/qmake/tst_qmake.cpp @@ -484,12 +484,14 @@ void tst_qmake::substitutes() QVERIFY( test_compiler.qmake( workDir, "test" )); QVERIFY( test_compiler.exists( workDir, "test", Plain, "" )); QVERIFY( test_compiler.exists( workDir, "sub/test2", Plain, "" )); + QVERIFY( test_compiler.exists( workDir, "sub/indirect_test.txt", Plain, "" )); QVERIFY( test_compiler.makeDistClean( workDir )); QString buildDir = base_path + "/testdata/substitutes_build"; QVERIFY( test_compiler.qmake( workDir, "test", buildDir )); QVERIFY( test_compiler.exists( buildDir, "test", Plain, "" )); QVERIFY( test_compiler.exists( buildDir, "sub/test2", Plain, "" )); + QVERIFY( test_compiler.exists( buildDir, "sub/indirect_test.txt", Plain, "" )); QVERIFY( test_compiler.makeDistClean( buildDir )); } -- cgit v0.12 From b5b6cbb477b50c582d545b0e5e3a04626834e7e2 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Tue, 17 Aug 2010 18:59:51 +0200 Subject: let WebKit inject itself into the qt configuration i.e., don't explicitly deal with qt_webkit_version.pri outside of the webkit source directory. Task-number: QTBUG-12379 Reviewed-by: Simon Hausmann --- configure | 2 +- mkspecs/modules/README | 3 +++ mkspecs/modules/qt_webkit_version.pri | 4 ---- projects.pro | 4 +++- src/3rdparty/webkit/WebCore/WebCore.pro | 2 +- src/3rdparty/webkit/WebKit.pro | 6 ++++++ src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri | 2 +- tools/configure/configureapp.cpp | 3 +-- 8 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 mkspecs/modules/README delete mode 100644 mkspecs/modules/qt_webkit_version.pri diff --git a/configure b/configure index bd69a0a..159feaf 100755 --- a/configure +++ b/configure @@ -7163,7 +7163,7 @@ if [ "$CFG_WEBKIT" = "auto" ]; then fi if [ "$CFG_WEBKIT" = "yes" ]; then - QT_CONFIG="$QT_CONFIG webkit" + # Don't add "webkit" to QT_CONFIG here - it injects itself via the module. # The reason we set CFG_WEBKIT, is such that the printed overview of what will be enabled, shows correctly. CFG_WEBKIT="yes" else diff --git a/mkspecs/modules/README b/mkspecs/modules/README new file mode 100644 index 0000000..f095982 --- /dev/null +++ b/mkspecs/modules/README @@ -0,0 +1,3 @@ +Externally provided Qt modules may drop a qmake file here to become part of +the current Qt configuration. The file name must follow the pattern +"qt_<module>.pri". It must contain a "QT_CONFIG += <module>" statement. diff --git a/mkspecs/modules/qt_webkit_version.pri b/mkspecs/modules/qt_webkit_version.pri deleted file mode 100644 index ffd192c..0000000 --- a/mkspecs/modules/qt_webkit_version.pri +++ /dev/null @@ -1,4 +0,0 @@ -QT_WEBKIT_VERSION = 4.7.0 -QT_WEBKIT_MAJOR_VERSION = 4 -QT_WEBKIT_MINOR_VERSION = 7 -QT_WEBKIT_PATCH_VERSION = 0 diff --git a/projects.pro b/projects.pro index 373b049..f94e1de 100644 --- a/projects.pro +++ b/projects.pro @@ -159,11 +159,13 @@ INSTALLS += qmake #mkspecs mkspecs.path=$$[QT_INSTALL_DATA]/mkspecs -mkspecs.files=$$QT_BUILD_TREE/mkspecs/qconfig.pri $$QT_SOURCE_TREE/mkspecs/* +mkspecs.files=$$QT_BUILD_TREE/mkspecs/qconfig.pri $$files($$QT_SOURCE_TREE/mkspecs/*) +mkspecs.files -= $$QT_SOURCE_TREE/mkspecs/modules unix { DEFAULT_QMAKESPEC = $$QMAKESPEC DEFAULT_QMAKESPEC ~= s,^.*mkspecs/,,g mkspecs.commands += $(DEL_FILE) $(INSTALL_ROOT)$$mkspecs.path/default; $(SYMLINK) $$DEFAULT_QMAKESPEC $(INSTALL_ROOT)$$mkspecs.path/default + mkspecs.files -= $$QT_SOURCE_TREE/mkspecs/default } win32:!equals(QT_BUILD_TREE, $$QT_SOURCE_TREE) { # When shadow building on Windows, the default mkspec only exists in the build tree. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 2047143..ac0c47c 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -82,7 +82,7 @@ CONFIG(QTDIR_build) { symbian: TARGET =$$TARGET$${QT_LIBINFIX} } moduleFile=$$PWD/../WebKit/qt/qt_webkit_version.pri -include($$moduleFile) +isEmpty(QT_BUILD_TREE):include($$moduleFile) VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION} unix { diff --git a/src/3rdparty/webkit/WebKit.pro b/src/3rdparty/webkit/WebKit.pro index c7df391..ef251c5 100644 --- a/src/3rdparty/webkit/WebKit.pro +++ b/src/3rdparty/webkit/WebKit.pro @@ -34,3 +34,9 @@ symbian { } include(WebKit/qt/docs/docs.pri) + +!isEmpty(QT_BUILD_TREE) { + QMAKE_SUBSTITUTES += qt_webkit_version + qt_webkit_version.input = WebKit/qt/qt_webkit_version.pri + qt_webkit_version.output = $$QT_BUILD_TREE/mkspecs/modules/qt_webkit_version.pri +} diff --git a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri index d8cf06c..4594d1e 100644 --- a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri +++ b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri @@ -2,4 +2,4 @@ QT_WEBKIT_VERSION = 4.7.0 QT_WEBKIT_MAJOR_VERSION = 4 QT_WEBKIT_MINOR_VERSION = 7 QT_WEBKIT_PATCH_VERSION = 0 -QT_CONFIG *= webkit +QT_CONFIG += webkit diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 0c716d1..3a0fcde 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2667,8 +2667,7 @@ void Configure::generateOutputVars() qtConfig += "audio-backend"; } - if (dictionary["WEBKIT"] == "yes") - qtConfig += "webkit"; + // Don't add "webkit" to QT_CONFIG here - it injects itself via the module. if (dictionary["DECLARATIVE"] == "yes") { if (dictionary[ "SCRIPT" ] == "no") { -- cgit v0.12 From 1bb64da35315e8c8b59d4cdb9dbae234cb2bcf8c Mon Sep 17 00:00:00 2001 From: Morten Engvoldsen <morten.engvoldsen@nokia.com> Date: Fri, 20 Aug 2010 14:00:36 +0200 Subject: Doc: fixing creator bugs, removing menus and textbox in the header (cherry picked from commit 4aafc4e55e0906be0cc39911b2c1a4ffe71c4d91) --- doc/src/template/style/narrow.css | 3 +++ doc/src/template/style/style.css | 4 ++++ tools/qdoc3/htmlgenerator.cpp | 13 +++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css index 349048f..de5b0a0 100644 --- a/doc/src/template/style/narrow.css +++ b/doc/src/template/style/narrow.css @@ -203,6 +203,9 @@ *border: 1px solid #fff; *height: 17px; _height: 18px; + /* to be fixed */ + display: none; + /* to be fixed */ } .narrow .indexbox .indexIcon { diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css index a05efd2..4772260 100755 --- a/doc/src/template/style/style.css +++ b/doc/src/template/style/style.css @@ -1505,6 +1505,10 @@ .creator .toc { margin:10px 20px 10px 10px; } + + .creator #narrowsearch, .creator #narrowmenu{ + display:none; + } /* end of creator spec*/ } diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 52a61e0..75d8893 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -1808,18 +1808,19 @@ void HtmlGenerator::generateHeader(const QString& title, // Adding jquery and functions - providing online tools and search features out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n"; out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n"; - // Adding style and js for small windows - out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; - out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; - out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />\n"; + // Adding syntax highlighter // future release - // Setting some additional style sheet related details depending on configuration (e.g. online/offline) + // Setting some additional style sheet related details depending on configuration (e.g. Online/Creator) switch (application) { case Online: + // Adding style and js for small windows + out() << " <script src=\"./scripts/superfish.js\" type=\"text/javascript\"></script>\n"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/superfish.css\" />"; + out() << " <script src=\"./scripts/narrow.js\" type=\"text/javascript\"></script>\n"; + out() << " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/narrow.css\" />\n"; // Browser spec styles out() << " <!--[if IE]>\n"; out() << "<meta name=\"MSSmartTagsPreventParsing\" content=\"true\">\n"; -- cgit v0.12 From 40fef4036007e1b0d69d1f731c591c324bd0c6ec Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko <denis.dzyubenko@nokia.com> Date: Mon, 23 Aug 2010 14:02:51 +0200 Subject: Fixed touch event delivery in QGraphicsView. When a touch event with a second touch pressed is delivered inside graphicsview, we should combine it with the closest touch point even if the item under the second touch is not direct ancestor or child of the first touches' target item. So adding a second touch inside the item's bounding rect will send a TouchUpdate event to the item instead or starting a new touch event sequence. Task-number: QT-3795 Reviewed-by: Bradley T. Hughes --- src/gui/graphicsview/qgraphicsscene.cpp | 9 +---- tests/auto/qtouchevent/tst_qtouchevent.cpp | 59 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index a98ce6f..a02f3ac 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -5740,16 +5740,11 @@ void QGraphicsScenePrivate::touchEventHandler(QTouchEvent *sceneTouchEvent) } if (sceneTouchEvent->deviceType() == QTouchEvent::TouchScreen) { - // on touch-screens, combine this touch point with the closest one we find if it - // is a a direct descendent or ancestor ( + // on touch-screens, combine this touch point with the closest one we find int closestTouchPointId = findClosestTouchPointId(touchPoint.scenePos()); QGraphicsItem *closestItem = itemForTouchPointId.value(closestTouchPointId); - if (!item - || (closestItem - && (item->isAncestorOf(closestItem) - || closestItem->isAncestorOf(item)))) { + if (!item || (closestItem && cachedItemsUnderMouse.contains(closestItem))) item = closestItem; - } } if (!item) continue; diff --git a/tests/auto/qtouchevent/tst_qtouchevent.cpp b/tests/auto/qtouchevent/tst_qtouchevent.cpp index bb80fde..4219ef4 100644 --- a/tests/auto/qtouchevent/tst_qtouchevent.cpp +++ b/tests/auto/qtouchevent/tst_qtouchevent.cpp @@ -109,6 +109,7 @@ class tst_QTouchEventGraphicsItem : public QGraphicsItem public: QList<QTouchEvent::TouchPoint> touchBeginPoints, touchUpdatePoints, touchEndPoints; bool seenTouchBegin, seenTouchUpdate, seenTouchEnd; + int touchBeginCounter, touchUpdateCounter, touchEndCounter; bool acceptTouchBegin, acceptTouchUpdate, acceptTouchEnd; bool deleteInTouchBegin, deleteInTouchUpdate, deleteInTouchEnd; tst_QTouchEventGraphicsItem **weakpointer; @@ -131,6 +132,7 @@ public: touchUpdatePoints.clear(); touchEndPoints.clear(); seenTouchBegin = seenTouchUpdate = seenTouchEnd = false; + touchBeginCounter = touchUpdateCounter = touchEndCounter = 0; acceptTouchBegin = acceptTouchUpdate = acceptTouchEnd = true; deleteInTouchBegin = deleteInTouchUpdate = deleteInTouchEnd = false; } @@ -146,6 +148,7 @@ public: if (seenTouchUpdate) qWarning("TouchBegin: TouchUpdate cannot happen before TouchBegin"); if (seenTouchEnd) qWarning("TouchBegin: TouchEnd cannot happen before TouchBegin"); seenTouchBegin = !seenTouchBegin && !seenTouchUpdate && !seenTouchEnd; + ++touchBeginCounter; touchBeginPoints = static_cast<QTouchEvent *>(event)->touchPoints(); event->setAccepted(acceptTouchBegin); if (deleteInTouchBegin) @@ -155,6 +158,7 @@ public: if (!seenTouchBegin) qWarning("TouchUpdate: have not seen TouchBegin"); if (seenTouchEnd) qWarning("TouchUpdate: TouchEnd cannot happen before TouchUpdate"); seenTouchUpdate = seenTouchBegin && !seenTouchEnd; + ++touchUpdateCounter; touchUpdatePoints = static_cast<QTouchEvent *>(event)->touchPoints(); event->setAccepted(acceptTouchUpdate); if (deleteInTouchUpdate) @@ -164,6 +168,7 @@ public: if (!seenTouchBegin) qWarning("TouchEnd: have not seen TouchBegin"); if (seenTouchEnd) qWarning("TouchEnd: already seen a TouchEnd"); seenTouchEnd = seenTouchBegin && !seenTouchEnd; + ++touchEndCounter; touchEndPoints = static_cast<QTouchEvent *>(event)->touchPoints(); event->setAccepted(acceptTouchEnd); if (deleteInTouchEnd) @@ -194,6 +199,7 @@ private slots: void deleteInEventHandler(); void deleteInRawEventTranslation(); void crashInQGraphicsSceneAfterNotHandlingTouchBegin(); + void touchBeginWithGraphicsWidget(); }; void tst_QTouchEvent::touchDisabledByDefault() @@ -1334,6 +1340,59 @@ void tst_QTouchEvent::crashInQGraphicsSceneAfterNotHandlingTouchBegin() QTest::touchEvent(view.viewport()).release(0, view.mapFromScene(QPoint(10, 10))); } +void tst_QTouchEvent::touchBeginWithGraphicsWidget() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + tst_QTouchEventGraphicsItem *root; + root = new tst_QTouchEventGraphicsItem; + root->setAcceptTouchEvents(true); + scene.addItem(root); + + QGraphicsWidget *glassWidget = new QGraphicsWidget; + glassWidget->setMinimumSize(100, 100); + scene.addItem(glassWidget); + + view.resize(200, 200); + view.show(); + QTest::qWaitForWindowShown(&view); + view.fitInView(scene.sceneRect()); + + QTest::touchEvent() + .press(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()); + QTest::touchEvent() + .stationary(0) + .press(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); + QTest::touchEvent() + .release(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()) + .release(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); + + QCOMPARE(root->touchBeginCounter, 1); + QCOMPARE(root->touchUpdateCounter, 1); + QCOMPARE(root->touchEndCounter, 1); + QCOMPARE(root->touchUpdatePoints.size(), 2); + + root->reset(); + glassWidget->setWindowFlags(Qt::Window); // make the glassWidget a panel + + QTest::touchEvent() + .press(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()); + QTest::touchEvent() + .stationary(0) + .press(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); + QTest::touchEvent() + .release(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()) + .release(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); + + QCOMPARE(root->touchBeginCounter, 0); + QCOMPARE(root->touchUpdateCounter, 0); + QCOMPARE(root->touchEndCounter, 0); + + + delete root; + delete glassWidget; +} + QTEST_MAIN(tst_QTouchEvent) #include "tst_qtouchevent.moc" -- cgit v0.12 From d38eb22b9f5b408d67ea0244e45c13d6d0665d8d Mon Sep 17 00:00:00 2001 From: Markus Goetz <Markus.Goetz@nokia.com> Date: Mon, 23 Aug 2010 16:49:08 +0200 Subject: QNAM HTTP: Prepare a compression auto test related to a future bugfix Task-number: QTBUG-12908 --- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index ca563ef..2ff02d4 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -281,6 +281,8 @@ private Q_SLOTS: void symbianOpenCDataUrlCrash(); + void qtbug12908compressedHttpReply(); + // NOTE: This test must be last! void parentingRepliesToTheApp(); }; @@ -4171,6 +4173,30 @@ void tst_QNetworkReply::symbianOpenCDataUrlCrash() QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(598)); } +// TODO: +// Prepare a gzip that has one chunk that expands to the size mentioned in the bugreport. +// Then have a custom HTTP server that waits after this chunk so the returning gets +// triggered. +void tst_QNetworkReply::qtbug12908compressedHttpReply() +{ + QString header("HTTP/1.0 200 OK\r\nContent-Encoding: gzip\r\nContent-Length: 63\r\n\r\n"); + + // dd if=/dev/zero of=qtbug-12908 bs=16384 count=1 && gzip qtbug-12908 && base64 -w 0 qtbug-12908.gz + QString encodedFile("H4sICDdDaUwAA3F0YnVnLTEyOTA4AO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"); + QByteArray decodedFile = QByteArray::fromBase64(encodedFile.toAscii()); + + MiniHttpServer server(header.toAscii() + decodedFile); + server.doClose = true; + + QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort()))); + QNetworkReplyPtr reply = manager.get(request); + + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(reply->error(), QNetworkReply::NoError); +} // NOTE: This test must be last testcase in tst_qnetworkreply! -- cgit v0.12 From e645157a5dcf702df21b566441a56753eaefe6c4 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Mon, 23 Aug 2010 19:42:00 +0200 Subject: fix build after first webkit self-injection attempt it didn't work for several reasons: - if the configures don't add webkit to QT_CONFIG, src.pro doesn't even know that it needs to build WebKit at all, so WebKit would never inject itself into the build. hen-and-egg problem. - the in-Qt build doesn't use WebKit.pro in the first place, so a proper recursive qmake would never create qt_webkit_version.pri. it worked under unix because configure collects all project files irrespective of the actual SUBDIRS structure. - a proper recursive qmake will cache the qt config, so the injection wouldn't be effective during the first qmake run so instead let the configures copy the pri file. --- configure | 3 ++- configure.exe | Bin 1320448 -> 1320960 bytes src/3rdparty/webkit/WebKit.pro | 6 ------ tools/configure/configureapp.cpp | 8 +++++++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 159feaf..3230086 100755 --- a/configure +++ b/configure @@ -7163,7 +7163,8 @@ if [ "$CFG_WEBKIT" = "auto" ]; then fi if [ "$CFG_WEBKIT" = "yes" ]; then - # Don't add "webkit" to QT_CONFIG here - it injects itself via the module. + # This include takes care of adding "webkit" to QT_CONFIG. + cp -f "$relpath/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri" "$outpath/mkspecs/modules/qt_webkit_version.pri" # The reason we set CFG_WEBKIT, is such that the printed overview of what will be enabled, shows correctly. CFG_WEBKIT="yes" else diff --git a/configure.exe b/configure.exe index c5bff85..982e038 100755 Binary files a/configure.exe and b/configure.exe differ diff --git a/src/3rdparty/webkit/WebKit.pro b/src/3rdparty/webkit/WebKit.pro index ef251c5..c7df391 100644 --- a/src/3rdparty/webkit/WebKit.pro +++ b/src/3rdparty/webkit/WebKit.pro @@ -34,9 +34,3 @@ symbian { } include(WebKit/qt/docs/docs.pri) - -!isEmpty(QT_BUILD_TREE) { - QMAKE_SUBSTITUTES += qt_webkit_version - qt_webkit_version.input = WebKit/qt/qt_webkit_version.pri - qt_webkit_version.output = $$QT_BUILD_TREE/mkspecs/modules/qt_webkit_version.pri -} diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 3a0fcde..7049306 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2667,7 +2667,13 @@ void Configure::generateOutputVars() qtConfig += "audio-backend"; } - // Don't add "webkit" to QT_CONFIG here - it injects itself via the module. + if (dictionary["WEBKIT"] == "yes") { + // This include takes care of adding "webkit" to QT_CONFIG. + QString src = sourcePath + "/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri"; + QString dst = buildPath + "/mkspecs/modules/qt_webkit_version.pri"; + QFile::remove(dst); + QFile::copy(src, dst); + } if (dictionary["DECLARATIVE"] == "yes") { if (dictionary[ "SCRIPT" ] == "no") { -- cgit v0.12 From 08f7ae57fe51ad01cd5bef2ddeb92ea1556218e9 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Tue, 27 Jul 2010 13:46:00 +0200 Subject: Make it possible again to build Qt without webkit Remove the QT_CONFIG line from the qt_webkit_version.pri file in Qt, because it is only meaningful for separate builds of WebKit. (Real fix is in the import script that takes care of always removing that line) Task-number: QTBUG-12456 Discussed-with: axis (cherry picked from commit 4cd413970b18125885ce60d82a4ad06bce6395a5) --- mkspecs/modules/qt_webkit_version.pri | 1 - 1 file changed, 1 deletion(-) diff --git a/mkspecs/modules/qt_webkit_version.pri b/mkspecs/modules/qt_webkit_version.pri index d8cf06c..ffd192c 100644 --- a/mkspecs/modules/qt_webkit_version.pri +++ b/mkspecs/modules/qt_webkit_version.pri @@ -2,4 +2,3 @@ QT_WEBKIT_VERSION = 4.7.0 QT_WEBKIT_MAJOR_VERSION = 4 QT_WEBKIT_MINOR_VERSION = 7 QT_WEBKIT_PATCH_VERSION = 0 -QT_CONFIG *= webkit -- cgit v0.12 From 9d77ff2064be61d2fdf2c034b13ef75cc4905bb3 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Tue, 24 Aug 2010 12:14:03 +1000 Subject: Fix race condition on bearer management initialisation. Defer initialisation and changing thread affinity until after the global static is constructed. Task-number: QTBUG-12686 --- src/network/bearer/qnetworkconfigmanager.cpp | 12 ++++++++++-- src/network/bearer/qnetworkconfigmanager_p.cpp | 10 +++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/network/bearer/qnetworkconfigmanager.cpp b/src/network/bearer/qnetworkconfigmanager.cpp index 102b347..65014a6 100644 --- a/src/network/bearer/qnetworkconfigmanager.cpp +++ b/src/network/bearer/qnetworkconfigmanager.cpp @@ -54,7 +54,15 @@ Q_GLOBAL_STATIC(QNetworkConfigurationManagerPrivate, connManager); QNetworkConfigurationManagerPrivate *qNetworkConfigurationManagerPrivate() { - return connManager(); + static bool initialized = false; + + QNetworkConfigurationManagerPrivate *m = connManager(); + if (!initialized) { + initialized = true; + m->updateConfigurations(); + } + + return m; } /*! @@ -178,7 +186,7 @@ QNetworkConfigurationManagerPrivate *qNetworkConfigurationManagerPrivate() QNetworkConfigurationManager::QNetworkConfigurationManager( QObject* parent ) : QObject(parent) { - QNetworkConfigurationManagerPrivate *priv = connManager(); + QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)), this, SIGNAL(configurationAdded(QNetworkConfiguration))); diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index dd174bf..d388920 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -64,9 +64,6 @@ QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate() { qRegisterMetaType<QNetworkConfiguration>("QNetworkConfiguration"); qRegisterMetaType<QNetworkConfigurationPrivatePointer>("QNetworkConfigurationPrivatePointer"); - - moveToThread(QCoreApplicationPrivate::mainThread()); - updateConfigurations(); } QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate() @@ -359,6 +356,13 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() if (sender()) return; + if (thread() != QCoreApplicationPrivate::mainThread()) { + if (thread() != QThread::currentThread()) + return; + + moveToThread(QCoreApplicationPrivate::mainThread()); + } + updating = false; #ifndef QT_NO_LIBRARY -- cgit v0.12 From 67ddb9cca2b638b1cf71eb98e906260b83a38677 Mon Sep 17 00:00:00 2001 From: Charles Yin <charles.yin@nokia.com> Date: Tue, 24 Aug 2010 15:15:29 +1000 Subject: Fix the broken unicode detection of ODBC driver. the unicode flag is entirely overrided by mistake. Task-number:QTBUG-13109 Reviewed-by:Michael Goddard --- src/sql/drivers/odbc/qsql_odbc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index f41a914..b06970c 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -2132,7 +2132,7 @@ void QODBCDriverPrivate::checkSqlServer() serverType = QString::fromUtf8((const char *)serverString.constData(), t); #endif isFreeTDSDriver = serverType.contains(QLatin1String("tdsodbc"), Qt::CaseInsensitive); - unicode = isFreeTDSDriver == false; + unicode = unicode && !isFreeTDSDriver; } } -- cgit v0.12 From fdd6436987a114521168f48b9b96013772af7d49 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Tue, 24 Aug 2010 08:41:22 +0200 Subject: qmake vcxproj generator: fix bug when using CharacterSet=1 in .pro file Task-number: QTBUG-13080 Reviewed-by: Martin Petersson --- qmake/generators/win32/msvc_vcxproj.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/qmake/generators/win32/msvc_vcxproj.cpp b/qmake/generators/win32/msvc_vcxproj.cpp index f68a435..271d9ae 100644 --- a/qmake/generators/win32/msvc_vcxproj.cpp +++ b/qmake/generators/win32/msvc_vcxproj.cpp @@ -202,7 +202,6 @@ void VcxprojGenerator::initConfiguration() conf.CharacterSet = "NotSet"; break; } - conf.CharacterSet = charSet(temp.isEmpty() ? (short)charSetNotSet : temp.toShort()); } conf.DeleteExtensionsOnClean = project->first("DeleteExtensionsOnClean"); conf.ImportLibrary = conf.linker.ImportLibrary; -- cgit v0.12 From 409d41185e85f2eefe6bb4872c4dd3005bef8170 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Tue, 24 Aug 2010 08:58:17 +0200 Subject: qmake vc[x]proj generators: support /MAP option without file name Task-number: QTBUG-13081 Reviewed-by: Martin Petersson --- qmake/generators/win32/msbuild_objectmodel.cpp | 3 ++- qmake/generators/win32/msvc_objectmodel.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index 17c4d5a..2505056 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -1573,7 +1573,8 @@ bool VCXLinkerTool::parseOption(const char* option) break; case 0x0034160: // /MAP[:filename] GenerateMapFile = _True; - MapFileName = option+5; + if (option[4] == ':') + MapFileName = option+5; break; case 0x164e1ef: // /MAPINFO:{EXPORTS} if(*(option+9) == 'E') diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 1e060a0..980e686 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -1430,7 +1430,8 @@ bool VCLinkerTool::parseOption(const char* option) break; case 0x0034160: // /MAP[:filename] GenerateMapFile = _True; - MapFileName = option+5; + if (option[4] == ':') + MapFileName = option+5; break; case 0x164e1ef: // /MAPINFO:{EXPORTS|LINES} if(*(option+9) == 'E') -- cgit v0.12 From ae29cdf5cd319e447ef75b11ac1247375c6c8192 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 16:17:55 +0200 Subject: Keep the scopeid that getaddrinfo(3) returns to us. Task-number: QTBUG-12608, QTBUG-12243 Reviewed-by: Markus Goetz --- src/network/kernel/qhostinfo_unix.cpp | 5 ++++- src/network/socket/qnativesocketengine_unix.cpp | 9 ++++++--- src/network/socket/qnativesocketengine_win.cpp | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp index 3112dd6..9e3da61 100644 --- a/src/network/kernel/qhostinfo_unix.cpp +++ b/src/network/kernel/qhostinfo_unix.cpp @@ -247,7 +247,10 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName) #ifndef QT_NO_IPV6 else if (node->ai_family == AF_INET6) { QHostAddress addr; - addr.setAddress(((sockaddr_in6 *) node->ai_addr)->sin6_addr.s6_addr); + sockaddr_in6 *sa6 = (sockaddr_in6 *) node->ai_addr; + addr.setAddress(sa6->sin6_addr.s6_addr); + if (sa6->sin6_scope_id) + addr.setScopeId(QString::number(sa6->sin6_scope_id)); if (!addresses.contains(addr)) addresses.append(addr); } diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index fe28863..f6bfbac 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -352,10 +352,13 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &addr, quint16 memset(&sockAddrIPv6, 0, sizeof(sockAddrIPv6)); sockAddrIPv6.sin6_family = AF_INET6; sockAddrIPv6.sin6_port = htons(port); + + QString scopeid = addr.scopeId(); + bool ok; + sockAddrIPv6.sin6_scope_id = scopeid.toInt(&ok); #ifndef QT_NO_IPV6IFNAME - sockAddrIPv6.sin6_scope_id = ::if_nametoindex(addr.scopeId().toLatin1().data()); -#else - sockAddrIPv6.sin6_scope_id = addr.scopeId().toInt(); + if (!ok) + sockAddrIPv6.sin6_scope_id = ::if_nametoindex(scopeid.toLatin1()); #endif Q_IPV6ADDR ip6 = addr.toIPv6Address(); memcpy(&sockAddrIPv6.sin6_addr.s6_addr, &ip6, sizeof(ip6)); diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index 8177b4f..477ef45 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -207,6 +207,7 @@ static inline void qt_socket_setPortAndAddress(SOCKET socketDescriptor, sockaddr if (address.protocol() == QAbstractSocket::IPv6Protocol) { memset(sockAddrIPv6, 0, sizeof(qt_sockaddr_in6)); sockAddrIPv6->sin6_family = AF_INET6; + sockAddrIPv6->sin6_scope_id = address.scopeId().toInt(); WSAHtons(socketDescriptor, port, &(sockAddrIPv6->sin6_port)); Q_IPV6ADDR tmp = address.toIPv6Address(); memcpy(&(sockAddrIPv6->sin6_addr.qt_s6_addr), &tmp, sizeof(tmp)); -- cgit v0.12 From aa442648396e1367d6236801c5e1ad36884e4a81 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 12 Aug 2010 11:17:58 +0200 Subject: Introduce a second compatibility build key to Qt. Some compilers are compatible with one another. In particular, the Intel CC on Unix systems is compatible with g++ on the same system. We should be saving the ABI "name" in the build key, not the compiler name, but it's too late for that. Choose "g++-{VERSION}" as the standard ABI name and make ICC support that. Reviewed-by: Bradley T. Hughes --- configure | 32 ++++++++++++++++++++++++++++++++ src/corelib/global/qlibraryinfo.cpp | 8 ++++++++ src/corelib/plugin/qlibrary.cpp | 5 ++++- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 3230086..1221d62 100755 --- a/configure +++ b/configure @@ -7278,6 +7278,7 @@ fi # some compilers generate binary incompatible code between different versions, # so we need to generate a build key that is different between these compilers +COMPAT_COMPILER= case "$COMPILER" in g++*) # GNU C++ @@ -7311,6 +7312,22 @@ g++*) esac [ '!' -z "$COMPILER_VERSION" ] && COMPILER="g++-${COMPILER_VERSION}" ;; +icc*) + # The Intel CC compiler on Unix systems matches the ABI of the g++ + # that is found on PATH + COMPILER="icc" + COMPAT_COMPILER="g++-4" + case "`g++ -dumpversion` 2>/dev/null" in + 2.95.*) + COMPAT_COMPILER="g++-2.95.*" + ;; + 3.*) + COMPAT_COMPILER="g++-3.*" + ;; + *) + ;; + esac + ;; *) # ;; @@ -7453,9 +7470,20 @@ if [ "$QT_CROSS_COMPILE" = "no" ]; then QT_BUILD_KEY_COMPAT="$QT_BUILD_KEY_COMPAT $QT_NAMESPACE" fi fi + +# is this compiler compatible with some other "standard" build key +QT_BUILD_KEY_COMPAT_COMPILER= +if [ ! -z "$COMPAT_COMPILER" ]; then + QT_BUILD_KEY_COMPAT_COMPILER="$CFG_USER_BUILD_KEY $CFG_ARCH $TARGET_OPERATING_SYSTEM $COMPAT_COMPILER $BUILD_OPTIONS" + if [ -n "$QT_NAMESPACE" ]; then + QT_BUILD_KEY_COMPAT_COMPILER="$QT_BUILD_KEY_COMPAT_COMPILER $QT_NAMESPACE" + fi +fi + # strip out leading/trailing/extra whitespace QT_BUILD_KEY=`echo $QT_BUILD_KEY | sed -e "s, *, ,g" -e "s,^ *,," -e "s, *$,,"` QT_BUILD_KEY_COMPAT=`echo $QT_BUILD_KEY_COMPAT | sed -e "s, *, ,g" -e "s,^ *,," -e "s, *$,,"` +QT_BUILD_KEY_COMPAT_COMPILER=`echo $QT_BUILD_KEY_COMPAT_COMPILER | sed -e "s, *, ,g" -e "s,^ *,," -e "s, *$,,"` #------------------------------------------------------------------------------- # part of configuration information goes into qconfig.h @@ -7504,6 +7532,10 @@ if [ -n "$QT_BUILD_KEY_COMPAT" ]; then echo "#define QT_BUILD_KEY_COMPAT \"$QT_BUILD_KEY_COMPAT\"" \ >> "$outpath/src/corelib/global/qconfig.h.new" fi +if [ -n "$QT_BUILD_KEY_COMPAT_COMPILER" ]; then + echo "#define QT_BUILD_KEY_COMPAT2 \"$QT_BUILD_KEY_COMPAT_COMPILER\"" \ + >> "$outpath/src/corelib/global/qconfig.h.new" +fi echo "" >>"$outpath/src/corelib/global/qconfig.h.new" echo "#ifdef QT_BOOTSTRAPPED" >>"$outpath/src/corelib/global/qconfig.h.new" diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index ea7e2e4..7ebee3d 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -508,6 +508,14 @@ void qt_core_boilerplate() "Contact: Nokia Corporation (qt-info@nokia.com)\n" "\n" "Build key: " QT_BUILD_KEY "\n" + "Compat build key: " +#ifdef QT_BUILD_KEY_COMPAT + "| " QT_BUILD_KEY_COMPAT " " +#endif +#ifdef QT_BUILD_KEY_COMPAT2 + "| " QT_BUILD_KEY_COMPAT2 " " +#endif + "|\n" "Build date: %s\n" "Installation prefix: %s\n" "Library path: %s\n" diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 0f99948..a9ae2ab 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -790,10 +790,13 @@ bool QLibraryPrivate::isPlugin(QSettings *settings) .arg(qt_version&0xff) .arg(debug ? QLatin1String("debug") : QLatin1String("release")); } else if (key != QT_BUILD_KEY + // we may have some compatibility keys, try them too: #ifdef QT_BUILD_KEY_COMPAT - // be sure to load plugins using an older but compatible build key && key != QT_BUILD_KEY_COMPAT #endif +#ifdef QT_BUILD_KEY_COMPAT2 + && key != QT_BUILD_KEY_COMPAT2 +#endif ) { if (qt_debug_component()) { qWarning("In %s:\n" -- cgit v0.12 From b46f40ac8998a98122b3d85a9fed6bf9f094edd4 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 11 Aug 2010 20:30:18 +0200 Subject: linux-icc can take -msse2, -msse3, etc. flags, so enable this as well Otherwise, we actually get compilation errors because configure detected that the compiler supports this, so QT_HAVE_SSSE3 is defined, but we then compile qimage_ssse3.cpp without -mssse3 (Among others) Reviewed-By: Benjamin Poulain --- src/gui/gui.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 3943e26..13d2c77 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -99,7 +99,7 @@ neon:*-g++* { contains(QMAKE_MAC_XARCH, no) { DEFINES += QT_NO_MAC_XARCH } else { - win32-g++*|!win32:!*-icc* { + win32-g++*|!win32:!win32-icc*:!macx-icc* { mmx { mmx_compiler.commands = $$QMAKE_CXX -c -Winline -- cgit v0.12 From 8585a340712e901bfe8389c6b951ae7b548daeca Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Mon, 16 Aug 2010 13:12:45 +0200 Subject: Include the SSE4.2 intrinsics header Reviewed-By: Benjamin Poulain --- src/corelib/tools/qsimd_p.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h index a3148fb..2626657 100644 --- a/src/corelib/tools/qsimd_p.h +++ b/src/corelib/tools/qsimd_p.h @@ -85,6 +85,7 @@ QT_BEGIN_HEADER // SSE4.1 and SSE4.2 intrinsics #if (defined(QT_HAVE_SSE4_1) || defined(QT_HAVE_SSE4_2)) && (defined(__SSE4_1__) || defined(Q_CC_MSVC)) #include <smmintrin.h> +#include <nmmintrin.h> #endif // AVX intrinsics -- cgit v0.12 From cb9fa64c9ff61027e34c29fd8dd638f1237b41a7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 12 Aug 2010 11:17:13 +0200 Subject: Allow other compilers than GCC on Linux to have a boilerplate --- src/corelib/global/global.pri | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index b916b4d..2505e72 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -19,7 +19,7 @@ INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global # Only used on platforms with CONFIG += precompile_header PRECOMPILED_HEADER = global/qt_pch.h -linux*-g++*:!static { +linux*:!static { QMAKE_LFLAGS += -Wl,-e,qt_core_boilerplate prog=$$quote(if (/program interpreter: (.*)]/) { print $1; }) DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\" -- cgit v0.12 From 06080c767602715861ca4f1e7406d7834f52f30e Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 12 Aug 2010 21:11:18 +0200 Subject: Add some quick benchmarks for QChar comparison --- tests/benchmarks/corelib/tools/qstring/main.cpp | 143 +++++++++++++++++++++++- 1 file changed, 142 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 12826eb..ee7ce5c 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include <QStringList> #include <QFile> -#include <qtest.h> +#include <QtTest/QtTest> #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir @@ -48,12 +48,18 @@ #define SRCDIR "" #endif +#include <private/qsimd_p.h> + class tst_QString: public QObject { Q_OBJECT +public: + tst_QString(); private slots: void equals() const; void equals_data() const; + void equals2_data() const; + void equals2() const; void fromUtf8() const; }; @@ -67,6 +73,22 @@ void tst_QString::equals() const } } +static ushort databuffer[4096]; + +tst_QString::tst_QString() +{ + // populate databuffer with our seed, each byte 3 times in a row + // include the NUL! + static const char seed[] = "AAAAAAAAAEhlbGxvIFdvcmxkIAAAAAA="; + static const int repeat = 3; + int pos = 0; + for (ushort *p = databuffer; p < databuffer + (sizeof(databuffer) / sizeof(databuffer[0])); p += repeat) { + for (int j = 0; j < repeat; ++p, ++j) + *p = seed[pos]; + pos = (pos + 1) % sizeof(seed); + } +} + void tst_QString::equals_data() const { static const struct { @@ -126,6 +148,125 @@ void tst_QString::equals_data() const << QString::fromRawData(ptr + 1, 58) << QString::fromRawData(ptr + 3, 58); } +static bool equals2_memcmp_call(ushort *p1, ushort *p2, int len) +{ + return memcmp(p1, p2, len * 2) == 0; +} + +static bool equals2_bytewise(ushort *p1, ushort *p2, int len) +{ + uchar *b1 = (uchar *)p1; + uchar *b2 = (uchar *)p2; + len *= 2; + while (len--) + if (*b1++ != *b2++) + return false; + return true; +} + +static bool equals2_shortwise(ushort *p1, ushort *p2, int len) +{ + register ushort * const end = p1 + len; + for ( ; p1 != end; ++p1, ++p2) + if (*p1 != *p2) + return false; + return true; +} + +void tst_QString::equals2_data() const +{ + QTest::addColumn<int>("algorithm"); + QTest::newRow("selftest") << -1; + QTest::newRow("memcmp_call") << 0; + QTest::newRow("bytewise") << 1; + QTest::newRow("shortwise") << 2; +} + +void tst_QString::equals2() const +{ + static const short positions[] = { + 190, 1719, 2149, 1752, + 158, 244, 365, 1117, + 254, 265, 1047, 1785, + 1435, 552, 1476, 2030, + // 16 + 421, 1840, 2209, 232, + 1389, 907, 1500, 1479, + 1152, 541, 655, 1960, + 1642, 299, 740, 1995, + // 32 + 1946, 1407, 1272, 1946, + 1459, 1851, 1717, 1484, + 1761, 1630, 1377, 1675, + 629, 341, 661, 244 + // 48 + }; + // the length list must not contain 0 + static const int lens[] = { + 11, // 0 + 40, + 28, + 38, + 9, + 52, // 5 + 48, + 38, + 29, + 7, + 2, // 10 + 49, + 41, + 5, + 20, + 62 // 15 + }; + + typedef bool (* FuncPtr)(ushort *, ushort *, int); + static const FuncPtr func[] = { + equals2_memcmp_call, // 0 + equals2_bytewise, // 1 + equals2_shortwise, // 1 + 0 + }; + + QFETCH(int, algorithm); + if (algorithm == -1) { + for (uint pos1 = 0; pos1 < sizeof positions / sizeof positions[0]; ++pos1) + for (uint pos2 = 0; pos2 < (sizeof positions / sizeof positions[0]) - 32; ++pos2) + for (uint len = 0; len < sizeof lens / sizeof lens[0]; ++len) { + ushort *p1 = databuffer + positions[pos1]; + ushort *p2 = databuffer + positions[pos2]; + bool expected = memcmp(p1, p2, lens[len] * 2) == 0; + + for (uint algo = 0; algo < -1 + (sizeof func / sizeof func[0]); ++algo) { + bool result = (func[algo])(p1, p2, lens[len]); + if (expected != result) + qWarning().nospace() + << "algo=" << algo + << " pos1=" << positions[pos1] + << " pos2=" << positions[pos2] + << " len=" << lens[len] + << " failed (" << result << "!=" << expected + << "); strings were " + << QByteArray((char*)p1, lens[len]).toHex() + << " and " + << QByteArray((char*)p2, lens[len]).toHex(); + } + + } + return; + } + + QBENCHMARK { + for (uint pos1 = 0; pos1 < sizeof positions / sizeof positions[0]; ++pos1) + for (uint pos2 = 0; pos2 < (sizeof positions / sizeof positions[0]) - 32; ++pos2) + for (uint len = 0; len < sizeof lens / sizeof lens[0]; ++len) { + bool result = (func[algorithm])(databuffer + positions[pos1], databuffer + positions[pos2], lens[len]); + Q_UNUSED(result); + } + } +} + void tst_QString::fromUtf8() const { QFile file(SRCDIR "utf-8.txt"); -- cgit v0.12 From de76f8f32b84409a7053d5d95a3855b8590389e1 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 12 Aug 2010 21:12:22 +0200 Subject: Add a 4-byte comparison routine. This is a copy of qMemEquals from qstring.cpp --- tests/benchmarks/corelib/tools/qstring/main.cpp | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index ee7ce5c..9eb6294 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -173,6 +173,52 @@ static bool equals2_shortwise(ushort *p1, ushort *p2, int len) return true; } +static bool equals2_intwise(ushort *p1, ushort *p2, int length) +{ + register union { + const quint16 *w; + const quint32 *d; + quintptr value; + } sa, sb; + sa.w = p1; + sb.w = p2; + + // check alignment + if ((sa.value & 2) == (sb.value & 2)) { + // both addresses have the same alignment + if (sa.value & 2) { + // both addresses are not aligned to 4-bytes boundaries + // compare the first character + if (*sa.w != *sb.w) + return false; + --length; + ++sa.w; + ++sb.w; + + // now both addresses are 4-bytes aligned + } + + // both addresses are 4-bytes aligned + // do a fast 32-bit comparison + register const quint32 *e = sa.d + (length >> 1); + for ( ; sa.d != e; ++sa.d, ++sb.d) { + if (*sa.d != *sb.d) + return false; + } + + // do we have a tail? + return (length & 1) ? *sa.w == *sb.w : true; + } else { + // one of the addresses isn't 4-byte aligned but the other is + register const quint16 *e = sa.w + length; + for ( ; sa.w != e; ++sa.w, ++sb.w) { + if (*sa.w != *sb.w) + return false; + } + } + return true; +} + void tst_QString::equals2_data() const { QTest::addColumn<int>("algorithm"); @@ -180,6 +226,7 @@ void tst_QString::equals2_data() const QTest::newRow("memcmp_call") << 0; QTest::newRow("bytewise") << 1; QTest::newRow("shortwise") << 2; + QTest::newRow("intwise") << 3; } void tst_QString::equals2() const @@ -226,6 +273,7 @@ void tst_QString::equals2() const equals2_memcmp_call, // 0 equals2_bytewise, // 1 equals2_shortwise, // 1 + equals2_intwise, // 3 0 }; -- cgit v0.12 From d8ad0812c7fdc2684ce7f09cc13b69f567e82031 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 12 Aug 2010 21:14:00 +0200 Subject: Add a benchmark for SSE2 comparison. This function uses unaligned loads. I'll try to write one with aligned loads later. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 27 ++++++++++++++++++++++ tests/benchmarks/corelib/tools/qstring/qstring.pro | 1 + 2 files changed, 28 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 9eb6294..5210034 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -219,6 +219,27 @@ static bool equals2_intwise(ushort *p1, ushort *p2, int length) return true; } +#ifdef __SSE2__ +static bool equals2_sse2(ushort *p1, ushort *p2, int len) +{ + if (len > 8) { + while (len > 8) { + __m128i q1 = _mm_loadu_si128((__m128i *)p1); + __m128i q2 = _mm_loadu_si128((__m128i *)p2); + __m128i cmp = _mm_cmpeq_epi16(q1, q2); + if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) + return false; + + len -= 8; + p1 += 8; + p2 += 8; + } + } + + return equals2_shortwise(p1, p2, len); +} +#endif + void tst_QString::equals2_data() const { QTest::addColumn<int>("algorithm"); @@ -227,6 +248,9 @@ void tst_QString::equals2_data() const QTest::newRow("bytewise") << 1; QTest::newRow("shortwise") << 2; QTest::newRow("intwise") << 3; +#ifdef __SSE2__ + QTest::newRow("sse2") << 4; +#endif } void tst_QString::equals2() const @@ -274,6 +298,9 @@ void tst_QString::equals2() const equals2_bytewise, // 1 equals2_shortwise, // 1 equals2_intwise, // 3 +#ifdef __SSE2__ + equals2_sse2, // 4 +#endif 0 }; diff --git a/tests/benchmarks/corelib/tools/qstring/qstring.pro b/tests/benchmarks/corelib/tools/qstring/qstring.pro index fa4310e..388e3c2 100644 --- a/tests/benchmarks/corelib/tools/qstring/qstring.pro +++ b/tests/benchmarks/corelib/tools/qstring/qstring.pro @@ -14,3 +14,4 @@ wince*:{ DEFINES += SRCDIR=\\\"$$PWD/\\\" } +sse2:QMAKE_CXXFLAGS += -msse2 -- cgit v0.12 From 531a8f198c152e1135db103f22bab648a314926e Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 12 Aug 2010 21:18:49 +0200 Subject: Add an SSE2 comparison with prolog The prolog tries to align p1 to a multiple of 16, so as to run aligned loads, which are faster. Unfortunately, my tests so far indicate that the prolog ends up taking longer than the benefit of having aligned loads. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 5210034..4e5d1c0 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -238,6 +238,42 @@ static bool equals2_sse2(ushort *p1, ushort *p2, int len) return equals2_shortwise(p1, p2, len); } + +static inline +#ifdef Q_CC_GNU +__attribute__((always_inline)) +#endif +bool prolog_align(ushort *&p1, ushort *&p2, int &len) +{ + const ushort *end = (ushort*) ((quintptr(p1) + 15) & ~15); + if (end > p1 + len) + end = p1 + len; + for ( ; p1 != end; ++p1, ++p2, --len) + if (*p1 != *p2) + return false; + return true; +} + +static bool equals2_sse2_aligning(ushort *p1, ushort *p2, int len) +{ + if (len > 8) { + if (!prolog_align(p1, p2, len)) + return false; + while (len > 8) { + __m128i q1 = _mm_load_si128((__m128i *)p1); + __m128i q2 = _mm_loadu_si128((__m128i *)p2); + __m128i cmp = _mm_cmpeq_epi16(q1, q2); + if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) + return false; + + len -= 8; + p1 += 8; + p2 += 8; + } + } + + return equals2_shortwise(p1, p2, len); +} #endif void tst_QString::equals2_data() const @@ -250,6 +286,7 @@ void tst_QString::equals2_data() const QTest::newRow("intwise") << 3; #ifdef __SSE2__ QTest::newRow("sse2") << 4; + QTest::newRow("sse2_aligning") << 5; #endif } @@ -300,6 +337,7 @@ void tst_QString::equals2() const equals2_intwise, // 3 #ifdef __SSE2__ equals2_sse2, // 4 + equals2_sse2_aligning, // 5 #endif 0 }; -- cgit v0.12 From 7790cf5b2922a7adf684dc0b7cd0fc1583c0684a Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 12 Aug 2010 23:12:21 +0200 Subject: Add an SSSE3 version that uses palignr to align. Instead of using a non-SIMD method for aligning, we instead load more bytes from p1 and use the PALIGNR instruction to realign to what we want. The result is that it's bit slower than the non-SIMD comparison, due to the complexity. For strings over 8 QChars wide, it's only slightly worse than the non-SIMD comparison. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 110 +++++++++++++++++++++ tests/benchmarks/corelib/tools/qstring/qstring.pro | 3 +- 2 files changed, 112 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 4e5d1c0..e1800c0 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -274,6 +274,110 @@ static bool equals2_sse2_aligning(ushort *p1, ushort *p2, int len) return equals2_shortwise(p1, p2, len); } + +template<int N> static inline bool equals2_ssse3_alignr(__m128i *m1, __m128i *m2, int len) +{ + __m128i lower = _mm_load_si128(m1); + while (len > 8) { + __m128i upper = _mm_load_si128(m1 + 1); + __m128i correct; + correct = _mm_alignr_epi8(upper, lower, N); + + __m128i q2 = _mm_loadu_si128(m2); + __m128i cmp = _mm_cmpeq_epi16(correct, q2); + if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) + return false; + + len -= 8; + ++m2; + ++m1; + lower = upper; + } + + // tail + return len == 0 || equals2_shortwise((ushort *)m1 + N / 2, (ushort*)m2, len); +} + +static inline bool equals2_ssse3_aligned(__m128i *m1, __m128i *m2, int len) +{ + while (len > 8) { + __m128i q2 = _mm_loadu_si128(m2); + __m128i cmp = _mm_cmpeq_epi16(*m1, q2); + if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) + return false; + + len -= 8; + ++m1; + ++m2; + } + return len == 0 || equals2_shortwise((ushort *)m1, (ushort *)m2, len); +} + +//#ifdef __SSSE3__ +static bool equals2_ssse3(ushort *p1, ushort *p2, int len) +{ + // p1 & 0xf can be: + // 0, 2, 4, 6, 8, 10, 12, 14 + // If it's 0, we're aligned + // If it's not, then we're interested in the 16 - (p1 & 0xf) bytes only + + if (len > 8) { + // find the last aligned position below the p1 memory + __m128i *m1 = (__m128i *)(quintptr(p1) & ~0xf); + __m128i *m2 = (__m128i *)p2; + uchar diff = quintptr(p1) - quintptr(m1); + + // diff contains the number of extra bytes + if (diff < 8) { + if (diff < 4) { + if (diff == 0) + return equals2_ssse3_aligned(m1, m2, len); + else // diff == 2 + return equals2_ssse3_alignr<2>(m1, m2, len); + } else { + if (diff == 4) + return equals2_ssse3_alignr<4>(m1, m2, len); + else // diff == 6 + return equals2_ssse3_alignr<6>(m1, m2, len); + } + } else { + if (diff < 12) { + if (diff == 8) + return equals2_ssse3_alignr<8>(m1, m2, len); + else // diff == 10 + return equals2_ssse3_alignr<10>(m1, m2, len); + } else { + if (diff == 12) + return equals2_ssse3_alignr<12>(m1, m2, len); + else // diff == 14 + return equals2_ssse3_alignr<14>(m1, m2, len); + } + } + +// switch (diff) { +// case 0: +// return equals2_ssse3_aligned(m1, m2, len); +// case 2: +// return equals2_ssse3_alignr<2>(m1, m2, len); +// case 4: +// return equals2_ssse3_alignr<4>(m1, m2, len); +// case 6: +// return equals2_ssse3_alignr<6>(m1, m2, len); +// case 8: +// return equals2_ssse3_alignr<8>(m1, m2, len); +// case 10: +// return equals2_ssse3_alignr<10>(m1, m2, len); +// case 12: +// return equals2_ssse3_alignr<12>(m1, m2, len); +// case 14: +// return equals2_ssse3_alignr<14>(m1, m2, len); +// } + } + + // tail + return equals2_shortwise(p1, p2, len); +} +//#endif #endif void tst_QString::equals2_data() const @@ -287,6 +391,9 @@ void tst_QString::equals2_data() const #ifdef __SSE2__ QTest::newRow("sse2") << 4; QTest::newRow("sse2_aligning") << 5; +#ifdef __SSSE3__ + QTest::newRow("ssse3") << 6; +#endif #endif } @@ -338,6 +445,9 @@ void tst_QString::equals2() const #ifdef __SSE2__ equals2_sse2, // 4 equals2_sse2_aligning, // 5 +#ifdef __SSSE3__ + equals2_ssse3, // 6 +#endif #endif 0 }; diff --git a/tests/benchmarks/corelib/tools/qstring/qstring.pro b/tests/benchmarks/corelib/tools/qstring/qstring.pro index 388e3c2..bc6254c 100644 --- a/tests/benchmarks/corelib/tools/qstring/qstring.pro +++ b/tests/benchmarks/corelib/tools/qstring/qstring.pro @@ -14,4 +14,5 @@ wince*:{ DEFINES += SRCDIR=\\\"$$PWD/\\\" } -sse2:QMAKE_CXXFLAGS += -msse2 +ssse3:QMAKE_FLAGS += -mssse3 +else:sse2:QMAKE_CXXFLAGS += -msse2 -- cgit v0.12 From a9dae34157aeef00512bea49f11a8dd1895f676b Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 13 Aug 2010 00:59:27 +0200 Subject: Add an SSE4.2 version of the string comparison It's currently slightly worse than SSE2 with prolog aligning (i.e., it's no good) --- tests/benchmarks/corelib/tools/qstring/main.cpp | 41 ++++++++++++++++++++++ tests/benchmarks/corelib/tools/qstring/qstring.pro | 3 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index e1800c0..1c55f82 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -378,6 +378,41 @@ static bool equals2_ssse3(ushort *p1, ushort *p2, int len) return equals2_shortwise(p1, p2, len); } //#endif + +//#ifdef __SSE4_1__ +static bool equals2_sse4(ushort *p1, ushort *p2, int len) +{ + // We use the pcmpestrm instruction searching for differences (negative polarity) + // it will reset CF if it's all equal + // it will reset OF if the first char is equal + // it will set ZF & SF if the length is less than 8 (which means we've done the last operation) + // the three possible conditions are: + // difference found: CF = 1 + // all equal, not finished: CF = ZF = SF = 0 + // all equal, finished: CF = 0, ZF = SF = 1 + len += 8; + asm ( + "0:\n\t" + "movdqu (%[p1]), %%xmm0\n\t" // load 8 ushorts + "movdqu (%[p2]), %%xmm1\n\t" + "addl $16, %[p2]\n\t" + "addl $16, %[p1]\n\t" + "subl $8, %[len]\n\t" + "movl %[len], %%edx\n\t" + "pcmpestrm %[mode], %%xmm1, %%xmm0\n\t" + "ja 0b\n\t" + "1:\n\t" + "mov $0, %[len]\n\t" + "setnc %%al\n\t" + : [len] "+a" (len) + : [p1] "r" (p1), + [p2] "r" (p2), + [mode] "K" (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY | _SIDD_UNIT_MASK) + : "%edx", "%xmm0", "%xmm1" + ); + return len; +} +//#endif #endif void tst_QString::equals2_data() const @@ -393,6 +428,9 @@ void tst_QString::equals2_data() const QTest::newRow("sse2_aligning") << 5; #ifdef __SSSE3__ QTest::newRow("ssse3") << 6; +#ifdef __SSE4_1__ + QTest::newRow("sse4.2") << 7; +#endif #endif #endif } @@ -447,6 +485,9 @@ void tst_QString::equals2() const equals2_sse2_aligning, // 5 #ifdef __SSSE3__ equals2_ssse3, // 6 +#ifdef __SSE4_1__ + equals2_sse4, // 7 +#endif #endif #endif 0 diff --git a/tests/benchmarks/corelib/tools/qstring/qstring.pro b/tests/benchmarks/corelib/tools/qstring/qstring.pro index bc6254c..44fb46b 100644 --- a/tests/benchmarks/corelib/tools/qstring/qstring.pro +++ b/tests/benchmarks/corelib/tools/qstring/qstring.pro @@ -14,5 +14,6 @@ wince*:{ DEFINES += SRCDIR=\\\"$$PWD/\\\" } -ssse3:QMAKE_FLAGS += -mssse3 +sse4:QMAKE_CXXFLAGS += -msse4 +else:ssse3:QMAKE_FLAGS += -mssse3 else:sse2:QMAKE_CXXFLAGS += -msse2 -- cgit v0.12 From ca9d0f597fe6212aa89fa2d6d45b27bae147d195 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 13 Aug 2010 01:37:47 +0200 Subject: Slightly better version that saves EBX in an XMM register --- tests/benchmarks/corelib/tools/qstring/main.cpp | 35 ++++++++++++++----------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 1c55f82..fb65f65 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -390,27 +390,32 @@ static bool equals2_sse4(ushort *p1, ushort *p2, int len) // difference found: CF = 1 // all equal, not finished: CF = ZF = SF = 0 // all equal, finished: CF = 0, ZF = SF = 1 - len += 8; + bool result; asm ( + "movd %%ebx, %%xmm1\n\t" + "sub %[p1], %[p2]\n\t" + "mov %[p1], %%ebx\n\t" + "sub $16, %%ebx\n\t" + "add $8, %[len]\n\t" "0:\n\t" - "movdqu (%[p1]), %%xmm0\n\t" // load 8 ushorts - "movdqu (%[p2]), %%xmm1\n\t" - "addl $16, %[p2]\n\t" - "addl $16, %[p1]\n\t" - "subl $8, %[len]\n\t" - "movl %[len], %%edx\n\t" - "pcmpestrm %[mode], %%xmm1, %%xmm0\n\t" + "add $16, %%ebx\n\t" + "sub $8, %[len]\n\t" + "movdqu (%%ebx), %%xmm0\n\t" + "mov %[len], %%edx\n\t" + "pcmpestrm %[mode], (%[p2],%%ebx), %%xmm0\n\t" "ja 0b\n\t" - "1:\n\t" - "mov $0, %[len]\n\t" + "1:\n\t" + "mov $0, %%eax\n\t" "setnc %%al\n\t" - : [len] "+a" (len) - : [p1] "r" (p1), + "movd %%xmm1, %%ebx\n\t" + : [result] "=a" (result) + : [len] "0" (len), + [p1] "d" (p1), [p2] "r" (p2), - [mode] "K" (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY | _SIDD_UNIT_MASK) - : "%edx", "%xmm0", "%xmm1" + [mode] "K" (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY) + : "%xmm0", "%xmm1" ); - return len; + return result; } //#endif #endif -- cgit v0.12 From 64a6ce5fb031f151994f77b9d9abea52bb9e00d3 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 17 Aug 2010 20:20:28 +0200 Subject: Add a script to generate real-world data from applications --- .../corelib/tools/qstring/generatelist.pl | 200 +++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 tests/benchmarks/corelib/tools/qstring/generatelist.pl diff --git a/tests/benchmarks/corelib/tools/qstring/generatelist.pl b/tests/benchmarks/corelib/tools/qstring/generatelist.pl new file mode 100644 index 0000000..ed4c8eb --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstring/generatelist.pl @@ -0,0 +1,200 @@ +#!/usr/bin/perl +## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is part of the QtCore module of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +# +# Parses a file (passed as argument) that contains a dump of pairs of +# strings and generates C source code including said data. +# +# The format of the file is: +# LEN = <len> <keyword> <align1> <align2>\n<data1><data2>\n +# where: +# LEN the literal string "LEN" +# <len> the length of the data, in 16-bit words +# <keyword> the literal string "SAME" or "DIFF" +# <align1> the alignment or pointer value of the first data +# <align2> the alignment or pointer value of the second data +# <data1> the first data +# <data2> the second data +# \n newline +# +# The C code to write this data would be: +# fprintf(out, "LEN = %d %s %d %d\n", len, +# (p1 == p2) : "SAME" : "DIFF", +# (int)p1 & 0xfff, (int)p2 & 0xfff); +# fwrite(p1, 2, len, out); +# fwrite(p2, 2, len, out); +# fwrite("\n", 1, 1, out); + +sub printUshortArray($$$) { + $str = $_[0]; + $align = $_[1] & 0x1f; + $offset = $_[2]; + + die if ($align & 1) != 0; + $align /= 2; + + $len = (length $str) / 2; + $headpadding = $align & 0x7; + $tailpadding = 8 - (($len + $headpadding) & 0x7); + $multiplecachelines = ($align + $len) > 0x20; + + if ($multiplecachelines) { + # if this string crosses into a new cacheline, then + # replicate the result + $headpadding |= ($offset & ~0x1f); + $headpadding += 0x20 + if ($headpadding < $offset); + $headpadding -= $offset; + ++$cachelinecrosses; + } + for $i (1..$headpadding) { + print 65536-$i,","; + } + print "\n " if ($headpadding > 0); + print " " if ($headpadding == 0); + + for ($i = 0; $i < $len * 2; $i += 2) { + print " ", ord(substr($str, $i, 1)) + + ord(substr($str, $i + 1, 1)) * 256, + ","; + } + print "\n " if ($tailpadding > 0); + + for $i (1..$tailpadding) { + print 65536-$i, ","; + } + print " // ", $offset + $headpadding + $len + $tailpadding; + print "+" if $multiplecachelines; + + return ($offset + $headpadding, $offset + $headpadding + $len + $tailpadding); +} + +print "static const ushort stringCollectionData[] __attribute__((aligned(16))) = { \n"; +$count = 0; +$offset = 0; +$totalsize = 0; +$maxlen = 0; +$cachelinecrosses = 0; + +open IN, "<" . $ARGV[0]; +while (1) { + $line = readline(*IN); + last unless defined($line); + $line =~ /LEN = (\d+) (\w+) (\d+) (\d+)/; + $len = $1; + $data[$count]->{len} = $len; + $sameptr = $2; + $data[$count]->{align1} = $3 - 0; + $data[$count]->{align2} = $4 - 0; + + # statistics + $alignhistogram{$3 & 0xf}++; + $alignhistogram{$4 & 0xf}++; + $samealignments{$3 & 0xf}++ if ($3 & 0xf) == ($4 & 0xf); + + read IN, $a, $len * 2; + read IN, $b, $len * 2; + + <IN>; # Eat the newline + + if ($len == 0) { + $data[$count]->{offset1} = $offset; + $data[$count]->{offset2} = $data[$count]->{offset1}; + ++$data[$count]->{offset2} if ($sameptr eq "DIFF"); + } else { + print " // #$count\n"; + print " "; + ($data[$count]->{offset1}, $offset) = + printUshortArray($a, $data[$count]->{align1}, $offset); + print "\n "; + die if ($offset & 0x7) != 0; + + if ($sameptr eq "DIFF") { + ($data[$count]->{offset2}, $offset) = + printUshortArray($b, $data[$count]->{align2}, $offset); + print "\n\n"; + } else { + $data[$count]->{offset2} = $data[$count]->{offset1}; + print "\n\n"; + } + } + ++$count; + + $totalsize += $len; + $maxlen = $len if $len > $maxlen; +} +print "\n};\n"; +close IN; + +print "static struct StringCollection\n"; +print "{\n"; +print " int len;\n"; +print " int offset1, offset2;\n"; +print " ushort align1, align2;\n"; +print "} stringCollection[] = {\n"; + +for $i (0..$count-1) { + print " {", + $data[$i]->{len}, ", ", + $data[$i]->{offset1}, ", ", + $data[$i]->{offset2}, ", ", + $data[$i]->{align1}, ", ", + $data[$i]->{align2}, + "}, // #$i\n"; + next if $data[$i]->{len} == 0; + die if (($data[$i]->{offset1} & 0x7) != ($data[$i]->{align1} & 0xf)/2); + die if (($data[$i]->{offset2} & 0x7) != ($data[$i]->{align2} & 0xf)/2); +} +print "};\n"; + +print "static const int stringCollectionCount = $count;\n"; +print "static const int stringCollectionMaxLen = $maxlen;\n"; +printf "// average comparison length: %.4f\n", ($totalsize * 1.0 / $count); +printf "// cache-line crosses: %d (%.1f%%)\n", + $cachelinecrosses, ($cachelinecrosses * 100.0 / $count / 2); + +print "// alignment histogram:\n"; +for $key (sort { $a <=> $b } keys(%alignhistogram)) { + $value = $alignhistogram{$key}; + $samealigned = $samealignments{$key}; + printf "// 0xXXX%x = %d (%.1f%%) strings, %d (%.1f%%) of which same-aligned\n", + $key, $value, $value * 100.0 / ($count*2), + $samealigned, $samealigned * 100.0 / $value; + $samealignedtotal += $samealigned; +} +printf "// total = %d (100%) strings, %d (%.1f%%) of which same-aligned\n", + $count * 2, $samealignedtotal, $samealignedtotal * 100 / $count / 2; -- cgit v0.12 From c58293407519e7413cb6493f831ef69cf2323030 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 17 Aug 2010 20:32:27 +0200 Subject: Major improvements to the comparison functions. Also use the real-world data that I collected. The resulting files are quite large, so I've added to Git only the smallest dump (apparently Teambuilder scanning the environment for "TEAMBUILDER="). --- tests/benchmarks/corelib/tools/qstring/data.cpp | 1283 +++++++++++++++++++++++ tests/benchmarks/corelib/tools/qstring/main.cpp | 675 ++++++++---- 2 files changed, 1770 insertions(+), 188 deletions(-) create mode 100644 tests/benchmarks/corelib/tools/qstring/data.cpp diff --git a/tests/benchmarks/corelib/tools/qstring/data.cpp b/tests/benchmarks/corelib/tools/qstring/data.cpp new file mode 100644 index 0000000..89f50d0 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstring/data.cpp @@ -0,0 +1,1283 @@ +static const ushort stringCollectionData[] __attribute__((aligned(16))) = { + // #0 + 65535, + 99, 111, 109, 112, 105, 108, 101, 114, 32, 118, 101, 114, 115, 105, 111, 110, 115, 47, + 65535,65534,65533,65532,65531, // 24 + 65535,65534,65533,65532,65531, + 99, 111, 109, 112, 105, 108, 101, 114, 32, 118, 101, 114, 115, 105, 111, 110, 115, 47, + 65535, // 48 + + // #1 + 65535,65534,65533,65532,65531, + 99, 111, 109, 112, 105, 108, 101, 114, 32, 118, 101, 114, 115, 105, 111, 110, 115, 47, + 65535, // 72 + 65535,65534,65533,65532,65531, + 67, 111, 109, 112, 105, 108, 101, 114, 32, 86, 101, 114, 115, 105, 111, 110, 115, 47, + 65535, // 96 + + // #2 + 65535, + 99, 111, 109, 112, 105, 108, 101, 114, 32, 116, 105, 109, 101, 115, 116, 97, 109, 112, 115, 47, + 65535,65534,65533, // 120 + 65535,65534,65533,65532,65531, + 99, 111, 109, 112, 105, 108, 101, 114, 32, 116, 105, 109, 101, 115, 116, 97, 109, 112, 115, 47, + 65535,65534,65533,65532,65531,65530,65529, // 152 + + // #3 + 65535,65534,65533,65532,65531, + 99, 111, 109, 112, 105, 108, 101, 114, 32, 116, 105, 109, 101, 115, 116, 97, 109, 112, 115, 47, + 65535,65534,65533,65532,65531,65530,65529, // 184 + 65535, + 67, 111, 109, 112, 105, 108, 101, 114, 32, 84, 105, 109, 101, 115, 116, 97, 109, 112, 115, 47, + 65535,65534,65533, // 208 + + // #4 + 65535,65534,65533,65532,65531,65530,65529,65528,65527,65526,65525,65524,65523,65522,65521,65520,65519, + 47, 118, 97, 114, 47, 116, 109, 112, 47, 116, 101, 97, 109, 98, 117, 105, 108, 100, 101, 114, 45, 116, 109, 97, 99, 105, 101, 105, 114, 47, 99, 108, 105, 101, 110, 116, 47, 99, 111, 109, 112, 105, 108, 101, 114, 115, 46, 99, 111, 110, 102, + 65535,65534,65533,65532, // 280+ + + + // #5 + 65535,65534,65533,65532,65531,65530,65529,65528,65527,65526,65525,65524,65523, + 47, 118, 97, 114, 47, 116, 109, 112, 47, 116, 101, 97, 109, 98, 117, 105, 108, 100, 101, 114, 45, 116, 109, 97, 99, 105, 101, 105, 114, 47, 99, 108, 105, 101, 110, 116, 47, 99, 111, 109, 112, 105, 108, 101, 114, 115, 46, 99, 111, 110, 102, + 65535,65534,65533,65532,65531,65530,65529,65528, // 352+ + 65535, + 47, 118, 97, 114, 47, 116, 109, 112, 47, 116, 101, 97, 109, 98, 117, 105, 108, 100, 101, 114, 45, 116, 109, 97, 99, 105, 101, 105, 114, 47, 99, 108, 105, 101, 110, 116, 47, 99, 111, 109, 112, 105, 108, 101, 114, 115, 46, 99, 111, 110, 102, + 65535,65534,65533,65532, // 408+ + + // #6 + 65535,65534,65533,65532,65531,65530,65529,65528,65527, + 47, 118, 97, 114, 47, 116, 109, 112, 47, 116, 101, 97, 109, 98, 117, 105, 108, 100, 101, 114, 45, 116, 109, 97, 99, 105, 101, 105, 114, 47, 99, 108, 105, 101, 110, 116, 47, 99, 111, 109, 112, 105, 108, 101, 114, 115, 46, 99, 111, 110, 102, + 65535,65534,65533,65532, // 472+ + + + // #7 + 65535, + 97, 114, 99, 104, 105, 118, 101, 100, 32, 99, 111, 109, 112, 105, 108, 101, 114, 115, 47, + 65535,65534,65533,65532, // 496 + 65535,65534,65533,65532,65531, + 97, 114, 99, 104, 105, 118, 101, 100, 32, 99, 111, 109, 112, 105, 108, 101, 114, 115, 47, + 65535,65534,65533,65532,65531,65530,65529,65528, // 528 + + // #8 + 65535,65534,65533,65532,65531, + 97, 114, 99, 104, 105, 118, 101, 100, 32, 99, 111, 109, 112, 105, 108, 101, 114, 115, 47, + 65535,65534,65533,65532,65531,65530,65529,65528, // 560 + 65535,65534,65533,65532,65531, + 65, 114, 99, 104, 105, 118, 101, 100, 32, 67, 111, 109, 112, 105, 108, 101, 114, 115, 47, + 65535,65534,65533,65532,65531,65530,65529,65528, // 592 + + // #9 + 65535,65534,65533,65532,65531,65530,65529,65528,65527,65526,65525,65524,65523,65522,65521,65520,65519, + 47, 118, 97, 114, 47, 116, 109, 112, 47, 116, 101, 97, 109, 98, 117, 105, 108, 100, 101, 114, 45, 116, 109, 97, 99, 105, 101, 105, 114, 47, 99, 108, 105, 101, 110, 116, 47, 99, 111, 109, 112, 105, 108, 101, 114, 115, 46, 99, 111, 110, 102, + 65535,65534,65533,65532, // 664+ + 65535,65534,65533,65532,65531,65530,65529,65528,65527,65526,65525,65524,65523, + 47, 118, 97, 114, 47, 116, 109, 112, 47, 116, 101, 97, 109, 98, 117, 105, 108, 100, 101, 114, 45, 116, 109, 97, 99, 105, 101, 105, 114, 47, 99, 108, 105, 101, 110, 116, 47, 99, 111, 109, 112, 105, 108, 101, 114, 115, 46, 99, 111, 110, 102, + 65535,65534,65533,65532,65531,65530,65529,65528, // 736+ + + // #10 + 65535,65534,65533,65532,65531, + 76, 105, 110, 117, 120, + 65535,65534,65533,65532,65531,65530, // 752 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 760 + + // #11 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 776 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 792 + + // #12 + 65535, + 105, 99, 99, + 65535,65534,65533,65532, // 800 + 65535,65534,65533,65532,65531, + 103, 43, 43, + 65535,65534,65533,65532,65531,65530,65529,65528, // 816 + + // #13 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 824 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 832 + + // #14 + 65535, + 105, 51, 56, 54, + 65535,65534,65533, // 840 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 856 + + // #15 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 864 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 872 + + // #16 + 65535, + 105, 51, 56, 54, + 65535,65534,65533, // 880 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 896 + + // #17 + 65535, + 103, 99, 99, + 65535,65534,65533,65532, // 904 + 65535,65534,65533,65532,65531, + 103, 43, 43, + 65535,65534,65533,65532,65531,65530,65529,65528, // 920 + + // #18 + 65535,65534,65533,65532,65531, + 76, 105, 110, 117, 120, + 65535,65534,65533,65532,65531,65530, // 936 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 944 + + // #19 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 960 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 976 + + // #20 + 65535, + 103, 43, 43, + 65535,65534,65533,65532, // 984 + 65535,65534,65533,65532,65531, + 103, 43, 43, + 65535,65534,65533,65532,65531,65530,65529,65528, // 1000 + + // #21 + 65535,65534,65533,65532,65531, + 52, 46, 52, 46, 51, + 65535,65534,65533,65532,65531,65530, // 1016 + 65535,65534,65533,65532,65531, + 52, 46, 52, 46, 51, + 65535,65534,65533,65532,65531,65530, // 1032 + + // #22 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1040 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1048 + + // #23 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1064 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1080 + + // #24 + 65535, + 47, 117, 115, 114, 47, 98, 105, 110, 47, 103, 43, 43, + 65535,65534,65533, // 1096 + 65535, + 47, 117, 115, 114, 47, 98, 105, 110, 47, 103, 43, 43, + 65535,65534,65533, // 1112 + + // #25 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1120 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1128 + + // #26 + 65535, + 105, 51, 56, 54, + 65535,65534,65533, // 1136 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1152 + + // #27 + 65535, + 105, 99, 99, + 65535,65534,65533,65532, // 1160 + 65535,65534,65533,65532,65531, + 103, 43, 43, + 65535,65534,65533,65532,65531,65530,65529,65528, // 1176 + + // #28 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1184 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1192 + + // #29 + 65535, + 105, 51, 56, 54, + 65535,65534,65533, // 1200 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1216 + + // #30 + 65535,65534,65533,65532,65531, + 76, 105, 110, 117, 120, + 65535,65534,65533,65532,65531,65530, // 1232 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1240 + + // #31 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1256 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1272 + + // #32 + 65535,65534,65533,65532,65531, + 76, 105, 110, 117, 120, + 65535,65534,65533,65532,65531,65530, // 1288 + 65535, + 76, 105, 110, 117, 120, + 65535,65534, // 1296 + + // #33 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1312 + 65535,65534,65533,65532,65531, + 105, 51, 56, 54, + 65535,65534,65533,65532,65531,65530,65529, // 1328 + + // #34 + 65535, + 45, 109, 97, 114, 99, 104, 61, 99, 111, 114, 101, 50, + 65535,65534,65533, // 1344 + 65535, + 116, 98, 51, 54, 57, 54, 56, 95, 50, 46, 105, 105, + 65535,65534,65533, // 1360 + + // #35 + 65535,65534,65533,65532,65531, + 45, 102, 108, 111, 111, 112, 45, 98, 108, 111, 99, 107, + 65535,65534,65533,65532,65531,65530,65529, // 1384 + 65535, + 116, 98, 51, 54, 57, 54, 56, 95, 50, 46, 105, 105, + 65535,65534,65533, // 1400 + + // #36 + 65535,65534,65533,65532,65531, + 116, 98, 51, 54, 57, 54, 56, 95, 50, 46, 105, 105, + 65535,65534,65533,65532,65531,65530,65529, // 1424 + 65535, + 116, 98, 51, 54, 57, 54, 56, 95, 50, 46, 105, 105, + 65535,65534,65533, // 1440 + + // #37 + 65535,65534,65533,65532,65531, + 45, 109, 115, 115, 101, 52, + 65535,65534,65533,65532,65531, // 1456 + 65535,65534,65533,65532,65531, + 108, 101, 110, 103, 116, 104, + 65535,65534,65533,65532,65531, // 1472 + + // #38 + 65535,65534,65533,65532,65531, + 116, 98, 51, 54, 57, 54, 56, 95, 49, 46, 111, + 65535,65534,65533,65532,65531,65530,65529,65528, // 1496 + 65535,65534,65533,65532,65531, + 116, 98, 51, 54, 57, 54, 56, 95, 49, 46, 111, + 65535,65534,65533,65532,65531,65530,65529,65528, // 1520 + + // #39 + 65535,65534,65533,65532,65531, + 68, 69, 83, 75, 84, 79, 80, 95, 83, 69, 83, 83, + 65535,65534,65533,65532,65531,65530,65529, // 1544 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1560 + + // #40 + 65535,65534,65533,65532,65531, + 76, 67, 95, 83, 79, 85, 82, 67, 69, 68, 61, 49, + 65535,65534,65533,65532,65531,65530,65529, // 1584 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1600 + + // #41 + 65535,65534,65533,65532,65531, + 81, 84, 68, 73, 82, 61, 47, 104, 111, 109, 101, 47, + 65535,65534,65533,65532,65531,65530,65529, // 1624 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1640 + + // #42 + 65535, + 76, 67, 95, 67, 84, 89, 80, 69, 61, 112, 116, 95, + 65535,65534,65533, // 1656 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1672 + + // #43 + 65535, + 71, 84, 75, 95, 82, 67, 95, 70, 73, 76, 69, 83, + 65535,65534,65533, // 1688 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1704 + + // #44 + 65535, + 88, 77, 79, 68, 73, 70, 73, 69, 82, 83, 61, 64, + 65535,65534,65533, // 1720 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1736 + + // #45 + 65535, + 83, 72, 69, 76, 76, 61, 47, 98, 105, 110, 47, 122, + 65535,65534,65533, // 1752 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1768 + + // #46 + 65535,65534,65533,65532,65531, + 85, 61, 64, 123, 117, 112, 115, 116, 114, 101, 97, 109, + 65535,65534,65533,65532,65531,65530,65529, // 1792 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1808 + + // #47 + 65535, + 95, 61, 47, 117, 115, 114, 47, 98, 105, 110, 47, 105, + 65535,65534,65533, // 1824 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1840 + + // #48 + 65535, + 88, 68, 71, 95, 67, 79, 78, 70, 73, 71, 95, 68, + 65535,65534,65533, // 1856 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1872 + + // #49 + 65535,65534,65533,65532,65531, + 83, 65, 86, 69, 72, 73, 83, 84, 61, 49, 48, 48, + 65535,65534,65533,65532,65531,65530,65529, // 1896 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1912 + + // #50 + 65535, + 75, 68, 69, 95, 77, 85, 76, 84, 73, 72, 69, 65, + 65535,65534,65533, // 1928 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1944 + + // #51 + 65535,65534,65533,65532,65531, + 77, 65, 76, 76, 79, 67, 95, 67, 72, 69, 67, 75, + 65535,65534,65533,65532,65531,65530,65529, // 1968 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 1984 + + // #52 + 65535,65534,65533,65532,65531, + 72, 73, 83, 84, 67, 79, 78, 84, 82, 79, 76, 61, + 65535,65534,65533,65532,65531,65530,65529, // 2008 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2024 + + // #53 + 65535,65534,65533,65532,65531, + 88, 68, 71, 95, 68, 65, 84, 65, 95, 68, 73, 82, + 65535,65534,65533,65532,65531,65530,65529, // 2048 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2064 + + // #54 + 65535,65534,65533,65532,65531, + 88, 68, 77, 95, 77, 65, 78, 65, 71, 69, 68, 61, + 65535,65534,65533,65532,65531,65530,65529, // 2088 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2104 + + // #55 + 65535, + 76, 67, 95, 67, 79, 76, 76, 65, 84, 69, 61, 112, + 65535,65534,65533, // 2120 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2136 + + // #56 + 65535, + 81, 84, 95, 80, 76, 85, 71, 73, 78, 95, 80, 65, + 65535,65534,65533, // 2152 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2168 + + // #57 + 65535, + 83, 67, 82, 69, 69, 78, 68, 73, 82, 61, 47, 104, + 65535,65534,65533, // 2184 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2200 + + // #58 + 65535,65534,65533,65532,65531, + 76, 69, 83, 83, 79, 80, 69, 78, 61, 124, 47, 117, + 65535,65534,65533,65532,65531,65530,65529, // 2224 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2240 + + // #59 + 65535, + 76, 67, 95, 78, 65, 77, 69, 61, 110, 98, 95, 78, + 65535,65534,65533, // 2256 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2272 + + // #60 + 65535,65534,65533,65532,65531, + 80, 52, 67, 76, 73, 69, 78, 84, 61, 116, 109, 97, + 65535,65534,65533,65532,65531,65530,65529, // 2296 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2312 + + // #61 + 65535, + 80, 65, 84, 72, 61, 47, 104, 111, 109, 101, 47, 116, + 65535,65534,65533, // 2328 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2344 + + // #62 + 65535,65534,65533,65532,65531, + 71, 80, 71, 95, 65, 71, 69, 78, 84, 95, 73, 78, + 65535,65534,65533,65532,65531,65530,65529, // 2368 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2384 + + // #63 + 65535,65534,65533,65532,65531, + 88, 67, 85, 82, 83, 79, 82, 95, 84, 72, 69, 77, + 65535,65534,65533,65532,65531,65530,65529, // 2408 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2424 + + // #64 + 65535,65534,65533,65532,65531, + 83, 69, 83, 83, 73, 79, 78, 95, 77, 65, 78, 65, + 65535,65534,65533,65532,65531,65530,65529, // 2448 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2464 + + // #65 + 65535, + 81, 84, 83, 82, 67, 68, 73, 82, 61, 47, 104, 111, + 65535,65534,65533, // 2480 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2496 + + // #66 + 65535,65534,65533,65532,65531, + 87, 73, 78, 68, 79, 87, 73, 68, 61, 52, 54, 49, + 65535,65534,65533,65532,65531,65530,65529, // 2520 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2536 + + // #67 + 65535,65534,65533,65532,65531, + 76, 67, 95, 77, 69, 83, 83, 65, 71, 69, 83, 61, + 65535,65534,65533,65532,65531,65530,65529, // 2560 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2576 + + // #68 + 65535, + 76, 67, 95, 78, 85, 77, 69, 82, 73, 67, 61, 110, + 65535,65534,65533, // 2592 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2608 + + // #69 + 65535, + 71, 84, 75, 50, 95, 82, 67, 95, 70, 73, 76, 69, + 65535,65534,65533, // 2624 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2640 + + // #70 + 65535, + 80, 82, 79, 70, 73, 76, 69, 72, 79, 77, 69, 61, + 65535,65534,65533, // 2656 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2672 + + // #71 + 65535,65534,65533,65532,65531, + 68, 77, 95, 67, 79, 78, 84, 82, 79, 76, 61, 47, + 65535,65534,65533,65532,65531,65530,65529, // 2696 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2712 + + // #72 + 65535, + 76, 83, 95, 67, 79, 76, 79, 82, 83, 61, 114, 115, + 65535,65534,65533, // 2728 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2744 + + // #73 + 65535,65534,65533,65532,65531, + 83, 83, 72, 95, 65, 85, 84, 72, 95, 83, 79, 67, + 65535,65534,65533,65532,65531,65530,65529, // 2768 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2784 + + // #74 + 65535,65534,65533,65532,65531, + 75, 68, 69, 68, 73, 82, 83, 61, 47, 104, 111, 109, + 65535,65534,65533,65532,65531,65530,65529, // 2808 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2824 + + // #75 + 65535,65534,65533,65532,65531, + 76, 68, 95, 80, 82, 69, 76, 79, 65, 68, 61, 47, + 65535,65534,65533,65532,65531,65530,65529, // 2848 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2864 + + // #76 + 65535,65534,65533,65532,65531, + 88, 67, 85, 82, 83, 79, 82, 95, 80, 65, 84, 72, + 65535,65534,65533,65532,65531,65530,65529, // 2888 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2904 + + // #77 + 65535, + 115, 114, 99, 100, 105, 114, 61, 47, 104, 111, 109, 101, + 65535,65534,65533, // 2920 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2936 + + // #78 + 65535,65534,65533,65532,65531, + 72, 79, 77, 69, 61, 47, 104, 111, 109, 101, 47, 116, + 65535,65534,65533,65532,65531,65530,65529, // 2960 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 2976 + + // #79 + 65535, + 81, 84, 52, 68, 79, 67, 68, 73, 82, 61, 47, 117, + 65535,65534,65533, // 2992 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3008 + + // #80 + 65535,65534,65533,65532,65531, + 80, 87, 68, 61, 47, 104, 111, 109, 101, 47, 116, 109, + 65535,65534,65533,65532,65531,65530,65529, // 3032 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3048 + + // #81 + 65535,65534,65533,65532,65531, + 75, 68, 69, 95, 83, 69, 83, 83, 73, 79, 78, 95, + 65535,65534,65533,65532,65531,65530,65529, // 3072 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3088 + + // #82 + 65535, + 73, 78, 83, 73, 68, 69, 95, 83, 80, 69, 67, 73, + 65535,65534,65533, // 3104 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3120 + + // #83 + 65535, + 83, 83, 72, 95, 65, 71, 69, 78, 84, 95, 80, 73, + 65535,65534,65533, // 3136 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3152 + + // #84 + 65535, + 80, 75, 71, 95, 67, 79, 78, 70, 73, 71, 95, 80, + 65535,65534,65533, // 3168 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3184 + + // #85 + 65535,65534,65533,65532,65531, + 68, 66, 85, 83, 95, 83, 69, 83, 83, 73, 79, 78, + 65535,65534,65533,65532,65531,65530,65529, // 3208 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3224 + + // #86 + 65535, + 76, 68, 95, 76, 73, 66, 82, 65, 82, 89, 95, 80, + 65535,65534,65533, // 3240 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3256 + + // #87 + 65535,65534,65533,65532,65531, + 80, 52, 85, 83, 69, 82, 61, 116, 106, 109, 97, 99, + 65535,65534,65533,65532,65531,65530,65529, // 3280 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3296 + + // #88 + 65535,65534,65533,65532,65531, + 81, 84, 69, 83, 84, 95, 67, 79, 76, 79, 82, 69, + 65535,65534,65533,65532,65531,65530,65529, // 3320 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3336 + + // #89 + 65535,65534,65533,65532,65531, + 88, 68, 71, 95, 83, 69, 83, 83, 73, 79, 78, 95, + 65535,65534,65533,65532,65531,65530,65529, // 3360 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3376 + + // #90 + 65535,65534,65533,65532,65531, + 76, 69, 83, 83, 75, 69, 89, 61, 47, 101, 116, 99, + 65535,65534,65533,65532,65531,65530,65529, // 3400 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3416 + + // #91 + 65535, + 76, 79, 71, 78, 65, 77, 69, 61, 116, 109, 97, 99, + 65535,65534,65533, // 3432 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3448 + + // #92 + 65535, + 71, 95, 70, 73, 76, 69, 78, 65, 77, 69, 95, 69, + 65535,65534,65533, // 3464 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3480 + + // #93 + 65535, + 75, 68, 69, 95, 70, 85, 76, 76, 95, 83, 69, 83, + 65535,65534,65533, // 3496 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3512 + + // #94 + 65535,65534,65533,65532,65531, + 72, 79, 83, 84, 78, 65, 77, 69, 61, 108, 111, 116, + 65535,65534,65533,65532,65531,65530,65529, // 3536 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3552 + + // #95 + 65535,65534,65533,65532,65531, + 76, 67, 95, 84, 73, 77, 69, 61, 112, 116, 95, 66, + 65535,65534,65533,65532,65531,65530,65529, // 3576 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3592 + + // #96 + 65535, + 83, 83, 72, 95, 65, 83, 75, 80, 65, 83, 83, 61, + 65535,65534,65533, // 3608 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3624 + + // #97 + 65535,65534,65533,65532,65531, + 72, 73, 83, 84, 70, 73, 76, 69, 61, 47, 104, 111, + 65535,65534,65533,65532,65531,65530,65529, // 3648 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3664 + + // #98 + 65535, + 75, 79, 78, 83, 79, 76, 69, 95, 68, 66, 85, 83, + 65535,65534,65533, // 3680 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3696 + + // #99 + 65535, + 77, 65, 75, 69, 61, 47, 117, 115, 114, 47, 98, 105, + 65535,65534,65533, // 3712 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3728 + + // #100 + 65535, + 67, 65, 78, 66, 69, 82, 82, 65, 95, 68, 82, 73, + 65535,65534,65533, // 3744 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3760 + + // #101 + 65535, + 71, 67, 79, 78, 70, 95, 84, 77, 80, 68, 73, 82, + 65535,65534,65533, // 3776 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3792 + + // #102 + 65535,65534,65533,65532,65531, + 85, 83, 69, 82, 61, 116, 109, 97, 99, 105, 101, 105, + 65535,65534,65533,65532,65531,65530,65529, // 3816 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3832 + + // #103 + 65535, + 111, 98, 106, 100, 105, 114, 61, 47, 104, 111, 109, 101, + 65535,65534,65533, // 3848 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3864 + + // #104 + 65535,65534,65533,65532,65531, + 76, 67, 95, 77, 79, 78, 69, 84, 65, 82, 89, 61, + 65535,65534,65533,65532,65531,65530,65529, // 3888 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3904 + + // #105 + 65535,65534,65533,65532,65531, + 81, 84, 76, 73, 66, 61, 47, 117, 115, 114, 47, 108, + 65535,65534,65533,65532,65531,65530,65529, // 3928 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3944 + + // #106 + 65535,65534,65533,65532,65531, + 76, 67, 95, 84, 69, 76, 69, 80, 72, 79, 78, 69, + 65535,65534,65533,65532,65531,65530,65529, // 3968 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 3984 + + // #107 + 65535, + 80, 89, 84, 72, 79, 78, 68, 79, 78, 84, 87, 82, + 65535,65534,65533, // 4000 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4016 + + // #108 + 65535,65534,65533,65532,65531, + 84, 77, 80, 68, 73, 82, 61, 47, 116, 109, 112, 47, + 65535,65534,65533,65532,65531,65530,65529, // 4040 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4056 + + // #109 + 65535,65534,65533,65532,65531, + 65, 82, 77, 76, 77, 68, 95, 76, 73, 67, 69, 78, + 65535,65534,65533,65532,65531,65530,65529, // 4080 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4096 + + // #110 + 65535, + 80, 89, 84, 72, 79, 78, 80, 65, 84, 72, 61, 47, + 65535,65534,65533, // 4112 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4128 + + // #111 + 65535,65534,65533,65532,65531, + 77, 65, 75, 69, 70, 76, 65, 71, 83, 61, 119, 32, + 65535,65534,65533,65532,65531,65530,65529, // 4152 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4168 + + // #112 + 65535, + 77, 70, 76, 65, 71, 83, 61, 45, 119, 32, 45, 45, + 65535,65534,65533, // 4184 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4200 + + // #113 + 65535, + 77, 65, 73, 76, 61, 47, 118, 97, 114, 47, 115, 112, + 65535,65534,65533, // 4216 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4232 + + // #114 + 65535,65534,65533,65532,65531, + 83, 72, 69, 76, 76, 95, 83, 69, 83, 83, 73, 79, + 65535,65534,65533,65532,65531,65530,65529, // 4256 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4272 + + // #115 + 65535, + 75, 68, 69, 68, 73, 82, 61, 47, 104, 111, 109, 101, + 65535,65534,65533, // 4288 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4304 + + // #116 + 65535,65534,65533,65532,65531, + 76, 69, 83, 83, 67, 72, 65, 82, 83, 69, 84, 61, + 65535,65534,65533,65532,65531,65530,65529, // 4328 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4344 + + // #117 + 65535,65534,65533,65532,65531, + 76, 67, 95, 80, 65, 80, 69, 82, 61, 110, 98, 95, + 65535,65534,65533,65532,65531,65530,65529, // 4368 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4384 + + // #118 + 65535, + 66, 82, 79, 87, 83, 69, 82, 61, 47, 117, 115, 114, + 65535,65534,65533, // 4400 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4416 + + // #119 + 65535, + 77, 69, 84, 65, 95, 67, 76, 65, 83, 83, 61, 100, + 65535,65534,65533, // 4432 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4448 + + // #120 + 65535,65534,65533,65532,65531, + 77, 68, 86, 95, 77, 69, 78, 85, 95, 83, 84, 89, + 65535,65534,65533,65532,65531,65530,65529, // 4472 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4488 + + // #121 + 65535,65534,65533,65532,65531, + 67, 79, 76, 79, 82, 70, 71, 66, 71, 61, 49, 53, + 65535,65534,65533,65532,65531,65530,65529, // 4512 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4528 + + // #122 + 65535,65534,65533,65532,65531, + 80, 89, 84, 72, 79, 78, 83, 84, 65, 82, 84, 85, + 65535,65534,65533,65532,65531,65530,65529, // 4552 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4568 + + // #123 + 65535, + 76, 67, 95, 77, 69, 65, 83, 85, 82, 69, 77, 69, + 65535,65534,65533, // 4584 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4600 + + // #124 + 65535,65534,65533,65532,65531, + 69, 68, 73, 84, 79, 82, 61, 47, 117, 115, 114, 47, + 65535,65534,65533,65532,65531,65530,65529, // 4624 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4640 + + // #125 + 65535,65534,65533,65532,65531, + 69, 78, 95, 84, 66, 61, 109, 111, 99, 58, 117, 105, + 65535,65534,65533,65532,65531,65530,65529, // 4664 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4680 + + // #126 + 65535, + 72, 73, 83, 84, 83, 73, 90, 69, 61, 49, 48, 48, + 65535,65534,65533, // 4696 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4712 + + // #127 + 65535,65534,65533,65532,65531, + 71, 83, 95, 76, 73, 66, 61, 47, 104, 111, 109, 101, + 65535,65534,65533,65532,65531,65530,65529, // 4736 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4752 + + // #128 + 65535,65534,65533,65532,65531, + 78, 76, 83, 80, 65, 84, 72, 61, 47, 117, 115, 114, + 65535,65534,65533,65532,65531,65530,65529, // 4776 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4792 + + // #129 + 65535,65534,65533,65532,65531, + 87, 73, 78, 68, 79, 87, 80, 65, 84, 72, 61, 55, + 65535,65534,65533,65532,65531,65530,65529, // 4816 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4832 + + // #130 + 65535,65534,65533,65532,65531, + 75, 79, 78, 83, 79, 76, 69, 95, 68, 66, 85, 83, + 65535,65534,65533,65532,65531,65530,65529, // 4856 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4872 + + // #131 + 65535, + 76, 67, 95, 73, 68, 69, 78, 84, 73, 70, 73, 67, + 65535,65534,65533, // 4888 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4904 + + // #132 + 65535, + 73, 78, 80, 85, 84, 82, 67, 61, 47, 101, 116, 99, + 65535,65534,65533, // 4920 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4936 + + // #133 + 65535,65534,65533,65532,65531, + 81, 84, 73, 78, 67, 61, 47, 117, 115, 114, 47, 108, + 65535,65534,65533,65532,65531,65530,65529, // 4960 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 4976 + + // #134 + 65535, + 76, 67, 95, 65, 68, 68, 82, 69, 83, 83, 61, 110, + 65535,65534,65533, // 4992 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5008 + + // #135 + 65535,65534,65533,65532,65531, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 95, + 65535,65534,65533,65532,65531,65530,65529, // 5032 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5048 + + // #136 + 65535, + 76, 65, 78, 71, 61, 112, 116, 95, 66, 82, 46, 85, + 65535,65534,65533, // 5064 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5080 + + // #137 + 65535, + 80, 52, 80, 79, 82, 84, 61, 112, 52, 46, 116, 114, + 65535,65534,65533, // 5096 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5112 + + // #138 + 65535,65534,65533,65532,65531, + 80, 73, 76, 79, 84, 80, 79, 82, 84, 61, 117, 115, + 65535,65534,65533,65532,65531,65530,65529, // 5136 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5152 + + // #139 + 65535, + 75, 68, 69, 95, 83, 69, 83, 83, 73, 79, 78, 95, + 65535,65534,65533, // 5168 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5184 + + // #140 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5200 + 65535, + 84, 69, 65, 77, 66, 85, 73, 76, 68, 69, 82, 61, + 65535,65534,65533, // 5216 + + +}; +static struct StringCollection +{ + int len; + int offset1, offset2; + ushort align1, align2; +} stringCollection[] = { + {18, 1, 29, 3666, 106}, // #0 + {18, 53, 77, 106, 1978}, // #1 + {20, 97, 125, 2850, 3210}, // #2 + {20, 157, 185, 3210, 3138}, // #3 + {51, 225, 225, 3362, 3362}, // #4 + {51, 293, 353, 1434, 3362}, // #5 + {51, 417, 417, 3362, 3362}, // #6 + {19, 473, 501, 2850, 10}, // #7 + {19, 533, 565, 10, 442}, // #8 + {51, 609, 677, 3362, 1434}, // #9 + {5, 741, 753, 2666, 2066}, // #10 + {4, 765, 781, 2362, 3930}, // #11 + {3, 793, 805, 3330, 2138}, // #12 + {5, 817, 825, 738, 2066}, // #13 + {4, 833, 845, 434, 3930}, // #14 + {5, 857, 865, 3842, 2066}, // #15 + {4, 873, 885, 3538, 3930}, // #16 + {3, 897, 909, 3330, 2138}, // #17 + {5, 925, 937, 1898, 2066}, // #18 + {4, 949, 965, 1594, 3930}, // #19 + {3, 977, 989, 3330, 2138}, // #20 + {5, 1005, 1021, 2218, 762}, // #21 + {5, 1033, 1041, 3346, 2066}, // #22 + {4, 1053, 1069, 3082, 3930}, // #23 + {12, 1081, 1097, 2082, 962}, // #24 + {5, 1113, 1121, 3362, 2066}, // #25 + {4, 1129, 1141, 322, 3930}, // #26 + {3, 1153, 1165, 2050, 2138}, // #27 + {5, 1177, 1185, 1538, 2066}, // #28 + {4, 1193, 1205, 1234, 3930}, // #29 + {5, 1221, 1233, 554, 2066}, // #30 + {4, 1245, 1261, 250, 3930}, // #31 + {5, 1277, 1289, 2858, 2066}, // #32 + {4, 1301, 1317, 2554, 3930}, // #33 + {12, 1329, 1345, 2194, 1762}, // #34 + {12, 1365, 1385, 2170, 1762}, // #35 + {12, 1405, 1425, 2314, 1762}, // #36 + {6, 1445, 1461, 3626, 666}, // #37 + {11, 1477, 1501, 3882, 842}, // #38 + {12, 1525, 1545, 1722, 2930}, // #39 + {12, 1565, 1585, 1914, 2930}, // #40 + {12, 1605, 1625, 442, 2930}, // #41 + {12, 1641, 1657, 626, 2930}, // #42 + {12, 1673, 1689, 946, 2930}, // #43 + {12, 1705, 1721, 738, 2930}, // #44 + {12, 1737, 1753, 2066, 2930}, // #45 + {12, 1773, 1793, 1210, 2930}, // #46 + {12, 1809, 1825, 1426, 2930}, // #47 + {12, 1841, 1857, 1650, 2930}, // #48 + {12, 1877, 1897, 1530, 2930}, // #49 + {12, 1913, 1929, 1858, 2930}, // #50 + {12, 1949, 1969, 2106, 2930}, // #51 + {12, 1989, 2009, 2202, 2930}, // #52 + {12, 2029, 2049, 2490, 2930}, // #53 + {12, 2069, 2089, 2794, 2930}, // #54 + {12, 2105, 2121, 2322, 2930}, // #55 + {12, 2137, 2153, 2834, 2930}, // #56 + {12, 2169, 2185, 1266, 2930}, // #57 + {12, 2205, 2225, 2538, 2930}, // #58 + {12, 2241, 2257, 2706, 2930}, // #59 + {12, 2277, 2297, 3402, 2930}, // #60 + {12, 2313, 2329, 146, 2930}, // #61 + {12, 2349, 2369, 3690, 2930}, // #62 + {12, 2389, 2409, 810, 2930}, // #63 + {12, 2429, 2449, 1178, 2930}, // #64 + {12, 2465, 2481, 1442, 2930}, // #65 + {12, 2501, 2521, 3546, 2930}, // #66 + {12, 2541, 2561, 1930, 2930}, // #67 + {12, 2577, 2593, 1634, 2930}, // #68 + {12, 2609, 2625, 1986, 2930}, // #69 + {12, 2641, 2657, 1970, 2930}, // #70 + {12, 2677, 2697, 1834, 2930}, // #71 + {12, 2713, 2729, 1474, 2930}, // #72 + {12, 2749, 2769, 2250, 2930}, // #73 + {12, 2789, 2809, 2458, 2930}, // #74 + {12, 2829, 2849, 2618, 2930}, // #75 + {12, 2869, 2889, 3066, 2930}, // #76 + {12, 2905, 2921, 3330, 2930}, // #77 + {12, 2941, 2961, 1706, 2930}, // #78 + {12, 2977, 2993, 2802, 2930}, // #79 + {12, 3013, 3033, 3770, 2930}, // #80 + {12, 3053, 3073, 3594, 2930}, // #81 + {12, 3089, 3105, 2, 2930}, // #82 + {12, 3121, 3137, 2962, 2930}, // #83 + {12, 3153, 3169, 290, 2930}, // #84 + {12, 3189, 3209, 794, 2930}, // #85 + {12, 3225, 3241, 1058, 2930}, // #86 + {12, 3261, 3281, 2394, 2930}, // #87 + {12, 3301, 3321, 138, 2930}, // #88 + {12, 3341, 3361, 1482, 2930}, // #89 + {12, 3381, 3401, 570, 2930}, // #90 + {12, 3417, 3433, 674, 2930}, // #91 + {12, 3449, 3465, 1282, 2930}, // #92 + {12, 3481, 3497, 1746, 2930}, // #93 + {12, 3517, 3537, 1866, 2930}, // #94 + {12, 3557, 3577, 1978, 2930}, // #95 + {12, 3593, 3609, 3954, 2930}, // #96 + {12, 3629, 3649, 2570, 2930}, // #97 + {12, 3665, 3681, 2754, 2930}, // #98 + {12, 3697, 3713, 3666, 2930}, // #99 + {12, 3729, 3745, 34, 2930}, // #100 + {12, 3761, 3777, 2914, 2930}, // #101 + {12, 3797, 3817, 1194, 2930}, // #102 + {12, 3833, 3849, 3202, 2930}, // #103 + {12, 3869, 3889, 3018, 2930}, // #104 + {12, 3909, 3929, 202, 2930}, // #105 + {12, 3949, 3969, 3546, 2930}, // #106 + {12, 3985, 4001, 3682, 2930}, // #107 + {12, 4021, 4041, 3466, 2930}, // #108 + {12, 4061, 4081, 4074, 2930}, // #109 + {12, 4097, 4113, 306, 2930}, // #110 + {12, 4133, 4153, 634, 2930}, // #111 + {12, 4169, 4185, 802, 2930}, // #112 + {12, 4201, 4217, 962, 2930}, // #113 + {12, 4237, 4257, 1114, 2930}, // #114 + {12, 4273, 4289, 1250, 2930}, // #115 + {12, 4309, 4329, 3898, 2930}, // #116 + {12, 4349, 4369, 1386, 2930}, // #117 + {12, 4385, 4401, 1586, 2930}, // #118 + {12, 4417, 4433, 1730, 2930}, // #119 + {12, 4453, 4473, 1914, 2930}, // #120 + {12, 4493, 4513, 1498, 2930}, // #121 + {12, 4533, 4553, 2138, 2930}, // #122 + {12, 4569, 4585, 2290, 2930}, // #123 + {12, 4605, 4625, 2426, 2930}, // #124 + {12, 4645, 4665, 2666, 2930}, // #125 + {12, 4681, 4697, 2050, 2930}, // #126 + {12, 4717, 4737, 2874, 2930}, // #127 + {12, 4757, 4777, 3018, 2930}, // #128 + {12, 4797, 4817, 1834, 2930}, // #129 + {12, 4837, 4857, 3178, 2930}, // #130 + {12, 4873, 4889, 3314, 2930}, // #131 + {12, 4905, 4921, 2546, 2930}, // #132 + {12, 4941, 4961, 3546, 2930}, // #133 + {12, 4977, 4993, 3682, 2930}, // #134 + {12, 5013, 5033, 3802, 2930}, // #135 + {12, 5049, 5065, 3922, 2930}, // #136 + {12, 5081, 5097, 4018, 2930}, // #137 + {12, 5117, 5137, 42, 2930}, // #138 + {12, 5153, 5169, 130, 2930}, // #139 + {12, 5185, 5201, 242, 2930}, // #140 +}; +static const int stringCollectionCount = 141; +static const int stringCollectionMaxLen = 51; +// average comparison length: 12.0922 +// cache-line crosses: 6 (2.1%) +// alignment histogram: +// 0xXXX2 = 188 (66.7%) strings, 57 (30.3%) of which same-aligned +// 0xXXXa = 94 (33.3%) strings, 10 (10.6%) of which same-aligned +// total = 282 (100%) strings, 67 (23.8%) of which same-aligned diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index fb65f65..88dc40b 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -48,8 +48,15 @@ #define SRCDIR "" #endif +#ifdef Q_OS_UNIX +#include <sys/mman.h> +#include <unistd.h> +#endif + #include <private/qsimd_p.h> +#include "data.cpp" + class tst_QString: public QObject { Q_OBJECT @@ -73,20 +80,8 @@ void tst_QString::equals() const } } -static ushort databuffer[4096]; - tst_QString::tst_QString() { - // populate databuffer with our seed, each byte 3 times in a row - // include the NUL! - static const char seed[] = "AAAAAAAAAEhlbGxvIFdvcmxkIAAAAAA="; - static const int repeat = 3; - int pos = 0; - for (ushort *p = databuffer; p < databuffer + (sizeof(databuffer) / sizeof(databuffer[0])); p += repeat) { - for (int j = 0; j < repeat; ++p, ++j) - *p = seed[pos]; - pos = (pos + 1) % sizeof(seed); - } } void tst_QString::equals_data() const @@ -148,13 +143,15 @@ void tst_QString::equals_data() const << QString::fromRawData(ptr + 1, 58) << QString::fromRawData(ptr + 3, 58); } -static bool equals2_memcmp_call(ushort *p1, ushort *p2, int len) +static bool equals2_memcmp_call(const ushort *p1, const ushort *p2, int len) { return memcmp(p1, p2, len * 2) == 0; } -static bool equals2_bytewise(ushort *p1, ushort *p2, int len) +static bool equals2_bytewise(const ushort *p1, const ushort *p2, int len) { + if (p1 == p2 || !len) + return true; uchar *b1 = (uchar *)p1; uchar *b2 = (uchar *)p2; len *= 2; @@ -164,17 +161,24 @@ static bool equals2_bytewise(ushort *p1, ushort *p2, int len) return true; } -static bool equals2_shortwise(ushort *p1, ushort *p2, int len) +static bool __attribute__((optimize("unroll-loops"))) equals2_shortwise(const ushort *p1, const ushort *p2, int len) { - register ushort * const end = p1 + len; - for ( ; p1 != end; ++p1, ++p2) - if (*p1 != *p2) + if (p1 == p2 || !len) + return true; +// for (register int counter; counter < len; ++counter) +// if (p1[counter] != p2[counter]) +// return false; + while (len--) { + if (p1[len] != p2[len]) return false; + } return true; } -static bool equals2_intwise(ushort *p1, ushort *p2, int length) +static bool equals2_intwise(const ushort *p1, const ushort *p2, int length) { + if (p1 == p2 || !length) + return true; register union { const quint16 *w; const quint32 *d; @@ -219,71 +223,204 @@ static bool equals2_intwise(ushort *p1, ushort *p2, int length) return true; } +static inline bool equals2_short_tail(const ushort *p1, const ushort *p2, int len) +{ + if (len) { + if (*p1 != *p2) + return false; + if (--len) { + if (p1[1] != p2[1]) + return false; + if (--len) { + if (p1[2] != p2[2]) + return false; + if (--len) { + if (p1[3] != p2[3]) + return false; + if (--len) { + if (p1[4] != p2[4]) + return false; + if (--len) { + if (p1[5] != p2[5]) + return false; + if (--len) { + if (p1[6] != p2[6]) + return false; + return p1[7] == p2[7]; + } + } + } + } + } + } + } + return true; +} + +#pragma GCC optimize("no-unroll-loops") #ifdef __SSE2__ -static bool equals2_sse2(ushort *p1, ushort *p2, int len) +static bool equals2_sse2_aligned(const ushort *p1, const ushort *p2, int len) { - if (len > 8) { + if (len >= 8) { + qptrdiff counter = 0; while (len > 8) { - __m128i q1 = _mm_loadu_si128((__m128i *)p1); - __m128i q2 = _mm_loadu_si128((__m128i *)p2); + __m128i q1 = _mm_load_si128((__m128i *)(p1 + counter)); + __m128i q2 = _mm_load_si128((__m128i *)(p2 + counter)); + __m128i cmp = _mm_cmpeq_epi16(q1, q2); + if (ushort(_mm_movemask_epi8(cmp)) != ushort(0xffff)) + return false; + + len -= 8; + counter += 8; + } + p1 += counter; + p2 += counter; + } + + return equals2_short_tail(p1, p2, len); +} + +static bool __attribute__((optimize("no-unroll-loops"))) equals2_sse2(const ushort *p1, const ushort *p2, int len) +{ + if (p1 == p2 || !len) + return true; + + if (len >= 8) { + qptrdiff counter = 0; + while (len >= 8) { + __m128i q1 = _mm_loadu_si128((__m128i *)(p1 + counter)); + __m128i q2 = _mm_loadu_si128((__m128i *)(p2 + counter)); __m128i cmp = _mm_cmpeq_epi16(q1, q2); if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) return false; len -= 8; - p1 += 8; - p2 += 8; + counter += 8; } + p1 += counter; + p2 += counter; } - return equals2_shortwise(p1, p2, len); + return equals2_short_tail(p1, p2, len); } -static inline -#ifdef Q_CC_GNU -__attribute__((always_inline)) -#endif -bool prolog_align(ushort *&p1, ushort *&p2, int &len) +//static bool equals2_sse2(const ushort *p1, const ushort *p2, int len) +//{ +// register int val1 = quintptr(p1) & 0xf; +// register int val2 = quintptr(p2) & 0xf; +// if (false && val1 + val2 == 0) +// return equals2_sse2_aligned(p1, p2, len); +// else +// return equals2_sse2_unaligned(p1, p2, len); +//} + +static bool equals2_sse2_aligning(const ushort *p1, const ushort *p2, int len) { - const ushort *end = (ushort*) ((quintptr(p1) + 15) & ~15); - if (end > p1 + len) - end = p1 + len; - for ( ; p1 != end; ++p1, ++p2, --len) - if (*p1 != *p2) + if (len < 8) + return equals2_short_tail(p1, p2, len); + + qptrdiff counter = 0; + + // which one is easier to align, p1 or p2 ? + register int val1 = quintptr(p1) & 0xf; + register int val2 = quintptr(p2) & 0xf; + if (val1 && val2) { +#if 0 + // we'll align the one which requires the least number of steps + if (val1 > val2) { + qSwap(p1, p2); + val1 = val2; + } + + // val1 contains the number of bytes past the 16-aligned mark + // we must read 16-val1 bytes to align + val1 = 16 - val1; + if (val1 & 0x2) { + if (*p1 != *p2) + return false; + --len; + ++counter; + } + while (val1 & 12) { + if (*(uint*)p1 != *(uint*)p2) + return false; + --len; + counter += 2; + val1 -= 4; + } +#else + // we'll align the one closest to the 16-byte mark + if (val1 > val2) { + qSwap(p1, p2); + val1 = val2; + } + + // we're reading val1 bytes too many + __m128i q2 = _mm_loadu_si128((__m128i *)(p2 - val1/2)); + __m128i cmp = _mm_cmpeq_epi16(*(__m128i *)(p1 - val1/2), q2); + if (short(_mm_movemask_epi8(cmp)) >> val1 != short(-1)) return false; - return true; + + counter = 8 - val1/2; + len -= 8 - val1/2; +#endif + } else if (!val2) { + // p2 is already aligned + qSwap(p1, p2); + } + + // p1 is aligned + + while (len >= 8) { + __m128i q1 = _mm_load_si128((__m128i *)(p1 + counter)); + __m128i q2 = _mm_loadu_si128((__m128i *)(p2 + counter)); + __m128i cmp = _mm_cmpeq_epi16(q1, q2); + if (ushort(_mm_movemask_epi8(cmp)) != ushort(0xffff)) + return false; + + len -= 8; + counter += 8; + } + + // tail + return equals2_short_tail(p1 + counter, p2 + counter, len); } -static bool equals2_sse2_aligning(ushort *p1, ushort *p2, int len) +#ifdef __SSE3__ +static bool __attribute__((optimize("no-unroll-loops"))) equals2_sse3(const ushort *p1, const ushort *p2, int len) { - if (len > 8) { - if (!prolog_align(p1, p2, len)) - return false; - while (len > 8) { - __m128i q1 = _mm_load_si128((__m128i *)p1); - __m128i q2 = _mm_loadu_si128((__m128i *)p2); + if (p1 == p2 || !len) + return true; + + if (len >= 8) { + qptrdiff counter = 0; + while (len >= 8) { + __m128i q1 = _mm_lddqu_si128((__m128i *)(p1 + counter)); + __m128i q2 = _mm_lddqu_si128((__m128i *)(p2 + counter)); __m128i cmp = _mm_cmpeq_epi16(q1, q2); if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) return false; len -= 8; - p1 += 8; - p2 += 8; + counter += 8; } + p1 += counter; + p2 += counter; } - return equals2_shortwise(p1, p2, len); + return equals2_short_tail(p1, p2, len); } -template<int N> static inline bool equals2_ssse3_alignr(__m128i *m1, __m128i *m2, int len) +#ifdef __SSSE3__ +template<int N> static __attribute__((optimize("unroll-loops"))) inline bool equals2_ssse3_alignr(__m128i *m1, __m128i *m2, int len) { __m128i lower = _mm_load_si128(m1); - while (len > 8) { + while (len >= 8) { __m128i upper = _mm_load_si128(m1 + 1); __m128i correct; correct = _mm_alignr_epi8(upper, lower, N); - __m128i q2 = _mm_loadu_si128(m2); + __m128i q2 = _mm_lddqu_si128(m2); __m128i cmp = _mm_cmpeq_epi16(correct, q2); if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) return false; @@ -295,13 +432,13 @@ template<int N> static inline bool equals2_ssse3_alignr(__m128i *m1, __m128i *m2 } // tail - return len == 0 || equals2_shortwise((ushort *)m1 + N / 2, (ushort*)m2, len); + return len == 0 || equals2_short_tail((const ushort *)m1 + N / 2, (const ushort*)m2, len); } -static inline bool equals2_ssse3_aligned(__m128i *m1, __m128i *m2, int len) +static inline __attribute__((optimize("unroll-loops"))) bool equals2_ssse3_aligned(__m128i *m1, __m128i *m2, int len) { - while (len > 8) { - __m128i q2 = _mm_loadu_si128(m2); + while (len >= 8) { + __m128i q2 = _mm_lddqu_si128(m2); __m128i cmp = _mm_cmpeq_epi16(*m1, q2); if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) return false; @@ -310,30 +447,30 @@ static inline bool equals2_ssse3_aligned(__m128i *m1, __m128i *m2, int len) ++m1; ++m2; } - return len == 0 || equals2_shortwise((ushort *)m1, (ushort *)m2, len); + return len == 0 || equals2_short_tail((const ushort *)m1, (const ushort *)m2, len); } -//#ifdef __SSSE3__ -static bool equals2_ssse3(ushort *p1, ushort *p2, int len) +static bool equals2_ssse3(const ushort *p1, const ushort *p2, int len) { // p1 & 0xf can be: // 0, 2, 4, 6, 8, 10, 12, 14 // If it's 0, we're aligned // If it's not, then we're interested in the 16 - (p1 & 0xf) bytes only - if (len > 8) { + if (len >= 8) { // find the last aligned position below the p1 memory __m128i *m1 = (__m128i *)(quintptr(p1) & ~0xf); __m128i *m2 = (__m128i *)p2; - uchar diff = quintptr(p1) - quintptr(m1); + qptrdiff diff = quintptr(p1) - quintptr(m1); // diff contains the number of extra bytes + if (diff == 10) + return equals2_ssse3_alignr<10>(m1, m2, len); + else if (diff == 2) + return equals2_ssse3_alignr<2>(m1, m2, len); if (diff < 8) { if (diff < 4) { - if (diff == 0) - return equals2_ssse3_aligned(m1, m2, len); - else // diff == 2 - return equals2_ssse3_alignr<2>(m1, m2, len); + return equals2_ssse3_aligned(m1, m2, len); } else { if (diff == 4) return equals2_ssse3_alignr<4>(m1, m2, len); @@ -342,10 +479,7 @@ static bool equals2_ssse3(ushort *p1, ushort *p2, int len) } } else { if (diff < 12) { - if (diff == 8) - return equals2_ssse3_alignr<8>(m1, m2, len); - else // diff == 10 - return equals2_ssse3_alignr<10>(m1, m2, len); + return equals2_ssse3_alignr<8>(m1, m2, len); } else { if (diff == 12) return equals2_ssse3_alignr<12>(m1, m2, len); @@ -353,34 +487,99 @@ static bool equals2_ssse3(ushort *p1, ushort *p2, int len) return equals2_ssse3_alignr<14>(m1, m2, len); } } + } + + // tail + return equals2_short_tail(p1, p2, len); +} + +template<int N> static inline bool equals2_ssse3_aligning_alignr(__m128i *m1, __m128i *m2, int len) +{ + __m128i lower = _mm_load_si128(m1); + while (len >= 8) { + __m128i upper = _mm_load_si128(m1 + 1); + __m128i correct; + correct = _mm_alignr_epi8(upper, lower, N); + + __m128i cmp = _mm_cmpeq_epi16(correct, *m2); + if (ushort(_mm_movemask_epi8(cmp)) != 0xffff) + return false; -// switch (diff) { -// case 0: -// return equals2_ssse3_aligned(m1, m2, len); -// case 2: -// return equals2_ssse3_alignr<2>(m1, m2, len); -// case 4: -// return equals2_ssse3_alignr<4>(m1, m2, len); -// case 6: -// return equals2_ssse3_alignr<6>(m1, m2, len); -// case 8: -// return equals2_ssse3_alignr<8>(m1, m2, len); -// case 10: -// return equals2_ssse3_alignr<10>(m1, m2, len); -// case 12: -// return equals2_ssse3_alignr<12>(m1, m2, len); -// case 14: -// return equals2_ssse3_alignr<14>(m1, m2, len); -// } + len -= 8; + ++m2; + ++m1; + lower = upper; } // tail - return equals2_shortwise(p1, p2, len); + return len == 0 || equals2_short_tail((const ushort *)m1 + N / 2, (const ushort*)m2, len); } -//#endif -//#ifdef __SSE4_1__ -static bool equals2_sse4(ushort *p1, ushort *p2, int len) +static bool equals2_ssse3_aligning(const ushort *p1, const ushort *p2, int len) +{ + if (len < 8) + return equals2_short_tail(p1, p2, len); + qptrdiff counter = 0; + + // which one is easier to align, p1 or p2 ? + { + register int val1 = quintptr(p1) & 0xf; + register int val2 = quintptr(p2) & 0xf; + if (val1 && val2) { + // we'll align the one closest to the 16-byte mark + if (val1 < val2) { + qSwap(p1, p2); + val2 = val1; + } + + // we're reading val1 bytes too many + __m128i q1 = _mm_lddqu_si128((__m128i *)(p1 - val2/2)); + __m128i cmp = _mm_cmpeq_epi16(q1, *(__m128i *)(p2 - val2/2)); + if (short(_mm_movemask_epi8(cmp)) >> val1 != short(-1)) + return false; + + counter = 8 - val2/2; + len -= 8 - val2/2; + } else if (!val1) { + // p1 is already aligned + qSwap(p1, p2); + } + } + + // p2 is aligned now + // we want to use palignr in the mis-alignment of p1 + __m128i *m1 = (__m128i *)(quintptr(p1 + counter) & ~0xf); + __m128i *m2 = (__m128i *)(p2 + counter); + register int val1 = quintptr(p1 + counter) - quintptr(m1); + + // val1 contains the number of extra bytes + if (val1 == 8) + return equals2_ssse3_aligning_alignr<8>(m1, m2, len); + if (val1 == 0) + return equals2_sse2_aligned(p1 + counter, p2 + counter, len); + if (val1 < 8) { + if (val1 < 4) { + return equals2_ssse3_aligning_alignr<2>(m1, m2, len); + } else { + if (val1 == 4) + return equals2_ssse3_aligning_alignr<4>(m1, m2, len); + else // diff == 6 + return equals2_ssse3_aligning_alignr<6>(m1, m2, len); + } + } else { + if (val1 < 12) { + return equals2_ssse3_aligning_alignr<10>(m1, m2, len); + } else { + if (val1 == 12) + return equals2_ssse3_aligning_alignr<12>(m1, m2, len); + else // diff == 14 + return equals2_ssse3_aligning_alignr<14>(m1, m2, len); + } + } +} + +#ifdef __SSE4_1__ +static bool equals2_sse4(const ushort *p1, const ushort *p2, int len) { // We use the pcmpestrm instruction searching for differences (negative polarity) // it will reset CF if it's all equal @@ -390,36 +589,150 @@ static bool equals2_sse4(ushort *p1, ushort *p2, int len) // difference found: CF = 1 // all equal, not finished: CF = ZF = SF = 0 // all equal, finished: CF = 0, ZF = SF = 1 + // We use the JA instruction that jumps if ZF = 0 and CF = 0 + if (p1 == p2 || !len) + return true; + + // This function may read some bytes past the end of p1 or p2 + // It is safe to do that, as long as those extra bytes (beyond p1+len and p2+len) + // are on the same page as the last valid byte. + // If len is a multiple of 8, we'll never load invalid bytes. + if (len & 7) { + // The last load would load (len & ~7) valid bytes and (8 - (len & ~7)) invalid bytes. + // So we can't do the last load if any of those bytes is in a different + // page. That is, if: + // pX + len is on a different page from pX + (len & ~7) + 8 + // + // that is, if second-to-last load ended up less than 16 bytes from the page end: + // pX + (len & ~7) is the last ushort read in the second-to-last load + if (len < 8) + return equals2_short_tail(p1, p2, len); + if ((quintptr(p1 + (len & ~7)) & 0xfff) > 0xff0 || + (quintptr(p2 + (len & ~7)) & 0xfff) > 0xff0) { + + // yes, so we mustn't do the final 128-bit load + bool result; + asm ( + "sub %[p1], %[p2]\n\t" + "sub $16, %[p1]\n\t" + "add $8, %[len]\n\t" + + // main loop: + "0:\n\t" + "add $16, %[p1]\n\t" + "sub $8, %[len]\n\t" + "jz 1f\n\t" + "lddqu (%[p1]), %%xmm0\n\t" + "mov %[len], %%edx\n\t" + "pcmpestri %[mode], (%[p2],%[p1]), %%xmm0\n\t" + + "jna 1f\n\t" + "add $16, %[p1]\n\t" + "sub $8, %[len]\n\t" + "jz 1f\n\t" + "lddqu (%[p1]), %%xmm0\n\t" + "mov %[len], %%edx\n\t" + "pcmpestri %[mode], (%[p2],%[p1]), %%xmm0\n\t" + + "ja 0b\n\t" + "1:\n\t" + "setnc %[result]\n\t" + : [result] "=a" (result), + [p1] "+r" (p1), + [p2] "+r" (p2) + : [len] "0" (len & ~7), + [mode] "i" (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY) + : "%edx", "%ecx", "%xmm0" + ); + return result && equals2_short_tail(p1, (const ushort *)(quintptr(p1) + quintptr(p2)), len & 7); + } + } + +// const qptrdiff disp = p2 - p1; +// p1 -= 8; +// len += 8; +// while (true) { +// enum { Mode = _SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY }; + +// p1 += 8; +// len -= 8; +// if (!len) +// return true; + +// __m128i q1 = _mm_lddqu_si128((__m128i *)(p1 + disp)); +// __m128i *m2 = (__m128i *)p1; + +// bool cmp_a = _mm_cmpestra(q1, len, *m2, len, Mode); +// if (cmp_a) +// continue; +// return !_mm_cmpestrc(q1, len, *m2, len, Mode); +// } +// return true; bool result; asm ( - "movd %%ebx, %%xmm1\n\t" "sub %[p1], %[p2]\n\t" - "mov %[p1], %%ebx\n\t" - "sub $16, %%ebx\n\t" + "sub $16, %[p1]\n\t" "add $8, %[len]\n\t" - "0:\n\t" - "add $16, %%ebx\n\t" + + "0:\n\t" + "add $16, %[p1]\n\t" "sub $8, %[len]\n\t" - "movdqu (%%ebx), %%xmm0\n\t" + "jz 1f\n\t" + "lddqu (%[p2],%[p1]), %%xmm0\n\t" "mov %[len], %%edx\n\t" - "pcmpestrm %[mode], (%[p2],%%ebx), %%xmm0\n\t" + "pcmpestri %[mode], (%[p1]), %%xmm0\n\t" + + "jna 1f\n\t" + "add $16, %[p1]\n\t" + "sub $8, %[len]\n\t" + "jz 1f\n\t" + "lddqu (%[p2],%[p1]), %%xmm0\n\t" + "mov %[len], %%edx\n\t" + "pcmpestri %[mode], (%[p1]), %%xmm0\n\t" + "ja 0b\n\t" - "1:\n\t" - "mov $0, %%eax\n\t" - "setnc %%al\n\t" - "movd %%xmm1, %%ebx\n\t" + + "1:\n\t" + "setnc %[result]\n\t" : [result] "=a" (result) : [len] "0" (len), - [p1] "d" (p1), + [p1] "r" (p1), [p2] "r" (p2), - [mode] "K" (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY) - : "%xmm0", "%xmm1" + [mode] "i" (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_NEGATIVE_POLARITY) + : "%edx", "%ecx", "%xmm0" ); return result; } -//#endif + +#endif +#endif +#endif #endif +typedef bool (* FuncPtr)(const ushort *, const ushort *, int); +static const FuncPtr func[] = { + equals2_memcmp_call, // 0 + equals2_bytewise, // 1 + equals2_shortwise, // 1 + equals2_intwise, // 3 +#ifdef __SSE2__ + equals2_sse2, // 4 + equals2_sse2_aligning, // 5 +#ifdef __SSE3__ + equals2_sse3, // 6 +#ifdef __SSSE3__ + equals2_ssse3, // 7 + equals2_ssse3, // 8 +#ifdef __SSE4_1__ + equals2_sse4, // 9 +#endif +#endif +#endif +#endif + 0 +}; +static const int functionCount = sizeof(func)/sizeof(func[0]) - 1; + void tst_QString::equals2_data() const { QTest::addColumn<int>("algorithm"); @@ -431,108 +744,94 @@ void tst_QString::equals2_data() const #ifdef __SSE2__ QTest::newRow("sse2") << 4; QTest::newRow("sse2_aligning") << 5; +#ifdef __SSE3__ + QTest::newRow("sse3") << 6; #ifdef __SSSE3__ - QTest::newRow("ssse3") << 6; + QTest::newRow("ssse3") << 7; + QTest::newRow("ssse3_aligning") << 8; #ifdef __SSE4_1__ - QTest::newRow("sse4.2") << 7; + QTest::newRow("sse4.2") << 9; +#endif #endif #endif #endif } -void tst_QString::equals2() const +static void __attribute__((noinline)) equals2_selftest() { - static const short positions[] = { - 190, 1719, 2149, 1752, - 158, 244, 365, 1117, - 254, 265, 1047, 1785, - 1435, 552, 1476, 2030, - // 16 - 421, 1840, 2209, 232, - 1389, 907, 1500, 1479, - 1152, 541, 655, 1960, - 1642, 299, 740, 1995, - // 32 - 1946, 1407, 1272, 1946, - 1459, 1851, 1717, 1484, - 1761, 1630, 1377, 1675, - 629, 341, 661, 244 - // 48 - }; - // the length list must not contain 0 - static const int lens[] = { - 11, // 0 - 40, - 28, - 38, - 9, - 52, // 5 - 48, - 38, - 29, - 7, - 2, // 10 - 49, - 41, - 5, - 20, - 62 // 15 +#ifdef Q_OS_UNIX + const long pagesize = sysconf(_SC_PAGESIZE); + void *page1, *page3; + ushort *page2; + page1 = mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + page2 = (ushort *)mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, -1, 0); + page3 = mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + Q_ASSERT(quintptr(page2) == quintptr(page1) + pagesize || quintptr(page2) == quintptr(page1) - pagesize); + Q_ASSERT(quintptr(page3) == quintptr(page2) + pagesize || quintptr(page3) == quintptr(page2) - pagesize); + munmap(page1, pagesize); + munmap(page3, pagesize); + + // populate our page + for (uint i = 0; i < pagesize / sizeof(long long); ++i) + ((long long *)page2)[i] = Q_INT64_C(0x0041004100410041); + + // the following should crash: + //page2[-1] = 0xdead; + //page2[pagesize / sizeof(ushort) + 1] = 0xbeef; + + static const ushort needle[] = { + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41 }; - typedef bool (* FuncPtr)(ushort *, ushort *, int); - static const FuncPtr func[] = { - equals2_memcmp_call, // 0 - equals2_bytewise, // 1 - equals2_shortwise, // 1 - equals2_intwise, // 3 -#ifdef __SSE2__ - equals2_sse2, // 4 - equals2_sse2_aligning, // 5 -#ifdef __SSSE3__ - equals2_ssse3, // 6 -#ifdef __SSE4_1__ - equals2_sse4, // 7 -#endif -#endif + for (int algo = 0; algo < functionCount; ++algo) { + // boundary condition test: + for (int i = 0; i < 8; ++i) { + (func[algo])(page2 + i, needle, sizeof needle / 2); + (func[algo])(page2 - i - 1 - sizeof(needle)/2 + pagesize/2, needle, sizeof needle/2); + } + } + + munmap(page2, pagesize); #endif - 0 - }; + for (int algo = 0; algo < functionCount; ++algo) { + for (int i = 0; i < stringCollectionCount; ++i) { + const ushort *p1 = stringCollectionData + stringCollection[i].offset1; + const ushort *p2 = stringCollectionData + stringCollection[i].offset2; + bool expected = memcmp(p1, p2, stringCollection[i].len * 2) == 0; + + bool result = (func[algo])(p1, p2, stringCollection[i].len); + if (expected != result) + qWarning().nospace() + << "algo=" << algo + << " i=" << i + << " failed (" << result << "!=" << expected + << "); strings were " + << QByteArray((char*)p1, stringCollection[i].len).toHex() + << " and " + << QByteArray((char*)p2, stringCollection[i].len).toHex(); + } + } +} + +void tst_QString::equals2() const +{ QFETCH(int, algorithm); if (algorithm == -1) { - for (uint pos1 = 0; pos1 < sizeof positions / sizeof positions[0]; ++pos1) - for (uint pos2 = 0; pos2 < (sizeof positions / sizeof positions[0]) - 32; ++pos2) - for (uint len = 0; len < sizeof lens / sizeof lens[0]; ++len) { - ushort *p1 = databuffer + positions[pos1]; - ushort *p2 = databuffer + positions[pos2]; - bool expected = memcmp(p1, p2, lens[len] * 2) == 0; - - for (uint algo = 0; algo < -1 + (sizeof func / sizeof func[0]); ++algo) { - bool result = (func[algo])(p1, p2, lens[len]); - if (expected != result) - qWarning().nospace() - << "algo=" << algo - << " pos1=" << positions[pos1] - << " pos2=" << positions[pos2] - << " len=" << lens[len] - << " failed (" << result << "!=" << expected - << "); strings were " - << QByteArray((char*)p1, lens[len]).toHex() - << " and " - << QByteArray((char*)p2, lens[len]).toHex(); - } - - } + equals2_selftest(); return; } QBENCHMARK { - for (uint pos1 = 0; pos1 < sizeof positions / sizeof positions[0]; ++pos1) - for (uint pos2 = 0; pos2 < (sizeof positions / sizeof positions[0]) - 32; ++pos2) - for (uint len = 0; len < sizeof lens / sizeof lens[0]; ++len) { - bool result = (func[algorithm])(databuffer + positions[pos1], databuffer + positions[pos2], lens[len]); - Q_UNUSED(result); - } + for (int i = 0; i < stringCollectionCount; ++i) { + const ushort *p1 = stringCollectionData + stringCollection[i].offset1; + const ushort *p2 = stringCollectionData + stringCollection[i].offset2; + bool result = (func[algorithm])(p1, p2, stringCollection[i].len); + Q_UNUSED(result); + } } } -- cgit v0.12 From 8063e04f3bf6e46ec972b6cafea39454a47e16de Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 17 Aug 2010 20:34:54 +0200 Subject: Update comments in QString about alignment performance. This commit makes no code change at all. Write down the conclusions from experimenting with the x86 SIMD instructions for faster string comparison routines. Long story short: we're already pretty good. The SSE4.2 string instructions are probably more useful for "implicit-length mode" (that is, the end of the string is marked by a NUL), rather than QString's "explicit-length mode". --- src/corelib/tools/qstring.cpp | 63 ++++++++++++++++++++++++++++++++----------- src/corelib/tools/qstring.h | 1 + 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 2fd9a0b..d940bf8 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -173,7 +173,7 @@ static int ucstricmp(const ushort *a, const ushort *ae, const uchar *b) return 1; } -// Unicode case-insensitive comparison +// Unicode case-sensitive comparison static int ucstrcmp(const QChar *a, int alen, const QChar *b, int blen) { if (a == b && alen == blen) @@ -202,22 +202,55 @@ static int ucstrnicmp(const ushort *a, const ushort *b, int l) return ucstricmp(a, a + l, b, b + l); } +// Benchmarking indicates that doing memcmp is much slower than +// executing the comparison ourselves. +// +// The profiling was done on a population of calls to qMemEquals, generated +// during a run of the demo browser. The profile of the data (32-bit x86 +// Linux) was: +// +// total number of comparisons: 21353 +// longest string compared: 95 +// average comparison length: 14.8786 +// cache-line crosses: 5661 (13.3%) +// alignment histogram: +// 0xXXX0 = 512 (1.2%) strings, 0 (0.0%) of which same-aligned +// 0xXXX2 = 15087 (35.3%) strings, 5145 (34.1%) of which same-aligned +// 0xXXX4 = 525 (1.2%) strings, 0 (0.0%) of which same-aligned +// 0xXXX6 = 557 (1.3%) strings, 6 (1.1%) of which same-aligned +// 0xXXX8 = 509 (1.2%) strings, 0 (0.0%) of which same-aligned +// 0xXXXa = 24358 (57.0%) strings, 9901 (40.6%) of which same-aligned +// 0xXXXc = 557 (1.3%) strings, 0 (0.0%) of which same-aligned +// 0xXXXe = 601 (1.4%) strings, 15 (2.5%) of which same-aligned +// total = 42706 (100%) strings, 15067 (35.3%) of which same-aligned +// +// 92% of the strings have alignment of 2 or 10, which is due to malloc on +// 32-bit Linux returning values aligned to 8 bytes, and offsetof(array, QString::Data) == 18. +// +// The profile on 64-bit will be different since offsetof(array, QString::Data) == 26. +// +// The benchmark results were, for a Core-i7 @ 2.67 GHz 32-bit, compiled with -O3 -funroll-loops: +// 16-bit loads only: 872,301 CPU ticks [Qt 4.5 / memcmp] +// 32- and 16-bit loads: 773,362 CPU ticks [Qt 4.6] +// SSE2 "movdqu" 128-bit loads: 618,736 CPU ticks +// SSE3 "lddqu" 128-bit loads: 619,954 CPU ticks +// SSSE3 "palignr" corrections: 852,147 CPU ticks +// SSE4.2 "pcmpestrm": 738,702 CPU ticks +// +// The same benchmark on an Atom N450 @ 1.66 GHz, is: +// 16-bit loads only: 2,185,882 CPU ticks +// 32- and 16-bit loads: 1,805,060 CPU ticks +// SSE2 "movdqu" 128-bit loads: 2,529,843 CPU ticks +// SSE3 "lddqu" 128-bit loads: 2,514,858 CPU ticks +// SSSE3 "palignr" corrections: 2,160,325 CPU ticks +// SSE4.2 not available +// +// The conclusion we reach is that alignment the SSE2 unaligned code can gain +// 20% improvement in performance in some systems, but suffers a penalty due +// to the unaligned loads on others. + static bool qMemEquals(const quint16 *a, const quint16 *b, int length) { - // Benchmarking indicates that doing memcmp is much slower than - // executing the comparison ourselves. - // To make it even faster, we do a 32-bit comparison, comparing - // twice the amount of data as a normal word-by-word comparison. - // - // Benchmarking results on a 2.33 GHz Core2 Duo, with a 64-QChar - // block of data, with 4194304 iterations (per iteration): - // operation usec cpu ticks - // memcmp 330 710 - // 16-bit 79 167-171 - // 32-bit aligned 49 105-109 - // - // Testing also indicates that unaligned 32-bit loads are as - // performant as 32-bit aligned. if (a == b || !length) return true; diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index e52f59f..06e4d47 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -614,6 +614,7 @@ private: ushort asciiCache : 1; ushort capacity : 1; ushort reserved : 11; + // ### Qt5: try to ensure that "array" is aligned to 16 bytes on both 32- and 64-bit ushort array[1]; }; static Data shared_null; -- cgit v0.12 From d28522a1b0e2d1170751b2c559d13e6c96a2a54c Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 17 Aug 2010 22:47:32 +0200 Subject: Update the data generation script to use a non-including .cpp This speeds up the writing of algorithms, so I don't have to recompile megabytes of data dumps. --- tests/benchmarks/corelib/tools/qstring/data.h | 12 ++++++++++++ .../corelib/tools/qstring/generatelist.pl | 21 +++++++++------------ tests/benchmarks/corelib/tools/qstring/main.cpp | 2 +- tests/benchmarks/corelib/tools/qstring/qstring.pro | 2 +- 4 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 tests/benchmarks/corelib/tools/qstring/data.h diff --git a/tests/benchmarks/corelib/tools/qstring/data.h b/tests/benchmarks/corelib/tools/qstring/data.h new file mode 100644 index 0000000..a23dae3 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstring/data.h @@ -0,0 +1,12 @@ +#include <qglobal.h> + +struct StringCollection +{ + int len; + int offset1, offset2; + ushort align1, align2; +}; + +extern const ushort stringCollectionData[]; +extern StringCollection stringCollection[]; +extern const int stringCollectionCount; diff --git a/tests/benchmarks/corelib/tools/qstring/generatelist.pl b/tests/benchmarks/corelib/tools/qstring/generatelist.pl index ed4c8eb..2777329 100644 --- a/tests/benchmarks/corelib/tools/qstring/generatelist.pl +++ b/tests/benchmarks/corelib/tools/qstring/generatelist.pl @@ -51,10 +51,10 @@ # <data2> the second data # \n newline # -# The C code to write this data would be: +# The code to write this data would be: # fprintf(out, "LEN = %d %s %d %d\n", len, -# (p1 == p2) : "SAME" : "DIFF", -# (int)p1 & 0xfff, (int)p2 & 0xfff); +# (p1 == p2) ? "SAME" : "DIFF", +# uint(quintptr(p1)) & 0xfff, uint(quintptr(p2)) & 0xfff); # fwrite(p1, 2, len, out); # fwrite(p2, 2, len, out); # fwrite("\n", 1, 1, out); @@ -103,7 +103,9 @@ sub printUshortArray($$$) { return ($offset + $headpadding, $offset + $headpadding + $len + $tailpadding); } -print "static const ushort stringCollectionData[] __attribute__((aligned(16))) = { \n"; +print "#include \"data.h\"\n\n"; + +print "const ushort stringCollectionData[] __attribute__((aligned(64))) = { \n"; $count = 0; $offset = 0; $totalsize = 0; @@ -160,12 +162,7 @@ while (1) { print "\n};\n"; close IN; -print "static struct StringCollection\n"; -print "{\n"; -print " int len;\n"; -print " int offset1, offset2;\n"; -print " ushort align1, align2;\n"; -print "} stringCollection[] = {\n"; +print "struct StringCollection stringCollection[] = {\n"; for $i (0..$count-1) { print " {", @@ -181,8 +178,8 @@ for $i (0..$count-1) { } print "};\n"; -print "static const int stringCollectionCount = $count;\n"; -print "static const int stringCollectionMaxLen = $maxlen;\n"; +print "const int stringCollectionCount = $count;\n"; +print "const int stringCollectionMaxLen = $maxlen;\n"; printf "// average comparison length: %.4f\n", ($totalsize * 1.0 / $count); printf "// cache-line crosses: %d (%.1f%%)\n", $cachelinecrosses, ($cachelinecrosses * 100.0 / $count / 2); diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 88dc40b..a23244d 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -55,7 +55,7 @@ #include <private/qsimd_p.h> -#include "data.cpp" +#include "data.h" class tst_QString: public QObject { diff --git a/tests/benchmarks/corelib/tools/qstring/qstring.pro b/tests/benchmarks/corelib/tools/qstring/qstring.pro index 44fb46b..e8720e1 100644 --- a/tests/benchmarks/corelib/tools/qstring/qstring.pro +++ b/tests/benchmarks/corelib/tools/qstring/qstring.pro @@ -1,7 +1,7 @@ load(qttest_p4) TARGET = tst_bench_qstring QT -= gui -SOURCES += main.cpp +SOURCES += main.cpp data.cpp wince*:{ DEFINES += SRCDIR=\\\"\\\" -- cgit v0.12 From 47b98097ac26de6153c7a4894aaa110133e478dc Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 17 Aug 2010 23:52:07 +0200 Subject: Add the ucstrncmp benchmarks --- tests/benchmarks/corelib/tools/qstring/main.cpp | 136 ++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index a23244d..3d88756 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -67,6 +67,8 @@ private slots: void equals_data() const; void equals2_data() const; void equals2() const; + void ucstrncmp_data() const; + void ucstrncmp() const; void fromUtf8() const; }; @@ -835,6 +837,140 @@ void tst_QString::equals2() const } } +static int ucstrncmp_shortwise(const ushort *a, const ushort *b, int l) +{ + while (l-- && *a == *b) + a++,b++; + if (l==-1) + return 0; + return *a - *b; +} + +static int ucstrncmp_intwise(const ushort *a, const ushort *b, int len) +{ + // do both strings have the same alignment? + if ((quintptr(a) & 2) == (quintptr(b) & 2)) { + // are we aligned to 4 bytes? + if (quintptr(a) & 2) { + if (*a != *b) + return *a - *b; + ++a; + ++b; + --len; + } + + const uint *p1 = (const uint *)a; + const uint *p2 = (const uint *)b; + quintptr counter = 0; + for ( ; len > 1 ; len -= 2, ++counter) { + if (p1[counter] != p2[counter]) { + // which ushort isn't equal? + int diff = a[2*counter] - b[2*counter]; + return diff ? diff : a[2*counter + 1] - b[2*counter + 1]; + } + } + + return len ? a[2*counter] - b[2*counter] : 0; + } else { + while (len-- && *a == *b) + a++,b++; + if (len==-1) + return 0; + return *a - *b; + } +} + +typedef int (* UcstrncmpFunction)(const ushort *, const ushort *, int); +Q_DECLARE_METATYPE(UcstrncmpFunction) + +void tst_QString::ucstrncmp_data() const +{ + QTest::addColumn<UcstrncmpFunction>("function"); + QTest::newRow("selftest") << UcstrncmpFunction(0); + QTest::newRow("shortwise") << &ucstrncmp_shortwise; + QTest::newRow("intwise") << &ucstrncmp_intwise; +} + +void tst_QString::ucstrncmp() const +{ + QFETCH(UcstrncmpFunction, function); + if (!function) { + static const UcstrncmpFunction func[] = { + &ucstrncmp_shortwise, + &ucstrncmp_intwise + }; + static const int functionCount = sizeof func / sizeof func[0]; + +#ifdef Q_OS_UNIX + const long pagesize = sysconf(_SC_PAGESIZE); + void *page1, *page3; + ushort *page2; + page1 = mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + page2 = (ushort *)mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, -1, 0); + page3 = mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + Q_ASSERT(quintptr(page2) == quintptr(page1) + pagesize || quintptr(page2) == quintptr(page1) - pagesize); + Q_ASSERT(quintptr(page3) == quintptr(page2) + pagesize || quintptr(page3) == quintptr(page2) - pagesize); + munmap(page1, pagesize); + munmap(page3, pagesize); + + // populate our page + for (uint i = 0; i < pagesize / sizeof(long long); ++i) + ((long long *)page2)[i] = Q_INT64_C(0x0041004100410041); + + // the following should crash: + //page2[-1] = 0xdead; + //page2[pagesize / sizeof(ushort) + 1] = 0xbeef; + + static const ushort needle[] = { + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41 + }; + + for (int algo = 0; algo < functionCount; ++algo) { + // boundary condition test: + for (int i = 0; i < 8; ++i) { + (func[algo])(page2 + i, needle, sizeof needle / 2); + (func[algo])(page2 - i - 1 - sizeof(needle)/2 + pagesize/2, needle, sizeof needle/2); + } + } + + munmap(page2, pagesize); +#endif + + for (int algo = 0; algo < functionCount; ++algo) { + for (int i = 0; i < stringCollectionCount; ++i) { + const ushort *p1 = stringCollectionData + stringCollection[i].offset1; + const ushort *p2 = stringCollectionData + stringCollection[i].offset2; + int expected = ucstrncmp_shortwise(p1, p2, stringCollection[i].len); + expected = qBound(-1, expected, 1); + + int result = (func[algo])(p1, p2, stringCollection[i].len); + result = qBound(-1, result, 1); + if (expected != result) + qWarning().nospace() + << "algo=" << algo + << " i=" << i + << " failed (" << result << "!=" << expected + << "); strings were " + << QByteArray((char*)p1, stringCollection[i].len).toHex() + << " and " + << QByteArray((char*)p2, stringCollection[i].len).toHex(); + } + } + return; + } + + QBENCHMARK { + for (int i = 0; i < stringCollectionCount; ++i) { + const ushort *p1 = stringCollectionData + stringCollection[i].offset1; + const ushort *p2 = stringCollectionData + stringCollection[i].offset2; + (function)(p1, p2, stringCollection[i].len); + } + } +} + void tst_QString::fromUtf8() const { QFile file(SRCDIR "utf-8.txt"); -- cgit v0.12 From 2bd9d7fbec0bb61298ba0f48a93a4a186b558a38 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 10:52:27 +0200 Subject: Add an SSE2-optimised version of ucstrncmp First results make it 34% faster than current ucstrncmp, 16% faster than the 32-bit version. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 39 ++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 3d88756..f338e49 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -880,6 +880,41 @@ static int ucstrncmp_intwise(const ushort *a, const ushort *b, int len) } } +#ifdef __SSE2__ +static inline int bsf_nonzero(register long val) +{ + int result; +# ifdef Q_CC_GNU + // returns the first non-zero bit on a non-zero reg + asm ("bsf %1, %0" : "=r" (result) : "r" (val)); + return result; +# elif defined(Q_CC_MSVC) + _BitScanForward(&result, val); + return result; +# endif +} + +static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2(const ushort *a, const ushort *b, int len) +{ + qptrdiff counter = 0; + while (len >= 8) { + __m128i m1 = _mm_loadu_si128((__m128i *)(a + counter)); + __m128i m2 = _mm_loadu_si128((__m128i *)(b + counter)); + __m128i cmp = _mm_cmpeq_epi16(m1, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + counter += bsf_nonzero(mask)/2; + return a[counter] - b[counter]; + } + + counter += 8; + len -= 8; + } + return ucstrncmp_shortwise(a + counter, b + counter, len); +} +#endif + typedef int (* UcstrncmpFunction)(const ushort *, const ushort *, int); Q_DECLARE_METATYPE(UcstrncmpFunction) @@ -889,6 +924,7 @@ void tst_QString::ucstrncmp_data() const QTest::newRow("selftest") << UcstrncmpFunction(0); QTest::newRow("shortwise") << &ucstrncmp_shortwise; QTest::newRow("intwise") << &ucstrncmp_intwise; + QTest::newRow("sse2") << &ucstrncmp_sse2; } void tst_QString::ucstrncmp() const @@ -897,7 +933,8 @@ void tst_QString::ucstrncmp() const if (!function) { static const UcstrncmpFunction func[] = { &ucstrncmp_shortwise, - &ucstrncmp_intwise + &ucstrncmp_intwise, + &ucstrncmp_sse2 }; static const int functionCount = sizeof func / sizeof func[0]; -- cgit v0.12 From 6f913f94c6b6aaf8514bc62d4f9939ac44e211fb Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 11:07:51 +0200 Subject: Add a version of ucstrncmp with SSE2 with aligning. This is a different technique of aligning. Instead of reading some bytes before the string, we will read some bytes of the string twice. Best results are only 2% improvement over the unaligned SSE2 on a Core-i7. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 44 ++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index f338e49..608e2bc 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -913,6 +913,46 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2(const ush } return ucstrncmp_shortwise(a + counter, b + counter, len); } + +static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning(const ushort *a, const ushort *b, int len) +{ + if (len >= 8) { + __m128i m1 = _mm_loadu_si128((__m128i *)a); + __m128i m2 = _mm_loadu_si128((__m128i *)b); + __m128i cmp = _mm_cmpeq_epi16(m1, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + int counter = bsf_nonzero(mask)/2; + return a[counter] - b[counter]; + } + + + // now align to do 16-byte loads + int diff = 8 - (quintptr(a) & 0xf)/2; + len -= diff; + a += diff; + b += diff; + } + + qptrdiff counter = 0; + while (len >= 8) { + __m128i m1 = _mm_load_si128((__m128i *)(a + counter)); + __m128i m2 = _mm_loadu_si128((__m128i *)(b + counter)); + __m128i cmp = _mm_cmpeq_epi16(m1, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + counter += bsf_nonzero(mask)/2; + return a[counter] - b[counter]; + } + + counter += 8; + len -= 8; + } + return ucstrncmp_shortwise(a + counter, b + counter, len); +} + #endif typedef int (* UcstrncmpFunction)(const ushort *, const ushort *, int); @@ -925,6 +965,7 @@ void tst_QString::ucstrncmp_data() const QTest::newRow("shortwise") << &ucstrncmp_shortwise; QTest::newRow("intwise") << &ucstrncmp_intwise; QTest::newRow("sse2") << &ucstrncmp_sse2; + QTest::newRow("sse2_aligning") << &ucstrncmp_sse2_aligning; } void tst_QString::ucstrncmp() const @@ -934,7 +975,8 @@ void tst_QString::ucstrncmp() const static const UcstrncmpFunction func[] = { &ucstrncmp_shortwise, &ucstrncmp_intwise, - &ucstrncmp_sse2 + &ucstrncmp_sse2, + &ucstrncmp_sse2_aligning }; static const int functionCount = sizeof func / sizeof func[0]; -- cgit v0.12 From 6cea948a0ceabe5493bb2a75f236b008b47fd71e Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 12:26:36 +0200 Subject: Optimise the tail comparison of ucstrncmp --- tests/benchmarks/corelib/tools/qstring/main.cpp | 38 +++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 608e2bc..0b7254f 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -881,6 +881,40 @@ static int ucstrncmp_intwise(const ushort *a, const ushort *b, int len) } #ifdef __SSE2__ +static inline int ucstrncmp_short_tail(const ushort *p1, const ushort *p2, int len) +{ + if (len) { + if (*p1 != *p2) + return *p1 - *p2; + if (--len) { + if (p1[1] != p2[1]) + return p1[1] - p2[1]; + if (--len) { + if (p1[2] != p2[2]) + return p1[2] - p2[2]; + if (--len) { + if (p1[3] != p2[3]) + return p1[3] - p2[3]; + if (--len) { + if (p1[4] != p2[4]) + return p1[4] - p2[4]; + if (--len) { + if (p1[5] != p2[5]) + return p1[5] - p2[5]; + if (--len) { + if (p1[6] != p2[6]) + return p1[6] - p2[6]; + return p1[7] - p2[7]; + } + } + } + } + } + } + } + return 0; +} + static inline int bsf_nonzero(register long val) { int result; @@ -911,7 +945,7 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2(const ush counter += 8; len -= 8; } - return ucstrncmp_shortwise(a + counter, b + counter, len); + return ucstrncmp_short_tail(a + counter, b + counter, len); } static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning(const ushort *a, const ushort *b, int len) @@ -950,7 +984,7 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning( counter += 8; len -= 8; } - return ucstrncmp_shortwise(a + counter, b + counter, len); + return ucstrncmp_short_tail(a + counter, b + counter, len); } #endif -- cgit v0.12 From 08fa99c43897b16f8be924090316f5a4db548c10 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 12:26:53 +0200 Subject: Add an SSSE3 version of ucstrncmp --- tests/benchmarks/corelib/tools/qstring/main.cpp | 80 ++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 0b7254f..3c3d1ad 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -987,6 +987,82 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning( return ucstrncmp_short_tail(a + counter, b + counter, len); } +static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligned(const ushort *a, const ushort *b, int len) +{ + qptrdiff counter = 0; + while (len >= 8) { + __m128i m1 = _mm_load_si128((__m128i *)(a + counter)); + __m128i m2 = _mm_load_si128((__m128i *)(b + counter)); + __m128i cmp = _mm_cmpeq_epi16(m1, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + counter += bsf_nonzero(mask)/2; + return a[counter] - b[counter]; + } + + counter += 8; + len -= 8; + } + return ucstrncmp_short_tail(a + counter, b + counter, len); +} + +template<int N> static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_alignr(const ushort *a, const ushort *b, int len) +{ + qptrdiff counter = 0; + __m128i lower, upper; + upper = _mm_load_si128((__m128i *)a); + + do { + lower = upper; + upper = _mm_load_si128((__m128i *)(a + counter) + 1); + __m128i merged = _mm_alignr_epi8(upper, lower, N); + + __m128i m2 = _mm_lddqu_si128((__m128i *)(b + counter)); + __m128i cmp = _mm_cmpeq_epi16(merged, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + counter += bsf_nonzero(mask)/2; + return a[counter + N/2] - b[counter]; + } + + counter += 8; + len -= 8; + } while (len >= 8); + + return ucstrncmp_short_tail(a + counter + N/2, b + counter, len); +} + +static int ucstrncmp_ssse3(const ushort *a, const ushort *b, int len) +{ + if (len >= 8) { + int val = quintptr(a) & 0xf; + a -= val/2; + + if (val == 10) + return ucstrncmp_ssse3_alignr<10>(a, b, len); + else if (val == 2) + return ucstrncmp_ssse3_alignr<2>(a, b, len); + if (val < 8) { + if (val < 4) + return ucstrncmp_sse2_aligned(a, b, len); + else if (val == 4) + return ucstrncmp_ssse3_alignr<4>(a, b, len); + else + return ucstrncmp_ssse3_alignr<6>(a, b, len); + } else { + if (val < 12) + return ucstrncmp_ssse3_alignr<8>(a, b, len); + else if (val == 12) + return ucstrncmp_ssse3_alignr<12>(a, b, len); + else + return ucstrncmp_ssse3_alignr<14>(a, b, len); + } + } + return ucstrncmp_short_tail(a, b, len); +} + #endif typedef int (* UcstrncmpFunction)(const ushort *, const ushort *, int); @@ -1000,6 +1076,7 @@ void tst_QString::ucstrncmp_data() const QTest::newRow("intwise") << &ucstrncmp_intwise; QTest::newRow("sse2") << &ucstrncmp_sse2; QTest::newRow("sse2_aligning") << &ucstrncmp_sse2_aligning; + QTest::newRow("ssse3") << &ucstrncmp_ssse3; } void tst_QString::ucstrncmp() const @@ -1010,7 +1087,8 @@ void tst_QString::ucstrncmp() const &ucstrncmp_shortwise, &ucstrncmp_intwise, &ucstrncmp_sse2, - &ucstrncmp_sse2_aligning + &ucstrncmp_sse2_aligning, + &ucstrncmp_ssse3 }; static const int functionCount = sizeof func / sizeof func[0]; -- cgit v0.12 From 4f891889118d4bcc417382a0a646f3683c621b10 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 12:36:07 +0200 Subject: Add an ucstrncmp that uses SSSE3 with aligning. The results on i7 are 32% improvement over current code, 13% improvement over 4-byte loads, 6% over the unaligned SSSE3 loads. However, it's about 2.5% slower than pure SSE2 code due to complexity. The results on Atom are 30% improvement over current code, 7% over 4-byte loads, 15% over pure unaligned SSE2 and 9% over unaligned SSSE3. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 53 ++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 3c3d1ad..d40b9bc 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1063,6 +1063,55 @@ static int ucstrncmp_ssse3(const ushort *a, const ushort *b, int len) return ucstrncmp_short_tail(a, b, len); } +static int ucstrncmp_ssse3_aligning(const ushort *a, const ushort *b, int len) +{ + if (len >= 8) { + __m128i m1 = _mm_loadu_si128((__m128i *)a); + __m128i m2 = _mm_loadu_si128((__m128i *)b); + __m128i cmp = _mm_cmpeq_epi16(m1, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + int counter = bsf_nonzero(mask)/2; + return a[counter] - b[counter]; + } + + + // now 'b' align to do 16-byte loads + int diff = 8 - (quintptr(b) & 0xf)/2; + len -= diff; + a += diff; + b += diff; + } + + if (len < 8) + return ucstrncmp_short_tail(a, b, len); + + // 'b' is aligned + int val = quintptr(a) & 0xf; + a -= val/2; + + if (val == 8) + return ucstrncmp_ssse3_alignr<8>(a, b, len); + else if (val == 0) + return ucstrncmp_sse2_aligned(a, b, len); + if (val < 8) { + if (val < 4) + return ucstrncmp_ssse3_alignr<2>(a, b, len); + else if (val == 4) + return ucstrncmp_ssse3_alignr<4>(a, b, len); + else + return ucstrncmp_ssse3_alignr<6>(a, b, len); + } else { + if (val < 12) + return ucstrncmp_ssse3_alignr<10>(a, b, len); + else if (val == 12) + return ucstrncmp_ssse3_alignr<12>(a, b, len); + else + return ucstrncmp_ssse3_alignr<14>(a, b, len); + } +} + #endif typedef int (* UcstrncmpFunction)(const ushort *, const ushort *, int); @@ -1077,6 +1126,7 @@ void tst_QString::ucstrncmp_data() const QTest::newRow("sse2") << &ucstrncmp_sse2; QTest::newRow("sse2_aligning") << &ucstrncmp_sse2_aligning; QTest::newRow("ssse3") << &ucstrncmp_ssse3; + QTest::newRow("ssse3_aligning") << &ucstrncmp_ssse3_aligning; } void tst_QString::ucstrncmp() const @@ -1088,7 +1138,8 @@ void tst_QString::ucstrncmp() const &ucstrncmp_intwise, &ucstrncmp_sse2, &ucstrncmp_sse2_aligning, - &ucstrncmp_ssse3 + &ucstrncmp_ssse3, + &ucstrncmp_ssse3_aligning }; static const int functionCount = sizeof func / sizeof func[0]; -- cgit v0.12 From 5e8d8f82d38ce5a1b30d5d90ecb6bc096d52f4d8 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 12:47:31 +0200 Subject: Update the SSSE3-with-alignment function to use aligned loads. This results in no change on the Core-i7, but another 2.6% on the Atom (so it's now 8% better than 4-byte loads and 31% better than current code) --- tests/benchmarks/corelib/tools/qstring/main.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index d40b9bc..e11d92e 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1007,7 +1007,9 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligned(c return ucstrncmp_short_tail(a + counter, b + counter, len); } -template<int N> static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_alignr(const ushort *a, const ushort *b, int len) +typedef __m128i (* MMLoadFunction)(const __m128i *); +template<int N, MMLoadFunction LoadFunction = _mm_lddqu_si128> +static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_alignr(const ushort *a, const ushort *b, int len) { qptrdiff counter = 0; __m128i lower, upper; @@ -1018,7 +1020,7 @@ template<int N> static __attribute__((optimize("no-unroll-loops"))) int ucstrncm upper = _mm_load_si128((__m128i *)(a + counter) + 1); __m128i merged = _mm_alignr_epi8(upper, lower, N); - __m128i m2 = _mm_lddqu_si128((__m128i *)(b + counter)); + __m128i m2 = LoadFunction((__m128i *)(b + counter)); __m128i cmp = _mm_cmpeq_epi16(merged, m2); ushort mask = ~uint(_mm_movemask_epi8(cmp)); if (mask) { @@ -1092,23 +1094,23 @@ static int ucstrncmp_ssse3_aligning(const ushort *a, const ushort *b, int len) a -= val/2; if (val == 8) - return ucstrncmp_ssse3_alignr<8>(a, b, len); + return ucstrncmp_ssse3_alignr<8, _mm_load_si128>(a, b, len); else if (val == 0) return ucstrncmp_sse2_aligned(a, b, len); if (val < 8) { if (val < 4) - return ucstrncmp_ssse3_alignr<2>(a, b, len); + return ucstrncmp_ssse3_alignr<2, _mm_load_si128>(a, b, len); else if (val == 4) - return ucstrncmp_ssse3_alignr<4>(a, b, len); + return ucstrncmp_ssse3_alignr<4, _mm_load_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<6>(a, b, len); + return ucstrncmp_ssse3_alignr<6, _mm_load_si128>(a, b, len); } else { if (val < 12) - return ucstrncmp_ssse3_alignr<10>(a, b, len); + return ucstrncmp_ssse3_alignr<10, _mm_load_si128>(a, b, len); else if (val == 12) - return ucstrncmp_ssse3_alignr<12>(a, b, len); + return ucstrncmp_ssse3_alignr<12, _mm_load_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<14>(a, b, len); + return ucstrncmp_ssse3_alignr<14, _mm_load_si128>(a, b, len); } } -- cgit v0.12 From 637d94620c86172714ab11a258f6c5d4d02c272b Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 18 Aug 2010 13:59:58 +0200 Subject: Small fixup --- tests/benchmarks/corelib/tools/qstring/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index e11d92e..6f9c333 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -987,7 +987,7 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning( return ucstrncmp_short_tail(a + counter, b + counter, len); } -static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligned(const ushort *a, const ushort *b, int len) +static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligned(const ushort *a, const ushort *b, int len) { qptrdiff counter = 0; while (len >= 8) { -- cgit v0.12 From 410d836b5b4f029e9bc08a0ed3304df2e4a944a5 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 19 Aug 2010 11:59:34 +0200 Subject: Add the beginnings of a new SSSE3-based aligning algorithm --- tests/benchmarks/corelib/tools/qstring/main.cpp | 84 ++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 6f9c333..4c4d921 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1114,6 +1114,86 @@ static int ucstrncmp_ssse3_aligning(const ushort *a, const ushort *b, int len) } } +static inline __attribute__((optimize("no-unroll-loops"))) +int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len) +{ + // len >= 8 + // align(b) == align(a) + + // round down the alignment so align(b) == align(a) == 0 + // calculate how many garbage bytes we'll read on the first load + // corresponds to how many bits we must ignore from movemask's result + int garbage = (quintptr(b) & 0xf); + a -= garbage / 2; + b -= garbage / 2; + + __m128i m1 = _mm_load_si128((const __m128i *)a); + __m128i m2 = _mm_load_si128((const __m128i *)b); + __m128i cmp = _mm_cmpeq_epi16(m1, m2); + int mask = short(_mm_movemask_epi8(cmp)); // force sign extension + mask >>= garbage; + if (~mask) { + // which ushort isn't equal? + int counter = (garbage + bsf_nonzero(~mask))/2; + return a[counter] - b[counter]; + } + + // the first 16-garbage bytes (8-garbage/2 ushorts) were equal + len -= 8 - garbage/2; + return ucstrncmp_sse2_aligned(a + 8, b + 8, len); +} + +template<int N> static inline __attribute__((optimize("no-unroll-loops"))) +int ucstrncmp_ssse3_aligning2_alignr(const ushort *a, const ushort *b, int len) +{ + return ucstrncmp_intwise(a, b, len); +} + +static int ucstrncmp_ssse3_aligning2(const ushort *a, const ushort *b, int len) +{ + // Different strategy from above: instead of doing two unaligned loads + // when trying to align, we'll only do aligned loads and round down the + // addresses of a and b. This means the first load will contain garbage + // in the beginning of the string, which we'll shift out of the way + // (after _mm_movemask_epi8) + + if (len < 16) + return ucstrncmp_intwise(a, b, len); + + // both a and b are misaligned + // we'll call the alignr function with the alignment *difference* between the two + int val = (quintptr(b) & 0xf) - (quintptr(a) & 0xf); + int sign = 1; + if (val < 0) { + val = -val; + qSwap(a, b); + sign = -1; + } + + // from this point on, b has the shortest alignment + // and align(a) = align(b) + val + + if (val == 8) + return ucstrncmp_ssse3_aligning2_alignr<8>(a, b, len) * sign; + else if (val == 0) + return ucstrncmp_ssse3_aligning2_aligned(a, b, len) * sign; + if (val < 8) { + if (val < 4) + return ucstrncmp_ssse3_aligning2_alignr<2>(a, b, len) * sign; + else if (val == 4) + return ucstrncmp_ssse3_aligning2_alignr<4>(a, b, len) * sign; + else + return ucstrncmp_ssse3_aligning2_alignr<6>(a, b, len) * sign; + } else { + if (val < 12) + return ucstrncmp_ssse3_aligning2_alignr<10>(a, b, len) * sign; + else if (val == 12) + return ucstrncmp_ssse3_aligning2_alignr<12>(a, b, len) * sign; + else + return ucstrncmp_ssse3_aligning2_alignr<14>(a, b, len) * sign; + } +} + #endif typedef int (* UcstrncmpFunction)(const ushort *, const ushort *, int); @@ -1129,6 +1209,7 @@ void tst_QString::ucstrncmp_data() const QTest::newRow("sse2_aligning") << &ucstrncmp_sse2_aligning; QTest::newRow("ssse3") << &ucstrncmp_ssse3; QTest::newRow("ssse3_aligning") << &ucstrncmp_ssse3_aligning; + QTest::newRow("ssse3_aligning2") << &ucstrncmp_ssse3_aligning2; } void tst_QString::ucstrncmp() const @@ -1141,7 +1222,8 @@ void tst_QString::ucstrncmp() const &ucstrncmp_sse2, &ucstrncmp_sse2_aligning, &ucstrncmp_ssse3, - &ucstrncmp_ssse3_aligning + &ucstrncmp_ssse3_aligning, + &ucstrncmp_ssse3_aligning2 }; static const int functionCount = sizeof func / sizeof func[0]; -- cgit v0.12 From 3cfd8330d5252d6ca9439882cb4a0f2246cccfc0 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 19 Aug 2010 15:09:49 +0200 Subject: Improve on the SSSE3 with alternate aligning function. Even though this function *only* does aligned loads, it's worse than the other function --- tests/benchmarks/corelib/tools/qstring/main.cpp | 139 +++++++++++++++++------- 1 file changed, 101 insertions(+), 38 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 4c4d921..d2861b6 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -259,7 +259,7 @@ static inline bool equals2_short_tail(const ushort *p1, const ushort *p2, int le return true; } -#pragma GCC optimize("no-unroll-loops") +#pragma GCC optimize("unroll-loops off") #ifdef __SSE2__ static bool equals2_sse2_aligned(const ushort *p1, const ushort *p2, int len) { @@ -989,7 +989,7 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning( static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligned(const ushort *a, const ushort *b, int len) { - qptrdiff counter = 0; + quintptr counter = 0; while (len >= 8) { __m128i m1 = _mm_load_si128((__m128i *)(a + counter)); __m128i m2 = _mm_load_si128((__m128i *)(b + counter)); @@ -1007,8 +1007,29 @@ static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_al return ucstrncmp_short_tail(a + counter, b + counter, len); } +static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_alignr_aligned(const ushort *a, const ushort *b, int len) +{ + quintptr counter = 0; + while (len >= 8) { + __m128i m1 = _mm_load_si128((__m128i *)(a + counter)); + __m128i m2 = _mm_lddqu_si128((__m128i *)(b + counter)); + __m128i cmp = _mm_cmpeq_epi16(m1, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + counter += bsf_nonzero(mask)/2; + return a[counter] - b[counter]; + } + + counter += 8; + len -= 8; + } + return ucstrncmp_short_tail(a + counter, b + counter, len); +} + + typedef __m128i (* MMLoadFunction)(const __m128i *); -template<int N, MMLoadFunction LoadFunction = _mm_lddqu_si128> +template<int N, MMLoadFunction LoadFunction> static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_alignr(const ushort *a, const ushort *b, int len) { qptrdiff counter = 0; @@ -1043,23 +1064,23 @@ static int ucstrncmp_ssse3(const ushort *a, const ushort *b, int len) a -= val/2; if (val == 10) - return ucstrncmp_ssse3_alignr<10>(a, b, len); + return ucstrncmp_ssse3_alignr<10, _mm_lddqu_si128>(a, b, len); else if (val == 2) - return ucstrncmp_ssse3_alignr<2>(a, b, len); + return ucstrncmp_ssse3_alignr<2, _mm_lddqu_si128>(a, b, len); if (val < 8) { if (val < 4) - return ucstrncmp_sse2_aligned(a, b, len); + return ucstrncmp_ssse3_alignr_aligned(a, b, len); else if (val == 4) - return ucstrncmp_ssse3_alignr<4>(a, b, len); + return ucstrncmp_ssse3_alignr<4, _mm_lddqu_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<6>(a, b, len); + return ucstrncmp_ssse3_alignr<6, _mm_lddqu_si128>(a, b, len); } else { if (val < 12) - return ucstrncmp_ssse3_alignr<8>(a, b, len); + return ucstrncmp_ssse3_alignr<8, _mm_lddqu_si128>(a, b, len); else if (val == 12) - return ucstrncmp_ssse3_alignr<12>(a, b, len); + return ucstrncmp_ssse3_alignr<12, _mm_lddqu_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<14>(a, b, len); + return ucstrncmp_ssse3_alignr<14, _mm_lddqu_si128>(a, b, len); } } return ucstrncmp_short_tail(a, b, len); @@ -1115,18 +1136,9 @@ static int ucstrncmp_ssse3_aligning(const ushort *a, const ushort *b, int len) } static inline __attribute__((optimize("no-unroll-loops"))) -int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len) +int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len, int garbage) { // len >= 8 - // align(b) == align(a) - - // round down the alignment so align(b) == align(a) == 0 - // calculate how many garbage bytes we'll read on the first load - // corresponds to how many bits we must ignore from movemask's result - int garbage = (quintptr(b) & 0xf); - a -= garbage / 2; - b -= garbage / 2; - __m128i m1 = _mm_load_si128((const __m128i *)a); __m128i m2 = _mm_load_si128((const __m128i *)b); __m128i cmp = _mm_cmpeq_epi16(m1, m2); @@ -1134,8 +1146,8 @@ int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len) mask >>= garbage; if (~mask) { // which ushort isn't equal? - int counter = (garbage + bsf_nonzero(~mask))/2; - return a[counter] - b[counter]; + uint counter = (garbage + bsf_nonzero(~mask)); + return a[counter/2] - b[counter/2]; } // the first 16-garbage bytes (8-garbage/2 ushorts) were equal @@ -1144,9 +1156,53 @@ int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len) } template<int N> static inline __attribute__((optimize("no-unroll-loops"))) -int ucstrncmp_ssse3_aligning2_alignr(const ushort *a, const ushort *b, int len) +int ucstrncmp_ssse3_aligning2_alignr(const ushort *a, const ushort *b, int len, int garbage) +{ + // len >= 8 + __m128i lower, upper, merged; + lower = _mm_load_si128((const __m128i*)a); + upper = _mm_load_si128((const __m128i*)(a + 8)); + merged = _mm_alignr_epi8(upper, lower, N); + + __m128i m2 = _mm_load_si128((const __m128i*)b); + __m128i cmp = _mm_cmpeq_epi16(merged, m2); + int mask = short(_mm_movemask_epi8(cmp)); // force sign extension + mask >>= garbage; + if (~mask) { + // which ushort isn't equal? + uint counter = (garbage + bsf_nonzero(~mask)); + return a[counter/2 + N/2] - b[counter/2]; + } + + // the first 16-garbage bytes (8-garbage/2 ushorts) were equal + quintptr counter = 8; + len -= 8 - garbage/2; + while (len >= 8) { + lower = upper; + upper = _mm_load_si128((__m128i *)(a + counter) + 1); + merged = _mm_alignr_epi8(upper, lower, N); + + m2 = _mm_load_si128((__m128i *)(b + counter)); + cmp = _mm_cmpeq_epi16(merged, m2); + ushort mask = ~uint(_mm_movemask_epi8(cmp)); + if (mask) { + // which ushort isn't equal? + counter += bsf_nonzero(mask)/2; + return a[counter + N/2] - b[counter]; + } + + counter += 8; + len -= 8; + } + + return ucstrncmp_short_tail(a + counter + N/2, b + counter, len); +} + +static inline int conditional_invert(int result, bool invert) { - return ucstrncmp_intwise(a, b, len); + if (invert) + return -result; + return result; } static int ucstrncmp_ssse3_aligning2(const ushort *a, const ushort *b, int len) @@ -1157,40 +1213,47 @@ static int ucstrncmp_ssse3_aligning2(const ushort *a, const ushort *b, int len) // in the beginning of the string, which we'll shift out of the way // (after _mm_movemask_epi8) - if (len < 16) + if (len < 8) return ucstrncmp_intwise(a, b, len); // both a and b are misaligned // we'll call the alignr function with the alignment *difference* between the two - int val = (quintptr(b) & 0xf) - (quintptr(a) & 0xf); - int sign = 1; + int val = (quintptr(a) & 0xf) - (quintptr(b) & 0xf); + bool invert = false; if (val < 0) { val = -val; - qSwap(a, b); - sign = -1; + //qSwap(a, b); + asm ("xchg %0, %1" : "+r" (a), "+r" (b)); + invert = true; } // from this point on, b has the shortest alignment // and align(a) = align(b) + val + // round down the alignment so align(b) == align(a) == 0 + int garbage = (quintptr(b) & 0xf); + a = (const ushort*)(quintptr(a) & ~0xf); + b = (const ushort*)(quintptr(b) & ~0xf); + // now the first load of b will load 'garbage' extra bytes + // and the first load of a will load 'garbage + val' extra bytes if (val == 8) - return ucstrncmp_ssse3_aligning2_alignr<8>(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<8>(a, b, len, garbage), invert); else if (val == 0) - return ucstrncmp_ssse3_aligning2_aligned(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_aligned(a, b, len, garbage), invert); if (val < 8) { if (val < 4) - return ucstrncmp_ssse3_aligning2_alignr<2>(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<2>(a, b, len, garbage), invert); else if (val == 4) - return ucstrncmp_ssse3_aligning2_alignr<4>(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<4>(a, b, len, garbage), invert); else - return ucstrncmp_ssse3_aligning2_alignr<6>(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<6>(a, b, len, garbage), invert); } else { if (val < 12) - return ucstrncmp_ssse3_aligning2_alignr<10>(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<10>(a, b, len, garbage), invert); else if (val == 12) - return ucstrncmp_ssse3_aligning2_alignr<12>(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<12>(a, b, len, garbage), invert); else - return ucstrncmp_ssse3_aligning2_alignr<14>(a, b, len) * sign; + return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<14>(a, b, len, garbage), invert); } } -- cgit v0.12 From 469210fdf9287dc8a4933e0761bbff91a031045f Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 24 Aug 2010 12:14:41 +0200 Subject: Don't try to compile the SSE2 and SSSE3 code with compilers that don't support them (e.g. ARM) --- tests/benchmarks/corelib/tools/qstring/main.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index d2861b6..3b86792 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -163,7 +163,7 @@ static bool equals2_bytewise(const ushort *p1, const ushort *p2, int len) return true; } -static bool __attribute__((optimize("unroll-loops"))) equals2_shortwise(const ushort *p1, const ushort *p2, int len) +static bool equals2_shortwise(const ushort *p1, const ushort *p2, int len) { if (p1 == p2 || !len) return true; @@ -259,7 +259,7 @@ static inline bool equals2_short_tail(const ushort *p1, const ushort *p2, int le return true; } -#pragma GCC optimize("unroll-loops off") +//#pragma GCC optimize("no-unroll-loops") #ifdef __SSE2__ static bool equals2_sse2_aligned(const ushort *p1, const ushort *p2, int len) { @@ -1155,7 +1155,7 @@ int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len, return ucstrncmp_sse2_aligned(a + 8, b + 8, len); } -template<int N> static inline __attribute__((optimize("no-unroll-loops"))) +template<int N> static inline __attribute__((optimize("no-unroll-loops"),always_inline)) int ucstrncmp_ssse3_aligning2_alignr(const ushort *a, const ushort *b, int len, int garbage) { // len >= 8 @@ -1268,11 +1268,15 @@ void tst_QString::ucstrncmp_data() const QTest::newRow("selftest") << UcstrncmpFunction(0); QTest::newRow("shortwise") << &ucstrncmp_shortwise; QTest::newRow("intwise") << &ucstrncmp_intwise; +#ifdef __SSE2__ QTest::newRow("sse2") << &ucstrncmp_sse2; QTest::newRow("sse2_aligning") << &ucstrncmp_sse2_aligning; +#ifdef __SSSE3__ QTest::newRow("ssse3") << &ucstrncmp_ssse3; QTest::newRow("ssse3_aligning") << &ucstrncmp_ssse3_aligning; QTest::newRow("ssse3_aligning2") << &ucstrncmp_ssse3_aligning2; +#endif +#endif } void tst_QString::ucstrncmp() const @@ -1282,11 +1286,15 @@ void tst_QString::ucstrncmp() const static const UcstrncmpFunction func[] = { &ucstrncmp_shortwise, &ucstrncmp_intwise, +#ifdef __SSE2__ &ucstrncmp_sse2, &ucstrncmp_sse2_aligning, +#ifdef __SSSE3__ &ucstrncmp_ssse3, &ucstrncmp_ssse3_aligning, &ucstrncmp_ssse3_aligning2 +#endif +#endif }; static const int functionCount = sizeof func / sizeof func[0]; -- cgit v0.12 From 9a468f59472e8978aa18b75e9786718a8823bbec Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 24 Aug 2010 12:15:36 +0200 Subject: Unroll the SSSE3 code even more to avoid the need to keep an extra variable for inverting the result On 32-bit, we're out of registers already, so this variable ended up in memory --- tests/benchmarks/corelib/tools/qstring/main.cpp | 88 +++++++++++++++---------- 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 3b86792..9616052 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1218,42 +1218,60 @@ static int ucstrncmp_ssse3_aligning2(const ushort *a, const ushort *b, int len) // both a and b are misaligned // we'll call the alignr function with the alignment *difference* between the two - int val = (quintptr(a) & 0xf) - (quintptr(b) & 0xf); - bool invert = false; - if (val < 0) { - val = -val; - //qSwap(a, b); - asm ("xchg %0, %1" : "+r" (a), "+r" (b)); - invert = true; - } - - // from this point on, b has the shortest alignment - // and align(a) = align(b) + val - // round down the alignment so align(b) == align(a) == 0 - int garbage = (quintptr(b) & 0xf); - a = (const ushort*)(quintptr(a) & ~0xf); - b = (const ushort*)(quintptr(b) & ~0xf); - - // now the first load of b will load 'garbage' extra bytes - // and the first load of a will load 'garbage + val' extra bytes - if (val == 8) - return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<8>(a, b, len, garbage), invert); - else if (val == 0) - return conditional_invert(ucstrncmp_ssse3_aligning2_aligned(a, b, len, garbage), invert); - if (val < 8) { - if (val < 4) - return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<2>(a, b, len, garbage), invert); - else if (val == 4) - return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<4>(a, b, len, garbage), invert); - else - return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<6>(a, b, len, garbage), invert); + int offset = (quintptr(a) & 0xf) - (quintptr(b) & 0xf); + if (offset >= 0) { + // from this point on, b has the shortest alignment + // and align(a) = align(b) + offset + // round down the alignment so align(b) == align(a) == 0 + int garbage = (quintptr(b) & 0xf); + a = (const ushort*)(quintptr(a) & ~0xf); + b = (const ushort*)(quintptr(b) & ~0xf); + + // now the first load of b will load 'garbage' extra bytes + // and the first load of a will load 'garbage + offset' extra bytes + if (offset == 8) + return ucstrncmp_ssse3_aligning2_alignr<8>(a, b, len, garbage); + if (offset == 0) + return ucstrncmp_ssse3_aligning2_aligned(a, b, len, garbage); + if (offset < 8) { + if (offset < 4) + return ucstrncmp_ssse3_aligning2_alignr<2>(a, b, len, garbage); + else if (offset == 4) + return ucstrncmp_ssse3_aligning2_alignr<4>(a, b, len, garbage); + else + return ucstrncmp_ssse3_aligning2_alignr<6>(a, b, len, garbage); + } else { + if (offset < 12) + return ucstrncmp_ssse3_aligning2_alignr<10>(a, b, len, garbage); + else if (offset == 12) + return ucstrncmp_ssse3_aligning2_alignr<12>(a, b, len, garbage); + else + return ucstrncmp_ssse3_aligning2_alignr<14>(a, b, len, garbage); + } } else { - if (val < 12) - return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<10>(a, b, len, garbage), invert); - else if (val == 12) - return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<12>(a, b, len, garbage), invert); - else - return conditional_invert(ucstrncmp_ssse3_aligning2_alignr<14>(a, b, len, garbage), invert); + // same as above but inverted + int garbage = (quintptr(a) & 0xf); + a = (const ushort*)(quintptr(a) & ~0xf); + b = (const ushort*)(quintptr(b) & ~0xf); + + offset = -offset; + if (offset == 8) + return -ucstrncmp_ssse3_aligning2_alignr<8>(b, a, len, garbage); + if (offset < 8) { + if (offset < 4) + return -ucstrncmp_ssse3_aligning2_alignr<2>(b, a, len, garbage); + else if (offset == 4) + return -ucstrncmp_ssse3_aligning2_alignr<4>(b, a, len, garbage); + else + return -ucstrncmp_ssse3_aligning2_alignr<6>(b, a, len, garbage); + } else { + if (offset < 12) + return -ucstrncmp_ssse3_aligning2_alignr<10>(b, a, len, garbage); + else if (offset == 12) + return -ucstrncmp_ssse3_aligning2_alignr<12>(b, a, len, garbage); + else + return -ucstrncmp_ssse3_aligning2_alignr<14>(b, a, len, garbage); + } } } -- cgit v0.12 From 189a18eddfa7504a604060172a394bda60aeba10 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko <denis.dzyubenko@nokia.com> Date: Tue, 24 Aug 2010 13:07:09 +0200 Subject: Fixed delivering gestures to a toplevel widget. If there is only one widget which is a toplevel, then gestures were not delivered to it because we assumed (wrong) that there is at least one child widget. Reviewed-by: Frederik Gladhorn --- src/gui/kernel/qgesturemanager.cpp | 5 +++-- tests/auto/gestures/tst_gestures.cpp | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index e768a21..cb4061e 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -595,8 +595,9 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures, if (gesture->hasHotSpot()) { // guess the target widget using the hotspot of the gesture QPoint pt = gesture->hotSpot().toPoint(); - if (QWidget *w = qApp->topLevelAt(pt)) { - target = w->childAt(w->mapFromGlobal(pt)); + if (QWidget *topLevel = qApp->topLevelAt(pt)) { + QWidget *child = topLevel->childAt(topLevel->mapFromGlobal(pt)); + target = child ? child : topLevel; } } else { // or use the context of the gesture diff --git a/tests/auto/gestures/tst_gestures.cpp b/tests/auto/gestures/tst_gestures.cpp index a968520..ddc3939 100644 --- a/tests/auto/gestures/tst_gestures.cpp +++ b/tests/auto/gestures/tst_gestures.cpp @@ -395,7 +395,12 @@ void tst_Gestures::customGesture() { GestureWidget widget; widget.grabGesture(CustomGesture::GestureType, Qt::DontStartGestureOnChildren); + widget.show(); + QTest::qWaitForWindowShown(&widget); + CustomEvent event; + event.hotSpot = widget.mapToGlobal(QPoint(5,5)); + event.hasHotSpot = true; sendCustomGesture(&event, &widget); static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1; -- cgit v0.12 From ee2db9a735a2c1f64e7f99f0ecfd40bf320911eb Mon Sep 17 00:00:00 2001 From: Jesper Thomschutz <jesper.thomschutz@nokia.com> Date: Tue, 24 Aug 2010 14:53:10 +0200 Subject: Doc: updating getting started docs - not finished (cherry picked from commit b83f3a98fe5688872b4bd9a871e544951cb33e29) Conflicts: doc/src/getting-started/gettingstarted.qdoc --- doc/src/getting-started/gettingstarted.qdoc | 37 + doc/src/getting-started/gettingstartedqml.qdoc | 1050 ++++++++++++++++++++++++ doc/src/getting-started/gettingstartedqt.qdoc | 517 ++++++++++++ doc/src/platforms/platform-notes.qdocinc | 0 4 files changed, 1604 insertions(+) create mode 100644 doc/src/getting-started/gettingstarted.qdoc create mode 100644 doc/src/getting-started/gettingstartedqml.qdoc create mode 100644 doc/src/getting-started/gettingstartedqt.qdoc create mode 100644 doc/src/platforms/platform-notes.qdocinc diff --git a/doc/src/getting-started/gettingstarted.qdoc b/doc/src/getting-started/gettingstarted.qdoc new file mode 100644 index 0000000..145982b --- /dev/null +++ b/doc/src/getting-started/gettingstarted.qdoc @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in a +** written agreement between you and Nokia. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \title Getting Started Guides + + \group gettingStarted + + Following is a list. + \generatelist{related} + +*/ + diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc new file mode 100644 index 0000000..2bfb71c --- /dev/null +++ b/doc/src/getting-started/gettingstartedqml.qdoc @@ -0,0 +1,1050 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in a +** written agreement between you and Nokia. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qml-textEditor.html + + \title Getting Started programming with QML + \ingroup gettingStarted + + Welcome to the world of QML - the declarative UI language. In this Getting + Started guide, we will create a simple text editor application using QML. + After reading this guide, you should be ready to develop your own applications + using QML and Qt C++. + + \section1 QML to Build User Interfaces + + The application we are building is a simple text editor that will load, save, + and perform some text manipulation. This guide will consist of two parts. The + first part will involve designing the application layout and behaviors using + declarative language in QML. For the second part, file loading and saving will + be implemented using Qt C++. Using + \l {The Meta-Object System}{Qt's Meta-Object System}, we can expose C++ functions + as properties that QML elements can use. Utilizing QML and Qt C++, we can + efficiently decouple the interface logic from the application logic. + + \image qml-texteditor5_editmenu.png + + To run the QML example code, merely provide the included \l{QML Viewer}{qmlviewer} + tool with the QML file as the argument. The C++ portion of this tutorial assumes + that the reader possesses basic knowledge of Qt's compilation procedures. + + Tutorial chapters: + \list 1 + \o \l {Defining a Button and a Menu}{Defining a Button and a Menu} + \o \l {Implementing a Menu Bar}{Implementing a Menu Bar} + \o \l {Building a Text Editor}{Building a Text Editor} + \o \l {Decorating the Text Editor}{Decorating the Text Editor} + \o \l {Extending QML using Qt C++}{Extending QML using Qt C++} + \endlist + + \section1 Defining a Button and a Menu + + \section2 Basic Component - a Button + + We start our text editor by building a button. Functionally, a button has a mouse + sensitive area and a label. Buttons perform actions when a user presses the button. + + In QML, the basic visual item is the \l {Rectangle}{Rectangle} element. The + \c Rectangle element has properties to control the element's appearance and location. + + \code + import Qt 4.7 + Rectangle { + id: simplebutton + color: "grey" + width: 150; height: 75 + + Text{ + id: buttonLabel + anchors.centerIn: parent + text: "button label" + } + } + \endcode + + First, the \c { import Qt 4.7 } allows the qmlviewer tool to import the QML elements + we will later use. This line must exist for every QML file. Notice that the version + of Qt modules is included in the import statement. + + This simple rectangle has a unique identifier, \c simplebutton, which is bound to the + id property. The \c Rectangle element's properties are bound to values by listing the + property, followed by a colon, then the value. In the code sample, the color \c grey + is bound to the the Rectangle's \c color property. Similarly, we bind the \c width + and \c height of the Rectangle. + + The \l {Text}{Text} element is a non-editable text field. We name this \c Text element + \c buttonLabel. To set the string content of the Text field, we bind a value to the + \c text property. The label is contained within the Rectangle and in order to center + it in the middle, we assign the \c anchors of the Text element to its parent, which + is called \c simplebutton. Anchors may bind to other items' anchors, allowing layout + assignments simpler. + + We shall save this code as \c SimpleButton.qml. Running qmlviewer with the file as the + argument will display the grey rectangle with a text label. + + \image qml-texteditor1_simplebutton.png + + To implement the button click functionality, we can use QML's event handling. QML's event + handling is very similar to \l {Signals & Slots}{Qt's signal and slot} mechanism. Signals + are emitted and the connected slot is called. + + \code + Rectangle{ + id:simplebutton + ... + + MouseArea{ + id: buttonMouseArea + + anchors.fill: parent //anchor all sides of the mouse area to the rectangle's anchors + //onClicked handles valid mouse button clicks + onClicked: console.log(buttonLabel.text + " clicked" ) + } + } + \endcode + + We include a \l{MouseArea} element in our simplebutton. \c MouseArea elements describe + the interactive area where mouse movements are detected. For our button, we anchor the + whole MouseArea to its parent, which is \c simplebutton. The \c anchors.fill syntax is + one way of accessing a specific property called \c fill inside a group of properties + called \c anchors. QML uses \l {Anchor-based Layout in QML}{anchor based layouts} where + items can anchor to another item, creating robust layouts. + + The \c MouseArea has many signal handlers that are called during mouse movements within + the specfied \c MouseArea boundaries. One of them is \c onClicked and it is called + whenever the acceptable mouse button is clicked, the left click being the default. We + can bind actions to the onClicked handler. In our example, \c console.log() outputs text + whenever the mouse area is clicked. The function \c console.log() is a useful tool for + debugging purposes and for outputting text. + + The code in \c SimpleButton.qml is sufficient to display a button on the screen and + output text whenever it is clicked with a mouse. + + \code + Rectangle { + id:Button + ... + + property color buttonColor: "lightblue" + property color onHoverColor: "gold" + property color borderColor: "white" + + signal buttonClick() + onButtonClick: { + console.log(buttonLabel.text + " clicked" ) + } + + MouseArea{ + onClicked: buttonClick() + hoverEnabled: true + onEntered: parent.border.color = onHoverColor + onExited: parent.border.color = borderColor + } + + //determines the color of the button by using the conditional operator + color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor + } + \endcode + + A fully functioning button is in \c Button.qml. The code snippets in this article + have some code omitted, denoted by ellipses because they were either introduced + earlier in the previous sections or irrelevant to the current code discussion. + + Custom properties are declared using the \c {property type name} syntax. In the + code, the property \c buttonColor, of type \c color, is declared and bound to + the value \c{"lightblue"}. The \c buttonColor is later used in a conditional + operation to determine the buttons's fill color. Note that property value + assignment is possible using the \c= equals sign, in addition to value binding + using the \c : colon character. Custom properties allow internal items to be + accessible outside of the Rectangle's scope. There are basic + \l{QML Basic Types}{QML types} such as \c int, \c string, \c real, as well as + a type called \c variant. + + By binding the \c onEntered and \c onExited signal handlers to colors, the + button's border will turn yellow when the mouse hovers above the button and + reverts the color when the mouse exits the mouse area. + + A \c buttonClick() signal is declared in \c Button.qml by placing the \c signal + keyword in front of the signal name. All signals have their handlers automatically + created, their names starting with \c on. As a result, the \c onButtonClick is + \c buttonClick's handler. The \c onButtonClick is then assigned an action to + perform. In our button example, the \c onClicked mouse handler will simply call + \c onButtonClick, which displays a text. The \c onButtonClick enables outside + objects to access the \c {Button}'s mouse area easily. For example, items may + have more than one \c MouseArea declarations and a \c buttonClick signal can + make the distinction between the several \c MouseArea signal handlers better. + + We now have the basic knowledge to implement items in QML that can handle + basic mouse movements. We created a \c Text label inside a \c Rectangle, + customized its properties, and implemented behaviors that respond to mouse + movements. This idea of creating elements within elements is repeated + throughout the text editor application. + + This button is not useful unless used as a component to perform an action. + In the next section, we will soon create a menu containing several of these + buttons. + + \image qml-texteditor1_button.png + + \section2 Creating a Menu Page + + Up to this stage, we covered how to create elements and assign behaviors inside + a single QML file. In this section, we will cover how to import QML elements and how + to reuse some of the created components to build other components. + + Menus display the contents of a list, each item having the ability to perform an action. + In QML, we can create a menu in several ways. First, we will create a menu containing + buttons which will eventually perform different actions. The menu code is in + \c FileMenu.qml. + + \code + import Qt 4.7 \\import the main Qt QML module + import �folderName� \\import the contents of the folder + import �Button.qml� \\import a QML file + import �NewButton.qml� as ButtonModule \\import a QML file and give it a name + import �script.js� as Script \\import a Javascript file and name it as Script + \endcode + + To use the \c Button element in \c FileMenu.qml, we need to import \c Button.qml. + The syntax shown above, shows how to use the \c import keyword. However, the + \c {import Button.qml} is not necessary; qmlviewer will import all the contents + of the current directory. We can directly create a \c Button element by declaring + \c Button{}, similar to a \c Rectangle{} declaration. + + \code + In FileMenu.qml: + + Row{ + anchors.centerIn: parent + spacing: parent.width/6 + + Button{ + id: loadButton + buttonColor: "lightgrey" + label: "Load" + } + Button{ + buttonColor: "grey" + id: saveButton + label: "Save" + } + Button{ + id: exitButton + label: "Exit" + buttonColor: "darkgrey" + + onButtonClick: Qt.quit() + } + } + \endcode + + In \c FileMenu.qml, we declare three \c Button elements. They are declared + inside a \l {Row}{Row} element, a positioner that will position its children + along a vertical row. The \c Button declaration resides in Button.qml, + which is the same as the \c Button.qml we used in the previous section. + New property bindings can be declared within the newly created buttons, + effectively overwriting the properties set in \c Button.qml. The button + called \c exitButton will quit and close the window when it is clicked. + Note that the signal handler \c onButtonClick in \c Button.qml will be + called in addition to the \c onButtonClick handler in \c exitButton. + + \image qml-texteditor1_filemenu.png + + The \c Row declaration is declared in a \c Rectangle, creating a rectangle + container for the row of buttons. This additional rectangle creates an indirect + way of organizing the row of buttons inside a menu. + + The declaration of the edit menu is very similar at this stage. The menu has + buttons that have the labels: \c Copy, \c Paste, and \c {Select All}. + + \image qml-texteditor1_editmenu.png + + Armed with our knowledge of importing and customizing previously made + components, we may now combine these menu pages to create a menu bar, + consisting of buttons to select the menu, and look at how we may structure + data using QML. + + \section1 Implementing a Menu Bar + + Our text editor application will need a way to display menus using a menu bar. + The menu bar will switch the different menus and the user can choose which menu + to display. Menu switching implies that the menus need more structure than + merely displaying them in a row. QML uses models and views to structure data + and display the structured data. + + \section2 Using Data Models and Views + + QML has different \l {Data Models}{data views} that display + \l {Data Models}{data models}. Our menu bar will display the menus in a list, + with a header that displays a row of menu names. The list of menus are declared + inside a \c VisualItemModel. The \l{VisualItemModel}{\c VisualItemModel} + element contains items that already have views such as \c Rectangle elements + and imported UI elements. Other model types such as the \l�{ListModel}{\c ListModel} + element need a delegate to display their data. + + We declare two visual items in the \c menuListModel, the \c FileMenu and the + \c EditMenu. We customize the two menus and display them using a + \l {ListView}{ListView}. The \c MenuBar.qml file contains the QML declarations + and a simple edit menu is defined in \c EditMenu.qml. + + \code + VisualItemModel{ + id: menuListModel + FileMenu{ + width: menuListView.width + height: menuBar.height + color: fileColor + } + EditMenu{ + color: editColor + width: menuListView.width + height: menuBar.height + } + } + \endcode + + The \l {ListView}{ListView} element will display a model according to a delegate. + The delegate may declare the model items to display in a \c Row element or display + the items in a grid. Our \c menuListModel already has visible items, therefore, + we do not need to declare a delegate. + + \code + ListView{ + id: menuListView + + //Anchors are set to react to window anchors + anchors.fill:parent + anchors.bottom: parent.bottom + width:parent.width + height: parent.height + + //the model contains the data + model: menuListModel + + //control the movement of the menu switching + snapMode: ListView.SnapOneItem + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickDeceleration: 5000 + highlightFollowsCurrentItem: true + highlightMoveDuration:240 + highlightRangeMode: ListView.StrictlyEnforceRange + } + \endcode + + Additionally, \c ListView inherits from \l�{Flickable}{\c Flickable}, making + the list respond to mouse drags and other gestures. The last portion of the + code above sets \c Flickable properties to create the desired flicking movement + to our view. In particular,the property \c highlightMoveDuration changes the + duration of the flick transition. A higher \c highlightMoveDuration value + results in slower menu switching. + + The \c ListView maintains the model items through an \c index and each visual + item in the model is accessible through the \c index, in the order of the + declaration. Changing the \c currentIndex effectively changes the highlighted + item in the \c ListView. The header of our menu bar exemplify this effect. + There are two buttons in a row, both changing the current menu when clicked. + The \c fileButton changes the current menu to the file menu when clicked, + the \c index being \c 0 because \c FileMenu is declared first in the + \c menuListModel. Similarly, the \c editButton will change the current + menu to the \c EditMenu when clicked. + + The \c labelList rectangle has \c z value of \c 1, denoting that it is displayed + at the front of the menu bar. Items with higher \c z values are displayed in front + of items with lower \c z values. The default \c z value is \c 0. + + \code + Rectangle{ + id: labelList + ... + z: 1 + Row{ + anchors.centerIn: parent + spacing:40 + Button{ + label: "File" + id: fileButton + ... + onButtonClick: menuListView.currentIndex = 0 + } + Button{ + id: editButton + label: "Edit" + ... + onButtonClick: menuListView.currentIndex = 1 + } + } + } + \endcode + + The menu bar we just created can be flicked to access the menus or by clicking + on the menu names at the top. Switching menu screens feel intuitive and responsive. + + \image qml-texteditor2_menubar.png + + */ + + /*! + \page qml-textEditor3.html + \title Building a Text Editor + + \section1 Declaring a TextArea + + Our text editor is not a text editor if it didn't contain an editable text area. + QML's \l {TextEdit}{TextEdit} element allows the declaration of a multi-line + editable text area. \l {TextEdit}{TextEdit} is different from a \l {Text}{Text} + element, which doesn't allow the user to directly edit the text. + + \code + TextEdit{ + id: textEditor + anchors.fill:parent + width:parent.width; height:parent.height + color:"midnightblue" + focus: true + + wrapMode: TextEdit.Wrap + + onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle) + } + \endcode + + The editor has its font color property set and set to wrap the text. The + \c TextEdit area is inside a flickable area that will scroll the text if the + text cursor is outside the visible area. The function \c ensureVisible() will + check if the cursor rectangle is outside the visible boundaries and move the + text area accordingly. QML uses Javascript syntax for its scripts, and as previously + mentioned, Javascript files can be imported and used within a QML file. + + \code + function ensureVisible(r){ + if (contentX >= r.x) + contentX = r.x; + else if (contentX+width <= r.x+r.width) + contentX = r.x+r.width-width; + if (contentY >= r.y) + contentY = r.y; + else if (contentY+height <= r.y+r.height) + contentY = r.y+r.height-height; + } + \endcode + + \section1 Combining Components for the Text Editor + + We are now ready to create the layout of our text editor using QML. The text + editor has two components, the menu bar we created and the text area. QML allows + us to reuse components, therefore making our code simpler, by importing components + and customizing when necessary. Our text editor splits the window into two; + one-third of the screen is dedicated to the menu bar and two-thirds of the screen + displays the text area. The menu bar is displayed in front of any other elements. + + \code + Rectangle{ + + id: screen + width: 1000; height: 1000 + + //the screen is partitioned into the MenuBar and TextArea. 1/3 of the screen is assigned to the MenuBar + property int partition: height/3 + + MenuBar{ + id:menuBar + height: partition + width:parent.width + z: 1 + } + + TextArea{ + id:textArea + anchors.bottom:parent.bottom + y: partition + color: "white" + height: partition*2 + width:parent.width + } + } + \endcode + + By importing reusable components, our \c TextEditor code looks much simpler. + We can then customize the main application, without worrying about properties + that already have defined behaviors. Using this approach, application layouts + and UI components can be created easily. + + \image qml-texteditor3_texteditor.png + + */ + + /*! + \page qml-textEditor4 + \title Decorating the Text Editor + \section1 Implementing a Drawer Interface + + Our text editor looks simple and we need to decorate it. Using QML, we can declare + transitions and animate our text editor. Our menu bar is occupying one-third of the + screen and it would be nice to have it only appear when we want it. + + We can add a drawer interface, that will contract or expand the menu bar when clicked. + In our implementation, we have a thin rectangle that responds to mouse clicks. The + \c drawer, as well as the application, has two sates: the "drawer is open" state and + the "drawer is closed" state. The \c drawer item is a strip of rectangle with a small + height. There is a nested \l {Image}{Image} element declaring that an arrow icon will + be centered inside the drawer. The drawer assigns a state to the whole application, + with the identifier \c screen, whenever a user clicks the mouse area. + + \code + Rectangle{ + id:drawer + height:15 + + Image{ + id: arrowIcon + source: "images/arrow.png" + anchors.horizontalCenter: parent.horizontalCenter + } + + MouseArea{ + id: drawerMouseArea + anchors.fill:parent + onClicked:{ + if (screen.state == "DRAWER_CLOSED"){ + screen.state = "DRAWER_OPEN" + } + else if (screen.state == "DRAWER_OPEN"){ + screen.state = "DRAWER_CLOSED" + } + } + ... + } + } + \endcode + + A state is simply a collection of configurations and it is declared in a + \l{State}{State} element. A list of states can be listed and bound to the + \c states property. In our application, the two states are called + \c DRAWER_CLOSED and \c DRAWER_OPEN. Item configurations are declared in + \l {PropertyChanges}{PropertyChanges} elements. In the \c DRAWER_OPEN state, + there are four items that will receive property changes. The first target, + \c menuBar, will change its \c y property to \c 0. Similarly, the \c textArea + will lower to a new position when the state is \c DRAWER_OPEN. The \c textArea, + the \c drawer, and the drawer's icon will undergo property changes to meet the + current state. + + \code + + states:[ + State{ + name: "DRAWER_OPEN" + PropertyChanges { target: menuBar; y:0} + PropertyChanges { target: textArea; y: partition + drawer.height} + PropertyChanges { target: drawer; y: partition} + PropertyChanges { target: arrowIcon; rotation: 180} + }, + State{ + name: "DRAWER_CLOSED" + PropertyChanges { target: menuBar; y:-partition} + PropertyChanges { target: textArea; y: drawer.height; height: screen.height - drawer.height} + PropertyChanges { target: drawer; y: 0} + PropertyChanges { target: arrowIcon; rotation: 0} + } + + ] + + \endcode + + State changes are abrupt and needs smoother transitions. Transitions between states + are defined using the \l {Transition}{Transition} element, which can then bind to + the item's \c transitions property. Our text editor has a state transition whenever + the state changes to either \c DRAWER_OPEN or \c DRAWER_CLOSED. Importantly, the + transition needs a \c from and a \c to state but for our transitions, we can use + the wild card \c * symbol to denote that the transition applies to all state changes. + + During transitions, we can assign animations to the property changes. Our + \c menuBar switches position from \c {y:0} to \c {y:-partition} and we can animate + this transition using the \l {NumberAnimation}{NumberAnimation} element. We declare + that the targets' properties will animate for a certain duration of time and using + a certain easing curve. An easing curve controls the animation rates and + interpolation behavior during state transitions. The easing curve we chose is + \l�{PropertyAnimation::easing.type}{Easing.OutQuint}, which slows the movement near + the end of the animation. Pleae read \l {qdeclarativeanimation.html}{QML's Animation} + article. + + \code + transitions: [ + Transition{ + to: "*" + NumberAnimation { target: textArea; properties: "y, height"; duration: 100; easing.type: Easing.OutQuint } + NumberAnimation { target: menuBar; properties: "y"; duration: 100;easing.type: Easing.OutQuint } + NumberAnimation { target: drawer; properties: "y"; duration: 100;easing.type: Easing.OutQuint } + } + ] + \endcode + + Another way of animating property changes is by declaring a \l {Behavior}{Behavior} + element. A transition only works during state changes and \c Behavior can set an + animation for a general property change. In the text editor, the arrow has a + \c NumberAnimation animating its \c rotation property whenever the property changes. + + \code + In TextEditor.qml: + + Behavior{ + NumberAnimation{property: "rotation";easing.type: Easing.OutExpo } + } + \endcode + + Going back to our components with knowledge of states and animations, we can improve + the appearances of the components. In \c Button.qml, we can add \c color and \c scale + property changes when the button is clicked. Color types are animated using + \l {ColorAnimation}{ColorAnimation} and numbers are animated using + \l {NumberAnimation}{NumberAnimation}. The \c {on propertyName} syntax displayed below + is helpful when targeting a single property. + + \code + In Button.qml: + ... + + color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor + Behavior on color { ColorAnimation{ duration: 55} } + + scale: buttonMouseArea.pressed ? 1.1 : 1.00 + Behavior on scale { NumberAnimation{ duration: 55} } + \endcode + + Additionally, we can enhance the appearances of our QML components by adding color + effects such as gradients and opacity effects. Declaring a \l {Gradient}{Gradient} + element will override the \c color property of the element. You may declare a color + in the gradient using the \l {GradientStop}{GradientStop} element. The gradient is + positioned using a scale, between \c 0.0 and \c 1.0. + + \code + In MenuBar.qml + gradient: Gradient { + GradientStop { position: 0.0; color: "#8C8F8C" } + GradientStop { position: 0.17; color: "#6A6D6A" } + GradientStop { position: 0.98;color: "#3F3F3F" } + GradientStop { position: 1.0; color: "#0e1B20" } + } + \endcode + + This gradient is used by the menu bar to display a gradient simulating depth. + The first color starts at \c 0.0 and the last color is at \c 1.0. + + + \section2 Where to Go from Here + + We are finished building the user interface of a very simple text editor. + Going forward, the user interface is complete, and we can implement the + application logic using regular Qt and C++. QML works nicely as a prototyping + tool, separating the application logic away from the UI design. + + \image qml-texteditor4_texteditor.png + + \section1 Extending QML using Qt C++ + + Now that we have our text editor layout, we may now implement the text editor + functionalities in C++. Using QML with C++ enables us to create our application + logic using Qt. We can create a QML context in a C++ application using the + \l {Using QML in C++ Applications}{Qt's Declarative} classes and display the QML + elements using a Graphics Scene. Alternatively, we can export our C++ code into + a plugin that the \l {QML Viewer}{qmlviewer} tool can read. For our application, + we shall implement the load and save functions in C++ and export it as a plugin. + This way, we only need to load the QML file directly instead of running an executable. + + \section2 Exposing C++ Classes to QML + + We will be implementing file loading and saving using Qt and C++. C++ classes + and functions can be used in QML by registering them. The class also needs to be + compiled as a Qt plugin and the QML file will need to know where the plugin is located. + + For our application, we need to create the following items: + \list 1 + \o \c Directory class that will handle directory related operations + \o \c File class which is a QObject, simulating the list of files in a directory + \o plugin class that will register the class to the QML context + \o Qt project file that will compile the plugin + \o A \c qmldir file telling the qmlviewer tool where to find the plugin + \endlist + + \section2 Building a Qt Plugin + + To build a plugin, we need to set the following in a Qt project file. First, + the necessary sources, headers, and Qt modules need to be added into our + project file. All the C++ code and project files are in the \c filedialog + directory. + + \code + In cppPlugins.pro: + + TEMPLATE = lib + CONFIG += qt plugin + QT += declarative + + DESTDIR += ../plugins + OBJECTS_DIR = tmp + MOC_DIR = tmp + + TARGET = FileDialog + + HEADERS += directory.h \ + file.h \ + dialogPlugin.h + + SOURCES += directory.cpp \ + file.cpp \ + dialogPlugin.cpp + \endcode + + In particular, we compile Qt with the \c declarative module and configure it as a + \c plugin, needing a \c lib template. We shall put the compiled plugin into the + parent's \c plugins directory. + + + \section2 Registering a Class into QML + + \code + In dialogPlugin.h: + + #include <QtDeclarative/QDeclarativeExtensionPlugin> + + class DialogPlugin : public QDeclarativeExtensionPlugin + { + Q_OBJECT + + public: + void registerTypes(const char *uri); + + }; + + \endcode + Our plugin class, \c DialogPlugin is a subclass of \l {QDeclarativeExtensionPlugin}{QDeclarativeExtensionPlugin}. We need to implement the inherited function, \l {QDeclarativeExtensionPlugin::registerTypes}{registerTypes}. The \c dialogPlugin.cpp file looks like this: + + \code + DialogPlugin.cpp: + + #include "dialogPlugin.h" + #include "directory.h" + #include "file.h" + #include <QtDeclarative/qdeclarative.h> + + void DialogPlugin::registerTypes(const char *uri){ + + qmlRegisterType<Directory>(uri, 1, 0, "Directory"); + qmlRegisterType<File>(uri, 1, 0,"File"); + } + + Q_EXPORT_PLUGIN2(FileDialog, DialogPlugin); + \endcode + + The \l {QDeclarativeExtensionPlugin::registerTypes}{registerTypes} + function registers our File and Directory classes into QML. This function + needs the class name for its template, a major version number, a minor version + number, and a name for our classes. + + We need to export the plugin using the \l {Q_EXPORT_PLUGIN2}{Q_EXPORT_PLUGIN2} + macro. Note that in our \c dialogPlugin.h file, we have the \l {Q_OBJECT}{Q_OBJECT} + macro at the top of our class. As well, we need to run \c qmake on the project + file to generate the necessary meta-object code. + + + \section2 Creating QML Properties in a C++ class + + We can create QML elements and properties using C++ and + \l {The Meta-Object System}{Qt's Meta-Object System}. We can implement + properties using slots and signals, making Qt aware of these properties. + These properties can then be used in QML. + + For the text editor, we need to be able to load and save files. Typically, + these features are contained in a file dialog. Fortunately, we can use + \l {QDir}{QDir}, \l {QFile}{QFile}, and \l {QTextStream}{QTextStream} to + implement directory reading and input/output streams. + + \code + class Directory : public QObject{ + + Q_OBJECT + + Q_PROPERTY(int filesCount READ filesCount CONSTANT) + Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged) + Q_PROPERTY(QString fileContent READ fileContent WRITE setFileContent NOTIFY fileContentChanged) + Q_PROPERTY(QDeclarativeListProperty<File> files READ files CONSTANT ) + + ... + \endcode + + The \c Directory class uses Qt's Meta-Object System to register properties it + needs to accomplish file handling. The \c Directory class is exported as a plugin + and is useable in QML as the \c Directory element. Each of the listed properties + using the \l {Q_PROPERTY()}{Q_PROPERTY} macro is a QML property. + + The \l {Q_PROPERTY()} {Q_PROPERTY} declares a property as well as its read and + write functions into Qt's Meta-Object System. For example, the \c filename + property, of type \l {QString}{QString}, is readable using the \c filename() + function and writable using the function \c setFilename(). Additionally, there + is a signal associated to the filename property called \c filenameChanged(), + which is emitted whenever the property changes. The read and write functions + are declared as \c public in the header file. + + Similarly, we have the other properties declared according to their uses. The + \c filesCount property indicates the number of files in a directory. The filename + property is set to the currently selected file's name and the loaded/saved file + content is stored in \c fileContent property. + + \code + Q_PROPERTY(QDeclarativeListProperty<File> files READ files CONSTANT ) + \endcode + + The \c files list property is a list of all the filtered files in a directory. + The \c Directory class is implemented to filter out invalid text files; only + files with a \c .txt extension are valid. Further, \l {QLists}{QLists} can be + used in QML files by declaring them as a \c QDeclarativeListProperty in C++. + The templated object needs to inherit from a \l {QObject}{QObject}, therefore, + the \c File class must also inherit from \c QObject. In the \c Directory class, + the list of \c File objects is stored in a \c QList called \c m_fileList. + + \code + class File : public QObject{ + + Q_OBJECT + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + + ... + }; + \endcode + + The properties can then be used in QML as part of the \c Directory element's + properties. Note that we do not have to create an identifier \c id property + in our C++ code. + + \code + Directory{ + id: directory + + filesCount + filename + fileContent + files + + files[0].name + } + + \endcode + + Because QML uses Javascript's syntax and structure, we can iterate through + the list of files and retrieve its properties. To retrieve the first file's + name property, we can call \c { files[0].name }. + + Regular C++ functions are also accessible from QML. The file loading and saving + functions are implemented in C++ and declared using the + \l {Q_INVOKABLE}{Q_INVOKABLE} macro. Alternatively, we can declare the functions + as a \c slot and the functions will be accessible from QML. + + \code + In Directory.h: + + Q_INVOKABLE void saveFile(); + Q_INVOKABLE void loadFile(); + \endcode + + The \c Directory class also has to notify other objects whenever the directory + contents change. This feature is performed using a \c signal. As previously + mentioned, QML signals have a corresponding handler with their names prepended + with \c on. The signal is called \c directoryChanged and it is emitted whenever + there is a directory refresh. The refresh simply reloads the directory contents + and updates the list of valid files in the directory. QML items can then be + notified by attaching an action to the \c onDirectoryChanged signal handler. + + The \c list properties need to be explored further. This is because list + properties use callbacks to access and modify the list contents. The list + property is of type \c QDeclarativeListProperty<File>. Whenever the list + is accessed, the accessor function needs to return a + \c QDeclarativeListProperty<File>. The template type, \c File, needs to be a + \c QObject derivative. Further, to create the + \l {QDeclarativeListProperty}{QDeclarativeListProperty}, the list's accessor + and modifiers need to be passed to the consructor as function pointers. The list, + a \c QList in our case, also needs to be a list of \c File pointers. + + The constructor of \l {QDeclarativeListProperty}{QDeclarativeListProperty} + constructor and the \c Directory implementation: + \code + QDeclarativeListProperty ( QObject * object, void * data, AppendFunction append, CountFunction count = 0, AtFunction at = 0, ClearFunction clear = 0 ) + QDeclarativeListProperty<File>( this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr ); + \endcode + + The constructor passes pointers to functions that will append the list, count + the list, retrieve the item using an index, and empty the list. Only the append + function is mandatory. Note that the function pointers must match the definition + of \l {QDeclarativeListProperty::AppendFunction}{AppendFunction}, + \l {QDeclarativeListProperty::CountFunction}{CountFunction}, + \l {QDeclarativeListProperty::AtFunction}{AtFunction}, or + \l {QDeclarativeListProperty::ClearFunction}{ClearFunction}. + + \code + void appendFiles(QDeclarativeListProperty<File> * property, File * file) + File* fileAt(QDeclarativeListProperty<File> * property, int index) + int filesSize(QDeclarativeListProperty<File> * property) + void clearFilesPtr(QDeclarativeListProperty<File> *property) + \endcode + + To simplify our file dialog, the \c Directory class filters out invalid text + files, which are files that do not have a \c .txt extension. If a file name + doesn't have the \c .txt extension, then it won't be seen in our file dialog. + Also, the implementation makes sure that saved files have a \c .txt extension in + the file name. \c Directory uses \l {QTextStream}{QTextStream} to read the file + and to output the file contents to a file. + + With our \c Directory element, we can retrieve the files as a list, know how many + text files is in the application directory, get the file's name and content as a + string, and be notified whenever there are changes in the directory contents. + + To build the plugin, run \c qmake on the \c cppPlugins.pro project file, then run + \c make to build and transfer the plugin to the \c plugins directory. + + + \section2 Importing a Plugin in QML + + The qmlviewer tool imports files that are in the same directory as the + application. We can also create a \c qmldir file containing the locations of + QML files we wish to import. The \c qmldir file can also store locations of + plugins and other resources. + + \code + In qmldir: + + Button ./Button.qml + FileDialog ./FileDialog.qml + TextArea ./TextArea.qml + TextEditor ./TextEditor.qml + EditMenu ./EditMenu.qml + + plugin FileDialog plugins + \endcode + + The plugin we just created is called \c FileDialog, as indicated by the + \c TARGET field in the project file. The compiled plugin is in the \c plugins directory. + + + \section2 Integrating a File Dialog into the File Menu + + Our \c FileMenu needs to display the \c FileDialog element, containing a list of + the text files in a directory thus allowing the user to select the file by + clicking on the list. We also need to assign the save, load, and new buttons + to their respective actions. The FileMenu contains an editable text input to + allow the user to type a file name using the keyboard. + + The \c Directory element is used in the \c FileMenu.qml file and it notifies the + \c FileDialog element that the directory refreshed its contents. This notification + is performed in the signal handler, \c onDirectoryChanged. + + \code + In FileMenu.qml: + + Directory{ + id:directory + filename: textInput.text + onDirectoryChanged: fileDialog.notifyRefresh() + } + \endcode + + Keeping with the simplicity of our application, the file dialog will always be + visible and will not display invalid text files, which do not have a \c .txt + extension to their filenames. + + \code + In FileDialog.qml: + + signal notifyRefresh() + onNotifyRefresh: dirView.model = directory.files + \endcode + + The \c FileDialog element will display the contents of a directory by reading its + list property called \c files. The files are used as the model of a + \l {GridView}{GridView} element, which displays data items in a grid according + to a delegate. The delegate handles the appearance of the model and our file + dialog will simply create a grid with text centered in the middle. Clicking on + the file name will result in the appearance of a rectangle to highlight the file + name. The \c FileDialog is notified whenever the \c notifyRefresh signal is emitted, + reloading the files in the directory. + + \code + In FileMenu.qml: + + Button{ + id: newButton + label: "New" + onButtonClick:{ + textArea.textContent = "" + } + } + Button{ + id: loadButton + label: "Load" + onButtonClick:{ + directory.filename = textInput.text + directory.loadFile() + textArea.textContent = directory.fileContent + } + } + Button{ + id: saveButton + label: "Save" + onButtonClick:{ + directory.fileContent = textArea.textContent + directory.filename = textInput.text + directory.saveFile() + } + } + Button{ + id: exitButton + label: "Exit" + onButtonClick:{ + Qt.quit() + } + } + \endcode + + Our \c FileMenu can now connect to their respective actions. The \c saveButton + will transfer the text from the \c TextEdit onto the directory's \c fileContent + property, then copy its file name from the editable text input. Finally, the button + calls the \c saveFile() function, saving the file. The \c sloadButton has a similar + execution. Also, the \c New action will empty the contents of the \c TextEdit. + + Further, the \c EditMenu buttons are connected to the \c TextEdit functions to copy, + paste, and select all the text in the text editor. + + \image qml-texteditor5_filemenu.png + + \section1 Text Editor Completion + + \image qml-texteditor5_newfile.png + + The application can function as a simple text editor, able to accept text + and save the text into a file. The text editor can also load from a file and + perform text manipulation. + + +*/ \ No newline at end of file diff --git a/doc/src/getting-started/gettingstartedqt.qdoc b/doc/src/getting-started/gettingstartedqt.qdoc new file mode 100644 index 0000000..1b3770f --- /dev/null +++ b/doc/src/getting-started/gettingstartedqt.qdoc @@ -0,0 +1,517 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial Usage +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in a +** written agreement between you and Nokia. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page gettingstartedqt.html + + \title Getting Started programming with Qt + \ingroup gettingStarted + + Welcome to the world of Qt--the cross-platform GUI toolkit. In + this getting started guide, we teach basic Qt knowledge by + implementing a simple Notepad application. After reading this + guide, you should be ready to delve into our overviews and API + documentation, and find the information you need for the + application you are developing. + + \section1 Hello Notepad + + In this first example, we simply create and show a text edit in a + window frame on the desktop. This represents the simplest possible + Qt program that has a GUI. + + \image gs1.png + + Here is the code: + + \code + 1 #include <QApplication> + 2 #include <QTextEdit> + 3 + 4 int main(int argv, char **args) + 5 { + 6 QApplication app(argv, args); + 7 + 8 QTextEdit textEdit; + 9 textEdit.show(); +10 +11 return app.exec(); +12 } + \endcode + + Let us go through the code line by line. In the first two lines, we + include the header files for QApplication and QTextEdit, which are + the two classes that we need for this example. All Qt classes have + a header file named after them. + + Line 6 creates a QApplication object. This object manages + application-wide resources and is necessary to run any Qt program + that has a GUI. It needs \c argv and \c args because Qt accepts a + few command line arguments. + + Line 8 creates a QTextEdit object. A text edit is a visual element + in the GUI. In Qt, we call such elements widgets. Examples of + other widgets are scroll bars, labels, and radio buttons. A widget + can also be a container for other widgets; a dialog or a main + application window, for example. + + Line 9 shows the text edit on the screen in its own window frame. + Since widgets also function as containers (for instance a + QMainWindow, which has toolbars, menus, a status bar, and a few + other widgets), it is possible to show a single widget in its own + window. Widgets are not visible by default; the function + \l{QWidget::}{show()} makes the widget visible. + + Line 11 makes the QApplication enter its event loop. When a Qt + application is running, events are generated and sent to the + widgets of the application. Examples of events are mouse presses + and key strokes. When you type text in the text edit widget, it + receives key pressed events and responds by drawing the text + typed. + + To run the application, open a command prompt, and enter the + directory in which you have the \c .cpp file of the program. The + following shell commands build the program. + + \code + qmake -project + qmake + make + \endcode + + This will leave an executable in the \c part1 directory (note that + on Windows, you may have to use \c nmake instead of \c make. Also, + the executable will be placed in part1/debug or part1/release). \c + qmake is Qt's build tool, which takes a configuration file. \c + qmake generates this for us when given the \c{-project} argument. + Given the configuration file (suffixed .pro), \c qmake produces a + \c make file that will build the program for you. We will look + into writing our own \c .pro files later. + + \section2 Learn More + + \table + \header + \o About + \o Here + \row + \o Widgets and Window Geometry + \o \l{Window and Dialog Widgets} + \row + \o Events and event handling + \o \l{The Event System} + \endtable + + \section1 Adding a Quit Button + + In a real application, you will normally need more than one + widget. We will now introduce a QPushButton beneath the text edit. + The button will exit the Notepad application when pushed (i.e., + clicked on with the mouse). + + \image gs2.png + + Let us take a look at the code. + + \code + 1 #include <QtGui> + 2 + 3 int main(int argv, char **args) + 4 { + 5 QApplication app(argv, args); + 6 + 7 QTextEdit textEdit; + 8 QPushButton quitButton("Quit"); + 9 +10 QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit())); +11 +12 QVBoxLayout layout; +13 layout.addWidget(&textEdit); +14 layout.addWidget(&quitButton); +15 +16 QWidget window; +17 window.setLayout(&layout); +18 +19 window.show(); +20 +21 return app.exec(); +22 } + \endcode + + Line 1 includes QtGui, which contains all of Qt's GUI classes. + + Line 10 uses Qt's Signals and Slots mechanism to make the + application exit when the \gui {Quit button} is pushed. A slot is + a function that can be invoked at runtime using its name (as a + literal string). A signal is a function that when called will + invoke slots registered with it; we call that to connect the slot + to the signal and to emit the signal. + + \l{QApplication::}{quit()} is a slot of QApplication that exits + the application. \l{QPushButton::}{clicked()} is a signal that + QPushButton emits when it is pushed. The static + QObject::connect() function takes care of connecting the slot to + the signal. SIGNAL() and SLOT() are two macros that take the + function signatures of the signal and slot to connect. We also + need to give pointers to the objects that should send and receive + the signal. + + Line 12 creates a QVBoxLayout. As mentioned, widgets can contain + other widgets. It is possible to set the bounds (the location and + size) of child widgets directly, but it is usually easier to use a + layout. A layout manages the bounds of a widget's children. + QVBoxLayout, for instance, places the children in a vertical row. + + Line 13 and 14 adds the text edit and button to the layout. In + line 17, we set the layout on a widget. + + \section2 Learn More + + \table + \header + \o About + \o Here + \row + \o Signals and slots + \o \l{Signals & Slots} + \row + \o Layouts + \o \l{Layout Management}, + \l{Widgets and Layouts}, + \l{Layout Examples} + \row + \o The widgets that come with Qt + \o \l{Qt Widget Gallery}, + \l{Widget Examples} + \endtable + + \section1 Subclassing QWidget + + When the user wants to quit an application, you might want to + pop-up a dialog that asks whether he/she really wants to quit. In + this example, we subclass QWidget, and add a slot that we connect + to the \gui {Quit button}. + + \image gs3.png + + Let us look at the code: + + \code + 5 class Notepad : public QWidget + 6 { + 7 Q_OBJECT + 8 + 9 public: +10 Notepad(); +11 +12 private slots: +13 void quit(); +14 +15 private: +16 QTextEdit *textEdit; +17 QPushButton *quitButton; +18 }; + \endcode + + The \c Q_OBJECT macro must be first in the class definition, and + declares our class as a \c QObject (Naturally, it must also + inherit from QObject). A \l{QObject} adds several abilities to a + normal C++ class. Notably, the class name and slot names can be + queried at run-time. It is also possible to query a slot's + parameter types and invoke it. + + Line 13 declares the slot \c quit(). This is easy using the \c + slots macro. The \c quit() slot can now be connected to signals + with a matching signature (any signal that takes no parameters). + + Instead of setting up the GUI and connecting the slot in the \c + main() function, we now use \c{Notepad}'s constructor. + + \code + Notepad::Notepad() + { + textEdit = new QTextEdit; + quitButton = new QPushButton(tr("Quit")); + + connect(quitButton, SIGNAL(clicked()), this, SLOT(quit())); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(textEdit); + layout->addWidget(quitButton); + + setLayout(layout); + + setWindowTitle(tr("Notepad")); + } + \endcode + + As you saw in the class definition, we use pointers to our \l + {QObject}s (\c textEdit and \c quitButton). As a rule, you should + always allocate \l{QObject}s on the heap and never copy them. + + We now use the function \l{QObject::}{tr()} around our user + visible strings. This function is necessary when you want to + provide your application in more than one language (e.g. English + and Chinese). We will not go into details here, but you can follow + the \c {Qt Linguist} link from the learn more table. + + \section2 Learn More + + \table + \header + \o About + \o Here + \row + \o tr() and internationalization + \o \l{Qt Linguist Manual}, + \l{Writing Source Code for Translation}, + \l{Hello tr() Example}, + \l{Internationalization with Qt} + \row + \o QObjects and the Qt Object model (This is essential to understand Qt) + \o \l{Object Model} + \row + \o qmake and the Qt build system + \o \l{qmake Manual} + \endtable + + \section2 Creating a .pro file + + For this example, we write our own \c .pro file instead of + using \c qmake's \c -project option. + + \code + HEADERS = notepad.h + SOURCES = notepad.cpp \ + main.cpp + \endcode + + The following shell commands build the example. + + \code + qmake + make + \endcode + + \section1 Using a QMainWindow + + Many applications will benefit from using a QMainWindow, which has + its own layout to which you can add a menu bar, dock widgets, tool + bars, and a status bar. QMainWindow has a center area that can be + occupied by any kind of widget. In our case, we will place our + text edit there. + + \image gs4.png + + Let us look at the new \c Notepad class definition. + + \code + #include <QtGui> + + class Notepad : public QMainWindow + { + Q_OBJECT + + public: + Notepad(); + + private slots: + void open(); + void save(); + void quit(); + + private: + QTextEdit *textEdit; + + QAction *openAction; + QAction *saveAction; + QAction *exitAction; + + QMenu *fileMenu; + }; + \endcode + + We include two more slots that can save and open a document. We + will implement these in the next section. + + Often, in a main window, the same slot should be invoked by + several widgets. Examples are menu items and buttons on a tool + bar. To make this easier, Qt provides QAction, which can be given + to several widgets, and be connected to a slot. For instance, both + QMenu and QToolBar can create menu items and tool buttons from the + same \l{QAction}s. We will see how this works shortly. + + As before, we use the \c {Notepad}s constructor to set up the + GUI. + + \code + Notepad::Notepad() + { + saveAction = new QAction(tr("&Open"), this); + saveAction = new QAction(tr("&Save"), this); + exitAction = new QAction(tr("E&xit"), this); + + connect(openAction, SIGNAL(triggered()), this, SLOT(open())); + connect(saveAction, SIGNAL(triggered()), this, SLOT(save())); + connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + + fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(openAction); + fileMenu->addAction(saveAction); + fileMenu->addSeparator(); + fileMenu->addAction(exitAction); + + textEdit = new QTextEdit; + setCentralWidget(textEdit); + + setWindowTitle(tr("Notepad")); + } + \endcode + + \l{QAction}s are created with the text that should appear on the + widgets that we add them to (in our case, menu items). If we also + wanted to add them to a tool bar, we could have given + \l{QIcon}{icons} to the actions. + + When a menu item is clicked now, the item will trigger the action, + and the respective slot will be invoked. + + \section2 Learn More + + \table + \header + \o About + \o Here + \row + \o Main windows and main window classes + \o \l{Application Main Window}, + \l{Main Window Examples} + \row + \o MDI applications + \o QMdiArea, + \l{MDI Example} + \endtable + + \section1 Saving and Loading + + In this example, we will implement the functionality of the \c + open() and \c save() slots that we added in the previous example. + + \image gs5.png + + We will start with the \c open() slot: + + \code + QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", + tr("Text Files (*.txt);;C++ Files (*.cpp *.h)")); + + if (fileName != "") { + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly)) { + QMessageBox::critical(this, tr("Error"), + tr("Could not open file")); + return; + } + QString contents = file.readAll().constData(); + textEdit->setPlainText(contents); + file.close(); + } + \endcode + + The first step is asking the user for the name of the file to + open. Qt comes with QFileDialog, which is a dialog from which the + user can select a file. The image above shows the dialog on + Kubuntu. The static \l{QFileDialog::}{getOpenFileName()} function + displays a modal file dialog, and does not return until the user + has selected a file. It returns the file path of the file + selected, or an empty string if the user canceled the dialog. + + If we have a file name, we try to open the file with + \l{QIODevice::}{open()}, which returns true if the file could be + opened. We will not go into error handling here, but you can follow + the links from the learn more section. If the file could not be + opened, we use QMessageBox to display a dialog with an error + message (see the QMessageBox class description for further + details). + + Actually reading in the data is trivial using the + \l{QIODevice::}{readAll()} function, which returns all data in the + file in a QByteArray. The \l{QByteArray::}{constData()} returns all + data in the array as a const char*, which QString has a + constructor for. The contents can then be displayed in the text + edit. We then \l{QIODevice::}{close()} the file to return the file + descriptor back to the operating system. + + Now, let us move on to the the \c save() slot. + + \code + QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), "", + tr("Text Files (*.txt);;C++ Files (*.cpp *.h)")); + + if (fileName != "") { + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly)) { + // error message + } else { + QTextStream stream(&file); + stream << textEdit->toPlainText(); + stream.flush(); + file.close(); + } + } + \endcode + + When we write the contents of the text edit to the file, we use + the QTextStream class, which wraps the QFile object. The text + stream can write QStrings directly to the file; QFile only accepts + raw data (char*) with the \l{QIODevice::}{write()} functions of + QIODevice. + + \section2 Learn More + + \table + \header + \o About + \o Here + \row + \o Files and I/O devices + \o QFile, QIODevice + \endtable + + \omit + \section1 Moving On + + This may not be true for the first release. + The Qt documentation comes with three getting started guides. You + have come to the end of the first, which concerns itself with + basic Qt concepts. We also have guides covering intermediate and + advanced topics. They are found here: You may also have noticed that the learn more sections in + this guide frequently linked to them. + Basic Qt Architecture + \endomit +*/ + diff --git a/doc/src/platforms/platform-notes.qdocinc b/doc/src/platforms/platform-notes.qdocinc new file mode 100644 index 0000000..e69de29 -- cgit v0.12 From db1a70b33ce03197111556344542e931e9345839 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 20 Aug 2010 23:18:50 +0200 Subject: Split the CPU-detection code into multiple functions for readability Reviewed-By: Benjamin Poulain --- src/corelib/tools/qsimd.cpp | 86 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 69 insertions(+), 17 deletions(-) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index 8005d7d..d6e6c03 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -52,13 +52,9 @@ QT_BEGIN_NAMESPACE -uint qDetectCPUFeatures() -{ - static uint features = 0xffffffff; - if (features != 0xffffffff) - return features; - #if defined (Q_OS_WINCE) +static inline uint detectProcessorFeatures() +{ #if defined (ARM) if (IsProcessorFeaturePresent(PF_ARM_INTEL_WMMX)) { features = IWMMXT; @@ -78,7 +74,14 @@ uint qDetectCPUFeatures() #endif features = 0; return features; -#elif defined(QT_HAVE_IWMMXT) +} + +#elif defined(__arm__) || defined(__arm) || defined(QT_HAVE_IWMMXT) || defined(QT_HAVE_NEON) +static inline uint detectProcessorFeatures() +{ + uint features = 0; + +#if defined(QT_HAVE_IWMMXT) // runtime detection only available when running as a previlegied process static const bool doIWMMXT = !qgetenv("QT_NO_IWMMXT").toInt(); features = doIWMMXT ? IWMMXT : 0; @@ -87,13 +90,14 @@ uint qDetectCPUFeatures() static const bool doNEON = !qgetenv("QT_NO_NEON").toInt(); features = doNEON ? NEON : 0; return features; -#else - features = 0; -#if defined(__x86_64__) || defined(Q_OS_WIN64) - features = MMX|SSE|SSE2|CMOV; -#elif defined(__ia64__) - features = MMX|SSE|SSE2; +#endif +} + #elif defined(__i386__) || defined(_M_IX86) +static inline uint detectProcessorFeatures() +{ + uint features = 0; + unsigned int extended_result = 0; unsigned int feature_result = 0; uint result = 0; @@ -149,6 +153,7 @@ uint qDetectCPUFeatures() : : "%eax", "%ecx", "%edx" ); + #elif defined (Q_OS_WIN) _asm { push eax @@ -210,6 +215,7 @@ uint qDetectCPUFeatures() } #endif + // result now contains the standard feature bits if (result & (1u << 15)) features |= CMOV; @@ -236,9 +242,36 @@ uint qDetectCPUFeatures() if (feature_result & (1u << 28)) features |= AVX; -#endif // i386 +#if defined(QT_HAVE_MMX) + if (qgetenv("QT_NO_MMX").toInt()) + features ^= MMX; +#endif + if (qgetenv("QT_NO_MMXEXT").toInt()) + features ^= MMXEXT; + +#if defined(QT_HAVE_3DNOW) + if (qgetenv("QT_NO_3DNOW").toInt()) + features ^= MMX3DNOW; +#endif + if (qgetenv("QT_NO_3DNOWEXT").toInt()) + features ^= MMX3DNOWEXT; + +#if defined(QT_HAVE_SSE) + if (qgetenv("QT_NO_SSE").toInt()) + features ^= SSE; +#endif +#if defined(QT_HAVE_SSE2) + if (qgetenv("QT_NO_SSE2").toInt()) + features ^= SSE2; +#endif -#if defined(__x86_64__) || defined(Q_OS_WIN64) + return features; +} + +#elif defined(__x86_64) || defined(Q_OS_WIN64) +static inline uint detectProcessorFeatures() +{ + uint features = MMX|SSE|SSE2|CMOV; uint feature_result = 0; #if defined(Q_CC_GNU) @@ -282,7 +315,6 @@ uint qDetectCPUFeatures() features |= SSE4_2; if (feature_result & (1u << 28)) features |= AVX; -#endif // x86_64 #if defined(QT_HAVE_MMX) if (qgetenv("QT_NO_MMX").toInt()) @@ -306,9 +338,29 @@ uint qDetectCPUFeatures() if (qgetenv("QT_NO_SSE2").toInt()) features ^= SSE2; #endif +} - return features; +#elif defined(__ia64__) +static inline uint detectProcessorFeatures() +{ + return MMX|SSE|SSE2; +} + +#else +static inline uint detectProcessorFeatures() +{ + return 0; +} #endif + +uint qDetectCPUFeatures() +{ + static QBasicAtomicInt features = Q_BASIC_ATOMIC_INITIALIZER(-1); + if (features != -1) + return features; + + features = detectProcessorFeatures(); + return features; } QT_END_NAMESPACE -- cgit v0.12 From 5070c3ae331faf18f6997535356853cc61ef0ad7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 24 Aug 2010 13:00:33 +0200 Subject: Detect CPU features on ARM by reading the ELF auxvec. Reviewed-by: Benjamin Poulain --- src/corelib/tools/qsimd.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index d6e6c03..a5ec3c5 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -50,6 +50,13 @@ #include <intrin.h> #endif +#if defined(Q_OS_LINUX) && defined(__arm__) +#include "private/qcore_unix_p.h" + +#include <asm/hwcap.h> +#include <linux/auxvec.h> +#endif + QT_BEGIN_NAMESPACE #if defined (Q_OS_WINCE) @@ -81,16 +88,50 @@ static inline uint detectProcessorFeatures() { uint features = 0; +#if defined(Q_OS_LINUX) + int auxv = ::qt_safe_open("/proc/self/auxv", O_RDONLY); + if (auxv != -1) { + unsigned long vector[64]; + int nread; + while (features == 0) { + nread = ::qt_safe_read(auxv, (char *)vector, sizeof vector); + if (nread <= 0) { + // EOF or error + break; + } + + int max = nread / (sizeof vector[0]); + for (int i = 0; i < max; i += 2) + if (vector[i] == AT_HWCAP) { + if (vector[i+1] & HWCAP_IWMMXT) + features |= IWMMXT; + if (vector[i+1] & HWCAP_NEON) + features |= NEON; + break; + } + } + + if (qgetenv("QT_NO_IWMMXT").toInt()) + features ^= IWMMXT; + if (qgetenv("QT_NO_NEON").toInt()) + features ^= NEON; + + ::qt_safe_close(auxv); + return features; + } + // fall back if /proc/self/auxv wasn't found +#endif + #if defined(QT_HAVE_IWMMXT) // runtime detection only available when running as a previlegied process static const bool doIWMMXT = !qgetenv("QT_NO_IWMMXT").toInt(); features = doIWMMXT ? IWMMXT : 0; - return features; #elif defined(QT_HAVE_NEON) static const bool doNEON = !qgetenv("QT_NO_NEON").toInt(); features = doNEON ? NEON : 0; - return features; #endif + + return features; } #elif defined(__i386__) || defined(_M_IX86) -- cgit v0.12 From d9b567288f301e44abedebf5b9b553c2878f2c77 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 20 Aug 2010 23:19:54 +0200 Subject: Report the detected CPU features in the corelib boilerplate --- src/corelib/global/qlibraryinfo.cpp | 3 +++ src/corelib/tools/qsimd.cpp | 53 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 7ebee3d..b4f5d0f 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -525,6 +525,9 @@ void qt_core_boilerplate() qt_configure_libraries_path_str + 12, qt_configure_headers_path_str + 12); + extern void qDumpCPUFeatures(); + qDumpCPUFeatures(); + #ifdef QT_EVAL extern void qt_core_eval_init(uint); qt_core_eval_init(1); diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index a5ec3c5..2472449 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -41,6 +41,7 @@ #include "qsimd_p.h" #include <QByteArray> +#include <stdio.h> #if defined(Q_OS_WINCE) #include <windows.h> @@ -404,4 +405,56 @@ uint qDetectCPUFeatures() return features; } +void qDumpCPUFeatures() +{ + /* + * Use kdesdk/scripts/generate_string_table.pl to update the table below. + * Here's the data: +mmx +mmxext +mmx3dnow +mmx3dnowext +sse +sse2 +cmov +iwmmxt +neon +sse3 +ssse3 +sse4.1 +sse4.2 +avx + */ + static const char features_string[] = + "mmx\0" + "mmxext\0" + "mmx3dnow\0" + "mmx3dnowext\0" + "sse\0" + "sse2\0" + "cmov\0" + "iwmmxt\0" + "neon\0" + "sse3\0" + "ssse3\0" + "sse4.1\0" + "sse4.2\0" + "avx\0" + "\0"; + + static const int features_indices[] = { + 0, 4, 11, 20, 32, 36, 41, 46, + 53, 58, 63, 69, 76, 83, -1 + }; + const int features_count = (sizeof features_indices - 1) / (sizeof features_indices[0]); + + uint features = qDetectCPUFeatures(); + printf("Processor features: "); + for (int i = 0; i < features_count; ++i) { + if (features & (1 << i)) + printf(" %s", features_string + features_indices[i]); + } + puts(""); +} + QT_END_NAMESPACE -- cgit v0.12 From ebf9d5dd5174b7c82fec83b56d71a59d5277bd51 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 24 Aug 2010 13:52:09 +0200 Subject: Properly implement the CPU feature disabling in qsimd.cpp. Don't use ^=, since that might enable a feature that wasn't detected. The new use is: export QT_NO_CPU_FEATURE="<feature1> [<feature2>]" Reviewed-by: Benjamin Poulain --- src/corelib/tools/qsimd.cpp | 157 +++++++++++++++++--------------------------- 1 file changed, 60 insertions(+), 97 deletions(-) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index 2472449..c34644c 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -112,11 +112,6 @@ static inline uint detectProcessorFeatures() } } - if (qgetenv("QT_NO_IWMMXT").toInt()) - features ^= IWMMXT; - if (qgetenv("QT_NO_NEON").toInt()) - features ^= NEON; - ::qt_safe_close(auxv); return features; } @@ -125,11 +120,9 @@ static inline uint detectProcessorFeatures() #if defined(QT_HAVE_IWMMXT) // runtime detection only available when running as a previlegied process - static const bool doIWMMXT = !qgetenv("QT_NO_IWMMXT").toInt(); - features = doIWMMXT ? IWMMXT : 0; + features = IWMMXT; #elif defined(QT_HAVE_NEON) - static const bool doNEON = !qgetenv("QT_NO_NEON").toInt(); - features = doNEON ? NEON : 0; + features = NEON; #endif return features; @@ -284,29 +277,6 @@ static inline uint detectProcessorFeatures() if (feature_result & (1u << 28)) features |= AVX; -#if defined(QT_HAVE_MMX) - if (qgetenv("QT_NO_MMX").toInt()) - features ^= MMX; -#endif - if (qgetenv("QT_NO_MMXEXT").toInt()) - features ^= MMXEXT; - -#if defined(QT_HAVE_3DNOW) - if (qgetenv("QT_NO_3DNOW").toInt()) - features ^= MMX3DNOW; -#endif - if (qgetenv("QT_NO_3DNOWEXT").toInt()) - features ^= MMX3DNOWEXT; - -#if defined(QT_HAVE_SSE) - if (qgetenv("QT_NO_SSE").toInt()) - features ^= SSE; -#endif -#if defined(QT_HAVE_SSE2) - if (qgetenv("QT_NO_SSE2").toInt()) - features ^= SSE2; -#endif - return features; } @@ -358,28 +328,7 @@ static inline uint detectProcessorFeatures() if (feature_result & (1u << 28)) features |= AVX; -#if defined(QT_HAVE_MMX) - if (qgetenv("QT_NO_MMX").toInt()) - features ^= MMX; -#endif - if (qgetenv("QT_NO_MMXEXT").toInt()) - features ^= MMXEXT; - -#if defined(QT_HAVE_3DNOW) - if (qgetenv("QT_NO_3DNOW").toInt()) - features ^= MMX3DNOW; -#endif - if (qgetenv("QT_NO_3DNOWEXT").toInt()) - features ^= MMX3DNOWEXT; - -#if defined(QT_HAVE_SSE) - if (qgetenv("QT_NO_SSE").toInt()) - features ^= SSE; -#endif -#if defined(QT_HAVE_SSE2) - if (qgetenv("QT_NO_SSE2").toInt()) - features ^= SSE2; -#endif + return features; } #elif defined(__ia64__) @@ -395,64 +344,78 @@ static inline uint detectProcessorFeatures() } #endif +/* + * Use kdesdk/scripts/generate_string_table.pl to update the table below. + * Here's the data (don't forget the ONE leading space): + mmx + mmxext + mmx3dnow + mmx3dnowext + sse + sse2 + cmov + iwmmxt + neon + sse3 + ssse3 + sse4.1 + sse4.2 + avx + */ + +// begin generated +static const char features_string[] = + " mmx\0" + " mmxext\0" + " mmx3dnow\0" + " mmx3dnowext\0" + " sse\0" + " sse2\0" + " cmov\0" + " iwmmxt\0" + " neon\0" + " sse3\0" + " ssse3\0" + " sse4.1\0" + " sse4.2\0" + " avx\0" + "\0"; + +static const int features_indices[] = { + 0, 5, 13, 23, 36, 41, 47, 53, + 61, 67, 73, 80, 88, 96, -1 +}; +// end generated + +const int features_count = (sizeof features_indices - 1) / (sizeof features_indices[0]); + uint qDetectCPUFeatures() { static QBasicAtomicInt features = Q_BASIC_ATOMIC_INITIALIZER(-1); if (features != -1) return features; - features = detectProcessorFeatures(); + uint f = detectProcessorFeatures(); + QByteArray disable = qgetenv("QT_NO_CPU_FEATURE"); + if (!disable.isEmpty()) { + disable.prepend(' '); + for (int i = 0; i < features_count; ++i) { + if (disable.contains(features_string + features_indices[i])) + f &= ~(1 << i); + } + } + + features = f; return features; } void qDumpCPUFeatures() { - /* - * Use kdesdk/scripts/generate_string_table.pl to update the table below. - * Here's the data: -mmx -mmxext -mmx3dnow -mmx3dnowext -sse -sse2 -cmov -iwmmxt -neon -sse3 -ssse3 -sse4.1 -sse4.2 -avx - */ - static const char features_string[] = - "mmx\0" - "mmxext\0" - "mmx3dnow\0" - "mmx3dnowext\0" - "sse\0" - "sse2\0" - "cmov\0" - "iwmmxt\0" - "neon\0" - "sse3\0" - "ssse3\0" - "sse4.1\0" - "sse4.2\0" - "avx\0" - "\0"; - - static const int features_indices[] = { - 0, 4, 11, 20, 32, 36, 41, 46, - 53, 58, 63, 69, 76, 83, -1 - }; - const int features_count = (sizeof features_indices - 1) / (sizeof features_indices[0]); - uint features = qDetectCPUFeatures(); printf("Processor features: "); for (int i = 0; i < features_count; ++i) { if (features & (1 << i)) - printf(" %s", features_string + features_indices[i]); + printf("%s", features_string + features_indices[i]); } puts(""); } -- cgit v0.12 From 33a34960328cce7a6994d2ea771c82da7bfdb598 Mon Sep 17 00:00:00 2001 From: Jesper Thomschutz <jesper.thomschutz@nokia.com> Date: Tue, 24 Aug 2010 15:25:45 +0200 Subject: Doc: Fixed qdoc warnings. Reviewed-by: Trust Me (cherry picked from commit cb086eb5340c4c41efaf45373aa05c37e8aa974a) Conflicts: doc/src/index.qdoc src/dbus/qdbusconnection.cpp src/declarative/util/qdeclarativeanimation.cpp src/gui/s60framework/qs60mainapplication.cpp src/gui/s60framework/qs60mainappui.cpp src/network/access/qnetworkrequest.cpp --- doc/src/declarative/declarativeui.qdoc | 2 +- doc/src/declarative/qtdeclarative.qdoc | 2 +- doc/src/examples/qml-examples.qdoc | 2 +- doc/src/examples/simpletreemodel.qdoc | 4 +-- doc/src/examples/spinboxdelegate.qdoc | 4 +-- doc/src/external-resources.qdoc | 2 +- doc/src/index.qdoc | 2 +- doc/src/modules.qdoc | 1 - doc/src/overviews.qdoc | 3 +-- doc/src/qt-webpages.qdoc | 5 ++++ src/dbus/qdbusconnection.cpp | 5 ++++ src/declarative/qml/qdeclarativeimageprovider.cpp | 8 +++--- src/declarative/util/qdeclarativeanimation.cpp | 2 +- src/declarative/util/qdeclarativetransition.cpp | 2 +- src/gui/graphicsview/qgraphicsitem.cpp | 18 ++++++++++++++ src/gui/graphicsview/qgraphicstransform.cpp | 21 ++++++++++++++++ src/gui/s60framework/qs60mainapplication.cpp | 4 +-- src/gui/s60framework/qs60mainappui.cpp | 30 +++++++++++------------ src/network/access/qnetworkrequest.cpp | 20 +++++++++------ tools/qdoc3/test/qt-html-templates.qdocconf | 7 ++---- 20 files changed, 97 insertions(+), 47 deletions(-) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index b25d000..ce35f26 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -27,7 +27,7 @@ /*! \title Qt Quick -\page declarativeui.html +\page qtquick.html \brief Qt Quick provides a declarative framework for building highly dynamic, custom user interfaces. diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc index 413eb59..b4f4c83 100644 --- a/doc/src/declarative/qtdeclarative.qdoc +++ b/doc/src/declarative/qtdeclarative.qdoc @@ -48,7 +48,7 @@ \endcode For more information on the Qt Declarative module, see the - \l{declarativeui.html}{Qt Quick} documentation. + \l{Qt Quick} documentation. */ diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index 68b66e1..fb219fd 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -559,7 +559,7 @@ \example declarative/ui-components/dialcontrol This example shows how to create a dial-type control. It combines - \l Image elements with \l Rotation transforms and \l SpringAnimatino behaviors + \l Image elements with \l Rotation transforms and \l SpringAnimation behaviors to produce an interactive speedometer-type dial. \image qml-dialcontrol-example.png diff --git a/doc/src/examples/simpletreemodel.qdoc b/doc/src/examples/simpletreemodel.qdoc index c34f4af..790d5fa 100644 --- a/doc/src/examples/simpletreemodel.qdoc +++ b/doc/src/examples/simpletreemodel.qdoc @@ -32,7 +32,7 @@ The Simple Tree Model example shows how to create a basic, read-only hierarchical model to use with Qt's standard view classes. For a description of simple non-hierarchical list and table models, see the - \l{model-view-programming.html}{Model/View Programming} overview. + \l{Model/View Programming} overview. \image simpletreemodel-example.png @@ -40,7 +40,7 @@ information in a data source, using an abstract model of the data to simplify and standardize the way it is accessed. Simple models represent data as a table of items, and allow views to access this data via an - \l{model-view-model.html}{index-based} system. More generally, models can + \l{Model/View Programming#Models}{index-based} system. More generally, models can be used to represent data in the form of a tree structure by allowing each item to act as a parent to a table of child items. diff --git a/doc/src/examples/spinboxdelegate.qdoc b/doc/src/examples/spinboxdelegate.qdoc index 49e3295..48e4bfa 100644 --- a/doc/src/examples/spinboxdelegate.qdoc +++ b/doc/src/examples/spinboxdelegate.qdoc @@ -42,8 +42,8 @@ \image spinboxdelegate-example.png This concepts behind this example are covered in the - \l{model-view-delegate.html}{Delegate Classes} chapter of the - \l{model-view-programming.html}{Model/View Programming} overview. + \l{Model/View Programming#Delegate Classes}{Delegate Classes} chapter of the + \l{Model/View Programming} overview. \section1 SpinBoxDelegate Class Definition diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc index 61c9da2..de6bafb 100644 --- a/doc/src/external-resources.qdoc +++ b/doc/src/external-resources.qdoc @@ -416,5 +416,5 @@ /*! \externalpage http://opensource.org/licenses/bsd-license.php - \title BSD License + \title New and Modified BSD Licenses */ diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index e45892f..bd8e4ad 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -72,7 +72,7 @@ <li><a href="technology-apis.html">Qt and Key Technologies</a></li> <li><a href="best-practices.html">Best Practices Guides</a></li> </ul> - </div> + </div> <div class="sectionlist"> <ul> <li><a href="qtquick.html">Qt Quick</a></li> diff --git a/doc/src/modules.qdoc b/doc/src/modules.qdoc index a81bfb2..c51fcad 100644 --- a/doc/src/modules.qdoc +++ b/doc/src/modules.qdoc @@ -116,7 +116,6 @@ /*! \module QtMultimedia - \page qtmultimedia-module.html \title QtMultimedia Module \contentspage All Modules \previouspage QtCore diff --git a/doc/src/overviews.qdoc b/doc/src/overviews.qdoc index a1773a3..c7b88cf 100644 --- a/doc/src/overviews.qdoc +++ b/doc/src/overviews.qdoc @@ -55,8 +55,7 @@ These pages are about Qt's traditional set of GUI components for building both native look ^ feel and custom UI's for the desktop - environment. Use \l {declarativeui.html} {Qt Quick} for building - UI's for mobile devices. + environment. Use \l{Qt Quick} for building UI's for mobile devices. \generatelist {related} */ diff --git a/doc/src/qt-webpages.qdoc b/doc/src/qt-webpages.qdoc index 89d564f..c8a43b7 100644 --- a/doc/src/qt-webpages.qdoc +++ b/doc/src/qt-webpages.qdoc @@ -234,3 +234,8 @@ \externalpage http://qt.gitorious.org \title Public Qt Repository */ + +/*! + \externalpage http://get.qt.nokia.com/nokiasmartinstaller/ + \title Smart Installer +*/ diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index 6a46eac..1b65399 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -228,6 +228,11 @@ void QDBusConnectionManager::setConnection(const QString &name, QDBusConnectionP \value ExportAllInvokables export all of this object's invokables \value ExportAllContents export all of this object's contents \value ExportChildObjects export this object's child objects + + \value ExportScriptableInvokables export this object's scriptable methods + \value ExportNonScriptableInvokables export this object's non-scriptable methods + \value ExportAllInvokables export all of this object's methods + \sa registerObject(), QDBusAbstractAdaptor, {usingadaptors.html}{Using adaptors} */ diff --git a/src/declarative/qml/qdeclarativeimageprovider.cpp b/src/declarative/qml/qdeclarativeimageprovider.cpp index 241df87..4743a1b 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.cpp +++ b/src/declarative/qml/qdeclarativeimageprovider.cpp @@ -59,13 +59,13 @@ public: \list \o Loaded using QPixmaps rather than actual image files - \o Loaded asynchronously in a separate thread, if imageType() is \l ImageType::Image + \o Loaded asynchronously in a separate thread, if imageType() is \l{QDeclarativeImageProvider::ImageType}{ImageType::Image} \endlist To specify that an image should be loaded by an image provider, use the \bold {"image:"} scheme for the URL source of the image, followed by the identifiers of the image provider and the requested image. For example: - + \qml Image { source: "image://myimageprovider/image.png" } \endqml @@ -83,7 +83,7 @@ public: and "red", respectively: \snippet examples/declarative/cppextensions/imageprovider/imageprovider-example.qml 0 - + When these images are loaded by QML, it looks for a matching image provider and calls its requestImage() or requestPixmap() method (depending on its imageType()) to load the image. The method is called with the \c id @@ -136,7 +136,7 @@ public: main thread. In this case, if \l {Image::}{asynchronous} is set to \c true, the value is ignored and the image is loaded synchronously. - + \sa QDeclarativeEngine::addImageProvider() */ diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 14028de..927f081 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -1329,7 +1329,7 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) \snippet doc/src/snippets/declarative/rotationanimation.qml 0 - Notice the RotationAnimation did not need to set a \l {PropertyAnimation::}{target} + Notice the RotationAnimation did not need to set a \l target value. As a convenience, when used in a transition, RotationAnimation will rotate all properties named "rotation" or "angle". You can override this by providing your own properties via \l {PropertyAnimation::properties}{properties} or diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp index 7042d0c..aa1426c 100644 --- a/src/declarative/util/qdeclarativetransition.cpp +++ b/src/declarative/util/qdeclarativetransition.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE to (50, 50). The added Transition specifies that when the rectangle changes between the default and the "moved" state, any changes to the \c x and \c y properties should be animated, using an \c Easing.InOutQuad. - + \snippet doc/src/snippets/declarative/transition.qml 0 Notice the example does not require \l{PropertyAnimation::}{to} and diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 6f0b48c..b70c0f2 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -7961,6 +7961,24 @@ void QGraphicsItemPrivate::resetHeight() */ /*! + \property QGraphicsObject::children + \since 4.7 + \internal +*/ + +/*! + \property QGraphicsObject::width + \since 4.7 + \internal +*/ + +/*! + \property QGraphicsObject::height + \since 4.7 + \internal +*/ + +/*! \class QAbstractGraphicsShapeItem \brief The QAbstractGraphicsShapeItem class provides a common base for all path items. diff --git a/src/gui/graphicsview/qgraphicstransform.cpp b/src/gui/graphicsview/qgraphicstransform.cpp index 7b69317..bd3f2ef 100644 --- a/src/gui/graphicsview/qgraphicstransform.cpp +++ b/src/gui/graphicsview/qgraphicstransform.cpp @@ -583,6 +583,27 @@ void QGraphicsRotation::applyTo(QMatrix4x4 *matrix) const \sa QGraphicsRotation::axis */ +/*! + \fn QGraphicsScale::xScaleChanged() + \since 4.7 + + This signal is emitted whenever the \l xScale property changes. +*/ + +/*! + \fn QGraphicsScale::yScaleChanged() + \since 4.7 + + This signal is emitted whenever the \l yScale property changes. +*/ + +/*! + \fn QGraphicsScale::zScaleChanged() + \since 4.7 + + This signal is emitted whenever the \l zScale property changes. +*/ + #include "moc_qgraphicstransform.cpp" QT_END_NAMESPACE diff --git a/src/gui/s60framework/qs60mainapplication.cpp b/src/gui/s60framework/qs60mainapplication.cpp index 5d4c54e..cbc0d5c 100644 --- a/src/gui/s60framework/qs60mainapplication.cpp +++ b/src/gui/s60framework/qs60mainapplication.cpp @@ -145,7 +145,7 @@ void QS60MainApplication::PreDocConstructL() } /*! - \internal + \internal */ CDictionaryStore *QS60MainApplication::OpenIniFileLC(RFs &aFs) const { @@ -153,7 +153,7 @@ CDictionaryStore *QS60MainApplication::OpenIniFileLC(RFs &aFs) const } /*! - \internal + \internal */ void QS60MainApplication::NewAppServerL(CApaAppServer *&aAppServer) { diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp index ea9dbb3..72cf577 100644 --- a/src/gui/s60framework/qs60mainappui.cpp +++ b/src/gui/s60framework/qs60mainappui.cpp @@ -282,7 +282,7 @@ void QS60MainAppUi::RestoreMenuL(CCoeControl *menuWindow, TInt resourceId, TMenu } /*! - \internal + \internal */ void QS60MainAppUi::Exit() { @@ -290,7 +290,7 @@ void QS60MainAppUi::Exit() } /*! - \internal + \internal */ void QS60MainAppUi::SetFadedL(TBool aFaded) { @@ -298,7 +298,7 @@ void QS60MainAppUi::SetFadedL(TBool aFaded) } /*! - \internal + \internal */ TRect QS60MainAppUi::ApplicationRect() const { @@ -306,7 +306,7 @@ TRect QS60MainAppUi::ApplicationRect() const } /*! - \internal + \internal */ void QS60MainAppUi::HandleScreenDeviceChangedL() { @@ -314,7 +314,7 @@ void QS60MainAppUi::HandleScreenDeviceChangedL() } /*! - \internal + \internal */ void QS60MainAppUi::HandleApplicationSpecificEventL(TInt aType, const TWsEvent &aEvent) { @@ -322,7 +322,7 @@ void QS60MainAppUi::HandleApplicationSpecificEventL(TInt aType, const TWsEvent & } /*! - \internal + \internal */ TTypeUid::Ptr QS60MainAppUi::MopSupplyObject(TTypeUid aId) { @@ -330,7 +330,7 @@ TTypeUid::Ptr QS60MainAppUi::MopSupplyObject(TTypeUid aId) } /*! - \internal + \internal */ void QS60MainAppUi::ProcessCommandL(TInt aCommand) { @@ -338,7 +338,7 @@ void QS60MainAppUi::ProcessCommandL(TInt aCommand) } /*! - \internal + \internal */ TErrorHandlerResponse QS60MainAppUi::HandleError (TInt aError, const SExtendedError &aExtErr, TDes &aErrorText, TDes &aContextText) { @@ -346,7 +346,7 @@ TErrorHandlerResponse QS60MainAppUi::HandleError (TInt aError, const SExtendedEr } /*! - \internal + \internal */ void QS60MainAppUi::HandleViewDeactivation(const TVwsViewId &aViewIdToBeDeactivated, const TVwsViewId &aNewlyActivatedViewId) { @@ -354,7 +354,7 @@ void QS60MainAppUi::HandleViewDeactivation(const TVwsViewId &aViewIdToBeDeactiva } /*! - \internal + \internal */ void QS60MainAppUi::PrepareToExit() { @@ -362,7 +362,7 @@ void QS60MainAppUi::PrepareToExit() } /*! - \internal + \internal */ void QS60MainAppUi::HandleTouchPaneSizeChange() { @@ -370,7 +370,7 @@ void QS60MainAppUi::HandleTouchPaneSizeChange() } /*! - \internal + \internal */ void QS60MainAppUi::HandleSystemEventL(const TWsEvent &aEvent) { @@ -378,7 +378,7 @@ void QS60MainAppUi::HandleSystemEventL(const TWsEvent &aEvent) } /*! - \internal + \internal */ void QS60MainAppUi::Reserved_MtsmPosition() { @@ -386,7 +386,7 @@ void QS60MainAppUi::Reserved_MtsmPosition() } /*! - \internal + \internal */ void QS60MainAppUi::Reserved_MtsmObject() { @@ -394,7 +394,7 @@ void QS60MainAppUi::Reserved_MtsmObject() } /*! - \internal + \internal */ void QS60MainAppUi::HandleForegroundEventL(TBool aForeground) { diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 911eadc..8710cb6 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -174,12 +174,12 @@ QT_BEGIN_NAMESPACE When using this flag with sequential upload data, the ContentLengthHeader header must be set. - \value HttpPipeliningAllowedAttribute + \value HttpPipeliningAllowedAttribute Requests only, type: QVariant::Bool (default: false) Indicates whether the QNetworkAccessManager code is allowed to use HTTP pipelining with this request. - \value HttpPipeliningWasUsedAttribute + \value HttpPipeliningWasUsedAttribute Replies only, type: QVariant::Bool Indicates whether the HTTP pipelining was used for receiving this reply. @@ -200,9 +200,9 @@ QT_BEGIN_NAMESPACE See http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag for more information. - \since 4.7 + (This value was introduced in 4.7.) - \value CookieSaveControlAttribute + \value CookieSaveControlAttribute Requests only, type: QVariant::Int (default: QNetworkRequest::Automatic) Indicates whether to save 'Cookie' headers received from the server in reply to the request. @@ -213,9 +213,9 @@ QT_BEGIN_NAMESPACE See http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag for more information. - \since 4.7 + (This value was introduced in 4.7.) - \value AuthenticationReuseControlAttribute + \value AuthenticationReuseAttribute Requests only, type: QVariant::Int (default: QNetworkRequest::Automatic) Indicates whether to use cached authorization credentials in the request, if available. If this is set to QNetworkRequest::Manual and the authentication @@ -228,7 +228,13 @@ QT_BEGIN_NAMESPACE See http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag for more information. - \since 4.7 + (This value was introduced in 4.7.) + + \omitvalue MaximumDownloadBufferSizeAttribute + (This value was introduced in 4.7.) + + \omitvalue DownloadBufferAttribute + (This value was introduced in 4.7.) \value User Special type. Additional information can be passed in diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf index e439708..cda1786 100644 --- a/tools/qdoc3/test/qt-html-templates.qdocconf +++ b/tools/qdoc3/test/qt-html-templates.qdocconf @@ -4,9 +4,6 @@ HTML.stylesheets = style/style.css \ style/style_ie8.css \ style/style_ie6.css -HTML.creatorpostheader = "**\n" -HTML.creatorpostpostheader = "***\n" - HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " <div class=\"content\"> \n" \ " <div id=\"nav-logo\">\n" \ @@ -48,7 +45,7 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " <li><a href=\"#\">Qt Topics</a> \n" \ " <ul id=\"topmenuTopic\"> \n" \ " <li><a href=\"qt-basic-concepts.html\">Basic Qt architecture</a></li> \n" \ - " <li><a href=\"declarativeui.html\">Device UI's & Qt Quick</a></li> \n" \ + " <li><a href=\"qtquick.html\">Device UI's & Qt Quick</a></li> \n" \ " <li><a href=\"qt-gui-concepts.html\">Desktop UI components</a></li> \n" \ " <li><a href=\"platform-specific.html\">Platform-specific info</a></li> \n" \ " <li><a href=\"best-practices.html\">How-To's and Best Practices</a></li> \n" \ @@ -100,7 +97,7 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \ " <div id=\"list002\" class=\"list\">\n" \ " <ul id=\"ul002\" >\n" \ " <li class=\"defaultLink\"><a href=\"qt-basic-concepts.html\">Basic Qt architecture</a></li>\n" \ - " <li class=\"defaultLink\"><a href=\"declarativeui.html\">Device UI's & Qt Quick</a></li>\n" \ + " <li class=\"defaultLink\"><a href=\"qtquick.html\">Device UI's & Qt Quick</a></li>\n" \ " <li class=\"defaultLink\"><a href=\"qt-gui-concepts.html\">Desktop UI components</a></li>\n" \ " <li class=\"defaultLink\"><a href=\"platform-specific.html\">Platform-specific info</a></li>\n" \ " </ul> \n" \ -- cgit v0.12 From a55f392edc2145a071d0d59cb0fc69b0d5205a76 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 21 Aug 2010 00:57:07 +0200 Subject: Use QElapsedTimer for the benchlib tests. It's faster to calculate the time with it, since it doesn't need to convert to local time first. Reviewed-By: Harald Fernengel --- dist/changes-4.7.1 | 118 ++++++++++++++++++++++++++++++++++ src/testlib/qbenchmarkmeasurement_p.h | 4 +- 2 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 dist/changes-4.7.1 diff --git a/dist/changes-4.7.1 b/dist/changes-4.7.1 new file mode 100644 index 0000000..c8b26c2 --- /dev/null +++ b/dist/changes-4.7.1 @@ -0,0 +1,118 @@ +Qt 4.7.1 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 4.7.0. For more details, +refer to the online documentation included in this distribution. The +documentation is also available online: + + http://qt.nokia.com/doc/4.7 + +The Qt version 4.7 series is binary compatible with the 4.6.x series. +Applications compiled for 4.6 will continue to run with 4.7. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task +Tracker, or the Merge Request queue of the public source repository. + +Qt Bug Tracker: http://bugreports.qt.nokia.com +Task Tracker: http://qt.nokia.com/developer/task-tracker +Merge Request: http://qt.gitorious.org + +**************************************************************************** +* General * +**************************************************************************** + +Optimizations +------------- + + - Improved the benchmarking library's timing code + * Uses a faster access to the system clock + + * See list of Important Behavior Changes below + + +**************************************************************************** +* Library * +**************************************************************************** + +QtCore +------ + + +QtGui +----- + + +QtDBus +------ + + +QtMultimedia +------------ + + +QtNetwork +--------- + + +QtOpenGL +-------- + + +QtOpenVG +-------- + + +QtWebKit +-------- + + +QtSql +----- + + +QtSvg +----- + + +Qt Plugins +---------- + + + +**************************************************************************** +* Platform Specific Changes * +**************************************************************************** + +Qt for Unix (X11 and Mac OS X) +------------------------------ + + +Qt for Linux/X11 +---------------- + + +Qt for Windows +-------------- + + +Qt for Mac OS X +--------------- + + +Qt for Symbian +-------------- + + + +**************************************************************************** +* Tools * +**************************************************************************** + + - Designer + + - uic + +**************************************************************************** +* Important Behavior Changes * +**************************************************************************** + + diff --git a/src/testlib/qbenchmarkmeasurement_p.h b/src/testlib/qbenchmarkmeasurement_p.h index 932852c..20a3bc1 100644 --- a/src/testlib/qbenchmarkmeasurement_p.h +++ b/src/testlib/qbenchmarkmeasurement_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include <QtCore/qdatetime.h> +#include <QtCore/qelapsedtimer.h> #include "3rdparty/cycle_p.h" #include "qbenchmark.h" @@ -87,7 +87,7 @@ public: bool needsWarmupIteration(); QTest::QBenchmarkMetric metricType(); private: - QTime time; + QElapsedTimer time; }; #ifdef HAVE_TICK_COUNTER // defined in 3rdparty/cycle_p.h -- cgit v0.12 From d8cd04e97540ac1c048a35ad54c8c6337d639ca1 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 24 Aug 2010 20:17:48 +0200 Subject: Fix building of qsimd.cpp on Windows CE --- src/corelib/tools/qsimd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index c34644c..68ab033 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -63,6 +63,8 @@ QT_BEGIN_NAMESPACE #if defined (Q_OS_WINCE) static inline uint detectProcessorFeatures() { + uint features = 0; + #if defined (ARM) if (IsProcessorFeaturePresent(PF_ARM_INTEL_WMMX)) { features = IWMMXT; -- cgit v0.12 From ed1fecfe6b7ce370184ef4dfb421fb387807633b Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 24 Aug 2010 23:22:13 +0200 Subject: Add the missing license headers to the QString benchmark data --- tests/auto/headers/tst_headers.cpp | 3 +- tests/benchmarks/corelib/tools/qstring/data.cpp | 1 + tests/benchmarks/corelib/tools/qstring/data.h | 41 ++++++++++++++++++++++ .../corelib/tools/qstring/generatelist.pl | 3 +- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/tests/auto/headers/tst_headers.cpp b/tests/auto/headers/tst_headers.cpp index 06c70f9..7ccf058 100644 --- a/tests/auto/headers/tst_headers.cpp +++ b/tests/auto/headers/tst_headers.cpp @@ -213,7 +213,8 @@ void tst_Headers::licenseCheck() return; if (content.first().contains("generated")) { - content.takeFirst(); + // don't scan generated files + return; } if (sourceFile.endsWith("/tests/auto/linguist/lupdate/testdata/good/merge_ordering/foo.cpp") diff --git a/tests/benchmarks/corelib/tools/qstring/data.cpp b/tests/benchmarks/corelib/tools/qstring/data.cpp index 89f50d0..6d1a069 100644 --- a/tests/benchmarks/corelib/tools/qstring/data.cpp +++ b/tests/benchmarks/corelib/tools/qstring/data.cpp @@ -1,3 +1,4 @@ +// This is a generated file - DO NOT EDIT static const ushort stringCollectionData[] __attribute__((aligned(16))) = { // #0 65535, diff --git a/tests/benchmarks/corelib/tools/qstring/data.h b/tests/benchmarks/corelib/tools/qstring/data.h index a23dae3..c7a7467 100644 --- a/tests/benchmarks/corelib/tools/qstring/data.h +++ b/tests/benchmarks/corelib/tools/qstring/data.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include <qglobal.h> struct StringCollection diff --git a/tests/benchmarks/corelib/tools/qstring/generatelist.pl b/tests/benchmarks/corelib/tools/qstring/generatelist.pl index 2777329..d027adb 100644 --- a/tests/benchmarks/corelib/tools/qstring/generatelist.pl +++ b/tests/benchmarks/corelib/tools/qstring/generatelist.pl @@ -105,7 +105,8 @@ sub printUshortArray($$$) { print "#include \"data.h\"\n\n"; -print "const ushort stringCollectionData[] __attribute__((aligned(64))) = { \n"; +print "// This is a generated file - DO NOT EDIT\n"; +print "const ushort stringCollectionData[] __attribute__((aligned(64))) = {\n"; $count = 0; $offset = 0; $totalsize = 0; -- cgit v0.12 From 398afe929efb1a6aaaa353c2e3e42d9049cc0140 Mon Sep 17 00:00:00 2001 From: Charles Yin <charles.yin@nokia.com> Date: Tue, 24 Aug 2010 15:15:29 +1000 Subject: Fix the broken unicode detection of ODBC driver. the unicode flag is entirely overrided by mistake. Task-number:QTBUG-13109 Reviewed-by:Michael Goddard --- src/sql/drivers/odbc/qsql_odbc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index 9a35ac5..66dabfa 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -2106,7 +2106,7 @@ void QODBCDriverPrivate::checkSqlServer() serverType = QString::fromUtf8((const char *)serverString.constData(), t); #endif isFreeTDSDriver = serverType.contains(QLatin1String("tdsodbc"), Qt::CaseInsensitive); - unicode = isFreeTDSDriver == false; + unicode = unicode && !isFreeTDSDriver; } } -- cgit v0.12 From 35e1c730c25d9e5c1af9715072754126e4b3c0c1 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka <tomasz.bursztyka@nokia.com> Date: Tue, 17 Aug 2010 14:11:28 +0300 Subject: QNetworkSession::close() method now send closed() signal while faking disconnection. Fixes: NB#185586 - QNetworkSession::closed() signal never sent when QNetworkSession::close() is called. --- src/plugins/bearer/icd/qnetworksession_impl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp index 3170bf6..8013d30 100644 --- a/src/plugins/bearer/icd/qnetworksession_impl.cpp +++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp @@ -888,12 +888,12 @@ void QNetworkSessionPrivateImpl::close() state = QNetworkSession::Closing; emit stateChanged(state); + // we fake a disconnection, session error is sent + updateState(QNetworkSession::Disconnected); + opened = false; isOpen = false; - // we fake a disconnection, session error is not sent - updateState(QNetworkSession::Disconnected); - icd.disconnect(ICD_CONNECTION_FLAG_APPLICATION_EVENT); startTime = QDateTime(); } else { -- cgit v0.12 From 69f5543cceaed4b5836e3671f65c32235ea0e8eb Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 25 Aug 2010 09:29:45 +0200 Subject: I don't know why some linkers can't call this function, so comment it out. It works fine for me on my Linux box (also 32-bit) and on ARM. --- src/corelib/global/qlibraryinfo.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index b4f5d0f..a0779c9 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -500,6 +500,7 @@ QT_END_NAMESPACE extern const char qt_core_interpreter[] __attribute__((section(".interp"))) = ELF_INTERPRETER; +extern void qDumpCPUFeatures(); // in qsimd.cpp extern "C" void qt_core_boilerplate(); void qt_core_boilerplate() { @@ -525,8 +526,7 @@ void qt_core_boilerplate() qt_configure_libraries_path_str + 12, qt_configure_headers_path_str + 12); - extern void qDumpCPUFeatures(); - qDumpCPUFeatures(); +// qDumpCPUFeatures(); #ifdef QT_EVAL extern void qt_core_eval_init(uint); -- cgit v0.12 From 41532e38ff2b5153b79374032112d435b42e48a2 Mon Sep 17 00:00:00 2001 From: Mark Brand <mabrand@mabrand.nl> Date: Wed, 25 Aug 2010 10:05:15 +0200 Subject: scope fixes and clutter reduction for sql driver projects Add missing wildcard to scope where meant to include all win32-g++ targets. There is no reason to ignore QT_LFLAGS_TDS and QT_LFLAGS_PSQL in static builds. Via LIBS these may end up in QMAKE_PRL_LIBS in QtSql.prl. Also, the isEmpty() tests on these is redundant and only wastes time. Processing of QT_CFLAGS_PSQL should not depend on QT_LFLAGS_PSQL. It no longer seems appropriate to clean up "-lz" here in case of zlib bundled in QtCore. It's reasonable to expect QT_LFLAGS_PSQL to be ready after configure. Merge-request: 2459 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- src/sql/drivers/psql/qsql_psql.pri | 7 ++----- src/sql/drivers/tds/qsql_tds.pri | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/sql/drivers/psql/qsql_psql.pri b/src/sql/drivers/psql/qsql_psql.pri index 97db4be..6da3540 100644 --- a/src/sql/drivers/psql/qsql_psql.pri +++ b/src/sql/drivers/psql/qsql_psql.pri @@ -2,12 +2,9 @@ HEADERS += $$PWD/qsql_psql.h SOURCES += $$PWD/qsql_psql.cpp unix|win32-g++* { - !static:!isEmpty(QT_LFLAGS_PSQL) { - !contains(QT_CONFIG, system-zlib): QT_LFLAGS_PSQL -= -lz - LIBS *= $$QT_LFLAGS_PSQL - QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL - } + LIBS *= $$QT_LFLAGS_PSQL !contains(LIBS, .*pq.*):LIBS += -lpq + QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL } else { !contains(LIBS, .*pq.*):LIBS += -llibpq -lws2_32 -ladvapi32 } diff --git a/src/sql/drivers/tds/qsql_tds.pri b/src/sql/drivers/tds/qsql_tds.pri index 037f793..521c06b 100644 --- a/src/sql/drivers/tds/qsql_tds.pri +++ b/src/sql/drivers/tds/qsql_tds.pri @@ -1,8 +1,8 @@ HEADERS += $$PWD/qsql_tds.h SOURCES += $$PWD/qsql_tds.cpp -unix|win32-g++: { - !isEmpty(QT_LFLAGS_TDS):!static:LIBS *= $$QT_LFLAGS_TDS +unix|win32-g++*: { + LIBS *= $$QT_LFLAGS_TDS !contains(LIBS, .*sybdb.*):LIBS += -lsybdb QMAKE_CXXFLAGS *= $$QT_CFLAGS_TDS } else:win32-borland { -- cgit v0.12 From 3c2dc7f652996d1f3b504b42d872734df2e9234f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond.kjernasen@nokia.com> Date: Wed, 25 Aug 2010 10:53:06 +0200 Subject: WGL_COLOR_BITS_ARB should not take the alpha bits into account. The WGL_COLOR_BITS_ARB attribute is only supposed to specify the number of color bits in each buffer, *excluding* the alpha bits. Task-number: QTBUG-13141 Reviewed-by: Samuel --- src/opengl/qgl_win.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qgl_win.cpp b/src/opengl/qgl_win.cpp index ed4814f..55f224a 100644 --- a/src/opengl/qgl_win.cpp +++ b/src/opengl/qgl_win.cpp @@ -920,7 +920,7 @@ int QGLContext::choosePixelFormat(void* dummyPfd, HDC pdc) iAttributes[i++] = WGL_DRAW_TO_WINDOW_ARB; iAttributes[i++] = TRUE; iAttributes[i++] = WGL_COLOR_BITS_ARB; - iAttributes[i++] = 32; + iAttributes[i++] = 24; iAttributes[i++] = WGL_DOUBLE_BUFFER_ARB; iAttributes[i++] = d->glFormat.doubleBuffer(); if (d->glFormat.stereo()) { -- cgit v0.12 From 9f5457110f86fc11995efd93729c563e0713bebc Mon Sep 17 00:00:00 2001 From: Benjamin Poulain <benjamin.poulain@nokia.com> Date: Mon, 23 Aug 2010 22:19:11 +0200 Subject: Implement the composition mode Plus with Neon. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On the benchmark tst_QPainter::compositionModes(), this patches gives the following improvements: -300x300:opaque: 390% -300x300:!opaque: 1085% Reviewed-by: Samuel Rødal --- src/gui/painting/qdrawhelper.cpp | 9 ++---- src/gui/painting/qdrawhelper_neon.cpp | 55 +++++++++++++++++++++++++++++++++++ src/gui/painting/qdrawhelper_neon_p.h | 1 + src/gui/painting/qdrawhelper_p.h | 24 +++++++++++++++ src/gui/painting/qdrawhelper_sse2.cpp | 16 ---------- 5 files changed, 83 insertions(+), 22 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 276da93..0b74fc0 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -1757,9 +1757,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Plus_impl(uint *dest, int for (int i = 0; i < length; ++i) { PRELOAD_COND(dest) uint d = dest[i]; -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - d = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX + d = comp_func_Plus_one_pixel(d, s); coverage.store(&dest[i], d); } } @@ -1781,9 +1779,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Plus_impl(uint *dest, const uin uint d = dest[i]; uint s = src[i]; -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - d = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX + d = comp_func_Plus_one_pixel(d, s); coverage.store(&dest[i], d); } @@ -7911,6 +7907,7 @@ void qInitDrawhelperAsm() functionForMode_C[QPainter::CompositionMode_SourceOver] = qt_blend_argb32_on_argb32_scanline_neon; functionForModeSolid_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_neon; + functionForMode_C[QPainter::CompositionMode_Plus] = comp_func_Plus_neon; destFetchProc[QImage::Format_RGB16] = qt_destFetchRGB16_neon; destStoreProc[QImage::Format_RGB16] = qt_destStoreRGB16_neon; diff --git a/src/gui/painting/qdrawhelper_neon.cpp b/src/gui/painting/qdrawhelper_neon.cpp index 03fe075..c1f815d 100644 --- a/src/gui/painting/qdrawhelper_neon.cpp +++ b/src/gui/painting/qdrawhelper_neon.cpp @@ -622,6 +622,61 @@ void QT_FASTCALL comp_func_solid_SourceOver_neon(uint *destPixels, int length, u } } +void QT_FASTCALL comp_func_Plus_neon(uint *dst, const uint *src, int length, uint const_alpha) +{ + if (const_alpha == 255) { + uint *const end = dst + length; + uint *const neonEnd = end - 3; + + while (dst < neonEnd) { + asm volatile ( + "vld2.8 { d0, d1 }, [%[SRC]] !\n\t" + "vld2.8 { d2, d3 }, [%[DST]]\n\t" + "vqadd.u8 q0, q0, q1\n\t" + "vst2.8 { d0, d1 }, [%[DST]] !\n\t" + : [DST]"+r" (dst), [SRC]"+r" (src) + : + : "memory", "d0", "d1", "d2", "d3", "q0", "q1" + ); + } + + while (dst != end) { + *dst = comp_func_Plus_one_pixel(*dst, *src); + ++dst; + ++src; + } + } else { + int x = 0; + const int one_minus_const_alpha = 255 - const_alpha; + const uint16x8_t constAlphaVector = vdupq_n_u16(const_alpha); + const uint16x8_t oneMinusconstAlphaVector = vdupq_n_u16(one_minus_const_alpha); + + const uint16x8_t half = vdupq_n_u16(0x80); + for (; x < length - 3; x += 4) { + const uint32x4_t src32 = vld1q_u32((uint32_t *)&src[x]); + const uint8x16_t src8 = vreinterpretq_u8_u32(src32); + uint8x16_t dst8 = vld1q_u8((uint8_t *)&dst[x]); + uint8x16_t result = vqaddq_u8(dst8, src8); + + uint16x8_t result_low = vmovl_u8(vget_low_u8(result)); + uint16x8_t result_high = vmovl_u8(vget_high_u8(result)); + + uint16x8_t dst_low = vmovl_u8(vget_low_u8(dst8)); + uint16x8_t dst_high = vmovl_u8(vget_high_u8(dst8)); + + result_low = qvinterpolate_pixel_255(result_low, constAlphaVector, dst_low, oneMinusconstAlphaVector, half); + result_high = qvinterpolate_pixel_255(result_high, constAlphaVector, dst_high, oneMinusconstAlphaVector, half); + + const uint32x2_t result32_low = vreinterpret_u32_u8(vmovn_u16(result_low)); + const uint32x2_t result32_high = vreinterpret_u32_u8(vmovn_u16(result_high)); + vst1q_u32((uint32_t *)&dst[x], vcombine_u32(result32_low, result32_high)); + } + + for (; x < length; ++x) + dst[x] = comp_func_Plus_one_pixel_const_alpha(dst[x], src[x], const_alpha, one_minus_const_alpha); + } +} + static const int tileSize = 32; extern "C" void qt_rotate90_16_neon(quint16 *dst, const quint16 *src, int sstride, int dstride, int count); diff --git a/src/gui/painting/qdrawhelper_neon_p.h b/src/gui/painting/qdrawhelper_neon_p.h index cd2dbfc..182c936 100644 --- a/src/gui/painting/qdrawhelper_neon_p.h +++ b/src/gui/painting/qdrawhelper_neon_p.h @@ -131,6 +131,7 @@ void QT_FASTCALL qt_destStoreRGB16_neon(QRasterBuffer *rasterBuffer, int x, int y, const uint *buffer, int length); void QT_FASTCALL comp_func_solid_SourceOver_neon(uint *destPixels, int length, uint color, uint const_alpha); +void QT_FASTCALL comp_func_Plus_neon(uint *dst, const uint *src, int length, uint const_alpha); #endif // QT_HAVE_NEON diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index d04c70d..75f42a0 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -1944,6 +1944,30 @@ const uint qt_bayer_matrix[16][16] = { ((((argb >> 24) * alpha) >> 8) << 24) | (argb & 0x00ffffff) +#if QT_POINTER_SIZE == 8 // 64-bit versions +#define AMIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) +#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) +#else // 32 bits +// The mask for alpha can overflow over 32 bits +#define AMIX(mask) quint32(qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) +#define MIX(mask) (qMin(((quint32(s)&mask) + (quint32(d)&mask)), quint32(mask))) +#endif + +inline int comp_func_Plus_one_pixel_const_alpha(uint d, const uint s, const uint const_alpha, const uint one_minus_const_alpha) +{ + const int result = (AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); + return INTERPOLATE_PIXEL_255(result, const_alpha, d, one_minus_const_alpha); +} + +inline int comp_func_Plus_one_pixel(uint d, const uint s) +{ + const int result = (AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); + return result; +} + +#undef MIX +#undef AMIX + // prototypes of all the composition functions void QT_FASTCALL comp_func_SourceOver(uint *dest, const uint *src, int length, uint const_alpha); void QT_FASTCALL comp_func_DestinationOver(uint *dest, const uint *src, int length, uint const_alpha); diff --git a/src/gui/painting/qdrawhelper_sse2.cpp b/src/gui/painting/qdrawhelper_sse2.cpp index 22c0384..30454af 100644 --- a/src/gui/painting/qdrawhelper_sse2.cpp +++ b/src/gui/painting/qdrawhelper_sse2.cpp @@ -161,22 +161,6 @@ void QT_FASTCALL comp_func_SourceOver_sse2(uint *destPixels, const uint *srcPixe } } -inline int comp_func_Plus_one_pixel_const_alpha(uint d, const uint s, const uint const_alpha, const uint one_minus_const_alpha) -{ -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - const int result = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX - return INTERPOLATE_PIXEL_255(result, const_alpha, d, one_minus_const_alpha); -} - -inline int comp_func_Plus_one_pixel(uint d, const uint s) -{ -#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask))) - const int result = (MIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK)); -#undef MIX - return result; -} - void QT_FASTCALL comp_func_Plus_sse2(uint *dst, const uint *src, int length, uint const_alpha) { int x = 0; -- cgit v0.12 From d28f3ffadec209511d8d992e3b35fae155b3d1c5 Mon Sep 17 00:00:00 2001 From: Benjamin Poulain <benjamin.poulain@nokia.com> Date: Tue, 24 Aug 2010 04:20:19 +0200 Subject: Implement qt_memfill32 with Neon. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch introduce a implementation of qt_memfill32 with the Neon instructions set from ARMv7. The loop is unrolled 1 time to get better performance. This implementation of memfill is 330% faster on the N900. Reviewed-by: Samuel Rødal --- src/gui/painting/qdrawhelper.cpp | 1 + src/gui/painting/qdrawhelper_neon.cpp | 38 +++++++++++++++++++++++++++++++++++ src/gui/painting/qdrawhelper_neon_p.h | 1 + 3 files changed, 40 insertions(+) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 0b74fc0..be4275c 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -7913,6 +7913,7 @@ void qInitDrawhelperAsm() qMemRotateFunctions[QImage::Format_RGB16][0] = qt_memrotate90_16_neon; qMemRotateFunctions[QImage::Format_RGB16][2] = qt_memrotate270_16_neon; + qt_memfill32 = qt_memfill32_neon; } #endif diff --git a/src/gui/painting/qdrawhelper_neon.cpp b/src/gui/painting/qdrawhelper_neon.cpp index c1f815d..ed15c5c 100644 --- a/src/gui/painting/qdrawhelper_neon.cpp +++ b/src/gui/painting/qdrawhelper_neon.cpp @@ -51,6 +51,44 @@ QT_BEGIN_NAMESPACE +void qt_memfill32_neon(quint32 *dest, quint32 value, int count) +{ + const int epilogueSize = count % 16; + if (count >= 16) { + quint32 *const neonEnd = dest + count - epilogueSize; + register uint32x4_t valueVector1 asm ("q0") = vdupq_n_u32(value); + register uint32x4_t valueVector2 asm ("q1") = valueVector1; + while (dest != neonEnd) { + asm volatile ( + "vst2.32 { d0, d1, d2, d3 }, [%[DST]] !\n\t" + "vst2.32 { d0, d1, d2, d3 }, [%[DST]] !\n\t" + : [DST]"+r" (dest) + : [VALUE1]"w"(valueVector1), [VALUE2]"w"(valueVector2) + : "memory" + ); + } + } + + switch (epilogueSize) + { + case 15: *dest++ = value; + case 14: *dest++ = value; + case 13: *dest++ = value; + case 12: *dest++ = value; + case 11: *dest++ = value; + case 10: *dest++ = value; + case 9: *dest++ = value; + case 8: *dest++ = value; + case 7: *dest++ = value; + case 6: *dest++ = value; + case 5: *dest++ = value; + case 4: *dest++ = value; + case 3: *dest++ = value; + case 2: *dest++ = value; + case 1: *dest++ = value; + } +} + static inline uint16x8_t qvdiv_255_u16(uint16x8_t x, uint16x8_t half) { // result = (x + (x >> 8) + 0x80) >> 8 diff --git a/src/gui/painting/qdrawhelper_neon_p.h b/src/gui/painting/qdrawhelper_neon_p.h index 182c936..451edbc 100644 --- a/src/gui/painting/qdrawhelper_neon_p.h +++ b/src/gui/painting/qdrawhelper_neon_p.h @@ -120,6 +120,7 @@ void qt_transform_image_rgb16_on_rgb16_neon(uchar *destPixels, int dbpl, const QTransform &targetRectTransform, int const_alpha); +void qt_memfill32_neon(quint32 *dest, quint32 value, int count); void qt_memrotate90_16_neon(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl); void qt_memrotate270_16_neon(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl); -- cgit v0.12 From 3061e45108afc13848e9020790b2d60f07e16aa9 Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Mon, 23 Aug 2010 14:19:53 +0200 Subject: Note RTL behavior changes in docs and changelog Task-number: QT-3292 Reviewed-by: Lars Knoll --- dist/changes-4.7.0 | 12 ++++++++++++ src/gui/kernel/qwidget.cpp | 2 ++ 2 files changed, 14 insertions(+) diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0 index 790aabc..01ebf63 100644 --- a/dist/changes-4.7.0 +++ b/dist/changes-4.7.0 @@ -478,6 +478,18 @@ QtCore: line breaking, reporting the index of the boundary at which the line break should occur rather than the index of the character. +QtGui: + - QWidget::setLayoutDirection no longer affects the text layout + direction (Qt::LeftToRight or Qt::RightToLeft) of QTextEdit, QLineEdit + and widgets based on them. The default text layout direction + (Qt::LayoutDirectionAuto) is now detected from keyboard layout and + language of the text (conforms to Unicode standards). To + programmatically force the text direction of a QTextEdit, you can + change the defaultTextOption of the QTextDocument associated with that + widget with a new QTextOption of different textDirection property. For + QLineEdit, the only way so far is sending a Qt::Key_Direction_L/R + keyboard event to that widget. + QtNetwork: - Qt does no longer provide its own CA bundle, but uses system APIs for retrieving the default system certificates. diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 3d2bfe2..ea3dcab 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -4864,6 +4864,8 @@ void QWidgetPrivate::resolveLayoutDirection() has been called for the parent do not inherit the parent's layout direction. + This method no longer affects text layout direction since Qt 4.7. + \sa QApplication::layoutDirection */ void QWidget::setLayoutDirection(Qt::LayoutDirection direction) -- cgit v0.12 From 37e1bea301d3e4c4346fad16244067d62a093af6 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig <jens.bache-wiig@nokia.com> Date: Wed, 25 Aug 2010 13:49:29 +0200 Subject: Fixed item view background color in Gtk style Autotests were modified to check for 50% color coverage as well. Before they were not really testing the bgcolor since they would accept only the red grid color as a valid test pass. Task-number: QTBUG-13125 Reviewed-by: ogoffart --- src/gui/styles/qgtkstyle.cpp | 5 ++++- tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp | 20 +++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index c989bd3..c5429dd 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -836,7 +836,10 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, case PE_PanelItemViewItem: if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) { - if (vopt->backgroundBrush.style() != Qt::NoBrush) { + uint resolve_mask = vopt->palette.resolve(); + if (vopt->backgroundBrush.style() != Qt::NoBrush + || (resolve_mask & (1 << QPalette::Base))) + { QPointF oldBO = painter->brushOrigin(); painter->setBrushOrigin(vopt->rect.topLeft()); painter->fillRect(vopt->rect, vopt->backgroundBrush); diff --git a/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp index e370309..04b1e79 100644 --- a/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -698,20 +698,25 @@ void tst_QStyleSheetStyle::fontPrecedence() QCOMPARE(FONTSIZE(edit2), 26); } -static bool testForColors(const QImage& image, const QColor& color) +// Ensure primary will only return true if the color covers more than 50% of pixels +static bool testForColors(const QImage& image, const QColor& color, bool ensurePrimary=false) { int count = 0; QRgb rgb = color.rgba(); + int totalCount = image.height()*image.width(); for (int y = 0; y < image.height(); ++y) { for (int x = 0; x < image.width(); ++x) { // Because of antialiasing we allow a certain range of errors here. QRgb pixel = image.pixel(x, y); + if (qAbs((int)(pixel & 0xff) - (int)(rgb & 0xff)) + qAbs((int)((pixel & 0xff00) >> 8) - (int)((rgb & 0xff00) >> 8)) + qAbs((int)((pixel & 0xff0000) >> 16) - (int)((rgb & 0xff0000) >> 16)) <= 50) { - if (++count >= 10) { + count++; + if (!ensurePrimary && count >=10 ) + return true; + else if (count > totalCount/2) return true; - } } } } @@ -1528,6 +1533,15 @@ void tst_QStyleSheetStyle::task188195_baseBackground() tree.render(&image); QVERIFY(testForColors(image, tree.palette().base().color())); QVERIFY(!testForColors(image, QColor(0xab, 0x12, 0x51))); + + QTableWidget table(12, 12); + table.setItem(0, 0, new QTableWidgetItem()); + table.setStyleSheet( "QTableView {background-color: #ff0000}" ); + table.show(); + QTest::qWait(20); + image = QImage(table.width(), table.height(), QImage::Format_ARGB32); + table.render(&image); + QVERIFY(testForColors(image, Qt::red, true)); } void tst_QStyleSheetStyle::task232085_spinBoxLineEditBg() -- cgit v0.12 From d2089600ea247b5d6354e8eee4becf40802c4693 Mon Sep 17 00:00:00 2001 From: Benjamin Poulain <benjamin.poulain@nokia.com> Date: Wed, 25 Aug 2010 12:13:00 +0200 Subject: Refactor blend_transformed_bilinear to simplify the blend type checking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The function blend_transformed_bilinear_argb() was checking the blend type at runtime for each pixel in order to clamp the coordinates. This code was duplicated in both branch of the function. This patch factorize the code by doing the clamping in a template function. Reviewed-by: Samuel Rødal --- src/gui/painting/qdrawhelper.cpp | 133 ++++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 66 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index be4275c..59bef66 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -5159,6 +5159,61 @@ static void blend_tiled_rgb444(int count, const QSpan *spans, void *userData) blend_tiled_generic<RegularSpans>(count, spans, userData); } +template<int> +Q_STATIC_INLINE_FUNCTION void blend_transformed_bilinear_argb_clamp_coordinates (int &x1, int &x2, int &y1, int &y2, + const int image_width, const int image_height, + const int image_x1, const int image_x2, + const int image_y1, const int image_y2); + +template<> +Q_STATIC_INLINE_FUNCTION void blend_transformed_bilinear_argb_clamp_coordinates <BlendTransformedBilinearTiled> (int &x1, int &x2, int &y1, int &y2, + const int image_width, const int image_height, + const int image_x1, const int image_x2, + const int image_y1, const int image_y2) +{ + Q_UNUSED(image_x1) + Q_UNUSED(image_x2) + Q_UNUSED(image_y1) + Q_UNUSED(image_y2) + x1 %= image_width; + if (x1 < 0) x1 += image_width; + x2 = x1 + 1; + x2 %= image_width; + + y1 %= image_height; + if (y1 < 0) y1 += image_height; + y2 = y1 + 1; + y2 %= image_height; + + Q_ASSERT(x1 >= 0 && x1 < image_width); + Q_ASSERT(x2 >= 0 && x2 < image_width); + Q_ASSERT(y1 >= 0 && y1 < image_height); + Q_ASSERT(y2 >= 0 && y2 < image_height); +} + +template <> +Q_STATIC_INLINE_FUNCTION void blend_transformed_bilinear_argb_clamp_coordinates<BlendTransformedBilinear>(int &x1, int &x2, int &y1, int &y2, + const int image_width, const int image_height, + const int image_x1, const int image_x2, + const int image_y1, const int image_y2) +{ + Q_UNUSED(image_width) + Q_UNUSED(image_height) + if (x1 < image_x1) { + x2 = x1 = image_x1; + } else if (x1 >= image_x2) { + x2 = x1 = image_x2; + } else { + x2 = x1 + 1; + } + if (y1 < image_y1) { + y2 = y1 = image_y1; + } else if (y1 >= image_y2) { + y2 = y1 = image_y2; + } else { + y2 = y1 + 1; + } +} template <SpanMethod spanMethod, TextureBlendType blendType> /* blendType must be either BlendTransformedBilinear or BlendTransformedBilinearTiled */ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const QSpan *spans, void *userData) @@ -5175,8 +5230,8 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const const int image_x1 = data->texture.x1; const int image_y1 = data->texture.y1; - const int image_x2 = data->texture.x2; - const int image_y2 = data->texture.y2; + const int image_x2 = data->texture.x2 - 1; + const int image_y2 = data->texture.y2 - 1; const int image_width = data->texture.width; const int image_height = data->texture.height; const int scanline_offset = data->texture.bytesPerLine / 4; @@ -5206,43 +5261,16 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int l = qMin(length, buffer_size); const uint *end = buffer + l; uint *b = buffer; - while (b < end) { + while (b != end) { int x1 = (x >> 16); int x2; int y1 = (y >> 16); int y2; - if (blendType == BlendTransformedBilinearTiled) { - x1 %= image_width; - if (x1 < 0) x1 += image_width; - x2 = x1 + 1; - x2 %= image_width; - - y1 %= image_height; - if (y1 < 0) y1 += image_height; - y2 = y1 + 1; - y2 %= image_height; - - Q_ASSERT(x1 >= 0 && x1 < image_width); - Q_ASSERT(x2 >= 0 && x2 < image_width); - Q_ASSERT(y1 >= 0 && y1 < image_height); - Q_ASSERT(y2 >= 0 && y2 < image_height); - } else { - if (x1 < image_x1) { - x2 = x1 = image_x1; - } else if (x1 >= image_x2 - 1) { - x2 = x1 = image_x2 - 1; - } else { - x2 = x1 + 1; - } - if (y1 < image_y1) { - y2 = y1 = image_y1; - } else if (y1 >= image_y2 - 1) { - y2 = y1 = image_y2 - 1; - } else { - y2 = y1 + 1; - } - } + blend_transformed_bilinear_argb_clamp_coordinates<blendType>(x1, x2, y1, y2, + image_width, image_height, + image_x1, image_x2, + image_y1, image_y2); int y1_offset = y1 * scanline_offset; int y2_offset = y2 * scanline_offset; @@ -5307,7 +5335,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int l = qMin(length, buffer_size); const uint *end = buffer + l; uint *b = buffer; - while (b < end) { + while (b != end) { const qreal iw = w == 0 ? 1 : 1 / w; const qreal px = x * iw - 0.5; const qreal py = y * iw - 0.5; @@ -5322,37 +5350,10 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int idistx = 256 - distx; int idisty = 256 - disty; - if (blendType == BlendTransformedBilinearTiled) { - x1 %= image_width; - if (x1 < 0) x1 += image_width; - x2 = x1 + 1; - x2 %= image_width; - - y1 %= image_height; - if (y1 < 0) y1 += image_height; - y2 = y1 + 1; - y2 %= image_height; - - Q_ASSERT(x1 >= 0 && x1 < image_width); - Q_ASSERT(x2 >= 0 && x2 < image_width); - Q_ASSERT(y1 >= 0 && y1 < image_height); - Q_ASSERT(y2 >= 0 && y2 < image_height); - } else { - if (x1 < image_x1) { - x2 = x1 = image_x1; - } else if (x1 >= image_x2 - 1) { - x2 = x1 = image_x2 - 1; - } else { - x2 = x1 + 1; - } - if (y1 < image_y1) { - y2 = y1 = image_y1; - } else if (y1 >= image_y2 - 1) { - y2 = y1 = image_y2 - 1; - } else { - y2 = y1 + 1; - } - } + blend_transformed_bilinear_argb_clamp_coordinates<blendType>(x1, x2, y1, y2, + image_width, image_height, + image_x1, image_x2, + image_y1, image_y2); int y1_offset = y1 * scanline_offset; int y2_offset = y2 * scanline_offset; -- cgit v0.12 From 4c9212cdf38b35e89311416436f1e60b818b69c3 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Wed, 25 Aug 2010 15:44:45 +0300 Subject: Enabling AdvancedPointerEvents for active windows causes a panic In Symbian port of Qt, widgets that have attribute WA_AcceptTouchEvents, are tried to set as enabled for "advanced pointer events". These are multitouch events. However, the event enablation cannot be done after a window has been activated. Current implementation causes a crash in certain cases. For example, a treewidget that is inside a inactive tab page, causes a crash when tab page is selected. The crash is worked around, by not allowing a active window to enable advanced pointer events. This fixes http://bugreports.qt.nokia.com/browse/QTBUG-12779 Task-number: QTBUG-12779 Reviewed-by: mread --- src/gui/kernel/qapplication_s60.cpp | 5 +++++ src/gui/kernel/qt_s60_p.h | 2 ++ src/gui/kernel/qwidget_s60.cpp | 9 ++++++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 7c5e790..e197dc5 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1344,6 +1344,11 @@ void QSymbianControl::setFocusSafely(bool focus) } } +bool QSymbianControl::isControlActive() +{ + return IsActivated() ? true : false; +} + /*! \typedef QApplication::QS60MainApplicationFactory \since 4.6 diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index ad6a99a..eb1aa18 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -211,6 +211,8 @@ public: void setFocusSafely(bool focus); + bool isControlActive(); + #ifdef Q_WS_S60 void FadeBehindPopup(bool fade){ popupFader.FadeBehindPopup( this, this, fade); } void HandleStatusPaneSizeChange(); diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 7494f92..fc13c93 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -366,7 +366,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de // Symbian windows are always created in an inactive state // We perform this assignment for the case where the window is being re-created - // as aa result of a call to setParent_sys, on either this widget or one of its + // as a result of a call to setParent_sys, on either this widget or one of its // ancestors. extra->activated = 0; @@ -410,7 +410,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de // Symbian windows are always created in an inactive state // We perform this assignment for the case where the window is being re-created - // as aa result of a call to setParent_sys, on either this widget or one of its + // as a result of a call to setParent_sys, on either this widget or one of its // ancestors. extra->activated = 0; @@ -954,7 +954,10 @@ void QWidgetPrivate::registerTouchWindow() Q_Q(QWidget); if (q->testAttribute(Qt::WA_WState_Created) && q->windowType() != Qt::Desktop) { RWindow *rwindow = static_cast<RWindow *>(q->effectiveWinId()->DrawableWindow()); - rwindow->EnableAdvancedPointers(); + QSymbianControl *window = static_cast<QSymbianControl *>(q->effectiveWinId()); + //Enabling advanced pointer events for controls that already have active windows causes a panic. + if (!window->isControlActive()) + rwindow->EnableAdvancedPointers(); } #endif } -- cgit v0.12 From 7c0d15a22266a425c9e9ac0120d6774e120fe01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= <bjorn.nilsen@nokia.com> Date: Wed, 25 Aug 2010 14:27:27 +0200 Subject: Don't rely on mapFromGlobal in QGraphicsScenePrivate::itemsAtPosition. The old approach discovered a bug in QWidget::mapToGlobal in the context of lighthouse, which in turn brought our eyes to QGraphicsScenePrivate::itemsAtPosition. The implementation itself was correct, but we can easily remove the-not-so-cheap mapToGlobal call since we already have the scene position, which is all we need. This functionality is heavily tested by existing auto tests, and all of them pass. Reviewed-by: mae --- src/gui/graphicsview/qgraphicsscene.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 3c23884..4fb754c 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -1074,7 +1074,7 @@ void QGraphicsScenePrivate::enableMouseTrackingOnViews() /*! Returns all items for the screen position in \a event. */ -QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &screenPos, +QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &/*screenPos*/, const QPointF &scenePos, QWidget *widget) const { @@ -1083,16 +1083,12 @@ QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &scre if (!view) return q->items(scenePos, Qt::IntersectsItemShape, Qt::DescendingOrder, QTransform()); - const QRectF pointRect(QPointF(widget->mapFromGlobal(screenPos)), QSizeF(1, 1)); + const QRectF pointRect(scenePos, QSizeF(1, 1)); if (!view->isTransformed()) return q->items(pointRect, Qt::IntersectsItemShape, Qt::DescendingOrder); const QTransform viewTransform = view->viewportTransform(); - if (viewTransform.type() <= QTransform::TxScale) { - return q->items(viewTransform.inverted().mapRect(pointRect), Qt::IntersectsItemShape, - Qt::DescendingOrder, viewTransform); - } - return q->items(viewTransform.inverted().map(pointRect), Qt::IntersectsItemShape, + return q->items(pointRect, Qt::IntersectsItemShape, Qt::DescendingOrder, viewTransform); } -- cgit v0.12 From 002c89aeb44c805d642be2d4e4a19422be877bc2 Mon Sep 17 00:00:00 2001 From: Martin Smith <martin.smith@nokia.com> Date: Wed, 25 Aug 2010 15:42:16 +0200 Subject: qdoc: Fixed erroneous links to QML basic types. Task-nr: QTBUG-13096 --- tools/qdoc3/htmlgenerator.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 698b516..bc71b6e 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -3177,7 +3177,14 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode, if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) { par1 = QStringRef(); const Node* n = marker->resolveTarget(arg.toString(), myTree, relative, self); - addLink(linkForNode(n,relative), arg, &html); + if (n && n->subType() == Node::QmlBasicType) { + if (relative && relative->subType() == Node::QmlClass) + addLink(linkForNode(n,relative), arg, &html); + else + html += arg.toString(); + } + else + addLink(linkForNode(n,relative), arg, &html); handled = true; } else if (parseArg(src, headerTag, &i, srcSize, &arg, &par1)) { @@ -3539,7 +3546,7 @@ QString HtmlGenerator::linkForNode(const Node *node, const Node *relative) return QString(); if (node->access() == Node::Private) return QString(); - + fn = fileName(node); /* if (!node->url().isEmpty()) return fn;*/ -- cgit v0.12 From 49e80b397feb8da5ee64f8dbc905c47723afbf5d Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 25 Aug 2010 23:19:52 +0200 Subject: Use the full path to qmake in the qmake unit test Reviewed-By: ossi --- tests/auto/qmake/tst_qmake.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/auto/qmake/tst_qmake.cpp b/tests/auto/qmake/tst_qmake.cpp index 277e9f8..1d3e128 100644 --- a/tests/auto/qmake/tst_qmake.cpp +++ b/tests/auto/qmake/tst_qmake.cpp @@ -99,7 +99,8 @@ private: tst_qmake::tst_qmake() { - QString cmd = QString("qmake \"QT_VERSION=%1\"").arg(QT_VERSION); + QString binpath = QLibraryInfo::location(QLibraryInfo::BinariesPath); + QString cmd = QString("%2/qmake \"QT_VERSION=%1\"").arg(QT_VERSION).arg(binpath); #ifdef Q_CC_MSVC test_compiler.setBaseCommands( "nmake", cmd ); #elif defined(Q_CC_MINGW) -- cgit v0.12 From b4fec275bb6a407c6e3cf56d19b9457b39c1a4c6 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 25 Aug 2010 23:21:12 +0200 Subject: tst_qmake doesn't need QtGui Reviewed-By: ossi --- tests/auto/qmake/qmake.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/qmake/qmake.pro b/tests/auto/qmake/qmake.pro index 8cae6be..d0faa87 100644 --- a/tests/auto/qmake/qmake.pro +++ b/tests/auto/qmake/qmake.pro @@ -1,6 +1,7 @@ load(qttest_p4) HEADERS += testcompiler.h SOURCES += tst_qmake.cpp testcompiler.cpp +QT -= gui cross_compile: DEFINES += QMAKE_CROSS_COMPILED -- cgit v0.12 From 4bc81bb1cb3cd4a0a3fe071e00556124e770d7ac Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 08:56:24 +1000 Subject: Handle QAbstractItemModel layoutChanged() signal Treated identically to reset. Task-number: QTBUG-13146 --- src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 65b14cf..c6b8514 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -714,6 +714,7 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model) QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)), this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int))); QObject::disconnect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset())); + QObject::disconnect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_modelReset())); d->m_abstractItemModel = 0; } else if (d->m_visualItemModel) { QObject::disconnect(d->m_visualItemModel, SIGNAL(itemsInserted(int,int)), @@ -761,6 +762,7 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model) QObject::connect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)), this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int))); QObject::connect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset())); + QObject::connect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_modelReset())); d->m_metaDataCacheable = true; return; } -- cgit v0.12 From 6f4d7ef066fef92eda4ae9c1ba5a380c9e2ed95b Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Thu, 26 Aug 2010 09:01:41 +1000 Subject: Remove unused code. --- src/declarative/util/qdeclarativelistmodel.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index 0162beb..7504c23 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -58,9 +58,6 @@ Q_DECLARE_METATYPE(QListModelInterface *) QT_BEGIN_NAMESPACE -#define DATA_ROLE_ID 1 -#define DATA_ROLE_NAME "data" - QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListModelData::instructions() const { return (QDeclarativeListModelParser::ListInstruction *)((char *)this + sizeof(ListModelData)); -- cgit v0.12 From 08df2a17f4f0ed9b5ce69ad91e3849260acda092 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 09:19:37 +1000 Subject: Add test for VisualItemModel layoutChanged() handling Task-number: QTBUG-13146 --- .../qdeclarativevisualdatamodel/data/datalist.qml | 15 ++++++++++ .../tst_qdeclarativevisualdatamodel.cpp | 35 ++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml new file mode 100644 index 0000000..a798f77 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml @@ -0,0 +1,15 @@ +import Qt 4.7 + +ListView { + width: 100 + height: 100 + anchors.fill: parent + model: myModel + delegate: Component { + Rectangle { + height: 25 + width: 100 + Text { objectName: "display"; text: display } + } + } +} diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp index e0f32ea..3cd786f 100644 --- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp @@ -83,6 +83,7 @@ public: private slots: void rootIndex(); + void updateLayout(); void objectListModel(); private: @@ -155,6 +156,40 @@ void tst_qdeclarativevisualdatamodel::rootIndex() delete obj; } +void tst_qdeclarativevisualdatamodel::updateLayout() +{ + QDeclarativeView view; + + QStandardItemModel model; + initStandardTreeModel(&model); + + view.rootContext()->setContextProperty("myModel", &model); + + view.setSource(QUrl::fromLocalFile(SRCDIR "/data/datalist.qml")); + + QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject()); + QVERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QVERIFY(contentItem != 0); + + QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "display", 0); + QCOMPARE(name->text(), QString("Row 1 Item")); + name = findItem<QDeclarativeText>(contentItem, "display", 1); + QCOMPARE(name->text(), QString("Row 2 Item")); + name = findItem<QDeclarativeText>(contentItem, "display", 2); + QCOMPARE(name->text(), QString("Row 3 Item")); + + model.invisibleRootItem()->sortChildren(0, Qt::DescendingOrder); + + name = findItem<QDeclarativeText>(contentItem, "display", 0); + QCOMPARE(name->text(), QString("Row 3 Item")); + name = findItem<QDeclarativeText>(contentItem, "display", 1); + QCOMPARE(name->text(), QString("Row 2 Item")); + name = findItem<QDeclarativeText>(contentItem, "display", 2); + QCOMPARE(name->text(), QString("Row 1 Item")); +} + void tst_qdeclarativevisualdatamodel::objectListModel() { QDeclarativeView view; -- cgit v0.12 From af6d440e241b9b9127b76a40c4c5ef051cf02401 Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Thu, 26 Aug 2010 10:36:06 +1000 Subject: Remove dead code. --- src/declarative/util/qdeclarativexmllistmodel.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 7b3d4a8..02bf370 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -466,8 +466,6 @@ public: QList<QDeclarativeXmlListModelRole *> roleObjects; static void append_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list, QDeclarativeXmlListModelRole *role); static void clear_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list); - static void removeAt_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list, int i); - static void insert_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list, int i, QDeclarativeXmlListModelRole *role); QList<QList<QVariant> > data; int redirectCount; }; -- cgit v0.12 From 8bedba8ecb9cde3de68defea3e2b062504224aa6 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 11:44:03 +1000 Subject: Fix ListView.view attached property with VisualItemModel We assumed that the attached object was created at the same time as the item. Task-number: QTBUG-13166 Reviewed-by: Aaron Kennedy --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 2 +- src/declarative/graphicsitems/qdeclarativegridview_p.h | 12 ++++++++++-- src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 +- src/declarative/graphicsitems/qdeclarativelistview_p.h | 12 ++++++++++-- .../auto/declarative/qdeclarativelistview/data/itemlist.qml | 6 +++--- .../qdeclarativelistview/tst_qdeclarativelistview.cpp | 1 + 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index d67e69a..37beab5 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -64,7 +64,7 @@ public: FxGridItem(QDeclarativeItem *i, QDeclarativeGridView *v) : item(i), view(v) { attached = static_cast<QDeclarativeGridViewAttached*>(qmlAttachedPropertiesObject<QDeclarativeGridView>(item)); if (attached) - attached->m_view = view; + attached->setView(view); } ~FxGridItem() {} diff --git a/src/declarative/graphicsitems/qdeclarativegridview_p.h b/src/declarative/graphicsitems/qdeclarativegridview_p.h index d6bbaf3..fdb6f94 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview_p.h +++ b/src/declarative/graphicsitems/qdeclarativegridview_p.h @@ -43,6 +43,7 @@ #define QDECLARATIVEGRIDVIEW_H #include "private/qdeclarativeflickable_p.h" +#include "private/qdeclarativeguard_p.h" QT_BEGIN_HEADER @@ -220,8 +221,14 @@ public: : QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {} ~QDeclarativeGridViewAttached() {} - Q_PROPERTY(QDeclarativeGridView *view READ view CONSTANT) + Q_PROPERTY(QDeclarativeGridView *view READ view WRITE setView NOTIFY viewChanged) QDeclarativeGridView *view() { return m_view; } + void setView(QDeclarativeGridView *view) { + if (view != m_view) { + m_view = view; + emit viewChanged(); + } + } Q_PROPERTY(bool isCurrentItem READ isCurrentItem NOTIFY currentItemChanged) bool isCurrentItem() const { return m_isCurrent; } @@ -249,9 +256,10 @@ Q_SIGNALS: void delayRemoveChanged(); void add(); void remove(); + void viewChanged(); public: - QDeclarativeGridView *m_view; + QDeclarativeGuard<QDeclarativeGridView> m_view; bool m_isCurrent : 1; bool m_delayRemove : 1; }; diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 2e2e08c..f80c73a 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -96,7 +96,7 @@ public: FxListItem(QDeclarativeItem *i, QDeclarativeListView *v) : item(i), section(0), view(v) { attached = static_cast<QDeclarativeListViewAttached*>(qmlAttachedPropertiesObject<QDeclarativeListView>(item)); if (attached) - attached->m_view = view; + attached->setView(view); } ~FxListItem() {} qreal position() const { diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h index b264861..14925d7 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview_p.h +++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h @@ -43,6 +43,7 @@ #define QDECLARATIVELISTVIEW_H #include "private/qdeclarativeflickable_p.h" +#include "private/qdeclarativeguard_p.h" QT_BEGIN_HEADER @@ -268,8 +269,14 @@ public: : QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {} ~QDeclarativeListViewAttached() {} - Q_PROPERTY(QDeclarativeListView *view READ view CONSTANT) + Q_PROPERTY(QDeclarativeListView *view READ view WRITE setView NOTIFY viewChanged) QDeclarativeListView *view() { return m_view; } + void setView(QDeclarativeListView *view) { + if (view != m_view) { + m_view = view; + emit viewChanged(); + } + } Q_PROPERTY(bool isCurrentItem READ isCurrentItem NOTIFY currentItemChanged) bool isCurrentItem() const { return m_isCurrent; } @@ -327,9 +334,10 @@ Q_SIGNALS: void delayRemoveChanged(); void add(); void remove(); + void viewChanged(); public: - QDeclarativeListView *m_view; + QDeclarativeGuard<QDeclarativeListView> m_view; mutable QString m_section; QString m_prevSection; QString m_nextSection; diff --git a/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml b/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml index 66728d6..9ea5953 100644 --- a/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml +++ b/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml @@ -13,17 +13,17 @@ Rectangle { objectName: "itemModel" Rectangle { objectName: "item1" - height: view.height; width: view.width; color: "#FFFEF0" + height: ListView.view.height; width: view.width; color: "#FFFEF0" Text { objectName: "text1"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } } Rectangle { objectName: "item2" - height: view.height; width: view.width; color: "#F0FFF7" + height: ListView.view.height; width: view.width; color: "#F0FFF7" Text { objectName: "text2"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } } Rectangle { objectName: "item3" - height: view.height; width: view.width; color: "#F4F0FF" + height: ListView.view.height; width: view.width; color: "#F4F0FF" Text { objectName: "text3"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } } } diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 9c24e03..491ac0f 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -1066,6 +1066,7 @@ void tst_QDeclarativeListView::itemList() QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "item1"); QTRY_VERIFY(item); QTRY_COMPARE(item->x(), 0.0); + QCOMPARE(item->height(), listview->height()); QDeclarativeText *text = findItem<QDeclarativeText>(contentItem, "text1"); QTRY_VERIFY(text); -- cgit v0.12 From d630c627ed1dfbcfb48f907d2d37048b049830a5 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 13:51:38 +1000 Subject: Avoid Flickable view jumping when drag threashold is exceeded. Task-number: QTBUG-13176 --- src/declarative/graphicsitems/qdeclarativeflickable.cpp | 10 ++++++++-- src/declarative/graphicsitems/qdeclarativeflickable_p_p.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index a6e8c85..a710190 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -653,6 +653,8 @@ void QDeclarativeFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEven timeline.clear(); hData.velocity = 0; vData.velocity = 0; + hData.dragStartOffset = 0; + vData.dragStartOffset = 0; lastPos = QPoint(); QDeclarativeItemPrivate::start(lastPosTime); pressPos = event->pos(); @@ -675,7 +677,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent if (q->yflick()) { int dy = int(event->pos().y() - pressPos.y()); if (qAbs(dy) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) { - qreal newY = dy + vData.pressPos; + if (!vMoved) + vData.dragStartOffset = dy; + qreal newY = dy + vData.pressPos - vData.dragStartOffset; const qreal minY = q->minYExtent(); const qreal maxY = q->maxYExtent(); if (newY > minY) @@ -705,7 +709,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent if (q->xflick()) { int dx = int(event->pos().x() - pressPos.x()); if (qAbs(dx) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) { - qreal newX = dx + hData.pressPos; + if (!hMoved) + hData.dragStartOffset = dx; + qreal newX = dx + hData.pressPos - hData.dragStartOffset; const qreal minX = q->minXExtent(); const qreal maxX = q->maxXExtent(); if (newX > minX) diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h index b919e1b..c398faa 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h @@ -96,6 +96,7 @@ public: QDeclarativeTimeLineValueProxy<QDeclarativeFlickablePrivate> move; qreal viewSize; qreal pressPos; + qreal dragStartOffset; qreal velocity; qreal flickTarget; QDeclarativeFlickablePrivate::Velocity smoothVelocity; -- cgit v0.12 From 58a76965e20c4c66ab2dc9cf73aa72b1cfddfbeb Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 14:11:58 +1000 Subject: ListView.view and GridView.view properties should not be writable. Task-number: QTBUG-13166 --- src/declarative/graphicsitems/qdeclarativegridview_p.h | 2 +- src/declarative/graphicsitems/qdeclarativelistview_p.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview_p.h b/src/declarative/graphicsitems/qdeclarativegridview_p.h index fdb6f94..ee632b1 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview_p.h +++ b/src/declarative/graphicsitems/qdeclarativegridview_p.h @@ -221,7 +221,7 @@ public: : QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {} ~QDeclarativeGridViewAttached() {} - Q_PROPERTY(QDeclarativeGridView *view READ view WRITE setView NOTIFY viewChanged) + Q_PROPERTY(QDeclarativeGridView *view READ view NOTIFY viewChanged) QDeclarativeGridView *view() { return m_view; } void setView(QDeclarativeGridView *view) { if (view != m_view) { diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h index 14925d7..8fbff49 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview_p.h +++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h @@ -269,7 +269,7 @@ public: : QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {} ~QDeclarativeListViewAttached() {} - Q_PROPERTY(QDeclarativeListView *view READ view WRITE setView NOTIFY viewChanged) + Q_PROPERTY(QDeclarativeListView *view READ view NOTIFY viewChanged) QDeclarativeListView *view() { return m_view; } void setView(QDeclarativeListView *view) { if (view != m_view) { -- cgit v0.12 From bce4c42a3d0c7d24009230e09aa58db60db39d40 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy <aaron.mccarthy@nokia.com> Date: Thu, 26 Aug 2010 13:41:12 +1000 Subject: Restore default if to system default on session close. If setdefaultif(0) or unsetdefaultif() is called all sockets belonging to the current process are closed by OpenC. Task-number: QTBUG-12686 --- .../bearer/symbian/qnetworksession_impl.cpp | 47 ++++++++++++++-------- src/plugins/bearer/symbian/qnetworksession_impl.h | 1 + 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index 1de4c0f..32eb61a 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -102,15 +102,14 @@ QNetworkSessionPrivateImpl::~QNetworkSessionPrivateImpl() // Cancel possible RConnection::Start() Cancel(); iSocketServ.Close(); - - // Close global 'Open C' RConnection - // Clears also possible unsetdefaultif() flags. - setdefaultif(0); - + + // Restore default interface to system default + restoreDefaultIf(); + iConnectionMonitor.Close(); iOpenCLibrary.Close(); #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG - qDebug() << "QNS this : " << QString::number((uint)this) << " - destroyed (and setdefaultif(0))"; + qDebug() << "QNS this : " << QString::number((uint)this) << " - destroyed (and restoreDefaultIf())"; #endif } @@ -523,16 +522,9 @@ void QNetworkSessionPrivateImpl::close(bool allowSignals) Cancel(); // closes iConnection iSocketServ.Close(); - - // Close global 'Open C' RConnection. If OpenC supports, - // close the defaultif for good to avoid difficult timing - // and bouncing issues of network going immediately back up - // because of e.g. select() thread etc. - if (iDynamicUnSetdefaultif) { - iDynamicUnSetdefaultif(); - } else { - setdefaultif(0); - } + + // Restore default interface to system default + restoreDefaultIf(); // If UserChoice, go down immediately. If some other configuration, // go down immediately if there is no reports expected from the platform; @@ -1457,6 +1449,29 @@ void QNetworkSessionPrivateImpl::handleSymbianConnectionStatusChange(TInt aConne } } +void QNetworkSessionPrivateImpl::restoreDefaultIf() +{ + QNetworkConfigurationPrivatePointer config = engine->defaultConfiguration(); + + QMutexLocker locker(&config->mutex); + + ifreq ifr; + memset(&ifr, 0, sizeof(ifreq)); + + switch (config->type) { + case QNetworkConfiguration::InternetAccessPoint: + strcpy(ifr.ifr_name, config->name.toUtf8().constData()); + break; + case QNetworkConfiguration::ServiceNetwork: + ifr.ifr_ifru.snap_id = toSymbianConfig(config)->numericId; + break; + default: + ; + }; + + setdefaultif(&ifr); +} + ConnectionProgressNotifier::ConnectionProgressNotifier(QNetworkSessionPrivateImpl& owner, RConnection& connection) : CActive(CActive::EPriorityUserInput), iOwner(owner), iConnection(connection) { diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.h b/src/plugins/bearer/symbian/qnetworksession_impl.h index aac9321..1b0e968 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.h +++ b/src/plugins/bearer/symbian/qnetworksession_impl.h @@ -143,6 +143,7 @@ private: void handleSymbianConnectionStatusChange(TInt aConnectionStatus, TInt aError, TUint accessPointId = 0); QNetworkConfiguration bestConfigFromSNAP(const QNetworkConfiguration& snapConfig) const; QNetworkConfiguration activeConfiguration(TUint32 iapId = 0) const; + void restoreDefaultIf(); #ifndef QT_NO_NETWORKINTERFACE QNetworkInterface interface(TUint iapId) const; #endif -- cgit v0.12 From 2af41f34eca0effced19b59d4c3327e3e4b627cb Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 26 Aug 2010 13:31:27 +1000 Subject: Add quit buttons to declarative demos Task-number: QTBUG-13048 Reviewed-by: Martin Jones --- demos/declarative/calculator/Core/calculator.js | 10 +++---- demos/declarative/calculator/calculator.qml | 16 +++++------ .../minehunt/MinehuntCore/pics/quit.png | Bin 0 -> 583 bytes demos/declarative/minehunt/main.cpp | 1 + demos/declarative/minehunt/minehunt.qml | 12 +++++++++ demos/declarative/photoviewer/photoviewer.qml | 5 ++++ demos/declarative/rssnews/rssnews.qml | 20 +++++++++++++- demos/declarative/snake/snake.qml | 6 +++++ demos/declarative/twitter/TwitterCore/TitleBar.qml | 12 ++++++++- .../twitter/TwitterCore/images/quit.png | Bin 0 -> 2369 bytes demos/declarative/webbrowser/content/Header.qml | 30 ++++++++++++++++++--- 11 files changed, 92 insertions(+), 20 deletions(-) create mode 100644 demos/declarative/minehunt/MinehuntCore/pics/quit.png create mode 100644 demos/declarative/twitter/TwitterCore/images/quit.png diff --git a/demos/declarative/calculator/Core/calculator.js b/demos/declarative/calculator/Core/calculator.js index 16cc309..7c363c7 100644 --- a/demos/declarative/calculator/Core/calculator.js +++ b/demos/declarative/calculator/Core/calculator.js @@ -74,6 +74,11 @@ function doOperation(op) { memory = display.text.valueOf() } else if (op == leftArrow) { display.text = display.text.toString().slice(0, -1) + if (display.text.length == 0) { + display.text = "0" + } + } else if (op == "Off") { + Qt.quit(); } else if (op == "C") { display.text = "0" } else if (op == "AC") { @@ -82,10 +87,5 @@ function doOperation(op) { lastOp = "" display.text ="0" } - - if (op == rotateRight) - main.state = "orientation " + Orientation.Landscape - if (op == rotateLeft) - main.state = '' } diff --git a/demos/declarative/calculator/calculator.qml b/demos/declarative/calculator/calculator.qml index 288455b..68c922b 100644 --- a/demos/declarative/calculator/calculator.qml +++ b/demos/declarative/calculator/calculator.qml @@ -58,7 +58,7 @@ Rectangle { property string plusminus : "\u00b1" function doOp(operation) { CalcEngine.doOperation(operation) } - + Item { id: main state: "orientation " + runtime.orientation @@ -70,8 +70,10 @@ Rectangle { anchors { fill: parent; topMargin: 6; bottomMargin: 6; leftMargin: 6; rightMargin: 6 } - Row { - Display { id: display; width: box.width; height: 64 } + Display { + id: display + width: box.width-3 + height: 64 } Column { @@ -82,11 +84,7 @@ Rectangle { Row { spacing: 6 - - Button { - id: rotateButton - width: column.w; height: column.h; color: 'purple'; operation: rotateRight - } + Button { width: column.w; height: column.h; color: 'purple'; operation: "Off" } Button { width: column.w; height: column.h; color: 'purple'; operation: leftArrow } Button { width: column.w; height: column.h; color: 'purple'; operation: "C" } Button { width: column.w; height: column.h; color: 'purple'; operation: "AC" } @@ -103,7 +101,7 @@ Rectangle { } Grid { - id: grid; rows: 4; columns: 5; spacing: 6 + id: grid; rows: 5; columns: 5; spacing: 6 property real w: (box.width / columns) - ((spacing * (columns - 1)) / columns) diff --git a/demos/declarative/minehunt/MinehuntCore/pics/quit.png b/demos/declarative/minehunt/MinehuntCore/pics/quit.png new file mode 100644 index 0000000..b822057 Binary files /dev/null and b/demos/declarative/minehunt/MinehuntCore/pics/quit.png differ diff --git a/demos/declarative/minehunt/main.cpp b/demos/declarative/minehunt/main.cpp index fc223dd..8bbaee9 100644 --- a/demos/declarative/minehunt/main.cpp +++ b/demos/declarative/minehunt/main.cpp @@ -59,6 +59,7 @@ int main(int argc, char *argv[]) #endif canvas.engine()->rootContext()->setContextObject(game); canvas.setSource(QString("minehunt.qml")); + QObject::connect(canvas.engine(), SIGNAL(quit()), &app, SLOT(quit())); #ifdef Q_OS_SYMBIAN canvas.showFullScreen(); diff --git a/demos/declarative/minehunt/minehunt.qml b/demos/declarative/minehunt/minehunt.qml index 136f56a..a7daa90 100644 --- a/demos/declarative/minehunt/minehunt.qml +++ b/demos/declarative/minehunt/minehunt.qml @@ -67,6 +67,18 @@ Item { x: 20; spacing: 20 anchors.bottom: field.bottom; anchors.bottomMargin: 15 + Image { + source: "MinehuntCore/pics/quit.png" + scale: quitMouse.pressed ? 0.8 : 1.0 + smooth: quitMouse.pressed + y: 10 + MouseArea { + id: quitMouse + anchors.fill: parent + anchors.margins: -20 + onClicked: Qt.quit() + } + } Column { spacing: 2 Image { source: "MinehuntCore/pics/bomb-color.png" } diff --git a/demos/declarative/photoviewer/photoviewer.qml b/demos/declarative/photoviewer/photoviewer.qml index 4ed3105..3072ea2 100644 --- a/demos/declarative/photoviewer/photoviewer.qml +++ b/demos/declarative/photoviewer/photoviewer.qml @@ -81,6 +81,11 @@ Rectangle { onClicked: mainWindow.editMode = !mainWindow.editMode anchors.horizontalCenter: parent.horizontalCenter } + Button { + id: quitButton; label: qsTr("Quit"); rotation: -2; + onClicked: Qt.quit() + anchors.horizontalCenter: parent.horizontalCenter + } } Rectangle { diff --git a/demos/declarative/rssnews/rssnews.qml b/demos/declarative/rssnews/rssnews.qml index def3e2c..fb5b5a3 100644 --- a/demos/declarative/rssnews/rssnews.qml +++ b/demos/declarative/rssnews/rssnews.qml @@ -71,6 +71,7 @@ Rectangle { id: categories anchors.fill: parent model: rssFeeds + footer: quitButtonDelegate delegate: CategoryDelegate {} highlight: Rectangle { color: "steelblue" } highlightMoveSpeed: 9999999 @@ -87,7 +88,24 @@ Rectangle { delegate: NewsDelegate {} } } - + Component { + id: quitButtonDelegate + Item { + width: categories.width; height: 60 + Text { + text: "Quit" + font { family: "Helvetica"; pixelSize: 16; bold: true } + anchors { + left: parent.left; leftMargin: 15 + verticalCenter: parent.verticalCenter + } + } + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } + } ScrollBar { scrollArea: list; height: list.height; width: 8; anchors.right: window.right } Rectangle { x: 220; height: window.height; width: 1; color: "#cccccc" } } diff --git a/demos/declarative/snake/snake.qml b/demos/declarative/snake/snake.qml index ed3bac9..12ad71c 100644 --- a/demos/declarative/snake/snake.qml +++ b/demos/declarative/snake/snake.qml @@ -194,6 +194,12 @@ Rectangle { anchors.verticalCenter: parent.verticalCenter } + Content.Button { + text: "Quit" + anchors { left: btnA.right; leftMargin: 3; verticalCenter: parent.verticalCenter } + onClicked: Qt.quit(); + } + Text { color: activePalette.text text: "Score: " + score; font.bold: true diff --git a/demos/declarative/twitter/TwitterCore/TitleBar.qml b/demos/declarative/twitter/TwitterCore/TitleBar.qml index 558bc18..479aa20 100644 --- a/demos/declarative/twitter/TwitterCore/TitleBar.qml +++ b/demos/declarative/twitter/TwitterCore/TitleBar.qml @@ -58,10 +58,20 @@ Item { rssModel.tags = editor.text } + Image { + id: quitButton + x: 5 + anchors.verticalCenter: parent.verticalCenter + source: "images/quit.png" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } Text { id: categoryText anchors { - left: parent.left; right: tagButton.left; leftMargin: 10; rightMargin: 10 + left: quitButton.right; right: tagButton.left; leftMargin: 5; rightMargin: 10 verticalCenter: parent.verticalCenter } elide: Text.ElideLeft diff --git a/demos/declarative/twitter/TwitterCore/images/quit.png b/demos/declarative/twitter/TwitterCore/images/quit.png new file mode 100644 index 0000000..5bda1b6 Binary files /dev/null and b/demos/declarative/twitter/TwitterCore/images/quit.png differ diff --git a/demos/declarative/webbrowser/content/Header.qml b/demos/declarative/webbrowser/content/Header.qml index 5abf440..d3ccae3 100644 --- a/demos/declarative/webbrowser/content/Header.qml +++ b/demos/declarative/webbrowser/content/Header.qml @@ -51,7 +51,6 @@ Image { x: webView.contentX < 0 ? -webView.contentX : webView.contentX > webView.contentWidth-webView.width ? -webView.contentX+webView.contentWidth-webView.width : 0 - y: { if (webView.progress < 1.0) return 0; @@ -59,7 +58,6 @@ Image { webView.contentY < 0 ? -webView.contentY : webView.contentY > height ? -height : -webView.contentY } } - Column { width: parent.width @@ -101,14 +99,38 @@ Image { Button { id: reloadButton - anchors { right: parent.right; rightMargin: 4 } + anchors { right: quitButton.left; rightMargin: 10 } action: webView.reload; image: "pics/view-refresh.png" visible: webView.progress == 1.0 && !header.urlChanged } + Text { + id: quitButton + color: "white" + style: Text.Sunken + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + font.pixelSize: 18 + width: 60 + text: "Quit" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + Rectangle { + width: 1 + y: 5 + height: parent.height-10 + anchors.right: parent.left + color: "darkgray" + } + } Button { id: stopButton - anchors { right: parent.right; rightMargin: 4 } + anchors { right: quitButton.left; rightMargin: 10 } action: webView.stop; image: "pics/edit-delete.png" visible: webView.progress < 1.0 && !header.urlChanged } -- cgit v0.12 From f936a199e44a8d443240368f748f7be87cffc186 Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Thu, 26 Aug 2010 15:43:53 +1000 Subject: Make declarative examples a bit more qt-like. --- .../minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg | Bin 30730 -> 0 bytes .../minehunt/MinehuntCore/pics/background.png | Bin 0 -> 313930 bytes demos/declarative/minehunt/minehunt.qml | 2 +- .../webbrowser/content/pics/edit-delete.png | Bin 1333 -> 831 bytes .../webbrowser/content/pics/go-jump-locationbar.png | Bin 714 -> 408 bytes .../webbrowser/content/pics/go-next-view.png | Bin 1187 -> 1310 bytes .../webbrowser/content/pics/go-previous-view.png | Bin 1226 -> 1080 bytes examples/declarative/animation/states/qt-logo.png | Bin 0 -> 5149 bytes examples/declarative/animation/states/states.qml | 8 ++++---- examples/declarative/animation/states/transitions.qml | 8 ++++---- examples/declarative/animation/states/user.png | Bin 4886 -> 0 bytes .../declarative/imageelements/image/ImageCell.qml | 2 +- .../declarative/imageelements/image/face-smile.png | Bin 15408 -> 0 bytes examples/declarative/imageelements/image/qt-logo.png | Bin 0 -> 5149 bytes .../modelviews/listview/content/pics/arrow-down.png | Bin 892 -> 0 bytes .../modelviews/listview/content/pics/arrow-up.png | Bin 929 -> 0 bytes .../modelviews/listview/content/pics/list-delete.png | Bin 1074 -> 0 bytes examples/declarative/positioners/add.png | Bin 1577 -> 810 bytes examples/declarative/positioners/del.png | Bin 1661 -> 488 bytes 19 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg create mode 100644 demos/declarative/minehunt/MinehuntCore/pics/background.png create mode 100644 examples/declarative/animation/states/qt-logo.png delete mode 100644 examples/declarative/animation/states/user.png delete mode 100644 examples/declarative/imageelements/image/face-smile.png create mode 100644 examples/declarative/imageelements/image/qt-logo.png delete mode 100644 examples/declarative/modelviews/listview/content/pics/arrow-down.png delete mode 100644 examples/declarative/modelviews/listview/content/pics/arrow-up.png delete mode 100644 examples/declarative/modelviews/listview/content/pics/list-delete.png diff --git a/demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg b/demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg deleted file mode 100644 index 445567f..0000000 Binary files a/demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg and /dev/null differ diff --git a/demos/declarative/minehunt/MinehuntCore/pics/background.png b/demos/declarative/minehunt/MinehuntCore/pics/background.png new file mode 100644 index 0000000..3734a27 Binary files /dev/null and b/demos/declarative/minehunt/MinehuntCore/pics/background.png differ diff --git a/demos/declarative/minehunt/minehunt.qml b/demos/declarative/minehunt/minehunt.qml index 136f56a..bc1bf4b 100644 --- a/demos/declarative/minehunt/minehunt.qml +++ b/demos/declarative/minehunt/minehunt.qml @@ -49,7 +49,7 @@ Item { width: 450; height: 450 - Image { source: "MinehuntCore/pics/No-Ones-Laughing-3.jpg"; anchors.fill: parent; fillMode: Image.Tile } + Image { source: "MinehuntCore/pics/background.png"; anchors.fill: parent; fillMode: Image.Tile } Grid { anchors.horizontalCenter: parent.horizontalCenter diff --git a/demos/declarative/webbrowser/content/pics/edit-delete.png b/demos/declarative/webbrowser/content/pics/edit-delete.png index 351659b..df2a147 100644 Binary files a/demos/declarative/webbrowser/content/pics/edit-delete.png and b/demos/declarative/webbrowser/content/pics/edit-delete.png differ diff --git a/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png b/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png index 636fe38..61f779c 100644 Binary files a/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png and b/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png differ diff --git a/demos/declarative/webbrowser/content/pics/go-next-view.png b/demos/declarative/webbrowser/content/pics/go-next-view.png index 3bce02d..a585cab 100644 Binary files a/demos/declarative/webbrowser/content/pics/go-next-view.png and b/demos/declarative/webbrowser/content/pics/go-next-view.png differ diff --git a/demos/declarative/webbrowser/content/pics/go-previous-view.png b/demos/declarative/webbrowser/content/pics/go-previous-view.png index 3ec011e..612fb34 100644 Binary files a/demos/declarative/webbrowser/content/pics/go-previous-view.png and b/demos/declarative/webbrowser/content/pics/go-previous-view.png differ diff --git a/examples/declarative/animation/states/qt-logo.png b/examples/declarative/animation/states/qt-logo.png new file mode 100644 index 0000000..14ddf2a Binary files /dev/null and b/examples/declarative/animation/states/qt-logo.png differ diff --git a/examples/declarative/animation/states/states.qml b/examples/declarative/animation/states/states.qml index 77101d0..34cdae3 100644 --- a/examples/declarative/animation/states/states.qml +++ b/examples/declarative/animation/states/states.qml @@ -48,14 +48,14 @@ Rectangle { Image { id: userIcon x: topLeftRect.x; y: topLeftRect.y - source: "user.png" + source: "qt-logo.png" } Rectangle { id: topLeftRect anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 } - width: 64; height: 64 + width: 46; height: 54 color: "Transparent"; border.color: "Gray"; radius: 6 // Clicking in here sets the state to the default state, returning the image to @@ -67,7 +67,7 @@ Rectangle { id: middleRightRect anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 } - width: 64; height: 64 + width: 46; height: 54 color: "Transparent"; border.color: "Gray"; radius: 6 // Clicking in here sets the state to 'middleRight' @@ -78,7 +78,7 @@ Rectangle { id: bottomLeftRect anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 } - width: 64; height: 64 + width: 46; height: 54 color: "Transparent"; border.color: "Gray"; radius: 6 // Clicking in here sets the state to 'bottomLeft' diff --git a/examples/declarative/animation/states/transitions.qml b/examples/declarative/animation/states/transitions.qml index 1df60ae..884779c 100644 --- a/examples/declarative/animation/states/transitions.qml +++ b/examples/declarative/animation/states/transitions.qml @@ -54,14 +54,14 @@ Rectangle { Image { id: userIcon x: topLeftRect.x; y: topLeftRect.y - source: "user.png" + source: "qt-logo.png" } Rectangle { id: topLeftRect anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 } - width: 64; height: 64 + width: 46; height: 54 color: "Transparent"; border.color: "Gray"; radius: 6 // Clicking in here sets the state to the default state, returning the image to @@ -73,7 +73,7 @@ Rectangle { id: middleRightRect anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 } - width: 64; height: 64 + width: 46; height: 54 color: "Transparent"; border.color: "Gray"; radius: 6 // Clicking in here sets the state to 'middleRight' @@ -84,7 +84,7 @@ Rectangle { id: bottomLeftRect anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 } - width: 64; height: 64 + width: 46; height: 54 color: "Transparent"; border.color: "Gray"; radius: 6 // Clicking in here sets the state to 'bottomLeft' diff --git a/examples/declarative/animation/states/user.png b/examples/declarative/animation/states/user.png deleted file mode 100644 index dd7d7a2..0000000 Binary files a/examples/declarative/animation/states/user.png and /dev/null differ diff --git a/examples/declarative/imageelements/image/ImageCell.qml b/examples/declarative/imageelements/image/ImageCell.qml index bd232b9..71a17fe 100644 --- a/examples/declarative/imageelements/image/ImageCell.qml +++ b/examples/declarative/imageelements/image/ImageCell.qml @@ -48,7 +48,7 @@ Item { Image { id: image width: parent.width; height: parent.height - captionItem.height - source: "face-smile.png" + source: "qt-logo.png" clip: true // only makes a difference if mode is PreserveAspectCrop smooth: true } diff --git a/examples/declarative/imageelements/image/face-smile.png b/examples/declarative/imageelements/image/face-smile.png deleted file mode 100644 index 3d66d72..0000000 Binary files a/examples/declarative/imageelements/image/face-smile.png and /dev/null differ diff --git a/examples/declarative/imageelements/image/qt-logo.png b/examples/declarative/imageelements/image/qt-logo.png new file mode 100644 index 0000000..14ddf2a Binary files /dev/null and b/examples/declarative/imageelements/image/qt-logo.png differ diff --git a/examples/declarative/modelviews/listview/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/content/pics/arrow-down.png deleted file mode 100644 index 63331a5..0000000 Binary files a/examples/declarative/modelviews/listview/content/pics/arrow-down.png and /dev/null differ diff --git a/examples/declarative/modelviews/listview/content/pics/arrow-up.png b/examples/declarative/modelviews/listview/content/pics/arrow-up.png deleted file mode 100644 index 4459024..0000000 Binary files a/examples/declarative/modelviews/listview/content/pics/arrow-up.png and /dev/null differ diff --git a/examples/declarative/modelviews/listview/content/pics/list-delete.png b/examples/declarative/modelviews/listview/content/pics/list-delete.png deleted file mode 100644 index 9640f6b..0000000 Binary files a/examples/declarative/modelviews/listview/content/pics/list-delete.png and /dev/null differ diff --git a/examples/declarative/positioners/add.png b/examples/declarative/positioners/add.png index f29d84b..1ee4542 100644 Binary files a/examples/declarative/positioners/add.png and b/examples/declarative/positioners/add.png differ diff --git a/examples/declarative/positioners/del.png b/examples/declarative/positioners/del.png index 1d753a3..8d2eaed 100644 Binary files a/examples/declarative/positioners/del.png and b/examples/declarative/positioners/del.png differ -- cgit v0.12 From dac9c7f42765a46d445aae35fd0e85b402ceb164 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 16:00:37 +1000 Subject: Fix off-by-one at end when views scroll to keep currentItem visible. endPosition() is the last pixel of the item, i.e. width-1, so must add one to ensure the entire item is visible. Task-number: QTBUG-12822 --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 12 ++++++------ src/declarative/graphicsitems/qdeclarativelistview.cpp | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 37beab5..a0faf14 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -2212,7 +2212,7 @@ void QDeclarativeGridView::trackedPositionChanged() if (trackedPos < d->startPosition() + d->highlightRangeStart) { pos = d->startPosition(); } else if (d->trackedItem->endRowPos() > d->endPosition() - d->size() + d->highlightRangeEnd) { - pos = d->endPosition() - d->size(); + pos = d->endPosition() - d->size() + 1; if (pos < d->startPosition()) pos = d->startPosition(); } else { @@ -2226,14 +2226,14 @@ void QDeclarativeGridView::trackedPositionChanged() } else { if (trackedPos < viewPos && d->currentItem->rowPos() < viewPos) { pos = d->currentItem->rowPos() < trackedPos ? trackedPos : d->currentItem->rowPos(); - } else if (d->trackedItem->endRowPos() > viewPos + d->size() - && d->currentItem->endRowPos() > viewPos + d->size()) { - if (d->trackedItem->endRowPos() < d->currentItem->endRowPos()) { - pos = d->trackedItem->endRowPos() - d->size(); + } else if (d->trackedItem->endRowPos() >= viewPos + d->size() + && d->currentItem->endRowPos() >= viewPos + d->size()) { + if (d->trackedItem->endRowPos() <= d->currentItem->endRowPos()) { + pos = d->trackedItem->endRowPos() - d->size() + 1; if (d->rowSize() > d->size()) pos = trackedPos; } else { - pos = d->currentItem->endRowPos() - d->size(); + pos = d->currentItem->endRowPos() - d->size() + 1; if (d->rowSize() > d->size()) pos = d->currentItem->rowPos(); } diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index f80c73a..d3d46f7 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -2652,7 +2652,7 @@ void QDeclarativeListView::trackedPositionChanged() if (trackedPos < d->startPosition() + d->highlightRangeStart) { pos = d->startPosition(); } else if (d->trackedItem->endPosition() > d->endPosition() - d->size() + d->highlightRangeEnd) { - pos = d->endPosition() - d->size(); + pos = d->endPosition() - d->size() + 1; if (pos < d->startPosition()) pos = d->startPosition(); } else { @@ -2666,14 +2666,14 @@ void QDeclarativeListView::trackedPositionChanged() } else { if (trackedPos < viewPos && d->currentItem->position() < viewPos) { pos = d->currentItem->position() < trackedPos ? trackedPos : d->currentItem->position(); - } else if (d->trackedItem->endPosition() > viewPos + d->size() - && d->currentItem->endPosition() > viewPos + d->size()) { - if (d->trackedItem->endPosition() < d->currentItem->endPosition()) { - pos = d->trackedItem->endPosition() - d->size(); - if (d->trackedItem->size() > d->size()) + } else if (d->trackedItem->endPosition() >= viewPos + d->size() + && d->currentItem->endPosition() >= viewPos + d->size()) { + if (d->trackedItem->endPosition() <= d->currentItem->endPosition()) { + pos = d->trackedItem->endPosition() - d->size() + 1; + if (d->trackedItem->size() > d->size()) pos = trackedPos; } else { - pos = d->currentItem->endPosition() - d->size(); + pos = d->currentItem->endPosition() - d->size() + 1; if (d->currentItem->size() > d->size()) pos = d->currentItem->position(); } -- cgit v0.12 From 55991e39819007b5c6d0662808d522cf32c383a4 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 16:41:46 +1000 Subject: Revert 4bc81bb1cb3cd4a0a3fe071e00556124e770d7ac QAbstractItemModel calls that for all sorts of reasons. Task-number: QTBUG-13146 --- src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index c6b8514..65b14cf 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -714,7 +714,6 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model) QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)), this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int))); QObject::disconnect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset())); - QObject::disconnect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_modelReset())); d->m_abstractItemModel = 0; } else if (d->m_visualItemModel) { QObject::disconnect(d->m_visualItemModel, SIGNAL(itemsInserted(int,int)), @@ -762,7 +761,6 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model) QObject::connect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)), this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int))); QObject::connect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset())); - QObject::connect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_modelReset())); d->m_metaDataCacheable = true; return; } -- cgit v0.12 From 48d057b8f4ae70d9ea43d4a234ff63956a70c3b6 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 16:47:22 +1000 Subject: Fix ListView and GridView tests following off-by-one fixes. Our tests were verifying incorrect positions... Task-number: QTBUG-12822 --- .../declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp | 4 ++-- .../declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 1a28b71..896d69e 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -590,7 +590,7 @@ void tst_QDeclarativeGridView::currentIndex() QCOMPARE(gridview->currentIndex(), 35); QCOMPARE(gridview->currentItem(), findItem<QDeclarativeItem>(contentItem, "wrapper", 35)); QCOMPARE(gridview->currentItem()->y(), gridview->highlightItem()->y()); - QCOMPARE(gridview->contentY(), 399.0); + QCOMPARE(gridview->contentY(), 400.0); gridview->moveCurrentIndexRight(); QCOMPARE(gridview->currentIndex(), 36); @@ -629,7 +629,7 @@ void tst_QDeclarativeGridView::currentIndex() gridview->moveCurrentIndexLeft(); QCOMPARE(gridview->currentIndex(), model.count()-1); - QTRY_COMPARE(gridview->contentY(), 879.0); + QTRY_COMPARE(gridview->contentY(), 880.0); gridview->moveCurrentIndexRight(); QCOMPARE(gridview->currentIndex(), 0); diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 491ac0f..e7c61db 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -979,7 +979,7 @@ void tst_QDeclarativeListView::currentIndex() // current item should be 20th item at startup // and current item should be in view QCOMPARE(listview->currentIndex(), 20); - QCOMPARE(listview->contentY(), 99.0); + QCOMPARE(listview->contentY(), 100.0); QCOMPARE(listview->currentItem(), findItem<QDeclarativeItem>(contentItem, "wrapper", 20)); QCOMPARE(listview->highlightItem()->y(), listview->currentItem()->y()); -- cgit v0.12 From ff10e44642d65b2dde50579c4994aa9def43f4c0 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 26 Aug 2010 17:18:21 +1000 Subject: Handle layoutChanged() properly in QML views. Update all visible items when layoutChanged() is emitted. Task-number: QTBUG-13146 --- src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp | 8 ++++++++ src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h | 1 + .../declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 65b14cf..b4e8bda 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -714,6 +714,7 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model) QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)), this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int))); QObject::disconnect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset())); + QObject::disconnect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged())); d->m_abstractItemModel = 0; } else if (d->m_visualItemModel) { QObject::disconnect(d->m_visualItemModel, SIGNAL(itemsInserted(int,int)), @@ -761,6 +762,7 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model) QObject::connect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)), this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int))); QObject::connect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset())); + QObject::connect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged())); d->m_metaDataCacheable = true; return; } @@ -1332,6 +1334,12 @@ void QDeclarativeVisualDataModel::_q_dataChanged(const QModelIndex &begin, const _q_itemsChanged(begin.row(), end.row() - begin.row() + 1, d->m_roles); } +void QDeclarativeVisualDataModel::_q_layoutChanged() +{ + Q_D(QDeclarativeVisualDataModel); + _q_itemsChanged(0, count(), d->m_roles); +} + void QDeclarativeVisualDataModel::_q_modelReset() { emit modelReset(); diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h index 50d2c53..e159786 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h @@ -194,6 +194,7 @@ private Q_SLOTS: void _q_rowsRemoved(const QModelIndex &,int,int); void _q_rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int); void _q_dataChanged(const QModelIndex&,const QModelIndex&); + void _q_layoutChanged(); void _q_modelReset(); void _q_createdPackage(int index, QDeclarativePackage *package); void _q_destroyingPackage(QDeclarativePackage *package); diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index e7c61db..bf4754d 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -1002,7 +1002,7 @@ void tst_QDeclarativeListView::currentIndex() listview->decrementCurrentIndex(); QCOMPARE(listview->currentIndex(), model.count()-1); - QTRY_COMPARE(listview->contentY(), 279.0); + QTRY_COMPARE(listview->contentY(), 280.0); listview->incrementCurrentIndex(); QCOMPARE(listview->currentIndex(), 0); -- cgit v0.12 From 39b7982de7bb8f80dd915591b8a391e18476e456 Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Wed, 25 Aug 2010 18:51:55 +0200 Subject: Revert "Refactor blend_transformed_bilinear to simplify the blend type checking" This reverts commit d2089600ea247b5d6354e8eee4becf40802c4693. Reverting in order to avoid conflict in the master branch. We are going to consider backporting the changes to Qt 4.7.1 Reviewed-by: Benjamin Poulain --- src/gui/painting/qdrawhelper.cpp | 133 +++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 67 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 59bef66..be4275c 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -5159,61 +5159,6 @@ static void blend_tiled_rgb444(int count, const QSpan *spans, void *userData) blend_tiled_generic<RegularSpans>(count, spans, userData); } -template<int> -Q_STATIC_INLINE_FUNCTION void blend_transformed_bilinear_argb_clamp_coordinates (int &x1, int &x2, int &y1, int &y2, - const int image_width, const int image_height, - const int image_x1, const int image_x2, - const int image_y1, const int image_y2); - -template<> -Q_STATIC_INLINE_FUNCTION void blend_transformed_bilinear_argb_clamp_coordinates <BlendTransformedBilinearTiled> (int &x1, int &x2, int &y1, int &y2, - const int image_width, const int image_height, - const int image_x1, const int image_x2, - const int image_y1, const int image_y2) -{ - Q_UNUSED(image_x1) - Q_UNUSED(image_x2) - Q_UNUSED(image_y1) - Q_UNUSED(image_y2) - x1 %= image_width; - if (x1 < 0) x1 += image_width; - x2 = x1 + 1; - x2 %= image_width; - - y1 %= image_height; - if (y1 < 0) y1 += image_height; - y2 = y1 + 1; - y2 %= image_height; - - Q_ASSERT(x1 >= 0 && x1 < image_width); - Q_ASSERT(x2 >= 0 && x2 < image_width); - Q_ASSERT(y1 >= 0 && y1 < image_height); - Q_ASSERT(y2 >= 0 && y2 < image_height); -} - -template <> -Q_STATIC_INLINE_FUNCTION void blend_transformed_bilinear_argb_clamp_coordinates<BlendTransformedBilinear>(int &x1, int &x2, int &y1, int &y2, - const int image_width, const int image_height, - const int image_x1, const int image_x2, - const int image_y1, const int image_y2) -{ - Q_UNUSED(image_width) - Q_UNUSED(image_height) - if (x1 < image_x1) { - x2 = x1 = image_x1; - } else if (x1 >= image_x2) { - x2 = x1 = image_x2; - } else { - x2 = x1 + 1; - } - if (y1 < image_y1) { - y2 = y1 = image_y1; - } else if (y1 >= image_y2) { - y2 = y1 = image_y2; - } else { - y2 = y1 + 1; - } -} template <SpanMethod spanMethod, TextureBlendType blendType> /* blendType must be either BlendTransformedBilinear or BlendTransformedBilinearTiled */ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const QSpan *spans, void *userData) @@ -5230,8 +5175,8 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const const int image_x1 = data->texture.x1; const int image_y1 = data->texture.y1; - const int image_x2 = data->texture.x2 - 1; - const int image_y2 = data->texture.y2 - 1; + const int image_x2 = data->texture.x2; + const int image_y2 = data->texture.y2; const int image_width = data->texture.width; const int image_height = data->texture.height; const int scanline_offset = data->texture.bytesPerLine / 4; @@ -5261,16 +5206,43 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int l = qMin(length, buffer_size); const uint *end = buffer + l; uint *b = buffer; - while (b != end) { + while (b < end) { int x1 = (x >> 16); int x2; int y1 = (y >> 16); int y2; - blend_transformed_bilinear_argb_clamp_coordinates<blendType>(x1, x2, y1, y2, - image_width, image_height, - image_x1, image_x2, - image_y1, image_y2); + if (blendType == BlendTransformedBilinearTiled) { + x1 %= image_width; + if (x1 < 0) x1 += image_width; + x2 = x1 + 1; + x2 %= image_width; + + y1 %= image_height; + if (y1 < 0) y1 += image_height; + y2 = y1 + 1; + y2 %= image_height; + + Q_ASSERT(x1 >= 0 && x1 < image_width); + Q_ASSERT(x2 >= 0 && x2 < image_width); + Q_ASSERT(y1 >= 0 && y1 < image_height); + Q_ASSERT(y2 >= 0 && y2 < image_height); + } else { + if (x1 < image_x1) { + x2 = x1 = image_x1; + } else if (x1 >= image_x2 - 1) { + x2 = x1 = image_x2 - 1; + } else { + x2 = x1 + 1; + } + if (y1 < image_y1) { + y2 = y1 = image_y1; + } else if (y1 >= image_y2 - 1) { + y2 = y1 = image_y2 - 1; + } else { + y2 = y1 + 1; + } + } int y1_offset = y1 * scanline_offset; int y2_offset = y2 * scanline_offset; @@ -5335,7 +5307,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int l = qMin(length, buffer_size); const uint *end = buffer + l; uint *b = buffer; - while (b != end) { + while (b < end) { const qreal iw = w == 0 ? 1 : 1 / w; const qreal px = x * iw - 0.5; const qreal py = y * iw - 0.5; @@ -5350,10 +5322,37 @@ Q_STATIC_TEMPLATE_FUNCTION void blend_transformed_bilinear_argb(int count, const int idistx = 256 - distx; int idisty = 256 - disty; - blend_transformed_bilinear_argb_clamp_coordinates<blendType>(x1, x2, y1, y2, - image_width, image_height, - image_x1, image_x2, - image_y1, image_y2); + if (blendType == BlendTransformedBilinearTiled) { + x1 %= image_width; + if (x1 < 0) x1 += image_width; + x2 = x1 + 1; + x2 %= image_width; + + y1 %= image_height; + if (y1 < 0) y1 += image_height; + y2 = y1 + 1; + y2 %= image_height; + + Q_ASSERT(x1 >= 0 && x1 < image_width); + Q_ASSERT(x2 >= 0 && x2 < image_width); + Q_ASSERT(y1 >= 0 && y1 < image_height); + Q_ASSERT(y2 >= 0 && y2 < image_height); + } else { + if (x1 < image_x1) { + x2 = x1 = image_x1; + } else if (x1 >= image_x2 - 1) { + x2 = x1 = image_x2 - 1; + } else { + x2 = x1 + 1; + } + if (y1 < image_y1) { + y2 = y1 = image_y1; + } else if (y1 >= image_y2 - 1) { + y2 = y1 = image_y2 - 1; + } else { + y2 = y1 + 1; + } + } int y1_offset = y1 * scanline_offset; int y2_offset = y2 * scanline_offset; -- cgit v0.12 From a373648fa876a9684394aa9b7ecafd51e53f4742 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen <richard.gustavsen@nokia.com> Date: Thu, 26 Aug 2010 11:10:02 +0200 Subject: Cocoa: Demo browser can get stuck after closing modal dialog This turns out to be a glitch in the event dispatcher for Qt/Cocoa. The problem is that you can, in some really slim cases it must be, end up calling processEvents with the exec flag set, while the current modal dialog has been told to leave modal. In that case, we recurse into a new event dispatching loop for a session that is about to die. And that causes problems when the session actually dies. This patch makes sure that you cannon start spinning a session that is about to die, by setting the sessionCache to zero. Task-number: QTBUG-13164 Reviewed-by: Tor Arne --- src/gui/kernel/qeventdispatcher_mac.mm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index 89f01d8..515c6d3 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -830,6 +830,7 @@ NSModalSession QEventDispatcherMacPrivate::currentModalSession() [window setLevel:levelBeforeEnterModal]; } currentModalSessionCached = info.session; + cleanupModalSessionsNeeded = false; } return currentModalSessionCached; } @@ -881,6 +882,10 @@ void QEventDispatcherMacPrivate::cleanupModalSessions() for (int i=stackSize-1; i>=0; --i) { QCocoaModalSessionInfo &info = cocoaModalSessionStack[i]; if (info.widget) { + // This session has a widget, and is therefore not marked + // as stopped. So just make it current. There might still be other + // stopped sessions on the stack, but those will be stopped on + // a later "cleanup" call. currentModalSessionCached = info.session; break; } @@ -926,6 +931,7 @@ void QEventDispatcherMacPrivate::endModalSession(QWidget *widget) if (i == stackSize-1) { // The top sessions ended. Interrupt the event dispatcher // to start spinning the correct session immidiatly: + currentModalSessionCached = 0; cleanupModalSessionsNeeded = true; QEventDispatcherMac::instance()->interrupt(); } -- cgit v0.12 From 821a9e8a4dd7636db59767d5fa73da3823dcdf1e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Thu, 26 Aug 2010 11:45:43 +0200 Subject: fix generated makefile dependencies seems like some makes are rather lax about bogus dependencies, so this went unnoticed in local testing for at least two people. --- qmake/generators/makefile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 03732ba..c7b1473 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -551,7 +551,7 @@ MakefileGenerator::init() if(out.exists() && out.open(QFile::ReadOnly)) { QString old = QString::fromUtf8(out.readAll()); if(contents == old) { - v["QMAKE_INTERNAL_INCLUDED_FILES"].append(subs.at(i)); + v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); continue; } out.close(); @@ -563,7 +563,7 @@ MakefileGenerator::init() } mkdir(QFileInfo(out).absolutePath()); if(out.open(QFile::WriteOnly)) { - v["QMAKE_INTERNAL_INCLUDED_FILES"].append(subs.at(i)); + v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); out.write(contents.toUtf8()); } else { warn_msg(WarnLogic, "Cannot open substitute for output '%s'", -- cgit v0.12 From 4fdb6a01b35d9cd4dc9e5e4d6682449476d68375 Mon Sep 17 00:00:00 2001 From: mread <qt-info@nokia.com> Date: Thu, 26 Aug 2010 12:20:45 +0100 Subject: fix for memory leak in QSysInfo::s60Version() A CDir was not deleted on several return paths in QSysInfo::s60Version(). This fix uses a QScopedPointer to clean up the CDir no matter what return path is taken. Reviewed-by: Simon Hausmann --- src/corelib/global/qglobal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index af35316..401af85 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1828,6 +1828,7 @@ QSysInfo::S60Version QSysInfo::s60Version() CDir* contents; TInt err = fileFinder.FindWildByDir(qt_S60Filter, qt_S60SystemInstallDir, contents); if (err == KErrNone) { + QScopedPointer<CDir> contentsDeleter(contents); err = contents->Sort(EDescending|ESortByName); if (err == KErrNone && contents->Count() > 0 && (*contents)[0].iName.Length() >= 12) { TInt major = (*contents)[0].iName[9] - '0'; @@ -1850,7 +1851,6 @@ QSysInfo::S60Version QSysInfo::s60Version() } } } - delete contents; } # ifdef Q_CC_NOKIAX86 -- cgit v0.12 From fe8e118c41c6243ace972647934c90b7f937f60e Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Thu, 26 Aug 2010 13:33:05 +0200 Subject: Autotest: don't use Q_FUNC_INFO for testing which method got called The string from Q_FUNC_INFO varies according to the compiler, so instead use an enum. Reviewed-by: Carlos Duclos --- tests/auto/qdbusthreading/tst_qdbusthreading.cpp | 35 ++++++++++++++---------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/tests/auto/qdbusthreading/tst_qdbusthreading.cpp b/tests/auto/qdbusthreading/tst_qdbusthreading.cpp index 94771a8..9d96ad8 100644 --- a/tests/auto/qdbusthreading/tst_qdbusthreading.cpp +++ b/tests/auto/qdbusthreading/tst_qdbusthreading.cpp @@ -70,7 +70,12 @@ public: QSemaphore sem1, sem2; volatile bool success; QEventLoop *loop; - const char *functionSpy; + enum FunctionSpy { + NoMethod = 0, + Adaptor_method, + Object_method + } functionSpy; + QThread *threadSpy; int signalSpy; @@ -127,7 +132,7 @@ public: public Q_SLOTS: void method() { - tst_QDBusThreading::self()->functionSpy = Q_FUNC_INFO; + tst_QDBusThreading::self()->functionSpy = tst_QDBusThreading::Adaptor_method; tst_QDBusThreading::self()->threadSpy = QThread::currentThread(); emit signal(); } @@ -155,7 +160,7 @@ public: public Q_SLOTS: void method() { - tst_QDBusThreading::self()->functionSpy = Q_FUNC_INFO; + tst_QDBusThreading::self()->functionSpy = tst_QDBusThreading::Object_method; tst_QDBusThreading::self()->threadSpy = QThread::currentThread(); emit signal(); deleteLater(); @@ -198,7 +203,7 @@ void Thread::run() static const char myConnectionName[] = "connection"; tst_QDBusThreading::tst_QDBusThreading() - : loop(0), functionSpy(0), threadSpy(0) + : loop(0), functionSpy(NoMethod), threadSpy(0) { _self = this; QCoreApplication::instance()->thread()->setObjectName("Main thread"); @@ -420,22 +425,22 @@ void tst_QDBusThreading::registerObjectInOtherThread() QTest::qWait(100); QCOMPARE(signalSpy, 0); - functionSpy = 0; + functionSpy = NoMethod; threadSpy = 0; QDBusReply<void> reply = iface.call("method"); QVERIFY(reply.isValid()); - QCOMPARE(functionSpy, "void Object::method()"); + QCOMPARE(functionSpy, Object_method); QCOMPARE(threadSpy, th); QTest::qWait(100); QCOMPARE(signalSpy, 1); sem2.acquire(); // the object is gone - functionSpy = 0; + functionSpy = NoMethod; threadSpy = 0; reply = iface.call("method"); QVERIFY(!reply.isValid()); - QCOMPARE(functionSpy, (const char*)0); + QCOMPARE(functionSpy, NoMethod); QCOMPARE(threadSpy, (QThread*)0); } @@ -468,36 +473,36 @@ void tst_QDBusThreading::registerAdaptorInOtherThread() connect(&adaptor, SIGNAL(signal()), SLOT(signalSpySlot())); QCOMPARE(signalSpy, 0); - functionSpy = 0; + functionSpy = NoMethod; threadSpy = 0; QDBusReply<void> reply = adaptor.call("method"); QVERIFY(reply.isValid()); - QCOMPARE(functionSpy, "void Adaptor::method()"); + QCOMPARE(functionSpy, Adaptor_method); QCOMPARE(threadSpy, th); QTest::qWait(100); QCOMPARE(signalSpy, 1); - functionSpy = 0; + functionSpy = NoMethod; threadSpy = 0; reply = object.call("method"); QVERIFY(reply.isValid()); - QCOMPARE(functionSpy, "void Object::method()"); + QCOMPARE(functionSpy, Object_method); QCOMPARE(threadSpy, th); QTest::qWait(100); QCOMPARE(signalSpy, 1); sem2.acquire(); // the object is gone - functionSpy = 0; + functionSpy = NoMethod; threadSpy = 0; reply = adaptor.call("method"); QVERIFY(!reply.isValid()); - QCOMPARE(functionSpy, (const char*)0); + QCOMPARE(functionSpy, NoMethod); QCOMPARE(threadSpy, (QThread*)0); reply = object.call("method"); QVERIFY(!reply.isValid()); - QCOMPARE(functionSpy, (const char*)0); + QCOMPARE(functionSpy, NoMethod); QCOMPARE(threadSpy, (QThread*)0); } -- cgit v0.12 From 58f2b5af3caf6b9cc0a45856ee3be412c22dbb69 Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Mon, 31 May 2010 11:33:05 +0200 Subject: Do not use global static const references to objects They don't compile with clang --- tools/porting/src/errors.cpp | 6 +++--- tools/porting/src/errors.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/porting/src/errors.cpp b/tools/porting/src/errors.cpp index 580efb5..9081dba 100644 --- a/tools/porting/src/errors.cpp +++ b/tools/porting/src/errors.cpp @@ -44,8 +44,8 @@ QT_BEGIN_NAMESPACE -QT_STATIC_CONST_IMPL Error& Errors::InternalError = Error( 1, -1, QLatin1String("Internal Error") ); -QT_STATIC_CONST_IMPL Error& Errors::SyntaxError = Error( 2, -1, QLatin1String("Syntax Error before '%1'") ); -QT_STATIC_CONST_IMPL Error& Errors::ParseError = Error( 3, -1, QLatin1String("Parse Error before '%1'") ); +QT_STATIC_CONST_IMPL Error Errors::InternalError = Error( 1, -1, QLatin1String("Internal Error") ); +QT_STATIC_CONST_IMPL Error Errors::SyntaxError = Error( 2, -1, QLatin1String("Syntax Error before '%1'") ); +QT_STATIC_CONST_IMPL Error Errors::ParseError = Error( 3, -1, QLatin1String("Parse Error before '%1'") ); QT_END_NAMESPACE diff --git a/tools/porting/src/errors.h b/tools/porting/src/errors.h index f0ad691..dbac833 100644 --- a/tools/porting/src/errors.h +++ b/tools/porting/src/errors.h @@ -61,9 +61,9 @@ public: class Errors { public: - QT_STATIC_CONST Error& InternalError; - QT_STATIC_CONST Error& SyntaxError; - QT_STATIC_CONST Error& ParseError; + QT_STATIC_CONST Error InternalError; + QT_STATIC_CONST Error SyntaxError; + QT_STATIC_CONST Error ParseError; }; QT_END_NAMESPACE -- cgit v0.12 From 26103b69df9bdd32016f3fbab975a26c8a147ea0 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Thu, 26 Aug 2010 15:30:59 +0300 Subject: Added support for DEPLOYMENT.pkg_build_version DEPLOYMENT.pkg_build_version can be used to pad the patch version number in Symbian pkg files to allow hot-fix deployments to be done between patch releases. DEPLOYMENT.pkg_build_version accepts only values 0 - 99, as pkg patch version number has limits how large numbers it can accept. The specified number is prefixed with zero if it is single digit and then appended to patch version number. Task-number: QTBUG-13147 Reviewed-by: Janne Koskinen --- qmake/generators/symbian/symbiancommon.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index d124b02..155dbc9 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -275,6 +275,20 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB if (success) applicationVersion = QString("%1,%2,%3").arg(major).arg(minor).arg(patch); + // Append package build version number if it is set + QString pkgBuildVersion = project->first("DEPLOYMENT.pkg_build_version"); + if (!pkgBuildVersion.isEmpty()) { + success = false; + uint build = pkgBuildVersion.toUInt(&success); + if (success && build < 100) { + if (pkgBuildVersion.size() == 1) + pkgBuildVersion.prepend(QLatin1Char('0')); + applicationVersion.append(pkgBuildVersion); + } else { + fprintf(stderr, "Warning: Invalid DEPLOYMENT.pkg_build_version (%s), must be a number between 0 - 99\n", qPrintable(pkgBuildVersion)); + } + } + // Package header QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n"; QString visualTarget = generator->escapeFilePath(project->first("TARGET")); -- cgit v0.12 From 24fb24c4b02da8380fcb7660d009d62805c0bee9 Mon Sep 17 00:00:00 2001 From: Arvid Ephraim Picciani <arvid.picciani@nokia.com> Date: Thu, 26 Aug 2010 14:50:59 +0000 Subject: use QFile:map instead of ::mmap Reviewed-by: janarve --- src/corelib/plugin/qlibrary.cpp | 48 +++++------------------------------------ 1 file changed, 5 insertions(+), 43 deletions(-) diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 0f99948..651cfe6 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -295,14 +295,6 @@ static bool qt_parse_pattern(const char *s, uint *version, bool *debug, QByteArr #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN) && !defined(QT_NO_PLUGIN_CHECK) -#if defined(Q_OS_FREEBSD) || defined(Q_OS_LINUX) -# define USE_MMAP -QT_BEGIN_INCLUDE_NAMESPACE -# include <sys/types.h> -# include <sys/mman.h> -QT_END_INCLUDE_NAMESPACE -#endif // Q_OS_FREEBSD || Q_OS_LINUX - static long qt_find_pattern(const char *s, ulong s_len, const char *pattern, ulong p_len) { @@ -363,34 +355,15 @@ static bool qt_unix_query(const QString &library, uint *version, bool *debug, QB } QByteArray data; - char *filedata = 0; - ulong fdlen = 0; - -# ifdef USE_MMAP - char *mapaddr = 0; - size_t maplen = file.size(); - mapaddr = (char *) mmap(mapaddr, maplen, PROT_READ, MAP_PRIVATE, file.handle(), 0); - if (mapaddr != MAP_FAILED) { - // mmap succeeded - filedata = mapaddr; - fdlen = maplen; - } else { - // mmap failed - if (qt_debug_component()) { - qWarning("mmap: %s", qPrintable(qt_error_string(errno))); - } - if (lib) - lib->errorString = QLibrary::tr("Could not mmap '%1': %2") - .arg(library) - .arg(qt_error_string()); -# endif // USE_MMAP + const char *filedata = 0; + ulong fdlen = file.size(); + filedata = (char *) file.map(0, fdlen); + if (filedata == 0) { // try reading the data into memory instead data = file.readAll(); - filedata = data.data(); + filedata = data.constData(); fdlen = data.size(); -# ifdef USE_MMAP } -# endif // USE_MMAP // verify that the pattern is present in the plugin const char pattern[] = "pattern=QT_PLUGIN_VERIFICATION_DATA"; @@ -403,17 +376,6 @@ static bool qt_unix_query(const QString &library, uint *version, bool *debug, QB if (!ret && lib) lib->errorString = QLibrary::tr("Plugin verification data mismatch in '%1'").arg(library); -# ifdef USE_MMAP - if (mapaddr != MAP_FAILED && munmap(mapaddr, maplen) != 0) { - if (qt_debug_component()) - qWarning("munmap: %s", qPrintable(qt_error_string(errno))); - if (lib) - lib->errorString = QLibrary::tr("Could not unmap '%1': %2") - .arg(library) - .arg( qt_error_string() ); - } -# endif // USE_MMAP - file.close(); return ret; } -- cgit v0.12 From 92a6e159518cb8c54aa9ad45cd0c70a1c6a8b50c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond.kjernasen@nokia.com> Date: Thu, 26 Aug 2010 15:46:03 +0200 Subject: Calling QPen::brush() on a Qt::NoPen pen, should return QBrush::NoBrush. This could cause some strange things to happen in our fallback code used for e.g. printing, since the brush might be valid and e.g. contain alpha values etc. Task-number: QTBUG-12263 Reviewed-by: Gunnar --- src/gui/painting/qpen.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/painting/qpen.cpp b/src/gui/painting/qpen.cpp index 2e43984..5e158a4 100644 --- a/src/gui/painting/qpen.cpp +++ b/src/gui/painting/qpen.cpp @@ -747,6 +747,8 @@ void QPen::setColor(const QColor &c) */ QBrush QPen::brush() const { + if (d->style == Qt::NoPen) + return Qt::NoBrush; return d->brush; } -- cgit v0.12 From 3db2df0a33952223ef0e1a087329ada7f2b2d3ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond.kjernasen@nokia.com> Date: Thu, 26 Aug 2010 17:00:50 +0200 Subject: Add a test for the QPen::brush() != Qt::NoBrush for a Qt::NoPen pen. --- tests/auto/qpen/tst_qpen.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/auto/qpen/tst_qpen.cpp b/tests/auto/qpen/tst_qpen.cpp index 149f462..6ca4e13 100644 --- a/tests/auto/qpen/tst_qpen.cpp +++ b/tests/auto/qpen/tst_qpen.cpp @@ -67,6 +67,7 @@ private slots: void constructor(); void constructor_data(); + void noPenNoBrush(); }; // Testing get/set functions @@ -213,6 +214,12 @@ void tst_QPen::stream() QCOMPARE(pen, cmp); } +void tst_QPen::noPenNoBrush() +{ + QPen pen; + pen.setStyle(Qt::NoPen); + QVERIFY(pen.brush().style() == Qt::NoBrush); +} QTEST_APPLESS_MAIN(tst_QPen) #include "tst_qpen.moc" -- cgit v0.12 From f2245941f0d1bc8244aa0d88437f0a42c9bba1fc Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Fri, 27 Aug 2010 12:12:03 +1000 Subject: Update example screenshot in doc. --- doc/src/images/qml-image-example.png | Bin 58184 -> 49584 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/src/images/qml-image-example.png b/doc/src/images/qml-image-example.png index c1951c0..8d9846f 100644 Binary files a/doc/src/images/qml-image-example.png and b/doc/src/images/qml-image-example.png differ -- cgit v0.12 From 34a107454426db2f40b3be31923b8a5ce1d84f6e Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Fri, 27 Aug 2010 14:32:25 +1000 Subject: Internal QML API cleanup --- .../qml/qdeclarativecompiledbindings.cpp | 2 +- src/declarative/qml/qdeclarativecompiler.cpp | 18 +-- .../qml/qdeclarativecompositetypemanager.cpp | 18 +-- src/declarative/qml/qdeclarativeimport.cpp | 157 +++++++++++---------- src/declarative/qml/qdeclarativeimport_p.h | 37 ++--- 5 files changed, 124 insertions(+), 108 deletions(-) diff --git a/src/declarative/qml/qdeclarativecompiledbindings.cpp b/src/declarative/qml/qdeclarativecompiledbindings.cpp index 723da94..9402596 100644 --- a/src/declarative/qml/qdeclarativecompiledbindings.cpp +++ b/src/declarative/qml/qdeclarativecompiledbindings.cpp @@ -1874,7 +1874,7 @@ bool QDeclarativeBindingCompilerPrivate::parseName(AST::Node *node, Result &type return false; QDeclarativeImportedNamespace *ns = 0; - if (!engine->importDatabase.resolveType(imports, name.toUtf8(), &attachType, 0, 0, 0, &ns)) + if (!imports.resolveType(name.toUtf8(), &attachType, 0, 0, 0, &ns)) return false; if (ns || !attachType || !attachType->attachedPropertiesType()) return false; diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 2b4a4a5..34d33bb 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -703,7 +703,7 @@ void QDeclarativeCompiler::compileTree(Object *tree) for (int ii = 0; ii < importedScriptIndexes.count(); ++ii) output->importCache->add(importedScriptIndexes.at(ii), ii); - unit->imports.cache(output->importCache, engine); + unit->imports.populateCache(output->importCache, engine); Q_ASSERT(tree->metatype); @@ -1403,8 +1403,7 @@ bool QDeclarativeCompiler::buildProperty(QDeclarativeParser::Property *prop, QDeclarativeType *type = 0; QDeclarativeImportedNamespace *typeNamespace = 0; - enginePrivate->importDatabase.resolveType(unit->imports, prop->name, - &type, 0, 0, 0, &typeNamespace); + unit->imports.resolveType(prop->name, &type, 0, 0, 0, &typeNamespace); if (typeNamespace) { // ### We might need to indicate that this property is a namespace @@ -1512,7 +1511,7 @@ bool QDeclarativeCompiler::buildPropertyInNamespace(QDeclarativeImportedNamespac // Setup attached property data QDeclarativeType *type = 0; - enginePrivate->importDatabase.resolveTypeInNamespace(ns, prop->name, &type, 0, 0, 0); + unit->imports.resolveType(ns, prop->name, &type, 0, 0, 0); if (!type || !type->attachedPropertiesType()) COMPILE_EXCEPTION(prop, tr("Non-existent attached object")); @@ -2139,8 +2138,7 @@ bool QDeclarativeCompiler::testQualifiedEnumAssignment(const QMetaProperty &prop QString typeName = parts.at(0); QDeclarativeType *type = 0; - enginePrivate->importDatabase.resolveType(unit->imports, typeName.toUtf8(), - &type, 0, 0, 0, 0); + unit->imports.resolveType(typeName.toUtf8(), &type, 0, 0, 0, 0); if (!type || obj->typeName != type->qmlTypeName()) return true; @@ -2167,7 +2165,7 @@ int QDeclarativeCompiler::evaluateEnum(const QByteArray& script) const int dot = script.indexOf('.'); if (dot > 0) { QDeclarativeType *type = 0; - enginePrivate->importDatabase.resolveType(unit->imports, script.left(dot), &type, 0, 0, 0, 0); + unit->imports.resolveType(script.left(dot), &type, 0, 0, 0, 0); if (!type) return -1; const QMetaObject *mo = type->metaObject(); @@ -2185,8 +2183,7 @@ int QDeclarativeCompiler::evaluateEnum(const QByteArray& script) const const QMetaObject *QDeclarativeCompiler::resolveType(const QByteArray& name) const { QDeclarativeType *qmltype = 0; - if (!enginePrivate->importDatabase.resolveType(unit->imports, name, &qmltype, - 0, 0, 0, 0)) + if (!unit->imports.resolveType(name, &qmltype, 0, 0, 0, 0)) return 0; if (!qmltype) return 0; @@ -2344,8 +2341,7 @@ bool QDeclarativeCompiler::buildDynamicMeta(QDeclarativeParser::Object *obj, Dyn QByteArray customTypeName; QDeclarativeType *qmltype = 0; QUrl url; - if (!enginePrivate->importDatabase.resolveType(unit->imports, p.customType, &qmltype, - &url, 0, 0, 0)) + if (!unit->imports.resolveType(p.customType, &qmltype, &url, 0, 0, 0)) COMPILE_EXCEPTION(&p, tr("Invalid property type")); if (!qmltype) { diff --git a/src/declarative/qml/qdeclarativecompositetypemanager.cpp b/src/declarative/qml/qdeclarativecompositetypemanager.cpp index 2e77534..cc8f887 100644 --- a/src/declarative/qml/qdeclarativecompositetypemanager.cpp +++ b/src/declarative/qml/qdeclarativecompositetypemanager.cpp @@ -523,7 +523,7 @@ int QDeclarativeCompositeTypeManager::resolveTypes(QDeclarativeCompositeTypeData int waiting = 0; QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); - QDeclarativeImportDatabase &importDatabase = ep->importDatabase; + QDeclarativeImportDatabase *importDatabase = &ep->importDatabase; // For local urls, add an implicit import "." as first (most overridden) lookup. // This will also trigger the loading of the qmldir and the import of any native @@ -538,9 +538,10 @@ int QDeclarativeCompositeTypeManager::resolveTypes(QDeclarativeCompositeTypeData qmldircomponentsnetwork = parser.components(); } - importDatabase.addToImport(&unit->imports, qmldircomponentsnetwork, QLatin1String("."), - QString(), -1, -1, QDeclarativeScriptParser::Import::File, - 0); // error ignored (just means no fallback) + unit->imports.addImport(importDatabase, + QLatin1String("."), QString(), -1, -1, QDeclarativeScriptParser::Import::File, + qmldircomponentsnetwork, + 0); // error ignored (just means no fallback) } @@ -577,8 +578,9 @@ int QDeclarativeCompositeTypeManager::resolveTypes(QDeclarativeCompositeTypeData } QString errorString; - if (!importDatabase.addToImport(&unit->imports, qmldircomponentsnetwork, imp.uri, imp.qualifier, - vmaj, vmin, imp.type, &errorString)) { + if (!unit->imports.addImport(importDatabase, + imp.uri, imp.qualifier, vmaj, vmin, imp.type, + qmldircomponentsnetwork, &errorString)) { QDeclarativeError error; error.setUrl(unit->imports.baseUrl()); error.setDescription(errorString); @@ -606,8 +608,8 @@ int QDeclarativeCompositeTypeManager::resolveTypes(QDeclarativeCompositeTypeData int minorVersion; QDeclarativeImportedNamespace *typeNamespace = 0; QString errorString; - if (!importDatabase.resolveType(unit->imports, typeName, &ref.type, &url, &majorVersion, &minorVersion, - &typeNamespace, &errorString) || typeNamespace) { + if (!unit->imports.resolveType(typeName, &ref.type, &url, &majorVersion, &minorVersion, + &typeNamespace, &errorString) || typeNamespace) { // Known to not be a type: // - known to be a namespace (Namespace {}) // - type with unknown namespace (UnknownNamespace.SomeType {}) diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index 5c21ebc..8f95e26 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -109,6 +109,11 @@ public: QHash<QString,QDeclarativeImportedNamespace* > set; }; +/*! +\class QDeclarativeImports +\brief The QDeclarativeImports class encapsulates one QML document's import statements. +\internal +*/ QDeclarativeImports::QDeclarativeImports(const QDeclarativeImports ©) : d(copy.d) { @@ -181,7 +186,7 @@ cacheForNamespace(QDeclarativeEngine *engine, const QDeclarativeImportedNamespac return cache; } -void QDeclarativeImports::cache(QDeclarativeTypeNameCache *cache, QDeclarativeEngine *engine) const +void QDeclarativeImports::populateCache(QDeclarativeTypeNameCache *cache, QDeclarativeEngine *engine) const { const QDeclarativeImportedNamespace &set = d->unqualifiedset; @@ -201,6 +206,67 @@ void QDeclarativeImports::cache(QDeclarativeTypeNameCache *cache, QDeclarativeEn cacheForNamespace(engine, set, cache); } + +/*! + \internal + + The given (namespace qualified) \a type is resolved to either + \list + \o a QDeclarativeImportedNamespace stored at \a ns_return, + \o a QDeclarativeType stored at \a type_return, or + \o a component located at \a url_return. + \endlist + + If any return pointer is 0, the corresponding search is not done. + + \sa addImport() +*/ +bool QDeclarativeImports::resolveType(const QByteArray& type, + QDeclarativeType** type_return, QUrl* url_return, int *vmaj, int *vmin, + QDeclarativeImportedNamespace** ns_return, QString *errorString) const +{ + QDeclarativeImportedNamespace* ns = d->findNamespace(QString::fromUtf8(type)); + if (ns) { + if (ns_return) + *ns_return = ns; + return true; + } + if (type_return || url_return) { + if (d->find(type,vmaj,vmin,type_return,url_return, errorString)) { + if (qmlImportTrace()) { + if (type_return && *type_return && url_return && !url_return->isEmpty()) + qDebug().nospace() << "QDeclarativeImports(" << qPrintable(baseUrl().toString()) << ")" << "::resolveType: " + << type << " => " << (*type_return)->typeName() << " " << *url_return; + if (type_return && *type_return) + qDebug().nospace() << "QDeclarativeImports(" << qPrintable(baseUrl().toString()) << ")" << "::resolveType: " + << type << " => " << (*type_return)->typeName(); + if (url_return && !url_return->isEmpty()) + qDebug().nospace() << "QDeclarativeImports(" << qPrintable(baseUrl().toString()) << ")" << "::resolveType: " + << type << " => " << *url_return; + } + return true; + } + } + return false; +} + +/*! + \internal + + Searching \e only in the namespace \a ns (previously returned in a call to + resolveType(), \a type is found and returned to either + a QDeclarativeType stored at \a type_return, or + a component located at \a url_return. + + If either return pointer is 0, the corresponding search is not done. +*/ +bool QDeclarativeImports::resolveType(QDeclarativeImportedNamespace* ns, const QByteArray& type, + QDeclarativeType** type_return, QUrl* url_return, + int *vmaj, int *vmin) const +{ + return ns->find(type,vmaj,vmin,type_return,url_return); +} + bool QDeclarativeImportedNamespace::find_helper(int i, const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, QUrl* url_return, QUrl *base, bool *typeRecursionDetected) @@ -280,15 +346,16 @@ QDeclarativeImportsPrivate::~QDeclarativeImportsPrivate() } bool QDeclarativeImportsPrivate::importExtension(const QString &absoluteFilePath, const QString &uri, - QDeclarativeImportDatabase *database, - QDeclarativeDirComponents* components, QString *errorString) + QDeclarativeImportDatabase *database, + QDeclarativeDirComponents* components, QString *errorString) { QFile file(absoluteFilePath); QString filecontent; if (file.open(QFile::ReadOnly)) { filecontent = QString::fromUtf8(file.readAll()); if (qmlImportTrace()) - qDebug() << "QDeclarativeImportDatabase::add: loaded" << absoluteFilePath; + qDebug().nospace() << "QDeclarativeImports(" << qPrintable(base.toString()) << "::importExtension: " + << "loaded " << absoluteFilePath; } else { if (errorString) *errorString = QDeclarativeImportDatabase::tr("module \"%1\" definition \"%2\" not readable").arg(uri).arg(absoluteFilePath); @@ -576,6 +643,10 @@ bool QDeclarativeImportedNamespace::find(const QByteArray& type, int *vmajor, in return false; } +/*! +\class QDeclarativeImportDatabase +\brief The QDeclarativeImportDatabase class manages the QML imports for a QDeclarativeEngine. +*/ QDeclarativeImportDatabase::QDeclarativeImportDatabase(QDeclarativeEngine *e) : engine(e) { @@ -619,75 +690,19 @@ QDeclarativeImportDatabase::~QDeclarativeImportDatabase() The base URL must already have been set with Import::setBaseUrl(). */ -bool QDeclarativeImportDatabase::addToImport(QDeclarativeImports* imports, - const QDeclarativeDirComponents &qmldircomponentsnetwork, - const QString& uri, const QString& prefix, int vmaj, int vmin, - QDeclarativeScriptParser::Import::Type importType, - QString *errorString) +bool QDeclarativeImports::addImport(QDeclarativeImportDatabase *importDb, + const QString& uri, const QString& prefix, int vmaj, int vmin, + QDeclarativeScriptParser::Import::Type importType, + const QDeclarativeDirComponents &qmldircomponentsnetwork, + QString *errorString) { if (qmlImportTrace()) - qDebug().nospace() << "QDeclarativeImportDatabase::addToImport " << imports << " " << uri << " " - << vmaj << '.' << vmin << " " + qDebug().nospace() << "QDeclarativeImports(" << qPrintable(baseUrl().toString()) << ")" << "::addImport: " + << uri << " " << vmaj << '.' << vmin << " " << (importType==QDeclarativeScriptParser::Import::Library? "Library" : "File") << " as " << prefix; - bool ok = imports->d->add(qmldircomponentsnetwork, uri, prefix, vmaj, vmin, importType, this, errorString); - return ok; -} - -/*! - \internal - - Using the given \a imports, the given (namespace qualified) \a type is resolved to either - a QDeclarativeImportedNamespace stored at \a ns_return, - a QDeclarativeType stored at \a type_return, or - a component located at \a url_return. - - If any return pointer is 0, the corresponding search is not done. - - \sa addToImport() -*/ -bool QDeclarativeImportDatabase::resolveType(const QDeclarativeImports& imports, const QByteArray& type, - QDeclarativeType** type_return, QUrl* url_return, int *vmaj, int *vmin, - QDeclarativeImportedNamespace** ns_return, QString *errorString) const -{ - QDeclarativeImportedNamespace* ns = imports.d->findNamespace(QString::fromUtf8(type)); - if (ns) { - if (ns_return) - *ns_return = ns; - return true; - } - if (type_return || url_return) { - if (imports.d->find(type,vmaj,vmin,type_return,url_return, errorString)) { - if (qmlImportTrace()) { - if (type_return && *type_return && url_return && !url_return->isEmpty()) - qDebug() << "QDeclarativeImportDatabase::resolveType" << type << '=' << (*type_return)->typeName() << *url_return; - if (type_return && *type_return) - qDebug() << "QDeclarativeImportDatabase::resolveType" << type << '=' << (*type_return)->typeName(); - if (url_return && !url_return->isEmpty()) - qDebug() << "QDeclarativeImportDatabase::resolveType" << type << '=' << *url_return; - } - return true; - } - } - return false; -} - -/*! - \internal - - Searching \e only in the namespace \a ns (previously returned in a call to - resolveType(), \a type is found and returned to either - a QDeclarativeType stored at \a type_return, or - a component located at \a url_return. - - If either return pointer is 0, the corresponding search is not done. -*/ -bool QDeclarativeImportDatabase::resolveTypeInNamespace(QDeclarativeImportedNamespace* ns, const QByteArray& type, - QDeclarativeType** type_return, QUrl* url_return, - int *vmaj, int *vmin) const -{ - return ns->find(type,vmaj,vmin,type_return,url_return); + return d->add(qmldircomponentsnetwork, uri, prefix, vmaj, vmin, importType, importDb, errorString); } /*! @@ -834,7 +849,7 @@ void QDeclarativeImportDatabase::setPluginPathList(const QStringList &paths) void QDeclarativeImportDatabase::addPluginPath(const QString& path) { if (qmlImportTrace()) - qDebug() << "QDeclarativeImportDatabase::addPluginPath" << path; + qDebug().nospace() << "QDeclarativeImportDatabase::addPluginPath: " << path; QUrl url = QUrl(path); if (url.isRelative() || url.scheme() == QLatin1String("file")) { @@ -848,7 +863,7 @@ void QDeclarativeImportDatabase::addPluginPath(const QString& path) void QDeclarativeImportDatabase::addImportPath(const QString& path) { if (qmlImportTrace()) - qDebug() << "QDeclarativeImportDatabase::addImportPath" << path; + qDebug().nospace() << "QDeclarativeImportDatabase::addImportPath: " << path; if (path.isEmpty()) return; @@ -882,7 +897,7 @@ void QDeclarativeImportDatabase::setImportPathList(const QStringList &paths) bool QDeclarativeImportDatabase::importPlugin(const QString &filePath, const QString &uri, QString *errorString) { if (qmlImportTrace()) - qDebug() << "QDeclarativeImportDatabase::importPlugin" << uri << "from" << filePath; + qDebug().nospace() << "QDeclarativeImportDatabase::importPlugin: " << uri << " from " << filePath; QFileInfo fileInfo(filePath); const QString absoluteFilePath = fileInfo.absoluteFilePath(); diff --git a/src/declarative/qml/qdeclarativeimport_p.h b/src/declarative/qml/qdeclarativeimport_p.h index 88246d4..84802de 100644 --- a/src/declarative/qml/qdeclarativeimport_p.h +++ b/src/declarative/qml/qdeclarativeimport_p.h @@ -65,9 +65,10 @@ QT_BEGIN_NAMESPACE class QDeclarativeTypeNameCache; class QDeclarativeEngine; class QDir; - class QDeclarativeImportedNamespace; class QDeclarativeImportsPrivate; +class QDeclarativeImportDatabase; + class QDeclarativeImports { public: @@ -79,7 +80,24 @@ public: void setBaseUrl(const QUrl &url); QUrl baseUrl() const; - void cache(QDeclarativeTypeNameCache *cache, QDeclarativeEngine *) const; + bool resolveType(const QByteArray& type, + QDeclarativeType** type_return, QUrl* url_return, + int *version_major, int *version_minor, + QDeclarativeImportedNamespace** ns_return, + QString *errorString = 0) const; + bool resolveType(QDeclarativeImportedNamespace*, + const QByteArray& type, + QDeclarativeType** type_return, QUrl* url_return, + int *version_major, int *version_minor) const; + + bool addImport(QDeclarativeImportDatabase *, + const QString& uri, const QString& prefix, int vmaj, int vmin, + QDeclarativeScriptParser::Import::Type importType, + const QDeclarativeDirComponents &qmldircomponentsnetwork, + QString *errorString); + + void populateCache(QDeclarativeTypeNameCache *cache, QDeclarativeEngine *) const; + private: friend class QDeclarativeImportDatabase; QDeclarativeImportsPrivate *d; @@ -102,21 +120,6 @@ public: void setPluginPathList(const QStringList &paths); void addPluginPath(const QString& path); - - bool addToImport(QDeclarativeImports*, const QDeclarativeDirComponents &qmldircomponentsnetwork, - const QString& uri, const QString& prefix, int vmaj, int vmin, - QDeclarativeScriptParser::Import::Type importType, - QString *errorString); - bool resolveType(const QDeclarativeImports&, const QByteArray& type, - QDeclarativeType** type_return, QUrl* url_return, - int *version_major, int *version_minor, - QDeclarativeImportedNamespace** ns_return, - QString *errorString = 0) const; - bool resolveTypeInNamespace(QDeclarativeImportedNamespace*, const QByteArray& type, - QDeclarativeType** type_return, QUrl* url_return, - int *version_major, int *version_minor ) const; - - private: friend class QDeclarativeImportsPrivate; QString resolvePlugin(const QDir &qmldirPath, const QString &qmldirPluginPath, -- cgit v0.12 From f37a3adcdb990015f1f1583b267ff6f680844236 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Fri, 27 Aug 2010 15:02:50 +1000 Subject: Remove pointless \internal docs (that contain no information) --- .../graphicsitems/qdeclarativeanchors.cpp | 9 ---- .../graphicsitems/qdeclarativeborderimage.cpp | 6 --- .../graphicsitems/qdeclarativeevents.cpp | 5 -- .../graphicsitems/qdeclarativeflipable.cpp | 9 ---- .../graphicsitems/qdeclarativefocuspanel.cpp | 5 -- .../graphicsitems/qdeclarativefocusscope.cpp | 5 -- .../graphicsitems/qdeclarativegraphicswidget.cpp | 19 ------- .../graphicsitems/qdeclarativeimage.cpp | 13 ----- .../graphicsitems/qdeclarativeimagebase.cpp | 7 --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 12 ----- .../graphicsitems/qdeclarativelayoutitem.cpp | 7 --- .../graphicsitems/qdeclarativeloader.cpp | 11 ---- .../graphicsitems/qdeclarativemousearea.cpp | 11 ---- src/declarative/graphicsitems/qdeclarativepath.cpp | 58 ---------------------- .../graphicsitems/qdeclarativepositioners.cpp | 18 +------ .../graphicsitems/qdeclarativerectangle.cpp | 5 -- .../graphicsitems/qdeclarativerepeater.cpp | 21 -------- src/declarative/graphicsitems/qdeclarativetext.cpp | 26 ---------- .../graphicsitems/qdeclarativetextedit.cpp | 17 ------- .../graphicsitems/qdeclarativetextinput.cpp | 2 - .../graphicsitems/qdeclarativetranslate.cpp | 3 -- src/declarative/util/qdeclarativeanimation.cpp | 54 +------------------- src/declarative/util/qdeclarativebind.cpp | 15 +----- src/declarative/util/qdeclarativeconnections.cpp | 7 --- .../util/qdeclarativepropertychanges.cpp | 6 --- src/declarative/util/qdeclarativestate.cpp | 17 ------- src/declarative/util/qdeclarativetransition.cpp | 6 --- src/declarative/util/qdeclarativexmllistmodel.cpp | 5 -- 28 files changed, 4 insertions(+), 375 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeanchors.cpp b/src/declarative/graphicsitems/qdeclarativeanchors.cpp index 7ac2b17..26fb97f 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanchors.cpp @@ -148,15 +148,6 @@ static qreal adjustedPosition(QGraphicsObject *item, QDeclarativeAnchorLine::Anc return ret; } -/*! - \internal - \class QDeclarativeAnchors - \since 4.7 - \brief The QDeclarativeAnchors class provides a way to lay out items relative to other items. - - \warning Currently, only anchoring to siblings or parent is supported. -*/ - QDeclarativeAnchors::QDeclarativeAnchors(QObject *parent) : QObject(*new QDeclarativeAnchorsPrivate(0), parent) { diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index e0c7fc2..f16770b 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -79,12 +79,6 @@ QT_BEGIN_NAMESPACE rectangular item. */ -/*! - \class QDeclarativeBorderImage BorderImage - \internal - \brief The QDeclarativeBorderImage class provides an image item that you can add to a QDeclarativeView. -*/ - QDeclarativeBorderImage::QDeclarativeBorderImage(QDeclarativeItem *parent) : QDeclarativeImageBase(*(new QDeclarativeBorderImagePrivate), parent) { diff --git a/src/declarative/graphicsitems/qdeclarativeevents.cpp b/src/declarative/graphicsitems/qdeclarativeevents.cpp index 0a35a3f..dbfb3fb 100644 --- a/src/declarative/graphicsitems/qdeclarativeevents.cpp +++ b/src/declarative/graphicsitems/qdeclarativeevents.cpp @@ -60,11 +60,6 @@ Item { */ /*! - \internal - \class QDeclarativeKeyEvent -*/ - -/*! \qmlproperty int KeyEvent::key This property holds the code of the key that was pressed or released. diff --git a/src/declarative/graphicsitems/qdeclarativeflipable.cpp b/src/declarative/graphicsitems/qdeclarativeflipable.cpp index 6ce0fa6..69dd66a 100644 --- a/src/declarative/graphicsitems/qdeclarativeflipable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflipable.cpp @@ -99,15 +99,6 @@ public: \sa {declarative/ui-components/flipable}{Flipable example} */ -/*! - \internal - \class QDeclarativeFlipable - \brief The Flipable item provides a surface that can be flipped. - - Flipable is an item that can be visibly "flipped" between its front and - back sides. -*/ - QDeclarativeFlipable::QDeclarativeFlipable(QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeFlipablePrivate), parent) { diff --git a/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp b/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp index 5c7959a..f345a14 100644 --- a/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp +++ b/src/declarative/graphicsitems/qdeclarativefocuspanel.cpp @@ -61,11 +61,6 @@ QT_BEGIN_NAMESPACE \l {qmlfocus}{keyboard focus documentation}. */ -/*! - \internal - \class QDeclarativeFocusPanel -*/ - QDeclarativeFocusPanel::QDeclarativeFocusPanel(QDeclarativeItem *parent) : QDeclarativeItem(parent) { diff --git a/src/declarative/graphicsitems/qdeclarativefocusscope.cpp b/src/declarative/graphicsitems/qdeclarativefocusscope.cpp index 4498275..da97a46 100644 --- a/src/declarative/graphicsitems/qdeclarativefocusscope.cpp +++ b/src/declarative/graphicsitems/qdeclarativefocusscope.cpp @@ -60,11 +60,6 @@ QT_BEGIN_NAMESPACE \sa {declarative/keyinteraction/focus}{Keyboard focus example} */ -/*! - \internal - \class QDeclarativeFocusScope -*/ - QDeclarativeFocusScope::QDeclarativeFocusScope(QDeclarativeItem *parent) : QDeclarativeItem(parent) { diff --git a/src/declarative/graphicsitems/qdeclarativegraphicswidget.cpp b/src/declarative/graphicsitems/qdeclarativegraphicswidget.cpp index ee45406..d45fe83 100644 --- a/src/declarative/graphicsitems/qdeclarativegraphicswidget.cpp +++ b/src/declarative/graphicsitems/qdeclarativegraphicswidget.cpp @@ -68,7 +68,6 @@ QDeclarativeGraphicsWidget::~QDeclarativeGraphicsWidget() delete d->_anchors; d->_anchors = 0; } -/*! \internal */ QDeclarativeAnchors *QDeclarativeGraphicsWidget::anchors() { Q_D(QDeclarativeGraphicsWidget); @@ -85,54 +84,36 @@ QDeclarativeItemPrivate::AnchorLines *QDeclarativeGraphicsWidgetPrivate::anchorL return _anchorLines; } -/*! - \internal -*/ QDeclarativeAnchorLine QDeclarativeGraphicsWidget::left() const { Q_D(const QDeclarativeGraphicsWidget); return d->anchorLines()->left; } -/*! - \internal -*/ QDeclarativeAnchorLine QDeclarativeGraphicsWidget::right() const { Q_D(const QDeclarativeGraphicsWidget); return d->anchorLines()->right; } -/*! - \internal -*/ QDeclarativeAnchorLine QDeclarativeGraphicsWidget::horizontalCenter() const { Q_D(const QDeclarativeGraphicsWidget); return d->anchorLines()->hCenter; } -/*! - \internal -*/ QDeclarativeAnchorLine QDeclarativeGraphicsWidget::top() const { Q_D(const QDeclarativeGraphicsWidget); return d->anchorLines()->top; } -/*! - \internal -*/ QDeclarativeAnchorLine QDeclarativeGraphicsWidget::bottom() const { Q_D(const QDeclarativeGraphicsWidget); return d->anchorLines()->bottom; } -/*! - \internal -*/ QDeclarativeAnchorLine QDeclarativeGraphicsWidget::verticalCenter() const { Q_D(const QDeclarativeGraphicsWidget); diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 1cc5f81..7a88e78 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -91,19 +91,6 @@ QT_BEGIN_NAMESPACE \sa {declarative/imageelements/image}{Image example}, QDeclarativeImageProvider */ -/*! - \internal - \class QDeclarativeImage Image - \brief The QDeclarativeImage class provides an image item that you can add to a QDeclarativeView. - - Example: - \qml - Image { source: "pics/star.png" } - \endqml - - A QDeclarativeImage object can be instantiated in QML using the tag \l Image. -*/ - QDeclarativeImage::QDeclarativeImage(QDeclarativeItem *parent) : QDeclarativeImageBase(*(new QDeclarativeImagePrivate), parent) { diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp index d6b935b..416604b 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp @@ -50,13 +50,6 @@ QT_BEGIN_NAMESPACE - -/*! - \class QDeclarativeImageBase - \internal - \brief The base class for declarative images. - */ - QDeclarativeImageBase::QDeclarativeImageBase(QDeclarativeImageBasePrivate &dd, QDeclarativeItem *parent) : QDeclarativeItem(dd, parent) { diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 0f16a79..1054898 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -229,12 +229,6 @@ QT_BEGIN_NAMESPACE The angle to rotate, in degrees clockwise. */ -/*! - \internal - \class QDeclarativeContents - \brief The QDeclarativeContents class gives access to the height and width of an item's contents. - -*/ QDeclarativeContents::QDeclarativeContents(QDeclarativeItem *item) : m_item(item), m_x(0), m_y(0), m_width(0), m_height(0) { //### optimize @@ -1728,7 +1722,6 @@ void QDeclarativeItemPrivate::parentProperty(QObject *o, void *rv, QDeclarativeN specify it. */ -/*! \internal */ QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::data() { return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::data_append); @@ -2416,7 +2409,6 @@ void QDeclarativeItemPrivate::focusChanged(bool flag) emit q->focusChanged(flag); } -/*! \internal */ QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::resources() { return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::resources_append, @@ -2441,7 +2433,6 @@ QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::resources() \sa {qmlstate}{States} */ -/*! \internal */ QDeclarativeListProperty<QDeclarativeState> QDeclarativeItemPrivate::states() { return _states()->statesProperty(); @@ -2465,7 +2456,6 @@ QDeclarativeListProperty<QDeclarativeState> QDeclarativeItemPrivate::states() */ -/*! \internal */ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transitions() { return _states()->transitionsProperty(); @@ -2538,7 +2528,6 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi \sa {qmlstates}{States} */ -/*! \internal */ QString QDeclarativeItemPrivate::state() const { if (!_stateGroup) @@ -2547,7 +2536,6 @@ QString QDeclarativeItemPrivate::state() const return _stateGroup->state(); } -/*! \internal */ void QDeclarativeItemPrivate::setState(const QString &state) { _states()->setState(state); diff --git a/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp b/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp index 8509473..d71b2c5 100644 --- a/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativelayoutitem.cpp @@ -66,13 +66,6 @@ QT_BEGIN_NAMESPACE */ /*! - \internal - \class QDeclarativeLayoutItem - \brief The QDeclarativeLayoutItem class allows you to place your QML UI elements inside Qt's Graphics View layouts. -*/ - - -/*! \qmlproperty QSizeF LayoutItem::maximumSize The maximumSize property can be set to specify the maximum desired size of this LayoutItem diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp index 2fde4c8..5d71625 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader.cpp +++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp @@ -189,14 +189,6 @@ void QDeclarativeLoaderPrivate::initResize() \sa {dynamic-object-creation}{Dynamic Object Creation} */ -/*! - \internal - \class QDeclarativeLoader - */ - -/*! - Create a new QDeclarativeLoader instance. - */ QDeclarativeLoader::QDeclarativeLoader(QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeLoaderPrivate), parent) { @@ -204,9 +196,6 @@ QDeclarativeLoader::QDeclarativeLoader(QDeclarativeItem *parent) d->flags |= QGraphicsItem::ItemIsFocusScope; } -/*! - Destroy the loader instance. - */ QDeclarativeLoader::~QDeclarativeLoader() { Q_D(QDeclarativeLoader); diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 2823888..ec01549 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -317,16 +317,6 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate() \l Flickable, \c onCanceled should be used in addition to onReleased. */ -/*! - \internal - \class QDeclarativeMouseArea - \brief The QDeclarativeMouseArea class provides a simple mouse handling abstraction for use within QML. - - All QDeclarativeItem derived classes can do mouse handling but the QDeclarativeMouseArea class exposes mouse - handling data as properties and tracks flicking and dragging of the mouse. - - A QDeclarativeMouseArea object can be instantiated in QML using the tag \l MouseArea. - */ QDeclarativeMouseArea::QDeclarativeMouseArea(QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeMouseAreaPrivate), parent) { @@ -690,7 +680,6 @@ void QDeclarativeMouseArea::geometryChanged(const QRectF &newGeometry, d->lastPos = mapFromScene(d->lastScenePos); } -/*! \internal */ QVariant QDeclarativeMouseArea::itemChange(GraphicsItemChange change, const QVariant &value) { diff --git a/src/declarative/graphicsitems/qdeclarativepath.cpp b/src/declarative/graphicsitems/qdeclarativepath.cpp index 0c069ce..f93357d 100644 --- a/src/declarative/graphicsitems/qdeclarativepath.cpp +++ b/src/declarative/graphicsitems/qdeclarativepath.cpp @@ -62,11 +62,6 @@ QT_BEGIN_NAMESPACE */ /*! - \internal - \class QDeclarativePathElement -*/ - -/*! \qmlclass Path QDeclarativePath \ingroup qml-view-elements \since 4.7 @@ -83,13 +78,6 @@ QT_BEGIN_NAMESPACE \sa PathView, PathAttribute, PathPercent, PathLine, PathQuad, PathCubic */ - -/*! - \internal - \class QDeclarativePath - \brief The QDeclarativePath class defines a path. - \sa QDeclarativePathView -*/ QDeclarativePath::QDeclarativePath(QObject *parent) : QObject(*(new QDeclarativePathPrivate), parent) { @@ -527,15 +515,6 @@ void QDeclarativeCurve::setY(qreal y) */ /*! - \internal - \class QDeclarativePathAttribute - \brief The QDeclarativePathAttribute class allows to set the value of an attribute at a given position in the path. - - \sa QDeclarativePath -*/ - - -/*! \qmlproperty string PathAttribute::name the name of the attribute to change. @@ -608,14 +587,6 @@ void QDeclarativePathAttribute::setValue(qreal value) */ /*! - \internal - \class QDeclarativePathLine - \brief The QDeclarativePathLine class defines a straight line. - - \sa QDeclarativePath -*/ - -/*! \qmlproperty real PathLine::x \qmlproperty real PathLine::y @@ -652,15 +623,6 @@ void QDeclarativePathLine::addToPath(QPainterPath &path) */ /*! - \internal - \class QDeclarativePathQuad - \brief The QDeclarativePathQuad class defines a quadratic Bezier curve with a control point. - - \sa QDeclarativePath -*/ - - -/*! \qmlproperty real PathQuad::x \qmlproperty real PathQuad::y @@ -743,14 +705,6 @@ void QDeclarativePathQuad::addToPath(QPainterPath &path) */ /*! - \internal - \class QDeclarativePathCubic - \brief The QDeclarativePathCubic class defines a cubic Bezier curve with two control points. - - \sa QDeclarativePath -*/ - -/*! \qmlproperty real PathCubic::x \qmlproperty real PathCubic::y @@ -872,18 +826,6 @@ void QDeclarativePathCubic::addToPath(QPainterPath &path) \sa Path */ -/*! - \internal - \class QDeclarativePathPercent - \brief The QDeclarativePathPercent class manipulates the way a path is interpreted. - - QDeclarativePathPercent allows you to bunch up items (or spread out items) along various - segments of a QDeclarativePathView's path. - - \sa QDeclarativePath - -*/ - qreal QDeclarativePathPercent::value() const { return _value; diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index 4ceb5d9..b776b8e 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -108,8 +108,7 @@ void QDeclarativeBasePositioner::graphicsWidgetGeometryChanged() You also need to set a PositionerType, to declare whether you are positioning the x, y or both for the child items. Depending on the chosen type, only x or y changes will be applied. - Note that the subclass is responsible for adding the - spacing in between items. + Note that the subclass is responsible for adding the spacing in between items. */ QDeclarativeBasePositioner::QDeclarativeBasePositioner(PositionerType at, QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeBasePositionerPrivate), parent) @@ -439,11 +438,6 @@ Column { \image spacing_b.png */ -/*! - \internal - \class QDeclarativeColumn - \brief The QDeclarativeColumn class lines up items vertically. -*/ QDeclarativeColumn::QDeclarativeColumn(QDeclarativeItem *parent) : QDeclarativeBasePositioner(Vertical, parent) { @@ -579,11 +573,6 @@ Row { \image spacing_b.png */ -/*! - \internal - \class QDeclarativeRow - \brief The QDeclarativeRow class lines up items horizontally. -*/ QDeclarativeRow::QDeclarativeRow(QDeclarativeItem *parent) : QDeclarativeBasePositioner(Horizontal, parent) { @@ -736,11 +725,6 @@ Grid { \image spacing_b.png */ -/*! - \internal - \class QDeclarativeGrid - \brief The QDeclarativeGrid class lays out items in a grid. -*/ QDeclarativeGrid::QDeclarativeGrid(QDeclarativeItem *parent) : QDeclarativeBasePositioner(Both, parent), m_rows(-1), m_columns(-1), m_flow(LeftToRight) { diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index 5990c2d..d027924 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -180,11 +180,6 @@ void QDeclarativeGradient::doUpdate() int QDeclarativeRectanglePrivate::doUpdateSlotIdx = -1; -/*! - \internal - \class QDeclarativeRectangle - \brief The QDeclarativeRectangle class provides a rectangle item that you can add to a QDeclarativeView. -*/ QDeclarativeRectangle::QDeclarativeRectangle(QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeRectanglePrivate), parent) { diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp index 4a951a2..97cf05c 100644 --- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp +++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp @@ -146,23 +146,11 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate() \endcode */ -/*! - \internal - \class QDeclarativeRepeater - */ - -/*! - Create a new QDeclarativeRepeater instance. - */ QDeclarativeRepeater::QDeclarativeRepeater(QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeRepeaterPrivate), parent) { } -/*! - Destroy the repeater instance. All items it instantiated are also - destroyed. - */ QDeclarativeRepeater::~QDeclarativeRepeater() { } @@ -301,18 +289,12 @@ int QDeclarativeRepeater::count() const } -/*! - \internal - */ void QDeclarativeRepeater::componentComplete() { QDeclarativeItem::componentComplete(); regenerate(); } -/*! - \internal - */ QVariant QDeclarativeRepeater::itemChange(GraphicsItemChange change, const QVariant &value) { @@ -335,9 +317,6 @@ void QDeclarativeRepeater::clear() d->deletables.clear(); } -/*! - \internal - */ void QDeclarativeRepeater::regenerate() { Q_D(QDeclarativeRepeater); diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index e5ad743..f16af88 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -190,32 +190,6 @@ QSet<QUrl> QTextDocumentWithImageResources::errors; \sa {declarative/text/fonts}{Fonts example} */ - -/*! - \internal - \class QDeclarativeText - \qmlclass Text - - \brief The QDeclarativeText class provides a formatted text item that you can add to a QDeclarativeView. - - Text was designed for read-only text; it does not allow for any text editing. - It can display both plain and rich text. For example: - - \qml - Text { text: "Hello World!"; font.family: "Helvetica"; font.pointSize: 24; color: "red" } - Text { text: "<b>Hello</b> <i>World!</i>" } - \endqml - - \image text.png - - If height and width are not explicitly set, Text will attempt to determine how - much room is needed and set it accordingly. Unless \c wrapMode is set, it will always - prefer width to height (all text will be placed on a single line). - - The \c elide property can alternatively be used to fit a line of plain text to a set width. - - A QDeclarativeText object can be instantiated in QML using the tag \c Text. -*/ QDeclarativeText::QDeclarativeText(QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeTextPrivate), parent) { diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index b8e8726..b1c0fcd 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -103,23 +103,6 @@ TextEdit { \sa Text, TextInput, {declarative/text/textselection}{Text Selection example} */ -/*! - \internal - \class QDeclarativeTextEdit - \qmlclass TextEdit - - \brief The QDeclarativeTextEdit class provides an editable formatted text item that you can add to a QDeclarativeView. - - It can display both plain and rich text. - - \image declarative-textedit.png - - A QDeclarativeTextEdit object can be instantiated in QML using the tag \c <TextEdit>. -*/ - -/*! - Constructs a new QDeclarativeTextEdit. -*/ QDeclarativeTextEdit::QDeclarativeTextEdit(QDeclarativeItem *parent) : QDeclarativePaintedItem(*(new QDeclarativeTextEditPrivate), parent) { diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index b4f36f4..5604b82 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -437,8 +437,6 @@ void QDeclarativeTextInput::setCursorPosition(int cp) } /*! - \internal - Returns a Rect which encompasses the cursor, but which may be larger than is required. Ignores custom cursor delegates. */ diff --git a/src/declarative/graphicsitems/qdeclarativetranslate.cpp b/src/declarative/graphicsitems/qdeclarativetranslate.cpp index 0bae0cd..2e0af2a 100644 --- a/src/declarative/graphicsitems/qdeclarativetranslate.cpp +++ b/src/declarative/graphicsitems/qdeclarativetranslate.cpp @@ -116,9 +116,6 @@ void QDeclarativeTranslate::setY(qreal y) emit yChanged(); } -/*! - \internal -*/ void QDeclarativeTranslate::applyTo(QMatrix4x4 *matrix) const { Q_D(const QDeclarativeTranslate); diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 4e9e8d5..267642d 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -84,11 +84,6 @@ QT_BEGIN_NAMESPACE element directly will result in an error. */ -/*! - \class QDeclarativeAbstractAnimation - \internal -*/ - QDeclarativeAbstractAnimation::QDeclarativeAbstractAnimation(QObject *parent) : QObject(*(new QDeclarativeAbstractAnimationPrivate), parent) { @@ -574,12 +569,6 @@ void QDeclarativeAbstractAnimation::timelineComplete() \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ -/*! - \internal - \class QDeclarativePauseAnimation -*/ - - QDeclarativePauseAnimation::QDeclarativePauseAnimation(QObject *parent) : QDeclarativeAbstractAnimation(*(new QDeclarativePauseAnimationPrivate), parent) { @@ -659,11 +648,6 @@ QAbstractAnimation *QDeclarativePauseAnimation::qtAnimation() \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ -/*! - \internal - \class QDeclarativeColorAnimation -*/ - QDeclarativeColorAnimation::QDeclarativeColorAnimation(QObject *parent) : QDeclarativePropertyAnimation(parent) { @@ -776,10 +760,6 @@ void QDeclarativeColorAnimation::setTo(const QColor &t) \sa StateChangeScript */ -/*! - \internal - \class QDeclarativeScriptAction -*/ QDeclarativeScriptAction::QDeclarativeScriptAction(QObject *parent) :QDeclarativeAbstractAnimation(*(new QDeclarativeScriptActionPrivate), parent) { @@ -933,10 +913,6 @@ QAbstractAnimation *QDeclarativeScriptAction::qtAnimation() \sa {QML Animation}, QtDeclarative */ -/*! - \internal - \class QDeclarativePropertyAction -*/ QDeclarativePropertyAction::QDeclarativePropertyAction(QObject *parent) : QDeclarativeAbstractAnimation(*(new QDeclarativePropertyActionPrivate), parent) { @@ -1185,12 +1161,6 @@ void QDeclarativePropertyAction::transition(QDeclarativeStateActions &actions, \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ - -/*! - \internal - \class QDeclarativeNumberAnimation -*/ - QDeclarativeNumberAnimation::QDeclarativeNumberAnimation(QObject *parent) : QDeclarativePropertyAnimation(parent) { @@ -1276,7 +1246,7 @@ void QDeclarativeNumberAnimation::setTo(qreal t) /*! \qmlclass Vector3dAnimation QDeclarativeVector3dAnimation - \ingroup qml-animation-transition + \ingroup qml-animation-transition \since 4.7 \inherits PropertyAnimation \brief The Vector3dAnimation element animates changes in QVector3d values. @@ -1291,12 +1261,6 @@ void QDeclarativeNumberAnimation::setTo(qreal t) \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ - -/*! - \internal - \class QDeclarativeVector3dAnimation -*/ - QDeclarativeVector3dAnimation::QDeclarativeVector3dAnimation(QObject *parent) : QDeclarativePropertyAnimation(parent) { @@ -1396,12 +1360,6 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ - -/*! - \internal - \class QDeclarativeRotationAnimation -*/ - QVariant _q_interpolateShortestRotation(qreal &f, qreal &t, qreal progress) { qreal newt = t; @@ -1702,11 +1660,6 @@ void QDeclarativeSequentialAnimation::transition(QDeclarativeStateActions &actio \sa SequentialAnimation, {QML Animation}, {declarative/animation/basics}{Animation basics example} */ -/*! - \internal - \class QDeclarativeParallelAnimation -*/ - QDeclarativeParallelAnimation::QDeclarativeParallelAnimation(QObject *parent) : QDeclarativeAnimationGroup(parent) { @@ -2512,11 +2465,6 @@ void QDeclarativePropertyAnimation::transition(QDeclarativeStateActions &actions \sa {QML Animation}, {declarative/animation/basics}{Animation basics example} */ - -/*! - \internal - \class QDeclarativeParentAnimation -*/ QDeclarativeParentAnimation::QDeclarativeParentAnimation(QObject *parent) : QDeclarativeAnimationGroup(*(new QDeclarativeParentAnimationPrivate), parent) { diff --git a/src/declarative/util/qdeclarativebind.cpp b/src/declarative/util/qdeclarativebind.cpp index 86d08f5..88b45ae 100644 --- a/src/declarative/util/qdeclarativebind.cpp +++ b/src/declarative/util/qdeclarativebind.cpp @@ -72,7 +72,7 @@ public: /*! \qmlclass Binding QDeclarativeBind - \ingroup qml-working-with-data + \ingroup qml-working-with-data \since 4.7 \brief The Binding element allows arbitrary property bindings to be created. @@ -95,18 +95,7 @@ public: immediately pushed onto the new target. \sa QtDeclarative - */ -/*! - \internal - \class QDeclarativeBind - \brief The QDeclarativeBind class allows arbitrary property bindings to be created. - - Simple bindings are usually earier to do in-place rather than creating a - QDeclarativeBind item. For that reason, QDeclarativeBind is usually used to transfer property information - from Qml to C++. - - \sa cppqml - */ +*/ QDeclarativeBind::QDeclarativeBind(QObject *parent) : QObject(*(new QDeclarativeBindPrivate), parent) { diff --git a/src/declarative/util/qdeclarativeconnections.cpp b/src/declarative/util/qdeclarativeconnections.cpp index 293928e..15e5ac5 100644 --- a/src/declarative/util/qdeclarativeconnections.cpp +++ b/src/declarative/util/qdeclarativeconnections.cpp @@ -124,13 +124,6 @@ public: \sa QtDeclarative */ - -/*! - \internal - \class QDeclarativeConnections - \brief The QDeclarativeConnections class describes generalized connections to signals. - -*/ QDeclarativeConnections::QDeclarativeConnections(QObject *parent) : QObject(*(new QDeclarativeConnectionsPrivate), parent) { diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp index c28ada3..e897458 100644 --- a/src/declarative/util/qdeclarativepropertychanges.cpp +++ b/src/declarative/util/qdeclarativepropertychanges.cpp @@ -127,12 +127,6 @@ QT_BEGIN_NAMESPACE */ /*! - \internal - \class QDeclarativePropertyChanges - \brief The QDeclarativePropertyChanges class describes new property values for a state. -*/ - -/*! \qmlproperty Object PropertyChanges::target This property holds the object which contains the properties to be changed. */ diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index 6e17cf2..1ed7923 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -123,9 +123,6 @@ bool QDeclarativeActionEvent::override(QDeclarativeActionEvent *other) return false; } -/*! - \internal -*/ QDeclarativeStateOperation::QDeclarativeStateOperation(QObjectPrivate &dd, QObject *parent) : QObject(dd, parent) { @@ -164,20 +161,6 @@ QDeclarativeStateOperation::QDeclarativeStateOperation(QObjectPrivate &dd, QObje \sa {declarative/animation/states}{states example}, {qmlstates}{States}, {qdeclarativeanimation.html#transitions}{QML Transitions}, QtDeclarative */ - -/*! - \internal - \class QDeclarativeState - \brief The QDeclarativeState class allows you to define configurations of objects and properties. - - - QDeclarativeState allows you to specify a state as a set of batched changes from the default - configuration. - - \sa {states-transitions}{States and Transitions} -*/ - - QDeclarativeState::QDeclarativeState(QObject *parent) : QObject(*(new QDeclarativeStatePrivate), parent) { diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp index 21d7ded..478c7f4 100644 --- a/src/declarative/util/qdeclarativetransition.cpp +++ b/src/declarative/util/qdeclarativetransition.cpp @@ -99,12 +99,6 @@ QT_BEGIN_NAMESPACE \sa {QML Animation}, {declarative/animation/states}{states example}, {qmlstates}{States}, {QtDeclarative} */ -/*! - \internal - \class QDeclarativeTransition - \brief The QDeclarativeTransition class allows you to define animated transitions that occur on state changes. -*/ - //ParallelAnimationWrapper allows us to do a "callback" when the animation finishes, rather than connecting //and disconnecting signals and slots frequently class ParallelAnimationWrapper : public QParallelAnimationGroup diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 02bf370..47b502d 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -498,11 +498,6 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty<QDecla } /*! - \class QDeclarativeXmlListModel - \internal -*/ - -/*! \qmlclass XmlListModel QDeclarativeXmlListModel \ingroup qml-working-with-data \since 4.7 -- cgit v0.12 From 8b7bc81738108d4a80bb07eaa9d6c366361ab297 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Fri, 27 Aug 2010 15:11:39 +1000 Subject: Remove pointless \internal docs (that contain no information) --- .../graphicsitems/qdeclarativeanimatedimage.cpp | 5 ---- src/imports/particles/qdeclarativeparticles.cpp | 33 ---------------------- 2 files changed, 38 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp index e0a2149..a95e944 100644 --- a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp @@ -54,11 +54,6 @@ QT_BEGIN_NAMESPACE /*! - \class QDeclarativeAnimatedImage - \internal -*/ - -/*! \qmlclass AnimatedImage QDeclarativeAnimatedImage \inherits Image \since 4.7 diff --git a/src/imports/particles/qdeclarativeparticles.cpp b/src/imports/particles/qdeclarativeparticles.cpp index 5cd9c0c..edb69bc 100644 --- a/src/imports/particles/qdeclarativeparticles.cpp +++ b/src/imports/particles/qdeclarativeparticles.cpp @@ -165,14 +165,6 @@ void QDeclarativeParticleMotion::destroy(QDeclarativeParticle &particle) It has no further properties. */ - -/*! - \internal - \class QDeclarativeParticleMotionLinear - \ingroup group_effects - \brief The QDeclarativeParticleMotionLinear class moves the particles linearly. -*/ - void QDeclarativeParticleMotionLinear::advance(QDeclarativeParticle &p, int interval) { p.x += interval * p.x_velocity; @@ -196,14 +188,6 @@ void QDeclarativeParticleMotionLinear::advance(QDeclarativeParticle &p, int inte */ /*! - \internal - \class QDeclarativeParticleMotionGravity - \ingroup group_effects - \brief The QDeclarativeParticleMotionGravity class moves the particles towards a point. - -*/ - -/*! \qmlproperty real ParticleMotionGravity::xattractor \qmlproperty real ParticleMotionGravity::yattractor These properties hold the x and y coordinates of the point attracting the particles. @@ -311,16 +295,6 @@ Rectangle { */ /*! - \internal - \class QDeclarativeParticleMotionWander - \ingroup group_effects - \brief The QDeclarativeParticleMotionWander class moves particles in a somewhat random fashion. - - The particles will continue roughly in the original direction, however will randomly - drift to each side. -*/ - -/*! \qmlproperty real ParticleMotionWander::xvariance \qmlproperty real ParticleMotionWander::yvariance @@ -709,13 +683,6 @@ Rectangle { \image particles.gif */ -/*! - \internal - \class QDeclarativeParticles - \ingroup group_effects - \brief The QDeclarativeParticles class generates and moves particles. -*/ - QDeclarativeParticles::QDeclarativeParticles(QDeclarativeItem *parent) : QDeclarativeItem(*(new QDeclarativeParticlesPrivate), parent) { -- cgit v0.12 From 7f69818e7dcd5b029010e5f930abed519956a8ff Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Fri, 27 Aug 2010 15:44:20 +1000 Subject: Cleanup --- src/declarative/qml/qdeclarativecompiler.cpp | 9 +++++---- src/declarative/qml/qdeclarativecontext.cpp | 8 +++----- src/declarative/qml/qdeclarativeparser_p.h | 7 +++---- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 34d33bb..f044e1a 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -668,13 +668,14 @@ void QDeclarativeCompiler::compileTree(Object *tree) QString scriptCode = QString::fromUtf8(unit->scripts.at(ii).resource->data); Object::ScriptBlock::Pragmas pragmas = QDeclarativeScriptParser::extractPragmas(scriptCode); + Q_ASSERT(!importedScripts.contains(unit->scripts.at(ii).qualifier)); + if (!scriptCode.isEmpty()) { Object::ScriptBlock &scriptBlock = importedScripts[unit->scripts.at(ii).qualifier]; - scriptBlock.codes.append(scriptCode); - scriptBlock.lineNumbers.append(1); - scriptBlock.files.append(unit->scripts.at(ii).resource->url); - scriptBlock.pragmas.append(pragmas); + scriptBlock.code = scriptCode; + scriptBlock.file = unit->scripts.at(ii).resource->url; + scriptBlock.pragmas = pragmas; } } diff --git a/src/declarative/qml/qdeclarativecontext.cpp b/src/declarative/qml/qdeclarativecontext.cpp index a3b16d9..de45a95 100644 --- a/src/declarative/qml/qdeclarativecontext.cpp +++ b/src/declarative/qml/qdeclarativecontext.cpp @@ -660,14 +660,12 @@ void QDeclarativeContextData::addImportedScript(const QDeclarativeParser::Object if (!engine) return; - Q_ASSERT(script.codes.count() == 1); - QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine); QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine); - const QString &code = script.codes.at(0); - const QString &url = script.files.at(0); - const QDeclarativeParser::Object::ScriptBlock::Pragmas &pragmas = script.pragmas.at(0); + const QString &code = script.code; + const QString &url = script.file; + const QDeclarativeParser::Object::ScriptBlock::Pragmas &pragmas = script.pragmas; Q_ASSERT(!url.isEmpty()); diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h index d192f3a..c58aebc 100644 --- a/src/declarative/qml/qdeclarativeparser_p.h +++ b/src/declarative/qml/qdeclarativeparser_p.h @@ -183,10 +183,9 @@ namespace QDeclarativeParser }; Q_DECLARE_FLAGS(Pragmas, Pragma) - QStringList codes; - QStringList files; - QList<int> lineNumbers; - QList<Pragmas> pragmas; + QString code; + QString file; + Pragmas pragmas; }; // The bytes to cast instances by to get to the QDeclarativeParserStatus -- cgit v0.12 From 74a7c2e6d179e809c93422c8aa590c922be6b6e8 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Fri, 27 Aug 2010 10:21:03 +0300 Subject: Updated some URLs and required tools versions for Symbian Reviewed-by: Janne Koskinen --- doc/src/getting-started/installation.qdoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index 629d8b7..708f166 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -1211,9 +1211,9 @@ applications using Qt for Symbian can start right away.} Qt for the Symbian platform requires the following software installed on your development PC: \list - \o \l{http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide_cpp/}{Carbide.c++ v2.0.0 or higher} + \o \l{http://www.forum.nokia.com/Library/Tools_and_downloads/Other/Carbide.c++/}{Carbide.c++ v2.3.0 or higher recommended}. \list - \o \bold{Note:} It may be necessary to update the Carbide compiler. + \o \bold{Note:} It may be necessary to update the Carbide compiler depending on Carbide version. See \l{http://pepper.troll.no/s60prereleases/patches/}{here} for instructions how to check your compiler version and how to patch it, if needed. \endlist @@ -1223,18 +1223,18 @@ applications using Qt for Symbian can start right away.} but that version is no longer available from ActiveState. However, Qt for Symbian has been successfully compiled using both 5.8.x and 5.10.x versions. \endlist - \o \l{http://www.forum.nokia.com/main/resources/tools_and_sdks/S60SDK/}{S60 Platform SDK 3rd Edition FP1 or higher} + \o \l{http://www.forum.nokia.com/info/sw.nokia.com/id/ec866fab-4b76-49f6-b5a5-af0631419e9c/S60_All_in_One_SDKs.html}{S60 Platform SDK 3rd Edition FP1 or higher} \list \o \bold{Note:} Users of \bold{S60 Platform SDK 3rd Edition FP1} also need special update. The update can be found \l{http://pepper.troll.no/s60prereleases/patches/}{here}. \endlist - \o \l{http://www.forum.nokia.com/main/resources/technologies/openc_cpp/}{Open C/C++ v1.6.0 or higher}. + \o \l{http://www.forum.nokia.com/info/sw.nokia.com/id/91d89929-fb8c-4d66-bea0-227e42df9053/Open_C_SDK_Plug-In.html}{Open C/C++ v1.7.5 or higher}. Install this to all Symbian SDKs you plan to use Qt with. \o Building Qt tools from scratch requires \l{http://www.mingw.org/}{MinGW 3.4.5 or higher}, or another windows compiler. \list \o \bold{Note:} This is not required if you are using pre-built binary package. \endlist - \o Building Qt libraries requires \l{http://www.arm.com/products/DevTools/RVCT.html}{RVCT} version 2.2 (build 686 or later), + \o Building Qt libraries requires \l{http://www.arm.com/products/tools/software-development-tools.php}{RVCT} version 2.2 (build 686 or later), which is not available free of charge. Usage of later versions of RVCT, including the 3.x and 4.x series, is not supported in this release. \endlist -- cgit v0.12 From bdcfcc607c1a6744cf1b35eca0914fa96e70071c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= <trond.kjernasen@nokia.com> Date: Fri, 27 Aug 2010 11:13:16 +0200 Subject: Apparently QPen::brush() can't return a NoBrush for a NoPen. There are explicit tests in qdatastream for this. IMO it's wrong, wrong, wrong, but it's currently abused in the SVG module so we can't change it. Reviewed-by: Gunnar --- src/gui/painting/qpainter.cpp | 8 ++++---- src/gui/painting/qpen.cpp | 2 -- tests/auto/qpen/tst_qpen.cpp | 8 -------- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index be90006..ee590a4 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -696,9 +696,9 @@ void QPainterPrivate::updateEmulationSpecifier(QPainterState *s) skip = false; - QBrush penBrush = s->pen.brush(); - Qt::BrushStyle brushStyle = s->brush.style(); - Qt::BrushStyle penBrushStyle = penBrush.style(); + QBrush penBrush = (qpen_style(s->pen) == Qt::NoPen) ? QBrush(Qt::NoBrush) : qpen_brush(s->pen); + Qt::BrushStyle brushStyle = qbrush_style(s->brush); + Qt::BrushStyle penBrushStyle = qbrush_style(penBrush); alpha = (penBrushStyle != Qt::NoBrush && (penBrushStyle < Qt::LinearGradientPattern && penBrush.color().alpha() != 255) && !penBrush.isOpaque()) @@ -5907,7 +5907,7 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText // Recreate the layout of the static text because the matrix or font has changed if (staticTextNeedsReinit) - staticText_d->init(); + staticText_d->init(); if (transformedPosition != staticText_d->position) { // Translate to actual position QFixed fx = QFixed::fromReal(transformedPosition.x()); diff --git a/src/gui/painting/qpen.cpp b/src/gui/painting/qpen.cpp index 5e158a4..2e43984 100644 --- a/src/gui/painting/qpen.cpp +++ b/src/gui/painting/qpen.cpp @@ -747,8 +747,6 @@ void QPen::setColor(const QColor &c) */ QBrush QPen::brush() const { - if (d->style == Qt::NoPen) - return Qt::NoBrush; return d->brush; } diff --git a/tests/auto/qpen/tst_qpen.cpp b/tests/auto/qpen/tst_qpen.cpp index 6ca4e13..b0c2cad 100644 --- a/tests/auto/qpen/tst_qpen.cpp +++ b/tests/auto/qpen/tst_qpen.cpp @@ -67,7 +67,6 @@ private slots: void constructor(); void constructor_data(); - void noPenNoBrush(); }; // Testing get/set functions @@ -214,12 +213,5 @@ void tst_QPen::stream() QCOMPARE(pen, cmp); } -void tst_QPen::noPenNoBrush() -{ - QPen pen; - pen.setStyle(Qt::NoPen); - QVERIFY(pen.brush().style() == Qt::NoBrush); -} - QTEST_APPLESS_MAIN(tst_QPen) #include "tst_qpen.moc" -- cgit v0.12 From a2fd1b5265b1c6e9b3d8e1a03ddb2675f5df748d Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Fri, 27 Aug 2010 12:28:40 +0200 Subject: Make sure propagated font in QGraphicsWidget can be set on a QPainter In QWidget and QGraphicsWidget, propagating fonts blank out the resolve mask, mainly to help in determining inheritance. This means that when the font is set on a QPainter with device and therefore resolved against the device font, none of the attributes in the font will take presedence and the font will essentially just be ignored. For QWidgets this has not been a problem due to the fact that the painter is opened on the widget, getting the propagated font as its device font. For QGraphicsWidget, however, the QPainter is opened on the viewport and the viewport's font will therefore override the propagated font when it's passed into setFont(). To fix this, we need the font returned by QGraphicsWidget::font() to contain the resolve mask of the inherited parts of its font as well. This is done last minute to avoid messing up the rules of inheritance in the QGraphicsWidget tree (problem arises e.g. in hierarchy A -> B -> C and a font is set on B which should override the font C has previously inherited from A.) Task-number: QTBUG-13188 Reviewed-by: Lars --- src/gui/graphicsview/qgraphicswidget.cpp | 4 +- src/gui/graphicsview/qgraphicswidget_p.cpp | 3 + tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp | 195 ++++++++++++++++++++- 3 files changed, 200 insertions(+), 2 deletions(-) diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp index 0fabd18..1bfe266 100644 --- a/src/gui/graphicsview/qgraphicswidget.cpp +++ b/src/gui/graphicsview/qgraphicswidget.cpp @@ -937,7 +937,9 @@ void QGraphicsWidget::setStyle(QStyle *style) QFont QGraphicsWidget::font() const { Q_D(const QGraphicsWidget); - return d->font; + QFont fnt = d->font; + fnt.resolve(fnt.resolve() | d->inheritedFontResolveMask); + return fnt; } void QGraphicsWidget::setFont(const QFont &font) { diff --git a/src/gui/graphicsview/qgraphicswidget_p.cpp b/src/gui/graphicsview/qgraphicswidget_p.cpp index f7850ca..3466733 100644 --- a/src/gui/graphicsview/qgraphicswidget_p.cpp +++ b/src/gui/graphicsview/qgraphicswidget_p.cpp @@ -254,7 +254,10 @@ void QGraphicsWidgetPrivate::setFont_helper(const QFont &font) void QGraphicsWidgetPrivate::resolveFont(uint inheritedMask) { + Q_Q(QGraphicsWidget); inheritedFontResolveMask = inheritedMask; + if (QGraphicsWidget *p = q->parentWidget()) + inheritedFontResolveMask |= p->d_func()->inheritedFontResolveMask; QFont naturalFont = naturalWidgetFont(); QFont resolvedFont = font.resolve(naturalFont); updateFont(resolvedFont); diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index e5628d1..ddc4f73 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -172,6 +172,12 @@ private slots: void itemChangeEvents(); void itemSendGeometryPosChangesDeactivated(); + void fontPropagatesResolveToChildren(); + void fontPropagatesResolveToGrandChildren(); + void fontPropagatesResolveInParentChange(); + void fontPropagatesResolveViaNonWidget(); + void fontPropagatesResolveFromScene(); + // Task fixes void task236127_bspTreeIndexFails(); void task243004_setStyleCrash(); @@ -622,6 +628,192 @@ void tst_QGraphicsWidget::font() QCOMPARE(widget.font().family(), font.family()); } +void tst_QGraphicsWidget::fontPropagatesResolveToChildren() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsWidget *child1 = new QGraphicsWidget(root); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + root->setFont(font); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *child3 = new QGraphicsWidget(); + child3->setParentItem(root); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(root->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child3->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveToGrandChildren() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsWidget *child1 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + root->setFont(font); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + QGraphicsWidget *grandChild3 = new QGraphicsWidget(child2); + + QGraphicsWidget *child3 = new QGraphicsWidget(); + QGraphicsWidget *grandChild4 = new QGraphicsWidget(child3); + QGraphicsWidget *grandChild5 = new QGraphicsWidget(child3); + child3->setParentItem(root); + grandChild5->setParentItem(child3); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild4->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild5->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveViaNonWidget() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsPixmapItem *child1 = new QGraphicsPixmapItem(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + root->setFont(font); + + QGraphicsPixmapItem *child2 = new QGraphicsPixmapItem(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + QGraphicsWidget *grandChild3 = new QGraphicsWidget(child2); + + QGraphicsPixmapItem *child3 = new QGraphicsPixmapItem(); + QGraphicsWidget *grandChild4 = new QGraphicsWidget(child3); + QGraphicsWidget *grandChild5 = new QGraphicsWidget(child3); + child3->setParentItem(root); + grandChild5->setParentItem(child3); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild4->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild5->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveFromScene() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + QGraphicsWidget *child1 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsScene scene; + scene.addItem(root); + + QFont font; + font.setItalic(true); + scene.setFont(font); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + QGraphicsWidget *grandChild3 = new QGraphicsWidget(child2); + + QGraphicsWidget *child3 = new QGraphicsWidget(); + QGraphicsWidget *grandChild4 = new QGraphicsWidget(child3); + QGraphicsWidget *grandChild5 = new QGraphicsWidget(child3); + child3->setParentItem(root); + grandChild5->setParentItem(child3); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(font.resolve(), uint(QFont::StyleResolved)); + QCOMPARE(root->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(child3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild3->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild4->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild5->font().resolve(), uint(QFont::StyleResolved)); +} + +void tst_QGraphicsWidget::fontPropagatesResolveInParentChange() +{ + QGraphicsWidget *root = new QGraphicsWidget(); + + QGraphicsWidget *child1 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild1 = new QGraphicsWidget(child1); + + QGraphicsWidget *child2 = new QGraphicsWidget(root); + QGraphicsWidget *grandChild2 = new QGraphicsWidget(child2); + + QGraphicsScene scene; + scene.addItem(root); + + QFont italicFont; + italicFont.setItalic(true); + child1->setFont(italicFont); + + QFont boldFont; + boldFont.setBold(true); + child2->setFont(boldFont); + + QVERIFY(grandChild1->font().italic()); + QVERIFY(!grandChild1->font().bold()); + QVERIFY(!grandChild2->font().italic()); + QVERIFY(grandChild2->font().bold()); + + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::WeightResolved)); + + grandChild2->setParentItem(child1); + + QGraphicsView view; + view.setScene(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QVERIFY(grandChild1->font().italic()); + QVERIFY(!grandChild1->font().bold()); + QVERIFY(grandChild2->font().italic()); + QVERIFY(!grandChild2->font().bold()); + + QCOMPARE(grandChild1->font().resolve(), uint(QFont::StyleResolved)); + QCOMPARE(grandChild2->font().resolve(), uint(QFont::StyleResolved)); + +} + void tst_QGraphicsWidget::fontPropagation() { QGraphicsWidget *root = new QGraphicsWidget; @@ -728,11 +920,12 @@ void tst_QGraphicsWidget::fontPropagationWidgetItemWidget() widget->setFont(font); QCOMPARE(widget2->font().pointSize(), 43); - QCOMPARE(widget2->font().resolve(), QFont().resolve()); + QCOMPARE(widget2->font().resolve(), uint(QFont::SizeResolved)); widget->setFont(QFont()); QCOMPARE(widget2->font().pointSize(), qApp->font().pointSize()); + QCOMPARE(widget2->font().resolve(), QFont().resolve()); } void tst_QGraphicsWidget::fontPropagationSceneChange() -- cgit v0.12 From 40b6c1dd9199ac5e0d6a1921b05c11e647d09dca Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Thu, 26 Aug 2010 16:16:59 +0200 Subject: Correct last right bearing in boundingBox(glyphs) Commit 07880542ecc479807c23c5646d263135240822ff introduced regression to QFontMetrics::boundingRect and QTextEngine::boundingBox on FT, XLFD and QPF font engine. Because on these platforms, rightBearing of the last glyphs is already removed from the width returned in glyph_metrics_t. Subtracting that rightBearing twice will cause the resulting boundingBox smaller than expected. This patch fix this by removing last right bearing accounting code from generic QTextEngine::boundingBox, instead, we put it into font engines that need them: QFontEngineWin, QCoreTextFontEngine, QFontEngineMac, QFontEngineS60 and QFontEngineQWS. So that the resulting width should be correct on all platforms without introducing any performance penalties. Task-number: QTBUG-6854, QTBUG-12950 Reviewed-by: Eskil --- src/gui/text/qfontengine.cpp | 12 ++++++++++++ src/gui/text/qfontengine_mac.mm | 17 +++++++++-------- src/gui/text/qfontengine_p.h | 1 + src/gui/text/qfontengine_qws.cpp | 2 +- src/gui/text/qfontengine_s60.cpp | 2 +- src/gui/text/qfontengine_win.cpp | 2 +- src/gui/text/qtextengine.cpp | 7 +------ 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 194c5f3..3f758b1 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -1093,6 +1093,18 @@ const QVector<QRgb> &QFontEngine::grayPalette() return *qt_grayPalette(); } +QFixed QFontEngine::lastRightBearing(const QGlyphLayout &glyphs, bool round) +{ + if (glyphs.numGlyphs >= 1) { + glyph_t glyph = glyphs.glyphs[glyphs.numGlyphs - 1]; + glyph_metrics_t gi = boundingBox(glyph); + if (gi.isValid()) + return round ? QFixed(qRound(gi.xoff - gi.x - gi.width)) + : QFixed(gi.xoff - gi.x - gi.width); + } + return 0; +} + // ------------------------------------------------------------------ // The box font engine // ------------------------------------------------------------------ diff --git a/src/gui/text/qfontengine_mac.mm b/src/gui/text/qfontengine_mac.mm index 91b6082..bdf3848 100644 --- a/src/gui/text/qfontengine_mac.mm +++ b/src/gui/text/qfontengine_mac.mm @@ -455,12 +455,13 @@ bool QCoreTextFontEngine::stringToCMap(const QChar *, int, QGlyphLayout *, int * glyph_metrics_t QCoreTextFontEngine::boundingBox(const QGlyphLayout &glyphs) { QFixed w; + bool round = fontDef.styleStrategy & QFont::ForceIntegerMetrics; + for (int i = 0; i < glyphs.numGlyphs; ++i) { - w += (fontDef.styleStrategy & QFont::ForceIntegerMetrics) - ? glyphs.effectiveAdvance(i).round() - : glyphs.effectiveAdvance(i); + w += round ? glyphs.effectiveAdvance(i).round() + : glyphs.effectiveAdvance(i); } - return glyph_metrics_t(0, -(ascent()), w, ascent()+descent(), w, 0); + return glyph_metrics_t(0, -(ascent()), w - lastRightBearing(glyphs, round), ascent()+descent(), w, 0); } glyph_metrics_t QCoreTextFontEngine::boundingBox(glyph_t glyph) { @@ -1480,12 +1481,12 @@ void QFontEngineMac::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFla glyph_metrics_t QFontEngineMac::boundingBox(const QGlyphLayout &glyphs) { QFixed w; + bool round = fontDef.styleStrategy & QFont::ForceIntegerMetrics; for (int i = 0; i < glyphs.numGlyphs; ++i) { - w += (fontDef.styleStrategy & QFont::ForceIntegerMetrics) - ? glyphs.effectiveAdvance(i).round() - : glyphs.effectiveAdvance(i); + w += round ? glyphs.effectiveAdvance(i).round() + : glyphs.effectiveAdvance(i); } - return glyph_metrics_t(0, -(ascent()), w, ascent()+descent(), w, 0); + return glyph_metrics_t(0, -(ascent()), w - lastRightBearing(glyphs, round), ascent()+descent(), w, 0); } glyph_metrics_t QFontEngineMac::boundingBox(glyph_t glyph) diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 922acfb..3b91cd8 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -253,6 +253,7 @@ public: protected: static const QVector<QRgb> &grayPalette(); + QFixed lastRightBearing(const QGlyphLayout &glyphs, bool round = false); private: struct GlyphCacheEntry { diff --git a/src/gui/text/qfontengine_qws.cpp b/src/gui/text/qfontengine_qws.cpp index a7a95d0..decc89c 100644 --- a/src/gui/text/qfontengine_qws.cpp +++ b/src/gui/text/qfontengine_qws.cpp @@ -557,7 +557,7 @@ glyph_metrics_t QFontEngineQPF1::boundingBox(const QGlyphLayout &glyphs) QFixed w = 0; for (int i = 0; i < glyphs.numGlyphs; ++i) w += glyphs.effectiveAdvance(i); - return glyph_metrics_t(0, -ascent(), w, ascent()+descent()+1, w, 0); + return glyph_metrics_t(0, -ascent(), w - lastRightBearing(glyphs), ascent()+descent()+1, w, 0); } glyph_metrics_t QFontEngineQPF1::boundingBox(glyph_t glyph) diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index 52a1fe7..2cc3f50 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -345,7 +345,7 @@ glyph_metrics_t QFontEngineS60::boundingBox(const QGlyphLayout &glyphs) for (int i = 0; i < glyphs.numGlyphs; ++i) w += glyphs.effectiveAdvance(i); - return glyph_metrics_t(0, -ascent(), w, ascent()+descent()+1, w, 0); + return glyph_metrics_t(0, -ascent(), w - lastRightBearing(glyphs), ascent()+descent()+1, w, 0); } glyph_metrics_t QFontEngineS60::boundingBox_const(glyph_t glyph) const diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index a805612..4bed2b5 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -487,7 +487,7 @@ glyph_metrics_t QFontEngineWin::boundingBox(const QGlyphLayout &glyphs) for (int i = 0; i < glyphs.numGlyphs; ++i) w += glyphs.effectiveAdvance(i); - return glyph_metrics_t(0, -tm.tmAscent, w, tm.tmHeight, w, 0); + return glyph_metrics_t(0, -tm.tmAscent, w - lastRightBearing(glyphs), tm.tmHeight, w, 0); } #ifndef Q_WS_WINCE diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 8d6dd6c..c30091e 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1646,7 +1646,6 @@ glyph_metrics_t QTextEngine::boundingBox(int from, int len) const for (int i = 0; i < layoutData->items.size(); i++) { const QScriptItem *si = layoutData->items.constData() + i; - QFontEngine *fe = fontEngine(*si); int pos = si->position; int ilen = length(i); @@ -1676,6 +1675,7 @@ glyph_metrics_t QTextEngine::boundingBox(int from, int len) const while (charFrom < ilen && logClusters[charFrom] == glyphStart) charFrom++; if (charFrom < ilen) { + QFontEngine *fe = fontEngine(*si); glyphStart = logClusters[charFrom]; int charEnd = from + len - 1 - pos; if (charEnd >= ilen) @@ -1694,11 +1694,6 @@ glyph_metrics_t QTextEngine::boundingBox(int from, int len) const gm.yoff += m.yoff; } } - - glyph_t glyph = glyphs.glyphs[logClusters[ilen - 1]]; - glyph_metrics_t gi = fe->boundingBox(glyph); - if (gi.isValid()) - gm.width -= qRound(gi.xoff - gi.x - gi.width); } } return gm; -- cgit v0.12 From 8bfe99b9e4673dc49106caa589449d670285d0ad Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Mon, 30 Aug 2010 17:53:33 +0200 Subject: Compilation after merge. a55f392edc2145a071d0d59cb0fc69b0d5205a76 removed include that was required by new code in master --- src/testlib/qtestcase.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 5934850..34d3712 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -54,6 +54,7 @@ #include <QtCore/qdir.h> #include <QtCore/qprocess.h> #include <QtCore/qdebug.h> +#include <QtCore/qdatetime.h> #include "QtTest/private/qtestlog_p.h" #include "QtTest/private/qtesttable_p.h" -- cgit v0.12 From 328d5f7784c41ca9d91459c32f464fcf95eff5ed Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Mon, 30 Aug 2010 18:11:05 +0200 Subject: Different version from the previous patch: use QElapsedTimer Reviewed-By: Olivier Goffart --- src/testlib/qtestcase.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 34d3712..aae2786 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -54,7 +54,6 @@ #include <QtCore/qdir.h> #include <QtCore/qprocess.h> #include <QtCore/qdebug.h> -#include <QtCore/qdatetime.h> #include "QtTest/private/qtestlog_p.h" #include "QtTest/private/qtesttable_p.h" @@ -957,7 +956,9 @@ void seedRandom() static bool randomSeeded = false; if (!randomSeeded) { if (!QTest::seedSet) { - QTest::seed = QDateTime::currentDateTime().toTime_t(); + QElapsedTimer timer; + timer.start(); + QTest::seed = timer.msecsSinceReference(); } qsrand(QTest::seed); randomSeeded = true; -- cgit v0.12