summaryrefslogtreecommitdiffstats
path: root/CTestCustom.cmake.in
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-01-26 14:51:50 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2015-01-26 14:51:50 (GMT)
commit1337576b24feef973fca7cc45c695b495b3f8a5e (patch)
treeaccb2623fa2a26782346091e0fe3ce4606ac58c0 /CTestCustom.cmake.in
parente71c35ff26df370121871dc7cc7fe9b585dac570 (diff)
parent0abd3e538eb92259e52c3d330e46dac7aa0be332 (diff)
downloadCMake-1337576b24feef973fca7cc45c695b495b3f8a5e.zip
CMake-1337576b24feef973fca7cc45c695b495b3f8a5e.tar.gz
CMake-1337576b24feef973fca7cc45c695b495b3f8a5e.tar.bz2
Merge topic 'curl-default-cainfo'
0abd3e53 cmake: Use a default CA path when not using system curl 6ce346c5 curl: Add CURL_CA_PATH option to CMake build process
Diffstat (limited to 'CTestCustom.cmake.in')
0 files changed, 0 insertions, 0 deletions
-- cgit v0.12 From 73fb20bc600546e5c7d7e0ad41b28a9b7856665a Mon Sep 17 00:00:00 2001 From: aavit Date: Thu, 25 Nov 2010 12:14:51 +0100 Subject: Avoid race condition: don't quit until new executable is ready --- tests/arthur/baselineserver/src/baselineserver.cpp | 2 ++ tests/arthur/common/baselineprotocol.pri | 1 + 2 files changed, 3 insertions(+) diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp index 0399224..fbf68f5 100644 --- a/tests/arthur/baselineserver/src/baselineserver.cpp +++ b/tests/arthur/baselineserver/src/baselineserver.cpp @@ -97,6 +97,8 @@ void BaselineServer::heartbeat() QFileInfo me(QCoreApplication::applicationFilePath()); if (me.lastModified() == meLastMod) return; + if (!me.exists() || !me.isExecutable()) + return; //# (could close() here to avoid accepting new connections, to avoid livelock) //# also, could check for a timeout to force exit, to avoid hung threads blocking diff --git a/tests/arthur/common/baselineprotocol.pri b/tests/arthur/common/baselineprotocol.pri index 996f9d5..62e38a6 100644 --- a/tests/arthur/common/baselineprotocol.pri +++ b/tests/arthur/common/baselineprotocol.pri @@ -1,4 +1,5 @@ INCLUDEPATH += $$PWD +DEPENDPATH += $$PWD QT *= network -- cgit v0.12 From a0be2bb3f5a7f71f1e77ca7b8907e49b8e16bef3 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Thu, 25 Nov 2010 13:50:27 +0100 Subject: Doc: Fixed a snippet to show QML comments. Task-number: QTBUG-15584 --- doc/src/snippets/declarative/comments.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/src/snippets/declarative/comments.qml b/doc/src/snippets/declarative/comments.qml index a8e47ad..97659a5 100644 --- a/doc/src/snippets/declarative/comments.qml +++ b/doc/src/snippets/declarative/comments.qml @@ -38,7 +38,6 @@ ** ****************************************************************************/ -//![0] import QtQuick 1.0 //![0] -- cgit v0.12 From dcce5c796e5cd5cb090f1c395e483269bab01566 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Thu, 25 Nov 2010 13:56:29 +0100 Subject: Doc: Fixed whitespace. --- .../qmlvisual/webview/flickable/flickweb.qml | 70 +++++++++++----------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml b/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml index 6063226..af09389 100644 --- a/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml +++ b/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml @@ -1,35 +1,35 @@ -import QtQuick 1.0 -import QtWebKit 1.0 - -Flickable { - id: flickable - width: 320 - height: 200 - contentWidth: Math.max(flickable.width,webView.width) - contentHeight: Math.max(flickable.height,webView.height) - pressDelay: 100 - - WebView { - id: webView - transformOrigin: Item.TopLeft - smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions - url: "test.html" - preferredWidth: flickable.width - preferredHeight: flickable.height - contentsScale: 1 - onContentsSizeChanged: { - // zoom out - contentsScale = Math.min(1,flickable.width / contentsSize.width) - } - } - - Rectangle { - id: button - width: 50; height: 50; color: "red" - MouseArea { - anchors.fill: parent - onPressed: button.color = "blue" - onReleased: button.color = "green" - } - } -} +import QtQuick 1.0 +import QtWebKit 1.0 + +Flickable { + id: flickable + width: 320 + height: 200 + contentWidth: Math.max(flickable.width,webView.width) + contentHeight: Math.max(flickable.height,webView.height) + pressDelay: 100 + + WebView { + id: webView + transformOrigin: Item.TopLeft + smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions + url: "test.html" + preferredWidth: flickable.width + preferredHeight: flickable.height + contentsScale: 1 + onContentsSizeChanged: { + // zoom out + contentsScale = Math.min(1,flickable.width / contentsSize.width) + } + } + + Rectangle { + id: button + width: 50; height: 50; color: "red" + MouseArea { + anchors.fill: parent + onPressed: button.color = "blue" + onReleased: button.color = "green" + } + } +} -- cgit v0.12 From 3fe96820ea6830cb76793602f9f51fb961e70976 Mon Sep 17 00:00:00 2001 From: Geir Vattekar Date: Fri, 26 Nov 2010 08:41:37 +0100 Subject: Doc: Removed two warnings from QDirIterator docs Task-number: QTBUG-15492 --- src/corelib/io/qdiriterator.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp index fd4b9c1..dbb333f 100644 --- a/src/corelib/io/qdiriterator.cpp +++ b/src/corelib/io/qdiriterator.cpp @@ -389,9 +389,6 @@ QDirIterator::QDirIterator(const QDir &dir, IteratorFlags flags) \note To list symlinks that point to non existing files, QDir::System must be passed to the flags. - \warning This constructor expects \a flags to be left at its default value. Use - the constructors that do not take the \a filters argument instead. - \sa hasNext(), next(), IteratorFlags */ QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, IteratorFlags flags) @@ -429,9 +426,6 @@ QDirIterator::QDirIterator(const QString &path, IteratorFlags flags) \note To list symlinks that point to non existing files, QDir::System must be passed to the flags. - \warning This constructor expects \c flags to be left at its default value. Use the - constructors that do not take the \a filters argument instead. - \sa hasNext(), next(), IteratorFlags */ QDirIterator::QDirIterator(const QString &path, const QStringList &nameFilters, -- cgit v0.12 From 5f70c3d9004765f8f86e3472cf59cfa7677f9163 Mon Sep 17 00:00:00 2001 From: Geir Vattekar Date: Fri, 26 Nov 2010 09:29:26 +0100 Subject: Doc:Fix paths in styleplugin/echoplugin .pro files Task-number: QTBUG-14169 --- examples/tools/echoplugin/echowindow/echowindow.pro | 4 ++-- examples/tools/styleplugin/plugin/plugin.pro | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/tools/echoplugin/echowindow/echowindow.pro b/examples/tools/echoplugin/echowindow/echowindow.pro index bdf8c41..d56961c 100644 --- a/examples/tools/echoplugin/echowindow/echowindow.pro +++ b/examples/tools/echoplugin/echowindow/echowindow.pro @@ -5,8 +5,8 @@ SOURCES = echowindow.cpp \ TARGET = echoplugin win32 { - debug:DESTDIR = ../debug/ - release:DESTDIR = ../release/ + CONFIG(debug, release|debug):DESTDIR = ../debug/ + CONFIG(release, release|debug):DESTDIR = ../release/ } else { DESTDIR = ../ } diff --git a/examples/tools/styleplugin/plugin/plugin.pro b/examples/tools/styleplugin/plugin/plugin.pro index 7cb0c97..54e266c 100644 --- a/examples/tools/styleplugin/plugin/plugin.pro +++ b/examples/tools/styleplugin/plugin/plugin.pro @@ -8,8 +8,8 @@ SOURCES = simplestyle.cpp \ TARGET = simplestyleplugin #! [0] win32 { - debug:DESTDIR = ../debug/styles/ - release:DESTDIR = ../release/styles/ + CONFIG(debug, release|debug):DESTDIR = ../debug/styles/ + CONFIG(release, release|debug):DESTDIR = ../release/styles/ } else { DESTDIR = ../styles/ } -- cgit v0.12 From 16c3df54960b776f35f59288b888e829e7e81002 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 30 Nov 2010 12:09:48 +0100 Subject: Fixed incorrect angle values in the RotationAnimation description. Task-number: QTBUG-15696 --- src/declarative/util/qdeclarativeanimation.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index f2e6217..dd7e5fd 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -1324,7 +1324,7 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) /*! \qmlclass RotationAnimation QDeclarativeRotationAnimation - \ingroup qml-animation-transition + \ingroup qml-animation-transition \since 4.7 \inherits PropertyAnimation \brief The RotationAnimation element animates changes in rotation values. @@ -1333,8 +1333,8 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) 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 + of the numerical change; a rotation from 0 to 240 will rotate 240 degrees + clockwise, while a rotation from 240 to 0 will rotate 240 degrees counterclockwise. The \l direction property can be set to specify the direction in which the rotation should occur. @@ -1342,7 +1342,7 @@ void QDeclarativeVector3dAnimation::setTo(QVector3D t) between states via the shortest path: \snippet doc/src/snippets/declarative/rotationanimation.qml 0 - + 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 -- cgit v0.12 From 993f9b23d72ec74453163413403d0cf06d9f08f4 Mon Sep 17 00:00:00 2001 From: aavit Date: Thu, 2 Dec 2010 15:23:13 +0100 Subject: Added new View command on reports --- tests/arthur/baselineserver/src/baselineserver.cpp | 8 +++ tests/arthur/baselineserver/src/baselineserver.h | 1 + tests/arthur/baselineserver/src/baselineserver.pro | 3 + tests/arthur/baselineserver/src/baselineserver.qrc | 5 ++ tests/arthur/baselineserver/src/htmlpage.cpp | 18 +++-- .../arthur/baselineserver/src/templates/view.html | 79 ++++++++++++++++++++++ 6 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 tests/arthur/baselineserver/src/baselineserver.qrc create mode 100644 tests/arthur/baselineserver/src/templates/view.html diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp index fbf68f5..53e40b6 100644 --- a/tests/arthur/baselineserver/src/baselineserver.cpp +++ b/tests/arthur/baselineserver/src/baselineserver.cpp @@ -355,6 +355,14 @@ QString BaselineHandler::pathForItem(const ImageItem &item, bool isBaseline, boo } +QString BaselineHandler::view(const QString &baseline, const QString &rendered, const QString &compared) +{ + QFile f(":/templates/view.html"); + f.open(QIODevice::ReadOnly); + return QString::fromLatin1(f.readAll()).arg('/'+baseline, '/'+rendered, '/'+compared); +} + + QString BaselineHandler::clearAllBaselines(const QString &context) { int tot = 0; diff --git a/tests/arthur/baselineserver/src/baselineserver.h b/tests/arthur/baselineserver/src/baselineserver.h index c5cb45e..346ce1f 100644 --- a/tests/arthur/baselineserver/src/baselineserver.h +++ b/tests/arthur/baselineserver/src/baselineserver.h @@ -100,6 +100,7 @@ public: BaselineHandler(int socketDescriptor = -1); void testPathMapping(); + static QString view(const QString &baseline, const QString &rendered, const QString &compared); static QString clearAllBaselines(const QString &context); static QString updateSingleBaseline(const QString &oldBaseline, const QString &newBaseline); static QString blacklistTest(const QString &context, const QString &itemId, bool removeFromBlacklist = false); diff --git a/tests/arthur/baselineserver/src/baselineserver.pro b/tests/arthur/baselineserver/src/baselineserver.pro index a7be03d..defa05a 100644 --- a/tests/arthur/baselineserver/src/baselineserver.pro +++ b/tests/arthur/baselineserver/src/baselineserver.pro @@ -25,3 +25,6 @@ SOURCES += main.cpp \ HEADERS += \ baselineserver.h \ htmlpage.h + +RESOURCES += \ + baselineserver.qrc diff --git a/tests/arthur/baselineserver/src/baselineserver.qrc b/tests/arthur/baselineserver/src/baselineserver.qrc new file mode 100644 index 0000000..b5cd6af --- /dev/null +++ b/tests/arthur/baselineserver/src/baselineserver.qrc @@ -0,0 +1,5 @@ + + + templates/view.html + + diff --git a/tests/arthur/baselineserver/src/htmlpage.cpp b/tests/arthur/baselineserver/src/htmlpage.cpp index 9659505..11c2eac 100644 --- a/tests/arthur/baselineserver/src/htmlpage.cpp +++ b/tests/arthur/baselineserver/src/htmlpage.cpp @@ -131,10 +131,13 @@ void HTMLPage::addItem(const QString &baseline, const QString &rendered, const I foreach(const QString& img, images) out << "\n"; - out << "

Replace baseline with rendered

" + out << "\n" + << "

Replace baseline with rendered

\n" << "

Blacklist this item

" + << "&itemId=" << item.scriptName << "&url=" << pageUrl << "\">Blacklist this item

\n" + << "

View

\n" << "\n"; out << "\n\n"; @@ -213,12 +216,15 @@ void HTMLPage::handleCGIQuery(const QString &query) QTextStream s(stdout); s << "Content-Type: text/html\r\n\r\n" << ""; -// << "Contents of QUERY_STRING:
" -// << "Full string = " << query << "
"; QString command(cgiUrl.queryItemValue("cmd")); - if (command == QLS("updateSingleBaseline")) { + if (command == QLS("view")) { + s << BaselineHandler::view(cgiUrl.queryItemValue(QLS("baseline")), + cgiUrl.queryItemValue(QLS("rendered")), + cgiUrl.queryItemValue(QLS("compared"))); + } + else if (command == QLS("updateSingleBaseline")) { s << BaselineHandler::updateSingleBaseline(cgiUrl.queryItemValue(QLS("oldBaseline")), cgiUrl.queryItemValue(QLS("newBaseline"))); } else if (command == QLS("clearAllBaselines")) { diff --git a/tests/arthur/baselineserver/src/templates/view.html b/tests/arthur/baselineserver/src/templates/view.html new file mode 100644 index 0000000..c048f47 --- /dev/null +++ b/tests/arthur/baselineserver/src/templates/view.html @@ -0,0 +1,79 @@ +

Lancelot Viewer

+ +

+Zoom: +1x +2x +4x +

+ +

+ + + + + + + + + + + + +
Baseline%1
Rendered%2
Differences

+ + +

+ +

+ + -- cgit v0.12 From be41c140594ccea16ce17ccca7251d614cc75e1e Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Mon, 6 Dec 2010 08:47:32 +0100 Subject: Propegate fullscreen screen size back to toplevel widgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed by: Jørgen Lind --- src/plugins/platforms/eglfs/qeglfswindow.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp index d0e15d3..b5b7e05 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.cpp +++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp @@ -62,6 +62,9 @@ void QEglFSWindow::setGeometry(const QRect &) QRect rect(m_screen->availableGeometry()); QWindowSystemInterface::handleGeometryChange(this->widget(), rect); + // Since toplevels are fullscreen, propegate the screen size back to the widget + widget()->setGeometry(rect); + QPlatformWindow::setGeometry(rect); } -- cgit v0.12 From 19b1ab1f2f4df72621b1bef43a4a24286ae12657 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 16:07:06 +0100 Subject: Fixed a bug by changing the id name to lower case. --- doc/src/getting-started/gettingstartedqml.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc index b767587..e3977bb 100644 --- a/doc/src/getting-started/gettingstartedqml.qdoc +++ b/doc/src/getting-started/gettingstartedqml.qdoc @@ -148,7 +148,7 @@ \code Rectangle { - id:Button + id: button ... property color buttonColor: "lightblue" -- cgit v0.12 From 9679add86ec1562d24d587c6c2343c47ca4b61d7 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 16:09:26 +0100 Subject: Some whitespace fixes. --- doc/src/declarative/modules.qdoc | 64 ++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index 011eb63..2a2e4ff 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -31,14 +31,14 @@ \section1 QML Modules -A module is a set of QML content files that can be imported as a unit into a QML +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 +and they can use a versioning mechanism that allows for independent upgradability of the modules. 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 +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 @@ -54,13 +54,13 @@ This can be seen in the snippet commonly found at the top of QML files: \qml import QtQuick 1.0 \endqml - -This imports version 4.7 of the "Qt" module into the global namespace. (The QML + +This imports version 1.0 of the "QtQuick" 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: +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). @@ -87,8 +87,8 @@ directory using a relative or absolute path, like this: MyQMLProject |- MyComponents |- Slider.qml - |- CheckBox.qml - |- Main + |- CheckBox.qml + |- Main |- application.qml \endcode @@ -112,7 +112,7 @@ be imported like this: 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 +\l {#qmldirexample}{example} below. The qmldir file is optional for modules on the local filesystem. @@ -121,8 +121,8 @@ the local filesystem. 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 +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 @@ -131,7 +131,7 @@ used, with a mandatory version number: \endcode Installed modules that are installed into the import path or created -as a \l{QDeclarativeExtensionPlugin}{QML C++ plugin} must define a +as a \l{QDeclarativeExtensionPlugin}{QML C++ plugin} must define a \l{Writing a qmldir file}{qmldir file}. @@ -142,7 +142,7 @@ The default import path includes: \list \o The directory of the current file -\o The location specified by QLibraryInfo::ImportsPath +\o The location specified by QLibraryInfo::ImportsPath \o Paths specified by the \c QML_IMPORT_PATH environment variable \endlist @@ -153,10 +153,10 @@ When running the \l {QML Viewer}, use the \c -I option to add paths to the impor \section2 Creating installed modules in C++ -C++ applications can dynamically define installed modules using -qmlRegisterType(). +C++ applications can dynamically define installed modules using +qmlRegisterType(). -For \l{QDeclarativeExtensionPlugin}{QML C++ plugins}, the +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 @@ -167,7 +167,7 @@ in QML, like this: import com.nokia.TimeExample 1.0 \endcode -A \l{QDeclarativeExtensionPlugin}{QML C++ plugin} also requires a +A \l{QDeclarativeExtensionPlugin}{QML C++ plugin} also requires a \l{Writing a qmldir file}{qmldir file} to make it available to the QML engine. @@ -190,9 +190,9 @@ Types from these modules can then only be used when qualified by the namespace: \qml QtLibrary.Rectangle { ... } - + MyComponents.Slider { ... } - + MyModule.SomeComponent { ... } \endqml @@ -209,7 +209,7 @@ JavaScript files must always be imported with a named import: \qml import "somescript.js" as MyScript - + Item { //... Component.onCompleted: MyScript.doSomething() @@ -220,8 +220,8 @@ JavaScript files must always be imported with a named import: \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 +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: @@ -237,7 +237,7 @@ plugin [] \bold { [] } lines are used to add QML files as types. is the type being made available, the optional is a version -number, and is the (relative) file name of the QML file defining the type. +number, and 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 @@ -264,10 +264,10 @@ provide those identifiers. \bold {plugin []} lines are used to add \l{QDeclarativeExtensionPlugin}{QML C++ plugins} to the module. 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. +\c libMyAppTypes.so on Linux and \c MyAppTypes.dll on Windows. 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 +plugin file, or a relative path from the directory containing the \c qmldir file to the directory 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. @@ -275,7 +275,7 @@ file. The plugin search path can be queried with QDeclarativeEngine::pluginPathL \target qmldirexample \section2 Example -If the components in the \c MyComponents directory from the +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: @@ -284,7 +284,7 @@ ComponentA 1.0 ComponentA.qml ComponentB 1.0 ComponentB.qml \endcode -The \c MyComponents directory could then be imported as a module using: +The \c MyComponents directory could then be imported as a module using: \code import "http://the-server-name.com/MyComponents" @@ -298,15 +298,15 @@ a later version is used, as the \c qmldir file specifies that these elements are only available in the 1.0 version. -For examples of \c qmldir files for plugins, see the -\l {declarative/cppextensions/plugins}{Plugins} example and +For examples of \c qmldir files for plugins, see the +\l {declarative/cppextensions/plugins}{Plugins} example and \l {Tutorial: Writing QML extensions with C++}. \section1 Debugging The \c QML_IMPORT_TRACE environment variable can be useful for debugging -when there are problems with finding and loading modules. See +when there are problems with finding and loading modules. See \l{Debugging module imports} for more information. -- cgit v0.12 From 686dfda2146a84e6653faa56a1484e84571cc4fa Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 17:39:21 +0100 Subject: Fixed link to qtestlib-tools by adding link to qt-webpages.qdoc. Link is now linking to the gitorious project site. Task-number: QTBUG-15714 Reviewed-by: David Boddie --- doc/src/development/qtestlib.qdoc | 29 ++++++++++++++--------------- doc/src/qt-webpages.qdoc | 10 ++++++++++ 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/doc/src/development/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc index e53957f..08fdfc6 100644 --- a/doc/src/development/qtestlib.qdoc +++ b/doc/src/development/qtestlib.qdoc @@ -245,10 +245,10 @@ \endtable In short, walltime is always available but requires many repetitions to - get a useful result. - Tick counters are usually available and can provide - results with fewer repetitions, but can be susceptible to CPU frequency - scaling issues. + get a useful result. + Tick counters are usually available and can provide + results with fewer repetitions, but can be susceptible to CPU frequency + scaling issues. Valgrind provides exact results, but does not take I/O waits into account, and is only available on a limited number of platforms. @@ -264,7 +264,7 @@ See the chapter 5 in the \l{QTestLib Tutorial} for more benchmarking examples. \section1 Using QTestLib remotely on Windows CE - \c cetest is a convenience application which helps the user to launch an + \c cetest is a convenience application which helps the user to launch an application remotely on a Windows CE device or emulator. It needs to be executed after the unit test has been successfully compiled. @@ -717,15 +717,15 @@ \section1 Writing a Benchmark To create a benchmark we extend a test function with a QBENCHMARK macro. - A benchmark test function will then typically consist of setup code and + A benchmark test function will then typically consist of setup code and a QBENCHMARK macro that contains the code to be measured. This test function benchmarks QString::localeAwareCompare(). \snippet examples/qtestlib/tutorial5/benchmarking.cpp 0 - Setup can be done at the beginning of the function, the clock is not + Setup can be done at the beginning of the function, the clock is not running at this point. The code inside the QBENCHMARK macro will be - measured, and possibly repeated several times in order to get an + measured, and possibly repeated several times in order to get an accurate measurement. Several \l {testlib-benchmarking-measurement}{back-ends} are available @@ -733,7 +733,7 @@ \section1 Data Functions - Data functions are useful for creating benchmarks that compare + Data functions are useful for creating benchmarks that compare multiple data inputs, for example locale aware compare against standard compare. @@ -743,20 +743,19 @@ \snippet examples/qtestlib/tutorial5/benchmarking.cpp 2 - The "if(useLocaleCompare)" switch is placed outside the QBENCHMARK + The "if(useLocaleCompare)" switch is placed outside the QBENCHMARK macro to avoid measuring its overhead. Each benchmark test function - can have one active QBENCHMARK macro. + can have one active QBENCHMARK macro. \section1 External Tools Tools for handling and visualizing test data are available as part of - the qtestlib-tools project on the - \l{http://labs.qt.nokia.com/}{http://labs.qt.nokia.com/}Qt Labs Web site. + the \l {qtestlib-tools} project in the \l{Qt Labs} web site. These include a tool for comparing performance data obtained from test runs and a utility to generate Web-based graphs of performance data. - See the \l{qtestlib-tools Announcement} for more information on these - tools and a simple graphing example. + See the \l{qtestlib-tools Announcement}{qtestlib-tools announcement} + for more information on these tools and a simple graphing example. */ diff --git a/doc/src/qt-webpages.qdoc b/doc/src/qt-webpages.qdoc index 05817df..b7b9fba 100644 --- a/doc/src/qt-webpages.qdoc +++ b/doc/src/qt-webpages.qdoc @@ -239,3 +239,13 @@ \externalpage http://get.qt.nokia.com/nokiasmartinstaller/ \title Smart Installer */ + +/*! + \externalpage http://qt.gitorious.org/qt-labs/qtestlib-tools + \title qtestlib-tools +*/ + +/*! + \externalpage http://labs.qt.nokia.com + \title Qt Labs +*/ -- cgit v0.12 From 1eb7dca7fe6a81bada556c1310905be08e1b1d10 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 17:43:31 +0100 Subject: Added QML coding convention for "private" properties. Private properties start with two underscores. __property Reviewed-by: David Boddie --- doc/src/declarative/codingconventions.qdoc | 18 ++++++-- .../declarative/codingconventions/private.qml | 49 ++++++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 doc/src/snippets/declarative/codingconventions/private.qml diff --git a/doc/src/declarative/codingconventions.qdoc b/doc/src/declarative/codingconventions.qdoc index ba789e0..3f92d46 100644 --- a/doc/src/declarative/codingconventions.qdoc +++ b/doc/src/declarative/codingconventions.qdoc @@ -35,7 +35,7 @@ This page assumes that you are already familiar with the QML language. If you need an introduction to the language, please read \l {Introduction to the QML language}{the QML introduction} first. -\section1 QML objects +\section1 QML Objects Through our documentation and examples, QML objects are always structured in the following order: @@ -58,7 +58,7 @@ For example, a hypothetical \e photo QML object would look like this: \snippet doc/src/snippets/declarative/codingconventions/photo.qml 0 -\section1 Grouped properties +\section1 Grouped Properties If using multiple properties from a group of properties, we use the \e {group notation} rather than the \e {dot notation} to improve readability. @@ -72,6 +72,18 @@ can be written like this: \snippet doc/src/snippets/declarative/codingconventions/dotproperties.qml 1 +\section1 Private Properties + +QML and JavaScript do not enforce private properties like C++. There is a need +to hide these private properties, for example, when the properties are part of +the implementation. As a convention, private properties begin with two +\e underscore characters. For example, \c __area, is a property that is +accessible but is not meant for public use. Note that QML and JavaScript will +grant the user access to these properties. + +\snippet doc/src/snippets/declarative/codingconventions/private.qml 0 + + \section1 Lists If a list contains only one element, we generally omit the square brackets. @@ -87,7 +99,7 @@ we will write this: \snippet doc/src/snippets/declarative/codingconventions/lists.qml 1 -\section1 JavaScript code +\section1 JavaScript Code If the script is a single expression, we recommend writing it inline: diff --git a/doc/src/snippets/declarative/codingconventions/private.qml b/doc/src/snippets/declarative/codingconventions/private.qml new file mode 100644 index 0000000..1d3dda8 --- /dev/null +++ b/doc/src/snippets/declarative/codingconventions/private.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +import QtQuick 1.0 + +//! [0] +Item { + id: component + width: 40; height: 50 + property real __area: width * height * 0.5 //not meant for outside use +} +//! [0] -- cgit v0.12 From 608b66b5af75ae6982be428439eea735c00cc455 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 17:46:28 +0100 Subject: Fixed the QML Focus document. Fixed snippets, images, and formatting. Reviewed-by: David Boddie --- doc/src/declarative/focus.qdoc | 339 ++++++++------------- doc/src/images/declarative-qmlfocus1.png | Bin 0 -> 1890 bytes doc/src/images/declarative-qmlfocus2.png | Bin 0 -> 2756 bytes doc/src/images/declarative-qmlfocus3.png | Bin 0 -> 2743 bytes doc/src/images/declarative-qmlfocus4.png | Bin 0 -> 4137 bytes doc/src/images/declarative-qmlfocus5.png | Bin 0 -> 1376 bytes .../snippets/declarative/focus/advancedFocus.qml | 67 ++++ doc/src/snippets/declarative/focus/basicwidget.qml | 59 ++++ .../snippets/declarative/focus/clickablewidget.qml | 61 ++++ doc/src/snippets/declarative/focus/focusColumn.qml | 25 ++ .../declarative/focus/focusscopewidget.qml | 61 ++++ .../declarative/focus/myclickablewidget.qml | 69 +++++ .../declarative/focus/myfocusscopewidget.qml | 66 ++++ doc/src/snippets/declarative/focus/mywidget.qml | 58 ++++ doc/src/snippets/declarative/focus/qmldir | 4 + doc/src/snippets/declarative/focus/rectangle.qml | 62 ++++ doc/src/snippets/declarative/focus/widget.qml | 61 ++++ 17 files changed, 713 insertions(+), 219 deletions(-) create mode 100644 doc/src/images/declarative-qmlfocus1.png create mode 100644 doc/src/images/declarative-qmlfocus2.png create mode 100644 doc/src/images/declarative-qmlfocus3.png create mode 100644 doc/src/images/declarative-qmlfocus4.png create mode 100644 doc/src/images/declarative-qmlfocus5.png create mode 100644 doc/src/snippets/declarative/focus/advancedFocus.qml create mode 100644 doc/src/snippets/declarative/focus/basicwidget.qml create mode 100644 doc/src/snippets/declarative/focus/clickablewidget.qml create mode 100644 doc/src/snippets/declarative/focus/focusColumn.qml create mode 100644 doc/src/snippets/declarative/focus/focusscopewidget.qml create mode 100644 doc/src/snippets/declarative/focus/myclickablewidget.qml create mode 100644 doc/src/snippets/declarative/focus/myfocusscopewidget.qml create mode 100644 doc/src/snippets/declarative/focus/mywidget.qml create mode 100644 doc/src/snippets/declarative/focus/qmldir create mode 100644 doc/src/snippets/declarative/focus/rectangle.qml create mode 100644 doc/src/snippets/declarative/focus/widget.qml diff --git a/doc/src/declarative/focus.qdoc b/doc/src/declarative/focus.qdoc index 2e74fe0..ae72c3c 100644 --- a/doc/src/declarative/focus.qdoc +++ b/doc/src/declarative/focus.qdoc @@ -31,7 +31,7 @@ \title Keyboard Focus in QML When a key is pressed or released, a key event is generated and delivered to the -focused QML \l Item. To facilitate the construction of reusable components +focused QML \l Item. To facilitate the construction of reusable components and to address some of the cases unique to fluid user interfaces, the QML items add a \e scope based extension to Qt's traditional keyboard focus model. @@ -42,27 +42,21 @@ and to address some of the cases unique to fluid user interfaces, the QML items When the user presses or releases a key, the following occurs: \list 1 \o Qt receives the key action and generates a key event. -\o If the Qt widget containing the \l QDeclarativeView has focus, the key event is delivered to it. Otherwise, regular Qt key handling continues. -\o The key event is delivered by the scene to the QML \l Item with \e {active focus}. If no \l Item has \e {active focus}, the key event is \l {QEvent::ignore()}{ignored} and regular Qt key handling continues. -\o If the QML \l Item with \e {active focus} accepts the key event, propagation stops. Otherwise the event is "bubbled up", by recursively passing it to each \l Item's parent until either the event is accepted, or the root \l Item is reached. - -If the \c {Rectangle} element in the following example has active focus and the \e A key is pressed, -it will bubble up to its parent. However, pressing the \e B key will bubble up to the root -item and thus subsequently be \l {QEvent::ignore()}{ignored}. - -\code -Item { - Item { - Keys.onPressed: { - if (event.key == Qt.Key_A) { - console.log('Key A was pressed'); - event.accepted = true; - } - } - Rectangle {} - } -} -\endcode +\o If the Qt widget containing the \l QDeclarativeView has focus, the key event +is delivered to it. Otherwise, regular Qt key handling continues. +\o The key event is delivered by the scene to the QML \l Item with +\e {active focus}. If no Item has active focus, the key event is +\l {QEvent::ignore()}{ignored} and regular Qt key handling continues. +\o If the QML Item with active focus accepts the key event, propagation +stops. Otherwise the event is "bubbled up", by recursively passing it to each +Item's parent until either the event is accepted, or the root Item is reached. + +If the \c {Rectangle} element in the following example has active focus and the \c A key is pressed, +it will bubble up to its parent. However, pressing the \c B key will bubble up to the root +item and thus subsequently be ignored. + +\snippet doc/src/snippets/declarative/focus/rectangle.qml simple key event +\snippet doc/src/snippets/declarative/focus/rectangle.qml simple key event end \o If the root \l Item is reached, the key event is \l {QEvent::ignore()}{ignored} and regular Qt key handling continues. @@ -72,232 +66,139 @@ 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::activeFocus}. For example, here we have a \l Text -element whose text is determined by whether or not it has \e {active focus}. +Whether or not an \l Item has active focus can be queried through the +property \c {Item::activeFocus} property. For example, here we have a \l Text +element whose text is determined by whether or not it has active focus. -\code -Text { - text: activeFocus ? "I have active focus!" : "I do not have active focus" -} -\endcode +\snippet doc/src/snippets/declarative/focus/rectangle.qml active focus \section1 Acquiring Focus and Focus Scopes -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 {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. - -\table -\row -\o \code - Rectangle { - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } -\endcode -\o \image declarative-qmlfocus1.png -\endtable - -However, were the above example to be used as a self-contained component, this -simple use of the \c {Item::focus} property is no longer sufficient. The left -hand side of the following table shows what we would like to be able to write. -Here we create two instances of our previously defined component, and set the -second one to have focus. The intention is that when the \e A, \e B, or \e C -keys are pressed, the second of the two components receives the event and +An \l Item requests focus by setting the \c focus property to \c true. + +For very simple cases simply setting the \c focus property is sometimes +sufficient. If we run the following example with the \l {QML Viewer}, we see that +the \c {keyHandler} element has active focus and pressing the \c A, \c B, +or \c C keys modifies the text appropriately. + +\snippet doc/src/snippets/declarative/focus/basicwidget.qml focus true + +\image declarative-qmlfocus1.png + +However, were the above example to be used as a reusable or imported component, +this simple use of the \c focus property is no longer sufficient. + +To demonstrate, we create two instances of our previously defined component and +set the first one to have focus. The intention is that when the \c A, \c B, or +\c C keys are pressed, the first of the two components receives the event and responds accordingly. -\table -\row -\o \code -Rectangle { - color: "red"; width: 240; height: 55 - MyWidget {} - MyWidget { y: 30; focus: true } -} -\endcode -\o \code -Rectangle { - color: "red"; width: 240; height: 55 - Rectangle { - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } - Rectangle { - y: 30; focus: true - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } -} -\endcode -\endtable - -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 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 -is exactly the opposite of what was wanted! - -This problem is fundamentally one of visibility. The \c {MyWidget} -components each set their \c {keyHandler} Items as focused as that is all they can -do - they don't know how they are going to be used, but they do know that when -they're in use their \c {keyHandler} element is what needs focus. Likewise -the code that uses the two \c {MyWidgets} sets the second \c {MyWidget} as -focused. While it doesn't know exactly how the \c {MyWidget} is -implemented, it knows that it wants the second one to be focused. This allows us -to achieve encapsulation, allowing each widget to focus on it's appropriate behaviour -itself. - -To solve this problem - allowing components to care about what they know about -and ignore everything else - the QML items introduce a concept known as a -\e {focus scope}. For existing Qt users, a \e {focus scope} is like an -automatic focus proxy. A \e {focus scope} is created using the \l FocusScope -element. - -In the next example, a \l FocusScope is added to the component, and the visual -result shown. - -\table -\row -\o \code -FocusScope { - width: 240; height: 25 - Rectangle { - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } -} -\endcode -\o \image declarative-qmlfocus2.png -\endtable +The code that imports and creates two MyWidget instances: +\snippet doc/src/snippets/declarative/focus/widget.qml window + +The MyWidget code: +\snippet doc/src/snippets/declarative/focus/mywidget.qml mywidget + +We would like to have the first MyWidget object to have the focus by setting its +\c focus property to \c true. However, by running the code, we can confirm that +the second widget receives the focus. + +\image declarative-qmlfocus2.png + +Looking at both \c MyWidget and \c window code, the problem is evident - there +are three elements that set the \c focus property set to \c true. The two +MyWidget sets the \c focus to \c true and the \c window component also sets the +focus. Ultimately, only one element can have keyboard focus, and the system has +to decide which element receives the focus. When the second MyWidget is created, +it receives the focus because it is the last element to set its \c focus +property to \c true. + +This problem is due to visibility. The \c MyWidget component would like to have +the focus, but it cannot control the focus when it is imported or reused. +Likewise, the \c window component does not have the ability to know if its +imported components are requesting the focus. + +To solve this problem, the QML introduces a concept known as a \e {focus scope}. +For existing Qt users, a focus scope is like an automatic focus proxy. +A focus scope is created by declaring the \l FocusScope element. + +In the next example, a \l FocusScope element is added to the component, and the +visual result shown. + +\snippet doc/src/snippets/declarative/focus/myfocusscopewidget.qml widget in focusscope + +\image declarative-qmlfocus3.png + Conceptually \e {focus scopes} are quite simple. \list -\o Within each \e {focus scope} one element may have \c {Item::focus} set to true. -If more than one \l Item has the \c {Item::focus} property set, the first is selected -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::activeFocus} set. +\o Within each focus scope one element may have \c {Item::focus} set to +\c true. If more than one \l Item has the \c focus property set, the +last element to set the \c focus will have the focus and the others are unset, +similar to when there are no focus scopes. +\o When a focus scope receives active focus, the contained element with +\c focus set (if any) also gets the active focus. If this element is +also a \l FocusScope, the proxying behavior continues. Both the +focus scope and the sub-focused item will have \c activeFocus property set. \endlist -So far the example has the second component statically selected. It is trivial +Note that, since the FocusScope element is not a visual element, the properties +of its children need to be exposed to the parent item of the FocusScope. Layouts +and positioning elements will use these visual and styling properties to create +the layout. In our example, the \c Column element cannot display the two widgets +properly because the FocusScope lacks visual properties of its own. The MyWidget +component directly binds to the \c rectangle properties to allow the \c Column +element to create the layout containing the children of the FocusScope. + +So far, the example has the second component statically selected. It is trivial now to extend this component to make it clickable, and add it to the original -application. We still set a one of the widgets as focused by default, but from -then on clicking the either one gives it focus. - -\table -\row -\o \code -Rectangle { - color: "red"; width: 240; height: 55 - MyClickableWidget {} - MyClickableWidget { y: 30; focus: true } -} -\endcode -\o \code -FocusScope { - id: page; width: 240; height: 25 - MyWidget { focus: true } - MouseArea { anchors.fill: parent; onClicked: { page.focus = true } } -} -\endcode -\endtable +application. We still set one of the widgets as focused by default. +Now, clicking either MyClickableWidget gives it focus and the other widget +loses the focus. -\image declarative-qmlfocus3.png +The code that imports and creates two MyClickableWidget instances: +\snippet doc/src/snippets/declarative/focus/clickablewidget.qml clickable window + +The MyClickableWidget code: +\snippet doc/src/snippets/declarative/focus/myclickablewidget.qml clickable in focusscope -When a QML item explicitly relinquishes focus (by setting its -\c {Item::focus} property to false while it has \e {active focus}), the system -does not automatically select another element to receive focus. That is, it -is possible for there to be no currently \e {active focus}. +\image declarative-qmlfocus4.png -See the \l{declarative/keyinteraction/focus}{Keyboard Focus example} for a +When a QML \l Item explicitly relinquishes focus (by setting its +\c focus property to \c false while it has active focus), the +system does not automatically select another element to receive focus. That is, +it is possible for there to be no currently active focus. + +See the \l{declarative/keyinteraction/focus}{Keyboard Focus example} for a demonstration of moving keyboard focus between multiple areas using FocusScope elements. \section1 Advanced uses of Focus Scopes -Focus scopes allow focus to allocation to be easily partitioned. Several +Focus scopes allow focus to allocation to be easily partitioned. Several QML items use it to this effect. -\l ListView, for example, is itself a focus scope. Generally this isn't +\l ListView, for example, is itself a focus scope. Generally this isn't noticeable as \l ListView doesn't usually have manually added visual children. By being a focus scope, \l ListView can focus the current list item without -worrying about how that will effect the rest of the application. This allows -the current item delegate to react to key presses. +worrying about how that will effect the rest of the application. This allows the +current item delegate to react to key presses. -This contrived example shows how this works. Pressing the \c Return key will +This contrived example shows how this works. Pressing the \c Return key will print the name of the current list item. -\table -\row -\o \snippet doc/src/snippets/declarative/focusscopes.qml 0 -\o \image declarative-qmlfocus4.png -\endtable +\snippet doc/src/snippets/declarative/focus/advancedFocus.qml FocusScope delegate + +\image declarative-qmlfocus5.png -While the example is simple, there's a lot going on behind the scenes. Whenever +While the example is simple, there are a lot going on behind the scenes. Whenever the current item changes, the \l ListView sets the delegate's \c {Item::focus} -property. As the \l ListView is a \e {focus scope}, this doesn't effect the -rest of the application. However, if the \l ListView itself has -\e {active focus} this causes the delegate itself to receive \e {active focus}. -In this example, the root element of the delegate is also a \e {focus scope}, -which in turn gives \e {active focus} to the \c {Text} element that -actually performs the work of handling the \e {Return} key. +property. As the \l ListView is a focus scope, this doesn't affect the +rest of the application. However, if the \l ListView itself has +active focus this causes the delegate itself to receive active focus. +In this example, the root element of the delegate is also a focus scope, +which in turn gives active focus to the \c {Text} element that actually performs +the work of handling the \c {Return} key. All of the QML view classes, such as \l PathView and \l GridView, behave in a similar manner to allow key handling in their respective delegates. diff --git a/doc/src/images/declarative-qmlfocus1.png b/doc/src/images/declarative-qmlfocus1.png new file mode 100644 index 0000000..317b34b Binary files /dev/null and b/doc/src/images/declarative-qmlfocus1.png differ diff --git a/doc/src/images/declarative-qmlfocus2.png b/doc/src/images/declarative-qmlfocus2.png new file mode 100644 index 0000000..e3f9643 Binary files /dev/null and b/doc/src/images/declarative-qmlfocus2.png differ diff --git a/doc/src/images/declarative-qmlfocus3.png b/doc/src/images/declarative-qmlfocus3.png new file mode 100644 index 0000000..a5897ce Binary files /dev/null and b/doc/src/images/declarative-qmlfocus3.png differ diff --git a/doc/src/images/declarative-qmlfocus4.png b/doc/src/images/declarative-qmlfocus4.png new file mode 100644 index 0000000..f2e64cd Binary files /dev/null and b/doc/src/images/declarative-qmlfocus4.png differ diff --git a/doc/src/images/declarative-qmlfocus5.png b/doc/src/images/declarative-qmlfocus5.png new file mode 100644 index 0000000..ec7307b Binary files /dev/null and b/doc/src/images/declarative-qmlfocus5.png differ diff --git a/doc/src/snippets/declarative/focus/advancedFocus.qml b/doc/src/snippets/declarative/focus/advancedFocus.qml new file mode 100644 index 0000000..274f54f --- /dev/null +++ b/doc/src/snippets/declarative/focus/advancedFocus.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** 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 FOO 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 QtQuick 1.0 + +//! [FocusScope delegate] +Rectangle { + color: "lightsteelblue"; width: 100; height: 50 + + ListView { + anchors.fill: parent + focus: true + + model: ListModel { + ListElement { name: "Bob" } + ListElement { name: "John" } + ListElement { name: "Michael" } + } + + delegate: FocusScope { + width: childrenRect.width; height: childrenRect.height + x:childrenRect.x; y: childrenRect.y + TextInput { + focus: true + text: name + Keys.onReturnPressed: console.log(name) + } + } + } +} +//! [FocusScope delegate] diff --git a/doc/src/snippets/declarative/focus/basicwidget.qml b/doc/src/snippets/declarative/focus/basicwidget.qml new file mode 100644 index 0000000..71e75ff --- /dev/null +++ b/doc/src/snippets/declarative/focus/basicwidget.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 FOO 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 QtQuick 1.0 + +//! [focus true] +Rectangle { + color: "lightsteelblue"; width: 240; height: 25 + Text { id: myText } + Item { + id: keyHandler + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + myText.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + myText.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + myText.text = 'Key C was pressed' + } + } +} +//! [focus true] diff --git a/doc/src/snippets/declarative/focus/clickablewidget.qml b/doc/src/snippets/declarative/focus/clickablewidget.qml new file mode 100644 index 0000000..34b0d87 --- /dev/null +++ b/doc/src/snippets/declarative/focus/clickablewidget.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 FOO 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 QtQuick 1.0 + +//! [clickable window] +Rectangle { + id: window + + color: "white"; width: 240; height: 150 + + Column { + anchors.centerIn: parent; spacing: 15 + + MyClickableWidget { + focus: true //set this MyWidget to receive the focus + color: "lightblue" + } + MyClickableWidget { + color: "palegreen" + } + } + +} +//! [clickable window] diff --git a/doc/src/snippets/declarative/focus/focusColumn.qml b/doc/src/snippets/declarative/focus/focusColumn.qml new file mode 100644 index 0000000..eb59309 --- /dev/null +++ b/doc/src/snippets/declarative/focus/focusColumn.qml @@ -0,0 +1,25 @@ +import QtQuick 1.0 + +Rectangle { + width: 200; height: 200 + + // Column { + FocusScope { + x: rect1.x; y:rect1.y; width: rect1.width; height: rect1.height + Rectangle {id: rect1; width: 50; height: 50; focus:true + color: focus ? "red":"blue" + } + Rectangle {id: rect2; width: 50; height: 50; focus:true + color: focus ? "red":"blue" + y: 75 + } +// } +/* + FocusScope { + x: rect2.x; y:rect2.y; width: rect2.width; height: rect2.height + Rectangle {id: rect2; width: 50; height: 50; color: "red"} + } +*/ + } + +} diff --git a/doc/src/snippets/declarative/focus/focusscopewidget.qml b/doc/src/snippets/declarative/focus/focusscopewidget.qml new file mode 100644 index 0000000..48e5750 --- /dev/null +++ b/doc/src/snippets/declarative/focus/focusscopewidget.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 FOO 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 QtQuick 1.0 + +//! [focusscope window] +Rectangle { + id: window + + color: "white"; width: 240; height: 150 + + Column { + anchors.centerIn: parent; spacing: 15 + + MyFocusScopeWidget { + focus: true //set this MyWidget to receive the focus + color: "lightblue" + } + MyFocusScopeWidget { + color: "palegreen" + } + } + +} +//! [focusscope window] diff --git a/doc/src/snippets/declarative/focus/myclickablewidget.qml b/doc/src/snippets/declarative/focus/myclickablewidget.qml new file mode 100644 index 0000000..3294662 --- /dev/null +++ b/doc/src/snippets/declarative/focus/myclickablewidget.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 FOO 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 QtQuick 1.0 + +//! [clickable in focusscope] +FocusScope { + + id: scope + + //FocusScope needs to bind to visual properties of the children + property alias color: rectangle.color + x: rectangle.x; y: rectangle.y + width: rectangle.width; height: rectangle.height + + Rectangle { + id: rectangle + anchors.centerIn: parent + color: "lightsteelblue"; width: 175; height: 25; radius: 10; smooth: true + Text { id: label; anchors.centerIn: parent } + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + label.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + label.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + label.text = 'Key C was pressed' + } + } + MouseArea { anchors.fill: parent; onClicked: { scope.focus = true } } +} +//! [clickable in focusscope] diff --git a/doc/src/snippets/declarative/focus/myfocusscopewidget.qml b/doc/src/snippets/declarative/focus/myfocusscopewidget.qml new file mode 100644 index 0000000..231ae3a --- /dev/null +++ b/doc/src/snippets/declarative/focus/myfocusscopewidget.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 FOO 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 QtQuick 1.0 + +//! [widget in focusscope] +FocusScope { + + //FocusScope needs to bind to visual properties of the children + property alias color: rectangle.color + x: rectangle.x; y: rectangle.y + width: rectangle.width; height: rectangle.height + + Rectangle { + id: rectangle + anchors.centerIn: parent + color: "lightsteelblue"; width: 175; height: 25; radius: 10; smooth: true + Text { id: label; anchors.centerIn: parent } + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + label.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + label.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + label.text = 'Key C was pressed' + } + } +} +//! [widget in focusscope] diff --git a/doc/src/snippets/declarative/focus/mywidget.qml b/doc/src/snippets/declarative/focus/mywidget.qml new file mode 100644 index 0000000..bea723d --- /dev/null +++ b/doc/src/snippets/declarative/focus/mywidget.qml @@ -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 FOO 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 QtQuick 1.0 + +//! [mywidget] +//MyWidget code +Rectangle { + id: widget + color: "lightsteelblue"; width: 175; height: 25; radius: 10; smooth: true + Text { id: label; anchors.centerIn: parent} + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + label.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + label.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + label.text = 'Key C was pressed' + } +} +//! [mywidget] diff --git a/doc/src/snippets/declarative/focus/qmldir b/doc/src/snippets/declarative/focus/qmldir new file mode 100644 index 0000000..d0683b2 --- /dev/null +++ b/doc/src/snippets/declarative/focus/qmldir @@ -0,0 +1,4 @@ +MyWidget 1.0 mywidget.qml +MyFocusScopeWidget 1.0 myfocusscopewidget.qml +MyClickableWidget 1.0 myclickablewidget.qml + diff --git a/doc/src/snippets/declarative/focus/rectangle.qml b/doc/src/snippets/declarative/focus/rectangle.qml new file mode 100644 index 0000000..01d1f0c --- /dev/null +++ b/doc/src/snippets/declarative/focus/rectangle.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 FOO 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 QtQuick 1.0 + +//! [simple key event] +Rectangle { + width: 100; height: 100 + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) { + console.log('Key A was pressed'); + event.accepted = true; + } + } +//! [simple key event] + +//! [active focus] + Text { + text: activeFocus ? "I have active focus!" : "I do not have active focus" + } +//! [active focus] + +//! [simple key event end] +} +//! [simple key event end] diff --git a/doc/src/snippets/declarative/focus/widget.qml b/doc/src/snippets/declarative/focus/widget.qml new file mode 100644 index 0000000..cef34c5 --- /dev/null +++ b/doc/src/snippets/declarative/focus/widget.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 FOO 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 QtQuick 1.0 + +//! [window] + +//Window code that imports MyWidget +Rectangle { + id: window + color: "white"; width: 240; height: 150 + + Column { + anchors.centerIn: parent; spacing: 15 + + MyWidget { + focus: true //set this MyWidget to receive the focus + color: "lightblue" + } + MyWidget { + color: "palegreen" + } + } +} +//! [window] -- cgit v0.12 From 146ea109f9980beda939088687b37549f4d7a125 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 7 Dec 2010 17:04:29 +0100 Subject: Doc: Added a missing external page reference. --- doc/src/external-resources.qdoc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc index 8eeaeb1..9bc3b1c 100644 --- a/doc/src/external-resources.qdoc +++ b/doc/src/external-resources.qdoc @@ -448,3 +448,8 @@ \externalpage https://developer.mozilla.org/en/JavaScript/About_JavaScript \title About JavaScript */ + +/*! + \externalpage http://www.libusb.org/ + \title libusb +*/ -- cgit v0.12 From 2c55c106839a4ba1a9d9c1d3f6f6cf7e835ccc1d Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 7 Dec 2010 17:29:04 +0100 Subject: Doc: Added documentation about the use of null custom title bar widgets. Task-number: QTBUG-15516 --- src/gui/widgets/qdockwidget.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp index df9b171..0a6269d 100644 --- a/src/gui/widgets/qdockwidget.cpp +++ b/src/gui/widgets/qdockwidget.cpp @@ -1531,8 +1531,11 @@ QAction * QDockWidget::toggleViewAction() const /*! \since 4.3 + Sets an arbitrary \a widget as the dock widget's title bar. If \a widget - is 0, the title bar widget is removed, but not deleted. + is 0, any custom title bar widget previously set on the dock widget is + removed, but not deleted, and the default title bar will be used + instead. If a title bar widget is set, QDockWidget will not use native window decorations when it is floated. @@ -1540,23 +1543,27 @@ QAction * QDockWidget::toggleViewAction() const Here are some tips for implementing custom title bars: \list - \i Mouse events that are not explicitly handled by the title bar widget + \o Mouse events that are not explicitly handled by the title bar widget must be ignored by calling QMouseEvent::ignore(). These events then propagate to the QDockWidget parent, which handles them in the usual manner, moving when the title bar is dragged, docking and undocking when it is double-clicked, etc. - \i When DockWidgetVerticalTitleBar is set on QDockWidget, the title + \o When DockWidgetVerticalTitleBar is set on QDockWidget, the title bar widget is repositioned accordingly. In resizeEvent(), the title bar should check what orientation it should assume: \snippet doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp 0 - \i The title bar widget must have a valid QWidget::sizeHint() and + \o The title bar widget must have a valid QWidget::sizeHint() and QWidget::minimumSizeHint(). These functions should take into account the current orientation of the title bar. + + \o It is not possible to remove a title bar from a dock widget. However, + a similar effect can be achieved by setting a default constructed + QWidget as the title bar widget. \endlist - Using qobject_cast as shown above, the title bar widget has full access + Using qobject_cast() as shown above, the title bar widget has full access to its parent QDockWidget. Hence it can perform such operations as docking and hiding in response to user actions. -- cgit v0.12 From aa4b28cbe52eedfe898da04958339509b1d173bc Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 7 Dec 2010 17:36:01 +0100 Subject: Doc: Fixed a link to the correct searchPaths() function. --- src/corelib/io/qresource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index ce9c57e..b45710c 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -187,7 +187,7 @@ Q_GLOBAL_STATIC(QStringList, resourceSearchPaths) A QResource can either be loaded with an absolute path, either treated as a file system rooted with a \c{/} character, or in resource notation rooted with a \c{:} character. A relative resource can also be opened - which will be found through the searchPaths(). + which will be found in the list of paths returned by QDir::searchPaths(). A QResource that is representing a file will have data backing it, this data can possibly be compressed, in which case qUncompress() must be -- cgit v0.12 From 4483325532f57157f9ce6953670f9ab175dbaf2a Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 7 Dec 2010 17:36:40 +0100 Subject: Doc: Removed duplicate external page reference. --- doc/src/qt-webpages.qdoc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/doc/src/qt-webpages.qdoc b/doc/src/qt-webpages.qdoc index b7b9fba..0a03157 100644 --- a/doc/src/qt-webpages.qdoc +++ b/doc/src/qt-webpages.qdoc @@ -201,11 +201,6 @@ */ /*! - \externalpage http://labs.qt.nokia.com/gitweb?p=qtestlib-tools;a=summary - \title qtestlib-tools -*/ - -/*! \externalpage http://qt.nokia.com/products/library/modular-class-library#info_scripting \title Qt Script for Applications (QSA) */ -- cgit v0.12 From 68a21753acd3e4159025bc73b0a31e652340e039 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 7 Dec 2010 17:37:12 +0100 Subject: Doc: Added a link to the QML Basic Types page. --- doc/src/declarative/declarativeui.qdoc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 5d9eaaf..3d963e2 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -136,6 +136,7 @@ Module. \list \o \l{QML Elements} +\o \l{QML Basic Types} \o \l{QML Global Object} \o \l{QML Internationalization} \o \l{QML Security} -- cgit v0.12 From 30272ee4f7b37a75bd9b56aa5eb763073a6c965a Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 7 Dec 2010 17:47:32 +0100 Subject: Doc: Fixed incorrect case in a page file name. --- doc/src/getting-started/installation.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index a68310c..aa10aaf 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -684,7 +684,7 @@ Binary Package} document. We hope you will enjoy using Qt. */ -/*! \page install-Symbian-linux.html +/*! \page install-symbian-linux.html \title Installing Qt for the Symbian platform using Linux (experimental) \ingroup installation \ingroup qtsymbian -- cgit v0.12 From 90928a986d8f37cf394d45cbcf12aaeeaa62d565 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 7 Dec 2010 17:48:11 +0100 Subject: Doc: Added missing What's New information for Qt 4.6 and 4.7. Task-number: QTBUG-15670 --- doc/src/network-programming/bearermanagement.qdoc | 8 +-- doc/src/qt4-intro.qdoc | 62 ++++++++++++++++++++--- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/doc/src/network-programming/bearermanagement.qdoc b/doc/src/network-programming/bearermanagement.qdoc index 98de5bf..12da55b 100644 --- a/doc/src/network-programming/bearermanagement.qdoc +++ b/doc/src/network-programming/bearermanagement.qdoc @@ -26,11 +26,11 @@ ****************************************************************************/ /*! - \page bearer-management.html +\page bearer-management.html - \title Bearer Management - \ingroup qt-network - \brief An API to control the system's connectivity state. +\title Bearer Management +\ingroup qt-network +\brief An API to control the system's connectivity state. Bearer Management controls the connectivity state of the system so that the user can start or stop interfaces or roam transparently between diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index 62decbb..7325e27 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -60,7 +60,53 @@ \section1 Recent Additions to Qt 4 - The following features have been added to Qt since the first release of Qt 4: + The following features have been added to Qt since the first release of Qt 4. + + In Qt 4.7: + \list + \o Declarative UI Development with \l{Qt Quick}, technologies for creating + fluid, dynamic user interfaces. + \o Support for \l{Bearer Management}{network bearer management}, enabling + features such as control over network interfaces and support for roaming + between networks. + \o Feature and performance improvements in QtWebKit, including a new tiled + backing store, control over scroll bars used in frames and framesets, + accelerated compositing and \l{The QtWebKit Bridge}{support for hybrid + development}. + \o General performance improvements, including the use of "alien widgets" + on Mac OS X, the QStaticText class for optimized text rendering, a new + \l{QPainter::drawPixmapFragments()}{API for rendering pixmap fragments} + and an updated version of the JavaScriptCore engine for the QtScript + module with improved performance. + \endlist + + In Qt 4.6: + \list + \o Support for \l{The Symbian platform - Introduction to Qt}{the Symbian Platform} + as a mainstream Qt platform, with integration into the S60 framework. + \o The \l{The Animation Framework}{animation framework} allows animations to be + created using both widgets and graphics items. + \o The \l{The State Machine Framework}{state machine framework} provides a robust + state chart implementation based on Harel statecharts and SCXML. + \o Support for \l{QTouchEvent}{touch input} and \l{Gestures Programming}{gestures} + enable developers to create intuitive user interfaces for touch-based devices. + \o A \l{QWebElement}{DOM access API} for QtWebKit provides a cleaner and safer way + to access elements and structures of Web pages without the use of JavaScript. + \o A collection of performance improvements, covering QGraphicsView, QPixmapCache, + QNetworkAccessManager, QContiguousCache class, hardware-accelerated rendering + support through \l{OpenVG Rendering in Qt}{OpenVG}, and the removal of Win9x + support. + \o A collection of \l{QGraphicsEffect}{graphics effects} make it easy to apply + and simple effects to graphics items and combine them to produce more complex + effects. + \o Support for XML schema validation in the QtXmlPatterns module covering + large parts of version 1.0 of the specification. + \o Qt3D enablers, including math primitives for \l{QMatrix4x4}{matrix multiplication}, + \l{QVector3D}{vectors}, \l{QQuaternion}{quaternions} (client-side), and an API + for \l{QGLShader}{vertex and fragment shaders}, GLSL/ES. + \o \l{QtMultimedia Module}{Multimedia services} providing low-level access to the + system's audio system. + \endlist In Qt 4.5: \list @@ -209,7 +255,7 @@ \row \o \l{Qt3Support} \o Qt 3 support classes \row \o \l{QAxContainer} \o ActiveQt client extension \row \o \l{QAxServer} \o ActiveQt server extension - \row \o \l{QtHelp} \o Classes for integrating online documentation + \row \o \l{QtHelp} \o Classes for integrating online documentation \row \o \l{QtDesigner} \o Classes for extending and embedding Qt Designer \row \o \l{QtUiTools} \o Classes for dynamic GUI generation \row \o \l{QtTest} \o Tool classes for unit testing @@ -451,7 +497,7 @@ A list of other Qt 4 features can be found on the \bold{\l{What's New in Qt 4}} page. - \section1 Declarative UI development with Qt Quick + \section1 Declarative UI Development with Qt Quick \image quick_screens.png @@ -508,7 +554,7 @@ For hybrid QtWebKit and C++ projects, Qt 4.7 has added support for transporting \l{QPixmap}s between Qt C++ and WebKit. We have also - improved the documentation hybrid development. Read more here: + improved the documentation for hybrid development. Read more here: \l{The QtWebKit Bridge}. \section1 QtWebKit Performance Benchmarks @@ -680,7 +726,7 @@ See the QTouchEvent class documentation for more information on touch input and QGestureEvent for gestures. - \section1 DOM access API + \section1 DOM Access API Web pages and XML both have very complex document object models. The W3C selector API provides a very simple way to access and @@ -699,7 +745,7 @@ \list \o Rewritten the QGraphicsView rendering algorithm. - \o Made QPixmapCache support efficient Key datastructure. + \o Made QPixmapCache support efficient Key data structure. \o Reduced overhead in QNetworkAccessManager. \o Added the QContiguousCache class, which provides efficient caching of contiguous data. @@ -740,7 +786,7 @@ See the \l{XML Processing} and QXmlSchema class documentation for more information. - \section1 Qt3D enablers + \section1 Qt3D Enablers As more of Qt, and more of the applications built on Qt go 3D, API's should be provided to simplify this. Mainly, the new API @@ -750,7 +796,7 @@ The main features of the Qt3D enablers are currently: Math primitives for matrix multiplication, vectors, quaternions - (client-side), and API for vertex and fragment shaders, GLSL/ES. + (client-side), and an API for vertex and fragment shaders, GLSL/ES. Future research will, among other things include stencils, scissors, vertex buffers and arrays, texture manipulation, and geometry shaders. -- cgit v0.12 From d21eee4fb39ee8378bb87187cec5e46275dc31ed Mon Sep 17 00:00:00 2001 From: aavit Date: Wed, 8 Dec 2010 15:35:54 +0100 Subject: Make protocol less lancelot-specific, prepare use in other testcases --- tests/arthur/baselineserver/src/baselineserver.cpp | 30 +++++----- tests/arthur/baselineserver/src/htmlpage.cpp | 15 +++-- tests/arthur/common/baselineprotocol.cpp | 28 +++++----- tests/arthur/common/baselineprotocol.h | 31 ++++------- tests/auto/lancelot/tst_lancelot.cpp | 65 +++++++++++----------- 5 files changed, 81 insertions(+), 88 deletions(-) diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp index 53e40b6..90eb594 100644 --- a/tests/arthur/baselineserver/src/baselineserver.cpp +++ b/tests/arthur/baselineserver/src/baselineserver.cpp @@ -208,8 +208,8 @@ void BaselineHandler::provideBaselineChecksums(const QByteArray &itemListBlock) ImageItemList itemList; QDataStream ds(itemListBlock); ds >> itemList; - qDebug() << runId << logtime() << "Received request for checksums for" << itemList.count() << "items, engine" - << itemList.at(0).engineAsString() << "pixel format" << itemList.at(0).formatAsString(); + qDebug() << runId << logtime() << "Received request for checksums for" << itemList.count() + << "items in test function" << itemList.at(0).testFunction; for (ImageItemList::iterator i = itemList.begin(); i != itemList.end(); ++i) { i->imageChecksums.clear(); @@ -232,10 +232,10 @@ void BaselineHandler::provideBaselineChecksums(const QByteArray &itemListBlock) if (file.open(QIODevice::ReadOnly)) { QTextStream in(&file); do { - QString scriptName = in.readLine(); - if (!scriptName.isNull()) { + QString itemName = in.readLine(); + if (!itemName.isNull()) { for (ImageItemList::iterator i = itemList.begin(); i != itemList.end(); ++i) { - if (i->scriptName == scriptName) + if (i->itemName == itemName) i->status = ImageItem::IgnoreItem; } } @@ -258,7 +258,7 @@ void BaselineHandler::storeImage(const QByteArray &itemBlock, bool isBaseline) ds >> item; QString prefix = pathForItem(item, isBaseline); - qDebug() << runId << logtime() << "Received" << (isBaseline ? "baseline" : "mismatched") << "image for:" << item.scriptName << "Storing in" << prefix; + qDebug() << runId << logtime() << "Received" << (isBaseline ? "baseline" : "mismatched") << "image for:" << item.itemName << "Storing in" << prefix; QString dir = prefix.section(QLC('/'), 0, -2); QDir cwd; @@ -333,17 +333,17 @@ QString BaselineHandler::pathForItem(const ImageItem &item, bool isBaseline, boo if (mapped.isEmpty()) mapPlatformInfo(); - QString itemName = item.scriptName; - if (itemName.contains(QLC('.'))) - itemName.replace(itemName.lastIndexOf(QLC('.')), 1, QLC('_')); + QString itemName = item.itemName; + itemName.replace(QLC('.'), QLC('_')); itemName.append(QLC('_')); - itemName.append(QString::number(item.scriptChecksum, 16).rightJustified(4, QLC('0'))); + itemName.append(QString::number(item.itemChecksum, 16).rightJustified(4, QLC('0'))); QStringList path; if (absolute) path += BaselineServer::storagePath(); + path += mapped.value(PI_TestCase); path += QLS(isBaseline ? "baselines" : "mismatches"); - path += item.engineAsString() + QLC('_') + item.formatAsString(); + path += item.testFunction; path += mapped.value(PI_QtVersion); path += mapped.value(PI_QMakeSpec); path += mapped.value(PI_HostName); @@ -397,6 +397,7 @@ QString BaselineHandler::updateSingleBaseline(const QString &oldBaseline, const return res; } + QString BaselineHandler::blacklistTest(const QString &context, const QString &itemId, bool removeFromBlacklist) { QFile file(BaselineServer::storagePath() + QLC('/') + context + QLS("/BLACKLIST")); @@ -439,11 +440,10 @@ void BaselineHandler::testPathMapping() << QLS("localhost"); ImageItem item; - item.scriptName = QLS("arcs.qps"); - item.engine = ImageItem::Raster; - item.renderFormat = QImage::Format_ARGB32_Premultiplied; + item.testFunction = QLS("testPathMapping"); + item.itemName = QLS("arcs.qps"); item.imageChecksums << 0x0123456789abcdefULL; - item.scriptChecksum = 0x0123; + item.itemChecksum = 0x0123; plat.insert(PI_QtVersion, QLS("4.8.0")); plat.insert(PI_BuildKey, QLS("(nobuildkey)")); diff --git a/tests/arthur/baselineserver/src/htmlpage.cpp b/tests/arthur/baselineserver/src/htmlpage.cpp index 11c2eac..2b16d25 100644 --- a/tests/arthur/baselineserver/src/htmlpage.cpp +++ b/tests/arthur/baselineserver/src/htmlpage.cpp @@ -69,7 +69,7 @@ void HTMLPage::start(const QString &storagepath, const QString &runId, const Pla ctx = context; root = storagepath + QLC('/'); imageItems = itemList; - reportDir = pinfo.value(PI_PulseGitBranch).isEmpty() ? QLS("reports/adhoc/") : QLS("reports/pulse/"); + reportDir = pinfo.value(PI_TestCase) + QLC('/') + (pinfo.value(PI_PulseGitBranch).isEmpty() ? QLS("reports/adhoc/") : QLS("reports/pulse/")); QString dir = root + reportDir; QDir cwd; if (!cwd.exists(dir)) @@ -79,8 +79,7 @@ void HTMLPage::start(const QString &storagepath, const QString &runId, const Pla void HTMLPage::writeHeader(const ImageItem &item) { - path = reportDir + id + QLC('_') + item.engineAsString() - + QLC('_') + item.formatAsString() + QLS(".html"); + path = reportDir + id + QLC('_') + item.testFunction + QLS(".html"); QString pageUrl = BaselineServer::baseUrl() + path; @@ -126,7 +125,7 @@ void HTMLPage::addItem(const QString &baseline, const QString &rendered, const I QString pageUrl = BaselineServer::baseUrl() + path; out << "\n"; - out << "" << item.scriptName << "\n"; + out << "" << item.itemName << "\n"; QStringList images = QStringList() << baseline << rendered << compared; foreach(const QString& img, images) out << "\n"; @@ -135,7 +134,7 @@ void HTMLPage::addItem(const QString &baseline, const QString &rendered, const I << "

Replace baseline with rendered

\n" << "

Blacklist this item

\n" + << "&itemId=" << item.itemName << "&url=" << pageUrl << "\">Blacklist this item

\n" << "

View

\n" << "\n"; @@ -144,7 +143,7 @@ void HTMLPage::addItem(const QString &baseline, const QString &rendered, const I QMutableVectorIterator it(imageItems); while (it.hasNext()) { it.next(); - if (it.value().scriptName == item.scriptName) { + if (it.value().itemName == item.itemName) { it.remove(); break; } @@ -158,11 +157,11 @@ void HTMLPage::end() // Add the names of the scripts that passed the test, or were blacklisted QString pageUrl = BaselineServer::baseUrl() + path; for (int i=0; i" << imageItems.at(i).scriptName << "N/AN/AN/A"; + out << "" << imageItems.at(i).itemName << "N/AN/AN/A"; if (imageItems.at(i).status == ImageItem::IgnoreItem) { out << "Blacklisted " << "Whitelist item"; } else { out << "Test passed"; diff --git a/tests/arthur/common/baselineprotocol.cpp b/tests/arthur/common/baselineprotocol.cpp index 5ed58b4..c7e9e72 100644 --- a/tests/arthur/common/baselineprotocol.cpp +++ b/tests/arthur/common/baselineprotocol.cpp @@ -128,11 +128,10 @@ PlatformInfo::PlatformInfo(bool useLocal) ImageItem &ImageItem::operator=(const ImageItem &other) { - scriptName = other.scriptName; - scriptChecksum = other.scriptChecksum; + testFunction = other.testFunction; + itemName = other.itemName; + itemChecksum = other.itemChecksum; status = other.status; - renderFormat = other.renderFormat; - engine = other.engine; image = other.image; imageChecksums = other.imageChecksums; return *this; @@ -165,6 +164,7 @@ quint64 ImageItem::computeChecksum(const QImage &image) return (quint64(h1) << 32) | h2; } +#if 0 QString ImageItem::engineAsString() const { switch (engine) { @@ -205,6 +205,7 @@ QString ImageItem::formatAsString() const return QLS("UnknownFormat"); return QLS(formatNames[renderFormat]); } +#endif void ImageItem::writeImageToStream(QDataStream &out) const { @@ -249,20 +250,16 @@ void ImageItem::readImageFromStream(QDataStream &in) QDataStream & operator<< (QDataStream &stream, const ImageItem &ii) { - stream << ii.scriptName << ii.scriptChecksum << quint8(ii.status) << quint8(ii.renderFormat) - << quint8(ii.engine) << ii.imageChecksums; + stream << ii.testFunction << ii.itemName << ii.itemChecksum << quint8(ii.status) << ii.imageChecksums; ii.writeImageToStream(stream); return stream; } QDataStream & operator>> (QDataStream &stream, ImageItem &ii) { - quint8 encFormat, encStatus, encEngine; - stream >> ii.scriptName >> ii.scriptChecksum >> encStatus >> encFormat - >> encEngine >> ii.imageChecksums; - ii.renderFormat = QImage::Format(encFormat); + quint8 encStatus; + stream >> ii.testFunction >> ii.itemName >> ii.itemChecksum >> encStatus >> ii.imageChecksums; ii.status = ImageItem::ItemStatus(encStatus); - ii.engine = ImageItem::GraphicsEngine(encEngine); ii.readImageFromStream(stream); return stream; } @@ -275,7 +272,7 @@ BaselineProtocol::~BaselineProtocol() } -bool BaselineProtocol::connect(bool *dryrun) +bool BaselineProtocol::connect(const QString &testCase, bool *dryrun) { errMsg.clear(); QByteArray serverName(qgetenv("QT_LANCELOT_SERVER")); @@ -292,6 +289,7 @@ bool BaselineProtocol::connect(bool *dryrun) } PlatformInfo pi(true); + pi.insert(PI_TestCase, testCase); QByteArray block; QDataStream ds(&block, QIODevice::ReadWrite); ds << pi; @@ -342,11 +340,15 @@ bool BaselineProtocol::acceptConnection(PlatformInfo *pi) } -bool BaselineProtocol::requestBaselineChecksums(ImageItemList *itemList) +bool BaselineProtocol::requestBaselineChecksums(const QString &testFunction, ImageItemList *itemList) { errMsg.clear(); if (!itemList) return false; + + for(ImageItemList::iterator it = itemList->begin(); it != itemList->end(); it++) + it->testFunction = testFunction; + QByteArray block; QDataStream ds(&block, QIODevice::ReadWrite); ds << *itemList; diff --git a/tests/arthur/common/baselineprotocol.h b/tests/arthur/common/baselineprotocol.h index baffb4a..1f4d593 100644 --- a/tests/arthur/common/baselineprotocol.h +++ b/tests/arthur/common/baselineprotocol.h @@ -52,6 +52,7 @@ #define FileFormat "png" +const QString PI_TestCase(QLS("TestCase")); const QString PI_HostName(QLS("HostName")); const QString PI_HostAddress(QLS("HostAddress")); const QString PI_OSName(QLS("OSName")); @@ -73,19 +74,15 @@ struct ImageItem { public: ImageItem() - : status(Ok), renderFormat(QImage::Format_Invalid), engine(Raster), scriptChecksum(0) + : status(Ok), itemChecksum(0) {} ImageItem(const ImageItem &other) { *this = other; } ~ImageItem() {} ImageItem &operator=(const ImageItem &other); - static quint64 computeChecksum(const QImage& image); - QString engineAsString() const; - QString formatAsString() const; - void writeImageToStream(QDataStream &stream) const; - void readImageFromStream(QDataStream &stream); + static quint64 computeChecksum(const QImage& image); enum ItemStatus { Ok = 0, @@ -93,19 +90,15 @@ public: IgnoreItem = 2 }; - enum GraphicsEngine { - Raster = 0, - OpenGL = 1 - }; - - QString scriptName; + QString testFunction; + QString itemName; ItemStatus status; - QImage::Format renderFormat; - GraphicsEngine engine; QImage image; QList imageChecksums; - // tbd: add diffscore - quint16 scriptChecksum; + quint16 itemChecksum; + + void writeImageToStream(QDataStream &stream) const; + void readImageFromStream(QDataStream &stream); }; QDataStream & operator<< (QDataStream &stream, const ImageItem &ii); QDataStream & operator>> (QDataStream &stream, ImageItem& ii); @@ -124,7 +117,7 @@ public: // Important constants here // **************************************************** enum Constant { - ProtocolVersion = 3, + ProtocolVersion = 4, ServerPort = 54129, Timeout = 5000 }; @@ -143,8 +136,8 @@ public: }; // For client: - bool connect(bool *dryrun = 0); - bool requestBaselineChecksums(ImageItemList *itemList); + bool connect(const QString &testCase, bool *dryrun = 0); + bool requestBaselineChecksums(const QString &testFunction, ImageItemList *itemList); bool submitNewBaseline(const ImageItem &item, QByteArray *serverMsg); bool submitMismatch(const ImageItem &item, QByteArray *serverMsg); diff --git a/tests/auto/lancelot/tst_lancelot.cpp b/tests/auto/lancelot/tst_lancelot.cpp index 7c6fe66..d1b093f 100644 --- a/tests/auto/lancelot/tst_lancelot.cpp +++ b/tests/auto/lancelot/tst_lancelot.cpp @@ -66,10 +66,15 @@ public: static bool simfail; private: - ImageItem render(const ImageItem &item); + enum GraphicsEngine { + Raster = 0, + OpenGL = 1 + }; + + bool setupTestSuite(const QStringList& blacklist); + void runTestSuite(GraphicsEngine engine, QImage::Format format); + ImageItem render(const ImageItem &item, GraphicsEngine engine, QImage::Format format); void paint(QPaintDevice *device, const QStringList &script, const QString &filePath); - void runTestSuite(); - bool setupTestSuite(ImageItem::GraphicsEngine engine, QImage::Format format, const QStringList& blacklist); BaselineProtocol proto; ImageItemList baseList; @@ -108,7 +113,7 @@ void tst_Lancelot::initTestCase() #if defined(Q_OS_SOMEPLATFORM) QSKIP("This test is not supported on this platform.", SkipAll); #endif - if (!proto.connect(&dryRunMode)) + if (!proto.connect(QLatin1String("tst_Lancelot"), &dryRunMode)) QSKIP(qPrintable(proto.errorMessage()), SkipAll); QDir qpsDir(scriptsDir); @@ -125,8 +130,8 @@ void tst_Lancelot::initTestCase() file.open(QFile::ReadOnly); QByteArray cont = file.readAll(); scripts.insert(fileName, QString::fromLatin1(cont).split(QLatin1Char('\n'), QString::SkipEmptyParts)); - it->scriptName = fileName; - it->scriptChecksum = qChecksum(cont.constData(), cont.size()); + it->itemName = fileName; + it->itemChecksum = qChecksum(cont.constData(), cont.size()); it++; } } @@ -135,42 +140,42 @@ void tst_Lancelot::initTestCase() void tst_Lancelot::testRasterARGB32PM_data() { QStringList localBlacklist; - if (!setupTestSuite(ImageItem::Raster, QImage::Format_ARGB32_Premultiplied, localBlacklist)) + if (!setupTestSuite(localBlacklist)) QSKIP("Communication with baseline image server failed.", SkipAll); } void tst_Lancelot::testRasterARGB32PM() { - runTestSuite(); + runTestSuite(Raster, QImage::Format_ARGB32_Premultiplied); } void tst_Lancelot::testRasterRGB32_data() { QStringList localBlacklist; - if (!setupTestSuite(ImageItem::Raster, QImage::Format_RGB32, localBlacklist)) + if (!setupTestSuite(localBlacklist)) QSKIP("Communication with baseline image server failed.", SkipAll); } void tst_Lancelot::testRasterRGB32() { - runTestSuite(); + runTestSuite(Raster, QImage::Format_RGB32); } void tst_Lancelot::testRasterRGB16_data() { QStringList localBlacklist; - if (!setupTestSuite(ImageItem::Raster, QImage::Format_RGB16, localBlacklist)) + if (!setupTestSuite(localBlacklist)) QSKIP("Communication with baseline image server failed.", SkipAll); } void tst_Lancelot::testRasterRGB16() { - runTestSuite(); + runTestSuite(Raster, QImage::Format_RGB16); } @@ -178,7 +183,7 @@ void tst_Lancelot::testRasterRGB16() void tst_Lancelot::testOpenGL_data() { QStringList localBlacklist = QStringList() << QLatin1String("rasterops.qps"); - if (!setupTestSuite(ImageItem::OpenGL, QImage::Format_RGB32, localBlacklist)) + if (!setupTestSuite(localBlacklist)) QSKIP("Communication with baseline image server failed.", SkipAll); } @@ -197,45 +202,39 @@ void tst_Lancelot::testOpenGL() ok = true; } if (ok) - runTestSuite(); + runTestSuite(OpenGL, QImage::Format_RGB32); else QSKIP("System under test does not meet preconditions for GL testing. Skipping.", SkipAll); } #endif -bool tst_Lancelot::setupTestSuite(ImageItem::GraphicsEngine engine, QImage::Format format, const QStringList& blacklist) +bool tst_Lancelot::setupTestSuite(const QStringList& blacklist) { QTest::addColumn("baseline"); ImageItemList itemList(baseList); - - for(ImageItemList::iterator it = itemList.begin(); it != itemList.end(); it++) { - it->engine = engine; - it->renderFormat = format; - } - - if (!proto.requestBaselineChecksums(&itemList)) { + if (!proto.requestBaselineChecksums(QTest::currentTestFunction(), &itemList)) { QWARN(qPrintable(proto.errorMessage())); return false; } foreach(const ImageItem& item, itemList) { - if (!blacklist.contains(item.scriptName)) - QTest::newRow(item.scriptName.toLatin1()) << item; + if (!blacklist.contains(item.itemName)) + QTest::newRow(item.itemName.toLatin1()) << item; } return true; } -void tst_Lancelot::runTestSuite() +void tst_Lancelot::runTestSuite(GraphicsEngine engine, QImage::Format format) { QFETCH(ImageItem, baseline); if (baseline.status == ImageItem::IgnoreItem) QSKIP("Blacklisted by baseline server.", SkipSingle); - ImageItem rendered = render(baseline); + ImageItem rendered = render(baseline, engine, format); if (rendered.image.isNull()) { // Assume an error in the test environment, not Qt QWARN("Error: Failed to render image."); QSKIP("Aborted due to errors.", SkipSingle); @@ -258,21 +257,21 @@ void tst_Lancelot::runTestSuite() } -ImageItem tst_Lancelot::render(const ImageItem &item) +ImageItem tst_Lancelot::render(const ImageItem &item, GraphicsEngine engine, QImage::Format format) { ImageItem res = item; res.imageChecksums.clear(); res.image = QImage(); - QString filePath = scriptsDir + item.scriptName; - QStringList script = scripts.value(item.scriptName); + QString filePath = scriptsDir + item.itemName; + QStringList script = scripts.value(item.itemName); - if (item.engine == ImageItem::Raster) { - QImage img(800, 800, item.renderFormat); + if (engine == Raster) { + QImage img(800, 800, format); paint(&img, script, QFileInfo(filePath).absoluteFilePath()); // eh yuck (filePath stuff) res.image = img; res.imageChecksums.append(ImageItem::computeChecksum(img)); #ifndef QT_NO_OPENGL - } else if (item.engine == ImageItem::OpenGL) { + } else if (engine == OpenGL) { QGLWidget glWidget; if (glWidget.isValid()) { glWidget.makeCurrent(); @@ -281,7 +280,7 @@ ImageItem tst_Lancelot::render(const ImageItem &item) fboFormat.setAttachment(QGLFramebufferObject::CombinedDepthStencil); QGLFramebufferObject fbo(800, 800, fboFormat); paint(&fbo, script, QFileInfo(filePath).absoluteFilePath()); // eh yuck (filePath stuff) - res.image = fbo.toImage().convertToFormat(item.renderFormat); + res.image = fbo.toImage().convertToFormat(format); res.imageChecksums.append(ImageItem::computeChecksum(res.image)); } #endif -- cgit v0.12 From c799f87057d1a61112c0165b15ec37bbef39fffe Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Wed, 8 Dec 2010 15:48:39 +0100 Subject: Doc: Added link to QML Basic Types in main Qt Quick page. Reviewed-by: David Boddie --- doc/src/declarative/declarativeui.qdoc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 5d9eaaf..f8f47c9 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -108,6 +108,7 @@ Module. \section1 Handling Data \list +\o \l{QML Basic Types}{QML Basic Data Types} \o \l{Using QML Positioner and Repeater Items} \o \l{QML Data Models} \o \l{Presenting Data with QML} -- cgit v0.12 From 8eab49de0548363b18c6e2c7b4ff4a8b722992d6 Mon Sep 17 00:00:00 2001 From: Leena Gunda Date: Thu, 9 Dec 2010 11:24:24 +0530 Subject: Fix ConnMan bearer plugin to use new net.connman service name. --- src/plugins/bearer/connman/qconnmanengine.cpp | 247 ++----------------- src/plugins/bearer/connman/qconnmanengine.h | 11 +- .../bearer/connman/qconnmanservice_linux.cpp | 271 +-------------------- .../bearer/connman/qconnmanservice_linux_p.h | 76 +----- 4 files changed, 20 insertions(+), 585 deletions(-) diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp index 7f3501e..5b12b1e 100644 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/src/plugins/bearer/connman/qconnmanengine.cpp @@ -88,19 +88,10 @@ void QConnmanEngine::initialize() connect(tech,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), this,SLOT(technologyPropertyChangedContext(QString,QString,QDBusVariant))); + } - foreach(const QString devicePath,tech->getDevices()) { - QConnmanDeviceInterface *dev; - dev = new QConnmanDeviceInterface(devicePath); - if(!deviceMap.value(techPath).contains(devicePath)) { - connect(dev,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(devicePropertyChangedContext(QString,QString,QDBusVariant))); - deviceMap.insert(techPath,QStringList() << devicePath); - foreach(const QString network,dev->getNetworks()) { - serviceNetworks.insert(getServiceForNetwork(network),network); - } - } - } + foreach(const QString servPath, connmanManager->getServices()) { + addServiceConfiguration(servPath); } // Get current list of access points. @@ -110,7 +101,6 @@ void QConnmanEngine::initialize() QList QConnmanEngine::getConfigurations() { QMutexLocker locker(&mutex); - getNetworkListing(); QList fetchedConfigurations; QNetworkConfigurationPrivate* cpPriv = 0; @@ -133,21 +123,6 @@ QList QConnmanEngine::getConfigurations() return fetchedConfigurations; } -void QConnmanEngine::getNetworkListing() -{ - QMutexLocker locker(&mutex); - QMapIterator i(deviceMap); - while(i.hasNext()) { - i.next(); - QConnmanDeviceInterface dev(i.value().at(0)); - if(dev.isValid()) { - foreach(const QString network,dev.getNetworks()) { - addNetworkConfiguration(network); - } - } - } -} - void QConnmanEngine::doRequestUpdate() { connmanManager->requestScan(""); @@ -225,7 +200,7 @@ void QConnmanEngine::requestUpdate() QString QConnmanEngine::serviceFromId(const QString &id) { QMutexLocker locker(&mutex); - foreach(const QString service, serviceNetworks.keys()) { + foreach(const QString service, serviceNetworks) { if (id == QString::number(qHash(service))) return service; } @@ -330,24 +305,6 @@ QNetworkConfigurationPrivatePointer QConnmanEngine::defaultConfiguration() return QNetworkConfigurationPrivatePointer(); } - -QString QConnmanEngine::getServiceForNetwork(const QString &netPath) -{ - QMutexLocker locker(&mutex); - QConnmanNetworkInterface network(netPath, this); - foreach(QString service,connmanManager->getServices()) { - - QString devicePath = netPath.section("/",5,5); - - QConnmanServiceInterface serv(service,this); - if(serv.getName() == network.getName() - && network.getSignalStrength() == serv.getSignalStrength()) { - return service; - } - } - return QString(); -} - void QConnmanEngine::propertyChangedContext(const QString &path,const QString &item, const QDBusVariant &value) { Q_UNUSED(path); @@ -399,86 +356,19 @@ void QConnmanEngine::servicePropertyChangedContext(const QString &path,const QSt } } -void QConnmanEngine::networkPropertyChangedContext(const QString &/*path*/,const QString &/*item*/, const QDBusVariant &/*value*/) -{ - QMutexLocker locker(&mutex); -} - -void QConnmanEngine::devicePropertyChangedContext(const QString &devpath,const QString &item,const QDBusVariant &value) +void QConnmanEngine::technologyPropertyChangedContext(const QString & path, const QString &item, const QDBusVariant &value) { - QMutexLocker locker(&mutex); - if(item == "Networks") { - - QConnmanNetworkInterface network(devpath, this); + if(item == "State") { + if(value.variant().toString() == "offline") { + QConnmanTechnologyInterface tech(path); + disconnect(&tech,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), + this,SLOT(technologyPropertyChangedContext(QString,QString,QDBusVariant))); - QDBusArgument arg = qvariant_cast(value.variant()); - QStringList remainingNetworks = qdbus_cast(arg); - QString devicetype; - QMapIterator i(deviceMap); - while(i.hasNext()) { - i.next(); - if(i.value().contains(devpath)) { - devicetype = i.key().section("/",-1); - } - } - - QStringList oldnetworks = knownNetworks[devicetype]; - - if(remainingNetworks.count() > oldnetworks.count()) { - foreach(const QString netPath, remainingNetworks) { - if(!oldnetworks.contains(netPath)) { - addNetworkConfiguration(netPath); - } - } - } else { - foreach(const QString netPath, oldnetworks) { - QString servicePath = serviceNetworks.key(netPath); - if(!remainingNetworks.contains(netPath)) { - if(servicePath.isEmpty()) { - removeConfiguration(QString::number(qHash(netPath))); - } else { - removeConfiguration(QString::number(qHash(servicePath))); - } - knownNetworks[devicetype].removeAll(netPath); - } - } + technologies.remove(path); } } } -void QConnmanEngine::technologyPropertyChangedContext(const QString & path, const QString &item, const QDBusVariant &value) -{ - if(item == "Devices") { - QDBusArgument arg = qvariant_cast(value.variant()); - QStringList list = qdbus_cast(arg); - } - if(item == "State") { - - if(value.variant().toString() == "available") { - QConnmanTechnologyInterface tech(connmanManager->getPathForTechnology(path)); - foreach(const QString devPath, tech.getDevices()) { - - if(!deviceMap.value(path).contains(devPath)) { - QConnmanDeviceInterface *dev; - dev = new QConnmanDeviceInterface(devPath,this); - connect(dev,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(devicePropertyChangedContext(QString,QString,QDBusVariant))); - deviceMap.insert(path,QStringList() << devPath); - } - } - } - if(value.variant().toString() == "offline") { - deviceMap.remove(path); - QConnmanTechnologyInterface tech(path); - disconnect(&tech,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(technologyPropertyChangedContext(QString,QString,QDBusVariant))); - - technologies.remove(path); - getNetworkListing(); - } - } -} - void QConnmanEngine::configurationChange(const QString &id) { QMutexLocker locker(&mutex); @@ -513,8 +403,8 @@ void QConnmanEngine::configurationChange(const QString &id) locker.unlock(); emit configurationChanged(ptr); locker.relock(); - } + locker.unlock(); emit updateCompleted(); } @@ -622,12 +512,7 @@ void QConnmanEngine::removeConfiguration(const QString &id) disconnect(&serv,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), this,SLOT(servicePropertyChangedContext(QString,QString, QDBusVariant))); - QString netPath = serviceNetworks.value(service); - serviceNetworks.remove(service); - - QConnmanServiceInterface network(netPath); - disconnect(&network,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(networkPropertyChangedContext(QString,QString, QDBusVariant))); + serviceNetworks.removeOne(service); QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(id); locker.unlock(); @@ -641,20 +526,11 @@ void QConnmanEngine::addServiceConfiguration(const QString &servicePath) QMutexLocker locker(&mutex); QConnmanServiceInterface *serv; serv = new QConnmanServiceInterface(servicePath); - const QString netPath = serviceNetworks.value(servicePath); - - QConnmanNetworkInterface *network; - network = new QConnmanNetworkInterface(netPath, this); - const QString id = QString::number(qHash(servicePath)); if (!accessPointConfigurations.contains(id)) { - QConnmanDeviceInterface device(netPath.section("/",0,5),this); - - serviceNetworks.insert(servicePath,netPath); - - knownNetworks[device.getType()].append(netPath); + serviceNetworks.append(servicePath); connect(serv,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), this,SLOT(servicePropertyChangedContext(QString,QString, QDBusVariant))); @@ -693,15 +569,12 @@ void QConnmanEngine::addServiceConfiguration(const QString &servicePath) cpPriv->purpose = QNetworkConfiguration::PrivatePurpose; } - connect(network,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(networkPropertyChangedContext(QString,QString, QDBusVariant))); - cpPriv->state = getStateForService(servicePath); QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(ptr->id, ptr); foundConfigurations.append(cpPriv); - configInterfaces[cpPriv->id] = device.getInterface(); + configInterfaces[cpPriv->id] = serv->getInterface(); locker.unlock(); emit configurationAdded(ptr); @@ -710,96 +583,6 @@ void QConnmanEngine::addServiceConfiguration(const QString &servicePath) } } -void QConnmanEngine::addNetworkConfiguration(const QString &networkPath) -{ - QMutexLocker locker(&mutex); - if(networkPath.isNull()) - return; - - QConnmanNetworkInterface *network; - network = new QConnmanNetworkInterface(networkPath, this); - QString servicePath = getServiceForNetwork(networkPath); - QConnmanServiceInterface *serv; - - QString id; - QConnmanDeviceInterface device(networkPath.section("/",0,5),this); - - if(servicePath.isEmpty()) { - id = QString::number(qHash(networkPath)); - serv = 0; - } else { - id = QString::number(qHash(servicePath)); - serv = new QConnmanServiceInterface(servicePath,this); - connect(serv,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(servicePropertyChangedContext(QString,QString, QDBusVariant))); - } - - if (!id.isEmpty() && !accessPointConfigurations.contains(id)) { - - knownNetworks[device.getType()].append(networkPath); - - serviceNetworks.insert(servicePath,networkPath); - - connect(network,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(networkPropertyChangedContext(QString,QString, QDBusVariant))); - - QNetworkConfigurationPrivate* cpPriv = new QNetworkConfigurationPrivate(); - - QString networkName = network->getName(); - - if(networkName.isEmpty()) - networkName = "Hidden Network"; - - QNetworkConfiguration::BearerType bearerType; - - if(servicePath.isEmpty()) { - QString devicePath = networkPath.section("/",0,5); - - QConnmanDeviceInterface device(devicePath,this); - bearerType = typeToBearer(device.getType()); - } else { - if(serv->getType() == "cellular") { - bearerType = ofonoTechToBearerType("cellular"); - if(servicePath.isEmpty()) { - networkName = serv->getName(); - } - cpPriv->roamingSupported = isRoamingAllowed(servicePath); - } else { - bearerType = typeToBearer(serv->getType()); - } - } - - cpPriv->name = networkName; - cpPriv->isValid = true; - cpPriv->id = id; - cpPriv->type = QNetworkConfiguration::InternetAccessPoint; - cpPriv->bearerType = bearerType; - - if(network->getWifiSecurity() == "none") { - cpPriv->purpose = QNetworkConfiguration::PublicPurpose; - } else { - cpPriv->purpose = QNetworkConfiguration::PrivatePurpose; - } - - if(servicePath.isEmpty()) - cpPriv->state = QNetworkConfiguration::Undefined; - else - cpPriv->state = getStateForService(servicePath); - - QNetworkConfigurationPrivatePointer ptr(cpPriv); - accessPointConfigurations.insert(ptr->id, ptr); - foundConfigurations.append(cpPriv); - configInterfaces[cpPriv->id] = device.getInterface(); - - locker.unlock(); - emit configurationAdded(ptr); - locker.relock(); - emit updateCompleted(); - } /*else { - qDebug() << "Not added~~~~~~~~~~~"; - }*/ -} - bool QConnmanEngine::requiresPolling() const { return false; diff --git a/src/plugins/bearer/connman/qconnmanengine.h b/src/plugins/bearer/connman/qconnmanengine.h index 2a2308f..55067d8 100644 --- a/src/plugins/bearer/connman/qconnmanengine.h +++ b/src/plugins/bearer/connman/qconnmanengine.h @@ -103,8 +103,6 @@ private Q_SLOTS: void doRequestUpdate(); void servicePropertyChangedContext(const QString &,const QString &,const QDBusVariant &); - void networkPropertyChangedContext(const QString &,const QString &,const QDBusVariant &); - void devicePropertyChangedContext(const QString &,const QString &,const QDBusVariant &); void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); void technologyPropertyChangedContext(const QString &,const QString &, const QDBusVariant &); @@ -113,10 +111,6 @@ private: QList foundConfigurations; - void getNetworkListing(); - - QString getServiceForNetwork(const QString &network); - QString serviceFromId(const QString &id); QString networkFromId(const QString &id); @@ -125,15 +119,12 @@ private: void removeConfiguration(const QString &servicePath); void addServiceConfiguration(const QString &servicePath); - void addNetworkConfiguration(const QString &worknetPath); QDateTime activeTime; QMap technologies; // techpath, tech interface QMap configInterfaces; // id, interface name - QMap knownNetworks; //device path, net paths list - QMap deviceMap; //tech path, device path - QMap serviceNetworks; //service, network + QList serviceNetworks; //servpath QNetworkConfiguration::BearerType ofonoTechToBearerType(const QString &type); bool isRoamingAllowed(const QString &context); diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 0545422..092bea9 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -317,126 +317,8 @@ QString QConnmanManagerInterface::getPathForTechnology(const QString &name) return ""; } -QConnmanNetworkInterface::QConnmanNetworkInterface(const QString &dbusPathName, QObject *parent) - : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), - dbusPathName, - CONNMAN_NETWORK_INTERFACE, - QDBusConnection::systemBus(), parent) -{ -} - -QConnmanNetworkInterface::~QConnmanNetworkInterface() -{ -} - -void QConnmanNetworkInterface::connectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { - if(!connection().connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_NETWORK_INTERFACE), - QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant)))) { - qWarning() << "network properties not connected"; - } - } - if (QLatin1String(signal) == SIGNAL(propertyChangedContext(QString,QString,QDBusVariant))) { - QConnmanDBusHelper *helper; - helper = new QConnmanDBusHelper(this); - - dbusConnection.connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_NETWORK_INTERFACE), - QLatin1String("PropertyChanged"), - helper,SLOT(propertyChanged(QString,QDBusVariant))); - - QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); - } -} - -void QConnmanNetworkInterface::disconnectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { - - } -} - -QVariantMap QConnmanNetworkInterface::getProperties() -{ - QDBusReply reply = this->call(QLatin1String("GetProperties")); - return reply.value(); -} - -QVariant QConnmanNetworkInterface::getProperty(const QString &property) -{ - QVariant var; - QVariantMap map = getProperties(); - if (map.contains(property)) { - var = map.value(property); - } - return var; -} - -//properties - -QString QConnmanNetworkInterface::getAddress() -{ - QVariant var = getProperty("Address"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getName() -{ - QVariant var = getProperty("Name"); - return qdbus_cast(var); -} - -bool QConnmanNetworkInterface::isConnected() -{ - QVariant var = getProperty("Connected"); - return qdbus_cast(var); -} - -quint8 QConnmanNetworkInterface::getSignalStrength() -{ - QVariant var = getProperty("Strength"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getDevice() -{ - QVariant var = getProperty("Device"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiSsid() -{ - QVariant var = getProperty("WiFi.SSID"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiMode() -{ - QVariant var = getProperty("WiFi.Mode"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiSecurity() -{ - QVariant var = getProperty("WiFi.Security"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiPassphrase() -{ - QVariant var = getProperty("WiFi.Passphrase"); - return qdbus_cast(var); -} - ////////////////////////// - QConnmanProfileInterface::QConnmanProfileInterface(const QString &dbusPathName,QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), dbusPathName, @@ -503,6 +385,7 @@ QStringList QConnmanProfileInterface::getServices() return qdbus_cast(var); } + /////////////////////////// QConnmanServiceInterface::QConnmanServiceInterface(const QString &dbusPathName,QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), @@ -910,13 +793,6 @@ QString QConnmanTechnologyInterface::getType() } -QStringList QConnmanTechnologyInterface::getDevices() -{ - QVariant var = getProperty("Devices"); - return qdbus_cast(var); -} - - ////////////////////////////////// QConnmanAgentInterface::QConnmanAgentInterface(const QString &dbusPathName, QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), @@ -994,151 +870,8 @@ quint64 QConnmanCounterInterface::getTimeOnline() return 0; } -///////////////////////////////////////// -QConnmanDeviceInterface::QConnmanDeviceInterface(const QString &dbusPathName,QObject *parent) - : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), - dbusPathName, - CONNMAN_DEVICE_INTERFACE, - QDBusConnection::systemBus(), parent) -{ -} - -QConnmanDeviceInterface::~QConnmanDeviceInterface() -{ -} - -void QConnmanDeviceInterface::connectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { - dbusConnection.connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_DEVICE_INTERFACE), - QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant))); - - } - if (QLatin1String(signal) == SIGNAL(propertyChangedContext(QString,QString,QDBusVariant))) { - QConnmanDBusHelper *helper; - helper = new QConnmanDBusHelper(this); - - dbusConnection.connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_DEVICE_INTERFACE), - QLatin1String("PropertyChanged"), - helper,SLOT(propertyChanged(QString,QDBusVariant))); - - QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); - } -} - -void QConnmanDeviceInterface::disconnectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QVariant))) { - - } -} - -QVariantMap QConnmanDeviceInterface::getProperties() -{ - QDBusReply reply = this->call(QLatin1String("GetProperties")); - return reply.value(); -} - -bool QConnmanDeviceInterface::setProperty(const QString &name, const QDBusVariant &value) -{ - QDBusMessage reply = this->call(QLatin1String("SetProperty"),name, qVariantFromValue(value)); - return true; -} - -void QConnmanDeviceInterface::scan() -{ - QDBusReply reply = this->call(QLatin1String("ProposeScan")); - if(!reply.isValid()) { - qDebug() << reply.error().message(); - } -} - -QVariant QConnmanDeviceInterface::getProperty(const QString &property) -{ - QVariant var; - QVariantMap map = getProperties(); - if (map.contains(property)) { - var = map.value(property); - } - return var; -} - -//properties -QString QConnmanDeviceInterface::getAddress() -{ - QVariant var = getProperty("Address"); - return qdbus_cast(var); -} - -QString QConnmanDeviceInterface::getName() -{ - QVariant var = getProperty("Name"); - return qdbus_cast(var); -} - -QString QConnmanDeviceInterface::getType() -{ - QVariant var = getProperty("Type"); - return qdbus_cast(var); -} - -QString QConnmanDeviceInterface::getInterface() -{ - QVariant var = getProperty("Interface"); - return qdbus_cast(var); -} - -bool QConnmanDeviceInterface::isPowered() -{ - QVariant var = getProperty("Powered"); - return qdbus_cast(var); -} - -quint16 QConnmanDeviceInterface::getScanInterval() -{ - QVariant var = getProperty("ScanInterval"); - return qdbus_cast(var); -} - -bool QConnmanDeviceInterface::setScanInterval(const QString & interval) -{ -// QList args; -// args << qVariantFromValue(name) -// << value.variant(); - -// QDBusMessage reply = this->callWithArgumentList(QDBus::AutoDetect,QLatin1String("SetProperty"),args); - - return setProperty("ScanInterval", QDBusVariant(interval)); -} - -bool QConnmanDeviceInterface::isScanning() -{ - QVariant var = getProperty("Scanning"); - return qdbus_cast(var); -} - -QStringList QConnmanDeviceInterface::getNetworks() -{ - QVariant var = getProperty("Networks"); - return qdbus_cast(var); -} - -bool QConnmanDeviceInterface::setEnabled(bool powered) -{ - QList args; - args << qVariantFromValue(QString("Powered")) - << qVariantFromValue(QDBusVariant(powered)); - - QDBusMessage reply = this->callWithArgumentList(QDBus::AutoDetect,QLatin1String("SetProperty"),args); - return true; -} +///////////////////////////////////////// QConnmanDBusHelper::QConnmanDBusHelper(QObject * parent) : QObject(parent) { diff --git a/src/plugins/bearer/connman/qconnmanservice_linux_p.h b/src/plugins/bearer/connman/qconnmanservice_linux_p.h index 6e6b702..9615b33 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux_p.h +++ b/src/plugins/bearer/connman/qconnmanservice_linux_p.h @@ -70,8 +70,8 @@ #ifndef __CONNMAN_DBUS_H -#define CONNMAN_SERVICE "org.moblin.connman" -#define CONNMAN_PATH "/org/moblin/connman" +#define CONNMAN_SERVICE "net.connman" +#define CONNMAN_PATH "/net/connman" #define CONNMAN_DEBUG_INTERFACE CONNMAN_SERVICE ".Debug" #define CONNMAN_ERROR_INTERFACE CONNMAN_SERVICE ".Error" @@ -84,8 +84,6 @@ #define CONNMAN_TASK_INTERFACE CONNMAN_SERVICE ".Task" #define CONNMAN_PROFILE_INTERFACE CONNMAN_SERVICE ".Profile" #define CONNMAN_SERVICE_INTERFACE CONNMAN_SERVICE ".Service" -#define CONNMAN_DEVICE_INTERFACE CONNMAN_SERVICE ".Device" -#define CONNMAN_NETWORK_INTERFACE CONNMAN_SERVICE ".Network" #define CONNMAN_PROVIDER_INTERFACE CONNMAN_SERVICE ".Provider" #define CONNMAN_TECHNOLOGY_INTERFACE CONNMAN_SERVICE ".Technology" #endif @@ -151,38 +149,6 @@ protected: QVariant getProperty(const QString &); }; - -class QConnmanNetworkInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - QConnmanNetworkInterface(const QString &dbusPathName, QObject *parent = 0); - ~QConnmanNetworkInterface(); - - QVariantMap getProperties(); - - //properties - QString getAddress(); - QString getName(); - bool isConnected(); - quint8 getSignalStrength(); - QString getDevice(); - QString getWifiSsid(); - QString getWifiMode(); - QString getWifiSecurity(); - QString getWifiPassphrase(); - -Q_SIGNALS: - void propertyChanged(const QString &, const QDBusVariant &value); - void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); -protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); - QVariant getProperty(const QString &); -}; - class QConnmanProfileInterfacePrivate; class QConnmanProfileInterface : public QDBusAbstractInterface { @@ -287,8 +253,6 @@ public: QString getName(); QString getType(); - QStringList getDevices(); - Q_SIGNALS: void propertyChanged(const QString &, const QDBusVariant &value); void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); @@ -337,42 +301,6 @@ private: QConnmanCounterInterfacePrivate *d; }; -class QConnmanDeviceInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - QConnmanDeviceInterface(const QString &dbusPathName,QObject *parent = 0); - ~QConnmanDeviceInterface(); - - QVariantMap getProperties(); - void scan(); - -//properties - QString getAddress(); - QString getName(); - QString getType(); - QString getInterface(); - bool isPowered(); - quint16 getScanInterval(); - bool setScanInterval(const QString &interval); - - bool isScanning(); - QStringList getNetworks(); - bool setEnabled(bool powered); - bool setProperty(const QString &name, const QDBusVariant &value); - -Q_SIGNALS: - void propertyChanged(const QString &, const QDBusVariant &value); - void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); -protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); - QVariant getProperty(const QString &); - -}; - class QConnmanDBusHelper: public QObject, protected QDBusContext { Q_OBJECT -- cgit v0.12 From 1e84041247505502fa3b3f4865126719321f70d3 Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Thu, 9 Dec 2010 10:09:30 +0100 Subject: doc: Removed some empty \row commands from a table. --- doc/src/platforms/platform-notes.qdoc | 3 --- 1 file changed, 3 deletions(-) diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc index 9c5f3c8..a7c05e2 100644 --- a/doc/src/platforms/platform-notes.qdoc +++ b/doc/src/platforms/platform-notes.qdoc @@ -81,14 +81,11 @@ \header \o \o Concurrent \o XmlPatterns \o WebKit(*) \o CLucene \o Phonon \row \o g++ 3.3 \o \o \bold{X} \o \o \bold{X} \o \bold{X} \row \o g++ 3.4 and up \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} - \row \row \o SunCC 5.5 \o \o \o \o \bold{X} \o \bold{X} - \row \row \o aCC series 3 \o \o \o \o \bold{X} \o \bold{X} \row \o aCC series 6 \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \row \o xlC 6 \o \o \o \o \bold{X} \o \bold{X} \row \o Intel CC 10 \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} - \row \row \o MSVC 2003 \o \bold{X} \o \bold{X} \o \o \bold{X} \o \bold{X} \row \o MSVC 2005 and up \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \endtable -- cgit v0.12 From bd4ac06eb3c8ac3a9044689481873ce91aeb3180 Mon Sep 17 00:00:00 2001 From: Geir Vattekar Date: Thu, 9 Dec 2010 12:40:10 +0100 Subject: Doc: Fixed doc bug in Diagram Scene example Task-number: QTBUG-15647 --- doc/src/examples/diagramscene.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/examples/diagramscene.qdoc b/doc/src/examples/diagramscene.qdoc index 98bc983..d5cc4e3 100644 --- a/doc/src/examples/diagramscene.qdoc +++ b/doc/src/examples/diagramscene.qdoc @@ -195,7 +195,7 @@ This function returns a QWidget containing a QToolButton with an image of one of the \c DiagramItems, i.e., flowchart shapes. The image is created by the \c DiagramItem through the \c image() - function. The QButtonGroup class lets us attach a QVariant with + function. The QButtonGroup class lets us attach an id (int) with each button; we store the diagram's type, i.e., the DiagramItem::DiagramType enum. We use the stored diagram type when we create new diagram items for the scene. The widgets created -- cgit v0.12 From ad68c845e3e368dc4235e64b54e15a9ee886b078 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Thu, 9 Dec 2010 14:25:16 +0200 Subject: QLabel wraps text at fixed lengths There are multiple problems with text wrapping and dialogs. First, teh CBA height was assumed to be zero, or fetch from previous layout, which caused the dialog to be half under the CBA. Now, CBA height is always asked from AVKON metrics, since asking it from actual component might fail (or produce incorrect results) due to that the component is not created yet (or might still have previous layout active). Additionally, qinputDialog label is now having a size policy to restrict its growing out of dialog borders. Task-number: QT-4354 Reviewed-by: Janne Koskinen --- src/gui/dialogs/qdialog.cpp | 13 ++++++------- src/gui/dialogs/qinputdialog.cpp | 2 ++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index fbdc522..16ea045 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -901,15 +901,13 @@ bool QDialog::symbianAdjustedPosition() QPoint p; const bool doS60Positioning = !(isFullScreen()||isMaximized()); if (doS60Positioning) { + QPoint oldPos = pos(); // naive way to deduce screen orientation if (S60->screenHeightInPixels > S60->screenWidthInPixels) { int cbaHeight; - const CEikButtonGroupContainer* bgContainer = S60->buttonGroupContainer(); - if (!bgContainer) { - cbaHeight = 0; - } else { - cbaHeight = qt_TSize2QSize(bgContainer->Size()).height(); - } + TRect rect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, rect); + cbaHeight = rect.Height(); p.setY(S60->screenHeightInPixels - height() - cbaHeight); p.setX(0); } else { @@ -939,7 +937,8 @@ bool QDialog::symbianAdjustedPosition() p.setX(qMax(0,S60->screenWidthInPixels - width())); } } - move(p); + if (oldPos != p || p.y() < 0) + move(p); } return doS60Positioning; #else diff --git a/src/gui/dialogs/qinputdialog.cpp b/src/gui/dialogs/qinputdialog.cpp index ce27bd3..a29376a 100644 --- a/src/gui/dialogs/qinputdialog.cpp +++ b/src/gui/dialogs/qinputdialog.cpp @@ -234,6 +234,8 @@ void QInputDialogPrivate::ensureLayout() //we want to let the input dialog grow to available size on Symbian. #ifndef Q_OS_SYMBIAN mainLayout->setSizeConstraint(QLayout::SetMinAndMaxSize); +#else + label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); #endif mainLayout->addWidget(label); mainLayout->addWidget(inputWidget); -- cgit v0.12 From 9d8dac4e4509795b6af8a5885f6e9f1a3ccbaa06 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 10 Dec 2010 11:12:23 +0200 Subject: QDateTimeEdit is not showing correctly when resizes in symbian The problem boils down to using large square area for QDateTime widget (which is more or less a date-aware combobox). Style tries to make the combobox button as wide as it is tall, and as button is as tall as the combobox frame, it steals the whole square widget for itself. To fix this, we now limit the combobox button height to be no more than fourth of the total width of the widget. Thus, in normal, non-resized case, button is, as tall as the frame, but as widget is made larger, button stops to grow after reaching quarter of width of the widget. Task-number: QT-4312 Reviewed-by: Janne Koskinen --- src/gui/styles/qs60style.cpp | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 2f09529..3c715b7 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -104,11 +104,11 @@ const int QS60StylePrivate::m_numberOfLayouts = const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = { // *** generated pixel metrics *** -{5,0,-909,0,0,2,0,0,-1,7,12,22,15,15,7,198,-909,-909,-909,20,13,2,0,0,21,7,18,30,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1,106}, -{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,28,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1,106}, -{7,0,-909,0,0,2,0,0,-1,25,69,46,37,37,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,3,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135}, -{7,0,-909,0,0,2,0,0,-1,25,68,46,37,37,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,3,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135}, -{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,30,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1,106} +{5,0,-909,0,0,2,0,2,-1,7,12,22,15,15,7,198,-909,-909,-909,20,13,2,0,0,21,7,18,30,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1,106}, +{5,0,-909,0,0,1,0,2,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,28,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1,106}, +{7,0,-909,0,0,2,0,5,-1,25,69,46,37,37,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,3,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135}, +{7,0,-909,0,0,2,0,5,-1,25,68,46,37,37,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,3,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135}, +{7,0,-909,0,0,2,0,2,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,30,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1,106} // *** End of generated data *** }; @@ -1071,11 +1071,11 @@ void QS60Style::drawComplexControl(ComplexControl control, const QStyleOptionCom // Button frame QStyleOptionFrame buttonOption; buttonOption.QStyleOption::operator=(*cmb); - const int maxHeight = cmbxFrame.height(); - const int maxWidth = cmbxFrame.width() - cmbxEditField.width(); + const int maxButtonSide = cmbxFrame.width() - cmbxEditField.width(); + const int newTop = cmbxEditField.center().y() - maxButtonSide / 2; const int topLeftPoint = direction ? - (cmbxEditField.right() + 1) : (cmbxEditField.left() + 1 - maxWidth); - const QRect buttonRect(topLeftPoint, cmbxEditField.top(), maxWidth, maxHeight); + (cmbxEditField.right() + 1) : (cmbxEditField.left() + 1 - maxButtonSide); + const QRect buttonRect(topLeftPoint, newTop, maxButtonSide, maxButtonSide); buttonOption.rect = buttonRect; buttonOption.state = cmb->state; drawPrimitive(PE_PanelButtonCommand, &buttonOption, painter, widget); @@ -2884,30 +2884,24 @@ QRect QS60Style::subControlRect(ComplexControl control, const QStyleOptionComple ret = cmb->rect; const int width = cmb->rect.width(); const int height = cmb->rect.height(); - const int buttonIconSize = QS60StylePrivate::pixelMetric(PM_ButtonIconSize); const int buttonMargin = cmb->frame ? 2 : 0; // lets use spinbox frame here as well, as no combobox specific value available. const int frameThickness = cmb->frame ? pixelMetric(PM_SpinBoxFrameWidth, cmb, widget) : 0; - const int buttonWidth = qMax(cmb->rect.height(), buttonIconSize); - + const int buttonMinSize = QS60StylePrivate::pixelMetric(PM_ButtonIconSize) + 2 * buttonMargin; QSize buttonSize; - buttonSize.setWidth(buttonWidth + 2 * buttonMargin); - buttonSize.setHeight(qMax(8, (cmb->rect.height() >> 1) - frameThickness)); //buttons should be squares + //allow button to grow to one fourth of the frame height, if the frame is really tall + buttonSize.setHeight(qMin(height, qMax(width / 4, buttonMinSize))); + buttonSize.setWidth(buttonSize.height()); buttonSize = buttonSize.expandedTo(QApplication::globalStrut()); switch (scontrol) { case SC_ComboBoxArrow: { - const int xposMod = cmb->rect.x() + width - buttonMargin - buttonWidth; + const int xposMod = cmb->rect.x() + width - buttonMargin - buttonSize.width(); const int ypos = cmb->rect.y(); - ret.setRect(xposMod, ypos + buttonMargin, buttonWidth, height - 2 * buttonMargin); + ret.setRect(xposMod, ypos + buttonMargin, buttonSize.width(), height - 2 * buttonMargin); } break; case SC_ComboBoxEditField: { - const int withFrameX = cmb->rect.x() + width - frameThickness - buttonSize.width(); - ret = QRect( - frameThickness, - frameThickness, - withFrameX - frameThickness, - height - 2 * frameThickness); + ret = QRect(0, 0, cmb->rect.x() + width - buttonSize.width(), height); } break; case SC_ComboBoxListBoxPopup: { -- cgit v0.12 From f2ab8acd583941dcd673c627ff03d25e519e1f6b Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 10 Dec 2010 11:34:45 +0200 Subject: Fix whitespace in qs60style.cpp Reviewed-by: TrustMe --- src/gui/styles/qs60style.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 3c715b7..56d2d19 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -2889,7 +2889,7 @@ QRect QS60Style::subControlRect(ComplexControl control, const QStyleOptionComple const int frameThickness = cmb->frame ? pixelMetric(PM_SpinBoxFrameWidth, cmb, widget) : 0; const int buttonMinSize = QS60StylePrivate::pixelMetric(PM_ButtonIconSize) + 2 * buttonMargin; QSize buttonSize; - //allow button to grow to one fourth of the frame height, if the frame is really tall + //allow button to grow to one fourth of the frame height, if the frame is really tall buttonSize.setHeight(qMin(height, qMax(width / 4, buttonMinSize))); buttonSize.setWidth(buttonSize.height()); buttonSize = buttonSize.expandedTo(QApplication::globalStrut()); -- cgit v0.12 From 891d0c143b33c6e2e16af322652e4d7bccca2292 Mon Sep 17 00:00:00 2001 From: David Boddie Date: Fri, 10 Dec 2010 14:57:03 +0100 Subject: Doc: Added a note about the Public Suffix List. Added at the request of Peter Hartmann and Legal. --- doc/src/legal/3rdparty.qdoc | 81 ++++++++++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/doc/src/legal/3rdparty.qdoc b/doc/src/legal/3rdparty.qdoc index 8b3d5f2..9cc83a6 100644 --- a/doc/src/legal/3rdparty.qdoc +++ b/doc/src/legal/3rdparty.qdoc @@ -683,36 +683,57 @@ 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 - jquery 1.4.2.js Copyright 2010 John Resig - This software is dual licensed under the MIT or GPL version 2 licenses. - Nokia has used the software herein under the MIT license. - - jquery includes Sizzle.js Copyright 2010 The Dojo Foundaton and is - licensed under the MIT, BSD and GPL licenses. Nokia has used this - software herein under the MIT license. - - The MIT License - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS 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. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - + jquery 1.4.2.js Copyright 2010 John Resig + This software is dual licensed under the MIT or GPL version 2 licenses. + Nokia has used the software herein under the MIT license. + + jquery includes Sizzle.js Copyright 2010 The Dojo Foundaton and is + licensed under the MIT, BSD and GPL licenses. Nokia has used this + software herein under the MIT license. + + The MIT License + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS 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. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + \section1 The Public Suffix List + + \e{The Public Suffix List is an initiative of the Mozilla Project, but is + maintained as a community resource. It is available for use in any + software, but was originally created to meet the needs of browser + manufacturers. It allows browsers to, for example:} + \list + \o \e{Avoid privacy-damaging "supercookies" being set for high-level + domain name suffixes} + \o \e{Highlight the most important part of a domain name in the user + interface} + \o \e{Accurately sort history entries by site} + \endlist + -- quoted from \l{publicsuffix.org}. + + The public suffix list is used inside Qt to avoid such "supercookies" + mentioned above being set in the cookie jar supported by Qt (by the + QNetworkCookieJar class). + + See \c src/network/access/qnetworkcookiejartlds_p.h.INFO for more + information about how the list is used. */ -- cgit v0.12 From 6160f8541e4d7cb66de7680b5fb439fb757c59dd Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Mon, 13 Dec 2010 10:28:42 +0200 Subject: Symbian specific input methods should use 'Text' mode as default case Currently default case is 'lower'. It makes more sense to set the default as 'Text', as it is natural default case for most text entries. Task-number: QTBUG-10311 Reviewed-by: Miikka Heikkinen --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 4a1b9b9..5e8a2e1 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -89,7 +89,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_fepState->SetFlags(EAknEditorFlagDefault); m_fepState->SetDefaultInputMode( EAknEditorTextInputMode ); m_fepState->SetPermittedInputModes( EAknEditorAllInputModes ); - m_fepState->SetDefaultCase( EAknEditorLowerCase ); + m_fepState->SetDefaultCase( EAknEditorTextCase ); m_fepState->SetPermittedCases( EAknEditorAllCaseModes ); m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG); m_fepState->SetNumericKeymap( EAknEditorStandardNumberModeKeymap ); -- cgit v0.12 From 97954165ddeb8a57d8b6349c00fa50019450213b Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Mon, 13 Dec 2010 10:31:07 +0100 Subject: doc: Replaced some \raw and \endraw uses with \table and \endtable In DITA XML, there is no straightforward way to translate raw html into DITA XML, because the XML stream writer automagically escapes all the raw html elements. So I am beginning to replace uses of the \raw command with \table, which gets output correctly. The problem is the XML stream writer must see each XML element start and end, because it keeps them on a stack. When you output XML elements with the writeCharacters() function, it escapes the '<' and '>' of any XML elements the character string contains. --- doc/src/widgets-and-layouts/gallery-cde.qdoc | 427 ++++++--------------------- 1 file changed, 91 insertions(+), 336 deletions(-) diff --git a/doc/src/widgets-and-layouts/gallery-cde.qdoc b/doc/src/widgets-and-layouts/gallery-cde.qdoc index c783399..69287b9 100644 --- a/doc/src/widgets-and-layouts/gallery-cde.qdoc +++ b/doc/src/widgets-and-layouts/gallery-cde.qdoc @@ -34,345 +34,100 @@ This page shows some of the widgets available in Qt when configured to use the "cde" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage cde-pushbutton.png -\raw HTML - -\endraw -\inlineimage cde-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button. -\raw HTML - -\endraw -\raw HTML -
-\endraw -\inlineimage cde-checkbox.png -\raw HTML - -\endraw -\inlineimage cde-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image cde-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image cde-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\o \image cde-pushbutton.png + \image cde-toolbutton.png + \caption The QPushButton widget provides a command button. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage cde-groupbox.png -\raw HTML - -\endraw -\inlineimage cde-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage cde-frame.png -\raw HTML - -\endraw -\inlineimage cde-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage cde-listview.png -\raw HTML - -\endraw -\inlineimage cde-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage cde-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\table 100% +\row +\o \image cde-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image cde-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image cde-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image cde-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage cde-progressbar.png -\raw HTML - -\endraw -\inlineimage cde-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage cde-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\section2 Item Views + +\table 100% +\row +\o \image cde-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image cde-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image cde-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image cde-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image cde-label.png + The QLabel widget provides a text or image display. +\o \image cde-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image cde-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image cde-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image cde-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image cde-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image cde-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image cde-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image cde-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image cde-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image cde-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image cde-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image cde-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image cde-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image cde-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage cde-slider.png -\raw HTML - -\endraw -\inlineimage cde-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage cde-combobox.png -\raw HTML - -\endraw -\inlineimage cde-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage cde-spinbox.png -\raw HTML - -\endraw -\inlineimage cde-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage cde-dateedit.png -\raw HTML - -\endraw -\inlineimage cde-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage cde-textedit.png -\raw HTML - -\endraw -\inlineimage cde-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage cde-dial.png -\raw HTML - -\endraw -\inlineimage cde-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage cde-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw */ -- cgit v0.12 From ad3783ecd1308d357eb0451fe5b4fc24b49ed15a Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Mon, 13 Dec 2010 11:42:38 +0100 Subject: doc: Replaced some \raw and \endraw uses with \table and \endtable In DITA XML, there is no straightforward way to translate raw html into DITA XML, because the XML stream writer automagically escapes all the raw html elements. So I am beginning to replace uses of the \raw command with \table, which gets output correctly. The problem is the XML stream writer must see each XML element start and end, because it keeps them on a stack. When you output XML elements with the writeCharacters() function, it escapes the '<' and '>' of any XML elements the character string contains. --- .../widgets-and-layouts/gallery-cleanlooks.qdoc | 432 +++++--------------- doc/src/widgets-and-layouts/gallery-gtk.qdoc | 436 +++++---------------- doc/src/widgets-and-layouts/gallery-macintosh.qdoc | 432 +++++--------------- doc/src/widgets-and-layouts/gallery-motif.qdoc | 432 +++++--------------- doc/src/widgets-and-layouts/gallery-plastique.qdoc | 432 +++++--------------- doc/src/widgets-and-layouts/gallery-windows.qdoc | 432 +++++--------------- .../widgets-and-layouts/gallery-windowsvista.qdoc | 432 +++++--------------- doc/src/widgets-and-layouts/gallery-windowsxp.qdoc | 432 +++++--------------- 8 files changed, 768 insertions(+), 2692 deletions(-) diff --git a/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc b/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc index d03adc8..59e2934 100644 --- a/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc +++ b/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc @@ -34,345 +34,105 @@ This page shows some of the widgets available in Qt when configured to use the "cleanlooks" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage cleanlooks-pushbutton.png -\raw HTML - -\endraw -\inlineimage cleanlooks-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage cleanlooks-checkbox.png -\raw HTML - -\endraw -\inlineimage cleanlooks-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image cleanlooks-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image cleanlooks-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage cleanlooks-groupbox.png -\raw HTML - -\endraw -\inlineimage cleanlooks-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage cleanlooks-frame.png -\raw HTML - -\endraw -\inlineimage cleanlooks-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image cleanlooks-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image cleanlooks-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage cleanlooks-listview.png -\raw HTML - -\endraw -\inlineimage cleanlooks-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage cleanlooks-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage cleanlooks-progressbar.png -\raw HTML - -\endraw -\inlineimage cleanlooks-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage cleanlooks-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image cleanlooks-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image cleanlooks-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image cleanlooks-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image cleanlooks-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage cleanlooks-slider.png -\raw HTML - -\endraw -\inlineimage cleanlooks-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage cleanlooks-combobox.png -\raw HTML - -\endraw -\inlineimage cleanlooks-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage cleanlooks-spinbox.png -\raw HTML - -\endraw -\inlineimage cleanlooks-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage cleanlooks-dateedit.png -\raw HTML - -\endraw -\inlineimage cleanlooks-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage cleanlooks-textedit.png -\raw HTML - -\endraw -\inlineimage cleanlooks-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage cleanlooks-dial.png -\raw HTML - -\endraw -\inlineimage cleanlooks-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage cleanlooks-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image cleanlooks-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image cleanlooks-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image cleanlooks-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image cleanlooks-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image cleanlooks-label.png + The QLabel widget provides a text or image display. +\o \image cleanlooks-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image cleanlooks-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image cleanlooks-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image cleanlooks-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image cleanlooks-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image cleanlooks-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image cleanlooks-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image cleanlooks-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image cleanlooks-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image cleanlooks-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image cleanlooks-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image cleanlooks-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image cleanlooks-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image cleanlooks-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ diff --git a/doc/src/widgets-and-layouts/gallery-gtk.qdoc b/doc/src/widgets-and-layouts/gallery-gtk.qdoc index b3a6372..b2f8458 100644 --- a/doc/src/widgets-and-layouts/gallery-gtk.qdoc +++ b/doc/src/widgets-and-layouts/gallery-gtk.qdoc @@ -37,349 +37,105 @@ Take a look at the \l{Qt Widget Gallery} to see how Qt applications appear in other styles. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage gtk-pushbutton.png -\raw HTML - -\endraw -\inlineimage gtk-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage gtk-checkbox.png -\raw HTML - -\endraw -\inlineimage gtk-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image gtk-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image gtk-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage gtk-groupbox.png -\raw HTML - -\endraw -\inlineimage gtk-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage gtk-toolbox.png -\raw HTML - -\endraw -\inlineimage gtk-frame.png -\raw HTML -
-\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML - -\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image gtk-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image gtk-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - - -
-\endraw -\inlineimage gtk-listview.png -\raw HTML - -\endraw -\inlineimage gtk-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage gtk-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML - -\endraw -\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage gtk-progressbar.png -\raw HTML - -\endraw -\inlineimage gtk-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage gtk-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image gtk-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image gtk-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image gtk-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image gtk-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage gtk-slider.png -\raw HTML - -\endraw -\inlineimage gtk-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage gtk-combobox.png -\raw HTML - -\endraw -\inlineimage gtk-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage gtk-spinbox.png -\raw HTML - -\endraw -\inlineimage gtk-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage gtk-dateedit.png -\raw HTML - -\endraw -\inlineimage gtk-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage gtk-textedit.png -\raw HTML - -\endraw -\inlineimage gtk-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage gtk-dial.png -\raw HTML - -\endraw -\inlineimage gtk-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage gtk-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image gtk-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image gtk-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image gtk-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image gtk-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image gtk-label.png + The QLabel widget provides a text or image display. +\o \image gtk-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image gtk-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image gtk-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image gtk-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image gtk-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image gtk-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image gtk-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image gtk-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image gtk-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image gtk-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image gtk-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image gtk-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image gtk-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image gtk-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ diff --git a/doc/src/widgets-and-layouts/gallery-macintosh.qdoc b/doc/src/widgets-and-layouts/gallery-macintosh.qdoc index 30a78ca..44d7eb9 100644 --- a/doc/src/widgets-and-layouts/gallery-macintosh.qdoc +++ b/doc/src/widgets-and-layouts/gallery-macintosh.qdoc @@ -34,345 +34,105 @@ This page shows some of the widgets available in Qt when configured to use the "macintosh" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage macintosh-pushbutton.png -\raw HTML - -\endraw -\inlineimage macintosh-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage macintosh-checkbox.png -\raw HTML - -\endraw -\inlineimage macintosh-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image macintosh-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image macintosh-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage macintosh-groupbox.png -\raw HTML - -\endraw -\inlineimage macintosh-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage macintosh-frame.png -\raw HTML - -\endraw -\inlineimage macintosh-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image macintosh-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image macintosh-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage macintosh-listview.png -\raw HTML - -\endraw -\inlineimage macintosh-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage macintosh-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage macintosh-progressbar.png -\raw HTML - -\endraw -\inlineimage macintosh-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage macintosh-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image macintosh-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image macintosh-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image macintosh-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image macintosh-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage macintosh-slider.png -\raw HTML - -\endraw -\inlineimage macintosh-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage macintosh-combobox.png -\raw HTML - -\endraw -\inlineimage macintosh-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage macintosh-spinbox.png -\raw HTML - -\endraw -\inlineimage macintosh-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage macintosh-dateedit.png -\raw HTML - -\endraw -\inlineimage macintosh-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage macintosh-textedit.png -\raw HTML - -\endraw -\inlineimage macintosh-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage macintosh-dial.png -\raw HTML - -\endraw -\inlineimage macintosh-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage macintosh-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image macintosh-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image macintosh-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image macintosh-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image macintosh-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image macintosh-label.png + The QLabel widget provides a text or image display. +\o \image macintosh-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image macintosh-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image macintosh-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image macintosh-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image macintosh-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image macintosh-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image macintosh-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image macintosh-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image macintosh-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image macintosh-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image macintosh-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image macintosh-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image macintosh-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image macintosh-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ diff --git a/doc/src/widgets-and-layouts/gallery-motif.qdoc b/doc/src/widgets-and-layouts/gallery-motif.qdoc index 861c22a..b9c95c8 100644 --- a/doc/src/widgets-and-layouts/gallery-motif.qdoc +++ b/doc/src/widgets-and-layouts/gallery-motif.qdoc @@ -34,345 +34,105 @@ This page shows some of the widgets available in Qt when configured to use the "motif" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage motif-pushbutton.png -\raw HTML - -\endraw -\inlineimage motif-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage motif-checkbox.png -\raw HTML - -\endraw -\inlineimage motif-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image motif-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image motif-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage motif-groupbox.png -\raw HTML - -\endraw -\inlineimage motif-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage motif-frame.png -\raw HTML - -\endraw -\inlineimage motif-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image motif-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image motif-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage motif-listview.png -\raw HTML - -\endraw -\inlineimage motif-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage motif-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage motif-progressbar.png -\raw HTML - -\endraw -\inlineimage motif-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage motif-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image motif-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image motif-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image motif-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image motif-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage motif-slider.png -\raw HTML - -\endraw -\inlineimage motif-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage motif-combobox.png -\raw HTML - -\endraw -\inlineimage motif-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage motif-spinbox.png -\raw HTML - -\endraw -\inlineimage motif-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage motif-dateedit.png -\raw HTML - -\endraw -\inlineimage motif-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage motif-textedit.png -\raw HTML - -\endraw -\inlineimage motif-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage motif-dial.png -\raw HTML - -\endraw -\inlineimage motif-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage motif-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image motif-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image motif-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image motif-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image motif-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image motif-label.png + The QLabel widget provides a text or image display. +\o \image motif-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image motif-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image motif-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image motif-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image motif-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image motif-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image motif-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image motif-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image motif-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image motif-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image motif-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image motif-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image motif-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image motif-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ diff --git a/doc/src/widgets-and-layouts/gallery-plastique.qdoc b/doc/src/widgets-and-layouts/gallery-plastique.qdoc index 0ea62ee..5f2a1ec 100644 --- a/doc/src/widgets-and-layouts/gallery-plastique.qdoc +++ b/doc/src/widgets-and-layouts/gallery-plastique.qdoc @@ -34,345 +34,105 @@ This page shows some of the widgets available in Qt when configured to use the "plastique" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage plastique-pushbutton.png -\raw HTML - -\endraw -\inlineimage plastique-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage plastique-checkbox.png -\raw HTML - -\endraw -\inlineimage plastique-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image plastique-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image plastique-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage plastique-groupbox.png -\raw HTML - -\endraw -\inlineimage plastique-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage plastique-frame.png -\raw HTML - -\endraw -\inlineimage plastique-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image plastique-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image plastique-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage plastique-listview.png -\raw HTML - -\endraw -\inlineimage plastique-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage plastique-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage plastique-progressbar.png -\raw HTML - -\endraw -\inlineimage plastique-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage plastique-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image plastique-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image plastique-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image plastique-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image plastique-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage plastique-slider.png -\raw HTML - -\endraw -\inlineimage plastique-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage plastique-combobox.png -\raw HTML - -\endraw -\inlineimage plastique-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage plastique-spinbox.png -\raw HTML - -\endraw -\inlineimage plastique-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage plastique-dateedit.png -\raw HTML - -\endraw -\inlineimage plastique-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage plastique-textedit.png -\raw HTML - -\endraw -\inlineimage plastique-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage plastique-dial.png -\raw HTML - -\endraw -\inlineimage plastique-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage plastique-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image plastique-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image plastique-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image plastique-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image plastique-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image plastique-label.png + The QLabel widget provides a text or image display. +\o \image plastique-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image plastique-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image plastique-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image plastique-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image plastique-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image plastique-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image plastique-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image plastique-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image plastique-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image plastique-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image plastique-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image plastique-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image plastique-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image plastique-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ diff --git a/doc/src/widgets-and-layouts/gallery-windows.qdoc b/doc/src/widgets-and-layouts/gallery-windows.qdoc index d3464a0..fe38745 100644 --- a/doc/src/widgets-and-layouts/gallery-windows.qdoc +++ b/doc/src/widgets-and-layouts/gallery-windows.qdoc @@ -34,345 +34,105 @@ This page shows some of the widgets available in Qt when configured to use the "windows" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windows-pushbutton.png -\raw HTML - -\endraw -\inlineimage windows-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage windows-checkbox.png -\raw HTML - -\endraw -\inlineimage windows-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image windows-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image windows-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windows-groupbox.png -\raw HTML - -\endraw -\inlineimage windows-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage windows-frame.png -\raw HTML - -\endraw -\inlineimage windows-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image windows-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image windows-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage windows-listview.png -\raw HTML - -\endraw -\inlineimage windows-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage windows-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage windows-progressbar.png -\raw HTML - -\endraw -\inlineimage windows-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage windows-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image windows-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image windows-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image windows-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image windows-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windows-slider.png -\raw HTML - -\endraw -\inlineimage windows-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage windows-combobox.png -\raw HTML - -\endraw -\inlineimage windows-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage windows-spinbox.png -\raw HTML - -\endraw -\inlineimage windows-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage windows-dateedit.png -\raw HTML - -\endraw -\inlineimage windows-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage windows-textedit.png -\raw HTML - -\endraw -\inlineimage windows-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage windows-dial.png -\raw HTML - -\endraw -\inlineimage windows-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage windows-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image windows-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image windows-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image windows-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image windows-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image windows-label.png + The QLabel widget provides a text or image display. +\o \image windows-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image windows-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image windows-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image windows-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image windows-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image windows-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image windows-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image windows-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image windows-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image windows-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image windows-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image windows-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image windows-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image windows-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ diff --git a/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc b/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc index 00afd52..e017a2c 100644 --- a/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc +++ b/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc @@ -34,345 +34,105 @@ This page shows some of the widgets available in Qt when configured to use the "windowsvista" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsvista-pushbutton.png -\raw HTML - -\endraw -\inlineimage windowsvista-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage windowsvista-checkbox.png -\raw HTML - -\endraw -\inlineimage windowsvista-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image windowsvista-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image windowsvista-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsvista-groupbox.png -\raw HTML - -\endraw -\inlineimage windowsvista-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage windowsvista-frame.png -\raw HTML - -\endraw -\inlineimage windowsvista-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image windowsvista-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image windowsvista-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsvista-listview.png -\raw HTML - -\endraw -\inlineimage windowsvista-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage windowsvista-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsvista-progressbar.png -\raw HTML - -\endraw -\inlineimage windowsvista-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage windowsvista-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image windowsvista-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image windowsvista-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image windowsvista-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image windowsvista-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsvista-slider.png -\raw HTML - -\endraw -\inlineimage windowsvista-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage windowsvista-combobox.png -\raw HTML - -\endraw -\inlineimage windowsvista-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage windowsvista-spinbox.png -\raw HTML - -\endraw -\inlineimage windowsvista-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage windowsvista-dateedit.png -\raw HTML - -\endraw -\inlineimage windowsvista-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage windowsvista-textedit.png -\raw HTML - -\endraw -\inlineimage windowsvista-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage windowsvista-dial.png -\raw HTML - -\endraw -\inlineimage windowsvista-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage windowsvista-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image windowsvista-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image windowsvista-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image windowsvista-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image windowsvista-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image windowsvista-label.png + The QLabel widget provides a text or image display. +\o \image windowsvista-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image windowsvista-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image windowsvista-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image windowsvista-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image windowsvista-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image windowsvista-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image windowsvista-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image windowsvista-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image windowsvista-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image windowsvista-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image windowsvista-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image windowsvista-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image windowsvista-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image windowsvista-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ diff --git a/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc b/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc index 60c8ff0..f3c53ee 100644 --- a/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc +++ b/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc @@ -34,345 +34,105 @@ This page shows some of the widgets available in Qt when configured to use the "windowsxp" style. -\raw HTML -

Buttons

+\section2 Buttons - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsxp-pushbutton.png -\raw HTML - -\endraw -\inlineimage windowsxp-toolbutton.png -\raw HTML -
-\endraw -The QPushButton widget provides a command button.\raw HTML - -\endraw -The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar.\raw HTML -
-\endraw -\inlineimage windowsxp-checkbox.png -\raw HTML - -\endraw -\inlineimage windowsxp-radiobutton.png -\raw HTML -
-\endraw -The QCheckBox widget provides a checkbox with a text label.\raw HTML - -\endraw -The QRadioButton widget provides a radio button with a text or pixmap label.\raw HTML -
-\endraw -\raw HTML -

Containers

+\table 100% +\row +\o \image windowsxp-pushbutton.png + \caption The QPushButton widget provides a command button. +\o \image windowsxp-toolbutton.png + \caption The QToolButton class provides a quick-access button to commands + or options, usually used inside a QToolBar. +\endtable - -- - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsxp-groupbox.png -\raw HTML - -\endraw -\inlineimage windowsxp-tabwidget.png -\raw HTML -
-\endraw -The QGroupBox widget provides a group box frame with a title.\raw HTML - -\endraw -The QTabWidget class provides a stack of tabbed widgets.\raw HTML -
-\endraw -\inlineimage windowsxp-frame.png -\raw HTML - -\endraw -\inlineimage windowsxp-toolbox.png -\raw HTML -
-\endraw -The QFrame widget provides a simple decorated container for other widgets.\raw HTML - -\endraw -The QToolBox class provides a column of tabbed widget items.\raw HTML -
-\endraw -\raw HTML -

Item Views

+\table 100% +\row +\o \image windowsxp-checkbox.png + \caption The QCheckBox widget provides a checkbox with a text label. +\o \image windowsxp-radiobutton.png + \caption The QRadioButton widget provides a radio button with a text or pixmap label. +\endtable - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsxp-listview.png -\raw HTML - -\endraw -\inlineimage windowsxp-treeview.png -\raw HTML -
-\endraw -The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.\raw HTML - -\endraw -The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.\raw HTML -
-\endraw -\inlineimage windowsxp-tableview.png -\raw HTML -
-\endraw -The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\raw HTML -
-\endraw -\raw HTML -

Display Widgets

+\section2 Containers - -- - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsxp-progressbar.png -\raw HTML - -\endraw -\inlineimage windowsxp-lcdnumber.png -\raw HTML -
-\endraw -The QProgressBar widget provides a horizontal progress bar.\raw HTML - -\endraw -The QLCDNumber widget displays a number with LCD-like digits.\raw HTML -
-\endraw -\inlineimage windowsxp-label.png -\raw HTML -
-\endraw -The QLabel widget provides a text or image display.\raw HTML -
-\endraw -\raw HTML -

Input Widgets

+\table 100% +\row +\o \image windowsxp-groupbox.png + The The QGroupBox widget provides a group box frame with a title. +\o \image windowsxp-tabwidget.png + The QTabWidget class provides a stack of tabbed widgets. +\o \image windowsxp-frame.png + The QFrame widget provides a simple decorated container for other widgets. +\o \image windowsxp-toolbox.png + The QToolBox class provides a column of tabbed widget items. +\endtable - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\endraw -\inlineimage windowsxp-slider.png -\raw HTML - -\endraw -\inlineimage windowsxp-lineedit.png -\raw HTML -
-\endraw -The QSlider widget provides a vertical or horizontal slider.\raw HTML - -\endraw -The QLineEdit widget is a one-line text editor.\raw HTML -
-\endraw -\inlineimage windowsxp-combobox.png -\raw HTML - -\endraw -\inlineimage windowsxp-doublespinbox.png -\raw HTML -
-\endraw -The QComboBox widget is a combined button and pop-up list.\raw HTML - -\endraw -The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.\raw HTML -
-\endraw -\inlineimage windowsxp-spinbox.png -\raw HTML - -\endraw -\inlineimage windowsxp-timeedit.png -\raw HTML -
-\endraw -The QSpinBox class provides a spin box widget.\raw HTML - -\endraw -The QTimeEdit class provides a widget for editing times.\raw HTML -
-\endraw -\inlineimage windowsxp-dateedit.png -\raw HTML - -\endraw -\inlineimage windowsxp-datetimeedit.png -\raw HTML -
-\endraw -The QDateEdit class provides a widget for editing dates.\raw HTML - -\endraw -The QDateTimeEdit class provides a widget for editing dates and times.\raw HTML -
-\endraw -\inlineimage windowsxp-textedit.png -\raw HTML - -\endraw -\inlineimage windowsxp-horizontalscrollbar.png -\raw HTML -
-\endraw -The QTextEdit class provides a widget that is used to edit and - display both plain and rich text.\raw HTML - -\endraw -The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.\raw HTML -
-\endraw -\inlineimage windowsxp-dial.png -\raw HTML - -\endraw -\inlineimage windowsxp-calendarwidget.png -\raw HTML -
-\endraw -The QDial class provides a rounded range control (like a - speedometer or potentiometer).\raw HTML - -\endraw -The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.\raw HTML -
-\endraw -\inlineimage windowsxp-fontcombobox.png -\raw HTML -
-\endraw -The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.\raw HTML -
-\endraw +\section2 Item Views + +\table 100% +\row +\o \image windowsxp-listview.png + The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. +\o \image windowsxp-treeview.png + The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. +\o \image windowsxp-tableview.png + The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o +\o +\endtable + +\section2 Display Widgets + +\table 100% +\row +\o \image windowsxp-progressbar.png + The QProgressBar widget provides a horizontal progress bar. +\o \image windowsxp-label.png + The QLabel widget provides a text or image display. +\o \image windowsxp-lcdnumber.png + The QLCDNumber widget displays a number with LCD-like digits. +\endtable + +\section2 Input Widgets + +\table 100% +\row +\o \image windowsxp-lineedit.png + The QLineEdit widget is a one-line text editor. +\o \image windowsxp-dateedit.png + The QDateEdit class provides a widget for editing dates. +\o \image windowsxp-timeedit.png + The QTimeEdit class provides a widget for editing times. +\o \image windowsxp-datetimeedit.png + The QDateTimeEdit class provides a widget for editing dates and times. +\endtable + +\table 100% +\row +\o \image windowsxp-slider.png + The QSlider widget provides a vertical or horizontal slider. +\o \image windowsxp-combobox.png + The QComboBox widget is a combined button and pop-up list. +\o \image windowsxp-spinbox.png + The QSpinBox class provides a spin box widget. +\endtable + +\table 100% +\row +\o \image windowsxp-fontcombobox.png + The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. +\o \image windowsxp-doublespinbox.png + The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. +\o \image windowsxp-horizontalscrollbar.png + The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. +\endtable + +\table 100% +\row +\o \image windowsxp-dial.png + The QDial class provides a rounded range control (like a speedometer or potentiometer). +\o \image windowsxp-textedit.png + The QTextEdit class provides a widget that is used to edit and display both plain and rich text. +\o \image windowsxp-calendarwidget.png + The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. +\endtable */ -- cgit v0.12 From 21fd6c0d818f3f4a3efa8904c8ddbfeb3a1e931d Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Mon, 13 Dec 2010 12:25:54 +0100 Subject: doc: Replaced some \raw and \endraw uses with \table and \endtable In DITA XML, there is no straightforward way to translate raw html into DITA XML, because the XML stream writer automagically escapes all the raw html elements. So I am beginning to replace uses of the \raw command with \table, which gets output correctly. The problem is the XML stream writer must see each XML element start and end, because it keeps them on a stack. When you output XML elements with the writeCharacters() function, it escapes the '<' and '>' of any XML elements the character string contains. --- doc/src/widgets-and-layouts/gallery.qdoc | 112 +++++++++---------------------- 1 file changed, 30 insertions(+), 82 deletions(-) diff --git a/doc/src/widgets-and-layouts/gallery.qdoc b/doc/src/widgets-and-layouts/gallery.qdoc index 201817b..d11d9c8 100644 --- a/doc/src/widgets-and-layouts/gallery.qdoc +++ b/doc/src/widgets-and-layouts/gallery.qdoc @@ -34,103 +34,51 @@ with the native desktop enviroment. Below, you can find links to the various widget styles that are supplied with Qt 4. - \raw HTML - - - - - - - - - - - - - - - - - - - - - - - - -
- \endraw - \image plastique-tabwidget.png Plastique Style Widget Gallery - - \bold{\l{Plastique Style Widget Gallery}} + \table + \row + \o \image plastique-tabwidget.png Plastique Style Widget Gallery + \caption \l{Plastique Style Widget Gallery} The Plastique style is provided by QPlastiqueStyle. - \raw HTML - - \endraw - \image windowsxp-tabwidget.png Windows XP Style Widget Gallery - - \bold{\l{Windows XP Style Widget Gallery}} + \o \image windowsxp-tabwidget.png Windows XP Style Widget Gallery + \caption \l{Windows XP Style Widget Gallery} The Windows XP style is provided by QWindowsXPStyle. - \raw HTML -
- \endraw - \image gtk-tabwidget.png GTK Style Widget Gallery + \o \image windows-tabwidget.png Windows Style Widget Gallery + \caption \l{Windows Style Widget Gallery} - \bold{\l{GTK Style Widget Gallery}} - - The GTK style is provided by QGtkStyle. - \raw HTML - - \endraw - \image macintosh-tabwidget.png Macintosh Style Widget Gallery + The Windows style is provided by QWindowsStyle. + \endtable - \bold{\l{Macintosh Style Widget Gallery}} + \table + \row + \o \image macintosh-tabwidget.png Macintosh Style Widget Gallery + \caption \l{Macintosh Style Widget Gallery} The Macintosh style is provided by QMacStyle. - \raw HTML -
- \endraw - \image cleanlooks-tabwidget.png Cleanlooks Style Widget Gallery - - \bold{\l{Cleanlooks Style Widget Gallery}} + \o \image cleanlooks-tabwidget.png Cleanlooks Style Widget Gallery + \caption \l{Cleanlooks Style Widget Gallery} The Cleanlooks style is provided by QCleanlooksStyle. - \raw HTML - - \endraw - \image windowsvista-tabwidget.png Windows Vista Style Widget Gallery - - \bold{\l{Windows Vista Style Widget Gallery}} + \o \image windowsvista-tabwidget.png Windows Vista Style Widget Gallery + \caption \l{Windows Vista Style Widget Gallery} The Windows Vista style is provided by QWindowsVistaStyle. - \raw HTML -
- \endraw - \image motif-tabwidget.png Motif Style Widget Gallery + \endtable - \bold{\l{Motif Style Widget Gallery}} + \table + \row + \o \image gtk-tabwidget.png GTK Style Widget Gallery + \caption \l{GTK Style Widget Gallery} - The Motif style is provided by QMotifStyle. - \raw HTML - - \endraw - \image windows-tabwidget.png Windows Style Widget Gallery - - \bold{\l{Windows Style Widget Gallery}} - - The Windows style is provided by QWindowsStyle. - \raw HTML -
- \endraw - \image cde-tabwidget.png CDE Style Widget Gallery + The GTK style is provided by QGtkStyle. + \o \image motif-tabwidget.png Motif Style Widget Gallery + \caption \l{Motif Style Widget Gallery} - \bold{\l{CDE Style Widget Gallery}} + The Motif style is provided by QMotifStyle. + \o \image cde-tabwidget.png CDE Style Widget Gallery + \caption \l{CDE Style Widget Gallery} The Common Desktop Environment style is provided by QCDEStyle. - \raw HTML -
- \endraw + \endtable */ -- cgit v0.12 From 7ee2e9fd873b2c38a1a362170c4a0e4754cfd22a Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 18 Oct 2010 09:28:14 +0200 Subject: Cocoa: native child filedialogs sometimes shows non-native on screen The reason is that we make all child dialogs of a modal dialogs non-modaly shaddowed, as documented. But we forgot to check if a window is actually visible before raising it to front. Also adding harmless auto release pool Rev-By: prasanth --- src/gui/kernel/qeventdispatcher_mac.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index 515c6d3..dc926e0 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -844,7 +844,7 @@ static void setChildrenWorksWhenModal(QWidget *widget, bool worksWhenModal) NSWindow *window = qt_mac_window_for(dialogs[i]); if (window && [window isKindOfClass:[NSPanel class]]) { [static_cast(window) setWorksWhenModal:worksWhenModal]; - if (worksWhenModal && dialogs[i]->isVisible()){ + if (worksWhenModal && [window isVisible]){ [window orderFront:window]; } } @@ -856,6 +856,7 @@ void QEventDispatcherMacPrivate::updateChildrenWorksWhenModal() // Make the dialog children of the widget // active. And make the dialog children of // the previous modal dialog unactive again: + QMacCocoaAutoReleasePool pool; int size = cocoaModalSessionStack.size(); if (size > 0){ if (QWidget *prevModal = cocoaModalSessionStack[size-1].widget) -- cgit v0.12 From a04b19d34c23df5bb6e4f499b6b12c7a1211969a Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 18 Oct 2010 15:27:02 +0200 Subject: Cocoa: make sure stays on top child windows are not levelled down [NSWindow addChild] levels the child to the level of the parent. In Qt we do not want this. So we do a check after setting up the parent-child relationship for this. Reviewed-by: cduclos --- src/gui/kernel/qwidget_mac.mm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 997419b..08af3ac 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2822,8 +2822,12 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (NSWindow *pwin = [qt_mac_nativeview_for(parent) window]) { if (set) { Qt::WindowType ptype = parent->window()->windowType(); - if ([pwin isVisible] && (ptype == Qt::Window || ptype == Qt::Dialog) && ![qwin parentWindow]) + if ([pwin isVisible] && (ptype == Qt::Window || ptype == Qt::Dialog) && ![qwin parentWindow]) { + NSInteger level = [qwin level]; [pwin addChildWindow:qwin ordered:NSWindowAbove]; + if ([qwin level] < level) + [qwin setLevel:level]; + } } else { [pwin removeChildWindow:qwin]; } @@ -2837,8 +2841,12 @@ void QWidgetPrivate::setSubWindowStacking(bool set) if (NSWindow *cwin = [qt_mac_nativeview_for(child) window]) { if (set) { Qt::WindowType ctype = child->window()->windowType(); - if ([cwin isVisible] && (ctype == Qt::Window || ctype == Qt::Dialog) && ![cwin parentWindow]) + if ([cwin isVisible] && (ctype == Qt::Window || ctype == Qt::Dialog) && ![cwin parentWindow]) { + NSInteger level = [cwin level]; [qwin addChildWindow:cwin ordered:NSWindowAbove]; + if ([cwin level] < level) + [cwin setLevel:level]; + } } else { [qwin removeChildWindow:qt_mac_window_for(child)]; } -- cgit v0.12 From 19148694b1e094ad968e26e6fab448d3d2c7f4d4 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 18 Oct 2010 15:30:12 +0200 Subject: Cocoa: cannot use staysOnTop flag for native file dialogs We cannot mix staysOnTop and native file dialogs, since Cocoa will anyway set it back to NSModalPanelWindowLevel when running it app modal. There are ways to work around this issue, but the file dialog also has a button for showing a "create directory" modal panel, and this we cannot control. Reviewed-by: cduclos --- src/gui/dialogs/qfiledialog_mac.mm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm index 87850a7..1e13113 100644 --- a/src/gui/dialogs/qfiledialog_mac.mm +++ b/src/gui/dialogs/qfiledialog_mac.mm @@ -719,6 +719,14 @@ bool QFileDialogPrivate::setVisible_sys(bool visible) if (!visible == q->isHidden()) return false; + if (q->windowFlags() & Qt::WindowStaysOnTopHint) { + // The native file dialog tries all it can to stay + // on the NSModalPanel level. And it might also show + // its own "create directory" dialog that we cannot control. + // So we need to use the non-native version in this case... + return false; + } + #ifndef QT_MAC_USE_COCOA return visible ? showCarbonNavServicesDialog() : hideCarbonNavServicesDialog(); #else -- cgit v0.12 From 3e2cb226277998a7841c85048493c89bc1ccc95f Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 18 Oct 2010 16:12:46 +0200 Subject: Cocoa: Fix addChildWindow bug where we connect a grandparent to a child A plain bug where we ask for a list of widgets, but forget that qFindChildren is recursive, which is not what we want. Reviewed-by: jbache --- src/gui/kernel/qwidget_mac.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 08af3ac..b89cb88 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2834,9 +2834,9 @@ void QWidgetPrivate::setSubWindowStacking(bool set) } } - QList widgets = q->findChildren(); + QObjectList widgets = q->children(); for (int i=0; i(widgets.at(i)); if (child && child->isWindow()) { if (NSWindow *cwin = [qt_mac_nativeview_for(child) window]) { if (set) { -- cgit v0.12 From 780b4d84205f16c46f6c5e85e6c1925beb4e4dba Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 22 Nov 2010 11:08:34 +0100 Subject: Cocoa: combobox does not hightlight when mouse re-hovers the first item The reason is that on Mac, the highlight is supposed to switch off when the mouse moves out of the drop down menu. On X11, it stays. So there is a separate code path for this in qcombobox.cpp. But it fails to clear the index set in the view when the mouse leaves, which stops the item from re-highligh when the mouse re-enters. Reviewed-by: ogoffart --- src/gui/widgets/qcombobox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index 7859bdc..5a4e507 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -398,7 +398,7 @@ void QComboBoxPrivateContainer::leaveEvent(QEvent *) #ifdef Q_WS_MAC QStyleOptionComboBox opt = comboStyleOption(); if (combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo)) - view->clearSelection(); + view->setCurrentIndex(QModelIndex()); #endif } -- cgit v0.12 From d9004ddf237a09f3b7f25128ceb83a0e79e7b1aa Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Mon, 13 Dec 2010 13:39:34 +0100 Subject: Cocoa: popup hides behind window Reason: when cocoa receives a mouse press/release in a window, it finds the correct view inside that window and sends the mouse event to it. But NSWindow also does some other stuff just before sending the event, like raise and lower windows. So when we override sendEvent, and more over, do not call [super sendEvent], we stop this raise/lower etc from working. So, to make this work again, I partially revert change 0b2eab87ad3bd73a0744469a45c29ca098649c9b Task-number: QTBUG-15638, QTBUG-1517 Reviewed-by: Fabien Freling --- src/gui/kernel/qcocoasharedwindowmethods_mac_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h index ddf1a27..1e2e71b 100644 --- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h +++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h @@ -182,7 +182,7 @@ QT_END_NAMESPACE bool handled = false; // sometimes need to redirect mouse events to the popup. QWidget *popup = qAppInstance()->activePopupWidget(); - if (popup) { + if (popup && popup != widget) { switch([event type]) { case NSLeftMouseDown: -- cgit v0.12 From 69ed34d2aa77a3bacc7f66797baa514f35358b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 13 Dec 2010 14:21:39 +0100 Subject: Fixed GL 2 engine rendering of images / pixmaps above max texture size. Down-scale images or pixmaps that are above the max texture size. Not optimal performance-wise, but better than failing. Task-number: QTBUG-16033 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../gl2paintengineex/qpaintengineex_opengl2.cpp | 52 +++++++++++++++++++--- .../gl2paintengineex/qpaintengineex_opengl2_p.h | 2 + 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 4a64f39..668a3f0 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -163,6 +163,8 @@ void QGL2PaintEngineExPrivate::setBrush(const QBrush& brush) Q_ASSERT(newStyle != Qt::NoBrush); currentBrush = brush; + if (!currentBrushPixmap.isNull()) + currentBrushPixmap = QPixmap(); brushUniformsDirty = true; // All brushes have at least one uniform if (newStyle > Qt::SolidPattern) @@ -221,10 +223,14 @@ void QGL2PaintEngineExPrivate::updateBrushTexture() updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, q->state()->renderHints & QPainter::SmoothPixmapTransform); } else if (style == Qt::TexturePattern) { - const QPixmap& texPixmap = currentBrush.texture(); + currentBrushPixmap = currentBrush.texture(); + + int max_texture_size = ctx->d_func()->maxTextureSize(); + if (currentBrushPixmap.width() > max_texture_size || currentBrushPixmap.height() > max_texture_size) + currentBrushPixmap = currentBrushPixmap.scaled(max_texture_size, max_texture_size, Qt::KeepAspectRatio); glActiveTexture(GL_TEXTURE0 + QT_BRUSH_TEXTURE_UNIT); - QGLTexture *tex = ctx->d_func()->bindTexture(texPixmap, GL_TEXTURE_2D, GL_RGBA, + QGLTexture *tex = ctx->d_func()->bindTexture(currentBrushPixmap, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption | QGLContext::CanFlipNativePixmapBindOption); updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, q->state()->renderHints & QPainter::SmoothPixmapTransform); @@ -1305,13 +1311,30 @@ void QGL2PaintEngineEx::transformChanged() } +static const QRectF scaleRect(const QRectF &r, qreal sx, qreal sy) +{ + return QRectF(r.x() * sx, r.y() * sy, r.width() * sx, r.height() * sy); +} + void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, const QRectF & src) { Q_D(QGL2PaintEngineEx); + QGLContext *ctx = d->ctx; + + int max_texture_size = ctx->d_func()->maxTextureSize(); + if (pixmap.width() > max_texture_size || pixmap.height() > max_texture_size) { + QPixmap scaled = pixmap.scaled(max_texture_size, max_texture_size, Qt::KeepAspectRatio); + + const qreal sx = scaled.width() / qreal(pixmap.width()); + const qreal sy = scaled.height() / qreal(pixmap.height()); + + drawPixmap(dest, scaled, scaleRect(src, sx, sy)); + return; + } + ensureActive(); d->transferMode(ImageDrawingMode); - QGLContext *ctx = d->ctx; glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); QGLTexture *texture = ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, @@ -1334,11 +1357,24 @@ void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const Qt::ImageConversionFlags) { Q_D(QGL2PaintEngineEx); + QGLContext *ctx = d->ctx; + + int max_texture_size = ctx->d_func()->maxTextureSize(); + if (image.width() > max_texture_size || image.height() > max_texture_size) { + QImage scaled = image.scaled(max_texture_size, max_texture_size, Qt::KeepAspectRatio); + + const qreal sx = scaled.width() / qreal(image.width()); + const qreal sy = scaled.height() / qreal(image.height()); + + drawImage(dest, scaled, scaleRect(src, sx, sy)); + return; + } + ensureActive(); d->transferMode(ImageDrawingMode); - QGLContext *ctx = d->ctx; glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); + QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption); GLuint id = texture->id; @@ -1737,7 +1773,13 @@ void QGL2PaintEngineEx::drawPixmapFragments(const QPainter::PixmapFragment *frag } ensureActive(); - d->drawPixmapFragments(fragments, fragmentCount, pixmap, hints); + int max_texture_size = d->ctx->d_func()->maxTextureSize(); + if (pixmap.width() > max_texture_size || pixmap.height() > max_texture_size) { + QPixmap scaled = pixmap.scaled(max_texture_size, max_texture_size, Qt::KeepAspectRatio); + d->drawPixmapFragments(fragments, fragmentCount, scaled, hints); + } else { + d->drawPixmapFragments(fragments, fragmentCount, pixmap, hints); + } } diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h index b255e75..02b737b 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h @@ -274,6 +274,8 @@ public: QBrush currentBrush; // May not be the state's brush! const QBrush noBrush; + QPixmap currentBrushPixmap; + QGL2PEXVertexArray vertexCoordinateArray; QGL2PEXVertexArray textureCoordinateArray; QVector elementIndices; -- cgit v0.12 From 0af1f5508e165f3b494ab236cb1cdf1b0edcffa5 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Mon, 13 Dec 2010 11:29:22 +0100 Subject: Fixes text jitter in QtQuick components when using the virtual keyboard QGraphicsView::mapFromScene() returns a QRect instead of a QRectF. Thus, we were prematurely rounding the micro focus rectangle coordinates in QGraphicsView::inputMethodQuery(). (The Qt::ImMicroFocus query returns a QRectF from QGraphicsScene, which is the result of querying QDeclarativeTextEdit and mapping it to the scene.) Auto-test included. Reviewed-by: leo Reviewed-by: bnilsen Task-number: QTCOMPONENTS-288 Task-number: QTBUG-16063 --- src/gui/graphicsview/qgraphicsview.cpp | 2 +- tests/auto/qgraphicsview/tst_qgraphicsview.cpp | 39 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index a566c8e..2acea8a 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -2494,7 +2494,7 @@ QVariant QGraphicsView::inputMethodQuery(Qt::InputMethodQuery query) const QVariant value = d->scene->inputMethodQuery(query); if (value.type() == QVariant::RectF) - value = mapFromScene(value.toRectF()).boundingRect(); + value = d->mapRectFromScene(value.toRectF()); else if (value.type() == QVariant::PointF) value = mapFromScene(value.toPointF()); else if (value.type() == QVariant::Rect) diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index 0a9633f..e1fbaee 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -246,6 +246,7 @@ private slots: void QTBUG_4151_clipAndIgnore(); void QTBUG_5859_exposedRect(); void QTBUG_7438_cursor(); + void QTBUG_16063_microFocusRect(); public slots: void dummySlot() {} @@ -4450,5 +4451,43 @@ void tst_QGraphicsView::QTBUG_7438_cursor() #endif } +class IMItem : public QGraphicsRectItem +{ +public: + IMItem(QGraphicsItem *parent = 0): + QGraphicsRectItem(mf.adjusted(-5, -5, 5, 5), parent) + { + setFlag(QGraphicsItem::ItemIsFocusable, true); + setFlag(QGraphicsItem::ItemAcceptsInputMethod, true); + } + + QVariant inputMethodQuery(Qt::InputMethodQuery query) const + { + return mf; + } + + static QRectF mf; +}; + +QRectF IMItem::mf(1.5, 1.6, 10, 10); + +void tst_QGraphicsView::QTBUG_16063_microFocusRect() +{ + QGraphicsScene scene; + IMItem *item = new IMItem(); + scene.addItem(item); + + QGraphicsView view(&scene); + + view.setFixedSize(40, 40); + view.show(); + QTest::qWaitForWindowShown(&view); + + scene.setFocusItem(item); + view.setFocus(); + QRectF mfv = view.inputMethodQuery(Qt::ImMicroFocus).toRectF(); + QCOMPARE(mfv, QRectF(13.5, 13.6, 10, 10)); +} + QTEST_MAIN(tst_QGraphicsView) #include "tst_qgraphicsview.moc" -- cgit v0.12 From d5fe82b2ab939727f573429605abd99c039a99d1 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 13 Dec 2010 15:41:16 +0200 Subject: Fix crash when creating more than one QApplication in single test case CBA pointer is stored in static variable and it wasn't cleaned up properly at QApplication destruction, which led to crash. Task-number: QTBUG-15915 Reviewed-by: Sami Merila Reviewed-by: Janne Koskinen --- src/gui/kernel/qapplication_s60.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 8596563..81fa4e6 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1633,6 +1633,13 @@ void qt_cleanup() //Change mouse pointer back S60->wsSession().SetPointerCursorMode(EPointerCursorNone); +#ifdef Q_WS_S60 + // Clear CBA + CEikonEnv::Static()->AppUiFactory()->SwapButtonGroup(0); + delete S60->buttonGroupContainer(); + S60->setButtonGroupContainer(0); +#endif + if (S60->qtOwnsS60Environment) { // Restore the S60 framework trap handler. See qt_init(). User::SetTrapHandler(S60->s60InstalledTrapHandler); -- cgit v0.12 From 50d3c15bd16f4e70327f8de30c8c0df5ed2f995c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 13 Dec 2010 16:08:36 +0200 Subject: Minor optimization Use already defined factory pointer instead of re-asking it twice. Reviewed-by: Janne Koskinen --- src/gui/kernel/qwidget_s60.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 609307c..d6ad3c3 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -504,7 +504,7 @@ void QWidgetPrivate::show_sys() CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, CEikButtonGroupContainer::EHorizontal,ui,R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); - CEikButtonGroupContainer *oldCba = CEikonEnv::Static()->AppUiFactory()->SwapButtonGroup(cba); + CEikButtonGroupContainer *oldCba = factory->SwapButtonGroup(cba); Q_ASSERT(!oldCba); S60->setButtonGroupContainer(cba); @@ -513,7 +513,7 @@ void QWidgetPrivate::show_sys() menuBar->SetMenuType(CEikMenuBar::EMenuOptions); S60->appUi()->AddToStackL(menuBar,ECoeStackPriorityMenu,ECoeStackFlagRefusesFocus); - CEikMenuBar *oldMenu = CEikonEnv::Static()->AppUiFactory()->SwapMenuBar(menuBar); + CEikMenuBar *oldMenu = factory->SwapMenuBar(menuBar); Q_ASSERT(!oldMenu); ) -- cgit v0.12 From 5e0be0aae4aa4011b4dbf7d1d457e4c8b4f6d4dc Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 13 Dec 2010 16:12:25 +0200 Subject: Fix qapplication autotest deployment Necessary default deployment was getting removed from qapplication test Task-number: QTBUG-15915 Reviewed-by: Janne Koskinen --- tests/auto/qapplication/test/test.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qapplication/test/test.pro b/tests/auto/qapplication/test/test.pro index 2c54c37..d946e7e 100644 --- a/tests/auto/qapplication/test/test.pro +++ b/tests/auto/qapplication/test/test.pro @@ -17,7 +17,7 @@ symbian: { someTest.sources = test.pro someTest.path = test windowIcon.sources = ../heart.svg - DEPLOYMENT = additional deploy someTest windowIcon + DEPLOYMENT += additional deploy someTest windowIcon LIBS += -lcone -lavkon } -- cgit v0.12 From 44911b0d44f4840e0d7678f8de7227a3a4018d34 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 13 Dec 2010 16:15:51 +0200 Subject: Non-hacky fix for qwidget autotest Turns out there is a nice way for getting current CBA, CEikButtonGroupContainer::Current(), so using that instead of the previous hack. Task-number: QTBUG-15915 Reviewed-by: Janne Koskinen --- tests/auto/qwidget/tst_qwidget.cpp | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 6069383..d611225 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -10029,28 +10029,6 @@ void tst_QWidget::openModal_taskQTBUG_5804() } #ifdef Q_OS_SYMBIAN - -static CEikButtonGroupContainer* cba() -{ - CEikButtonGroupContainer *oldCba = NULL; - - // Due to convoluted/buggy implementation of MEikAppUiFactory interface in Symbian, - // the only way to get the correct cba is to use SwapButtonGroup function. - // Calling SwapButtonGroup doesn't trigger anything, it only changes the value of iToolbar - // member variable, so this double switching should not cause any interference for test. - QT_TRAP_THROWING( - CEikButtonGroupContainer *dummyCba = CEikButtonGroupContainer::NewL( - CEikButtonGroupContainer::ECba, CEikButtonGroupContainer::EHorizontal, NULL, 0); - - oldCba = CEikonEnv::Static()->AppUiFactory()->SwapButtonGroup(dummyCba); - CEikonEnv::Static()->AppUiFactory()->SwapButtonGroup(oldCba); - - delete dummyCba; - ) - - return oldCba; -} - void tst_QWidget::cbaVisibility() { // Test case for task 261048 @@ -10083,7 +10061,7 @@ void tst_QWidget::cbaVisibility() // Verify window decorations i.e. status pane and CBA are visible. CEikStatusPane* statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); QVERIFY(statusPane->IsVisible()); - CEikButtonGroupContainer* buttonGroup = cba(); + CEikButtonGroupContainer* buttonGroup = CEikButtonGroupContainer::Current(); QVERIFY(buttonGroup->IsVisible()); } @@ -10100,7 +10078,7 @@ void tst_QWidget::fullScreenWindowModeTransitions() const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); - CEikButtonGroupContainer *buttonGroup = cba(); + CEikButtonGroupContainer *buttonGroup = CEikButtonGroupContainer::Current(); //Enter widget.showNormal(); @@ -10154,7 +10132,7 @@ void tst_QWidget::maximizedWindowModeTransitions() const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); - CEikButtonGroupContainer *buttonGroup = cba(); + CEikButtonGroupContainer *buttonGroup = CEikButtonGroupContainer::Current(); //Enter widget.showNormal(); @@ -10210,7 +10188,7 @@ void tst_QWidget::minimizedWindowModeTransitions() const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); - CEikButtonGroupContainer *buttonGroup = cba(); + CEikButtonGroupContainer *buttonGroup = CEikButtonGroupContainer::Current(); //Enter widget.showNormal(); @@ -10266,7 +10244,7 @@ void tst_QWidget::normalWindowModeTransitions() const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); - CEikButtonGroupContainer *buttonGroup = cba(); + CEikButtonGroupContainer *buttonGroup = CEikButtonGroupContainer::Current(); //Enter widget.showMaximized(); -- cgit v0.12 From b8f639f27a05043f9f9ac371352508d6527f0123 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 10 Dec 2010 10:00:54 +0100 Subject: Comment a bit more the timer ID allocation code. Also add the notes for where to place .loadAcquire when that function exists. Reviewed-By: Bradley T. Hughes --- src/corelib/kernel/qabstracteventdispatcher.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp index bcf4477..1c1c6e3 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.cpp +++ b/src/corelib/kernel/qabstracteventdispatcher.cpp @@ -120,11 +120,20 @@ void QAbstractEventDispatcherPrivate::init() } } +// Timer IDs are implemented using a free-list; +// there's a vector initialized with: +// X[i] = i + 1 +// and nextFreeTimerId starts with 1. +// +// Allocating a timer ID involves taking the ID from +// X[nextFreeTimerId] +// updating nextFreeTimerId to this value and returning the old value +// (continues below). int QAbstractEventDispatcherPrivate::allocateTimerId() { int timerId, newTimerId; do { - timerId = nextFreeTimerId; + timerId = nextFreeTimerId; //.loadAcquire(); // ### FIXME Proper memory ordering semantics // which bucket are we looking in? int which = timerId & 0x00ffffff; @@ -148,6 +157,17 @@ int QAbstractEventDispatcherPrivate::allocateTimerId() return timerId; } +// Releasing a timer ID requires putting the current ID back in the vector; +// we do it by setting: +// X[timerId] = nextFreeTimerId; +// then we update nextFreeTimerId to the timer we've just released +// +// The extra code in allocateTimerId and releaseTimerId are ABA prevention +// and bucket memory. The buckets are simply to make sure we allocate only +// the necessary number of timers. See above. +// +// ABA prevention simply adds a value to 7 of the top 8 bits when resetting +// nextFreeTimerId. void QAbstractEventDispatcherPrivate::releaseTimerId(int timerId) { int which = timerId & 0x00ffffff; @@ -157,7 +177,7 @@ void QAbstractEventDispatcherPrivate::releaseTimerId(int timerId) int freeId, newTimerId; do { - freeId = nextFreeTimerId; + freeId = nextFreeTimerId;//.loadAcquire(); // ### FIXME Proper memory ordering semantics b[at] = freeId & 0x00ffffff; newTimerId = prepareNewValueWithSerialNumber(freeId, timerId); -- cgit v0.12 From f0a892a46fdc438277c8b401c267db4bd92aec1b Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 13 Dec 2010 14:50:07 +0100 Subject: Fix ABA problem with: the serial must be updated on all accesses The nextFreeTimerId's serial counter was only being updated on timer ID releasing. It needs to be updated on allocation too. Reviewed-by: Bradley T. Hughes --- src/corelib/kernel/qabstracteventdispatcher.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp index 1c1c6e3..5619921 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.cpp +++ b/src/corelib/kernel/qabstracteventdispatcher.cpp @@ -151,7 +151,7 @@ int QAbstractEventDispatcherPrivate::allocateTimerId() } } - newTimerId = b[at]; + newTimerId = prepareNewValueWithSerialNumber(timerId, b[at]); } while (!nextFreeTimerId.testAndSetRelaxed(timerId, newTimerId)); return timerId; -- cgit v0.12 From a02a747a9d5294127dfe3e676a2759e228257e70 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 13 Dec 2010 14:58:16 +0100 Subject: Use constants the timer ID masks instead of values everywhere Reviewed-By: Bradley T. Hughes --- src/corelib/kernel/qabstracteventdispatcher.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp index 5619921..002d360 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.cpp +++ b/src/corelib/kernel/qabstracteventdispatcher.cpp @@ -77,10 +77,14 @@ Q_DESTRUCTOR_FUNCTION(timerIdsDestructorFunction) static QBasicAtomicInt nextFreeTimerId = Q_BASIC_ATOMIC_INITIALIZER(1); +static const int TimerIdMask = 0x00ffffff; +static const int TimerSerialMask = ~TimerIdMask & ~0x80000000; +static const int TimerSerialCounter = TimerIdMask + 1; + // avoid the ABA-problem by using 7 of the top 8 bits of the timerId as a serial number static inline int prepareNewValueWithSerialNumber(int oldId, int newId) { - return (newId & 0x00FFFFFF) | ((oldId + 0x01000000) & 0x7f000000); + return (newId & TimerIdMask) | ((oldId + TimerSerialCounter) & TimerSerialMask); } static inline int bucketOffset(int timerId) @@ -136,7 +140,7 @@ int QAbstractEventDispatcherPrivate::allocateTimerId() timerId = nextFreeTimerId; //.loadAcquire(); // ### FIXME Proper memory ordering semantics // which bucket are we looking in? - int which = timerId & 0x00ffffff; + int which = timerId & TimerIdMask; int bucket = bucketOffset(which); int at = bucketIndex(bucket, which); int *b = timerIds[bucket]; @@ -170,7 +174,7 @@ int QAbstractEventDispatcherPrivate::allocateTimerId() // nextFreeTimerId. void QAbstractEventDispatcherPrivate::releaseTimerId(int timerId) { - int which = timerId & 0x00ffffff; + int which = timerId & TimerIdMask; int bucket = bucketOffset(which); int at = bucketIndex(bucket, which); int *b = timerIds[bucket]; @@ -178,7 +182,7 @@ void QAbstractEventDispatcherPrivate::releaseTimerId(int timerId) int freeId, newTimerId; do { freeId = nextFreeTimerId;//.loadAcquire(); // ### FIXME Proper memory ordering semantics - b[at] = freeId & 0x00ffffff; + b[at] = freeId & TimerIdMask; newTimerId = prepareNewValueWithSerialNumber(freeId, timerId); } while (!nextFreeTimerId.testAndSetRelease(freeId, newTimerId)); -- cgit v0.12 From bd9d5c80235ce6d1b005df96c3058b75e82bd6f0 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 13 Dec 2010 15:02:27 +0100 Subject: Add a small protection against releasing a timer twice. The cell corresponding to an allocated timer ID in the free list is unused (because the ID isn't free). So use it to store an invalid value that we can check against the user's value. This provides some protection against a given timer being released twice. Since we store the serial counter of the nextFreeTimerId, getting the same ID twice is a 1-in-128 chance. Reviewed-By: Bradley T. Hughes --- src/corelib/kernel/qabstracteventdispatcher.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp index 002d360..bf675a7 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.cpp +++ b/src/corelib/kernel/qabstracteventdispatcher.cpp @@ -132,18 +132,24 @@ void QAbstractEventDispatcherPrivate::init() // Allocating a timer ID involves taking the ID from // X[nextFreeTimerId] // updating nextFreeTimerId to this value and returning the old value +// +// When the timer ID is allocated, its cell in the vector is unused (it's a +// free list). As an added protection, we use the cell to store an invalid +// (negative) value that we can later check for integrity. +// // (continues below). int QAbstractEventDispatcherPrivate::allocateTimerId() { int timerId, newTimerId; + int at, *b; do { timerId = nextFreeTimerId; //.loadAcquire(); // ### FIXME Proper memory ordering semantics // which bucket are we looking in? int which = timerId & TimerIdMask; int bucket = bucketOffset(which); - int at = bucketIndex(bucket, which); - int *b = timerIds[bucket]; + at = bucketIndex(bucket, which); + b = timerIds[bucket]; if (!b) { // allocate a new bucket @@ -158,6 +164,8 @@ int QAbstractEventDispatcherPrivate::allocateTimerId() newTimerId = prepareNewValueWithSerialNumber(timerId, b[at]); } while (!nextFreeTimerId.testAndSetRelaxed(timerId, newTimerId)); + b[at] = -timerId; + return timerId; } @@ -179,6 +187,8 @@ void QAbstractEventDispatcherPrivate::releaseTimerId(int timerId) int at = bucketIndex(bucket, which); int *b = timerIds[bucket]; + Q_ASSERT(b[at] == -timerId); + int freeId, newTimerId; do { freeId = nextFreeTimerId;//.loadAcquire(); // ### FIXME Proper memory ordering semantics -- cgit v0.12 From 8d0863f175199384e41a00fa18a9ea7d177c7f0e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 13 Dec 2010 22:57:17 +0100 Subject: qrgb565: Use the trivial qt_memconvert() and qt_rectconvert() Use memcpy() instead of the generic conversion routines where both template arguments are qrgb565. Yields a massive performance gain for tiling opaque (background) images in WebKit on 16-bit displays. This was previously restricted to Q_WS_QWS for some unknown reason. Reviewed-by: Benjamin Poulain --- src/gui/painting/qdrawhelper_p.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index 0cc2e40..33fd21e 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -1684,9 +1684,7 @@ QT_TRIVIAL_MEMCONVERT_IMPL(qrgb888) QT_TRIVIAL_MEMCONVERT_IMPL(qargb6666) QT_TRIVIAL_MEMCONVERT_IMPL(qrgb666) QT_TRIVIAL_MEMCONVERT_IMPL(quint16) -#ifdef Q_WS_QWS QT_TRIVIAL_MEMCONVERT_IMPL(qrgb565) -#endif QT_TRIVIAL_MEMCONVERT_IMPL(qargb8565) QT_TRIVIAL_MEMCONVERT_IMPL(qargb8555) QT_TRIVIAL_MEMCONVERT_IMPL(qrgb555) @@ -1783,9 +1781,7 @@ QT_RECTCONVERT_TRIVIAL_IMPL(quint32) QT_RECTCONVERT_TRIVIAL_IMPL(qrgb888) QT_RECTCONVERT_TRIVIAL_IMPL(qargb6666) QT_RECTCONVERT_TRIVIAL_IMPL(qrgb666) -#ifdef Q_WS_QWS QT_RECTCONVERT_TRIVIAL_IMPL(qrgb565) -#endif QT_RECTCONVERT_TRIVIAL_IMPL(qargb8565) QT_RECTCONVERT_TRIVIAL_IMPL(quint16) QT_RECTCONVERT_TRIVIAL_IMPL(qargb8555) -- cgit v0.12 From 2eee49127b80b5b56c605f76ccea004b03d89577 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Tue, 14 Dec 2010 11:22:50 +1000 Subject: Remove active selection when TextEdit loses focus Task-number: QTBUG-15341 Reviewed-by: Yann Bodson --- .../graphicsitems/qdeclarativetextedit.cpp | 14 ++++++++ .../graphicsitems/qdeclarativetextedit_p.h | 1 + .../tst_qdeclarativetextedit.cpp | 40 ++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index e05f4e4..1042cf1 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -994,6 +994,20 @@ void QDeclarativeTextEditPrivate::focusChanged(bool hasFocus) QDeclarativeItemPrivate::focusChanged(hasFocus); } +void QDeclarativeTextEdit::focusOutEvent(QFocusEvent *event) +{ + Q_D(QDeclarativeTextEdit); + if (event->reason() != Qt::ActiveWindowFocusReason + && event->reason() != Qt::PopupFocusReason) { + QTextCursor cursor = d->control->textCursor(); + if (cursor.hasSelection()) { + cursor.clearSelection(); + d->control->setTextCursor(cursor); + } + } + QDeclarativePaintedItem::focusOutEvent(event); +} + /*! \qmlmethod void TextEdit::selectAll() diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index 68fde3d..6826cb5 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -249,6 +249,7 @@ protected: void keyPressEvent(QKeyEvent *); void keyReleaseEvent(QKeyEvent *); void focusInEvent(QFocusEvent *event); + void focusOutEvent(QFocusEvent *event); // mouse filter? void mousePressEvent(QGraphicsSceneMouseEvent *event); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index a7971cc..ed02451 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -110,6 +110,7 @@ private slots: void mouseSelection_data(); void mouseSelection(); void inputMethodHints(); + void clearSelectionOnFocusLost(); void cursorDelegate(); void delegateLoading_data(); @@ -748,6 +749,45 @@ void tst_qdeclarativetextedit::inputMethodHints() QVERIFY(textEditObject->inputMethodHints() & Qt::ImhUppercaseOnly); } +// QTBUG-15341 +void tst_qdeclarativetextedit::clearSelectionOnFocusLost() +{ + + // create a visible scene with two text edits + QGraphicsScene scene; + QGraphicsView view(&scene); + QDeclarativeTextEdit edit; + QDeclarativeTextEdit secondEdit; + edit.setText("Hello world!"); + scene.addItem(&edit); + scene.addItem(&secondEdit); + view.show(); + QApplication::setActiveWindow(&view); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(QApplication::activeWindow(), static_cast(&view)); + + int index = 0; + while (index < Qt::NoFocusReason) { + + // focus the first text edit and select text + edit.setFocus(true); + edit.selectAll(); + QVERIFY(edit.hasActiveFocus() && !secondEdit.hasActiveFocus()); + QCOMPARE(edit.selectedText().size(), 12); + + // lose focus in the first text edit + qobject_cast(&secondEdit)->setFocus(Qt::FocusReason(index)); + QVERIFY(!edit.hasActiveFocus() && secondEdit.hasActiveFocus()); + + // depending on the focus reason, selection should now be cleared + bool clearSelection = (index != Qt::ActiveWindowFocusReason && index != Qt::PopupFocusReason); + QCOMPARE(edit.selectedText().isEmpty(), clearSelection); + index++; + } +} + + + void tst_qdeclarativetextedit::cursorDelegate() { QDeclarativeView* view = createView(SRCDIR "/data/cursorTest.qml"); -- cgit v0.12 From e4257e41c1c9e764d27f1c61f9173c34444236f3 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Tue, 14 Dec 2010 14:27:38 +1000 Subject: Abort working replies with error when network session fails. Otherwise the connections will stay in a zombie state until the TCP keep alive timer times out in a couple of hours. Task-number: Maemo 201619 --- src/network/access/qnetworkreplyimpl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index cf6e674..3d1df06 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -271,8 +271,8 @@ void QNetworkReplyImplPrivate::_q_networkSessionConnected() void QNetworkReplyImplPrivate::_q_networkSessionFailed() { - // Abort waiting replies. - if (state == WaitingForSession) { + // Abort waiting and working replies. + if (state == WaitingForSession || state == Working) { state = Working; error(QNetworkReplyImpl::UnknownNetworkError, QCoreApplication::translate("QNetworkReply", "Network session error.")); -- cgit v0.12 From f58cf707dd5668ca2849f457e951a9cef7d1d544 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Tue, 14 Dec 2010 15:27:23 +1000 Subject: Revert a fix made for bug QTBUG-15341 Reverted a commit 2eee49127b80b5b56c605f76ccea004b03d89577 "Remove active selection when TextEdit loses focus". Contrary to TextInput, by default TextEdit keeps the selection visible when the editor loses active focus. If this is not wanted, a property called persistentSelection can be set false to make selection dependant on the focus. --- .../graphicsitems/qdeclarativetextedit.cpp | 14 -------- .../graphicsitems/qdeclarativetextedit_p.h | 1 - .../tst_qdeclarativetextedit.cpp | 40 ---------------------- 3 files changed, 55 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 1042cf1..e05f4e4 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -994,20 +994,6 @@ void QDeclarativeTextEditPrivate::focusChanged(bool hasFocus) QDeclarativeItemPrivate::focusChanged(hasFocus); } -void QDeclarativeTextEdit::focusOutEvent(QFocusEvent *event) -{ - Q_D(QDeclarativeTextEdit); - if (event->reason() != Qt::ActiveWindowFocusReason - && event->reason() != Qt::PopupFocusReason) { - QTextCursor cursor = d->control->textCursor(); - if (cursor.hasSelection()) { - cursor.clearSelection(); - d->control->setTextCursor(cursor); - } - } - QDeclarativePaintedItem::focusOutEvent(event); -} - /*! \qmlmethod void TextEdit::selectAll() diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index 6826cb5..68fde3d 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -249,7 +249,6 @@ protected: void keyPressEvent(QKeyEvent *); void keyReleaseEvent(QKeyEvent *); void focusInEvent(QFocusEvent *event); - void focusOutEvent(QFocusEvent *event); // mouse filter? void mousePressEvent(QGraphicsSceneMouseEvent *event); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index ed02451..a7971cc 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -110,7 +110,6 @@ private slots: void mouseSelection_data(); void mouseSelection(); void inputMethodHints(); - void clearSelectionOnFocusLost(); void cursorDelegate(); void delegateLoading_data(); @@ -749,45 +748,6 @@ void tst_qdeclarativetextedit::inputMethodHints() QVERIFY(textEditObject->inputMethodHints() & Qt::ImhUppercaseOnly); } -// QTBUG-15341 -void tst_qdeclarativetextedit::clearSelectionOnFocusLost() -{ - - // create a visible scene with two text edits - QGraphicsScene scene; - QGraphicsView view(&scene); - QDeclarativeTextEdit edit; - QDeclarativeTextEdit secondEdit; - edit.setText("Hello world!"); - scene.addItem(&edit); - scene.addItem(&secondEdit); - view.show(); - QApplication::setActiveWindow(&view); - QTest::qWaitForWindowShown(&view); - QTRY_COMPARE(QApplication::activeWindow(), static_cast(&view)); - - int index = 0; - while (index < Qt::NoFocusReason) { - - // focus the first text edit and select text - edit.setFocus(true); - edit.selectAll(); - QVERIFY(edit.hasActiveFocus() && !secondEdit.hasActiveFocus()); - QCOMPARE(edit.selectedText().size(), 12); - - // lose focus in the first text edit - qobject_cast(&secondEdit)->setFocus(Qt::FocusReason(index)); - QVERIFY(!edit.hasActiveFocus() && secondEdit.hasActiveFocus()); - - // depending on the focus reason, selection should now be cleared - bool clearSelection = (index != Qt::ActiveWindowFocusReason && index != Qt::PopupFocusReason); - QCOMPARE(edit.selectedText().isEmpty(), clearSelection); - index++; - } -} - - - void tst_qdeclarativetextedit::cursorDelegate() { QDeclarativeView* view = createView(SRCDIR "/data/cursorTest.qml"); -- cgit v0.12 From c34225b62ea2dd2a545baf2ade41629be6a55473 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 14 Dec 2010 13:59:36 +1000 Subject: Clarify that XmlListModel is read only --- src/declarative/util/qdeclarativexmllistmodel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index ce5b483..49a12b1 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -503,9 +503,9 @@ void QDeclarativeXmlListModelPrivate::clear_role(QDeclarativeListProperty Date: Tue, 14 Dec 2010 16:38:02 +1000 Subject: Docs: implications of creating network access managers in other threads Task-number: QTBUG-16032 --- .../qdeclarativenetworkaccessmanagerfactory.cpp | 53 ++++++++++++++-------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp b/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp index d22798d..36e9721 100644 --- a/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp +++ b/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.cpp @@ -46,27 +46,44 @@ QT_BEGIN_NAMESPACE /*! \class QDeclarativeNetworkAccessManagerFactory \since 4.7 - \brief The QDeclarativeNetworkAccessManagerFactory class provides a factory for QNetworkAccessManager for use by a Qt Declarative engine. + \brief The QDeclarativeNetworkAccessManagerFactory class creates QNetworkAccessManager instances for a QML engine. - QNetworkAccessManager is used for all network access by QML. - By implementing a factory it is possible to create custom - QNetworkAccessManager with specialized caching, proxy and - cookie support. + A QML engine uses QNetworkAccessManager for all network access. + By implementing a factory, it is possible to provide the QML engine + with custom QNetworkAccessManager instances with specialized caching, + proxy and cookies support. - To implement a factory, subclass QDeclarativeNetworkAccessManagerFactory and implement - the create() method. + To implement a factory, subclass QDeclarativeNetworkAccessManagerFactory and + implement the virtual create() method, then assign it to the relevant QML + engine using QDeclarativeEngine::setNetworkAccessManagerFactory(). - To use a factory, assign it to the relevant QDeclarativeEngine using - QDeclarativeEngine::setNetworkAccessManagerFactory(). + Note the QML engine may create QNetworkAccessManager instances + from multiple threads. Because of this, the implementation of the create() + method must be \l{Reentrancy and Thread-Safety}{reentrant}. In addition, + the developer should be careful if the signals of the object to be + returned from create() are connected to the slots of an object that may + be created in a different thread: - Note: the create() method may be called by multiple threads, so ensure the - implementation of this method is reentrant. + \list + \o The QML engine internally handles all requests, and cleans up any + QNetworkReply objects it creates. Receiving the + QNetworkAccessManager::finished() signal in another thread may not + provide the receiver with a valid reply object if it has already + been deleted. + \o Authentication details provided to QNetworkAccessManager::authenticationRequired() + must be provided immediately, so this signal cannot be connected as a + Qt::QueuedConnection (or as the default Qt::AutoConnection from another + thread). + \endlist + + For more information about signals and threads, see + \l {Threads and QObjects} and \l {Signals and Slots Across Threads}. - \sa QDeclarativeEngine::setNetworkAccessManagerFactory(), {declarative/cppextensions/networkaccessmanagerfactory}{NetworkAccessManagerFactory example} + \sa {declarative/cppextensions/networkaccessmanagerfactory}{NetworkAccessManagerFactory example} */ /*! - The destructor is empty. + Destroys the factory. The default implementation does nothing. */ QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory() { @@ -75,13 +92,9 @@ QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactor /*! \fn QNetworkAccessManager *QDeclarativeNetworkAccessManagerFactory::create(QObject *parent) - Implement this method to create a QNetworkAccessManager with \a parent. - This allows proxies, caching and cookie support to be setup appropriately. - - This method must return a new QNetworkAccessManager each time it is called. - The parent of the QNetworkAccessManager must be the \a parent provided. - The QNetworkAccessManager(s) created by this - function will be destroyed automatically when their parent is destroyed. + Creates and returns a network access manager with the specified \a parent. + This method must return a new QNetworkAccessManager instance each time + it is called. Note: this method may be called by multiple threads, so ensure the implementation of this method is reentrant. -- cgit v0.12 From 725716bcf158988ac664da8f8bcd2d9a8e91a916 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 10 Dec 2010 10:32:11 +0100 Subject: Fixed several compile and deployment issues in the mmf phonon plugin. RevBy: Trust me --- src/3rdparty/phonon/mmf/abstractaudioeffect.h | 2 +- src/3rdparty/phonon/mmf/audioequalizer.cpp | 2 +- src/3rdparty/phonon/mmf/bassboost.cpp | 2 +- src/3rdparty/phonon/mmf/environmentalreverb.cpp | 2 +- src/3rdparty/phonon/mmf/loudness.cpp | 2 +- src/3rdparty/phonon/mmf/stereowidening.cpp | 2 +- src/plugins/phonon/mmf/mmf.pro | 4 ++-- src/s60installs/s60installs.pro | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/3rdparty/phonon/mmf/abstractaudioeffect.h b/src/3rdparty/phonon/mmf/abstractaudioeffect.h index 8879636..70adcf6 100644 --- a/src/3rdparty/phonon/mmf/abstractaudioeffect.h +++ b/src/3rdparty/phonon/mmf/abstractaudioeffect.h @@ -21,7 +21,7 @@ along with this library. If not, see . #include -#include +#include #include diff --git a/src/3rdparty/phonon/mmf/audioequalizer.cpp b/src/3rdparty/phonon/mmf/audioequalizer.cpp index 28433f6..1d2bbd4 100644 --- a/src/3rdparty/phonon/mmf/audioequalizer.cpp +++ b/src/3rdparty/phonon/mmf/audioequalizer.cpp @@ -16,7 +16,7 @@ along with this library. If not, see . */ -#include +#include #include "audioequalizer.h" QT_BEGIN_NAMESPACE diff --git a/src/3rdparty/phonon/mmf/bassboost.cpp b/src/3rdparty/phonon/mmf/bassboost.cpp index 81d9208..67076f6 100644 --- a/src/3rdparty/phonon/mmf/bassboost.cpp +++ b/src/3rdparty/phonon/mmf/bassboost.cpp @@ -16,7 +16,7 @@ along with this library. If not, see . */ -#include +#include #include "bassboost.h" QT_BEGIN_NAMESPACE diff --git a/src/3rdparty/phonon/mmf/environmentalreverb.cpp b/src/3rdparty/phonon/mmf/environmentalreverb.cpp index c500385..d4f5223 100644 --- a/src/3rdparty/phonon/mmf/environmentalreverb.cpp +++ b/src/3rdparty/phonon/mmf/environmentalreverb.cpp @@ -16,7 +16,7 @@ along with this library. If not, see . */ -#include +#include #include "environmentalreverb.h" QT_BEGIN_NAMESPACE diff --git a/src/3rdparty/phonon/mmf/loudness.cpp b/src/3rdparty/phonon/mmf/loudness.cpp index 22d7518..ca05ab0 100644 --- a/src/3rdparty/phonon/mmf/loudness.cpp +++ b/src/3rdparty/phonon/mmf/loudness.cpp @@ -16,7 +16,7 @@ along with this library. If not, see . */ -#include +#include #include "loudness.h" QT_BEGIN_NAMESPACE diff --git a/src/3rdparty/phonon/mmf/stereowidening.cpp b/src/3rdparty/phonon/mmf/stereowidening.cpp index e452160..f90651b 100644 --- a/src/3rdparty/phonon/mmf/stereowidening.cpp +++ b/src/3rdparty/phonon/mmf/stereowidening.cpp @@ -16,7 +16,7 @@ along with this library. If not, see . */ -#include +#include #include "stereowidening.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro index 691fc80..5d7b61d 100644 --- a/src/plugins/phonon/mmf/mmf.pro +++ b/src/plugins/phonon/mmf/mmf.pro @@ -103,7 +103,7 @@ symbian { exists($${EPOCROOT}epoc32/include/mw/downloadmgrclient.h) { HEADERS += $$PHONON_MMF_DIR/download.h SOURCES += $$PHONON_MMF_DIR/download.cpp - LIBS += -ldownloadmgr + LIBS += -lDownloadMgr DEFINES += PHONON_MMF_PROGRESSIVE_DOWNLOAD } } @@ -125,7 +125,7 @@ symbian { LIBS += -lmediaclientaudiostream # For CMdaAudioOutputStream # These are for effects. - LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect + LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerbase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect # This is needed for having the .qtplugin file properly created on Symbian. QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/phonon_backend diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index ff67bcf..5a435cd 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -132,7 +132,7 @@ symbian: { codecs_plugins.path = c:$$QT_PLUGINS_BASE_DIR/codecs contains(QT_CONFIG, phonon-backend) { - phonon_backend_plugins.sources += $$QMAKE_LIBDIR_QT/phonon_mmf$${QT_LIBINFIX}.dll + phonon_backend_plugins.sources += $$QT_BUILD_TREE/plugins/phonon_backend/phonon_mmf$${QT_LIBINFIX}.dll phonon_backend_plugins.path = c:$$QT_PLUGINS_BASE_DIR/phonon_backend DEPLOYMENT += phonon_backend_plugins -- cgit v0.12 From 6aa1ab84404c92f2048270b1932fa10cecdcc58d Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 10 Dec 2010 15:35:06 +0100 Subject: Fixed a bug in the input methods on S60 with QGraphicsWebView. The bug happened because we did not expect to receive a call to CancelFepInlineEdit() when the widget had not previously been given any preedit text by S60. However, this can happen, and if it happens at the same time that there is a temporarily visible character in the widget (because it will be obscured as a password a second later), then the temporary character would be discarded. Fixed by checking in the beginning of CancelFepInlineEdit() whether we currently have any temporary preedit text or not, and if we do, we don't clear the contents, since it is the input context itself that generated the preedit text, not S60. Also made sure that the temporary preedit text is committed if we receive a call to UpdateFepInlineTextL(), which may sometimes happen without a call to StartFepInlineEditL(). Task: QT-4314 AutoTest: Included RevBy: Shane Kearns --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 8 ++ tests/auto/qinputcontext/qinputcontext.pro | 2 + tests/auto/qinputcontext/tst_qinputcontext.cpp | 141 +++++++++++++++++++++++- 3 files changed, 148 insertions(+), 3 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 4a1b9b9..686f388 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -657,6 +657,8 @@ void QCoeFepInputContext::UpdateFepInlineTextL(const TDesC& aNewInlineText, if (!w) return; + commitTemporaryPreeditString(); + m_inlinePosition = aPositionOfInsertionPointInInlineText; QList attributes; @@ -694,6 +696,12 @@ void QCoeFepInputContext::SetInlineEditingCursorVisibilityL(TBool aCursorVisibil void QCoeFepInputContext::CancelFepInlineEdit() { + // We are not supposed to ever have a tempPreeditString and a real preedit string + // from S60 at the same time, so it should be safe to rely on this test to determine + // whether we should honor S60's request to clear the text or not. + if (m_hasTempPreeditString) + return; + QList attributes; QInputMethodEvent event(QLatin1String(""), attributes); event.setCommitString(QLatin1String(""), 0, 0); diff --git a/tests/auto/qinputcontext/qinputcontext.pro b/tests/auto/qinputcontext/qinputcontext.pro index ec6831e..4b3ab96 100644 --- a/tests/auto/qinputcontext/qinputcontext.pro +++ b/tests/auto/qinputcontext/qinputcontext.pro @@ -1,6 +1,8 @@ load(qttest_p4) SOURCES += tst_qinputcontext.cpp +contains(QT_CONFIG, webkit):QT += webkit + symbian { LIBS += -lws32 -lcone } diff --git a/tests/auto/qinputcontext/tst_qinputcontext.cpp b/tests/auto/qinputcontext/tst_qinputcontext.cpp index 5a258a9..020f177 100644 --- a/tests/auto/qinputcontext/tst_qinputcontext.cpp +++ b/tests/auto/qinputcontext/tst_qinputcontext.cpp @@ -50,6 +50,13 @@ #include #include #include +#include +#include + +#ifdef QT_WEBKIT_LIB +#include +#include +#endif #ifdef Q_OS_SYMBIAN #include @@ -466,6 +473,115 @@ void tst_QInputContext::focusProxy() QCOMPARE(gic->focusWidget(), &proxy); } +#ifdef QT_WEBKIT_LIB +class AutoWebView : public QWebView +{ + Q_OBJECT + +public: + AutoWebView() + : m_length(0) + , m_mode(QLineEdit::Normal) + { + updatePage(); + } + ~AutoWebView() {} + + void updatePage() + { + // The update might reset the input method parameters. + bool imEnabled = testAttribute(Qt::WA_InputMethodEnabled); + Qt::InputMethodHints hints = inputMethodHints(); + + QString page = "" + "
"; + if (m_mode == QLineEdit::Password) + page = page.arg("password"); + else + page = page.arg("text"); + + if (m_length == 0) + page = page.arg(""); + else + page = page.arg("maxlength=\"" + QString::number(m_length) + "\""); + + setHtml(page); + + setAttribute(Qt::WA_InputMethodEnabled, imEnabled); + setInputMethodHints(hints); + } + void setMaxLength(int length) + { + m_length = length; + updatePage(); + } + void setEchoMode(QLineEdit::EchoMode mode) + { + m_mode = mode; + updatePage(); + } + + int m_length; + QLineEdit::EchoMode m_mode; +}; + +class AutoGraphicsWebView : public QGraphicsView +{ + Q_OBJECT + +public: + AutoGraphicsWebView() + : m_length(0) + , m_mode(QLineEdit::Normal) + { + m_scene.addItem(&m_view); + setScene(&m_scene); + m_view.setFocus(); + updatePage(); + } + ~AutoGraphicsWebView() {} + + void updatePage() + { + // The update might reset the input method parameters. + bool imEnabled = testAttribute(Qt::WA_InputMethodEnabled); + Qt::InputMethodHints hints = inputMethodHints(); + + QString page = "" + "
"; + if (m_mode == QLineEdit::Password) + page = page.arg("password"); + else + page = page.arg("text"); + + if (m_length == 0) + page = page.arg(""); + else + page = page.arg("maxlength=\"" + QString::number(m_length) + "\""); + + m_view.setHtml(page); + + setAttribute(Qt::WA_InputMethodEnabled, imEnabled); + setInputMethodHints(hints); + } + void setMaxLength(int length) + { + m_length = length; + updatePage(); + } + void setEchoMode(QLineEdit::EchoMode mode) + { + m_mode = mode; + updatePage(); + } + + int m_length; + QLineEdit::EchoMode m_mode; + QGraphicsScene m_scene; + QGraphicsWebView m_view; +}; +#endif // QT_WEBKIT_LIB + void tst_QInputContext::symbianTestCoeFepInputContext_data() { #ifdef Q_OS_SYMBIAN @@ -481,6 +597,10 @@ void tst_QInputContext::symbianTestCoeFepInputContext_data() symbianTestCoeFepInputContext_addData(); symbianTestCoeFepInputContext_addData(); symbianTestCoeFepInputContext_addData(); +# ifdef QT_WEBKIT_LIB + symbianTestCoeFepInputContext_addData(); + symbianTestCoeFepInputContext_addData(); +# endif #endif } @@ -1087,13 +1207,28 @@ void tst_QInputContext::symbianTestCoeFepInputContext() editwidget->setAttribute(Qt::WA_InputMethodEnabled, inputMethodEnabled); editwidget->setInputMethodHints(inputMethodHints); - QLineEdit *lineedit = qobject_cast(editwidget); - if (lineedit) { + if (QLineEdit *lineedit = qobject_cast(editwidget)) { if (maxLength > 0) lineedit->setMaxLength(maxLength); lineedit->setEchoMode(echoMode); +#ifdef QT_WEBKIT_LIB + } else if (AutoWebView *webView = qobject_cast(editwidget)) { + if (maxLength > 0) + webView->setMaxLength(maxLength); + webView->setEchoMode(echoMode); + // WebKit disables T9 everywhere. + if (inputMethodEnabled && !(inputMethodHints & Qt::ImhNoPredictiveText)) + return; + } else if (AutoGraphicsWebView *webView = qobject_cast(editwidget)) { + if (maxLength > 0) + webView->setMaxLength(maxLength); + webView->setEchoMode(echoMode); + // WebKit disables T9 everywhere. + if (inputMethodEnabled && !(inputMethodHints & Qt::ImhNoPredictiveText)) + return; +#endif } else if (maxLength > 0 || echoMode != QLineEdit::Normal) { - // Only QLineEdits support these features so don't attempt any tests using those + // Only some widgets support these features so don't attempt any tests using those // on other widgets. return; } -- cgit v0.12 From 284211ccbd2cbdfea46cdf4b8628a1a967271985 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 14 Dec 2010 10:26:39 +0100 Subject: Prevent ::flush from being called on QGLWindowSurface if no painting happened. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 2527 Reviewed-by: Harald Fernengel Reviewed-by: Samuel Rødal --- src/opengl/qwindowsurface_gl.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index f64b93c..6749826 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -267,6 +267,7 @@ struct QGLWindowSurfacePrivate int tried_pb : 1; int destructive_swap_buffers : 1; int geometry_updated : 1; + int did_paint : 1; QGLContext *ctx; @@ -330,6 +331,7 @@ QGLWindowSurface::QGLWindowSurface(QWidget *window) d_ptr->glDevice.d = d_ptr; d_ptr->q_ptr = this; d_ptr->geometry_updated = false; + d_ptr->did_paint = false; } QGLWindowSurface::~QGLWindowSurface() @@ -461,6 +463,8 @@ void QGLWindowSurface::beginPaint(const QRegion &) glClearColor(0.0, 0.0, 0.0, 0.0); glClear(clearFlags); } + + d_ptr->did_paint = true; } void QGLWindowSurface::endPaint(const QRegion &rgn) @@ -513,6 +517,13 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & if (d_ptr->geometry_updated) return; + // did_paint is set to true in ::beginPaint. ::beginPaint means that we + // at least cleared the background (= painted something). In EGL API it's a + // mistakte to call swapBuffers if nothing was painted. This check protects + // the flush func from being executed if it's for nothing. + if (! d_ptr->did_paint) + return; + QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget(); Q_ASSERT(parent); @@ -736,6 +747,8 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & ctx->swapBuffers(); else glFlush(); + + d_ptr->did_paint = false; } -- cgit v0.12 From 4d93a606ea0438be8062fda82baf639a9ced78ba Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Tue, 14 Dec 2010 10:28:26 +0100 Subject: Trivial: Fix coding style Fix coding style of merge request --- src/opengl/qwindowsurface_gl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 6749826..7dc7dc7 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -521,7 +521,7 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & // at least cleared the background (= painted something). In EGL API it's a // mistakte to call swapBuffers if nothing was painted. This check protects // the flush func from being executed if it's for nothing. - if (! d_ptr->did_paint) + if (!d_ptr->did_paint) return; QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget(); -- cgit v0.12 From e864a530a5c48459c433518ff6ad893f33ec93d8 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Tue, 14 Dec 2010 10:57:11 +0100 Subject: Fix failing tst_QGraphicsView::QTBUG_16063_microFocusRect auto-test This ammends commit 0af1f5508e165f3b494ab236cb1cdf1b0edcffa5. Reviewed-by: trust me --- tests/auto/qgraphicsview/tst_qgraphicsview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index e1fbaee..e259177 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -4455,7 +4455,7 @@ class IMItem : public QGraphicsRectItem { public: IMItem(QGraphicsItem *parent = 0): - QGraphicsRectItem(mf.adjusted(-5, -5, 5, 5), parent) + QGraphicsRectItem(QRectF(0, 0, 20, 20), parent) { setFlag(QGraphicsItem::ItemIsFocusable, true); setFlag(QGraphicsItem::ItemAcceptsInputMethod, true); @@ -4486,7 +4486,7 @@ void tst_QGraphicsView::QTBUG_16063_microFocusRect() scene.setFocusItem(item); view.setFocus(); QRectF mfv = view.inputMethodQuery(Qt::ImMicroFocus).toRectF(); - QCOMPARE(mfv, QRectF(13.5, 13.6, 10, 10)); + QCOMPARE(mfv, IMItem::mf.translated(-view.mapToScene(view.sceneRect().toRect()).boundingRect().topLeft())); } QTEST_MAIN(tst_QGraphicsView) -- cgit v0.12 From 736b8205158dd7b98af862a029b273dff6fb716d Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 8 Dec 2010 13:23:23 +0100 Subject: QApplication: fix crash exit whith native windows Regression introduced in 8dd8db250d92521fda619bdcf3e1c859b37b2da0 Patch comes from the task Task-number: QTBUG-15774 --- src/gui/kernel/qapplication.cpp | 6 +++--- tests/auto/qapplication/modal/main.cpp | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index a4ae46b..b4ff7c4 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -1101,6 +1101,9 @@ QApplication::~QApplication() QApplicationPrivate::is_app_closing = true; QApplicationPrivate::is_app_running = false; + delete QWidgetPrivate::mapper; + QWidgetPrivate::mapper = 0; + // delete all widgets if (QWidgetPrivate::allWidgets) { QWidgetSet *mySet = QWidgetPrivate::allWidgets; @@ -1130,9 +1133,6 @@ QApplication::~QApplication() delete d->ignore_cursor; d->ignore_cursor = 0; #endif - delete QWidgetPrivate::mapper; - QWidgetPrivate::mapper = 0; - delete QApplicationPrivate::app_pal; QApplicationPrivate::app_pal = 0; delete QApplicationPrivate::sys_pal; diff --git a/tests/auto/qapplication/modal/main.cpp b/tests/auto/qapplication/modal/main.cpp index f9d8fb4..3eaaa0d 100644 --- a/tests/auto/qapplication/modal/main.cpp +++ b/tests/auto/qapplication/modal/main.cpp @@ -47,6 +47,7 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); + QApplication::setAttribute(Qt::AA_NativeWindows); //QTBUG-15774 base *b = new base(); return app.exec(); } -- cgit v0.12 From 3778c3f5208f3db99d6b23a2a3c4abf1fe2ec64f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= Date: Tue, 14 Dec 2010 11:46:57 +0100 Subject: Make sure that d->init() is called from both ctors. QGraphicsLayout uses the protected ctor that did not call d->init(), so all its subclasses was potentially suffering from this. Task-number: QTBUG-15333 Reviewed-by: John Tapsell --- src/gui/graphicsview/qgraphicslayoutitem.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicslayoutitem.cpp b/src/gui/graphicsview/qgraphicslayoutitem.cpp index df13039..b11dc9e 100644 --- a/src/gui/graphicsview/qgraphicslayoutitem.cpp +++ b/src/gui/graphicsview/qgraphicslayoutitem.cpp @@ -129,7 +129,6 @@ void QGraphicsLayoutItemPrivate::init() { sizeHintCacheDirty = true; sizeHintWithConstraintCacheDirty = true; - sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); } /*! @@ -400,6 +399,7 @@ QGraphicsLayoutItem::QGraphicsLayoutItem(QGraphicsLayoutItem *parent, bool isLay { Q_D(QGraphicsLayoutItem); d->init(); + sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); d->q_ptr = this; } @@ -410,6 +410,7 @@ QGraphicsLayoutItem::QGraphicsLayoutItem(QGraphicsLayoutItemPrivate &dd) : d_ptr(&dd) { Q_D(QGraphicsLayoutItem); + d->init(); d->q_ptr = this; } -- cgit v0.12 From 542fe69cdeff81acb8f986ff4606043613345dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= Date: Tue, 14 Dec 2010 13:03:43 +0100 Subject: Fix to commit 3778c3f5208f3db99d6b23a2a3c4abf1fe2ec64f This is what could happen if you go to lunch before comitting. --- src/gui/graphicsview/qgraphicslayoutitem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicslayoutitem.cpp b/src/gui/graphicsview/qgraphicslayoutitem.cpp index b11dc9e..0a24aae 100644 --- a/src/gui/graphicsview/qgraphicslayoutitem.cpp +++ b/src/gui/graphicsview/qgraphicslayoutitem.cpp @@ -399,7 +399,7 @@ QGraphicsLayoutItem::QGraphicsLayoutItem(QGraphicsLayoutItem *parent, bool isLay { Q_D(QGraphicsLayoutItem); d->init(); - sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + d->sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); d->q_ptr = this; } -- cgit v0.12 From 0727539b89898544047d32e63633790fa0c44b5a Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 14 Dec 2010 14:03:08 +0100 Subject: Don't delete FBO when resetting glyph cache When the glyph cache is cleared because the max texture size has been exceeded, we shouldn't delete the fbo as this is only created in setContext() and will thus not be recreated. All subsequent resizing of the cache will fail. Task-number: QT-3971 Reviewed-by: Samuel --- src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 66445cd..1b879c3 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -83,13 +83,9 @@ void QGLTextureGlyphCache::clear() if (ctx) { QGLShareContextScope scope(ctx); - if (!ctx->d_ptr->workaround_brokenFBOReadBack) - glDeleteFramebuffers(1, &m_fbo); - if (m_width || m_height) glDeleteTextures(1, &m_texture); - m_fbo = 0; m_texture = 0; m_width = 0; m_height = 0; @@ -105,6 +101,13 @@ void QGLTextureGlyphCache::clear() QGLTextureGlyphCache::~QGLTextureGlyphCache() { + if (ctx) { + QGLShareContextScope scope(ctx); + + if (!ctx->d_ptr->workaround_brokenFBOReadBack) + glDeleteFramebuffers(1, &m_fbo); + } + clear(); } -- cgit v0.12 From 3c20e7a08aadb08955603d004054a3adacff180f Mon Sep 17 00:00:00 2001 From: aavit Date: Tue, 14 Dec 2010 15:24:20 +0100 Subject: Make the lancelot/baseline test system generically usable To facilitate usage outside of tst_lancelot: - Added new QBaseLineTest simple API - Added "tst_baselineexample" autotest to show usage - Improved reporting - Results from all testfunctions collected in same report --- tests/arthur/baselineserver/src/baselineserver.cpp | 84 +++--- tests/arthur/baselineserver/src/baselineserver.h | 12 +- tests/arthur/baselineserver/src/baselineserver.pro | 4 +- tests/arthur/baselineserver/src/htmlpage.cpp | 244 ----------------- tests/arthur/baselineserver/src/htmlpage.h | 79 ------ tests/arthur/baselineserver/src/main.cpp | 2 +- tests/arthur/baselineserver/src/report.cpp | 296 +++++++++++++++++++++ tests/arthur/baselineserver/src/report.h | 90 +++++++ tests/arthur/common/baselineprotocol.cpp | 5 + tests/arthur/common/baselineprotocol.h | 12 +- tests/arthur/common/qbaselinetest.cpp | 124 +++++++++ tests/arthur/common/qbaselinetest.h | 64 +++++ tests/arthur/common/qbaselinetest.pri | 13 + tests/auto/baselineexample/baselineexample.pro | 18 ++ tests/auto/baselineexample/tst_baselineexample.cpp | 158 +++++++++++ tests/auto/lancelot/lancelot.pro | 5 +- tests/auto/lancelot/tst_lancelot.cpp | 2 +- 17 files changed, 834 insertions(+), 378 deletions(-) delete mode 100644 tests/arthur/baselineserver/src/htmlpage.cpp delete mode 100644 tests/arthur/baselineserver/src/htmlpage.h create mode 100644 tests/arthur/baselineserver/src/report.cpp create mode 100644 tests/arthur/baselineserver/src/report.h create mode 100644 tests/arthur/common/qbaselinetest.cpp create mode 100644 tests/arthur/common/qbaselinetest.h create mode 100644 tests/arthur/common/qbaselinetest.pri create mode 100644 tests/auto/baselineexample/baselineexample.pro create mode 100644 tests/auto/baselineexample/tst_baselineexample.cpp diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp index 90eb594..6351dff 100644 --- a/tests/arthur/baselineserver/src/baselineserver.cpp +++ b/tests/arthur/baselineserver/src/baselineserver.cpp @@ -145,36 +145,43 @@ const char *BaselineHandler::logtime() //return QTime::currentTime().toString(QLS("mm:ss.zzz")); } -void BaselineHandler::receiveRequest() +bool BaselineHandler::establishConnection() { - if (!connectionEstablished) { - if (!proto.acceptConnection(&plat)) { - qWarning() << runId << logtime() << "Accepting new connection from" << proto.socket.peerAddress().toString() << "failed." << proto.errorMessage(); - proto.socket.disconnectFromHost(); - return; - } - QString logMsg; - foreach (QString key, plat.keys()) { - if (key != PI_HostName && key != PI_HostAddress) - logMsg += key + QLS(": '") + plat.value(key) + QLS("', "); - } - qDebug() << runId << logtime() << "Connection established with" << plat.value(PI_HostName) - << "[" << qPrintable(plat.value(PI_HostAddress)) << "]" << logMsg; + if (!proto.acceptConnection(&plat)) { + qWarning() << runId << logtime() << "Accepting new connection from" << proto.socket.peerAddress().toString() << "failed." << proto.errorMessage(); + proto.socket.disconnectFromHost(); + return false; + } + QString logMsg; + foreach (QString key, plat.keys()) { + if (key != PI_HostName && key != PI_HostAddress) + logMsg += key + QLS(": '") + plat.value(key) + QLS("', "); + } + qDebug() << runId << logtime() << "Connection established with" << plat.value(PI_HostName) + << "[" << qPrintable(plat.value(PI_HostAddress)) << "]" << logMsg; - // Filter on branch - QString branch = plat.value(PI_PulseGitBranch); - if (branch.isEmpty()) { - // Not run by Pulse, i.e. ad hoc run: Ok. - } - else if (branch != QLS("master-integration") || !plat.value(PI_GitCommit).contains(QLS("Merge branch 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into master-integration"))) { - qDebug() << runId << logtime() << "Did not pass branch/staging repo filter, disconnecting."; - proto.sendBlock(BaselineProtocol::Abort, QByteArray("This branch/staging repo is not assigned to be tested.")); - proto.socket.disconnectFromHost(); - return; - } + // Filter on branch + QString branch = plat.value(PI_PulseGitBranch); + if (branch.isEmpty()) { + // Not run by Pulse, i.e. ad hoc run: Ok. + } + else if (branch != QLS("master-integration") || !plat.value(PI_GitCommit).contains(QLS("Merge branch 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into master-integration"))) { + qDebug() << runId << logtime() << "Did not pass branch/staging repo filter, disconnecting."; + proto.sendBlock(BaselineProtocol::Abort, QByteArray("This branch/staging repo is not assigned to be tested.")); + proto.socket.disconnectFromHost(); + return false; + } + + proto.sendBlock(BaselineProtocol::Ack, QByteArray()); + + report.init(this, runId, plat); + return true; +} - proto.sendBlock(BaselineProtocol::Ack, QByteArray()); - connectionEstablished = true; +void BaselineHandler::receiveRequest() +{ + if (!connectionEstablished) { + connectionEstablished = establishConnection(); return; } @@ -247,7 +254,7 @@ void BaselineHandler::provideBaselineChecksums(const QByteArray &itemListBlock) QDataStream ods(&block, QIODevice::WriteOnly); ods << itemList; proto.sendBlock(BaselineProtocol::Ack, block); - report.start(BaselineServer::storagePath(), runId, plat, context, itemList); + report.addItems(itemList); } @@ -274,19 +281,15 @@ void BaselineHandler::storeImage(const QByteArray &itemBlock, bool isBaseline) file.close(); if (!isBaseline) - report.addItem(pathForItem(item, true, false) + QLS(FileFormat), - pathForItem(item, false, false) + QLS(FileFormat), - item); + report.addMismatch(item); - QByteArray msg(isBaseline ? "New baseline image stored: " : - "Mismatch report: " ); - msg += BaselineServer::baseUrl(); + QString msg; if (isBaseline) - msg += pathForItem(item, true, false).toLatin1() + FileFormat; + msg = QLS("New baseline image stored: ") + pathForItem(item, true, true) + QLS(FileFormat); else - msg += report.filePath(); + msg = BaselineServer::baseUrl() + report.filePath(); - proto.sendBlock(BaselineProtocol::Ack, msg); + proto.sendBlock(BaselineProtocol::Ack, msg.toLatin1()); } @@ -298,7 +301,7 @@ void BaselineHandler::receiveDisconnect() } -void BaselineHandler::mapPlatformInfo() +void BaselineHandler::mapPlatformInfo() const { mapped = plat; @@ -328,12 +331,13 @@ void BaselineHandler::mapPlatformInfo() mapped.insert(PI_QtVersion, ver.prepend(QLS("Qt-"))); //### TBD: remove patch version } -QString BaselineHandler::pathForItem(const ImageItem &item, bool isBaseline, bool absolute) +QString BaselineHandler::pathForItem(const ImageItem &item, bool isBaseline, bool absolute) const { if (mapped.isEmpty()) mapPlatformInfo(); - QString itemName = item.itemName; + QString itemName = item.itemName.simplified(); + itemName.replace(QLC(' '), QLC('_')); itemName.replace(QLC('.'), QLC('_')); itemName.append(QLC('_')); itemName.append(QString::number(item.itemChecksum, 16).rightJustified(4, QLC('0'))); diff --git a/tests/arthur/baselineserver/src/baselineserver.h b/tests/arthur/baselineserver/src/baselineserver.h index 346ce1f..e09a9d0 100644 --- a/tests/arthur/baselineserver/src/baselineserver.h +++ b/tests/arthur/baselineserver/src/baselineserver.h @@ -50,7 +50,7 @@ #include #include "baselineprotocol.h" -#include "htmlpage.h" +#include "report.h" // #seconds between update checks #define HEARTBEAT 10 @@ -99,7 +99,9 @@ class BaselineHandler : public QObject public: BaselineHandler(int socketDescriptor = -1); void testPathMapping(); + QString pathForItem(const ImageItem &item, bool isBaseline = true, bool absolute = true) const; + // CGI callbacks: static QString view(const QString &baseline, const QString &rendered, const QString &compared); static QString clearAllBaselines(const QString &context); static QString updateSingleBaseline(const QString &oldBaseline, const QString &newBaseline); @@ -110,19 +112,19 @@ private slots: void receiveDisconnect(); private: + bool establishConnection(); void provideBaselineChecksums(const QByteArray &itemListBlock); void storeImage(const QByteArray &itemBlock, bool isBaseline); - void mapPlatformInfo(); - QString pathForItem(const ImageItem &item, bool isBaseline = true, bool absolute = true); + void mapPlatformInfo() const; const char *logtime(); QString computeMismatchScore(const QImage& baseline, const QImage& rendered); BaselineProtocol proto; PlatformInfo plat; - PlatformInfo mapped; + mutable PlatformInfo mapped; bool connectionEstablished; QString runId; - HTMLPage report; + Report report; }; #endif // BASELINESERVER_H diff --git a/tests/arthur/baselineserver/src/baselineserver.pro b/tests/arthur/baselineserver/src/baselineserver.pro index defa05a..770662b 100644 --- a/tests/arthur/baselineserver/src/baselineserver.pro +++ b/tests/arthur/baselineserver/src/baselineserver.pro @@ -20,11 +20,11 @@ include(../../common/baselineprotocol.pri) SOURCES += main.cpp \ baselineserver.cpp \ - htmlpage.cpp + report.cpp HEADERS += \ baselineserver.h \ - htmlpage.h + report.h RESOURCES += \ baselineserver.qrc diff --git a/tests/arthur/baselineserver/src/htmlpage.cpp b/tests/arthur/baselineserver/src/htmlpage.cpp deleted file mode 100644 index 2b16d25..0000000 --- a/tests/arthur/baselineserver/src/htmlpage.cpp +++ /dev/null @@ -1,244 +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 "htmlpage.h" -#include "baselineprotocol.h" -#include "baselineserver.h" -#include -#include -#include - -HTMLPage::HTMLPage() - : headerWritten(false) -{ -} - -HTMLPage::~HTMLPage() -{ - end(); -} - -QString HTMLPage::filePath() -{ - return path; -} - -void HTMLPage::start(const QString &storagepath, const QString &runId, const PlatformInfo pinfo, const QString &context, const ImageItemList &itemList) -{ - end(); - - id = runId; - plat = pinfo; - ctx = context; - root = storagepath + QLC('/'); - imageItems = itemList; - reportDir = pinfo.value(PI_TestCase) + QLC('/') + (pinfo.value(PI_PulseGitBranch).isEmpty() ? QLS("reports/adhoc/") : QLS("reports/pulse/")); - QString dir = root + reportDir; - QDir cwd; - if (!cwd.exists(dir)) - cwd.mkpath(dir); -} - - -void HTMLPage::writeHeader(const ImageItem &item) -{ - path = reportDir + id + QLC('_') + item.testFunction + QLS(".html"); - - QString pageUrl = BaselineServer::baseUrl() + path; - - file.setFileName(root + path); - if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) - qWarning() << "Failed to open report file" << file.fileName(); - out.setDevice(&file); - - out << "

Lancelot results from run " << id << "

\n\n"; - out << "

Platform Info:

\n"; - out << "\n"; - foreach (QString key, plat.keys()) - out << "\n"; - out << "
" << key << "" << plat.value(key) << "

\n\n"; - - out << "

Clear all baselines (They will be recreated by the next run)

\n\n"; - - out << "

\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "
"; -} - - -void HTMLPage::writeFooter() -{ - out << "
ScriptBaselineRenderedComparison (diffs are RED)Info/Action

\n\n"; -} - - -void HTMLPage::addItem(const QString &baseline, const QString &rendered, const ImageItem &item) -{ - if (!headerWritten) { - writeHeader(item); - headerWritten = true; - } - QString compared = generateCompared(baseline, rendered); - QString pageUrl = BaselineServer::baseUrl() + path; - - out << "\n"; - out << "" << item.itemName << "\n"; - QStringList images = QStringList() << baseline << rendered << compared; - foreach(const QString& img, images) - out << "\n"; - - out << "\n" - << "

Replace baseline with rendered

\n" - << "

Blacklist this item

\n" - << "

View

\n" - << "\n"; - out << "\n\n"; - - QMutableVectorIterator it(imageItems); - while (it.hasNext()) { - it.next(); - if (it.value().itemName == item.itemName) { - it.remove(); - break; - } - } -} - - -void HTMLPage::end() -{ - if (file.isOpen()) { - // Add the names of the scripts that passed the test, or were blacklisted - QString pageUrl = BaselineServer::baseUrl() + path; - for (int i=0; i" << imageItems.at(i).itemName << "N/AN/AN/A"; - if (imageItems.at(i).status == ImageItem::IgnoreItem) { - out << "Blacklisted " - << "Whitelist item"; - } else { - out << "Test passed"; - } - out << "\n"; - } - - writeFooter(); - out.flush(); - file.close(); - path.clear(); - headerWritten = false; - } -} - - -QString HTMLPage::generateCompared(const QString &baseline, const QString &rendered, bool fuzzy) -{ - QString res = rendered; - QFileInfo fi(res); - res.chop(fi.suffix().length() + 1); - res += QLS(fuzzy ? "_fuzzycompared.png" : "_compared.png"); - QStringList args; - if (fuzzy) - args << QLS("-fuzz") << QLS("5%"); - args << root+baseline << root+rendered << root+res; - QProcess::execute(QLS("compare"), args); - return res; -} - - -QString HTMLPage::generateThumbnail(const QString &image) -{ - QString res = image; - QFileInfo imgFI(root+image); - res.chop(imgFI.suffix().length() + 1); - res += QLS("_thumbnail.jpg"); - QFileInfo resFI(root+res); - if (resFI.exists() && resFI.lastModified() > imgFI.lastModified()) - return res; - QStringList args; - args << root+image << QLS("-resize") << QLS("240x240") << QLS("-quality") << QLS("50") << root+res; - QProcess::execute(QLS("convert"), args); - return res; -} - - -void HTMLPage::handleCGIQuery(const QString &query) -{ - QUrl cgiUrl(QLS("http://dummy/cgi-bin/dummy.cgi?") + query); - QTextStream s(stdout); - s << "Content-Type: text/html\r\n\r\n" - << ""; - - QString command(cgiUrl.queryItemValue("cmd")); - - if (command == QLS("view")) { - s << BaselineHandler::view(cgiUrl.queryItemValue(QLS("baseline")), - cgiUrl.queryItemValue(QLS("rendered")), - cgiUrl.queryItemValue(QLS("compared"))); - } - else if (command == QLS("updateSingleBaseline")) { - s << BaselineHandler::updateSingleBaseline(cgiUrl.queryItemValue(QLS("oldBaseline")), - cgiUrl.queryItemValue(QLS("newBaseline"))); - } else if (command == QLS("clearAllBaselines")) { - s << BaselineHandler::clearAllBaselines(cgiUrl.queryItemValue(QLS("context"))); - } else if (command == QLS("blacklist")) { - // blacklist a test - s << BaselineHandler::blacklistTest(cgiUrl.queryItemValue(QLS("context")), - cgiUrl.queryItemValue(QLS("itemId"))); - } else if (command == QLS("whitelist")) { - // whitelist a test - s << BaselineHandler::blacklistTest(cgiUrl.queryItemValue(QLS("context")), - cgiUrl.queryItemValue(QLS("itemId")), true); - } else { - s << "Unknown query:
" << query << "
"; - } - s << "

Back to report"; - s << ""; -} diff --git a/tests/arthur/baselineserver/src/htmlpage.h b/tests/arthur/baselineserver/src/htmlpage.h deleted file mode 100644 index 5f1e051..0000000 --- a/tests/arthur/baselineserver/src/htmlpage.h +++ /dev/null @@ -1,79 +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$ -** -****************************************************************************/ -#ifndef HTMLPAGE_H -#define HTMLPAGE_H - -#include "baselineprotocol.h" -#include -#include - -class HTMLPage -{ -public: - HTMLPage(); - ~HTMLPage(); - - void start(const QString &storagePath, const QString &runId, const PlatformInfo pinfo, const QString &context, const ImageItemList &itemList); - void addItem(const QString &baseline, const QString &rendered, const ImageItem &item); - void end(); - QString filePath(); - - static void handleCGIQuery(const QString &query); - -private: - void writeHeader(const ImageItem &item); - void writeFooter(); - QString generateCompared(const QString &baseline, const QString &rendered, bool fuzzy = false); - QString generateThumbnail(const QString &image); - - QString root; - QString path; - QString reportDir; - QFile file; - QTextStream out; - QString id; - PlatformInfo plat; - QString ctx; - ImageItemList imageItems; - bool headerWritten; -}; - -#endif // HTMLPAGE_H diff --git a/tests/arthur/baselineserver/src/main.cpp b/tests/arthur/baselineserver/src/main.cpp index a5ec4db..bf41f41 100644 --- a/tests/arthur/baselineserver/src/main.cpp +++ b/tests/arthur/baselineserver/src/main.cpp @@ -48,7 +48,7 @@ int main(int argc, char *argv[]) QString queryString(qgetenv("QUERY_STRING")); if (!queryString.isEmpty()) { // run as CGI script - HTMLPage::handleCGIQuery(queryString); + Report::handleCGIQuery(queryString); return 0; } diff --git a/tests/arthur/baselineserver/src/report.cpp b/tests/arthur/baselineserver/src/report.cpp new file mode 100644 index 0000000..f5bb418 --- /dev/null +++ b/tests/arthur/baselineserver/src/report.cpp @@ -0,0 +1,296 @@ +/**************************************************************************** +** +** 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 "report.h" +#include "baselineprotocol.h" +#include "baselineserver.h" +#include +#include +#include + +Report::Report() + : written(false), numItems(0), numMismatches(0) +{ +} + +Report::~Report() +{ + end(); +} + +QString Report::filePath() +{ + return path; +} + +void Report::init(const BaselineHandler *h, const QString &r, const PlatformInfo &p) +{ + handler = h; + runId = r; + plat = p; + rootDir = BaselineServer::storagePath() + QLC('/'); + reportDir = plat.value(PI_TestCase) + QLC('/') + (plat.value(PI_PulseGitBranch).isEmpty() ? QLS("reports/adhoc/") : QLS("reports/pulse/")); + QString dir = rootDir + reportDir; + QDir cwd; + if (!cwd.exists(dir)) + cwd.mkpath(dir); + path = reportDir + QLS("Report_") + runId + QLS(".html"); +} + +void Report::addItems(const ImageItemList &items) +{ + if (items.isEmpty()) + return; + numItems += items.size(); + QString func = items.at(0).testFunction; + if (!testFunctions.contains(func)) + testFunctions.append(func); + itemLists[func] += items; +} + +void Report::addMismatch(const ImageItem &item) +{ + if (!testFunctions.contains(item.testFunction)) { + qWarning() << "Report::addMismatch: unknown testfunction" << item.testFunction; + return; + } + bool found = false; + ImageItemList &list = itemLists[item.testFunction]; + for (ImageItemList::iterator it = list.begin(); it != list.end(); ++it) { + if (it->itemName == item.itemName && it->itemChecksum == item.itemChecksum) { + it->status = ImageItem::Mismatch; + found = true; + break; + } + } + if (found) + numMismatches++; + else + qWarning() << "Report::addMismatch: unknown item" << item.itemName << "in testfunction" << item.testFunction; +} + +void Report::end() +{ + if (written || !numMismatches) + return; + write(); + written = true; +} + + +void Report::write() +{ + QFile file(rootDir + path); + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + qWarning() << "Failed to open report file" << file.fileName(); + return; + } + out.setDevice(&file); + + writeHeader(); + foreach(const QString &func, testFunctions) { + writeFunctionResults(itemLists.value(func)); + } + writeFooter(); + file.close(); +} + + +void Report::writeHeader() +{ + QString title = plat.value(PI_TestCase) + QLS(" Qt Baseline Test Report"); + out << "" << title << "\n" + << "

" << title << "

\n" + << "

Run Id: " << runId << "

\n" + << "

Summary: " << numMismatches << " of " << numItems << " items reported mismatching

\n\n"; + out << "

Platform Info:

\n" + << "\n"; + foreach (QString key, plat.keys()) + out << "\n"; + out << "
" << key << "" << plat.value(key) << "
\n\n"; +} + + +void Report::writeFunctionResults(const ImageItemList &list) +{ + QString testFunction = list.at(0).testFunction; + QString pageUrl = BaselineServer::baseUrl() + path; + QString ctx = handler->pathForItem(list.at(0), true, false).section(QLC('/'), 0, -2); + + out << "\n

 

Test function: " << testFunction << "

\n"; + out << "

Clear all baselines (They will be recreated by the next run)

\n\n"; + + out << "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n\n"; + + foreach (const ImageItem &item, list) { + out << "\n"; + out << "\n"; + QString baseline = handler->pathForItem(item, true, false) + QLS(FileFormat); + if (item.status == ImageItem::Mismatch) { + QString rendered = handler->pathForItem(item, false, false) + QLS(FileFormat); + writeItem(baseline, rendered, item, ctx); + } + else { + out << "\n" + << "\n" + << "\n"; + } + out << "\n\n"; + } + + out << "
ItemBaselineRenderedComparison (diffs are RED)Info/Action
" << item.itemName << "viewn/a"; + switch (item.status) { + case ImageItem::BaselineNotFound: + out << "Baseline not found/regenerated"; + break; + case ImageItem::IgnoreItem: + out << "Blacklisted " + << "Whitelist this item"; + break; + case ImageItem::Ok: + out << "No mismatch reported"; + break; + default: + out << "?"; + break; + } + out << "
\n"; +} + +void Report::writeItem(const QString &baseline, const QString &rendered, const ImageItem &item, const QString &ctx) +{ + QString compared = generateCompared(baseline, rendered); + QString pageUrl = BaselineServer::baseUrl() + path; + + QStringList images = QStringList() << baseline << rendered << compared; + foreach (const QString& img, images) + out << "\n"; + + out << "\n" + << "

Mismatch reported

\n" + << "

Replace baseline with rendered

\n" + << "

Blacklist this item

\n" + << "

Inspect

\n" + << "\n"; +} + +void Report::writeFooter() +{ + out << "\n\n"; +} + + +QString Report::generateCompared(const QString &baseline, const QString &rendered, bool fuzzy) +{ + QString res = rendered; + QFileInfo fi(res); + res.chop(fi.suffix().length() + 1); + res += QLS(fuzzy ? "_fuzzycompared.png" : "_compared.png"); + QStringList args; + if (fuzzy) + args << QLS("-fuzz") << QLS("5%"); + args << rootDir+baseline << rootDir+rendered << rootDir+res; + QProcess::execute(QLS("compare"), args); + return res; +} + + +QString Report::generateThumbnail(const QString &image) +{ + QString res = image; + QFileInfo imgFI(rootDir+image); + res.chop(imgFI.suffix().length() + 1); + res += QLS("_thumbnail.jpg"); + QFileInfo resFI(rootDir+res); + if (resFI.exists() && resFI.lastModified() > imgFI.lastModified()) + return res; + QStringList args; + args << rootDir+image << QLS("-resize") << QLS("240x240>") << QLS("-quality") << QLS("50") << rootDir+res; + QProcess::execute(QLS("convert"), args); + return res; +} + + +void Report::handleCGIQuery(const QString &query) +{ + QUrl cgiUrl(QLS("http://dummy/cgi-bin/dummy.cgi?") + query); + QTextStream s(stdout); + s << "Content-Type: text/html\r\n\r\n" + << ""; + + QString command(cgiUrl.queryItemValue("cmd")); + + if (command == QLS("view")) { + s << BaselineHandler::view(cgiUrl.queryItemValue(QLS("baseline")), + cgiUrl.queryItemValue(QLS("rendered")), + cgiUrl.queryItemValue(QLS("compared"))); + } + else if (command == QLS("updateSingleBaseline")) { + s << BaselineHandler::updateSingleBaseline(cgiUrl.queryItemValue(QLS("oldBaseline")), + cgiUrl.queryItemValue(QLS("newBaseline"))); + } else if (command == QLS("clearAllBaselines")) { + s << BaselineHandler::clearAllBaselines(cgiUrl.queryItemValue(QLS("context"))); + } else if (command == QLS("blacklist")) { + // blacklist a test + s << BaselineHandler::blacklistTest(cgiUrl.queryItemValue(QLS("context")), + cgiUrl.queryItemValue(QLS("itemId"))); + } else if (command == QLS("whitelist")) { + // whitelist a test + s << BaselineHandler::blacklistTest(cgiUrl.queryItemValue(QLS("context")), + cgiUrl.queryItemValue(QLS("itemId")), true); + } else { + s << "Unknown query:
" << query << "
"; + } + s << "

Back to report"; + s << ""; +} diff --git a/tests/arthur/baselineserver/src/report.h b/tests/arthur/baselineserver/src/report.h new file mode 100644 index 0000000..0df613a --- /dev/null +++ b/tests/arthur/baselineserver/src/report.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ +#ifndef REPORT_H +#define REPORT_H + +#include "baselineprotocol.h" +#include +#include +#include +#include + +class BaselineHandler; + +class Report +{ +public: + Report(); + ~Report(); + + void init(const BaselineHandler *h, const QString &r, const PlatformInfo &p); + void addItems(const ImageItemList& items); + void addMismatch(const ImageItem& item); + void end(); + + QString filePath(); + + static void handleCGIQuery(const QString &query); + +private: + void write(); + void writeFunctionResults(const ImageItemList &list); + void writeItem(const QString &baseline, const QString &rendered, const ImageItem &item, const QString &ctx); + void writeHeader(); + void writeFooter(); + QString generateCompared(const QString &baseline, const QString &rendered, bool fuzzy = false); + QString generateThumbnail(const QString &image); + + const BaselineHandler *handler; + QString runId; + PlatformInfo plat; + QString rootDir; + QString reportDir; + QString path; + QStringList testFunctions; + QMap itemLists; + bool written; + int numItems; + int numMismatches; + QTextStream out; +}; + +#endif // REPORT_H diff --git a/tests/arthur/common/baselineprotocol.cpp b/tests/arthur/common/baselineprotocol.cpp index c7e9e72..e4445bd 100644 --- a/tests/arthur/common/baselineprotocol.cpp +++ b/tests/arthur/common/baselineprotocol.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #ifndef QMAKESPEC #define QMAKESPEC "Unknown" @@ -264,6 +265,10 @@ QDataStream & operator>> (QDataStream &stream, ImageItem &ii) return stream; } +BaselineProtocol::BaselineProtocol() +{ +} + BaselineProtocol::~BaselineProtocol() { socket.close(); diff --git a/tests/arthur/common/baselineprotocol.h b/tests/arthur/common/baselineprotocol.h index 1f4d593..2315bc3 100644 --- a/tests/arthur/common/baselineprotocol.h +++ b/tests/arthur/common/baselineprotocol.h @@ -38,6 +38,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + #ifndef BASELINEPROTOCOL_H #define BASELINEPROTOCOL_H @@ -46,6 +47,7 @@ #include #include #include +#include #define QLS QLatin1String #define QLC QLatin1Char @@ -87,7 +89,8 @@ public: enum ItemStatus { Ok = 0, BaselineNotFound = 1, - IgnoreItem = 2 + IgnoreItem = 2, + Mismatch = 3 }; QString testFunction; @@ -107,12 +110,15 @@ Q_DECLARE_METATYPE(ImageItem); typedef QVector ImageItemList; + class BaselineProtocol { public: - BaselineProtocol() {} + BaselineProtocol(); ~BaselineProtocol(); + static BaselineProtocol *instance(QObject *parent = 0); + // **************************************************** // Important constants here // **************************************************** @@ -136,6 +142,8 @@ public: }; // For client: + + // For advanced client: bool connect(const QString &testCase, bool *dryrun = 0); bool requestBaselineChecksums(const QString &testFunction, ImageItemList *itemList); bool submitNewBaseline(const ImageItem &item, QByteArray *serverMsg); diff --git a/tests/arthur/common/qbaselinetest.cpp b/tests/arthur/common/qbaselinetest.cpp new file mode 100644 index 0000000..e95b510 --- /dev/null +++ b/tests/arthur/common/qbaselinetest.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** 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 "qbaselinetest.h" +#include "baselineprotocol.h" + +namespace QBaselineTest { + +bool connected = false; +bool triedConnecting = false; +BaselineProtocol proto; + + +bool checkImage(const QImage& img, const char *name, quint16 checksum, QByteArray *msg, bool *error) +{ + QByteArray itemName; + bool hasName = qstrlen(name); + const char *tag = QTest::currentDataTag(); + if (qstrlen(tag)) { + itemName = tag; + if (hasName) + itemName.append('_').append(name); + } else { + itemName = hasName ? name : "default_name"; + } + + *msg = "Baseline check of image '" + itemName + "': "; + + if (!triedConnecting) { + triedConnecting = true; + if (!proto.connect(QTest::testObject()->metaObject()->className())) { + *msg += "Failed to connect to baseline server: " + proto.errorMessage().toLatin1(); + *error = true; + return true; + } + connected = true; + } + if (!connected) { + *msg = "Not connected to baseline server."; + *error = true; + return true; + } + + ImageItem item; + item.itemName = QLatin1String(itemName); + item.itemChecksum = checksum; + item.testFunction = QLatin1String(QTest::currentTestFunction()); + ImageItemList list; + list.append(item); + if (!proto.requestBaselineChecksums(QLatin1String(QTest::currentTestFunction()), &list) || list.isEmpty()) { + *msg = "Communication with baseline server failed: " + proto.errorMessage().toLatin1(); + *error = true; + return true; + } + item.image = img; + item.imageChecksums.prepend(ImageItem::computeChecksum(img)); + QByteArray srvMsg; + switch (list.at(0).status) { + case ImageItem::IgnoreItem : + qDebug() << msg->constData() << "Ignored, blacklisted on server."; + return true; + break; + case ImageItem::BaselineNotFound: + if (proto.submitNewBaseline(item, &srvMsg)) + qDebug() << msg->constData() << "Baseline not found on server. New baseline uploaded."; + else + qDebug() << msg->constData() << "Baseline not found on server. Uploading of new baseline failed:" << srvMsg; + return true; + break; + case ImageItem::Ok: + break; + default: + qWarning() << "Unexpected reply from baseline server."; + return true; + break; + } + *error = false; + // The actual comparison of the given image with the baseline: + if (list.at(0).imageChecksums.contains(item.imageChecksums.at(0))) + return true; + proto.submitMismatch(item, &srvMsg); + *msg += "Mismatch. See report:\n " + srvMsg; + return false; +} + +} diff --git a/tests/arthur/common/qbaselinetest.h b/tests/arthur/common/qbaselinetest.h new file mode 100644 index 0000000..3445c72 --- /dev/null +++ b/tests/arthur/common/qbaselinetest.h @@ -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 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$ +** +****************************************************************************/ + +#ifndef BASELINETEST_H +#define BASELINETEST_H + +#include + +namespace QBaselineTest { +bool checkImage(const QImage& img, const char *name, quint16 checksum, QByteArray *msg, bool *error); +} + +#define QBASELINE_CHECK_SUM(image, name, checksum)\ +do {\ + QByteArray _msg;\ + bool _err = false;\ + if (!QBaselineTest::checkImage((image), (name), (checksum), &_msg, &_err)) {\ + QFAIL(_msg.constData());\ + } else if (_err) {\ + QSKIP(_msg.constData(), SkipSingle);\ + }\ +} while (0) + +#define QBASELINE_CHECK(image, name) QBASELINE_CHECK_SUM(image, name, 0) + +#endif // BASELINETEST_H diff --git a/tests/arthur/common/qbaselinetest.pri b/tests/arthur/common/qbaselinetest.pri new file mode 100644 index 0000000..5420c6e --- /dev/null +++ b/tests/arthur/common/qbaselinetest.pri @@ -0,0 +1,13 @@ +QT *= testlib + +SOURCES += \ + $$PWD/qbaselinetest.cpp + +HEADERS += \ + $$PWD/qbaselinetest.h + +win32|symbian*:MKSPEC=$$replace(QMAKESPEC, \\\\, /) +else:MKSPEC=$$QMAKESPEC +DEFINES += QMAKESPEC=\\\"$$MKSPEC\\\" + +include($$PWD/baselineprotocol.pri) diff --git a/tests/auto/baselineexample/baselineexample.pro b/tests/auto/baselineexample/baselineexample.pro new file mode 100644 index 0000000..30feecc --- /dev/null +++ b/tests/auto/baselineexample/baselineexample.pro @@ -0,0 +1,18 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2010-12-09T14:55:13 +# +#------------------------------------------------- + +QT += testlib + +TARGET = tst_baselineexample +CONFIG += console +CONFIG -= app_bundle + +TEMPLATE = app + +SOURCES += tst_baselineexample.cpp +DEFINES += SRCDIR=\\\"$$PWD/\\\" + +include($$QT_SOURCE_TREE/tests/arthur/common/qbaselinetest.pri) diff --git a/tests/auto/baselineexample/tst_baselineexample.cpp b/tests/auto/baselineexample/tst_baselineexample.cpp new file mode 100644 index 0000000..28cbec5 --- /dev/null +++ b/tests/auto/baselineexample/tst_baselineexample.cpp @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** 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 +#include + +class tst_BaselineExample : public QObject +{ + Q_OBJECT + +public: + tst_BaselineExample(); + +private Q_SLOTS: + void testBasicUsage(); + void testMultipleImages(); + void testDataDriven_data(); + void testDataDriven(); + void testDataDrivenMultiple_data(); + void testDataDrivenMultiple(); + void testChecksum_data(); + void testChecksum(); +}; + + +tst_BaselineExample::tst_BaselineExample() +{ +} + + +void tst_BaselineExample::testBasicUsage() +{ + // Generate an image: + QPushButton b("Press me!"); + b.resize(100, 50); + b.show(); + QTest::qWaitForWindowShown(&b); + QImage img1 = QPixmap::grabWidget(&b).toImage(); + QVERIFY(!img1.isNull()); + + // Compare it to baseline on server: + QBASELINE_CHECK(img1, "button"); +} + + +void tst_BaselineExample::testMultipleImages() +{ + QPushButton b("Press me!"); + b.resize(100, 50); + b.show(); + QTest::qWaitForWindowShown(&b); + QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), "text1"); + + b.setText("Kick me!"); + QTest::qWait(50); + QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), "text2"); +} + + +void tst_BaselineExample::testDataDriven_data() +{ + QTest::addColumn("label"); + QTest::newRow("short") << "Ok!"; + QTest::newRow("long") << "A really long button text that just does not seem to end"; + QTest::newRow("empty") << ""; +} + + +void tst_BaselineExample::testDataDriven() +{ + QFETCH(QString, label); + QPushButton b(label); + b.resize(100, 50); + b.show(); + QTest::qWaitForWindowShown(&b); + QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), 0); +} + + +void tst_BaselineExample::testDataDrivenMultiple_data() +{ + testDataDriven_data(); +} + + +void tst_BaselineExample::testDataDrivenMultiple() +{ + QFETCH(QString, label); + QPushButton b(label); + b.resize(100, 50); + b.show(); + QTest::qWaitForWindowShown(&b); + QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), "normal"); + + b.setText(label.prepend('&')); + QTest::qWait(50); + QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), "shortcut"); +} + + +void tst_BaselineExample::testChecksum_data() +{ + testDataDriven_data(); +} + + +void tst_BaselineExample::testChecksum() +{ + QFETCH(QString, label); + QPushButton b(label); + b.resize(100, 50); + b.show(); + QTest::qWaitForWindowShown(&b); + QBASELINE_CHECK_SUM(QPixmap::grabWidget(&b).toImage(), 0, quint16(qHash(label))); +} + + +QTEST_MAIN(tst_BaselineExample); + +#include "tst_baselineexample.moc" diff --git a/tests/auto/lancelot/lancelot.pro b/tests/auto/lancelot/lancelot.pro index 4535b83..6d6edf8 100644 --- a/tests/auto/lancelot/lancelot.pro +++ b/tests/auto/lancelot/lancelot.pro @@ -7,9 +7,6 @@ SOURCES += tst_lancelot.cpp \ HEADERS += $$QT_SOURCE_TREE/tests/arthur/common/paintcommands.h RESOURCES += $$QT_SOURCE_TREE/tests/arthur/common/images.qrc -include($$QT_SOURCE_TREE/tests/arthur/common/baselineprotocol.pri) -win32|symbian*:MKSPEC=$$replace(QMAKESPEC, \\\\, /) -else:MKSPEC=$$QMAKESPEC -DEFINES += QMAKESPEC=\\\"$$MKSPEC\\\" +include($$QT_SOURCE_TREE/tests/arthur/common/qbaselinetest.pri) !symbian:!wince*:DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/lancelot/tst_lancelot.cpp b/tests/auto/lancelot/tst_lancelot.cpp index d1b093f..4bde927 100644 --- a/tests/auto/lancelot/tst_lancelot.cpp +++ b/tests/auto/lancelot/tst_lancelot.cpp @@ -252,7 +252,7 @@ void tst_Lancelot::runTestSuite(GraphicsEngine engine, QImage::Format format) if (dryRunMode) qDebug() << "Dryrun mode, ignoring detected mismatch." << serverMsg; else - QFAIL("Rendered image differs from baseline.\n" + serverMsg); + QFAIL("Rendered image differs from baseline. Report:\n " + serverMsg); } } -- cgit v0.12 From c031e5808ee406277a5401c69801e5c6e2ebfaea Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Wed, 15 Dec 2010 14:16:36 +1000 Subject: Fix invalid configurations being added to bearermonitor list. --- examples/network/bearermonitor/bearermonitor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/network/bearermonitor/bearermonitor.cpp b/examples/network/bearermonitor/bearermonitor.cpp index 75ffb01..bfa3d1f 100644 --- a/examples/network/bearermonitor/bearermonitor.cpp +++ b/examples/network/bearermonitor/bearermonitor.cpp @@ -226,7 +226,7 @@ void BearerMonitor::updateConfigurations() if (defaultConfiguration.type() == QNetworkConfiguration::ServiceNetwork) updateSnapConfiguration(defaultItem, defaultConfiguration); - } else { + } else if (defaultConfiguration.isValid()) { configurationAdded(defaultConfiguration); } -- cgit v0.12 From c9faf2defa9fa3209e44e8a5c1ae2da8e630d379 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Wed, 8 Dec 2010 17:48:14 +1000 Subject: Ensure that DBus is connected before all uses. In early system startup applications may try to use ICD before it is contactable. Ensure that the connection to ICD is established before all calls are made. If ICD is still not contactable QDBusServiceWatcher is used to monitor registration of the com.nokia.icd2 address and reconnection is attempted once ICD is started. Task-number: Maemo 199755 --- src/plugins/bearer/icd/qicdengine.cpp | 93 ++++++++++++++++++++++++++++++----- src/plugins/bearer/icd/qicdengine.h | 6 +++ 2 files changed, 88 insertions(+), 11 deletions(-) diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp index bdf4e2e..a5a183b 100644 --- a/src/plugins/bearer/icd/qicdengine.cpp +++ b/src/plugins/bearer/icd/qicdengine.cpp @@ -229,7 +229,7 @@ void IapMonitor::iapRemoved(const QString &iap_id) /******************************************************************************/ QIcdEngine::QIcdEngine(QObject *parent) -: QBearerEngine(parent), iapMonitor(0), m_dbusInterface(0), +: QBearerEngine(parent), iapMonitor(0), m_dbusInterface(0), m_icdServiceWatcher(0), firstUpdate(true), m_scanGoingOn(false) { } @@ -248,9 +248,10 @@ QNetworkConfigurationManager::Capabilities QIcdEngine::capabilities() const QNetworkConfigurationManager::NetworkSessionRequired; } -void QIcdEngine::initialize() +bool QIcdEngine::ensureDBusConnection() { - QMutexLocker locker(&mutex); + if (m_dbusInterface) + return true; // Setup DBus Interface for ICD m_dbusInterface = new QDBusInterface(ICD_DBUS_API_INTERFACE, @@ -259,9 +260,22 @@ void QIcdEngine::initialize() QDBusConnection::systemBus(), this); - // abort if cannot connect to DBus. - if (!m_dbusInterface->isValid()) - return; + if (!m_dbusInterface->isValid()) { + delete m_dbusInterface; + m_dbusInterface = 0; + + if (!m_icdServiceWatcher) { + m_icdServiceWatcher = new QDBusServiceWatcher(ICD_DBUS_API_INTERFACE, + QDBusConnection::systemBus(), + QDBusServiceWatcher::WatchForOwnerChange, + this); + + connect(m_icdServiceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), + this, SLOT(icdServiceOwnerChanged(QString,QString,QString))); + } + + return false; + } connect(&m_scanTimer, SIGNAL(timeout()), this, SLOT(finishAsyncConfigurationUpdate())); m_scanTimer.setSingleShot(true); @@ -289,6 +303,19 @@ void QIcdEngine::initialize() doRequestUpdate(); getIcdInitialState(); + + return true; +} + +void QIcdEngine::initialize() +{ + QMutexLocker locker(&mutex); + + if (!ensureDBusConnection()) { + locker.unlock(); + emit updateCompleted(); + locker.relock(); + } } static inline QString network_attrs_to_security(uint network_attrs) @@ -792,6 +819,9 @@ QNetworkConfigurationPrivatePointer QIcdEngine::defaultConfiguration() { QMutexLocker locker(&mutex); + if (!ensureDBusConnection()) + return QNetworkConfigurationPrivatePointer(); + // Here we just return [ANY] request to icd and let the icd decide which IAP to connect. return userChoiceConfigurations.value(OSSO_IAP_ANY); } @@ -933,13 +963,52 @@ void QIcdEngine::connectionStateSignalsSlot(QDBusMessage msg) locker.relock(); } +void QIcdEngine::icdServiceOwnerChanged(const QString &serviceName, const QString &oldOwner, + const QString &newOwner) +{ + QMutexLocker locker(&mutex); + + if (newOwner.isEmpty()) { + // Disconnected from ICD, remove all configurations + cleanup(); + delete iapMonitor; + iapMonitor = 0; + delete m_dbusInterface; + m_dbusInterface = 0; + + QMutableHashIterator i(accessPointConfigurations); + while (i.hasNext()) { + i.next(); + + QNetworkConfigurationPrivatePointer ptr = i.value(); + i.remove(); + + locker.unlock(); + emit configurationRemoved(ptr); + locker.relock(); + } + + userChoiceConfigurations.clear(); + } else { + // Connected to ICD ensure connection. + ensureDBusConnection(); + } +} + void QIcdEngine::requestUpdate() { QMutexLocker locker(&mutex); - if (m_scanGoingOn) { + if (!ensureDBusConnection()) { + locker.unlock(); + emit updateCompleted(); + locker.relock(); return; } + + if (m_scanGoingOn) + return; + m_scanGoingOn = true; m_dbusInterface->connection().connect(ICD_DBUS_API_INTERFACE, @@ -956,14 +1025,16 @@ void QIcdEngine::requestUpdate() void QIcdEngine::cancelAsyncConfigurationUpdate() { - if (!m_scanGoingOn) { + if (!ensureDBusConnection()) return; - } + + if (!m_scanGoingOn) + return; + m_scanGoingOn = false; - if (m_scanTimer.isActive()) { + if (m_scanTimer.isActive()) m_scanTimer.stop(); - } m_dbusInterface->connection().disconnect(ICD_DBUS_API_INTERFACE, ICD_DBUS_API_PATH, diff --git a/src/plugins/bearer/icd/qicdengine.h b/src/plugins/bearer/icd/qicdengine.h index d528f15..d5b4fb3 100644 --- a/src/plugins/bearer/icd/qicdengine.h +++ b/src/plugins/bearer/icd/qicdengine.h @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE class QNetworkConfigurationPrivate; class IapMonitor; class QDBusInterface; +class QDBusServiceWatcher; inline QNetworkConfiguration::BearerType bearerTypeFromIapType(const QString &iapType) { @@ -147,12 +148,15 @@ private Q_SLOTS: void finishAsyncConfigurationUpdate(); void asyncUpdateConfigurationsSlot(QDBusMessage msg); void connectionStateSignalsSlot(QDBusMessage msg); + void icdServiceOwnerChanged(const QString &serviceName, const QString &oldOwner, + const QString &newOwner); private: void startListeningStateSignalsForAllConnections(); void doRequestUpdate(QList scanned = QList()); void cancelAsyncConfigurationUpdate(); void getIcdInitialState(); + bool ensureDBusConnection(); private: IapMonitor *iapMonitor; @@ -162,6 +166,8 @@ private: QStringList m_typesToBeScanned; QList m_scanResult; + QDBusServiceWatcher *m_icdServiceWatcher; + bool firstUpdate; bool m_scanGoingOn; }; -- cgit v0.12 From e75980a322ea1088e1c6bf60259b8ba853d32444 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Wed, 15 Dec 2010 15:30:43 +1000 Subject: Fix possible null pointer dereference. When parsing a new connection an access point with the same SSID may not have been previously seen. Task-number: QTBUG-15276 --- src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp index 554f9b7..f93b605 100644 --- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp +++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp @@ -743,9 +743,11 @@ QNetworkConfigurationPrivate *QNetworkManagerEngine::parseConnection(const QStri QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(accessPointId); - mutex.unlock(); - emit configurationRemoved(ptr); - mutex.lock(); + if (ptr) { + mutex.unlock(); + emit configurationRemoved(ptr); + mutex.lock(); + } } break; } -- cgit v0.12 From 27de60f2f6047cb3f698825af96e569fde04ef06 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Wed, 15 Dec 2010 17:06:25 +1000 Subject: Add extra type of embedded license. Marketing needs this for commercial customers. Reviewed-by: Trust Me --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 7141880..aa8d047 100755 --- a/configure +++ b/configure @@ -480,7 +480,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then # Qt All-OS LICENSE_EXTENSION="-ALLOS" ;; - 8M,* | KM,* | S9,* | SC,* | SU,* | SW,* | X9,* | XC,* | XU,* | XW,*) + 8M,* | KM,* | S9,* | SC,* | SM,* | SU,* | SW,* | X9,* | XC,* | XU,* | XW,*) # Qt for Embedded Linux LICENSE_EXTENSION="-EMBEDDED" ;; -- cgit v0.12 From 915a31420c4f8d04c82103e3dd4d33b468a9334d Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 15 Dec 2010 11:44:19 +0200 Subject: Resize event for QDesktopWidget was sent too early Some recent changes had caused a change in events sent from avkon to QSymbianControl, causing QDesktopWidget to be get resize event before the client area of application was correct. Moved the resize event sending from HandleStatusPaneSizeChange to HandleResourceChange (case KEikDynamicLayoutVariantSwitch). Task-number: QTBUG-16095 Reviewed-by: Sami Merila --- src/gui/kernel/qapplication_s60.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 81fa4e6..6db1fa8 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -667,9 +667,6 @@ void QSymbianControl::HandleStatusPaneSizeChange() { QS60MainAppUi *s60AppUi = static_cast(S60->appUi()); s60AppUi->HandleStatusPaneSizeChange(); - // Send resize event to trigger desktopwidget workAreaResized signal - QResizeEvent e(qt_desktopWidget->size(), qt_desktopWidget->size()); - QApplication::sendEvent(qt_desktopWidget, &e); } #endif @@ -1310,6 +1307,9 @@ void QSymbianControl::HandleResourceChange(int resourceType) case KEikDynamicLayoutVariantSwitch: { handleClientAreaChange(); + // Send resize event to trigger desktopwidget workAreaResized signal + QResizeEvent e(qt_desktopWidget->size(), qt_desktopWidget->size()); + QApplication::sendEvent(qt_desktopWidget, &e); break; } #endif -- cgit v0.12 From e0aa9897bc2d04054cc65dbe3452bee2ed2eacd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 15 Dec 2010 12:41:08 +0100 Subject: Prevent crash in drawhelper code when the cpu has MMXEXT but no SSE. We can't use the qdrawhelper_sse.cpp or qdrawhelper_sse3dnow.cpp when SSE is not run-time detected, as those are compiled with -msse and MMXEXT is just a subset of SSE. The compiler might choose to use an instruction not in the subset, causing a crash at run-time. Task-number: QTBUG-15693 Reviewed-by: Thiago Macieira --- src/gui/painting/qdrawhelper.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 024a69d..62af212 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -7711,17 +7711,6 @@ void qInitDrawhelperAsm() } #endif #endif // SSE -#if defined(QT_HAVE_MMXEXT) && defined(QT_HAVE_SSE) - } else if (features & MMXEXT) { - qt_memfill32 = qt_memfill32_sse; - qDrawHelper[QImage::Format_RGB16].bitmapBlit = qt_bitmapblit16_sse; -# ifdef QT_HAVE_3DNOW - if (features & MMX3DNOW) { - qt_memfill32 = qt_memfill32_sse3dnow; - qDrawHelper[QImage::Format_RGB16].bitmapBlit = qt_bitmapblit16_sse3dnow; - } -# endif // 3DNOW -#endif // MMXEXT } #ifdef QT_HAVE_MMX if (features & MMX) { -- cgit v0.12 From 21b1b5a9af95af10b281176564f14cafa2339006 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Sat, 11 Dec 2010 00:03:14 +0100 Subject: Improve performance of clipping to a scaled QRectF Clipping to a scaled QRectF was so far hitting the slow code path in the raster paintengine that generates clip spans for every line. This is not needed as we also clip translated QRectF's to integer rects. This patch does the same for scaled rectangles and ensures the clipping really happens at the closest pixel boundary. Reviewed-by: Samuel --- src/gui/painting/qpaintengine_raster.cpp | 33 ++++++++++++++++++++++---------- src/gui/painting/qpaintengine_raster_p.h | 2 ++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 89202ac..4d06c9f 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -1212,7 +1212,7 @@ void QRasterPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) // There are some cases that are not supported by clip(QRect) if (op != Qt::UniteClip && (op != Qt::IntersectClip || !s->clip || s->clip->hasRectClip || s->clip->hasRegionClip)) { - if (s->matrix.type() <= QTransform::TxTranslate + if (s->matrix.type() <= QTransform::TxScale && ((path.shape() == QVectorPath::RectangleHint) || (isRect(points, path.elementCount()) && (!types || (types[0] == QPainterPath::MoveToElement @@ -1224,8 +1224,8 @@ void QRasterPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) #endif QRectF r(points[0], points[1], points[4]-points[0], points[5]-points[1]); - clip(r.toRect(), op); - return; + if (setClipRectInDeviceCoords(s->matrix.mapRect(r).toRect(), op)) + return; } } @@ -1286,7 +1286,6 @@ void QRasterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) qDebug() << "QRasterPaintEngine::clip(): " << rect << op; #endif - Q_D(QRasterPaintEngine); QRasterPaintEngineState *s = state(); if (op == Qt::NoClip) { @@ -1296,11 +1295,23 @@ void QRasterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) QPaintEngineEx::clip(rect, op); return; - } else if (op == Qt::ReplaceClip || s->clip == 0) { + } else if (!setClipRectInDeviceCoords(s->matrix.mapRect(rect), op)) { + QPaintEngineEx::clip(rect, op); + return; + } +} + + +bool QRasterPaintEngine::setClipRectInDeviceCoords(const QRect &r, Qt::ClipOperation op) +{ + Q_D(QRasterPaintEngine); + QRect clipRect = r & d->deviceRect; + QRasterPaintEngineState *s = state(); + + if (op == Qt::ReplaceClip || s->clip == 0) { // No current clip, hence we intersect with sysclip and be // done with it... - QRect clipRect = s->matrix.mapRect(rect) & d->deviceRect; QRegion clipRegion = systemClip(); QClipData *clip = new QClipData(d->rasterBuffer->height()); @@ -1316,12 +1327,11 @@ void QRasterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) s->clip->enabled = true; s->flags.has_clip_ownership = true; - } else { // intersect clip with current clip + } else if (op == Qt::IntersectClip){ // intersect clip with current clip QClipData *base = s->clip; Q_ASSERT(base); if (base->hasRectClip || base->hasRegionClip) { - QRect clipRect = s->matrix.mapRect(rect) & d->deviceRect; if (!s->flags.has_clip_ownership) { s->clip = new QClipData(d->rasterBuffer->height()); s->flags.has_clip_ownership = true; @@ -1332,11 +1342,14 @@ void QRasterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) s->clip->setClipRegion(base->clipRegion & clipRect); s->clip->enabled = true; } else { - QPaintEngineEx::clip(rect, op); - return; + return false; } + } else { + return false; } + qrasterpaintengine_dirty_clip(d, s); + return true; } diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h index 1016f8d..7d4d3b6 100644 --- a/src/gui/painting/qpaintengine_raster_p.h +++ b/src/gui/painting/qpaintengine_raster_p.h @@ -266,6 +266,8 @@ private: void drawGlyphsS60(const QPointF &p, const QTextItemInt &ti); #endif // Q_OS_SYMBIAN && QT_NO_FREETYPE + bool setClipRectInDeviceCoords(const QRect &r, Qt::ClipOperation op); + inline void ensureBrush(const QBrush &brush) { if (!qbrush_fast_equals(state()->lastBrush, brush) || (brush.style() != Qt::NoBrush && state()->fillFlags)) updateBrush(brush); -- cgit v0.12 From d8990fbd132fc9e456c55a624eeb709088b0b819 Mon Sep 17 00:00:00 2001 From: Paul Labedan Date: Tue, 7 Dec 2010 12:25:23 +0100 Subject: Remove warning about null cursor handle on S60 while handle is valid --- src/gui/kernel/qcursor_s60.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qcursor_s60.cpp b/src/gui/kernel/qcursor_s60.cpp index 68e079e..6369f25 100644 --- a/src/gui/kernel/qcursor_s60.cpp +++ b/src/gui/kernel/qcursor_s60.cpp @@ -472,9 +472,9 @@ void qt_symbian_setWindowGroupCursor(const QCursor &cursor, RWindowTreeNode &nod if (handle) { RWsPointerCursor *pcurs = reinterpret_cast (handle); node.SetCustomPointerCursor(*pcurs); - } + } else #ifdef Q_SYMBIAN_HAS_SYSTEM_CURSORS - else { + { TInt shape = qt_symbian_translate_cursor_shape(cursor.shape()); node.SetPointerCursor(shape); } -- cgit v0.12 From 3e7adcb80a86748608d5517413301cd2b1b8df78 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Wed, 15 Dec 2010 16:42:05 +0100 Subject: Check for null-pointer to avoid a crash in textedit demo. Task-number: QTBUG-16125 Reviewed-by: trustme --- demos/textedit/textedit.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/demos/textedit/textedit.cpp b/demos/textedit/textedit.cpp index 165c97c..9fa1949 100644 --- a/demos/textedit/textedit.cpp +++ b/demos/textedit/textedit.cpp @@ -262,7 +262,8 @@ void TextEdit::setupEditActions() tb->addAction(a); menu->addAction(a); #ifndef QT_NO_CLIPBOARD - actionPaste->setEnabled(QApplication::clipboard()->mimeData()->hasText()); + if (const QMimeData *md = QApplication::clipboard()->mimeData()) + actionPaste->setEnabled(md->hasText()); #endif } @@ -681,7 +682,8 @@ void TextEdit::cursorPositionChanged() void TextEdit::clipboardDataChanged() { #ifndef QT_NO_CLIPBOARD - actionPaste->setEnabled(QApplication::clipboard()->mimeData()->hasText()); + if (const QMimeData *md = QApplication::clipboard()->mimeData()) + actionPaste->setEnabled(md->hasText()); #endif } -- cgit v0.12 From 32d200da9cc7a4dfb3f302f22ef5718a286845c9 Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Tue, 7 Dec 2010 14:29:28 +0100 Subject: Make QScroller examples Qt-namespace safe. --- examples/scroller/plot/plotwidget.h | 3 ++- examples/scroller/plot/settingswidget.h | 2 ++ examples/scroller/wheel/wheelwidget.h | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/scroller/plot/plotwidget.h b/examples/scroller/plot/plotwidget.h index 3b4d92d..4987ebc 100644 --- a/examples/scroller/plot/plotwidget.h +++ b/examples/scroller/plot/plotwidget.h @@ -45,10 +45,11 @@ #include #include +QT_BEGIN_NAMESPACE class QPushButton; class QLabel; - class QScroller; +QT_END_NAMESPACE class PlotWidget : public QWidget { diff --git a/examples/scroller/plot/settingswidget.h b/examples/scroller/plot/settingswidget.h index 2fb268c..0ea201d 100644 --- a/examples/scroller/plot/settingswidget.h +++ b/examples/scroller/plot/settingswidget.h @@ -44,12 +44,14 @@ #include +QT_BEGIN_NAMESPACE class QScroller; class QGridLayout; class QSpinBox; class QComboBox; class QCheckBox; class QPlainTextEdit; +QT_END_NAMESPACE class MetricItemUpdater; class SnapOverlay; diff --git a/examples/scroller/wheel/wheelwidget.h b/examples/scroller/wheel/wheelwidget.h index 818b6ab..c50f951 100644 --- a/examples/scroller/wheel/wheelwidget.h +++ b/examples/scroller/wheel/wheelwidget.h @@ -45,8 +45,10 @@ #include #include +QT_BEGIN_NAMESPACE class QPainter; class QRect; +QT_END_NAMESPACE class AbstractWheelWidget : public QWidget { Q_OBJECT -- cgit v0.12 From 3e0df49f978933b1e4e6b48c695bf813ec9a2828 Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Tue, 7 Dec 2010 14:29:59 +0100 Subject: Fix drag velocity smoothing in QScroller. The algorithm used for smoothing the drag velocity was wrong in many ways. Reviewed-by: Ralf Engels --- examples/scroller/plot/settingswidget.cpp | 2 +- src/gui/util/qscroller.cpp | 16 ++++++++++------ src/gui/util/qscrollerproperties.cpp | 9 +++++---- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/examples/scroller/plot/settingswidget.cpp b/examples/scroller/plot/settingswidget.cpp index af1e621..840e3fc 100644 --- a/examples/scroller/plot/settingswidget.cpp +++ b/examples/scroller/plot/settingswidget.cpp @@ -348,7 +348,7 @@ private: MetricItem items[] = { { METRIC(MousePressEventDelay), 1000, "ms", qreal(0), qreal(2000), qreal(10) }, { METRIC(DragStartDistance), 1000, "mm", qreal(1), qreal(20), qreal(0.1) }, - { METRIC(DragVelocitySmoothingFactor), 1, "", qreal(0), qreal(1), qreal(0.01) }, + { METRIC(DragVelocitySmoothingFactor), 1, "", qreal(0), qreal(1), qreal(0.1) }, { METRIC(AxisLockThreshold), 1, "", qreal(0), qreal(1), qreal(0.01) }, { METRIC(ScrollingCurve), 1, "", QEasingCurve(), 0, 0 }, diff --git a/src/gui/util/qscroller.cpp b/src/gui/util/qscroller.cpp index b7b5903..0955f58 100644 --- a/src/gui/util/qscroller.cpp +++ b/src/gui/util/qscroller.cpp @@ -1046,6 +1046,9 @@ void QScrollerPrivate::setDpiFromWidget(QWidget *widget) */ void QScrollerPrivate::updateVelocity(const QPointF &deltaPixelRaw, qint64 deltaTime) { + if (deltaTime <= 0) + return; + Q_Q(QScroller); QPointF ppm = q->pixelPerMeter(); const QScrollerPropertiesPrivate *sp = properties.d.data(); @@ -1057,14 +1060,12 @@ void QScrollerPrivate::updateVelocity(const QPointF &deltaPixelRaw, qint64 delta if (((deltaPixelRaw / qreal(deltaTime)).manhattanLength() / ((ppm.x() + ppm.y()) / 2) * 1000) > qreal(2.5)) deltaPixel = deltaPixelRaw * qreal(2.5) * ppm / 1000 / (deltaPixelRaw / qreal(deltaTime)).manhattanLength(); - qreal inversSmoothingFactor = ((qreal(1) - sp->dragVelocitySmoothingFactor) * qreal(deltaTime) / qreal(1000)); QPointF newv = -deltaPixel / qreal(deltaTime) * qreal(1000) / ppm; - newv = newv * (qreal(1) - inversSmoothingFactor) + releaseVelocity * inversSmoothingFactor; + if (releaseVelocity != QPointF(0, 0)) + newv = newv * sp->dragVelocitySmoothingFactor + releaseVelocity * (qreal(1) - sp->dragVelocitySmoothingFactor); - if (deltaPixel.x()) - releaseVelocity.setX(qBound(-sp->maximumVelocity, newv.x(), sp->maximumVelocity)); - if (deltaPixel.y()) - releaseVelocity.setY(qBound(-sp->maximumVelocity, newv.y(), sp->maximumVelocity)); + releaseVelocity.setX(qBound(-sp->maximumVelocity, newv.x(), sp->maximumVelocity)); + releaseVelocity.setY(qBound(-sp->maximumVelocity, newv.y(), sp->maximumVelocity)); qScrollerDebug() << " --> new velocity:" << releaseVelocity; } @@ -1569,6 +1570,9 @@ bool QScrollerPrivate::releaseWhileDragging(const QPointF &position, qint64 time Q_Q(QScroller); const QScrollerPropertiesPrivate *sp = properties.d.data(); + // handleDrag updates lastPosition, lastTimestamp and velocity + handleDrag(position, timestamp); + // check if we moved at all - this can happen if you stop a running // scroller with a press and release shortly afterwards QPointF deltaPixel = position - pressPosition; diff --git a/src/gui/util/qscrollerproperties.cpp b/src/gui/util/qscrollerproperties.cpp index d21f131..4a1f085 100644 --- a/src/gui/util/qscrollerproperties.cpp +++ b/src/gui/util/qscrollerproperties.cpp @@ -61,7 +61,7 @@ QScrollerPropertiesPrivate *QScrollerPropertiesPrivate::defaults() #ifdef Q_WS_MAEMO_5 spp.mousePressEventDelay = qreal(0); spp.dragStartDistance = qreal(2.5 / 1000); - spp.dragVelocitySmoothingFactor = qreal(0.15); + spp.dragVelocitySmoothingFactor = qreal(10); spp.axisLockThreshold = qreal(0); spp.scrollingCurve.setType(QEasingCurve::OutQuad); spp.decelerationFactor = 1.0; @@ -82,7 +82,7 @@ QScrollerPropertiesPrivate *QScrollerPropertiesPrivate::defaults() #else spp.mousePressEventDelay = qreal(0.25); spp.dragStartDistance = qreal(5.0 / 1000); - spp.dragVelocitySmoothingFactor = qreal(0.02); + spp.dragVelocitySmoothingFactor = qreal(0.8); spp.axisLockThreshold = qreal(0); spp.scrollingCurve.setType(QEasingCurve::OutQuad); spp.decelerationFactor = qreal(0.125); @@ -342,8 +342,9 @@ void QScrollerProperties::setScrollMetric(ScrollMetric metric, const QVariant &v moved before the flick gesture is triggered in \c m. \value DragVelocitySmoothingFactor A value that describes how much new drag velocities are - included in the final scrolling velocity. This value should be in the range between \c 0 and \c - 1. Low values meaning that the last dragging velocity is not very important. + included in the final scrolling velocity. This value should be in the range between \c 0 and + \c 1. The lower the value, the more smoothing will be applied to the dragging velocity. The + default value is \c 0.8. \value AxisLockThreshold If greater than zero a scroll movement will be restricted to one axis only if the movement is inside an angle about the axis. The threshold must be in the range \c 0 -- cgit v0.12 From 82bbc1c1611bde33680d22a1a3c6449e51d7b0b9 Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Wed, 15 Dec 2010 18:20:14 +0100 Subject: Resolve XRRSizes() from libxrandr for QScroller's DPI calculation. Reviewed-by: Denis Dzyubenko --- src/gui/kernel/qapplication_x11.cpp | 3 +++ src/gui/kernel/qt_x11_p.h | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index ff98229..58ccda2 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -2015,12 +2015,15 @@ void qt_init(QApplicationPrivate *priv, int, (PtrXRRRootToScreen) xrandrLib.resolve("XRRRootToScreen"); X11->ptrXRRQueryExtension = (PtrXRRQueryExtension) xrandrLib.resolve("XRRQueryExtension"); + X11->ptrXRRSizes = + (PtrXRRSizes) xrandrLib.resolve("XRRSizes"); } # else X11->ptrXRRSelectInput = XRRSelectInput; X11->ptrXRRUpdateConfiguration = XRRUpdateConfiguration; X11->ptrXRRRootToScreen = XRRRootToScreen; X11->ptrXRRQueryExtension = XRRQueryExtension; + X11->ptrXRRSizes = XRRSizes; # endif if (X11->ptrXRRQueryExtension diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h index 56c8094..d97264c 100644 --- a/src/gui/kernel/qt_x11_p.h +++ b/src/gui/kernel/qt_x11_p.h @@ -226,6 +226,7 @@ typedef void (*PtrXRRSelectInput)(Display *, Window, int); typedef int (*PtrXRRUpdateConfiguration)(XEvent *); typedef int (*PtrXRRRootToScreen)(Display *, Window); typedef Bool (*PtrXRRQueryExtension)(Display *, int *, int *); +typedef XRRScreenSize *(*PtrXRRSizes)(Display *, int, int *); #endif // QT_NO_XRANDR #ifndef QT_NO_XINPUT @@ -710,6 +711,7 @@ struct QX11Data PtrXRRUpdateConfiguration ptrXRRUpdateConfiguration; PtrXRRRootToScreen ptrXRRRootToScreen; PtrXRRQueryExtension ptrXRRQueryExtension; + PtrXRRSizes ptrXRRSizes; #endif // QT_NO_XRANDR }; -- cgit v0.12 From b78ffe51f9a4c4ac705e435d45fffe39864c032d Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Wed, 15 Dec 2010 18:22:15 +0100 Subject: Use XRandR to get the real DPI values for the screen. This is needed for the Xomap server, but may also apply to others. Reviewed-by: Ralf Engels --- src/gui/util/qscroller.cpp | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/gui/util/qscroller.cpp b/src/gui/util/qscroller.cpp index 0955f58..f651a06 100644 --- a/src/gui/util/qscroller.cpp +++ b/src/gui/util/qscroller.cpp @@ -64,6 +64,10 @@ #include +#if defined(Q_WS_X11) +# include "private/qt_x11_p.h" +#endif + QT_BEGIN_NAMESPACE @@ -986,38 +990,46 @@ bool QScroller::handleInput(Input input, const QPointF &position, qint64 timesta return false; } -#ifdef Q_WS_MAEMO_5 +#if !defined(Q_WS_MAC) +// the Mac version is implemented in qscroller_mac.mm QPointF QScrollerPrivate::realDpi(int screen) { +# ifdef Q_WS_MAEMO_5 Q_UNUSED(screen); + // The DPI value is hardcoded to 96 on Maemo5: // https://projects.maemo.org/bugzilla/show_bug.cgi?id=152525 // This value (260) is only correct for the N900 though, but // there's no way to get the real DPI at run time. return QPointF(260, 260); -} -#elif defined(Q_WS_MAC) - -// implemented in qscroller_mac.mm - -#else +# elif defined(Q_WS_X11) && !defined(QT_NO_XRANDR) + if (X11->use_xrandr && X11->ptrXRRSizes) { + int nsizes = 0; + XRRScreenSize *sizes = X11->ptrXRRSizes(X11->display, screen == -1 ? X11->defaultScreen : screen, &nsizes); + if (nsizes > 0 && sizes && sizes->width && sizes->height && sizes->mwidth && sizes->mheight) { + qScrollerDebug() << "XRandR DPI:" << QPointF(qreal(25.4) * qreal(sizes->width) / qreal(sizes->mwidth), + qreal(25.4) * qreal(sizes->height) / qreal(sizes->mheight)); + return QPointF(qreal(25.4) * qreal(sizes->width) / qreal(sizes->mwidth), + qreal(25.4) * qreal(sizes->height) / qreal(sizes->mheight)); + } + } +# endif -QPointF QScrollerPrivate::realDpi(int screen) -{ QWidget *w = QApplication::desktop()->screen(screen); return QPointF(w->physicalDpiX(), w->physicalDpiY()); } -#endif +#endif // !Q_WS_MAC + /*! \internal Returns the resolution of the used screen. */ QPointF QScrollerPrivate::dpi() const { - return pixelPerMeter / qreal(39.3700787); + return pixelPerMeter * qreal(0.0254); } /*! \internal @@ -1028,7 +1040,7 @@ QPointF QScrollerPrivate::dpi() const */ void QScrollerPrivate::setDpi(const QPointF &dpi) { - pixelPerMeter = dpi * qreal(39.3700787); + pixelPerMeter = dpi / qreal(0.0254); } /*! \internal -- cgit v0.12 From fe438d7d828021d7f86301af36fe8dff2768532a Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Wed, 15 Dec 2010 18:37:28 +0100 Subject: QScroller: nicer Overshoot bounce back animation. Reviewed-by: Ralf Engels --- src/gui/util/qscroller.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gui/util/qscroller.cpp b/src/gui/util/qscroller.cpp index f651a06..2ca4a6e 100644 --- a/src/gui/util/qscroller.cpp +++ b/src/gui/util/qscroller.cpp @@ -1367,9 +1367,8 @@ void QScrollerPrivate::createScrollingSegments(qreal v, qreal startPos, qreal pp qreal oDistance = viewSize * sp->overshootScrollDistanceFactor * endV / sp->maximumVelocity; qreal oDeltaTime = sp->overshootScrollTime; - pushSegment(ScrollTypeOvershoot, oDeltaTime * 0.5, stopPos, stopPos + oDistance, sp->scrollingCurve.type(), orientation); - pushSegment(ScrollTypeOvershoot, oDeltaTime * 0.3, stopPos + oDistance, stopPos + oDistance * 0.3, QEasingCurve::InQuad, orientation); - pushSegment(ScrollTypeOvershoot, oDeltaTime * 0.2, stopPos + oDistance * 0.3, stopPos, QEasingCurve::OutQuad, orientation); + pushSegment(ScrollTypeOvershoot, oDeltaTime * 0.3, stopPos, stopPos + oDistance, sp->scrollingCurve.type(), orientation); + pushSegment(ScrollTypeOvershoot, oDeltaTime * 0.7, stopPos + oDistance, stopPos, sp->scrollingCurve.type(), orientation); } return; } -- cgit v0.12 From df30d58de183d13c649ef7e0fbb8e2b3658e0862 Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Wed, 15 Dec 2010 18:24:27 +0100 Subject: Removed obsolete Maemo 5 code --- src/gui/util/qscrollerproperties.cpp | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/src/gui/util/qscrollerproperties.cpp b/src/gui/util/qscrollerproperties.cpp index 4a1f085..2e52959 100644 --- a/src/gui/util/qscrollerproperties.cpp +++ b/src/gui/util/qscrollerproperties.cpp @@ -58,28 +58,6 @@ QScrollerPropertiesPrivate *QScrollerPropertiesPrivate::defaults() { if (!systemDefaults) { QScrollerPropertiesPrivate spp; -#ifdef Q_WS_MAEMO_5 - spp.mousePressEventDelay = qreal(0); - spp.dragStartDistance = qreal(2.5 / 1000); - spp.dragVelocitySmoothingFactor = qreal(10); - spp.axisLockThreshold = qreal(0); - spp.scrollingCurve.setType(QEasingCurve::OutQuad); - spp.decelerationFactor = 1.0; - spp.minimumVelocity = qreal(0.0195); - spp.maximumVelocity = qreal(6.84); - spp.maximumClickThroughVelocity = qreal(0.0684); - spp.acceleratingFlickMaximumTime = qreal(0.125); - spp.acceleratingFlickSpeedupFactor = qreal(3.0); - spp.snapPositionRatio = qreal(0.25); - spp.snapTime = qreal(1); - spp.overshootDragResistanceFactor = qreal(1); - spp.overshootDragDistanceFactor = qreal(0.3); - spp.overshootScrollDistanceFactor = qreal(0.3); - spp.overshootScrollTime = qreal(0.5); - spp.hOvershootPolicy = QScrollerProperties::OvershootWhenScrollable; - spp.vOvershootPolicy = QScrollerProperties::OvershootWhenScrollable; - spp.frameRate = QScrollerProperties::Fps30; -#else spp.mousePressEventDelay = qreal(0.25); spp.dragStartDistance = qreal(5.0 / 1000); spp.dragVelocitySmoothingFactor = qreal(0.8); @@ -104,7 +82,7 @@ QScrollerPropertiesPrivate *QScrollerPropertiesPrivate::defaults() spp.hOvershootPolicy = QScrollerProperties::OvershootWhenScrollable; spp.vOvershootPolicy = QScrollerProperties::OvershootWhenScrollable; spp.frameRate = QScrollerProperties::Standard; -#endif + systemDefaults = new QScrollerPropertiesPrivate(spp); } return new QScrollerPropertiesPrivate(userDefaults ? *userDefaults : *systemDefaults); -- cgit v0.12 From cb51c2157f870a5c83ae6d9435ec4b1004392bc9 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 13 Dec 2010 22:26:39 +0100 Subject: Don't need to set FD_CLOEXEC since qt_safe_* will have done that. Reviewed-By: Trust Me --- src/network/socket/qnativesocketengine_unix.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index f6bfbac..021acd0 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -202,9 +202,6 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc return false; } - // Ensure that the socket is closed on exec*(). - ::fcntl(socket, F_SETFD, FD_CLOEXEC); - socketDescriptor = socket; return true; } @@ -565,16 +562,6 @@ int QNativeSocketEnginePrivate::nativeAccept() #else int acceptedDescriptor = qt_safe_accept(socketDescriptor, 0, 0); #endif - //check if we have valid descriptor at all - if(acceptedDescriptor > 0) { - // Ensure that the socket is closed on exec*() - ::fcntl(acceptedDescriptor, F_SETFD, FD_CLOEXEC); - } -#ifdef Q_OS_SYMBIAN - else { - qWarning("QNativeSocketEnginePrivate::nativeAccept() - acceptedDescriptor <= 0"); - } -#endif return acceptedDescriptor; } -- cgit v0.12 From e1955231478df8990cf8b1f80438abf957c5d6f2 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 14 Dec 2010 11:25:32 +0100 Subject: Add a warning about trying to release a timer ID that isn't active Reviewed-By: Trust Me --- src/corelib/kernel/qeventdispatcher_unix.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index f50994c..b2ccc68 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -501,6 +501,7 @@ bool QTimerInfoList::unregisterTimer(int timerId) } } // id not found + qWarning("Application asked to unregister timer 0x%x which is not registered in this thread. Fix application.", timerId); return false; } -- cgit v0.12 From 038927f1208ff346cbe8d2cfefbd39808ffb5711 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 15 Dec 2010 18:48:05 +0100 Subject: Autotest: Add some comments about this obscure test. More information, see commit d9bf386d917c64ad5d8f11f9daadf82b2be9d531 (old qt-history) and old TT task 90183. Reviewed-By: Trust Me --- tests/auto/qprocess/tst_qprocess.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/auto/qprocess/tst_qprocess.cpp b/tests/auto/qprocess/tst_qprocess.cpp index fd310f4..13f1d26 100644 --- a/tests/auto/qprocess/tst_qprocess.cpp +++ b/tests/auto/qprocess/tst_qprocess.cpp @@ -1999,11 +1999,15 @@ void tst_QProcess::spaceInName() void tst_QProcess::lockupsInStartDetached() { #if !defined(Q_OS_SYMBIAN) - // What exactly is this call supposed to achieve anyway? + // Check that QProcess doesn't cause a lock up at this program's + // exit if a thread was started and we tried to run a program that + // doesn't exist. Before Qt 4.2, this used to lock up on Unix due + // to calling ::exit instead of ::_exit if execve failed. + QHostInfo::lookupHost(QString("something.invalid"), 0, 0); -#endif QProcess::execute("yjhbrty"); QProcess::startDetached("yjhbrty"); +#endif } //----------------------------------------------------------------------------- -- cgit v0.12 From 7b0809edf975f3226b43d3b43b5fe8035298fde9 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 15 Dec 2010 18:48:48 +0100 Subject: ICC: Don't print warning 1259 since it's too annoying. ICC 12 keeps outputting this when you copy a type of larger size to a smaller, or from int to float. --- mkspecs/linux-icc/qmake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index af56a9a..ba707e23 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -23,7 +23,7 @@ QMAKE_YACC = yacc QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -falign-stack=maintain-16-byte QMAKE_CFLAGS_DEPS = -M -QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125 +QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125,2259 QMAKE_CFLAGS_WARN_OFF = -w QMAKE_CFLAGS_RELEASE = -O2 -falign-functions=16 -ansi-alias -fstrict-aliasing QMAKE_CFLAGS_DEBUG = -O0 -g -- cgit v0.12 From 981a83d7832e8cd1ee7bcd42dfaba62f0b04f2c1 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 15 Dec 2010 18:53:57 +0100 Subject: Suppress a warning about killing a timer that isn't active. The timer was active, but it got killed by ~QObject. The QObject d-pointer is deleted after the timers (as is expected), which means that the QBasicTimer destructors in QAbstractItemViewPrivate are run after the timers are already gone. Reviewed-by: Trust Me --- src/gui/itemviews/qabstractitemview.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index acc8deb..177b088 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -595,6 +595,8 @@ QAbstractItemView::QAbstractItemView(QAbstractItemViewPrivate &dd, QWidget *pare */ QAbstractItemView::~QAbstractItemView() { + // stop this timer here before ~QObject + d_func()->delayedReset.stop(); } /*! -- cgit v0.12 From 017a5cfc6462317e6cca0f04a8339e2575bb9130 Mon Sep 17 00:00:00 2001 From: aavit Date: Wed, 15 Dec 2010 21:12:52 +0100 Subject: Satisfy the maketestselftest autotst --- tests/auto/other.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/other.pro b/tests/auto/other.pro index d1a7a86..512cd25 100644 --- a/tests/auto/other.pro +++ b/tests/auto/other.pro @@ -4,6 +4,7 @@ TEMPLATE=subdirs SUBDIRS=\ # exceptionsafety_objects \ shouldn't enable it +# baselineexample \ Just an example demonstrating qbaselinetest usage lancelot \ qaccessibility \ qalgorithms \ -- cgit v0.12 From ba2f8a1f7da6b40a095cad43e4b737dc1306b0cc Mon Sep 17 00:00:00 2001 From: aavit Date: Thu, 16 Dec 2010 10:57:06 +0100 Subject: Need not keep client waiting until server has saved --- tests/arthur/baselineserver/src/baselineserver.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp index 6351dff..f59600f 100644 --- a/tests/arthur/baselineserver/src/baselineserver.cpp +++ b/tests/arthur/baselineserver/src/baselineserver.cpp @@ -267,6 +267,13 @@ void BaselineHandler::storeImage(const QByteArray &itemBlock, bool isBaseline) QString prefix = pathForItem(item, isBaseline); qDebug() << runId << logtime() << "Received" << (isBaseline ? "baseline" : "mismatched") << "image for:" << item.itemName << "Storing in" << prefix; + QString msg; + if (isBaseline) + msg = QLS("New baseline image stored: ") + pathForItem(item, true, true) + QLS(FileFormat); + else + msg = BaselineServer::baseUrl() + report.filePath(); + proto.sendBlock(BaselineProtocol::Ack, msg.toLatin1()); + QString dir = prefix.section(QLC('/'), 0, -2); QDir cwd; if (!cwd.exists(dir)) @@ -282,14 +289,6 @@ void BaselineHandler::storeImage(const QByteArray &itemBlock, bool isBaseline) if (!isBaseline) report.addMismatch(item); - - QString msg; - if (isBaseline) - msg = QLS("New baseline image stored: ") + pathForItem(item, true, true) + QLS(FileFormat); - else - msg = BaselineServer::baseUrl() + report.filePath(); - - proto.sendBlock(BaselineProtocol::Ack, msg.toLatin1()); } -- cgit v0.12 From fa57982fadab625fb022d32f690ef05427920581 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 16 Dec 2010 11:30:17 +0100 Subject: QmlDebugger: Fix runtime warnings about unregistered metatypes Check whether the type of a property is known to the metatype system before trying to read from it. That avoids lots of runtime warnings e.g. for the QSequentialGroup::currentAnimation property, which type QAbstractAnimation * isn't registered by default via qRegisterMetaType<>(). Reviewed-by: Christiaan Janssen Task-number: QTCREATORBUG-2853 --- src/declarative/qml/qdeclarativeenginedebug.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp index bffe681..e54f7d6 100644 --- a/src/declarative/qml/qdeclarativeenginedebug.cpp +++ b/src/declarative/qml/qdeclarativeenginedebug.cpp @@ -146,7 +146,10 @@ QDeclarativeEngineDebugServer::propertyData(QObject *obj, int propIdx) if (binding) rv.binding = binding->expression(); - QVariant value = prop.read(obj); + QVariant value; + if (prop.userType() != 0) { + value = prop.read(obj); + } rv.value = valueContents(value); if (QDeclarativeValueTypeFactory::isValueType(prop.userType())) { -- cgit v0.12 From c70b1afe694b0d32ece6b639b1e4d10501df8bb0 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Thu, 16 Dec 2010 13:41:28 +0200 Subject: Remove support for automatic tactile feedback from QS60Style Currently QS60Style loads automatically a plugin to support tactile feedback for styled applications. However, there is no control over this, so applications cannot remove the automatic support, if they'd like to use Mobility APIs to control the feedback themselves. In order to avoid this, remove tactile feedback plugin from style. Lets see if we can later put this back with optional enable/disable flag. Task-number: QTBUG-16151 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style.cpp | 3 - src/gui/styles/qs60style_feedbackinterface_p.h | 50 -------------- src/gui/styles/qs60style_p.h | 4 -- src/gui/styles/qs60style_s60.cpp | 24 +------ src/plugins/s60/feedback/feedback.pro | 18 ----- src/plugins/s60/feedback/qtactileFeedback.h | 54 --------------- src/plugins/s60/feedback/qtactileFeedback_s60.cpp | 83 ----------------------- src/plugins/s60/s60.pro | 4 -- src/s60installs/qt.iby | 5 -- src/s60installs/s60installs.pro | 6 -- 10 files changed, 1 insertion(+), 250 deletions(-) delete mode 100644 src/gui/styles/qs60style_feedbackinterface_p.h delete mode 100644 src/plugins/s60/feedback/feedback.pro delete mode 100644 src/plugins/s60/feedback/qtactileFeedback.h delete mode 100644 src/plugins/s60/feedback/qtactileFeedback_s60.cpp diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 56d2d19..040ca4f 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -3464,9 +3464,6 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event) if (d->m_pressedWidget) d->m_pressedWidget->update(); -#ifdef Q_WS_S60 - d->touchFeedback(event, w); -#endif } break; } diff --git a/src/gui/styles/qs60style_feedbackinterface_p.h b/src/gui/styles/qs60style_feedbackinterface_p.h deleted file mode 100644 index 81fcdc3..0000000 --- a/src/gui/styles/qs60style_feedbackinterface_p.h +++ /dev/null @@ -1,50 +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 QtGui 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 - -class TactileFeedbackInterface : public QObject -{ - public: - virtual void touchFeedback(QEvent *event, const QWidget *widget) = 0; -}; - -Q_DECLARE_INTERFACE(TactileFeedbackInterface, "com.trolltech.Qt.TactileFeedbackInterface/1.0") diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index db4285d..721fbd9 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -387,7 +387,6 @@ private: //data members class QFocusFrame; class QProgressBar; class QS60StyleAnimation; -class TactileFeedbackInterface; // Private class #ifdef Q_OS_SYMBIAN @@ -576,8 +575,6 @@ public: void stopAnimation(QS60StyleEnums::SkinParts animation); static QS60StyleAnimation* animationDefinition(QS60StyleEnums::SkinParts part); static void removeAnimations(); - //No support for tactile feedback in emulated style - void touchFeedback(QEvent *event, const QWidget *widget); #endif @@ -632,7 +629,6 @@ private: #ifdef Q_WS_S60 //list of progress bars having animation running QList m_bars; - TactileFeedbackInterface *m_feedbackPlugin; #endif }; diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 92f53ff..4e3f5da 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -50,10 +50,6 @@ #include "qapplication.h" #include "qsettings.h" -#include "qpluginloader.h" -#include "qlibraryinfo.h" -#include "private/qs60style_feedbackinterface_p.h" - #include #include #include @@ -1221,25 +1217,13 @@ void QS60StylePrivate::setActiveLayout() Q_GLOBAL_STATIC(QList, m_animations) -QS60StylePrivate::QS60StylePrivate() : m_feedbackPlugin(0) +QS60StylePrivate::QS60StylePrivate() { //Animation defaults need to be created when style is instantiated QS60StyleAnimation* progressBarAnimation = new QS60StyleAnimation(QS60StyleEnums::SP_QgnGrafBarWaitAnim, 7, 100); m_animations()->append(progressBarAnimation); // No need to set active layout, if dynamic metrics API is available setActiveLayout(); - - //Tactile feedback plugin is only available for touch devices. - if (isTouchSupported()) { - QString pluginsPath = QLibraryInfo::location(QLibraryInfo::PluginsPath); - pluginsPath += QLatin1String("/feedback/qtactilefeedback.dll"); - - // Create plugin loader - QPluginLoader pluginLoader(pluginsPath); - // Load plugin and store pointer to the plugin implementation - if (pluginLoader.load()) - m_feedbackPlugin = qobject_cast(pluginLoader.instance()); - } } void QS60StylePrivate::removeAnimations() @@ -1529,12 +1513,6 @@ void QS60StylePrivate::stopAnimation(QS60StyleEnums::SkinParts animationPart) } } -void QS60StylePrivate::touchFeedback(QEvent *event, const QWidget *widget) -{ - if (m_feedbackPlugin) - m_feedbackPlugin->touchFeedback(event, widget); -} - QVariant QS60StyleModeSpecifics::themeDefinition( QS60StyleEnums::ThemeDefinitions definition, QS60StyleEnums::SkinParts part) { diff --git a/src/plugins/s60/feedback/feedback.pro b/src/plugins/s60/feedback/feedback.pro deleted file mode 100644 index 5e577ec..0000000 --- a/src/plugins/s60/feedback/feedback.pro +++ /dev/null @@ -1,18 +0,0 @@ -include(../../qpluginbase.pri) - -TARGET = qtactilefeedback$${QT_LIBINFIX} - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/s60/feedback - -INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE - -!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { - HEADERS += qtactileFeedback.h - SOURCES += qtactileFeedback_s60.cpp - - LIBS += -ltouchfeedback -} - -load(data_caging_paths) - -TARGET.UID3=0x200315B4 diff --git a/src/plugins/s60/feedback/qtactileFeedback.h b/src/plugins/s60/feedback/qtactileFeedback.h deleted file mode 100644 index 7c4cc29..0000000 --- a/src/plugins/s60/feedback/qtactileFeedback.h +++ /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 QtGui 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 -#include - -#include "private/qs60style_feedbackinterface_p.h" - -class QTactileFeedback : public TactileFeedbackInterface -{ - Q_OBJECT - Q_INTERFACES(TactileFeedbackInterface) - - public: - void touchFeedback(QEvent *event, const QWidget *widget); - }; diff --git a/src/plugins/s60/feedback/qtactileFeedback_s60.cpp b/src/plugins/s60/feedback/qtactileFeedback_s60.cpp deleted file mode 100644 index c2f1d34..0000000 --- a/src/plugins/s60/feedback/qtactileFeedback_s60.cpp +++ /dev/null @@ -1,83 +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 QtGui 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 -#include -#include -#include - -#include -#include "qtactileFeedback.h" - -#include - -void QTactileFeedback::touchFeedback(QEvent *event, const QWidget *widget) -{ - //Lets share the global instance for touch feedback (you are NOT allowed to try and delete it!). - MTouchFeedback* feedback = MTouchFeedback::Instance(); - - //If the widget itself is not handling focus, try to use focusProxy widget. - const QWidget *w = ((widget->focusPolicy() == Qt::NoFocus) && (widget->focusProxy())) ? widget->focusProxy() : widget; - - //Only give tactile feedback for enabled widgets that take focus. - if (feedback && w && w->isEnabled() && w->isWidgetType() && w->isVisible()) { - //Scrollbars are 'special' that they don't take focus (nor they have focusProxy), yet we'd like to have tactile feedback for them - if (w->focusPolicy() == Qt::NoFocus) - if (!qobject_cast(w)) - return; - - //Don't give tactile feedback for widgets that are outside topmost dialog. - QWidget *dialog = QApplication::activeModalWidget(); - if (dialog) { - QList allChildren = dialog->findChildren(); - if (!allChildren.contains(w)) - return; - } - - //Widget specific tactile feedback. - if (qobject_cast(w) || qobject_cast(w)) - feedback->InstantFeedback(ETouchFeedbackSensitive); - else - feedback->InstantFeedback(ETouchFeedbackBasic); - } -} - -Q_EXPORT_PLUGIN2("feedback", QTactileFeedback); diff --git a/src/plugins/s60/s60.pro b/src/plugins/s60/s60.pro index 1ddf326..c999fff 100644 --- a/src/plugins/s60/s60.pro +++ b/src/plugins/s60/s60.pro @@ -6,10 +6,6 @@ symbian { SUBDIRS += 3_1 3_2 } - !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { - SUBDIRS += feedback - } - # 5.0 is used also for Symbian3 and later SUBDIRS += 5_0 } \ No newline at end of file diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby index 2b3be0a..4afbf05 100644 --- a/src/s60installs/qt.iby +++ b/src/s60installs/qt.iby @@ -60,8 +60,6 @@ file=ABI_DIR\BUILD_DIR\qsymbianbearer.dll SHARED_LIB_DIR\qsymbianbearer.dll // so don't bother including those plugins file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll SHARED_LIB_DIR\qts60plugin_5_0.dll -file=ABI_DIR\BUILD_DIR\qtactilefeedback.dll SHARED_LIB_DIR\qtactilefeedback.dll - S60_APP_RESOURCE(s60main) // imageformats stubs @@ -107,9 +105,6 @@ data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplug // bearer stub data=\epoc32\data\z\resource\qt\plugins\bearer\qsymbianbearer.qtplugin resource\qt\plugins\bearer\qsymbianbearer.qtplugin -// feedback -data=\epoc32\data\z\resource\qt\plugins\feedback\qtactilefeedback.qtplugin resource\qt\plugins\feedback\qtactilefeedback.qtplugin - // Stub sis file data=ZSYSTEM\install\qt_stub.sis System\Install\qt_stub.sis data=ZSYSTEM\install\qtwebkit_stub.sis System\Install\qtwebkit_stub.sis diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 5a435cd..be7ed97 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -87,12 +87,6 @@ symbian: { DEPLOYMENT += bearer_plugin } - !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { - feedback_plugin.sources = $$QT_BUILD_TREE/plugins/s60/feedback/qtactilefeedback$${QT_LIBINFIX}.dll - feedback_plugin.path = c:$$QT_PLUGINS_BASE_DIR/feedback - DEPLOYMENT += feedback_plugin - } - qtlibraries.pkg_postrules += qts60plugindeployment qtlibraries.path = c:/sys/bin -- cgit v0.12 From 6f9642572c392536c07a52037e4c1de587489c49 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 16 Dec 2010 13:21:22 +0100 Subject: Add work around for bug when painting w/glTexSubImage into large texture It seems that copying small rectangles from glTexSubImage2D into a texture which is 2048x2048 is busted on some SGX drivers, even though the driver reports 2048 as the maximum texture size. This caused text to turn into flickering garbage once the texture glyph cache had grown to its max size (e.g. when painting very many Chinese glyphs.) To work around the problem, we hardcore the maximum texture height to 1024 on this driver so that the texture glyph cache is reset whenever that size is exceeded. Task-number: QT-3971 Done-with: Samuel --- src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | 5 ++++- src/opengl/qgl.cpp | 1 + src/opengl/qgl_egl.cpp | 2 ++ src/opengl/qgl_p.h | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 1b879c3..ba311c3 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -323,6 +323,9 @@ int QGLTextureGlyphCache::maxTextureWidth() const int QGLTextureGlyphCache::maxTextureHeight() const { - return ctx->d_ptr->maxTextureSize(); + if (ctx->d_ptr->workaround_brokenTexSubImage) + return qMin(1024, ctx->d_ptr->maxTextureSize()); + else + return ctx->d_ptr->maxTextureSize(); } QT_END_NAMESPACE diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 18f1203..9bf879a 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1706,6 +1706,7 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) active_engine = 0; workaround_needsFullClearOnEveryFrame = false; workaround_brokenFBOReadBack = false; + workaround_brokenTexSubImage = false; workaroundsCached = false; workaround_brokenTextureFromPixmap = false; diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp index 8902099..6f9e39c 100644 --- a/src/opengl/qgl_egl.cpp +++ b/src/opengl/qgl_egl.cpp @@ -204,6 +204,8 @@ void QGLContext::makeCurrent() const char *egl_version = eglQueryString(d->eglContext->display(), EGL_VERSION); if (egl_version && strstr(egl_version, "1.3")) d->workaround_brokenFBOReadBack = true; + else if (egl_version && strstr(egl_version, "1.4")) + d->workaround_brokenTexSubImage = true; } } } diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index b46d428..bf830ba 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -401,6 +401,7 @@ public: // workarounds for driver/hw bugs on different platforms uint workaround_needsFullClearOnEveryFrame : 1; uint workaround_brokenFBOReadBack : 1; + uint workaround_brokenTexSubImage : 1; uint workaroundsCached : 1; uint workaround_brokenTextureFromPixmap : 1; -- cgit v0.12 From ab8a9e77d877fd53eaec8dca1eeca619a4ba81d6 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 16 Dec 2010 12:57:06 +0200 Subject: Avoid duplicate resize event No need to have two resize events in queue for same widget, so do not post a new one if one is already pending in QSymbianControl::SizeChanged(). Reviewed-by: Sami Merila --- src/gui/kernel/qapplication_s60.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 6db1fa8..181fcc7 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1174,8 +1174,10 @@ void QSymbianControl::SizeChanged() if (!slowResize && tlwExtra) tlwExtra->inTopLevelResize = false; } else { - QResizeEvent *e = new QResizeEvent(newSize, oldSize); - QApplication::postEvent(qwidget, e); + if (!qwidget->testAttribute(Qt::WA_PendingResizeEvent)) { + QResizeEvent *e = new QResizeEvent(newSize, oldSize); + QApplication::postEvent(qwidget, e); + } } } -- cgit v0.12 From f0347c8c0c37bd90dcaefb8f4b669096f7eb66b5 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 16 Dec 2010 15:23:51 +0200 Subject: Improved orientation change autotest The test wasn't even compiling anymore, so fixed that. Also added additional orientation change and an available geometry check after each orientation change. Reviewed-by: Sami Merila --- .../orientationchange/orientationchange.pro | 1 + .../orientationchange/tst_orientationchange.cpp | 43 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/tests/auto/symbian/orientationchange/orientationchange.pro b/tests/auto/symbian/orientationchange/orientationchange.pro index 08b34f9..98aa2ad 100644 --- a/tests/auto/symbian/orientationchange/orientationchange.pro +++ b/tests/auto/symbian/orientationchange/orientationchange.pro @@ -4,4 +4,5 @@ SOURCES += tst_orientationchange.cpp symbian { INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + LIBS += -lcone -leikcore -lavkon # Screen orientation } diff --git a/tests/auto/symbian/orientationchange/tst_orientationchange.cpp b/tests/auto/symbian/orientationchange/tst_orientationchange.cpp index eb3709d..2ac2f7f 100644 --- a/tests/auto/symbian/orientationchange/tst_orientationchange.cpp +++ b/tests/auto/symbian/orientationchange/tst_orientationchange.cpp @@ -45,6 +45,8 @@ #include #include +#include +#include class tst_orientationchange : public QObject { @@ -151,6 +153,47 @@ void tst_orientationchange::resizeEventOnOrientationChange() } QCOMPARE(normalWidget->resizeEventCount, 0); + QDesktopWidget desktop; + QRect qtAvail = desktop.availableGeometry(normalWidget); + TRect clientRect = static_cast(CCoeEnv::Static()-> AppUi())->ClientRect(); + QRect symbianAvail = qt_TRect2QRect(clientRect); + QCOMPARE(qtAvail, symbianAvail); + + // Switch orientation back to original + orientation = orientation == CAknAppUi::EAppUiOrientationPortrait + ? CAknAppUi::EAppUiOrientationLandscape + : CAknAppUi::EAppUiOrientationPortrait; + + + fullScreenWidget->reset(); + maximizedWidget->reset(); + normalWidget->reset(); + + TRAP(err, appUi->SetOrientationL(orientation)); + + QCoreApplication::sendPostedEvents(); + QCoreApplication::sendPostedEvents(); + + // setOrientationL is not guaranteed to change orientation + // (if emulator configured to support just portrait or landscape, then + // setOrientationL call shouldn't do anything). + // So let's ensure that we do not get resize event twice. + + QVERIFY(fullScreenWidget->resizeEventCount <= 1); + if (fullScreenWidget->resizeEventCount) { + QCOMPARE(fullScreenWidget->size(), fullScreenWidget->resizeEventSize); + } + QVERIFY(maximizedWidget->resizeEventCount <= 1); + if (fullScreenWidget->resizeEventCount) { + QCOMPARE(maximizedWidget->size(), maximizedWidget->resizeEventSize); + } + QCOMPARE(normalWidget->resizeEventCount, 0); + + qtAvail = desktop.availableGeometry(normalWidget); + clientRect = static_cast(CCoeEnv::Static()-> AppUi())->ClientRect(); + symbianAvail = qt_TRect2QRect(clientRect); + QCOMPARE(qtAvail, symbianAvail); + TRAP(err, appUi->SetOrientationL(CAknAppUi::EAppUiOrientationUnspecified)); delete normalWidget; -- cgit v0.12 From 66eec88591be2e8369e73dc5c86148cb4b09fad8 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 13 Dec 2010 17:20:12 +0100 Subject: clarify setStatus() behavior Reviewed-by: mariusSO --- src/corelib/io/qdatastream.cpp | 3 +++ src/corelib/io/qtextstream.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 58f0190..dffb3c6 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -495,6 +495,9 @@ void QDataStream::resetStatus() /*! Sets the status of the data stream to the \a status given. + Subsequent calls to setStatus() are ignored until resetStatus() + is called. + \sa Status status() resetStatus() */ void QDataStream::setStatus(Status status) diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 6091ec0..f4731f9 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -1593,6 +1593,9 @@ void QTextStream::resetStatus() Sets the status of the text stream to the \a status given. + Subsequent calls to setStatus() are ignored until resetStatus() + is called. + \sa Status status() resetStatus() */ void QTextStream::setStatus(Status status) -- cgit v0.12 From ca062f6ed45acf83720faec8a211d9bf91705b2c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 16 Dec 2010 14:17:22 +0100 Subject: don't report flush error when we didn't flush in the first place this went unnoticed, as the return value is ignored - so far. Reviewed-by: mariusSO --- src/corelib/io/qtextstream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index f4731f9..560766a 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -693,7 +693,7 @@ bool QTextStreamPrivate::flushWriteBuffer() // flush the file #ifndef QT_NO_QOBJECT QFile *file = qobject_cast(device); - bool flushed = file && file->flush(); + bool flushed = !file || file->flush(); #else bool flushed = true; #endif -- cgit v0.12 From 9233143bb25e33c07f73b7d35b0d6cbd14ef1686 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 13 Dec 2010 17:57:55 +0100 Subject: add write error handling to QDataStream add new status flag WriteFailed. use it in all write functions. Task-number: QTBUG-376 Reviewed-by: mariusSO --- src/corelib/io/qdatastream.cpp | 55 +++++++++++++++++++----------- src/corelib/io/qdatastream.h | 3 +- tests/auto/qdatastream/tst_qdatastream.cpp | 51 +++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 20 deletions(-) diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index dffb3c6..52ee252 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -243,6 +243,11 @@ QT_BEGIN_NAMESPACE } #endif +#define CHECK_STREAM_WRITE_PRECOND(retVal) \ + CHECK_STREAM_PRECOND(retVal) \ + if (q_status != Ok) \ + return retVal; + enum { DefaultStreamVersion = QDataStream::Qt_4_6 }; @@ -995,8 +1000,9 @@ int QDataStream::readRawData(char *s, int len) QDataStream &QDataStream::operator<<(qint8 i) { - CHECK_STREAM_PRECOND(*this) - dev->putChar(i); + CHECK_STREAM_WRITE_PRECOND(*this) + if (!dev->putChar(i)) + q_status = WriteFailed; return *this; } @@ -1018,11 +1024,12 @@ QDataStream &QDataStream::operator<<(qint8 i) QDataStream &QDataStream::operator<<(qint16 i) { - CHECK_STREAM_PRECOND(*this) + CHECK_STREAM_WRITE_PRECOND(*this) if (!noswap) { i = qbswap(i); } - dev->write((char *)&i, sizeof(qint16)); + if (dev->write((char *)&i, sizeof(qint16)) != sizeof(qint16)) + q_status = WriteFailed; return *this; } @@ -1035,11 +1042,12 @@ QDataStream &QDataStream::operator<<(qint16 i) QDataStream &QDataStream::operator<<(qint32 i) { - CHECK_STREAM_PRECOND(*this) + CHECK_STREAM_WRITE_PRECOND(*this) if (!noswap) { i = qbswap(i); } - dev->write((char *)&i, sizeof(qint32)); + if (dev->write((char *)&i, sizeof(qint32)) != sizeof(qint32)) + q_status = WriteFailed; return *this; } @@ -1060,7 +1068,7 @@ QDataStream &QDataStream::operator<<(qint32 i) QDataStream &QDataStream::operator<<(qint64 i) { - CHECK_STREAM_PRECOND(*this) + CHECK_STREAM_WRITE_PRECOND(*this) if (version() < 6) { quint32 i1 = i & 0xffffffff; quint32 i2 = i >> 32; @@ -1069,7 +1077,8 @@ QDataStream &QDataStream::operator<<(qint64 i) if (!noswap) { i = qbswap(i); } - dev->write((char *)&i, sizeof(qint64)); + if (dev->write((char *)&i, sizeof(qint64)) != sizeof(qint64)) + q_status = WriteFailed; } return *this; } @@ -1089,8 +1098,9 @@ QDataStream &QDataStream::operator<<(qint64 i) QDataStream &QDataStream::operator<<(bool i) { - CHECK_STREAM_PRECOND(*this) - dev->putChar(qint8(i)); + CHECK_STREAM_WRITE_PRECOND(*this) + if (!dev->putChar(qint8(i))) + q_status = WriteFailed; return *this; } @@ -1111,7 +1121,7 @@ QDataStream &QDataStream::operator<<(float f) return *this; } - CHECK_STREAM_PRECOND(*this) + CHECK_STREAM_WRITE_PRECOND(*this) float g = f; // fixes float-on-stack problem if (!noswap) { union { @@ -1122,7 +1132,8 @@ QDataStream &QDataStream::operator<<(float f) x.val2 = qbswap(x.val2); g = x.val1; } - dev->write((char *)&g, sizeof(float)); + if (dev->write((char *)&g, sizeof(float)) != sizeof(float)) + q_status = WriteFailed; return *this; } @@ -1144,10 +1155,11 @@ QDataStream &QDataStream::operator<<(double f) return *this; } - CHECK_STREAM_PRECOND(*this) + CHECK_STREAM_WRITE_PRECOND(*this) #ifndef Q_DOUBLE_FORMAT if (noswap) { - dev->write((char *)&f, sizeof(double)); + if (dev->write((char *)&f, sizeof(double)) != sizeof(double)) + q_status = WriteFailed; } else { union { double val1; @@ -1155,7 +1167,8 @@ QDataStream &QDataStream::operator<<(double f) } x; x.val1 = f; x.val2 = qbswap(x.val2); - dev->write((char *)&x.val2, sizeof(double)); + if (dev->write((char *)&x.val2, sizeof(double)) != sizeof(double)) + q_status = WriteFailed; } #else union { @@ -1184,7 +1197,8 @@ QDataStream &QDataStream::operator<<(double f) b[Q_DF(1)] = *p++; b[Q_DF(0)] = *p; } - dev->write(b, 8); + if (dev->write(b, 8) != 8) + q_status = WriteFailed; #endif return *this; } @@ -1224,7 +1238,7 @@ QDataStream &QDataStream::operator<<(const char *s) QDataStream &QDataStream::writeBytes(const char *s, uint len) { - CHECK_STREAM_PRECOND(*this) + CHECK_STREAM_WRITE_PRECOND(*this) *this << (quint32)len; // write length specifier if (len) writeRawData(s, len); @@ -1242,8 +1256,11 @@ QDataStream &QDataStream::writeBytes(const char *s, uint len) int QDataStream::writeRawData(const char *s, int len) { - CHECK_STREAM_PRECOND(-1) - return dev->write(s, len); + CHECK_STREAM_WRITE_PRECOND(-1) + int ret = dev->write(s, len); + if (ret != len) + q_status = WriteFailed; + return ret; } /*! diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h index 774c4bc..05248ac 100644 --- a/src/corelib/io/qdatastream.h +++ b/src/corelib/io/qdatastream.h @@ -101,7 +101,8 @@ public: enum Status { Ok, ReadPastEnd, - ReadCorruptData + ReadCorruptData, + WriteFailed }; enum FloatingPointPrecision { diff --git a/tests/auto/qdatastream/tst_qdatastream.cpp b/tests/auto/qdatastream/tst_qdatastream.cpp index c03bc71..898fb84 100644 --- a/tests/auto/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/qdatastream/tst_qdatastream.cpp @@ -168,6 +168,8 @@ private slots: void stream_atEnd_data(); void stream_atEnd(); + void stream_writeError(); + void stream_QByteArray2(); void setVersion_data(); @@ -2345,6 +2347,55 @@ void tst_QDataStream::stream_atEnd() } } +class FakeBuffer : public QBuffer +{ +protected: + qint64 writeData(const char *c, qint64 i) { return m_lock ? 0 : QBuffer::writeData(c, i); } +public: + FakeBuffer(bool locked = false) : m_lock(locked) {} + void setLocked(bool locked) { m_lock = locked; } +private: + bool m_lock; +}; + +#define TEST_WRITE_ERROR(op) \ + { \ + FakeBuffer fb(false); \ + QVERIFY(fb.open(QBuffer::ReadWrite)); \ + QDataStream fs(&fb); \ + fs.writeRawData("hello", 5); \ + /* first write some initial content */ \ + QCOMPARE(fs.status(), QDataStream::Ok); \ + QCOMPARE(fb.data(), QByteArray("hello")); \ + /* then test that writing can cause an error */ \ + fb.setLocked(true); \ + fs op; \ + QCOMPARE(fs.status(), QDataStream::WriteFailed); \ + QCOMPARE(fb.data(), QByteArray("hello")); \ + /* finally test that writing after an error doesn't change the stream any more */ \ + fb.setLocked(false); \ + fs op; \ + QCOMPARE(fs.status(), QDataStream::WriteFailed); \ + QCOMPARE(fb.data(), QByteArray("hello")); \ + } + +void tst_QDataStream::stream_writeError() +{ + TEST_WRITE_ERROR(<< true) + TEST_WRITE_ERROR(<< (qint8)1) + TEST_WRITE_ERROR(<< (quint8)1) + TEST_WRITE_ERROR(<< (qint16)1) + TEST_WRITE_ERROR(<< (quint16)1) + TEST_WRITE_ERROR(<< (qint32)1) + TEST_WRITE_ERROR(<< (quint32)1) + TEST_WRITE_ERROR(<< (qint64)1) + TEST_WRITE_ERROR(<< (quint64)1) + TEST_WRITE_ERROR(<< "hello") + TEST_WRITE_ERROR(<< (float)1.0) + TEST_WRITE_ERROR(<< (double)1.0) + TEST_WRITE_ERROR(.writeRawData("test", 4)) +} + void tst_QDataStream::stream_QByteArray2() { QByteArray ba; -- cgit v0.12 From 135a6e32522775b182e870130eb12502753c913c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 16 Dec 2010 12:36:41 +0100 Subject: add write error handling to QTextStream add new status flag WriteFailed. use it in flushWriteBuffer(). remove the boolean return values from write(), putString() and putNumber(), as they were ignored anyway - flushWriteBuffer() does it correctly now. Task-number: QTBUG-376 Reviewed-by: mariusSO --- src/corelib/io/qtextstream.cpp | 42 ++++++++++++++++++------------ src/corelib/io/qtextstream.h | 3 ++- tests/auto/qtextstream/tst_qtextstream.cpp | 37 ++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 18 deletions(-) diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 560766a..242c672 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -396,19 +396,19 @@ public: npsInvalidPrefix }; - inline bool write(const QString &data); inline bool getChar(QChar *ch); inline void ungetChar(const QChar &ch); NumberParsingStatus getNumber(qulonglong *l); bool getReal(double *f); - bool putNumber(qulonglong number, bool negative); - inline bool putString(const QString &ch, bool number = false); + inline void write(const QString &data); + inline void putString(const QString &ch, bool number = false); + void putNumber(qulonglong number, bool negative); // buffers bool fillReadBuffer(qint64 maxBytes = -1); void resetReadBuffer(); - bool flushWriteBuffer(); + void flushWriteBuffer(); QString writeBuffer; QString readBuffer; int readBufferOffset; @@ -642,14 +642,20 @@ void QTextStreamPrivate::resetReadBuffer() /*! \internal */ -bool QTextStreamPrivate::flushWriteBuffer() +void QTextStreamPrivate::flushWriteBuffer() { // no buffer next to the QString itself; this function should only // be called internally, for devices. if (string || !device) - return false; + return; + + // Stream went bye-bye already. Appending further data may succeed again, + // but would create a corrupted stream anyway. + if (status != QTextStream::Ok) + return; + if (writeBuffer.isEmpty()) - return true; + return; #if defined (Q_OS_WIN) // handle text translation and bypass the Text flag in the device. @@ -681,8 +687,10 @@ bool QTextStreamPrivate::flushWriteBuffer() qDebug("QTextStreamPrivate::flushWriteBuffer(), device->write(\"%s\") == %d", qt_prettyDebug(data.constData(), qMin(data.size(),32), data.size()).constData(), int(bytesWritten)); #endif - if (bytesWritten <= 0) - return false; + if (bytesWritten <= 0) { + status = QTextStream::WriteFailed; + return; + } #if defined (Q_OS_WIN) // replace the text flag @@ -702,7 +710,8 @@ bool QTextStreamPrivate::flushWriteBuffer() qDebug("QTextStreamPrivate::flushWriteBuffer() wrote %d bytes", int(bytesWritten)); #endif - return flushed && bytesWritten == qint64(data.size()); + if (!flushed || bytesWritten != qint64(data.size())) + status = QTextStream::WriteFailed; } QString QTextStreamPrivate::read(int maxlen) @@ -908,7 +917,7 @@ inline void QTextStreamPrivate::restoreToSavedConverterState() /*! \internal */ -inline bool QTextStreamPrivate::write(const QString &data) +inline void QTextStreamPrivate::write(const QString &data) { if (string) { // ### What about seek()?? @@ -916,9 +925,8 @@ inline bool QTextStreamPrivate::write(const QString &data) } else { writeBuffer += data; if (writeBuffer.size() > QTEXTSTREAM_BUFFERSIZE) - return flushWriteBuffer(); + flushWriteBuffer(); } - return true; } /*! \internal @@ -959,7 +967,7 @@ inline void QTextStreamPrivate::ungetChar(const QChar &ch) /*! \internal */ -inline bool QTextStreamPrivate::putString(const QString &s, bool number) +inline void QTextStreamPrivate::putString(const QString &s, bool number) { QString tmp = s; @@ -993,7 +1001,7 @@ inline bool QTextStreamPrivate::putString(const QString &s, bool number) qt_prettyDebug(a.constData(), a.size(), qMax(16, a.size())).constData(), qt_prettyDebug(b.constData(), b.size(), qMax(16, b.size())).constData()); #endif - return write(tmp); + write(tmp); } /*! @@ -2270,7 +2278,7 @@ QTextStream &QTextStream::operator>>(char *c) /*! \internal */ -bool QTextStreamPrivate::putNumber(qulonglong number, bool negative) +void QTextStreamPrivate::putNumber(qulonglong number, bool negative) { QString result; @@ -2310,7 +2318,7 @@ bool QTextStreamPrivate::putNumber(qulonglong number, bool negative) result.prepend(QLatin1Char('0')); } } - return putString(result, true); + putString(result, true); } /*! diff --git a/src/corelib/io/qtextstream.h b/src/corelib/io/qtextstream.h index d82da59..c635691 100644 --- a/src/corelib/io/qtextstream.h +++ b/src/corelib/io/qtextstream.h @@ -89,7 +89,8 @@ public: enum Status { Ok, ReadPastEnd, - ReadCorruptData + ReadCorruptData, + WriteFailed }; enum NumberFlag { ShowBase = 0x1, diff --git a/tests/auto/qtextstream/tst_qtextstream.cpp b/tests/auto/qtextstream/tst_qtextstream.cpp index 4c78ef0..005f686 100644 --- a/tests/auto/qtextstream/tst_qtextstream.cpp +++ b/tests/auto/qtextstream/tst_qtextstream.cpp @@ -228,6 +228,7 @@ private slots: void status_real_read(); void status_integer_read(); void status_word_read(); + void status_write_error(); // use case tests void useCase1(); @@ -4176,6 +4177,42 @@ void tst_QTextStream::status_word_read() QCOMPARE(s.status(), QTextStream::ReadPastEnd); } +class FakeBuffer : public QBuffer +{ +protected: + qint64 writeData(const char *c, qint64 i) { return m_lock ? 0 : QBuffer::writeData(c, i); } +public: + FakeBuffer(bool locked = false) : m_lock(locked) {} + void setLocked(bool locked) { m_lock = locked; } +private: + bool m_lock; +}; + +void tst_QTextStream::status_write_error() +{ + FakeBuffer fb(false); + QVERIFY(fb.open(QBuffer::ReadWrite)); + QTextStream fs(&fb); + fs.setCodec(QTextCodec::codecForName("latin1")); + /* first write some initial content */ + fs << "hello"; + fs.flush(); + QCOMPARE(fs.status(), QTextStream::Ok); + QCOMPARE(fb.data(), QByteArray("hello")); + /* then test that writing can cause an error */ + fb.setLocked(true); + fs << "error"; + fs.flush(); + QCOMPARE(fs.status(), QTextStream::WriteFailed); + QCOMPARE(fb.data(), QByteArray("hello")); + /* finally test that writing after an error doesn't change the stream any more */ + fb.setLocked(false); + fs << "can't do that"; + fs.flush(); + QCOMPARE(fs.status(), QTextStream::WriteFailed); + QCOMPARE(fb.data(), QByteArray("hello")); +} + void tst_QTextStream::task180679_alignAccountingStyle() { { -- cgit v0.12 From 7857e0cf4673fb0defab5af9c60d0c2dea93e55c Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Wed, 15 Dec 2010 18:55:48 +0100 Subject: Doc: typo fixed in doc/src/declarative/extending.qdoc Reviewed-by: TrustMe --- doc/src/declarative/extending.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index e23ca91..748ec6c 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -461,7 +461,7 @@ constructing an animation object and manually setting the animation's "target" property, a property value source can be assigned directly to a property of any type and automatically set up this association. -The example shown here is rather contrived: the \c announcment property of the +The example shown here is rather contrived: the \c announcement property of the \c BirthdayParty object is a string that is printed every time it is assigned and the \c HappyBirthdaySong value source generates the lyrics of the song "Happy Birthday". -- cgit v0.12 From ce3dabc8863440a56540d86537848621581afa7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Thu, 16 Dec 2010 13:43:02 +0100 Subject: Make parent constructor argument optional Task-number: QTBUG-16100 Reviewed-by: Oswald Buddenhagen --- src/gui/widgets/qvalidator.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/qvalidator.h b/src/gui/widgets/qvalidator.h index 63734ca..af1b80f 100644 --- a/src/gui/widgets/qvalidator.h +++ b/src/gui/widgets/qvalidator.h @@ -101,7 +101,7 @@ class Q_GUI_EXPORT QIntValidator : public QValidator public: explicit QIntValidator(QObject * parent = 0); - QIntValidator(int bottom, int top, QObject * parent); + QIntValidator(int bottom, int top, QObject *parent = 0); ~QIntValidator(); QValidator::State validate(QString &, int &) const; -- cgit v0.12 From 632016368e26ba06d7d09740a8a1805f4ea911f1 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Fri, 17 Dec 2010 15:24:30 +1000 Subject: Update test bitmaps for QDeclarativeImage::svg() autotest on Linux Task-number: Reviewed-by: Martin Jones --- .../declarative/qdeclarativeimage/data/heart.png | Bin 12424 -> 12577 bytes .../declarative/qdeclarativeimage/data/heart200.png | Bin 7943 -> 8063 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart.png b/tests/auto/declarative/qdeclarativeimage/data/heart.png index ff93f6c..abe97fe 100644 Binary files a/tests/auto/declarative/qdeclarativeimage/data/heart.png and b/tests/auto/declarative/qdeclarativeimage/data/heart.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart200.png b/tests/auto/declarative/qdeclarativeimage/data/heart200.png index 5a31ae8..7fbb13c 100644 Binary files a/tests/auto/declarative/qdeclarativeimage/data/heart200.png and b/tests/auto/declarative/qdeclarativeimage/data/heart200.png differ -- cgit v0.12 From e0abcb2ff7a3044305580659f9a432a9630a5943 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Fri, 17 Dec 2010 16:18:03 +1000 Subject: Fix QDeclarativeState::reset() autotest Current state reset mechanism does not really work for Text elements as the keeping implicit correct would require relayouting of text twice (See bug QTBUG-15118). Changed QDeclarativeState reset autotest to use Image element instead of Text element until the issue has been fixed. Task-number: Reviewed-by: Yann Bodson --- tests/auto/declarative/qdeclarativestates/data/image.png | Bin 0 -> 173 bytes tests/auto/declarative/qdeclarativestates/data/reset.qml | 9 ++++----- .../qdeclarativestates/tst_qdeclarativestates.cpp | 13 ++++++------- 3 files changed, 10 insertions(+), 12 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativestates/data/image.png diff --git a/tests/auto/declarative/qdeclarativestates/data/image.png b/tests/auto/declarative/qdeclarativestates/data/image.png new file mode 100644 index 0000000..ed1833c Binary files /dev/null and b/tests/auto/declarative/qdeclarativestates/data/image.png differ diff --git a/tests/auto/declarative/qdeclarativestates/data/reset.qml b/tests/auto/declarative/qdeclarativestates/data/reset.qml index 8799c97..a140ffa 100644 --- a/tests/auto/declarative/qdeclarativestates/data/reset.qml +++ b/tests/auto/declarative/qdeclarativestates/data/reset.qml @@ -3,17 +3,16 @@ import QtQuick 1.0 Rectangle { width: 640 height: 480 - Text { - id: theText + Image { + id: image width: 40 - wrapMode: Text.WordWrap - text: "a text string that is longer than 40 pixels" + source: "image.png" } states: State { name: "state1" PropertyChanges { - target: theText + target: image width: undefined } } diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index b8409a5..870842c 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -44,7 +44,6 @@ #include #include #include -#include #include #include #include @@ -1126,15 +1125,15 @@ void tst_qdeclarativestates::reset() QDeclarativeRectangle *rect = qobject_cast(c.create()); QVERIFY(rect != 0); - QDeclarativeText *text = rect->findChild(); - QVERIFY(text != 0); - QCOMPARE(text->width(), qreal(40.)); - QVERIFY(text->width() < text->height()); + QDeclarativeImage *image = rect->findChild(); + QVERIFY(image != 0); + QCOMPARE(image->width(), qreal(40.)); + QCOMPARE(image->height(), qreal(20.)); QDeclarativeItemPrivate::get(rect)->setState("state1"); - QVERIFY(text->width() > 41); - QVERIFY(text->width() > text->height()); + QCOMPARE(image->width(), 20.0); + QCOMPARE(image->height(), qreal(20.)); } void tst_qdeclarativestates::illegalObjectCreation() -- cgit v0.12 From 80eb3ebbfe24738163532494e8866ac20fd1b0e4 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 16 Dec 2010 16:03:13 +0200 Subject: Fix incorrect file name case for OpenGL libraries in symbian.conf. To support linux builds, file names must be cased correctly. Task-number: QT-4375 Reviewed-by: Miikka Heikkinen --- mkspecs/common/symbian/symbian.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 707335c..00cf0d7 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -70,12 +70,12 @@ QMAKE_LIBS_CORE = $$QMAKE_LIBS -lefsrv -lhal -lbafl QMAKE_LIBS_GUI = $$QMAKE_LIBS_CORE -lfbscli -lbitgdi -lgdi -lws32 -lapgrfx -lcone -leikcore -lmediaclientaudio -lapparc -lcentralrepository QMAKE_LIBS_NETWORK = QMAKE_LIBS_EGL = -llibEGL -QMAKE_LIBS_OPENGL = -llibglesv2 +QMAKE_LIBS_OPENGL = -llibGLESv2 QMAKE_LIBS_OPENGL_ES1 = -llibGLESv1_CM -QMAKE_LIBS_OPENGL_ES2 = -llibglesv2 -QMAKE_LIBS_OPENGL_QT = -llibglesv2 -lcone -lws32 +QMAKE_LIBS_OPENGL_ES2 = -llibGLESv2 +QMAKE_LIBS_OPENGL_QT = -llibGLESv2 -lcone -lws32 QMAKE_LIBS_OPENGL_ES1_QT = -llibGLESv1_CM -lcone -lws32 -QMAKE_LIBS_OPENGL_ES2_QT = -llibglesv2 -lcone -lws32 +QMAKE_LIBS_OPENGL_ES2_QT = -llibGLESv2 -lcone -lws32 QMAKE_LIBS_OPENVG = -llibOpenVG -lfbscli -lbitgdi -lgdi QMAKE_LIBS_THREAD = -llibpthread QMAKE_LIBS_COMPAT = -- cgit v0.12 From d238b0ba236da4c3c33c0707d8dd6f5e5903d6c0 Mon Sep 17 00:00:00 2001 From: Ville Pernu Date: Fri, 17 Dec 2010 11:08:53 +0200 Subject: Fix waitForOpened not working with already active configuration When an active QNetworkConfiguration is already in use (e.g. browser already open), the QNetworkSession::waitForOpened() did not work properly. Changed one if-statement in the function to adapt to the scenario. Reviewed-by: Perttu Pohjonen Task-number: QTBUG-565 --- src/network/bearer/qnetworksession.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp index 226c3c5..db1a37c 100644 --- a/src/network/bearer/qnetworksession.cpp +++ b/src/network/bearer/qnetworksession.cpp @@ -310,8 +310,9 @@ bool QNetworkSession::waitForOpened(int msecs) if (d->isOpen) return true; - if (d->state != Connecting) + if (!(d->state == Connecting || d->state == Connected)) { return false; + } QEventLoop* loop = new QEventLoop(this); QObject::connect(d, SIGNAL(quitPendingWaitsForOpened()), -- cgit v0.12 From b54efea2e97baac1d9442e829be2d6fb322c5085 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 17 Dec 2010 11:37:52 +0200 Subject: Use relative include instead of absolute in default qmake.conf Absolute include path breaks QtP releases which copy mkspecs under epoc32 and do not necessarily have the sources available in the original absolute path and can't patch the paths either at installation time. Task-number: QTBUG-16172 Reviewed-by: Oswald Buddenhagen --- tools/configure/configureapp.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index c967dad..915a56d 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3267,8 +3267,14 @@ void Configure::generateConfigfiles() if (qmakeConfFile.open(QFile::WriteOnly | QFile::Text)) { QTextStream qmakeConfStream; qmakeConfStream.setDevice(&qmakeConfFile); + // While QMAKESPEC_ORIGINAL being relative or absolute doesn't matter for the + // primary use of this variable by qmake to identify the original mkspec, the + // variable is also used for few special cases where the absolute path is required. + // Conversely, the include of the original qmake.conf must be done using relative path, + // as some Qt binary deployments are done in a manner that doesn't allow for patching + // the paths at the installation time. qmakeConfStream << "QMAKESPEC_ORIGINAL=" << pltSpec << endl << endl; - qmakeConfStream << "include(" << pltSpec << "/qmake.conf)" << endl; + qmakeConfStream << "include(" << "../" << spec << "/qmake.conf)" << endl << endl; qmakeConfStream.flush(); qmakeConfFile.close(); } -- cgit v0.12 From 5daf1ab79e3dd906664a7af00b311ba7c3f51138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Thu, 16 Dec 2010 16:24:11 +0100 Subject: Test doesn't need to depend on temp path Instead, use the current directory for creating test data. Reviewed-by: Oswald Buddenhagen --- tests/auto/qcompleter/tst_qcompleter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qcompleter/tst_qcompleter.cpp b/tests/auto/qcompleter/tst_qcompleter.cpp index 650c328..abc86ec 100644 --- a/tests/auto/qcompleter/tst_qcompleter.cpp +++ b/tests/auto/qcompleter/tst_qcompleter.cpp @@ -1455,7 +1455,7 @@ void tst_QCompleter::task247560_keyboardNavigation() void tst_QCompleter::QTBUG_14292_filesystem() { - QDir tmpDir = QDir::temp(); + QDir tmpDir = QDir::currentPath(); qsrand(QTime::currentTime().msec()); QString d = "tst_QCompleter_" + QString::number(qrand()); QVERIFY(tmpDir.mkdir(d)); -- cgit v0.12 From a97cf9553ff841dcfd45bbc85ff05b0aafd4a548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Thu, 16 Dec 2010 16:31:34 +0100 Subject: tst_QCompleter: Clean up after one's self The utility class FileSystem uses the RAII idiom to clean up directories created for the purpose of the test. Rubber-stamped-by: Oswald Buddenhagen --- tests/auto/qcompleter/tst_qcompleter.cpp | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/tests/auto/qcompleter/tst_qcompleter.cpp b/tests/auto/qcompleter/tst_qcompleter.cpp index abc86ec..62e64be 100644 --- a/tests/auto/qcompleter/tst_qcompleter.cpp +++ b/tests/auto/qcompleter/tst_qcompleter.cpp @@ -49,6 +49,7 @@ #include #include "../../shared/util.h" +#include "../../shared/filesystem.h" //TESTED_CLASS= //TESTED_FILES= @@ -1455,24 +1456,16 @@ void tst_QCompleter::task247560_keyboardNavigation() void tst_QCompleter::QTBUG_14292_filesystem() { + FileSystem fs; QDir tmpDir = QDir::currentPath(); + qsrand(QTime::currentTime().msec()); QString d = "tst_QCompleter_" + QString::number(qrand()); - QVERIFY(tmpDir.mkdir(d)); - -#if 0 - struct Cleanup { - QString dir; - ~Cleanup() { - qDebug() << dir << - QFile::remove(dir); } - } cleanup; - cleanup.dir = tmpDir.absolutePath()+"/" +d; -#endif + QVERIFY(fs.createDirectory(tmpDir.filePath(d))); QVERIFY(tmpDir.cd(d)); - QVERIFY(tmpDir.mkdir("hello")); - QVERIFY(tmpDir.mkdir("holla")); + QVERIFY(fs.createDirectory(tmpDir.filePath("hello"))); + QVERIFY(fs.createDirectory(tmpDir.filePath("holla"))); QLineEdit edit; QCompleter comp; @@ -1500,12 +1493,12 @@ void tst_QCompleter::QTBUG_14292_filesystem() QCOMPARE(comp.popup()->model()->rowCount(), 1); QTest::keyClick(&edit, 'r'); QTRY_VERIFY(!comp.popup()->isVisible()); - QVERIFY(tmpDir.mkdir("hero")); + QVERIFY(fs.createDirectory(tmpDir.filePath("hero"))); QTRY_VERIFY(comp.popup()->isVisible()); QCOMPARE(comp.popup()->model()->rowCount(), 1); QTest::keyClick(comp.popup(), Qt::Key_Escape); QTRY_VERIFY(!comp.popup()->isVisible()); - QVERIFY(tmpDir.mkdir("nothingThere")); + QVERIFY(fs.createDirectory(tmpDir.filePath("nothingThere"))); //there is no reason creating a file should open a popup, it did in Qt 4.7.0 QTest::qWait(60); QVERIFY(!comp.popup()->isVisible()); @@ -1522,7 +1515,7 @@ void tst_QCompleter::QTBUG_14292_filesystem() QTest::qWaitForWindowShown(&w); QTRY_VERIFY(!edit.hasFocus() && !comp.popup()->hasFocus()); - QVERIFY(tmpDir.mkdir("hemo")); + QVERIFY(fs.createDirectory(tmpDir.filePath("hemo"))); //there is no reason creating a file should open a popup, it did in Qt 4.7.0 QTest::qWait(60); QVERIFY(!comp.popup()->isVisible()); -- cgit v0.12 From c60a2a5e5136cfec74429114c6c74401fdda65a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Thu, 16 Dec 2010 14:09:35 +0100 Subject: Windows Vista and 7 also have animated progress bars Which means they get paint events all the time. Reviewed-by: Jens Bache-Wiig --- tests/auto/qprogressbar/tst_qprogressbar.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/auto/qprogressbar/tst_qprogressbar.cpp b/tests/auto/qprogressbar/tst_qprogressbar.cpp index 7d94e3c..e042fb8 100644 --- a/tests/auto/qprogressbar/tst_qprogressbar.cpp +++ b/tests/auto/qprogressbar/tst_qprogressbar.cpp @@ -179,10 +179,15 @@ void tst_QProgressBar::format() bar.repainted = false; bar.setFormat("%v of %m (%p%)"); qApp->processEvents(); + #ifndef Q_WS_MAC - // The Mac scroll bar is animated, which means we get paint events all the time. + // Animated scroll bars get paint events all the time +#ifdef Q_OS_WIN + if (QSysInfo::WindowsVersion < QSysInfo::WV_VISTA) +#endif QVERIFY(!bar.repainted); #endif + QCOMPARE(bar.text(), QString("1 of 10 (10%)")); bar.setRange(5, 5); bar.setValue(5); -- cgit v0.12 From 912e8a2c90a200300feaef18beedd4e6af3e8623 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Fri, 17 Dec 2010 15:12:30 +0100 Subject: Draw focusrect through style proxy This function call was simply not converted to use the new proxy style, hence preventing people from overriding it properly. Reviewed-by: Andy Shaw Task-number: QTBUG-16127 --- src/gui/styles/qcommonstyle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 039a6da..296455b 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -2217,7 +2217,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (vopt->state & QStyle::State_HasFocus) { QStyleOptionFocusRect o; o.QStyleOption::operator=(*vopt); - o.rect = subElementRect(SE_ItemViewItemFocusRect, vopt, widget); + o.rect = proxy()->subElementRect(SE_ItemViewItemFocusRect, vopt, widget); o.state |= QStyle::State_KeyboardFocusChange; o.state |= QStyle::State_Item; QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) -- cgit v0.12 From 4d5029365ccc045522cb87582c2b2e1a36ed0d24 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 16 Dec 2010 17:06:23 +0100 Subject: document WriteFailed status codes (whoops) --- src/corelib/io/qdatastream.cpp | 1 + src/corelib/io/qtextstream.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 52ee252..73ce490 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -223,6 +223,7 @@ QT_BEGIN_NAMESPACE \value ReadPastEnd The data stream has read past the end of the data in the underlying device. \value ReadCorruptData The data stream has read corrupt data. + \value WriteFailed The data stream cannot write to the underlying device. */ /***************************************************************************** diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 242c672..3bdbf32 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -224,6 +224,7 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384; \value ReadPastEnd The text stream has read past the end of the data in the underlying device. \value ReadCorruptData The text stream has read corrupt data. + \value WriteFailed The text stream cannot write to the underlying device. \sa status() */ -- cgit v0.12 From 558fe9383ba0aecbec09cc411c0ebab132aac137 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 16 Dec 2010 17:28:24 +0100 Subject: make QXmlStreamWriterPrivate::write(const char *s) ascii-only it's only ever called with ascii data, and the input encoding semantics weren't all that clear anyway. Reviewed-by: denis --- src/corelib/xml/qxmlstream.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index 91c3a19..50703a4 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -3083,16 +3083,11 @@ void QXmlStreamWriterPrivate::writeEscaped(const QString &s, bool escapeWhitespa qWarning("QXmlStreamWriter: No device"); } - +// ASCII only! void QXmlStreamWriterPrivate::write(const char *s) { if (device) { -#ifndef QT_NO_TEXTCODEC - if (codec->mibEnum() != 106) - device->write(encoder->fromUnicode(QLatin1String(s))); - else -#endif - device->write(s, strlen(s)); + device->write(s, strlen(s)); } else if (stringDevice) { stringDevice->append(QLatin1String(s)); } else -- cgit v0.12 From 86246bfe354aaf03065cd78d7d5410e5097ada48 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 16 Dec 2010 17:30:52 +0100 Subject: remove some code duplication writeEscaped() can simply call write() once it's done escaping Reviewed-by: denis --- src/corelib/xml/qxmlstream.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index 50703a4..b29bd92 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -3070,17 +3070,7 @@ void QXmlStreamWriterPrivate::writeEscaped(const QString &s, bool escapeWhitespa escaped += QChar(c); } } - if (device) { -#ifdef QT_NO_TEXTCODEC - device->write(escaped.toLatin1(), escaped.size()); -#else - device->write(encoder->fromUnicode(escaped)); -#endif - } - else if (stringDevice) - stringDevice->append(escaped); - else - qWarning("QXmlStreamWriter: No device"); + write(escaped); } // ASCII only! -- cgit v0.12 From 468328468904d116a5ff70fd4c71c34e453e8593 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 16 Dec 2010 17:44:01 +0100 Subject: optimize writing string constants and byte arrays don't throw away the already known length just to call strlen() on it over and over again. Reviewed-by: denis --- src/corelib/xml/qxmlstream.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index b29bd92..3d8af9b 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -2965,7 +2965,8 @@ public: void write(const QStringRef &); void write(const QString &); void writeEscaped(const QString &, bool escapeWhitespace = false); - void write(const char *s); + void write(const char *s, int len); + template void write(const char (&s)[N]) { write(s, N - 1); } bool finishStartElement(bool contents = true); void writeStartElement(const QString &namespaceUri, const QString &name); QIODevice *device; @@ -3074,12 +3075,12 @@ void QXmlStreamWriterPrivate::writeEscaped(const QString &s, bool escapeWhitespa } // ASCII only! -void QXmlStreamWriterPrivate::write(const char *s) +void QXmlStreamWriterPrivate::write(const char *s, int len) { if (device) { - device->write(s, strlen(s)); + device->write(s, len); } else if (stringDevice) { - stringDevice->append(QLatin1String(s)); + stringDevice->append(QString::fromLatin1(s, len)); } else qWarning("QXmlStreamWriter: No device"); } @@ -3157,7 +3158,7 @@ void QXmlStreamWriterPrivate::indent(int level) { write("\n"); for (int i = level; i > 0; --i) - write(autoFormattingIndent.constData()); + write(autoFormattingIndent.constData(), autoFormattingIndent.length()); } @@ -3744,7 +3745,7 @@ void QXmlStreamWriter::writeStartDocument(const QString &version) #ifdef QT_NO_TEXTCODEC d->write("iso-8859-1"); #else - d->write(d->codec->name().constData()); + d->write(d->codec->name().constData(), d->codec->name().length()); #endif } d->write("\"?>"); @@ -3767,12 +3768,13 @@ void QXmlStreamWriter::writeStartDocument(const QString &version, bool standalon #ifdef QT_NO_TEXTCODEC d->write("iso-8859-1"); #else - d->write(d->codec->name().constData()); + d->write(d->codec->name().constData(), d->codec->name().length()); #endif } - d->write("\" standalone=\""); - d->write(standalone ? "yes" : "no"); - d->write("\"?>"); + if (standalone) + d->write("\" standalone=\"yes\"?>"); + else + d->write("\" standalone=\"no\"?>"); } -- cgit v0.12 From 8789d4bd9eaba3a90fb3a94edb71ad0c1e01dc66 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 16 Dec 2010 20:32:21 +0100 Subject: add error handling to QXmlStreamWriter introduce QXmlStreamWriter::hasError(). set the error flag when any write error occurs. ignore subsequent writes after the first error. Reviewed-by: denis --- src/corelib/xml/qxmlstream.cpp | 37 ++++++++++++-- src/corelib/xml/qxmlstream.h | 2 + tests/auto/qxmlstream/tst_qxmlstream.cpp | 82 ++++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+), 5 deletions(-) diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index 3d8af9b..64a9857 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -2941,6 +2941,9 @@ QStringRef QXmlStreamReader::documentEncoding() const By default, QXmlStreamWriter encodes XML in UTF-8. Different encodings can be enforced using setCodec(). + If an error occurs while writing to the underlying device, hasError() + starts returning true and subsequent writes are ignored. + The \l{QXmlStream Bookmarks Example} illustrates how to use a stream writer to write an XML bookmark file (XBEL) that was previously read in by a QXmlStreamReader. @@ -2976,6 +2979,7 @@ public: uint inEmptyElement :1; uint lastWasStartElement :1; uint wroteSomething :1; + uint hasError :1; uint autoFormatting :1; QByteArray autoFormattingIndent; NamespaceDeclaration emptyNamespace; @@ -3008,6 +3012,7 @@ QXmlStreamWriterPrivate::QXmlStreamWriterPrivate(QXmlStreamWriter *q) #endif inStartElement = inEmptyElement = false; wroteSomething = false; + hasError = false; lastWasStartElement = false; lastNamespaceDeclaration = 1; autoFormatting = false; @@ -3017,11 +3022,15 @@ QXmlStreamWriterPrivate::QXmlStreamWriterPrivate(QXmlStreamWriter *q) void QXmlStreamWriterPrivate::write(const QStringRef &s) { if (device) { + if (hasError) + return; #ifdef QT_NO_TEXTCODEC - device->write(s.toString().toLatin1(), s.size()); + QByteArray bytes = s.toLatin1(); #else - device->write(encoder->fromUnicode(s.constData(), s.size())); + QByteArray bytes = encoder->fromUnicode(s.constData(), s.size()); #endif + if (device->write(bytes) != bytes.size()) + hasError = true; } else if (stringDevice) s.appendTo(stringDevice); @@ -3032,11 +3041,15 @@ void QXmlStreamWriterPrivate::write(const QStringRef &s) void QXmlStreamWriterPrivate::write(const QString &s) { if (device) { + if (hasError) + return; #ifdef QT_NO_TEXTCODEC - device->write(s.toLatin1(), s.size()); + QByteArray bytes = s.toLatin1(); #else - device->write(encoder->fromUnicode(s)); + QByteArray bytes = encoder->fromUnicode(s); #endif + if (device->write(bytes) != bytes.size()) + hasError = true; } else if (stringDevice) stringDevice->append(s); @@ -3078,7 +3091,10 @@ void QXmlStreamWriterPrivate::writeEscaped(const QString &s, bool escapeWhitespa void QXmlStreamWriterPrivate::write(const char *s, int len) { if (device) { - device->write(s, len); + if (hasError) + return; + if (device->write(s, len) != len) + hasError = true; } else if (stringDevice) { stringDevice->append(QString::fromLatin1(s, len)); } else @@ -3359,6 +3375,17 @@ int QXmlStreamWriter::autoFormattingIndent() const return d->autoFormattingIndent.count(' ') - d->autoFormattingIndent.count('\t'); } +/*! + Returns \c true if the stream failed to write to the underlying device. + + The error status is never reset. Writes happening after the error + occurred are ignored, even if the error condition is cleared. + */ +bool QXmlStreamWriter::hasError() const +{ + Q_D(const QXmlStreamWriter); + return d->hasError; +} /*! \overload diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h index d7143bd..244d3d4 100644 --- a/src/corelib/xml/qxmlstream.h +++ b/src/corelib/xml/qxmlstream.h @@ -474,6 +474,8 @@ public: void writeCurrentToken(const QXmlStreamReader &reader); #endif + bool hasError() const; + private: Q_DISABLE_COPY(QXmlStreamWriter) Q_DECLARE_PRIVATE(QXmlStreamWriter) diff --git a/tests/auto/qxmlstream/tst_qxmlstream.cpp b/tests/auto/qxmlstream/tst_qxmlstream.cpp index 19e4b90..9e4f3ec 100644 --- a/tests/auto/qxmlstream/tst_qxmlstream.cpp +++ b/tests/auto/qxmlstream/tst_qxmlstream.cpp @@ -574,6 +574,7 @@ private slots: void checkCommentIndentation() const; void checkCommentIndentation_data() const; void qtbug9196_crash() const; + void hasError() const; private: static QByteArray readFile(const QString &filename); @@ -1560,5 +1561,86 @@ void tst_QXmlStream::qtbug9196_crash() const } } +class FakeBuffer : public QBuffer +{ +protected: + qint64 writeData(const char *c, qint64 i) + { + qint64 ai = qMin(m_capacity, i); + m_capacity -= ai; + return ai ? QBuffer::writeData(c, ai) : 0; + } +public: + void setCapacity(int capacity) { m_capacity = capacity; } +private: + qint64 m_capacity; +}; + +void tst_QXmlStream::hasError() const +{ + { + FakeBuffer fb; + QVERIFY(fb.open(QBuffer::ReadWrite)); + fb.setCapacity(1000); + QXmlStreamWriter writer(&fb); + writer.writeStartDocument(); + writer.writeEndDocument(); + QVERIFY(!writer.hasError()); + QCOMPARE(fb.data(), QByteArray("\n")); + } + + { + // Failure caused by write(QString) + FakeBuffer fb; + QVERIFY(fb.open(QBuffer::ReadWrite)); + fb.setCapacity(strlen(" Date: Mon, 20 Dec 2010 10:32:54 +1000 Subject: Quiet unused parameter warnings. --- src/plugins/bearer/icd/qicdengine.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp index a5a183b..96827f3 100644 --- a/src/plugins/bearer/icd/qicdengine.cpp +++ b/src/plugins/bearer/icd/qicdengine.cpp @@ -966,6 +966,9 @@ void QIcdEngine::connectionStateSignalsSlot(QDBusMessage msg) void QIcdEngine::icdServiceOwnerChanged(const QString &serviceName, const QString &oldOwner, const QString &newOwner) { + Q_UNUSED(serviceName); + Q_UNUSED(oldOwner); + QMutexLocker locker(&mutex); if (newOwner.isEmpty()) { -- cgit v0.12 From 95b0418a7ee7aee9658fd19b363e73d583af0b04 Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Mon, 20 Dec 2010 13:09:48 +1000 Subject: Fix deployment of minehunt for Symbian Task: QT-4298 --- demos/declarative/minehunt/minehunt.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/declarative/minehunt/minehunt.pro b/demos/declarative/minehunt/minehunt.pro index 8a7fdc5..5929ecf 100644 --- a/demos/declarative/minehunt/minehunt.pro +++ b/demos/declarative/minehunt/minehunt.pro @@ -18,6 +18,6 @@ symbian:{ TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) qmlminehuntfiles.sources = MinehuntCore minehunt.qml - DEPLOYMENT = qmlminehuntfiles + DEPLOYMENT += qmlminehuntfiles } -- cgit v0.12 From 0aeebdc851682d2afd63494ddeafa4e745ad2b72 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 20 Dec 2010 14:30:09 +1000 Subject: Update docs on importing javascript files --- doc/src/declarative/javascriptblocks.qdoc | 4 +++- doc/src/declarative/modules.qdoc | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/src/declarative/javascriptblocks.qdoc b/doc/src/declarative/javascriptblocks.qdoc index 155bd6e..68cb392 100644 --- a/doc/src/declarative/javascriptblocks.qdoc +++ b/doc/src/declarative/javascriptblocks.qdoc @@ -99,7 +99,9 @@ resource, the component's \l {QDeclarativeComponent::status()}{status} is set to Imported JavaScript files are always qualified using the "as" keyword. The qualifier for JavaScript files must be unique, so there is always a one-to-one -mapping between qualifiers and JavaScript files. +mapping between qualifiers and JavaScript files. (This also means qualifiers cannot +be named the same as built-in JavaScript objects such as \c Date and \c Math). + \section2 Code-Behind Implementation Files diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index 011eb63..bf9f5fd 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -216,6 +216,8 @@ JavaScript files must always be imported with a named import: } \endqml +The qualifier ("MyScript" in the above example) must be unique within the QML document. +Unlike ordinary modules, multiple scripts cannot be imported into the same namespace. \section1 Writing a qmldir file -- cgit v0.12 From 327169a6a3fb0bac258cb878019734211a707cce Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 20 Dec 2010 14:30:27 +1000 Subject: Don't truncate image:// url strings prematurely Url fragments and queries were being removed from the image ids passed to QDeclarativeImageProvider. Task-number: QTBUG-16195 Reviewed-by: Martin Jones --- src/declarative/qml/qdeclarativeengine.cpp | 12 ++++-- src/declarative/qml/qdeclarativeimageprovider.cpp | 16 ++++++-- .../tst_qdeclarativeimageprovider.cpp | 46 ++++++++++++++++++++-- 3 files changed, 62 insertions(+), 12 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 201e675..cf3ea42 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -760,8 +760,10 @@ QImage QDeclarativeEnginePrivate::getImageFromProvider(const QUrl &url, QSize *s QImage image; QSharedPointer provider = imageProviders.value(url.host()); locker.unlock(); - if (provider) - image = provider->requestImage(url.path().mid(1), size, req_size); + if (provider) { + QString imageId = url.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority).mid(1); + image = provider->requestImage(imageId, size, req_size); + } return image; } @@ -771,8 +773,10 @@ QPixmap QDeclarativeEnginePrivate::getPixmapFromProvider(const QUrl &url, QSize QPixmap pixmap; QSharedPointer provider = imageProviders.value(url.host()); locker.unlock(); - if (provider) - pixmap = provider->requestPixmap(url.path().mid(1), size, req_size); + if (provider) { + QString imageId = url.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority).mid(1); + pixmap = provider->requestPixmap(imageId, size, req_size); + } return pixmap; } diff --git a/src/declarative/qml/qdeclarativeimageprovider.cpp b/src/declarative/qml/qdeclarativeimageprovider.cpp index ef31be7..e3da645 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.cpp +++ b/src/declarative/qml/qdeclarativeimageprovider.cpp @@ -182,13 +182,17 @@ QDeclarativeImageProvider::ImageType QDeclarativeImageProvider::imageType() cons Implement this method to return the image with \a id. The default implementation returns an empty image. + The \a id is the requested image source, with the "image:" scheme and + provider identifier removed. For example, if the image \l{Image::}{source} + was "image://myprovider/icons/home", the given \a id would be "icons/home". + 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. 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. + is used to set the \l {Item::}{width} and \l {Item::}{height} of the + relevant \l Image if these values have not been set explicitly. \note this method may be called by multiple threads, so ensure the implementation of this method is reentrant. @@ -207,13 +211,17 @@ 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. + The \a id is the requested image source, with the "image:" scheme and + provider identifier removed. For example, if the image \l{Image::}{source} + was "image://myprovider/icons/home", the given \a id would be "icons/home". + 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. 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. + is used to set the \l {Item::}{width} and \l {Item::}{height} of the + relevant \l Image if these values have not been set explicitly. */ QPixmap QDeclarativeImageProvider::requestPixmap(const QString &id, QSize *size, const QSize& requestedSize) { diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp index cd12e3a..5b214e6 100644 --- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp +++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp @@ -100,6 +100,8 @@ public: QImage requestImage(const QString &id, QSize *size, const QSize& requestedSize) { + lastImageId = id; + if (id == QLatin1String("no-such-file.png")) return QImage(); @@ -114,6 +116,7 @@ public: } bool *deleteWatch; + QString lastImageId; }; Q_DECLARE_METATYPE(TestQImageProvider*); @@ -134,6 +137,8 @@ public: QPixmap requestPixmap(const QString &id, QSize *size, const QSize& requestedSize) { + lastImageId = id; + if (id == QLatin1String("no-such-file.png")) return QPixmap(); @@ -148,6 +153,7 @@ public: } bool *deleteWatch; + QString lastImageId; }; Q_DECLARE_METATYPE(TestQPixmapProvider*); @@ -164,22 +170,49 @@ QString tst_qdeclarativeimageprovider::newImageFileName() const void tst_qdeclarativeimageprovider::fillRequestTestsData(const QString &id) { QTest::addColumn("source"); + QTest::addColumn("imageId"); QTest::addColumn("properties"); QTest::addColumn("size"); QTest::addColumn("error"); - QTest::newRow(QTest::toString(id + " exists")) << newImageFileName() << "" << QSize(100,100) << ""; - QTest::newRow(QTest::toString(id + " scaled")) << newImageFileName() << "sourceSize: \"80x30\"" << QSize(80,30) << ""; + QString fileName = newImageFileName(); + QTest::newRow(QTest::toString(id + " simple test")) + << "image://test/" + fileName << fileName << "" << QSize(100,100) << ""; + + fileName = newImageFileName(); + QTest::newRow(QTest::toString(id + " url with no id")) + << "image://test/" + fileName << "" + fileName << "" << QSize(100,100) << ""; + + fileName = newImageFileName(); + QTest::newRow(QTest::toString(id + " url with path")) + << "image://test/test/path" + fileName << "test/path" + fileName << "" << QSize(100,100) << ""; + + fileName = newImageFileName(); + QTest::newRow(QTest::toString(id + " url with fragment")) + << "image://test/faq.html?#question13" + fileName << "faq.html?#question13" + fileName << "" << QSize(100,100) << ""; - QTest::newRow(QTest::toString(id + " missing")) << "image://test/no-such-file.png" << "" << QSize() + fileName = newImageFileName(); + QTest::newRow(QTest::toString(id + " url with query")) + << "image://test/cgi-bin/drawgraph.cgi?type=pie&color=green" + fileName << "cgi-bin/drawgraph.cgi?type=pie&color=green" + fileName + << "" << QSize(100,100) << ""; + + fileName = newImageFileName(); + QTest::newRow(QTest::toString(id + " scaled image")) + << "image://test/" + fileName << fileName << "sourceSize: \"80x30\"" << QSize(80,30) << ""; + + QTest::newRow(QTest::toString(id + " missing")) + << "image://test/no-such-file.png" << "no-such-file.png" << "" << QSize(100,100) << "file::2:1: QML Image: Failed to get image from provider: image://test/no-such-file.png"; - QTest::newRow(QTest::toString(id + " 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::runTest(bool async, QDeclarativeImageProvider *provider) { QFETCH(QString, source); + QFETCH(QString, imageId); QFETCH(QString, properties); QFETCH(QSize, size); QFETCH(QString, error); @@ -210,6 +243,11 @@ void tst_qdeclarativeimageprovider::runTest(bool async, QDeclarativeImageProvide QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready); else QVERIFY(obj->status() == QDeclarativeImage::Ready); + if (QByteArray(QTest::currentDataTag()).startsWith("qimage")) + QCOMPARE(static_cast(provider)->lastImageId, imageId); + else + QCOMPARE(static_cast(provider)->lastImageId, imageId); + QCOMPARE(obj->width(), qreal(size.width())); QCOMPARE(obj->height(), qreal(size.height())); QCOMPARE(obj->pixmap().width(), size.width()); -- cgit v0.12 From 28973e50710cfcd96da037cdad7f46700221c185 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Mon, 20 Dec 2010 15:50:41 +1000 Subject: Make it clear which security updates are needed for Visual Studio 2005. As well as Service Pack 1, the compiler also needs four additional security updates in order to work correctly with Qt's pre-built binary package. Task-number: QTBUG-7633 Reviewed-by: Toby Tomkins --- doc/src/getting-started/installation.qdoc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index a68310c..5b009cd 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -963,6 +963,7 @@ We hope you will enjoy using Qt. first install the Visual Studio Service Pack 1 available \l{http://www.microsoft.com/downloads/details.aspx?FamilyId=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC&displaylang=en}{here} to avoid runtime conflicts. + Additionally, you must use the Check for Updates feature in the Help menu of the Visual Studio 2005 IDE to apply at least the following security updates: KB937061, KB971023, KB971090, KB973673. If you are using a source edition of Qt, you must first install Perl so that the syncqt script invoked by configure can be executed. You can download -- cgit v0.12 From 95e64de1827f9b2bae829d40756f7142c56c460f Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Mon, 20 Dec 2010 15:44:25 +1000 Subject: Update test bitmaps for QDeclarativeImage::svg() autotest on Windows Task-number: Reviewed-by: Martin Jones --- .../qdeclarativeimage/data/heart-win32.png | Bin 12457 -> 12621 bytes .../qdeclarativeimage/data/heart200-win32.png | Bin 7939 -> 8062 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart-win32.png b/tests/auto/declarative/qdeclarativeimage/data/heart-win32.png index 5992e79..351da13 100644 Binary files a/tests/auto/declarative/qdeclarativeimage/data/heart-win32.png and b/tests/auto/declarative/qdeclarativeimage/data/heart-win32.png differ diff --git a/tests/auto/declarative/qdeclarativeimage/data/heart200-win32.png b/tests/auto/declarative/qdeclarativeimage/data/heart200-win32.png index 19b20a8..4976ff9 100644 Binary files a/tests/auto/declarative/qdeclarativeimage/data/heart200-win32.png and b/tests/auto/declarative/qdeclarativeimage/data/heart200-win32.png differ -- cgit v0.12 From 197ec350e4014330851a013501c6dde3068ac26f Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 20 Dec 2010 17:07:34 +1000 Subject: Setting TextInput.cursorPosition outside bounds crashed. Check bounds in TextInput and TextEdit. Task-number: QTBUG-16188 Reviewed-by: Bea Lam --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 2 ++ src/declarative/graphicsitems/qdeclarativetextinput.cpp | 2 ++ .../qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 13 +++++++++++++ .../qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 13 +++++++++++++ 4 files changed, 30 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index e05f4e4..4e16d24 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -643,6 +643,8 @@ int QDeclarativeTextEdit::cursorPosition() const void QDeclarativeTextEdit::setCursorPosition(int pos) { Q_D(QDeclarativeTextEdit); + if (pos < 0 || pos > d->text.length()) + return; QTextCursor cursor = d->control->textCursor(); if (cursor.position() == pos) return; diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index df103de..521e4ab 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -437,6 +437,8 @@ int QDeclarativeTextInput::cursorPosition() const void QDeclarativeTextInput::setCursorPosition(int cp) { Q_D(QDeclarativeTextInput); + if (cp < 0 || cp > d->control->text().length()) + return; d->control->moveCursor(cp); } diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index a7971cc..c7a51f7 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -652,6 +652,19 @@ void tst_qdeclarativetextedit::selection() QVERIFY(textEditObject->selectionEnd() == 0); QVERIFY(textEditObject->selectedText().isNull()); + // Verify invalid positions are ignored. + textEditObject->setCursorPosition(-1); + QVERIFY(textEditObject->cursorPosition() == 0); + QVERIFY(textEditObject->selectionStart() == 0); + QVERIFY(textEditObject->selectionEnd() == 0); + QVERIFY(textEditObject->selectedText().isNull()); + + textEditObject->setCursorPosition(textEditObject->text().count()+1); + QVERIFY(textEditObject->cursorPosition() == 0); + QVERIFY(textEditObject->selectionStart() == 0); + QVERIFY(textEditObject->selectionEnd() == 0); + QVERIFY(textEditObject->selectedText().isNull()); + //Test selection for(int i=0; i<= testStr.size(); i++) { textEditObject->select(0,i); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 76e0102..7b2310a 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -354,6 +354,19 @@ void tst_qdeclarativetextinput::selection() QVERIFY(textinputObject->selectionEnd() == 0); QVERIFY(textinputObject->selectedText().isNull()); + // Verify invalid positions are ignored. + textinputObject->setCursorPosition(-1); + QVERIFY(textinputObject->cursorPosition() == 0); + QVERIFY(textinputObject->selectionStart() == 0); + QVERIFY(textinputObject->selectionEnd() == 0); + QVERIFY(textinputObject->selectedText().isNull()); + + textinputObject->setCursorPosition(textinputObject->text().count()+1); + QVERIFY(textinputObject->cursorPosition() == 0); + QVERIFY(textinputObject->selectionStart() == 0); + QVERIFY(textinputObject->selectionEnd() == 0); + QVERIFY(textinputObject->selectedText().isNull()); + //Test selection for(int i=0; i<= testStr.size(); i++) { textinputObject->select(0,i); -- cgit v0.12 From de72670c620e1193fa875bf1a4adee553700bacb Mon Sep 17 00:00:00 2001 From: Ville Pernu Date: Mon, 20 Dec 2010 09:57:24 +0200 Subject: QNAM HTTP: Fix missing error() signal During download, if a QAbstractSocket::RemoteHostClosedError occurs, the error handling is deferred to _q_disconnected() slot. However, the error message is not saved for the function, and thus the _q_disconnected only emits a finished-signal. We now store an unhandled error into a private member. It is handled and reset by the _q_disconnected (or more specifically, allDone-function). Also, an additional check is made that there are no simultaneous HTTP errors. If a HTTP error exists, any socket errors are suppressed. Task-Number: QT-3494 Reviewed-By: Markus Goetz --- src/network/access/qhttpnetworkconnectionchannel.cpp | 20 +++++++++++++++++++- src/network/access/qhttpnetworkconnectionchannel_p.h | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index c8caad4..c4471eb 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -66,6 +66,7 @@ QHttpNetworkConnectionChannel::QHttpNetworkConnectionChannel() , bytesTotal(0) , resendCurrent(false) , lastStatus(0) + , unhandledError(QNetworkReply::NoError) , pendingEncrypt(false) , reconnectAttempts(2) , authMethod(QAuthenticatorPrivate::None) @@ -642,7 +643,23 @@ void QHttpNetworkConnectionChannel::allDone() // slot connected to it. The socket will not fire readyRead signal, if we are already // in the slot connected to readyRead if (emitFinished) - QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); + { + // Check whether _q_error was invoked previously and if it left a socket + // error unhandled AND that there are no http errors. + // In case there are both socket errors and http errors, the socket error is suppressed. + // Http errors are handled in the QNetworkAccessHttpBackend. + if(unhandledError != QNetworkReply::NoError && reply->statusCode() == 200) { + QString errorString = connection->d_func()->errorDetail(unhandledError, socket, socket->errorString()); + qRegisterMetaType("QNetworkReply::NetworkError"); + QMetaObject::invokeMethod(reply, "finishedWithError", + Qt::QueuedConnection, + Q_ARG(QNetworkReply::NetworkError, unhandledError), + Q_ARG(QString, errorString)); + } else { + QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); + } + unhandledError = QNetworkReply::NoError; // Reset the value + } // reset the reconnection attempts after we receive a complete reply. // in case of failures, each channel will attempt two reconnects before emitting error. reconnectAttempts = 2; @@ -964,6 +981,7 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket errorCode = QNetworkReply::RemoteHostClosedError; } } else { + unhandledError = QNetworkReply::RemoteHostClosedError; return; } break; diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index fd18042..e1d42fb 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -105,6 +105,7 @@ public: qint64 bytesTotal; bool resendCurrent; int lastStatus; // last status received on this channel + QNetworkReply::NetworkError unhandledError; // Stored code of an unhandled error. bool pendingEncrypt; // for https (send after encrypted) int reconnectAttempts; // maximum 2 reconnection attempts QAuthenticatorPrivate::Method authMethod; -- cgit v0.12 From 8605f528930744b2afc594c39afb146bd7ad4b54 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 20 Dec 2010 10:48:50 +0100 Subject: QIntValidator: provide default argument to parent For consistency. Reviewed-by: Joao Reviewed-by: Gabriel Task-number: 16100 --- src/gui/widgets/qvalidator.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/widgets/qvalidator.h b/src/gui/widgets/qvalidator.h index 63734ca..013387d 100644 --- a/src/gui/widgets/qvalidator.h +++ b/src/gui/widgets/qvalidator.h @@ -101,7 +101,7 @@ class Q_GUI_EXPORT QIntValidator : public QValidator public: explicit QIntValidator(QObject * parent = 0); - QIntValidator(int bottom, int top, QObject * parent); + QIntValidator(int bottom, int top, QObject *parent = 0); ~QIntValidator(); QValidator::State validate(QString &, int &) const; @@ -142,7 +142,7 @@ class Q_GUI_EXPORT QDoubleValidator : public QValidator public: explicit QDoubleValidator(QObject * parent = 0); - QDoubleValidator(double bottom, double top, int decimals, QObject * parent); + QDoubleValidator(double bottom, double top, int decimals, QObject *parent = 0); ~QDoubleValidator(); enum Notation { @@ -186,7 +186,7 @@ class Q_GUI_EXPORT QRegExpValidator : public QValidator public: explicit QRegExpValidator(QObject *parent = 0); - QRegExpValidator(const QRegExp& rx, QObject *parent); + QRegExpValidator(const QRegExp& rx, QObject *parent = 0); ~QRegExpValidator(); virtual QValidator::State validate(QString& input, int& pos) const; -- cgit v0.12 From 3677eabde5595194b6fc72cd395a1ae7560c5e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Mon, 20 Dec 2010 11:55:32 +0100 Subject: define FSCTL_SET_REPARSE_POINT in test header ... as was already done in windows engine implementation for FSCTL_*GET*_REPARSE_POINT. --- tests/shared/filesystem.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/shared/filesystem.h b/tests/shared/filesystem.h index 8274346..4775671 100644 --- a/tests/shared/filesystem.h +++ b/tests/shared/filesystem.h @@ -55,6 +55,9 @@ #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L) #endif #define REPARSE_MOUNTPOINT_HEADER_SIZE 8 +#ifndef FSCTL_SET_REPARSE_POINT +#define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) +#endif #endif struct FileSystem -- cgit v0.12 From b98e374e94e81b66be0dc009356a729e9b97dce8 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 1 Dec 2010 16:38:59 +0000 Subject: QFile API: add API to specify if adopted file handles should be closed QFile behaviour has been to not close file handles adopted by open(FILE*, OpenMode) and open(int fd, OpenMode) functions. This is inconvenient for frameworks which want to return an opened QFile to the user. In this case it would be better to transfer ownership of the handle to the QFile. New overloads are added which take an additional parameter from the QFile::FileHandleFlags flags. Currently only one bit is used to provide the AutoCloseHandle option, but it is extensible. The AutoCloseHandle option tells the QFile backend that it should close the handle when close() is called, rather than the default behaviour which remains to flush the handle and leave it open. The DontCloseHandle option is the inverse of this, specifying the old behaviour of flushing but not closing the file handle. Symbian OS file handles are not compatible with int, they are an opaque data type which contains two integers. The first identifies to the kernel the file server session The second identifies to the file server the subsession object (the file) The reason for this is that it has a microkernel architecture, the kernel has no support for files - all files and file systems are handled by a user mode process called the "file server". So for symbian, a new QFile::open() overload is added for adopting a symbian RFile handle. The API mirrors the existing API for POSIX file handles, but takes an RFile reference rather than an integer file descriptor. Task-number: QT-2924 Reviewed-by: joao Reviewed-by: mread Reviewed-by: Oswald Buddenhagen --- src/corelib/io/qfile.cpp | 187 ++++++++++++++++++++++++++++++++-- src/corelib/io/qfile.h | 14 +++ src/corelib/io/qfile_p.h | 7 +- src/corelib/io/qfsfileengine.cpp | 14 ++- src/corelib/io/qfsfileengine.h | 8 ++ src/corelib/io/qfsfileengine_unix.cpp | 59 +++++++++++ 6 files changed, 277 insertions(+), 12 deletions(-) diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index 85e78a6..e3bc8da 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -103,7 +103,7 @@ QFilePrivate::~QFilePrivate() } bool -QFilePrivate::openExternalFile(int flags, int fd) +QFilePrivate::openExternalFile(int flags, int fd, QFile::FileHandleFlags handleFlags) { #ifdef QT_NO_FSFILEENGINE Q_UNUSED(flags); @@ -113,14 +113,13 @@ QFilePrivate::openExternalFile(int flags, int fd) delete fileEngine; fileEngine = 0; QFSFileEngine *fe = new QFSFileEngine; - fe->setFileName(fileName); fileEngine = fe; - return fe->open(QIODevice::OpenMode(flags), fd); + return fe->open(QIODevice::OpenMode(flags), fd, handleFlags); #endif } bool -QFilePrivate::openExternalFile(int flags, FILE *fh) +QFilePrivate::openExternalFile(int flags, FILE *fh, QFile::FileHandleFlags handleFlags) { #ifdef QT_NO_FSFILEENGINE Q_UNUSED(flags); @@ -130,12 +129,28 @@ QFilePrivate::openExternalFile(int flags, FILE *fh) delete fileEngine; fileEngine = 0; QFSFileEngine *fe = new QFSFileEngine; - fe->setFileName(fileName); fileEngine = fe; - return fe->open(QIODevice::OpenMode(flags), fh); + return fe->open(QIODevice::OpenMode(flags), fh, handleFlags); #endif } +#ifdef Q_OS_SYMBIAN +bool QFilePrivate::openExternalFile(int flags, const RFile &f, QFile::FileHandleFlags handleFlags) +{ +#ifdef QT_NO_FSFILEENGINE + Q_UNUSED(flags); + Q_UNUSED(fh); + return false; +#else + delete fileEngine; + fileEngine = 0; + QFSFileEngine *fe = new QFSFileEngine; + fileEngine = fe; + return fe->open(QIODevice::OpenMode(flags), f, handleFlags); +#endif +} +#endif + inline bool QFilePrivate::ensureFlushed() const { // This function ensures that the write buffer has been flushed (const @@ -341,6 +356,20 @@ QFilePrivate::setError(QFile::FileError err, int errNum) \snippet doc/src/snippets/ntfsp.cpp 1 */ +/*! + \enum QFile::FileHandleFlag + + This enum is used when opening a file to specify additional + options which only apply to files and not to a generic + QIODevice. + + \value AutoCloseHandle The file handle passed into open() should be + closed by close(), the default behaviour is that close just flushes + the file and the app is responsible for closing the file handle. When + opening a file by name, this flag is ignored as Qt always "owns" the + file handle and must close it. + */ + #ifdef QT3_SUPPORT /*! \typedef QFile::PermissionSpec @@ -1058,8 +1087,57 @@ bool QFile::open(OpenMode mode) \snippet doc/src/snippets/code/src_corelib_io_qfile.cpp 4 */ +// ### Qt5: merge this into new overload with a default parameter bool QFile::open(FILE *fh, OpenMode mode) { + return open(fh, mode, DontCloseHandle); +} + +/*! + \overload + + Opens the existing file handle \a fh in the given \a mode. + Returns true if successful; otherwise returns false. + + Example: + \snippet doc/src/snippets/code/src_corelib_io_qfile.cpp 3 + + When a QFile is opened using this function, behaviour of close() is + controlled by the AutoCloseHandle flag. + If AutoCloseHandle is specified, and this function succeeds, + then calling close() closes the adopted handle. + Otherwise, close() does not actually close the file, but only flushes it. + + \bold{Warning:} + \list 1 + \o If \a fh does not refer to a regular file, e.g., it is \c stdin, + \c stdout, or \c stderr, you may not be able to seek(). size() + returns \c 0 in those cases. See QIODevice::isSequential() for + more information. + \o Since this function opens the file without specifying the file name, + you cannot use this QFile with a QFileInfo. + \endlist + + \note For Windows CE you may not be able to call resize(). + + \sa close(), {qmake Variable Reference#CONFIG}{qmake Variable Reference} + + \bold{Note for the Windows Platform} + + \a fh must be opened in binary mode (i.e., the mode string must contain + 'b', as in "rb" or "wb") when accessing files and other random-access + devices. Qt will translate the end-of-line characters if you pass + QIODevice::Text to \a mode. Sequential devices, such as stdin and stdout, + are unaffected by this limitation. + + You need to enable support for console applications in order to use the + stdin, stdout and stderr streams at the console. To do this, add the + following declaration to your application's project file: + + \snippet doc/src/snippets/code/src_corelib_io_qfile.cpp 4 +*/ +bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags) +{ Q_D(QFile); if (isOpen()) { qWarning("QFile::open: File (%s) already open", qPrintable(fileName())); @@ -1072,7 +1150,7 @@ bool QFile::open(FILE *fh, OpenMode mode) qWarning("QFile::open: File access not specified"); return false; } - if(d->openExternalFile(mode, fh)) { + if (d->openExternalFile(mode, fh, handleFlags)) { QIODevice::open(mode); if (mode & Append) { seek(size()); @@ -1118,8 +1196,44 @@ bool QFile::open(FILE *fh, OpenMode mode) \sa close() */ +// ### Qt5: merge this into new overload with a default parameter bool QFile::open(int fd, OpenMode mode) { + return open(fd, mode, DontCloseHandle); +} + +/*! + \overload + + Opens the existing file descriptor \a fd in the given \a mode. + Returns true if successful; otherwise returns false. + + When a QFile is opened using this function, behaviour of close() is + controlled by the AutoCloseHandle flag. + If AutoCloseHandle is specified, and this function succeeds, + then calling close() closes the adopted handle. + Otherwise, close() does not actually close the file, but only flushes it. + + The QFile that is opened using this function is automatically set + to be in raw mode; this means that the file input/output functions + are slow. If you run into performance issues, you should try to + use one of the other open functions. + + \warning If \a fd is not a regular file, e.g, it is 0 (\c stdin), + 1 (\c stdout), or 2 (\c stderr), you may not be able to seek(). In + those cases, size() returns \c 0. See QIODevice::isSequential() + for more information. + + \warning For Windows CE you may not be able to call seek(), setSize(), + fileTime(). size() returns \c 0. + + \warning Since this function opens the file without specifying the file name, + you cannot use this QFile with a QFileInfo. + + \sa close() +*/ +bool QFile::open(int fd, OpenMode mode, FileHandleFlags handleFlags) +{ Q_D(QFile); if (isOpen()) { qWarning("QFile::open: File (%s) already open", qPrintable(fileName())); @@ -1132,7 +1246,7 @@ bool QFile::open(int fd, OpenMode mode) qWarning("QFile::open: File access not specified"); return false; } - if(d->openExternalFile(mode, fd)) { + if (d->openExternalFile(mode, fd, handleFlags)) { QIODevice::open(mode); if (mode & Append) { seek(size()); @@ -1146,6 +1260,63 @@ bool QFile::open(int fd, OpenMode mode) return false; } +#ifdef Q_OS_SYMBIAN +/*! + \overload + + Opens the existing file object \a f in the given \a mode. + Returns true if successful; otherwise returns false. + + When a QFile is opened using this function, behaviour of close() is + controlled by the AutoCloseHandle flag. + If AutoCloseHandle is specified, and this function succeeds, + then calling close() closes the adopted handle. + Otherwise, close() does not actually close the file, but only flushes it. + + \warning If the file handle is adopted from another process, + you may not be able to use this QFile with a QFileInfo. + + \sa close() +*/ +bool QFile::open(const RFile &f, OpenMode mode, FileHandleFlags handleFlags) +{ + Q_D(QFile); + if (isOpen()) { + qWarning("QFile::open: File (%s) already open", qPrintable(fileName())); + return false; + } + if (mode & Append) + mode |= WriteOnly; + unsetError(); + if ((mode & (ReadOnly | WriteOnly)) == 0) { + qWarning("QFile::open: File access not specified"); + return false; + } + if (d->openExternalFile(mode, f, handleFlags)) { + bool ok = QIODevice::open(mode); + if (ok) { + if (mode & Append) { + ok = seek(size()); + } else { + qint64 pos = 0; + TInt err; +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + err = static_cast(f).Seek(ESeekCurrent, pos); +#else + TInt pos32 = 0; + err = f.Seek(ESeekCurrent, pos32); + pos = pos32; +#endif + ok = ok && (err == KErrNone); + ok = ok && seek(pos); + } + } + return ok; + } + return false; +} +#endif + /*! Returns the file handle of the file. diff --git a/src/corelib/io/qfile.h b/src/corelib/io/qfile.h index 212576c..fa9e5aa 100644 --- a/src/corelib/io/qfile.h +++ b/src/corelib/io/qfile.h @@ -45,6 +45,9 @@ #include #include #include +#ifdef Q_OS_SYMBIAN +#include +#endif #ifdef open #error qfile.h must be included before any header file that defines open @@ -97,6 +100,12 @@ public: }; Q_DECLARE_FLAGS(Permissions, Permission) + enum FileHandleFlag { + AutoCloseHandle = 0x0001, + DontCloseHandle = 0 + }; + Q_DECLARE_FLAGS(FileHandleFlags, FileHandleFlag) + QFile(); QFile(const QString &name); #ifndef QT_NO_QOBJECT @@ -145,6 +154,11 @@ public: bool open(OpenMode flags); bool open(FILE *f, OpenMode flags); bool open(int fd, OpenMode flags); +#ifdef Q_OS_SYMBIAN + bool open(const RFile &f, OpenMode flags, FileHandleFlags handleFlags = DontCloseHandle); +#endif + bool open(FILE *f, OpenMode ioFlags, FileHandleFlags handleFlags); + bool open(int fd, OpenMode ioFlags, FileHandleFlags handleFlags); virtual void close(); qint64 size() const; diff --git a/src/corelib/io/qfile_p.h b/src/corelib/io/qfile_p.h index cf76c09..085bbf0 100644 --- a/src/corelib/io/qfile_p.h +++ b/src/corelib/io/qfile_p.h @@ -67,8 +67,11 @@ protected: QFilePrivate(); ~QFilePrivate(); - bool openExternalFile(int flags, int fd); - bool openExternalFile(int flags, FILE *fh); + bool openExternalFile(int flags, int fd, QFile::FileHandleFlags handleFlags); + bool openExternalFile(int flags, FILE *fh, QFile::FileHandleFlags handleFlags); +#ifdef Q_OS_SYMBIAN + bool openExternalFile(int flags, const RFile& f, QFile::FileHandleFlags handleFlags); +#endif QString fileName; mutable QAbstractFileEngine *fileEngine; diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index ae301f7..f1d3db5 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -230,6 +230,11 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode) */ bool QFSFileEngine::open(QIODevice::OpenMode openMode, FILE *fh) { + return open(openMode, fh, QFile::DontCloseHandle); +} + +bool QFSFileEngine::open(QIODevice::OpenMode openMode, FILE *fh, QFile::FileHandleFlags handleFlags) +{ Q_D(QFSFileEngine); // Append implies WriteOnly. @@ -242,7 +247,7 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode, FILE *fh) d->openMode = openMode; d->lastFlushFailed = false; - d->closeFileHandle = false; + d->closeFileHandle = (handleFlags & QFile::AutoCloseHandle); d->fileEntry.clear(); d->tried_stat = 0; d->fd = -1; @@ -286,6 +291,11 @@ bool QFSFileEnginePrivate::openFh(QIODevice::OpenMode openMode, FILE *fh) */ bool QFSFileEngine::open(QIODevice::OpenMode openMode, int fd) { + return open(openMode, fd, QFile::DontCloseHandle); +} + +bool QFSFileEngine::open(QIODevice::OpenMode openMode, int fd, QFile::FileHandleFlags handleFlags) +{ Q_D(QFSFileEngine); // Append implies WriteOnly. @@ -298,7 +308,7 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode, int fd) d->openMode = openMode; d->lastFlushFailed = false; - d->closeFileHandle = false; + d->closeFileHandle = (handleFlags & QFile::AutoCloseHandle); d->fileEntry.clear(); d->fh = 0; d->fd = -1; diff --git a/src/corelib/io/qfsfileengine.h b/src/corelib/io/qfsfileengine.h index 6b077ed..73c8c77 100644 --- a/src/corelib/io/qfsfileengine.h +++ b/src/corelib/io/qfsfileengine.h @@ -43,6 +43,9 @@ #define QFSFILEENGINE_H #include +#ifdef Q_OS_SYMBIAN +#include +#endif #ifndef QT_NO_FSFILEENGINE @@ -101,6 +104,11 @@ public: //FS only!! bool open(QIODevice::OpenMode flags, int fd); + bool open(QIODevice::OpenMode flags, int fd, QFile::FileHandleFlags handleFlags); + bool open(QIODevice::OpenMode flags, FILE *fh, QFile::FileHandleFlags handleFlags); +#ifdef Q_OS_SYMBIAN + bool open(QIODevice::OpenMode flags, const RFile &f, QFile::FileHandleFlags handleFlags); +#endif static bool setCurrentPath(const QString &path); static QString currentPath(const QString &path = QString()); static QString homePath(); diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 1e1b35b..d0350f0 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -251,6 +251,65 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode) closeFileHandle = true; return true; } + +bool QFSFileEngine::open(QIODevice::OpenMode openMode, const RFile &file, QFile::FileHandleFlags handleFlags) +{ + Q_D(QFSFileEngine); + + // Append implies WriteOnly. + if (openMode & QFile::Append) + openMode |= QFile::WriteOnly; + + // WriteOnly implies Truncate if neither ReadOnly nor Append are sent. + if ((openMode & QFile::WriteOnly) && !(openMode & (QFile::ReadOnly | QFile::Append))) + openMode |= QFile::Truncate; + + d->openMode = openMode; + d->lastFlushFailed = false; + d->closeFileHandle = (handleFlags & QFile::AutoCloseHandle); + d->fileEntry.clear(); + d->fh = 0; + d->fd = -1; + d->tried_stat = 0; + +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + //RFile64 adds only functions to RFile, no data members + d->symbianFile = static_cast(file); +#else + d->symbianFile = file; +#endif + TInt ret; + d->symbianFilePos = 0; + if (openMode & QFile::Append) { + // Seek to the end when in Append mode. + ret = d->symbianFile.Size(d->symbianFilePos); + } else { + // Seek to current otherwise + ret = d->symbianFile.Seek(ESeekCurrent, d->symbianFilePos); + } + + if (ret != KErrNone) { + setError(QFile::OpenError, QSystemError(ret, QSystemError::NativeError).toString()); + + d->openMode = QIODevice::NotOpen; +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + d->symbianFile = RFile64(); +#else + d->symbianFile = RFile(); +#endif + return false; + } + + // Extract filename (best effort) + TFileName fn; + TInt err = d->symbianFile.FullName(fn); + if (err == KErrNone) + d->fileEntry = QFileSystemEntry(qt_TDesC2QString(fn), QFileSystemEntry::FromNativePath()); + else + d->fileEntry.clear(); + + return true; +} #else /*! \internal -- cgit v0.12 From 09317dda494a51d101723131c5a01af4149ac5de Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 20 Dec 2010 13:04:23 +0100 Subject: Micro-optimization for QSpanData::setup() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don't call QColor::rgba() in a macro arg that gets evaluated multiple times. Reviewed-by: Samuel Rødal --- src/gui/painting/qpaintengine_raster.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 97dfddf..3186749 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -5152,7 +5152,8 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode case Qt::SolidPattern: { type = Solid; QColor c = qbrush_color(brush); - solid.color = PREMUL(ARGB_COMBINE_ALPHA(c.rgba(), alpha)); + QRgb rgba = c.rgba(); + solid.color = PREMUL(ARGB_COMBINE_ALPHA(rgba, alpha)); if ((solid.color & 0xff000000) == 0 && compositionMode == QPainter::CompositionMode_SourceOver) { type = None; -- cgit v0.12 From 48e7c71d1165f0c60f56e0b769b35df2658e8e96 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 20 Dec 2010 13:05:27 +0100 Subject: Make the QRasterPaintEngineState copy constructor cheaper. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use initializer syntax to avoid default-constructing a throwaway QBrush and QPen. Reviewed-by: Samuel Rødal --- src/gui/painting/qpaintengine_raster.cpp | 34 ++++++++++++-------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 3186749..7fc90b8 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -662,31 +662,23 @@ QRasterPaintEngineState::QRasterPaintEngineState() QRasterPaintEngineState::QRasterPaintEngineState(QRasterPaintEngineState &s) : QPainterState(s) + , stroker(s.stroker) + , lastBrush(s.lastBrush) + , brushData(s.brushData) + , lastPen(s.lastPen) + , penData(s.penData) + , fillFlags(s.fillFlags) + , strokeFlags(s.strokeFlags) + , pixmapFlags(s.pixmapFlags) + , intOpacity(s.intOpacity) + , txscale(s.txscale) + , flag_bits(s.flag_bits) + , clip(s.clip) + , dirty(s.dirty) { - stroker = s.stroker; - - lastBrush = s.lastBrush; - brushData = s.brushData; brushData.tempImage = 0; - - lastPen = s.lastPen; - penData = s.penData; penData.tempImage = 0; - - fillFlags = s.fillFlags; - strokeFlags = s.strokeFlags; - pixmapFlags = s.pixmapFlags; - - intOpacity = s.intOpacity; - - txscale = s.txscale; - - flag_bits = s.flag_bits; - - clip = s.clip; flags.has_clip_ownership = false; - - dirty = s.dirty; } /*! -- cgit v0.12 From 0189fc2335c891373ce595a4a01e4a9d73cc5fe4 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Sun, 12 Dec 2010 17:33:12 +0100 Subject: Move advances for control character in Indic syllable shaping When handling control characters (ZWJ, ZWNJ) in Indic syllables, we only moved glyphs and attributes of the item, advances should also be moved forward, otherwise we will use the advance of ZWJ/ ZWNJ for the part of syllable, which is normally zero, it results some positioning problems. Task-number: QTBUG-14204 Reviewed-by: Lars Knoll --- src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp | 1 + tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp index 4a618da..bbf479e 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp @@ -1683,6 +1683,7 @@ static bool indic_shape_syllable(HB_Bool openType, HB_ShaperItem *item, bool inv } item->glyphs[j] = item->glyphs[i]; item->attributes[j] = item->attributes[i]; + item->advances[j] = item->advances[i]; ++i; ++j; } diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp index 0a7458f..b0b6b1e 100644 --- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp @@ -103,6 +103,7 @@ private slots: void khmer(); void linearB(); + void controlInSyllable_qtbug14204(); }; tst_QTextScriptEngine::tst_QTextScriptEngine() @@ -1111,6 +1112,22 @@ void tst_QTextScriptEngine::greek() #endif } +void tst_QTextScriptEngine::controlInSyllable_qtbug14204() +{ + QString s; + s.append(QChar(0x0915)); + s.append(QChar(0x094d)); + s.append(QChar(0x200d)); + s.append(QChar(0x0915)); + + QTextLayout layout(s); + QTextEngine *e = layout.d; + e->itemize(); + e->shape(0); + + QVERIFY(e->layoutData->items[0].num_glyphs == 2); + QVERIFY(e->layoutData->glyphLayout.advances_x[1] != 0); +} QTEST_MAIN(tst_QTextScriptEngine) #include "tst_qtextscriptengine.moc" -- cgit v0.12 From ad0841dfd89d08140b719098ecfec82881df63e6 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Tue, 14 Dec 2010 18:18:35 +0100 Subject: Disable certain GPOS features by default According to OpenType Layout tag registry, these features should be turned off by default. Leaving them on will cause some text layout problems in common UI widgets -- they are usually designed for better positioning in print publishing or full featured text layout programs, not for general usage. There is no way to turn them on in HarfBuzz now, it should be addressed later. Features like 'valt' are intended for vertical writing mode are also turned off, since HarfBuzz doesn't support it properly yet. Task-number: QTBUG-15754 Reviewed-by: Lars Knoll --- src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp | 41 +++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp index ce4d4ac..ef86144 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp @@ -538,8 +538,20 @@ void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item) #ifndef NO_OPENTYPE static const HB_OpenTypeFeature basic_features[] = { { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty }, - { HB_MAKE_TAG('l', 'i', 'g', 'a'), CcmpProperty }, - { HB_MAKE_TAG('c', 'l', 'i', 'g'), CcmpProperty }, + { HB_MAKE_TAG('l', 'i', 'g', 'a'), LigaProperty }, + { HB_MAKE_TAG('c', 'l', 'i', 'g'), CligProperty }, + {0, 0} +}; + +static const HB_OpenTypeFeature disabled_features[] = { + { HB_MAKE_TAG('c', 'p', 'c', 't'), PositioningProperties }, + { HB_MAKE_TAG('h', 'a', 'l', 't'), PositioningProperties }, + // TODO: we need to add certain HB_ShaperFlag for vertical + // writing mode to enable these vertical writing features: + { HB_MAKE_TAG('v', 'a', 'l', 't'), PositioningProperties }, + { HB_MAKE_TAG('v', 'h', 'a', 'l'), PositioningProperties }, + { HB_MAKE_TAG('v', 'k', 'r', 'n'), PositioningProperties }, + { HB_MAKE_TAG('v', 'p', 'a', 'l'), PositioningProperties }, {0, 0} }; #endif @@ -1110,12 +1122,29 @@ HB_Bool HB_SelectScript(HB_ShaperItem *shaper_item, const HB_OpenTypeFeature *fe HB_UInt *feature_tag_list = feature_tag_list_buffer; while (*feature_tag_list) { HB_UShort feature_index; + bool skip = false; if (*feature_tag_list == HB_MAKE_TAG('k', 'e', 'r', 'n')) { - if (face->current_flags & HB_ShaperFlag_NoKerning) { - ++feature_tag_list; - continue; + if (face->current_flags & HB_ShaperFlag_NoKerning) + skip = true; + else + face->has_opentype_kerning = true; + } + features = disabled_features; + while (features->tag) { + if (*feature_tag_list == features->tag) { + skip = true; + break; } - face->has_opentype_kerning = true; + ++features; + } + // 'palt' should be turned off by default unless 'kern' is on + if (!face->has_opentype_kerning && + *feature_tag_list == HB_MAKE_TAG('p', 'a', 'l', 't')) + skip = true; + + if (skip) { + ++feature_tag_list; + continue; } error = HB_GPOS_Select_Feature(face->gpos, *feature_tag_list, script_index, 0xffff, &feature_index); if (!error) -- cgit v0.12 From daba2c507ad42c66dafa6a29cffa94e9641e0c58 Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Mon, 20 Dec 2010 14:26:39 +0100 Subject: Delay creation of the process manager The *nix process manager would create a pipe on every startup. In order to improve startup speed, the QProcessManager is now created when first needed. Reviewed-by: Robert Griebl --- src/corelib/io/qprocess_unix.cpp | 30 ++++++++++++++++++++++++++---- src/corelib/kernel/qcoreapplication.cpp | 18 ++++++++++++------ src/corelib/kernel/qcoreapplication.h | 1 + src/corelib/kernel/qcoreapplication_p.h | 2 ++ 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index 216c382..e52d132 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -169,17 +169,27 @@ private: Q_GLOBAL_STATIC(QMutex, processManagerGlobalMutex) -static QProcessManager *processManager() { +static QProcessManager *processManagerInstance = 0; + +static QProcessManager *processManager() +{ // The constructor of QProcessManager should be called only once // so we cannot use Q_GLOBAL_STATIC directly for QProcessManager QMutex *mutex = processManagerGlobalMutex(); QMutexLocker locker(mutex); - static QProcessManager processManager; - return &processManager; + + if (!processManagerInstance) + QProcessPrivate::initializeProcessManager(); + + Q_ASSERT(processManagerInstance); + return processManagerInstance; } QProcessManager::QProcessManager() { + // can only be called from main thread + Q_ASSERT(!qApp || qApp->thread() == QThread::currentThread()); + #if defined (QPROCESS_DEBUG) qDebug() << "QProcessManager::QProcessManager()"; #endif @@ -198,6 +208,8 @@ QProcessManager::QProcessManager() ::sigaction(SIGCHLD, &action, &oldAction); if (oldAction.sa_handler != qt_sa_sigchld_handler) qt_sa_old_sigchld_handler = oldAction.sa_handler; + + processManagerInstance = this; } QProcessManager::~QProcessManager() @@ -226,6 +238,8 @@ QProcessManager::~QProcessManager() if (oldAction.sa_handler != qt_sa_sigchld_handler) { ::sigaction(SIGCHLD, &oldAction, 0); } + + processManagerInstance = 0; } void QProcessManager::run() @@ -1289,7 +1303,15 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a void QProcessPrivate::initializeProcessManager() { - (void) processManager(); + if (qApp && qApp->thread() != QThread::currentThread()) { + // The process manager must be initialized in the main thread + // Note: The call below will re-enter this function, but in the right thread, + // so the else statement below will be executed. + QMetaObject::invokeMethod(qApp, "_q_initializeProcessManager", Qt::BlockingQueuedConnection); + } else { + static QProcessManager processManager; + Q_UNUSED(processManager); + } } QT_END_NAMESPACE diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 0f95ee0..799433b 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -336,6 +336,16 @@ void QCoreApplicationPrivate::createEventDispatcher() #endif } +void QCoreApplicationPrivate::_q_initializeProcessManager() +{ +#ifndef QT_NO_PROCESS +# ifdef Q_OS_UNIX + QProcessPrivate::initializeProcessManager(); +# endif +#endif +} + + QThread *QCoreApplicationPrivate::theMainThread = 0; QThread *QCoreApplicationPrivate::mainThread() { @@ -600,12 +610,6 @@ void QCoreApplication::init() } #endif -#if defined(Q_OS_UNIX) && !(defined(QT_NO_PROCESS)) - // Make sure the process manager thread object is created in the main - // thread. - QProcessPrivate::initializeProcessManager(); -#endif - #ifdef QT_EVAL extern void qt_core_eval_init(uint); qt_core_eval_init(d->application_type); @@ -2666,3 +2670,5 @@ int QCoreApplication::loopLevel() */ QT_END_NAMESPACE + +#include "moc_qcoreapplication.cpp" diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index f1c7c26..17e784e 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -205,6 +205,7 @@ protected: QCoreApplication(QCoreApplicationPrivate &p); private: + Q_PRIVATE_SLOT(d_func(), void _q_initializeProcessManager()) static bool sendSpontaneousEvent(QObject *receiver, QEvent *event); bool notifyInternal(QObject *receiver, QEvent *event); diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index 2355c37..aafa821 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -82,6 +82,8 @@ public: bool sendThroughObjectEventFilters(QObject *, QEvent *); bool notify_helper(QObject *, QEvent *); + void _q_initializeProcessManager(); + virtual QString appName() const; virtual void createEventDispatcher(); static void removePostedEvent(QEvent *); -- cgit v0.12 From d9dbdb1afde441c8ab87f42b4a5e0e29ad54480c Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Mon, 20 Dec 2010 14:05:53 +0100 Subject: Fixed QStatusBar not to repaint itself too early When the toplevel containing a statusbar is initially shown, QStatusBar will repaint itself way too early - repaint() is called from the LayoutRequest event causing a whole window repaint before the window was resized to the proper size. This caused Qt Creator to paint itself in small size in a maximized window on its startup. Task-number: QTBUG-14547 Reviewed-by: Olivier Goffart --- src/gui/widgets/qstatusbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/qstatusbar.cpp b/src/gui/widgets/qstatusbar.cpp index c88d2a1..c60913e 100644 --- a/src/gui/widgets/qstatusbar.cpp +++ b/src/gui/widgets/qstatusbar.cpp @@ -575,7 +575,7 @@ void QStatusBar::reformat() d->savedStrut = maxH; vbox->addSpacing(2); d->box->activate(); - repaint(); + update(); } /*! -- cgit v0.12 From cb44818623d10d5d6a9f49ddf5651351ebe55f67 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Mon, 20 Dec 2010 14:40:51 +0100 Subject: Fix the redirection of painting for the toolbar. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-16154 Reviewed-by: Samuel Rødal --- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index ace0a46..02ba8db 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -83,11 +83,11 @@ void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &of widget->d_func()->unifiedSurface = this; widget->d_func()->isInUnifiedToolbar = true; widget->d_func()->toolbar_offset = offset; - } - } - for (int i = 0; i < object->children().size(); ++i) { - recursiveRedirect(object->children().at(i), offset); + for (int i = 0; i < object->children().size(); ++i) { + recursiveRedirect(object->children().at(i), offset); + } + } } } } -- cgit v0.12 From e679392978c21266ec0bf6f960ab8c5f0621e18b Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Thu, 30 Sep 2010 17:29:40 +0200 Subject: Add QElapsedTimer::nsecsElapsed() const Allow sub-millisecond resolution on systems where it is possible. On UNIX, with monotonic clock support we get full nanosecond resolution, microsecond otherwise. On Windows we convert the performance counters to nanoseconds if availble, otherwise we only have millisecond resolution. On Mac, the mach time is converted to nanoseconds. On Symbian, we have microsecond resolution. Reviewed-by: joao --- src/corelib/tools/qelapsedtimer.h | 1 + src/corelib/tools/qelapsedtimer_generic.cpp | 16 ++++++++++++++++ src/corelib/tools/qelapsedtimer_mac.cpp | 6 ++++++ src/corelib/tools/qelapsedtimer_symbian.cpp | 22 +++++++++++----------- src/corelib/tools/qelapsedtimer_unix.cpp | 11 +++++++++++ src/corelib/tools/qelapsedtimer_win.cpp | 20 +++++++++++++------- tests/auto/qelapsedtimer/tst_qelapsedtimer.cpp | 7 ++++++- 7 files changed, 64 insertions(+), 19 deletions(-) diff --git a/src/corelib/tools/qelapsedtimer.h b/src/corelib/tools/qelapsedtimer.h index b996f6a..4118389 100644 --- a/src/corelib/tools/qelapsedtimer.h +++ b/src/corelib/tools/qelapsedtimer.h @@ -68,6 +68,7 @@ public: void invalidate(); bool isValid() const; + qint64 nsecsElapsed() const; qint64 elapsed() const; bool hasExpired(qint64 timeout) const; diff --git a/src/corelib/tools/qelapsedtimer_generic.cpp b/src/corelib/tools/qelapsedtimer_generic.cpp index 85986e6..740f496 100644 --- a/src/corelib/tools/qelapsedtimer_generic.cpp +++ b/src/corelib/tools/qelapsedtimer_generic.cpp @@ -103,6 +103,22 @@ qint64 QElapsedTimer::restart() return t1 - old; } +/*! \since 4.8 + + Returns the number of nanoseconds since this QElapsedTimer was last + started. Calling this function in a QElapsedTimer that was invalidated + will result in undefined results. + + On platforms that do not provide nanosecond resolution, the value returned + will be the best estimate available. + + \sa start(), restart(), hasExpired(), invalidate() +*/ +qint64 QElapsedTimer::nsecsElapsed() const +{ + return elapsed() * 1000000; +} + /*! Returns the number of milliseconds since this QElapsedTimer was last started. Calling this function in a QElapsedTimer that was invalidated diff --git a/src/corelib/tools/qelapsedtimer_mac.cpp b/src/corelib/tools/qelapsedtimer_mac.cpp index 8fceb49..e51f8b3 100644 --- a/src/corelib/tools/qelapsedtimer_mac.cpp +++ b/src/corelib/tools/qelapsedtimer_mac.cpp @@ -97,6 +97,12 @@ qint64 QElapsedTimer::restart() return absoluteToMSecs(t1 - old); } +qint64 QElapsedTimer::nsecsElapsed() const +{ + uint64_t cpu_time = mach_absolute_time(); + return absoluteToNSecs(cpu_time - t1); +} + qint64 QElapsedTimer::elapsed() const { uint64_t cpu_time = mach_absolute_time(); diff --git a/src/corelib/tools/qelapsedtimer_symbian.cpp b/src/corelib/tools/qelapsedtimer_symbian.cpp index 038b102..7cd5f1e 100644 --- a/src/corelib/tools/qelapsedtimer_symbian.cpp +++ b/src/corelib/tools/qelapsedtimer_symbian.cpp @@ -64,11 +64,6 @@ static quint64 getMicrosecondFromTick() return nanokernel_tick_period * (val | (quint64(highdword) << 32)); } -static quint64 getMillisecondFromTick() -{ - return getMicrosecondFromTick() / 1000; -} - timeval qt_gettime() { timeval tv; @@ -91,36 +86,41 @@ bool QElapsedTimer::isMonotonic() void QElapsedTimer::start() { - t1 = getMillisecondFromTick(); + t1 = getMicrosecondFromTick(); t2 = 0; } qint64 QElapsedTimer::restart() { qint64 oldt1 = t1; - t1 = getMillisecondFromTick(); + t1 = getMicrosecondFromTick(); t2 = 0; return t1 - oldt1; } +qint64 QElapsedTimer::nsecsElapsed() const +{ + return (getMicrosecondFromTick() - t1) * 1000; +} + qint64 QElapsedTimer::elapsed() const { - return getMillisecondFromTick() - t1; + return (getMicrosecondFromTick() - t1) / 1000; } qint64 QElapsedTimer::msecsSinceReference() const { - return t1; + return t1 / 1000; } qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const { - return other.t1 - t1; + return (other.t1 - t1) / 1000; } qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const { - return msecsTo(other) / 1000; + return msecsTo(other) / 1000000; } bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2) diff --git a/src/corelib/tools/qelapsedtimer_unix.cpp b/src/corelib/tools/qelapsedtimer_unix.cpp index 633fa00..7407e1b 100644 --- a/src/corelib/tools/qelapsedtimer_unix.cpp +++ b/src/corelib/tools/qelapsedtimer_unix.cpp @@ -167,6 +167,17 @@ qint64 QElapsedTimer::restart() return elapsedAndRestart(t1, t2, &t1, &t2); } +qint64 QElapsedTimer::nsecsElapsed() const +{ + qint64 sec, frac; + do_gettime(&sec, &frac); + sec = sec - t1; + frac = frac - t2; + if (!monotonicClockAvailable) + frac *= 1000; + return sec * Q_INT64_C(1000000000) + frac; +} + qint64 QElapsedTimer::elapsed() const { qint64 sec, frac; diff --git a/src/corelib/tools/qelapsedtimer_win.cpp b/src/corelib/tools/qelapsedtimer_win.cpp index c77acaa..3f4acc1 100644 --- a/src/corelib/tools/qelapsedtimer_win.cpp +++ b/src/corelib/tools/qelapsedtimer_win.cpp @@ -79,14 +79,14 @@ static void resolveLibs() done = true; } -static inline qint64 ticksToMilliseconds(qint64 ticks) +static inline qint64 ticksToNanoseconds(qint64 ticks) { if (counterFrequency > 0) { // QueryPerformanceCounter uses an arbitrary frequency - return ticks * 1000 / counterFrequency; + return ticks * 1000000000 / counterFrequency; } else { // GetTickCount(64) return milliseconds - return ticks; + return ticks * 1000000; } } @@ -144,24 +144,30 @@ qint64 QElapsedTimer::restart() qint64 oldt1 = t1; t1 = getTickCount(); t2 = 0; - return ticksToMilliseconds(t1 - oldt1); + return ticksToNanoseconds(t1 - oldt1) / 1000000; +} + +qint64 QElapsedTimer::nsecsElapsed() const +{ + qint64 elapsed = getTickCount() - t1; + return ticksToNanoseconds(elapsed); } qint64 QElapsedTimer::elapsed() const { qint64 elapsed = getTickCount() - t1; - return ticksToMilliseconds(elapsed); + return ticksToNanoseconds(elapsed) / 1000000; } qint64 QElapsedTimer::msecsSinceReference() const { - return ticksToMilliseconds(t1); + return ticksToNanoseconds(t1) / 1000000; } qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const { qint64 difference = other.t1 - t1; - return ticksToMilliseconds(difference); + return ticksToNanoseconds(difference) / 1000000; } qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const diff --git a/tests/auto/qelapsedtimer/tst_qelapsedtimer.cpp b/tests/auto/qelapsedtimer/tst_qelapsedtimer.cpp index 87df57d..bc61f52 100644 --- a/tests/auto/qelapsedtimer/tst_qelapsedtimer.cpp +++ b/tests/auto/qelapsedtimer/tst_qelapsedtimer.cpp @@ -122,11 +122,13 @@ void tst_QElapsedTimer::basics() quint64 value1 = t1.msecsSinceReference(); qDebug() << value1 << t1; + qint64 nsecs = t1.nsecsElapsed(); qint64 elapsed = t1.restart(); QVERIFY(elapsed < minResolution); + QVERIFY(nsecs / 1000000 < minResolution); quint64 value2 = t1.msecsSinceReference(); - qDebug() << value2 << t1 << elapsed; + qDebug() << value2 << t1 << elapsed << nsecs; // in theory, elapsed == value2 - value1 // However, since QElapsedTimer keeps internally the full resolution, @@ -150,7 +152,10 @@ void tst_QElapsedTimer::elapsed() // don't check: t1.secsTo(t2) // QVERIFY(t1 - t2 < 0); + QVERIFY(t1.nsecsElapsed() > 0); QVERIFY(t1.elapsed() > 0); + // the number of elapsed nanoseconds and milliseconds should match + QVERIFY(t1.nsecsElapsed() - t1.elapsed() * 1000000 < 1000000); QVERIFY(t1.hasExpired(minResolution)); QVERIFY(!t1.hasExpired(8*minResolution)); QVERIFY(!t2.hasExpired(minResolution)); -- cgit v0.12 From df5403e48df3ab57924a6b85d9cbaa95e3c5e766 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Thu, 16 Sep 2010 10:36:22 +0200 Subject: Removed QMutexPrivate::self() declaration This function is not used or implemented anywhere. Reviewed-by: joao --- src/corelib/thread/qmutex_p.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index 6126423..57a6062 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -65,7 +65,6 @@ public: QMutexPrivate(QMutex::RecursionMode mode); ~QMutexPrivate(); - ulong self(); bool wait(int timeout = -1); void wakeUp(); -- cgit v0.12 From 33b015ae5fe561e48130b07e1ae320131cec3505 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Tue, 28 Sep 2010 11:39:17 +0200 Subject: Add a benchmark for contended and uncontended QMutex performance This benchmark also includes the same benchmark for the native type for comparison. Reviewed-by: joao --- tests/benchmarks/corelib/thread/qmutex/qmutex.pro | 2 +- .../corelib/thread/qmutex/tst_qmutex.cpp | 272 ++++++++++++++++++++- 2 files changed, 261 insertions(+), 13 deletions(-) diff --git a/tests/benchmarks/corelib/thread/qmutex/qmutex.pro b/tests/benchmarks/corelib/thread/qmutex/qmutex.pro index eda2f11..8fda5fa 100644 --- a/tests/benchmarks/corelib/thread/qmutex/qmutex.pro +++ b/tests/benchmarks/corelib/thread/qmutex/qmutex.pro @@ -1,6 +1,6 @@ load(qttest_p4) TEMPLATE = app TARGET = tst_bench_qmutex - +QT -= gui SOURCES += tst_qmutex.cpp diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index fded508..9ed5d55 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -39,34 +39,85 @@ ** ****************************************************************************/ -#include -#include +#include +#include #include -//TESTED_FILES= +#ifdef Q_OS_UNIX +# include +# include +typedef pthread_mutex_t NativeMutexType; +void NativeMutexInitialize(NativeMutexType *mutex) +{ + pthread_mutex_init(mutex, NULL); +} +void NativeMutexDestroy(NativeMutexType *mutex) +{ + pthread_mutex_destroy(mutex); +} +void NativeMutexLock(NativeMutexType *mutex) +{ + pthread_mutex_lock(mutex); +} +void NativeMutexUnlock(NativeMutexType *mutex) +{ + pthread_mutex_unlock(mutex); +} +#elif defined(Q_OS_WIN) +# define _WIN32_WINNT 0x0400 +# include +typedef CRITICAL_SECTION NativeMutexType; +void NativeMutexInitialize(NativeMutexType *mutex) +{ + InitializeCriticalSection(mutex); +} +void NativeMutexDestroy(NativeMutexType *mutex) +{ + DeleteCriticalSection(mutex); +} +void NativeMutexLock(NativeMutexType *mutex) +{ + EnterCriticalSection(mutex); +} +void NativeMutexUnlock(NativeMutexType *mutex) +{ + LeaveCriticalSection(mutex); +} +#endif +//TESTED_FILES= class tst_QMutex : public QObject { Q_OBJECT + int threadCount; + public: - tst_QMutex(); - virtual ~tst_QMutex(); + tst_QMutex() + { + // at least 2 threads, even on single cpu/core machines + threadCount = qMax(2, QThread::idealThreadCount()); + qDebug("thread count: %d", threadCount); + } private slots: void noThread_data(); void noThread(); -}; -tst_QMutex::tst_QMutex() -{ -} + void uncontendedNative(); + void uncontendedQMutex(); + void uncontendedQMutexLocker(); -tst_QMutex::~tst_QMutex() -{ -} + void contendedNative_data(); + void contendedQMutex_data() { contendedNative_data(); } + void contendedQMutexLocker_data() { contendedNative_data(); } + + void contendedNative(); + void contendedQMutex(); + void contendedQMutexLocker(); +}; void tst_QMutex::noThread_data() { @@ -127,5 +178,202 @@ void tst_QMutex::noThread() QCOMPARE(int(count), N); } +void tst_QMutex::uncontendedNative() +{ + NativeMutexType mutex; + NativeMutexInitialize(&mutex); + QBENCHMARK { + NativeMutexLock(&mutex); + NativeMutexUnlock(&mutex); + } + NativeMutexDestroy(&mutex); +} + +void tst_QMutex::uncontendedQMutex() +{ + QMutex mutex; + QBENCHMARK { + mutex.lock(); + mutex.unlock(); + } +} + +void tst_QMutex::uncontendedQMutexLocker() +{ + QMutex mutex; + QBENCHMARK { + QMutexLocker locker(&mutex); + } +} + +void tst_QMutex::contendedNative_data() +{ + QTest::addColumn("iterations"); + QTest::addColumn("msleepDuration"); + QTest::newRow("-1") << 100 << -1; + QTest::newRow("0") << 100 << 0; + QTest::newRow("1") << 10 << 1; + QTest::newRow("2") << 10 << 2; +} + +class NativeMutexThread : public QThread +{ + QSemaphore *semaphore1, *semaphore2; + NativeMutexType *mutex; + int iterations, msleepDuration; +public: + bool done; + NativeMutexThread(QSemaphore *semaphore1, QSemaphore *semaphore2, NativeMutexType *mutex, int iterations, int msleepDuration) + : semaphore1(semaphore1), semaphore2(semaphore2), mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + { } + void run() { + forever { + semaphore1->acquire(); + if (done) + break; + for (int i = 0; i < iterations; ++i) { + NativeMutexLock(mutex); + if (msleepDuration >= 0) + msleep(msleepDuration); + NativeMutexUnlock(mutex); + } + semaphore2->release(); + } + } +}; + +void tst_QMutex::contendedNative() +{ + QFETCH(int, iterations); + QFETCH(int, msleepDuration); + + QSemaphore semaphore1, semaphore2; + NativeMutexType mutex; + NativeMutexInitialize(&mutex); + + QVector threads(threadCount); + for (int i = 0; i < threads.count(); ++i) { + threads[i] = new NativeMutexThread(&semaphore1, &semaphore2, &mutex, iterations, msleepDuration); + threads[i]->start(); + } + + QBENCHMARK { + semaphore1.release(threadCount); + semaphore2.acquire(threadCount); + } + + for (int i = 0; i < threads.count(); ++i) + threads[i]->done = true; + semaphore1.release(threadCount); + for (int i = 0; i < threads.count(); ++i) + threads[i]->wait(); + qDeleteAll(threads); + + NativeMutexDestroy(&mutex); +} + +class QMutexThread : public QThread +{ + QSemaphore *semaphore1, *semaphore2; + QMutex *mutex; + int iterations, msleepDuration; +public: + bool done; + QMutexThread(QSemaphore *semaphore1, QSemaphore *semaphore2, QMutex *mutex, int iterations, int msleepDuration) + : semaphore1(semaphore1), semaphore2(semaphore2), mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + { } + void run() { + forever { + semaphore1->acquire(); + if (done) + break; + for (int i = 0; i < iterations; ++i) { + mutex->lock(); + if (msleepDuration >= 0) + msleep(msleepDuration); + mutex->unlock(); + } + semaphore2->release(); + } + } +}; + +void tst_QMutex::contendedQMutex() +{ + QFETCH(int, iterations); + QFETCH(int, msleepDuration); + QSemaphore semaphore1, semaphore2; + QMutex mutex; + + QVector threads(threadCount); + for (int i = 0; i < threads.count(); ++i) { + threads[i] = new QMutexThread(&semaphore1, &semaphore2, &mutex, iterations, msleepDuration); + threads[i]->start(); + } + + QBENCHMARK { + semaphore1.release(threadCount); + semaphore2.acquire(threadCount); + } + + for (int i = 0; i < threads.count(); ++i) + threads[i]->done = true; + semaphore1.release(threadCount); + for (int i = 0; i < threads.count(); ++i) + threads[i]->wait(); + qDeleteAll(threads); +} + +class QMutexLockerThread : public QThread +{ + QSemaphore *semaphore1, *semaphore2; + QMutex *mutex; + int iterations, msleepDuration; +public: + bool done; + QMutexLockerThread(QSemaphore *semaphore1, QSemaphore *semaphore2, QMutex *mutex, int iterations, int msleepDuration) + : semaphore1(semaphore1), semaphore2(semaphore2), mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + { } + void run() { + forever { + semaphore1->acquire(); + if (done) + break; + for (int i = 0; i < iterations; ++i) { + QMutexLocker locker(mutex); + if (msleepDuration >= 0) + msleep(msleepDuration); + } + semaphore2->release(); + } + } +}; + +void tst_QMutex::contendedQMutexLocker() +{ + QFETCH(int, iterations); + QFETCH(int, msleepDuration); + QSemaphore semaphore1, semaphore2; + QMutex mutex; + + QVector threads(threadCount); + for (int i = 0; i < threads.count(); ++i) { + threads[i] = new QMutexLockerThread(&semaphore1, &semaphore2, &mutex, iterations, msleepDuration); + threads[i]->start(); + } + + QBENCHMARK { + semaphore1.release(threadCount); + semaphore2.acquire(threadCount); + } + + for (int i = 0; i < threads.count(); ++i) + threads[i]->done = true; + semaphore1.release(threadCount); + for (int i = 0; i < threads.count(); ++i) + threads[i]->wait(); + qDeleteAll(threads); +} + QTEST_MAIN(tst_QMutex) #include "tst_qmutex.moc" -- cgit v0.12 From 2a508c6279af71c16d04ad4e764f101ea32a1c05 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Wed, 29 Sep 2010 13:42:19 +0200 Subject: Test contention performance for long (10ms) critical sections The performance should be about the same for all cases (meaning that our spinning overhead should not add too much overhead). Reviewed-by: joao --- tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index 9ed5d55..b918014 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -214,6 +214,7 @@ void tst_QMutex::contendedNative_data() QTest::newRow("0") << 100 << 0; QTest::newRow("1") << 10 << 1; QTest::newRow("2") << 10 << 2; + QTest::newRow("10") << 10 << 10; } class NativeMutexThread : public QThread -- cgit v0.12 From 00c4e6d3d4e9196dc1c418c9269fcbed2f49dc87 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 1 Oct 2010 10:49:00 +0200 Subject: Add baseline test data to measure test overhead Also give the existing test data meaningful names Reviewed-by: joao --- tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index b918014..7a6b45c 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -210,11 +210,12 @@ void tst_QMutex::contendedNative_data() { QTest::addColumn("iterations"); QTest::addColumn("msleepDuration"); - QTest::newRow("-1") << 100 << -1; - QTest::newRow("0") << 100 << 0; - QTest::newRow("1") << 10 << 1; - QTest::newRow("2") << 10 << 2; - QTest::newRow("10") << 10 << 10; + QTest::newRow("baseline") << 0 << -1; + QTest::newRow("no msleep") << 1000 << -1; + QTest::newRow("msleep(0)") << 1000 << 0; + QTest::newRow("msleep(1)") << 10 << 1; + QTest::newRow("msleep(2)") << 10 << 2; + QTest::newRow("msleep(10)") << 10 << 10; } class NativeMutexThread : public QThread -- cgit v0.12 From 6d6c738879bb2ef5b5c1e42908bdd1ed16980f95 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 1 Dec 2010 12:13:27 +0300 Subject: use binary search int the string2PaperSize() helper since it is much much faster Merge-request: 2516 Signed-off-by: axis --- src/gui/painting/qprinterinfo_unix.cpp | 207 ++++++++++----------------------- 1 file changed, 64 insertions(+), 143 deletions(-) diff --git a/src/gui/painting/qprinterinfo_unix.cpp b/src/gui/painting/qprinterinfo_unix.cpp index 2129aa5..0d4cc16 100644 --- a/src/gui/painting/qprinterinfo_unix.cpp +++ b/src/gui/painting/qprinterinfo_unix.cpp @@ -60,6 +60,68 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_PRINTER +#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) +// preserver names in ascending order for the binary search +static const struct NamedPaperSize { + const char *const name; + QPrinter::PaperSize size; +} named_sizes_map[QPrinter::NPageSize] = { + { "A0", QPrinter::A0 }, + { "A1", QPrinter::A1 }, + { "A2", QPrinter::A2 }, + { "A3", QPrinter::A3 }, + { "A4", QPrinter::A4 }, + { "A5", QPrinter::A5 }, + { "A6", QPrinter::A6 }, + { "A7", QPrinter::A7 }, + { "A8", QPrinter::A8 }, + { "A9", QPrinter::A9 }, + { "B0", QPrinter::B0 }, + { "B1", QPrinter::B1 }, + { "B10", QPrinter::B10 }, + { "B2", QPrinter::B2 }, + { "B4", QPrinter::B4 }, + { "B5", QPrinter::B5 }, + { "B6", QPrinter::B6 }, + { "B7", QPrinter::B7 }, + { "B8", QPrinter::B8 }, + { "B9", QPrinter::B9 }, + { "C5E", QPrinter::C5E }, + { "Comm10E", QPrinter::Comm10E }, + { "Custom", QPrinter::Custom }, + { "DLE", QPrinter::DLE }, + { "Executive", QPrinter::Executive }, + { "Folio", QPrinter::Folio }, + { "Ledger", QPrinter::Ledger }, + { "Legal", QPrinter::Legal }, + { "Letter", QPrinter::Letter }, + { "Tabloid", QPrinter::Tabloid } +}; + +inline bool operator<(const char *name, const NamedPaperSize &data) +{ return qstrcmp(name, data.name) < 0; } +inline bool operator<(const NamedPaperSize &data, const char *name) +{ return qstrcmp(data.name, name) < 0; } + +static inline QPrinter::PaperSize string2PaperSize(const char *name) +{ + const NamedPaperSize *r = qBinaryFind(named_sizes_map, named_sizes_map + QPrinter::NPageSize, name); + if (r - named_sizes_map != QPrinter::NPageSize) + return r->size; + return QPrinter::Custom; +} + +static inline const char *paperSize2String(QPrinter::PaperSize size) +{ + for (int i = 0; i < QPrinter::NPageSize; ++i) { + if (size == named_sizes_map[i].size) + return named_sizes_map[i].name; + } + return 0; +} +#endif + + class QPrinterInfoPrivate { Q_DECLARE_PUBLIC(QPrinterInfo) @@ -68,9 +130,6 @@ public: QPrinterInfoPrivate(const QString& name); ~QPrinterInfoPrivate(); - static QPrinter::PaperSize string2PaperSize(const QString& str); - static QString pageSize2String(QPrinter::PaperSize size); - private: QString m_name; bool m_isNull; @@ -977,11 +1036,8 @@ QList< QPrinter::PaperSize> QPrinterInfo::supportedPaperSizes() const cups.setCurrentPrinter(d->m_cupsPrinterIndex); const ppd_option_t* sizes = cups.pageSizes(); if (sizes) { - for (int j = 0; j < sizes->num_choices; ++j) { - d->m_paperSizes.append( - QPrinterInfoPrivate::string2PaperSize( - QLatin1String(sizes->choices[j].choice))); - } + for (int j = 0; j < sizes->num_choices; ++j) + d->m_paperSizes.append(string2PaperSize(sizes->choices[j].choice)); } } #endif @@ -1016,141 +1072,6 @@ QPrinterInfoPrivate::~QPrinterInfoPrivate() { } -QPrinter::PaperSize QPrinterInfoPrivate::string2PaperSize(const QString& str) -{ - if (str == QLatin1String("A4")) { - return QPrinter::A4; - } else if (str == QLatin1String("B5")) { - return QPrinter::B5; - } else if (str == QLatin1String("Letter")) { - return QPrinter::Letter; - } else if (str == QLatin1String("Legal")) { - return QPrinter::Legal; - } else if (str == QLatin1String("Executive")) { - return QPrinter::Executive; - } else if (str == QLatin1String("A0")) { - return QPrinter::A0; - } else if (str == QLatin1String("A1")) { - return QPrinter::A1; - } else if (str == QLatin1String("A2")) { - return QPrinter::A2; - } else if (str == QLatin1String("A3")) { - return QPrinter::A3; - } else if (str == QLatin1String("A5")) { - return QPrinter::A5; - } else if (str == QLatin1String("A6")) { - return QPrinter::A6; - } else if (str == QLatin1String("A7")) { - return QPrinter::A7; - } else if (str == QLatin1String("A8")) { - return QPrinter::A8; - } else if (str == QLatin1String("A9")) { - return QPrinter::A9; - } else if (str == QLatin1String("B0")) { - return QPrinter::B0; - } else if (str == QLatin1String("B1")) { - return QPrinter::B1; - } else if (str == QLatin1String("B10")) { - return QPrinter::B10; - } else if (str == QLatin1String("B2")) { - return QPrinter::B2; - } else if (str == QLatin1String("B3")) { - return QPrinter::B3; - } else if (str == QLatin1String("B4")) { - return QPrinter::B4; - } else if (str == QLatin1String("B6")) { - return QPrinter::B6; - } else if (str == QLatin1String("B7")) { - return QPrinter::B7; - } else if (str == QLatin1String("B8")) { - return QPrinter::B8; - } else if (str == QLatin1String("B9")) { - return QPrinter::B9; - } else if (str == QLatin1String("C5E")) { - return QPrinter::C5E; - } else if (str == QLatin1String("Comm10E")) { - return QPrinter::Comm10E; - } else if (str == QLatin1String("DLE")) { - return QPrinter::DLE; - } else if (str == QLatin1String("Folio")) { - return QPrinter::Folio; - } else if (str == QLatin1String("Ledger")) { - return QPrinter::Ledger; - } else if (str == QLatin1String("Tabloid")) { - return QPrinter::Tabloid; - } else { - return QPrinter::Custom; - } -} - -QString QPrinterInfoPrivate::pageSize2String(QPrinter::PaperSize size) -{ - switch (size) { - case QPrinter::A4: - return QLatin1String("A4"); - case QPrinter::B5: - return QLatin1String("B5"); - case QPrinter::Letter: - return QLatin1String("Letter"); - case QPrinter::Legal: - return QLatin1String("Legal"); - case QPrinter::Executive: - return QLatin1String("Executive"); - case QPrinter::A0: - return QLatin1String("A0"); - case QPrinter::A1: - return QLatin1String("A1"); - case QPrinter::A2: - return QLatin1String("A2"); - case QPrinter::A3: - return QLatin1String("A3"); - case QPrinter::A5: - return QLatin1String("A5"); - case QPrinter::A6: - return QLatin1String("A6"); - case QPrinter::A7: - return QLatin1String("A7"); - case QPrinter::A8: - return QLatin1String("A8"); - case QPrinter::A9: - return QLatin1String("A9"); - case QPrinter::B0: - return QLatin1String("B0"); - case QPrinter::B1: - return QLatin1String("B1"); - case QPrinter::B10: - return QLatin1String("B10"); - case QPrinter::B2: - return QLatin1String("B2"); - case QPrinter::B3: - return QLatin1String("B3"); - case QPrinter::B4: - return QLatin1String("B4"); - case QPrinter::B6: - return QLatin1String("B6"); - case QPrinter::B7: - return QLatin1String("B7"); - case QPrinter::B8: - return QLatin1String("B8"); - case QPrinter::B9: - return QLatin1String("B9"); - case QPrinter::C5E: - return QLatin1String("C5E"); - case QPrinter::Comm10E: - return QLatin1String("Comm10E"); - case QPrinter::DLE: - return QLatin1String("DLE"); - case QPrinter::Folio: - return QLatin1String("Folio"); - case QPrinter::Ledger: - return QLatin1String("Ledger"); - case QPrinter::Tabloid: - return QLatin1String("Tabloid"); - default: - return QLatin1String("Custom"); - } -} - #endif // QT_NO_PRINTER QT_END_NAMESPACE -- cgit v0.12 From f725c90032b83df62432018af362830e899e71c1 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 1 Dec 2010 07:48:55 +0300 Subject: minor refactoring of QPrinterInfoPrivate use member initialization lists; remove unused Q_DECLARE_PUBLIC stuff and q_ptr member; make members public instead Merge-request: 2516 Signed-off-by: axis --- src/gui/painting/qprinterinfo_mac.cpp | 42 +++++++---------------------- src/gui/painting/qprinterinfo_unix.cpp | 48 +++++++++------------------------- src/gui/painting/qprinterinfo_win.cpp | 42 +++++++---------------------- 3 files changed, 32 insertions(+), 100 deletions(-) diff --git a/src/gui/painting/qprinterinfo_mac.cpp b/src/gui/painting/qprinterinfo_mac.cpp index 9b199f4..6a48c91 100644 --- a/src/gui/painting/qprinterinfo_mac.cpp +++ b/src/gui/painting/qprinterinfo_mac.cpp @@ -49,18 +49,20 @@ QT_BEGIN_NAMESPACE class QPrinterInfoPrivate { -Q_DECLARE_PUBLIC(QPrinterInfo) public: - ~QPrinterInfoPrivate(); - QPrinterInfoPrivate(); - QPrinterInfoPrivate(const QString& name); - -private: - QPrinterInfo* q_ptr; + QPrinterInfoPrivate() : + m_isNull(true), m_default(false) + {} + QPrinterInfoPrivate(const QString& name) : + m_name(name), + m_isNull(false), m_default(false) + {} + ~QPrinterInfoPrivate() + {} QString m_name; - bool m_default; bool m_isNull; + bool m_default; }; static QPrinterInfoPrivate nullQPrinterInfoPrivate; @@ -139,7 +141,6 @@ QPrinterInfo::QPrinterInfo() QPrinterInfo::QPrinterInfo(const QString& name) : d_ptr(new QPrinterInfoPrivate(name)) { - d_ptr->q_ptr = this; } QPrinterInfo::QPrinterInfo(const QPrinterInfo& src) @@ -152,7 +153,6 @@ QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) { Q_ASSERT(d_ptr); d_ptr.reset(new QPrinterInfoPrivate(*src.d_ptr)); - d_ptr->q_ptr = this; return *this; } @@ -210,28 +210,6 @@ QList QPrinterInfo::supportedPaperSizes() const return paperList; } -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - -QPrinterInfoPrivate::QPrinterInfoPrivate() : - q_ptr(NULL), - m_default(false), - m_isNull(true) -{ -} - -QPrinterInfoPrivate::QPrinterInfoPrivate(const QString& name) : - q_ptr(NULL), - m_name(name), - m_default(false), - m_isNull(false) -{ -} - -QPrinterInfoPrivate::~QPrinterInfoPrivate() -{ -} - #endif // QT_NO_PRINTER QT_END_NAMESPACE diff --git a/src/gui/painting/qprinterinfo_unix.cpp b/src/gui/painting/qprinterinfo_unix.cpp index 0d4cc16..eb16a1b 100644 --- a/src/gui/painting/qprinterinfo_unix.cpp +++ b/src/gui/painting/qprinterinfo_unix.cpp @@ -124,21 +124,26 @@ static inline const char *paperSize2String(QPrinter::PaperSize size) class QPrinterInfoPrivate { -Q_DECLARE_PUBLIC(QPrinterInfo) public: - QPrinterInfoPrivate(); - QPrinterInfoPrivate(const QString& name); - ~QPrinterInfoPrivate(); + QPrinterInfoPrivate() : + m_isNull(true), m_default(false), + m_mustGetPaperSizes(true), m_cupsPrinterIndex(0) + {} + QPrinterInfoPrivate(const QString& name) : + m_name(name), + m_isNull(false), m_default(false), + m_mustGetPaperSizes(true), m_cupsPrinterIndex(0) + {} + ~QPrinterInfoPrivate() + {} -private: QString m_name; bool m_isNull; bool m_default; + mutable bool m_mustGetPaperSizes; mutable QList m_paperSizes; int m_cupsPrinterIndex; - - QPrinterInfo* q_ptr; }; static QPrinterInfoPrivate nullQPrinterInfoPrivate; @@ -946,7 +951,6 @@ QPrinterInfo::QPrinterInfo(const QPrinter& printer) { Q_D(QPrinterInfo); - d->q_ptr = this; #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) QCUPSSupport cups; @@ -990,7 +994,6 @@ QPrinterInfo::QPrinterInfo(const QPrinter& printer) QPrinterInfo::QPrinterInfo(const QString& name) : d_ptr(new QPrinterInfoPrivate(name)) { - d_ptr->q_ptr = this; } QPrinterInfo::~QPrinterInfo() @@ -1001,7 +1004,6 @@ QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) { Q_ASSERT(d_ptr); d_ptr.reset(new QPrinterInfoPrivate(*src.d_ptr)); - d_ptr->q_ptr = this; return *this; } @@ -1046,32 +1048,6 @@ QList< QPrinter::PaperSize> QPrinterInfo::supportedPaperSizes() const return d->m_paperSizes; } -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - -QPrinterInfoPrivate::QPrinterInfoPrivate() -{ - m_isNull = true; - m_default = false; - m_mustGetPaperSizes = true; - m_cupsPrinterIndex = 0; - q_ptr = 0; -} - -QPrinterInfoPrivate::QPrinterInfoPrivate(const QString& name) -{ - m_name = name; - m_isNull = false; - m_default = false; - m_mustGetPaperSizes = true; - m_cupsPrinterIndex = 0; - q_ptr = 0; -} - -QPrinterInfoPrivate::~QPrinterInfoPrivate() -{ -} - #endif // QT_NO_PRINTER QT_END_NAMESPACE diff --git a/src/gui/painting/qprinterinfo_win.cpp b/src/gui/painting/qprinterinfo_win.cpp index caada1f..808de2c 100644 --- a/src/gui/painting/qprinterinfo_win.cpp +++ b/src/gui/painting/qprinterinfo_win.cpp @@ -53,18 +53,20 @@ extern QPrinter::PaperSize mapDevmodePaperSize(int s); class QPrinterInfoPrivate { -Q_DECLARE_PUBLIC(QPrinterInfo) public: - ~QPrinterInfoPrivate(); - QPrinterInfoPrivate(); - QPrinterInfoPrivate(const QString& name); + QPrinterInfoPrivate() : + m_isNull(true), m_default(false) + {} + QPrinterInfoPrivate(const QString& name) : + m_name(name), + m_isNull(false), m_default(false) + {} + ~QPrinterInfoPrivate() + {} -private: QString m_name; - bool m_default; bool m_isNull; - - QPrinterInfo* q_ptr; + bool m_default; }; static QPrinterInfoPrivate nullQPrinterInfoPrivate; @@ -142,7 +144,6 @@ QPrinterInfo::QPrinterInfo() QPrinterInfo::QPrinterInfo(const QString& name) : d_ptr(new QPrinterInfoPrivate(name)) { - d_ptr->q_ptr = this; } QPrinterInfo::QPrinterInfo(const QPrinterInfo& src) @@ -173,7 +174,6 @@ QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) { Q_ASSERT(d_ptr); d_ptr.reset(new QPrinterInfoPrivate(*src.d_ptr)); - d_ptr->q_ptr = this; return *this; } @@ -218,28 +218,6 @@ QList QPrinterInfo::supportedPaperSizes() const return paperList; } -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - -QPrinterInfoPrivate::QPrinterInfoPrivate() : - m_default(false), - m_isNull(true), - q_ptr(NULL) -{ -} - -QPrinterInfoPrivate::QPrinterInfoPrivate(const QString& name) : - m_name(name), - m_default(false), - m_isNull(false), - q_ptr(NULL) -{ -} - -QPrinterInfoPrivate::~QPrinterInfoPrivate() -{ -} - #endif // QT_NO_PRINTER QT_END_NAMESPACE -- cgit v0.12 From 2cf77579cf41594e036beeacf3dc3b6aa9f05cfa Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 1 Dec 2010 12:31:19 +0300 Subject: refactoring of QPrinterInfo move QPrinterInfoPrivate to it's own header file; rename qprinterinfo.qdoc to qprinterinfo.cpp to make it consistent with others; squash the duplicated code into qprinterinfo.cpp; avoid extra d_ptr assignments in the QPrinterInfo copying c-tor; simplify the QPrinterInfo from QPrinter c-tor code; fix styling and few method param names; remove the `m_` prefix of QPrinterInfoPrivate's members (as they are members of a private class anyway ;P) remove the boilerplates Merge-request: 2516 Signed-off-by: axis --- src/gui/painting/painting.pri | 2 + src/gui/painting/qprinterinfo.cpp | 173 +++++++++++++++++++++++++++++++++ src/gui/painting/qprinterinfo.h | 15 +-- src/gui/painting/qprinterinfo.qdoc | 125 ------------------------ src/gui/painting/qprinterinfo_mac.cpp | 100 +------------------ src/gui/painting/qprinterinfo_p.h | 108 ++++++++++++++++++++ src/gui/painting/qprinterinfo_unix.cpp | 159 +++--------------------------- src/gui/painting/qprinterinfo_win.cpp | 106 ++------------------ 8 files changed, 317 insertions(+), 471 deletions(-) create mode 100644 src/gui/painting/qprinterinfo.cpp delete mode 100644 src/gui/painting/qprinterinfo.qdoc create mode 100644 src/gui/painting/qprinterinfo_p.h diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 099619c..51f2538 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -34,6 +34,7 @@ HEADERS += \ painting/qprinter.h \ painting/qprinter_p.h \ painting/qprinterinfo.h \ + painting/qprinterinfo_p.h \ painting/qrasterizer_p.h \ painting/qregion.h \ painting/qstroker_p.h \ @@ -73,6 +74,7 @@ SOURCES += \ painting/qprintengine_pdf.cpp \ painting/qprintengine_ps.cpp \ painting/qprinter.cpp \ + painting/qprinterinfo.cpp \ painting/qrasterizer.cpp \ painting/qregion.cpp \ painting/qstroker.cpp \ diff --git a/src/gui/painting/qprinterinfo.cpp b/src/gui/painting/qprinterinfo.cpp new file mode 100644 index 0000000..21d56f3 --- /dev/null +++ b/src/gui/painting/qprinterinfo.cpp @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** 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$ +** 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 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$ +** +****************************************************************************/ + +#include "qprinterinfo.h" +#include "qprinterinfo_p.h" + +#ifndef QT_NO_PRINTER + +QT_BEGIN_NAMESPACE + +QPrinterInfoPrivate QPrinterInfoPrivate::shared_null; + + +/*! + \class QPrinterInfo + + \brief The QPrinterInfo class gives access to information about + existing printers. + + \ingroup printing + + Use the static functions to generate a list of QPrinterInfo + objects. Each QPrinterInfo object in the list represents a single + printer and can be queried for name, supported paper sizes, and + whether or not it is the default printer. + + \since 4.4 +*/ + +/*! + \fn QList QPrinterInfo::availablePrinters() + + Returns a list of available printers on the system. +*/ + +/*! + \fn QPrinterInfo QPrinterInfo::defaultPrinter() + + Returns the default printer on the system. + + The return value should be checked using isNull() before being + used, in case there is no default printer. + + \sa isNull() +*/ + +/*! + Constructs an empty QPrinterInfo object. + + \sa isNull() +*/ +QPrinterInfo::QPrinterInfo() + : d_ptr(&QPrinterInfoPrivate::shared_null) +{ +} + +/*! + Constructs a copy of \a other. +*/ +QPrinterInfo::QPrinterInfo(const QPrinterInfo &other) + : d_ptr(new QPrinterInfoPrivate(*other.d_ptr)) +{ +} + +/*! + Constructs a QPrinterInfo object from \a printer. +*/ +QPrinterInfo::QPrinterInfo(const QPrinter &printer) + : d_ptr(&QPrinterInfoPrivate::shared_null) +{ + foreach (const QPrinterInfo &printerInfo, availablePrinters()) { + if (printerInfo.printerName() == printer.printerName()) { + d_ptr.reset(new QPrinterInfoPrivate(*printerInfo.d_ptr)); + break; + } + } +} + +/*! + \internal +*/ +QPrinterInfo::QPrinterInfo(const QString &name) + : d_ptr(new QPrinterInfoPrivate(name)) +{ +} + +/*! + Destroys the QPrinterInfo object. References to the values in the + object become invalid. +*/ +QPrinterInfo::~QPrinterInfo() +{ +} + +/*! + Sets the QPrinterInfo object to be equal to \a other. +*/ +QPrinterInfo &QPrinterInfo::operator=(const QPrinterInfo &other) +{ + Q_ASSERT(d_ptr); + d_ptr.reset(new QPrinterInfoPrivate(*other.d_ptr)); + return *this; +} + +/*! + Returns the name of the printer. + + \sa QPrinter::setPrinterName() +*/ +QString QPrinterInfo::printerName() const +{ + const Q_D(QPrinterInfo); + return d->name; +} + +/*! + Returns whether this QPrinterInfo object holds a printer definition. + + An empty QPrinterInfo object could result for example from calling + defaultPrinter() when there are no printers on the system. +*/ +bool QPrinterInfo::isNull() const +{ + const Q_D(QPrinterInfo); + return d->isNull; +} + +/*! + Returns whether this printer is the default printer. +*/ +bool QPrinterInfo::isDefault() const +{ + const Q_D(QPrinterInfo); + return d->isDefault; +} + +/*! + \fn QList< QPrinter::PaperSize> QPrinterInfo::supportedPaperSizes() const + \since 4.4 + + Returns a list of supported paper sizes by the printer. + + Not all printer drivers support this query, so the list may be empty. + On Mac OS X 10.3, this function always returns an empty list. +*/ + +QT_END_NAMESPACE + +#endif // QT_NO_PRINTER diff --git a/src/gui/painting/qprinterinfo.h b/src/gui/painting/qprinterinfo.h index 063c6b9..c8c9534 100644 --- a/src/gui/painting/qprinterinfo.h +++ b/src/gui/painting/qprinterinfo.h @@ -42,9 +42,10 @@ #ifndef QPRINTERINFO_H #define QPRINTERINFO_H -#include #include +#include + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -56,15 +57,13 @@ class QPrinterInfoPrivate; class QPrinterInfoPrivateDeleter; class Q_GUI_EXPORT QPrinterInfo { -Q_DECLARE_PRIVATE(QPrinterInfo) - public: QPrinterInfo(); - QPrinterInfo(const QPrinterInfo& src); - QPrinterInfo(const QPrinter& printer); + QPrinterInfo(const QPrinterInfo &other); + QPrinterInfo(const QPrinter &printer); ~QPrinterInfo(); - QPrinterInfo& operator=(const QPrinterInfo& src); + QPrinterInfo &operator=(const QPrinterInfo &other); QString printerName() const; bool isNull() const; @@ -75,8 +74,10 @@ public: static QPrinterInfo defaultPrinter(); private: - QPrinterInfo(const QString& name); + QPrinterInfo(const QString &name); +private: + Q_DECLARE_PRIVATE(QPrinterInfo) QScopedPointer d_ptr; }; diff --git a/src/gui/painting/qprinterinfo.qdoc b/src/gui/painting/qprinterinfo.qdoc deleted file mode 100644 index 9193213..0000000 --- a/src/gui/painting/qprinterinfo.qdoc +++ /dev/null @@ -1,125 +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:FDL$ -** 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 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$ -** -****************************************************************************/ - -/*! - \class QPrinterInfo - - \brief The QPrinterInfo class gives access to information about - existing printers. - - \ingroup printing - - Use the static functions to generate a list of QPrinterInfo - objects. Each QPrinterInfo object in the list represents a single - printer and can be queried for name, supported paper sizes, and - whether or not it is the default printer. - - \since 4.4 -*/ - -/*! - \fn QList QPrinterInfo::availablePrinters() - - Returns a list of available printers on the system. -*/ - -/*! - \fn QPrinterInfo QPrinterInfo::defaultPrinter() - - Returns the default printer on the system. - - The return value should be checked using isNull() before being - used, in case there is no default printer. - - \sa isNull() -*/ - -/*! - \fn QPrinterInfo::QPrinterInfo() - - Constructs an empty QPrinterInfo object. - - \sa isNull() -*/ - -/*! - \fn QPrinterInfo::QPrinterInfo(const QPrinterInfo& src) - - Constructs a copy of \a src. -*/ - -/*! - \fn QPrinterInfo::QPrinterInfo(const QPrinter& printer) - - Constructs a QPrinterInfo object from \a printer. -*/ - -/*! - \fn QPrinterInfo::~QPrinterInfo() - - Destroys the QPrinterInfo object. References to the values in the - object become invalid. -*/ - -/*! - \fn QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) - - Sets the QPrinterInfo object to be equal to \a src. -*/ - -/*! - \fn QString QPrinterInfo::printerName() const - - Returns the name of the printer. - - \sa QPrinter::setPrinterName() -*/ - -/*! - \fn bool QPrinterInfo::isNull() const - - Returns whether this QPrinterInfo object holds a printer definition. - - An empty QPrinterInfo object could result for example from calling - defaultPrinter() when there are no printers on the system. -*/ - -/*! - \fn bool QPrinterInfo::isDefault() const - - Returns whether this printer is the default printer. -*/ - -/*! - \fn QList< QPrinter::PaperSize> QPrinterInfo::supportedPaperSizes() const - \since 4.4 - - Returns a list of supported paper sizes by the printer. - - Not all printer drivers support this query, so the list may be empty. - On Mac OS X 10.3, this function always returns an empty list. -*/ diff --git a/src/gui/painting/qprinterinfo_mac.cpp b/src/gui/painting/qprinterinfo_mac.cpp index 6a48c91..9d0e886 100644 --- a/src/gui/painting/qprinterinfo_mac.cpp +++ b/src/gui/painting/qprinterinfo_mac.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qprinterinfo.h" +#include "qprinterinfo_p.h" #include "private/qt_mac_p.h" @@ -47,40 +48,7 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_PRINTER -class QPrinterInfoPrivate -{ -public: - QPrinterInfoPrivate() : - m_isNull(true), m_default(false) - {} - QPrinterInfoPrivate(const QString& name) : - m_name(name), - m_isNull(false), m_default(false) - {} - ~QPrinterInfoPrivate() - {} - - QString m_name; - bool m_isNull; - bool m_default; -}; - -static QPrinterInfoPrivate nullQPrinterInfoPrivate; - -class QPrinterInfoPrivateDeleter -{ -public: - static inline void cleanup(QPrinterInfoPrivate *d) - { - if (d != &nullQPrinterInfoPrivate) - delete d; - } -}; - -extern QPrinter::PaperSize qSizeFTopaperSize(const QSizeF& size); - -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// +extern QPrinter::PaperSize qSizeFTopaperSize(const QSizeF &size); QList QPrinterInfo::availablePrinters() { @@ -96,7 +64,7 @@ QList QPrinterInfo::availablePrinters() QString name = QCFString::toQString(PMPrinterGetName(printer)); printers.append(QPrinterInfo(name)); if (PMPrinterIsDefault(printer)) { - printers[i].d_ptr->m_default = true; + printers[i].d_ptr->isDefault = true; } } } @@ -114,71 +82,11 @@ QPrinterInfo QPrinterInfo::defaultPrinter(){ return QPrinterInfo(); } -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - -QPrinterInfo::QPrinterInfo(const QPrinter& prn) - : d_ptr(&nullQPrinterInfoPrivate) -{ - QList list = availablePrinters(); - for (int c = 0; c < list.size(); ++c) { - if (prn.printerName() == list[c].printerName()) { - *this = list[c]; - return; - } - } -} - -QPrinterInfo::~QPrinterInfo() -{ -} - -QPrinterInfo::QPrinterInfo() - : d_ptr(&nullQPrinterInfoPrivate) -{ -} - -QPrinterInfo::QPrinterInfo(const QString& name) - : d_ptr(new QPrinterInfoPrivate(name)) -{ -} - -QPrinterInfo::QPrinterInfo(const QPrinterInfo& src) - : d_ptr(&nullQPrinterInfoPrivate) -{ - *this = src; -} - -QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) -{ - Q_ASSERT(d_ptr); - d_ptr.reset(new QPrinterInfoPrivate(*src.d_ptr)); - return *this; -} - -QString QPrinterInfo::printerName() const -{ - const Q_D(QPrinterInfo); - return d->m_name; -} - -bool QPrinterInfo::isNull() const -{ - const Q_D(QPrinterInfo); - return d->m_isNull; -} - -bool QPrinterInfo::isDefault() const -{ - const Q_D(QPrinterInfo); - return d->m_default; -} - QList QPrinterInfo::supportedPaperSizes() const { const Q_D(QPrinterInfo); - PMPrinter cfPrn = PMPrinterCreateFromPrinterID(QCFString::toCFStringRef(d->m_name)); + PMPrinter cfPrn = PMPrinterCreateFromPrinterID(QCFString::toCFStringRef(d->name)); if (!cfPrn) return QList(); diff --git a/src/gui/painting/qprinterinfo_p.h b/src/gui/painting/qprinterinfo_p.h new file mode 100644 index 0000000..f5981d4 --- /dev/null +++ b/src/gui/painting/qprinterinfo_p.h @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** 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: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 QPRINTERINFO_P_H +#define QPRINTERINFO_P_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" + +#ifndef QT_NO_PRINTER + +#include "QtCore/qlist.h" + +QT_BEGIN_NAMESPACE + +class QPrinterInfoPrivate +{ +public: + QPrinterInfoPrivate(const QString& name = QString()) : + name(name), isNull(false), isDefault(false) +#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) +#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) + , cupsPrinterIndex(0), hasPaperSizes(false) +#endif +#endif + {} + ~QPrinterInfoPrivate() + {} + + static QPrinterInfoPrivate shared_null; + + QString name; + bool isNull; + bool isDefault; + +#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) +#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) + int cupsPrinterIndex; + mutable bool hasPaperSizes; + mutable QList paperSizes; +#endif +#endif +}; + + +class QPrinterInfoPrivateDeleter +{ +public: + static inline void cleanup(QPrinterInfoPrivate *d) + { + if (d != &QPrinterInfoPrivate::shared_null) + delete d; + } +}; + +QT_END_NAMESPACE + +#endif // QT_NO_PRINTER + +#endif // QPRINTERINFO_P_H diff --git a/src/gui/painting/qprinterinfo_unix.cpp b/src/gui/painting/qprinterinfo_unix.cpp index eb16a1b..c30fcb4 100644 --- a/src/gui/painting/qprinterinfo_unix.cpp +++ b/src/gui/painting/qprinterinfo_unix.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qprinterinfo.h" +#include "qprinterinfo_p.h" #include #include @@ -121,46 +122,6 @@ static inline const char *paperSize2String(QPrinter::PaperSize size) } #endif - -class QPrinterInfoPrivate -{ -public: - QPrinterInfoPrivate() : - m_isNull(true), m_default(false), - m_mustGetPaperSizes(true), m_cupsPrinterIndex(0) - {} - QPrinterInfoPrivate(const QString& name) : - m_name(name), - m_isNull(false), m_default(false), - m_mustGetPaperSizes(true), m_cupsPrinterIndex(0) - {} - ~QPrinterInfoPrivate() - {} - - QString m_name; - bool m_isNull; - bool m_default; - - mutable bool m_mustGetPaperSizes; - mutable QList m_paperSizes; - int m_cupsPrinterIndex; -}; - -static QPrinterInfoPrivate nullQPrinterInfoPrivate; - -class QPrinterInfoPrivateDeleter -{ -public: - static inline void cleanup(QPrinterInfoPrivate *d) - { - if (d != &nullQPrinterInfoPrivate) - delete d; - } -}; - -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - void qt_perhapsAddPrinter(QList *printers, const QString &name, QString host, QString comment, QStringList aliases) @@ -891,9 +852,8 @@ QList QPrinterInfo::availablePrinters() QList list; #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - QCUPSSupport cups; if (QCUPSSupport::isAvailable()) { - //const ppd_file_t* cupsPPD = cups.currentPPD(); + QCUPSSupport cups; int cupsPrinterCount = cups.availablePrintersCount(); const cups_dest_t* cupsPrinters = cups.availablePrinters(); @@ -903,8 +863,8 @@ QList QPrinterInfo::availablePrinters() printerName += QLatin1Char('/') + QString::fromLocal8Bit(cupsPrinters[i].instance); list.append(QPrinterInfo(printerName)); if (cupsPrinters[i].is_default) - list[i].d_ptr->m_default = true; - list[i].d_ptr->m_cupsPrinterIndex = i; + list[i].d_ptr->isDefault = true; + list[i].d_ptr->cupsPrinterIndex = i; } } else { #endif @@ -916,7 +876,7 @@ QList QPrinterInfo::availablePrinters() list.append(QPrinterInfo((*i).name)); } if (defprn >= 0 && defprn < lprPrinters.size()) { - list[defprn].d_ptr->m_default = true; + list[defprn].d_ptr->isDefault = true; } #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) } @@ -935,117 +895,30 @@ QPrinterInfo QPrinterInfo::defaultPrinter() return (prnList.size() > 0) ? prnList[0] : QPrinterInfo(); } -QPrinterInfo::QPrinterInfo() - : d_ptr(&nullQPrinterInfoPrivate) +QList QPrinterInfo::supportedPaperSizes() const { -} - -QPrinterInfo::QPrinterInfo(const QPrinterInfo& src) - : d_ptr(&nullQPrinterInfoPrivate) -{ - *this = src; -} - -QPrinterInfo::QPrinterInfo(const QPrinter& printer) - : d_ptr(new QPrinterInfoPrivate(printer.printerName())) -{ - - Q_D(QPrinterInfo); - -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - QCUPSSupport cups; - if (QCUPSSupport::isAvailable()) { - int cupsPrinterCount = cups.availablePrintersCount(); - const cups_dest_t* cupsPrinters = cups.availablePrinters(); - - for (int i = 0; i < cupsPrinterCount; ++i) { - QString printerName(QString::fromLocal8Bit(cupsPrinters[i].name)); - if (cupsPrinters[i].instance) - printerName += QLatin1Char('/') + QString::fromLocal8Bit(cupsPrinters[i].instance); - if (printerName == printer.printerName()) { - if (cupsPrinters[i].is_default) - d->m_default = true; - d->m_cupsPrinterIndex = i; - return; - } - } - } else { -#endif - QList lprPrinters; - int defprn = qt_getLprPrinters(lprPrinters); - // populating printer combo - QList::const_iterator i = lprPrinters.constBegin(); - int c; - for(c = 0; i != lprPrinters.constEnd(); ++i, ++c) { - if (i->name == printer.printerName()) { - if (defprn == c) - d->m_default = true; - return; - } - } #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - } -#endif - - // Printer not found. - d_ptr.reset(&nullQPrinterInfoPrivate); -} - -QPrinterInfo::QPrinterInfo(const QString& name) - : d_ptr(new QPrinterInfoPrivate(name)) -{ -} - -QPrinterInfo::~QPrinterInfo() -{ -} - -QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) -{ - Q_ASSERT(d_ptr); - d_ptr.reset(new QPrinterInfoPrivate(*src.d_ptr)); - return *this; -} - -QString QPrinterInfo::printerName() const -{ const Q_D(QPrinterInfo); - return d->m_name; -} - -bool QPrinterInfo::isNull() const -{ - const Q_D(QPrinterInfo); - return d->m_isNull; -} - -bool QPrinterInfo::isDefault() const -{ - const Q_D(QPrinterInfo); - return d->m_default; -} -QList< QPrinter::PaperSize> QPrinterInfo::supportedPaperSizes() const -{ - const Q_D(QPrinterInfo); - if (d->m_mustGetPaperSizes) { - d->m_mustGetPaperSizes = false; + if (!d->hasPaperSizes) { + d->hasPaperSizes = true; -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - QCUPSSupport cups; if (QCUPSSupport::isAvailable()) { // Find paper sizes from CUPS. - cups.setCurrentPrinter(d->m_cupsPrinterIndex); + QCUPSSupport cups; + cups.setCurrentPrinter(d->cupsPrinterIndex); const ppd_option_t* sizes = cups.pageSizes(); if (sizes) { for (int j = 0; j < sizes->num_choices; ++j) - d->m_paperSizes.append(string2PaperSize(sizes->choices[j].choice)); + d->paperSizes.append(string2PaperSize(sizes->choices[j].choice)); } } -#endif - } - return d->m_paperSizes; + + return d->paperSizes; +#else + return QList(); +#endif } #endif // QT_NO_PRINTER diff --git a/src/gui/painting/qprinterinfo_win.cpp b/src/gui/painting/qprinterinfo_win.cpp index 808de2c..962aa2d 100644 --- a/src/gui/painting/qprinterinfo_win.cpp +++ b/src/gui/painting/qprinterinfo_win.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qprinterinfo.h" +#include "qprinterinfo_p.h" #include @@ -51,39 +52,6 @@ QT_BEGIN_NAMESPACE extern QPrinter::PaperSize mapDevmodePaperSize(int s); -class QPrinterInfoPrivate -{ -public: - QPrinterInfoPrivate() : - m_isNull(true), m_default(false) - {} - QPrinterInfoPrivate(const QString& name) : - m_name(name), - m_isNull(false), m_default(false) - {} - ~QPrinterInfoPrivate() - {} - - QString m_name; - bool m_isNull; - bool m_default; -}; - -static QPrinterInfoPrivate nullQPrinterInfoPrivate; - -class QPrinterInfoPrivateDeleter -{ -public: - static inline void cleanup(QPrinterInfoPrivate *d) - { - if (d != &nullQPrinterInfoPrivate) - delete d; - } -}; - -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - QList QPrinterInfo::availablePrinters() { QList printers; @@ -105,7 +73,7 @@ QList QPrinterInfo::availablePrinters() for (uint i = 0; i < returned; ++i) { printers.append(QPrinterInfo(QString::fromWCharArray(infoList[i].pPrinterName))); if (printers.at(i).printerName() == defPrn.printerName()) - printers[i].d_ptr->m_default = true; + printers[i].d_ptr->isDefault = true; } delete [] buffer; } @@ -127,86 +95,24 @@ QPrinterInfo QPrinterInfo::defaultPrinter() QString printerName = noConfiguredPrinters ? QString() : info.at(0); QPrinterInfo prn(printerName); - prn.d_ptr->m_default = true; + prn.d_ptr->isDefault = true; if (noConfiguredPrinters) - prn.d_ptr->m_isNull = true; + prn.d_ptr->isNull = true; return prn; } -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - -QPrinterInfo::QPrinterInfo() - : d_ptr(&nullQPrinterInfoPrivate) -{ -} - -QPrinterInfo::QPrinterInfo(const QString& name) - : d_ptr(new QPrinterInfoPrivate(name)) -{ -} - -QPrinterInfo::QPrinterInfo(const QPrinterInfo& src) - : d_ptr(&nullQPrinterInfoPrivate) -{ - *this = src; -} - -QPrinterInfo::QPrinterInfo(const QPrinter& prn) - : d_ptr(&nullQPrinterInfoPrivate) -{ - QList list = availablePrinters(); - for (int c = 0; c < list.size(); ++c) { - if (prn.printerName() == list[c].printerName()) { - *this = list[c]; - return; - } - } - - *this = QPrinterInfo(); -} - -QPrinterInfo::~QPrinterInfo() -{ -} - -QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) -{ - Q_ASSERT(d_ptr); - d_ptr.reset(new QPrinterInfoPrivate(*src.d_ptr)); - return *this; -} - -QString QPrinterInfo::printerName() const -{ - const Q_D(QPrinterInfo); - return d->m_name; -} - -bool QPrinterInfo::isNull() const -{ - const Q_D(QPrinterInfo); - return d->m_isNull; -} - -bool QPrinterInfo::isDefault() const -{ - const Q_D(QPrinterInfo); - return d->m_default; -} - QList QPrinterInfo::supportedPaperSizes() const { const Q_D(QPrinterInfo); QList paperList; - DWORD size = DeviceCapabilities(reinterpret_cast(d->m_name.utf16()), + DWORD size = DeviceCapabilities(reinterpret_cast(d->name.utf16()), NULL, DC_PAPERS, NULL, NULL); if ((int)size == -1) return paperList; wchar_t *papers = new wchar_t[size]; - size = DeviceCapabilities(reinterpret_cast(d->m_name.utf16()), + size = DeviceCapabilities(reinterpret_cast(d->name.utf16()), NULL, DC_PAPERS, papers, NULL); for (int c = 0; c < (int)size; ++c) { -- cgit v0.12 From 70fd5a220d966279eb66df08ad69539bb26d59cd Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 1 Dec 2010 12:54:52 +0300 Subject: micro-optimizations, clean-ups and styling fixes Merge-request: 2516 Signed-off-by: axis --- src/gui/painting/qprinterinfo_mac.cpp | 67 ++++++++++++++++----------------- src/gui/painting/qprinterinfo_unix.cpp | 46 +++++++++++------------ src/gui/painting/qprinterinfo_win.cpp | 68 +++++++++++++++------------------- 3 files changed, 83 insertions(+), 98 deletions(-) diff --git a/src/gui/painting/qprinterinfo_mac.cpp b/src/gui/painting/qprinterinfo_mac.cpp index 9d0e886..8d41217 100644 --- a/src/gui/painting/qprinterinfo_mac.cpp +++ b/src/gui/painting/qprinterinfo_mac.cpp @@ -54,68 +54,63 @@ QList QPrinterInfo::availablePrinters() { QList printers; - OSStatus status = noErr; - QCFType printerList; - status = PMServerCreatePrinterList(kPMServerLocal, &printerList); - if (status == noErr) { - CFIndex count = CFArrayGetCount(printerList); - for (CFIndex i=0; i(const_cast(CFArrayGetValueAtIndex(printerList, i))); - QString name = QCFString::toQString(PMPrinterGetName(printer)); - printers.append(QPrinterInfo(name)); - if (PMPrinterIsDefault(printer)) { - printers[i].d_ptr->isDefault = true; - } + QCFType array; + if (PMServerCreatePrinterList(kPMServerLocal, &array) == noErr) { + CFIndex count = CFArrayGetCount(array); + for (int i = 0; i < count; ++i) { + PMPrinter printer = static_cast(const_cast(CFArrayGetValueAtIndex(array, i))); + QString printerName = QCFString::toQString(PMPrinterGetName(printer)); + + QPrinterInfo printerInfo(printerName); + if (PMPrinterIsDefault(printer)) + printerInfo.d_ptr->isDefault = true; + printers.append(printerInfo); } } return printers; } -QPrinterInfo QPrinterInfo::defaultPrinter(){ +QPrinterInfo QPrinterInfo::defaultPrinter() +{ QList printers = availablePrinters(); - for (int c = 0; c < printers.size(); ++c) { - if (printers[c].isDefault()) { - return printers[c]; - } + foreach (const QPrinterInfo &printerInfo, printers) { + if (printerInfo.isDefault()) + return printerInfo; } - return QPrinterInfo(); + + return printers.value(0); } QList QPrinterInfo::supportedPaperSizes() const { const Q_D(QPrinterInfo); - PMPrinter cfPrn = PMPrinterCreateFromPrinterID(QCFString::toCFStringRef(d->name)); + QList paperSizes; - if (!cfPrn) return QList(); + PMPrinter cfPrn = PMPrinterCreateFromPrinterID(QCFString::toCFStringRef(d->name)); + if (!cfPrn) + return paperSizes; CFArrayRef array; - OSStatus status = PMPrinterGetPaperList(cfPrn, &array); - - if (status != 0) { + if (PMPrinterGetPaperList(cfPrn, &array) != noErr) { PMRelease(cfPrn); - return QList(); + return paperSizes; } - QList paperList; int count = CFArrayGetCount(array); - for (int c = 0; c < count; c++) { - PMPaper paper = static_cast( - const_cast( - CFArrayGetValueAtIndex(array, c))); + for (int i = 0; i < count; ++i) { + PMPaper paper = static_cast(const_cast(CFArrayGetValueAtIndex(array, i))); double width, height; - status = PMPaperGetWidth(paper, &width); - status |= PMPaperGetHeight(paper, &height); - if (status != 0) continue; - - QSizeF size(width * 0.3527, height * 0.3527); - paperList.append(qSizeFTopaperSize(size)); + if (PMPaperGetWidth(paper, &width) == noErr && PMPaperGetHeight(paper, &height) == noErr) { + QSizeF size(width * 0.3527, height * 0.3527); + paperSizes.append(qSizeFTopaperSize(size)); + } } PMRelease(cfPrn); - return paperList; + return paperSizes; } #endif // QT_NO_PRINTER diff --git a/src/gui/painting/qprinterinfo_unix.cpp b/src/gui/painting/qprinterinfo_unix.cpp index c30fcb4..be24bd7 100644 --- a/src/gui/painting/qprinterinfo_unix.cpp +++ b/src/gui/painting/qprinterinfo_unix.cpp @@ -809,12 +809,12 @@ int qt_getLprPrinters(QList& printers) #endif } + QRegExp ps(QLatin1String("[^a-z]ps(?:[^a-z]|$)")); + QRegExp lp(QLatin1String("[^a-z]lp(?:[^a-z]|$)")); + int quality = 0; int best = 0; for (int i = 0; i < printers.size(); ++i) { - QRegExp ps(QLatin1String("[^a-z]ps(?:[^a-z]|$)")); - QRegExp lp(QLatin1String("[^a-z]lp(?:[^a-z]|$)")); - QString name = printers.at(i).name; QString comment = printers.at(i).comment; if (quality < 5 && name == dollarPrinter) { @@ -849,50 +849,48 @@ int qt_getLprPrinters(QList& printers) QList QPrinterInfo::availablePrinters() { - QList list; + QList printers; #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) if (QCUPSSupport::isAvailable()) { QCUPSSupport cups; int cupsPrinterCount = cups.availablePrintersCount(); const cups_dest_t* cupsPrinters = cups.availablePrinters(); - for (int i = 0; i < cupsPrinterCount; ++i) { QString printerName(QString::fromLocal8Bit(cupsPrinters[i].name)); if (cupsPrinters[i].instance) printerName += QLatin1Char('/') + QString::fromLocal8Bit(cupsPrinters[i].instance); - list.append(QPrinterInfo(printerName)); + + QPrinterInfo printerInfo(printerName); if (cupsPrinters[i].is_default) - list[i].d_ptr->isDefault = true; - list[i].d_ptr->cupsPrinterIndex = i; + printerInfo.d_ptr->isDefault = true; + printerInfo.d_ptr->cupsPrinterIndex = i; + printers.append(printerInfo); } - } else { + } else #endif + { QList lprPrinters; int defprn = qt_getLprPrinters(lprPrinters); // populating printer combo - QList::const_iterator i = lprPrinters.constBegin(); - for(; i != lprPrinters.constEnd(); ++i) { - list.append(QPrinterInfo((*i).name)); - } - if (defprn >= 0 && defprn < lprPrinters.size()) { - list[defprn].d_ptr->isDefault = true; - } -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) + foreach (const QPrinterDescription &description, lprPrinters) + printers.append(QPrinterInfo(description.name)); + if (defprn >= 0 && defprn < printers.size()) + printers[defprn].d_ptr->isDefault = true; } -#endif - return list; + return printers; } QPrinterInfo QPrinterInfo::defaultPrinter() { - QList prnList = availablePrinters(); - for (int i = 0; i < prnList.size(); ++i) { - if (prnList[i].isDefault()) - return prnList[i]; + QList printers = availablePrinters(); + foreach (const QPrinterInfo &printerInfo, printers) { + if (printerInfo.isDefault()) + return printerInfo; } - return (prnList.size() > 0) ? prnList[0] : QPrinterInfo(); + + return printers.value(0); } QList QPrinterInfo::supportedPaperSizes() const diff --git a/src/gui/painting/qprinterinfo_win.cpp b/src/gui/painting/qprinterinfo_win.cpp index 962aa2d..6adf5a4 100644 --- a/src/gui/painting/qprinterinfo_win.cpp +++ b/src/gui/painting/qprinterinfo_win.cpp @@ -55,25 +55,22 @@ extern QPrinter::PaperSize mapDevmodePaperSize(int s); QList QPrinterInfo::availablePrinters() { QList printers; - LPBYTE buffer; + DWORD needed = 0; DWORD returned = 0; - - if ( !EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, 0, 0, &needed, &returned)) - { - buffer = new BYTE[needed]; - if (!EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS , NULL, - 4, buffer, needed, &needed, &returned)) - { - delete [] buffer; - return printers; - } - PPRINTER_INFO_4 infoList = reinterpret_cast(buffer); - QPrinterInfo defPrn = defaultPrinter(); - for (uint i = 0; i < returned; ++i) { - printers.append(QPrinterInfo(QString::fromWCharArray(infoList[i].pPrinterName))); - if (printers.at(i).printerName() == defPrn.printerName()) - printers[i].d_ptr->isDefault = true; + if (!EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, 0, 0, &needed, &returned)) { + LPBYTE buffer = new BYTE[needed]; + if (EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, buffer, needed, &needed, &returned)) { + PPRINTER_INFO_4 infoList = reinterpret_cast(buffer); + QPrinterInfo defPrn = defaultPrinter(); + for (uint i = 0; i < returned; ++i) { + QString printerName(QString::fromWCharArray(infoList[i].pPrinterName)); + + QPrinterInfo printerInfo(printerName); + if (printerInfo.printerName() == defPrn.printerName()) + printerInfo.d_ptr->isDefault = true; + printers.append(printerInfo); + } } delete [] buffer; } @@ -88,40 +85,35 @@ QPrinterInfo QPrinterInfo::defaultPrinter() GetProfileString(L"windows", L"device", (wchar_t*)noPrinters.utf16(), buffer, 256); QString output = QString::fromWCharArray(buffer); - // Filter out the name of the printer, which should be everything - // before a comma. + // Filter out the name of the printer, which should be everything before a comma. bool noConfiguredPrinters = (output == noPrinters); - QStringList info = output.split(QLatin1Char(',')); - QString printerName = noConfiguredPrinters ? QString() : info.at(0); + QString printerName = output.split(QLatin1Char(',')).value(0); - QPrinterInfo prn(printerName); - prn.d_ptr->isDefault = true; + QPrinterInfo printerInfo(printerName); + printerInfo.d_ptr->isDefault = true; if (noConfiguredPrinters) - prn.d_ptr->isNull = true; - return prn; + printerInfo.d_ptr->isNull = true; + return printerInfo; } QList QPrinterInfo::supportedPaperSizes() const { const Q_D(QPrinterInfo); - QList paperList; + + QList paperSizes; DWORD size = DeviceCapabilities(reinterpret_cast(d->name.utf16()), NULL, DC_PAPERS, NULL, NULL); - if ((int)size == -1) - return paperList; - - wchar_t *papers = new wchar_t[size]; - size = DeviceCapabilities(reinterpret_cast(d->name.utf16()), - NULL, DC_PAPERS, papers, NULL); - - for (int c = 0; c < (int)size; ++c) { - paperList.append(mapDevmodePaperSize(papers[c])); + if ((int)size != -1) { + wchar_t *papers = new wchar_t[size]; + size = DeviceCapabilities(reinterpret_cast(d->name.utf16()), + NULL, DC_PAPERS, papers, NULL); + for (int c = 0; c < (int)size; ++c) + paperSizes.append(mapDevmodePaperSize(papers[c])); + delete [] papers; } - delete [] papers; - - return paperList; + return paperSizes; } #endif // QT_NO_PRINTER -- cgit v0.12 From ed2abc6f5d8b2fe9e819d473768767c11f9c83ba Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 1 Dec 2010 13:24:44 +0300 Subject: fix QPrinterInfo::defaultPrinter() on win to not return a partially filled invalid printer info. is the default printer couldn't be retrieved, return an invalid QPrinterInfo() rather than a semi-invalid info which has isDefault() == true and printerName() == "qt_no_printers" Merge-request: 2516 Signed-off-by: axis --- src/gui/painting/qprinterinfo_win.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/gui/painting/qprinterinfo_win.cpp b/src/gui/painting/qprinterinfo_win.cpp index 6adf5a4..f7b6874 100644 --- a/src/gui/painting/qprinterinfo_win.cpp +++ b/src/gui/painting/qprinterinfo_win.cpp @@ -84,16 +84,15 @@ QPrinterInfo QPrinterInfo::defaultPrinter() wchar_t buffer[256]; GetProfileString(L"windows", L"device", (wchar_t*)noPrinters.utf16(), buffer, 256); QString output = QString::fromWCharArray(buffer); + if (output != noPrinters) { + // Filter out the name of the printer, which should be everything before a comma. + QString printerName = output.split(QLatin1Char(',')).value(0); + QPrinterInfo printerInfo(printerName); + printerInfo.d_ptr->isDefault = true; + return printerInfo; + } - // Filter out the name of the printer, which should be everything before a comma. - bool noConfiguredPrinters = (output == noPrinters); - QString printerName = output.split(QLatin1Char(',')).value(0); - - QPrinterInfo printerInfo(printerName); - printerInfo.d_ptr->isDefault = true; - if (noConfiguredPrinters) - printerInfo.d_ptr->isNull = true; - return printerInfo; + return QPrinterInfo(); } QList QPrinterInfo::supportedPaperSizes() const -- cgit v0.12 From 50af3716c956be0f50fdd896925da7af91d5da2c Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 1 Dec 2010 13:46:24 +0300 Subject: QPrinterInfo::supportedPaperSizes(): return early if the info is invalid e.g. don't report supported paper sized in any case Merge-request: 2516 Signed-off-by: axis --- src/gui/painting/qprinterinfo_mac.cpp | 2 ++ src/gui/painting/qprinterinfo_unix.cpp | 3 +++ src/gui/painting/qprinterinfo_win.cpp | 2 ++ 3 files changed, 7 insertions(+) diff --git a/src/gui/painting/qprinterinfo_mac.cpp b/src/gui/painting/qprinterinfo_mac.cpp index 8d41217..033682a 100644 --- a/src/gui/painting/qprinterinfo_mac.cpp +++ b/src/gui/painting/qprinterinfo_mac.cpp @@ -87,6 +87,8 @@ QList QPrinterInfo::supportedPaperSizes() const const Q_D(QPrinterInfo); QList paperSizes; + if (isNull()) + return paperSizes; PMPrinter cfPrn = PMPrinterCreateFromPrinterID(QCFString::toCFStringRef(d->name)); if (!cfPrn) diff --git a/src/gui/painting/qprinterinfo_unix.cpp b/src/gui/painting/qprinterinfo_unix.cpp index be24bd7..af2e52a 100644 --- a/src/gui/painting/qprinterinfo_unix.cpp +++ b/src/gui/painting/qprinterinfo_unix.cpp @@ -898,6 +898,9 @@ QList QPrinterInfo::supportedPaperSizes() const #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) const Q_D(QPrinterInfo); + if (isNull()) + return d->paperSizes; + if (!d->hasPaperSizes) { d->hasPaperSizes = true; diff --git a/src/gui/painting/qprinterinfo_win.cpp b/src/gui/painting/qprinterinfo_win.cpp index f7b6874..2d25063 100644 --- a/src/gui/painting/qprinterinfo_win.cpp +++ b/src/gui/painting/qprinterinfo_win.cpp @@ -100,6 +100,8 @@ QList QPrinterInfo::supportedPaperSizes() const const Q_D(QPrinterInfo); QList paperSizes; + if (isNull()) + return paperSizes; DWORD size = DeviceCapabilities(reinterpret_cast(d->name.utf16()), NULL, DC_PAPERS, NULL, NULL); -- cgit v0.12 From 1d6266e751d6b23a15f56bc21c503fe1a71da975 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Wed, 1 Dec 2010 14:28:32 +0300 Subject: get rid of QPrinterInfoPrivate::isNull member invalid QPrinterInfo always have d_ptr == &QPrinterInfoPrivate::shared_null; no need in separate flag for that Merge-request: 2516 Signed-off-by: axis --- src/gui/painting/qprinterinfo.cpp | 2 +- src/gui/painting/qprinterinfo_p.h | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qprinterinfo.cpp b/src/gui/painting/qprinterinfo.cpp index 21d56f3..72f8be3 100644 --- a/src/gui/painting/qprinterinfo.cpp +++ b/src/gui/painting/qprinterinfo.cpp @@ -146,7 +146,7 @@ QString QPrinterInfo::printerName() const bool QPrinterInfo::isNull() const { const Q_D(QPrinterInfo); - return d->isNull; + return d == &QPrinterInfoPrivate::shared_null; } /*! diff --git a/src/gui/painting/qprinterinfo_p.h b/src/gui/painting/qprinterinfo_p.h index f5981d4..7781d59 100644 --- a/src/gui/painting/qprinterinfo_p.h +++ b/src/gui/painting/qprinterinfo_p.h @@ -65,7 +65,7 @@ class QPrinterInfoPrivate { public: QPrinterInfoPrivate(const QString& name = QString()) : - name(name), isNull(false), isDefault(false) + name(name), isDefault(false) #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) #if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) , cupsPrinterIndex(0), hasPaperSizes(false) @@ -78,7 +78,6 @@ public: static QPrinterInfoPrivate shared_null; QString name; - bool isNull; bool isDefault; #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) -- cgit v0.12 From b24447e0f20db4a40df724476c6542ea44590935 Mon Sep 17 00:00:00 2001 From: axis Date: Mon, 20 Dec 2010 16:09:50 +0100 Subject: Fixed autotest. --- tests/auto/qprinterinfo/tst_qprinterinfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qprinterinfo/tst_qprinterinfo.cpp b/tests/auto/qprinterinfo/tst_qprinterinfo.cpp index c3fad6c..4f767a5 100644 --- a/tests/auto/qprinterinfo/tst_qprinterinfo.cpp +++ b/tests/auto/qprinterinfo/tst_qprinterinfo.cpp @@ -134,7 +134,7 @@ QStringList tst_QPrinterInfo::getPrintersFromSystem() QString output = getOutputFromCommand(command); QStringList list = output.split(QChar::fromLatin1('\n')); - QRegExp reg("^[Pp]rinter ([.a-zA-Z0-9_-]+)"); + QRegExp reg("^[Pp]rinter ([.a-zA-Z0-9-_@]+)"); for (int c = 0; c < list.size(); ++c) { if (reg.indexIn(list[c]) >= 0) { QString printer = reg.cap(1); -- cgit v0.12 From 9a18739c538013a7f2111e68e9255379cfbd9a57 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Tue, 12 Oct 2010 13:11:38 +0200 Subject: Ensure that every thread does contend in the contention tests 2 semaphore barrier is not enough to ensure that every thread does run as part of the benchmark. It is possible that a single thread, given enough time, could do all the work while the other threads remain dormant. Prevent this by making sure that the each thread rendevous with both the semaphore barriers at the start of their run(), yields after unlocking, and then rendevous again at the end. Reviewed-by: joao --- .../corelib/thread/qmutex/tst_qmutex.cpp | 93 ++++++++++++++-------- 1 file changed, 60 insertions(+), 33 deletions(-) diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index 7a6b45c..cbfffe5 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -95,6 +95,9 @@ class tst_QMutex : public QObject int threadCount; public: + // barriers for the contended tests + static QSemaphore semaphore1, semaphore2, semaphore3, semaphore4; + tst_QMutex() { // at least 2 threads, even on single cpu/core machines @@ -119,6 +122,11 @@ private slots: void contendedQMutexLocker(); }; +QSemaphore tst_QMutex::semaphore1; +QSemaphore tst_QMutex::semaphore2; +QSemaphore tst_QMutex::semaphore3; +QSemaphore tst_QMutex::semaphore4; + void tst_QMutex::noThread_data() { QTest::addColumn("t"); @@ -220,17 +228,17 @@ void tst_QMutex::contendedNative_data() class NativeMutexThread : public QThread { - QSemaphore *semaphore1, *semaphore2; NativeMutexType *mutex; int iterations, msleepDuration; public: bool done; - NativeMutexThread(QSemaphore *semaphore1, QSemaphore *semaphore2, NativeMutexType *mutex, int iterations, int msleepDuration) - : semaphore1(semaphore1), semaphore2(semaphore2), mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + NativeMutexThread(NativeMutexType *mutex, int iterations, int msleepDuration) + : mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) { } void run() { forever { - semaphore1->acquire(); + tst_QMutex::semaphore1.release(); + tst_QMutex::semaphore2.acquire(); if (done) break; for (int i = 0; i < iterations; ++i) { @@ -238,8 +246,11 @@ public: if (msleepDuration >= 0) msleep(msleepDuration); NativeMutexUnlock(mutex); + + QThread::yieldCurrentThread(); } - semaphore2->release(); + tst_QMutex::semaphore3.release(); + tst_QMutex::semaphore4.acquire(); } } }; @@ -249,24 +260,26 @@ void tst_QMutex::contendedNative() QFETCH(int, iterations); QFETCH(int, msleepDuration); - QSemaphore semaphore1, semaphore2; NativeMutexType mutex; NativeMutexInitialize(&mutex); QVector threads(threadCount); for (int i = 0; i < threads.count(); ++i) { - threads[i] = new NativeMutexThread(&semaphore1, &semaphore2, &mutex, iterations, msleepDuration); + threads[i] = new NativeMutexThread(&mutex, iterations, msleepDuration); threads[i]->start(); } QBENCHMARK { - semaphore1.release(threadCount); - semaphore2.acquire(threadCount); + semaphore1.acquire(threadCount); + semaphore2.release(threadCount); + semaphore3.acquire(threadCount); + semaphore4.release(threadCount); } for (int i = 0; i < threads.count(); ++i) threads[i]->done = true; - semaphore1.release(threadCount); + semaphore1.acquire(threadCount); + semaphore2.release(threadCount); for (int i = 0; i < threads.count(); ++i) threads[i]->wait(); qDeleteAll(threads); @@ -276,17 +289,17 @@ void tst_QMutex::contendedNative() class QMutexThread : public QThread { - QSemaphore *semaphore1, *semaphore2; QMutex *mutex; int iterations, msleepDuration; public: bool done; - QMutexThread(QSemaphore *semaphore1, QSemaphore *semaphore2, QMutex *mutex, int iterations, int msleepDuration) - : semaphore1(semaphore1), semaphore2(semaphore2), mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + QMutexThread(QMutex *mutex, int iterations, int msleepDuration) + : mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) { } void run() { forever { - semaphore1->acquire(); + tst_QMutex::semaphore1.release(); + tst_QMutex::semaphore2.acquire(); if (done) break; for (int i = 0; i < iterations; ++i) { @@ -294,8 +307,11 @@ public: if (msleepDuration >= 0) msleep(msleepDuration); mutex->unlock(); + + QThread::yieldCurrentThread(); } - semaphore2->release(); + tst_QMutex::semaphore3.release(); + tst_QMutex::semaphore4.acquire(); } } }; @@ -304,23 +320,26 @@ void tst_QMutex::contendedQMutex() { QFETCH(int, iterations); QFETCH(int, msleepDuration); - QSemaphore semaphore1, semaphore2; + QMutex mutex; QVector threads(threadCount); for (int i = 0; i < threads.count(); ++i) { - threads[i] = new QMutexThread(&semaphore1, &semaphore2, &mutex, iterations, msleepDuration); + threads[i] = new QMutexThread(&mutex, iterations, msleepDuration); threads[i]->start(); } QBENCHMARK { - semaphore1.release(threadCount); - semaphore2.acquire(threadCount); + semaphore1.acquire(threadCount); + semaphore2.release(threadCount); + semaphore3.acquire(threadCount); + semaphore4.release(threadCount); } for (int i = 0; i < threads.count(); ++i) threads[i]->done = true; - semaphore1.release(threadCount); + semaphore1.acquire(threadCount); + semaphore2.release(threadCount); for (int i = 0; i < threads.count(); ++i) threads[i]->wait(); qDeleteAll(threads); @@ -328,25 +347,30 @@ void tst_QMutex::contendedQMutex() class QMutexLockerThread : public QThread { - QSemaphore *semaphore1, *semaphore2; QMutex *mutex; int iterations, msleepDuration; public: bool done; - QMutexLockerThread(QSemaphore *semaphore1, QSemaphore *semaphore2, QMutex *mutex, int iterations, int msleepDuration) - : semaphore1(semaphore1), semaphore2(semaphore2), mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + QMutexLockerThread(QMutex *mutex, int iterations, int msleepDuration) + : mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) { } void run() { forever { - semaphore1->acquire(); + tst_QMutex::semaphore1.release(); + tst_QMutex::semaphore2.acquire(); if (done) break; for (int i = 0; i < iterations; ++i) { - QMutexLocker locker(mutex); - if (msleepDuration >= 0) - msleep(msleepDuration); + { + QMutexLocker locker(mutex1); + if (msleepDuration >= 0) + msleep(msleepDuration); + } + + QThread::yieldCurrentThread(); } - semaphore2->release(); + tst_QMutex::semaphore3.release(); + tst_QMutex::semaphore4.acquire(); } } }; @@ -355,23 +379,26 @@ void tst_QMutex::contendedQMutexLocker() { QFETCH(int, iterations); QFETCH(int, msleepDuration); - QSemaphore semaphore1, semaphore2; + QMutex mutex; QVector threads(threadCount); for (int i = 0; i < threads.count(); ++i) { - threads[i] = new QMutexLockerThread(&semaphore1, &semaphore2, &mutex, iterations, msleepDuration); + threads[i] = new QMutexLockerThread(&mutex, iterations, msleepDuration); threads[i]->start(); } QBENCHMARK { - semaphore1.release(threadCount); - semaphore2.acquire(threadCount); + semaphore1.acquire(threadCount); + semaphore2.release(threadCount); + semaphore3.acquire(threadCount); + semaphore4.release(threadCount); } for (int i = 0; i < threads.count(); ++i) threads[i]->done = true; - semaphore1.release(threadCount); + semaphore1.acquire(threadCount); + semaphore2.release(threadCount); for (int i = 0; i < threads.count(); ++i) threads[i]->wait(); qDeleteAll(threads); -- cgit v0.12 From d9c00320a1e1f6aa7d0083b3415704e20e216a1f Mon Sep 17 00:00:00 2001 From: axis Date: Mon, 6 Dec 2010 13:41:51 +0100 Subject: Moved the default dependency targets to default_post.prf. The file that they were in would not be parsed if CONFIG -= qt, but it always needs to be parsed, otherwise apps that don't use Qt will fail the sis file creation. RevBy: Miikka Heikkinen --- mkspecs/features/symbian/default_post.prf | 47 +++++++++++++++++++++++++++++++ mkspecs/features/symbian/qt.prf | 47 ------------------------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index a2ac377..89f655d 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -53,6 +53,53 @@ isEmpty(TARGET.UID2) { } } +# Allow .pro files to specify include path(s) to be prepended to the list. +# +# This allows the project to override the default ordering, whereby paths +# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause +# problems when both the epoc32/include tree and a Qt include directory +# contain a header of the same name - in this case, the Qt header is always +# included by virtue of its path appearing first in the SYSTEMINCLUDE +# directives in the generated MMP file. +# +# To work around this situation, the following line can be added to the .pro +# file: +# PREPEND_INCLUDEPATH = /epoc32/include +# +INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH + +# Add dependency to Qt package to all other projects besides Qt libs. +# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, +# while self-signed version typically has temporary UID3 of 0xE001E61C. +contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) { + qt_pkg_name = Qt + pkg_depends_qt += \ + "; Default dependency to Qt libraries" \ + "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(qt_pkg_name)}" + + # Projects linking to webkit need dependency to webkit + contains(QT, webkit): { + # these can be overridden by mkspecs/modules/qt_webkit.pri + isEmpty(QT_WEBKIT_MAJOR_VERSION) { + QT_WEBKIT_MAJOR_VERSION = $${QT_MAJOR_VERSION} + QT_WEBKIT_MINOR_VERSION = $${QT_MINOR_VERSION} + QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION} + } + + webkit_pkg_name = QtWebKit + pkg_depends_webkit += \ + "; Dependency to Qt Webkit" \ + "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(webkit_pkg_name)}" + } else { + default_deployment.pkg_prerules -= pkg_depends_webkit + } +} else { + default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt +} + +isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000 +isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x020000 0x800000 + # Supports S60 3.1, 3.2, 5.0, Symbian^3, and Symbian^4 by default platform_product_id = S60ProductID platform_product_id = $$addLanguageDependentPkgItem(platform_product_id) diff --git a/mkspecs/features/symbian/qt.prf b/mkspecs/features/symbian/qt.prf index c8f97aa..c376b64 100644 --- a/mkspecs/features/symbian/qt.prf +++ b/mkspecs/features/symbian/qt.prf @@ -6,53 +6,6 @@ CONFIG += qtmain load(qt) -# Allow .pro files to specify include path(s) to be prepended to the list. -# -# This allows the project to override the default ordering, whereby paths -# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause -# problems when both the epoc32/include tree and a Qt include directory -# contain a header of the same name - in this case, the Qt header is always -# included by virtue of its path appearing first in the SYSTEMINCLUDE -# directives in the generated MMP file. -# -# To work around this situation, the following line can be added to the .pro -# file: -# PREPEND_INCLUDEPATH = /epoc32/include -# -INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH - -# Add dependency to Qt package to all other projects besides Qt libs. -# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, -# while self-signed version typically has temporary UID3 of 0xE001E61C. -contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) { - qt_pkg_name = Qt - pkg_depends_qt += \ - "; Default dependency to Qt libraries" \ - "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(qt_pkg_name)}" - - # Projects linking to webkit need dependency to webkit - contains(QT, webkit): { - # these can be overridden by mkspecs/modules/qt_webkit.pri - isEmpty(QT_WEBKIT_MAJOR_VERSION) { - QT_WEBKIT_MAJOR_VERSION = $${QT_MAJOR_VERSION} - QT_WEBKIT_MINOR_VERSION = $${QT_MINOR_VERSION} - QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION} - } - - webkit_pkg_name = QtWebKit - pkg_depends_webkit += \ - "; Dependency to Qt Webkit" \ - "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(webkit_pkg_name)}" - } else { - default_deployment.pkg_prerules -= pkg_depends_webkit - } -} else { - default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt -} - -isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000 -isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x020000 0x800000 - # Workaround for the fact that Gnupoc and Symbian chose different approaches to # the letter casing of headers. contains(CONFIG, is_using_gnupoc) { -- cgit v0.12 From 2d87a865b26250dcecbcf73178f8091e0724106d Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Wed, 13 Oct 2010 12:33:27 +0200 Subject: test contention when using 2 mutexes add test data and adapt the test harness to allow testing contention performance when using 2 mutexes (2 mutexes are often used inside of Qt, so we want to ensure that this also performs well). Reviewed-by: joao --- .../corelib/thread/qmutex/tst_qmutex.cpp | 81 ++++++++++++++-------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index cbfffe5..b0c5702 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -218,22 +218,31 @@ void tst_QMutex::contendedNative_data() { QTest::addColumn("iterations"); QTest::addColumn("msleepDuration"); - QTest::newRow("baseline") << 0 << -1; - QTest::newRow("no msleep") << 1000 << -1; - QTest::newRow("msleep(0)") << 1000 << 0; - QTest::newRow("msleep(1)") << 10 << 1; - QTest::newRow("msleep(2)") << 10 << 2; - QTest::newRow("msleep(10)") << 10 << 10; + QTest::addColumn("use2mutexes"); + + QTest::newRow("baseline") << 0 << -1 << false; + + QTest::newRow("no msleep, 1 mutex") << 1000 << -1 << false; + QTest::newRow("no msleep, 2 mutexes") << 1000 << -1 << true; + QTest::newRow("msleep(0), 1 mutex") << 1000 << 0 << false; + QTest::newRow("msleep(0), 2 mutexes") << 1000 << 0 << true; + QTest::newRow("msleep(1), 1 mutex") << 10 << 1 << false; + QTest::newRow("msleep(1), 2 mutexes") << 10 << 1 << true; + QTest::newRow("msleep(2), 1 mutex") << 10 << 2 << false; + QTest::newRow("msleep(2), 2 mutexes") << 10 << 2 << true; + QTest::newRow("msleep(10), 1 mutex") << 10 << 10 << false; + QTest::newRow("msleep(10), 2 mutexes") << 10 << 10 << true; } class NativeMutexThread : public QThread { - NativeMutexType *mutex; + NativeMutexType *mutex1, *mutex2; int iterations, msleepDuration; + bool use2mutexes; public: bool done; - NativeMutexThread(NativeMutexType *mutex, int iterations, int msleepDuration) - : mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + NativeMutexThread(NativeMutexType *mutex1, NativeMutexType *mutex2, int iterations, int msleepDuration, bool use2mutexes) + : mutex1(mutex1), mutex2(mutex2), iterations(iterations), msleepDuration(msleepDuration), use2mutexes(use2mutexes), done(false) { } void run() { forever { @@ -242,10 +251,14 @@ public: if (done) break; for (int i = 0; i < iterations; ++i) { - NativeMutexLock(mutex); + NativeMutexLock(mutex1); + if (use2mutexes) + NativeMutexLock(mutex2); if (msleepDuration >= 0) msleep(msleepDuration); - NativeMutexUnlock(mutex); + if (use2mutexes) + NativeMutexUnlock(mutex2); + NativeMutexUnlock(mutex1); QThread::yieldCurrentThread(); } @@ -259,13 +272,15 @@ void tst_QMutex::contendedNative() { QFETCH(int, iterations); QFETCH(int, msleepDuration); + QFETCH(bool, use2mutexes); - NativeMutexType mutex; - NativeMutexInitialize(&mutex); + NativeMutexType mutex1, mutex2; + NativeMutexInitialize(&mutex1); + NativeMutexInitialize(&mutex2); QVector threads(threadCount); for (int i = 0; i < threads.count(); ++i) { - threads[i] = new NativeMutexThread(&mutex, iterations, msleepDuration); + threads[i] = new NativeMutexThread(&mutex1, &mutex2, iterations, msleepDuration, use2mutexes); threads[i]->start(); } @@ -284,17 +299,19 @@ void tst_QMutex::contendedNative() threads[i]->wait(); qDeleteAll(threads); - NativeMutexDestroy(&mutex); + NativeMutexDestroy(&mutex1); + NativeMutexDestroy(&mutex2); } class QMutexThread : public QThread { - QMutex *mutex; + QMutex *mutex1, *mutex2; int iterations, msleepDuration; + bool use2mutexes; public: bool done; - QMutexThread(QMutex *mutex, int iterations, int msleepDuration) - : mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + QMutexThread(QMutex *mutex1, QMutex *mutex2, int iterations, int msleepDuration, bool use2mutexes) + : mutex1(mutex1), mutex2(mutex2), iterations(iterations), msleepDuration(msleepDuration), use2mutexes(use2mutexes), done(false) { } void run() { forever { @@ -303,10 +320,14 @@ public: if (done) break; for (int i = 0; i < iterations; ++i) { - mutex->lock(); + mutex1->lock(); + if (use2mutexes) + mutex2->lock(); if (msleepDuration >= 0) msleep(msleepDuration); - mutex->unlock(); + if (use2mutexes) + mutex2->unlock(); + mutex1->unlock(); QThread::yieldCurrentThread(); } @@ -320,12 +341,13 @@ void tst_QMutex::contendedQMutex() { QFETCH(int, iterations); QFETCH(int, msleepDuration); + QFETCH(bool, use2mutexes); - QMutex mutex; + QMutex mutex1, mutex2; QVector threads(threadCount); for (int i = 0; i < threads.count(); ++i) { - threads[i] = new QMutexThread(&mutex, iterations, msleepDuration); + threads[i] = new QMutexThread(&mutex1, &mutex2, iterations, msleepDuration, use2mutexes); threads[i]->start(); } @@ -347,12 +369,13 @@ void tst_QMutex::contendedQMutex() class QMutexLockerThread : public QThread { - QMutex *mutex; + QMutex *mutex1, *mutex2; int iterations, msleepDuration; + bool use2mutexes; public: bool done; - QMutexLockerThread(QMutex *mutex, int iterations, int msleepDuration) - : mutex(mutex), iterations(iterations), msleepDuration(msleepDuration), done(false) + QMutexLockerThread(QMutex *mutex1, QMutex *mutex2, int iterations, int msleepDuration, bool use2mutexes) + : mutex1(mutex1), mutex2(mutex2), iterations(iterations), msleepDuration(msleepDuration), use2mutexes(use2mutexes), done(false) { } void run() { forever { @@ -362,7 +385,8 @@ public: break; for (int i = 0; i < iterations; ++i) { { - QMutexLocker locker(mutex1); + QMutexLocker locker1(mutex1); + QMutexLocker locker2(use2mutexes ? mutex2 : 0); if (msleepDuration >= 0) msleep(msleepDuration); } @@ -379,12 +403,13 @@ void tst_QMutex::contendedQMutexLocker() { QFETCH(int, iterations); QFETCH(int, msleepDuration); + QFETCH(bool, use2mutexes); - QMutex mutex; + QMutex mutex1, mutex2; QVector threads(threadCount); for (int i = 0; i < threads.count(); ++i) { - threads[i] = new QMutexLockerThread(&mutex, iterations, msleepDuration); + threads[i] = new QMutexLockerThread(&mutex1, &mutex2, iterations, msleepDuration, use2mutexes); threads[i]->start(); } -- cgit v0.12 From d9e35493d494df60d771a928a8d0dbde2b66906e Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Thu, 16 Sep 2010 10:50:25 +0200 Subject: Move contender count maintenance to QMutexPrivate Make the cross-platform implementation of QMutex in qmutex.cpp only use testAndSetAcquire(0, 1) and testAndSetRelease(1, 0) like in the new inline functions in qmutex.h This will allow us to open up for more platform-specific optimizations to improve performance of contended QMutexes. Reviewed-by: joao --- src/corelib/thread/qmutex.cpp | 43 ++++++++------------------------------ src/corelib/thread/qmutex_unix.cpp | 5 +++++ src/corelib/thread/qmutex_win.cpp | 8 ++++++- 3 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index b85a22d..403468a 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -157,15 +157,12 @@ void QMutex::lock() return; } - bool isLocked = d->contenders.fetchAndAddAcquire(1) == 0; + bool isLocked = d->contenders.testAndSetAcquire(0, 1); if (!isLocked) { // didn't get the lock, wait for it isLocked = d->wait(); Q_ASSERT_X(isLocked, "QMutex::lock", "Internal error, infinite wait has timed out."); - - // don't need to wait for the lock anymore - d->contenders.deref(); } d->owner = self; @@ -174,8 +171,7 @@ void QMutex::lock() return; } - - bool isLocked = d->contenders == 0 && d->contenders.testAndSetAcquire(0, 1); + bool isLocked = d->contenders.testAndSetAcquire(0, 1); if (!isLocked) { lockInternal(); } @@ -211,7 +207,7 @@ bool QMutex::tryLock() return true; } - bool isLocked = d->contenders == 0 && d->contenders.testAndSetAcquire(0, 1); + bool isLocked = d->contenders.testAndSetAcquire(0, 1); if (!isLocked) { // some other thread has the mutex locked, or we tried to // recursively lock an non-recursive mutex @@ -224,13 +220,7 @@ bool QMutex::tryLock() return isLocked; } - bool isLocked = d->contenders == 0 && d->contenders.testAndSetAcquire(0, 1); - if (!isLocked) { - // some other thread has the mutex locked, or we tried to - // recursively lock an non-recursive mutex - return isLocked; - } - return isLocked; + return d->contenders.testAndSetAcquire(0, 1); } /*! \overload @@ -269,13 +259,10 @@ bool QMutex::tryLock(int timeout) return true; } - bool isLocked = d->contenders.fetchAndAddAcquire(1) == 0; + bool isLocked = d->contenders.testAndSetAcquire(0, 1); if (!isLocked) { // didn't get the lock, wait for it isLocked = d->wait(timeout); - - // don't need to wait for the lock anymore - d->contenders.deref(); if (!isLocked) return false; } @@ -286,17 +273,9 @@ bool QMutex::tryLock(int timeout) return true; } - bool isLocked = d->contenders.fetchAndAddAcquire(1) == 0; - if (!isLocked) { - // didn't get the lock, wait for it - isLocked = d->wait(timeout); - - // don't need to wait for the lock anymore - d->contenders.deref(); - if (!isLocked) - return false; - } - return true; + return (d->contenders.testAndSetAcquire(0, 1) + // didn't get the lock, wait for it + || d->wait(timeout)); } @@ -310,7 +289,6 @@ bool QMutex::tryLock(int timeout) void QMutex::unlock() { QMutexPrivate *d = static_cast(this->d); - if (d->recursive) { if (!--d->count) { d->owner = 0; @@ -460,16 +438,13 @@ void QMutex::lockInternal() do { if (spinCount++ > maximumSpinCount) { // puts("spinning useless, sleeping"); - bool isLocked = d->contenders.fetchAndAddAcquire(1) == 0; + bool isLocked = d->contenders.testAndSetAcquire(0, 1); if (!isLocked) { // didn't get the lock, wait for it isLocked = d->wait(); Q_ASSERT_X(isLocked, "QMutex::lock", "Internal error, infinite wait has timed out."); - - // don't need to wait for the lock anymore - d->contenders.deref(); } // decrease the lastSpinCount since we didn't actually get the lock by spinning spinCount = -d->lastSpinCount / SpinCountPenalizationDivisor; diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp index 7e7ef22..dcf8b9f 100644 --- a/src/corelib/thread/qmutex_unix.cpp +++ b/src/corelib/thread/qmutex_unix.cpp @@ -77,6 +77,10 @@ QMutexPrivate::~QMutexPrivate() bool QMutexPrivate::wait(int timeout) { + if (contenders.fetchAndAddAcquire(1) == 0) { + // lock acquired without waiting + return true; + } report_error(pthread_mutex_lock(&mutex), "QMutex::lock", "mutex lock"); int errorCode = 0; while (!wakeup) { @@ -101,6 +105,7 @@ bool QMutexPrivate::wait(int timeout) } wakeup = false; report_error(pthread_mutex_unlock(&mutex), "QMutex::lock", "mutex unlock"); + contenders.deref(); return errorCode == 0; } diff --git a/src/corelib/thread/qmutex_win.cpp b/src/corelib/thread/qmutex_win.cpp index a810000..c278f04 100644 --- a/src/corelib/thread/qmutex_win.cpp +++ b/src/corelib/thread/qmutex_win.cpp @@ -60,7 +60,13 @@ QMutexPrivate::~QMutexPrivate() bool QMutexPrivate::wait(int timeout) { - return WaitForSingleObject(event, timeout < 0 ? INFINITE : timeout) == WAIT_OBJECT_0; + if (contenders.fetchAndAddAcquire(1) == 0) { + // lock acquired without waiting + return true; + } + bool returnValue = (WaitForSingleObject(event, timeout < 0 ? INFINITE : timeout) == WAIT_OBJECT_0); + contenders.deref(); + return returnValue; } void QMutexPrivate::wakeUp() -- cgit v0.12 From feb0b0cd47808a77a048c6a13686d39a0540a488 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 1 Oct 2010 09:44:55 +0200 Subject: Remove unnecessary testAndSetAcquire from QMutex::lockInternal() QMutexPrivate::wait() will take care of doing another test for the lock before putting the thread to sleep, so we can avoid another if(). Reviewed-by: joao --- src/corelib/thread/qmutex.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index 403468a..19e2457 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -437,15 +437,12 @@ void QMutex::lockInternal() do { if (spinCount++ > maximumSpinCount) { - // puts("spinning useless, sleeping"); - bool isLocked = d->contenders.testAndSetAcquire(0, 1); - if (!isLocked) { - - // didn't get the lock, wait for it - isLocked = d->wait(); - Q_ASSERT_X(isLocked, "QMutex::lock", - "Internal error, infinite wait has timed out."); - } + // didn't get the lock, wait for it + bool isLocked = d->wait(); + Q_ASSERT_X(isLocked, "QMutex::lock", + "Internal error, infinite wait has timed out."); + Q_UNUSED(isLocked); + // decrease the lastSpinCount since we didn't actually get the lock by spinning spinCount = -d->lastSpinCount / SpinCountPenalizationDivisor; break; -- cgit v0.12 From 87bab705ded31559941020d3c500f43f571f9c16 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 1 Oct 2010 09:45:42 +0200 Subject: Disable spinning under lock contention on single CPU machines Spinning is just wasted time on these systems. Reviewed-by: joao --- src/corelib/thread/qmutex.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index 19e2457..54b3ed4 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -429,6 +429,16 @@ void QMutex::unlock() void QMutex::lockInternal() { QMutexPrivate *d = static_cast(this->d); + + if (QThread::idealThreadCount() == 1) { + // don't spin on single cpu machines + bool isLocked = d->wait(); + Q_ASSERT_X(isLocked, "QMutex::lock", + "Internal error, infinite wait has timed out."); + Q_UNUSED(isLocked); + return; + } + int spinCount = 0; int lastSpinCount = d->lastSpinCount; -- cgit v0.12 From cf17b743d2fe84ab259b7232ab07b58a1872e18e Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Thu, 16 Sep 2010 15:46:43 +0200 Subject: Improve QMutex contention performance on Mac OS X Use a Mach semaphore to implement QMutexPrivate::wait() and ::wakeup(). This makes QMutex perform more or less identically the same as pthread_mutex_t when contended. Reviewed-by: joao --- src/corelib/thread/qmutex_p.h | 8 +++++- src/corelib/thread/qmutex_unix.cpp | 53 +++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index 57a6062..e23be94 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -58,6 +58,10 @@ #include #include +#if defined(Q_OS_MAC) +# include +#endif + QT_BEGIN_NAMESPACE class QMutexPrivate : public QMutexData { @@ -72,7 +76,9 @@ public: Qt::HANDLE owner; uint count; -#if defined(Q_OS_UNIX) +#if defined(Q_OS_MAC) + semaphore_t mach_semaphore; +#elif defined(Q_OS_UNIX) volatile bool wakeup; pthread_mutex_t mutex; pthread_cond_t cond; diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp index dcf8b9f..ce1bfc2 100644 --- a/src/corelib/thread/qmutex_unix.cpp +++ b/src/corelib/thread/qmutex_unix.cpp @@ -53,28 +53,77 @@ #undef wakeup #endif +#if defined(Q_OS_MAC) +# include +# include +#endif + QT_BEGIN_NAMESPACE +#if !defined(Q_OS_MAC) static void report_error(int code, const char *where, const char *what) { if (code != 0) qWarning("%s: %s failure: %s", where, what, qPrintable(qt_error_string(code))); } +#endif QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) - : QMutexData(mode), lastSpinCount(0), owner(0), count(0), wakeup(false) + : QMutexData(mode), lastSpinCount(0), owner(0), count(0) { +#if defined(Q_OS_MAC) + kern_return_t r = semaphore_create(mach_task_self(), &mach_semaphore, SYNC_POLICY_FIFO, 0); + if (r != KERN_SUCCESS) + qWarning("QMutex: failed to create semaphore, error %d", r); +#else + wakeup = false; report_error(pthread_mutex_init(&mutex, NULL), "QMutex", "mutex init"); report_error(pthread_cond_init(&cond, NULL), "QMutex", "cv init"); +#endif } QMutexPrivate::~QMutexPrivate() { +#if defined(Q_OS_MAC) + kern_return_t r = semaphore_destroy(mach_task_self(), mach_semaphore); + if (r != KERN_SUCCESS) + qWarning("QMutex: failed to destroy semaphore, error %d", r); +#else report_error(pthread_cond_destroy(&cond), "QMutex", "cv destroy"); report_error(pthread_mutex_destroy(&mutex), "QMutex", "mutex destroy"); +#endif } +#if defined(Q_OS_MAC) + +bool QMutexPrivate::wait(int timeout) +{ + if (contenders.fetchAndAddAcquire(1) == 0) { + // lock acquired without waiting + return true; + } + bool returnValue; + if (timeout < 0) { + returnValue = semaphore_wait(mach_semaphore) == KERN_SUCCESS; + } else { + mach_timespec_t ts; + ts.tv_nsec = ((timeout % 1000) * 1000) * 1000; + ts.tv_sec = (timeout / 1000); + kern_return_t r = semaphore_timedwait(mach_semaphore, ts); + returnValue = r == KERN_SUCCESS; + } + contenders.deref(); + return returnValue; +} + +void QMutexPrivate::wakeUp() +{ + semaphore_signal(mach_semaphore); +} + +#else // !Q_OS_MAC + bool QMutexPrivate::wait(int timeout) { if (contenders.fetchAndAddAcquire(1) == 0) { @@ -117,6 +166,8 @@ void QMutexPrivate::wakeUp() report_error(pthread_mutex_unlock(&mutex), "QMutex::unlock", "mutex unlock"); } +#endif // !Q_OS_MAC + QT_END_NAMESPACE #endif // QT_NO_THREAD -- cgit v0.12 From 8a7b5aca7b6575013a4e4ee9b99808d25edf6fdf Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Mon, 27 Sep 2010 15:19:45 +0200 Subject: Improve QMutex contention performance on Linux Use futex(2) to implement QMutexPrivate::wait() and ::wakeup(). This makes QMutex perform more or less identically the same as pthread_mutex_t when contended. We have to use the contender count in a different way due to the way that futex() waiting works. Waiting on a futex atomically checks that the value has not changed from the expected value and then puts the thread to sleep. So, on Linux, the contender QAtomicInt will only ever be one of three values: 0 for unlocked, 1 for locked, 2 for contended. This does mean that there is a slight chance for unfairness due to the fetch-and-store to zero in the wakeUp() function, but unfortunately this cannot be avoid as the code is now. Reviewed-by: joao --- src/corelib/thread/qmutex_p.h | 2 +- src/corelib/thread/qmutex_unix.cpp | 43 +++++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index e23be94..2d45cfb 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -78,7 +78,7 @@ public: #if defined(Q_OS_MAC) semaphore_t mach_semaphore; -#elif defined(Q_OS_UNIX) +#elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX) volatile bool wakeup; pthread_mutex_t mutex; pthread_cond_t cond; diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp index ce1bfc2..e872187 100644 --- a/src/corelib/thread/qmutex_unix.cpp +++ b/src/corelib/thread/qmutex_unix.cpp @@ -56,11 +56,15 @@ #if defined(Q_OS_MAC) # include # include +#elif defined(Q_OS_LINUX) +# include +# include +# include #endif QT_BEGIN_NAMESPACE -#if !defined(Q_OS_MAC) +#if !defined(Q_OS_MAC) && !defined(Q_OS_LINUX) static void report_error(int code, const char *where, const char *what) { if (code != 0) @@ -76,7 +80,7 @@ QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) kern_return_t r = semaphore_create(mach_task_self(), &mach_semaphore, SYNC_POLICY_FIFO, 0); if (r != KERN_SUCCESS) qWarning("QMutex: failed to create semaphore, error %d", r); -#else +#elif !defined(Q_OS_LINUX) wakeup = false; report_error(pthread_mutex_init(&mutex, NULL), "QMutex", "mutex init"); report_error(pthread_cond_init(&cond, NULL), "QMutex", "cv init"); @@ -89,7 +93,7 @@ QMutexPrivate::~QMutexPrivate() kern_return_t r = semaphore_destroy(mach_task_self(), mach_semaphore); if (r != KERN_SUCCESS) qWarning("QMutex: failed to destroy semaphore, error %d", r); -#else +#elif !defined(Q_OS_LINUX) report_error(pthread_cond_destroy(&cond), "QMutex", "cv destroy"); report_error(pthread_mutex_destroy(&mutex), "QMutex", "mutex destroy"); #endif @@ -122,7 +126,36 @@ void QMutexPrivate::wakeUp() semaphore_signal(mach_semaphore); } -#else // !Q_OS_MAC +#elif defined(Q_OS_LINUX) + +static inline int _q_futex(volatile int *addr, int op, int val, const struct timespec *timeout, int *addr2, int val2) +{ + return syscall(SYS_futex, addr, op, val, timeout, addr2, val2); +} + +bool QMutexPrivate::wait(int timeout) +{ + while (contenders.fetchAndStoreAcquire(2) > 0) { + struct timespec ts, *pts = 0; + if (timeout >= 0) { + ts.tv_nsec = ((timeout % 1000) * 1000) * 1000; + ts.tv_sec = (timeout / 1000); + pts = &ts; + } + int r = _q_futex(&contenders._q_value, FUTEX_WAIT, 2, pts, 0, 0); + if (r != 0 && errno == ETIMEDOUT) + return false; + } + return true; +} + +void QMutexPrivate::wakeUp() +{ + (void) contenders.fetchAndStoreRelease(0); + (void) _q_futex(&contenders._q_value, FUTEX_WAKE, 1, 0, 0, 0); +} + +#else // !Q_OS_MAC && !Q_OS_LINUX bool QMutexPrivate::wait(int timeout) { @@ -166,7 +199,7 @@ void QMutexPrivate::wakeUp() report_error(pthread_mutex_unlock(&mutex), "QMutex::unlock", "mutex unlock"); } -#endif // !Q_OS_MAC +#endif // !Q_OS_MAC && !Q_OS_LINUX QT_END_NAMESPACE -- cgit v0.12 From 3b6a84de5c5ed2e1970ad2b396292babb9173227 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 1 Oct 2010 09:50:22 +0200 Subject: Optimize adaptive spinning mutex code Change the adaptive spinning code to be elapsed time based instead of iteration based. The new approach will quickly reduce the amount of allowed spinning time when it detects that lock contention is resolved by waiting instead of spinning. We get better results by dynamically adjusting for elapsed running time instead of trying to fine tune iteration counts that won't work for all CPU types, speeds, etc. From observation, lock performance suffers if the spin time is higher than the minimum wait time. Because of this, QMutex never increases the spin time, it only reduces the spin time to the minimum observed wait time. For very long wait times, we disable spinning completely (and always resolve contention by waiting). Use QThread::yieldCurrentThread() when spinning on a contended mutex. Comment from the code: be a good citizen... yielding lets something else run if there is something to run, but may also relieve memory pressure if not. Reviewed-by: joao --- src/corelib/thread/qmutex.cpp | 36 ++++++++++++++++++++---------------- src/corelib/thread/qmutex_p.h | 4 +++- src/corelib/thread/qmutex_unix.cpp | 2 +- src/corelib/thread/qmutex_win.cpp | 2 +- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index 54b3ed4..72f87b7 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -45,6 +45,7 @@ #ifndef QT_NO_THREAD #include "qatomic.h" +#include "qelapsedtimer.h" #include "qthread.h" #include "qmutex_p.h" @@ -439,31 +440,34 @@ void QMutex::lockInternal() return; } - int spinCount = 0; - int lastSpinCount = d->lastSpinCount; - - enum { AdditionalSpins = 20, SpinCountPenalizationDivisor = 4 }; - const int maximumSpinCount = lastSpinCount + AdditionalSpins; - + QElapsedTimer elapsedTimer; + elapsedTimer.start(); do { - if (spinCount++ > maximumSpinCount) { - // didn't get the lock, wait for it + if (elapsedTimer.hasExpired(d->maximumSpinTime)) { + // didn't get the lock, wait for it, since we're not going to gain anything by spinning more + int spinTime = elapsedTimer.restart(); bool isLocked = d->wait(); Q_ASSERT_X(isLocked, "QMutex::lock", "Internal error, infinite wait has timed out."); Q_UNUSED(isLocked); - // decrease the lastSpinCount since we didn't actually get the lock by spinning - spinCount = -d->lastSpinCount / SpinCountPenalizationDivisor; - break; + int maximumSpinTime = d->maximumSpinTime; + int waitTime = elapsedTimer.elapsed(); + // adjust the spin count when spinning does not benefit contention performance + if (spinTime + waitTime > QMutexPrivate::MaximumSpinTimeThreshold) { + // long waits, stop spinning + d->maximumSpinTime = 0; + } else if (waitTime < maximumSpinTime) { + // never spin more than the minimum wait time (otherwise we may perform worse) + d->maximumSpinTime = waitTime; + } + return; } + // be a good citizen... yielding lets something else run if there is something to run, but may also relieve memory pressure if not + QThread::yieldCurrentThread(); } while (d->contenders != 0 || !d->contenders.testAndSetAcquire(0, 1)); - // adjust the last spin lock count - lastSpinCount = d->lastSpinCount; - d->lastSpinCount = spinCount >= 0 - ? qMax(lastSpinCount, spinCount) - : lastSpinCount + spinCount; + // spinning is working, do not change the spin time } /*! diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index 2d45cfb..6de42ad 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -72,7 +72,9 @@ public: bool wait(int timeout = -1); void wakeUp(); - volatile int lastSpinCount; + // half of a frame (in ms) at 60fps + enum { MaximumSpinTimeThreshold = 8 }; + volatile int maximumSpinTime; Qt::HANDLE owner; uint count; diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp index e872187..48014cc 100644 --- a/src/corelib/thread/qmutex_unix.cpp +++ b/src/corelib/thread/qmutex_unix.cpp @@ -74,7 +74,7 @@ static void report_error(int code, const char *where, const char *what) QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) - : QMutexData(mode), lastSpinCount(0), owner(0), count(0) + : QMutexData(mode), maximumSpinTime(MaximumSpinTimeThreshold), owner(0), count(0) { #if defined(Q_OS_MAC) kern_return_t r = semaphore_create(mach_task_self(), &mach_semaphore, SYNC_POLICY_FIFO, 0); diff --git a/src/corelib/thread/qmutex_win.cpp b/src/corelib/thread/qmutex_win.cpp index c278f04..89e8b87 100644 --- a/src/corelib/thread/qmutex_win.cpp +++ b/src/corelib/thread/qmutex_win.cpp @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) - : QMutexData(mode), lastSpinCount(0), owner(0), count(0) + : QMutexData(mode), maximumSpinTime(MaximumSpinTimeThreshold), owner(0), count(0) { event = CreateEvent(0, FALSE, FALSE, 0); if (!event) -- cgit v0.12 From 6c1180505a0ac55bfd0eac87c2a61103a8fdec14 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 1 Oct 2010 10:21:10 +0200 Subject: Store and track spin times in nanosecond resolution Use the new QElapsedTimer::nsecsElapsed() and store all values in qint64 instead of int. The maximum spin time threshold is now 1000000ns, or 1ms. Spinning for longer than 1ms is just a waste of time, CPU, and battery. Reviewed-by: joao --- src/corelib/thread/qmutex.cpp | 9 +++++---- src/corelib/thread/qmutex_p.h | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index 72f87b7..03e623f 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -443,16 +443,17 @@ void QMutex::lockInternal() QElapsedTimer elapsedTimer; elapsedTimer.start(); do { - if (elapsedTimer.hasExpired(d->maximumSpinTime)) { + qint64 spinTime = elapsedTimer.nsecsElapsed(); + if (spinTime > d->maximumSpinTime) { // didn't get the lock, wait for it, since we're not going to gain anything by spinning more - int spinTime = elapsedTimer.restart(); + elapsedTimer.start(); bool isLocked = d->wait(); Q_ASSERT_X(isLocked, "QMutex::lock", "Internal error, infinite wait has timed out."); Q_UNUSED(isLocked); - int maximumSpinTime = d->maximumSpinTime; - int waitTime = elapsedTimer.elapsed(); + qint64 maximumSpinTime = d->maximumSpinTime; + qint64 waitTime = elapsedTimer.nsecsElapsed(); // adjust the spin count when spinning does not benefit contention performance if (spinTime + waitTime > QMutexPrivate::MaximumSpinTimeThreshold) { // long waits, stop spinning diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index 6de42ad..fa6e879 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -72,9 +72,9 @@ public: bool wait(int timeout = -1); void wakeUp(); - // half of a frame (in ms) at 60fps - enum { MaximumSpinTimeThreshold = 8 }; - volatile int maximumSpinTime; + // 1ms = 1000000ns + enum { MaximumSpinTimeThreshold = 1000000 }; + volatile qint64 maximumSpinTime; Qt::HANDLE owner; uint count; -- cgit v0.12 From 44cf2baeb07bf48270a6a41c8f1433517130ba01 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 1 Oct 2010 10:22:10 +0200 Subject: Track average wait times under our maximum spin time threshold Further observation shows that spin times slightly over the average wait time produce the best results. This change keeps a heavily weighted average of the wait times under 1.5ms (1.5 times the max spin threshold), and adjusts the spin time to be 150% of the average wait time. Introduce spin time adjustments when spin locking works, and adjust to between 150% of the average wait time and the maximum threshold. Reviewed-by: joao --- src/corelib/thread/qmutex.cpp | 24 ++++++++++++++++++------ src/corelib/thread/qmutex_p.h | 1 + src/corelib/thread/qmutex_unix.cpp | 2 +- src/corelib/thread/qmutex_win.cpp | 2 +- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index 03e623f..1009f7b 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -453,14 +453,20 @@ void QMutex::lockInternal() Q_UNUSED(isLocked); qint64 maximumSpinTime = d->maximumSpinTime; - qint64 waitTime = elapsedTimer.nsecsElapsed(); + qint64 averageWaitTime = d->averageWaitTime; + qint64 actualWaitTime = elapsedTimer.nsecsElapsed(); + if (actualWaitTime < (QMutexPrivate::MaximumSpinTimeThreshold * 3 / 2)) { + // measure the wait times + averageWaitTime = d->averageWaitTime = qMin((averageWaitTime + actualWaitTime) / 2, qint64(QMutexPrivate::MaximumSpinTimeThreshold)); + } + // adjust the spin count when spinning does not benefit contention performance - if (spinTime + waitTime > QMutexPrivate::MaximumSpinTimeThreshold) { + if ((spinTime + actualWaitTime) - qint64(QMutexPrivate::MaximumSpinTimeThreshold) >= qint64(QMutexPrivate::MaximumSpinTimeThreshold)) { // long waits, stop spinning d->maximumSpinTime = 0; - } else if (waitTime < maximumSpinTime) { - // never spin more than the minimum wait time (otherwise we may perform worse) - d->maximumSpinTime = waitTime; + } else { + // allow spinning if wait times decrease, but never spin more than the average wait time (otherwise we may perform worse) + d->maximumSpinTime = qBound(qint64(averageWaitTime * 3 / 2), maximumSpinTime / 2, qint64(QMutexPrivate::MaximumSpinTimeThreshold)); } return; } @@ -468,7 +474,13 @@ void QMutex::lockInternal() QThread::yieldCurrentThread(); } while (d->contenders != 0 || !d->contenders.testAndSetAcquire(0, 1)); - // spinning is working, do not change the spin time + // spinning is working, do not change the spin time (unless we are using much less time than allowed to spin) + qint64 maximumSpinTime = d->maximumSpinTime; + qint64 spinTime = elapsedTimer.nsecsElapsed(); + if (spinTime < maximumSpinTime / 2) { + // we are using much less time than we need, adjust the limit + d->maximumSpinTime = qBound(qint64(d->averageWaitTime * 3 / 2), maximumSpinTime / 2, qint64(QMutexPrivate::MaximumSpinTimeThreshold)); + } } /*! diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index fa6e879..9d40bea 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -75,6 +75,7 @@ public: // 1ms = 1000000ns enum { MaximumSpinTimeThreshold = 1000000 }; volatile qint64 maximumSpinTime; + volatile qint64 averageWaitTime; Qt::HANDLE owner; uint count; diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp index 48014cc..0e09ea0 100644 --- a/src/corelib/thread/qmutex_unix.cpp +++ b/src/corelib/thread/qmutex_unix.cpp @@ -74,7 +74,7 @@ static void report_error(int code, const char *where, const char *what) QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) - : QMutexData(mode), maximumSpinTime(MaximumSpinTimeThreshold), owner(0), count(0) + : QMutexData(mode), maximumSpinTime(MaximumSpinTimeThreshold), averageWaitTime(0), owner(0), count(0) { #if defined(Q_OS_MAC) kern_return_t r = semaphore_create(mach_task_self(), &mach_semaphore, SYNC_POLICY_FIFO, 0); diff --git a/src/corelib/thread/qmutex_win.cpp b/src/corelib/thread/qmutex_win.cpp index 89e8b87..a759caa 100644 --- a/src/corelib/thread/qmutex_win.cpp +++ b/src/corelib/thread/qmutex_win.cpp @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) - : QMutexData(mode), maximumSpinTime(MaximumSpinTimeThreshold), owner(0), count(0) + : QMutexData(mode), maximumSpinTime(MaximumSpinTimeThreshold), averageWaitTime(0), owner(0), count(0) { event = CreateEvent(0, FALSE, FALSE, 0); if (!event) -- cgit v0.12 From 215748d3be876ffec5d72f2d1dfcce56bb7a5937 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 20 Dec 2010 17:38:05 +0200 Subject: Fix using QFileDialog statics in Symbian. Trying to access files outside C:/data with QFileDialog static functions either paniced or simply threw an exception depending on what you were trying to do exactly. To fix this, QFileDialog static functions now will default to QDir::rootPath() if the path specified by user is invalid. Task-number: QTBUG-16204 Reviewed-by: Janne Koskinen --- src/gui/dialogs/qfiledialog_symbian.cpp | 69 ++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/src/gui/dialogs/qfiledialog_symbian.cpp b/src/gui/dialogs/qfiledialog_symbian.cpp index 1f70305..d82ce2b 100644 --- a/src/gui/dialogs/qfiledialog_symbian.cpp +++ b/src/gui/dialogs/qfiledialog_symbian.cpp @@ -119,36 +119,49 @@ static QString launchSymbianDialog(const QString dialogCaption, const QString st { QString selection; #if defined(Q_WS_S60) && defined(SYMBIAN_VERSION_SYMBIAN3) - QT_TRAP_THROWING( - TFileName startFolder; - if (!startDirectory.isEmpty()) { - QString dir = QDir::toNativeSeparators(startDirectory); + TFileName startFolder; + if (!startDirectory.isEmpty()) { + QString dir = QDir::toNativeSeparators(QFileDialogPrivate::workingDirectory(startDirectory)); + startFolder = qt_QString2TPtrC(dir); + } + TInt types = AknCommonDialogsDynMem::EMemoryTypeMMCExternal| + AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage| + AknCommonDialogsDynMem::EMemoryTypePhone; + + TPtrC titlePtr(qt_QString2TPtrC(dialogCaption)); + TFileName target; + bool select = false; + int tryCount = 2; + while (tryCount--) { + TInt err(KErrNone); + TRAP(err, + if (dialogMode == DialogOpen) { + CExtensionFilter* extensionFilter = new (ELeave) CExtensionFilter; + CleanupStack::PushL(extensionFilter); + extensionFilter->setFilter(filter); + select = AknCommonDialogsDynMem::RunSelectDlgLD(types, target, + startFolder, NULL, NULL, titlePtr, extensionFilter); + CleanupStack::Pop(extensionFilter); + } else if (dialogMode == DialogSave) { + select = AknCommonDialogsDynMem::RunSaveDlgLD(types, target, + startFolder, NULL, NULL, titlePtr); + } else if (dialogMode == DialogFolder) { + select = AknCommonDialogsDynMem::RunFolderSelectDlgLD(types, target, startFolder, + 0, 0, titlePtr, NULL, NULL); + } + ); + + if (err == KErrNone) { + tryCount = 0; + } else { + // Symbian native file dialog doesn't allow accessing files outside C:/Data + // It will always leave in that case, so default into QDir::rootPath() in error cases. + QString dir = QDir::toNativeSeparators(QDir::rootPath()); startFolder = qt_QString2TPtrC(dir); } - TInt types = AknCommonDialogsDynMem::EMemoryTypeMMCExternal| - AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage| - AknCommonDialogsDynMem::EMemoryTypePhone; - - TPtrC titlePtr(qt_QString2TPtrC(dialogCaption)); - TFileName target; - bool select = false; - if (dialogMode == DialogOpen) { - CExtensionFilter* extensionFilter = new (ELeave) CExtensionFilter; - CleanupStack::PushL(extensionFilter); - extensionFilter->setFilter(filter); - select = AknCommonDialogsDynMem::RunSelectDlgLD(types, target, - startFolder, NULL, NULL, titlePtr, extensionFilter); - CleanupStack::Pop(extensionFilter); - } else if (dialogMode == DialogSave) { - select = AknCommonDialogsDynMem::RunSaveDlgLD(types, target, - startFolder, NULL, NULL, titlePtr); - } else if (dialogMode == DialogFolder) { - select = AknCommonDialogsDynMem::RunFolderSelectDlgLD(types, target, startFolder, - 0, 0, titlePtr, NULL, NULL); - } - if (select) - selection.append(qt_TDesC2QString(target)); - ); + } + if (select) + selection.append(qt_TDesC2QString(target)); #endif return selection; } -- cgit v0.12 From e8d42e5861bdfd6acec3bf1ccc8d55b09b1cc573 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 20 Dec 2010 17:53:57 +0200 Subject: Remove few compile warnings Reviewed-by: Janne Koskinen --- src/gui/dialogs/qfiledialog_symbian.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/dialogs/qfiledialog_symbian.cpp b/src/gui/dialogs/qfiledialog_symbian.cpp index d82ce2b..1fc5f5e 100644 --- a/src/gui/dialogs/qfiledialog_symbian.cpp +++ b/src/gui/dialogs/qfiledialog_symbian.cpp @@ -64,7 +64,7 @@ public: filterList.clear(); if (filter.left(2) == QLatin1String("*.")) { //Filter has only extensions - filterList << filter.split(" "); + filterList << filter.split(QLatin1String(" ")); return; } else { //Extensions are in parenthesis and there may be several filters @@ -75,7 +75,7 @@ public: return; } } - QRegExp rx("\\(([^\\)]*)\\)"); + QRegExp rx(QLatin1String("\\(([^\\)]*)\\)")); int pos = 0; while ((pos = rx.indexIn(filter, pos)) != -1) { filterList << rx.cap(1).split(QLatin1String(" ")); -- cgit v0.12 From 37e630fba7bb1dde3e11567f52a1bd28fafbaec6 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 2 Dec 2010 18:07:29 +0000 Subject: Add autotests for AutoCloseHandle / DontCloseHandle and RFile adoption Extended the existing tests which open a file from a handle to use symbian RFile as well (when testing on symbian). Added a new test to check the file handle is open/closed after closing a QFile, based on whether the file was opened with AutoCloseHandle or not. Reviewed-by: mread --- tests/auto/qfile/test/test.pro | 4 +- tests/auto/qfile/tst_qfile.cpp | 147 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 141 insertions(+), 10 deletions(-) diff --git a/tests/auto/qfile/test/test.pro b/tests/auto/qfile/test/test.pro index 673eacc..c0049b0 100644 --- a/tests/auto/qfile/test/test.pro +++ b/tests/auto/qfile/test/test.pro @@ -37,4 +37,6 @@ win32 { LIBS+=-lole32 -luuid } - +symbian { + LIBS+=-lefsrv +} diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp index c19079f..d9b8283 100644 --- a/tests/auto/qfile/tst_qfile.cpp +++ b/tests/auto/qfile/tst_qfile.cpp @@ -70,6 +70,8 @@ #elif defined(Q_OS_WINCE) # include # include +#elif defined(Q_OS_SYMBIAN) +# include #endif #include @@ -221,6 +223,8 @@ private slots: #endif void caseSensitivity(); + void autocloseHandle(); + // --- Task related tests below this line void task167217(); @@ -233,12 +237,20 @@ public: void invalidFile(); private: - enum FileType { OpenQFile, OpenFd, OpenStream }; + enum FileType { + OpenQFile, + OpenFd, + OpenStream, +#ifdef Q_OS_SYMBIAN + OpenRFile, +#endif + NumberOfFileTypes + }; void openStandardStreamsFileDescriptors(); void openStandardStreamsBufferedStreams(); - bool openFd(QFile &file, QIODevice::OpenMode mode) + bool openFd(QFile &file, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags) { int fdMode = QT_OPEN_LARGEFILE | QT_OPEN_BINARY; @@ -250,10 +262,10 @@ private: fd_ = QT_OPEN(qPrintable(file.fileName()), fdMode); - return (-1 != fd_) && file.open(fd_, mode); + return (-1 != fd_) && file.open(fd_, mode, handleFlags); } - bool openStream(QFile &file, QIODevice::OpenMode mode) + bool openStream(QFile &file, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags) { char const *streamMode = ""; @@ -265,10 +277,37 @@ private: stream_ = QT_FOPEN(qPrintable(file.fileName()), streamMode); - return stream_ && file.open(stream_, mode); + return stream_ && file.open(stream_, mode, handleFlags); + } + +#ifdef Q_OS_SYMBIAN + bool openRFile(QFile &file, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags) + { + //connect file server first time + if (!rfs_.Handle() && rfs_.Connect() != KErrNone) + return false; + //symbian does not like ./ in filenames, so open by absolute path + QString fileName(QDir::toNativeSeparators(QFileInfo(file).absoluteFilePath())); + TPtrC fn(fileName.utf16(), fileName.length()); + TInt smode = 0; + if (mode & QIODevice::WriteOnly) + smode |= EFileWrite; + if (mode & QIODevice::ReadOnly) + smode |= EFileRead; + TInt r; + if ((mode & QIODevice::Truncate) || (!(mode & QIODevice::ReadOnly) && !(mode & QIODevice::Append))) { + r = rfile_.Replace(rfs_, fn, smode); + } else { + r = rfile_.Open(rfs_, fn, smode); + if (r == KErrNotFound && (mode & QIODevice::WriteOnly)) { + r = rfile_.Create(rfs_, fn, smode); + } + } + return (r == KErrNone) && file.open(rfile_, mode, handleFlags); } +#endif - bool openFile(QFile &file, QIODevice::OpenMode mode, FileType type = OpenQFile) + bool openFile(QFile &file, QIODevice::OpenMode mode, FileType type = OpenQFile, QFile::FileHandleFlags handleFlags = QFile::DontCloseHandle) { if (mode & QIODevice::WriteOnly && !file.exists()) { @@ -285,10 +324,14 @@ private: return file.open(mode); case OpenFd: - return openFd(file, mode); + return openFd(file, mode, handleFlags); case OpenStream: - return openStream(file, mode); + return openStream(file, mode, handleFlags); +#ifdef Q_OS_SYMBIAN + case OpenRFile: + return openRFile(file, mode, handleFlags); +#endif } return false; @@ -302,6 +345,8 @@ private: QT_CLOSE(fd_); if (stream_) ::fclose(stream_); + if (rfile_.SubSessionHandle()) + rfile_.Close(); fd_ = -1; stream_ = 0; @@ -309,6 +354,10 @@ private: int fd_; FILE *stream_; +#ifdef Q_OS_SYMBIAN + RFs rfs_; + RFile rfile_; +#endif }; tst_QFile::tst_QFile() @@ -2214,6 +2263,9 @@ void tst_QFile::writeLargeDataBlock_data() QTest::newRow("localfile-QFile") << "./largeblockfile.txt" << (int)OpenQFile; QTest::newRow("localfile-Fd") << "./largeblockfile.txt" << (int)OpenFd; QTest::newRow("localfile-Stream") << "./largeblockfile.txt" << (int)OpenStream; +#ifdef Q_OS_SYMBIAN + QTest::newRow("localfile-RFile") << "./largeblockfile.txt" << (int)OpenRFile; +#endif #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) // Some semi-randomness to avoid collisions. @@ -3100,7 +3152,7 @@ void tst_QFile::openStandardStreams() void tst_QFile::writeNothing() { - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < NumberOfFileTypes; ++i) { QFile file("file.txt"); QVERIFY( openFile(file, QIODevice::WriteOnly | QIODevice::Unbuffered, FileType(i)) ); QVERIFY( 0 == file.write((char *)0, 0) ); @@ -3116,6 +3168,9 @@ void tst_QFile::resize_data() QTest::newRow("native") << int(OpenQFile); QTest::newRow("fileno") << int(OpenFd); QTest::newRow("stream") << int(OpenStream); +#ifdef Q_OS_SYMBIAN + QTest::newRow("rfile") << int(OpenRFile); +#endif } void tst_QFile::resize() @@ -3227,5 +3282,79 @@ void tst_QFile::caseSensitivity() } } +void tst_QFile::autocloseHandle() +{ +#ifdef Q_OS_SYMBIAN + // these tests are a bit different, because using a closed file handle results in a panic rather than error + { + QFile file("readonlyfile"); + QFile file2("readonlyfile"); + QVERIFY(openFile(file, QIODevice::ReadOnly, OpenRFile, QFile::AutoCloseHandle)); + // file is opened with mandatory lock, so opening again should fail + QVERIFY(!file2.open(QIODevice::ReadOnly)); + + file.close(); + // opening again should now succeed (because handle is closed) + QVERIFY(file2.open(QIODevice::ReadOnly)); + } + + { + QFile file("readonlyfile"); + QFile file2("readonlyfile"); + QVERIFY(openFile(file, QIODevice::ReadOnly, OpenRFile, QFile::DontCloseHandle)); + // file is opened with mandatory lock, so opening again should fail + QVERIFY(!file2.open(QIODevice::ReadOnly)); + + file.close(); + // opening again should still fail (because handle is not auto closed) + QVERIFY(!file2.open(QIODevice::ReadOnly)); + + rfile_.Close(); + // now it should succeed + QVERIFY(file2.open(QIODevice::ReadOnly)); + } +#endif + + { + QFile file("readonlyfile"); + QVERIFY(openFile(file, QIODevice::ReadOnly, OpenFd, QFile::AutoCloseHandle)); + file.close(); + //file is closed, read should fail + char buf; + QCOMPARE(::read(fd_, &buf, 1), -1); + QVERIFY(errno = EBADF); + } + + { + QFile file("readonlyfile"); + QVERIFY(openFile(file, QIODevice::ReadOnly, OpenFd, QFile::DontCloseHandle)); + file.close(); + //file is not closed, read should succeed + char buf; + QCOMPARE(::read(fd_, &buf, 1), 1); + ::close(fd_); + } + + { + QFile file("readonlyfile"); + QVERIFY(openFile(file, QIODevice::ReadOnly, OpenStream, QFile::AutoCloseHandle)); + file.close(); + //file is closed, read should fail + char buf; + QCOMPARE(int(::fread(&buf, 1, 1, stream_)), 0); + QVERIFY(::ferror(stream_)); //actual error seems to be OS dependent + } + + { + QFile file("readonlyfile"); + QVERIFY(openFile(file, QIODevice::ReadOnly, OpenStream, QFile::DontCloseHandle)); + file.close(); + //file is not closed, read should succeed + char buf; + QCOMPARE(int(::fread(&buf, 1, 1, stream_)), 1); + ::fclose(stream_); + } +} + QTEST_MAIN(tst_QFile) #include "tst_qfile.moc" -- cgit v0.12 From 2b9690e1b2bceb2923d1e3941186fa74f2457043 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Mon, 20 Dec 2010 15:58:06 +0000 Subject: Update def files Add the new APIs + all the unfrozen changes on master Reviewed-by: Trust Me --- src/s60installs/bwins/QtCoreu.def | 8 +++ src/s60installs/bwins/QtGuiu.def | 95 +++++++++++++++++++++++++++++++- src/s60installs/bwins/QtNetworku.def | 23 +++++--- src/s60installs/eabi/QtCoreu.def | 6 ++ src/s60installs/eabi/QtGuiu.def | 104 ++++++++++++++++++++++++++++++++++- src/s60installs/eabi/QtNetworku.def | 20 ++++--- 6 files changed, 237 insertions(+), 19 deletions(-) diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index 84aa246..f2c43e6 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -4591,3 +4591,11 @@ EXPORTS ?scope@QSystemError@@QAE?AW4ErrorScope@1@XZ @ 4590 NONAME ; enum QSystemError::ErrorScope QSystemError::scope(void) ?toString@QSystemError@@QAE?AVQString@@XZ @ 4591 NONAME ; class QString QSystemError::toString(void) ??0QFileInfo@@QAE@PAVQFileInfoPrivate@@@Z @ 4592 NONAME ; QFileInfo::QFileInfo(class QFileInfoPrivate *) + ?currentUnicodeVersion@QChar@@SA?AW4UnicodeVersion@1@XZ @ 4593 NONAME ; enum QChar::UnicodeVersion QChar::currentUnicodeVersion(void) + ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@ABVRFile@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4594 NONAME ; bool QFSFileEngine::open(class QFlags, class RFile const &, class QFlags) + ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@HV?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4595 NONAME ; bool QFSFileEngine::open(class QFlags, int, class QFlags) + ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@PAU__sFILE@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4596 NONAME ; bool QFSFileEngine::open(class QFlags, struct __sFILE *, class QFlags) + ?open@QFile@@QAE_NABVRFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4597 NONAME ; bool QFile::open(class RFile const &, class QFlags, class QFlags) + ?open@QFile@@QAE_NHV?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4598 NONAME ; bool QFile::open(int, class QFlags, class QFlags) + ?open@QFile@@QAE_NPAU__sFILE@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4599 NONAME ; bool QFile::open(struct __sFILE *, class QFlags, class QFlags) + diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 8dcc235..322d88b 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -2725,7 +2725,7 @@ EXPORTS ?clearSelection@QTextCursor@@QAEXXZ @ 2724 NONAME ; void QTextCursor::clearSelection(void) ?clearSpans@QTableView@@QAEXXZ @ 2725 NONAME ; void QTableView::clearSpans(void) ?clearString@QLineControl@@ABE?AVQString@@II@Z @ 2726 NONAME ; class QString QLineControl::clearString(unsigned int, unsigned int) const - ?clearSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@@Z @ 2727 NONAME ; void QGraphicsItemPrivate::clearSubFocus(class QGraphicsItem *) + ?clearSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@@Z @ 2727 NONAME ABSENT ; void QGraphicsItemPrivate::clearSubFocus(class QGraphicsItem *) ?clearUndo@QLineControl@@QAEXXZ @ 2728 NONAME ; void QLineControl::clearUndo(void) ?click@QAbstractButton@@QAEXXZ @ 2729 NONAME ; void QAbstractButton::click(void) ?clicked@QAbstractButton@@IAEX_N@Z @ 2730 NONAME ; void QAbstractButton::clicked(bool) @@ -9914,7 +9914,7 @@ EXPORTS ?setStyleSheet@QWidget@@QAEXABVQString@@@Z @ 9913 NONAME ; void QWidget::setStyleSheet(class QString const &) ?setStyleStrategy@QFont@@QAEXW4StyleStrategy@1@@Z @ 9914 NONAME ; void QFont::setStyleStrategy(enum QFont::StyleStrategy) ?setStyle_helper@QWidgetPrivate@@QAEXPAVQStyle@@_N1@Z @ 9915 NONAME ; void QWidgetPrivate::setStyle_helper(class QStyle *, bool, bool) - ?setSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@@Z @ 9916 NONAME ; void QGraphicsItemPrivate::setSubFocus(class QGraphicsItem *) + ?setSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@@Z @ 9916 NONAME ABSENT ; void QGraphicsItemPrivate::setSubFocus(class QGraphicsItem *) ?setSubTitle@QWizardPage@@QAEXABVQString@@@Z @ 9917 NONAME ; void QWizardPage::setSubTitle(class QString const &) ?setSubTitleFormat@QWizard@@QAEXW4TextFormat@Qt@@@Z @ 9918 NONAME ; void QWizard::setSubTitleFormat(enum Qt::TextFormat) ?setSubmitPolicy@QDataWidgetMapper@@QAEXW4SubmitPolicy@1@@Z @ 9919 NONAME ; void QDataWidgetMapper::setSubmitPolicy(enum QDataWidgetMapper::SubmitPolicy) @@ -13051,4 +13051,95 @@ EXPORTS ??_EQBlittable@@UAE@I@Z @ 13050 NONAME ; QBlittable::~QBlittable(unsigned int) ?qt_addBitmapToPath@@YAXMMPBEHHHPAVQPainterPath@@@Z @ 13051 NONAME ; void qt_addBitmapToPath(float, float, unsigned char const *, int, int, int, class QPainterPath *) ?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13052 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &) + ??0QFlickGesture@@QAE@PAVQObject@@W4MouseButton@Qt@@0@Z @ 13053 NONAME ; QFlickGesture::QFlickGesture(class QObject *, enum Qt::MouseButton, class QObject *) + ??0QScrollEvent@@QAE@ABVQPointF@@0W4ScrollState@0@@Z @ 13054 NONAME ; QScrollEvent::QScrollEvent(class QPointF const &, class QPointF const &, enum QScrollEvent::ScrollState) + ??0QScrollPrepareEvent@@QAE@ABVQPointF@@@Z @ 13055 NONAME ; QScrollPrepareEvent::QScrollPrepareEvent(class QPointF const &) + ??0QScroller@@AAE@PAVQObject@@@Z @ 13056 NONAME ; QScroller::QScroller(class QObject *) + ??0QScrollerProperties@@QAE@ABV0@@Z @ 13057 NONAME ; QScrollerProperties::QScrollerProperties(class QScrollerProperties const &) + ??0QScrollerProperties@@QAE@XZ @ 13058 NONAME ; QScrollerProperties::QScrollerProperties(void) + ??1QFlickGesture@@UAE@XZ @ 13059 NONAME ; QFlickGesture::~QFlickGesture(void) + ??1QScrollEvent@@UAE@XZ @ 13060 NONAME ; QScrollEvent::~QScrollEvent(void) + ??1QScrollPrepareEvent@@UAE@XZ @ 13061 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(void) + ??1QScroller@@EAE@XZ @ 13062 NONAME ; QScroller::~QScroller(void) + ??1QScrollerProperties@@UAE@XZ @ 13063 NONAME ; QScrollerProperties::~QScrollerProperties(void) + ??4QScrollerProperties@@QAEAAV0@ABV0@@Z @ 13064 NONAME ; class QScrollerProperties & QScrollerProperties::operator=(class QScrollerProperties const &) + ??8QScrollerProperties@@QBE_NABV0@@Z @ 13065 NONAME ; bool QScrollerProperties::operator==(class QScrollerProperties const &) const + ??9QScrollerProperties@@QBE_NABV0@@Z @ 13066 NONAME ; bool QScrollerProperties::operator!=(class QScrollerProperties const &) const + ??_EQFlickGesture@@UAE@I@Z @ 13067 NONAME ; QFlickGesture::~QFlickGesture(unsigned int) + ??_EQScrollEvent@@UAE@I@Z @ 13068 NONAME ; QScrollEvent::~QScrollEvent(unsigned int) + ??_EQScrollPrepareEvent@@UAE@I@Z @ 13069 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(unsigned int) + ??_EQScroller@@UAE@I@Z @ 13070 NONAME ; QScroller::~QScroller(unsigned int) + ??_EQScrollerProperties@@UAE@I@Z @ 13071 NONAME ; QScrollerProperties::~QScrollerProperties(unsigned int) + ?activeScrollers@QScroller@@SA?AV?$QList@PAVQScroller@@@@XZ @ 13072 NONAME ; class QList QScroller::activeScrollers(void) + ?canStartScrollingAt@QAbstractScrollAreaPrivate@@QAE_NABVQPoint@@@Z @ 13073 NONAME ; bool QAbstractScrollAreaPrivate::canStartScrollingAt(class QPoint const &) + ?clearSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@0@Z @ 13074 NONAME ; void QGraphicsItemPrivate::clearSubFocus(class QGraphicsItem *, class QGraphicsItem *) + ?contentPos@QScrollEvent@@QBE?AVQPointF@@XZ @ 13075 NONAME ; class QPointF QScrollEvent::contentPos(void) const + ?contentPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13076 NONAME ; class QPointF QScrollPrepareEvent::contentPos(void) const + ?contentPosRange@QScrollPrepareEvent@@QBE?AVQRectF@@XZ @ 13077 NONAME ; class QRectF QScrollPrepareEvent::contentPosRange(void) const + ?d_func@QFlickGesture@@AAEPAVQFlickGesturePrivate@@XZ @ 13078 NONAME ; class QFlickGesturePrivate * QFlickGesture::d_func(void) + ?d_func@QFlickGesture@@ABEPBVQFlickGesturePrivate@@XZ @ 13079 NONAME ; class QFlickGesturePrivate const * QFlickGesture::d_func(void) const + ?d_func@QScrollEvent@@AAEPAVQScrollEventPrivate@@XZ @ 13080 NONAME ; class QScrollEventPrivate * QScrollEvent::d_func(void) + ?d_func@QScrollEvent@@ABEPBVQScrollEventPrivate@@XZ @ 13081 NONAME ; class QScrollEventPrivate const * QScrollEvent::d_func(void) const + ?d_func@QScrollPrepareEvent@@AAEPAVQScrollPrepareEventPrivate@@XZ @ 13082 NONAME ; class QScrollPrepareEventPrivate * QScrollPrepareEvent::d_func(void) + ?d_func@QScrollPrepareEvent@@ABEPBVQScrollPrepareEventPrivate@@XZ @ 13083 NONAME ; class QScrollPrepareEventPrivate const * QScrollPrepareEvent::d_func(void) const + ?d_func@QScroller@@AAEPAVQScrollerPrivate@@XZ @ 13084 NONAME ; class QScrollerPrivate * QScroller::d_func(void) + ?d_func@QScroller@@ABEPBVQScrollerPrivate@@XZ @ 13085 NONAME ; class QScrollerPrivate const * QScroller::d_func(void) const + ?ensureVisible@QScroller@@QAEXABVQRectF@@MM@Z @ 13086 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float) + ?ensureVisible@QScroller@@QAEXABVQRectF@@MMH@Z @ 13087 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float, int) + ?finalPosition@QScroller@@QBE?AVQPointF@@XZ @ 13088 NONAME ; class QPointF QScroller::finalPosition(void) const + ?getStaticMetaObject@QFlickGesture@@SAABUQMetaObject@@XZ @ 13089 NONAME ; struct QMetaObject const & QFlickGesture::getStaticMetaObject(void) + ?getStaticMetaObject@QScroller@@SAABUQMetaObject@@XZ @ 13090 NONAME ; struct QMetaObject const & QScroller::getStaticMetaObject(void) + ?grabGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@W4ScrollerGestureType@1@@Z @ 13091 NONAME ; enum Qt::GestureType QScroller::grabGesture(class QObject *, enum QScroller::ScrollerGestureType) + ?grabbedGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@@Z @ 13092 NONAME ; enum Qt::GestureType QScroller::grabbedGesture(class QObject *) + ?handleInput@QScroller@@QAE_NW4Input@1@ABVQPointF@@_J@Z @ 13093 NONAME ; bool QScroller::handleInput(enum QScroller::Input, class QPointF const &, long long) + ?hasScroller@QScroller@@SA_NPAVQObject@@@Z @ 13094 NONAME ; bool QScroller::hasScroller(class QObject *) + ?metaObject@QFlickGesture@@UBEPBUQMetaObject@@XZ @ 13095 NONAME ; struct QMetaObject const * QFlickGesture::metaObject(void) const + ?metaObject@QScroller@@UBEPBUQMetaObject@@XZ @ 13096 NONAME ; struct QMetaObject const * QScroller::metaObject(void) const + ?overshootDistance@QScrollEvent@@QBE?AVQPointF@@XZ @ 13097 NONAME ; class QPointF QScrollEvent::overshootDistance(void) const + ?pixelPerMeter@QScroller@@QBE?AVQPointF@@XZ @ 13098 NONAME ; class QPointF QScroller::pixelPerMeter(void) const + ?qGamma_correct_back_to_linear_cs@@YAXPAVQImage@@@Z @ 13099 NONAME ; void qGamma_correct_back_to_linear_cs(class QImage *) + ?qt_metacall@QFlickGesture@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13100 NONAME ; int QFlickGesture::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QScroller@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13101 NONAME ; int QScroller::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacast@QFlickGesture@@UAEPAXPBD@Z @ 13102 NONAME ; void * QFlickGesture::qt_metacast(char const *) + ?qt_metacast@QScroller@@UAEPAXPBD@Z @ 13103 NONAME ; void * QScroller::qt_metacast(char const *) + ?resendPrepareEvent@QScroller@@QAEXXZ @ 13104 NONAME ; void QScroller::resendPrepareEvent(void) + ?resetCursorBlinkTimer@QLineControl@@QAEXXZ @ 13105 NONAME ; void QLineControl::resetCursorBlinkTimer(void) + ?scrollMetric@QScrollerProperties@@QBE?AVQVariant@@W4ScrollMetric@1@@Z @ 13106 NONAME ; class QVariant QScrollerProperties::scrollMetric(enum QScrollerProperties::ScrollMetric) const + ?scrollState@QScrollEvent@@QBE?AW4ScrollState@1@XZ @ 13107 NONAME ; enum QScrollEvent::ScrollState QScrollEvent::scrollState(void) const + ?scrollTo@QScroller@@QAEXABVQPointF@@@Z @ 13108 NONAME ; void QScroller::scrollTo(class QPointF const &) + ?scrollTo@QScroller@@QAEXABVQPointF@@H@Z @ 13109 NONAME ; void QScroller::scrollTo(class QPointF const &, int) + ?scroller@QScroller@@SAPAV1@PAVQObject@@@Z @ 13110 NONAME ; class QScroller * QScroller::scroller(class QObject *) + ?scroller@QScroller@@SAPBV1@PBVQObject@@@Z @ 13111 NONAME ; class QScroller const * QScroller::scroller(class QObject const *) + ?scrollerProperties@QScroller@@QBE?AVQScrollerProperties@@XZ @ 13112 NONAME ; class QScrollerProperties QScroller::scrollerProperties(void) const + ?scrollerPropertiesChanged@QScroller@@IAEXABVQScrollerProperties@@@Z @ 13113 NONAME ; void QScroller::scrollerPropertiesChanged(class QScrollerProperties const &) + ?setContentPos@QScrollPrepareEvent@@QAEXABVQPointF@@@Z @ 13114 NONAME ; void QScrollPrepareEvent::setContentPos(class QPointF const &) + ?setContentPosRange@QScrollPrepareEvent@@QAEXABVQRectF@@@Z @ 13115 NONAME ; void QScrollPrepareEvent::setContentPosRange(class QRectF const &) + ?setDefaultScrollerProperties@QScrollerProperties@@SAXABV1@@Z @ 13116 NONAME ; void QScrollerProperties::setDefaultScrollerProperties(class QScrollerProperties const &) + ?setScrollMetric@QScrollerProperties@@QAEXW4ScrollMetric@1@ABVQVariant@@@Z @ 13117 NONAME ; void QScrollerProperties::setScrollMetric(enum QScrollerProperties::ScrollMetric, class QVariant const &) + ?setScrollerProperties@QScroller@@QAEXABVQScrollerProperties@@@Z @ 13118 NONAME ; void QScroller::setScrollerProperties(class QScrollerProperties const &) + ?setSnapPositionsX@QScroller@@QAEXABV?$QList@M@@@Z @ 13119 NONAME ; void QScroller::setSnapPositionsX(class QList const &) + ?setSnapPositionsX@QScroller@@QAEXMM@Z @ 13120 NONAME ; void QScroller::setSnapPositionsX(float, float) + ?setSnapPositionsY@QScroller@@QAEXABV?$QList@M@@@Z @ 13121 NONAME ; void QScroller::setSnapPositionsY(class QList const &) + ?setSnapPositionsY@QScroller@@QAEXMM@Z @ 13122 NONAME ; void QScroller::setSnapPositionsY(float, float) + ?setSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@0@Z @ 13123 NONAME ; void QGraphicsItemPrivate::setSubFocus(class QGraphicsItem *, class QGraphicsItem *) + ?setViewportSize@QScrollPrepareEvent@@QAEXABVQSizeF@@@Z @ 13124 NONAME ; void QScrollPrepareEvent::setViewportSize(class QSizeF const &) + ?startPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13125 NONAME ; class QPointF QScrollPrepareEvent::startPos(void) const + ?state@QScroller@@QBE?AW4State@1@XZ @ 13126 NONAME ; enum QScroller::State QScroller::state(void) const + ?stateChanged@QScroller@@IAEXW4State@1@@Z @ 13127 NONAME ; void QScroller::stateChanged(enum QScroller::State) + ?stop@QScroller@@QAEXXZ @ 13128 NONAME ; void QScroller::stop(void) + ?target@QScroller@@QBEPAVQObject@@XZ @ 13129 NONAME ; class QObject * QScroller::target(void) const + ?tr@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13130 NONAME ; class QString QFlickGesture::tr(char const *, char const *) + ?tr@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13131 NONAME ; class QString QFlickGesture::tr(char const *, char const *, int) + ?tr@QScroller@@SA?AVQString@@PBD0@Z @ 13132 NONAME ; class QString QScroller::tr(char const *, char const *) + ?tr@QScroller@@SA?AVQString@@PBD0H@Z @ 13133 NONAME ; class QString QScroller::tr(char const *, char const *, int) + ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13134 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *) + ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13135 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *, int) + ?trUtf8@QScroller@@SA?AVQString@@PBD0@Z @ 13136 NONAME ; class QString QScroller::trUtf8(char const *, char const *) + ?trUtf8@QScroller@@SA?AVQString@@PBD0H@Z @ 13137 NONAME ; class QString QScroller::trUtf8(char const *, char const *, int) + ?ungrabGesture@QScroller@@SAXPAVQObject@@@Z @ 13138 NONAME ; void QScroller::ungrabGesture(class QObject *) + ?unsetDefaultScrollerProperties@QScrollerProperties@@SAXXZ @ 13139 NONAME ; void QScrollerProperties::unsetDefaultScrollerProperties(void) + ?velocity@QScroller@@QBE?AVQPointF@@XZ @ 13140 NONAME ; class QPointF QScroller::velocity(void) const + ?viewportSize@QScrollPrepareEvent@@QBE?AVQSizeF@@XZ @ 13141 NONAME ; class QSizeF QScrollPrepareEvent::viewportSize(void) const + ?staticMetaObject@QScroller@@2UQMetaObject@@B @ 13142 NONAME ; struct QMetaObject const QScroller::staticMetaObject + ?staticMetaObject@QFlickGesture@@2UQMetaObject@@B @ 13143 NONAME ; struct QMetaObject const QFlickGesture::staticMetaObject diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def index 865aa54..b01324c 100644 --- a/src/s60installs/bwins/QtNetworku.def +++ b/src/s60installs/bwins/QtNetworku.def @@ -1001,7 +1001,7 @@ EXPORTS ?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 QNetworkSessionPrivate::privateConfiguration(class QNetworkConfiguration const &) const - ?isOnline@QNetworkConfigurationManagerPrivate@@QAE_NXZ @ 1003 NONAME ; bool QNetworkConfigurationManagerPrivate::isOnline(void) + ?isOnline@QNetworkConfigurationManagerPrivate@@QAE_NXZ @ 1003 NONAME ABSENT ; bool QNetworkConfigurationManagerPrivate::isOnline(void) ?state@QNetworkConfiguration@@QBE?AV?$QFlags@W4StateFlag@QNetworkConfiguration@@@@XZ @ 1004 NONAME ; class QFlags 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 @@ -1027,7 +1027,7 @@ EXPORTS ?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 QNetworkConfigurationManagerPrivate::capabilities(void) + ?capabilities@QNetworkConfigurationManagerPrivate@@QAE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1029 NONAME ABSENT ; class QFlags QNetworkConfigurationManagerPrivate::capabilities(void) ??1QNetworkConfiguration@@QAE@XZ @ 1030 NONAME ; QNetworkConfiguration::~QNetworkConfiguration(void) ?bearerTypeName@QNetworkConfiguration@@QBE?AVQString@@XZ @ 1031 NONAME ; class QString QNetworkConfiguration::bearerTypeName(void) const ??0QNetworkConfigurationManagerPrivate@@QAE@XZ @ 1032 NONAME ; QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate(void) @@ -1041,7 +1041,7 @@ EXPORTS ?name@QNetworkConfiguration@@QBE?AVQString@@XZ @ 1040 NONAME ; class QString QNetworkConfiguration::name(void) const ?close@QNetworkSession@@QAEXXZ @ 1041 NONAME ; void QNetworkSession::close(void) ?sessionProperty@QNetworkSession@@QBE?AVQVariant@@ABVQString@@@Z @ 1042 NONAME ; class QVariant QNetworkSession::sessionProperty(class QString const &) const - ?engines@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@PAVQBearerEngine@@@@XZ @ 1043 NONAME ; class QList QNetworkConfigurationManagerPrivate::engines(void) + ?engines@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@PAVQBearerEngine@@@@XZ @ 1043 NONAME ABSENT ; class QList QNetworkConfigurationManagerPrivate::engines(void) ?isOnline@QNetworkConfigurationManager@@QBE_NXZ @ 1044 NONAME ; bool QNetworkConfigurationManager::isOnline(void) const ?capabilities@QNetworkConfigurationManager@@QBE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1045 NONAME ; class QFlags QNetworkConfigurationManager::capabilities(void) const ?configurationRemoved@QNetworkConfigurationManagerPrivate@@AAEXV?$QExplicitlySharedDataPointer@VQNetworkConfigurationPrivate@@@@@Z @ 1046 NONAME ; void QNetworkConfigurationManagerPrivate::configurationRemoved(class QExplicitlySharedDataPointer) @@ -1095,7 +1095,7 @@ EXPORTS ??_EQBearerEnginePlugin@@UAE@I@Z @ 1094 NONAME ; QBearerEnginePlugin::~QBearerEnginePlugin(unsigned int) ?children@QNetworkConfiguration@@QBE?AV?$QList@VQNetworkConfiguration@@@@XZ @ 1095 NONAME ; class QList QNetworkConfiguration::children(void) const ?activeConfiguration@QNetworkAccessManager@@QBE?AVQNetworkConfiguration@@XZ @ 1096 NONAME ; class QNetworkConfiguration QNetworkAccessManager::activeConfiguration(void) const - ?defaultConfiguration@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@XZ @ 1097 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration(void) + ?defaultConfiguration@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@XZ @ 1097 NONAME ABSENT ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration(void) ?getStaticMetaObject@QNetworkSession@@SAABUQMetaObject@@XZ @ 1098 NONAME ; struct QMetaObject const & QNetworkSession::getStaticMetaObject(void) ?qt_metacast@QNetworkSession@@UAEPAXPBD@Z @ 1099 NONAME ; void * QNetworkSession::qt_metacast(char const *) ?updateCompleted@QBearerEngine@@IAEXXZ @ 1100 NONAME ; void QBearerEngine::updateCompleted(void) @@ -1109,8 +1109,8 @@ EXPORTS ?qt_metacast@QNetworkConfigurationManagerPrivate@@UAEPAXPBD@Z @ 1108 NONAME ; void * QNetworkConfigurationManagerPrivate::qt_metacast(char const *) ?newConfigurationActivated@QNetworkSessionPrivate@@IAEXXZ @ 1109 NONAME ; void QNetworkSessionPrivate::newConfigurationActivated(void) ?qt_metacast@QNetworkSessionPrivate@@UAEPAXPBD@Z @ 1110 NONAME ; void * QNetworkSessionPrivate::qt_metacast(char const *) - ?startPolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1111 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void) - ?allConfigurations@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@VQNetworkConfiguration@@@@V?$QFlags@W4StateFlag@QNetworkConfiguration@@@@@Z @ 1112 NONAME ; class QList QNetworkConfigurationManagerPrivate::allConfigurations(class QFlags) + ?startPolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1111 NONAME ABSENT ; void QNetworkConfigurationManagerPrivate::startPolling(void) + ?allConfigurations@QNetworkConfigurationManagerPrivate@@QAE?AV?$QList@VQNetworkConfiguration@@@@V?$QFlags@W4StateFlag@QNetworkConfiguration@@@@@Z @ 1112 NONAME ABSENT ; class QList QNetworkConfigurationManagerPrivate::allConfigurations(class QFlags) ?connectNotify@QNetworkSession@@MAEXPBD@Z @ 1113 NONAME ; void QNetworkSession::connectNotify(char const *) ?onlineStateChanged@QNetworkConfigurationManagerPrivate@@IAEX_N@Z @ 1114 NONAME ; void QNetworkConfigurationManagerPrivate::onlineStateChanged(bool) ?bytesWritten@QNetworkSession@@QBE_KXZ @ 1115 NONAME ; unsigned long long QNetworkSession::bytesWritten(void) const @@ -1132,8 +1132,8 @@ EXPORTS ?reject@QNetworkSession@@QAEXXZ @ 1131 NONAME ; void QNetworkSession::reject(void) ?options@QAuthenticator@@QBE?AV?$QHash@VQString@@VQVariant@@@@XZ @ 1132 NONAME ; class QHash QAuthenticator::options(void) const ?purpose@QNetworkConfiguration@@QBE?AW4Purpose@1@XZ @ 1133 NONAME ; enum QNetworkConfiguration::Purpose QNetworkConfiguration::purpose(void) const - ?configurationFromIdentifier@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@ABVQString@@@Z @ 1134 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::configurationFromIdentifier(class QString const &) - ?abort@QNetworkConfigurationManagerPrivate@@IAEXXZ @ 1135 NONAME ; void QNetworkConfigurationManagerPrivate::abort(void) + ?configurationFromIdentifier@QNetworkConfigurationManagerPrivate@@QAE?AVQNetworkConfiguration@@ABVQString@@@Z @ 1134 NONAME ABSENT ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::configurationFromIdentifier(class QString const &) + ?abort@QNetworkConfigurationManagerPrivate@@IAEXXZ @ 1135 NONAME ABSENT ; void QNetworkConfigurationManagerPrivate::abort(void) ?tr@QNetworkConfigurationManager@@SA?AVQString@@PBD0@Z @ 1136 NONAME ; class QString QNetworkConfigurationManager::tr(char const *, char const *) ?trUtf8@QNetworkSession@@SA?AVQString@@PBD0H@Z @ 1137 NONAME ; class QString QNetworkSession::trUtf8(char const *, char const *, int) ?trUtf8@QBearerEnginePlugin@@SA?AVQString@@PBD0@Z @ 1138 NONAME ; class QString QBearerEnginePlugin::trUtf8(char const *, char const *) @@ -1152,4 +1152,11 @@ EXPORTS ?joinMulticastGroup@QUdpSocket@@QAE_NABVQHostAddress@@@Z @ 1151 NONAME ; bool QUdpSocket::joinMulticastGroup(class QHostAddress const &) ?leaveMulticastGroup@QUdpSocket@@QAE_NABVQHostAddress@@ABVQNetworkInterface@@@Z @ 1152 NONAME ; bool QUdpSocket::leaveMulticastGroup(class QHostAddress const &, class QNetworkInterface const &) ?leaveMulticastGroup@QUdpSocket@@QAE_NABVQHostAddress@@@Z @ 1153 NONAME ; bool QUdpSocket::leaveMulticastGroup(class QHostAddress const &) + ?allConfigurations@QNetworkConfigurationManagerPrivate@@QBE?AV?$QList@VQNetworkConfiguration@@@@V?$QFlags@W4StateFlag@QNetworkConfiguration@@@@@Z @ 1154 NONAME ; class QList QNetworkConfigurationManagerPrivate::allConfigurations(class QFlags) const + ?capabilities@QNetworkConfigurationManagerPrivate@@QBE?AV?$QFlags@W4Capability@QNetworkConfigurationManager@@@@XZ @ 1155 NONAME ; class QFlags QNetworkConfigurationManagerPrivate::capabilities(void) const + ?configurationFromIdentifier@QNetworkConfigurationManagerPrivate@@QBE?AVQNetworkConfiguration@@ABVQString@@@Z @ 1156 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::configurationFromIdentifier(class QString const &) const + ?defaultConfiguration@QNetworkConfigurationManagerPrivate@@QBE?AVQNetworkConfiguration@@XZ @ 1157 NONAME ; class QNetworkConfiguration QNetworkConfigurationManagerPrivate::defaultConfiguration(void) const + ?engines@QNetworkConfigurationManagerPrivate@@QBE?AV?$QList@PAVQBearerEngine@@@@XZ @ 1158 NONAME ; class QList QNetworkConfigurationManagerPrivate::engines(void) const + ?isOnline@QNetworkConfigurationManagerPrivate@@QBE_NXZ @ 1159 NONAME ; bool QNetworkConfigurationManagerPrivate::isOnline(void) const + ?startPolling@QNetworkConfigurationManagerPrivate@@AAEXXZ @ 1160 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void) diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def index 130d9c0..e97ac61 100644 --- a/src/s60installs/eabi/QtCoreu.def +++ b/src/s60installs/eabi/QtCoreu.def @@ -3795,4 +3795,10 @@ EXPORTS _ZN5QChar21currentUnicodeVersionEv @ 3794 NONAME _ZN9QFileInfoC1EP16QFileInfoPrivate @ 3795 NONAME _ZN9QFileInfoC2EP16QFileInfoPrivate @ 3796 NONAME + _ZN13QFSFileEngine4openE6QFlagsIN9QIODevice12OpenModeFlagEEP7__sFILES0_IN5QFile14FileHandleFlagEE @ 3797 NONAME + _ZN13QFSFileEngine4openE6QFlagsIN9QIODevice12OpenModeFlagEERK5RFileS0_IN5QFile14FileHandleFlagEE @ 3798 NONAME + _ZN13QFSFileEngine4openE6QFlagsIN9QIODevice12OpenModeFlagEEiS0_IN5QFile14FileHandleFlagEE @ 3799 NONAME + _ZN5QFile4openEP7__sFILE6QFlagsIN9QIODevice12OpenModeFlagEES2_INS_14FileHandleFlagEE @ 3800 NONAME + _ZN5QFile4openERK5RFile6QFlagsIN9QIODevice12OpenModeFlagEES3_INS_14FileHandleFlagEE @ 3801 NONAME + _ZN5QFile4openEi6QFlagsIN9QIODevice12OpenModeFlagEES0_INS_14FileHandleFlagEE @ 3802 NONAME diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 926ed52..8064fa3 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -4658,11 +4658,11 @@ EXPORTS _ZN20QGraphicsEllipseItemD1Ev @ 4657 NONAME _ZN20QGraphicsEllipseItemD2Ev @ 4658 NONAME _ZN20QGraphicsItemPrivate11removeChildEP13QGraphicsItem @ 4659 NONAME - _ZN20QGraphicsItemPrivate11setSubFocusEP13QGraphicsItem @ 4660 NONAME + _ZN20QGraphicsItemPrivate11setSubFocusEP13QGraphicsItem @ 4660 NONAME ABSENT _ZN20QGraphicsItemPrivate12remapItemPosEP6QEventP13QGraphicsItem @ 4661 NONAME _ZN20QGraphicsItemPrivate12resolveDepthEv @ 4662 NONAME _ZN20QGraphicsItemPrivate12setPosHelperERK7QPointF @ 4663 NONAME - _ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItem @ 4664 NONAME + _ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItem @ 4664 NONAME ABSENT _ZN20QGraphicsItemPrivate14setFocusHelperEN2Qt11FocusReasonEb @ 4665 NONAME ABSENT _ZN20QGraphicsItemPrivate15resetFocusProxyEv @ 4666 NONAME _ZN20QGraphicsItemPrivate16setEnabledHelperEbbb @ 4667 NONAME @@ -12233,4 +12233,104 @@ EXPORTS _ZNK14QFileOpenEvent8openFileER5QFile6QFlagsIN9QIODevice12OpenModeFlagEE @ 12232 NONAME ABSENT _ZN11QFontEngine16alphaMapForGlyphEj6QFixed @ 12233 NONAME _ZN11QFontEngine16alphaMapForGlyphEj6QFixedRK10QTransform @ 12234 NONAME + _Z32qGamma_correct_back_to_linear_csP6QImage @ 12235 NONAME + _ZN12QLineControl21resetCursorBlinkTimerEv @ 12236 NONAME + _ZN12QScrollEvent6d_funcEv @ 12237 NONAME + _ZN12QScrollEventC1ERK7QPointFS2_NS_11ScrollStateE @ 12238 NONAME + _ZN12QScrollEventC2ERK7QPointFS2_NS_11ScrollStateE @ 12239 NONAME + _ZN12QScrollEventD0Ev @ 12240 NONAME + _ZN12QScrollEventD1Ev @ 12241 NONAME + _ZN12QScrollEventD2Ev @ 12242 NONAME + _ZN13QFlickGesture11qt_metacallEN11QMetaObject4CallEiPPv @ 12243 NONAME + _ZN13QFlickGesture11qt_metacastEPKc @ 12244 NONAME + _ZN13QFlickGesture16staticMetaObjectE @ 12245 NONAME DATA 16 + _ZN13QFlickGesture19getStaticMetaObjectEv @ 12246 NONAME + _ZN13QFlickGestureC1EP7QObjectN2Qt11MouseButtonES1_ @ 12247 NONAME + _ZN13QFlickGestureC2EP7QObjectN2Qt11MouseButtonES1_ @ 12248 NONAME + _ZN13QFlickGestureD0Ev @ 12249 NONAME + _ZN13QFlickGestureD1Ev @ 12250 NONAME + _ZN13QFlickGestureD2Ev @ 12251 NONAME + _ZN19QScrollPrepareEvent13setContentPosERK7QPointF @ 12252 NONAME + _ZN19QScrollPrepareEvent15setViewportSizeERK6QSizeF @ 12253 NONAME + _ZN19QScrollPrepareEvent18setContentPosRangeERK6QRectF @ 12254 NONAME + _ZN19QScrollPrepareEvent6d_funcEv @ 12255 NONAME + _ZN19QScrollPrepareEventC1ERK7QPointF @ 12256 NONAME + _ZN19QScrollPrepareEventC2ERK7QPointF @ 12257 NONAME + _ZN19QScrollPrepareEventD0Ev @ 12258 NONAME + _ZN19QScrollPrepareEventD1Ev @ 12259 NONAME + _ZN19QScrollPrepareEventD2Ev @ 12260 NONAME + _ZN19QScrollerProperties15setScrollMetricENS_12ScrollMetricERK8QVariant @ 12261 NONAME + _ZN19QScrollerProperties28setDefaultScrollerPropertiesERKS_ @ 12262 NONAME + _ZN19QScrollerProperties30unsetDefaultScrollerPropertiesEv @ 12263 NONAME + _ZN19QScrollerPropertiesC1ERKS_ @ 12264 NONAME + _ZN19QScrollerPropertiesC1Ev @ 12265 NONAME + _ZN19QScrollerPropertiesC2ERKS_ @ 12266 NONAME + _ZN19QScrollerPropertiesC2Ev @ 12267 NONAME + _ZN19QScrollerPropertiesD0Ev @ 12268 NONAME + _ZN19QScrollerPropertiesD1Ev @ 12269 NONAME + _ZN19QScrollerPropertiesD2Ev @ 12270 NONAME + _ZN19QScrollerPropertiesaSERKS_ @ 12271 NONAME + _ZN20QGraphicsItemPrivate11setSubFocusEP13QGraphicsItemS1_ @ 12272 NONAME + _ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItemS1_ @ 12273 NONAME + _ZN26QAbstractScrollAreaPrivate19canStartScrollingAtERK6QPoint @ 12274 NONAME + _ZN9QScroller11grabGestureEP7QObjectNS_19ScrollerGestureTypeE @ 12275 NONAME + _ZN9QScroller11handleInputENS_5InputERK7QPointFx @ 12276 NONAME + _ZN9QScroller11hasScrollerEP7QObject @ 12277 NONAME + _ZN9QScroller11qt_metacallEN11QMetaObject4CallEiPPv @ 12278 NONAME + _ZN9QScroller11qt_metacastEPKc @ 12279 NONAME + _ZN9QScroller12stateChangedENS_5StateE @ 12280 NONAME + _ZN9QScroller13ensureVisibleERK6QRectFff @ 12281 NONAME + _ZN9QScroller13ensureVisibleERK6QRectFffi @ 12282 NONAME + _ZN9QScroller13ungrabGestureEP7QObject @ 12283 NONAME + _ZN9QScroller14grabbedGestureEP7QObject @ 12284 NONAME + _ZN9QScroller15activeScrollersEv @ 12285 NONAME + _ZN9QScroller16staticMetaObjectE @ 12286 NONAME DATA 16 + _ZN9QScroller17setSnapPositionsXERK5QListIfE @ 12287 NONAME + _ZN9QScroller17setSnapPositionsXEff @ 12288 NONAME + _ZN9QScroller17setSnapPositionsYERK5QListIfE @ 12289 NONAME + _ZN9QScroller17setSnapPositionsYEff @ 12290 NONAME + _ZN9QScroller18resendPrepareEventEv @ 12291 NONAME + _ZN9QScroller19getStaticMetaObjectEv @ 12292 NONAME + _ZN9QScroller21setScrollerPropertiesERK19QScrollerProperties @ 12293 NONAME + _ZN9QScroller25scrollerPropertiesChangedERK19QScrollerProperties @ 12294 NONAME + _ZN9QScroller4stopEv @ 12295 NONAME + _ZN9QScroller8scrollToERK7QPointF @ 12296 NONAME + _ZN9QScroller8scrollToERK7QPointFi @ 12297 NONAME + _ZN9QScroller8scrollerEP7QObject @ 12298 NONAME + _ZN9QScroller8scrollerEPK7QObject @ 12299 NONAME + _ZN9QScrollerC1EP7QObject @ 12300 NONAME + _ZN9QScrollerC2EP7QObject @ 12301 NONAME + _ZN9QScrollerD0Ev @ 12302 NONAME + _ZN9QScrollerD1Ev @ 12303 NONAME + _ZN9QScrollerD2Ev @ 12304 NONAME + _ZNK12QScrollEvent10contentPosEv @ 12305 NONAME + _ZNK12QScrollEvent11scrollStateEv @ 12306 NONAME + _ZNK12QScrollEvent17overshootDistanceEv @ 12307 NONAME + _ZNK12QScrollEvent6d_funcEv @ 12308 NONAME + _ZNK13QFlickGesture10metaObjectEv @ 12309 NONAME + _ZNK19QScrollPrepareEvent10contentPosEv @ 12310 NONAME + _ZNK19QScrollPrepareEvent12viewportSizeEv @ 12311 NONAME + _ZNK19QScrollPrepareEvent15contentPosRangeEv @ 12312 NONAME + _ZNK19QScrollPrepareEvent6d_funcEv @ 12313 NONAME + _ZNK19QScrollPrepareEvent8startPosEv @ 12314 NONAME + _ZNK19QScrollerProperties12scrollMetricENS_12ScrollMetricE @ 12315 NONAME + _ZNK19QScrollerPropertieseqERKS_ @ 12316 NONAME + _ZNK19QScrollerPropertiesneERKS_ @ 12317 NONAME + _ZNK9QScroller10metaObjectEv @ 12318 NONAME + _ZNK9QScroller13finalPositionEv @ 12319 NONAME + _ZNK9QScroller13pixelPerMeterEv @ 12320 NONAME + _ZNK9QScroller18scrollerPropertiesEv @ 12321 NONAME + _ZNK9QScroller5stateEv @ 12322 NONAME + _ZNK9QScroller6targetEv @ 12323 NONAME + _ZNK9QScroller8velocityEv @ 12324 NONAME + _ZTI12QScrollEvent @ 12325 NONAME + _ZTI13QFlickGesture @ 12326 NONAME + _ZTI19QScrollPrepareEvent @ 12327 NONAME + _ZTI19QScrollerProperties @ 12328 NONAME + _ZTI9QScroller @ 12329 NONAME + _ZTV12QScrollEvent @ 12330 NONAME + _ZTV13QFlickGesture @ 12331 NONAME + _ZTV19QScrollPrepareEvent @ 12332 NONAME + _ZTV19QScrollerProperties @ 12333 NONAME + _ZTV9QScroller @ 12334 NONAME diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index 21f3e73..9b989a7 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1085,12 +1085,12 @@ EXPORTS _ZN35QNetworkConfigurationManagerPrivate11pollEnginesEv @ 1084 NONAME _ZN35QNetworkConfigurationManagerPrivate11qt_metacallEN11QMetaObject4CallEiPPv @ 1085 NONAME _ZN35QNetworkConfigurationManagerPrivate11qt_metacastEPKc @ 1086 NONAME - _ZN35QNetworkConfigurationManagerPrivate12capabilitiesEv @ 1087 NONAME + _ZN35QNetworkConfigurationManagerPrivate12capabilitiesEv @ 1087 NONAME ABSENT _ZN35QNetworkConfigurationManagerPrivate12startPollingEv @ 1088 NONAME _ZN35QNetworkConfigurationManagerPrivate13enablePollingEv @ 1089 NONAME _ZN35QNetworkConfigurationManagerPrivate14disablePollingEv @ 1090 NONAME _ZN35QNetworkConfigurationManagerPrivate16staticMetaObjectE @ 1091 NONAME DATA 16 - _ZN35QNetworkConfigurationManagerPrivate17allConfigurationsE6QFlagsIN21QNetworkConfiguration9StateFlagEE @ 1092 NONAME + _ZN35QNetworkConfigurationManagerPrivate17allConfigurationsE6QFlagsIN21QNetworkConfiguration9StateFlagEE @ 1092 NONAME ABSENT _ZN35QNetworkConfigurationManagerPrivate18configurationAddedE28QExplicitlySharedDataPointerI28QNetworkConfigurationPrivateE @ 1093 NONAME _ZN35QNetworkConfigurationManagerPrivate18configurationAddedERK21QNetworkConfiguration @ 1094 NONAME _ZN35QNetworkConfigurationManagerPrivate18onlineStateChangedEb @ 1095 NONAME @@ -1099,14 +1099,14 @@ EXPORTS _ZN35QNetworkConfigurationManagerPrivate20configurationChangedERK21QNetworkConfiguration @ 1098 NONAME _ZN35QNetworkConfigurationManagerPrivate20configurationRemovedE28QExplicitlySharedDataPointerI28QNetworkConfigurationPrivateE @ 1099 NONAME _ZN35QNetworkConfigurationManagerPrivate20configurationRemovedERK21QNetworkConfiguration @ 1100 NONAME - _ZN35QNetworkConfigurationManagerPrivate20defaultConfigurationEv @ 1101 NONAME + _ZN35QNetworkConfigurationManagerPrivate20defaultConfigurationEv @ 1101 NONAME ABSENT _ZN35QNetworkConfigurationManagerPrivate20updateConfigurationsEv @ 1102 NONAME - _ZN35QNetworkConfigurationManagerPrivate27configurationFromIdentifierERK7QString @ 1103 NONAME + _ZN35QNetworkConfigurationManagerPrivate27configurationFromIdentifierERK7QString @ 1103 NONAME ABSENT _ZN35QNetworkConfigurationManagerPrivate27configurationUpdateCompleteEv @ 1104 NONAME _ZN35QNetworkConfigurationManagerPrivate31performAsyncConfigurationUpdateEv @ 1105 NONAME - _ZN35QNetworkConfigurationManagerPrivate5abortEv @ 1106 NONAME - _ZN35QNetworkConfigurationManagerPrivate7enginesEv @ 1107 NONAME - _ZN35QNetworkConfigurationManagerPrivate8isOnlineEv @ 1108 NONAME + _ZN35QNetworkConfigurationManagerPrivate5abortEv @ 1106 NONAME ABSENT + _ZN35QNetworkConfigurationManagerPrivate7enginesEv @ 1107 NONAME ABSENT + _ZN35QNetworkConfigurationManagerPrivate8isOnlineEv @ 1108 NONAME ABSENT _ZN35QNetworkConfigurationManagerPrivateC1Ev @ 1109 NONAME _ZN35QNetworkConfigurationManagerPrivateC2Ev @ 1110 NONAME _ZN35QNetworkConfigurationManagerPrivateD0Ev @ 1111 NONAME @@ -1175,4 +1175,10 @@ EXPORTS _ZN10QUdpSocket21setMulticastInterfaceERK17QNetworkInterface @ 1174 NONAME _ZN13QNetworkReply11setFinishedEb @ 1175 NONAME _ZNK10QUdpSocket18multicastInterfaceEv @ 1176 NONAME + _ZNK35QNetworkConfigurationManagerPrivate12capabilitiesEv @ 1177 NONAME + _ZNK35QNetworkConfigurationManagerPrivate17allConfigurationsE6QFlagsIN21QNetworkConfiguration9StateFlagEE @ 1178 NONAME + _ZNK35QNetworkConfigurationManagerPrivate20defaultConfigurationEv @ 1179 NONAME + _ZNK35QNetworkConfigurationManagerPrivate27configurationFromIdentifierERK7QString @ 1180 NONAME + _ZNK35QNetworkConfigurationManagerPrivate7enginesEv @ 1181 NONAME + _ZNK35QNetworkConfigurationManagerPrivate8isOnlineEv @ 1182 NONAME -- cgit v0.12 From 7747e8864db4518e35d5a472cec37697b85b3b15 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Mon, 20 Dec 2010 16:02:33 +0000 Subject: runonphone: Check that the device->config is valid before dereferencing it In some occasions (encountered on OS X), this can be null for some devices. Merge-request: 834 Reviewed-by: Shane Kearns --- tools/runonphone/serenum_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/runonphone/serenum_unix.cpp b/tools/runonphone/serenum_unix.cpp index db6375e..f65497e 100644 --- a/tools/runonphone/serenum_unix.cpp +++ b/tools/runonphone/serenum_unix.cpp @@ -82,7 +82,7 @@ QList enumerateSerialPorts(int loglevel) for (struct usb_bus *bus = usb_get_busses(); bus; bus = bus->next) { for (struct usb_device *device = bus->devices; device; device = device->next) { - for (int n = 0; n < device->descriptor.bNumConfigurations; ++n) { + for (int n = 0; n < device->descriptor.bNumConfigurations && device->config; ++n) { struct usb_config_descriptor &usbConfig =device->config[n]; QList usableInterfaces; for (int m = 0; m < usbConfig.bNumInterfaces; ++m) { -- cgit v0.12 From 11ea9609129205cd08dc5fbeb889cc60f4f84f65 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Mon, 20 Dec 2010 16:02:37 +0000 Subject: reword: Make the USB serial device enumeration work on OS X, too Tested on OS X Snow Leopard with libusb-0.1.12. The devices are named /dev/cu.usbmodem, where the opaque id doesn't seem to be available via the current libusb interface, but finding it would require usage of native OS X APIs. The interface number is available at least, and searching for cu\.usbmodem.* as a regexp finds the right devices as long as not too many devices are connected. Merge-request: 834 Reviewed-by: Shane Kearns --- tools/runonphone/serenum_unix.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tools/runonphone/serenum_unix.cpp b/tools/runonphone/serenum_unix.cpp index f65497e..93d8c67 100644 --- a/tools/runonphone/serenum_unix.cpp +++ b/tools/runonphone/serenum_unix.cpp @@ -158,6 +158,10 @@ QList enumerateSerialPorts(int loglevel) << "device" << device->filename << "interface" << descriptor.bInterfaceNumber; } +#ifdef Q_OS_MAC + eligibleInterfaces << QString("^cu\\.usbmodem.*%1$") + .arg(QString("%1").arg(descriptor.bInterfaceNumber, 1, 16).toUpper()); +#else // ### manufacturer and product strings are only readable as root :( if (!manufacturerString.isEmpty() && !productString.isEmpty()) { eligibleInterfaces << QString("usb-%1_%2-if%3") @@ -167,6 +171,7 @@ QList enumerateSerialPorts(int loglevel) } else { eligibleInterfaces << QString("if%1").arg(i, 2, 16, QChar('0')); // fix! } +#endif eligibleInterfacesInfo << InterfaceInfo(manufacturerString, productString, device->descriptor.idVendor, device->descriptor.idProduct); } } @@ -179,14 +184,24 @@ QList enumerateSerialPorts(int loglevel) if (loglevel > 1) qDebug() << " searching for interfaces:" << eligibleInterfaces; +#ifdef Q_OS_MAC + QDir dir("/dev/"); + bool allowAny = false; +#else QDir dir("/dev/serial/by-id/"); - foreach (const QFileInfo &info, dir.entryInfoList()) { + bool allowAny = eligibleInterfaces.isEmpty(); +#endif + foreach (const QFileInfo &info, dir.entryInfoList(QDir::System)) { if (!info.isDir()) { - bool usable = eligibleInterfaces.isEmpty(); + bool usable = allowAny; + QString friendlyName = info.fileName(); foreach (const QString &iface, eligibleInterfaces) { - if (info.fileName().contains(iface)) { + if (info.fileName().contains(QRegExp(iface))) { if (loglevel > 1) qDebug() << " found device file:" << info.fileName() << endl; +#ifdef Q_OS_MAC + friendlyName = eligibleInterfacesInfo[eligibleInterfaces.indexOf(iface)].product; +#endif usable = true; break; } @@ -195,7 +210,7 @@ QList enumerateSerialPorts(int loglevel) continue; SerialPortId id; - id.friendlyName = info.fileName(); + id.friendlyName = friendlyName; id.portName = info.canonicalFilePath(); list << id; } -- cgit v0.12 From d6a7931c5a2b90c0c276a1367135c9dc4e7532cd Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Mon, 20 Dec 2010 16:02:42 +0000 Subject: runonphone: Only print the modprobe instructions on linux Merge-request: 834 Reviewed-by: Shane Kearns --- tools/runonphone/serenum_unix.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/runonphone/serenum_unix.cpp b/tools/runonphone/serenum_unix.cpp index 93d8c67..86e797b 100644 --- a/tools/runonphone/serenum_unix.cpp +++ b/tools/runonphone/serenum_unix.cpp @@ -223,11 +223,15 @@ QList enumerateSerialPorts(int loglevel) << iface.manufacturer << "Product:" << iface.product +#ifdef Q_OS_LINUX << endl << " Load generic driver using:" << QString("sudo modprobe usbserial vendor=0x%1 product=0x%2") .arg(iface.manufacturerid, 4, 16, QChar('0')) .arg(iface.productid, 4, 16, QChar('0')); +#else + ; +#endif } } return list; -- cgit v0.12 From 7d2dc192477c0d10b2c5c9f144e2a37a270093f0 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 21 Dec 2010 10:57:44 +1000 Subject: Add tests for ListView.indexAt() and GridView.IndexAt() --- .../tst_qdeclarativegridview.cpp | 37 ++++++++++++++++++++++ .../tst_qdeclarativelistview.cpp | 33 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index fd5d140..a2dcf1c 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -84,6 +84,7 @@ private slots: void manualHighlight(); void footer(); void header(); + void indexAt(); private: QDeclarativeView *createView(); @@ -1299,6 +1300,42 @@ void tst_QDeclarativeGridView::header() QTRY_COMPARE(header->y(), 0.0); } +void tst_QDeclarativeGridView::indexAt() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + model.addItem("Fred", "12345"); + model.addItem("John", "2345"); + model.addItem("Bob", "54321"); + model.addItem("Billy", "22345"); + model.addItem("Sam", "2945"); + model.addItem("Ben", "04321"); + model.addItem("Jim", "0780"); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testTopToBottom", QVariant(false)); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); + qApp->processEvents(); + + QDeclarativeGridView *gridview = findItem(canvas->rootObject(), "grid"); + QTRY_VERIFY(gridview != 0); + + QDeclarativeItem *contentItem = gridview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QTRY_COMPARE(gridview->count(), model.count()); + + QCOMPARE(gridview->indexAt(0, 0), 0); + QCOMPARE(gridview->indexAt(79, 59), 0); + QCOMPARE(gridview->indexAt(80, 0), 1); + QCOMPARE(gridview->indexAt(0, 60), 3); + QCOMPARE(gridview->indexAt(240, 0), -1); + + delete canvas; +} QDeclarativeView *tst_QDeclarativeGridView::createView() { diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index b834d46..3df10a9 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -105,6 +105,7 @@ private slots: void QTBUG_14821(); void resizeDelegate(); void QTBUG_16037(); + void indexAt(); private: template void items(); @@ -1964,6 +1965,38 @@ void tst_QDeclarativeListView::QTBUG_16037() delete canvas; } +void tst_QDeclarativeListView::indexAt() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + TestObject *testObject = new TestObject; + ctxt->setContextProperty("testObject", testObject); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/listviewtest.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = findItem(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QCOMPARE(listview->indexAt(0,0), 0); + QCOMPARE(listview->indexAt(0,19), 0); + QCOMPARE(listview->indexAt(239,19), 0); + QCOMPARE(listview->indexAt(0,20), 1); + QCOMPARE(listview->indexAt(240,20), -1); + + delete canvas; +} + void tst_QDeclarativeListView::qListModelInterface_items() { items(); -- cgit v0.12 From bc679ceb8ad36de1da696f7f67e71145ceec7f98 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 21 Dec 2010 11:11:59 +1000 Subject: More testing for KeyNavigation attached properties. --- .../qdeclarativeitem/data/keynavigationtest.qml | 40 ++++++++++++++++++++++ .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 5 +++ 2 files changed, 45 insertions(+) diff --git a/tests/auto/declarative/qdeclarativeitem/data/keynavigationtest.qml b/tests/auto/declarative/qdeclarativeitem/data/keynavigationtest.qml index 229f969..f614a12 100644 --- a/tests/auto/declarative/qdeclarativeitem/data/keynavigationtest.qml +++ b/tests/auto/declarative/qdeclarativeitem/data/keynavigationtest.qml @@ -3,6 +3,46 @@ import QtQuick 1.0 Grid { columns: 2 width: 100; height: 100 + function verify() { + if (item1.KeyNavigation.right != item2) + return false; + if (item1.KeyNavigation.down != item3) + return false; + if (item1.KeyNavigation.tab != item2) + return false; + if (item1.KeyNavigation.backtab != item4) + return false; + + if (item2.KeyNavigation.left != item1) + return false; + if (item2.KeyNavigation.down != item4) + return false; + if (item2.KeyNavigation.tab != item3) + return false; + if (item2.KeyNavigation.backtab != item1) + return false; + + if (item3.KeyNavigation.right != item4) + return false; + if (item3.KeyNavigation.up != item1) + return false; + if (item3.KeyNavigation.tab != item4) + return false; + if (item3.KeyNavigation.backtab != item2) + return false; + + if (item4.KeyNavigation.left != item3) + return false; + if (item4.KeyNavigation.up != item2) + return false; + if (item4.KeyNavigation.tab != item1) + return false; + if (item4.KeyNavigation.backtab != item3) + return false; + + return true; + } + Rectangle { id: item1 objectName: "item1" diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 711bf00..0ebb8b7 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -393,6 +393,11 @@ void tst_QDeclarativeItem::keyNavigation() QVERIFY(item); QVERIFY(item->hasActiveFocus()); + QVariant result; + QVERIFY(QMetaObject::invokeMethod(canvas->rootObject(), "verify", + Q_RETURN_ARG(QVariant, result))); + QVERIFY(result.toBool()); + // right QKeyEvent key(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier, "", false, 1); QApplication::sendEvent(canvas, &key); -- cgit v0.12 From 4ff05f2ed8cef9a126af023a4692eb8c50a0a892 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Tue, 21 Dec 2010 15:58:12 +1000 Subject: Fix number of chapters in qtestlib tutorial. Task-number: QTBUG-10248 Reviewed-by: Trust Me --- doc/src/development/qtestlib.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/development/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc index e53957f..38c2220 100644 --- a/doc/src/development/qtestlib.qdoc +++ b/doc/src/development/qtestlib.qdoc @@ -370,7 +370,7 @@ \title QTestLib Tutorial This tutorial gives a short introduction to how to use some of the - features of the QTestLib framework. It is divided into four + features of the QTestLib framework. It is divided into five chapters: \list 1 -- cgit v0.12 From 2a340b56c9935ee25bbd0b750d1239cb14051b27 Mon Sep 17 00:00:00 2001 From: axis Date: Tue, 21 Dec 2010 10:46:26 +0100 Subject: Fixed PREPEND_INCLUDEPATH being executed too early. It used to be carried out inside qt.prf, but was moved to default_post.prf. However, since qt.prf is executed after default_post.prf, it would still prepend its own include paths at the very front, which is wrong. Fixed by introducing a new feature profile for PREPEND_INCLUDEPATH, which is run after qt.prf (features in $$CONFIG are executed in reverse order). RevBy: Miikka Heikkinen --- mkspecs/common/symbian/symbian.conf | 2 +- mkspecs/features/symbian/default_post.prf | 15 --------------- mkspecs/features/symbian/prepend_includepath.prf | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 mkspecs/features/symbian/prepend_includepath.prf diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index b8e1d26..8c79d8b 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -3,7 +3,7 @@ # TEMPLATE = app -CONFIG += qt warn_on release incremental link_prl sis_targets run_on_phone +CONFIG += prepend_includepath qt warn_on release incremental link_prl sis_targets run_on_phone QT += core gui QMAKE_INCREMENTAL_STYLE = sublib diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index 89f655d..fffc481 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -53,21 +53,6 @@ isEmpty(TARGET.UID2) { } } -# Allow .pro files to specify include path(s) to be prepended to the list. -# -# This allows the project to override the default ordering, whereby paths -# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause -# problems when both the epoc32/include tree and a Qt include directory -# contain a header of the same name - in this case, the Qt header is always -# included by virtue of its path appearing first in the SYSTEMINCLUDE -# directives in the generated MMP file. -# -# To work around this situation, the following line can be added to the .pro -# file: -# PREPEND_INCLUDEPATH = /epoc32/include -# -INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH - # Add dependency to Qt package to all other projects besides Qt libs. # Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, # while self-signed version typically has temporary UID3 of 0xE001E61C. diff --git a/mkspecs/features/symbian/prepend_includepath.prf b/mkspecs/features/symbian/prepend_includepath.prf new file mode 100644 index 0000000..d9fd4fe --- /dev/null +++ b/mkspecs/features/symbian/prepend_includepath.prf @@ -0,0 +1,14 @@ +# Allow .pro files to specify include path(s) to be prepended to the list. +# +# This allows the project to override the default ordering, whereby paths +# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause +# problems when both the epoc32/include tree and a Qt include directory +# contain a header of the same name - in this case, the Qt header is always +# included by virtue of its path appearing first in the SYSTEMINCLUDE +# directives in the generated MMP file. +# +# To work around this situation, the following line can be added to the .pro +# file: +# PREPEND_INCLUDEPATH = /epoc32/include +# +INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH -- cgit v0.12 From 5963b2b92829035d14ab9f5fc5f65dec9460d969 Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Tue, 21 Dec 2010 11:14:26 +0100 Subject: Add inter-process binary shader cache for MeeGo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch significantly reduces MeeGo app startup times by caching binary shaders in a shared memory segment. Reviewed-by: Robert Griebl Reviewed-by: Samuel Rødal --- .../gl2paintengineex/qglengineshadermanager.cpp | 294 +++++++------ .../gl2paintengineex/qglshadercache_meego_p.h | 457 +++++++++++++++++++++ src/opengl/gl2paintengineex/qglshadercache_p.h | 98 +++++ src/opengl/opengl.pro | 4 +- src/opengl/util/meego/main.cpp | 48 +++ .../util/meego/shader-cache-introspector.pro | 7 + 6 files changed, 771 insertions(+), 137 deletions(-) create mode 100644 src/opengl/gl2paintengineex/qglshadercache_meego_p.h create mode 100644 src/opengl/gl2paintengineex/qglshadercache_p.h create mode 100644 src/opengl/util/meego/main.cpp create mode 100644 src/opengl/util/meego/shader-cache-introspector.pro diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp index 93ff3f4..0723c28 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +++ b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp @@ -42,6 +42,7 @@ #include "qglengineshadermanager_p.h" #include "qglengineshadersource_p.h" #include "qpaintengineex_opengl2_p.h" +#include "qglshadercache_p.h" #if defined(QT_DEBUG) #include @@ -170,64 +171,92 @@ QGLEngineSharedShaders::QGLEngineSharedShaders(const QGLContext* context) QGLShader* fragShader; QGLShader* vertexShader; - QByteArray source; + QByteArray vertexSource; + QByteArray fragSource; // Compile up the simple shader: - source.clear(); - source.append(qShaderSnippets[MainVertexShader]); - source.append(qShaderSnippets[PositionOnlyVertexShader]); - vertexShader = new QGLShader(QGLShader::Vertex, context, 0); - shaders.append(vertexShader); - if (!vertexShader->compileSourceCode(source)) - qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); - - source.clear(); - source.append(qShaderSnippets[MainFragmentShader]); - source.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); - fragShader = new QGLShader(QGLShader::Fragment, context, 0); - shaders.append(fragShader); - if (!fragShader->compileSourceCode(source)) - qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); + vertexSource.append(qShaderSnippets[MainVertexShader]); + vertexSource.append(qShaderSnippets[PositionOnlyVertexShader]); + + fragSource.append(qShaderSnippets[MainFragmentShader]); + fragSource.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); simpleShaderProg = new QGLShaderProgram(context, 0); - simpleShaderProg->addShader(vertexShader); - simpleShaderProg->addShader(fragShader); - simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); - simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); - simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); - simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); + + CachedShader simpleShaderCache(fragSource, vertexSource); + + bool inCache = simpleShaderCache.load(simpleShaderProg, context); + + if (!inCache) { + vertexShader = new QGLShader(QGLShader::Vertex, context, 0); + shaders.append(vertexShader); + if (!vertexShader->compileSourceCode(vertexSource)) + qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); + + fragShader = new QGLShader(QGLShader::Fragment, context, 0); + shaders.append(fragShader); + if (!fragShader->compileSourceCode(fragSource)) + qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); + + simpleShaderProg->addShader(vertexShader); + simpleShaderProg->addShader(fragShader); + + simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); + simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); + simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); + simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); + } + simpleShaderProg->link(); - if (!simpleShaderProg->isLinked()) { + + if (simpleShaderProg->isLinked()) { + if (!inCache) + simpleShaderCache.store(simpleShaderProg, context); + } else { qCritical() << "Errors linking simple shader:" << simpleShaderProg->log(); } // Compile the blit shader: - source.clear(); - source.append(qShaderSnippets[MainWithTexCoordsVertexShader]); - source.append(qShaderSnippets[UntransformedPositionVertexShader]); - vertexShader = new QGLShader(QGLShader::Vertex, context, 0); - shaders.append(vertexShader); - if (!vertexShader->compileSourceCode(source)) - qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); - - source.clear(); - source.append(qShaderSnippets[MainFragmentShader]); - source.append(qShaderSnippets[ImageSrcFragmentShader]); - fragShader = new QGLShader(QGLShader::Fragment, context, 0); - shaders.append(fragShader); - if (!fragShader->compileSourceCode(source)) - qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); + vertexSource.clear(); + vertexSource.append(qShaderSnippets[MainWithTexCoordsVertexShader]); + vertexSource.append(qShaderSnippets[UntransformedPositionVertexShader]); + + fragSource.clear(); + fragSource.append(qShaderSnippets[MainFragmentShader]); + fragSource.append(qShaderSnippets[ImageSrcFragmentShader]); blitShaderProg = new QGLShaderProgram(context, 0); - blitShaderProg->addShader(vertexShader); - blitShaderProg->addShader(fragShader); - blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); - blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); + + CachedShader blitShaderCache(fragSource, vertexSource); + + inCache = blitShaderCache.load(blitShaderProg, context); + + if (!inCache) { + vertexShader = new QGLShader(QGLShader::Vertex, context, 0); + shaders.append(vertexShader); + if (!vertexShader->compileSourceCode(vertexSource)) + qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); + + fragShader = new QGLShader(QGLShader::Fragment, context, 0); + shaders.append(fragShader); + if (!fragShader->compileSourceCode(fragSource)) + qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); + + blitShaderProg->addShader(vertexShader); + blitShaderProg->addShader(fragShader); + + blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); + blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); + } + blitShaderProg->link(); - if (!blitShaderProg->isLinked()) { + if (blitShaderProg->isLinked()) { + if (!inCache) + blitShaderCache.store(blitShaderProg, context); + } else { qCritical() << "Errors linking blit shader:" - << simpleShaderProg->log(); + << blitShaderProg->log(); } #ifdef QT_GL_SHARED_SHADER_DEBUG @@ -279,101 +308,110 @@ QGLEngineShaderProg *QGLEngineSharedShaders::findProgramInCache(const QGLEngineS } } - QGLShader *vertexShader = 0; - QGLShader *fragShader = 0; - QGLEngineShaderProg *newProg = 0; - bool success = false; + QScopedPointer newProg; do { - QByteArray source; + QByteArray fragSource; // Insert the custom stage before the srcPixel shader to work around an ATI driver bug // where you cannot forward declare a function that takes a sampler as argument. if (prog.srcPixelFragShader == CustomImageSrcFragmentShader) - source.append(prog.customStageSource); - source.append(qShaderSnippets[prog.mainFragShader]); - source.append(qShaderSnippets[prog.srcPixelFragShader]); + fragSource.append(prog.customStageSource); + fragSource.append(qShaderSnippets[prog.mainFragShader]); + fragSource.append(qShaderSnippets[prog.srcPixelFragShader]); if (prog.compositionFragShader) - source.append(qShaderSnippets[prog.compositionFragShader]); + fragSource.append(qShaderSnippets[prog.compositionFragShader]); if (prog.maskFragShader) - source.append(qShaderSnippets[prog.maskFragShader]); - fragShader = new QGLShader(QGLShader::Fragment, ctxGuard.context(), 0); - shaders.append(fragShader); - QByteArray description; + fragSource.append(qShaderSnippets[prog.maskFragShader]); + + QByteArray vertexSource; + vertexSource.append(qShaderSnippets[prog.mainVertexShader]); + vertexSource.append(qShaderSnippets[prog.positionVertexShader]); + + QScopedPointer shaderProgram(new QGLShaderProgram(ctxGuard.context(), 0)); + + CachedShader shaderCache(fragSource, vertexSource); + bool inCache = shaderCache.load(shaderProgram.data(), ctxGuard.context()); + + if (!inCache) { + + QScopedPointer fragShader(new QGLShader(QGLShader::Fragment, ctxGuard.context(), 0)); + QByteArray description; #if defined(QT_DEBUG) - // Name the shader for easier debugging - description.append("Fragment shader: main="); - description.append(snippetNameStr(prog.mainFragShader)); - description.append(", srcPixel="); - description.append(snippetNameStr(prog.srcPixelFragShader)); - if (prog.compositionFragShader) { - description.append(", composition="); - description.append(snippetNameStr(prog.compositionFragShader)); - } - if (prog.maskFragShader) { - description.append(", mask="); - description.append(snippetNameStr(prog.maskFragShader)); - } - fragShader->setObjectName(QString::fromLatin1(description)); + // Name the shader for easier debugging + description.append("Fragment shader: main="); + description.append(snippetNameStr(prog.mainFragShader)); + description.append(", srcPixel="); + description.append(snippetNameStr(prog.srcPixelFragShader)); + if (prog.compositionFragShader) { + description.append(", composition="); + description.append(snippetNameStr(prog.compositionFragShader)); + } + if (prog.maskFragShader) { + description.append(", mask="); + description.append(snippetNameStr(prog.maskFragShader)); + } + fragShader->setObjectName(QString::fromLatin1(description)); #endif - if (!fragShader->compileSourceCode(source)) { - qWarning() << "Warning:" << description << "failed to compile!"; - break; - } + if (!fragShader->compileSourceCode(fragSource)) { + qWarning() << "Warning:" << description << "failed to compile!"; + break; + } - source.clear(); - source.append(qShaderSnippets[prog.mainVertexShader]); - source.append(qShaderSnippets[prog.positionVertexShader]); - vertexShader = new QGLShader(QGLShader::Vertex, ctxGuard.context(), 0); - shaders.append(vertexShader); + QScopedPointer vertexShader(new QGLShader(QGLShader::Vertex, ctxGuard.context(), 0)); #if defined(QT_DEBUG) - // Name the shader for easier debugging - description.clear(); - description.append("Vertex shader: main="); - description.append(snippetNameStr(prog.mainVertexShader)); - description.append(", position="); - description.append(snippetNameStr(prog.positionVertexShader)); - vertexShader->setObjectName(QString::fromLatin1(description)); + // Name the shader for easier debugging + description.clear(); + description.append("Vertex shader: main="); + description.append(snippetNameStr(prog.mainVertexShader)); + description.append(", position="); + description.append(snippetNameStr(prog.positionVertexShader)); + vertexShader->setObjectName(QString::fromLatin1(description)); #endif - if (!vertexShader->compileSourceCode(source)) { - qWarning() << "Warning:" << description << "failed to compile!"; - break; - } + if (!vertexShader->compileSourceCode(vertexSource)) { + qWarning() << "Warning:" << description << "failed to compile!"; + break; + } - newProg = new QGLEngineShaderProg(prog); - - // If the shader program's not found in the cache, create it now. - newProg->program = new QGLShaderProgram(ctxGuard.context(), 0); - newProg->program->addShader(vertexShader); - newProg->program->addShader(fragShader); - - // We have to bind the vertex attribute names before the program is linked: - newProg->program->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); - if (newProg->useTextureCoords) - newProg->program->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); - if (newProg->useOpacityAttribute) - newProg->program->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); - if (newProg->usePmvMatrixAttribute) { - newProg->program->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); - newProg->program->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); - newProg->program->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); + shaders.append(vertexShader.data()); + shaders.append(fragShader.data()); + shaderProgram->addShader(vertexShader.take()); + shaderProgram->addShader(fragShader.take()); + + // We have to bind the vertex attribute names before the program is linked: + shaderProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); + if (prog.useTextureCoords) + shaderProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); + if (prog.useOpacityAttribute) + shaderProgram->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); + if (prog.usePmvMatrixAttribute) { + shaderProgram->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); + shaderProgram->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); + shaderProgram->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); + } } + newProg.reset(new QGLEngineShaderProg(prog)); + newProg->program = shaderProgram.take(); + newProg->program->link(); - if (!newProg->program->isLinked()) { + if (newProg->program->isLinked()) { + if (!inCache) + shaderCache.store(newProg->program, ctxGuard.context()); + } else { QLatin1String none("none"); QLatin1String br("\n"); QString error; - error = QLatin1String("Shader program failed to link,") + error = QLatin1String("Shader program failed to link,"); #if defined(QT_DEBUG) - + br - + QLatin1String(" Shaders Used:") + br - + QLatin1String(" ") + vertexShader->objectName() + QLatin1String(": ") + br - + QLatin1String(vertexShader->sourceCode()) + br - + QLatin1String(" ") + fragShader->objectName() + QLatin1String(": ") + br - + QLatin1String(fragShader->sourceCode()) + br + error += QLatin1String("\n Shaders Used:\n"); + for (int i = 0; i < newProg->program->shaders().count(); ++i) { + QGLShader *shader = newProg->program->shaders().at(i); + error += QLatin1String(" ") + shader->objectName() + QLatin1String(": \n") + + QLatin1String(shader->sourceCode()) + br; + } #endif - + QLatin1String(" Error Log:\n") - + QLatin1String(" ") + newProg->program->log(); + error += QLatin1String(" Error Log:\n") + + QLatin1String(" ") + newProg->program->log(); qWarning() << error; break; } @@ -395,26 +433,10 @@ QGLEngineShaderProg *QGLEngineSharedShaders::findProgramInCache(const QGLEngineS } } - cachedPrograms.insert(0, newProg); - - success = true; + cachedPrograms.insert(0, newProg.data()); } while (false); - // Clean up everything if we weren't successful - if (!success) { - if (newProg) { - delete newProg; // Also deletes the QGLShaderProgram which in turn deletes the QGLShaders - newProg = 0; - } - else { - if (vertexShader) - delete vertexShader; - if (fragShader) - delete fragShader; - } - } - - return newProg; + return newProg.take(); } void QGLEngineSharedShaders::cleanupCustomStage(QGLCustomShaderStage* stage) diff --git a/src/opengl/gl2paintengineex/qglshadercache_meego_p.h b/src/opengl/gl2paintengineex/qglshadercache_meego_p.h new file mode 100644 index 0000000..5f51fc2 --- /dev/null +++ b/src/opengl/gl2paintengineex/qglshadercache_meego_p.h @@ -0,0 +1,457 @@ +/**************************************************************************** +** +** 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 QtOpenGL 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$ +** +****************************************************************************/ + +// +// 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. +// + +#ifndef QGLSHADERCACHE_MEEGO_P_H +#define QGLSHADERCACHE_MEEGO_P_H + +#include + +#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) + +#include +#include +#include + +#ifndef QT_BOOTSTRAPPED +# include +#endif +#if defined(QT_DEBUG) || defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) +# include +#endif + +QT_BEGIN_HEADER + +/* + This cache stores internal Qt shader programs in shared memory. + + This header file is ugly on purpose and can only be included once. It is only to be used + for the internal shader cache, not as a generic cache for anyone's shaders. + + The cache stores either ShaderCacheMaxEntries shader programs or ShaderCacheDataSize kilobytes + of shader programs, whatever limit is reached first. + + The layout of the cache is as outlined in the CachedShaders struct. After some + integers, an array of headers is reserved, then comes the space for the actual binaries. + + Shader Programs are identified by the md5sum of their frag and vertex shader source code. + + Shader Programs are never removed. The cache never shrinks or re-shuffles. This is done + on purpose to ensure minimum amount of locking, no alignment problems and very few write + operations. + + Note: Locking the shader cache could be expensive, because the entire system might hang. + That's why the cache is immutable to minimize the time we need to keep it locked. + + Why is it Meego specific? + + First, the size is chosen so that it fits to generic meego usage. Second, on Meego, there's + always at least one Qt application active (the launcher), so the cache will never be destroyed. + Only when the last Qt app exits, the cache dies, which should only be when someone kills the + X11 server. And last but not least it was only tested with Meego's SGX driver. + + There's a small tool in src/opengl/util/meego that dumps the contents of the cache. + */ + +// anonymous namespace, prevent exporting of the private symbols +namespace +{ + +struct CachedShaderHeader +{ + /* the index in the data[] member of CachedShaders */ + int index; + /* the size of the binary shader */ + GLsizei size; + /* the format of the binary shader */ + GLenum format; + /* the md5sum of the frag+vertex shaders */ + char md5Sum[16]; +}; + +enum +{ + /* The maximum amount of shader programs the cache can hold */ + ShaderCacheMaxEntries = 20 +}; + +typedef CachedShaderHeader CachedShaderHeaders[ShaderCacheMaxEntries]; + +enum +{ + // ShaderCacheDataSize is 20k minus the other data members of CachedShaders + ShaderCacheDataSize = 1024 * ShaderCacheMaxEntries - sizeof(CachedShaderHeaders) - 2 * sizeof(int) +}; + +struct CachedShaders +{ + /* How much space is still available in the cache */ + inline int availableSize() const { return ShaderCacheDataSize - dataSize; } + + /* The current amount of cached shaders */ + int shaderCount; + + /* The current amount (in bytes) of cached data */ + int dataSize; + + /* The headers describing the shaders */ + CachedShaderHeaders headers; + + /* The actual binary data of the shader programs */ + char data[ShaderCacheDataSize]; +}; + +//#define QT_DEBUG_SHADER_CACHE +#ifdef QT_DEBUG_SHADER_CACHE +static QDebug shaderCacheDebug() +{ + return QDebug(QtDebugMsg); +} +#else +static inline QNoDebug shaderCacheDebug() { return QNoDebug(); } +#endif + +class ShaderCacheSharedMemory +{ +public: + ShaderCacheSharedMemory() + : shm(QLatin1String("qt_gles2_shadercache_" QT_VERSION_STR)) + { + // we need a system semaphore here, since cache creation and initialization must be atomic + QSystemSemaphore attachSemaphore(QLatin1String("qt_gles2_shadercache_mutex_" QT_VERSION_STR), 1); + + if (!attachSemaphore.acquire()) { + shaderCacheDebug() << "Unable to require shader cache semaphore:" << attachSemaphore.errorString(); + return; + } + + if (shm.attach()) { + // success! + shaderCacheDebug() << "Attached to shader cache"; + } else { + + // no cache exists - create and initialize it + if (shm.create(sizeof(CachedShaders))) { + shaderCacheDebug() << "Created new shader cache"; + initializeCache(); + } else { + shaderCacheDebug() << "Unable to create shader cache:" << shm.errorString(); + } + } + + attachSemaphore.release(); + } + + inline bool isAttached() const { return shm.isAttached(); } + + inline bool lock() { return shm.lock(); } + inline bool unlock() { return shm.unlock(); } + inline void *data() { return shm.data(); } + inline QString errorString() { return shm.errorString(); } + + ~ShaderCacheSharedMemory() + { + if (!shm.detach()) + shaderCacheDebug() << "Unable to detach shader cache" << shm.errorString(); + } + +private: + void initializeCache() + { + // no need to lock the shared memory since we're already protected by the + // attach system semaphore. + + void *data = shm.data(); + Q_ASSERT(data); + + memset(data, 0, sizeof(CachedShaders)); + } + + QSharedMemory shm; +}; + +class ShaderCacheLocker +{ +public: + inline ShaderCacheLocker(ShaderCacheSharedMemory *cache) + : shm(cache->lock() ? cache : (ShaderCacheSharedMemory *)0) + { + if (!shm) + shaderCacheDebug() << "Unable to lock shader cache" << cache->errorString(); + } + + inline bool isLocked() const { return shm; } + + inline ~ShaderCacheLocker() + { + if (!shm) + return; + if (!shm->unlock()) + shaderCacheDebug() << "Unable to unlock shader cache" << shm->errorString(); + } + +private: + ShaderCacheSharedMemory *shm; +}; + +#ifdef QT_BOOTSTRAPPED +} // end namespace +#else + +static void traceCacheOverflow(const char *message) +{ +#if defined(QT_DEBUG) || defined (QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) + openlog(qPrintable(QCoreApplication::applicationName()), LOG_PID | LOG_ODELAY, LOG_USER); + syslog(LOG_DEBUG, message); + closelog(); +#endif + shaderCacheDebug() << message; +} + +Q_GLOBAL_STATIC(ShaderCacheSharedMemory, shaderCacheSharedMemory) + +/* + Finds the index of the shader program identified by md5Sum in the cache. + Note: Does NOT lock the cache for reading, the cache must already be locked! + + Returns -1 when no shader was found. + */ +static int qt_cache_index_unlocked(const QByteArray &md5Sum, CachedShaders *cache) +{ + for (int i = 0; i < cache->shaderCount; ++i) { + if (qstrncmp(md5Sum.constData(), cache->headers[i].md5Sum, 16) == 0) { + return i; + } + } + return -1; +} + +/* Returns the index of the shader identified by md5Sum */ +static int qt_cache_index(const QByteArray &md5Sum) +{ + ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); + if (!shm || !shm->isAttached()) + return false; + + Q_ASSERT(md5Sum.length() == 16); + + ShaderCacheLocker locker(shm); + if (!locker.isLocked()) + return false; + + void *data = shm->data(); + Q_ASSERT(data); + + CachedShaders *cache = reinterpret_cast(data); + + return qt_cache_index_unlocked(md5Sum, cache); +} + +/* Loads the cached shader at index \a shaderIndex into \a program + * Note: Since the cache is immutable, this operation doesn't lock the shared memory. + */ +static bool qt_cached_shader(QGLShaderProgram *program, const QGLContext *ctx, int shaderIndex) +{ + Q_ASSERT(shaderIndex >= 0 && shaderIndex <= ShaderCacheMaxEntries); + Q_ASSERT(program); + + ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); + if (!shm || !shm->isAttached()) + return false; + + void *data = shm->data(); + Q_ASSERT(data); + + CachedShaders *cache = reinterpret_cast(data); + + shaderCacheDebug() << "fetching cached shader at index" << shaderIndex + << "dataIndex" << cache->headers[shaderIndex].index + << "size" << cache->headers[shaderIndex].size + << "format" << cache->headers[shaderIndex].format; + + // call program->programId first, since that resolves the glProgramBinaryOES symbol + GLuint programId = program->programId(); + glProgramBinaryOES(programId, cache->headers[shaderIndex].format, + cache->data + cache->headers[shaderIndex].index, + cache->headers[shaderIndex].size); + + return true; +} + +/* Stores the shader program in the cache. Returns false if there's an error with the cache, or + if the cache is too small to hold the shader. */ +static bool qt_cache_shader(const QGLShaderProgram *shader, const QGLContext *ctx, const QByteArray &md5Sum) +{ + ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); + if (!shm || !shm->isAttached()) + return false; + + void *data = shm->data(); + Q_ASSERT(data); + + CachedShaders *cache = reinterpret_cast(data); + + ShaderCacheLocker locker(shm); + if (!locker.isLocked()) + return false; + + int cacheIdx = cache->shaderCount; + if (cacheIdx >= ShaderCacheMaxEntries) { + traceCacheOverflow("Qt OpenGL shader cache index overflow!"); + return false; + } + + // now that we have the lock on the shared memory, make sure no one + // inserted the shader already while we were unlocked + if (qt_cache_index_unlocked(md5Sum, cache) != -1) + return true; // already cached + + shaderCacheDebug() << "Caching shader at index" << cacheIdx; + + GLint binaryLength = 0; + glGetProgramiv(shader->programId(), GL_PROGRAM_BINARY_LENGTH_OES, &binaryLength); + + if (!binaryLength) { + shaderCacheDebug() << "Unable to determine binary shader size!"; + return false; + } + + if (binaryLength > cache->availableSize()) { + traceCacheOverflow("Qt OpenGL shader cache data overflow!"); + return false; + } + + GLsizei size = 0; + GLenum format = 0; + glGetProgramBinaryOES(shader->programId(), binaryLength, &size, &format, + cache->data + cache->dataSize); + + if (!size) { + shaderCacheDebug() << "Unable to get binary shader!"; + return false; + } + + cache->headers[cacheIdx].index = cache->dataSize; + cache->dataSize += binaryLength; + ++cache->shaderCount; + cache->headers[cacheIdx].size = binaryLength; + cache->headers[cacheIdx].format = format; + + memcpy(cache->headers[cacheIdx].md5Sum, md5Sum.constData(), 16); + + shaderCacheDebug() << "cached shader size" << size + << "format" << format + << "binarySize" << binaryLength + << "cache index" << cacheIdx + << "data index" << cache->headers[cacheIdx].index; + + return true; +} + +} // namespace + +QT_BEGIN_NAMESPACE + +QT_MODULE(OpenGL) + +class CachedShader +{ +public: + CachedShader(const QByteArray &fragSource, const QByteArray &vertexSource) + : cacheIdx(-1) + { + QCryptographicHash md5Hash(QCryptographicHash::Md5); + + md5Hash.addData(fragSource); + md5Hash.addData(vertexSource); + + md5Sum = md5Hash.result(); + } + + bool isCached() + { + return cacheIndex() != -1; + } + + int cacheIndex() + { + if (cacheIdx != -1) + return cacheIdx; + cacheIdx = qt_cache_index(md5Sum); + return cacheIdx; + } + + bool load(QGLShaderProgram *program, const QGLContext *ctx) + { + if (cacheIndex() == -1) + return false; + return qt_cached_shader(program, ctx, cacheIdx); + } + + bool store(QGLShaderProgram *program, const QGLContext *ctx) + { + return qt_cache_shader(program, ctx, md5Sum); + } + +private: + QByteArray md5Sum; + int cacheIdx; +}; + + +QT_END_NAMESPACE + +#endif + +QT_END_HEADER + +#endif +#endif diff --git a/src/opengl/gl2paintengineex/qglshadercache_p.h b/src/opengl/gl2paintengineex/qglshadercache_p.h new file mode 100644 index 0000000..29616ae --- /dev/null +++ b/src/opengl/gl2paintengineex/qglshadercache_p.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** 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 QtOpenGL 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$ +** +****************************************************************************/ + +// +// 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. +// + +#ifndef QGLSHADERCACHE_P_H +#define QGLSHADERCACHE_P_H + +#include + +#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) +# include "qglshadercache_meego_p.h" +#else + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(OpenGL) + +class QGLShaderProgram; +class QGLContext; + +class CachedShader +{ +public: + inline CachedShader(const QByteArray &, const QByteArray &) + {} + + inline bool isCached() + { + return false; + } + + inline bool load(QGLShaderProgram *, const QGLContext *) + { + return false; + } + + inline bool store(QGLShaderProgram *, const QGLContext *) + { + return false; + } +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif +#endif diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 682e620..a089d55 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -60,7 +60,9 @@ SOURCES += qgl.cpp \ gl2paintengineex/qglcustomshaderstage_p.h \ gl2paintengineex/qtriangulatingstroker_p.h \ gl2paintengineex/qtriangulator_p.h \ - gl2paintengineex/qtextureglyphcache_gl_p.h + gl2paintengineex/qtextureglyphcache_gl_p.h \ + gl2paintengineex/qglshadercache_p.h \ + gl2paintengineex/qglshadercache_meego_p.h SOURCES += qglshaderprogram.cpp \ qglpixmapfilter.cpp \ diff --git a/src/opengl/util/meego/main.cpp b/src/opengl/util/meego/main.cpp new file mode 100644 index 0000000..0c9a915 --- /dev/null +++ b/src/opengl/util/meego/main.cpp @@ -0,0 +1,48 @@ +#include + +#define QT_DEBUG_SHADER_CACHE +#define QT_MEEGO_EXPERIMENTAL_SHADERCACHE +#define QT_OPENGL_ES_2 +#define QT_BOOTSTRAPPED + +typedef int GLsizei; +typedef unsigned int GLenum; + +#include "../../gl2paintengineex/qglshadercache_meego_p.h" + +#include +#include + +int main() +{ + ShaderCacheSharedMemory shm; + + if (!shm.isAttached()) { + fprintf(stderr, "Unable to attach to shared memory\n"); + return EXIT_FAILURE; + } + + ShaderCacheLocker locker(&shm); + if (!locker.isLocked()) { + fprintf(stderr, "Unable to lock shared memory\n"); + return EXIT_FAILURE; + } + + void *data = shm.data(); + Q_ASSERT(data); + + CachedShaders *cache = reinterpret_cast(data); + + for (int i = 0; i < cache->shaderCount; ++i) { + printf("Shader %d: %d bytes\n", i, cache->headers[i].size); + } + + printf("\nSummary:\n\n" + " Amount of cached shaders: %d\n" + " Bytes used: %d\n" + " Bytes available: %d\n", + cache->shaderCount, cache->dataSize, cache->availableSize()); + + return EXIT_SUCCESS; +} + diff --git a/src/opengl/util/meego/shader-cache-introspector.pro b/src/opengl/util/meego/shader-cache-introspector.pro new file mode 100644 index 0000000..520e9a5 --- /dev/null +++ b/src/opengl/util/meego/shader-cache-introspector.pro @@ -0,0 +1,7 @@ +TEMPLATE = app + +SOURCES += main.cpp + +TARGET = shader-cache-introspector + +QT = core -- cgit v0.12 From 482e924154a57cf2e37d8224d3c677635aa56317 Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Tue, 21 Dec 2010 12:55:49 +0100 Subject: QMessageBox wrong Show/Hide Details button label On LanguageChange event QMessageBox switches Show/Hide Details button label Customer portal case id: 00217646 Merge-request: 973 Reviewed-by: Olivier Goffart --- src/gui/dialogs/qmessagebox.cpp | 2 +- tests/auto/qmessagebox/tst_qmessagebox.cpp | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp index 224a176..af9616d 100644 --- a/src/gui/dialogs/qmessagebox.cpp +++ b/src/gui/dialogs/qmessagebox.cpp @@ -1925,7 +1925,7 @@ void QMessageBoxPrivate::retranslateStrings() { #ifndef QT_NO_TEXTEDIT if (detailsButton) - detailsButton->setLabel(detailsText->isHidden() ? HideLabel : ShowLabel); + detailsButton->setLabel(detailsText->isHidden() ? ShowLabel : HideLabel); #endif } diff --git a/tests/auto/qmessagebox/tst_qmessagebox.cpp b/tests/auto/qmessagebox/tst_qmessagebox.cpp index d4ca064..54d199c 100644 --- a/tests/auto/qmessagebox/tst_qmessagebox.cpp +++ b/tests/auto/qmessagebox/tst_qmessagebox.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC) #include #endif @@ -119,6 +120,7 @@ private slots: void statics(); void about(); void detailsText(); + void detailsButtonText(); void shortcut(); @@ -661,6 +663,26 @@ void tst_QMessageBox::detailsText() QCOMPARE(box.detailedText(), text); } +void tst_QMessageBox::detailsButtonText() +{ + QMessageBox box; + box.setDetailedText("bla"); + box.open(); + QApplication::postEvent(&box, new QEvent(QEvent::LanguageChange)); + QApplication::processEvents(); + QDialogButtonBox* bb = box.findChild("qt_msgbox_buttonbox"); + QVERIFY(bb); //get the detail button + + QList list = bb->buttons(); + QAbstractButton* btn = NULL; + foreach(btn, list) { + if (btn && (btn->inherits("QPushButton"))) { + if(btn->text() != QMessageBox::tr("OK") && btn->text() != QMessageBox::tr("Show Details...")) + QFAIL("Incorrect messagebox button text!"); + } + } +} + void tst_QMessageBox::incorrectDefaultButton() { keyToSend = Qt::Key_Escape; -- cgit v0.12 From b696d941c06535b7a7813c4d3b39dbd3710476e4 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Tue, 21 Dec 2010 10:29:19 +0100 Subject: Fix timer warning when deleting item views Reviewed-by: Olivier Task-number: QTBUG-16175 --- src/gui/itemviews/qabstractitemview.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index 177b088..a7960ae 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -595,8 +595,15 @@ QAbstractItemView::QAbstractItemView(QAbstractItemViewPrivate &dd, QWidget *pare */ QAbstractItemView::~QAbstractItemView() { - // stop this timer here before ~QObject - d_func()->delayedReset.stop(); + Q_D(QAbstractItemView); + // stop these timers here before ~QObject + d->delayedReset.stop(); + d->updateTimer.stop(); + d->delayedEditing.stop(); + d->delayedAutoScroll.stop(); + d->autoScrollTimer.stop(); + d->delayedLayout.stop(); + d->fetchMoreTimer.stop(); } /*! -- cgit v0.12 From 5d68753927ac6ba1445ceb6831da7e2346d91bf9 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 21 Dec 2010 13:26:54 +0100 Subject: Optimize texture glyph cache To avoid calling the bounding box function for the same non-printable characters in every call, we cache them as empty in the coords table and bail out before painting them. This patch also fixes some possible reads of uninitialized memory (reference to return value) and reference to a default constructed object consisting of uninitialized pods. Reviewed-by: Samuel --- src/gui/painting/qpaintengine_raster.cpp | 4 +++- src/gui/painting/qtextureglyphcache.cpp | 11 ++++++++--- src/gui/painting/qtextureglyphcache_p.h | 5 +++++ .../gl2paintengineex/qpaintengineex_opengl2.cpp | 20 ++++++++++++-------- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 97dfddf..ec5cef0 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3111,7 +3111,9 @@ void QRasterPaintEngine::drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, if (supportsSubPixelPositions) subPixelPosition = cache->subPixelPositionForX(positions[i].x); QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], subPixelPosition); - const QTextureGlyphCache::Coord &c = cache->coords.value(glyph); + const QTextureGlyphCache::Coord &c = cache->coords[glyph]; + if (c.isNull()) + continue; int x = qFloor(positions[i].x) + c.baseLineX - margin; int y = qFloor(positions[i].y) - c.baseLineY - margin; diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp index 60300c3..670ca95 100644 --- a/src/gui/painting/qtextureglyphcache.cpp +++ b/src/gui/painting/qtextureglyphcache.cpp @@ -175,11 +175,16 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const metrics.yoff.toReal(), metrics.x.toReal(), metrics.y.toReal()); -#endif +#endif + GlyphAndSubPixelPosition key(glyph, subPixelPosition); int glyph_width = metrics.width.ceil().toInt(); int glyph_height = metrics.height.ceil().toInt(); - if (glyph_height == 0 || glyph_width == 0) + if (glyph_height == 0 || glyph_width == 0) { + // Avoid multiple calls to boundingBox() for non-printable characters + Coord c = { 0, 0, 0, 0, 0, 0 }; + coords.insert(key, c); continue; + } glyph_width += margin * 2 + 4; glyph_height += margin * 2 + 4; // align to 8-bit boundary @@ -192,7 +197,7 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const metrics.x.round().truncate(), -metrics.y.truncate() }; // baseline for horizontal scripts - listItemCoordinates.insert(GlyphAndSubPixelPosition(glyph, subPixelPosition), c); + listItemCoordinates.insert(key, c); rowHeight = qMax(rowHeight, glyph_height); } if (listItemCoordinates.isEmpty()) diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h index 4227e9a..7a0bdfd 100644 --- a/src/gui/painting/qtextureglyphcache_p.h +++ b/src/gui/painting/qtextureglyphcache_p.h @@ -107,6 +107,11 @@ public: int baseLineX; int baseLineY; + + bool isNull() const + { + return w == 0 || h == 0; + } }; bool populate(QFontEngine *fontEngine, int numGlyphs, const glyph_t *glyphs, diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index cdd785a..771d33f 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1556,7 +1556,6 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp } } - if (recreateVertexArrays) { vertexCoordinates->clear(); textureCoordinates->clear(); @@ -1569,7 +1568,10 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp QTextureGlyphCache::GlyphAndSubPixelPosition glyph(staticTextItem->glyphs[i], subPixelPosition); - const QTextureGlyphCache::Coord &c = cache->coords.value(glyph); + const QTextureGlyphCache::Coord &c = cache->coords[glyph]; + if (c.isNull()) + continue; + int x = staticTextItem->glyphPositions[i].x.toInt() + c.baseLineX - margin; int y = staticTextItem->glyphPositions[i].y.toInt() - c.baseLineY - margin; @@ -1580,10 +1582,12 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp staticTextItem->userDataNeedsUpdate = false; } - if (elementIndices.size() < staticTextItem->numGlyphs*6) { + int numGlyphs = vertexCoordinates->vertexCount() / 4; + + if (elementIndices.size() < numGlyphs*6) { Q_ASSERT(elementIndices.size() % 6 == 0); int j = elementIndices.size() / 6 * 4; - while (j < staticTextItem->numGlyphs*4) { + while (j < numGlyphs*4) { elementIndices.append(j + 0); elementIndices.append(j + 0); elementIndices.append(j + 1); @@ -1672,9 +1676,9 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, false); #if defined(QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO) - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, 0); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, 0); #else - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); #endif shaderManager->setMaskType(QGLEngineShaderManager::SubPixelMaskPass2); @@ -1722,10 +1726,10 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp } #if defined(QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO) - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, 0); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); #else - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); #endif } -- cgit v0.12 From ff187688e113ec157dd14abcef0faf602b68901c Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 21 Dec 2010 14:21:21 +0100 Subject: Doc: Added a missing license header. --- doc/src/snippets/declarative/focus/focusColumn.qml | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/doc/src/snippets/declarative/focus/focusColumn.qml b/doc/src/snippets/declarative/focus/focusColumn.qml index eb59309..42ee3da 100644 --- a/doc/src/snippets/declarative/focus/focusColumn.qml +++ b/doc/src/snippets/declarative/focus/focusColumn.qml @@ -1,3 +1,42 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ import QtQuick 1.0 Rectangle { -- cgit v0.12 From b6218123974795f1a83c42198ab7fd3ceeab8029 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Tue, 21 Dec 2010 13:00:07 +0000 Subject: Fix qfile test errors Fix compile error for non symbian targets Fix MSVCRT assertion failure Test file.handle() returns the right thing before and after file is closed. Reviewed-by: joao --- tests/auto/qfile/tst_qfile.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp index d9b8283..4e18ec4 100644 --- a/tests/auto/qfile/tst_qfile.cpp +++ b/tests/auto/qfile/tst_qfile.cpp @@ -345,8 +345,10 @@ private: QT_CLOSE(fd_); if (stream_) ::fclose(stream_); +#ifdef Q_OS_SYMBIAN if (rfile_.SubSessionHandle()) rfile_.Close(); +#endif fd_ = -1; stream_ = 0; @@ -3282,6 +3284,25 @@ void tst_QFile::caseSensitivity() } } +//MSVCRT asserts when any function is called with a closed file handle. +//This replaces the default crashing error handler with one that ignores the error (allowing EBADF to be returned) +class AutoIgnoreInvalidParameter +{ +public: +#if defined(Q_OS_WIN) && defined (Q_CC_MSVC) + static void ignore_invalid_parameter(const wchar_t*, const wchar_t*, const wchar_t*, unsigned int, uintptr_t) {} + AutoIgnoreInvalidParameter() + { + old = _set_invalid_parameter_handler(ignore_invalid_parameter); + } + ~AutoIgnoreInvalidParameter() + { + _set_invalid_parameter_handler(old); + } + _invalid_parameter_handler old; +#endif +}; + void tst_QFile::autocloseHandle() { #ifdef Q_OS_SYMBIAN @@ -3318,41 +3339,56 @@ void tst_QFile::autocloseHandle() { QFile file("readonlyfile"); QVERIFY(openFile(file, QIODevice::ReadOnly, OpenFd, QFile::AutoCloseHandle)); + QCOMPARE(file.handle(), fd_); file.close(); + QCOMPARE(file.handle(), -1); + AutoIgnoreInvalidParameter a; + Q_UNUSED(a); //file is closed, read should fail char buf; - QCOMPARE(::read(fd_, &buf, 1), -1); + QCOMPARE(QT_READ(fd_, &buf, 1), -1); QVERIFY(errno = EBADF); + fd_ = -1; } { QFile file("readonlyfile"); QVERIFY(openFile(file, QIODevice::ReadOnly, OpenFd, QFile::DontCloseHandle)); + QCOMPARE(file.handle(), fd_); file.close(); + QCOMPARE(file.handle(), -1); //file is not closed, read should succeed char buf; - QCOMPARE(::read(fd_, &buf, 1), 1); + QCOMPARE(QT_READ(fd_, &buf, 1), 1); ::close(fd_); + fd_ = -1; } { QFile file("readonlyfile"); QVERIFY(openFile(file, QIODevice::ReadOnly, OpenStream, QFile::AutoCloseHandle)); + QCOMPARE(file.handle(), fileno(stream_)); file.close(); + QCOMPARE(file.handle(), -1); + AutoIgnoreInvalidParameter a; + Q_UNUSED(a); //file is closed, read should fail char buf; QCOMPARE(int(::fread(&buf, 1, 1, stream_)), 0); - QVERIFY(::ferror(stream_)); //actual error seems to be OS dependent + stream_ = 0; } { QFile file("readonlyfile"); QVERIFY(openFile(file, QIODevice::ReadOnly, OpenStream, QFile::DontCloseHandle)); + QCOMPARE(file.handle(), fileno(stream_)); file.close(); + QCOMPARE(file.handle(), -1); //file is not closed, read should succeed char buf; QCOMPARE(int(::fread(&buf, 1, 1, stream_)), 1); ::fclose(stream_); + stream_ = 0; } } -- cgit v0.12 From afa22a20c1b89960b647b0e3a9dc390fe6f87eae Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Wed, 22 Dec 2010 08:48:40 +1000 Subject: tst_headers: make failure more detailed when failing to open a file Replace QVERIFY(f.open(...)) with QVERIFY2(f.open(...), qPrintable(f.errorString())) This pattern should be followed for all functions which can provide an error string on failure. --- tests/auto/headers/tst_headers.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/auto/headers/tst_headers.cpp b/tests/auto/headers/tst_headers.cpp index 7ccf058..8c8bc2c 100644 --- a/tests/auto/headers/tst_headers.cpp +++ b/tests/auto/headers/tst_headers.cpp @@ -203,7 +203,7 @@ void tst_Headers::licenseCheck() QFETCH(QString, sourceFile); QFile f(sourceFile); - QVERIFY(f.open(QIODevice::ReadOnly)); + QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(f.errorString())); QByteArray data = f.readAll(); data.replace("\r\n", "\n"); // Windows data.replace('\r', '\n'); // Mac OS9 @@ -264,7 +264,7 @@ void tst_Headers::privateSlots() return; QFile f(header); - QVERIFY(f.open(QIODevice::ReadOnly)); + QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(f.errorString())); QStringList content = QString::fromLocal8Bit(f.readAll()).split("\n"); foreach (QString line, content) { @@ -286,7 +286,7 @@ void tst_Headers::macros() return; QFile f(header); - QVERIFY(f.open(QIODevice::ReadOnly)); + QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(f.errorString())); QByteArray data = f.readAll(); QStringList content = QString::fromLocal8Bit(data.replace('\r', "")).split("\n"); -- cgit v0.12 From 960c0f28c5c2a52d28f06d4cfda4f7d46becad93 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 20 Dec 2010 16:31:09 +1000 Subject: Remove redundant docs --- doc/src/declarative/qdeclarativereference.qdoc | 81 -------------------------- 1 file changed, 81 deletions(-) delete mode 100644 doc/src/declarative/qdeclarativereference.qdoc diff --git a/doc/src/declarative/qdeclarativereference.qdoc b/doc/src/declarative/qdeclarativereference.qdoc deleted file mode 100644 index c2c5e91..0000000 --- a/doc/src/declarative/qdeclarativereference.qdoc +++ /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:FDL$ -** 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 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 qdeclarativereference.html - \title QML Reference - - \target qtdeclarativemainpage - - QML is a language for building the animation rich, - highly fluid user interfaces that are becoming common in portable consumer - electronics devices such as mobile phones, media players, set-top boxes and - netbooks. It is also appropriate for highly custom desktop - user interfaces, or special elements in more traditional desktop user interfaces. - - Building fluid applications is done declaratively, rather than procedurally. - That is, you specify \e what the UI should look like and how it should behave - rather than specifying step-by-step \e how to build it. Specifying a UI declaratively - does not just include the layout of the interface items, but also the way each - individual item looks and behaves and the overall flow of the application. - - The QML elements provide a sophisticated set of graphical and behavioral building - blocks. These different elements are combined together in \l {QML Documents}{QML documents} to build components - ranging in complexity from simple buttons and sliders, to complete - internet-enabled applications like a \l {http://www.flickr.com}{Flickr} photo browser. - - Getting Started: - \list - \o \l {Introduction to the QML language} - \o \l {QML Tutorial}{Tutorial: 'Hello World'} - \o \l {QML Advanced Tutorial}{Advanced Tutorial: 'Same Game'} - \o \l {QML Examples and Demos} - \endlist - - \section1 Core QML Features: - \list - \o \l {QML Documents} - \o \l {Property Binding} - \o \l {Integrating JavaScript} - \o \l {QML Scope} - \o \l {Network Transparency} - \o \l {qmlmodels}{Data Models} - \o \l {anchor-layout}{Anchor-based Layout} - \o \l {qmlstates}{States} - \o \l {qdeclarativeanimation.html}{Animation} - \o \l {qdeclarativemodules.html}{Modules} - \o \l {qmlfocus}{Keyboard Focus} - \o \l {Extending types from QML} - \endlist - - QML Reference: - \list - \o \l {elements}{QML Elements} - \o \l {QML Global Object} - \o \l {QML Internationalization} - \endlist -*/ -- cgit v0.12 From 22df95289adc5fca59cc0a42cf18e98c5cc433d9 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Wed, 22 Dec 2010 11:35:39 +1000 Subject: Add double type to QML Basic Types docs --- doc/src/declarative/basictypes.qdoc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 034b7d1..939f328 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -95,6 +95,26 @@ */ /*! + \qmlbasictype double + \ingroup qmlbasictypes + + \brief A double number has a decimal point and is stored in double precision. + + A double number has a decimal point and is stored in double precision, \l + {http://en.wikipedia.org/wiki/IEEE_754} {IEEE floating point} + format. + + Example: + \qml + Item { + property double number: 32155.2355 + } + \endqml + + \sa {QML Basic Types} +*/ + +/*! \qmlbasictype string \ingroup qmlbasictypes -- cgit v0.12 From 2d4d125313d79fb80f513952bed675b7126392fd Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Wed, 22 Dec 2010 12:23:08 +1000 Subject: Document the 'variant' basic type This includes documentation on restrictions and considerations when storing a JavaScript object with this type, since such properties only hold a copy of the object's values and not the actual object. Task-number: QTBUG-16196 Reviewed-by: Michael Brasser --- doc/src/declarative/basictypes.qdoc | 75 ++++++++++++++++++++++++++++++++++++- doc/src/declarative/extending.qdoc | 24 ++++++------ 2 files changed, 87 insertions(+), 12 deletions(-) diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 939f328..e9d3a44 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -432,7 +432,8 @@ list only modify a \e copy of the list and not the actual list. (These current limitations are due to restrictions on \l {Property Binding} where lists are involved.) - To create a modifiable list, create an array object from within a \c .js JavaScript file, + You can, however, modify a copy of the list and then reassign the property to the modified + value. Other options are to create an array object from within a \c .js JavaScript file, or implement a custom list element in C++. Here is a QML element that modifies the list in a JavaScript file: @@ -472,6 +473,78 @@ \sa {QML Basic Types} */ + +/*! + \qmlbasictype variant + \ingroup qmlbasictypes + + \brief A variant type is a generic property type. + + A variant is a generic property type. A variant type property can hold any of the + \l {QML Basic Types}{basic type} values: + + \qml + Item { + property variant aNumber : 100 + property variant aString : "Hello world!" + property variant aList : [ 1, 2, "buckle my shoe" ] + } + \endqml + + The \c variant type can also hold a \e copy of a JavaScript object. For example, the + \c animal property below defines a JavaScript object defined with JSON notation. The + object's properties and values can be examined using the standard JavaScript syntax, + as shown in the \c Component.onCompleted handler. + + \qml + Item { + property variant animal : { 'type': 'bird', 'species': 'galah', 'age': 7 } + + Component.onCompleted: { + for (var attribute in animal) + console.log(attribute, "=", animal[attribute]) + } + } + \endqml + + It must be noted that the \c animal property holds a \e copy of the defined object, and + not the object itself. (This is true even if the property refers to an object defined in + some JavaScript file; the property will hold a copy of the object, and not the actual + object.) The property essentially holds a copy of the contents within the object. This + has several implications: + + \list + \o Changes to any of the property's values (for example, the \c animal.type value + above) only modify the \e copy of the object, not the object itself. You can, however, + modify a copy of the object and then reassign the property to the modified value. + \o Because the property only holds a copy of the object, \l{Property Binding}{bindings} to + any of the property's individual values are not updated until the whole property is + reassigned to a new value. For example: + + \qml + Item { + property variant animal : { 'type': 'bird', 'species': 'galah', 'age': 7 } + + Text { text: "Animal species: " + animal.species } + + Component.onCompleted: { + animal.species = 'kookaburra' // this has no effect on the displayed text + + var newObj = animal + newObj.species = 'kookaburra' + animal = newObj // this will update the displayed text + } + } + \endqml + \o Since the object values are copied, it does not hold any reference to the original + object, and extra data such as the object's JavaScript prototype chain is lost in the + process. + \endlist + + \sa {QML Basic Types} +*/ + + /*! \qmlbasictype vector3d \ingroup qmlbasictypes diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index 748ec6c..ff519f6 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -753,15 +753,15 @@ with their default values and the corresponding C++ type: \table \header \o QML Type Name \o Default value \o C++ Type Name -\row \o int \o 0 \o int -\row \o bool \o \c false \o bool -\row \o double \o 0.0 \o double -\row \o real \o 0.0 \o double -\row \o string \o "" (empty string) \o QString -\row \o url \o "" (empty url) \o QUrl -\row \o color \o #000000 (black) \o QColor -\row \o date \o \c undefined \o QDateTime -\row \o variant \o \c undefined \o QVariant +\row \o \l int \o 0 \o int +\row \o \l bool \o \c false \o bool +\row \o \l double \o 0.0 \o double +\row \o \l real \o 0.0 \o double +\row \o \l string \o "" (empty string) \o QString +\row \o \l url \o "" (empty url) \o QUrl +\row \o \l color \o #000000 (black) \o QColor +\row \o \l date \o \c undefined \o QDateTime +\row \o \l variant \o \c undefined \o QVariant \endtable QML object types can also be used as property types. This includes @@ -776,6 +776,10 @@ property MyCustomType customProperty Such object-type properties default to an \c undefined value. +It is also possible to store a copy of a JavaScript object using the \c variant +property type. This creates some restrictions on how the property should be used; +see the \l {variant}{variant type documentation} for details. + \l{list}{List properties} are created with the \c list syntax, and default to an empty list: @@ -786,8 +790,6 @@ property list listOfItems Note that list properties cannot be modified like ordinary JavaScript arrays. See the \l {list}{list type documentation} for details. -For details about accessing and manipulating QML properties from C++, see \l {Using QML with C++}. - \section2 Property change signals -- cgit v0.12 From 55c32b91a298d52bd7c29968d21b4b7a5ee741e4 Mon Sep 17 00:00:00 2001 From: Peter Yard Date: Wed, 22 Dec 2010 16:03:35 +1000 Subject: Docs: QTBUG-9150 Incorrect snippet in class doc. --- src/sql/models/qsqltablemodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index 8589163..974cf7b 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -265,7 +265,7 @@ QSqlRecord QSqlTableModelPrivate::primaryValues(int row) QSqlTableModel can also be used to access a database programmatically, without binding it to a view: - \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 25 + \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 21 The code snippet above extracts the \c salary field from record 4 in the result set of the query \c{SELECT * from employee}. -- cgit v0.12 From e50a0ad18c40322ca0c06a11e7dc7b9a82951f16 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Wed, 22 Dec 2010 16:12:26 +1000 Subject: XmlListModel requests should set 'Accept' header to 'application/xml' Task-number: QTBUG-15836 Reviewed-by: Michael Brasser --- src/declarative/util/qdeclarativexmllistmodel.cpp | 1 + .../tst_qdeclarativexmllistmodel.cpp | 69 ++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp index 49a12b1..e97cd67 100644 --- a/src/declarative/util/qdeclarativexmllistmodel.cpp +++ b/src/declarative/util/qdeclarativexmllistmodel.cpp @@ -924,6 +924,7 @@ void QDeclarativeXmlListModel::reload() } else { d->notifyQueryStarted(true); QNetworkRequest req(d->src); + req.setRawHeader("Accept", "application/xml"); d->reply = qmlContext(this)->engine()->networkAccessManager()->get(req); QObject::connect(d->reply, SIGNAL(finished()), this, SLOT(requestFinished())); QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)), diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp index a14f942..b95b053 100644 --- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp +++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp @@ -38,8 +38,13 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +#include + #include #include +#include +#include +#include #include #include #include @@ -81,6 +86,7 @@ private slots: void roles(); void roleErrors(); void uniqueRoleNames(); + void headers(); void xml(); void xml_data(); void source(); @@ -139,6 +145,44 @@ private: QDeclarativeEngine engine; }; +class CustomNetworkAccessManagerFactory : public QObject, public QDeclarativeNetworkAccessManagerFactory +{ + Q_OBJECT +public: + QVariantMap lastSentHeaders; + +protected: + QNetworkAccessManager *create(QObject *parent); +}; + +class CustomNetworkAccessManager : public QNetworkAccessManager +{ + Q_OBJECT +public: + CustomNetworkAccessManager(CustomNetworkAccessManagerFactory *factory, QObject *parent) + : QNetworkAccessManager(parent), m_factory(factory) {} + +protected: + QNetworkReply *createRequest(Operation op, const QNetworkRequest &req, QIODevice * outgoingData = 0) + { + if (m_factory) { + QVariantMap map; + foreach (const QString &header, req.rawHeaderList()) + map[header] = req.rawHeader(header.toUtf8()); + m_factory->lastSentHeaders = map; + } + return QNetworkAccessManager::createRequest(op, req, outgoingData); + } + + QPointer m_factory; +}; + +QNetworkAccessManager *CustomNetworkAccessManagerFactory::create(QObject *parent) +{ + return new CustomNetworkAccessManager(this, parent); +} + + void tst_qdeclarativexmllistmodel::buildModel() { QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); @@ -312,6 +356,31 @@ void tst_qdeclarativexmllistmodel::xml_data() QTest::newRow("one item") << "HobbesTiger7Large" << 1; } +void tst_qdeclarativexmllistmodel::headers() +{ + // ensure the QNetworkAccessManagers created for this test are immediately deleted + QDeclarativeEngine qmlEng; + + CustomNetworkAccessManagerFactory factory; + qmlEng.setNetworkAccessManagerFactory(&factory); + + QDeclarativeComponent component(&qmlEng, QUrl::fromLocalFile(SRCDIR "/data/model.qml")); + QDeclarativeXmlListModel *model = qobject_cast(component.create()); + QVERIFY(model != 0); + QTRY_COMPARE(model->status(), QDeclarativeXmlListModel::Ready); + + QVariantMap expectedHeaders; + expectedHeaders["Accept"] = "application/xml"; + + QCOMPARE(factory.lastSentHeaders.count(), expectedHeaders.count()); + foreach (const QString &header, expectedHeaders.keys()) { + QVERIFY(factory.lastSentHeaders.contains(header)); + QCOMPARE(factory.lastSentHeaders[header].toString(), expectedHeaders[header].toString()); + } + + delete model; +} + void tst_qdeclarativexmllistmodel::source() { QFETCH(QUrl, source); -- cgit v0.12 From cb31612bf6a48f995fbc05b5e8aa924e13034ae4 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 22 Dec 2010 16:15:28 +1000 Subject: Removing all visible items in ListView resulted in blank view. When delayRemove is true and all visible items are tagged to be removed the visibleIndex became invalid and refill() began filling from 0. Task-number: QTBUG-16183 Reviewed-by: Michael Brasser --- src/declarative/graphicsitems/qdeclarativelistview.cpp | 14 ++++++++++---- .../qdeclarativelistview/tst_qdeclarativelistview.cpp | 3 ++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 2a7f508..86c8756 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -643,7 +643,8 @@ void QDeclarativeListViewPrivate::refill(qreal from, qreal to, bool doBuffer) int i = visibleItems.count() - 1; while (i > 0 && visibleItems.at(i)->index == -1) --i; - modelIndex = visibleItems.at(i)->index + 1; + if (visibleItems.at(i)->index != -1) + modelIndex = visibleItems.at(i)->index + 1; } bool changed = false; @@ -2804,7 +2805,10 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) int i = d->visibleItems.count() - 1; while (i > 0 && d->visibleItems.at(i)->index == -1) --i; - if (d->visibleItems.at(i)->index + 1 == modelIndex + if (i == 0 && d->visibleItems.first()->index == -1) { + // there are no visible items except items marked for removal + index = d->visibleItems.count(); + } else if (d->visibleItems.at(i)->index + 1 == modelIndex && d->visibleItems.at(i)->endPosition() < d->buffer+d->position()+d->size()-1) { // Special case of appending an item to the model. index = d->visibleItems.count(); @@ -2836,7 +2840,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) // index can be the next item past the end of the visible items list (i.e. appended) int pos = index < d->visibleItems.count() ? d->visibleItems.at(index)->position() - : d->visibleItems.at(index-1)->endPosition()+d->spacing+1; + : d->visibleItems.last()->endPosition()+d->spacing+1; int initialPos = pos; int diff = 0; QList added; @@ -2988,14 +2992,16 @@ void QDeclarativeListView::itemsRemoved(int modelIndex, int count) } // update visibleIndex + bool haveVisibleIndex = false; for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) { if ((*it)->index != -1) { d->visibleIndex = (*it)->index; + haveVisibleIndex = true; break; } } - if (removedVisible && d->visibleItems.isEmpty()) { + if (removedVisible && !haveVisibleIndex) { d->timeline.clear(); if (d->itemCount == 0) { d->visibleIndex = 0; diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 3df10a9..dba0cc4 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -667,7 +667,8 @@ void tst_QDeclarativeListView::removed(bool animated) listview->setContentY(80); QTest::qWait(300); - model.removeItems(1, 17); + // remove all visible items + model.removeItems(1, 18); QTest::qWait(300); // Confirm items positioned correctly -- cgit v0.12 From 749387a203737e49fb44ce7001ed78ba5512583d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 21 Dec 2010 12:43:16 +0100 Subject: Improve performance of bilinear downscaling of images with neon. Gives a 36 % performance boost for downscaling a 512x512 pixmap to 480x480 with SmoothPixmapFilter enabled. Reviewed-by: Andreas Kling --- src/gui/painting/qdrawhelper.cpp | 133 +++++++++++++++++++++++++++++++-------- 1 file changed, 107 insertions(+), 26 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 62af212..fdb686d 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -712,6 +712,38 @@ static inline uint interpolate_4_pixels_16(uint tl, uint tr, uint bl, uint br, i } #endif +#if defined(QT_ALWAYS_HAVE_NEON) +#define interpolate_4_pixels_16_neon(tl, tr, bl, br, distx, disty, disty_, colorMask, invColorMask, v_256, b) \ +{ \ + const int16x8_t dxdy = vmulq_s16(distx, disty); \ + const int16x8_t distx_ = vshlq_n_s16(distx, 4); \ + const int16x8_t idxidy = vaddq_s16(dxdy, vsubq_s16(v_256, vaddq_s16(distx_, disty_))); \ + const int16x8_t dxidy = vsubq_s16(distx_, dxdy); \ + const int16x8_t idxdy = vsubq_s16(disty_, dxdy); \ + \ + int16x8_t tlAG = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(tl), 8)); \ + int16x8_t tlRB = vandq_s16(tl, colorMask); \ + int16x8_t trAG = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(tr), 8)); \ + int16x8_t trRB = vandq_s16(tr, colorMask); \ + int16x8_t blAG = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(bl), 8)); \ + int16x8_t blRB = vandq_s16(bl, colorMask); \ + int16x8_t brAG = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(br), 8)); \ + int16x8_t brRB = vandq_s16(br, colorMask); \ + \ + int16x8_t rAG = vmulq_s16(tlAG, idxidy); \ + int16x8_t rRB = vmulq_s16(tlRB, idxidy); \ + rAG = vmlaq_s16(rAG, trAG, dxidy); \ + rRB = vmlaq_s16(rRB, trRB, dxidy); \ + rAG = vmlaq_s16(rAG, blAG, idxdy); \ + rRB = vmlaq_s16(rRB, blRB, idxdy); \ + rAG = vmlaq_s16(rAG, brAG, dxdy); \ + rRB = vmlaq_s16(rRB, brRB, dxdy); \ + \ + rAG = vandq_s16(invColorMask, rAG); \ + rRB = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(rRB), 8)); \ + vst1q_s16((int16_t*)(b), vorrq_s16(rAG, rRB)); \ +} +#endif template Q_STATIC_TEMPLATE_FUNCTION inline void fetchTransformedBilinear_pixelBounds(int max, int l1, int l2, int &v1, int &v2) @@ -920,35 +952,36 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * const uchar *s2 = data->texture.scanLine(y2); int disty = (fy & 0x0000ffff) >> 12; -#if defined(QT_ALWAYS_HAVE_SSE2) if (blendType != BlendTransformedBilinearTiled && (format == QImage::Format_ARGB32_Premultiplied || format == QImage::Format_RGB32)) { - //prolog to get into the bounds - while (b < end) { - int x1 = (fx >> 16); - int x2; - fetchTransformedBilinear_pixelBounds(image_width, image_x1, image_x2, x1, x2); - if (x1 != x2) //break if we are insided the bounds. - break; - uint tl = fetch(s1, x1, data->texture.colorTable); - uint tr = fetch(s1, x2, data->texture.colorTable); - uint bl = fetch(s2, x1, data->texture.colorTable); - uint br = fetch(s2, x2, data->texture.colorTable); - int distx = (fx & 0x0000ffff) >> 12; - *b = interpolate_4_pixels_16(tl, tr, bl, br, distx, disty); - fx += fdx; - ++b; - } - uint *boundedEnd; - if (fdx > 0) - boundedEnd = qMin(end, buffer + uint((image_x2 - (fx >> 16)) / data->m11)); - else - boundedEnd = qMin(end, buffer + uint((image_x1 - (fx >> 16)) / data->m11)); +#define BILINEAR_DOWNSCALE_BOUNDS_PROLOG \ + while (b < end) { \ + int x1 = (fx >> 16); \ + int x2; \ + fetchTransformedBilinear_pixelBounds(image_width, image_x1, image_x2, x1, x2); \ + if (x1 != x2) \ + break; \ + uint tl = fetch(s1, x1, data->texture.colorTable); \ + uint tr = fetch(s1, x2, data->texture.colorTable); \ + uint bl = fetch(s2, x1, data->texture.colorTable); \ + uint br = fetch(s2, x2, data->texture.colorTable); \ + int distx = (fx & 0x0000ffff) >> 12; \ + *b = interpolate_4_pixels_16(tl, tr, bl, br, distx, disty); \ + fx += fdx; \ + ++b; \ + } \ + uint *boundedEnd; \ + if (fdx > 0) \ + boundedEnd = qMin(end, buffer + uint((image_x2 - (fx >> 16)) / data->m11)); \ + else \ + boundedEnd = qMin(end, buffer + uint((image_x1 - (fx >> 16)) / data->m11)); \ boundedEnd -= 3; +#if defined(QT_ALWAYS_HAVE_SSE2) + BILINEAR_DOWNSCALE_BOUNDS_PROLOG + const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); - //const __m128i distShuffleMask = _mm_set_epi8(13, 12, 13, 12, 9, 8, 9, 8, 5, 4, 5, 4, 1, 0, 1, 0); const __m128i v_256 = _mm_set1_epi16(256); const __m128i v_disty = _mm_set1_epi16(disty); __m128i v_fdx = _mm_set1_epi32(fdx*4); @@ -976,8 +1009,7 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * bl.i[i] = *(addr_tl+secondLine); br.i[i] = *(addr_tr+secondLine); } - __m128i v_distx = _mm_srli_epi16(v_fx.vect, 12); //distx = (fx & 0x0000ffff) >> 12; - //v_distx = _mm_shuffle_epi8(v_disty, distShuffleMask); //distx |= distx << 16; + __m128i v_distx = _mm_srli_epi16(v_fx.vect, 12); v_distx = _mm_shufflehi_epi16(v_distx, _MM_SHUFFLE(2,2,0,0)); v_distx = _mm_shufflelo_epi16(v_distx, _MM_SHUFFLE(2,2,0,0)); @@ -986,8 +1018,57 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * v_fx.vect = _mm_add_epi32(v_fx.vect, v_fdx); } fx = v_fx.i[0]; - } +#elif defined(QT_ALWAYS_HAVE_NEON) + BILINEAR_DOWNSCALE_BOUNDS_PROLOG + + const int16x8_t colorMask = vdupq_n_s16(0x00ff); + const int16x8_t invColorMask = vmvnq_s16(colorMask); + const int16x8_t v_256 = vdupq_n_s16(256); + const int16x8_t v_disty = vdupq_n_s16(disty); + const int16x8_t v_disty_ = vshlq_n_s16(v_disty, 4); + int32x4_t v_fdx = vdupq_n_s32(fdx*4); + + ptrdiff_t secondLine = reinterpret_cast(s2) - reinterpret_cast(s1); + + union Vect_buffer { int32x4_t vect; quint32 i[4]; }; + Vect_buffer v_fx; + + for (int i = 0; i < 4; i++) { + v_fx.i[i] = fx; + fx += fdx; + } + + const int32x4_t v_ffff_mask = vdupq_n_s32(0x0000ffff); + + while (b < boundedEnd) { + + Vect_buffer tl, tr, bl, br; + + Vect_buffer v_fx_shifted; + v_fx_shifted.vect = vshrq_n_s32(v_fx.vect, 16); + + int32x4_t v_distx = vshrq_n_s32(vandq_s32(v_fx.vect, v_ffff_mask), 12); + + for (int i = 0; i < 4; i++) { + int x1 = v_fx_shifted.i[i]; + const uint *addr_tl = reinterpret_cast(s1) + x1; + const uint *addr_tr = addr_tl + 1; + tl.i[i] = *addr_tl; + tr.i[i] = *addr_tr; + bl.i[i] = *(addr_tl+secondLine); + br.i[i] = *(addr_tr+secondLine); + } + + v_distx = vorrq_s32(v_distx, vshlq_n_s32(v_distx, 16)); + + interpolate_4_pixels_16_neon(vreinterpretq_s16_s32(tl.vect), vreinterpretq_s16_s32(tr.vect), vreinterpretq_s16_s32(bl.vect), vreinterpretq_s16_s32(br.vect), vreinterpretq_s16_s32(v_distx), v_disty, v_disty_, colorMask, invColorMask, v_256, b); + b+=4; + v_fx.vect = vaddq_s32(v_fx.vect, v_fdx); + } + fx = v_fx.i[0]; #endif + } + while (b < end) { int x1 = (fx >> 16); int x2; -- cgit v0.12 From 53f52118efd7587fe604f3d3dd898fa9464809a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 22 Dec 2010 09:34:37 +0100 Subject: Made documentation of QPixmap::createMaskFromColor match behaviour. Task-number: QTBUG-16223 Reviewed-by: Gunnar Sletta --- src/gui/image/qpixmap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index c5d9a7e..3a7be1d 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -775,8 +775,8 @@ QBitmap QPixmap::createHeuristicMask(bool clipTight) const /*! Creates and returns a mask for this pixmap based on the given \a maskColor. If the \a mode is Qt::MaskInColor, all pixels matching the - maskColor will be opaque. If \a mode is Qt::MaskOutColor, all pixels - matching the maskColor will be transparent. + maskColor will be transparent. If \a mode is Qt::MaskOutColor, all pixels + matching the maskColor will be opaque. This function is slow because it involves converting to/from a QImage. -- cgit v0.12 From 07bc01460e72f08550f09de66e0e716471cf61bd Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 22 Dec 2010 12:18:39 +0200 Subject: Fix libinfixed usage in Symbian when def files are used There was a hardcoded lookup on "qtcore.dll" in s60main, which caused loading of wrong dll. Task-number: QTBUG-16221 Reviewed-by: Janne Koskinen --- src/s60main/newallocator_hook.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/s60main/newallocator_hook.cpp b/src/s60main/newallocator_hook.cpp index 9ea2ef0..3e259c2 100644 --- a/src/s60main/newallocator_hook.cpp +++ b/src/s60main/newallocator_hook.cpp @@ -69,6 +69,16 @@ TInt UserHeap::SetupThreadHeap(TBool aNotFirst, SStdEpocThreadCreateInfo& aInfo) // So the function is found and called dynamically, by library lookup. If it is not found, we // use the OS allocator creation functions instead. +#if defined(QT_LIBINFIX) +# define QT_LSTRING2(x) L##x +# define QT_LSTRING(x) QT_LSTRING2(x) +# define QT_LIBINFIX_UNICODE QT_LSTRING(QT_LIBINFIX) +#else +# define QT_LIBINFIX_UNICODE L"" +#endif + +_LIT(QtCoreLibName, "qtcore" QT_LIBINFIX_UNICODE L".dll"); + struct SThreadCreateInfo { TAny* iHandle; @@ -106,7 +116,7 @@ TInt UserHeap::SetupThreadHeap(TBool aNotFirst, SStdEpocThreadCreateInfo& aInfo) #ifndef __WINS__ // attempt to create the fast allocator through a known export ordinal in qtcore.dll RLibrary qtcore; - if (qtcore.Load(_L("qtcore.dll")) == KErrNone) + if (qtcore.Load(QtCoreLibName) == KErrNone) { const int qt_symbian_SetupThreadHeap_eabi_ordinal = 3713; TLibraryFunction libFunc = qtcore.Lookup(qt_symbian_SetupThreadHeap_eabi_ordinal); -- cgit v0.12 From bdc39d20b4958f7adc95dc5990d601e946213fda Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Wed, 22 Dec 2010 11:37:56 +0100 Subject: add missing license header --- src/opengl/util/meego/main.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/opengl/util/meego/main.cpp b/src/opengl/util/meego/main.cpp index 0c9a915..5522855 100644 --- a/src/opengl/util/meego/main.cpp +++ b/src/opengl/util/meego/main.cpp @@ -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 QtOpenGL 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 #define QT_DEBUG_SHADER_CACHE -- cgit v0.12 From cafbb2943eea989b0eeadb0c54c151ad921691b9 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 20 Dec 2010 19:44:53 +0100 Subject: Do not crash in case a future version of libdbus has a new kind of message. --- src/dbus/qdbusintegrator.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 1842e5a..f64b7ca 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -565,10 +565,8 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) return true; case QDBusMessage::ReplyMessage: case QDBusMessage::ErrorMessage: - return false; // we don't handle those here case QDBusMessage::InvalidMessage: - Q_ASSERT_X(false, "QDBusConnection", "Invalid message found when processing"); - break; + return false; // we don't handle those here } return false; -- cgit v0.12 From fb9ded4e5e3e85672beef83945b3a7e17371368c Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 22 Dec 2010 12:12:30 +0100 Subject: Work around an apparent GCC optimiser bug accessing arrays beyond end Accessing arrays beyond their end is known to cause problems in gcc 4.4 and 4.5. So don't try to be too smart in accessing m[0][index] but instead access the array as it's meant to be. Upstream bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247#c10 Reviewed-by: Olivier Goffart --- src/gui/math3d/qgenericmatrix.h | 68 ++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/src/gui/math3d/qgenericmatrix.h b/src/gui/math3d/qgenericmatrix.h index 3224ae2..f91bce7 100644 --- a/src/gui/math3d/qgenericmatrix.h +++ b/src/gui/math3d/qgenericmatrix.h @@ -198,52 +198,58 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix QGenericMatrix::transposed template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator+=(const QGenericMatrix& other) { - for (int index = 0; index < N * M; ++index) - m[0][index] += other.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] += other.m[col][row]; return *this; } template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator-=(const QGenericMatrix& other) { - for (int index = 0; index < N * M; ++index) - m[0][index] -= other.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] -= other.m[col][row]; return *this; } template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator*=(T factor) { - for (int index = 0; index < N * M; ++index) - m[0][index] *= factor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] *= factor; return *this; } template Q_OUTOFLINE_TEMPLATE bool QGenericMatrix::operator==(const QGenericMatrix& other) const { - for (int index = 0; index < N * M; ++index) { - if (m[0][index] != other.m[0][index]) - return false; - } + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) { + if (m[col][row] != other.m[col][row]) + return false; + } return true; } template Q_OUTOFLINE_TEMPLATE bool QGenericMatrix::operator!=(const QGenericMatrix& other) const { - for (int index = 0; index < N * M; ++index) { - if (m[0][index] != other.m[0][index]) - return true; - } + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) { + if (m[col][row] != other.m[col][row]) + return true; + } return false; } template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator/=(T divisor) { - for (int index = 0; index < N * M; ++index) - m[0][index] /= divisor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] /= divisor; return *this; } @@ -251,8 +257,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator+(const QGenericMatrix& m1, const QGenericMatrix& m2) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = m1.m[0][index] + m2.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = m1.m[col][row] + m2.m[col][row]; return result; } @@ -260,8 +267,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator-(const QGenericMatrix& m1, const QGenericMatrix& m2) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = m1.m[0][index] - m2.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = m1.m[col][row] - m2.m[col][row]; return result; } @@ -284,8 +292,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator-(const QGenericMatrix& matrix) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = -matrix.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = -matrix.m[col][row]; return result; } @@ -293,8 +302,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator*(T factor, const QGenericMatrix& matrix) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = matrix.m[0][index] * factor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = matrix.m[col][row] * factor; return result; } @@ -302,8 +312,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator*(const QGenericMatrix& matrix, T factor) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = matrix.m[0][index] * factor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = matrix.m[col][row] * factor; return result; } @@ -311,8 +322,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator/(const QGenericMatrix& matrix, T divisor) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = matrix.m[0][index] / divisor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = matrix.m[col][row] / divisor; return result; } -- cgit v0.12 From 6210542b3fb2b577512f5e2970f14303d1e5f21a Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 22 Dec 2010 14:04:26 +0100 Subject: tst_qmessagebox: add debug to know why it fails --- tests/auto/qmessagebox/tst_qmessagebox.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/auto/qmessagebox/tst_qmessagebox.cpp b/tests/auto/qmessagebox/tst_qmessagebox.cpp index 54d199c..f6ee764 100644 --- a/tests/auto/qmessagebox/tst_qmessagebox.cpp +++ b/tests/auto/qmessagebox/tst_qmessagebox.cpp @@ -677,8 +677,10 @@ void tst_QMessageBox::detailsButtonText() QAbstractButton* btn = NULL; foreach(btn, list) { if (btn && (btn->inherits("QPushButton"))) { - if(btn->text() != QMessageBox::tr("OK") && btn->text() != QMessageBox::tr("Show Details...")) + if (btn->text() != QMessageBox::tr("OK") && btn->text() != QMessageBox::tr("Show Details...")) { + qDebug() << btn->text(); QFAIL("Incorrect messagebox button text!"); + } } } } -- cgit v0.12 From 6ecb2f699c203fd937495cba844f7888a1d3305f Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 22 Dec 2010 14:30:59 +0100 Subject: Assistant: Get rid of bogus warning. Task-number: QTBUG-16096 --- tools/assistant/tools/assistant/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/assistant/tools/assistant/main.cpp b/tools/assistant/tools/assistant/main.cpp index e3eef34..5883f7b 100644 --- a/tools/assistant/tools/assistant/main.cpp +++ b/tools/assistant/tools/assistant/main.cpp @@ -292,7 +292,8 @@ void setupTranslation(const QString &fileName, const QString &dir) QTranslator *translator = new QTranslator(QCoreApplication::instance()); if (translator->load(fileName, dir)) { QCoreApplication::installTranslator(translator); - } else if (!fileName.endsWith(QLatin1String("en_US"))) { + } else if (!fileName.endsWith(QLatin1String("en_US")) + && !fileName.endsWith(QLatin1String("_C"))) { qWarning("Could not load translation file %s in directory %s.", qPrintable(fileName), qPrintable(dir)); } -- cgit v0.12 From bfd3a0d40932cb4ef2a35424a24e1961c3b21bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 21 Dec 2010 15:14:23 +0100 Subject: Improve performance of bilinear upscaling of images with neon. Gives an improvement of around 19.6 % for upscaling a 256x256 pixmap to 480x480 with SmoothPixmapFilter enabled. Reviewed-by: Olivier Goffart --- src/gui/painting/qdrawhelper.cpp | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index fdb686d..4fd90ed 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -851,10 +851,9 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * } } -#if defined(QT_ALWAYS_HAVE_SSE2) if (blendType != BlendTransformedBilinearTiled && (format == QImage::Format_ARGB32_Premultiplied || format == QImage::Format_RGB32)) { - +#if defined(QT_ALWAYS_HAVE_SSE2) const __m128i disty_ = _mm_set1_epi16(disty); const __m128i idisty_ = _mm_set1_epi16(idisty); const __m128i colorMask = _mm_set1_epi32(0x00ff00ff); @@ -884,8 +883,38 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * rRB = _mm_srli_epi16(rRB, 8); _mm_storeu_si128((__m128i*)(&intermediate_buffer[0][f]), rRB); } - } +#elif defined(QT_ALWAYS_HAVE_NEON) + const int16x8_t disty_ = vdupq_n_s16(disty); + const int16x8_t idisty_ = vdupq_n_s16(idisty); + const int16x8_t colorMask = vdupq_n_s16(0x00ff); + + lim -= 3; + for (; f < lim; x += 4, f += 4) { + // Load 4 pixels from s1, and split the alpha-green and red-blue component + int16x8_t top = vld1q_s16((int16_t*)((const uint *)(s1)+x)); + int16x8_t topAG = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(top), 8)); + int16x8_t topRB = vandq_s16(top, colorMask); + // Multiplies each colour component by idisty + topAG = vmulq_s16(topAG, idisty_); + topRB = vmulq_s16(topRB, idisty_); + + // Same for the s2 vector + int16x8_t bottom = vld1q_s16((int16_t*)((const uint *)(s2)+x)); + int16x8_t bottomAG = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(bottom), 8)); + int16x8_t bottomRB = vandq_s16(bottom, colorMask); + bottomAG = vmulq_s16(bottomAG, disty_); + bottomRB = vmulq_s16(bottomRB, disty_); + + // Add the values, and shift to only keep 8 significant bits per colors + int16x8_t rAG = vaddq_s16(topAG, bottomAG); + rAG = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(rAG), 8)); + vst1q_s16((int16_t*)(&intermediate_buffer[1][f]), rAG); + int16x8_t rRB = vaddq_s16(topRB, bottomRB); + rRB = vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(rRB), 8)); + vst1q_s16((int16_t*)(&intermediate_buffer[0][f]), rRB); + } #endif + } for (; f < count; f++) { // Same as above but without sse2 if (blendType == BlendTransformedBilinearTiled) { if (x >= image_width) x -= image_width; -- cgit v0.12 From a5110b5d40b70fb44ed98aa8861b676df1e78385 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Wed, 22 Dec 2010 14:34:16 +0100 Subject: Fix timer regression for indeterminate progressbars Indeterminate progressbars were broken since 4.7.0 due to 0f771c62f5253a969f5a8a81bfd9254b9bd58b8f Since start was never called on QElapsedTimer, the elaped time was undefined and resulted in random repaints and behavior for indeterminate progressbars. Task-number:QTBUG-15227 Reviewed-by:richard --- src/gui/styles/qwindowsstyle.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 720dd6d..654be3c 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -130,6 +130,7 @@ QWindowsStylePrivate::QWindowsStylePrivate() pSHGetStockIconInfo = (PtrSHGetStockIconInfo)shellLib.resolve("SHGetStockIconInfo"); } #endif + startTime.start(); } // Returns true if the toplevel parent of \a widget has seen the Alt-key -- cgit v0.12 From 462f5148a3be5835cc8d5b69685473042789c917 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 22 Dec 2010 15:39:28 +0200 Subject: Fix infinite loop in qmake when reading malformed .ts files. No checking for the end of xml file was done in while loop looking for TS element. Task-number: QTBUG-16261 Reviewed-by: Janne Koskinen --- qmake/generators/symbian/symbiancommon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index 602bcc2..d9f12b3 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -977,7 +977,7 @@ bool SymbianCommonGenerator::parseTsContent(const QString &tsFilename, SymbianLo QXmlStreamReader xml(&tsFile); - while (xml.name() != tsElement) + while (!xml.atEnd() && xml.name() != tsElement) xml.readNextStartElement(); while (xml.readNextStartElement()) { -- cgit v0.12 From a562fd2d201e3b618ed99a316275f20385cc5c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 16 Dec 2010 14:45:21 +0100 Subject: Added int overloads to QPoint operator* and operator*=. For increased performance to avoid having to convert to qreal and back. Separating the qreal overload into float and double overloads is also necessary to avoid compiler errors about ambiguous overloads. Task-number: QTBUG-15872 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/corelib/tools/qpoint.cpp | 63 +++++++++++++++++++++++++++++++++++++++++--- src/corelib/tools/qpoint.h | 38 +++++++++++++++++++++----- 2 files changed, 92 insertions(+), 9 deletions(-) diff --git a/src/corelib/tools/qpoint.cpp b/src/corelib/tools/qpoint.cpp index c297709..592a83d 100644 --- a/src/corelib/tools/qpoint.cpp +++ b/src/corelib/tools/qpoint.cpp @@ -187,7 +187,19 @@ QT_BEGIN_NAMESPACE */ /*! - \fn QPoint &QPoint::operator*=(qreal factor) + \fn QPoint &QPoint::operator*=(float factor) + + Multiplies this point's coordinates by the given \a factor, and + returns a reference to this point. + + Note that the result is rounded to the nearest integer as points are held as + integers. Use QPointF for floating point accuracy. + + \sa operator/=() +*/ + +/*! + \fn QPoint &QPoint::operator*=(double factor) Multiplies this point's coordinates by the given \a factor, and returns a reference to this point. For example: @@ -200,6 +212,14 @@ QT_BEGIN_NAMESPACE \sa operator/=() */ +/*! + \fn QPoint &QPoint::operator*=(int factor) + + Multiplies this point's coordinates by the given \a factor, and + returns a reference to this point. + + \sa operator/=() +*/ /*! \fn bool operator==(const QPoint &p1, const QPoint &p2) @@ -237,7 +257,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(const QPoint &point, qreal factor) + \fn const QPoint operator*(const QPoint &point, float factor) \relates QPoint Returns a copy of the given \a point multiplied by the given \a factor. @@ -249,7 +269,44 @@ QT_BEGIN_NAMESPACE */ /*! - \fn const QPoint operator*(qreal factor, const QPoint &point) + \fn const QPoint operator*(const QPoint &point, double factor) + \relates QPoint + + Returns a copy of the given \a point multiplied by the given \a factor. + + Note that the result is rounded to the nearest integer as points + are held as integers. Use QPointF for floating point accuracy. + + \sa QPoint::operator*=() +*/ + +/*! + \fn const QPoint operator*(const QPoint &point, int factor) + \relates QPoint + + Returns a copy of the given \a point multiplied by the given \a factor. + + \sa QPoint::operator*=() +*/ + +/*! + \fn const QPoint operator*(float factor, const QPoint &point) + \overload + \relates QPoint + + Returns a copy of the given \a point multiplied by the given \a factor. +*/ + +/*! + \fn const QPoint operator*(double factor, const QPoint &point) + \overload + \relates QPoint + + Returns a copy of the given \a point multiplied by the given \a factor. +*/ + +/*! + \fn const QPoint operator*(int factor, const QPoint &point) \overload \relates QPoint diff --git a/src/corelib/tools/qpoint.h b/src/corelib/tools/qpoint.h index 79a7dd8..e57b0ed 100644 --- a/src/corelib/tools/qpoint.h +++ b/src/corelib/tools/qpoint.h @@ -70,15 +70,23 @@ public: QPoint &operator+=(const QPoint &p); QPoint &operator-=(const QPoint &p); - QPoint &operator*=(qreal c); + + QPoint &operator*=(float c); + QPoint &operator*=(double c); + QPoint &operator*=(int c); + QPoint &operator/=(qreal c); friend inline bool operator==(const QPoint &, const QPoint &); friend inline bool operator!=(const QPoint &, const QPoint &); friend inline const QPoint operator+(const QPoint &, const QPoint &); friend inline const QPoint operator-(const QPoint &, const QPoint &); - friend inline const QPoint operator*(const QPoint &, qreal); - friend inline const QPoint operator*(qreal, const QPoint &); + friend inline const QPoint operator*(const QPoint &, float); + friend inline const QPoint operator*(float, const QPoint &); + friend inline const QPoint operator*(const QPoint &, double); + friend inline const QPoint operator*(double, const QPoint &); + friend inline const QPoint operator*(const QPoint &, int); + friend inline const QPoint operator*(int, const QPoint &); friend inline const QPoint operator-(const QPoint &); friend inline const QPoint operator/(const QPoint &, qreal); @@ -141,9 +149,15 @@ inline QPoint &QPoint::operator+=(const QPoint &p) inline QPoint &QPoint::operator-=(const QPoint &p) { xp-=p.xp; yp-=p.yp; return *this; } -inline QPoint &QPoint::operator*=(qreal c) +inline QPoint &QPoint::operator*=(float c) +{ xp = qRound(xp*c); yp = qRound(yp*c); return *this; } + +inline QPoint &QPoint::operator*=(double c) { xp = qRound(xp*c); yp = qRound(yp*c); return *this; } +inline QPoint &QPoint::operator*=(int c) +{ xp = xp*c; yp = yp*c; return *this; } + inline bool operator==(const QPoint &p1, const QPoint &p2) { return p1.xp == p2.xp && p1.yp == p2.yp; } @@ -156,12 +170,24 @@ inline const QPoint operator+(const QPoint &p1, const QPoint &p2) inline const QPoint operator-(const QPoint &p1, const QPoint &p2) { return QPoint(p1.xp-p2.xp, p1.yp-p2.yp); } -inline const QPoint operator*(const QPoint &p, qreal c) +inline const QPoint operator*(const QPoint &p, float c) { return QPoint(qRound(p.xp*c), qRound(p.yp*c)); } -inline const QPoint operator*(qreal c, const QPoint &p) +inline const QPoint operator*(const QPoint &p, double c) { return QPoint(qRound(p.xp*c), qRound(p.yp*c)); } +inline const QPoint operator*(const QPoint &p, int c) +{ return QPoint(p.xp*c, p.yp*c); } + +inline const QPoint operator*(float c, const QPoint &p) +{ return QPoint(qRound(p.xp*c), qRound(p.yp*c)); } + +inline const QPoint operator*(double c, const QPoint &p) +{ return QPoint(qRound(p.xp*c), qRound(p.yp*c)); } + +inline const QPoint operator*(int c, const QPoint &p) +{ return QPoint(p.xp*c, p.yp*c); } + inline const QPoint operator-(const QPoint &p) { return QPoint(-p.xp, -p.yp); } -- cgit v0.12 From ce432e1799111cbed492e46bb62d8dfb40585a10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Fri, 17 Dec 2010 12:46:44 +0100 Subject: Prevented infinite loop in QMoviePrivate::next(). If we're unable to read the first frame, we shouldn't return an end marker, as that will cause QMoviePrivate::next() to recurse indefinitely when the playCounter is set to -1 (infinite). Reviewed-by: Olivier Goffart --- src/gui/image/qmovie.cpp | 6 +++++- tests/auto/qmovie/animations/corrupt.gif | Bin 0 -> 847 bytes tests/auto/qmovie/qmovie.pro | 1 + tests/auto/qmovie/resources.qrc | 5 +++++ tests/auto/qmovie/tst_qmovie.cpp | 13 +++++++++++++ 5 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/auto/qmovie/animations/corrupt.gif create mode 100644 tests/auto/qmovie/resources.qrc diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index 911a2b5..eb139fa 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -381,10 +381,14 @@ QFrameInfo QMoviePrivate::infoForFrame(int frameNumber) QPixmap aPixmap = QPixmap::fromImage(anImage); int aDelay = reader->nextImageDelay(); return QFrameInfo(aPixmap, aDelay); - } else { + } else if (frameNumber != 0) { // We've read all frames now. Return an end marker haveReadAll = true; return QFrameInfo::endMarker(); + } else { + // No readable frames + haveReadAll = true; + return QFrameInfo(); } } diff --git a/tests/auto/qmovie/animations/corrupt.gif b/tests/auto/qmovie/animations/corrupt.gif new file mode 100644 index 0000000..c1545eb Binary files /dev/null and b/tests/auto/qmovie/animations/corrupt.gif differ diff --git a/tests/auto/qmovie/qmovie.pro b/tests/auto/qmovie/qmovie.pro index 6973955..855eb9e 100644 --- a/tests/auto/qmovie/qmovie.pro +++ b/tests/auto/qmovie/qmovie.pro @@ -12,6 +12,7 @@ wince*: { DEPLOYMENT += addFiles } +RESOURCES += resources.qrc symbian: { addFiles.files = animations\\* diff --git a/tests/auto/qmovie/resources.qrc b/tests/auto/qmovie/resources.qrc new file mode 100644 index 0000000..ce459a0 --- /dev/null +++ b/tests/auto/qmovie/resources.qrc @@ -0,0 +1,5 @@ + + + animations/corrupt.gif + + diff --git a/tests/auto/qmovie/tst_qmovie.cpp b/tests/auto/qmovie/tst_qmovie.cpp index 80a551b..d43d4cb 100644 --- a/tests/auto/qmovie/tst_qmovie.cpp +++ b/tests/auto/qmovie/tst_qmovie.cpp @@ -72,6 +72,7 @@ private slots: void jumpToFrame_data(); void jumpToFrame(); void changeMovieFile(); + void infiniteLoop(); }; // Testing get/set functions @@ -208,5 +209,17 @@ void tst_QMovie::changeMovieFile() QVERIFY(movie.currentFrameNumber() == -1); } +void tst_QMovie::infiniteLoop() +{ + QLabel label; + label.show(); + QMovie *movie = new QMovie(QLatin1String(":animations/corrupt.gif"), QByteArray(), &label); + label.setMovie(movie); + movie->start(); + + QTestEventLoop::instance().enterLoop(1); + QTestEventLoop::instance().timeout(); +} + QTEST_MAIN(tst_QMovie) #include "tst_qmovie.moc" -- cgit v0.12 From 8c74ca2677e942bdd86f69527ab8f8ea4a15144a Mon Sep 17 00:00:00 2001 From: Eckhart Koppen Date: Wed, 22 Dec 2010 16:54:54 +0200 Subject: Added initial set of build related files for Symbian config.profiles directory created with initial files needed to compile Qt on Nokia specific build setups during Symbian platform builds. Reviewed-by: Lars Knoll --- config.profiles/symbian/bld.inf | 87 + config.profiles/symbian/confml/qt.confml | 16 + config.profiles/symbian/data_caging_paths.prf | 71 + config.profiles/symbian/environment.prf | 9 + config.profiles/symbian/headerexport | 1138 +++ config.profiles/symbian/implml/qt_copy.implml | 10 + config.profiles/symbian/layers.sysdef.xml | 41 + config.profiles/symbian/loc.prf | 25 + config.profiles/symbian/non_foundation_paths.prf | 115 + config.profiles/symbian/package_definition.xml | 54 + config.profiles/symbian/package_map.xml | 1 + config.profiles/symbian/platform_paths.prf | 251 + config.profiles/symbian/qt.conf | 6 + config.profiles/symbian/qt.iby | 118 + config.profiles/symbian/qtconfig.flm | 88 + config.profiles/symbian/qtconfig.xml | 17 + config.profiles/symbian/sysdef_1_5_1.dtd | 88 + config.profiles/symbian/translations/qt_ar.ts | 7821 ++++++++++++++++++ config.profiles/symbian/translations/qt_fa.ts | 8507 +++++++++++++++++++ .../symbian/translations/qt_fr_symbian.ts | 8519 +++++++++++++++++++ config.profiles/symbian/translations/qt_he.ts | 7781 ++++++++++++++++++ .../symbian/translations/qt_pl_symbian.ts | 8525 ++++++++++++++++++++ .../symbian/translations/qt_ru_symbian.ts | 8522 +++++++++++++++++++ config.profiles/symbian/translations/qt_ur.ts | 8507 +++++++++++++++++++ .../symbian/translations/qt_zh_cn_symbian.ts | 8517 +++++++++++++++++++ .../symbian/translations/qt_zh_tw_symbian.ts | 8505 +++++++++++++++++++ .../symbian/translations_symbian/translations.pro | 16 + 27 files changed, 77355 insertions(+) create mode 100644 config.profiles/symbian/bld.inf create mode 100644 config.profiles/symbian/confml/qt.confml create mode 100644 config.profiles/symbian/data_caging_paths.prf create mode 100644 config.profiles/symbian/environment.prf create mode 100644 config.profiles/symbian/headerexport create mode 100644 config.profiles/symbian/implml/qt_copy.implml create mode 100644 config.profiles/symbian/layers.sysdef.xml create mode 100644 config.profiles/symbian/loc.prf create mode 100644 config.profiles/symbian/non_foundation_paths.prf create mode 100644 config.profiles/symbian/package_definition.xml create mode 100644 config.profiles/symbian/package_map.xml create mode 100644 config.profiles/symbian/platform_paths.prf create mode 100644 config.profiles/symbian/qt.conf create mode 100644 config.profiles/symbian/qt.iby create mode 100644 config.profiles/symbian/qtconfig.flm create mode 100644 config.profiles/symbian/qtconfig.xml create mode 100644 config.profiles/symbian/sysdef_1_5_1.dtd create mode 100644 config.profiles/symbian/translations/qt_ar.ts create mode 100644 config.profiles/symbian/translations/qt_fa.ts create mode 100644 config.profiles/symbian/translations/qt_fr_symbian.ts create mode 100644 config.profiles/symbian/translations/qt_he.ts create mode 100644 config.profiles/symbian/translations/qt_pl_symbian.ts create mode 100644 config.profiles/symbian/translations/qt_ru_symbian.ts create mode 100644 config.profiles/symbian/translations/qt_ur.ts create mode 100644 config.profiles/symbian/translations/qt_zh_cn_symbian.ts create mode 100644 config.profiles/symbian/translations/qt_zh_tw_symbian.ts create mode 100644 config.profiles/symbian/translations_symbian/translations.pro diff --git a/config.profiles/symbian/bld.inf b/config.profiles/symbian/bld.inf new file mode 100644 index 0000000..d3958dd --- /dev/null +++ b/config.profiles/symbian/bld.inf @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* +* Description: Build information file for Qt configuration +* +*/ + +#include + +PRJ_PLATFORMS +TOOLS2 + +PRJ_EXPORTS +qtconfig.xml /epoc32/tools/makefile_templates/qt/qtconfig.xml +qtconfig.flm /epoc32/tools/makefile_templates/qt/qtconfig.flm + +../../mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm /epoc32/tools/makefile_templates/qt/ +../../mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm /epoc32/tools/makefile_templates/qt/ +../../mkspecs/symbian-sbsv2/flm/qt/qmake_post_link.flm /epoc32/tools/makefile_templates/qt/ +../../mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm /epoc32/tools/makefile_templates/qt/ +../../mkspecs/symbian-sbsv2/flm/qt/qt.xml /epoc32/tools/makefile_templates/qt/ + +qt.conf /epoc32/tools/qt.conf + +/* export platform specific configuration */ + +platform_paths.prf /epoc32/include/ +data_caging_paths.prf /epoc32/include/ +non_foundation_paths.prf /epoc32/include/ + +environment.prf /epoc32/tools/qt/mkspecs/features/environment.prf + +//for loc +loc.prf /epoc32/tools/qt/mkspecs/features/loc.prf + +//For UDA image +confml/qt.confml CONFML_EXPORT_PATH(qt.confml,uda_content) +implml/qt_copy.implml CRML_EXPORT_PATH(qt_copy.implml,uda_content) +content/apps/qt.sisx CRML_EXPORT_PATH(../content/sis/,uda_content) +content/apps/qt_stub.sis /epoc32/data/z/system/install/qt_stub.sis + +//tools +../../bin/createpackage.bat /epoc32/tools/createpackage.bat +../../bin/createpackage.pl /epoc32/tools/createpackage.pl +../../bin/patch_capabilities.bat /epoc32/tools/patch_capabilities.bat +../../bin/patch_capabilities.pl /epoc32/tools/patch_capabilities.pl + + +/* export localization *.ts files */ +translations/qt_ur.ts /epoc32/include/platform/qt/translations/ +translations/qt_fa.ts /epoc32/include/platform/qt/translations/ +translations/qt_ar.ts /epoc32/include/platform/qt/translations/ +translations/qt_he.ts /epoc32/include/platform/qt/translations/ + +translations/qt_fr_symbian.ts /epoc32/include/platform/qt/translations/qt_fr.ts +translations/qt_pl_symbian.ts /epoc32/include/platform/qt/translations/qt_pl.ts +translations/qt_ru_symbian.ts /epoc32/include/platform/qt/translations/qt_ru.ts +translations/qt_zh_cn_symbian.ts /epoc32/include/platform/qt/translations/qt_zh_cn.ts +translations/qt_zh_tw_symbian.ts /epoc32/include/platform/qt/translations/qt_zh_tw.ts + +../../translations/qt_ar.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_cs.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_da.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_de.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_es.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_gl.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_hu.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_ja.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_pt.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_sk.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_sl.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_sv.ts /epoc32/include/platform/qt/translations/ +../../translations/qt_uk.ts /epoc32/include/platform/qt/translations/ + + +PRJ_MMPFILES + + +PRJ_TESTMMPFILES + + +PRJ_EXTENSIONS +START EXTENSION qt/qtconfig +OPTION QT_ROOT .. +OPTION OPTIONS -opensource -confirm-license -openvg -opengl-es-2 -script -no-scripttools -no-webkit -make make -graphicssystem openvg -no-phonon-backend -usedeffiles -dont-process -nomake examples -nomake demos -nomake tools -audio-backend -fpu softvfp+vfpv2 +END \ No newline at end of file diff --git a/config.profiles/symbian/confml/qt.confml b/config.profiles/symbian/confml/qt.confml new file mode 100644 index 0000000..f5e9a49 --- /dev/null +++ b/config.profiles/symbian/confml/qt.confml @@ -0,0 +1,16 @@ + + + + QT settings + + To enable QT usage + + + + + true + + + \ No newline at end of file diff --git a/config.profiles/symbian/data_caging_paths.prf b/config.profiles/symbian/data_caging_paths.prf new file mode 100644 index 0000000..8bb0f79 --- /dev/null +++ b/config.profiles/symbian/data_caging_paths.prf @@ -0,0 +1,71 @@ +# +# ============================================================================== +# Name : data_caging_paths.prf +# Part of : +# Interface : Data Caging Path Definitions API for Qt/S60 +# Description : Paths specific to Symbian^3 and later +# +# Usage examples: +# +# # Load these definitions on pro-file if needed: +# load(data_caging_paths) +# +# # These variables are mostly useful when specifying deployment +# +# myLib.sources = myLib.dll +# myLib.path = $$SHARED_LIB_DIR +# DEPLOYMENT += myLib +# +# # Note: Do not use $$PLUGINS_DIR or $$PLUGINS_1_DIR to deploy Qt plugins. +# # $$QT_PUBLIC_PLUGINS_BASE specifies the public base directory for Qt +# # plugin stubs: +# +# myPublicImageFormatPlugin.sources = myImageFormat.dll +# myPublicImageFormatPlugin.path = $$QT_PLUGINS_BASE_DIR/imageformats +# DEPLOYMENT += myPublicImageFormatPlugin +# +# ============================================================================== + +APPARC_RECOGNISER_RESOURCES_DIR = /resource/apps/registrationresourcefiles +APP_BITMAP_DIR = /resource/apps +APP_RESOURCE_DIR = /resource/apps +BITMAP_DIR = /resource/apps +BIOFILE_DIR = /resource/messaging/bif +CHARCONV_PLUGIN_DIR = /resource/charconv +CONTACTS_RESOURCE_DIR = /resource/cntmodel +CTRL_PANEL_RESOURCE_DIR = /resource/controls +CONVERTER_PLUGIN_RESOURCE_DIR = /resource/convert +ECOM_RESOURCE_DIR = /resource/plugins +ERROR_RESOURCE_DIR = /resource/errors +PROGRAMS_DIR = /sys/bin +FEP_RESOURCES_DIR = /resource/fep +HELP_FILE_DIR = /resource/help +LOG_ENGINE_RESOURCE_DIR = /resource/logengine +MTM_RESOURCE_DIR = /resource/messaging +MTM_INFO_FILE_DIR = /resource/messaging/mtm +PRINTER_DRIVER_DIR = /resource/printers +SHARED_LIB_DIR = /sys/bin +UIKLAF_RESOURCE_DIR = /resource/uiklaf +WAPPUSH_PLUGIN_RESOURCE_DIR = /resource/messaging/wappush +WATCHER_PLUGIN_RESOURCE_DIR = /resource/messaging/watchers +RECOGNISERS_DIR = /sys/bin +PARSERS_DIR = /sys/bin +NOTIFIERS_DIR = /sys/bin +PLUGINS_DIR = /sys/bin +PLUGINS_1_DIR = /sys/bin +RESOURCE_FILES_DIR = /resource + +CA_CERTIFICATES_DIR = /private/101f72a6 +COMMDB_DIR = /private/100012a5 +SS_CONFIG_FILE_DIR = /private/101f7989/esock +TRUSTED_FONTS_DIR = /private/10003a16/fonts +UNTRUSTED_FONT_DIR = /private/10003a16/import/fonts +WINDOW_SERVER_INI_DIR = /private/10003b20 +SKINS_DIR = /private/10207114 +BOOTDATA_DIR = /resource/bootdata + +isEmpty(QT_PLUGINS_BASE_DIR): QT_PLUGINS_BASE_DIR = $$RESOURCE_FILES_DIR/qt$${QT_LIBINFIX}/plugins +isEmpty(QT_IMPORTS_BASE_DIR): QT_IMPORTS_BASE_DIR = $$RESOURCE_FILES_DIR/qt/imports +isEmpty(HW_ZDIR): HW_ZDIR = epoc32/data/z +isEmpty(REG_RESOURCE_DIR): REG_RESOURCE_DIR = /private/10003a3f/apps +isEmpty(REG_RESOURCE_IMPORT_DIR): REG_RESOURCE_IMPORT_DIR = /private/10003a3f/import/apps diff --git a/config.profiles/symbian/environment.prf b/config.profiles/symbian/environment.prf new file mode 100644 index 0000000..09ba90d --- /dev/null +++ b/config.profiles/symbian/environment.prf @@ -0,0 +1,9 @@ +# don't export SQLite on Symbian^3 onwards since it is already in the environment +CONFIG *= symbian_no_export_sqlite + +# STL autodetection in clean builds not working, specify it explicitly +CONFIG *= stl + + +S60_VERSION = 5.2 +SYMBIAN_VERSION = Symbian3 \ No newline at end of file diff --git a/config.profiles/symbian/headerexport b/config.profiles/symbian/headerexport new file mode 100644 index 0000000..e9e6f3b --- /dev/null +++ b/config.profiles/symbian/headerexport @@ -0,0 +1,1138 @@ +#!/usr/bin/perl -w +###################################################################### +# +# Synchronizes Qt header files - internal development tool. +# +# Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +# Contact: Nokia Corporation (qt-info@nokia.com) +# +###################################################################### + +# use packages ------------------------------------------------------- +use File::Basename; +use File::Path; +use Cwd; +use Config; +use strict; + +for (my $i = 0; $i < $#ARGV; $i++) { + if ($ARGV[$i] eq "-base-dir" && $i < $#ARGV - 1) { + $ENV{"QTDIR"} = $ARGV[$i + 1]; + last; + } +} + +die "syncqt: QTDIR not defined" if ! $ENV{"QTDIR"}; # sanity check + +# global variables +my $isunix = 0; +my $basedir = $ENV{"QTDIR"}; +$basedir =~ s=\\=/=g; +my %modules = ( # path to module name map + "QtGui" => "$basedir/src/gui", + "QtOpenGL" => "$basedir/src/opengl", + "QtOpenVG" => "$basedir/src/openvg", + "QtCore" => "$basedir/src/corelib", + "QtXml" => "$basedir/src/xml", + "QtXmlPatterns" => "$basedir/src/xmlpatterns", + "QtSql" => "$basedir/src/sql", + "QtNetwork" => "$basedir/src/network", + "QtSvg" => "$basedir/src/svg", + "QtDeclarative" => "$basedir/src/declarative", + "QtScript" => "$basedir/src/script", + "QtScriptTools" => "$basedir/src/scripttools", + "Qt3Support" => "$basedir/src/qt3support", + "ActiveQt" => "$basedir/src/activeqt", + "QtTest" => "$basedir/src/testlib", + "QtHelp" => "$basedir/tools/assistant/lib", + "QtDesigner" => "$basedir/tools/designer/src/lib", + "QtUiTools" => "$basedir/tools/designer/src/uitools", + "QtDBus" => "$basedir/src/dbus", +# "QtWebKit" => "$basedir/src/3rdparty/webkit/WebCore", // :TODO:disabled since QtWebKit built separately, better logic needed here. + "phonon" => "$basedir/src/phonon", + "QtMultimedia" => "$basedir/src/multimedia", + "QtMeeGoGraphicsSystemHelper" => "$basedir/tools/qmeegographicssystemhelper", +); +my %moduleheaders = ( # restrict the module headers to those found in relative path + "QtWebKit" => "../WebKit/qt/Api", + "phonon" => "../3rdparty/phonon/phonon", +); + +#$modules{"QtCore"} .= ";$basedir/mkspecs/" . $ENV{"MKSPEC"} if defined $ENV{"MKSPEC"}; + +# global variables (modified by options) +my $module = 0; +my $showonly = 0; +my $quiet = 0; +my $remove_stale = 1; +my $force_win = 0; +my $force_relative = 0; +my $check_includes = 0; +my $copy_headers = 0; +my $create_uic_class_map = 1; +my $create_private_headers = 1; +my $oneway = 0; +my @modules_to_sync ; +$force_relative = 1 if ( -d "/System/Library/Frameworks" ); +my $out_basedir = $basedir; +$out_basedir =~ s=\\=/=g; +my $out_subdir = 'include'; + +# functions ---------------------------------------------------------- + +###################################################################### +# Syntax: showUsage() +# Params: -none- +# +# Purpose: Show the usage of the script. +# Returns: -none- +###################################################################### +sub showUsage +{ + print "$0 usage:\n"; + print " -copy Copy headers instead of include-fwd(default: " . ($copy_headers ? "yes" : "no") . ")\n"; + print " -remove-stale Removes stale headers (default: " . ($remove_stale ? "yes" : "no") . ")\n"; + print " -relative Force relative symlinks (default: " . ($force_relative ? "yes" : "no") . ")\n"; + print " -windows Force platform to Windows (default: " . ($force_win ? "yes" : "no") . ")\n"; + print " -showonly Show action but not perform (default: " . ($showonly ? "yes" : "no") . ")\n"; + print " -outdir Specify output directory for sync (default: $out_basedir)\n"; + print " -outsubdir

Target subdir under outdir (default: $out_subdir)\n"; + print " -public Create only public headers (default: " . ($create_private_headers ? "no" : "yes") . ")\n"; + print " -oneway Don't sync back from outdir (default: " . ($oneway ? "yes" : "no") . ")\n"; + print " -quiet Only report problems, not activity (default: " . ($quiet ? "yes" : "no") . ")\n"; + print " -separate-module :: Create headers for with original headers in relative to \n"; + print " -help This help\n"; + exit 0; +} + +###################################################################### +# Syntax: checkUnix() +# Params: -none- +# +# Purpose: Check if script runs on a Unix system or not. Cygwin +# systems are _not_ detected as Unix systems. +# Returns: 1 if a unix system, else 0. +###################################################################### +sub checkUnix { + my ($r) = 0; + if ( $force_win != 0) { + return 0; + } elsif ( -f "/bin/uname" ) { + $r = 1; + (-f "\\bin\\uname") && ($r = 0); + } elsif ( -f "/usr/bin/uname" ) { + $r = 1; + (-f "\\usr\\bin\\uname") && ($r = 0); + } + if($r) { + $_ = $Config{'osname'}; + $r = 0 if( /(ms)|(cyg)win/i ); + } + return $r; +} + +sub checkRelative { + my ($dir) = @_; + return 0 if($dir =~ /^\//); + return 0 if(!checkUnix() && $dir =~ /[a-zA-Z]:[\/\\]/); + return 1; +} + +###################################################################### +# Syntax: shouldMasterInclude(iheader) +# Params: iheader, string, filename to verify inclusion +# +# Purpose: Determines if header should be in the master include file. +# Returns: 0 if file contains "#pragma qt_no_master_include" or not +# able to open, else 1. +###################################################################### +sub shouldMasterInclude { + my ($iheader) = @_; + return 0 if(basename($iheader) =~ /_/); + return 0 if(basename($iheader) =~ /qconfig/); + if(open(F, "<$iheader")) { + while() { + chomp; + return 0 if(/^\#pragma qt_no_master_include$/); + } + close(F); + } else { + return 0; + } + return 1; +} + +###################################################################### +# Syntax: classNames(iheader) +# Params: iheader, string, filename to parse for classname "symlinks" +# +# Purpose: Scans through iheader to find all classnames that should be +# synced into library's include structure. +# Returns: List of all class names in a file. +###################################################################### +sub classNames { + my @ret; + my ($iheader) = @_; + if(basename($iheader) eq "qglobal.h") { + push @ret, "QtGlobal"; + } elsif(basename($iheader) eq "qendian.h") { + push @ret, "QtEndian"; + } elsif(basename($iheader) eq "qconfig.h") { + push @ret, "QtConfig"; + } elsif(basename($iheader) eq "qplugin.h") { + push @ret, "QtPlugin"; + } elsif(basename($iheader) eq "qalgorithms.h") { + push @ret, "QtAlgorithms"; + } elsif(basename($iheader) eq "qcontainerfwd.h") { + push @ret, "QtContainerFwd"; + } elsif(basename($iheader) eq "qdebug.h") { + push @ret, "QtDebug"; + } elsif(basename($iheader) eq "qevent.h") { + push @ret, "QtEvents"; + } elsif(basename($iheader) eq "qnamespace.h") { + push @ret, "Qt" + } elsif(basename($iheader) eq "qssl.h") { + push @ret, "QSsl"; + } elsif(basename($iheader) eq "qtest.h") { + push @ret, "QTest" + } elsif(basename($iheader) eq "qtconcurrentmap.h") { + push @ret, "QtConcurrentMap" + } elsif(basename($iheader) eq "qtconcurrentfilter.h") { + push @ret, "QtConcurrentFilter" + } elsif(basename($iheader) eq "qtconcurrentrun.h") { + push @ret, "QtConcurrentRun" + } elsif(basename($iheader) eq "qaudio.h") { + push @ret, "QAudio" + } + + my $parsable = ""; + if(open(F, "<$iheader")) { + while() { + my $line = $_; + chomp $line; + chop $line if ($line =~ /\r$/); + if($line =~ /^\#/) { + if($line =~ /\\$/) { + while($line = ) { + chomp $line; + last unless($line =~ /\\$/); + } + } + return @ret if($line =~ m/^#pragma qt_sync_stop_processing/); + push(@ret, $1) if($line =~ m/^#pragma qt_class\(([^)]*)\)[\r\n]*$/); + $line = 0; + } + if($line) { + $line =~ s,//.*$,,; #remove c++ comments + $line .= ";" if($line =~ m/^Q_[A-Z_]*\(.*\)[\r\n]*$/); #qt macro + $line .= ";" if($line =~ m/^QT_(BEGIN|END)_HEADER[\r\n]*$/); #qt macro + $line .= ";" if($line =~ m/^QT_(BEGIN|END)_NAMESPACE[\r\n]*$/); #qt macro + $line .= ";" if($line =~ m/^QT_MODULE\(.*\)[\r\n]*$/); # QT_MODULE macro + $parsable .= " " . $line; + } + } + close(F); + } + + my $last_definition = 0; + my @namespaces; + for(my $i = 0; $i < length($parsable); $i++) { + my $definition = 0; + my $character = substr($parsable, $i, 1); + if($character eq "/" && substr($parsable, $i+1, 1) eq "*") { #I parse like this for greedy reasons + for($i+=2; $i < length($parsable); $i++) { + my $end = substr($parsable, $i, 2); + if($end eq "*/") { + $last_definition = $i+2; + $i++; + last; + } + } + } elsif($character eq "{") { + my $brace_depth = 1; + my $block_start = $i + 1; + BLOCK: for($i+=1; $i < length($parsable); $i++) { + my $ignore = substr($parsable, $i, 1); + if($ignore eq "{") { + $brace_depth++; + } elsif($ignore eq "}") { + $brace_depth--; + unless($brace_depth) { + for(my $i2 = $i+1; $i2 < length($parsable); $i2++) { + my $end = substr($parsable, $i2, 1); + if($end eq ";" || $end ne " ") { + $definition = substr($parsable, $last_definition, $block_start - $last_definition) . "}"; + $i = $i2 if($end eq ";"); + $last_definition = $i + 1; + last BLOCK; + } + } + } + } + } + } elsif($character eq ";") { + $definition = substr($parsable, $last_definition, $i - $last_definition + 1); + $last_definition = $i + 1; + } elsif($character eq "}") { + # a naked } must be a namespace ending + # if it's not a namespace, it's eaten by the loop above + pop @namespaces; + $last_definition = $i + 1; + } + + if (substr($parsable, $last_definition, $i - $last_definition + 1) =~ m/ namespace ([^ ]*) / + && substr($parsable, $i+1, 1) eq "{") { + push @namespaces, $1; + + # Eat the opening { so that the condensing loop above doesn't see it + $i++; + $last_definition = $i + 1; + } + + if($definition) { + $definition =~ s=[\n\r]==g; + my @symbols; + if($definition =~ m/^ *typedef *.*\(\*([^\)]*)\)\(.*\);$/) { + push @symbols, $1; + } elsif($definition =~ m/^ *typedef +(.*) +([^ ]*);$/) { + push @symbols, $2; + } elsif($definition =~ m/^ *(template *<.*> *)?(class|struct) +([^ ]* +)?([^<\s]+) ?(<[^>]*> ?)?\s*((,|:)\s*(public|protected|private) *.*)? *\{\}$/) { + push @symbols, $4; + } elsif($definition =~ m/^ *Q_DECLARE_.*ITERATOR\((.*)\);$/) { + push @symbols, "Q" . $1 . "Iterator"; + push @symbols, "QMutable" . $1 . "Iterator"; + } + + foreach my $symbol (@symbols) { + $symbol = (join("::", @namespaces) . "::" . $symbol) if (scalar @namespaces); + push @ret, $symbol + if ($symbol =~ /^Q[^:]*$/ # no-namespace, starting with Q + || $symbol =~ /^Phonon::/); # or in the Phonon namespace + } + } + } + return @ret; +} + +###################################################################### +# Syntax: syncHeader(header, iheader, copy, timestamp) +# Params: header, string, filename to create "symlink" for +# iheader, string, destination name of symlink +# copy, forces header to be a copy of iheader +# timestamp, the requested modification time if copying +# +# Purpose: Syncronizes header to iheader +# Returns: 1 if successful, else 0. +###################################################################### +sub syncHeader { + my ($header, $iheader, $copy, $ts) = @_; + $iheader =~ s=\\=/=g; + $header =~ s=\\=/=g; + return copyFile($iheader, $header) if($copy); + + unless(-e $header) { + my $header_dir = dirname($header); + mkpath $header_dir, !$quiet; + + #write it + my $iheader_out = fixPaths($iheader, $header_dir); + open HEADER, ">$header" || die "Could not open $header for writing!\n"; + print HEADER "#include \"$iheader_out\"\n"; + close HEADER; + utime(time, $ts, $header) or die "$iheader, $header"; + return 1; + } + return 0; +} + +###################################################################### +# Syntax: fixPaths(file, dir) +# Params: file, string, filepath to be made relative to dir +# dir, string, dirpath for point of origin +# +# Purpose: file is made relative (if possible) of dir. +# Returns: String with the above applied conversion. +###################################################################### +sub fixPaths { + my ($file, $dir) = @_; + $dir =~ s=^$basedir/=$out_basedir/= if(!($basedir eq $out_basedir)); + $file =~ s=\\=/=g; + $file =~ s/\+/\\+/g; + $dir =~ s=\\=/=g; + $dir =~ s/\+/\\+/g; + + #setup + my $ret = $file; + $ret =~ s,/cygdrive/([a-zA-Z])/,$1:/,g; + my $file_dir = dirname($file); + if($file_dir eq ".") { + $file_dir = getcwd(); + $file_dir =~ s=\\=/=g; + } + $file_dir =~ s,/cygdrive/([a-zA-Z])/,$1:/,g; + if($dir eq ".") { + $dir = getcwd(); + $dir =~ s=\\=/=g; + } + $dir =~ s,/cygdrive/([a-zA-Z])/,$1:/,g; + return basename($file) if($file_dir eq $dir); + + #guts + my $match_dir = 0; + for(my $i = 1; $i < length($file_dir); $i++) { + my $slash = index($file_dir, "/", $i); + last if($slash == -1); + my $tmp = substr($file_dir, 0, $slash); + last unless($dir =~ m,^$tmp/,); + $match_dir = $tmp; + $i = $slash; + } + if($match_dir) { + my $after = substr($dir, length($match_dir)); + my $count = ($after =~ tr,/,,); + my $dots = ""; + for(my $i = 0; $i < $count; $i++) { + $dots .= "../"; + } + $ret =~ s,^$match_dir,$dots,; + } + $ret =~ s,/+,/,g; + return $ret; +} + +###################################################################### +# Syntax: fileContents(filename) +# Params: filename, string, filename of file to return contents +# +# Purpose: Get the contents of a file. +# Returns: String with contents of the file, or empty string if file +# doens't exist. +# Warning: Dies if it does exist but script cannot get read access. +###################################################################### +sub fileContents { + my ($filename) = @_; + my $filecontents = ""; + if (-e $filename) { + open(I, "< $filename") || die "Could not open $filename for reading, read block?"; + local $/; + binmode I; + $filecontents = ; + close I; + } + return $filecontents; +} + +###################################################################### +# Syntax: fileCompare(file1, file2) +# Params: file1, string, filename of first file +# file2, string, filename of second file +# +# Purpose: Determines if files are equal, and which one is newer. +# Returns: 0 if files are equal no matter the timestamp, -1 if file1 +# is newer, 1 if file2 is newer. +###################################################################### +sub fileCompare { + my ($file1, $file2) = @_; + my $file1contents = fileContents($file1); + my $file2contents = fileContents($file2); + if (! -e $file1) { return 1; } + if (! -e $file2) { return -1; } + return $file1contents ne $file2contents ? (stat($file2))[9] <=> (stat($file1))[9] : 0; +} + +###################################################################### +# Syntax: copyFile(file, ifile) +# Params: file, string, filename to create duplicate for +# ifile, string, destination name of duplicate +# +# Purpose: Keeps files in sync so changes in the newer file will be +# written to the other. +# Returns: 1 if files were synced, else 0. +# Warning: Dies if script cannot get write access. +###################################################################### +sub copyFile +{ + my ($file,$ifile, $copy,$knowdiff,$filecontents,$ifilecontents) = @_; + # Bi-directional synchronization + open( I, "< " . $file ) || die "Could not open $file for reading"; + local $/; + binmode I; + $filecontents = ; + close I; + if ( open(I, "< " . $ifile) ) { + local $/; + binmode I; + $ifilecontents = ; + close I; + $copy = fileCompare($file, $ifile); + $knowdiff = 0, + } else { + $copy = -1; + $knowdiff = 1; + } + + if ( $knowdiff || ($filecontents ne $ifilecontents) ) { + if ( $copy > 0 && !$oneway) { + my $file_dir = dirname($file); + mkpath $file_dir, !$quiet unless(-e $file_dir); + open(O, "> " . $file) || die "Could not open $file for writing (no write permission?)"; + local $/; + binmode O; + print O $ifilecontents; + close O; + utime time, (stat($ifile))[9], $file; + return 1; + } elsif ( $copy < 0 ) { + my $ifile_dir = dirname($ifile); + mkpath $ifile_dir, !$quiet unless(-e $ifile_dir); + open(O, "> " . $ifile) || die "Could not open $ifile for writing (no write permission?)"; + local $/; + binmode O; + print O $filecontents; + close O; + utime time, (stat($file))[9], $ifile; + return 1; + } + } + return 0; +} + +###################################################################### +# Syntax: symlinkFile(file, ifile) +# Params: file, string, filename to create "symlink" for +# ifile, string, destination name of symlink +# +# Purpose: File is symlinked to ifile (or copied if filesystem doesn't +# support symlink). +# Returns: 1 on success, else 0. +###################################################################### +sub symlinkFile +{ + my ($file,$ifile) = @_; + + if ($isunix) { + print "symlink created for $file " unless $quiet; + if ( $force_relative && ($ifile =~ /^$basedir/)) { + my $t = getcwd(); + my $c = -1; + my $p = "../"; + $t =~ s-^$basedir/--; + $p .= "../" while( ($c = index( $t, "/", $c + 1)) != -1 ); + $file =~ s-^$basedir/-$p-; + print " ($file)\n" unless $quiet; + } + print "\n" unless $quiet; + return symlink($file, $ifile); + } + return copyFile($file, $ifile); +} + +###################################################################### +# Syntax: findFiles(dir, match, descend) +# Params: dir, string, directory to search for name +# match, string, regular expression to match in dir +# descend, integer, 0 = non-recursive search +# 1 = recurse search into subdirectories +# +# Purpose: Finds files matching a regular expression. +# Returns: List of matching files. +# +# Examples: +# findFiles("/usr","\.cpp$",1) - finds .cpp files in /usr and below +# findFiles("/tmp","^#",0) - finds #* files in /tmp +###################################################################### +sub findFiles { + my ($dir,$match,$descend) = @_; + my ($file,$p,@files); + local(*D); + $dir =~ s=\\=/=g; + ($dir eq "") && ($dir = "."); + if ( opendir(D,$dir) ) { + if ( $dir eq "." ) { + $dir = ""; + } else { + ($dir =~ /\/$/) || ($dir .= "/"); + } + foreach $file ( sort readdir(D) ) { + next if ( $file =~ /^\.\.?$/ ); + $p = $file; + ($file =~ /$match/) && (push @files, $p); + if ( $descend && -d $p && ! -l $p ) { + push @files, &findFiles($p,$match,$descend); + } + } + closedir(D); + } + return @files; +} + +# -------------------------------------------------------------------- +# "main" function +# -------------------------------------------------------------------- + +while ( @ARGV ) { + my $var = 0; + my $val = 0; + + #parse + my $arg = shift @ARGV; + if ($arg eq "-h" || $arg eq "-help" || $arg eq "?") { + $var = "show_help"; + $val = "yes"; + } elsif($arg eq "-copy") { + $var = "copy"; + $val = "yes"; + } elsif($arg eq "-o" || $arg eq "-outdir") { + $var = "output"; + $val = shift @ARGV; + } elsif($arg eq "-showonly" || $arg eq "-remove-stale" || $arg eq "-windows" || + $arg eq "-relative" || $arg eq "-check-includes") { + $var = substr($arg, 1); + $val = "yes"; + } elsif($arg =~ /^-no-(.*)$/) { + $var = $1; + $val = "no"; + #these are for commandline compat + } elsif($arg eq "-inc") { + $var = "output"; + $val = shift @ARGV; + } elsif($arg eq "-module") { + $var = "module"; + $val = shift @ARGV; + } elsif($arg eq "-separate-module") { + $var = "separate-module"; + $val = shift @ARGV; + } elsif($arg eq "-show") { + $var = "showonly"; + $val = "yes"; + } elsif($arg eq "-quiet") { + $var = "quiet"; + $val = "yes"; + } elsif($arg eq "-base-dir") { + # skip, it's been dealt with at the top of the file + shift @ARGV; + next; + } elsif("$arg" eq "-outsubdir") { + $var = "outsubdir"; + $val = shift @ARGV; + } elsif("$arg" eq "-public") { + $var = "public"; + $val = "yes"; + } elsif("$arg" eq "-oneway") { + $var = "oneway"; + $val = "yes"; + } + + #do something + if(!$var || $var eq "show_help") { + print "Unknown option: $arg\n\n" if(!$var); + showUsage(); + } elsif ($var eq "copy") { + if($val eq "yes") { + $copy_headers++; + } elsif($showonly) { + $copy_headers--; + } + } elsif ($var eq "showonly") { + if($val eq "yes") { + $showonly++; + } elsif($showonly) { + $showonly--; + } + } elsif ($var eq "quiet") { + if($val eq "yes") { + $quiet++; + } elsif($quiet) { + $quiet--; + } + } elsif ($var eq "check-includes") { + if($val eq "yes") { + $check_includes++; + } elsif($check_includes) { + $check_includes--; + } + } elsif ($var eq "remove-stale") { + if($val eq "yes") { + $remove_stale++; + } elsif($remove_stale) { + $remove_stale--; + } + } elsif ($var eq "windows") { + if($val eq "yes") { + $force_win++; + } elsif($force_win) { + $force_win--; + } + } elsif ($var eq "relative") { + if($val eq "yes") { + $force_relative++; + } elsif($force_relative) { + $force_relative--; + } + } elsif ("$var" eq "public") { + $create_private_headers = ("$val" eq "yes" ? 0 : 1); + } elsif ("$var" eq "oneway") { + $oneway = ("$val" eq "yes" ? 1 : 0); + } elsif ("$var" eq "outsubdir") { + $out_subdir = $val; + } elsif ($var eq "module") { + print "module :$val:\n" unless $quiet; + die "No such module: $val" unless(defined $modules{$val}); + push @modules_to_sync, $val; + } elsif ($var eq "separate-module") { + my ($module, $prodir, $headerdir) = split(/:/, $val); + $modules{$module} = $prodir; + push @modules_to_sync, $module; + $moduleheaders{$module} = $headerdir; + $create_uic_class_map = 0; + $create_private_headers = 0; + } elsif ($var eq "output") { + my $outdir = $val; + if(checkRelative($outdir)) { + $out_basedir = getcwd(); + chomp $out_basedir; + $out_basedir .= "/" . $outdir; + } else { + $out_basedir = $outdir; + } + # \ -> / + $out_basedir =~ s=\\=/=g; + } +} +@modules_to_sync = keys(%modules) if($#modules_to_sync == -1); + +$isunix = checkUnix; #cache checkUnix + +# create path +mkpath "$out_basedir/include", !$quiet; +mkpath "$out_basedir/$out_subdir/Qt", !$quiet; + +my @ignore_headers = (); +my $class_lib_map_contents = ""; +my @ignore_for_master_contents = ( "qt.h", "qpaintdevicedefs.h" ); +my @ignore_for_include_check = ( "qatomic.h" ); +my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qt_windows.h" ); +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; +# 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 my $lib (@modules_to_sync) { + #iteration info + my $dir = $modules{$lib}; + my $pathtoheaders = ""; + $pathtoheaders = $moduleheaders{$lib} if ($moduleheaders{$lib}); + + #information used after the syncing + my $pri_install_classes = ""; + my $pri_install_files = ""; + my $pri_install_pfiles = ""; + + my $libcapitals = $lib; + $libcapitals =~ y/a-z/A-Z/; + my $master_contents = "#ifndef QT_".$libcapitals."_MODULE_H\n#define QT_".$libcapitals."_MODULE_H\n"; + + #get dependencies + if(-e "$dir/" . basename($dir) . ".pro") { + if(open(F, "<$dir/" . basename($dir) . ".pro")) { + while(my $line = ) { + chomp $line; + if($line =~ /^ *QT *\+?= *([^\r\n]*)/) { + foreach(split(/ /, $1)) { + $master_contents .= "#include \n" if($_ eq "core"); + $master_contents .= "#include \n" if($_ eq "gui"); + $master_contents .= "#include \n" if($_ eq "network"); + $master_contents .= "#include \n" if($_ eq "svg"); + $master_contents .= "#include \n" if($_ eq "declarative"); + $master_contents .= "#include \n" if($_ eq "script"); + $master_contents .= "#include \n" if($_ eq "scripttools"); + $master_contents .= "#include \n" if($_ eq "qt3support"); + $master_contents .= "#include \n" if($_ eq "sql"); + $master_contents .= "#include \n" if($_ eq "xml"); + $master_contents .= "#include \n" if($_ eq "xmlpatterns"); + $master_contents .= "#include \n" if($_ eq "opengl"); + $master_contents .= "#include \n" if($_ eq "openvg"); + } + } + } + close(F); + } + } + + #remove the old files + if($remove_stale) { + my @subdirs = ("$out_basedir/$out_subdir/$lib"); + foreach my $subdir (@subdirs) { + if (opendir DIR, $subdir) { + while(my $t = readdir(DIR)) { + my $file = "$subdir/$t"; + if(-d $file) { + push @subdirs, $file unless($t eq "." || $t eq ".."); + } else { + my @files = ($file); + #push @files, "$out_basedir/$out_subdir/Qt/$t" if(-e "$out_basedir/$out_subdir/Qt/$t"); + foreach my $file (@files) { + my $remove_file = 0; + if(open(F, "<$file")) { + while(my $line = ) { + chomp $line; + if($line =~ /^\#include \"([^\"]*)\"$/) { + my $include = $1; + $include = $subdir . "/" . $include unless(substr($include, 0, 1) eq "/"); + $remove_file = 1 unless(-e $include); + } else { + $remove_file = 0; + last; + } + } + close(F); + unlink $file if($remove_file); + } + } + } + } + closedir DIR; + } + + } + } + + #create the new ones + foreach my $current_dir (split(/;/, $dir)) { + my $headers_dir = $current_dir; + $headers_dir .= "/$pathtoheaders" if ($pathtoheaders); + #calc subdirs + my @subdirs = ($headers_dir); + foreach my $subdir (@subdirs) { + opendir DIR, $subdir or next; + while(my $t = readdir(DIR)) { + push @subdirs, "$subdir/$t" if(-d "$subdir/$t" && !($t eq ".") && + !($t eq "..") && !($t eq ".obj") && + !($t eq ".moc") && !($t eq ".rcc") && + !($t eq ".uic") && !($t eq "build")); + } + closedir DIR; + } + + #calc files and "copy" them + foreach my $subdir (@subdirs) { + my @headers = findFiles($subdir, "^[-a-z0-9_]*\\.h\$" , 0); + push @headers, $inject_headers{$subdir} if (defined $inject_headers{$subdir}); + foreach my $header (@headers) { + my $shadow = ($header =~ s/^\*//); + $header = 0 if($header =~ /^ui_.*.h/); + foreach (@ignore_headers) { + $header = 0 if($header eq $_); + } + if($header) { + my $header_copies = 0; + #figure out if it is a public header + my $public_header = $header; + if($public_header =~ /_p.h$/ || $public_header =~ /_pch.h$/) { + $public_header = 0; + } else { + foreach (@ignore_for_master_contents) { + $public_header = 0 if($header eq $_); + } + } + + 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"; + foreach(@classes) { + print "SYMBOL: $_\n"; + } + } else { + my $ts = (stat($iheader))[9]; + #find out all the places it goes.. + my @headers; + if ($public_header) { + @headers = ( "$out_basedir/$out_subdir/$lib/$header" ); + + # write forwarding headers to include/Qt + if ($lib ne "phonon" && $subdir =~ /^$basedir\/src/) { + my $file_name = "$out_basedir/$out_subdir/Qt/$header"; + my $file_op = '>'; + my $header_content = ''; + if (exists $colliding_headers{$file_name}) { + $file_op = '>>'; + } else { + $colliding_headers{$file_name} = 1; + my $warning_msg = 'Inclusion of header files from include/Qt is deprecated.'; + $header_content = "#ifndef QT_NO_QT_INCLUDE_WARN\n" . + " #if defined(__GNUC__)\n" . + " #warning \"$warning_msg\"\n" . + " #elif defined(_MSC_VER)\n" . + " #pragma message(\"WARNING: $warning_msg\")\n" . + " #endif\n". + "#endif\n\n"; + } + $header_content .= '#include "' . "../$lib/$header" . "\"\n"; + open HEADERFILE, $file_op, $file_name or die "unable to open '$file_name' : $!\n"; + print HEADERFILE $header_content; + close HEADERFILE; + } + + foreach my $full_class (@classes) { + my $header_base = basename($header); + # Strip namespaces: + my $class = $full_class; + $class =~ s/^.*:://; +# if ($class =~ m/::/) { +# class =~ s,::,/,g; +# } + $class_lib_map_contents .= "QT_CLASS_LIB($full_class, $lib, $header_base)\n"; + $header_copies++ if(syncHeader("$out_basedir/$out_subdir/$lib/$class", "$out_basedir/$out_subdir/$lib/$header", 0, $ts)); + + # KDE-Compat headers for Phonon + if ($lib eq "phonon") { + $header_copies++ if (syncHeader("$out_basedir/$out_subdir/phonon_compat/Phonon/$class", "$out_basedir/$out_subdir/$lib/$header", 0, $ts)); + } + } + } elsif ($create_private_headers) { + @headers = ( "$out_basedir/$out_subdir/$lib/private/$header" ); + } + foreach(@headers) { #sync them + $header_copies++ if(syncHeader($_, $iheader, $copy_headers, $ts)); + } + + if($public_header) { + #put it into the master file + $master_contents .= "#include \"$public_header\"\n" if(shouldMasterInclude($iheader)); + + #deal with the install directives + if($public_header) { + my $pri_install_iheader = fixPaths($iheader, $current_dir); + foreach my $class (@classes) { + # Strip namespaces: + $class =~ s/^.*:://; +# if ($class =~ m/::/) { +# $class =~ s,::,/,g; +# } + my $class_header = fixPaths("$out_basedir/$out_subdir/$lib/$class", + $current_dir) . " "; + $pri_install_classes .= $class_header + unless($pri_install_classes =~ $class_header); + } + $pri_install_files.= "$pri_install_iheader ";; + } + } + else { + my $pri_install_iheader = fixPaths($iheader, $current_dir); + $pri_install_pfiles.= "$pri_install_iheader ";; + } + } + print "header created for $iheader ($header_copies)\n" if($header_copies > 0 && !$quiet); + } + } + } + } + + # close the master include: + $master_contents .= "#endif\n"; + + unless($showonly) { + my @master_includes; + push @master_includes, "$out_basedir/$out_subdir/$lib/$lib"; + push @master_includes, "$out_basedir/$out_subdir/phonon_compat/Phonon/Phonon" if ($lib eq "phonon"); + foreach my $master_include (@master_includes) { + #generate the "master" include file + my @tmp = split(/;/,$modules{$lib}); + $pri_install_files .= fixPaths($master_include, $tmp[0]) . " "; #get the master file installed too + if($master_include && -e $master_include) { + open MASTERINCLUDE, "<$master_include"; + local $/; + binmode MASTERINCLUDE; + my $oldmaster = ; + close MASTERINCLUDE; + $oldmaster =~ s/\r//g; # remove \r's , so comparison is ok on all platforms + $master_include = 0 if($oldmaster eq $master_contents); + } + if($master_include && $master_contents) { + my $master_dir = dirname($master_include); + mkpath $master_dir, !$quiet; + print "header (master) created for $lib\n" unless $quiet; + open MASTERINCLUDE, ">$master_include"; + print MASTERINCLUDE $master_contents; + close MASTERINCLUDE; + } + } + + #handle the headers.pri for each module + my $headers_pri_contents = ""; + $headers_pri_contents .= "SYNCQT.HEADER_FILES = $pri_install_files\n"; + $headers_pri_contents .= "SYNCQT.HEADER_CLASSES = $pri_install_classes\n"; + $headers_pri_contents .= "SYNCQT.PRIVATE_HEADER_FILES = $pri_install_pfiles\n"; + my $headers_pri_file = "$out_basedir/$out_subdir/$lib/headers.pri"; + if(-e $headers_pri_file) { + open HEADERS_PRI_FILE, "<$headers_pri_file"; + local $/; + binmode HEADERS_PRI_FILE; + my $old_headers_pri_contents = ; + close HEADERS_PRI_FILE; + $old_headers_pri_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms + $headers_pri_file = 0 if($old_headers_pri_contents eq $headers_pri_contents); + } + if($headers_pri_file && $master_contents) { + my $headers_pri_dir = dirname($headers_pri_file); + mkpath $headers_pri_dir, !$quiet; + print "headers.pri file created for $lib\n" unless $quiet; + open HEADERS_PRI_FILE, ">$headers_pri_file"; + print HEADERS_PRI_FILE $headers_pri_contents; + close HEADERS_PRI_FILE; + } + } +} +unless($showonly || !$create_uic_class_map) { + my $class_lib_map = "$out_basedir/src/tools/uic/qclass_lib_map.h"; + if(-e $class_lib_map) { + open CLASS_LIB_MAP, "<$class_lib_map"; + local $/; + binmode CLASS_LIB_MAP; + my $old_class_lib_map_contents = ; + close CLASS_LIB_MAP; + $old_class_lib_map_contents =~ s/\r//g; # remove \r's , so comparison is ok on all platforms + $class_lib_map = 0 if($old_class_lib_map_contents eq $class_lib_map_contents); + } + if($class_lib_map) { + my $class_lib_map_dir = dirname($class_lib_map); + mkpath $class_lib_map_dir, !$quiet; + open CLASS_LIB_MAP, ">$class_lib_map"; + print CLASS_LIB_MAP $class_lib_map_contents; + close CLASS_LIB_MAP; + } +} + +if($check_includes) { + for my $lib (keys(%modules)) { + #calc subdirs + my @subdirs = ($modules{$lib}); + foreach my $subdir (@subdirs) { + opendir DIR, $subdir or die "Huh, directory ".$subdir." cannot be opened."; + while(my $t = readdir(DIR)) { + push @subdirs, "$subdir/$t" if(-d "$subdir/$t" && !($t eq ".") && + !($t eq "..") && !($t eq ".obj") && + !($t eq ".moc") && !($t eq ".rcc") && + !($t eq ".uic") && !($t eq "build")); + } + closedir DIR; + } + + foreach my $subdir (@subdirs) { + my $header_skip_qt_module_test = 0; + foreach(@ignore_for_qt_module_check) { + foreach (split(/;/, $_)) { + $header_skip_qt_module_test = 1 if ($subdir =~ /^$_/); + } + } + my @headers = findFiles($subdir, "^[-a-z0-9_]*\\.h\$" , 0); + foreach my $header (@headers) { + my $header_skip_qt_begin_header_test = 0; + my $header_skip_qt_begin_namespace_test = 0; + $header = 0 if($header =~ /^ui_.*.h/); + foreach (@ignore_headers) { + $header = 0 if($header eq $_); + } + if($header) { + my $public_header = $header; + if($public_header =~ /_p.h$/ || $public_header =~ /_pch.h$/) { + $public_header = 0; + } else { + foreach (@ignore_for_master_contents) { + $public_header = 0 if($header eq $_); + } + if($public_header) { + foreach (@ignore_for_include_check) { + $public_header = 0 if($header eq $_); + } + foreach(@ignore_for_qt_begin_header_check) { + $header_skip_qt_begin_header_test = 1 if ($header eq $_); + } + foreach(@ignore_for_qt_begin_namespace_check) { + $header_skip_qt_begin_namespace_test = 1 if ($header eq $_); + } + } + } + + my $iheader = $subdir . "/" . $header; + if($public_header) { + if(open(F, "<$iheader")) { + my $qt_module_found = 0; + my $qt_begin_header_found = 0; + my $qt_end_header_found = 0; + my $qt_begin_namespace_found = 0; + my $qt_end_namespace_found = 0; + my $line; + while($line = ) { + chomp $line; + my $output_line = 1; + if($line =~ /^ *\# *pragma (qt_no_included_check|qt_sync_stop_processing)/) { + last; + } elsif($line =~ /^ *\# *include/) { + my $include = $line; + if($line =~ /<.*>/) { + $include =~ s,.*<(.*)>.*,$1,; + } elsif($line =~ /".*"/) { + $include =~ s,.*"(.*)".*,$1,; + } else { + $include = 0; + } + if($include) { + for my $trylib (keys(%modules)) { + if(-e "$out_basedir/$out_subdir/$trylib/$include") { + print "WARNING: $iheader includes $include when it should include $trylib/$include\n"; + } + } + } + } elsif ($header_skip_qt_begin_header_test == 0 and $line =~ /^QT_BEGIN_HEADER\s*$/) { + $qt_begin_header_found = 1; + } elsif ($header_skip_qt_begin_header_test == 0 and $line =~ /^QT_END_HEADER\s*$/) { + $qt_end_header_found = 1; + } elsif ($header_skip_qt_begin_namespace_test == 0 and $line =~ /^QT_BEGIN_NAMESPACE\s*$/) { + $qt_begin_namespace_found = 1; + } elsif ($header_skip_qt_begin_namespace_test == 0 and $line =~ /^QT_END_NAMESPACE\s*$/) { + $qt_end_namespace_found = 1; + } elsif ($header_skip_qt_module_test == 0 and $line =~ /^QT_MODULE\(.*\)\s*$/) { + $qt_module_found = 1; + } + } + if ($header_skip_qt_begin_header_test == 0) { + if ($qt_begin_header_found == 0) { + print "WARNING: $iheader does not include QT_BEGIN_HEADER\n"; + } + + if ($qt_begin_header_found && $qt_end_header_found == 0) { + print "WARNING: $iheader has QT_BEGIN_HEADER but no QT_END_HEADER\n"; + } + } + + if ($header_skip_qt_begin_namespace_test == 0) { + if ($qt_begin_namespace_found == 0) { + print "WARNING: $iheader does not include QT_BEGIN_NAMESPACE\n"; + } + + if ($qt_begin_namespace_found && $qt_end_namespace_found == 0) { + print "WARNING: $iheader has QT_BEGIN_NAMESPACE but no QT_END_NAMESPACE\n"; + } + } + + if ($header_skip_qt_module_test == 0) { + if ($qt_module_found == 0) { + print "WARNING: $iheader does not include QT_MODULE\n"; + } + } + close(F); + } + } + } + } + } + } + } + +exit 0; diff --git a/config.profiles/symbian/implml/qt_copy.implml b/config.profiles/symbian/implml/qt_copy.implml new file mode 100644 index 0000000..53d600e --- /dev/null +++ b/config.profiles/symbian/implml/qt_copy.implml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/config.profiles/symbian/layers.sysdef.xml b/config.profiles/symbian/layers.sysdef.xml new file mode 100644 index 0000000..4c1b6f9 --- /dev/null +++ b/config.profiles/symbian/layers.sysdef.xml @@ -0,0 +1,41 @@ + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config.profiles/symbian/loc.prf b/config.profiles/symbian/loc.prf new file mode 100644 index 0000000..9973903 --- /dev/null +++ b/config.profiles/symbian/loc.prf @@ -0,0 +1,25 @@ + +qtPrepareTool(LRELEASE, lrelease) + +loc.CONFIG = no_link +loc.commands = $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} +loc.output = $${EPOCROOT}epoc32/data/z/resource/qt/translations/${QMAKE_FILE_BASE}.qm +loc.input = TRANSLATIONS +loc.variable_out = PRE_TARGETDEPS + +loc_winscwudeb.CONFIG = no_link +loc_winscwudeb.commands = $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} +loc_winscwudeb.output = $${EPOCROOT}epoc32/release/winscw/udeb/z/resource/qt/translations/${QMAKE_FILE_BASE}.qm +loc_winscwudeb.input = TRANSLATIONS +loc_winscwudeb.variable_out = PRE_TARGETDEPS + +loc_winscwurel.CONFIG = no_link +loc_winscwurel.commands = $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} +loc_winscwurel.output = $${EPOCROOT}epoc32/release/winscw/urel/z/resource/qt/translations/${QMAKE_FILE_BASE}.qm +loc_winscwurel.input = TRANSLATIONS +loc_winscwurel.variable_out = PRE_TARGETDEPS + +QMAKE_EXTRA_COMPILERS += loc +QMAKE_EXTRA_COMPILERS += loc_winscwudeb +QMAKE_EXTRA_COMPILERS += loc_winscwurel + diff --git a/config.profiles/symbian/non_foundation_paths.prf b/config.profiles/symbian/non_foundation_paths.prf new file mode 100644 index 0000000..8074ff7 --- /dev/null +++ b/config.profiles/symbian/non_foundation_paths.prf @@ -0,0 +1,115 @@ +# +# ============================================================================== +# Name : non_foundation_paths.prf +# Part of : +# Interface : None foundation code Path Definitions API for Qt/S60 +# Description : Symbian^3 and onwards specific platform paths +# +# Usage examples: +# +# Note: this file will not added automatically. It needs to be included +# when needed. +# +# Variable usages to add the system include paths +# +# The include paths has to be related to the layer in which your SW +# resides. Thus as an example: a component residing in middleware +# layer should use the MW specific macro. +# +# INCLUDEPATH += $$NON_FOUNDATION_APP_LAYER_SYSTEMINCLUDE +# INCLUDEPATH += $$NON_FOUNDATION_MW_LAYER_SYSTEMINCLUDE +# INCLUDEPATH += $$NON_FOUNDATION_OS_LAYER_SYSTEMINCLUDE +# INCLUDEPATH += $$NON_FOUNDATION_ADAPT_LAYER_SYSTEMINCLUDE +# +# Macros related to exporting non-foundation headers into +# correct place in the new system. +# NON_FOUNDATION_APP_LAYER_EXPORT_PATH +# NON_FOUNDATION_MW_LAYER_EXPORT_PATH +# NON_FOUNDATION_OS_LAYER_EXPORT_PATH +# NON_FOUNDATION_ADAPT_LAYER_EXPORT_PATH +# +# ============================================================================== + +# --------------------------------------- +# Location, where the non-foundation app code should export its headers. +# These are specific to app layer to which the non-foundation code belongs to. +# --------------------------------------- +defineReplace(NON_FOUNDATION_APP_LAYER_EXPORT_PATH) { + return (/epoc32/include/ext/app/$$1) +} + +# --------------------------------------- +# Location, where the non-foundation mw code should export its headers. +# These are specific to mw layer to which the non-foundation code belongs to. +# --------------------------------------- +defineReplace(NON_FOUNDATION_MW_LAYER_EXPORT_PATH) { + return (/epoc32/include/ext/mw/$$1) +} + +# --------------------------------------- +# Location, where the non-foundation os code should export its headers. +# These are specific to os layer to which the non-foundation code belongs to. +# --------------------------------------- +defineReplace(NON_FOUNDATION_OS_LAYER_EXPORT_PATH) { + return (/epoc32/include/ext/os/$$1) +} + +# --------------------------------------- +# Location, where the non-foundation adapt code should export its headers. +# These are specific to adapt layer to which the non-foundation code belongs to. +# --------------------------------------- +# Temporarily commented out to help adaptation side migration +# defineReplace(NON_FOUNDATION_ADAPT_LAYER_EXPORT_PATH) { +# return (/epoc32/include/ext/adapt/$$1) +# } + +# ************************************************************************** +# General comments about the 3 define statements related to include paths. +# It should be enough only to have one of the below macros and one of the include macros +# from platform_paths.hrh. +# No other systemincludes to epoc32/include or subdirectories. +# ************************************************************************** + +# This define statements defines the SYSTEMINCLUDE-line, which is intended to be +# used in the mmp-files that are part of the applications-layer. +# +# Applications layer is the last one in the list, since most likely the most of +# the headers come from middleware or os-layer => thus they are first. + +NON_FOUNDATION_APP_LAYER_SYSTEMINCLUDE = \ + /epoc32/include/ext/app \ + /epoc32/include/ext/mw \ + /epoc32/include/ext/os + +# This define statements defines the SYSTEMINCLUDE-line, which is intended to be +# used in the mmp-files that are part of the middleware-layer. + +NON_FOUNDATION_MW_LAYER_SYSTEMINCLUDE = \ + /epoc32/include/ext/mw \ + /epoc32/include/ext/os + +# This define statements defines the SYSTEMINCLUDE-line, which is intended to be +# used in the mmp-files that are part of the os-layer. + +NON_FOUNDATION_OS_LAYER_SYSTEMINCLUDE = \ + /epoc32/include/ext/os + +# This define statements defines the SYSTEMINCLUDE-line, which is intended to be +# used in the mmp-files that are part of the adapt-layer. +# Temporarily commented out to help adaptation side migration +# NON_FOUNDATION_ADAPT_LAYER_SYSTEMINCLUDE = \ +# /epoc32/include/ext/os \ +# /epoc32/include/ext/adapt + + +# **************************************************************************** +# Definitions to export IBY files to different folders where they will be taken +# to ROM image +# **************************************************************************** + +# Following three definitions are used for exporting IBY files to +# Core image (ROM+ROFS1). IBY files are exported according to their layer. + +defineReplace(NON_FOUNDATION_CORE_ADAPT_LAYER_IBY_EXPORT_PATH) { + return (/epoc32/rom/include/$$1) +} diff --git a/config.profiles/symbian/package_definition.xml b/config.profiles/symbian/package_definition.xml new file mode 100644 index 0000000..f0c6652 --- /dev/null +++ b/config.profiles/symbian/package_definition.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config.profiles/symbian/package_map.xml b/config.profiles/symbian/package_map.xml new file mode 100644 index 0000000..6233095 --- /dev/null +++ b/config.profiles/symbian/package_map.xml @@ -0,0 +1 @@ + diff --git a/config.profiles/symbian/platform_paths.prf b/config.profiles/symbian/platform_paths.prf new file mode 100644 index 0000000..0e2131f --- /dev/null +++ b/config.profiles/symbian/platform_paths.prf @@ -0,0 +1,251 @@ +# +# ============================================================================== +# Name : platform_paths.prf +# Part of : +# Interface : Platform Path Definitions API for Qt/S60 +# Description : Symbian^3 and onwards specific platform paths +# +# Usage examples: +# +# Note: this file gets automatically added to all Qt/S60 projects +# +# Variable usages to add the system include paths +# +# The include paths has to be related to the layer in which your SW +# resides. Thus as an example: a component residing in middleware +# layer should use the MW specific macro. +# +# INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +# INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE +# INCLUDEPATH += $$OS_LAYER_SYSTEMINCLUDE +# +# If there is a need to include public headers of some S60 component, +# various *_EXPORT_PATH macros can be utilized: +# +# INCLUDEPATH += $$OS_LAYER_PUBLIC_EXPORT_PATH(somecomponent) +# +# Variables related to using various parts of stdapis: +# +# To use STLLIB you need to have this in your pro-file: +# +# QMAKE_CXXFLAGS.CW *= $$STLLIB_USAGE_CW_FLAGS +# DEFINES *= $$STLLIB_USAGE_DEFINES +# +# Depending on what module you are using from stdapis you need to have +# one or more of the following variables in your pro-file. +# +# INCLUDEPATH += $$OS_LAYER_LIBC_SYSTEMINCLUDE +# INCLUDEPATH += $$OS_LAYER_GLIB_SYSTEMINCLUDE +# INCLUDEPATH += $$OS_LAYER_SSL_SYSTEMINCLUDE +# INCLUDEPATH += $$OS_LAYER_STDCPP_SYSTEMINCLUDE +# INCLUDEPATH += $$OS_LAYER_BOOST_SYSTEMINCLUDE +# INCLUDEPATH += $$OS_LAYER_DBUS_SYSTEMINCLUDE +# INCLUDEPATH += $$OS_LAYER_LIBUTILITY_SYSTEMINCLUDE +# +# +# +# +# ============================================================================== + +# --------------------------------------- +# Location, where the applications layer specific public headers are exported +# --------------------------------------- + +defineReplace(APP_LAYER_SDK_EXPORT_PATH) { + return (/epoc32/include/app/$$1) +} +defineReplace(APP_LAYER_PUBLIC_EXPORT_PATH) { + return (/epoc32/include/app/$$1) +} + +# --------------------------------------- +# Location, where the applications layer specific platform headers are exported +# --------------------------------------- + +defineReplace(APP_LAYER_DOMAIN_EXPORT_PATH) { + return (/epoc32/include/platform/app/$$1) +} +defineReplace(APP_LAYER_PLATFORM_EXPORT_PATH) { + return (/epoc32/include/platform/app/$$1) +} + +# --------------------------------------- +# Location, where the middleware layer specific public headers are exported +# --------------------------------------- + +defineReplace(MW_LAYER_SDK_EXPORT_PATH) { + return (/epoc32/include/mw/$$1) +} +defineReplace(MW_LAYER_PUBLIC_EXPORT_PATH) { + return (/epoc32/include/mw/$$1) +} + +# --------------------------------------- +# Location, where the middleware layer specific platform headers are exported +# --------------------------------------- + +defineReplace(MW_LAYER_DOMAIN_EXPORT_PATH) { + return (/epoc32/include/platform/mw/$$1) +} +defineReplace(MW_LAYER_PLATFORM_EXPORT_PATH) { + return (/epoc32/include/platform/mw/$$1) +} + +# --------------------------------------- +# Location, where the os layer specific public headers are exported +# --------------------------------------- + +defineReplace(OSEXT_LAYER_SDK_EXPORT_PATH) { + return (/epoc32/include/$$1) +} +# WARNING: If the following path changes see the exists() function around line 219 +defineReplace(OS_LAYER_PUBLIC_EXPORT_PATH) { + return (/epoc32/include/$$1) +} + +# --------------------------------------- +# Location, where the os specific platform headers are exported +# --------------------------------------- + +defineReplace(OSEXT_LAYER_DOMAIN_EXPORT_PATH) { + return (/epoc32/include/platform/$$1) +} +defineReplace(OS_LAYER_PLATFORM_EXPORT_PATH) { + return (/epoc32/include/platform/$$1) +} + +# --------------------------------------- +# General comments about the 3 define statements related to include paths: +# 1) the /epoc32/include/oem is now defined there for backward compability. +# Once the directory is empty, the directory will be removed. However this +# enables us to ensure that if you use these define statements => you do +# not have to remove the statements later on, when the directory no longer +# exists. +# 2) These statements should be enough in normal cases. For certain specific +# cases you might need to add some specific directory from /epoc32/include +# (for instance /epoc32/include/ecom). +# In normal cases the include staments in code should be relative to one of +# the system include paths, but in certain cases, the included files requires +# that the subdirectory is also part of the system include paths. +# --------------------------------------- + +# This variable defines the include paths, which are intended to be +# used in the pro-files that are part of the applications-layer. It includes all +# the needed directories from the /epoc32/include, that are valid ones for the +# application-layer components. +# +# Applications layer is the last one in the list, since most likely the most of +# the headers come from middleware or os-layer => thus they are first. + +APP_LAYER_SYSTEMINCLUDE = \ + /epoc32/include \ + /epoc32/include/mw \ + /epoc32/include/platform/mw \ + /epoc32/include/platform \ + /epoc32/include/app \ + /epoc32/include/platform/app \ + /epoc32/include/platform/loc \ + /epoc32/include/platform/mw/loc \ + /epoc32/include/platform/app/loc \ + /epoc32/include/platform/loc/sc \ + /epoc32/include/platform/mw/loc/sc \ + /epoc32/include/platform/app/loc/sc + +# This define statements defines the include paths, which are intended to be +# used in the pro-files that are part of the middleware-layer. It includes all +# the needed directories from the /epoc32/include, that are valid ones for the +# middleware-layer components. + +MW_LAYER_SYSTEMINCLUDE = \ + /epoc32/include \ + /epoc32/include/mw \ + /epoc32/include/platform/mw \ + /epoc32/include/platform \ + /epoc32/include/platform/loc \ + /epoc32/include/platform/mw/loc \ + /epoc32/include/platform/loc/sc \ + /epoc32/include/platform/mw/loc/sc + +# This define statements defines the include paths, which are intended to be +# used in the pro-files that are part of the osextensions-layer. It includes all +# the needed directories from the /epoc32/include, that are valid ones for the +# os-layer components. + +OS_LAYER_SYSTEMINCLUDE = \ + /epoc32/include \ + /epoc32/include/platform \ + /epoc32/include/platform/loc \ + /epoc32/include/platform/loc/sc + +# This define statements defines the include paths, which are intended to be +# used in the pro-files that are part of the os-layer. This is intended +# to be only used by those components which need to use in their mmp-file either +# kern_ext.mmh or nkern_ext.mmh. Reason is that those +# 2 files already contain the /epoc32/include as system include path. + +OS_LAYER_KERNEL_SYSTEMINCLUDE = \ + /epoc32/include/platform + + +# --------------------------------------- +# Definitions that also define the systeminclude paths for various +# part of stdapis. Append to INCLUDEPATH in pro-file. +# --------------------------------------- + +OS_LAYER_LIBC_SYSTEMINCLUDE = $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis) \ + $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/sys) + +OS_LAYER_GLIB_SYSTEMINCLUDE = $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/glib-2.0) \ + $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/glib-2.0/glib) \ + $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/glib-2.0/gObject) + +OS_LAYER_SSL_SYSTEMINCLUDE = $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/openssl) + +# stlportv5 is preferred over stlport as it has the throwing version of operator new +exists($${EPOCROOT}epoc32/include/stdapis/stlport) \ +:!exists($${EPOCROOT}epoc32/include/stdapis/stlportv5) { + OS_LAYER_STDCPP_SYSTEMINCLUDE = $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/stlport) +} else { + OS_LAYER_STDCPP_SYSTEMINCLUDE = $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/stlportv5) +} + +OS_LAYER_BOOST_SYSTEMINCLUDE = $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/boost) + +OS_LAYER_DBUS_SYSTEMINCLUDE = $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/dbus-1.0) \ + $$OS_LAYER_PUBLIC_EXPORT_PATH(stdapis/dbus-1.0/dbus) + +OS_LAYER_LIBUTILITY_SYSTEMINCLUDE = $$OS_LAYER_PLATFORM_EXPORT_PATH(stdapis/utility) + +# --------------------------------------- +# Definitions to export IBY files to different folders where they will be taken +# to ROM image +# --------------------------------------- + +defineReplace(CORE_APP_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/core/app/$$1) +} +defineReplace(CORE_MW_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/core/mw/$$1) +} +defineReplace(CORE_OSEXT_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/core/os/$$1) +} +defineReplace(CORE_OS_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/core/os/$$1) +} +defineReplace(CORE_TOOLS_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/core/tools/$$1) +} +defineReplace(CORE_ADAPT_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/$$1) +} +defineReplace(CUSTOMER_VARIANT_APP_LAYER_IBY_EXPORT_PATH) { + return(/epoc32/rom/include/customervariant/app/$$1) +} + +# You need to define the following in pro-file, if you are using the stllib: +# QMAKE_CXXFLAGS.CW *= $$STLLIB_USAGE_CW_FLAGS +# DEFINES *= $$STLLIB_USAGE_DEFINES +STLLIB_USAGE_CW_FLAGS = "-wchar_t on" +STLLIB_USAGE_DEFINES = _WCHAR_T_DECLARED + diff --git a/config.profiles/symbian/qt.conf b/config.profiles/symbian/qt.conf new file mode 100644 index 0000000..29dfa88 --- /dev/null +++ b/config.profiles/symbian/qt.conf @@ -0,0 +1,6 @@ +[Paths] +Data = $(EPOCROOT)epoc32/tools/qt +Headers = $(EPOCROOT)epoc32/include/mw +Binaries = $(EPOCROOT)epoc32/tools +Prefix = $(EPOCROOT)sf/mw/qt + diff --git a/config.profiles/symbian/qt.iby b/config.profiles/symbian/qt.iby new file mode 100644 index 0000000..2b3be0a --- /dev/null +++ b/config.profiles/symbian/qt.iby @@ -0,0 +1,118 @@ +#ifndef QT_IBY +#define QT_IBY + +#include + +#warning("qt.iby: hack - BINARY_SELECTION_ORDER really needs to be at the baseport/device level as it depends on the device type"); +BINARY_SELECTION_ORDER ARMV6,ARMV5 // hack - this really needs to be at the baseport/device level as it depends on the device type + +file=ABI_DIR\BUILD_DIR\QtCore.dll SHARED_LIB_DIR\QtCore.dll +file=ABI_DIR\BUILD_DIR\QtGui.dll SHARED_LIB_DIR\QtGui.dll +file=ABI_DIR\BUILD_DIR\QtOpenVG.dll SHARED_LIB_DIR\QtOpenVG.dll +file=ABI_DIR\BUILD_DIR\QtSvg.dll SHARED_LIB_DIR\QtSvg.dll +file=ABI_DIR\BUILD_DIR\QtSql.dll SHARED_LIB_DIR\QtSql.dll +file=ABI_DIR\BUILD_DIR\QtXml.dll SHARED_LIB_DIR\QtXml.dll +file=ABI_DIR\BUILD_DIR\QtNetwork.dll SHARED_LIB_DIR\QtNetwork.dll +file=ABI_DIR\BUILD_DIR\QtScript.dll SHARED_LIB_DIR\QtScript.dll +file=ABI_DIR\BUILD_DIR\QtTest.dll SHARED_LIB_DIR\QtTest.dll +file=ABI_DIR\BUILD_DIR\QtWebKit.dll SHARED_LIB_DIR\QtWebKit.dll +file=ABI_DIR\BUILD_DIR\phonon.dll SHARED_LIB_DIR\phonon.dll +file=ABI_DIR\BUILD_DIR\QtMultimedia.dll SHARED_LIB_DIR\QtMultimedia.dll +file=ABI_DIR\BUILD_DIR\QtXmlPatterns.dll SHARED_LIB_DIR\QtXmlPatterns.dll +file=ABI_DIR\BUILD_DIR\QtDeclarative.dll SHARED_LIB_DIR\QtDeclarative.dll +file=ABI_DIR\BUILD_DIR\QtOpenGL.dll SHARED_LIB_DIR\QtOpenGL.dll + +// imageformats +file=ABI_DIR\BUILD_DIR\qgif.dll SHARED_LIB_DIR\qgif.dll +file=ABI_DIR\BUILD_DIR\qico.dll SHARED_LIB_DIR\qico.dll +file=ABI_DIR\BUILD_DIR\qjpeg.dll SHARED_LIB_DIR\qjpeg.dll +file=ABI_DIR\BUILD_DIR\qmng.dll SHARED_LIB_DIR\qmng.dll +file=ABI_DIR\BUILD_DIR\qsvg.dll SHARED_LIB_DIR\qsvg.dll +file=ABI_DIR\BUILD_DIR\qtiff.dll SHARED_LIB_DIR\qtiff.dll + +// codecs +file=ABI_DIR\BUILD_DIR\qcncodecs.dll SHARED_LIB_DIR\qcncodecs.dll +file=ABI_DIR\BUILD_DIR\qjpcodecs.dll SHARED_LIB_DIR\qjpcodecs.dll +file=ABI_DIR\BUILD_DIR\qkrcodecs.dll SHARED_LIB_DIR\qkrcodecs.dll +file=ABI_DIR\BUILD_DIR\qtwcodecs.dll SHARED_LIB_DIR\qtwcodecs.dll + +// iconengines +file=ABI_DIR\BUILD_DIR\qsvgicon.dll SHARED_LIB_DIR\qsvgicon.dll + +// Phonon MMF backend +// This is commented out by default, as normally Helix backend will be used. +// If the Helix backend is present, it will override MMF backend, so make sure to remove it from +// image creation in addition to uncommenting the following lines if you want to use MMF backend. +//file=ABI_DIR\BUILD_DIR\phonon_mmf.dll SHARED_LIB_DIR\phonon_mmf.dll +//data=\epoc32\data\z\resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin + +// QtMultimedia audio backend +file=ABI_DIR\BUILD_DIR\qaudio.dll SHARED_LIB_DIR\qaudio.dll + +// graphicssystems +file=ABI_DIR\BUILD_DIR\qvggraphicssystem.dll SHARED_LIB_DIR\qvggraphicssystem.dll +file=ABI_DIR\BUILD_DIR\qglgraphicssystem.dll SHARED_LIB_DIR\qglgraphicssystem.dll + +// bearer +file=ABI_DIR\BUILD_DIR\qsymbianbearer.dll SHARED_LIB_DIR\qsymbianbearer.dll + +// S60 version compatibility plugins for 5.0 (3.1 and 3.2 devices are never likely to have this in ROM, +// so don't bother including those plugins +file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll SHARED_LIB_DIR\qts60plugin_5_0.dll + +file=ABI_DIR\BUILD_DIR\qtactilefeedback.dll SHARED_LIB_DIR\qtactilefeedback.dll + +S60_APP_RESOURCE(s60main) + +// imageformats stubs +data=\epoc32\data\z\resource\qt\plugins\imageformats\qgif.qtplugin resource\qt\plugins\imageformats\qgif.qtplugin +data=\epoc32\data\z\resource\qt\plugins\imageformats\qico.qtplugin resource\qt\plugins\imageformats\qico.qtplugin +data=\epoc32\data\z\resource\qt\plugins\imageformats\qjpeg.qtplugin resource\qt\plugins\imageformats\qjpeg.qtplugin +data=\epoc32\data\z\resource\qt\plugins\imageformats\qmng.qtplugin resource\qt\plugins\imageformats\qmng.qtplugin +data=\epoc32\data\z\resource\qt\plugins\imageformats\qsvg.qtplugin resource\qt\plugins\imageformats\qsvg.qtplugin +data=\epoc32\data\z\resource\qt\plugins\imageformats\qtiff.qtplugin resource\qt\plugins\imageformats\qtiff.qtplugin + +// codecs stubs +data=\epoc32\data\z\resource\qt\plugins\codecs\qcncodecs.qtplugin resource\qt\plugins\codecs\qcncodecs.qtplugin +data=\epoc32\data\z\resource\qt\plugins\codecs\qjpcodecs.qtplugin resource\qt\plugins\codecs\qjpcodecs.qtplugin +data=\epoc32\data\z\resource\qt\plugins\codecs\qkrcodecs.qtplugin resource\qt\plugins\codecs\qkrcodecs.qtplugin +data=\epoc32\data\z\resource\qt\plugins\codecs\qtwcodecs.qtplugin resource\qt\plugins\codecs\qtwcodecs.qtplugin + +// iconengines stubs +data=\epoc32\data\z\resource\qt\plugins\iconengines\qsvgicon.qtplugin resource\qt\plugins\iconengines\qsvgicon.qtplugin + +// qml import plugins +file=ABI_DIR\BUILD_DIR\qmlwebkitplugin.dll SHARED_LIB_DIR\qmlwebkitplugin.dll +file=ABI_DIR\BUILD_DIR\qmlfolderlistmodelplugin.dll SHARED_LIB_DIR\qmlfolderlistmodelplugin.dll +file=ABI_DIR\BUILD_DIR\qmlgesturesplugin.dll SHARED_LIB_DIR\qmlgesturesplugin.dll +file=ABI_DIR\BUILD_DIR\qmlparticlesplugin.dll SHARED_LIB_DIR\qmlparticlesplugin.dll + +data=\epoc32\data\z\resource\qt\imports\QtWebKit\qmlwebkitplugin.qtplugin resource\qt\imports\QtWebKit\qmlwebkitplugin.qtplugin +data=\epoc32\data\z\resource\qt\imports\Qt\labs\folderlistmodel\qmlfolderlistmodelplugin.qtplugin resource\qt\imports\Qt\labs\folderlistmodel\qmlfolderlistmodelplugin.qtplugin +data=\epoc32\data\z\resource\qt\imports\Qt\labs\gestures\qmlgesturesplugin.qtplugin resource\qt\imports\Qt\labs\gestures\qmlgesturesplugin.qtplugin +data=\epoc32\data\z\resource\qt\imports\Qt\labs\particles\qmlparticlesplugin.qtplugin resource\qt\imports\Qt\labs\particles\qmlparticlesplugin.qtplugin + +data=\epoc32\data\z\resource\qt\imports\QtWebKit\qmldir resource\qt\imports\QtWebKit\qmldir +data=\epoc32\data\z\resource\qt\imports\Qt\labs\folderlistmodel\qmldir resource\qt\imports\Qt\labs\folderlistmodel\qmldir +data=\epoc32\data\z\resource\qt\imports\Qt\labs\gestures\qmldir resource\qt\imports\Qt\labs\gestures\qmldir +data=\epoc32\data\z\resource\qt\imports\Qt\labs\particles\qmldir resource\qt\imports\Qt\labs\particles\qmldir + +// QtMultimedia audio backend +data=\epoc32\data\qt\qtlibspluginstubs\qaudio.qtplugin resource\qt\plugins\audio\qaudio.qtplugin + +// graphicssystems +data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin +data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin + +// bearer stub +data=\epoc32\data\z\resource\qt\plugins\bearer\qsymbianbearer.qtplugin resource\qt\plugins\bearer\qsymbianbearer.qtplugin + +// feedback +data=\epoc32\data\z\resource\qt\plugins\feedback\qtactilefeedback.qtplugin resource\qt\plugins\feedback\qtactilefeedback.qtplugin + +// Stub sis file +data=ZSYSTEM\install\qt_stub.sis System\Install\qt_stub.sis +data=ZSYSTEM\install\qtwebkit_stub.sis System\Install\qtwebkit_stub.sis + +#endif // __QT_IBY__ + diff --git a/config.profiles/symbian/qtconfig.flm b/config.profiles/symbian/qtconfig.flm new file mode 100644 index 0000000..61ee6e6 --- /dev/null +++ b/config.profiles/symbian/qtconfig.flm @@ -0,0 +1,88 @@ +# /**************************************************************************** +# ** +# ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +# ** Contact: +# ** +# ****************************************************************************/ + +# FLM to build Qt tools. + +QT_ROOT:= ../.. +TARGETDIR:=$(EPOCROOT)/$(INSTALLPATH) +MKSPECDIR:=$(EPOCROOT)/$(INSTALLPATH)/qt +SOURCEDIR:=$(EXTENSION_ROOT)/$(QT_ROOT)/bin +TOOLSSRCDIR:=$(EXTENSION_ROOT)/$(QT_ROOT)/src/tools +LANGUAGETOOLDIR:=$(EXTENSION_ROOT)/$(QT_ROOT)/tools/linguist +CONFIGURE_APP:=configure$(DOTEXE) + +$(call makepath,$(TARGETDIR)) + +ifneq ($(filter linux,$(HOSTPLATFORM)),) +PLATFORM:=$(PLATFORM.LINUX) +else +PLATFORM:=$(PLATFORM.WIN32) +endif + +TARGET_TOOLS:=$(TARGETDIR)/qmake$(DOTEXE) $(TARGETDIR)/moc$(DOTEXE) $(TARGETDIR)/rcc$(DOTEXE) $(TARGETDIR)/uic$(DOTEXE) $(TARGETDIR)/lrelease$(DOTEXE) +QT_TOOLS:= $(TOOLSSRCDIR)/uic $(TOOLSSRCDIR)/moc $(TOOLSSRCDIR)/rcc $(LANGUAGETOOLDIR)/lrelease +SOURCE_TOOLS:=$(SOURCEDIR)/qmake$(DOTEXE) $(SOURCEDIR)/moc$(DOTEXE) $(SOURCEDIR)/rcc$(DOTEXE) $(SOURCEDIR)/uic$(DOTEXE) $(SOURCEDIR)/lrelease$(DOTEXE) + +define QtConfiguration +ifneq ($(filter linux,$(HOSTPLATFORM)),) +$(TARGET_TOOLS): $(QT_TOOLS) +else +$(TARGET_TOOLS): $(SOURCEDIR)/qmake$(DOTEXE) +endif + $(call startrule,qtconf_deploy) \ + $(GNUCP) $(SOURCEDIR)/$$(notdir $$@) $$@ \ + $(call endrule,qtconf_deploy) + +ifneq ($(filter linux,$(HOSTPLATFORM)),) +$(QT_TOOLS): $(TOOLSSRCDIR)/bootstrap + $(call startrule,qtconf_tools_build) \ + cd $$@; \ + $(GNUMAKE38); \ + cd .. \ + $(call endrule,qtconf_tools_build) + +$(TOOLSSRCDIR)/bootstrap:$(SOURCEDIR)/qmake$(DOTEXE) + $(call startrule,qtconf_bootstrap_build) \ + cd $(TOOLSSRCDIR)/bootstrap; \ + $(GNUMAKE38); \ + cd .. \ + $(call endrule,qtconf_bootstrap_build) +endif + + +$(SOURCEDIR)/qmake$(DOTEXE): $(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP) + $(call startrule,qtconf) \ + cd $(EXTENSION_ROOT)/$(QT_ROOT) && unset INCLUDE && unset LIB && $(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP) -platform $(PLATFORM) -xplatform $(XPLATFORM) $(OPTIONS) \ + $(call endrule,qtconf) + $(call startrule,headerexport) \ + cd $(EXTENSION_ROOT)/$(QT_ROOT)/config.profiles/symbian && \ + perl headerexport -base-dir $(EXTENSION_ROOT)/$(QT_ROOT) -copy -oneway -outdir $(EPOCROOT)/epoc32/include/ -outsubdir mw + $(call endrule,headerexport) + $(call startrule,mkspecexport) \ + $(GNUCP) -R $(EXTENSION_ROOT)/$(QT_ROOT)/mkspecs $(MKSPECDIR) + $(call endrule,mkspecexport) +endef + +# Here a variable named "done_" gets created +GUARD:=done_$(call sanitise,$(TARGETDIR)/qmake$(DOTEXE)) +# If variable "done_..." not set, set it to 1, so that +# UREL and UDEB do not execute makesis twice on the same target +ifeq ($($(GUARD)),) +$(GUARD):=1 +ifneq ($(filter linux,$(HOSTPLATFORM)),) +EXPORT:: $(QT_TOOLS) $(TARGET_TOOLS) +else +EXPORT:: $(TARGET_TOOLS) +endif +$(eval $(call QtConfiguration)) +$(eval $(call whatmacro,$(TARGET_TOOLS))) +ifeq ($(OSTYPE),unix) +$(eval $(call GenerateStandardCleanTarget,$(QT_TOOLS) $(TARGET_TOOLS) $(SOURCE_TOOLS),$(TARGETDIR))) +else +$(eval $(call GenerateStandardCleanTarget,$(TARGET_TOOLS) $(SOURCE_TOOLS),$(TARGETDIR))) +endif +endif diff --git a/config.profiles/symbian/qtconfig.xml b/config.profiles/symbian/qtconfig.xml new file mode 100644 index 0000000..c2244d6 --- /dev/null +++ b/config.profiles/symbian/qtconfig.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/config.profiles/symbian/sysdef_1_5_1.dtd b/config.profiles/symbian/sysdef_1_5_1.dtd new file mode 100644 index 0000000..2defd21 --- /dev/null +++ b/config.profiles/symbian/sysdef_1_5_1.dtd @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config.profiles/symbian/translations/qt_ar.ts b/config.profiles/symbian/translations/qt_ar.ts new file mode 100644 index 0000000..f44dc98 --- /dev/null +++ b/config.profiles/symbian/translations/qt_ar.ts @@ -0,0 +1,7821 @@ + + + + + AudioOutput + + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + + + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + + + + + Revert back to device '%1' + + + + + CloseButton + + + Close Tab + + + + + PPDOptionsModel + + Name + الإسم + + + + Phonon:: + + + Notifications + + + + + Music + + + + + Video + + + + + Communication + + + + + Games + + + + + Accessibility + + + + + Phonon::Gstreamer::Backend + + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + + + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + + + + + Phonon::Gstreamer::MediaObject + + + Cannot start playback. + +Check your Gstreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + + + + + + + + + + + + Could not open media source. + + + + + Invalid source type. + + + + + Could not locate media source. + + + + + Could not open audio device. The device is already in use. + + + + + Could not decode media source. + + + + + Phonon::VolumeSlider + + + + Volume: %1% + + + + + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + + + + + Q3Accel + + + %1, %2 not defined + + + + + Ambiguous %1 not handled + + + + + Q3DataTable + + + True + صحيح + + + + False + خاطئ + + + + Insert + إدراج + + + + Update + تحديث + + + + Delete + حذف + + + + Q3FileDialog + + + Copy or Move a File + نسخ أو تحريك ملفّ + + + + Read: %1 + قراءة: %1 + + + + + Write: %1 + كتابة: %1 + + + + + Cancel + إلغاء + + + + + + + All Files (*) + جميع الملفّات (*) + + + + Name + الإسم + + + + Size + السّعة + + + + Type + الطّراز + + + + Date + التّاريخ + + + + Attributes + الخاصّيات + + + + + &OK + &موافقة + + + + Look &in: + بحث &في: + + + + + + File &name: + إ&سم الملفّ: + + + + File &type: + &طراز الملفّ: + + + + Back + رجوع + + + + One directory up + دليل للأعلى + + + + Create New Folder + صنع دليل جديد + + + + List View + معاينة بالقائمة + + + + Detail View + معاينة مفصّلة + + + + Preview File Info + عرض مقدّم لمعلومات الملفّ + + + + Preview File Contents + عرض مقدّم لمحتويات الملفّ + + + + Read-write + قراءة-كتابة + + + + Read-only + قراءة فقط + + + + Write-only + كتابة فقط + + + + Inaccessible + مستحيل التّوصّل إليه + + + + Symlink to File + وصل رمزي لملفّ + + + + Symlink to Directory + وصل رمزي لدليل + + + + Symlink to Special + وصل رمزي لملفّ خاصّ + + + + File + ملفّ + + + + Dir + دليل + + + + Special + ملفّ خاصّ + + + + + + Open + فتح + + + + + Save As + حفظ تحت + + + + + + &Open + &فتح + + + + + &Save + &حفظ + + + + &Rename + ت&غيير الإسم + + + + &Delete + ح&ذف + + + + R&eload + إ&عادة التّحميل + + + + Sort by &Name + فرز بال&إسم + + + + Sort by &Size + فرز بالسّ&عة + + + + Sort by &Date + فرز بالتّا&ريخ + + + + &Unsorted + غير &مفروز + + + + Sort + فرز + + + + Show &hidden files + ع&رض الملفّات المخفية + + + + the file + الملفّ + + + + the directory + الدّليل + + + + the symlink + الوصل الرّمزي + + + + Delete %1 + حذف %1 + + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>هل تريد فعلا حذف %1 "%2"؟</qt> + + + + &Yes + &نعم + + + + &No + &لا + + + + New Folder 1 + دليل جديد 1 + + + + New Folder + دليل جديد + + + + New Folder %1 + دليل جديد %1 + + + + Find Directory + إيجاد الدّليل + + + + + Directories + دلائل + + + + Directory: + دليل: + + + + + Error + خطأ + + + + %1 +File not found. +Check path and filename. + %1 +لم يتمّ إيجاد الملفّ. +تحقّق من المسار و إسم الملفّ. + + + + All Files (*.*) + جميع الملفّات (*.*) + + + + Open + فتح + + + + Select a Directory + انتقاء دليل + + + + Q3LocalFs + + + + Could not read directory +%1 + لم أستطع قراءة الدّليل +%1 + + + + Could not create directory +%1 + لم أستطع صنع الدّليل +%1 + + + + Could not remove file or directory +%1 + لم أستطع نزع الملفّ أو الدّليل +%1 + + + + Could not rename +%1 +to +%2 + لم أستطع إعادة تسمية +%1 +إلى +%2 + + + + Could not open +%1 + لم أستطع فتح +%1 + + + + Could not write +%1 + لم أستطع كتابة +%1 + + + + Q3MainWindow + + + Line up + تصفيف + + + + Customize... + تخصيص... + + + + Q3NetworkProtocol + + + Operation stopped by the user + أوقفت العمليّة من طرف المستعمل + + + + Q3ProgressDialog + + + + Cancel + إلغاء + + + + Q3TabDialog + + + + OK + موافقة + + + + Apply + تطبيق + + + + Help + مساعدة + + + + Defaults + افتراضيات + + + + Cancel + إلغاء + + + + Q3TextEdit + + + &Undo + &تراجع + + + + &Redo + إ&عادة + + + + Cu&t + &قصّ + + + + &Copy + &نسخ + + + + &Paste + ت&لصيق + + + + Clear + محو + + + + + Select All + انتقاء الجميع + + + + Q3TitleBar + + + System + + + + + Restore up + + + + + Minimize + تصغير + + + + Restore down + + + + + Maximize + تكبير + + + + Close + إغلاق + + + + Contains commands to manipulate the window + + + + + Puts a minimized back to normal + + + + + Moves the window out of the way + + + + + Puts a maximized window back to normal + + + + + Makes the window full screen + + + + + Closes the window + + + + + Displays the name of the window and contains controls to manipulate it + + + + + Q3ToolBar + + + More... + أكثر... + + + + Q3UrlOperator + + + + + The protocol `%1' is not supported + المراسم '%1' غير مدعومة + + + + The protocol `%1' does not support listing directories + المراسم '%1' لا تدعم وضع قوائم الدّلائل + + + + The protocol `%1' does not support creating new directories + المراسم '%1' لا تدعم صنع دلائل جديدة + + + + The protocol `%1' does not support removing files or directories + المراسم '%1' لا تدعم نزع الملفّات أو الدّلائل + + + + The protocol `%1' does not support renaming files or directories + المراسم '%1' لا تدعم إعادة تسمية الملفّات أو الدّلائل + + + + The protocol `%1' does not support getting files + المراسم '%1' لا تدعم استخلاص الملفّات + + + + The protocol `%1' does not support putting files + المراسم '%1' لا تدعم وضع الملفّات + + + + + The protocol `%1' does not support copying or moving files or directories + المراسم '%1' لا تدعم نسخ أو تحريك الملفّات أو الدّلائل + + + + + (unknown) + (مجهول) + + + + Q3Wizard + + + &Cancel + &إلغاء + + + + < &Back + < &رجوع + + + + &Next > + ال&تّالي > + + + + &Finish + إ&نهاء + + + + &Help + &مساعدة + + + + QAbstractSocket + + + + + + Host not found + + + + + + + Connection refused + رفض الوصل + + + + Connection timed out + + + + + + + Operation on socket is not supported + + + + + Socket operation timed out + + + + + Socket is not connected + + + + + Network unreachable + + + + + QAbstractSpinBox + + + &Step up + + + + + Step &down + + + + + &Select All + + + + + QApplication + + + QT_LAYOUT_DIRECTION + 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. + RTL + + + + Executable '%1' requires Qt %2, found Qt %3. + البرنامج '%1' يتطلّب Qt %2، تمّ إيجاد Qt %3. + + + + Incompatible Qt Library Error + خطأ: مكتبة Qt غير موافقة + + + + Activate + + + + + Activates the program's main window + + + + + QAxSelect + + + Select ActiveX Control + + + + + OK + موافقة + + + + &Cancel + &إلغاء + + + + COM &Object: + + + + + QCheckBox + + + Uncheck + + + + + Check + + + + + Toggle + + + + + QColorDialog + + + Hu&e: + ال&صّبغة: + + + + &Sat: + التّ&شبّع: + + + + &Val: + ال&قيمة: + + + + &Red: + أ&حمر: + + + + &Green: + أ&خضر: + + + + Bl&ue: + أ&زرق: + + + + A&lpha channel: + قناة أ&لفا: + + + + Select Color + + + + + &Basic colors + الألوان القا&عديّة + + + + &Custom colors + الأل&وان المخصّصة + + + &Define Custom Colors >> + تع&ريف الألوان المخصّصة >> + + + OK + موافقة + + + Cancel + إلغاء + + + + &Add to Custom Colors + الإ&ضافة إلى الألوان المخصّصة + + + Select color + إنتقاء اللّون + + + + QComboBox + + + + Open + فتح + + + + False + خاطئ + + + + True + صحيح + + + + Close + إغلاق + + + + QCoreApplication + + + %1: key is empty + QSystemSemaphore + + + + + %1: unable to make key + QSystemSemaphore + + + + + %1: ftok failed + QSystemSemaphore + + + + + QDB2Driver + + + Unable to connect + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + Unable to set autocommit + + + + + QDB2Result + + + + Unable to execute statement + + + + + Unable to prepare statement + + + + + Unable to bind variable + + + + + Unable to fetch record %1 + + + + + Unable to fetch next + + + + + Unable to fetch first + + + + + QDateTimeEdit + + + AM + + + + + am + + + + + PM + + + + + pm + + + + + QDial + + + QDial + + + + + SpeedoMeter + + + + + SliderHandle + + + + + QDialog + + + What's This? + ما هذا؟ + + + + Done + + + + + QDialogButtonBox + + + + + OK + موافقة + + + + Save + حفظ + + + + &Save + &حفظ + + + + Open + فتح + + + + Cancel + إلغاء + + + + &Cancel + &إلغاء + + + + Close + إغلاق + + + + &Close + إ&غلاق + + + + Apply + تطبيق + + + + Reset + + + + + Help + مساعدة + + + + Don't Save + + + + + Discard + + + + + &Yes + &نعم + + + + Yes to &All + + + + + &No + &لا + + + + N&o to All + + + + + Save All + + + + + Abort + + + + + Retry + + + + + Ignore + + + + + Restore Defaults + + + + + Close without Saving + + + + + &OK + &موافقة + + + + QDirModel + + + Name + الإسم + + + + Size + السّعة + + + + Kind + Match OS X Finder + + + + + Type + All other platforms + الطّراز + + + + Date Modified + + + + + QDockWidget + + + Close + إغلاق + + + + Dock + + + + + Float + + + + + QDoubleSpinBox + + + More + + + + + Less + + + + + QErrorMessage + + + &Show this message again + أ&عرض مجدّداهذاالبلاغ + + + + &OK + &موافقة + + + + Debug Message: + بلاغ تصحيح الأخطاء: + + + + Warning: + إنذار: + + + + Fatal Error: + خطأ قاتل: + + + + QFile + + + + Destination file exists + + + + + Cannot remove source file + + + + + Cannot open %1 for input + + + + + Cannot open for output + + + + + Failure to write block + + + + + Cannot create %1 for output + + + + + QFileDialog + + + + All Files (*) + جميع الملفّات (*) + + + + + Back + رجوع + + + + + List View + معاينة بالقائمة + + + + + Detail View + معاينة مفصّلة + + + + + File + ملفّ + + + + Open + فتح + + + + Save As + حفظ تحت + + + + + + + &Open + &فتح + + + + + &Save + &حفظ + + + + Recent Places + + + + + &Rename + ت&غيير الإسم + + + + &Delete + ح&ذف + + + + Show &hidden files + ع&رض الملفّات المخفية + + + + New Folder + دليل جديد + + + + Find Directory + إيجاد الدّليل + + + + Directories + دلائل + + + + All Files (*.*) + جميع الملفّات (*.*) + + + + + Directory: + دليل: + + + + %1 already exists. +Do you want to replace it? + + + + + %1 +File not found. +Please verify the correct file name was given. + + + + + My Computer + + + + + + Parent Directory + + + + + + Files of type: + + + + + + %1 +Directory not found. +Please verify the correct directory name was given. + + + + + '%1' is write protected. +Do you want to delete it anyway? + + + + + Are sure you want to delete '%1'? + + + + + Could not delete directory. + + + + + Drive + + + + + Unknown + + + + + Show + + + + + + Forward + للأمام + + + + &New Folder + + + + + + &Choose + + + + + Remove + + + + + + File &name: + إ&سم الملفّ: + + + + + Look in: + + + + + + Create New Folder + صنع دليل جديد + + + + QFileSystemModel + + + %1 TB + + + + + %1 GB + + + + + %1 MB + + + + + %1 KB + + + + + %1 bytes + + + + + Invalid filename + + + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + + + + + Name + الإسم + + + + Size + السّعة + + + + Kind + Match OS X Finder + + + + + Type + All other platforms + الطّراز + + + + Date Modified + + + + + My Computer + + + + + Computer + + + + + QFontDatabase + + + + Normal + + + + + + + Bold + + + + + + Demi Bold + + + + + + + Black + + + + + Demi + + + + + + Light + + + + + + Italic + + + + + + Oblique + + + + + Any + + + + + Latin + + + + + Greek + + + + + Cyrillic + + + + + Armenian + + + + + Hebrew + + + + + Arabic + + + + + Syriac + + + + + Thaana + + + + + Devanagari + + + + + Bengali + + + + + Gurmukhi + + + + + Gujarati + + + + + Oriya + + + + + Tamil + + + + + Telugu + + + + + Kannada + + + + + Malayalam + + + + + Sinhala + + + + + Thai + + + + + Lao + + + + + Tibetan + + + + + Myanmar + + + + + Georgian + + + + + Khmer + + + + + Simplified Chinese + + + + + Traditional Chinese + + + + + Japanese + + + + + Korean + + + + + Vietnamese + + + + + Symbol + + + + + Ogham + + + + + Runic + + + + + QFontDialog + + + &Font + ال&خطّ + + + + Font st&yle + &طراز الخطّ + + + + &Size + ال&حجم + + + + Effects + تأثيرات + + + + Stri&keout + ت&شطيب + + + + &Underline + ت&سطير + + + + Sample + عيّنة + + + + + Select Font + انتقاء الخطّ + + + + Wr&iting System + + + + + QFtp + + + Host %1 found + تمّ إيجاد المضيف %1 + + + + Host found + تمّ إيجاد المضيف + + + + + + Connected to host %1 + تمّ وصل المضيف %1 + + + + Connected to host + تمّ وصل المضيف + + + + Connection to %1 closed + تمّ إغلاق الوصل بالمضيف %1 + + + + + + Connection closed + وصل مغلق + + + + + Host %1 not found + لم يتمّ إيجاد المضيف %1 + + + + + Connection refused to host %1 + رفض الوصل بالمضيف %1 + + + + Connection timed out to host %1 + + + + + + + + Unknown error + خطأ مجهول + + + + + Connecting to host failed: +%1 + فشل وصل المضيف: +%1 + + + + + Login failed: +%1 + فشل التّسجيل: +%1 + + + + + Listing directory failed: +%1 + فشلت عمليّة وضع قائمة للدّليل: +%1 + + + + + Changing directory failed: +%1 + فشلت عمليّة تغيير الدّليل: +%1 + + + + + Downloading file failed: +%1 + فشلت عمليّة تحميل الملفّ: +%1 + + + + + Uploading file failed: +%1 + فشلت عمليّة تحميل (بعث) الملفّ: +%1 + + + + + Removing file failed: +%1 + فشلت عمليّة نزع الملفّ: +%1 + + + + + Creating directory failed: +%1 + فشلت عمليّة صنع الدّليل: +%1 + + + + + Removing directory failed: +%1 + فشلت عمليّة نزع الدّليل: +%1 + + + + + Not connected + غير متصّل + + + + + Connection refused for data connection + رفض وصل المعطيات + + + + QHostInfo + + + Unknown error + خطأ مجهول + + + + QHostInfoAgent + + + + + + + + + + Host not found + + + + + + + + Unknown address type + + + + + + + Unknown error + خطأ مجهول + + + + QHttp + + + + Connection refused + رفض الوصل + + + + + + Host %1 not found + لم يتمّ إيجاد المضيف %1 + + + + + Wrong content length + طول المحتوى خاطئ + + + + HTTPS connection requested but SSL support not compiled in + + + + + + + + HTTP request failed + فشل طلب الHTTP + + + + Host %1 found + تمّ إيجاد المضيف %1 + + + + Host found + تمّ إيجاد المضيف + + + + Connected to host %1 + تمّ وصل المضيف %1 + + + + Connected to host + تمّ وصل المضيف + + + + Connection to %1 closed + تمّ إغلاق الوصل بالمضيف %1 + + + + + Connection closed + وصل مغلق + + + + + + + Unknown error + خطأ مجهول + + + + + Request aborted + تمّ إبطال الطّلب + + + + + No server set to connect to + ليس هناك أيّ خادم للوصل + + + + + Server closed connection unexpectedly + الخادم أغلق الوصل بصفة غير متوقّعة + + + + + Invalid HTTP response header + صديرة استجابة الHTTP غير صالحة + + + + Unknown authentication method + + + + + + + + Invalid HTTP chunked body + مقطع HTTP غير صالح + + + + Error writing response to device + + + + + Proxy authentication required + + + + + Authentication required + + + + + Connection refused (or timed out) + + + + + Proxy requires authentication + + + + + Host requires authentication + + + + + Data corrupted + + + + + Unknown protocol specified + + + + + SSL handshake failed + + + + + QHttpSocketEngine + + + Did not receive HTTP response from proxy + + + + + Error parsing authentication request from proxy + + + + + Authentication required + + + + + Proxy denied connection + + + + + Error communicating with HTTP proxy + + + + + Proxy server not found + + + + + Proxy connection refused + + + + + Proxy server connection timed out + + + + + Proxy connection closed prematurely + + + + + QIBaseDriver + + + Error opening database + + + + + Could not start transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QIBaseResult + + + Unable to create BLOB + + + + + Unable to write BLOB + + + + + Unable to open BLOB + + + + + Unable to read BLOB + + + + + + Could not find array + + + + + Could not get array data + + + + + Could not get query info + + + + + Could not start transaction + + + + + Unable to commit transaction + + + + + Could not allocate statement + + + + + Could not prepare statement + + + + + + Could not describe input statement + + + + + Could not describe statement + + + + + Unable to close statement + + + + + Unable to execute query + + + + + Could not fetch next item + + + + + Could not get statement info + + + + + QIODevice + + + Permission denied + + + + + Too many open files + + + + + No such file or directory + + + + + No space left on device + + + + + Unknown error + خطأ مجهول + + + + QInputContext + + + XIM + + + + + XIM input method + + + + + Windows input method + + + + + Mac OS X input method + + + + + QInputDialog + + + Enter a value: + + + + + QLibrary + + + Could not mmap '%1': %2 + + + + + Plugin verification data mismatch in '%1' + + + + + Could not unmap '%1': %2 + + + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + + + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + + + + + Unknown error + خطأ مجهول + + + + + The shared library was not found. + + + + + The file '%1' is not a valid Qt plugin. + + + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + + + + + + Cannot load library %1: %2 + + + + + + Cannot unload library %1: %2 + + + + + + Cannot resolve symbol "%1" in %2: %3 + + + + + QLineEdit + + + &Undo + &تراجع + + + + &Redo + إ&عادة + + + + Cu&t + &قصّ + + + + &Copy + &نسخ + + + + &Paste + ت&لصيق + + + + Select All + انتقاء الجميع + + + + Delete + حذف + + + + QLocalServer + + + + %1: Name error + + + + + %1: Permission denied + + + + + %1: Address in use + + + + + + %1: Unknown error %2 + + + + + QLocalSocket + + + + %1: Connection refused + + + + + + %1: Remote closed + + + + + + + + %1: Invalid name + + + + + + %1: Socket access error + + + + + + %1: Socket resource error + + + + + + %1: Socket operation timed out + + + + + + %1: Datagram too large + + + + + + + %1: Connection error + + + + + + %1: The socket operation is not supported + + + + + %1: Unknown error + + + + + + %1: Unknown error %2 + + + + + QMYSQLDriver + + + Unable to open database ' + + + + + Unable to connect + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QMYSQLResult + + + Unable to fetch data + + + + + Unable to execute query + + + + + Unable to store result + + + + + + Unable to prepare statement + + + + + Unable to reset statement + + + + + Unable to bind value + + + + + Unable to execute statement + + + + + + Unable to bind outvalues + + + + + Unable to store statement results + + + + + Unable to execute next query + + + + + Unable to store next result + + + + + QMdiArea + + + (Untitled) + + + + + QMdiSubWindow + + + %1 - [%2] + %1 - [%2] + + + + Close + إغلاق + + + + Minimize + تصغير + + + + Restore Down + استعاد في الأسفل + + + + &Restore + ا&ستعاد + + + + &Move + &تحريك + + + + &Size + ال&حجم + + + + Mi&nimize + ت&صغير + + + + Ma&ximize + ت&كبير + + + + Stay on &Top + ال&بقاء في الأمام + + + + &Close + إ&غلاق + + + + - [%1] + + + + + Maximize + تكبير + + + + Unshade + + + + + Shade + + + + + Restore + + + + + Help + مساعدة + + + + Menu + قائمة الخيارات + + + + QMenu + + + + Close + إغلاق + + + + + Open + فتح + + + + + + Execute + + + + + QMenuBar + + About + حول + + + Config + تشكيل + + + Preference + تفضيل + + + Options + خيارات + + + Setting + ضبط + + + Setup + إعداد + + + Quit + إنتهاء + + + Exit + خروج + + + + QMessageBox + + + + + + OK + موافقة + + + + About Qt + + + + + Help + مساعدة + + + + Show Details... + + + + + Hide Details... + + + + + <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> + + + + + QMultiInputContext + + + Select IM + + + + + QMultiInputContextPlugin + + + Multiple input method switcher + + + + + Multiple input method switcher that uses the context menu of the text widgets + + + + + QNativeSocketEngine + + + The remote host closed the connection + + + + + Network operation timed out + + + + + Out of resources + + + + + Unsupported socket operation + + + + + Protocol type not supported + + + + + Invalid socket descriptor + + + + + Network unreachable + + + + + Permission denied + + + + + Connection timed out + + + + + Connection refused + رفض الوصل + + + + The bound address is already in use + + + + + The address is not available + + + + + The address is protected + + + + + Unable to send a message + + + + + Unable to receive a message + + + + + Unable to write + + + + + Network error + + + + + Another socket is already listening on the same port + + + + + Unable to initialize non-blocking socket + + + + + Unable to initialize broadcast socket + + + + + Attempt to use IPv6 socket on a platform with no IPv6 support + + + + + Host unreachable + + + + + Datagram was too large to send + + + + + Operation on non-socket + + + + + Unknown error + خطأ مجهول + + + + The proxy type is invalid for this operation + + + + + QNetworkAccessCacheBackend + + + Error opening %1 + + + + + QNetworkAccessFileBackend + + + Request for opening non-local file %1 + + + + + Error opening %1: %2 + + + + + Write error writing to %1: %2 + + + + + Cannot open %1: Path is a directory + + + + + Read error reading from %1: %2 + + + + + QNetworkAccessFtpBackend + + + No suitable proxy found + + + + + Cannot open %1: is a directory + + + + + Logging in to %1 failed: authentication required + + + + + Error while downloading %1: %2 + + + + + Error while uploading %1: %2 + + + + + QNetworkAccessHttpBackend + + + No suitable proxy found + + + + + QNetworkReply + + + Error downloading %1 - server replied: %2 + + + + + Protocol "%1" is unknown + + + + + QNetworkReplyImpl + + + + Operation canceled + + + + + QOCIDriver + + + Unable to logon + + + + + Unable to initialize + QOCIDriver + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QOCIResult + + + + + Unable to bind column for batch execute + + + + + Unable to execute batch statement + + + + + Unable to goto next + + + + + Unable to alloc statement + + + + + Unable to prepare statement + + + + + Unable to bind value + + + + + Unable to execute statement + + + + + QODBCDriver + + + Unable to connect + + + + + Unable to connect - Driver doesn't support all needed functionality + + + + + Unable to disable autocommit + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + Unable to enable autocommit + + + + + QODBCResult + + + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + + + + + + Unable to execute statement + + + + + Unable to fetch next + + + + + Unable to prepare statement + + + + + Unable to bind variable + + + + + + + Unable to fetch last + + + + + Unable to fetch + + + + + Unable to fetch first + + + + + Unable to fetch previous + + + + + QObject + + + Home + منزل + + + + Operation not supported on %1 + + + + + Invalid URI: %1 + + + + + Write error writing to %1: %2 + + + + + Read error reading from %1: %2 + + + + + Socket error on %1: %2 + + + + + Remote host closed the connection prematurely on %1 + + + + + Protocol error: packet of size 0 received + + + + + + No host name given + + + + + QPPDOptionsModel + + + Name + الإسم + + + + Value + + + + + QPSQLDriver + + + Unable to connect + + + + + Could not begin transaction + + + + + Could not commit transaction + + + + + Could not rollback transaction + + + + + Unable to subscribe + + + + + Unable to unsubscribe + + + + + QPSQLResult + + + Unable to create query + + + + + Unable to prepare statement + + + + + QPageSetupWidget + + + Centimeters (cm) + + + + + Millimeters (mm) + + + + + Inches (in) + + + + + Points (pt) + + + + + Form + + + + + Paper + + + + + Page size: + + + + + Width: + + + + + Height: + + + + + Paper source: + + + + + Orientation + + + + + Portrait + صورة + + + + Landscape + منظر + + + + Reverse landscape + + + + + Reverse portrait + + + + + Margins + + + + + top margin + + + + + left margin + + + + + right margin + + + + + bottom margin + + + + + QPluginLoader + + + Unknown error + خطأ مجهول + + + + The plugin was not loaded. + + + + + QPrintDialog + + + locally connected + موصل محليّا + + + + + Aliases: %1 + بدائل: %1 + + + + + unknown + مجهول + + + + OK + موافقة + + + Cancel + إلغاء + + + Print in color if available + طباعة بالألوان إن توفّرت + + + Printer + الطّابعة + + + + Print all + طباعة الجميع + + + + Print range + مدى الطّباعة + + + Print last page first + طباعة الصّفحة الخيرة أوّلا + + + Number of copies: + عدد النّسخ: + + + Paper format + مقاييس الورق + + + Portrait + صورة + + + Landscape + منظر + + + + A0 (841 x 1189 mm) + أ0 (841 × 1189 مم) + + + + A1 (594 x 841 mm) + أ1 (594 × 841 مم) + + + + A2 (420 x 594 mm) + أ2 (420 × 594 مم) + + + + A3 (297 x 420 mm) + أ3 (297 × 420 مم) + + + + A5 (148 x 210 mm) + أ5 (148 × 210 مم) + + + + A6 (105 x 148 mm) + أ6 (105 × 148 مم) + + + + A7 (74 x 105 mm) + أ7 (74 × 105 مم) + + + + A8 (52 x 74 mm) + أ8 (52 × 74 مم) + + + + A9 (37 x 52 mm) + أ9 (37 × 52 مم) + + + + B0 (1000 x 1414 mm) + ب0 (1000 × 1414 مم) + + + + B1 (707 x 1000 mm) + ب1 (707 × 1000 مم) + + + + B2 (500 x 707 mm) + ب2 (500 × 707 مم) + + + + B3 (353 x 500 mm) + ب3 (353 × 500 مم) + + + + B4 (250 x 353 mm) + ب4 (250 × 353 مم) + + + + B6 (125 x 176 mm) + ب6 (125 × 176 مم) + + + + B7 (88 x 125 mm) + ب7 (88 × 125 مم) + + + + B8 (62 x 88 mm) + ب4 (62 × 88 مم) + + + + B9 (44 x 62 mm) + ب9 (44 × 62 مم) + + + + B10 (31 x 44 mm) + ب10 (31 × 44 مم) + + + + C5E (163 x 229 mm) + سي5إي (163 × 229 مم) + + + + DLE (110 x 220 mm) + دي أل إي (110 × 220 مم) + + + + Folio (210 x 330 mm) + ملفّ (210 × 330 مم) + + + + Ledger (432 x 279 mm) + دفتر (432 × 279 مم) + + + + Tabloid (279 x 432 mm) + جريدة (279 × 432 مم) + + + + US Common #10 Envelope (105 x 241 mm) + غلاف رسالة أمريكية متداولة رقم 10 (105 × 241 مم) + + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + + + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + + + + + Executive (7.5 x 10 inches, 191 x 254 mm) + + + + + Legal (8.5 x 14 inches, 216 x 356 mm) + + + + + Letter (8.5 x 11 inches, 216 x 279 mm) + + + + + + + Print + طباعة + + + File + ملفّ + + + + Print To File ... + + + + + File %1 is not writable. +Please choose a different file name. + + + + + %1 already exists. +Do you want to overwrite it? + + + + + File exists + + + + + <qt>Do you want to overwrite it?</qt> + + + + + Print selection + + + + + %1 is a directory. +Please choose a different file name. + + + + + A0 + + + + + A1 + + + + + A2 + + + + + A3 + + + + + A4 + + + + + A5 + + + + + A6 + + + + + A7 + + + + + A8 + + + + + A9 + + + + + B0 + + + + + B1 + + + + + B2 + + + + + B3 + + + + + B4 + + + + + B5 + + + + + B6 + + + + + B7 + + + + + B8 + + + + + B9 + + + + + B10 + + + + + C5E + + + + + DLE + + + + + Executive + + + + + Folio + + + + + Ledger + + + + + Legal + + + + + Letter + + + + + Tabloid + + + + + US Common #10 Envelope + + + + + Custom + + + + + + &Options >> + + + + + &Print + + + + + &Options << + + + + + Print to File (PDF) + + + + + Print to File (Postscript) + + + + + Local file + + + + + Write %1 file + + + + + The 'From' value cannot be greater than the 'To' value. + + + + + QPrintPreviewDialog + + + + Page Setup + + + + + %1% + + + + + Print Preview + + + + + Next page + + + + + Previous page + + + + + First page + + + + + Last page + + + + + Fit width + + + + + Fit page + + + + + Zoom in + + + + + Zoom out + + + + + Portrait + صورة + + + + Landscape + منظر + + + + Show single page + + + + + Show facing pages + + + + + Show overview of all pages + + + + + Print + طباعة + + + + Page setup + + + + + Close + إغلاق + + + + Export to PDF + + + + + Export to PostScript + + + + + QPrintPropertiesDialog + + Save + حفظ + + + OK + موافقة + + + + QPrintPropertiesWidget + + + Form + + + + + Page + + + + + Advanced + + + + + QPrintSettingsOutput + + + Form + + + + + Copies + + + + + Print range + مدى الطّباعة + + + + Print all + طباعة الجميع + + + + Pages from + + + + + to + + + + + Selection + + + + + Output Settings + + + + + Copies: + + + + + Collate + + + + + Reverse + + + + + Options + خيارات + + + + Color Mode + + + + + Color + + + + + Grayscale + + + + + Duplex Printing + + + + + None + + + + + Long side + + + + + Short side + + + + + QPrintWidget + + + Form + + + + + Printer + الطّابعة + + + + &Name: + + + + + P&roperties + + + + + Location: + + + + + Preview + + + + + Type: + + + + + Output &file: + + + + + ... + + + + + QProcess + + + + Could not open input redirection for reading + + + + + + Could not open output redirection for writing + + + + + Resource error (fork failure): %1 + + + + + + + + + + + + + Process operation timed out + + + + + + + + Error reading from process + + + + + + + Error writing to process + + + + + Process crashed + + + + + No program defined + + + + + Process failed to start + + + + + QProgressDialog + + + Cancel + إلغاء + + + + QPushButton + + + Open + فتح + + + + QRadioButton + + + Check + + + + + QRegExp + + + no error occurred + لم يحدث هناك أيّ خطأ + + + + disabled feature used + تمّ استعمال خاصيّة التّوقيف + + + + bad char class syntax + خطأ نركيبي: صنف الرّمز + + + + bad lookahead syntax + خطأ تركيبي: النّظر إلى الأمام + + + + bad repetition syntax + خطأ نركيبي: تكرار + + + + invalid octal value + قيمة ثمانية غبر صالحة + + + + missing left delim + الفاصل الأيسر ناقص + + + + unexpected end + نهاية غير متوقّعة + + + + met internal limit + تمّ الوصول إلى الحدّ الدّاخلي + + + + QSQLite2Driver + + + Error to open database + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback Transaction + + + + + QSQLite2Result + + + Unable to fetch results + + + + + Unable to execute statement + + + + + QSQLiteDriver + + + Error opening database + + + + + Error closing database + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QSQLiteResult + + + + + Unable to fetch row + + + + + Unable to execute statement + + + + + Unable to reset statement + + + + + Unable to bind parameters + + + + + Parameter count mismatch + + + + + No query + + + + + QScrollBar + + + Scroll here + + + + + Left edge + + + + + Top + + + + + Right edge + + + + + Bottom + + + + + Page left + + + + + + Page up + + + + + Page right + + + + + + Page down + + + + + Scroll left + + + + + Scroll up + + + + + Scroll right + + + + + Scroll down + + + + + Line up + تصفيف + + + + Position + + + + + Line down + + + + + QSharedMemory + + + %1: unable to set key on lock + + + + + %1: create size is less then 0 + + + + + + %1: unable to lock + + + + + %1: unable to unlock + + + + + + %1: permission denied + + + + + + %1: already exists + + + + + + %1: doesn't exists + + + + + + %1: out of resources + + + + + + %1: unknown error %2 + + + + + %1: key is empty + + + + + %1: unix key file doesn't exists + + + + + %1: ftok failed + + + + + + %1: unable to make key + + + + + %1: system-imposed size restrictions + + + + + %1: not attached + + + + + %1: invalid size + + + + + %1: key error + + + + + %1: size query failed + + + + + QShortcut + + + Space + فراغ + + + + Esc + إفلات + + + + Tab + جدولة + + + + Backtab + جدولة للوراء + + + + Backspace + فراغ للوراء + + + + Return + عودة + + + + Enter + إدخال + + + + Ins + إدراج + + + + Del + حذف + + + + Pause + وقف + + + + Print + طباعة + + + + SysReq + نظام + + + + Home + منزل + + + + End + نهاية + + + + Left + يسار + + + + Up + فوق + + + + Right + يمين + + + + Down + تحت + + + + PgUp + صفحة للفوق + + + + PgDown + صفحة للتحت + + + + CapsLock + إقفال الحروف الكبيرة + + + + NumLock + إقفال الأعداد + + + + ScrollLock + إقفال التّحريك + + + + Menu + قائمة الخيارات + + + + Help + مساعدة + + + + Back + رجوع + + + + Forward + للأمام + + + + Stop + توقّف + + + + Refresh + إنعاش + + + + Volume Down + تنقيص الصّوت + + + + Volume Mute + إغلاق الصّوت + + + + Volume Up + زيادة الصّوت + + + + Bass Boost + إنعاش الأصوات الجهورية + + + + Bass Up + زيادة الأصوات الجهورية + + + + Bass Down + تنقيص الأصوات الجهورية + + + + Treble Up + زيادة الأصوات الحادّة + + + + Treble Down + تنقيص الأصوات الحادّة + + + + Media Play + لعب الوسط + + + + Media Stop + توقيف الوسط + + + + Media Previous + الوسط الأسبق + + + + Media Next + الوسط التّالي + + + + Media Record + تسجيل الوسط + + + + Favorites + المفضّلات + + + + Search + بحث + + + + Standby + إنتظار + + + + Open URL + فتح الوصلة + + + + Launch Mail + بدأ البريد + + + + Launch Media + بدأ الوسط + + + + Launch (0) + بدأ (0) + + + + Launch (1) + بدأ (1) + + + + Launch (2) + بدأ (2) + + + + Launch (3) + بدأ (3) + + + + Launch (4) + بدأ (4) + + + + Launch (5) + بدأ (5) + + + + Launch (6) + بدأ (6) + + + + Launch (7) + بدأ (7) + + + + Launch (8) + بدأ (8) + + + + Launch (9) + بدأ (9) + + + + Launch (A) + بدأ (A) + + + + Launch (B) + بدأ (B) + + + + Launch (C) + بدأ (C) + + + + Launch (D) + بدأ (D) + + + + Launch (E) + بدأ (E) + + + + Launch (F) + بدأ (F) + + + + Print Screen + + + + + Page Up + + + + + Page Down + + + + + Caps Lock + + + + + Num Lock + + + + + Number Lock + + + + + Scroll Lock + + + + + Insert + إدراج + + + + Delete + حذف + + + + Escape + + + + + System Request + + + + + Select + + + + + Yes + نعم + + + + No + لا + + + + Context1 + + + + + Context2 + + + + + Context3 + + + + + Context4 + + + + + Call + + + + + Hangup + + + + + Flip + + + + + + Ctrl + تحكّم + + + + + Shift + إزاحة + + + + + Alt + تناوب + + + + + Meta + ما فوق + + + + + + + + + + + F%1 + F%1 + + + + Home Page + + + + + QSlider + + + Page left + + + + + Page up + + + + + Position + + + + + Page right + + + + + Page down + + + + + QSocks5SocketEngine + + + Connection to proxy refused + + + + + Connection to proxy closed prematurely + + + + + Proxy host not found + + + + + Connection to proxy timed out + + + + + Proxy authentication failed + + + + + Proxy authentication failed: %1 + + + + + SOCKS version 5 protocol error + + + + + General SOCKSv5 server failure + + + + + Connection not allowed by SOCKSv5 server + + + + + TTL expired + + + + + SOCKSv5 command not supported + + + + + Address type not supported + + + + + Unknown SOCKSv5 proxy error code 0x%1 + + + + + Network operation timed out + + + + + QSpinBox + + + More + + + + + Less + + + + + QSql + + + Delete + حذف + + + + Delete this record? + حذف هذاالتّسجيل؟ + + + + + + Yes + نعم + + + + + + No + لا + + + + Insert + إدراج + + + + Update + تحديث + + + + Save edits? + حفظ التّغييرات؟ + + + + Cancel + إلغاء + + + + Confirm + تأكيد + + + + Cancel your edits? + إلغاء التّغييرات؟ + + + + QSslSocket + + + Unable to write data: %1 + + + + + Error while reading: %1 + + + + + Error during SSL handshake: %1 + + + + + Error creating SSL context (%1) + + + + + Invalid or empty cipher list (%1) + + + + + Error creating SSL session, %1 + + + + + Error creating SSL session: %1 + + + + + Cannot provide a certificate with no key, %1 + + + + + Error loading local certificate, %1 + + + + + Error loading private key, %1 + + + + + Private key does not certificate public key, %1 + + + + + QSystemSemaphore + + + + %1: out of resources + + + + + + %1: permission denied + + + + + %1: already exists + + + + + %1: does not exist + + + + + + %1: unknown error %2 + + + + + QTDSDriver + + + Unable to open connection + + + + + Unable to use database + + + + + QTabBar + + + Scroll Left + + + + + Scroll Right + + + + + QTcpServer + + + Operation on socket is not supported + + + + + QTextControl + + + &Undo + &تراجع + + + + &Redo + إ&عادة + + + + Cu&t + &قصّ + + + + &Copy + &نسخ + + + + Copy &Link Location + + + + + &Paste + ت&لصيق + + + + Delete + حذف + + + + Select All + انتقاء الجميع + + + + QToolButton + + + + Press + + + + + + Open + فتح + + + + QUdpSocket + + + This platform does not support IPv6 + + + + + QUndoGroup + + + Undo + تراجع + + + + Redo + إعادة + + + + QUndoModel + + + <empty> + + + + + QUndoStack + + + Undo + تراجع + + + + Redo + إعادة + + + + QUnicodeControlCharacterMenu + + + LRM Left-to-right mark + + + + + RLM Right-to-left mark + + + + + ZWJ Zero width joiner + + + + + ZWNJ Zero width non-joiner + + + + + ZWSP Zero width space + + + + + LRE Start of left-to-right embedding + + + + + RLE Start of right-to-left embedding + + + + + LRO Start of left-to-right override + + + + + RLO Start of right-to-left override + + + + + PDF Pop directional formatting + + + + + Insert Unicode control character + + + + + QWebFrame + + + Request cancelled + + + + + Request blocked + + + + + Cannot show URL + + + + + Frame load interruped by policy change + + + + + Cannot show mimetype + + + + + File does not exist + + + + + QWebPage + + + Bad HTTP request + + + + + Submit + default label for Submit buttons in forms on web pages + + + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + + + + + Reset + default label for Reset buttons in forms on web pages + + + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + + + + + Choose File + title for file button used in HTML forms + + + + + No file selected + text to display in file button used in HTML forms when no file is selected + + + + + Open in New Window + Open in New Window context menu item + + + + + Save Link... + Download Linked File context menu item + + + + + Copy Link + Copy Link context menu item + + + + + Open Image + Open Image in New Window context menu item + + + + + Save Image + Download Image context menu item + + + + + Copy Image + Copy Link context menu item + + + + + Open Frame + Open Frame in New Window context menu item + + + + + Copy + Copy context menu item + + + + + Go Back + Back context menu item + + + + + Go Forward + Forward context menu item + + + + + Stop + Stop context menu item + توقّف + + + + Reload + Reload context menu item + + + + + Cut + Cut context menu item + + + + + Paste + Paste context menu item + + + + + No Guesses Found + No Guesses Found context menu item + + + + + Ignore + Ignore Spelling context menu item + + + + + Add To Dictionary + Learn Spelling context menu item + + + + + Search The Web + Search The Web context menu item + + + + + Look Up In Dictionary + Look Up in Dictionary context menu item + + + + + Open Link + Open Link context menu item + + + + + Ignore + Ignore Grammar context menu item + + + + + Spelling + Spelling and Grammar context sub-menu item + + + + + Show Spelling and Grammar + menu item title + + + + + Hide Spelling and Grammar + menu item title + + + + + Check Spelling + Check spelling context menu item + + + + + Check Spelling While Typing + Check spelling while typing context menu item + + + + + Check Grammar With Spelling + Check grammar with spelling context menu item + + + + + Fonts + Font context sub-menu item + + + + + Bold + Bold context menu item + + + + + Italic + Italic context menu item + + + + + Underline + Underline context menu item + + + + + Outline + Outline context menu item + + + + + Direction + Writing direction context sub-menu item + + + + + Text Direction + Text direction context sub-menu item + + + + + Default + Default writing direction context menu item + + + + + LTR + Left to Right context menu item + + + + + RTL + Right to Left context menu item + + + + + Inspect + Inspect Element context menu item + + + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + + + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + + + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + + + + + Unknown + Unknown filesize FTP directory listing item + + + + + %1 (%2x%3 pixels) + Title string for images + + + + + Web Inspector - %2 + + + + + Scroll here + + + + + Left edge + + + + + Top + + + + + Right edge + + + + + Bottom + + + + + Page left + + + + + Page up + + + + + Page right + + + + + Page down + + + + + Scroll left + + + + + Scroll up + + + + + Scroll right + + + + + Scroll down + + + + + %n file(s) + number of chosen file + + + + + + + JavaScript Alert - %1 + + + + + JavaScript Confirm - %1 + + + + + JavaScript Prompt - %1 + + + + + Move the cursor to the next character + + + + + Move the cursor to the previous character + + + + + Move the cursor to the next word + + + + + Move the cursor to the previous word + + + + + Move the cursor to the next line + + + + + Move the cursor to the previous line + + + + + Move the cursor to the start of the line + + + + + Move the cursor to the end of the line + + + + + Move the cursor to the start of the block + + + + + Move the cursor to the end of the block + + + + + Move the cursor to the start of the document + + + + + Move the cursor to the end of the document + + + + + Select all + + + + + Select to the next character + + + + + Select to the previous character + + + + + Select to the next word + + + + + Select to the previous word + + + + + Select to the next line + + + + + Select to the previous line + + + + + Select to the start of the line + + + + + Select to the end of the line + + + + + Select to the start of the block + + + + + Select to the end of the block + + + + + Select to the start of the document + + + + + Select to the end of the document + + + + + Delete to the start of the word + + + + + Delete to the end of the word + + + + + Insert a new paragraph + + + + + Insert a new line + + + + + QWhatsThisAction + + + What's This? + ما هذا؟ + + + + QWidget + + + * + + + + + QWizard + + + < &Back + < &رجوع + + + + &Finish + إ&نهاء + + + + &Help + &مساعدة + + + + Go Back + + + + + Continue + + + + + Commit + + + + + Done + + + + Quit + إنتهاء + + + + Help + مساعدة + + + + Cancel + إلغاء + + + + &Next + + + + + &Next > + ال&تّالي > + + + + QWorkspace + + + &Restore + ا&ستعاد + + + + &Move + &تحريك + + + + &Size + &حجم + + + + Mi&nimize + ت&صغير + + + + Ma&ximize + ت&كبير + + + + &Close + إ&غلاق + + + + Stay on &Top + ال&بقاء في الأمام + + + + + Sh&ade + ت&ظليل + + + + + %1 - [%2] + %1 - [%2] + + + + Minimize + تصغير + + + + Restore Down + استعاد في الأسفل + + + + Close + إغلاق + + + + &Unshade + إ&لغاء التّظليل + + + + QXml + + + no error occurred + لم يحدث هناك أيّ خطأ + + + + error triggered by consumer + أطلق الخطأ من طرف المستهلك + + + + unexpected end of file + نهاية غير متوقّعة للملفّ + + + + more than one document type definition + أكثر من تعريف لطراز الوثيقة + + + + error occurred while parsing element + حدث خطأ عند تحليل تركيب العنصر + + + + tag mismatch + عدم تطابق العلامة + + + + error occurred while parsing content + حدث خطأ عند تحليل تركيب المحتوى + + + + unexpected character + رمز غير متوقّع + + + + invalid name for processing instruction + إسم غير صالح لتعليمة المعالجة + + + + version expected while reading the XML declaration + الإصدار متوقّع عند قراءة إعلان الXML + + + + wrong value for standalone declaration + قيمة خاطئة لإعلان مستقلّ + + + + encoding declaration or standalone declaration expected while reading the XML declaration + إعلان التّرميز أو إعلان مستقلّ متوقّع عند قراءة إعلان الXML + + + + standalone declaration expected while reading the XML declaration + إعلان مستقلّ متوقّع عند قراءة إعلان الXML + + + + error occurred while parsing document type definition + حدث خطأ عند تحليل تركيب تعريف طراز الوثيقة + + + + letter is expected + حرف متوقّع + + + + error occurred while parsing comment + حدث خطأ عند تحليل تركيب التّعليق + + + + error occurred while parsing reference + حدث خطأ عند تحليل تركيب المرجع + + + + internal general entity reference not allowed in DTD + المرجع إلى كيان داخلي عامّ غير مسموح به في الDTD + + + + external parsed general entity reference not allowed in attribute value + المرجع إلى كيان خارجي عامّ معرب غير مسموح به في قيمة الخاصّية + + + + external parsed general entity reference not allowed in DTD + المرجع إلى كيان خارجي عامّ معرب غير مسموح به في الDTD + + + + unparsed entity reference in wrong context + مرجع إلى كيان غير معرب في سياق خاطئ + + + + recursive entities + كيانات معاودة + + + + error in the text declaration of an external entity + خطأ في التّعريف النّصّي لكيان خارجي + + + + QXmlStream + + + + Extra content at end of document. + + + + + Invalid entity value. + + + + + Invalid XML character. + + + + + Sequence ']]>' not allowed in content. + + + + + Namespace prefix '%1' not declared + + + + + Attribute redefined. + + + + + Unexpected character '%1' in public id literal. + + + + + Invalid XML version string. + + + + + Unsupported XML version. + + + + + %1 is an invalid encoding name. + + + + + Encoding %1 is unsupported + + + + + Standalone accepts only yes or no. + + + + + Invalid attribute in XML declaration. + + + + + Premature end of document. + + + + + Invalid document. + + + + + Expected + + + + + , but got ' + + + + + Unexpected ' + + + + + Expected character data. + + + + + Recursive entity detected. + + + + + Start tag expected. + + + + + XML declaration not at start of document. + + + + + NDATA in parameter entity declaration. + + + + + %1 is an invalid processing instruction name. + + + + + Invalid processing instruction name. + + + + + + + + Illegal namespace declaration. + + + + + Invalid XML name. + + + + + Opening and ending tag mismatch. + + + + + Reference to unparsed entity '%1'. + + + + + + + Entity '%1' not declared. + + + + + Reference to external entity '%1' in attribute value. + + + + + Invalid character reference. + + + + + + Encountered incorrectly encoded content. + + + + + The standalone pseudo attribute must appear after the encoding. + + + + + %1 is an invalid PUBLIC identifier. + + + + + QtXmlPatterns + + + An %1-attribute with value %2 has already been declared. + + + + + An %1-attribute must have a valid %2 as value, which %3 isn't. + + + + + Network timeout. + + + + + Element %1 can't be serialized because it appears outside the document element. + + + + + Attribute %1 can't be serialized because it appears at the top level. + + + + + Year %1 is invalid because it begins with %2. + + + + + Day %1 is outside the range %2..%3. + + + + + Month %1 is outside the range %2..%3. + + + + + Overflow: Can't represent date %1. + + + + + Day %1 is invalid for month %2. + + + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + + + + + Time %1:%2:%3.%4 is invalid. + + + + + Overflow: Date can't be represented. + + + + + + At least one component must be present. + + + + + At least one time component must appear after the %1-delimiter. + + + + + No operand in an integer division, %1, can be %2. + + + + + The first operand in an integer division, %1, cannot be infinity (%2). + + + + + The second operand in a division, %1, cannot be zero (%2). + + + + + %1 is not a valid value of type %2. + + + + + When casting to %1 from %2, the source value cannot be %3. + + + + + Integer division (%1) by zero (%2) is undefined. + + + + + Division (%1) by zero (%2) is undefined. + + + + + Modulus division (%1) by zero (%2) is undefined. + + + + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + + + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + + + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + + + + + A value of type %1 cannot have an Effective Boolean Value. + + + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + + + + + Value %1 of type %2 exceeds maximum (%3). + + + + + Value %1 of type %2 is below minimum (%3). + + + + + A value of type %1 must contain an even number of digits. The value %2 does not. + + + + + %1 is not valid as a value of type %2. + + + + + Operator %1 cannot be used on type %2. + + + + + Operator %1 cannot be used on atomic values of type %2 and %3. + + + + + The namespace URI in the name for a computed attribute cannot be %1. + + + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + + + + + Type error in cast, expected %1, received %2. + + + + + 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. + + + + + No casting is possible with %1 as the target type. + + + + + It is not possible to cast from %1 to %2. + + + + + Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. + + + + + It's not possible to cast the value %1 of type %2 to %3 + + + + + Failure when casting from %1 to %2: %3 + + + + + A comment cannot contain %1 + + + + + A comment cannot end with a %1. + + + + + No comparisons can be done involving the type %1. + + + + + Operator %1 is not available between atomic values of type %2 and %3. + + + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + + + + + A library module cannot be evaluated directly. It must be imported from a main module. + + + + + No template by name %1 exists. + + + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + + + + + A positional predicate must evaluate to a single numeric value. + + + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. + + + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + + + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + + + + + The data of a processing instruction cannot contain the string %1 + + + + + No namespace binding exists for the prefix %1 + + + + + No namespace binding exists for the prefix %1 in %2 + + + + + + %1 is an invalid %2 + + + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + + + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + + + + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + + + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + + + %1 is not a valid XML 1.0 character. + + + + + The first argument to %1 cannot be of type %2. + + + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + + + + + %1 was called. + + + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + + + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + + + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + + + + + %1 matches newline characters + + + + + %1 and %2 match the start and end of a line. + + + + + Matches are case insensitive + + + + + Whitespace characters are removed, except when they appear in character classes + + + + + %1 is an invalid regular expression pattern: %2 + + + + + %1 is an invalid flag for regular expressions. Valid flags are: + + + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + + + + + It will not be possible to retrieve %1. + + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + + + + + The default collection is undefined + + + + + %1 cannot be retrieved + + + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + + + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + + + + + %1 is not a whole number of minutes. + + + + + Required cardinality is %1; got cardinality %2. + + + + + The item %1 did not match the required type %2. + + + + + + %1 is an unknown schema type. + + + + + Only one %1 declaration can occur in the query prolog. + + + + + The initialization of variable %1 depends on itself + + + + + No variable by name %1 exists + + + + + The variable %1 is unused + + + + + Version %1 is not supported. The supported XQuery version is 1.0. + + + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + + + + + No function with signature %1 is available + + + + + + A default namespace declaration must occur before function, variable, and option declarations. + + + + + Namespace declarations must occur before function, variable, and option declarations. + + + + + Module imports must occur before function, variable, and option declarations. + + + + + It is not possible to redeclare prefix %1. + + + + + Prefix %1 is already declared in the prolog. + + + + + The name of an option must have a prefix. There is no default namespace for options. + + + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + + + + + The target namespace of a %1 cannot be empty. + + + + + The module import feature is not supported + + + + + No value is available for the external variable by name %1. + + + + + A construct was encountered which only is allowed in XQuery. + + + + + A template by name %1 has already been declared. + + + + + The keyword %1 cannot occur with any other mode name. + + + + + The value of attribute %1 must of type %2, which %3 isn't. + + + + + The prefix %1 can not be bound. By default, it is already bound to the namespace %2. + + + + + A variable by name %1 has already been declared. + + + + + A stylesheet function must have a prefixed name. + + + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + + + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + + + + + 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 + + + + + A function already exists with the signature %1. + + + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + + + + + An argument by name %1 has already been declared. Every argument name must be unique. + + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + + + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + + + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + + + + + In an XSL-T pattern, function %1 cannot have a third argument. + + + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + + + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + + + + + %1 is an invalid template mode name. + + + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + + + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + + + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + + + + + Each name of a template parameter must be unique; %1 is duplicated. + + + + + The %1-axis is unsupported in XQuery + + + + + %1 is not a valid name for a processing-instruction. + + + + + %1 is not a valid numeric literal. + + + + + No function by name %1 is available. + + + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + + + + + %1 is an invalid namespace URI. + + + + + It is not possible to bind to the prefix %1 + + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + + + Two namespace declaration attributes have the same name: %1. + + + + + The namespace URI must be a constant and cannot use enclosed expressions. + + + + + An attribute by name %1 has already appeared on this element. + + + + + A direct element constructor is not well-formed. %1 is ended with %2. + + + + + The name %1 does not refer to any schema type. + + + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + + + + + %1 is not an atomic type. Casting is only possible to atomic types. + + + + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + + + + + The name of an extension expression must be in a namespace. + + + + + empty + + + + + zero or one + + + + + exactly one + + + + + one or more + + + + + zero or more + + + + + Required type is %1, but %2 was found. + + + + + Promoting %1 to %2 may cause loss of precision. + + + + + The focus is undefined. + + + + + It's not possible to add attributes after any other kind of node. + + + + + An attribute by name %1 has already been created. + + + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + + + + + %1 is an unsupported encoding. + + + + + %1 contains octets which are disallowed in the requested encoding %2. + + + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + + + + + Ambiguous rule match. + + + + + In a namespace constructor, the value for a namespace cannot be an empty string. + + + + + The prefix must be a valid %1, which %2 is not. + + + + + The prefix %1 cannot be bound. + + + + + Only the prefix %1 can be bound to %2 and vice versa. + + + + + Circularity detected + + + + + The parameter %1 is required, but no corresponding %2 is supplied. + + + + + The parameter %1 is passed, but no corresponding %2 exists. + + + + + The URI cannot have a fragment + + + + + Element %1 is not allowed at this location. + + + + + Text nodes are not allowed at this location. + + + + + Parse error: %1 + + + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + + + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + + + + + Unknown XSL-T attribute %1. + + + + + Attribute %1 and %2 are mutually exclusive. + + + + + In a simplified stylesheet module, attribute %1 must be present. + + + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + + + + + Element %1 must have at least one of the attributes %2 or %3. + + + + + At least one mode must be specified in the %1-attribute on element %2. + + + + + Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. + + + + + Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. + + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. + + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. + + + + + XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. + + + + + The attribute %1 must appear on element %2. + + + + + The element with local name %1 does not exist in XSL-T. + + + + + Element %1 must come last. + + + + + At least one %1-element must occur before %2. + + + + + Only one %1-element can appear. + + + + + At least one %1-element must occur inside %2. + + + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + + + + + Element %1 must have either a %2-attribute or a sequence constructor. + + + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + + + + + Element %1 cannot have children. + + + + + Element %1 cannot have a sequence constructor. + + + + + + The attribute %1 cannot appear on %2, when it is a child of %3. + + + + + A parameter in a function cannot be declared to be a tunnel. + + + + + This processor is not Schema-aware and therefore %1 cannot be used. + + + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + + + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + + + + + Attribute %1 cannot have the value %2. + + + + + The attribute %1 can only appear on the first %2 element. + + + + + At least one %1 element must appear as child of %2. + + + + + VolumeSlider + + + Muted + + + + + + Volume: %1% + + + + diff --git a/config.profiles/symbian/translations/qt_fa.ts b/config.profiles/symbian/translations/qt_fa.ts new file mode 100644 index 0000000..d876a9d --- /dev/null +++ b/config.profiles/symbian/translations/qt_fa.ts @@ -0,0 +1,8507 @@ + + + + + + CloseButton + + Close Tab + + + + + FakeReply + + Fake error ! + + + + Invalid URL + + + + + Phonon:: + + Notifications + + + + Music + + + + Video + + + + Communication + + + + Games + + + + Accessibility + + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + + + + Revert back to device '%1' + + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + + + + Could not open media source. + + + + Invalid source type. + + + + Could not locate media source. + + + + Could not open audio device. The device is already in use. + + + + Could not decode media source. + + + + + Phonon::MMF + + Audio Output + + + + The audio output device + + + + No error + + + + Not found + + + + Out of memory + + + + Not supported + + + + Overflow + + + + Underflow + + + + Already exists + + + + Path not found + + + + In use + + + + Not ready + + + + Access denied + + + + Could not connect + + + + Disconnected + + + + Permission denied + + + + Insufficient bandwidth + + + + Network unavailable + + + + Network communication error + + + + Streaming not supported + + + + Server alert + + + + Invalid protocol + + + + Invalid URL + + + + Multicast error + + + + Proxy server error + + + + Proxy server not supported + + + + Audio output error + + + + Video output error + + + + Decoder error + + + + Audio or video components could not be played + + + + DRM error + + + + Unknown error (%1) + + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + + + + Error opening file + + + + Error opening URL + + + + Setting volume failed + + + + Playback complete + + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + + + + + Phonon::MMF::AudioPlayer + + Getting position failed + + + + Opening clip failed + + + + + Phonon::MMF::EffectFactory + + Enabled + + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + + + + Decay time (ms) + + + + Density (%) + + + + Diffusion (%) + + + + Reflections delay (ms) + + + + Reflections level (mB) + + + + Reverb delay (ms) + + + + Reverb level (mB) + + + + Room HF level + + + + Room level (mB) + + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + + + + Error opening source: media type could not be determined + + + + + Phonon::MMF::StereoWidening + + Level (%) + + + + + Phonon::MMF::VideoPlayer + + Pause failed + + + + Seek failed + + + + Getting position failed + + + + Opening clip failed + + + + Buffering clip failed + + + + Video display error + + + + + Phonon::VolumeSlider + + Volume: %1% + + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + + + + Muted + + + + + Q3Accel + + %1, %2 not defined + + + + Ambiguous %1 not handled + + + + + Q3DataTable + + True + + + + False + + + + Insert + + + + Update + + + + Delete + + + + + Q3FileDialog + + Copy or Move a File + + + + Read: %1 + + + + Write: %1 + + + + Cancel + + + + All Files (*) + + + + Name + + + + Size + + + + Type + + + + Date + + + + Attributes + + + + &OK + + + + Look &in: + + + + File &name: + + + + File &type: + + + + Back + + + + One directory up + + + + Create New Folder + + + + List View + + + + Detail View + + + + Preview File Info + + + + Preview File Contents + + + + Read-write + + + + Read-only + + + + Write-only + + + + Inaccessible + + + + Symlink to File + + + + Symlink to Directory + + + + Symlink to Special + + + + File + + + + Dir + + + + Special + + + + Open + + + + Save As + + + + &Open + + + + &Save + + + + &Rename + + + + &Delete + + + + R&eload + + + + Sort by &Name + + + + Sort by &Size + + + + Sort by &Date + + + + &Unsorted + + + + Sort + + + + Show &hidden files + + + + the file + + + + the directory + + + + the symlink + + + + Delete %1 + + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + + + + &Yes + + + + &No + + + + New Folder 1 + + + + New Folder + + + + New Folder %1 + + + + Find Directory + + + + Directories + + + + Directory: + + + + Error + + + + %1 +File not found. +Check path and filename. + + + + All Files (*.*) + + + + Open + + + + Select a Directory + + + + + Q3LocalFs + + Could not read directory +%1 + + + + Could not create directory +%1 + + + + Could not remove file or directory +%1 + + + + Could not rename +%1 +to +%2 + + + + Could not open +%1 + + + + Could not write +%1 + + + + + Q3MainWindow + + Line up + + + + Customize... + + + + + Q3NetworkProtocol + + Operation stopped by the user + + + + + Q3ProgressDialog + + Cancel + + + + + Q3TabDialog + + OK + + + + Apply + + + + Help + + + + Defaults + + + + Cancel + + + + + Q3TextEdit + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + &Paste + + + + Clear + + + + Select All + + + + + Q3TitleBar + + System + + + + Restore up + + + + Minimize + + + + Restore down + + + + Maximize + + + + Close + + + + Contains commands to manipulate the window + + + + Puts a minimized window back to normal + + + + Moves the window out of the way + + + + Puts a maximized window back to normal + + + + Makes the window full screen + + + + Closes the window + + + + Displays the name of the window and contains controls to manipulate it + + + + + Q3ToolBar + + More... + + + + + Q3UrlOperator + + The protocol `%1' is not supported + + + + The protocol `%1' does not support listing directories + + + + The protocol `%1' does not support creating new directories + + + + The protocol `%1' does not support removing files or directories + + + + The protocol `%1' does not support renaming files or directories + + + + The protocol `%1' does not support getting files + + + + The protocol `%1' does not support putting files + + + + The protocol `%1' does not support copying or moving files or directories + + + + (unknown) + + + + + Q3Wizard + + &Cancel + + + + < &Back + + + + &Next > + + + + &Finish + + + + &Help + + + + + QAbstractSocket + + Host not found + + + + Connection refused + + + + Connection timed out + + + + Operation on socket is not supported + + + + Socket operation timed out + + + + Socket is not connected + + + + Network unreachable + + + + + QAbstractSpinBox + + &Step up + + + + Step &down + + + + &Select All + + + + + QAccessibleButton + + Press + + + + + QApplication + + QT_LAYOUT_DIRECTION + 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. + RTL + + + Executable '%1' requires Qt %2, found Qt %3. + + + + Incompatible Qt Library Error + + + + Activate + + + + Activates the program's main window + + + + + QAxSelect + + Select ActiveX Control + + + + OK + + + + &Cancel + + + + COM &Object: + + + + + QCheckBox + + Uncheck + + + + Check + + + + Toggle + + + + + QColorDialog + + Hu&e: + Hu&e: + + + &Sat: + &Sat: + + + &Val: + &Val: + + + &Red: + &Red: + + + &Green: + + + + Bl&ue: + + + + A&lpha channel: + + + + Select Color + Select Color + + + &Basic colors + + + + &Custom colors + + + + &Add to Custom Colors + + + + + QComboBox + + Open + Open + + + False + False + + + True + True + + + Close + Close + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + %1: key is empty + + + %1: unable to make key + QSystemSemaphore + %1: unable to make key + + + %1: ftok failed + QSystemSemaphore + %1: ftok failed + + + %1: already exists + QSystemSemaphore + %1: already exists + + + %1: does not exist + QSystemSemaphore + %1: does not exist + + + %1: out of resources + QSystemSemaphore + %1: out of resources + + + %1: unknown error %2 + QSystemSemaphore + %1: unknown error %2 + + + + QDB2Driver + + Unable to connect + Unable to connect + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + Unable to set autocommit + Unable to set autocommit + + + + QDB2Result + + Unable to execute statement + Unable to execute statement + + + Unable to prepare statement + Unable to prepare statement + + + Unable to bind variable + Unable to bind variable + + + Unable to fetch record %1 + Unable to fetch record %1 + + + Unable to fetch next + Unable to fetch next + + + Unable to fetch first + Unable to fetch first + + + + QDateTimeEdit + + AM + AM + + + am + am + + + PM + PM + + + pm + pm + + + + QDial + + QDial + QDial + + + SpeedoMeter + SpeedoMeter + + + SliderHandle + SliderHandle + + + + QDialog + + What's This? + What's This? + + + Done + Done + + + + QDialogButtonBox + + OK + OK + + + Save + Save + + + &Save + &Save + + + Open + Open + + + Cancel + Cancel + + + &Cancel + &Cancel + + + Close + Close + + + &Close + &Close + + + Apply + Apply + + + Reset + Reset + + + Help + Help + + + Don't Save + Don't Save + + + Discard + Discard + + + &Yes + &Yes + + + Yes to &All + Yes to &All + + + &No + &No + + + N&o to All + N&o to All + + + Save All + Save All + + + Abort + Abort + + + Retry + Retry + + + Ignore + Ignore + + + Restore Defaults + Restore Defaults + + + Close without Saving + Close without Saving + + + &OK + &OK + + + + QDirModel + + Name + Name + + + Size + Size + + + Kind + Match OS X Finder + Kind + + + Type + All other platforms + Type + + + Date Modified + Date Modified + + + + QDockWidget + + Close + Close + + + Dock + Dock + + + Float + Float + + + + QDoubleSpinBox + + More + More + + + Less + Less + + + + QErrorMessage + + &Show this message again + &Show this message again + + + &OK + &OK + + + Debug Message: + Debug Message: + + + Warning: + Warning: + + + Fatal Error: + Fatal Error: + + + + QFile + + Destination file exists + Destination file exists + + + Will not rename sequential file using block copy + Will not rename sequential file using block copy + + + Cannot remove source file + Cannot remove source file + + + Cannot open %1 for input + Cannot open %1 for input + + + Cannot open for output + Cannot open for output + + + Failure to write block + Failure to write block + + + Cannot create %1 for output + Cannot create %1 for output + + + + QFileDialog + + All Files (*) + All Files (*) + + + Back + Back + + + List View + List View + + + Detail View + Detail View + + + File + File + + + Open + Open + + + Save As + Save As + + + &Open + &Open + + + &Save + &Save + + + Recent Places + Recent Places + + + &Rename + &Rename + + + &Delete + &Delete + + + Show &hidden files + Show &hidden files + + + New Folder + New Folder + + + Find Directory + Find Directory + + + Directories + Directories + + + All Files (*.*) + All Files (*.*) + + + Directory: + Directory: + + + %1 already exists. +Do you want to replace it? + %1 already exists. +Do you want to replace it? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +File not found. +Please verify the correct file name was given. + + + My Computer + My Computer + + + Parent Directory + Parent Directory + + + Files of type: + Files of type: + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +Directory not found. +Please verify the correct directory name was given. + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' is write protected. +Do you want to delete it anyway? + + + Are sure you want to delete '%1'? + Are sure you want to delete '%1'? + + + Could not delete directory. + Could not delete directory. + + + Drive + Drive + + + File Folder + Match Windows Explorer + File Folder + + + Folder + All other platforms + Folder + + + Alias + Mac OS X Finder + Alias + + + Shortcut + All other platforms + Shortcut + + + Unknown + Unknown + + + Show + Show + + + Forward + Forward + + + &New Folder + &New Folder + + + &Choose + &Choose + + + Remove + Remove + + + File &name: + File &name: + + + Look in: + Look in: + + + Create New Folder + Create New Folder + + + + QFileSystemModel + + %1 TB + %1 TB + + + %1 GB + %1 GB + + + %1 MB + %1 MB + + + %1 KB + %1 KB + + + %1 bytes + %1 bytes + + + Invalid filename + Invalid filename + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + + + Name + Name + + + Size + Size + + + Kind + Match OS X Finder + Kind + + + Type + All other platforms + Type + + + Date Modified + Date Modified + + + My Computer + My Computer + + + Computer + Computer + + + %1 byte(s) + %1 byte(s) + + + + QFontDatabase + + Normal + Normal + + + Bold + Bold + + + Demi Bold + Demi Bold + + + Black + Black + + + Demi + Demi + + + Light + Light + + + Italic + Italic + + + Oblique + Oblique + + + Any + Any + + + Latin + Latin + + + Greek + Greek + + + Cyrillic + Cyrillic + + + Armenian + Armenian + + + Hebrew + Hebrew + + + Arabic + Arabic + + + Syriac + Syriac + + + Thaana + Thaana + + + Devanagari + Devanagari + + + Bengali + Bengali + + + Gurmukhi + Gurmukhi + + + Gujarati + Gujarati + + + Oriya + Oriya + + + Tamil + Tamil + + + Telugu + Telugu + + + Kannada + Kannada + + + Malayalam + Malayalam + + + Sinhala + Sinhala + + + Thai + Thai + + + Lao + Lao + + + Tibetan + Tibetan + + + Myanmar + Myanmar + + + Georgian + Georgian + + + Khmer + Khmer + + + Simplified Chinese + Simplified Chinese + + + Traditional Chinese + Traditional Chinese + + + Japanese + Japanese + + + Korean + Korean + + + Vietnamese + Vietnamese + + + Symbol + Symbol + + + Ogham + Ogham + + + Runic + Runic + + + N'Ko + N'Ko + + + + QFontDialog + + &Font + &Font + + + Font st&yle + Font st&yle + + + &Size + &Size + + + Effects + Effects + + + Stri&keout + Stri&keout + + + &Underline + &Underline + + + Sample + Sample + + + Select Font + Select Font + + + Wr&iting System + Wr&iting System + + + + QFtp + + Host %1 found + Host %1 found + + + Host found + Host found + + + Connected to host %1 + Connected to host %1 + + + Connected to host + Connected to host + + + Connection to %1 closed + Connection to %1 closed + + + Connection closed + Connection closed + + + Host %1 not found + Host %1 not found + + + Connection refused to host %1 + Connection refused to host %1 + + + Connection timed out to host %1 + Connection timed out to host %1 + + + Unknown error + Unknown error + + + Connecting to host failed: +%1 + Connecting to host failed: +%1 + + + Login failed: +%1 + Login failed: +%1 + + + Listing directory failed: +%1 + Listing directory failed: +%1 + + + Changing directory failed: +%1 + Changing directory failed: +%1 + + + Downloading file failed: +%1 + Downloading file failed: +%1 + + + Uploading file failed: +%1 + Uploading file failed: +%1 + + + Removing file failed: +%1 + Removing file failed: +%1 + + + Creating directory failed: +%1 + Creating directory failed: +%1 + + + Removing directory failed: +%1 + Removing directory failed: +%1 + + + Not connected + Not connected + + + Connection refused for data connection + Connection refused for data connection + + + + QHostInfo + + Unknown error + Unknown error + + + + QHostInfoAgent + + Host not found + Host not found + + + Unknown address type + Unknown address type + + + Unknown error + Unknown error + + + No host name given + No host name given + + + Invalid hostname + Invalid hostname + + + + QHttp + + Connection refused + Connection refused + + + Host %1 not found + Host %1 not found + + + Wrong content length + Wrong content length + + + HTTP request failed + HTTP request failed + + + Host %1 found + Host %1 found + + + Host found + Host found + + + Connected to host %1 + Connected to host %1 + + + Connected to host + Connected to host + + + Connection to %1 closed + Connection to %1 closed + + + Connection closed + Connection closed + + + Unknown error + Unknown error + + + Request aborted + Request aborted + + + No server set to connect to + No server set to connect to + + + Server closed connection unexpectedly + Server closed connection unexpectedly + + + Invalid HTTP response header + Invalid HTTP response header + + + Unknown authentication method + Unknown authentication method + + + Invalid HTTP chunked body + Invalid HTTP chunked body + + + Error writing response to device + Error writing response to device + + + Proxy authentication required + Proxy authentication required + + + Authentication required + Authentication required + + + Proxy requires authentication + Proxy requires authentication + + + Host requires authentication + Host requires authentication + + + Data corrupted + Data corrupted + + + SSL handshake failed + SSL handshake failed + + + Unknown protocol specified + Unknown protocol specified + + + Connection refused (or timed out) + Connection refused (or timed out) + + + HTTPS connection requested but SSL support not compiled in + HTTPS connection requested but SSL support not compiled in + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + Did not receive HTTP response from proxy + + + Error parsing authentication request from proxy + Error parsing authentication request from proxy + + + Authentication required + Authentication required + + + Proxy denied connection + Proxy denied connection + + + Error communicating with HTTP proxy + Error communicating with HTTP proxy + + + Proxy server not found + Proxy server not found + + + Proxy connection refused + Proxy connection refused + + + Proxy server connection timed out + Proxy server connection timed out + + + Proxy connection closed prematurely + Proxy connection closed prematurely + + + + QIBaseDriver + + Error opening database + Error opening database + + + Could not start transaction + Could not start transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QIBaseResult + + Unable to create BLOB + Unable to create BLOB + + + Unable to write BLOB + Unable to write BLOB + + + Unable to open BLOB + Unable to open BLOB + + + Unable to read BLOB + Unable to read BLOB + + + Could not find array + Could not find array + + + Could not get array data + Could not get array data + + + Could not get query info + Could not get query info + + + Could not start transaction + Could not start transaction + + + Unable to commit transaction + Unable to commit transaction + + + Could not allocate statement + Could not allocate statement + + + Could not prepare statement + Could not prepare statement + + + Could not describe input statement + Could not describe input statement + + + Could not describe statement + Could not describe statement + + + Unable to close statement + Unable to close statement + + + Unable to execute query + Unable to execute query + + + Could not fetch next item + Could not fetch next item + + + Could not get statement info + Could not get statement info + + + + QIODevice + + Permission denied + Permission denied + + + Too many open files + Too many open files + + + No such file or directory + No such file or directory + + + No space left on device + No space left on device + + + Unknown error + Unknown error + + + + QInputContext + + XIM + XIM + + + FEP + FEP + + + XIM input method + XIM input method + + + Windows input method + Windows input method + + + Mac OS X input method + Mac OS X input method + + + S60 FEP input method + S60 FEP input method + + + + QInputDialog + + Enter a value: + Enter a value: + + + + QLibrary + + Could not mmap '%1': %2 + Could not mmap '%1': %2 + + + Plugin verification data mismatch in '%1' + Plugin verification data mismatch in '%1' + + + Could not unmap '%1': %2 + Could not unmap '%1': %2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + + + Unknown error + Unknown error + + + The shared library was not found. + The shared library was not found. + + + The file '%1' is not a valid Qt plugin. + The file '%1' is not a valid Qt plugin. + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + + + Cannot load library %1: %2 + Cannot load library %1: %2 + + + Cannot unload library %1: %2 + Cannot unload library %1: %2 + + + Cannot resolve symbol "%1" in %2: %3 + Cannot resolve symbol "%1" in %2: %3 + + + + QLineEdit + + Select All + Select All + + + &Undo + &Undo + + + &Redo + &Redo + + + Cu&t + Cu&t + + + &Copy + &Copy + + + &Paste + &Paste + + + Delete + Delete + + + + QLocalServer + + %1: Name error + %1: Name error + + + %1: Permission denied + %1: Permission denied + + + %1: Address in use + %1: Address in use + + + %1: Unknown error %2 + %1: Unknown error %2 + + + + QLocalSocket + + %1: Connection refused + %1: Connection refused + + + %1: Remote closed + %1: Remote closed + + + %1: Invalid name + %1: Invalid name + + + %1: Socket access error + %1: Socket access error + + + %1: Socket resource error + %1: Socket resource error + + + %1: Socket operation timed out + %1: Socket operation timed out + + + %1: Datagram too large + %1: Datagram too large + + + %1: Connection error + %1: Connection error + + + %1: The socket operation is not supported + %1: The socket operation is not supported + + + %1: Unknown error + %1: Unknown error + + + %1: Unknown error %2 + %1: Unknown error %2 + + + + QMYSQLDriver + + Unable to open database ' + Unable to open database ' + + + Unable to connect + Unable to connect + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QMYSQLResult + + Unable to fetch data + Unable to fetch data + + + Unable to execute query + Unable to execute query + + + Unable to store result + Unable to store result + + + Unable to prepare statement + Unable to prepare statement + + + Unable to reset statement + Unable to reset statement + + + Unable to bind value + Unable to bind value + + + Unable to execute statement + Unable to execute statement + + + Unable to bind outvalues + Unable to bind outvalues + + + Unable to store statement results + Unable to store statement results + + + Unable to execute next query + Unable to execute next query + + + Unable to store next result + Unable to store next result + + + + QMdiArea + + (Untitled) + (Untitled) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + Close + + + Minimize + Minimize + + + Restore Down + Restore Down + + + &Restore + &Restore + + + &Move + &Move + + + &Size + &Size + + + Mi&nimize + Mi&nimize + + + Ma&ximize + Ma&ximize + + + Stay on &Top + Stay on &Top + + + &Close + &Close + + + Maximize + Maximize + + + Unshade + Unshade + + + Shade + Shade + + + Restore + Restore + + + Help + Help + + + Menu + Menu + + + - [%1] + - [%1] + + + + QMenu + + Close + Close + + + Open + Open + + + Execute + Execute + + + + QMenuBar + + Actions + Actions + + + + QMessageBox + + OK + OK + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <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><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> + <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> + + + About Qt + About Qt + + + Help + Help + + + Show Details... + Show Details... + + + Hide Details... + Hide Details... + + + + QMultiInputContext + + Select IM + Select IM + + + + QMultiInputContextPlugin + + Multiple input method switcher + Multiple input method switcher + + + Multiple input method switcher that uses the context menu of the text widgets + Multiple input method switcher that uses the context menu of the text widgets + + + + QNativeSocketEngine + + The remote host closed the connection + The remote host closed the connection + + + Network operation timed out + Network operation timed out + + + Out of resources + Out of resources + + + Unsupported socket operation + Unsupported socket operation + + + Protocol type not supported + Protocol type not supported + + + Invalid socket descriptor + Invalid socket descriptor + + + Network unreachable + Network unreachable + + + Permission denied + Permission denied + + + Connection timed out + Connection timed out + + + Connection refused + Connection refused + + + The bound address is already in use + The bound address is already in use + + + The address is not available + The address is not available + + + The address is protected + The address is protected + + + Unable to send a message + Unable to send a message + + + Unable to receive a message + Unable to receive a message + + + Unable to write + Unable to write + + + Network error + Network error + + + Another socket is already listening on the same port + Another socket is already listening on the same port + + + Unable to initialize non-blocking socket + Unable to initialize non-blocking socket + + + Unable to initialize broadcast socket + Unable to initialize broadcast socket + + + Attempt to use IPv6 socket on a platform with no IPv6 support + Attempt to use IPv6 socket on a platform with no IPv6 support + + + Host unreachable + Host unreachable + + + Datagram was too large to send + Datagram was too large to send + + + Operation on non-socket + Operation on non-socket + + + Unknown error + Unknown error + + + The proxy type is invalid for this operation + The proxy type is invalid for this operation + + + + QNetworkAccessCacheBackend + + Error opening %1 + Error opening %1 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + Write error writing to %1: %2 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + Request for opening non-local file %1 + + + Error opening %1: %2 + Error opening %1: %2 + + + Write error writing to %1: %2 + Write error writing to %1: %2 + + + Cannot open %1: Path is a directory + Cannot open %1: Path is a directory + + + Read error reading from %1: %2 + Read error reading from %1: %2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + No suitable proxy found + + + Cannot open %1: is a directory + Cannot open %1: is a directory + + + Logging in to %1 failed: authentication required + Logging in to %1 failed: authentication required + + + Error while downloading %1: %2 + Error while downloading %1: %2 + + + Error while uploading %1: %2 + Error while uploading %1: %2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + No suitable proxy found + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + Error downloading %1 - server replied: %2 + + + Protocol "%1" is unknown + Protocol "%1" is unknown + + + + QNetworkReplyImpl + + Operation canceled + Operation canceled + + + + QOCIDriver + + Unable to logon + Unable to logon + + + Unable to initialize + QOCIDriver + Unable to initialize + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QOCIResult + + Unable to bind column for batch execute + Unable to bind column for batch execute + + + Unable to execute batch statement + Unable to execute batch statement + + + Unable to goto next + Unable to goto next + + + Unable to alloc statement + Unable to alloc statement + + + Unable to prepare statement + Unable to prepare statement + + + Unable to get statement type + Unable to get statement type + + + Unable to bind value + Unable to bind value + + + Unable to execute statement + Unable to execute statement + + + + QODBCDriver + + Unable to connect + Unable to connect + + + Unable to disable autocommit + Unable to disable autocommit + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + Unable to enable autocommit + Unable to enable autocommit + + + Unable to connect - Driver doesn't support all functionality required + Unable to connect - Driver doesn't support all functionality required + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + + + Unable to execute statement + Unable to execute statement + + + Unable to fetch next + Unable to fetch next + + + Unable to prepare statement + Unable to prepare statement + + + Unable to bind variable + Unable to bind variable + + + Unable to fetch last + Unable to fetch last + + + Unable to fetch + Unable to fetch + + + Unable to fetch first + Unable to fetch first + + + Unable to fetch previous + Unable to fetch previous + + + + QObject + + Invalid hostname + Invalid hostname + + + Operation not supported on %1 + Operation not supported on %1 + + + Invalid URI: %1 + Invalid URI: %1 + + + Socket error on %1: %2 + Socket error on %1: %2 + + + Remote host closed the connection prematurely on %1 + Remote host closed the connection prematurely on %1 + + + No host name given + No host name given + + + + QPPDOptionsModel + + Name + Name + + + Value + Value + + + + QPSQLDriver + + Unable to connect + Unable to connect + + + Could not begin transaction + Could not begin transaction + + + Could not commit transaction + Could not commit transaction + + + Could not rollback transaction + Could not rollback transaction + + + Unable to subscribe + Unable to subscribe + + + Unable to unsubscribe + Unable to unsubscribe + + + + QPSQLResult + + Unable to create query + Unable to create query + + + Unable to prepare statement + Unable to prepare statement + + + + QPageSetupWidget + + Centimeters (cm) + Centimeters (cm) + + + Millimeters (mm) + Millimeters (mm) + + + Inches (in) + Inches (in) + + + Points (pt) + Points (pt) + + + Form + Form + + + Paper + Paper + + + Page size: + Page size: + + + Width: + Width: + + + Height: + Height: + + + Paper source: + Paper source: + + + Orientation + Orientation + + + Portrait + Portrait + + + Landscape + Landscape + + + Reverse landscape + Reverse landscape + + + Reverse portrait + Reverse portrait + + + Margins + Margins + + + top margin + top margin + + + left margin + left margin + + + right margin + right margin + + + bottom margin + bottom margin + + + + QPluginLoader + + Unknown error + Unknown error + + + The plugin was not loaded. + The plugin was not loaded. + + + + QPrintDialog + + locally connected + locally connected + + + Aliases: %1 + Aliases: %1 + + + unknown + unknown + + + OK + OK + + + Print all + Print all + + + Print range + Print range + + + A0 (841 x 1189 mm) + A0 (841 x 1189 mm) + + + A1 (594 x 841 mm) + A1 (594 x 841 mm) + + + A2 (420 x 594 mm) + A2 (420 x 594 mm) + + + A3 (297 x 420 mm) + A3 (297 x 420 mm) + + + A5 (148 x 210 mm) + A5 (148 x 210 mm) + + + A6 (105 x 148 mm) + A6 (105 x 148 mm) + + + A7 (74 x 105 mm) + A7 (74 x 105 mm) + + + A8 (52 x 74 mm) + A8 (52 x 74 mm) + + + A9 (37 x 52 mm) + A9 (37 x 52 mm) + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 mm) + + + B1 (707 x 1000 mm) + B1 (707 x 1000 mm) + + + B2 (500 x 707 mm) + B2 (500 x 707 mm) + + + B3 (353 x 500 mm) + B3 (353 x 500 mm) + + + B4 (250 x 353 mm) + B4 (250 x 353 mm) + + + B6 (125 x 176 mm) + B6 (125 x 176 mm) + + + B7 (88 x 125 mm) + B7 (88 x 125 mm) + + + B8 (62 x 88 mm) + B8 (62 x 88 mm) + + + B9 (44 x 62 mm) + B9 (44 x 62 mm) + + + B10 (31 x 44 mm) + B10 (31 x 44 mm) + + + C5E (163 x 229 mm) + C5E (163 x 229 mm) + + + DLE (110 x 220 mm) + DLE (110 x 220 mm) + + + Folio (210 x 330 mm) + Folio (210 x 330 mm) + + + Ledger (432 x 279 mm) + Ledger (432 x 279 mm) + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432 mm) + + + US Common #10 Envelope (105 x 241 mm) + US Common #10 Envelope (105 x 241 mm) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 mm, 8.26 x 11.7 inches) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 mm, 6.93 x 9.84 inches) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10 inches, 191 x 254 mm) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14 inches, 216 x 356 mm) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11 inches, 216 x 279 mm) + + + Print selection + Print selection + + + Print + Print + + + Print To File ... + Print To File ... + + + File %1 is not writable. +Please choose a different file name. + File %1 is not writable. +Please choose a different file name. + + + %1 already exists. +Do you want to overwrite it? + %1 already exists. +Do you want to overwrite it? + + + File exists + File exists + + + <qt>Do you want to overwrite it?</qt> + <qt>Do you want to overwrite it?</qt> + + + %1 is a directory. +Please choose a different file name. + %1 is a directory. +Please choose a different file name. + + + The 'From' value cannot be greater than the 'To' value. + The 'From' value cannot be greater than the 'To' value. + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + Executive + + + Folio + Folio + + + Ledger + Ledger + + + Legal + Legal + + + Letter + Letter + + + Tabloid + Tabloid + + + US Common #10 Envelope + US Common #10 Envelope + + + Custom + Custom + + + &Options >> + &Options >> + + + &Options << + &Options << + + + Print to File (PDF) + Print to File (PDF) + + + Print to File (Postscript) + Print to File (Postscript) + + + Local file + Local file + + + Write %1 file + Write %1 file + + + &Print + &Print + + + + QPrintPreviewDialog + + %1% + %1% + + + Print Preview + Print Preview + + + Next page + Next page + + + Previous page + Previous page + + + First page + First page + + + Last page + Last page + + + Fit width + Fit width + + + Fit page + Fit page + + + Zoom in + Zoom in + + + Zoom out + Zoom out + + + Portrait + Portrait + + + Landscape + Landscape + + + Show single page + Show single page + + + Show facing pages + Show facing pages + + + Show overview of all pages + Show overview of all pages + + + Print + Print + + + Page setup + Page setup + + + Close + Close + + + Export to PDF + Export to PDF + + + Export to PostScript + Export to PostScript + + + Page Setup + Page Setup + + + + QPrintPropertiesWidget + + Form + Form + + + Page + Page + + + Advanced + Advanced + + + + QPrintSettingsOutput + + Form + Form + + + Copies + Copies + + + Print range + Print range + + + Print all + Print all + + + Pages from + Pages from + + + to + to + + + Selection + Selection + + + Output Settings + Output Settings + + + Copies: + Copies: + + + Collate + Collate + + + Reverse + Reverse + + + Options + Options + + + Color Mode + Color Mode + + + Color + Color + + + Grayscale + Grayscale + + + Duplex Printing + Duplex Printing + + + None + None + + + Long side + Long side + + + Short side + Short side + + + + QPrintWidget + + Form + Form + + + Printer + Printer + + + &Name: + &Name: + + + P&roperties + P&roperties + + + Location: + Location: + + + Preview + Preview + + + Type: + Type: + + + Output &file: + Output &file: + + + ... + ... + + + + QProcess + + Could not open input redirection for reading + Could not open input redirection for reading + + + Could not open output redirection for writing + Could not open output redirection for writing + + + Resource error (fork failure): %1 + Resource error (fork failure): %1 + + + Process operation timed out + Process operation timed out + + + Error reading from process + Error reading from process + + + Error writing to process + Error writing to process + + + Process crashed + Process crashed + + + No program defined + No program defined + + + Process failed to start: %1 + Process failed to start: %1 + + + + QProgressDialog + + Cancel + Cancel + + + + QPushButton + + Open + Open + + + + QRadioButton + + Check + Check + + + + QRegExp + + no error occurred + no error occurred + + + disabled feature used + disabled feature used + + + bad char class syntax + bad char class syntax + + + bad lookahead syntax + bad lookahead syntax + + + bad repetition syntax + bad repetition syntax + + + invalid octal value + invalid octal value + + + missing left delim + missing left delim + + + unexpected end + unexpected end + + + met internal limit + met internal limit + + + invalid interval + invalid interval + + + invalid category + invalid category + + + + QSQLite2Driver + + Error opening database + Error opening database + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QSQLite2Result + + Unable to fetch results + Unable to fetch results + + + Unable to execute statement + Unable to execute statement + + + + QSQLiteDriver + + Error opening database + Error opening database + + + Error closing database + Error closing database + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QSQLiteResult + + Unable to fetch row + Unable to fetch row + + + Unable to execute statement + Unable to execute statement + + + Unable to reset statement + Unable to reset statement + + + Unable to bind parameters + Unable to bind parameters + + + Parameter count mismatch + Parameter count mismatch + + + No query + No query + + + + QScriptBreakpointsModel + + ID + ID + + + Location + Location + + + Condition + Condition + + + Ignore-count + Ignore-count + + + Single-shot + Single-shot + + + Hit-count + Hit-count + + + + QScriptBreakpointsWidget + + New + New + + + Delete + Delete + + + + QScriptDebugger + + Go to Line + Go to Line + + + Line: + Line: + + + Interrupt + Interrupt + + + Shift+F5 + Shift+F5 + + + Continue + Continue + + + F5 + F5 + + + Step Into + Step Into + + + F11 + F11 + + + Step Over + Step Over + + + F10 + F10 + + + Step Out + Step Out + + + Shift+F11 + Shift+F11 + + + Run to Cursor + Run to Cursor + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + Run to New Script + + + Toggle Breakpoint + Toggle Breakpoint + + + F9 + F9 + + + Clear Debug Output + Clear Debug Output + + + Clear Error Log + Clear Error Log + + + Clear Console + Clear Console + + + &Find in Script... + &Find in Script... + + + Ctrl+F + Ctrl+F + + + Find &Next + Find &Next + + + F3 + F3 + + + Find &Previous + Find &Previous + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + Debug + + + + QScriptDebuggerCodeFinderWidget + + Close + Close + + + Previous + Previous + + + Next + Next + + + Case Sensitive + Case Sensitive + + + Whole words + Whole words + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + + + + QScriptDebuggerLocalsModel + + Name + Name + + + Value + Value + + + + QScriptDebuggerStackModel + + Level + Level + + + Name + Name + + + Location + Location + + + + QScriptEdit + + Toggle Breakpoint + Toggle Breakpoint + + + Disable Breakpoint + Disable Breakpoint + + + Enable Breakpoint + Enable Breakpoint + + + Breakpoint Condition: + Breakpoint Condition: + + + + QScriptEngineDebugger + + Loaded Scripts + Loaded Scripts + + + Breakpoints + Breakpoints + + + Stack + Stack + + + Locals + Locals + + + Console + Console + + + Debug Output + Debug Output + + + Error Log + Error Log + + + Search + Search + + + View + View + + + Qt Script Debugger + Qt Script Debugger + + + + QScriptNewBreakpointWidget + + Close + Close + + + + QScrollBar + + Scroll here + Scroll here + + + Left edge + Left edge + + + Top + Top + + + Right edge + Right edge + + + Bottom + Bottom + + + Page left + Page left + + + Page up + Page up + + + Page right + Page right + + + Page down + Page down + + + Scroll left + Scroll left + + + Scroll up + Scroll up + + + Scroll right + Scroll right + + + Scroll down + Scroll down + + + Line up + Line up + + + Position + Position + + + Line down + Line down + + + + QSharedMemory + + %1: create size is less then 0 + %1: create size is less then 0 + + + %1: unable to lock + %1: unable to lock + + + %1: unable to unlock + %1: unable to unlock + + + %1: permission denied + %1: permission denied + + + %1: already exists + %1: already exists + + + %1: doesn't exists + %1: doesn't exists + + + %1: out of resources + %1: out of resources + + + %1: unknown error %2 + %1: unknown error %2 + + + %1: key is empty + %1: key is empty + + + %1: ftok failed + %1: ftok failed + + + %1: unable to make key + %1: unable to make key + + + %1: doesn't exist + %1: doesn't exist + + + %1: UNIX key file doesn't exist + %1: UNIX key file doesn't exist + + + %1: system-imposed size restrictions + %1: system-imposed size restrictions + + + %1: not attached + %1: not attached + + + %1: invalid size + %1: invalid size + + + %1: key error + %1: key error + + + %1: size query failed + %1: size query failed + + + %1: unable to set key on lock + %1: unable to set key on lock + + + + QShortcut + + Space + Space + + + Esc + Esc + + + Tab + Tab + + + Backtab + Backtab + + + Backspace + Backspace + + + Return + Return + + + Enter + Enter + + + Ins + Ins + + + Del + Del + + + Pause + Pause + + + Print + Print + + + SysReq + SysReq + + + Home + Home + + + End + End + + + Left + Left + + + Up + Up + + + Right + Right + + + Down + Down + + + PgUp + PgUp + + + PgDown + PgDown + + + CapsLock + CapsLock + + + NumLock + NumLock + + + ScrollLock + ScrollLock + + + Menu + Menu + + + Help + Help + + + Back + Back + + + Forward + Forward + + + Stop + Stop + + + Refresh + Refresh + + + Volume Down + Volume Down + + + Volume Mute + Volume Mute + + + Volume Up + Volume Up + + + Bass Boost + Bass Boost + + + Bass Up + Bass Up + + + Bass Down + Bass Down + + + Treble Up + Treble Up + + + Treble Down + Treble Down + + + Media Play + Media Play + + + Media Stop + Media Stop + + + Media Previous + Media Previous + + + Media Next + Media Next + + + Media Record + Media Record + + + Favorites + Favorites + + + Search + Search + + + Standby + Standby + + + Open URL + Open URL + + + Launch Mail + Launch Mail + + + Launch Media + Launch Media + + + Launch (0) + Launch (0) + + + Launch (1) + Launch (1) + + + Launch (2) + Launch (2) + + + Launch (3) + Launch (3) + + + Launch (4) + Launch (4) + + + Launch (5) + Launch (5) + + + Launch (6) + Launch (6) + + + Launch (7) + Launch (7) + + + Launch (8) + Launch (8) + + + Launch (9) + Launch (9) + + + Launch (A) + Launch (A) + + + Launch (B) + Launch (B) + + + Launch (C) + Launch (C) + + + Launch (D) + Launch (D) + + + Launch (E) + Launch (E) + + + Launch (F) + Launch (F) + + + Monitor Brightness Up + Monitor Brightness Up + + + Monitor Brightness Down + Monitor Brightness Down + + + Keyboard Light On/Off + Keyboard Light On/Off + + + Keyboard Brightness Up + Keyboard Brightness Up + + + Keyboard Brightness Down + Keyboard Brightness Down + + + Power Off + Power Off + + + Wake Up + Wake Up + + + Eject + Eject + + + Screensaver + Screensaver + + + WWW + WWW + + + Sleep + Sleep + + + LightBulb + LightBulb + + + Shop + Shop + + + History + History + + + Add Favorite + Add Favorite + + + Hot Links + Hot Links + + + Adjust Brightness + Adjust Brightness + + + Finance + Finance + + + Community + Community + + + Audio Rewind + Audio Rewind + + + Back Forward + Back Forward + + + Application Left + Application Left + + + Application Right + Application Right + + + Book + Book + + + CD + CD + + + Calculator + Calculator + + + Clear + Clear + + + Clear Grab + Clear Grab + + + Close + Close + + + Copy + Copy + + + Cut + Cut + + + Display + Display + + + DOS + DOS + + + Documents + Documents + + + Spreadsheet + Spreadsheet + + + Browser + Browser + + + Game + Game + + + Go + Go + + + iTouch + iTouch + + + Logoff + Logoff + + + Market + Market + + + Meeting + Meeting + + + Keyboard Menu + Keyboard Menu + + + Menu PB + Menu PB + + + My Sites + My Sites + + + News + News + + + Home Office + Home Office + + + Option + Option + + + Paste + Paste + + + Phone + Phone + + + Reply + Reply + + + Reload + Reload + + + Rotate Windows + Rotate Windows + + + Rotation PB + Rotation PB + + + Rotation KB + Rotation KB + + + Save + Save + + + Send + Send + + + Spellchecker + Spellchecker + + + Split Screen + Split Screen + + + Support + Support + + + Task Panel + Task Panel + + + Terminal + Terminal + + + Tools + Tools + + + Travel + Travel + + + Video + Video + + + Word Processor + Word Processor + + + XFer + XFer + + + Zoom In + Zoom In + + + Zoom Out + Zoom Out + + + Away + Away + + + Messenger + Messenger + + + WebCam + WebCam + + + Mail Forward + Mail Forward + + + Pictures + Pictures + + + Music + Music + + + Battery + Battery + + + Bluetooth + Bluetooth + + + Wireless + Wireless + + + Ultra Wide Band + Ultra Wide Band + + + Audio Forward + Audio Forward + + + Audio Repeat + Audio Repeat + + + Audio Random Play + Audio Random Play + + + Subtitle + Subtitle + + + Audio Cycle Track + Audio Cycle Track + + + Time + Time + + + View + View + + + Top Menu + Top Menu + + + Suspend + Suspend + + + Hibernate + Hibernate + + + Print Screen + Print Screen + + + Page Up + Page Up + + + Page Down + Page Down + + + Caps Lock + Caps Lock + + + Num Lock + Num Lock + + + Number Lock + Number Lock + + + Scroll Lock + Scroll Lock + + + Insert + Insert + + + Delete + Delete + + + Escape + Escape + + + System Request + System Request + + + Select + Select + + + Yes + Yes + + + No + No + + + Context1 + Context1 + + + Context2 + Context2 + + + Context3 + Context3 + + + Context4 + Context4 + + + Call + Call + + + Hangup + Hangup + + + Flip + Flip + + + Ctrl + Ctrl + + + Shift + Shift + + + Alt + Alt + + + Meta + Meta + + + + + + + + + F%1 + F%1 + + + Home Page + Home Page + + + + QSlider + + Page left + Page left + + + Page up + Page up + + + Position + Position + + + Page right + Page right + + + Page down + Page down + + + + QSocks5SocketEngine + + Connection to proxy refused + Connection to proxy refused + + + Connection to proxy closed prematurely + Connection to proxy closed prematurely + + + Proxy host not found + Proxy host not found + + + Connection to proxy timed out + Connection to proxy timed out + + + Proxy authentication failed + Proxy authentication failed + + + Proxy authentication failed: %1 + Proxy authentication failed: %1 + + + SOCKS version 5 protocol error + SOCKS version 5 protocol error + + + General SOCKSv5 server failure + General SOCKSv5 server failure + + + Connection not allowed by SOCKSv5 server + Connection not allowed by SOCKSv5 server + + + TTL expired + TTL expired + + + SOCKSv5 command not supported + SOCKSv5 command not supported + + + Address type not supported + Address type not supported + + + Unknown SOCKSv5 proxy error code 0x%1 + Unknown SOCKSv5 proxy error code 0x%1 + + + Network operation timed out + Network operation timed out + + + + QSoftKeyManager + + Ok + Ok + + + Select + Select + + + Done + Done + + + Options + Options + + + Cancel + Cancel + + + Exit + Exit + + + + QSpinBox + + More + More + + + Less + Less + + + + QSql + + Delete + Delete + + + Delete this record? + Delete this record? + + + Yes + Yes + + + No + No + + + Insert + Insert + + + Update + Update + + + Save edits? + Save edits? + + + Cancel + Cancel + + + Confirm + Confirm + + + Cancel your edits? + Cancel your edits? + + + + QSslSocket + + Unable to write data: %1 + Unable to write data: %1 + + + Unable to decrypt data: %1 + Unable to decrypt data: %1 + + + Error while reading: %1 + Error while reading: %1 + + + Error during SSL handshake: %1 + Error during SSL handshake: %1 + + + Error creating SSL context (%1) + Error creating SSL context (%1) + + + Invalid or empty cipher list (%1) + Invalid or empty cipher list (%1) + + + Private key does not certify public key, %1 + Private key does not certify public key, %1 + + + Error creating SSL session, %1 + Error creating SSL session, %1 + + + Error creating SSL session: %1 + Error creating SSL session: %1 + + + Cannot provide a certificate with no key, %1 + Cannot provide a certificate with no key, %1 + + + Error loading local certificate, %1 + Error loading local certificate, %1 + + + Error loading private key, %1 + Error loading private key, %1 + + + No error + No error + + + The issuer certificate could not be found + The issuer certificate could not be found + + + The certificate signature could not be decrypted + The certificate signature could not be decrypted + + + The public key in the certificate could not be read + The public key in the certificate could not be read + + + The signature of the certificate is invalid + The signature of the certificate is invalid + + + The certificate is not yet valid + The certificate is not yet valid + + + The certificate has expired + The certificate has expired + + + The certificate's notBefore field contains an invalid time + The certificate's notBefore field contains an invalid time + + + The certificate's notAfter field contains an invalid time + The certificate's notAfter field contains an invalid time + + + The certificate is self-signed, and untrusted + The certificate is self-signed, and untrusted + + + The root certificate of the certificate chain is self-signed, and untrusted + The root certificate of the certificate chain is self-signed, and untrusted + + + The issuer certificate of a locally looked up certificate could not be found + The issuer certificate of a locally looked up certificate could not be found + + + No certificates could be verified + No certificates could be verified + + + One of the CA certificates is invalid + One of the CA certificates is invalid + + + The basicConstraints path length parameter has been exceeded + The basicConstraints path length parameter has been exceeded + + + The supplied certificate is unsuitable for this purpose + The supplied certificate is unsuitable for this purpose + + + The root CA certificate is not trusted for this purpose + The root CA certificate is not trusted for this purpose + + + The root CA certificate is marked to reject the specified purpose + The root CA certificate is marked to reject the specified purpose + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + + + 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 + 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 + + + The peer did not present any certificate + The peer did not present any certificate + + + The host name did not match any of the valid hosts for this certificate + The host name did not match any of the valid hosts for this certificate + + + Unknown error + Unknown error + + + + QStateMachine + + Missing initial state in compound state '%1' + Missing initial state in compound state '%1' + + + Missing default state in history state '%1' + Missing default state in history state '%1' + + + No common ancestor for targets and source of transition from state '%1' + No common ancestor for targets and source of transition from state '%1' + + + Unknown error + Unknown error + + + + QSystemSemaphore + + %1: does not exist + %1: does not exist + + + %1: out of resources + %1: out of resources + + + %1: permission denied + %1: permission denied + + + %1: already exists + %1: already exists + + + %1: unknown error %2 + %1: unknown error %2 + + + + QTDSDriver + + Unable to open connection + Unable to open connection + + + Unable to use database + Unable to use database + + + + QTabBar + + Scroll Left + Scroll Left + + + Scroll Right + Scroll Right + + + + QTcpServer + + Operation on socket is not supported + Operation on socket is not supported + + + + QTextControl + + &Undo + &Undo + + + &Redo + &Redo + + + Cu&t + Cu&t + + + &Copy + &Copy + + + Copy &Link Location + Copy &Link Location + + + &Paste + &Paste + + + Delete + Delete + + + Select All + Select All + + + + QToolButton + + Press + Press + + + Open + Open + + + + QUdpSocket + + This platform does not support IPv6 + This platform does not support IPv6 + + + + QUndoGroup + + Undo + Undo + + + Redo + Redo + + + + QUndoModel + + <empty> + <empty> + + + + QUndoStack + + Undo + Undo + + + Redo + Redo + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM Left-to-right mark + + + RLM Right-to-left mark + RLM Right-to-left mark + + + ZWJ Zero width joiner + ZWJ Zero width joiner + + + ZWNJ Zero width non-joiner + ZWNJ Zero width non-joiner + + + ZWSP Zero width space + ZWSP Zero width space + + + LRE Start of left-to-right embedding + LRE Start of left-to-right embedding + + + RLE Start of right-to-left embedding + RLE Start of right-to-left embedding + + + LRO Start of left-to-right override + LRO Start of left-to-right override + + + RLO Start of right-to-left override + RLO Start of right-to-left override + + + PDF Pop directional formatting + PDF Pop directional formatting + + + Insert Unicode control character + Insert Unicode control character + + + + QWebFrame + + Request cancelled + Request cancelled + + + Request blocked + Request blocked + + + Cannot show URL + Cannot show URL + + + Frame load interrupted by policy change + Frame load interrupted by policy change + + + Cannot show mimetype + Cannot show mimetype + + + File does not exist + File does not exist + + + + QWebPage + + Submit + default label for Submit buttons in forms on web pages + Submit + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + Submit + + + Reset + default label for Reset buttons in forms on web pages + Reset + + + Choose File + title for file button used in HTML forms + Choose File + + + No file selected + text to display in file button used in HTML forms when no file is selected + No file selected + + + Open in New Window + Open in New Window context menu item + Open in New Window + + + Save Link... + Download Linked File context menu item + Save Link... + + + Copy Link + Copy Link context menu item + Copy Link + + + Open Image + Open Image in New Window context menu item + Open Image + + + Save Image + Download Image context menu item + Save Image + + + Copy Image + Copy Link context menu item + Copy Image + + + Open Frame + Open Frame in New Window context menu item + Open Frame + + + Copy + Copy context menu item + Copy + + + Go Back + Back context menu item + Go Back + + + Go Forward + Forward context menu item + Go Forward + + + Stop + Stop context menu item + Stop + + + Reload + Reload context menu item + Reload + + + Cut + Cut context menu item + Cut + + + Paste + Paste context menu item + Paste + + + No Guesses Found + No Guesses Found context menu item + No Guesses Found + + + Ignore + Ignore Spelling context menu item + Ignore + + + Add To Dictionary + Learn Spelling context menu item + Add To Dictionary + + + Search The Web + Search The Web context menu item + Search The Web + + + Look Up In Dictionary + Look Up in Dictionary context menu item + Look Up In Dictionary + + + Open Link + Open Link context menu item + Open Link + + + Ignore + Ignore Grammar context menu item + Ignore + + + Spelling + Spelling and Grammar context sub-menu item + Spelling + + + Show Spelling and Grammar + menu item title + Show Spelling and Grammar + + + Hide Spelling and Grammar + menu item title + Hide Spelling and Grammar + + + Check Spelling + Check spelling context menu item + Check Spelling + + + Check Spelling While Typing + Check spelling while typing context menu item + Check Spelling While Typing + + + Check Grammar With Spelling + Check grammar with spelling context menu item + Check Grammar With Spelling + + + Fonts + Font context sub-menu item + Fonts + + + Bold + Bold context menu item + Bold + + + Italic + Italic context menu item + Italic + + + Underline + Underline context menu item + Underline + + + Outline + Outline context menu item + Outline + + + Direction + Writing direction context sub-menu item + Direction + + + Text Direction + Text direction context sub-menu item + Text Direction + + + Default + Default writing direction context menu item + Default + + + Left to Right + Left to Right context menu item + Left to Right + + + Right to Left + Right to Left context menu item + Right to Left + + + Loading... + Media controller status message when the media is loading + Loading... + + + Live Broadcast + Media controller status message when watching a live broadcast + Live Broadcast + + + Audio Element + Media controller element + Audio Element + + + Video Element + Media controller element + Video Element + + + Mute Button + Media controller element + Mute Button + + + Unmute Button + Media controller element + Unmute Button + + + Play Button + Media controller element + Play Button + + + Pause Button + Media controller element + Pause Button + + + Slider + Media controller element + Slider + + + Slider Thumb + Media controller element + Slider Thumb + + + Rewind Button + Media controller element + Rewind Button + + + Return to Real-time Button + Media controller element + Return to Real-time Button + + + Elapsed Time + Media controller element + Elapsed Time + + + Remaining Time + Media controller element + Remaining Time + + + Status Display + Media controller element + Status Display + + + Fullscreen Button + Media controller element + Fullscreen Button + + + Seek Forward Button + Media controller element + Seek Forward Button + + + Seek Back Button + Media controller element + Seek Back Button + + + Audio element playback controls and status display + Media controller element + Audio element playback controls and status display + + + Video element playback controls and status display + Media controller element + Video element playback controls and status display + + + Mute audio tracks + Media controller element + Mute audio tracks + + + Unmute audio tracks + Media controller element + Unmute audio tracks + + + Begin playback + Media controller element + Begin playback + + + Pause playback + Media controller element + Pause playback + + + Movie time scrubber + Media controller element + Movie time scrubber + + + Movie time scrubber thumb + Media controller element + Movie time scrubber thumb + + + Rewind movie + Media controller element + Rewind movie + + + Return streaming movie to real-time + Media controller element + Return streaming movie to real-time + + + Current movie time + Media controller element + Current movie time + + + Remaining movie time + Media controller element + Remaining movie time + + + Current movie status + Media controller element + Current movie status + + + Play movie in full-screen mode + Media controller element + Play movie in full-screen mode + + + Seek quickly back + Media controller element + Seek quickly back + + + Seek quickly forward + Media controller element + Seek quickly forward + + + Indefinite time + Media time description + Indefinite time + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1 days %2 hours %3 minutes %4 seconds + + + %1 hours %2 minutes %3 seconds + Media time description + %1 hours %2 minutes %3 seconds + + + %1 minutes %2 seconds + Media time description + %1 minutes %2 seconds + + + %1 seconds + Media time description + %1 seconds + + + Inspect + Inspect Element context menu item + Inspect + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + No recent searches + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + Recent searches + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + Clear recent searches + + + Unknown + Unknown filesize FTP directory listing item + Unknown + + + Web Inspector - %2 + Web Inspector - %2 + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 pixels) + + + Bad HTTP request + Bad HTTP request + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + This is a searchable index. Enter search keywords: + + + Scroll here + Scroll here + + + Left edge + Left edge + + + Top + Top + + + Right edge + Right edge + + + Bottom + Bottom + + + Page left + Page left + + + Page up + Page up + + + Page right + Page right + + + Page down + Page down + + + Scroll left + Scroll left + + + Scroll up + Scroll up + + + Scroll right + Scroll right + + + Scroll down + Scroll down + + + %n file(s) + number of chosen file + + %n file(s) + %n file(s) + + + + JavaScript Alert - %1 + JavaScript Alert - %1 + + + JavaScript Confirm - %1 + JavaScript Confirm - %1 + + + JavaScript Prompt - %1 + JavaScript Prompt - %1 + + + JavaScript Problem - %1 + JavaScript Problem - %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + The script on this page appears to have a problem. Do you want to stop the script? + + + Move the cursor to the next character + Move the cursor to the next character + + + Move the cursor to the previous character + Move the cursor to the previous character + + + Move the cursor to the next word + Move the cursor to the next word + + + Move the cursor to the previous word + Move the cursor to the previous word + + + Move the cursor to the next line + Move the cursor to the next line + + + Move the cursor to the previous line + Move the cursor to the previous line + + + Move the cursor to the start of the line + Move the cursor to the start of the line + + + Move the cursor to the end of the line + Move the cursor to the end of the line + + + Move the cursor to the start of the block + Move the cursor to the start of the block + + + Move the cursor to the end of the block + Move the cursor to the end of the block + + + Move the cursor to the start of the document + Move the cursor to the start of the document + + + Move the cursor to the end of the document + Move the cursor to the end of the document + + + Select all + Select all + + + Select to the next character + Select to the next character + + + Select to the previous character + Select to the previous character + + + Select to the next word + Select to the next word + + + Select to the previous word + Select to the previous word + + + Select to the next line + Select to the next line + + + Select to the previous line + Select to the previous line + + + Select to the start of the line + Select to the start of the line + + + Select to the end of the line + Select to the end of the line + + + Select to the start of the block + Select to the start of the block + + + Select to the end of the block + Select to the end of the block + + + Select to the start of the document + Select to the start of the document + + + Select to the end of the document + Select to the end of the document + + + Delete to the start of the word + Delete to the start of the word + + + Delete to the end of the word + Delete to the end of the word + + + Insert a new paragraph + Insert a new paragraph + + + Insert a new line + Insert a new line + + + Paste and Match Style + Paste and Match Style + + + Remove formatting + Remove formatting + + + Strikethrough + Strikethrough + + + Subscript + Subscript + + + Superscript + Superscript + + + Insert Bulleted List + Insert Bulleted List + + + Insert Numbered List + Insert Numbered List + + + Indent + Indent + + + Outdent + Outdent + + + Center + Center + + + Justify + Justify + + + Align Left + Align Left + + + Align Right + Align Right + + + + QWhatsThisAction + + What's This? + What's This? + + + + QWidget + + * + * + + + + QWizard + + Cancel + Cancel + + + Help + Help + + + < &Back + < &Back + + + &Finish + &Finish + + + &Help + &Help + + + Go Back + Go Back + + + Continue + Continue + + + Commit + Commit + + + Done + Done + + + &Next + &Next + + + &Next > + &Next > + + + + QWorkspace + + &Restore + &Restore + + + &Move + &Move + + + &Size + &Size + + + Mi&nimize + Mi&nimize + + + Ma&ximize + Ma&ximize + + + &Close + &Close + + + Stay on &Top + Stay on &Top + + + Minimize + Minimize + + + Restore Down + Restore Down + + + Close + Close + + + Sh&ade + Sh&ade + + + %1 - [%2] + %1 - [%2] + + + &Unshade + &Unshade + + + + QXml + + no error occurred + no error occurred + + + error triggered by consumer + error triggered by consumer + + + unexpected end of file + unexpected end of file + + + more than one document type definition + more than one document type definition + + + error occurred while parsing element + error occurred while parsing element + + + tag mismatch + tag mismatch + + + error occurred while parsing content + error occurred while parsing content + + + unexpected character + unexpected character + + + invalid name for processing instruction + invalid name for processing instruction + + + version expected while reading the XML declaration + version expected while reading the XML declaration + + + wrong value for standalone declaration + wrong value for standalone declaration + + + error occurred while parsing document type definition + error occurred while parsing document type definition + + + letter is expected + letter is expected + + + error occurred while parsing comment + error occurred while parsing comment + + + error occurred while parsing reference + error occurred while parsing reference + + + internal general entity reference not allowed in DTD + internal general entity reference not allowed in DTD + + + external parsed general entity reference not allowed in attribute value + external parsed general entity reference not allowed in attribute value + + + external parsed general entity reference not allowed in DTD + external parsed general entity reference not allowed in DTD + + + unparsed entity reference in wrong context + unparsed entity reference in wrong context + + + recursive entities + recursive entities + + + error in the text declaration of an external entity + error in the text declaration of an external entity + + + encoding declaration or standalone declaration expected while reading the XML declaration + encoding declaration or standalone declaration expected while reading the XML declaration + + + standalone declaration expected while reading the XML declaration + standalone declaration expected while reading the XML declaration + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + Warning in %1, at line %2, column %3: %4 + + + Warning in %1: %2 + Warning in %1: %2 + + + Unknown location + Unknown location + + + Error %1 in %2, at line %3, column %4: %5 + Error %1 in %2, at line %3, column %4: %5 + + + Error %1 in %2: %3 + Error %1 in %2: %3 + + + + QXmlStream + + Extra content at end of document. + Extra content at end of document. + + + Invalid entity value. + Invalid entity value. + + + Invalid XML character. + Invalid XML character. + + + Sequence ']]>' not allowed in content. + Sequence ']]>' not allowed in content. + + + Namespace prefix '%1' not declared + Namespace prefix '%1' not declared + + + Attribute redefined. + Attribute redefined. + + + Unexpected character '%1' in public id literal. + Unexpected character '%1' in public id literal. + + + Invalid XML version string. + Invalid XML version string. + + + Unsupported XML version. + Unsupported XML version. + + + %1 is an invalid encoding name. + %1 is an invalid encoding name. + + + Encoding %1 is unsupported + Encoding %1 is unsupported + + + Standalone accepts only yes or no. + Standalone accepts only yes or no. + + + Invalid attribute in XML declaration. + Invalid attribute in XML declaration. + + + Premature end of document. + Premature end of document. + + + Invalid document. + Invalid document. + + + Expected + Expected + + + , but got ' + , but got ' + + + Unexpected ' + Unexpected ' + + + Expected character data. + Expected character data. + + + Recursive entity detected. + Recursive entity detected. + + + Start tag expected. + Start tag expected. + + + XML declaration not at start of document. + XML declaration not at start of document. + + + NDATA in parameter entity declaration. + NDATA in parameter entity declaration. + + + %1 is an invalid processing instruction name. + %1 is an invalid processing instruction name. + + + Invalid processing instruction name. + Invalid processing instruction name. + + + Illegal namespace declaration. + Illegal namespace declaration. + + + Invalid XML name. + Invalid XML name. + + + Opening and ending tag mismatch. + Opening and ending tag mismatch. + + + Reference to unparsed entity '%1'. + Reference to unparsed entity '%1'. + + + Entity '%1' not declared. + Entity '%1' not declared. + + + Reference to external entity '%1' in attribute value. + Reference to external entity '%1' in attribute value. + + + Invalid character reference. + Invalid character reference. + + + Encountered incorrectly encoded content. + Encountered incorrectly encoded content. + + + The standalone pseudo attribute must appear after the encoding. + The standalone pseudo attribute must appear after the encoding. + + + %1 is an invalid PUBLIC identifier. + %1 is an invalid PUBLIC identifier. + + + + QtXmlPatterns + + At least one component must be present. + At least one component must be present. + + + %1 is not a valid value of type %2. + %1 is not a valid value of type %2. + + + When casting to %1 from %2, the source value cannot be %3. + When casting to %1 from %2, the source value cannot be %3. + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + + + The data of a processing instruction cannot contain the string %1 + The data of a processing instruction cannot contain the string %1 + + + %1 is an invalid %2 + %1 is an invalid %2 + + + %1 is not a valid XML 1.0 character. + %1 is not a valid XML 1.0 character. + + + %1 was called. + %1 was called. + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + In the replacement string, %1 must be followed by at least one digit when not escaped. + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + In the replacement string, %1 can only be used to escape itself or %2, not %3 + + + %1 matches newline characters + %1 matches newline characters + + + Matches are case insensitive + Matches are case insensitive + + + %1 is an invalid regular expression pattern: %2 + %1 is an invalid regular expression pattern: %2 + + + It will not be possible to retrieve %1. + It will not be possible to retrieve %1. + + + The default collection is undefined + The default collection is undefined + + + %1 cannot be retrieved + %1 cannot be retrieved + + + The item %1 did not match the required type %2. + The item %1 did not match the required type %2. + + + %1 is an unknown schema type. + %1 is an unknown schema type. + + + A template with name %1 has already been declared. + A template with name %1 has already been declared. + + + Only one %1 declaration can occur in the query prolog. + Only one %1 declaration can occur in the query prolog. + + + The initialization of variable %1 depends on itself + The initialization of variable %1 depends on itself + + + The variable %1 is unused + The variable %1 is unused + + + Version %1 is not supported. The supported XQuery version is 1.0. + Version %1 is not supported. The supported XQuery version is 1.0. + + + No function with signature %1 is available + No function with signature %1 is available + + + It is not possible to redeclare prefix %1. + It is not possible to redeclare prefix %1. + + + Prefix %1 is already declared in the prolog. + Prefix %1 is already declared in the prolog. + + + The name of an option must have a prefix. There is no default namespace for options. + The name of an option must have a prefix. There is no default namespace for options. + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + + + The target namespace of a %1 cannot be empty. + The target namespace of a %1 cannot be empty. + + + The module import feature is not supported + The module import feature is not supported + + + 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 + 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 + + + A function already exists with the signature %1. + A function already exists with the signature %1. + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + No external functions are supported. All supported functions can be used directly, without first declaring them as external + + + The %1-axis is unsupported in XQuery + The %1-axis is unsupported in XQuery + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + The namespace URI cannot be the empty string when binding to a prefix, %1. + + + %1 is an invalid namespace URI. + %1 is an invalid namespace URI. + + + It is not possible to bind to the prefix %1 + It is not possible to bind to the prefix %1 + + + Two namespace declaration attributes have the same name: %1. + Two namespace declaration attributes have the same name: %1. + + + The namespace URI must be a constant and cannot use enclosed expressions. + The namespace URI must be a constant and cannot use enclosed expressions. + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + + + empty + empty + + + zero or one + zero or one + + + exactly one + exactly one + + + one or more + one or more + + + zero or more + zero or more + + + The focus is undefined. + The focus is undefined. + + + An attribute by name %1 has already been created. + An attribute by name %1 has already been created. + + + Network timeout. + Network timeout. + + + Element %1 can't be serialized because it appears outside the document element. + Element %1 can't be serialized because it appears outside the document element. + + + Year %1 is invalid because it begins with %2. + Year %1 is invalid because it begins with %2. + + + Day %1 is outside the range %2..%3. + Day %1 is outside the range %2..%3. + + + Month %1 is outside the range %2..%3. + Month %1 is outside the range %2..%3. + + + Overflow: Can't represent date %1. + Overflow: Can't represent date %1. + + + Day %1 is invalid for month %2. + Day %1 is invalid for month %2. + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + + + Time %1:%2:%3.%4 is invalid. + Time %1:%2:%3.%4 is invalid. + + + Overflow: Date can't be represented. + Overflow: Date can't be represented. + + + At least one time component must appear after the %1-delimiter. + At least one time component must appear after the %1-delimiter. + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + + + A value of type %1 cannot have an Effective Boolean Value. + A value of type %1 cannot have an Effective Boolean Value. + + + Value %1 of type %2 exceeds maximum (%3). + Value %1 of type %2 exceeds maximum (%3). + + + Value %1 of type %2 is below minimum (%3). + Value %1 of type %2 is below minimum (%3). + + + A value of type %1 must contain an even number of digits. The value %2 does not. + A value of type %1 must contain an even number of digits. The value %2 does not. + + + %1 is not valid as a value of type %2. + %1 is not valid as a value of type %2. + + + Operator %1 cannot be used on type %2. + Operator %1 cannot be used on type %2. + + + Operator %1 cannot be used on atomic values of type %2 and %3. + Operator %1 cannot be used on atomic values of type %2 and %3. + + + The namespace URI in the name for a computed attribute cannot be %1. + The namespace URI in the name for a computed attribute cannot be %1. + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + + + Type error in cast, expected %1, received %2. + Type error in cast, expected %1, received %2. + + + 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. + 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. + + + A comment cannot contain %1 + A comment cannot contain %1 + + + A comment cannot end with a %1. + A comment cannot end with a %1. + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + + + A library module cannot be evaluated directly. It must be imported from a main module. + A library module cannot be evaluated directly. It must be imported from a main module. + + + No template by name %1 exists. + No template by name %1 exists. + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + + + A positional predicate must evaluate to a single numeric value. + A positional predicate must evaluate to a single numeric value. + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + + + No namespace binding exists for the prefix %1 + No namespace binding exists for the prefix %1 + + + No namespace binding exists for the prefix %1 in %2 + No namespace binding exists for the prefix %1 in %2 + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 must be followed by %2 or %3, not at the end of the replacement string. + + + %1 and %2 match the start and end of a line. + %1 and %2 match the start and end of a line. + + + Whitespace characters are removed, except when they appear in character classes + Whitespace characters are removed, except when they appear in character classes + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 is an invalid flag for regular expressions. Valid flags are: + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + + + Required cardinality is %1; got cardinality %2. + Required cardinality is %1; got cardinality %2. + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + + + The keyword %1 cannot occur with any other mode name. + The keyword %1 cannot occur with any other mode name. + + + No variable with name %1 exists + No variable with name %1 exists + + + The value of attribute %1 must be of type %2, which %3 isn't. + The value of attribute %1 must be of type %2, which %3 isn't. + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + + + A variable with name %1 has already been declared. + A variable with name %1 has already been declared. + + + No value is available for the external variable with name %1. + No value is available for the external variable with name %1. + + + A stylesheet function must have a prefixed name. + A stylesheet function must have a prefixed name. + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + + + An argument with name %1 has already been declared. Every argument name must be unique. + An argument with name %1 has already been declared. Every argument name must be unique. + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + + + In an XSL-T pattern, function %1 cannot have a third argument. + In an XSL-T pattern, function %1 cannot have a third argument. + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + + + %1 is an invalid template mode name. + %1 is an invalid template mode name. + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + None of the pragma expressions are supported. Therefore, a fallback expression must be present + + + Each name of a template parameter must be unique; %1 is duplicated. + Each name of a template parameter must be unique; %1 is duplicated. + + + No function with name %1 is available. + No function with name %1 is available. + + + %1 is not a valid numeric literal. + %1 is not a valid numeric literal. + + + W3C XML Schema identity constraint selector + W3C XML Schema identity constraint selector + + + W3C XML Schema identity constraint field + W3C XML Schema identity constraint field + + + A construct was encountered which is disallowed in the current language(%1). + A construct was encountered which is disallowed in the current language(%1). + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + An attribute with name %1 has already appeared on this element. + An attribute with name %1 has already appeared on this element. + + + A direct element constructor is not well-formed. %1 is ended with %2. + A direct element constructor is not well-formed. %1 is ended with %2. + + + The name %1 does not refer to any schema type. + The name %1 does not refer to any schema type. + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 is not an atomic type. Casting is only possible to atomic types. + + + %1 is not a valid name for a processing-instruction. + %1 is not a valid name for a processing-instruction. + + + The name of an extension expression must be in a namespace. + The name of an extension expression must be in a namespace. + + + Required type is %1, but %2 was found. + Required type is %1, but %2 was found. + + + Promoting %1 to %2 may cause loss of precision. + Promoting %1 to %2 may cause loss of precision. + + + It's not possible to add attributes after any other kind of node. + It's not possible to add attributes after any other kind of node. + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + + + Integer division (%1) by zero (%2) is undefined. + Integer division (%1) by zero (%2) is undefined. + + + Division (%1) by zero (%2) is undefined. + Division (%1) by zero (%2) is undefined. + + + Modulus division (%1) by zero (%2) is undefined. + Modulus division (%1) by zero (%2) is undefined. + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 takes at most %n argument(s). %2 is therefore invalid. + %1 takes at most %n argument(s). %2 is therefore invalid. + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 requires at least %n argument(s). %2 is therefore invalid. + %1 requires at least %n argument(s). %2 is therefore invalid. + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + + + A default namespace declaration must occur before function, variable, and option declarations. + A default namespace declaration must occur before function, variable, and option declarations. + + + Namespace declarations must occur before function, variable, and option declarations. + Namespace declarations must occur before function, variable, and option declarations. + + + Module imports must occur before function, variable, and option declarations. + Module imports must occur before function, variable, and option declarations. + + + %1 is not a whole number of minutes. + %1 is not a whole number of minutes. + + + Attribute %1 can't be serialized because it appears at the top level. + Attribute %1 can't be serialized because it appears at the top level. + + + %1 is an unsupported encoding. + %1 is an unsupported encoding. + + + %1 contains octets which are disallowed in the requested encoding %2. + %1 contains octets which are disallowed in the requested encoding %2. + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + + + Ambiguous rule match. + Ambiguous rule match. + + + In a namespace constructor, the value for a namespace cannot be an empty string. + In a namespace constructor, the value for a namespace cannot be an empty string. + + + The prefix must be a valid %1, which %2 is not. + The prefix must be a valid %1, which %2 is not. + + + The prefix %1 cannot be bound. + The prefix %1 cannot be bound. + + + Only the prefix %1 can be bound to %2 and vice versa. + Only the prefix %1 can be bound to %2 and vice versa. + + + The parameter %1 is required, but no corresponding %2 is supplied. + The parameter %1 is required, but no corresponding %2 is supplied. + + + The parameter %1 is passed, but no corresponding %2 exists. + The parameter %1 is passed, but no corresponding %2 exists. + + + The URI cannot have a fragment + The URI cannot have a fragment + + + Element %1 is not allowed at this location. + Element %1 is not allowed at this location. + + + Text nodes are not allowed at this location. + Text nodes are not allowed at this location. + + + Parse error: %1 + Parse error: %1 + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + + + Unknown XSL-T attribute %1. + Unknown XSL-T attribute %1. + + + Attribute %1 and %2 are mutually exclusive. + Attribute %1 and %2 are mutually exclusive. + + + In a simplified stylesheet module, attribute %1 must be present. + In a simplified stylesheet module, attribute %1 must be present. + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + + + Element %1 must have at least one of the attributes %2 or %3. + Element %1 must have at least one of the attributes %2 or %3. + + + At least one mode must be specified in the %1-attribute on element %2. + At least one mode must be specified in the %1-attribute on element %2. + + + Element %1 must come last. + Element %1 must come last. + + + At least one %1-element must occur before %2. + At least one %1-element must occur before %2. + + + Only one %1-element can appear. + Only one %1-element can appear. + + + At least one %1-element must occur inside %2. + At least one %1-element must occur inside %2. + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + When attribute %1 is present on %2, a sequence constructor cannot be used. + + + Element %1 must have either a %2-attribute or a sequence constructor. + Element %1 must have either a %2-attribute or a sequence constructor. + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + + + Element %1 cannot have children. + Element %1 cannot have children. + + + Element %1 cannot have a sequence constructor. + Element %1 cannot have a sequence constructor. + + + The attribute %1 cannot appear on %2, when it is a child of %3. + The attribute %1 cannot appear on %2, when it is a child of %3. + + + A parameter in a function cannot be declared to be a tunnel. + A parameter in a function cannot be declared to be a tunnel. + + + This processor is not Schema-aware and therefore %1 cannot be used. + This processor is not Schema-aware and therefore %1 cannot be used. + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + + + Attribute %1 cannot have the value %2. + Attribute %1 cannot have the value %2. + + + The attribute %1 can only appear on the first %2 element. + The attribute %1 can only appear on the first %2 element. + + + At least one %1 element must appear as child of %2. + At least one %1 element must appear as child of %2. + + + %1 has inheritance loop in its base type %2. + %1 has inheritance loop in its base type %2. + + + Circular inheritance of base type %1. + Circular inheritance of base type %1. + + + Circular inheritance of union %1. + Circular inheritance of union %1. + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + + + Base type of simple type %1 cannot be complex type %2. + Base type of simple type %1 cannot be complex type %2. + + + Simple type %1 cannot have direct base type %2. + Simple type %1 cannot have direct base type %2. + + + Simple type %1 is not allowed to have base type %2. + Simple type %1 is not allowed to have base type %2. + + + Simple type %1 can only have simple atomic type as base type. + Simple type %1 can only have simple atomic type as base type. + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + + + Variety of item type of %1 must be either atomic or union. + Variety of item type of %1 must be either atomic or union. + + + Variety of member types of %1 must be atomic. + Variety of member types of %1 must be atomic. + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + %1 is not allowed to derive from %2 by list as the latter defines it as final. + + + Simple type %1 is only allowed to have %2 facet. + Simple type %1 is only allowed to have %2 facet. + + + Base type of simple type %1 must have variety of type list. + Base type of simple type %1 must have variety of type list. + + + Base type of simple type %1 has defined derivation by restriction as final. + Base type of simple type %1 has defined derivation by restriction as final. + + + Item type of base type does not match item type of %1. + Item type of base type does not match item type of %1. + + + Simple type %1 contains not allowed facet type %2. + Simple type %1 contains not allowed facet type %2. + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + %1 is not allowed to derive from %2 by union as the latter defines it as final. + + + %1 is not allowed to have any facets. + %1 is not allowed to have any facets. + + + Base type %1 of simple type %2 must have variety of union. + Base type %1 of simple type %2 must have variety of union. + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + Member type %1 cannot be derived from member type %2 of %3's base type %4. + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + Derivation method of %1 must be extension because the base type %2 is a simple type. + + + Complex type %1 has duplicated element %2 in its content model. + Complex type %1 has duplicated element %2 in its content model. + + + Complex type %1 has non-deterministic content. + Complex type %1 has non-deterministic content. + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + + + Content model of complex type %1 is not a valid extension of content model of %2. + Content model of complex type %1 is not a valid extension of content model of %2. + + + Complex type %1 must have simple content. + Complex type %1 must have simple content. + + + Complex type %1 must have the same simple type as its base class %2. + Complex type %1 must have the same simple type as its base class %2. + + + Complex type %1 cannot be derived from base type %2%3. + Complex type %1 cannot be derived from base type %2%3. + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + + + Complex type %1 with simple content cannot be derived from complex base type %2. + Complex type %1 with simple content cannot be derived from complex base type %2. + + + Item type of simple type %1 cannot be a complex type. + Item type of simple type %1 cannot be a complex type. + + + Member type of simple type %1 cannot be a complex type. + Member type of simple type %1 cannot be a complex type. + + + %1 is not allowed to have a member type with the same name as itself. + %1 is not allowed to have a member type with the same name as itself. + + + %1 facet collides with %2 facet. + %1 facet collides with %2 facet. + + + %1 facet must have the same value as %2 facet of base type. + %1 facet must have the same value as %2 facet of base type. + + + %1 facet must be equal or greater than %2 facet of base type. + %1 facet must be equal or greater than %2 facet of base type. + + + %1 facet must be less than or equal to %2 facet of base type. + %1 facet must be less than or equal to %2 facet of base type. + + + %1 facet contains invalid regular expression + %1 facet contains invalid regular expression + + + Unknown notation %1 used in %2 facet. + Unknown notation %1 used in %2 facet. + + + %1 facet contains invalid value %2: %3. + %1 facet contains invalid value %2: %3. + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + %1 facet cannot be %2 if %3 facet of base type is %4. + %1 facet cannot be %2 if %3 facet of base type is %4. + + + %1 facet must be less than or equal to %2 facet. + %1 facet must be less than or equal to %2 facet. + + + %1 facet must be less than %2 facet of base type. + %1 facet must be less than %2 facet of base type. + + + %1 facet and %2 facet cannot appear together. + %1 facet and %2 facet cannot appear together. + + + %1 facet must be greater than %2 facet of base type. + %1 facet must be greater than %2 facet of base type. + + + %1 facet must be less than %2 facet. + %1 facet must be less than %2 facet. + + + %1 facet must be greater than or equal to %2 facet of base type. + %1 facet must be greater than or equal to %2 facet of base type. + + + Simple type contains not allowed facet %1. + Simple type contains not allowed facet %1. + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + Only %1 and %2 facets are allowed when derived by union. + Only %1 and %2 facets are allowed when derived by union. + + + %1 contains %2 facet with invalid data: %3. + %1 contains %2 facet with invalid data: %3. + + + Attribute group %1 contains attribute %2 twice. + Attribute group %1 contains attribute %2 twice. + + + Attribute group %1 contains two different attributes that both have types derived from %2. + Attribute group %1 contains two different attributes that both have types derived from %2. + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + Complex type %1 contains attribute %2 twice. + Complex type %1 contains attribute %2 twice. + + + Complex type %1 contains two different attributes that both have types derived from %2. + Complex type %1 contains two different attributes that both have types derived from %2. + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + Element %1 is not allowed to have a value constraint if its base type is complex. + Element %1 is not allowed to have a value constraint if its base type is complex. + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + Element %1 is not allowed to have a value constraint if its type is derived from %2. + + + Value constraint of element %1 is not of elements type: %2. + Value constraint of element %1 is not of elements type: %2. + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + Element %1 is not allowed to have substitution group affiliation as it is no global element. + + + Type of element %1 cannot be derived from type of substitution group affiliation. + Type of element %1 cannot be derived from type of substitution group affiliation. + + + Value constraint of attribute %1 is not of attributes type: %2. + Value constraint of attribute %1 is not of attributes type: %2. + + + Attribute %1 has value constraint but has type derived from %2. + Attribute %1 has value constraint but has type derived from %2. + + + %1 attribute in derived complex type must be %2 like in base type. + %1 attribute in derived complex type must be %2 like in base type. + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + Attribute %1 in derived complex type must have %2 value constraint like in base type. + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + + + Attribute %1 in derived complex type must have %2 value constraint. + Attribute %1 in derived complex type must have %2 value constraint. + + + processContent of base wildcard must be weaker than derived wildcard. + processContent of base wildcard must be weaker than derived wildcard. + + + Element %1 exists twice with different types. + Element %1 exists twice with different types. + + + Particle contains non-deterministic wildcards. + Particle contains non-deterministic wildcards. + + + Base attribute %1 is required but derived attribute is not. + Base attribute %1 is required but derived attribute is not. + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + Type of derived attribute %1 cannot be validly derived from type of base attribute. + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + Value constraint of derived attribute %1 does not match value constraint of base attribute. + + + Derived attribute %1 does not exist in the base definition. + Derived attribute %1 does not exist in the base definition. + + + Derived attribute %1 does not match the wildcard in the base definition. + Derived attribute %1 does not match the wildcard in the base definition. + + + Base attribute %1 is required but missing in derived definition. + Base attribute %1 is required but missing in derived definition. + + + Derived definition contains an %1 element that does not exists in the base definition + Derived definition contains an %1 element that does not exists in the base definition + + + Derived wildcard is not a subset of the base wildcard. + Derived wildcard is not a subset of the base wildcard. + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + + + Attribute %1 from base type is missing in derived type. + Attribute %1 from base type is missing in derived type. + + + Type of derived attribute %1 differs from type of base attribute. + Type of derived attribute %1 differs from type of base attribute. + + + Base definition contains an %1 element that is missing in the derived definition + Base definition contains an %1 element that is missing in the derived definition + + + %1 references unknown %2 or %3 element %4. + %1 references unknown %2 or %3 element %4. + + + %1 references identity constraint %2 that is no %3 or %4 element. + %1 references identity constraint %2 that is no %3 or %4 element. + + + %1 has a different number of fields from the identity constraint %2 that it references. + %1 has a different number of fields from the identity constraint %2 that it references. + + + Base type %1 of %2 element cannot be resolved. + Base type %1 of %2 element cannot be resolved. + + + Item type %1 of %2 element cannot be resolved. + Item type %1 of %2 element cannot be resolved. + + + Member type %1 of %2 element cannot be resolved. + Member type %1 of %2 element cannot be resolved. + + + Type %1 of %2 element cannot be resolved. + Type %1 of %2 element cannot be resolved. + + + Base type %1 of complex type cannot be resolved. + Base type %1 of complex type cannot be resolved. + + + %1 cannot have complex base type that has a %2. + %1 cannot have complex base type that has a %2. + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + + + Type of %1 element must be a simple type, %2 is not. + Type of %1 element must be a simple type, %2 is not. + + + Substitution group %1 of %2 element cannot be resolved. + Substitution group %1 of %2 element cannot be resolved. + + + Substitution group %1 has circular definition. + Substitution group %1 has circular definition. + + + Duplicated element names %1 in %2 element. + Duplicated element names %1 in %2 element. + + + Reference %1 of %2 element cannot be resolved. + Reference %1 of %2 element cannot be resolved. + + + Circular group reference for %1. + Circular group reference for %1. + + + %1 element is not allowed in this scope + %1 element is not allowed in this scope + + + %1 element cannot have %2 attribute with value other than %3. + %1 element cannot have %2 attribute with value other than %3. + + + %1 element cannot have %2 attribute with value other than %3 or %4. + %1 element cannot have %2 attribute with value other than %3 or %4. + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + + + Attribute group %1 has circular reference. + Attribute group %1 has circular reference. + + + %1 attribute in %2 must have %3 use like in base type %4. + %1 attribute in %2 must have %3 use like in base type %4. + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + + + %1 has attribute wildcard but its base type %2 has not. + %1 has attribute wildcard but its base type %2 has not. + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + Enumeration facet contains invalid content: {%1} is not a value of type %2. + + + Namespace prefix of qualified name %1 is not defined. + Namespace prefix of qualified name %1 is not defined. + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + Empty particle cannot be derived from non-empty particle. + Empty particle cannot be derived from non-empty particle. + + + Derived particle is missing element %1. + Derived particle is missing element %1. + + + Derived element %1 is missing value constraint as defined in base particle. + Derived element %1 is missing value constraint as defined in base particle. + + + Derived element %1 has weaker value constraint than base particle. + Derived element %1 has weaker value constraint than base particle. + + + Fixed value constraint of element %1 differs from value constraint in base particle. + Fixed value constraint of element %1 differs from value constraint in base particle. + + + Derived element %1 cannot be nillable as base element is not nillable. + Derived element %1 cannot be nillable as base element is not nillable. + + + Block constraints of derived element %1 must not be more weaker than in the base element. + Block constraints of derived element %1 must not be more weaker than in the base element. + + + Simple type of derived element %1 cannot be validly derived from base element. + Simple type of derived element %1 cannot be validly derived from base element. + + + Complex type of derived element %1 cannot be validly derived from base element. + Complex type of derived element %1 cannot be validly derived from base element. + + + Element %1 is missing in derived particle. + Element %1 is missing in derived particle. + + + Element %1 does not match namespace constraint of wildcard in base particle. + Element %1 does not match namespace constraint of wildcard in base particle. + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + Wildcard in derived particle is not a valid subset of wildcard in base particle. + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + processContent of wildcard in derived particle is weaker than wildcard in base particle. + + + Derived particle allows content that is not allowed in the base particle. + Derived particle allows content that is not allowed in the base particle. + + + Can not process unknown element %1, expected elements are: %2. + Can not process unknown element %1, expected elements are: %2. + + + Element %1 is not allowed in this scope, possible elements are: %2. + Element %1 is not allowed in this scope, possible elements are: %2. + + + Child element is missing in that scope, possible child elements are: %1. + Child element is missing in that scope, possible child elements are: %1. + + + Document is not a XML schema. + Document is not a XML schema. + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + %1 attribute of %2 element contains invalid content: {%3}. + %1 attribute of %2 element contains invalid content: {%3}. + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + %1 element is not allowed inside %2 element if %3 attribute is present. + %1 element is not allowed inside %2 element if %3 attribute is present. + + + %1 element has neither %2 attribute nor %3 child element. + %1 element has neither %2 attribute nor %3 child element. + + + %1 element with %2 child element must not have a %3 attribute. + %1 element with %2 child element must not have a %3 attribute. + + + %1 attribute of %2 element must be %3 or %4. + %1 attribute of %2 element must be %3 or %4. + + + %1 attribute of %2 element must have a value of %3. + %1 attribute of %2 element must have a value of %3. + + + %1 attribute of %2 element must have a value of %3 or %4. + %1 attribute of %2 element must have a value of %3 or %4. + + + %1 element must not have %2 and %3 attribute together. + %1 element must not have %2 and %3 attribute together. + + + Content of %1 attribute of %2 element must not be from namespace %3. + Content of %1 attribute of %2 element must not be from namespace %3. + + + %1 attribute of %2 element must not be %3. + %1 attribute of %2 element must not be %3. + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + Specifying use='prohibited' inside an attribute group has no effect. + Specifying use='prohibited' inside an attribute group has no effect. + + + %1 element must have either %2 or %3 attribute. + %1 element must have either %2 or %3 attribute. + + + %1 element must have either %2 attribute or %3 or %4 as child element. + %1 element must have either %2 attribute or %3 or %4 as child element. + + + %1 element requires either %2 or %3 attribute. + %1 element requires either %2 or %3 attribute. + + + Text or entity references not allowed inside %1 element + Text or entity references not allowed inside %1 element + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + %1 element is not allowed in this context. + %1 element is not allowed in this context. + + + %1 attribute of %2 element has larger value than %3 attribute. + %1 attribute of %2 element has larger value than %3 attribute. + + + Prefix of qualified name %1 is not defined. + Prefix of qualified name %1 is not defined. + + + %1 attribute of %2 element must either contain %3 or the other values. + %1 attribute of %2 element must either contain %3 or the other values. + + + Component with ID %1 has been defined previously. + Component with ID %1 has been defined previously. + + + Element %1 already defined. + Element %1 already defined. + + + Attribute %1 already defined. + Attribute %1 already defined. + + + Type %1 already defined. + Type %1 already defined. + + + Attribute group %1 already defined. + Attribute group %1 already defined. + + + Element group %1 already defined. + Element group %1 already defined. + + + Notation %1 already defined. + Notation %1 already defined. + + + Identity constraint %1 already defined. + Identity constraint %1 already defined. + + + Duplicated facets in simple type %1. + Duplicated facets in simple type %1. + + + %1 is not valid according to %2. + %1 is not valid according to %2. + + + String content does not match the length facet. + String content does not match the length facet. + + + String content does not match the minLength facet. + String content does not match the minLength facet. + + + String content does not match the maxLength facet. + String content does not match the maxLength facet. + + + String content does not match pattern facet. + String content does not match pattern facet. + + + String content is not listed in the enumeration facet. + String content is not listed in the enumeration facet. + + + Signed integer content does not match the maxInclusive facet. + Signed integer content does not match the maxInclusive facet. + + + Signed integer content does not match the maxExclusive facet. + Signed integer content does not match the maxExclusive facet. + + + Signed integer content does not match the minInclusive facet. + Signed integer content does not match the minInclusive facet. + + + Signed integer content does not match the minExclusive facet. + Signed integer content does not match the minExclusive facet. + + + Signed integer content is not listed in the enumeration facet. + Signed integer content is not listed in the enumeration facet. + + + Signed integer content does not match pattern facet. + Signed integer content does not match pattern facet. + + + Signed integer content does not match in the totalDigits facet. + Signed integer content does not match in the totalDigits facet. + + + Unsigned integer content does not match the maxInclusive facet. + Unsigned integer content does not match the maxInclusive facet. + + + Unsigned integer content does not match the maxExclusive facet. + Unsigned integer content does not match the maxExclusive facet. + + + Unsigned integer content does not match the minInclusive facet. + Unsigned integer content does not match the minInclusive facet. + + + Unsigned integer content does not match the minExclusive facet. + Unsigned integer content does not match the minExclusive facet. + + + Unsigned integer content is not listed in the enumeration facet. + Unsigned integer content is not listed in the enumeration facet. + + + Unsigned integer content does not match pattern facet. + Unsigned integer content does not match pattern facet. + + + Unsigned integer content does not match in the totalDigits facet. + Unsigned integer content does not match in the totalDigits facet. + + + Double content does not match the maxInclusive facet. + Double content does not match the maxInclusive facet. + + + Double content does not match the maxExclusive facet. + Double content does not match the maxExclusive facet. + + + Double content does not match the minInclusive facet. + Double content does not match the minInclusive facet. + + + Double content does not match the minExclusive facet. + Double content does not match the minExclusive facet. + + + Double content is not listed in the enumeration facet. + Double content is not listed in the enumeration facet. + + + Double content does not match pattern facet. + Double content does not match pattern facet. + + + Decimal content does not match in the fractionDigits facet. + Decimal content does not match in the fractionDigits facet. + + + Decimal content does not match in the totalDigits facet. + Decimal content does not match in the totalDigits facet. + + + Date time content does not match the maxInclusive facet. + Date time content does not match the maxInclusive facet. + + + Date time content does not match the maxExclusive facet. + Date time content does not match the maxExclusive facet. + + + Date time content does not match the minInclusive facet. + Date time content does not match the minInclusive facet. + + + Date time content does not match the minExclusive facet. + Date time content does not match the minExclusive facet. + + + Date time content is not listed in the enumeration facet. + Date time content is not listed in the enumeration facet. + + + Date time content does not match pattern facet. + Date time content does not match pattern facet. + + + Duration content does not match the maxInclusive facet. + Duration content does not match the maxInclusive facet. + + + Duration content does not match the maxExclusive facet. + Duration content does not match the maxExclusive facet. + + + Duration content does not match the minInclusive facet. + Duration content does not match the minInclusive facet. + + + Duration content does not match the minExclusive facet. + Duration content does not match the minExclusive facet. + + + Duration content is not listed in the enumeration facet. + Duration content is not listed in the enumeration facet. + + + Duration content does not match pattern facet. + Duration content does not match pattern facet. + + + Boolean content does not match pattern facet. + Boolean content does not match pattern facet. + + + Binary content does not match the length facet. + Binary content does not match the length facet. + + + Binary content does not match the minLength facet. + Binary content does not match the minLength facet. + + + Binary content does not match the maxLength facet. + Binary content does not match the maxLength facet. + + + Binary content is not listed in the enumeration facet. + Binary content is not listed in the enumeration facet. + + + Invalid QName content: %1. + Invalid QName content: %1. + + + QName content is not listed in the enumeration facet. + QName content is not listed in the enumeration facet. + + + QName content does not match pattern facet. + QName content does not match pattern facet. + + + Notation content is not listed in the enumeration facet. + Notation content is not listed in the enumeration facet. + + + List content does not match length facet. + List content does not match length facet. + + + List content does not match minLength facet. + List content does not match minLength facet. + + + List content does not match maxLength facet. + List content does not match maxLength facet. + + + List content is not listed in the enumeration facet. + List content is not listed in the enumeration facet. + + + List content does not match pattern facet. + List content does not match pattern facet. + + + Union content is not listed in the enumeration facet. + Union content is not listed in the enumeration facet. + + + Union content does not match pattern facet. + Union content does not match pattern facet. + + + Data of type %1 are not allowed to be empty. + Data of type %1 are not allowed to be empty. + + + Element %1 is missing child element. + Element %1 is missing child element. + + + There is one IDREF value with no corresponding ID: %1. + There is one IDREF value with no corresponding ID: %1. + + + Loaded schema file is invalid. + Loaded schema file is invalid. + + + %1 contains invalid data. + %1 contains invalid data. + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + + + No schema defined for validation. + No schema defined for validation. + + + No definition for element %1 available. + No definition for element %1 available. + + + Specified type %1 is not known to the schema. + Specified type %1 is not known to the schema. + + + Element %1 is not defined in this scope. + Element %1 is not defined in this scope. + + + Declaration for element %1 does not exist. + Declaration for element %1 does not exist. + + + Element %1 contains invalid content. + Element %1 contains invalid content. + + + Element %1 is declared as abstract. + Element %1 is declared as abstract. + + + Element %1 is not nillable. + Element %1 is not nillable. + + + Attribute %1 contains invalid data: %2 + Attribute %1 contains invalid data: %2 + + + Element contains content although it is nillable. + Element contains content although it is nillable. + + + Fixed value constraint not allowed if element is nillable. + Fixed value constraint not allowed if element is nillable. + + + Element %1 cannot contain other elements, as it has a fixed content. + Element %1 cannot contain other elements, as it has a fixed content. + + + Specified type %1 is not validly substitutable with element type %2. + Specified type %1 is not validly substitutable with element type %2. + + + Complex type %1 is not allowed to be abstract. + Complex type %1 is not allowed to be abstract. + + + Element %1 contains not allowed attributes. + Element %1 contains not allowed attributes. + + + Element %1 contains not allowed child element. + Element %1 contains not allowed child element. + + + Content of element %1 does not match its type definition: %2. + Content of element %1 does not match its type definition: %2. + + + Content of element %1 does not match defined value constraint. + Content of element %1 does not match defined value constraint. + + + Element %1 contains not allowed child content. + Element %1 contains not allowed child content. + + + Element %1 contains not allowed text content. + Element %1 contains not allowed text content. + + + Element %1 is missing required attribute %2. + Element %1 is missing required attribute %2. + + + Attribute %1 does not match the attribute wildcard. + Attribute %1 does not match the attribute wildcard. + + + Declaration for attribute %1 does not exist. + Declaration for attribute %1 does not exist. + + + Element %1 contains two attributes of type %2. + Element %1 contains two attributes of type %2. + + + Attribute %1 contains invalid content. + Attribute %1 contains invalid content. + + + Element %1 contains unknown attribute %2. + Element %1 contains unknown attribute %2. + + + Content of attribute %1 does not match its type definition: %2. + Content of attribute %1 does not match its type definition: %2. + + + Content of attribute %1 does not match defined value constraint. + Content of attribute %1 does not match defined value constraint. + + + Non-unique value found for constraint %1. + Non-unique value found for constraint %1. + + + Key constraint %1 contains absent fields. + Key constraint %1 contains absent fields. + + + Key constraint %1 contains references nillable element %2. + Key constraint %1 contains references nillable element %2. + + + No referenced value found for key reference %1. + No referenced value found for key reference %1. + + + More than one value found for field %1. + More than one value found for field %1. + + + Field %1 has no simple type. + Field %1 has no simple type. + + + ID value '%1' is not unique. + ID value '%1' is not unique. + + + '%1' attribute contains invalid QName content: %2. + '%1' attribute contains invalid QName content: %2. + + + diff --git a/config.profiles/symbian/translations/qt_fr_symbian.ts b/config.profiles/symbian/translations/qt_fr_symbian.ts new file mode 100644 index 0000000..c0b0699 --- /dev/null +++ b/config.profiles/symbian/translations/qt_fr_symbian.ts @@ -0,0 +1,8519 @@ + + + + + + CloseButton + + Close Tab + Fermer l'onglet + + + + FakeReply + + Fake error ! + Fausse erreur! + + + Invalid URL + URL non valide + + + + Phonon:: + + Notifications + Notifications + + + Music + Musique + + + Video + Vidéo + + + Communication + Communication + + + Games + Jeux + + + Accessibility + Accessibilité + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>L'appareil de lecture audio <b>%1</b> ne fonctionne pas.<br/>Retour à <b>%2</b>.</html> + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>Basculement vers l'appareil de lecture audio <b>%1</b><br/>qui vient juste d'être disponible et dont le niveau de préférence est plus élevé.</html> + + + Revert back to device '%1' + Revenir à l'appareil '%1' + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + Attention: Vous n'avez apparemment pas installé le paquet gstreamer0.10-plugins-good. +Des fonctionnalités vidéo ont été desactivées. + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + Attention: Vous n'avez apparemment pas installées les plugins de base de GStreamer. +Le support audio et vidéo est désactivé + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + Un codec requis est manquant. Vous devez installer le codec suivant pour jouer le contenu: %0 + + + Could not open media source. + Impossible d'ouvrir le média source. + + + Invalid source type. + Type de source invalide. + + + Could not locate media source. + Impossible de localiser le média source. + + + Could not open audio device. The device is already in use. + Impossible d'ouvrir le périphérique audio. Celui-ci est déjà en cours d'utilisation. + + + Could not decode media source. + Impossible de décoder le média source. + + + + Phonon::MMF + + Audio Output + Sortie audio + + + The audio output device + Appareil de sortie audio + + + No error + Aucune erreur + + + Not found + Introuvable + + + Out of memory + Mémoire insuffisante + + + Not supported + Non supporté + + + Overflow + Dépassement + + + Underflow + Soupassement + + + Already exists + Existe déjà + + + Path not found + Chemin introuvable + + + In use + Utilisé + + + Not ready + Pas prêt + + + Access denied + Accès refusé + + + Could not connect + Connexion impossible + + + Disconnected + Déconnecté + + + Permission denied + Autorisation refusée + + + Insufficient bandwidth + Bande passante insuffisante + + + Network unavailable + Réseau non disponible + + + Network communication error + Erreur de communication réseau + + + Streaming not supported + Streaming non supporté + + + Server alert + Alerte serveur + + + Invalid protocol + Protocole non valide + + + Invalid URL + URL non valide + + + Multicast error + Erreur multicast + + + Proxy server error + Erreur du serveur proxy + + + Proxy server not supported + Serveur proxy non supporté + + + Audio output error + Erreur de sortie audio + + + Video output error + Erreur de sortie vidéo + + + Decoder error + Erreur du décodeur + + + Audio or video components could not be played + Les composants audio ou vidéo n'ont pas pu être lus + + + DRM error + Erreur GDN + + + Unknown error (%1) + Erreur inconnue (%1) + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + Pas prêt pour lecture + + + Error opening file + Erreur lors de l'ouverture du fichier + + + Error opening URL + Erreur lors de l'ouverture de l'URL + + + Setting volume failed + Le réglage du volume a échoué + + + Playback complete + Lecture terminée + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + %1 Hz + + + + Phonon::MMF::AudioPlayer + + Getting position failed + L'obtention de la position a échoué + + + Opening clip failed + L'ouverture du clip a échoué + + + + Phonon::MMF::EffectFactory + + Enabled + Activé + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + Ratio HF du déclin (%) + + + Decay time (ms) + Temps de déclin (ms) + + + Density (%) + Densité (%) + + + Diffusion (%) + Diffusion (%) + + + Reflections delay (ms) + Délai réflexions (ms) + + + Reflections level (mB) + Niveau réflexions (mB) + + + Reverb delay (ms) + Délai de réverbération (ms) + + + Reverb level (mB) + Niveau de réverbération (mB) + + + Room HF level + Niveau HF pièce + + + Room level (mB) + Niveau pièce (mB) + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + Erreur lors de l'ouverture de la source: type non supporté + + + Error opening source: media type could not be determined + Erreur lors de l'ouverture de la source: type de média non déterminé + + + + Phonon::MMF::StereoWidening + + Level (%) + Niveau (%) + + + + Phonon::MMF::VideoPlayer + + Pause failed + La mise en pause a échoué + + + Seek failed + La recherche a échoué + + + Getting position failed + L'obtention de la position a échoué + + + Opening clip failed + L'ouverture du clip a échoué + + + Buffering clip failed + La mise en mémoire tampon du clip a échoué + + + Video display error + Erreur de l'affichage vidéo + + + + Phonon::VolumeSlider + + Volume: %1% + Volume: %1% + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + Utilisez le slider pour ajuster le volume. La position la plus à gauche est 0%, la plus à droite est %1% + + + Muted + Son coupé + + + + Q3Accel + + %1, %2 not defined + La séquence %1, %2 n'est pas définie + + + Ambiguous %1 not handled + Séquence ambiguë %1 non traitée + + + + Q3DataTable + + True + Vrai + + + False + Faux + + + Insert + Insérer + + + Update + Actualiser + + + Delete + Supprimer + + + + Q3FileDialog + + Copy or Move a File + Copie ou déplace un fichier + + + Read: %1 + Lecture : %1 + + + Write: %1 + Écriture : %1 + + + Cancel + Annuler + + + All Files (*) + Tous les fichiers (*) + + + Name + Nom + + + Size + Taille + + + Type + Type + + + Date + Date + + + Attributes + Attributs + + + &OK + &OK + + + Look &in: + Chercher &dans : + + + File &name: + &Nom de fichier : + + + File &type: + &Type de fichier : + + + Back + Précédent (historique) + + + One directory up + Aller au dossier parent + + + Create New Folder + Créer un nouveau dossier + + + List View + Affichage liste + + + Detail View + Affichage détaillé + + + Preview File Info + Informations du fichier prévisualisé + + + Preview File Contents + Contenu du fichier prévisualisé + + + Read-write + Lecture-écriture + + + Read-only + Lecture seule + + + Write-only + Écriture seule + + + Inaccessible + Inaccessible + + + Symlink to File + Lien symbolique vers un fichier + + + Symlink to Directory + Lien symbolique vers un dossier + + + Symlink to Special + Lien symbolique vers un fichier spécial + + + File + Fichier + + + Dir + Dossier + + + Special + Fichier spécial + + + Open + Ouvrir + + + Save As + Enregistrer sous + + + &Open + &Ouvrir + + + &Save + &Enregistrer + + + &Rename + &Renommer + + + &Delete + Suppri&mer + + + R&eload + R&echarger + + + Sort by &Name + Trier par &nom + + + Sort by &Size + Trier par ta&ille + + + Sort by &Date + Trier par &date + + + &Unsorted + &Non trié + + + Sort + Tri + + + Show &hidden files + Afficher les fic&hiers cachés + + + the file + le fichier + + + the directory + le dossier + + + the symlink + le lien symbolique + + + Delete %1 + Supprimer %1 + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>Voulez-vous vraiment supprimer %1 "%2" ?</qt> + + + &Yes + &Oui + + + &No + &Non + + + New Folder 1 + Nouveau dossier 1 + + + New Folder + Nouveau dossier + + + New Folder %1 + Nouveau dossier %1 + + + Find Directory + Chercher dans le dossier + + + Directories + Dossiers + + + Directory: + Dossier : + + + Error + Erreur + + + %1 +File not found. +Check path and filename. + %1 +Impossible de trouver le fichier. +Vérifier le chemin et le nom du fichier. + + + All Files (*.*) + Tous les fichiers (*.*) + + + Open + Ouvrir + + + Select a Directory + Sélectionner un dossier + + + + Q3LocalFs + + Could not read directory +%1 + Impossible de lire le dossier +%1 + + + Could not create directory +%1 + Impossible de créer le dossier +%1 + + + Could not remove file or directory +%1 + Impossible de supprimer le fichier ou dossier +%1 + + + Could not rename +%1 +to +%2 + Impossible de renommer +%1 +en +%2 + + + Could not open +%1 + Impossible d'ouvrir +%1 + + + Could not write +%1 + Impossible d'écrire +%1 + + + + Q3MainWindow + + Line up + Aligner + + + Customize... + Personnaliser... + + + + Q3NetworkProtocol + + Operation stopped by the user + Opération interrompue par l'utilisateur + + + + Q3ProgressDialog + + Cancel + Annuler + + + + Q3TabDialog + + OK + OK + + + Apply + Appliquer + + + Help + Aide + + + Defaults + Par défaut + + + Cancel + Annuler + + + + Q3TextEdit + + &Undo + &Annuler + + + &Redo + &Rétablir + + + Cu&t + Co&uper + + + &Copy + Cop&ier + + + &Paste + Co&ller + + + Clear + Effacer + + + Select All + Tout sélectionner + + + + Q3TitleBar + + System + Système + + + Restore up + Restaurer en haut + + + Minimize + Réduire + + + Restore down + Restaurer en bas + + + Maximize + Maximiser + + + Close + Fermer + + + Contains commands to manipulate the window + Contient des commandes pour manipuler la fenêtre + + + Puts a minimized window back to normal + + + + Moves the window out of the way + Déplace la fenêtre à l'écart + + + Puts a maximized window back to normal + Rend à une fenêtre minimisée son aspect normal + + + Makes the window full screen + Affiche la fenêtre en plein écran + + + Closes the window + Ferme la fenêtre + + + Displays the name of the window and contains controls to manipulate it + Affiche le nom de la fenêtre et contient des contrôles pour la manipuler + + + + Q3ToolBar + + More... + Reste... + + + + Q3UrlOperator + + The protocol `%1' is not supported + Le protocole '%1' n'est pas géré + + + The protocol `%1' does not support listing directories + Le protocole `%1' ne permet pas de lister les fichiers d'un dossier + + + The protocol `%1' does not support creating new directories + Le protocole `%1' ne permet pas de créer de nouveaux dossiers + + + The protocol `%1' does not support removing files or directories + Le protocole `%1' ne permet pas de supprimer des fichiers ou des dossiers + + + The protocol `%1' does not support renaming files or directories + Le protocole `%1' ne permet pas de renommer des fichiers ou des dossiers + + + The protocol `%1' does not support getting files + Le protocole `%1' ne permet pas de recevoir des fichiers + + + The protocol `%1' does not support putting files + Le protocole `%1' ne permet pas d'envoyer des fichiers + + + The protocol `%1' does not support copying or moving files or directories + Le protocole `%1' ne permet pas de copier ou de déplacer des fichiers + + + (unknown) + (inconnu) + + + + Q3Wizard + + &Cancel + &Annuler + + + < &Back + < &Précédent + + + &Next > + &Suivant > + + + &Finish + &Terminer + + + &Help + &Aide + + + + QAbstractSocket + + Host not found + Hôte introuvable + + + Connection refused + Connexion refusée + + + Connection timed out + Connexion expirée + + + Operation on socket is not supported + Opération sur socket non supportée + + + Socket operation timed out + Opération socket expirée + + + Socket is not connected + Le socket n'est pas connecté + + + Network unreachable + Réseau impossible à rejoindre + + + + QAbstractSpinBox + + &Step up + &Augmenter + + + Step &down + &Diminuer + + + &Select All + Tout &sélectionner + + + + QAccessibleButton + + Press + Appuyer + + + + QApplication + + QT_LAYOUT_DIRECTION + 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. + LTR + + + Executable '%1' requires Qt %2, found Qt %3. + L'exécutable '%1' requiert Qt %2 (Qt %3 présent). + + + Incompatible Qt Library Error + Erreur : bibliothèque Qt incompatible + + + Activate + Activer + + + Activates the program's main window + Active la fenêtre principale du programme + + + + QAxSelect + + Select ActiveX Control + Sélectionner un contrôle ActiveX + + + OK + OK + + + &Cancel + &Annuler + + + COM &Object: + &Objet COM : + + + + QCheckBox + + Uncheck + Décocher + + + Check + Cocher + + + Toggle + Changer + + + + QColorDialog + + Hu&e: + &Teinte : + + + &Sat: + &Saturation : + + + &Val: + &Valeur : + + + &Red: + &Rouge : + + + &Green: + &Vert : + + + Bl&ue: + Ble&u : + + + A&lpha channel: + Canal a&lpha : + + + Select Color + Sélectionner une couleur + + + &Basic colors + Couleurs de &base + + + &Custom colors + &Couleurs personnalisées + + + &Add to Custom Colors + &Ajouter aux couleurs personnalisées + + + + QComboBox + + Open + Ouvrir + + + False + Faux + + + True + Vrai + + + Close + Fermer + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + %1: clé vide + + + %1: unable to make key + QSystemSemaphore + %1: impossible de créer la clé + + + %1: ftok failed + QSystemSemaphore + %1: ftok a échoué + + + %1: already exists + QSystemSemaphore + %1: existe déjà + + + %1: does not exist + QSystemSemaphore + %1: n'existe pas + + + %1: out of resources + QSystemSemaphore + %1: plus de ressources disponibles + + + %1: unknown error %2 + QSystemSemaphore + %1: erreur inconnue %2 + + + + QDB2Driver + + Unable to connect + Incapable d'établir une connexion + + + Unable to commit transaction + Incapable de soumettre la transaction + + + Unable to rollback transaction + Incapable d'annuler la transaction + + + Unable to set autocommit + Impossible d'activer l'auto-soumission + + + + QDB2Result + + Unable to execute statement + Impossible d'exécuter la requête + + + Unable to prepare statement + Impossible de prépare la requête + + + Unable to bind variable + Impossible d'attacher la variable + + + Unable to fetch record %1 + Impossible de récupérer l'enregistrement %1 + + + Unable to fetch next + Impossible de récupérer le suivant + + + Unable to fetch first + Impossible de récupérer le premier + + + + QDateTimeEdit + + AM + AM + + + am + am + + + PM + PM + + + pm + pm + + + + QDial + + QDial + QDial + + + SpeedoMeter + Tachymètre + + + SliderHandle + Poignée + + + + QDialog + + What's This? + Qu'est-ce que c'est ? + + + Done + Terminer + + + + QDialogButtonBox + + OK + OK + + + Save + Enregistrer + + + &Save + Enregi&strer + + + Open + Ouvrir + + + Cancel + Annuler + + + &Cancel + &Annuler + + + Close + Fermer + + + &Close + &Fermer + + + Apply + Appliquer + + + Reset + Réinitialiser + + + Help + Aide + + + Don't Save + Ne pas enregistrer + + + Discard + Ne pas enregistrer + + + &Yes + &Oui + + + Yes to &All + Oui à &tout + + + &No + &Non + + + N&o to All + Non à to&ut + + + Save All + Tout Enregistrer + + + Abort + Abandonner + + + Retry + Réessayer + + + Ignore + Ignorer + + + Restore Defaults + Restaurer les valeurs par défaut + + + Close without Saving + Fermer sans sauvegarder + + + &OK + &OK + + + + QDirModel + + Name + Nom + + + Size + Taille + + + Kind + Match OS X Finder + Type + + + Type + All other platforms + Type + + + Date Modified + Dernière Modification + + + + QDockWidget + + Close + Fermer + + + Dock + Attacher + + + Float + Détacher + + + + QDoubleSpinBox + + More + Plus + + + Less + Moins + + + + QErrorMessage + + &Show this message again + &Afficher ce message de nouveau + + + &OK + &OK + + + Debug Message: + Message de débogage: + + + Warning: + Avertissement: + + + Fatal Error: + Erreur fatale: + + + + QFile + + Destination file exists + Le fichier destination existe + + + Will not rename sequential file using block copy + Ne renommera pas le fichier séquentiel avec la copie bloc + + + Cannot remove source file + Impossible de supprimer le fichier source + + + Cannot open %1 for input + Impossible d'ouvrir %1 pour lecture + + + Cannot open for output + Impossible d'ouvrir pour écriture + + + Failure to write block + Impossible d'écrire un bloc + + + Cannot create %1 for output + Impossible de créer %1 pour écriture + + + + QFileDialog + + All Files (*) + Tous les fichiers (*) + + + Back + Précédent (historique) + + + List View + Affichage liste + + + Detail View + Affichage détaillé + + + File + Fichier + + + Open + Ouvrir + + + Save As + Enregistrer sous + + + &Open + &Ouvrir + + + &Save + &Enregistrer + + + Recent Places + Emplacements récents + + + &Rename + &Renommer + + + &Delete + Suppri&mer + + + Show &hidden files + Afficher les fic&hiers cachés + + + New Folder + Nouveau dossier + + + Find Directory + Chercher dans le dossier + + + Directories + Dossiers + + + All Files (*.*) + Tous les fichiers (*.*) + + + Directory: + Dossier : + + + %1 already exists. +Do you want to replace it? + Le fichier %1 existe déjà. Voulez-vous l'écraser ? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +Fichier introuvable. +Veuillez vérifier que le nom du fichier est correct. + + + My Computer + Poste de travail + + + Parent Directory + Dossier parent + + + Files of type: + Fichiers de type : + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +Dossier introuvable. +Veuillez vérifier que le nom du dossier est correct. + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' est protégé en écriture. +Voulez-vous quand même le supprimer ? + + + Are sure you want to delete '%1'? + Etes-vous sûr de vouloir supprimer '%1' ? + + + Could not delete directory. + Impossible de supprimer le dossier. + + + Drive + Unité + + + File Folder + Match Windows Explorer + Fichier Dossier + + + Folder + All other platforms + Dossier + + + Alias + Mac OS X Finder + Pseudo + + + Shortcut + All other platforms + Raccourci + + + Unknown + Inconnu + + + Show + Montrer + + + Forward + Successeur + + + &New Folder + &Nouveau dossier + + + &Choose + &Choisir + + + Remove + Supprimer + + + File &name: + &Nom de fichier : + + + Look in: + Voir dans: + + + Create New Folder + Créer un nouveau dossier + + + + QFileSystemModel + + %1 TB + %1 To + + + %1 GB + %1 Go + + + %1 MB + %1 Mo + + + %1 KB + %1 Ko + + + %1 bytes + %1 octets + + + Invalid filename + Nom de fichier invalide + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>Le nom "%1" ne peut pas être utilisé.</b><p>Essayez un autre nom avec moins de caractères ou sans ponctuation. + + + Name + Nom + + + Size + Taille + + + Kind + Match OS X Finder + Type + + + Type + All other platforms + Type + + + Date Modified + Dernière modification + + + My Computer + Mon ordinateur + + + Computer + Ordinateur + + + %1 byte(s) + %1 octet(s) + + + + QFontDatabase + + Normal + Normal + + + Bold + Gras + + + Demi Bold + Semi Gras + + + Black + Noir + + + Demi + Demi + + + Light + Léger + + + Italic + Italique + + + Oblique + Oblique + + + Any + Tous + + + Latin + Latin + + + Greek + Grec + + + Cyrillic + Cyrillique + + + Armenian + Arménien + + + Hebrew + Hébreu + + + Arabic + Arabe + + + Syriac + Syriaque + + + Thaana + Thaana + + + Devanagari + Devanagari + + + Bengali + Bengali + + + Gurmukhi + Gurmukhi + + + Gujarati + Gujarati + + + Oriya + Oriya + + + Tamil + Tamil + + + Telugu + Telugu + + + Kannada + Kannada + + + Malayalam + Malayalam + + + Sinhala + Sinhala + + + Thai + Thaï + + + Lao + Lao + + + Tibetan + Tibétain + + + Myanmar + Myanmar + + + Georgian + Géorgien + + + Khmer + Khmer + + + Simplified Chinese + Chinois Simplifié + + + Traditional Chinese + Chinois Traditionnel + + + Japanese + Japonais + + + Korean + Coréen + + + Vietnamese + Vietnamien + + + Symbol + Symbole + + + Ogham + Ogham + + + Runic + Runique + + + N'Ko + N'Ko + + + + QFontDialog + + &Font + &Police + + + Font st&yle + St&yle de police + + + &Size + &Taille + + + Effects + Effets + + + Stri&keout + &Barré + + + &Underline + &Souligné + + + Sample + Exemple + + + Select Font + Choisir une police + + + Wr&iting System + &Système d'écriture + + + + QFtp + + Host %1 found + Hôte %1 trouvé + + + Host found + Hôte trouvé + + + Connected to host %1 + Connecté à l'hôte %1 + + + Connected to host + Connecté à l'hôte + + + Connection to %1 closed + Connexion à %1 arrêtée + + + Connection closed + Connexion arrêtée + + + Host %1 not found + Hôte %1 introuvable + + + Connection refused to host %1 + Connexion à l'hôte %1 refusée + + + Connection timed out to host %1 + Connexion expirée vers l'hôte %1 + + + Unknown error + Erreur inconnue + + + Connecting to host failed: +%1 + Échec de la connexion à l'hôte +%1 + + + Login failed: +%1 + Échec du login: +%1 + + + Listing directory failed: +%1 + Échec du listage du dossier : +%1 + + + Changing directory failed: +%1 + Échec du changement de dossier : +%1 + + + Downloading file failed: +%1 + Échec du téléchargement du fichier : +%1 + + + Uploading file failed: +%1 + Échec du télédéchargement : +%1 + + + Removing file failed: +%1 + Échec de la suppression d'un fichier : +%1 + + + Creating directory failed: +%1 + Échec de la création d'un dossier : +%1 + + + Removing directory failed: +%1 + Échec de la suppression d'un dossier : +%1 + + + Not connected + Non connecté + + + Connection refused for data connection + Connexion donnée refusée + + + + QHostInfo + + Unknown error + Erreur inconnue + + + + QHostInfoAgent + + Host not found + Hôte introuvable + + + Unknown address type + Adresse de type inconnu + + + Unknown error + Erreur inconnue + + + No host name given + Aucun nom d'hôte n'a été donné + + + Invalid hostname + Nom d'hôte non valide + + + + QHttp + + Connection refused + Connexion refusée + + + Host %1 not found + Hôte %1 introuvable + + + Wrong content length + Longueur du contenu invalide + + + HTTP request failed + Échec de la requête HTTP + + + Host %1 found + Hôte %1 trouvé + + + Host found + Hôte trouvé + + + Connected to host %1 + Connecté à l'hôte %1 + + + Connected to host + Connecté à l'hôte + + + Connection to %1 closed + Connexion à %1 arrêtée + + + Connection closed + Connexion arrêtée + + + Unknown error + Erreur inconnue + + + Request aborted + Requête interrompue + + + No server set to connect to + Aucun serveur spécifié + + + Server closed connection unexpectedly + Connexion interrompue par le serveur + + + Invalid HTTP response header + Entête de réponse HTTP invalide + + + Unknown authentication method + Méthode d'authentification inconnue + + + Invalid HTTP chunked body + Fragment HTTP invalide + + + Error writing response to device + Erreur lors de l'écriture de la réponse + + + Proxy authentication required + Le proxy requiert une authentification + + + Authentication required + Authentification requise + + + Proxy requires authentication + Le proxy requiert une authentification + + + Host requires authentication + L'hôte requiert une authentification + + + Data corrupted + Données corrompues + + + SSL handshake failed + le handshake SSL a échoué + + + Unknown protocol specified + Protocole spécifié inconnu + + + Connection refused (or timed out) + Connexion refusée (ou délai expiré) + + + HTTPS connection requested but SSL support not compiled in + Connexion HTTPS requise mais le support SSL n'est pas compilé + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + Pas de réponse HTTP de la part du proxy + + + Error parsing authentication request from proxy + Erreur dans le reqête d'authentification reçue du proxy + + + Authentication required + Authentification requise + + + Proxy denied connection + Le Proxy a rejeté la connexion + + + Error communicating with HTTP proxy + Erreur de communication avec le proxy HTTP + + + Proxy server not found + Serveur proxy introuvable + + + Proxy connection refused + Connexion au proxy refusée + + + Proxy server connection timed out + La connexion au serveur proxy a expiré + + + Proxy connection closed prematurely + La connexion au serveur proxy a été fermée prématurément + + + + QIBaseDriver + + Error opening database + Erreur d'ouverture de la base de données + + + Could not start transaction + La transaction n'a pas pu être démarrée + + + Unable to commit transaction + Incapable de soumettre la transaction + + + Unable to rollback transaction + Incapable d'annuler la transaction + + + + QIBaseResult + + Unable to create BLOB + Impossible de créer un BLOB + + + Unable to write BLOB + Impossible d'écrire le BLOB + + + Unable to open BLOB + Impossible d'ouvrir le BLOB + + + Unable to read BLOB + Impossible de lire le BLOB + + + Could not find array + Impossible de trouver le tableau + + + Could not get array data + Impossible de trouver le tableau de données + + + Could not get query info + Impossible d'avoir les informations sur la requête + + + Could not start transaction + Impossible de démarrer la transaction + + + Unable to commit transaction + Incapable de soumettre la transaction + + + Could not allocate statement + Impossible d'allouer la requête + + + Could not prepare statement + Impossible de préparer la requête + + + Could not describe input statement + Impossible de décrire la requête + + + Could not describe statement + Impossible de décrire la requête + + + Unable to close statement + Impossible de fermer la requête + + + Unable to execute query + Impossible d'exécuter la requête + + + Could not fetch next item + Impossible de récuperer l'élément suivant + + + Could not get statement info + Impossible d'avoir les informations sur la requête + + + + QIODevice + + Permission denied + Accès refusé + + + Too many open files + Trop de fichiers ouverts simultanément + + + No such file or directory + Aucun fichier ou dossier de ce nom + + + No space left on device + Aucun espace disponible sur le périphérique + + + Unknown error + Erreur inconnue + + + + QInputContext + + XIM + XIM + + + FEP + Processeur frontal + + + XIM input method + Méthode d'entrée XIM + + + Windows input method + Méthode d'entrée Windows + + + Mac OS X input method + Méthode d'entrée Mac OS X + + + S60 FEP input method + Méthode de saisie processeur frontal S60 + + + + QInputDialog + + Enter a value: + Entrer une valeur : + + + + QLibrary + + Could not mmap '%1': %2 + Impossible d'établir la projection en mémoire de '%1' : %2 + + + Plugin verification data mismatch in '%1' + Données de vérification du plugin différente dans '%1' + + + Could not unmap '%1': %2 + Impossible de supprimer la projection en mémoire de '%1' : %2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + Le plugin '%1' utilise une bibliothèque Qt incompatible. (%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + Le plugin '%1' utilise une bibliothèque Qt incompatible. Clé attendue "%2", reçue "%3" + + + Unknown error + Erreur inconnue + + + The shared library was not found. + La bibliothèque partagée est introuvable. + + + The file '%1' is not a valid Qt plugin. + Le fichier '%1' n'est pas un plugin Qt valide. + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + Le plugin '%1' utilise une bibliothèque Qt incompatible. (Il est impossible de mélanger des bibliothèques 'debug' et 'release'.) + + + Cannot load library %1: %2 + Impossible de charger la bibliothèque %1 : %2 + + + Cannot unload library %1: %2 + Impossible de décharger la bibliothèque %1 : %2 + + + Cannot resolve symbol "%1" in %2: %3 + Impossible de résoudre le symbole "%1" dans %2 : %3 + + + + QLineEdit + + Select All + Tout sélectionner + + + &Undo + &Annuler + + + &Redo + &Rétablir + + + Cu&t + Co&uper + + + &Copy + Cop&ier + + + &Paste + Co&ller + + + Delete + Supprimer + + + + QLocalServer + + %1: Name error + %1: Erreur de nom + + + %1: Permission denied + %1: Permission refusée + + + %1: Address in use + %1: Address déjà utilisée + + + %1: Unknown error %2 + %1: Erreur inconnue %2 + + + + QLocalSocket + + %1: Connection refused + %1: Connexion refusée + + + %1: Remote closed + %1: Connexion fermée + + + %1: Invalid name + %1: Nom invalide + + + %1: Socket access error + %1: Erreur d'accès au socket + + + %1: Socket resource error + %1: Erreur de ressource du socket + + + %1: Socket operation timed out + %1: L'opération socket a expiré + + + %1: Datagram too large + %1: Datagramme trop grand + + + %1: Connection error + %1: Erreur de connexion + + + %1: The socket operation is not supported + %1: L'opération n'est pas supportée + + + %1: Unknown error + %1 : erreur inconnue + + + %1: Unknown error %2 + %1: Erreur inconnue %2 + + + + QMYSQLDriver + + Unable to open database ' + Impossible d'ouvrir la base de données ' + + + Unable to connect + Impossible d'établir une connexion + + + Unable to begin transaction + Impossible de démarrer la transaction + + + Unable to commit transaction + Impossible de soumettre la transaction + + + Unable to rollback transaction + Impossible d'annuler la transaction + + + + QMYSQLResult + + Unable to fetch data + Impossible de récuperer des données + + + Unable to execute query + Impossible d'exécuter la requête + + + Unable to store result + Impossible de stocker le résultat + + + Unable to prepare statement + Impossible de préparer l'instruction + + + Unable to reset statement + Impossible de réinitialiser l'instruction + + + Unable to bind value + Impossible d'attacher la valeur + + + Unable to execute statement + Impossible d'exécuter la requête + + + Unable to bind outvalues + Impossible d'attacher les valeurs de sortie + + + Unable to store statement results + Impossible de stocker les résultats de la requête + + + Unable to execute next query + Impossible d'exécuterla prochaine requête + + + Unable to store next result + Impossible de stocker le prochain résultat + + + + QMdiArea + + (Untitled) + (Sans titre) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + Fermer + + + Minimize + Réduire + + + Restore Down + Restaurer en bas + + + &Restore + &Restaurer + + + &Move + &Déplacer + + + &Size + &Taille + + + Mi&nimize + Réd&uire + + + Ma&ximize + Ma&ximiser + + + Stay on &Top + &Rester au premier plan + + + &Close + &Fermer + + + Maximize + Maximiser + + + Unshade + Restaurer + + + Shade + Ombrer + + + Restore + Restaurer + + + Help + Aide + + + Menu + Menu + + + - [%1] + - [%1] + + + + QMenu + + Close + Fermer + + + Open + Ouvrir + + + Execute + Exécuter + + + + QMenuBar + + Actions + Actions + + + + QMessageBox + + OK + OK + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <h3>Présentation de Qt</h3><p>Ce programme utilise 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><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> + <p>Qt est une boîte à outils 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 source libre) à 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> + + + About Qt + À propos de Qt + + + Help + Aide + + + Show Details... + Montrer les détails... + + + Hide Details... + Cacher les détails... + + + + QMultiInputContext + + Select IM + Sélectionner IM + + + + QMultiInputContextPlugin + + Multiple input method switcher + Sélectionneur de méthode de saisie + + + Multiple input method switcher that uses the context menu of the text widgets + Sélectionneur de méthode de saisie qui utilise le menu contextuel des widgets de texte + + + + QNativeSocketEngine + + The remote host closed the connection + L'hôte distant a fermé la connexion + + + Network operation timed out + L'opération réseau a expiré + + + Out of resources + Manque de ressources + + + Unsupported socket operation + Opération socket non supportée + + + Protocol type not supported + Protocol non géré + + + Invalid socket descriptor + Descripteur de socket invalide + + + Network unreachable + Réseau impossible à rejoindre + + + Permission denied + Accès refusé + + + Connection timed out + Connexion expirée + + + Connection refused + Connexion refusée + + + The bound address is already in use + L'adresse liée est déjà en usage + + + The address is not available + L'adresse n'est pas disponible + + + The address is protected + L'adresse est protégée + + + Unable to send a message + Impossible d'envoyer un message + + + Unable to receive a message + Impossible de recevoir un message + + + Unable to write + Impossible d'écrire + + + Network error + Erreur réseau + + + Another socket is already listening on the same port + Un autre socket écoute déjà sur le même port + + + Unable to initialize non-blocking socket + Impossible d'initialiser le socket asynchrone + + + Unable to initialize broadcast socket + Impossible d'initialiser le socket broadcast + + + Attempt to use IPv6 socket on a platform with no IPv6 support + Tentative d'utiliser un socket IPv6 sur une plateforme qui ne supporte pas IPv6 + + + Host unreachable + Hôte inaccessible + + + Datagram was too large to send + Le datagramme était trop grand pour être envoyé + + + Operation on non-socket + Operation sur non-socket + + + Unknown error + Erreur inconnue + + + The proxy type is invalid for this operation + Le type de proxy est invalide pour cette opération + + + + QNetworkAccessCacheBackend + + Error opening %1 + Erreur lors de l'ouverture de %1 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + Erreur lors de l'écriture dans %1: %2 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + Requête d'ouverture de fichier distant %1 + + + Error opening %1: %2 + Erreur lors de l'ouverture de %1 : %2 + + + Write error writing to %1: %2 + Erreur d'écriture de %1 : %2 + + + Cannot open %1: Path is a directory + Impossible d'ouvrir %1 : le chemin est un dossier + + + Read error reading from %1: %2 + Erreur de lecture de %1 : %2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + Aucun proxy trouvé + + + Cannot open %1: is a directory + Impossible d'ouvrir %1 : le chemin est un dossier + + + Logging in to %1 failed: authentication required + Connexion à %1 a échoué : authentification requise + + + Error while downloading %1: %2 + Erreur lors du téléchargement de %1 : %2 + + + Error while uploading %1: %2 + Erreur lors de l'envoi de %1 : %2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + Aucun proxy trouvé + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + Erreur lors du téléchargement de %1 - le serveur a répondu: %2 + + + Protocol "%1" is unknown + Le protocole "%1" est inconnu + + + + QNetworkReplyImpl + + Operation canceled + Opération annulée + + + + QOCIDriver + + Unable to logon + Impossible d'ouvrir une session + + + Unable to initialize + QOCIDriver + L'initialisation a échouée + + + Unable to begin transaction + Impossible de démarrer la transaction + + + Unable to commit transaction + Impossible d'enregistrer la transaction + + + Unable to rollback transaction + Impossible d'annuler la transaction + + + + QOCIResult + + Unable to bind column for batch execute + Impossible d'attacher la colonne pour une execution batch + + + Unable to execute batch statement + Impossible d'exécuter l'instruction batch + + + Unable to goto next + Impossible de passer au suivant + + + Unable to alloc statement + Impossible d'allouer la requête + + + Unable to prepare statement + Impossible de préparer la requête + + + Unable to get statement type + + + + Unable to bind value + Impossible d'attacher la valeur + + + Unable to execute statement + Impossible d'exéctuer la requête + + + + QODBCDriver + + Unable to connect + Incapable d'établir une connexion + + + Unable to disable autocommit + Impossible de désactiver l'autocommit + + + Unable to commit transaction + Incapable de soumettre la transaction + + + Unable to rollback transaction + Incapable d'annuler la transaction + + + Unable to enable autocommit + Impossible d'active l'autocommit + + + Unable to connect - Driver doesn't support all functionality required + + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: Impossible d'utiliser 'SQL_CURSOR_STATIC' comme attribut de requête. Veuillez vérifier la configuration de votre pilote ODBC + + + Unable to execute statement + Impossible d'exéctuer la requête + + + Unable to fetch next + Impossible de récupérer le suivant + + + Unable to prepare statement + Impossible de préparer la requête + + + Unable to bind variable + Impossible d'attacher la variable + + + Unable to fetch last + Impossible de récupérer le dernier + + + Unable to fetch + Impossible de récupérer + + + Unable to fetch first + Impossible de récupérer le premier + + + Unable to fetch previous + Impossible de récupérer le précedent + + + + QObject + + Invalid hostname + Nom d'hôte non valide + + + Operation not supported on %1 + Opération non supportée sur %1 + + + Invalid URI: %1 + URI invalide : %1 + + + Socket error on %1: %2 + Erreur de socket sur %1 : %2 + + + Remote host closed the connection prematurely on %1 + L'hôte distant a fermé sa connexion de façon prématurée sur %1 + + + No host name given + Nom d'hôte manquant + + + + QPPDOptionsModel + + Name + Nom + + + Value + Valeur + + + + QPSQLDriver + + Unable to connect + Impossible d'établir une connexion + + + Could not begin transaction + Impossible de démarrer la transaction + + + Could not commit transaction + Impossible de soumettre la transaction + + + Could not rollback transaction + Impossible d'annuler la transaction + + + Unable to subscribe + Impossible de s'inscrire + + + Unable to unsubscribe + Impossible de se désinscrire + + + + QPSQLResult + + Unable to create query + Impossible de créer la requête + + + Unable to prepare statement + Impossible de préparer la requête + + + + QPageSetupWidget + + Centimeters (cm) + Centimètres (cm) + + + Millimeters (mm) + Millimètres (mm) + + + Inches (in) + Pouces (in) + + + Points (pt) + Points (pts) + + + Form + Formulaire + + + Paper + Papier + + + Page size: + Dimensions : + + + Width: + Largeur : + + + Height: + Hauteur : + + + Paper source: + Source du papier : + + + Orientation + Orientation + + + Portrait + Portrait + + + Landscape + Paysage + + + Reverse landscape + Paysage inversé + + + Reverse portrait + Portrait inversé + + + Margins + Marges + + + top margin + marge haute + + + left margin + marge gauche + + + right margin + marge droite + + + bottom margin + marge basse + + + + QPluginLoader + + Unknown error + Erreur inconnue + + + The plugin was not loaded. + Le plugin n'a pas été chargé. + + + + QPrintDialog + + locally connected + connecté en local + + + Aliases: %1 + Alias : %1 + + + unknown + inconnu + + + OK + OK + + + Print all + Imprimer tout + + + Print range + Imprimer la sélection + + + A0 (841 x 1189 mm) + A0 (841 x 1189 mm) + + + A1 (594 x 841 mm) + A1 (594 x 841 mm) + + + A2 (420 x 594 mm) + A2 (420 x 594 mm) + + + A3 (297 x 420 mm) + A3 (297 x 420 mm) + + + A5 (148 x 210 mm) + A5 (148 x 210 mm) + + + A6 (105 x 148 mm) + A6 (105 x 148 mm) + + + A7 (74 x 105 mm) + A7 (74 x 105 mm) + + + A8 (52 x 74 mm) + A8 (52 x 74 mm) + + + A9 (37 x 52 mm) + A9 (37 x 52 mm) + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 mm) + + + B1 (707 x 1000 mm) + B1 (707 x 1000 mm) + + + B2 (500 x 707 mm) + B2 (500 x 707 mm) + + + B3 (353 x 500 mm) + B3 (353 x 500 mm) + + + B4 (250 x 353 mm) + B4 (250 x 353 mm) + + + B6 (125 x 176 mm) + B6 (125 x 176 mm) + + + B7 (88 x 125 mm) + B7 (88 x 125 mm) + + + B8 (62 x 88 mm) + B8 (62 x 88 mm) + + + B9 (44 x 62 mm) + B9 (44 x 62 mm) + + + B10 (31 x 44 mm) + B10 (31 x 44 mm) + + + C5E (163 x 229 mm) + C5E (163 x 229 mm) + + + DLE (110 x 220 mm) + DLE (110 x 220 mm) + + + Folio (210 x 330 mm) + Folio (210 x 330 mm) + + + Ledger (432 x 279 mm) + Ledger (432 x 279 mm) + + + Tabloid (279 x 432 mm) + Tabloïde (279 x 432 mm) + + + US Common #10 Envelope (105 x 241 mm) + US Common #10 Envelope (105 x 241 mm) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 mm) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 mm) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7,5 x 10 pouces, 191 x 254 mm) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14 pouces, 216 x 356 mm) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8,5 x 11 pouces, 216 x 279 mm) + + + Print selection + Imprimer la sélection + + + Print + Impr écran + + + Print To File ... + Imprimer dans un fichier... + + + File %1 is not writable. +Please choose a different file name. + Impossible d'écrire dans le fichier %1. +Veuillez choisir un nom de fichier différent. + + + %1 already exists. +Do you want to overwrite it? + %1 existe. +Voulez-vous l'écraser ? + + + File exists + Le fichier existe + + + <qt>Do you want to overwrite it?</qt> + <qt>voulez-vous l'écraser ?</qt> + + + %1 is a directory. +Please choose a different file name. + %1 est un dossier. +Veuillez choisir un nom de fichier différent. + + + The 'From' value cannot be greater than the 'To' value. + La valeur 'de' ne peut pas être plus grande que la valeur 'à'. + + + A0 + + + + A1 + + + + A2 + + + + A3 + + + + A4 + + + + A5 + + + + A6 + + + + A7 + + + + A8 + + + + A9 + + + + B0 + + + + B1 + + + + B2 + + + + B3 + + + + B4 + + + + B5 + + + + B6 + + + + B7 + + + + B8 + + + + B9 + + + + B10 + + + + C5E + + + + DLE + + + + Executive + + + + Folio + + + + Ledger + + + + Legal + + + + Letter + + + + Tabloid + + + + US Common #10 Envelope + + + + Custom + Personnalisé + + + &Options >> + + + + &Options << + + + + Print to File (PDF) + Imprimer dans un fichier (PDF) + + + Print to File (Postscript) + Imprimer dans un fichier (PostScript) + + + Local file + Fichier local + + + Write %1 file + Ecriture du fichier %1 + + + &Print + Im&primer + + + + QPrintPreviewDialog + + %1% + %1% + + + Print Preview + Aperçu avant impression + + + Next page + Page suivante + + + Previous page + Page précédente + + + First page + Première page + + + Last page + Dernière page + + + Fit width + Ajuster la largeur + + + Fit page + Ajuster la page + + + Zoom in + Zoom avant + + + Zoom out + Zoom arrière + + + Portrait + Portrait + + + Landscape + Paysage + + + Show single page + Afficher une seule page + + + Show facing pages + Afficher deux pages + + + Show overview of all pages + Afficher un aperçu de toutes les pages + + + Print + Impr écran + + + Page setup + Configuration de la page + + + Close + Fermer + + + Export to PDF + Exporter vers PDF + + + Export to PostScript + Exporter vers PostScript + + + Page Setup + Configuration de la page + + + + QPrintPropertiesWidget + + Form + Formulaire + + + Page + + + + Advanced + Avancé + + + + QPrintSettingsOutput + + Form + Formulaire + + + Copies + Copies + + + Print range + Imprimer la sélection + + + Print all + Imprimer tout + + + Pages from + Pages + + + to + à + + + Selection + Sélection + + + Output Settings + Paramètres de sortie + + + Copies: + + + + Collate + Assembler + + + Reverse + Inverse + + + Options + Options + + + Color Mode + Mode de couleur + + + Color + Couleur + + + Grayscale + Dégradé de gris + + + Duplex Printing + Impression en duplex + + + None + Aucun + + + Long side + Côté long + + + Short side + Côté court + + + + QPrintWidget + + Form + Formulaire + + + Printer + Imprimante + + + &Name: + &Nom : + + + P&roperties + P&ropriétés + + + Location: + Emplacement : + + + Preview + Prévisualisation + + + Type: + + + + Output &file: + &Fichier de sortie: + + + ... + + + + + QProcess + + Could not open input redirection for reading + Impossible d'ouvrir la redirection d'entrée en lecture + + + Could not open output redirection for writing + Impossible d'ouvrir la redirection de sortie pour écriture + + + Resource error (fork failure): %1 + Erreur de ressouce (fork) : %1 + + + Process operation timed out + Operation de processus a expiré + + + Error reading from process + Erreur de lecture du processus + + + Error writing to process + Erreur d"écriture vers le processus + + + Process crashed + Le processus à planté + + + No program defined + Aucun programme défini + + + Process failed to start: %1 + Le démarrage du processus a échoué: %1 + + + + QProgressDialog + + Cancel + Annuler + + + + QPushButton + + Open + Ouvrir + + + + QRadioButton + + Check + Cocher + + + + QRegExp + + no error occurred + aucune erreur ne s'est produite + + + disabled feature used + option désactivée + + + bad char class syntax + syntaxe invalide pour classe de caractère + + + bad lookahead syntax + syntaxe invalide pour lookahead + + + bad repetition syntax + syntaxe invalide pour répétition + + + invalid octal value + valeur octale invalide + + + missing left delim + délémiteur gauche manquant + + + unexpected end + fin impromptue + + + met internal limit + rencontré limite interne + + + invalid interval + intervalle non valide + + + invalid category + catégorie non valide + + + + QSQLite2Driver + + Error opening database + Erreur lors de l'ouverture de la base de données + + + Unable to begin transaction + Impossible de démarrer la transaction + + + Unable to commit transaction + Impossible de soumettre la transaction + + + Unable to rollback transaction + Impossible de répéter la transaction + + + + QSQLite2Result + + Unable to fetch results + Impossible de récupérer les résultats + + + Unable to execute statement + Impossible d'exécuter la requête + + + + QSQLiteDriver + + Error opening database + Erreur lors de l'ouverture de la base de données + + + Error closing database + Erreur lors de la fermeture de la base de données + + + Unable to begin transaction + Impossible de démarrer la transaction + + + Unable to commit transaction + Incapable de soumettre la transaction + + + Unable to rollback transaction + Impossible d'annuler la transaction + + + + QSQLiteResult + + Unable to fetch row + Impossible de récupérer la rangée + + + Unable to execute statement + Impossible d'exécuter la requête + + + Unable to reset statement + Impossible de réinitialiser la requête + + + Unable to bind parameters + Impossible d'attacher les paramètres + + + Parameter count mismatch + Nombre de paramètres incorrect + + + No query + Pas de requête + + + + QScriptBreakpointsModel + + ID + Identifiant + + + Location + Lieu + + + Condition + Condition + + + Ignore-count + Comptes d'ignorés + + + Single-shot + Un seul tir + + + Hit-count + Compte de coups + + + + QScriptBreakpointsWidget + + New + Créer + + + Delete + Supprimer + + + + QScriptDebugger + + Go to Line + Aller à la ligne + + + Line: + Ligne: + + + Interrupt + Interrompre + + + Shift+F5 + Shift+F5 + + + Continue + Continuer + + + F5 + F5 + + + Step Into + Pas à pas détaillé + + + F11 + F11 + + + Step Over + Pas à pas principal + + + F10 + F10 + + + Step Out + Pas à pas sortant + + + Shift+F11 + Shift+F11 + + + Run to Cursor + Exécuter au curseur + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + Exécuter au nouveau script + + + Toggle Breakpoint + Basculer le point d'arrêt + + + F9 + F9 + + + Clear Debug Output + Effacer les résultats du débogage + + + Clear Error Log + Effacer le journal d'erreurs + + + Clear Console + Effacer la console + + + &Find in Script... + &Chercher dans le script... + + + Ctrl+F + Ctrl+F + + + Find &Next + Résultat &suivant + + + F3 + F3 + + + Find &Previous + Chercher &précédent + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + Déboguer + + + + QScriptDebuggerCodeFinderWidget + + Close + Fermer + + + Previous + Précédent + + + Next + Suivant + + + Case Sensitive + Sensible à la casse + + + Whole words + Mots entiers + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;La recherche est revenue au début + + + + QScriptDebuggerLocalsModel + + Name + Nom + + + Value + Valeur + + + + QScriptDebuggerStackModel + + Level + Niveau + + + Name + Nom + + + Location + Lieu + + + + QScriptEdit + + Toggle Breakpoint + Basculer le point d'arrêt + + + Disable Breakpoint + Désactiver le point d'arrêt + + + Enable Breakpoint + Activer le point d'arrêt + + + Breakpoint Condition: + Condition du point d'arrêt: + + + + QScriptEngineDebugger + + Loaded Scripts + Scripts chargés + + + Breakpoints + Points d'arrêt + + + Stack + Empiler + + + Locals + Locaux + + + Console + Console + + + Debug Output + Résultats du débogage + + + Error Log + Journal d'erreurs + + + Search + Chercher + + + View + Afficher + + + Qt Script Debugger + Débogueur de script Qt + + + + QScriptNewBreakpointWidget + + Close + Fermer + + + + QScrollBar + + Scroll here + Défiler jusqu'ici + + + Left edge + Extrême gauche + + + Top + En haut + + + Right edge + Extrême droite + + + Bottom + En bas + + + Page left + Page précédente + + + Page up + Page précédente + + + Page right + Page suivante + + + Page down + Page suivante + + + Scroll left + Défiler vers la gauche + + + Scroll up + Défiler vers le haut + + + Scroll right + Défiler vers la droite + + + Scroll down + Défiler vers le bas + + + Line up + Aligner + + + Position + Position + + + Line down + Aligner en-bas + + + + QSharedMemory + + %1: create size is less then 0 + %1 : taille de création est inférieur à 0 + + + %1: unable to lock + %1 : impossible de vérrouiller + + + %1: unable to unlock + %1 : impossible de déverrouiller + + + %1: permission denied + %1 : permission refusée + + + %1: already exists + %1 : existe déjà + + + %1: doesn't exists + %1 : n'existe pas + + + %1: out of resources + %1 : plus de ressources disponibles + + + %1: unknown error %2 + %1 : erreur inconnue %2 + + + %1: key is empty + %1 : clé vide + + + %1: ftok failed + %1 : ftok a échoué + + + %1: unable to make key + %1 : impossible de créer la clé + + + %1: doesn't exist + %1: n'existe pas + + + %1: UNIX key file doesn't exist + %1: le fichier de clés UNIX n'existe pas + + + %1: system-imposed size restrictions + %1 : le système impose des restrictions sur la taille + + + %1: not attached + %1 : non attaché + + + %1: invalid size + %1 : taille invalide + + + %1: key error + %1 : erreur de clé + + + %1: size query failed + %1 : la requête de taille a échoué + + + %1: unable to set key on lock + %1 : impossible d'affecter la clé au verrou + + + + QShortcut + + Space + Espace + + + Esc + Échap + + + Tab + Tab + + + Backtab + Tab arr + + + Backspace + Effacement + + + Return + Retour + + + Enter + Entrée + + + Ins + Inser + + + Del + Suppr + + + Pause + Pause + + + Print + Impr écran + + + SysReq + Syst + + + Home + Début + + + End + Fin + + + Left + Gauche + + + Up + Haut + + + Right + Droite + + + Down + Bas + + + PgUp + Page préc + + + PgDown + Page suiv + + + CapsLock + Verr maj + + + NumLock + Verr num + + + ScrollLock + Arrêt défil + + + Menu + Menu + + + Help + Aide + + + Back + Précédent (historique) + + + Forward + Successeur (historique) + + + Stop + Stop + + + Refresh + Rafraîchir + + + Volume Down + Volume bas + + + Volume Mute + Volume muet + + + Volume Up + Volume haut + + + + Bass Boost + Graves fort + + + Bass Up + Graves haut + + + Bass Down + Graves bas + + + Treble Up + Aigus haut + + + Treble Down + Aigus bas + + + Media Play + Média démarrer + + + Media Stop + Média arrêt + + + Media Previous + Média précédent + + + Media Next + Média suivant + + + Media Record + Média enregistrer + + + Favorites + Préférés + + + Search + Recherche + + + Standby + Attente + + + Open URL + Ouvrir URL + + + Launch Mail + Lancer courrier + + + Launch Media + Lancer média + + + Launch (0) + Lancer (0) + + + Launch (1) + Lancer (1) + + + Launch (2) + Lancer (2) + + + Launch (3) + Lancer (3) + + + Launch (4) + Lancer (4) + + + Launch (5) + Lancer (5) + + + Launch (6) + Lancer (6) + + + Launch (7) + Lancer (7) + + + Launch (8) + Lancer (8) + + + Launch (9) + Lancer (9) + + + Launch (A) + Lancer (A) + + + Launch (B) + Lancer (B) + + + Launch (C) + Lancer (C) + + + Launch (D) + Lancer (D) + + + Launch (E) + Lancer (E) + + + Launch (F) + Lancer (F) + + + Monitor Brightness Up + Augmenter la luminosité du moniteur + + + Monitor Brightness Down + Baisser la luminosité du moniteur + + + Keyboard Light On/Off + Avec/sans lumière clavier + + + Keyboard Brightness Up + Augmenter la luminosité du clavier + + + Keyboard Brightness Down + Baisser la luminosité du clavier + + + Power Off + Couper l'alimentation + + + Wake Up + Réveiller + + + Eject + Éjecter + + + Screensaver + Économiseur d'écran + + + WWW + WWW + + + Sleep + Dormir + + + LightBulb + Ampoule + + + Shop + Magasin + + + History + Historique + + + Add Favorite + Ajouter favori + + + Hot Links + Liens chauds + + + Adjust Brightness + Régler la luminosité + + + Finance + Finances + + + Community + Communauté + + + Audio Rewind + Audio arrière + + + Back Forward + Retour avant + + + Application Left + Application gauche + + + Application Right + Application droite + + + Book + Livre + + + CD + CD + + + Calculator + Calculatrice + + + Clear + Effacer + + + Clear Grab + Effacer la prise + + + Close + Fermer + + + Copy + Copier + + + Cut + Couper + + + Display + Affichage + + + DOS + DOS + + + Documents + Documents + + + Spreadsheet + Feuille de calcul + + + Browser + Navigateur + + + Game + Jeu + + + Go + Aller + + + iTouch + iTouch + + + Logoff + Fermer une session + + + Market + Marché + + + Meeting + Réunion + + + Keyboard Menu + Menu du clavier + + + Menu PB + Menu PB + + + My Sites + Mes sites + + + News + Actualités + + + Home Office + Bureau à domicile + + + Option + Option + + + Paste + Coller + + + Phone + Téléphone + + + Reply + Répondre + + + Reload + Recharger + + + Rotate Windows + Faire tourner la fenêtre + + + Rotation PB + Rotation PB + + + Rotation KB + Rotation KB + + + Save + Enregistrer + + + Send + Envoyer + + + Spellchecker + Correcteur orthographique + + + Split Screen + Partager l'écran + + + Support + Supporter + + + Task Panel + Panneau de tâches + + + Terminal + Terminal + + + Tools + Outils + + + Travel + Voyager + + + Video + Vidéo + + + Word Processor + Traitement de texte + + + XFer + XFer + + + Zoom In + Agrandir + + + Zoom Out + Rétrécir + + + Away + Absent + + + Messenger + Messenger + + + WebCam + Webcaméra + + + Mail Forward + Faire suivre l'e-mail + + + Pictures + Images + + + Music + Musique + + + Battery + Batterie + + + Bluetooth + Bluetooth + + + Wireless + Sans fil + + + Ultra Wide Band + Bande ultralarge + + + Audio Forward + Audio avant + + + Audio Repeat + Audio répéter + + + Audio Random Play + Audio lecture aléatoire + + + Subtitle + Sous-titre + + + Audio Cycle Track + Piste du cycle audio + + + Time + Heure + + + View + Afficher + + + Top Menu + Haut du menu + + + Suspend + Suspendre + + + Hibernate + Hiberner + + + Print Screen + Capture d'écran + + + Page Up + Page haut + + + Page Down + Page bas + + + Caps Lock + Verrou maj. + + + Num Lock + Verrou num. + + + Number Lock + Verrou numéro + + + Scroll Lock + Arrêt défilement + + + Insert + Insérer + + + Delete + Supprimer + + + Escape + Échapement + + + System Request + Système + + + Select + Sélectionner + + + Yes + Oui + + + No + Non + + + Context1 + Contexte1 + + + Context2 + Contexte2 + + + Context3 + Contexte3 + + + Context4 + Contexte4 + + + Call + Appeler + + + Hangup + Raccrocher + + + Flip + Retourner + + + Ctrl + Ctrl + + + Shift + Maj + + + Alt + Alt + + + Meta + Méta + + + + + + + + + F%1 + F%1 + + + Home Page + Page d'accueil + + + + QSlider + + Page left + Page précédente + + + Page up + Page précédente + + + Position + Position + + + Page right + Page suivante + + + Page down + Page suivante + + + + QSocks5SocketEngine + + Connection to proxy refused + Connexion au proxy refusée + + + Connection to proxy closed prematurely + connexion au proxy fermée prématurément + + + Proxy host not found + Hôte proxy introuvable + + + Connection to proxy timed out + Connexion au proxy expirée + + + Proxy authentication failed + L'authentification proxy a échoué + + + Proxy authentication failed: %1 + L'authentification proxy a échoué : %1 + + + SOCKS version 5 protocol error + Erreur de protocole SOCKS version 5 + + + General SOCKSv5 server failure + Erreur générale du serveur SOCKSv5 + + + Connection not allowed by SOCKSv5 server + Connexion refusée par le serveur SOCKSv5 + + + TTL expired + TTL expiré + + + SOCKSv5 command not supported + Commande SOCKSv5 non supportée + + + Address type not supported + Type d'adresse non supporté + + + Unknown SOCKSv5 proxy error code 0x%1 + Erreur proxy SOCKSv5 inconnue : 0x%1 + + + Network operation timed out + L'opération réseau a expiré + + + + QSoftKeyManager + + Ok + OK + + + Select + Sélectionner + + + Done + Terminer + + + Options + Options + + + Cancel + Annuler + + + Exit + Quitter + + + + QSpinBox + + More + Plus + + + Less + Moins + + + + QSql + + Delete + Supprimer + + + Delete this record? + Supprimer cet enregistrement ? + + + Yes + Oui + + + No + Non + + + Insert + Insérer + + + Update + Actualiser + + + Save edits? + Enregistrer les modifications ? + + + Cancel + Annuler + + + Confirm + Confirmer + + + Cancel your edits? + Annuler vos modifications ? + + + + QSslSocket + + Unable to write data: %1 + Impossible d'écrire les données : %1 + + + Unable to decrypt data: %1 + Impossible de décrypter les données: %1 + + + Error while reading: %1 + Erreur lors de la lecture : %1 + + + Error during SSL handshake: %1 + Erreur lors de la poignée de main SSL : %1 + + + Error creating SSL context (%1) + Erreur lors de la création du contexte SSL (%1) + + + Invalid or empty cipher list (%1) + La list de chiffrements est invalide ou vide (%1) + + + Private key does not certify public key, %1 + La clé privée ne certifie pas la clé publique, %1 + + + Error creating SSL session, %1 + Erreur lors de la création de la session SSL, %1 + + + Error creating SSL session: %1 + Erreur lors de la création de la session SSL : %1 + + + Cannot provide a certificate with no key, %1 + Impossible de fournir un certificat sans clé, %1 + + + Error loading local certificate, %1 + Erreur lors du chargement du certificat local, %1 + + + Error loading private key, %1 + Erreur lors du chargement de la clé privée, %1 + + + No error + Aucune erreur + + + The issuer certificate could not be found + Le certificat de l'émetteur est introuvable + + + The certificate signature could not be decrypted + La signature du certificat n'a pas pu être vérifiée + + + The public key in the certificate could not be read + La clé publique du certificat n'a pas pu être lue + + + The signature of the certificate is invalid + La signature du certificat n'est pas valide + + + The certificate is not yet valid + Le certificat n'est pas encore valide + + + The certificate has expired + Le certificat a expiré + + + The certificate's notBefore field contains an invalid time + Le champ pasAvant du certificat inclut une heure non valide + + + The certificate's notAfter field contains an invalid time + Le champ pasAprès du certificat inclut une heure non valide + + + The certificate is self-signed, and untrusted + Le certificat n'est pas sécurisé car signé automatiquement + + + The root certificate of the certificate chain is self-signed, and untrusted + Le certificat racine de la chaîne de certificats n'est pas sécurisé car signé automatiquement + + + The issuer certificate of a locally looked up certificate could not be found + Le certificat de l'émetteur d'un certificat converti localement est introuvable + + + No certificates could be verified + Aucun certificat n'a pu être vérifié + + + One of the CA certificates is invalid + L'un des certificats CA n'est pas valide + + + The basicConstraints path length parameter has been exceeded + Le paramètre de longueur du chemin basicConstraints a été dépassé + + + The supplied certificate is unsuitable for this purpose + Le certificat fourni ne convient pas pour cet objectif + + + The root CA certificate is not trusted for this purpose + Le certificat CA racine n'est pas sécurisé pour cet objectif + + + The root CA certificate is marked to reject the specified purpose + Le certificat CA racine est marqué pour rejeter l'objectif spécifié + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + 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 + + + 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 + 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 + + + The peer did not present any certificate + Le poste ne contient aucun certificat + + + The host name did not match any of the valid hosts for this certificate + Le nom d'hôte ne correspondait à aucun des hôtes valides pour ce certificat + + + Unknown error + Erreur inconnue + + + + QStateMachine + + Missing initial state in compound state '%1' + État initial manquant dans l'état composé '%1' + + + Missing default state in history state '%1' + État par défaut manquant dans l'état de l'historique '%1' + + + No common ancestor for targets and source of transition from state '%1' + Aucun ancêtre commun pour les cibles et la source de transition de l'état '%1' + + + Unknown error + Erreur inconnue + + + + QSystemSemaphore + + %1: does not exist + %1 : n'existe pas + + + %1: out of resources + %1: plus de ressources disponibles + + + %1: permission denied + %1: permission refusée + + + %1: already exists + %1 : existe déjà + + + %1: unknown error %2 + %1: erreur inconnue %2 + + + + QTDSDriver + + Unable to open connection + Impossible d'ouvrir la connexion + + + Unable to use database + Impossible d'utiliser la base de données + + + + QTabBar + + Scroll Left + Défiler vers la gauche + + + Scroll Right + Défiler vers la droite + + + + QTcpServer + + Operation on socket is not supported + Opération sur le socket non supportée + + + + QTextControl + + &Undo + &Annuler + + + &Redo + &Répéter + + + Cu&t + Co&uper + + + &Copy + Cop&ier + + + Copy &Link Location + Copier l'adresse du &lien + + + &Paste + Co&ller + + + Delete + Supprimer + + + Select All + Tout sélectionner + + + + QToolButton + + Press + Presser + + + Open + Ouvrir + + + + QUdpSocket + + This platform does not support IPv6 + Cette plateforme ne supporte pas IPv6 + + + + QUndoGroup + + Undo + Annuler + + + Redo + Répéter + + + + QUndoModel + + <empty> + <vide> + + + + QUndoStack + + Undo + Annuler + + + Redo + Répéter + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM Left-to-right mark + + + RLM Right-to-left mark + RLM Right-to-left mark + + + ZWJ Zero width joiner + ZWJ Zero width joiner + + + ZWNJ Zero width non-joiner + ZWNJ Zero width non-joiner + + + ZWSP Zero width space + ZWSP Zero width space + + + LRE Start of left-to-right embedding + LRE Start of left-to-right embedding + + + RLE Start of right-to-left embedding + RLE Start of right-to-left embedding + + + LRO Start of left-to-right override + LRO Start of left-to-right override + + + RLO Start of right-to-left override + RLO Start of right-to-left override + + + PDF Pop directional formatting + PDF Pop directional formatting + + + Insert Unicode control character + Insérer caractère de contrôle Unicode + + + + QWebFrame + + Request cancelled + Requête annulée + + + Request blocked + Requête bloquée + + + Cannot show URL + Impossible d'afficher l'URL + + + Frame load interrupted by policy change + Charge du cadre interrompue par le changement de politique + + + Cannot show mimetype + Impossible d'afficher le mimetype + + + File does not exist + Le fichier n'existe pas + + + + QWebPage + + Submit + default label for Submit buttons in forms on web pages + + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + + + + Reset + default label for Reset buttons in forms on web pages + + + + Choose File + title for file button used in HTML forms + Choisir le fichier + + + No file selected + text to display in file button used in HTML forms when no file is selected + + + + Open in New Window + Open in New Window context menu item + + + + Save Link... + Download Linked File context menu item + + + + Copy Link + Copy Link context menu item + Copier le lien + + + Open Image + Open Image in New Window context menu item + + + + Save Image + Download Image context menu item + + + + Copy Image + Copy Link context menu item + Copier l'image + + + Open Frame + Open Frame in New Window context menu item + + + + Copy + Copy context menu item + Copier + + + Go Back + Back context menu item + + + + Go Forward + Forward context menu item + + + + Stop + Stop context menu item + + + + Reload + Reload context menu item + + + + Cut + Cut context menu item + Couper + + + Paste + Paste context menu item + + + + No Guesses Found + No Guesses Found context menu item + + + + Ignore + Ignore Spelling context menu item + + + + Add To Dictionary + Learn Spelling context menu item + Ajouter au dictionnaire + + + Search The Web + Search The Web context menu item + + + + Look Up In Dictionary + Look Up in Dictionary context menu item + + + + Open Link + Open Link context menu item + + + + Ignore + Ignore Grammar context menu item + + + + Spelling + Spelling and Grammar context sub-menu item + + + + Show Spelling and Grammar + menu item title + + + + Hide Spelling and Grammar + menu item title + + + + Check Spelling + Check spelling context menu item + Vérifier l'orthographe + + + Check Spelling While Typing + Check spelling while typing context menu item + Vérifier l'orthographe pendant la saisie + + + Check Grammar With Spelling + Check grammar with spelling context menu item + Vérifier la grammaire en même temps que l'orthographe + + + Fonts + Font context sub-menu item + + + + Bold + Bold context menu item + Gras + + + Italic + Italic context menu item + + + + Underline + Underline context menu item + + + + Outline + Outline context menu item + + + + Direction + Writing direction context sub-menu item + Direction + + + Text Direction + Text direction context sub-menu item + + + + Default + Default writing direction context menu item + Défaut + + + Left to Right + Left to Right context menu item + Gauche à droite + + + Right to Left + Right to Left context menu item + Droite à gauche + + + Loading... + Media controller status message when the media is loading + Chargement... + + + Live Broadcast + Media controller status message when watching a live broadcast + Diffusion en direct + + + Audio Element + Media controller element + Élément audio + + + Video Element + Media controller element + Élément vidéo + + + Mute Button + Media controller element + Bouton de désactivation du son + + + Unmute Button + Media controller element + Bouton de réactivation du son + + + Play Button + Media controller element + Bouton de lecture + + + Pause Button + Media controller element + Bouton de pause + + + Slider + Media controller element + Barre de défilement + + + Slider Thumb + Media controller element + Curseur de la barre de défilement + + + Rewind Button + Media controller element + Bouton de retour en arrière + + + Return to Real-time Button + Media controller element + Bouton de retour au temps réel + + + Elapsed Time + Media controller element + Temps écoulé + + + Remaining Time + Media controller element + Durée restante + + + Status Display + Media controller element + Affichage de l'état + + + Fullscreen Button + Media controller element + Bouton de plein écran + + + Seek Forward Button + Media controller element + Bouton de recherche avant + + + Seek Back Button + Media controller element + Bouton de recherche arrière + + + Audio element playback controls and status display + Media controller element + Commandes de lecture et affichage de l'état de l'élément audio + + + Video element playback controls and status display + Media controller element + Commandes de lecture et affichage de l'état de l'élément vidéo + + + Mute audio tracks + Media controller element + Couper le son des pistes audio + + + Unmute audio tracks + Media controller element + Réactiver le son des pistes audio + + + Begin playback + Media controller element + Commencer la lecture + + + Pause playback + Media controller element + Pause lecture + + + Movie time scrubber + Media controller element + Épurateur de la durée du film + + + Movie time scrubber thumb + Media controller element + Case de défilement de l'épurateur de la durée du film + + + Rewind movie + Media controller element + Rembobiner le film + + + Return streaming movie to real-time + Media controller element + Ramener le film en streaming en temps réel + + + Current movie time + Media controller element + Durée du film actuel + + + Remaining movie time + Media controller element + Durée de film restante + + + Current movie status + Media controller element + État du film actuel + + + Play movie in full-screen mode + Media controller element + Regarder le film en mode plein écran + + + Seek quickly back + Media controller element + Recherche rapide arrière + + + Seek quickly forward + Media controller element + Recherche rapide avant + + + Indefinite time + Media time description + Durée indéfinie + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1 jours %2 heures %3 minutes %4 secondes + + + %1 hours %2 minutes %3 seconds + Media time description + %1 heures %2 minutes %3 secondes + + + %1 minutes %2 seconds + Media time description + %1 minutes %2 secondes + + + %1 seconds + Media time description + %1 secondes + + + Inspect + Inspect Element context menu item + + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + Effacer les recherches récentes + + + Unknown + Unknown filesize FTP directory listing item + + + + Web Inspector - %2 + + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 pixels) + + + Bad HTTP request + Requête HTTP erronée + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + + + + Scroll here + + + + Left edge + + + + Top + + + + Right edge + + + + Bottom + En bas + + + Page left + + + + Page up + + + + Page right + + + + Page down + + + + Scroll left + + + + Scroll up + + + + Scroll right + + + + Scroll down + + + + %n file(s) + number of chosen file + + + + + + + JavaScript Alert - %1 + + + + JavaScript Confirm - %1 + + + + JavaScript Prompt - %1 + + + + JavaScript Problem - %1 + Problème de JavaScript - %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + Le script de cette page semble avoir un problème. Souhaitez-vous arrêter le script? + + + Move the cursor to the next character + + + + Move the cursor to the previous character + + + + Move the cursor to the next word + + + + Move the cursor to the previous word + + + + Move the cursor to the next line + + + + Move the cursor to the previous line + + + + Move the cursor to the start of the line + + + + Move the cursor to the end of the line + + + + Move the cursor to the start of the block + + + + Move the cursor to the end of the block + + + + Move the cursor to the start of the document + + + + Move the cursor to the end of the document + + + + Select all + + + + Select to the next character + + + + Select to the previous character + + + + Select to the next word + + + + Select to the previous word + + + + Select to the next line + + + + Select to the previous line + + + + Select to the start of the line + + + + Select to the end of the line + + + + Select to the start of the block + + + + Select to the end of the block + + + + Select to the start of the document + + + + Select to the end of the document + + + + Delete to the start of the word + Supprimer jusqu'au début du mot + + + Delete to the end of the word + Supprimer jusqu'à la fin du mot + + + Insert a new paragraph + + + + Insert a new line + + + + Paste and Match Style + Coller et suivre le style + + + Remove formatting + Retirer la mise en forme + + + Strikethrough + Barré + + + Subscript + Indice + + + Superscript + Exposant + + + Insert Bulleted List + Insérer une liste à puces + + + Insert Numbered List + Insérer une liste numérotée + + + Indent + Retrait + + + Outdent + Retrait négatif + + + Center + Centré + + + Justify + Justifié + + + Align Left + Aligner à gauche + + + Align Right + Aligner à droite + + + + QWhatsThisAction + + What's This? + + + + + QWidget + + * + + + + + QWizard + + Cancel + + + + Help + + + + < &Back + + + + &Finish + + + + &Help + + + + Go Back + + + + Continue + + + + Commit + + + + Done + + + + &Next + + + + &Next > + + + + + QWorkspace + + &Restore + + + + &Move + + + + &Size + + + + Mi&nimize + + + + Ma&ximize + + + + &Close + + + + Stay on &Top + + + + Minimize + + + + Restore Down + + + + Close + + + + Sh&ade + + + + %1 - [%2] + + + + &Unshade + + + + + QXml + + no error occurred + + + + error triggered by consumer + + + + unexpected end of file + + + + more than one document type definition + + + + error occurred while parsing element + + + + tag mismatch + + + + error occurred while parsing content + + + + unexpected character + + + + invalid name for processing instruction + + + + version expected while reading the XML declaration + + + + wrong value for standalone declaration + + + + error occurred while parsing document type definition + + + + letter is expected + + + + error occurred while parsing comment + + + + error occurred while parsing reference + + + + internal general entity reference not allowed in DTD + + + + external parsed general entity reference not allowed in attribute value + + + + external parsed general entity reference not allowed in DTD + + + + unparsed entity reference in wrong context + + + + recursive entities + + + + error in the text declaration of an external entity + + + + encoding declaration or standalone declaration expected while reading the XML declaration + + + + standalone declaration expected while reading the XML declaration + + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + Avertissement dans %1, à la ligne %2, colonne %3: %4 + + + Warning in %1: %2 + Avertissement dans %1: %2 + + + Unknown location + Lieu inconnu + + + Error %1 in %2, at line %3, column %4: %5 + Erreur %1 dans %2, à la ligne %3, colonne %4: %5 + + + Error %1 in %2: %3 + Erreur %1 dans %2: %3 + + + + QXmlStream + + Extra content at end of document. + + + + Invalid entity value. + + + + Invalid XML character. + + + + Sequence ']]>' not allowed in content. + + + + Namespace prefix '%1' not declared + + + + Attribute redefined. + + + + Unexpected character '%1' in public id literal. + + + + Invalid XML version string. + + + + Unsupported XML version. + + + + %1 is an invalid encoding name. + + + + Encoding %1 is unsupported + + + + Standalone accepts only yes or no. + + + + Invalid attribute in XML declaration. + + + + Premature end of document. + + + + Invalid document. + + + + Expected + + + + , but got ' + + + + Unexpected ' + + + + Expected character data. + + + + Recursive entity detected. + + + + Start tag expected. + + + + XML declaration not at start of document. + + + + NDATA in parameter entity declaration. + + + + %1 is an invalid processing instruction name. + + + + Invalid processing instruction name. + + + + Illegal namespace declaration. + + + + Invalid XML name. + + + + Opening and ending tag mismatch. + + + + Reference to unparsed entity '%1'. + + + + Entity '%1' not declared. + + + + Reference to external entity '%1' in attribute value. + + + + Invalid character reference. + + + + Encountered incorrectly encoded content. + + + + The standalone pseudo attribute must appear after the encoding. + + + + %1 is an invalid PUBLIC identifier. + + + + + QtXmlPatterns + + At least one component must be present. + Au moins un composant doit être présent. + + + %1 is not a valid value of type %2. + %1 n'est pas une valeur valide du type %2. + + + When casting to %1 from %2, the source value cannot be %3. + En castant de %2 vers %1, la valeur source ne peut pas être %3. + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Effective Boolean Value ne peut être calculée pour une séquence contenant deux ou plus valeurs atomiques. + + + The data of a processing instruction cannot contain the string %1 + Les données d'une instruction de traitement ne peut contenir la chaîne %1 + + + %1 is an invalid %2 + %1 est un ivalide %2 + + + %1 is not a valid XML 1.0 character. + %1 n'est pas un caractère XML 1.0 valide. + + + %1 was called. + %1 a été appelé. + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + Dans la chaîne de remplacement, %1 doit être suivi par au moins un chiffre s'il n'est pas échappé. + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + Dans la chaîne de remplacement, %1 peut seulement être utilisé pour échapper lui-même ou %2 mais pas %3 + + + %1 matches newline characters + %1 correspond à des caractères de saut de ligne + + + Matches are case insensitive + Les correspondances ne sont pas sensibles à la casse + + + %1 is an invalid regular expression pattern: %2 + %1 est un modèle d'expression régulière invalide: %2 + + + It will not be possible to retrieve %1. + Il sera impossible de récupérer %1. + + + The default collection is undefined + I'l n'y a pas de collection par défaut + + + %1 cannot be retrieved + %1 ne peut pas être récupéré + + + The item %1 did not match the required type %2. + L'item %1 ne correspond pas au type requis %2. + + + %1 is an unknown schema type. + %1 est un type de schema inconnu. + + + A template with name %1 has already been declared. + + + + Only one %1 declaration can occur in the query prolog. + Seulement une déclaration %1 peut intervenir lors du prologue de la requête. + + + The initialization of variable %1 depends on itself + L'initialisation de la variable %1 dépend d'elle-même + + + The variable %1 is unused + La variable %1 est inutilisée + + + Version %1 is not supported. The supported XQuery version is 1.0. + La version %1 n'est pas supportée. La version de XQuery supportée est 1.0. + + + No function with signature %1 is available + Aucune fonction avec la signature %1 n'est disponible + + + It is not possible to redeclare prefix %1. + Il est impossible de redéclarer le préfixe %1. + + + Prefix %1 is already declared in the prolog. + Le préfixe %1 est déjà déclaré dans le prologue. + + + The name of an option must have a prefix. There is no default namespace for options. + Le nom d'une option doit avoir un préfixe. Il n'y a pas de namespace par défaut pour les options. + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + La fonctionnalité "Schema Import" n'est pas supportée et les déclarations %1 ne peuvent donc intervenir. + + + The target namespace of a %1 cannot be empty. + Le namespace cible d'un %1 ne peut être vide. + + + The module import feature is not supported + La fonctionnalité "module import" n'est pas supportée + + + 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 + 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 + + + A function already exists with the signature %1. + Une fonction avec la signature %1 existe déjà. + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + 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 + + + The %1-axis is unsupported in XQuery + L'axe %1 n'est pas supporté dans XQuery + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + L'URI de namespace ne peut être une chaîne vide quand on le lie à un préfixe, %1. + + + %1 is an invalid namespace URI. + %1 est un URI de namespace invalide. + + + It is not possible to bind to the prefix %1 + Il est impossible de se lier au préfixe %1 + + + Two namespace declaration attributes have the same name: %1. + Deux attributs de déclarations de namespace ont le même nom : %1. + + + The namespace URI must be a constant and cannot use enclosed expressions. + L'URI de namespace doit être une constante et ne peut contenir d'expressions. + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 n'est pas dans les déclaration d'attribut in-scope. La fonctionnalité d'inport de schéma n'est pas supportée. + + + empty + vide + + + zero or one + zéro ou un + + + exactly one + exactement un + + + one or more + un ou plus + + + zero or more + zéro ou plus + + + The focus is undefined. + Le focus est indéfini. + + + An attribute by name %1 has already been created. + Un attribute de nom %1 a déjà été créé. + + + Network timeout. + Le réseau ne répond pas. + + + Element %1 can't be serialized because it appears outside the document element. + L'élément %1 ne peut pas être sérialisé parce qu'il est hors de l'élément document. + + + Year %1 is invalid because it begins with %2. + L'année %1 est invalide parce qu'elle commence par %2. + + + Day %1 is outside the range %2..%3. + Le jour %1 est hors de l'intervalle %2..%3. + + + Month %1 is outside the range %2..%3. + Le mois %1 est hors de l'intervalle %2..%3. + + + Overflow: Can't represent date %1. + Overflow: ne peut pas représenter la date %1. + + + Day %1 is invalid for month %2. + Jour %1 est invalide pour le mois %2. + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + L'heure 24:%1:%2.%3 est invalide. L'heure est 24 mais les minutes, seconndes et millisecondes ne sont pas à 0; + + + Time %1:%2:%3.%4 is invalid. + L'heure %1:%2:%3.%4 est invalide. + + + Overflow: Date can't be represented. + Overflow : la date ne peut pas être représentée. + + + At least one time component must appear after the %1-delimiter. + Au moins un composant doit apparaître après le délimiteur %1. + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + Diviser une valeur du type %1 par %2 (not-a-number) est interdit. + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + Diviser une valeur de type %1 par %2 ou %3 (plus ou moins zéro) est interdit. + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + La multiplication d'une valeur du type %1 par %2 ou %3 (plus ou moins infini) est interdite. + + + A value of type %1 cannot have an Effective Boolean Value. + Une valeur de type %1 ne peut pas avoir une Effective Boolean Value. + + + Value %1 of type %2 exceeds maximum (%3). + La valeur %1 de type %2 excède le maximum (%3). + + + Value %1 of type %2 is below minimum (%3). + La valeur %1 de type %2 est inférieur au minimum (%3). + + + A value of type %1 must contain an even number of digits. The value %2 does not. + Une valeur de type %1 doit contenir un nombre pair de chiffre. La valeur %2 n'est pas conforme. + + + %1 is not valid as a value of type %2. + %1 n'est pas une valeur valide de type %2. + + + Operator %1 cannot be used on type %2. + L'opérateur %1 ne peut pas être utilisé pour le type %2. + + + Operator %1 cannot be used on atomic values of type %2 and %3. + L'opérateur %1 ne peut pas être utilisé pour des valeurs atomiques de type %2 ou %3. + + + The namespace URI in the name for a computed attribute cannot be %1. + L'URI de namespace dans le nom d'un attribut calculé ne peut pas être %1. + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + Le nom d'un attribut calculé ne peut pas avoir l'URI de namespace %1 avec le nom local %2. + + + Type error in cast, expected %1, received %2. + Erreur de type lors du cast, attendu %1 mais reçu %2. + + + 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. + 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é. + + + A comment cannot contain %1 + Un commentaire ne peut pas contenir %1 + + + A comment cannot end with a %1. + Un commentaire ne peut pas finir par %1. + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + Un noeuds attribut ne peut être un fils d'un noeuds document. C'est pourquoi l'attribut %1 est mal placé. + + + A library module cannot be evaluated directly. It must be imported from a main module. + Un module de bibliothèque ne peut pas être évalué directement. Il doit être importé d'un module principal. + + + No template by name %1 exists. + Aucun template nommé %1 n'existe. + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + 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. + + + A positional predicate must evaluate to a single numeric value. + Un prédicat de position doit être évalué en une unique valeur numérique. + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + Le nom de destination dans une instruction de traitement ne peut être %1. %2 est invalide. + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 n'est pas un nom de destination valide dans une instruction de traitement. Ce doit être une valeur %2, par ex. %3. + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + 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. + + + No namespace binding exists for the prefix %1 + Aucun lien de namespace n'existe pour le préfixe %1 + + + No namespace binding exists for the prefix %1 in %2 + Aucun lien de namespace n'existe pour le préfixe %1 dans %2 + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + Le premier argument de %1 ne peut être du type %2. Il doit être de type numérique, xs:yearMonthDuration ou xs:dayTimeDuration. + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + Le premier argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5. + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + Le deuxième argument de %1 ne peut être du type %2. Il doit être de type %3, %4 ou %5. + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + Si les deux valeurs ont des décalages de zone, elle doivent avoir le même. %1 et %2 sont différents. + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 doit être suivi par %2 ou %3, et non à la fin de la chaîne de remplacement. + + + %1 and %2 match the start and end of a line. + %1 et %2 correspondent au début et à la fin d'une ligne. + + + Whitespace characters are removed, except when they appear in character classes + Les blancs sont supprimés excepté quand ils apparaissent dans les classes de caractère + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 est un flag invalide pour des expressions régulières. Les flags valides sont : + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + 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é. + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + 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). + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + Un décalage de zone doit être dans l'intervalle %1..%2 inclus. %3 est hors de l'intervalle. + + + Required cardinality is %1; got cardinality %2. + La cardinalité requise est %1; reçu %2. + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + 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. + + + The keyword %1 cannot occur with any other mode name. + Le mot-clé %1 ne peut pas apparaître avec un autre nom de mode. + + + No variable with name %1 exists + + + + The value of attribute %1 must be of type %2, which %3 isn't. + + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + + + + A variable with name %1 has already been declared. + + + + No value is available for the external variable with name %1. + + + + A stylesheet function must have a prefixed name. + Une fonction de feuille de style doit avoir un nom préfixé. + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + 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. + + + An argument with name %1 has already been declared. Every argument name must be unique. + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + 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. + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + Dans un pattern XSL-T, le premier argument à la fonction %1 doit être une chaîne de caractères quand utilisé pour correspondance. + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + Dans un pattern XSL-T, le premier argument à la fonction %1 doit être un litéral ou une référence de variable. + + + In an XSL-T pattern, function %1 cannot have a third argument. + Dans un pattern XSL-T, la fonction %1 ne peut pas avoir de 3e argument. + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + Dans un pattern XSL-T, seules les fonctions %1 et %2 (pas %3) peuvent être utilisées pour le matching. + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + Dans un pattern XSL-T, l'axe %1 ne peut pas être utilisé, seulement %2 ou %3 le peuvent. + + + %1 is an invalid template mode name. + %1 est un nom de mode de template invalide. + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + 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. + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + La fonctionnalité "Schema Validation" n'est pas supportée. Les expressions %1 ne seront pas utilisées. + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + Aucune des expressions pragma n'est supportée. Une expression par défault doit être présente + + + Each name of a template parameter must be unique; %1 is duplicated. + Chaque nom d'un paramètre ede template doit être unique; %1 est dupliqué. + + + No function with name %1 is available. + + + + %1 is not a valid numeric literal. + %1 n'est pas une valeur numérique valide. + + + W3C XML Schema identity constraint selector + + + + W3C XML Schema identity constraint field + + + + A construct was encountered which is disallowed in the current language(%1). + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + Le namespace %1 peut seulement être lié à %2 (et doit être pré-déclaré). + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + Le préfixe %1 peut seulement être lié à %2 (et doit être prédéclaré). + + + An attribute with name %1 has already appeared on this element. + + + + A direct element constructor is not well-formed. %1 is ended with %2. + Un constructeur direct d'élément est mal-formé. %1 est terminé par %2. + + + The name %1 does not refer to any schema type. + Le nom %1 ne se réfère à aucun type de schema. + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 est une type complexe. Caster vers des types complexes n'est pas possible. Cependant, caster vers des types atomiques comme %2 marche. + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 n'est pas un type atomique. Il est uniquement possible de caster vers des types atomiques. + + + %1 is not a valid name for a processing-instruction. + %1 n'est pas un nom valide pour une instruction de traitement. + + + The name of an extension expression must be in a namespace. + Le nom d'une expression d'extension doit être dans un namespace. + + + Required type is %1, but %2 was found. + Le type requis est %1, mais %2 a été reçu. + + + Promoting %1 to %2 may cause loss of precision. + La Promotion de %1 vers %2 peut causer un perte de précision. + + + It's not possible to add attributes after any other kind of node. + Il est impossible d'ajouter des attributs après un autre type de noeuds. + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Seule le Unicode CodepointCollation est supporté (%1), %2 n'est pas supporté. + + + Integer division (%1) by zero (%2) is undefined. + Division entière (%1) par zéro (%2) indéfinie. + + + Division (%1) by zero (%2) is undefined. + Division (%1) par zéro (%2) indéfinie. + + + Modulus division (%1) by zero (%2) is undefined. + Module division (%1) par zéro (%2) indéfinie. + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 prend au maximum %n argument. %2 est donc invalide. + %1 prend au maximum %n arguments. %2 est donc invalide. + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 requiert au moins %n argument. %2 est donc invalide. + %1 requiert au moins %n arguments. %2 est donc invalide. + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + Le noeuds racine du deuxième argument à la fonction %1 doit être un noeuds document. %2 n'est pas un document. + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + 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) + + + A default namespace declaration must occur before function, variable, and option declarations. + Un déclaration de namespace par défaut doit être placée avant toute fonction, variable ou declaration d'option. + + + Namespace declarations must occur before function, variable, and option declarations. + Les declarations de namespace doivent être placées avant tout fonction, variable ou déclaration d'option. + + + Module imports must occur before function, variable, and option declarations. + Les imports de module doivent être placés avant tout fonction, variable ou déclaration d'option. + + + %1 is not a whole number of minutes. + %1 n'est pas un nombre entier de minutes. + + + Attribute %1 can't be serialized because it appears at the top level. + L'attribut %1 ne peut pas être sérialisé car il apparaît à la racine. + + + %1 is an unsupported encoding. + %1 est un encodage non supporté. + + + %1 contains octets which are disallowed in the requested encoding %2. + %1 contient 'octets', qui n'est pas autorisé pour l'encodage %2. + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + Le codepoint %1 dans %2 et utilisant l'encodage %3 est un caractère XML invalide. + + + Ambiguous rule match. + Corresonpdance aux règles ambigüe. + + + In a namespace constructor, the value for a namespace cannot be an empty string. + Dans un constructeur d'espace de noms, la valeur pour un espace de noms ne peut pas être une chaîne vide. + + + The prefix must be a valid %1, which %2 is not. + Le préfixe doit être un valide %1; %2 n'e l'est pas. + + + The prefix %1 cannot be bound. + Le préfixe %1 ne peut être lié. + + + Only the prefix %1 can be bound to %2 and vice versa. + Seul le préfixe %1 peut être lié à %2, et vice versa. + + + The parameter %1 is required, but no corresponding %2 is supplied. + Le paramètre %1 est requis, mais aucun %2 correspondant n'est fourni. + + + The parameter %1 is passed, but no corresponding %2 exists. + Le paramètre %1 est passé mais aucun %2 correspondant n'existe. + + + The URI cannot have a fragment + L'URI ne peut pas avoir de fragments + + + Element %1 is not allowed at this location. + L'élément %1 n'est pas autorisé à cet emplacement. + + + Text nodes are not allowed at this location. + Les noeuds de texte ne sont pas autorisés à cet emplacement. + + + Parse error: %1 + Erreur: %1 + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + La valeur de l'attribut de version XSL-T doit être du type %1, et non %2. + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + Lancement d'une feuille de style XSL-T 1.0 avec un processeur 2.0. + + + Unknown XSL-T attribute %1. + Attribut XSL-T inconnu : %1. + + + Attribute %1 and %2 are mutually exclusive. + Les attributs %1 et %2 sont mutuellement exclusifs. + + + In a simplified stylesheet module, attribute %1 must be present. + Dans un module de feuille de style simplifié, l'attribut %1 doit être présent. + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + Si l'élément %1 n'a pas d'attribut %2, il ne peut pas avoir d'attribut %3 ou %4. + + + Element %1 must have at least one of the attributes %2 or %3. + L'élement %1 doit avoir au moins un des attributs %2 ou %3. + + + At least one mode must be specified in the %1-attribute on element %2. + Au moins un mode doit être spécifié dans l'attribut %1 sur l'élément %2. + + + Element %1 must come last. + L'élément %1 doit être le dernier. + + + At least one %1-element must occur before %2. + Au moins un élément %1 doit être placé avant %2. + + + Only one %1-element can appear. + Seulement un élément %1 peut apparaître. + + + At least one %1-element must occur inside %2. + Au moins un élément %1 doit apparaître dans %2. + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + Quand l'attribut %1 est présent sur %2, un constructeur de séquence ne peut pas être utilisé. + + + Element %1 must have either a %2-attribute or a sequence constructor. + L'élément %1 doit avoir un attribut %2 ou un constructeur de séquence. + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + 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. + + + Element %1 cannot have children. + L'élément %1 ne peut pas avoir de fils. + + + Element %1 cannot have a sequence constructor. + L'élément %1 ne peut pas avoir un constructuer de séquence. + + + The attribute %1 cannot appear on %2, when it is a child of %3. + L'attribut %1 ne peut pas apparaître sur %2 quand il est fils de %3. + + + A parameter in a function cannot be declared to be a tunnel. + Un paramètre de fonction ne peut pas être déclaré comme un tunnel. + + + This processor is not Schema-aware and therefore %1 cannot be used. + Ce processeur ne comprend pas les Schemas. C'est pourquoi %1 ne peut pas être utilisé. + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + Les élément d'une feuille de style de haut niveau doivent être dans un namespace non nul; %1 ne l'est pas. + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + La valeur de l'attribut %1 de l'élement %2 doit être %3 ou %4, et pas %5. + + + Attribute %1 cannot have the value %2. + L'attribut %1 ne peut avoir la valeur %2. + + + The attribute %1 can only appear on the first %2 element. + L'attribute %1 peut seulement apparaître sur le premier élément %2. + + + At least one %1 element must appear as child of %2. + Au moins un élément %1 doit apparaître comme fils de %2. + + + %1 has inheritance loop in its base type %2. + + + + Circular inheritance of base type %1. + + + + Circular inheritance of union %1. + + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + + + + Base type of simple type %1 cannot be complex type %2. + + + + Simple type %1 cannot have direct base type %2. + + + + Simple type %1 is not allowed to have base type %2. + + + + Simple type %1 can only have simple atomic type as base type. + + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + + + + Variety of item type of %1 must be either atomic or union. + + + + Variety of member types of %1 must be atomic. + + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + + + + Simple type %1 is only allowed to have %2 facet. + + + + Base type of simple type %1 must have variety of type list. + + + + Base type of simple type %1 has defined derivation by restriction as final. + + + + Item type of base type does not match item type of %1. + + + + Simple type %1 contains not allowed facet type %2. + + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + + + + %1 is not allowed to have any facets. + + + + Base type %1 of simple type %2 must have variety of union. + + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + + + + Complex type %1 has duplicated element %2 in its content model. + + + + Complex type %1 has non-deterministic content. + + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + + + + Content model of complex type %1 is not a valid extension of content model of %2. + + + + Complex type %1 must have simple content. + + + + Complex type %1 must have the same simple type as its base class %2. + + + + Complex type %1 cannot be derived from base type %2%3. + + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + + + + Complex type %1 with simple content cannot be derived from complex base type %2. + + + + Item type of simple type %1 cannot be a complex type. + + + + Member type of simple type %1 cannot be a complex type. + + + + %1 is not allowed to have a member type with the same name as itself. + + + + %1 facet collides with %2 facet. + + + + %1 facet must have the same value as %2 facet of base type. + + + + %1 facet must be equal or greater than %2 facet of base type. + + + + %1 facet must be less than or equal to %2 facet of base type. + + + + %1 facet contains invalid regular expression + + + + Unknown notation %1 used in %2 facet. + + + + %1 facet contains invalid value %2: %3. + + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + + %1 facet cannot be %2 if %3 facet of base type is %4. + + + + %1 facet must be less than or equal to %2 facet. + + + + %1 facet must be less than %2 facet of base type. + + + + %1 facet and %2 facet cannot appear together. + + + + %1 facet must be greater than %2 facet of base type. + + + + %1 facet must be less than %2 facet. + + + + %1 facet must be greater than or equal to %2 facet of base type. + + + + Simple type contains not allowed facet %1. + + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + + Only %1 and %2 facets are allowed when derived by union. + + + + %1 contains %2 facet with invalid data: %3. + + + + Attribute group %1 contains attribute %2 twice. + + + + Attribute group %1 contains two different attributes that both have types derived from %2. + + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Complex type %1 contains attribute %2 twice. + + + + Complex type %1 contains two different attributes that both have types derived from %2. + + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Element %1 is not allowed to have a value constraint if its base type is complex. + + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + + + + Value constraint of element %1 is not of elements type: %2. + + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + + + + Type of element %1 cannot be derived from type of substitution group affiliation. + + + + Value constraint of attribute %1 is not of attributes type: %2. + + + + Attribute %1 has value constraint but has type derived from %2. + + + + %1 attribute in derived complex type must be %2 like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint. + + + + processContent of base wildcard must be weaker than derived wildcard. + + + + Element %1 exists twice with different types. + + + + Particle contains non-deterministic wildcards. + + + + Base attribute %1 is required but derived attribute is not. + + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + + + + Derived attribute %1 does not exist in the base definition. + + + + Derived attribute %1 does not match the wildcard in the base definition. + + + + Base attribute %1 is required but missing in derived definition. + + + + Derived definition contains an %1 element that does not exists in the base definition + + + + Derived wildcard is not a subset of the base wildcard. + + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + + + + Attribute %1 from base type is missing in derived type. + + + + Type of derived attribute %1 differs from type of base attribute. + + + + Base definition contains an %1 element that is missing in the derived definition + + + + %1 references unknown %2 or %3 element %4. + + + + %1 references identity constraint %2 that is no %3 or %4 element. + + + + %1 has a different number of fields from the identity constraint %2 that it references. + + + + Base type %1 of %2 element cannot be resolved. + + + + Item type %1 of %2 element cannot be resolved. + + + + Member type %1 of %2 element cannot be resolved. + + + + Type %1 of %2 element cannot be resolved. + + + + Base type %1 of complex type cannot be resolved. + + + + %1 cannot have complex base type that has a %2. + + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + + + + Type of %1 element must be a simple type, %2 is not. + + + + Substitution group %1 of %2 element cannot be resolved. + + + + Substitution group %1 has circular definition. + + + + Duplicated element names %1 in %2 element. + + + + Reference %1 of %2 element cannot be resolved. + + + + Circular group reference for %1. + + + + %1 element is not allowed in this scope + + + + %1 element cannot have %2 attribute with value other than %3. + + + + %1 element cannot have %2 attribute with value other than %3 or %4. + + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + + + + Attribute group %1 has circular reference. + + + + %1 attribute in %2 must have %3 use like in base type %4. + + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + + + + %1 has attribute wildcard but its base type %2 has not. + + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + + + + Namespace prefix of qualified name %1 is not defined. + + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + + Empty particle cannot be derived from non-empty particle. + + + + Derived particle is missing element %1. + + + + Derived element %1 is missing value constraint as defined in base particle. + + + + Derived element %1 has weaker value constraint than base particle. + + + + Fixed value constraint of element %1 differs from value constraint in base particle. + + + + Derived element %1 cannot be nillable as base element is not nillable. + + + + Block constraints of derived element %1 must not be more weaker than in the base element. + + + + Simple type of derived element %1 cannot be validly derived from base element. + + + + Complex type of derived element %1 cannot be validly derived from base element. + + + + Element %1 is missing in derived particle. + + + + Element %1 does not match namespace constraint of wildcard in base particle. + + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + + + + Derived particle allows content that is not allowed in the base particle. + + + + Can not process unknown element %1, expected elements are: %2. + + + + Element %1 is not allowed in this scope, possible elements are: %2. + + + + Child element is missing in that scope, possible child elements are: %1. + + + + Document is not a XML schema. + + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + + %1 attribute of %2 element contains invalid content: {%3}. + + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + + %1 element is not allowed inside %2 element if %3 attribute is present. + + + + %1 element has neither %2 attribute nor %3 child element. + + + + %1 element with %2 child element must not have a %3 attribute. + + + + %1 attribute of %2 element must be %3 or %4. + + + + %1 attribute of %2 element must have a value of %3. + + + + %1 attribute of %2 element must have a value of %3 or %4. + + + + %1 element must not have %2 and %3 attribute together. + + + + Content of %1 attribute of %2 element must not be from namespace %3. + + + + %1 attribute of %2 element must not be %3. + + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + + Specifying use='prohibited' inside an attribute group has no effect. + + + + %1 element must have either %2 or %3 attribute. + + + + %1 element must have either %2 attribute or %3 or %4 as child element. + + + + %1 element requires either %2 or %3 attribute. + + + + Text or entity references not allowed inside %1 element + + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + + %1 element is not allowed in this context. + + + + %1 attribute of %2 element has larger value than %3 attribute. + + + + Prefix of qualified name %1 is not defined. + + + + %1 attribute of %2 element must either contain %3 or the other values. + + + + Component with ID %1 has been defined previously. + + + + Element %1 already defined. + + + + Attribute %1 already defined. + + + + Type %1 already defined. + + + + Attribute group %1 already defined. + + + + Element group %1 already defined. + + + + Notation %1 already defined. + + + + Identity constraint %1 already defined. + + + + Duplicated facets in simple type %1. + + + + %1 is not valid according to %2. + + + + String content does not match the length facet. + + + + String content does not match the minLength facet. + + + + String content does not match the maxLength facet. + + + + String content does not match pattern facet. + + + + String content is not listed in the enumeration facet. + + + + Signed integer content does not match the maxInclusive facet. + + + + Signed integer content does not match the maxExclusive facet. + + + + Signed integer content does not match the minInclusive facet. + + + + Signed integer content does not match the minExclusive facet. + + + + Signed integer content is not listed in the enumeration facet. + + + + Signed integer content does not match pattern facet. + + + + Signed integer content does not match in the totalDigits facet. + + + + Unsigned integer content does not match the maxInclusive facet. + + + + Unsigned integer content does not match the maxExclusive facet. + + + + Unsigned integer content does not match the minInclusive facet. + + + + Unsigned integer content does not match the minExclusive facet. + + + + Unsigned integer content is not listed in the enumeration facet. + + + + Unsigned integer content does not match pattern facet. + + + + Unsigned integer content does not match in the totalDigits facet. + + + + Double content does not match the maxInclusive facet. + + + + Double content does not match the maxExclusive facet. + + + + Double content does not match the minInclusive facet. + + + + Double content does not match the minExclusive facet. + + + + Double content is not listed in the enumeration facet. + + + + Double content does not match pattern facet. + + + + Decimal content does not match in the fractionDigits facet. + + + + Decimal content does not match in the totalDigits facet. + + + + Date time content does not match the maxInclusive facet. + + + + Date time content does not match the maxExclusive facet. + + + + Date time content does not match the minInclusive facet. + + + + Date time content does not match the minExclusive facet. + + + + Date time content is not listed in the enumeration facet. + + + + Date time content does not match pattern facet. + + + + Duration content does not match the maxInclusive facet. + + + + Duration content does not match the maxExclusive facet. + + + + Duration content does not match the minInclusive facet. + + + + Duration content does not match the minExclusive facet. + + + + Duration content is not listed in the enumeration facet. + + + + Duration content does not match pattern facet. + + + + Boolean content does not match pattern facet. + + + + Binary content does not match the length facet. + + + + Binary content does not match the minLength facet. + + + + Binary content does not match the maxLength facet. + + + + Binary content is not listed in the enumeration facet. + + + + Invalid QName content: %1. + + + + QName content is not listed in the enumeration facet. + + + + QName content does not match pattern facet. + + + + Notation content is not listed in the enumeration facet. + + + + List content does not match length facet. + + + + List content does not match minLength facet. + + + + List content does not match maxLength facet. + + + + List content is not listed in the enumeration facet. + + + + List content does not match pattern facet. + + + + Union content is not listed in the enumeration facet. + + + + Union content does not match pattern facet. + + + + Data of type %1 are not allowed to be empty. + + + + Element %1 is missing child element. + + + + There is one IDREF value with no corresponding ID: %1. + + + + Loaded schema file is invalid. + + + + %1 contains invalid data. + + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + + + + No schema defined for validation. + + + + No definition for element %1 available. + + + + Specified type %1 is not known to the schema. + + + + Element %1 is not defined in this scope. + + + + Declaration for element %1 does not exist. + + + + Element %1 contains invalid content. + + + + Element %1 is declared as abstract. + + + + Element %1 is not nillable. + + + + Attribute %1 contains invalid data: %2 + + + + Element contains content although it is nillable. + + + + Fixed value constraint not allowed if element is nillable. + + + + Element %1 cannot contain other elements, as it has a fixed content. + + + + Specified type %1 is not validly substitutable with element type %2. + + + + Complex type %1 is not allowed to be abstract. + + + + Element %1 contains not allowed attributes. + + + + Element %1 contains not allowed child element. + + + + Content of element %1 does not match its type definition: %2. + + + + Content of element %1 does not match defined value constraint. + + + + Element %1 contains not allowed child content. + + + + Element %1 contains not allowed text content. + + + + Element %1 is missing required attribute %2. + + + + Attribute %1 does not match the attribute wildcard. + + + + Declaration for attribute %1 does not exist. + + + + Element %1 contains two attributes of type %2. + + + + Attribute %1 contains invalid content. + + + + Element %1 contains unknown attribute %2. + + + + Content of attribute %1 does not match its type definition: %2. + + + + Content of attribute %1 does not match defined value constraint. + + + + Non-unique value found for constraint %1. + + + + Key constraint %1 contains absent fields. + + + + Key constraint %1 contains references nillable element %2. + + + + No referenced value found for key reference %1. + + + + More than one value found for field %1. + + + + Field %1 has no simple type. + + + + ID value '%1' is not unique. + + + + '%1' attribute contains invalid QName content: %2. + + + + diff --git a/config.profiles/symbian/translations/qt_he.ts b/config.profiles/symbian/translations/qt_he.ts new file mode 100644 index 0000000..72a6df9 --- /dev/null +++ b/config.profiles/symbian/translations/qt_he.ts @@ -0,0 +1,7781 @@ + + + + + AudioOutput + + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + + + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + + + + + Revert back to device '%1' + + + + + CloseButton + + + Close Tab + + + + + PPDOptionsModel + + Name + שם + + + + Phonon:: + + + Notifications + + + + + Music + + + + + Video + + + + + Communication + + + + + Games + + + + + Accessibility + + + + + Phonon::Gstreamer::Backend + + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + + + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + + + + + Phonon::Gstreamer::MediaObject + + + Cannot start playback. + +Check your Gstreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + + + + + + + + + + + + Could not open media source. + + + + + Invalid source type. + + + + + Could not locate media source. + + + + + Could not open audio device. The device is already in use. + + + + + Could not decode media source. + + + + + Phonon::VolumeSlider + + + + Volume: %1% + + + + + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + + + + + Q3Accel + + + %1, %2 not defined + + + + + Ambiguous %1 not handled + + + + + Q3DataTable + + + True + אמת + + + + False + שקר + + + + Insert + הוסף + + + + Update + עדכן + + + + Delete + מחק + + + + Q3FileDialog + + + Copy or Move a File + העתק או העבר קובץ + + + + Read: %1 + קרא: %1 + + + + + Write: %1 + כתוב: %1 + + + + + Cancel + ביטול + + + + + + + All Files (*) + כל הקבצים (*) + + + + Name + שם + + + + Size + גודל + + + + Type + סוג + + + + Date + תאריך + + + + Attributes + מאפיינים + + + + + &OK + &אישור + + + + Look &in: + &חפש ב: + + + + + + File &name: + &שם הקובץ: + + + + File &type: + &סוג הקובץ: + + + + Back + אחורה + + + + One directory up + ספריה אחת למעלה + + + + Create New Folder + צור תיקיה חדשה + + + + List View + תצוגת רשימה + + + + Detail View + תצוגת פרטים + + + + Preview File Info + תצוגה מקדימה של פרטי הקובץ + + + + Preview File Contents + תצוגה מקדימה של תוכן הקובץ + + + + Read-write + קריאה-כתיבה + + + + Read-only + קריאה-בלבד + + + + Write-only + כתיבה-בלבד + + + + Inaccessible + לא נגיש + + + + Symlink to File + קישור סמלי לקובץ + + + + Symlink to Directory + קישור סמלי לספריה + + + + Symlink to Special + קישור סמלי לפריט מיוחד + + + + File + קובץ + + + + Dir + ספריה + + + + Special + מיוחד + + + + + + Open + פתח + + + + + Save As + שמירה בשם + + + + + + &Open + &פתח + + + + + &Save + &שמור + + + + &Rename + ש&נה שם + + + + &Delete + &מחק + + + + R&eload + &טען מחדש + + + + Sort by &Name + סדר לפי ש&ם + + + + Sort by &Size + סדר לפי &גודל + + + + Sort by &Date + סדר לפי &תאריך + + + + &Unsorted + &ללא סדר + + + + Sort + סדר + + + + Show &hidden files + הצג קבצים &מוסתרים + + + + the file + הקובץ + + + + the directory + הספריה + + + + the symlink + הקישור הסמלי + + + + Delete %1 + מחק את %1 + + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>האם אתה בטוח שברצונך למחוק %1 "%2"?</qt> + + + + &Yes + &כן + + + + &No + &לא + + + + New Folder 1 + תיקיה חדשה 1 + + + + New Folder + תיקיה חדשה + + + + New Folder %1 + תיקיה חדשה %1 + + + + Find Directory + חפש ספריה + + + + + Directories + ספריות + + + + Directory: + + + + + + Error + שגיאה + + + + %1 +File not found. +Check path and filename. + %1 +הקובץ לא נמצא. +בדוק את הנתיב ואת שם הקובץ. + + + + All Files (*.*) + כל הקבצים (*.*) + + + + Open + פתח + + + + Select a Directory + בחר ספריה + + + + Q3LocalFs + + + + Could not read directory +%1 + + + + + Could not create directory +%1 + + + + + Could not remove file or directory +%1 + + + + + Could not rename +%1 +to +%2 + לא ניתן לשנות את השם של +%1 +אל +%2 + + + + Could not open +%1 + לא ניתן לפתוח את +%1 + + + + Could not write +%1 + לא ניתן לכתוב את +%1 + + + + Q3MainWindow + + + Line up + סדר בשורה + + + + Customize... + התאמה אישית... + + + + Q3NetworkProtocol + + + Operation stopped by the user + הפעולה הופסקה על ידי המשתמש + + + + Q3ProgressDialog + + + + Cancel + ביטול + + + + Q3TabDialog + + + + OK + אישור + + + + Apply + החל + + + + Help + עזרה + + + + Defaults + ברירות מחדל + + + + Cancel + ביטול + + + + Q3TextEdit + + + &Undo + &בטל + + + + &Redo + בצע &שוב + + + + Cu&t + &גזור + + + + &Copy + הע&תק + + + + &Paste + ה&דבק + + + + Clear + נקה + + + + + Select All + בחר הכל + + + + Q3TitleBar + + + System + + + + + Restore up + + + + + Minimize + מזער + + + + Restore down + + + + + Maximize + הגדל + + + + Close + סגור + + + + Contains commands to manipulate the window + + + + + Puts a minimized back to normal + + + + + Moves the window out of the way + + + + + Puts a maximized window back to normal + + + + + Makes the window full screen + + + + + Closes the window + + + + + Displays the name of the window and contains controls to manipulate it + + + + + Q3ToolBar + + + More... + + + + + Q3UrlOperator + + + + + The protocol `%1' is not supported + הפרוטוקול "%1" אינו נתמך + + + + The protocol `%1' does not support listing directories + הפרוטוקול "%1" לא תומך בהצגת ספריות + + + + The protocol `%1' does not support creating new directories + הפרוטוקול "%1" לא תומך ביצירת ספריית חדשות + + + + The protocol `%1' does not support removing files or directories + הפרוטוקול "%1" לא תומך בהסרת קבצים או ספריות + + + + The protocol `%1' does not support renaming files or directories + הפרוטוקול "%1" לא תומך בשינוי שמותיהם של קבצים או ספריות + + + + The protocol `%1' does not support getting files + הפרוטוקול "%1" לא תומך בהורדת קבצים + + + + The protocol `%1' does not support putting files + הפרוטוקול "%1" לא תומך בהעלאת קבצים + + + + + The protocol `%1' does not support copying or moving files or directories + הפרוטוקול "%1" לא תומך בהעתקה או העברה של קבצים או ספריות + + + + + (unknown) + (לא ידוע) + + + + Q3Wizard + + + &Cancel + + + + + < &Back + + + + + &Next > + + + + + &Finish + + + + + &Help + + + + + QAbstractSocket + + + + + + Host not found + + + + + + + Connection refused + החיבור נדחה + + + + Connection timed out + + + + + + + Operation on socket is not supported + + + + + Socket operation timed out + + + + + Socket is not connected + + + + + Network unreachable + + + + + QAbstractSpinBox + + + &Step up + + + + + Step &down + + + + + &Select All + + + + + QApplication + + + QT_LAYOUT_DIRECTION + 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. + RTL + + + + Executable '%1' requires Qt %2, found Qt %3. + + + + + Incompatible Qt Library Error + + + + + Activate + + + + + Activates the program's main window + + + + + QAxSelect + + + Select ActiveX Control + + + + + OK + אישור + + + + &Cancel + + + + + COM &Object: + + + + + QCheckBox + + + Uncheck + + + + + Check + + + + + Toggle + + + + + QColorDialog + + + Hu&e: + &גוון: + + + + &Sat: + &הרוויה: + + + + &Val: + &ערך: + + + + &Red: + &אדום: + + + + &Green: + &ירוק: + + + + Bl&ue: + &כחול: + + + + A&lpha channel: + ע&רוץ אלפא: + + + + Select Color + + + + + &Basic colors + &צבעים בסיסיים + + + + &Custom colors + צבעים &מותאמים אישית + + + &Define Custom Colors >> + &הגדר צבעים מותאמים אישית >> + + + OK + אישור + + + Cancel + ביטול + + + + &Add to Custom Colors + ה&וסף לצבעים מותאמים אישית + + + Select color + בחירת צבע + + + + QComboBox + + + + Open + פתח + + + + False + שקר + + + + True + אמת + + + + Close + סגור + + + + QCoreApplication + + + %1: key is empty + QSystemSemaphore + + + + + %1: unable to make key + QSystemSemaphore + + + + + %1: ftok failed + QSystemSemaphore + + + + + QDB2Driver + + + Unable to connect + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + Unable to set autocommit + + + + + QDB2Result + + + + Unable to execute statement + + + + + Unable to prepare statement + + + + + Unable to bind variable + + + + + Unable to fetch record %1 + + + + + Unable to fetch next + + + + + Unable to fetch first + + + + + QDateTimeEdit + + + AM + + + + + am + + + + + PM + + + + + pm + + + + + QDial + + + QDial + + + + + SpeedoMeter + + + + + SliderHandle + + + + + QDialog + + + What's This? + מה זה? + + + + Done + + + + + QDialogButtonBox + + + + + OK + אישור + + + + Save + שמור + + + + &Save + &שמור + + + + Open + פתח + + + + Cancel + ביטול + + + + &Cancel + + + + + Close + סגור + + + + &Close + &סגור + + + + Apply + החל + + + + Reset + + + + + Help + עזרה + + + + Don't Save + + + + + Discard + + + + + &Yes + &כן + + + + Yes to &All + + + + + &No + &לא + + + + N&o to All + + + + + Save All + + + + + Abort + + + + + Retry + + + + + Ignore + + + + + Restore Defaults + + + + + Close without Saving + + + + + &OK + &אישור + + + + QDirModel + + + Name + שם + + + + Size + גודל + + + + Kind + Match OS X Finder + + + + + Type + All other platforms + סוג + + + + Date Modified + + + + + QDockWidget + + + Close + סגור + + + + Dock + + + + + Float + + + + + QDoubleSpinBox + + + More + + + + + Less + + + + + QErrorMessage + + + &Show this message again + &הצג הודעה זו שנית + + + + &OK + &אישור + + + + Debug Message: + + + + + Warning: + + + + + Fatal Error: + + + + + QFile + + + + Destination file exists + + + + + Cannot remove source file + + + + + Cannot open %1 for input + + + + + Cannot open for output + + + + + Failure to write block + + + + + Cannot create %1 for output + + + + + QFileDialog + + + + All Files (*) + כל הקבצים (*) + + + + + Back + אחורה + + + + + List View + תצוגת רשימה + + + + + Detail View + תצוגת פרטים + + + + + File + קובץ + + + + Open + פתח + + + + Save As + שמירה בשם + + + + + + + &Open + &פתח + + + + + &Save + &שמור + + + + &Rename + ש&נה שם + + + + &Delete + &מחק + + + + Show &hidden files + הצג קבצים &מוסתרים + + + + New Folder + תיקיה חדשה + + + + Find Directory + חפש ספריה + + + + Directories + ספריות + + + + All Files (*.*) + כל הקבצים (*.*) + + + + %1 already exists. +Do you want to replace it? + + + + + %1 +File not found. +Please verify the correct file name was given. + + + + + My Computer + + + + + + Parent Directory + + + + + + Files of type: + + + + + + Directory: + + + + + + %1 +Directory not found. +Please verify the correct directory name was given. + + + + + '%1' is write protected. +Do you want to delete it anyway? + + + + + Are sure you want to delete '%1'? + + + + + Could not delete directory. + + + + + Recent Places + + + + + Drive + + + + + Unknown + + + + + Show + + + + + + Forward + + + + + &New Folder + + + + + + &Choose + + + + + Remove + + + + + + File &name: + &שם הקובץ: + + + + + Look in: + + + + + + Create New Folder + צור תיקיה חדשה + + + + QFileSystemModel + + + %1 TB + + + + + %1 GB + + + + + %1 MB + + + + + %1 KB + + + + + %1 bytes + + + + + Invalid filename + + + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + + + + + Name + שם + + + + Size + גודל + + + + Kind + Match OS X Finder + + + + + Type + All other platforms + סוג + + + + Date Modified + + + + + My Computer + + + + + Computer + + + + + QFontDatabase + + + + Normal + + + + + + + Bold + + + + + + Demi Bold + + + + + + + Black + + + + + Demi + + + + + + Light + + + + + + Italic + + + + + + Oblique + + + + + Any + + + + + Latin + + + + + Greek + + + + + Cyrillic + + + + + Armenian + + + + + Hebrew + + + + + Arabic + + + + + Syriac + + + + + Thaana + + + + + Devanagari + + + + + Bengali + + + + + Gurmukhi + + + + + Gujarati + + + + + Oriya + + + + + Tamil + + + + + Telugu + + + + + Kannada + + + + + Malayalam + + + + + Sinhala + + + + + Thai + + + + + Lao + + + + + Tibetan + + + + + Myanmar + + + + + Georgian + + + + + Khmer + + + + + Simplified Chinese + + + + + Traditional Chinese + + + + + Japanese + + + + + Korean + + + + + Vietnamese + + + + + Symbol + + + + + Ogham + + + + + Runic + + + + + QFontDialog + + + &Font + &גופן + + + + Font st&yle + &סגנון גופן + + + + &Size + גו&דל + + + + Effects + אפקטים + + + + Stri&keout + קו &חוצה + + + + &Underline + קו &תחתי + + + + Sample + דוגמה + + + + + Select Font + בחר גופן + + + + Wr&iting System + + + + + QFtp + + + Host %1 found + המארח %1 נמצא + + + + Host found + המארח נמצא + + + + + + Connected to host %1 + מחובר למארח %1 + + + + Connected to host + מחובר למארח + + + + Connection to %1 closed + החיבור אל %1 נסגר + + + + + + Connection closed + החיבור נסגר + + + + + Host %1 not found + המארח %1 לא נמצא + + + + + Connection refused to host %1 + החיבור אל המארח %1 נדחה + + + + Connection timed out to host %1 + + + + + + + + Unknown error + + + + + + Connecting to host failed: +%1 + + + + + + Login failed: +%1 + + + + + + Listing directory failed: +%1 + + + + + + Changing directory failed: +%1 + + + + + + Downloading file failed: +%1 + + + + + + Uploading file failed: +%1 + + + + + + Removing file failed: +%1 + + + + + + Creating directory failed: +%1 + + + + + + Removing directory failed: +%1 + + + + + + Not connected + + + + + + Connection refused for data connection + + + + + QHostInfo + + + Unknown error + + + + + QHostInfoAgent + + + + + + + + + + Host not found + + + + + + + + Unknown address type + + + + + + + Unknown error + + + + + QHttp + + + + Connection refused + החיבור נדחה + + + + + + Host %1 not found + המארח %1 לא נמצא + + + + + Wrong content length + אורך תוכן שגוי + + + + HTTPS connection requested but SSL support not compiled in + + + + + + + + HTTP request failed + בקשת ה-HTTP נכשלה + + + + Host %1 found + המארח %1 נמצא + + + + Host found + המארח נמצא + + + + Connected to host %1 + מחובר למארח %1 + + + + Connected to host + מחובר למארח + + + + Connection to %1 closed + החיבור אל %1 נסגר + + + + + Connection closed + החיבור נסגר + + + + + + + Unknown error + + + + + + Request aborted + + + + + + No server set to connect to + + + + + + Server closed connection unexpectedly + + + + + + Invalid HTTP response header + + + + + Unknown authentication method + + + + + + + + Invalid HTTP chunked body + + + + + Error writing response to device + + + + + Proxy authentication required + + + + + Authentication required + + + + + Connection refused (or timed out) + + + + + Proxy requires authentication + + + + + Host requires authentication + + + + + Data corrupted + + + + + Unknown protocol specified + + + + + SSL handshake failed + + + + + QHttpSocketEngine + + + Did not receive HTTP response from proxy + + + + + Error parsing authentication request from proxy + + + + + Authentication required + + + + + Proxy denied connection + + + + + Error communicating with HTTP proxy + + + + + Proxy server not found + + + + + Proxy connection refused + + + + + Proxy server connection timed out + + + + + Proxy connection closed prematurely + + + + + QIBaseDriver + + + Error opening database + + + + + Could not start transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QIBaseResult + + + Unable to create BLOB + + + + + Unable to write BLOB + + + + + Unable to open BLOB + + + + + Unable to read BLOB + + + + + + Could not find array + + + + + Could not get array data + + + + + Could not get query info + + + + + Could not start transaction + + + + + Unable to commit transaction + + + + + Could not allocate statement + + + + + Could not prepare statement + + + + + + Could not describe input statement + + + + + Could not describe statement + + + + + Unable to close statement + + + + + Unable to execute query + + + + + Could not fetch next item + + + + + Could not get statement info + + + + + QIODevice + + + Permission denied + + + + + Too many open files + + + + + No such file or directory + + + + + No space left on device + + + + + Unknown error + + + + + QInputContext + + + XIM + + + + + XIM input method + + + + + Windows input method + + + + + Mac OS X input method + + + + + QInputDialog + + + Enter a value: + + + + + QLibrary + + + Could not mmap '%1': %2 + + + + + Plugin verification data mismatch in '%1' + + + + + Could not unmap '%1': %2 + + + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + + + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + + + + + Unknown error + + + + + + The shared library was not found. + + + + + The file '%1' is not a valid Qt plugin. + + + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + + + + + + Cannot load library %1: %2 + + + + + + Cannot unload library %1: %2 + + + + + + Cannot resolve symbol "%1" in %2: %3 + + + + + QLineEdit + + + &Undo + &בטל + + + + &Redo + בצע &שוב + + + + Cu&t + &גזור + + + + &Copy + הע&תק + + + + &Paste + ה&דבק + + + + Select All + בחר הכל + + + + Delete + מחק + + + + QLocalServer + + + + %1: Name error + + + + + %1: Permission denied + + + + + %1: Address in use + + + + + + %1: Unknown error %2 + + + + + QLocalSocket + + + + %1: Connection refused + + + + + + %1: Remote closed + + + + + + + + %1: Invalid name + + + + + + %1: Socket access error + + + + + + %1: Socket resource error + + + + + + %1: Socket operation timed out + + + + + + %1: Datagram too large + + + + + + + %1: Connection error + + + + + + %1: The socket operation is not supported + + + + + %1: Unknown error + + + + + + %1: Unknown error %2 + + + + + QMYSQLDriver + + + Unable to open database ' + + + + + Unable to connect + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QMYSQLResult + + + Unable to fetch data + + + + + Unable to execute query + + + + + Unable to store result + + + + + + Unable to prepare statement + + + + + Unable to reset statement + + + + + Unable to bind value + + + + + Unable to execute statement + + + + + + Unable to bind outvalues + + + + + Unable to store statement results + + + + + Unable to execute next query + + + + + Unable to store next result + + + + + QMdiArea + + + (Untitled) + + + + + QMdiSubWindow + + + %1 - [%2] + %1 - [%2] + + + + Close + סגור + + + + Minimize + מזער + + + + Restore Down + שחזר למטה + + + + &Restore + ש&חזר + + + + &Move + ה&זז + + + + &Size + גו&דל + + + + Mi&nimize + &מזער + + + + Ma&ximize + &הגדל + + + + Stay on &Top + &תמיד עליון + + + + &Close + &סגור + + + + - [%1] + + + + + Maximize + הגדל + + + + Unshade + + + + + Shade + + + + + Restore + + + + + Help + עזרה + + + + Menu + + + + + QMenu + + + + Close + סגור + + + + + Open + פתח + + + + + + Execute + + + + + QMenuBar + + Options + אפשרויות + + + + QMessageBox + + + + + + OK + אישור + + + + About Qt + + + + + Help + עזרה + + + + Show Details... + + + + + Hide Details... + + + + + <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> + + + + + QMultiInputContext + + + Select IM + + + + + QMultiInputContextPlugin + + + Multiple input method switcher + + + + + Multiple input method switcher that uses the context menu of the text widgets + + + + + QNativeSocketEngine + + + The remote host closed the connection + + + + + Network operation timed out + + + + + Out of resources + + + + + Unsupported socket operation + + + + + Protocol type not supported + + + + + Invalid socket descriptor + + + + + Network unreachable + + + + + Permission denied + + + + + Connection timed out + + + + + Connection refused + החיבור נדחה + + + + The bound address is already in use + + + + + The address is not available + + + + + The address is protected + + + + + Unable to send a message + + + + + Unable to receive a message + + + + + Unable to write + + + + + Network error + + + + + Another socket is already listening on the same port + + + + + Unable to initialize non-blocking socket + + + + + Unable to initialize broadcast socket + + + + + Attempt to use IPv6 socket on a platform with no IPv6 support + + + + + Host unreachable + + + + + Datagram was too large to send + + + + + Operation on non-socket + + + + + Unknown error + + + + + The proxy type is invalid for this operation + + + + + QNetworkAccessCacheBackend + + + Error opening %1 + + + + + QNetworkAccessFileBackend + + + Request for opening non-local file %1 + + + + + Error opening %1: %2 + + + + + Write error writing to %1: %2 + + + + + Cannot open %1: Path is a directory + + + + + Read error reading from %1: %2 + + + + + QNetworkAccessFtpBackend + + + No suitable proxy found + + + + + Cannot open %1: is a directory + + + + + Logging in to %1 failed: authentication required + + + + + Error while downloading %1: %2 + + + + + Error while uploading %1: %2 + + + + + QNetworkAccessHttpBackend + + + No suitable proxy found + + + + + QNetworkReply + + + Error downloading %1 - server replied: %2 + + + + + Protocol "%1" is unknown + + + + + QNetworkReplyImpl + + + + Operation canceled + + + + + QOCIDriver + + + Unable to logon + + + + + Unable to initialize + QOCIDriver + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QOCIResult + + + + + Unable to bind column for batch execute + + + + + Unable to execute batch statement + + + + + Unable to goto next + + + + + Unable to alloc statement + + + + + Unable to prepare statement + + + + + Unable to bind value + + + + + Unable to execute statement + + + + + QODBCDriver + + + Unable to connect + + + + + Unable to connect - Driver doesn't support all needed functionality + + + + + Unable to disable autocommit + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + Unable to enable autocommit + + + + + QODBCResult + + + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + + + + + + Unable to execute statement + + + + + Unable to fetch next + + + + + Unable to prepare statement + + + + + Unable to bind variable + + + + + + + Unable to fetch last + + + + + Unable to fetch + + + + + Unable to fetch first + + + + + Unable to fetch previous + + + + + QObject + + + Home + Home + + + + Operation not supported on %1 + + + + + Invalid URI: %1 + + + + + Write error writing to %1: %2 + + + + + Read error reading from %1: %2 + + + + + Socket error on %1: %2 + + + + + Remote host closed the connection prematurely on %1 + + + + + Protocol error: packet of size 0 received + + + + + + No host name given + + + + + QPPDOptionsModel + + + Name + שם + + + + Value + + + + + QPSQLDriver + + + Unable to connect + + + + + Could not begin transaction + + + + + Could not commit transaction + + + + + Could not rollback transaction + + + + + Unable to subscribe + + + + + Unable to unsubscribe + + + + + QPSQLResult + + + Unable to create query + + + + + Unable to prepare statement + + + + + QPageSetupWidget + + + Centimeters (cm) + + + + + Millimeters (mm) + + + + + Inches (in) + + + + + Points (pt) + + + + + Form + + + + + Paper + + + + + Page size: + + + + + Width: + + + + + Height: + + + + + Paper source: + + + + + Orientation + + + + + Portrait + לאורך + + + + Landscape + לרוחב + + + + Reverse landscape + + + + + Reverse portrait + + + + + Margins + + + + + top margin + + + + + left margin + + + + + right margin + + + + + bottom margin + + + + + QPluginLoader + + + Unknown error + + + + + The plugin was not loaded. + + + + + QPrintDialog + + + locally connected + מחוברת מקומית + + + + + Aliases: %1 + שמות נוספים: %1 + + + + + unknown + לא ידוע + + + + OK + אישור + + + Cancel + ביטול + + + Print in color if available + הדפס בצבע אם הדבר זמין + + + Printer + מדפסת + + + + Print all + הדפס הכל + + + + Print range + טווח הדפסה + + + Print last page first + הדפס את העמוד הראשון אחרון + + + Number of copies: + מספר עותקים: + + + Paper format + תבנית נייר + + + Portrait + לאורך + + + Landscape + לרוחב + + + + A0 (841 x 1189 mm) + A0 (841 x 1189 mm) + + + + A1 (594 x 841 mm) + A1 (594 x 841 mm) + + + + A2 (420 x 594 mm) + A2 (420 x 594 mm) + + + + A3 (297 x 420 mm) + A3 (297 x 420 mm) + + + + A5 (148 x 210 mm) + A5 (148 x 210 mm) + + + + A6 (105 x 148 mm) + A6 (105 x 148 mm) + + + + A7 (74 x 105 mm) + A7 (74 x 105 mm) + + + + A8 (52 x 74 mm) + A8 (52 x 74 mm) + + + + A9 (37 x 52 mm) + A9 (37 x 52 mm) + + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 mm) + + + + B1 (707 x 1000 mm) + B1 (707 x 1000 mm) + + + + B2 (500 x 707 mm) + B2 (500 x 707 mm) + + + + B3 (353 x 500 mm) + B3 (353 x 500 mm) + + + + B4 (250 x 353 mm) + B4 (250 x 353 mm) + + + + B6 (125 x 176 mm) + B6 (125 x 176 mm) + + + + B7 (88 x 125 mm) + B7 (88 x 125 mm) + + + + B8 (62 x 88 mm) + B8 (62 x 88 mm) + + + + B9 (44 x 62 mm) + B9 (44 x 62 mm) + + + + B10 (31 x 44 mm) + B10 (31 x 44 mm) + + + + C5E (163 x 229 mm) + C5E (163 x 229 mm) + + + + DLE (110 x 220 mm) + DLE (110 x 220 mm) + + + + Folio (210 x 330 mm) + Folio (210 x 330 mm) + + + + Ledger (432 x 279 mm) + Ledger (432 x 279 mm) + + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432 mm) + + + + US Common #10 Envelope (105 x 241 mm) + US Common #10 Envelope (105 x 241 mm) + + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + + + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + + + + + Executive (7.5 x 10 inches, 191 x 254 mm) + + + + + Legal (8.5 x 14 inches, 216 x 356 mm) + + + + + Letter (8.5 x 11 inches, 216 x 279 mm) + + + + + + + Print + הדפס + + + File + קובץ + + + + Print To File ... + + + + Other + אחר + + + + File %1 is not writable. +Please choose a different file name. + + + + + %1 already exists. +Do you want to overwrite it? + + + + + File exists + + + + + <qt>Do you want to overwrite it?</qt> + + + + + Print selection + + + + + %1 is a directory. +Please choose a different file name. + + + + + A0 + + + + + A1 + + + + + A2 + + + + + A3 + + + + + A4 + + + + + A5 + + + + + A6 + + + + + A7 + + + + + A8 + + + + + A9 + + + + + B0 + + + + + B1 + + + + + B2 + + + + + B3 + + + + + B4 + + + + + B5 + + + + + B6 + + + + + B7 + + + + + B8 + + + + + B9 + + + + + B10 + + + + + C5E + + + + + DLE + + + + + Executive + + + + + Folio + + + + + Ledger + + + + + Legal + + + + + Letter + + + + + Tabloid + + + + + US Common #10 Envelope + + + + + Custom + + + + + + &Options >> + + + + + &Print + + + + + &Options << + + + + + Print to File (PDF) + + + + + Print to File (Postscript) + + + + + Local file + + + + + Write %1 file + + + + + The 'From' value cannot be greater than the 'To' value. + + + + + QPrintPreviewDialog + + + + Page Setup + + + + + %1% + + + + + Print Preview + + + + + Next page + + + + + Previous page + + + + + First page + + + + + Last page + + + + + Fit width + + + + + Fit page + + + + + Zoom in + + + + + Zoom out + + + + + Portrait + לאורך + + + + Landscape + לרוחב + + + + Show single page + + + + + Show facing pages + + + + + Show overview of all pages + + + + + Print + הדפס + + + + Page setup + + + + + Close + סגור + + + + Export to PDF + + + + + Export to PostScript + + + + + QPrintPropertiesDialog + + Save + שמור + + + OK + אישור + + + + QPrintPropertiesWidget + + + Form + + + + + Page + + + + + Advanced + + + + + QPrintSettingsOutput + + + Form + + + + + Copies + + + + + Print range + טווח הדפסה + + + + Print all + הדפס הכל + + + + Pages from + + + + + to + + + + + Selection + + + + + Output Settings + + + + + Copies: + + + + + Collate + + + + + Reverse + + + + + Options + אפשרויות + + + + Color Mode + + + + + Color + + + + + Grayscale + + + + + Duplex Printing + + + + + None + + + + + Long side + + + + + Short side + + + + + QPrintWidget + + + Form + + + + + Printer + מדפסת + + + + &Name: + + + + + P&roperties + + + + + Location: + + + + + Preview + + + + + Type: + + + + + Output &file: + + + + + ... + + + + + QProcess + + + + Could not open input redirection for reading + + + + + + Could not open output redirection for writing + + + + + Resource error (fork failure): %1 + + + + + + + + + + + + + Process operation timed out + + + + + + + + Error reading from process + + + + + + + Error writing to process + + + + + Process crashed + + + + + No program defined + + + + + Process failed to start + + + + + QProgressDialog + + + Cancel + ביטול + + + + QPushButton + + + Open + פתח + + + + QRadioButton + + + Check + + + + + QRegExp + + + no error occurred + לא אירעה כל שגיאה + + + + disabled feature used + + + + + bad char class syntax + + + + + bad lookahead syntax + + + + + bad repetition syntax + + + + + invalid octal value + + + + + missing left delim + + + + + unexpected end + + + + + met internal limit + + + + + QSQLite2Driver + + + Error to open database + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback Transaction + + + + + QSQLite2Result + + + Unable to fetch results + + + + + Unable to execute statement + + + + + QSQLiteDriver + + + Error opening database + + + + + Error closing database + + + + + Unable to begin transaction + + + + + Unable to commit transaction + + + + + Unable to rollback transaction + + + + + QSQLiteResult + + + + + Unable to fetch row + + + + + Unable to execute statement + + + + + Unable to reset statement + + + + + Unable to bind parameters + + + + + Parameter count mismatch + + + + + No query + + + + + QScrollBar + + + Scroll here + + + + + Left edge + + + + + Top + + + + + Right edge + + + + + Bottom + + + + + Page left + + + + + + Page up + + + + + Page right + + + + + + Page down + + + + + Scroll left + + + + + Scroll up + + + + + Scroll right + + + + + Scroll down + + + + + Line up + סדר בשורה + + + + Position + + + + + Line down + + + + + QSharedMemory + + + %1: unable to set key on lock + + + + + %1: create size is less then 0 + + + + + + %1: unable to lock + + + + + %1: unable to unlock + + + + + + %1: permission denied + + + + + + %1: already exists + + + + + + %1: doesn't exists + + + + + + %1: out of resources + + + + + + %1: unknown error %2 + + + + + %1: key is empty + + + + + %1: unix key file doesn't exists + + + + + %1: ftok failed + + + + + + %1: unable to make key + + + + + %1: system-imposed size restrictions + + + + + %1: not attached + + + + + %1: invalid size + + + + + %1: key error + + + + + %1: size query failed + + + + + QShortcut + + + Space + רווח + + + + Esc + Esc + + + + Tab + Tab + + + + Backtab + Backtab + + + + Backspace + Backspace + + + + Return + Return + + + + Enter + Enter + + + + Ins + Ins + + + + Del + Del + + + + Pause + Pause + + + + Print + הדפס + + + + SysReq + SysReq + + + + Home + Home + + + + End + End + + + + Left + שמאלה + + + + Up + למעלה + + + + Right + ימינה + + + + Down + למטה + + + + PgUp + PgUp + + + + PgDown + PgDown + + + + CapsLock + CapsLock + + + + NumLock + NumLock + + + + ScrollLock + ScrollLock + + + + Menu + + + + + Help + עזרה + + + + Back + אחורה + + + + Forward + + + + + Stop + + + + + Refresh + + + + + Volume Down + + + + + Volume Mute + + + + + Volume Up + + + + + Bass Boost + + + + + Bass Up + + + + + Bass Down + + + + + Treble Up + + + + + Treble Down + + + + + Media Play + + + + + Media Stop + + + + + Media Previous + + + + + Media Next + + + + + Media Record + + + + + Favorites + + + + + Search + + + + + Standby + + + + + Open URL + + + + + Launch Mail + + + + + Launch Media + + + + + Launch (0) + + + + + Launch (1) + + + + + Launch (2) + + + + + Launch (3) + + + + + Launch (4) + + + + + Launch (5) + + + + + Launch (6) + + + + + Launch (7) + + + + + Launch (8) + + + + + Launch (9) + + + + + Launch (A) + + + + + Launch (B) + + + + + Launch (C) + + + + + Launch (D) + + + + + Launch (E) + + + + + Launch (F) + + + + + Print Screen + + + + + Page Up + + + + + Page Down + + + + + Caps Lock + + + + + Num Lock + + + + + Number Lock + + + + + Scroll Lock + + + + + Insert + הוסף + + + + Delete + מחק + + + + Escape + + + + + System Request + + + + + Select + + + + + Yes + כן + + + + No + לא + + + + Context1 + + + + + Context2 + + + + + Context3 + + + + + Context4 + + + + + Call + + + + + Hangup + + + + + Flip + + + + + + Ctrl + Ctrl + + + + + Shift + Shift + + + + + Alt + Alt + + + + + Meta + + + + + + + + + + + + F%1 + F%1 + + + + Home Page + + + + + QSlider + + + Page left + + + + + Page up + + + + + Position + + + + + Page right + + + + + Page down + + + + + QSocks5SocketEngine + + + Connection to proxy refused + + + + + Connection to proxy closed prematurely + + + + + Proxy host not found + + + + + Connection to proxy timed out + + + + + Proxy authentication failed + + + + + Proxy authentication failed: %1 + + + + + SOCKS version 5 protocol error + + + + + General SOCKSv5 server failure + + + + + Connection not allowed by SOCKSv5 server + + + + + TTL expired + + + + + SOCKSv5 command not supported + + + + + Address type not supported + + + + + Unknown SOCKSv5 proxy error code 0x%1 + + + + + Network operation timed out + + + + + QSpinBox + + + More + + + + + Less + + + + + QSql + + + Delete + מחק + + + + Delete this record? + האם למחוק רשומה זו? + + + + + + Yes + כן + + + + + + No + לא + + + + Insert + הוסף + + + + Update + עדכן + + + + Save edits? + האם לשמור את העריכה? + + + + Cancel + ביטול + + + + Confirm + אישור + + + + Cancel your edits? + האם לבטל את העריכה שלך? + + + + QSslSocket + + + Unable to write data: %1 + + + + + Error while reading: %1 + + + + + Error during SSL handshake: %1 + + + + + Error creating SSL context (%1) + + + + + Invalid or empty cipher list (%1) + + + + + Error creating SSL session, %1 + + + + + Error creating SSL session: %1 + + + + + Cannot provide a certificate with no key, %1 + + + + + Error loading local certificate, %1 + + + + + Error loading private key, %1 + + + + + Private key does not certificate public key, %1 + + + + + QSystemSemaphore + + + + %1: out of resources + + + + + + %1: permission denied + + + + + %1: already exists + + + + + %1: does not exist + + + + + + %1: unknown error %2 + + + + + QTDSDriver + + + Unable to open connection + + + + + Unable to use database + + + + + QTabBar + + + Scroll Left + + + + + Scroll Right + + + + + QTcpServer + + + Operation on socket is not supported + + + + + QTextControl + + + &Undo + &בטל + + + + &Redo + בצע &שוב + + + + Cu&t + &גזור + + + + &Copy + הע&תק + + + + Copy &Link Location + + + + + &Paste + ה&דבק + + + + Delete + מחק + + + + Select All + בחר הכל + + + + QToolButton + + + + Press + + + + + + Open + פתח + + + + QUdpSocket + + + This platform does not support IPv6 + + + + + QUndoGroup + + + Undo + בטל + + + + Redo + שחזר + + + + QUndoModel + + + <empty> + + + + + QUndoStack + + + Undo + בטל + + + + Redo + שחזר + + + + QUnicodeControlCharacterMenu + + + LRM Left-to-right mark + + + + + RLM Right-to-left mark + + + + + ZWJ Zero width joiner + + + + + ZWNJ Zero width non-joiner + + + + + ZWSP Zero width space + + + + + LRE Start of left-to-right embedding + + + + + RLE Start of right-to-left embedding + + + + + LRO Start of left-to-right override + + + + + RLO Start of right-to-left override + + + + + PDF Pop directional formatting + + + + + Insert Unicode control character + + + + + QWebFrame + + + Request cancelled + + + + + Request blocked + + + + + Cannot show URL + + + + + Frame load interruped by policy change + + + + + Cannot show mimetype + + + + + File does not exist + + + + + QWebPage + + + Bad HTTP request + + + + + Submit + default label for Submit buttons in forms on web pages + + + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + + + + + Reset + default label for Reset buttons in forms on web pages + + + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + + + + + Choose File + title for file button used in HTML forms + + + + + No file selected + text to display in file button used in HTML forms when no file is selected + + + + + Open in New Window + Open in New Window context menu item + + + + + Save Link... + Download Linked File context menu item + + + + + Copy Link + Copy Link context menu item + + + + + Open Image + Open Image in New Window context menu item + + + + + Save Image + Download Image context menu item + + + + + Copy Image + Copy Link context menu item + + + + + Open Frame + Open Frame in New Window context menu item + + + + + Copy + Copy context menu item + + + + + Go Back + Back context menu item + + + + + Go Forward + Forward context menu item + + + + + Stop + Stop context menu item + + + + + Reload + Reload context menu item + + + + + Cut + Cut context menu item + + + + + Paste + Paste context menu item + + + + + No Guesses Found + No Guesses Found context menu item + + + + + Ignore + Ignore Spelling context menu item + + + + + Add To Dictionary + Learn Spelling context menu item + + + + + Search The Web + Search The Web context menu item + + + + + Look Up In Dictionary + Look Up in Dictionary context menu item + + + + + Open Link + Open Link context menu item + + + + + Ignore + Ignore Grammar context menu item + + + + + Spelling + Spelling and Grammar context sub-menu item + + + + + Show Spelling and Grammar + menu item title + + + + + Hide Spelling and Grammar + menu item title + + + + + Check Spelling + Check spelling context menu item + + + + + Check Spelling While Typing + Check spelling while typing context menu item + + + + + Check Grammar With Spelling + Check grammar with spelling context menu item + + + + + Fonts + Font context sub-menu item + + + + + Bold + Bold context menu item + + + + + Italic + Italic context menu item + + + + + Underline + Underline context menu item + + + + + Outline + Outline context menu item + + + + + Direction + Writing direction context sub-menu item + + + + + Text Direction + Text direction context sub-menu item + + + + + Default + Default writing direction context menu item + + + + + LTR + Left to Right context menu item + + + + + RTL + Right to Left context menu item + + + + + Inspect + Inspect Element context menu item + + + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + + + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + + + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + + + + + Unknown + Unknown filesize FTP directory listing item + + + + + %1 (%2x%3 pixels) + Title string for images + + + + + Web Inspector - %2 + + + + + Scroll here + + + + + Left edge + + + + + Top + + + + + Right edge + + + + + Bottom + + + + + Page left + + + + + Page up + + + + + Page right + + + + + Page down + + + + + Scroll left + + + + + Scroll up + + + + + Scroll right + + + + + Scroll down + + + + + %n file(s) + number of chosen file + + + + + + + JavaScript Alert - %1 + + + + + JavaScript Confirm - %1 + + + + + JavaScript Prompt - %1 + + + + + Move the cursor to the next character + + + + + Move the cursor to the previous character + + + + + Move the cursor to the next word + + + + + Move the cursor to the previous word + + + + + Move the cursor to the next line + + + + + Move the cursor to the previous line + + + + + Move the cursor to the start of the line + + + + + Move the cursor to the end of the line + + + + + Move the cursor to the start of the block + + + + + Move the cursor to the end of the block + + + + + Move the cursor to the start of the document + + + + + Move the cursor to the end of the document + + + + + Select all + + + + + Select to the next character + + + + + Select to the previous character + + + + + Select to the next word + + + + + Select to the previous word + + + + + Select to the next line + + + + + Select to the previous line + + + + + Select to the start of the line + + + + + Select to the end of the line + + + + + Select to the start of the block + + + + + Select to the end of the block + + + + + Select to the start of the document + + + + + Select to the end of the document + + + + + Delete to the start of the word + + + + + Delete to the end of the word + + + + + Insert a new paragraph + + + + + Insert a new line + + + + + QWhatsThisAction + + + What's This? + מה זה? + + + + QWidget + + + * + + + + + QWizard + + + Cancel + ביטול + + + + Help + עזרה + + + + Go Back + + + + + Continue + + + + + Commit + + + + + Done + + + + + < &Back + + + + + &Finish + + + + + &Help + + + + + &Next + + + + + &Next > + + + + + QWorkspace + + + &Restore + ש&חזר + + + + &Move + ה&זז + + + + &Size + &שנה גודל + + + + Mi&nimize + &מזער + + + + Ma&ximize + &הגדל + + + + &Close + &סגור + + + + Stay on &Top + &תמיד עליון + + + + + Sh&ade + &גלול + + + + + %1 - [%2] + %1 - [%2] + + + + Minimize + מזער + + + + Restore Down + שחזר למטה + + + + Close + סגור + + + + &Unshade + &בטל גלילה + + + + QXml + + + no error occurred + לא אירעה כל שגיאה + + + + error triggered by consumer + נגרמה שגיאה על ידי הצרכן + + + + unexpected end of file + סוף קובץ לא צפוי + + + + more than one document type definition + יותר מהגדרה אחת של סוג מסמך + + + + error occurred while parsing element + אירעה שגיאה בעת עיבוד המרכיב + + + + tag mismatch + אי-התאמה בתגית + + + + error occurred while parsing content + אירעה שגיאה בעת עיבוד התוכן + + + + unexpected character + תו לא צפוי + + + + invalid name for processing instruction + שם לא תקף עבור הוראת העיבוד + + + + version expected while reading the XML declaration + הייתה צפויה גירסה בעת קריאה ההכרזה על XML + + + + wrong value for standalone declaration + ערך שגוי עבור ההגדרה העצמאית + + + + encoding declaration or standalone declaration expected while reading the XML declaration + הייתה צפויה הכרזה על קידוד או הכרזה עצמאית בעת קריאת ההכרזה על XML + + + + standalone declaration expected while reading the XML declaration + הייתה צפויה הכרזה עצמאית בעת קריאת ההכרזה על XML + + + + error occurred while parsing document type definition + אירעה שגיאה בעת עיבוד הגדרת סוג המסמך + + + + letter is expected + הייתה צפויה אות + + + + error occurred while parsing comment + אירעה שגיאה בעת עיבוד ההערה + + + + error occurred while parsing reference + אירעה שגיאה בעת עיבוד ההתייחסות + + + + internal general entity reference not allowed in DTD + התייחסות ליישות כללית פנימית אינה מותרת ב-DTD + + + + external parsed general entity reference not allowed in attribute value + התייחסות ליישות כללית מעובדת חיצונית אינה מותרת בערך המאפיין + + + + external parsed general entity reference not allowed in DTD + התייחסות ליישות כללית מעובדת חיצונית אינה מותרת ב-DTD + + + + unparsed entity reference in wrong context + התייחסות ליישות לא מעובדת בהקשר שגוי + + + + recursive entities + יישות רקורסיבית + + + + error in the text declaration of an external entity + שגיאה בהכרזת טקסט של יישות חיצונית + + + + QXmlStream + + + + Extra content at end of document. + + + + + Invalid entity value. + + + + + Invalid XML character. + + + + + Sequence ']]>' not allowed in content. + + + + + Namespace prefix '%1' not declared + + + + + Attribute redefined. + + + + + Unexpected character '%1' in public id literal. + + + + + Invalid XML version string. + + + + + Unsupported XML version. + + + + + %1 is an invalid encoding name. + + + + + Encoding %1 is unsupported + + + + + Standalone accepts only yes or no. + + + + + Invalid attribute in XML declaration. + + + + + Premature end of document. + + + + + Invalid document. + + + + + Expected + + + + + , but got ' + + + + + Unexpected ' + + + + + Expected character data. + + + + + Recursive entity detected. + + + + + Start tag expected. + + + + + XML declaration not at start of document. + + + + + NDATA in parameter entity declaration. + + + + + %1 is an invalid processing instruction name. + + + + + Invalid processing instruction name. + + + + + + + + Illegal namespace declaration. + + + + + Invalid XML name. + + + + + Opening and ending tag mismatch. + + + + + Reference to unparsed entity '%1'. + + + + + + + Entity '%1' not declared. + + + + + Reference to external entity '%1' in attribute value. + + + + + Invalid character reference. + + + + + + Encountered incorrectly encoded content. + + + + + The standalone pseudo attribute must appear after the encoding. + + + + + %1 is an invalid PUBLIC identifier. + + + + + QtXmlPatterns + + + An %1-attribute with value %2 has already been declared. + + + + + An %1-attribute must have a valid %2 as value, which %3 isn't. + + + + + Network timeout. + + + + + Element %1 can't be serialized because it appears outside the document element. + + + + + Attribute %1 can't be serialized because it appears at the top level. + + + + + Year %1 is invalid because it begins with %2. + + + + + Day %1 is outside the range %2..%3. + + + + + Month %1 is outside the range %2..%3. + + + + + Overflow: Can't represent date %1. + + + + + Day %1 is invalid for month %2. + + + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + + + + + Time %1:%2:%3.%4 is invalid. + + + + + Overflow: Date can't be represented. + + + + + + At least one component must be present. + + + + + At least one time component must appear after the %1-delimiter. + + + + + No operand in an integer division, %1, can be %2. + + + + + The first operand in an integer division, %1, cannot be infinity (%2). + + + + + The second operand in a division, %1, cannot be zero (%2). + + + + + %1 is not a valid value of type %2. + + + + + When casting to %1 from %2, the source value cannot be %3. + + + + + Integer division (%1) by zero (%2) is undefined. + + + + + Division (%1) by zero (%2) is undefined. + + + + + Modulus division (%1) by zero (%2) is undefined. + + + + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + + + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + + + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + + + + + A value of type %1 cannot have an Effective Boolean Value. + + + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + + + + + Value %1 of type %2 exceeds maximum (%3). + + + + + Value %1 of type %2 is below minimum (%3). + + + + + A value of type %1 must contain an even number of digits. The value %2 does not. + + + + + %1 is not valid as a value of type %2. + + + + + Operator %1 cannot be used on type %2. + + + + + Operator %1 cannot be used on atomic values of type %2 and %3. + + + + + The namespace URI in the name for a computed attribute cannot be %1. + + + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + + + + + Type error in cast, expected %1, received %2. + + + + + 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. + + + + + No casting is possible with %1 as the target type. + + + + + It is not possible to cast from %1 to %2. + + + + + Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. + + + + + It's not possible to cast the value %1 of type %2 to %3 + + + + + Failure when casting from %1 to %2: %3 + + + + + A comment cannot contain %1 + + + + + A comment cannot end with a %1. + + + + + No comparisons can be done involving the type %1. + + + + + Operator %1 is not available between atomic values of type %2 and %3. + + + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + + + + + A library module cannot be evaluated directly. It must be imported from a main module. + + + + + No template by name %1 exists. + + + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + + + + + A positional predicate must evaluate to a single numeric value. + + + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. + + + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + + + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + + + + + The data of a processing instruction cannot contain the string %1 + + + + + No namespace binding exists for the prefix %1 + + + + + No namespace binding exists for the prefix %1 in %2 + + + + + + %1 is an invalid %2 + + + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + + + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + + + + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + + + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + + + %1 is not a valid XML 1.0 character. + + + + + The first argument to %1 cannot be of type %2. + + + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + + + + + %1 was called. + + + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + + + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + + + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + + + + + %1 matches newline characters + + + + + %1 and %2 match the start and end of a line. + + + + + Matches are case insensitive + + + + + Whitespace characters are removed, except when they appear in character classes + + + + + %1 is an invalid regular expression pattern: %2 + + + + + %1 is an invalid flag for regular expressions. Valid flags are: + + + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + + + + + It will not be possible to retrieve %1. + + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + + + + + The default collection is undefined + + + + + %1 cannot be retrieved + + + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + + + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + + + + + %1 is not a whole number of minutes. + + + + + Required cardinality is %1; got cardinality %2. + + + + + The item %1 did not match the required type %2. + + + + + + %1 is an unknown schema type. + + + + + Only one %1 declaration can occur in the query prolog. + + + + + The initialization of variable %1 depends on itself + + + + + No variable by name %1 exists + + + + + The variable %1 is unused + + + + + Version %1 is not supported. The supported XQuery version is 1.0. + + + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + + + + + No function with signature %1 is available + + + + + + A default namespace declaration must occur before function, variable, and option declarations. + + + + + Namespace declarations must occur before function, variable, and option declarations. + + + + + Module imports must occur before function, variable, and option declarations. + + + + + It is not possible to redeclare prefix %1. + + + + + Prefix %1 is already declared in the prolog. + + + + + The name of an option must have a prefix. There is no default namespace for options. + + + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + + + + + The target namespace of a %1 cannot be empty. + + + + + The module import feature is not supported + + + + + No value is available for the external variable by name %1. + + + + + A construct was encountered which only is allowed in XQuery. + + + + + A template by name %1 has already been declared. + + + + + The keyword %1 cannot occur with any other mode name. + + + + + The value of attribute %1 must of type %2, which %3 isn't. + + + + + The prefix %1 can not be bound. By default, it is already bound to the namespace %2. + + + + + A variable by name %1 has already been declared. + + + + + A stylesheet function must have a prefixed name. + + + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + + + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + + + + + 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 + + + + + A function already exists with the signature %1. + + + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + + + + + An argument by name %1 has already been declared. Every argument name must be unique. + + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + + + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + + + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + + + + + In an XSL-T pattern, function %1 cannot have a third argument. + + + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + + + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + + + + + %1 is an invalid template mode name. + + + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + + + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + + + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + + + + + Each name of a template parameter must be unique; %1 is duplicated. + + + + + The %1-axis is unsupported in XQuery + + + + + %1 is not a valid name for a processing-instruction. + + + + + %1 is not a valid numeric literal. + + + + + No function by name %1 is available. + + + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + + + + + %1 is an invalid namespace URI. + + + + + It is not possible to bind to the prefix %1 + + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + + + Two namespace declaration attributes have the same name: %1. + + + + + The namespace URI must be a constant and cannot use enclosed expressions. + + + + + An attribute by name %1 has already appeared on this element. + + + + + A direct element constructor is not well-formed. %1 is ended with %2. + + + + + The name %1 does not refer to any schema type. + + + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + + + + + %1 is not an atomic type. Casting is only possible to atomic types. + + + + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + + + + + The name of an extension expression must be in a namespace. + + + + + empty + + + + + zero or one + + + + + exactly one + + + + + one or more + + + + + zero or more + + + + + Required type is %1, but %2 was found. + + + + + Promoting %1 to %2 may cause loss of precision. + + + + + The focus is undefined. + + + + + It's not possible to add attributes after any other kind of node. + + + + + An attribute by name %1 has already been created. + + + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + + + + + %1 is an unsupported encoding. + + + + + %1 contains octets which are disallowed in the requested encoding %2. + + + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + + + + + Ambiguous rule match. + + + + + In a namespace constructor, the value for a namespace cannot be an empty string. + + + + + The prefix must be a valid %1, which %2 is not. + + + + + The prefix %1 cannot be bound. + + + + + Only the prefix %1 can be bound to %2 and vice versa. + + + + + Circularity detected + + + + + The parameter %1 is required, but no corresponding %2 is supplied. + + + + + The parameter %1 is passed, but no corresponding %2 exists. + + + + + The URI cannot have a fragment + + + + + Element %1 is not allowed at this location. + + + + + Text nodes are not allowed at this location. + + + + + Parse error: %1 + + + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + + + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + + + + + Unknown XSL-T attribute %1. + + + + + Attribute %1 and %2 are mutually exclusive. + + + + + In a simplified stylesheet module, attribute %1 must be present. + + + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + + + + + Element %1 must have at least one of the attributes %2 or %3. + + + + + At least one mode must be specified in the %1-attribute on element %2. + + + + + Attribute %1 cannot appear on the element %2. Only the standard attributes can appear. + + + + + Attribute %1 cannot appear on the element %2. Only %3 is allowed, and the standard attributes. + + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, %4, and the standard attributes. + + + + + Attribute %1 cannot appear on the element %2. Allowed is %3, and the standard attributes. + + + + + XSL-T attributes on XSL-T elements must be in the null namespace, not in the XSL-T namespace which %1 is. + + + + + The attribute %1 must appear on element %2. + + + + + The element with local name %1 does not exist in XSL-T. + + + + + Element %1 must come last. + + + + + At least one %1-element must occur before %2. + + + + + Only one %1-element can appear. + + + + + At least one %1-element must occur inside %2. + + + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + + + + + Element %1 must have either a %2-attribute or a sequence constructor. + + + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + + + + + Element %1 cannot have children. + + + + + Element %1 cannot have a sequence constructor. + + + + + + The attribute %1 cannot appear on %2, when it is a child of %3. + + + + + A parameter in a function cannot be declared to be a tunnel. + + + + + This processor is not Schema-aware and therefore %1 cannot be used. + + + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + + + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + + + + + Attribute %1 cannot have the value %2. + + + + + The attribute %1 can only appear on the first %2 element. + + + + + At least one %1 element must appear as child of %2. + + + + + VolumeSlider + + + Muted + + + + + + Volume: %1% + + + + diff --git a/config.profiles/symbian/translations/qt_pl_symbian.ts b/config.profiles/symbian/translations/qt_pl_symbian.ts new file mode 100644 index 0000000..4208c55 --- /dev/null +++ b/config.profiles/symbian/translations/qt_pl_symbian.ts @@ -0,0 +1,8525 @@ + + + + + + CloseButton + + Close Tab + Zamknij kartę + + + + FakeReply + + Fake error ! + Fałszywy błąd! + + + Invalid URL + Niepoprawny URL + + + + Phonon:: + + Notifications + Powiadomienia + + + Music + Muzyka + + + Video + Wideo + + + Communication + Komunikacja + + + Games + Gry + + + Accessibility + Dostępność + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>Urządzenie dźwiękowe <b>%1</b> nie działa.<br/>Przywracanie do <b>%2</b>.</html> + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>Przełączanie na urządzenie dźwiękowe <b>%1</b><br/>które właśnie stało się dostępne i ma wyższy priorytet.</html> + + + Revert back to device '%1' + Przywróć do urządzenia '%1' + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + Ostrzeżenie: Wygląda na to, że pakiet gstreamer0.10-plugins-good nie jest zainstalowany w tym systemie. +Niektóre możliwości wideo zostały wyłączone. + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + Ostrzeżenie: Wygląda na to, że podstawowe wtyczki GStreamer nie są zainstalowane w tym systemie. +Obsługa dźwięku i wideo została wyłączona + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + Nie można rozpocząć odtwarzania. + +Sprawdź instalację Gstreamer i upewnij się że +zainstalowałeś libgstreamer-plugins-base. + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + Brak wymaganego kodeka. Aby odtworzyć zawartość musisz zainstalować poniższy kodek: %0 + + + Could not open media source. + Nie można otworzyć źródła mediów. + + + Invalid source type. + Niepoprawny typ źródła. + + + Could not locate media source. + Nie można znaleźć źródła mediów. + + + Could not open audio device. The device is already in use. + Nie można otworzyć urządzenia dźwiękowego. Urządzenie jest już używane. + + + Could not decode media source. + Nie można zdekodować źródła mediów. + + + + Phonon::MMF + + Audio Output + Wyjście dźwięku + + + The audio output device + Wyjściowe urządzenie dźwiękowe + + + No error + Brak błędu + + + Not found + Nie znaleziono + + + Out of memory + Brak pamięci + + + Not supported + Nieobsługiwane + + + Overflow + Przepełnienie + + + Underflow + Niedopełnienie + + + Already exists + Już istnieje + + + Path not found + Nie znaleziono ścieżki + + + In use + W użyciu + + + Not ready + Brak gotowości + + + Access denied + Odmowa dostępu + + + Could not connect + Nie można połączyć + + + Disconnected + Rozłączono + + + Permission denied + Odmowa uprawnień + + + Insufficient bandwidth + Niewystarczająca szerokość pasma + + + Network unavailable + Sieć niedostępna + + + Network communication error + Błąd komunikacji sieciowej + + + Streaming not supported + Transmisje strumieniowe nieobsługiwane + + + Server alert + Sygnał serwera + + + Invalid protocol + Nieprawidłowy protokół + + + Invalid URL + Nieprawidłowy adres URL + + + Multicast error + Błąd multiemisji + + + Proxy server error + Błąd serwera proxy + + + Proxy server not supported + Serwer proxy nieobsługiwany + + + Audio output error + Błąd sygnału audio + + + Video output error + Błąd wyjścia wideo + + + Decoder error + Błąd dekodera + + + Audio or video components could not be played + Nie można odtworzyć składników dźwiękowych lub wideo + + + DRM error + Błąd DRM + + + Unknown error (%1) + Nieznany błąd (%1) + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + Brak gotowości do odtworzenia + + + Error opening file + Błąd podczas otwierania pliku + + + Error opening URL + Błąd podczas otwierania adresu URL + + + Setting volume failed + Ustawienie głośności nie powiodło się + + + Playback complete + Zakończono odtwarzanie + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + %1 Hz + + + + Phonon::MMF::AudioPlayer + + Getting position failed + Ustalenie pozycji nie powiodło się + + + Opening clip failed + Otwieranie pliku nie powiodło się + + + + Phonon::MMF::EffectFactory + + Enabled + Włączono + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + Współczynnik HF zanikania (%) + + + Decay time (ms) + Czas zanikania (ms) + + + Density (%) + Gęstość (%) + + + Diffusion (%) + Rozpraszanie (%) + + + Reflections delay (ms) + Opóźnienie odbić (ms) + + + Reflections level (mB) + Poziom odbić (MB) + + + Reverb delay (ms) + Opóźnienie pogłosu (ms) + + + Reverb level (mB) + Poziom pogłosu (MB) + + + Room HF level + Poziom HF pomieszczenia + + + Room level (mB) + Poziom pomieszczenia (MB) + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + Błąd podczas otwierania źródła: nieobsługiwany typ + + + Error opening source: media type could not be determined + Błąd podczas otwierania źródła: nie można określić typu multimediów + + + + Phonon::MMF::StereoWidening + + Level (%) + Poziom (%) + + + + Phonon::MMF::VideoPlayer + + Pause failed + Wstrzymanie nie powiodło się + + + Seek failed + Wyszukiwanie nie powiodło się + + + Getting position failed + Ustalenie pozycji nie powiodło się + + + Opening clip failed + Otwieranie pliku nie powiodło się + + + Buffering clip failed + Buforowanie pliku nie powiodło się + + + Video display error + Błąd wyświetlacza wideo + + + + Phonon::VolumeSlider + + Volume: %1% + Głośność: %1% + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + Użyj tego suwaka aby zmienić głośność. Skrajnie lewa pozycja to 0%, skrajnie prawa to %1% + + + Muted + Wyciszony + + + + Q3Accel + + %1, %2 not defined + %1, %2 nie określone + + + Ambiguous %1 not handled + Niejednoznaczne %1, nie obsłużone + + + + Q3DataTable + + True + Prawda + + + False + Fałsz + + + Insert + Wstaw + + + Update + Uaktualnij + + + Delete + Skasuj + + + + Q3FileDialog + + Copy or Move a File + Skopiuj lub przenieś plik + + + Read: %1 + Czytaj: %1 + + + Write: %1 + Pisz: %1 + + + Cancel + Anuluj + + + All Files (*) + Wszystkie pliki (*) + + + Name + Nazwa + + + Size + Rozmiar + + + Type + Rodzaj + + + Date + Data + + + Attributes + Atrybuty + + + &OK + &OK + + + Look &in: + Sprawdź &w: + + + File &name: + Nazwa &pliku: + + + File &type: + &Rodzaj pliku: + + + Back + Powrót + + + One directory up + Katalog wyżej + + + Create New Folder + Utwórz nowy katalog + + + List View + Lista + + + Detail View + Szczegóły + + + Preview File Info + Podgląd informacji o pliku + + + Preview File Contents + Podgląd zawartości pliku + + + Read-write + Do zapisu i odczytu + + + Read-only + Tylko do odczytu + + + Write-only + Tylko do zapisu + + + Inaccessible + Niedostępny + + + Symlink to File + Dowiązanie symboliczne do pliku + + + Symlink to Directory + Dowiązanie symboliczne do katalogu + + + Symlink to Special + Specjalny dowiązanie symboliczne + + + File + Plik + + + Dir + Katalog + + + Special + Specjalny + + + Open + Otwórz + + + Save As + Zachowaj jako + + + &Open + &Otwórz + + + &Save + &Zachowaj + + + &Rename + &Zmień nazwę + + + &Delete + &Skasuj + + + R&eload + &Odśwież + + + Sort by &Name + Sortuj &po nazwie + + + Sort by &Size + Sortuj po &rozmiarze + + + Sort by &Date + Sortuj po &dacie + + + &Unsorted + &Bez sortowania + + + Sort + Sortuj + + + Show &hidden files + Pokaż &ukryte pliki + + + the file + plik + + + the directory + katalog + + + the symlink + dowiązanie symboliczne + + + Delete %1 + Skasuj %1 + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>Na pewno chcesz skasować %1 "%2"?</qt> + + + &Yes + &Tak + + + &No + &Nie + + + New Folder 1 + Nowy katalog 1 + + + New Folder + Nowy katalog + + + New Folder %1 + Nowy katalog %1 + + + Find Directory + Znajdź katalog + + + Directories + Katalogi + + + Directory: + Katalog: + + + Error + Błąd + + + %1 +File not found. +Check path and filename. + %1 +Plik nie znaleziony. +Sprawdź ścieżkę i nazwę pliku. + + + All Files (*.*) + Wszystkie pliki (*.*) + + + Open + Otwórz + + + Select a Directory + Wybierz katalog + + + + Q3LocalFs + + Could not read directory +%1 + Nie można czytać katalogu +%1 + + + Could not create directory +%1 + Nie można utworzyć katalogu +%1 + + + Could not remove file or directory +%1 + Nie można usunąć pliku lub katalogu +%1 + + + Could not rename +%1 +to +%2 + Nie można zmienić nazwy +%1 +na +%2 + + + Could not open +%1 + Nie można otworzyć +%1 + + + Could not write +%1 + Nie można zapisać +%1 + + + + Q3MainWindow + + Line up + Wyrównaj położenie + + + Customize... + Ustawienia użytkownika... + + + + Q3NetworkProtocol + + Operation stopped by the user + Operacja zatrzymana przez użytkownika + + + + Q3ProgressDialog + + Cancel + Anuluj + + + + Q3TabDialog + + OK + OK + + + Apply + Zatwierdź + + + Help + Pomoc + + + Defaults + Domyślne + + + Cancel + Anuluj + + + + Q3TextEdit + + &Undo + &Cofnij + + + &Redo + &Przywróć + + + Cu&t + W&ytnij + + + &Copy + S&kopiuj + + + &Paste + &Wklej + + + Clear + Wyczyść + + + Select All + Zaznacz wszystko + + + + Q3TitleBar + + System + System + + + Restore up + Przywróć na wierzch + + + Minimize + Zminimalizuj + + + Restore down + Przywróć pod spód + + + Maximize + Zmaksymalizuj + + + Close + Zamknij okno + + + Contains commands to manipulate the window + Zawiera polecenia zarządzające oknem + + + Puts a minimized window back to normal + Przywraca normalny rozmiar uprzednio zminimalizowanego okna + + + Moves the window out of the way + Przenosi okno w inne położenie + + + Puts a maximized window back to normal + Przywraca normalny rozmiar uprzednio zmaksymalizowanego okna + + + Makes the window full screen + Powiększa maksymalnie okno + + + Closes the window + Zamyka okno + + + Displays the name of the window and contains controls to manipulate it + Wyświetla nazwę okna i zawiera elementy do zarządzania nim + + + + Q3ToolBar + + More... + Więcej... + + + + Q3UrlOperator + + The protocol `%1' is not supported + Protokół '%1' nie jest obsługiwany + + + The protocol `%1' does not support listing directories + Protokół '%1' nie obsługuje pokazywania katalogów + + + The protocol `%1' does not support creating new directories + Protokół '%1' nie obsługuje tworzenia nowych katalogów + + + The protocol `%1' does not support removing files or directories + Protokół '%1' nie obsługuje usuwania plików lub katalogów + + + The protocol `%1' does not support renaming files or directories + Protokół '%1' nie obsługuje zmiany nazwy plików lub katalogów + + + The protocol `%1' does not support getting files + Protokół '%1' nie obsługuje pobierania plików + + + The protocol `%1' does not support putting files + Protokół '%1' nie obsługuje wysyłania plików + + + The protocol `%1' does not support copying or moving files or directories + Protokół '%1' nie obsługuje kopiowania lub przenoszenia plików lub katalogów + + + (unknown) + (nieznany) + + + + Q3Wizard + + &Cancel + &Anuluj + + + < &Back + < &Wstecz + + + &Next > + &Dalej > + + + &Finish + &Zakończ + + + &Help + &Pomoc + + + + QAbstractSocket + + Host not found + Host nie znaleziony + + + Connection refused + Połączenie odrzucone + + + Connection timed out + Przekroczony czas połączenia + + + Operation on socket is not supported + Operacja na gnieździe nieobsługiwana + + + Socket operation timed out + Przekroczony czas operacji gniazda + + + Socket is not connected + Gniazdo nie jest podłączone + + + Network unreachable + Sieć niedostępna + + + + QAbstractSpinBox + + &Step up + Krok do &góry + + + Step &down + Krok w &dół + + + &Select All + &Zaznacz wszystko + + + + QAccessibleButton + + Press + Wciśnij + + + + QApplication + + QT_LAYOUT_DIRECTION + 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. + LTR + + + Executable '%1' requires Qt %2, found Qt %3. + Program '%1' wymaga do uruchomienia Qt %2, znaleziono Qt %3. + + + Incompatible Qt Library Error + Niekompatybilność biblioteki Qt + + + Activate + Uaktywnij + + + Activates the program's main window + Uaktywnia główne okno programu + + + + QAxSelect + + Select ActiveX Control + Wybierz kontrolkę ActiveX + + + OK + OK + + + &Cancel + &Anuluj + + + COM &Object: + &Obiekt COM: + + + + QCheckBox + + Uncheck + Odznacz + + + Check + Zaznacz + + + Toggle + Przełącz + + + + QColorDialog + + Hu&e: + &Barwa: + + + &Sat: + &Nasycenie: + + + &Val: + &Wartość: + + + &Red: + &Czerwień: + + + &Green: + &Zieleń: + + + Bl&ue: + Błęki&t: + + + A&lpha channel: + Kanał &alfa: + + + Select Color + Wybierz kolor + + + &Basic colors + &Kolory podstawowe + + + &Custom colors + Wła&sne kolory + + + &Add to Custom Colors + &Dodaj do własnych kolorów + + + + QComboBox + + Open + Otwórz + + + False + Fałsz + + + True + Prawda + + + Close + Zamknij + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + %1: klucz jest pusty + + + %1: unable to make key + QSystemSemaphore + %1: nie można utworzyć klucza + + + %1: ftok failed + QSystemSemaphore + %1: wystąpił błąd w funkcji ftok() + + + %1: already exists + QSystemSemaphore + %1: już istnieje + + + %1: does not exist + QSystemSemaphore + %1: nie istnieje + + + %1: out of resources + QSystemSemaphore + %1: zasoby wyczerpane + + + %1: unknown error %2 + QSystemSemaphore + %1: nieznany błąd %2 + + + + QDB2Driver + + Unable to connect + Nie można nawiązać połączenia + + + Unable to commit transaction + Nie można dokonać transakcji + + + Unable to rollback transaction + Nie można wycofać transakcji + + + Unable to set autocommit + Nie można ustawić trybu automatycznego dokonywania transakcji + + + + QDB2Result + + Unable to execute statement + Nie można wykonać polecenia + + + Unable to prepare statement + Nie można przygotować polecenia + + + Unable to bind variable + Nie można powiązać zmiennej + + + Unable to fetch record %1 + Nie można pobrać rekordu %1 + + + Unable to fetch next + Nie można pobrać kolejnego wiersza danych + + + Unable to fetch first + Nie można pobrać pierwszego wiersza danych + + + + QDateTimeEdit + + AM + AM + + + am + am + + + PM + PM + + + pm + pm + + + + QDial + + QDial + QDial + + + SpeedoMeter + Miernik prędkości + + + SliderHandle + Uchwyt suwaka + + + + QDialog + + What's This? + Co to jest? + + + Done + Wykonano + + + + QDialogButtonBox + + OK + OK + + + Save + Zachowaj + + + &Save + &Zachowaj + + + Open + Otwórz + + + Cancel + Anuluj + + + &Cancel + &Anuluj + + + Close + Zamknij + + + &Close + &Zamknij + + + Apply + Zastosuj + + + Reset + Resetuj + + + Help + Pomoc + + + Don't Save + Nie zachowuj + + + Discard + Odrzuć + + + &Yes + &Tak + + + Yes to &All + Ta&k dla wszystkich + + + &No + &Nie + + + N&o to All + Ni&e dla wszystkich + + + Save All + Zachowaj wszystko + + + Abort + Przerwij + + + Retry + Ponów + + + Ignore + Zignoruj + + + Restore Defaults + Przywróć ustawienia + + + Close without Saving + Zamknij bez zapisywania + + + &OK + &OK + + + + QDirModel + + Name + Nazwa + + + Size + Rozmiar + + + Kind + Match OS X Finder + Typ + + + Type + All other platforms + Rodzaj + + + Date Modified + Data modyfikacji + + + + QDockWidget + + Close + Zamknij + + + Dock + Zadokuj + + + Float + Uwolnij + + + + QDoubleSpinBox + + More + Więcej + + + Less + Mniej + + + + QErrorMessage + + &Show this message again + &Pokaż ten komunikat ponownie + + + &OK + &OK + + + Debug Message: + Komunikat dla programisty: + + + Warning: + Ostrzeżenie: + + + Fatal Error: + Błąd krytyczny: + + + + QFile + + Destination file exists + Plik wyjściowy już istnieje + + + Will not rename sequential file using block copy + Nie można zmienić nazwy pliku sekwencyjnego używając kopiowania blokowego + + + Cannot remove source file + Nie można usunąć oryginalnego pliku + + + Cannot open %1 for input + Nie można otworzyć pliku wejściowego %1 + + + Cannot open for output + Nie można otworzyć pliku wyjściowego + + + Failure to write block + Nie można zapisać bloku + + + Cannot create %1 for output + Nie można utworzyć pliku wyjściowego %1 + + + + QFileDialog + + All Files (*) + Wszystkie pliki (*) + + + Back + Powrót + + + List View + Lista + + + Detail View + Szczegóły + + + File + Plik + + + Open + Otwórz + + + Save As + Zachowaj jako + + + &Open + &Otwórz + + + &Save + &Zachowaj + + + Recent Places + Ostatnie miejsca + + + &Rename + &Zmień nazwę + + + &Delete + &Skasuj + + + Show &hidden files + Pokaż &ukryte pliki + + + New Folder + Nowy katalog + + + Find Directory + Znajdź katalog + + + Directories + Katalogi + + + All Files (*.*) + Wszystkie pliki (*.*) + + + Directory: + Katalog: + + + %1 already exists. +Do you want to replace it? + %1 już istnieje. +Czy chcesz zamienić? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +Plik nie znaleziony. +Proszę o sprawdzenie podanej nazwy pliku. + + + My Computer + Mój komputer + + + Parent Directory + Katalog wyżej + + + Files of type: + Pliki rodzaju: + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +Katalog nie znaleziony. +Sprawdź podaną nazwę katalogu. + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' jest zabezpieczony przed zapisem. +Czy na pewno chcesz go skasować? + + + Are sure you want to delete '%1'? + Czy na pewno chcesz skasować '%1'? + + + Could not delete directory. + Nie można skasować katalogu. + + + Drive + Urządzenie + + + File Folder + Match Windows Explorer + Katalog + + + Folder + All other platforms + Katalog + + + Alias + Mac OS X Finder + Alias + + + Shortcut + All other platforms + Skrót + + + Unknown + Nieznany + + + Show + Pokaż + + + Forward + Do przodu + + + &New Folder + &Nowy katalog + + + &Choose + &Wybierz + + + Remove + Usuń + + + File &name: + Nazwa &pliku: + + + Look in: + Szukaj w: + + + Create New Folder + Utwórz nowy katalog + + + + QFileSystemModel + + %1 TB + %1 TB + + + %1 GB + %1 GB + + + %1 MB + %1 MB + + + %1 KB + %1 KB + + + %1 bytes + %1 bajtów + + + Invalid filename + Niepoprawna nazwa pliku + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>Nazwa "%1" nie może zostać użyta.</b><p>Spróbuj użyć nowej nazwy z mniejszą liczbą znaków lub bez znaków przystankowych. + + + Name + Nazwa + + + Size + Rozmiar + + + Kind + Match OS X Finder + Typ + + + Type + All other platforms + Rodzaj + + + Date Modified + Data modyfikacji + + + My Computer + Mój komputer + + + Computer + Komputer + + + %1 byte(s) + %1 bajt(ów) + + + + QFontDatabase + + Normal + Normalny + + + Bold + Pogrubiony + + + Demi Bold + Na wpół pogrubiony + + + Black + Bardzo gruby + + + Demi + Na wpół + + + Light + Cienki + + + Italic + Kursywa + + + Oblique + Pochyły + + + Any + Każdy + + + Latin + Łaciński + + + Greek + Grecki + + + Cyrillic + Cyrylica + + + Armenian + Ormiański + + + Hebrew + Hebrajski + + + Arabic + Arabski + + + Syriac + Syryjski + + + Thaana + Thaana + + + Devanagari + Devanagari + + + Bengali + Bengalski + + + Gurmukhi + Gurmukhi + + + Gujarati + Gudżaracki + + + Oriya + Orija + + + Tamil + Tamilski + + + Telugu + Telugu + + + Kannada + Kannada + + + Malayalam + Malajalam + + + Sinhala + Syngaleski + + + Thai + Tajski + + + Lao + Laotański + + + Tibetan + Tybetański + + + Myanmar + Birmański + + + Georgian + Gruziński + + + Khmer + Khmerski + + + Simplified Chinese + Uproszczony chiński + + + Traditional Chinese + Tradycyjny chiński + + + Japanese + Japoński + + + Korean + Koreański + + + Vietnamese + Wietnamski + + + Symbol + Symboliczny + + + Ogham + Ogamiczny + + + Runic + Runiczny + + + N'Ko + N'Ko + + + + QFontDialog + + &Font + &Czcionka + + + Font st&yle + St&yl czcionki + + + &Size + &Rozmiar + + + Effects + Efekty + + + Stri&keout + Pr&zekreślenie + + + &Underline + &Podkreślenie + + + Sample + Przykład + + + Select Font + Wybierz czcionkę + + + Wr&iting System + Sys&tem pisania + + + + QFtp + + Host %1 found + Host %1 znaleziony + + + Host found + Host znaleziony + + + Connected to host %1 + Podłączony do hosta %1 + + + Connected to host + Podłączony do hosta + + + Connection to %1 closed + Połączenie do %1 zakończone + + + Connection closed + Połączenie zamknięte + + + Host %1 not found + Host %1 nie znaleziony + + + Connection refused to host %1 + Połączenie do hosta %1 odrzucone + + + Connection timed out to host %1 + Przekroczony czas połączenia do hosta %1 + + + Unknown error + Nieznany błąd + + + Connecting to host failed: +%1 + Podłączanie do hosta zakończone błędem: +%1 + + + Login failed: +%1 + Logowanie nie powiodło się: +%1 + + + Listing directory failed: +%1 + Listowanie katalogu zakończone błędem: +%1 + + + Changing directory failed: +%1 + Zmiana katalogu zakończona błędem: +%1 + + + Downloading file failed: +%1 + Pobieranie pliku zakończone błędem: +%1 + + + Uploading file failed: +%1 + Wysyłanie pliku zakończone błędem: +%1 + + + Removing file failed: +%1 + Usuwanie pliku zakończone błędem: +%1 + + + Creating directory failed: +%1 + Tworzenie katalogu zakończone błędem: +%1 + + + Removing directory failed: +%1 + Usuwanie katalogu zakończone błędem: +%1 + + + Not connected + Nie podłączony + + + Connection refused for data connection + Połączenie do przesyłu danych odrzucone + + + + QHostInfo + + Unknown error + Nieznany błąd + + + + QHostInfoAgent + + Host not found + Host nie znaleziony + + + Unknown address type + Nieznany typ adresu + + + Unknown error + Nieznany błąd + + + No host name given + Nie podano nazwy hosta + + + Invalid hostname + Niepoprawna nazwa hosta + + + + QHttp + + Connection refused + Połączenie odrzucone + + + Host %1 not found + Host %1 nie znaleziony + + + Wrong content length + Błędna długość zawartości + + + HTTP request failed + Komenda HTTP zakończona błędem + + + Host %1 found + Host %1 znaleziony + + + Host found + Host znaleziony + + + Connected to host %1 + Podłączony do hosta %1 + + + Connected to host + Podłączony do hosta + + + Connection to %1 closed + Połączenie do %1 zamknięte + + + Connection closed + Połączenie zakończone + + + Unknown error + Nieznany błąd + + + Request aborted + Komenda przerwana + + + No server set to connect to + Brak serwera do podłączenia + + + Server closed connection unexpectedly + Serwer niespodziewanie zakończył połączenie + + + Invalid HTTP response header + Niepoprawny nagłówek odpowiedzi HTTP + + + Unknown authentication method + Nieznana metoda autoryzacji + + + Invalid HTTP chunked body + Niepoprawne ciało HTTP + + + Error writing response to device + Błąd zapisywania odpowiedzi do urządzenia + + + Proxy authentication required + Wymagana autoryzacja pośrednika + + + Authentication required + Wymagana autoryzacja + + + Proxy requires authentication + Pośrednik wymaga autoryzacji + + + Host requires authentication + Host wymaga autoryzacji + + + Data corrupted + Dane uszkodzone + + + SSL handshake failed + Nawiązanie sesji SSL nie powiodło się + + + Unknown protocol specified + Podano nieznany protokół + + + Connection refused (or timed out) + Połączenie odrzucone (przekroczony czas połączenia) + + + HTTPS connection requested but SSL support not compiled in + Zażądano połączenia HTTPS lecz obsługa SSL nie jest wkompilowana + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + Nie odebrano odpowiedzi HTTP od pośrednika + + + Error parsing authentication request from proxy + Błąd parsowania żądania autoryzacji od pośrednika + + + Authentication required + Wymagana autoryzacja + + + Proxy denied connection + Pośrednik odmówił połączenia + + + Error communicating with HTTP proxy + Błąd podczas komunikacji z pośrednikiem HTTP + + + Proxy server not found + Nie znaleziono serwera pośredniczącego + + + Proxy connection refused + Odmowa połączenia z pośrednikiem + + + Proxy server connection timed out + Przekroczony czas połączenia do serwera pośredniczącego + + + Proxy connection closed prematurely + Przedwczesne zakończenie połączenia z pośrednikiem + + + + QIBaseDriver + + Error opening database + Błąd otwierania bazy danych + + + Could not start transaction + Nie można rozpocząć transakcji + + + Unable to commit transaction + Nie można dokonać transakcji + + + Unable to rollback transaction + Nie można wycofać transakcji + + + + QIBaseResult + + Unable to create BLOB + Nie można utworzyć obiektu typu BLOB + + + Unable to write BLOB + Nie można zapisać obiektu typu BLOB + + + Unable to open BLOB + Nie można otworzyć obiektu typu BLOB + + + Unable to read BLOB + Nie można odczytać obiektu typu BLOB + + + Could not find array + Nie można odnaleźć tablicy + + + Could not get array data + Nie można pobrać danych z tablicy + + + Could not get query info + Nie można pobrać informacji o zapytaniu + + + Could not start transaction + Nie można rozpocząć transakcji + + + Unable to commit transaction + Nie można dokonać transakcji + + + Could not allocate statement + Nie można zaallokować polecenia + + + Could not prepare statement + Nie można przygotować polecenia + + + Could not describe input statement + Nie można opisać polecenia wejściowego + + + Could not describe statement + Nie można opisać polecenia + + + Unable to close statement + Nie można zamknąć polecenia + + + Unable to execute query + Nie można wykonać zapytania + + + Could not fetch next item + Nie można pobrać kolejnego elementu + + + Could not get statement info + Nie można pobrać informacji o poleceniu + + + + QIODevice + + Permission denied + Brak dostępu + + + Too many open files + Zbyt wiele otwartych plików + + + No such file or directory + Brak pliku lub katalogu + + + No space left on device + Brak wolnego miejsca na urządzeniu + + + Unknown error + Nieznany błąd + + + + QInputContext + + XIM + XIM + + + FEP + FEP + + + XIM input method + Metoda wprowadzania XIM + + + Windows input method + Metoda wprowadzania Windows + + + Mac OS X input method + Metoda wprowadzania Mac OS X + + + S60 FEP input method + Metoda wprowadzania S60 FEP + + + + QInputDialog + + Enter a value: + Podaj wartość: + + + + QLibrary + + Could not mmap '%1': %2 + Nie można wykonać przypisania '%1': %2 + + + Plugin verification data mismatch in '%1' + Błąd podczas weryfikacji danych we wtyczce '%1' + + + Could not unmap '%1': %2 + Nie można usunąć przypisania '%1': %2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + Wtyczka '%1' używa niepoprawnej wersji biblioteki QT. (%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + Wtyczka '%1' używa niepoprawnej wersji biblioteki QT. Oczekiwano klucza "%2", uzyskano "%3" + + + Unknown error + Nieznany błąd + + + The shared library was not found. + Biblioteka współdzielona niedostępna. + + + The file '%1' is not a valid Qt plugin. + Plik "%1" nie jest poprawną wtyczką Qt. + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + Wtyczka "%1" używa innej wersji biblioteki Qt. (Nie można łączyć bibliotek zwykłych i debugowych.) + + + Cannot load library %1: %2 + Nie można załadować biblioteki %1: %2 + + + Cannot unload library %1: %2 + Nie można zwolnić biblioteki %1: %2 + + + Cannot resolve symbol "%1" in %2: %3 + Nie można zidentyfikować symbolu "%1" w %2: %3 + + + + QLineEdit + + Select All + Zaznacz wszystko + + + &Undo + &Cofnij + + + &Redo + &Przywróć + + + Cu&t + W&ytnij + + + &Copy + S&kopiuj + + + &Paste + &Wklej + + + Delete + Skasuj + + + + QLocalServer + + %1: Name error + %1: Błąd nazwy + + + %1: Permission denied + %1: Brak dostępu + + + %1: Address in use + %1: Adres użyty + + + %1: Unknown error %2 + %1: Nieznany błąd %2 + + + + QLocalSocket + + %1: Connection refused + %1: Odmowa połączenia + + + %1: Remote closed + %1: Drugi koniec odłączony + + + %1: Invalid name + %1: Niepoprawna nazwa + + + %1: Socket access error + %1: Błąd dostępu do gniazda + + + %1: Socket resource error + %1: Błąd zasobów gniazda + + + %1: Socket operation timed out + %1: Przekroczony czas operacji gniazda + + + %1: Datagram too large + %1: Za duży datagram + + + %1: Connection error + %1: Błąd połączenia + + + %1: The socket operation is not supported + %1: Operacja nie jest obsługiwana przez gniazdo + + + %1: Unknown error + %1: Nieznany błąd + + + %1: Unknown error %2 + %1: Nieznany błąd %2 + + + + QMYSQLDriver + + Unable to open database ' + Nie można otworzyć bazy danych ' + + + Unable to connect + Nie można nawiązać połączenia + + + Unable to begin transaction + Nie można rozpocząć transakcji + + + Unable to commit transaction + Nie można potwierdzić transakcji + + + Unable to rollback transaction + Nie można wycofać transakcji + + + + QMYSQLResult + + Unable to fetch data + Nie można pobrać danych + + + Unable to execute query + Nie można wykonać zapytania + + + Unable to store result + Nie można zachować wyników + + + Unable to prepare statement + Nie można przygotować polecenia + + + Unable to reset statement + Nie można skasować polecenia + + + Unable to bind value + Nie można powiązać wartości + + + Unable to execute statement + Nie można wykonać polecenia + + + Unable to bind outvalues + Nie można powiązać wartości zewnętrznych + + + Unable to store statement results + Nie można zachować wyników polecenia + + + Unable to execute next query + Nie można wykonać następnego zapytania + + + Unable to store next result + Nie można zachować następnego wyniku + + + + QMdiArea + + (Untitled) + (Nienazwany) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + Zamknij + + + Minimize + Zminimalizuj + + + Restore Down + Przywróć pod spód + + + &Restore + &Przywróć + + + &Move + Prze&nieś + + + &Size + &Rozmiar + + + Mi&nimize + Zmi&nimalizuj + + + Ma&ximize + Zma&ksymalizuj + + + Stay on &Top + Pozostaw na &wierzchu + + + &Close + &Zamknij + + + Maximize + Zmaksymalizuj + + + Unshade + Rozwiń + + + Shade + Zwiń + + + Restore + Przywróć + + + Help + Pomoc + + + Menu + Menu + + + - [%1] + - [%1] + + + + QMenu + + Close + Zamknij + + + Open + Otwórz + + + Execute + Wykonaj + + + + QMenuBar + + Actions + Akcje + + + + QMessageBox + + OK + OK + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <h3>Informacje o Qt</h3><p> Ten program używa Qt w wersji %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><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> + <p>Qt jest zestawem narzędzi programistycznych dedykowanym dla języka C++. Służy on do opracowywania aplikacji międzyplatformowych.</p><p>Qt umożliwia jednoźródłowe przenoszenie między systemami MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux i wszystkimi głównymi wersjami komercyjnymi systemu Unix. Środowisko Qt jest dostępne dla urządzeń wbudowanych opartych na systemie Linux ( Qt dla wbudowanego systemu Linux) oraz Windows CE.</p><p>Zestaw Qt jest dostępny w trzech różnych opcjach licencjonowania stworzonych w celu zadowolenia naszych różnych użytkowników.</p><p>Qt podlegający licencji zgodnie z naszą komercyjną umową licencyjną jest odpowiedni do opracowywania oprogramowań własnościowych/komercyjnych, dzięki czemu kod źródłowy nie jest udostępniany osobom trzecim. W przeciwnym razie zestaw Qt jest niezgodny z warunkami licencji GNU LGPL w wersji 2.1 lub GNU GPL w wersji 3.0.</p><p>Środowisko Qt objęte licencją GNU LGPL w wersji 2.1 nadaje się do tworzenia aplikacji Qt (własnościowych lub oprogramowań otwartych) tylko wtedy, gdy przestrzegane są warunki licencji GNU LGPL w wersji 2.1.</p><p>Qt objęty Powszechną Licencją Publiczną GNU w wersji 3.0 jest odpowiedni do opracowywania aplikacji QT, aby móc korzystać z aplikacji w połączeniu z oprogramowaniem podlegającym warunkom licencji GNU GPL w wersji 3.0 lub aby przestrzegać warunków licencji GNU GPL w wersji 3.0.</p><p>Więcej informacji na temat licencji Qt można znaleźć na stronie <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>.</p><p>Copyright (C) 2010 Nokia Corporation i/lub oddziały firmy.</p><p>Qt jest produktem firmy Nokia. Dodatkowe informacje znajdują się na stronie <a href="http://qt.nokia.com/">qt.nokia.com</a> </p> + + + About Qt + Informacje o Qt + + + Help + Pomoc + + + Show Details... + Pokaż szczegóły... + + + Hide Details... + Ukryj szczegóły... + + + + QMultiInputContext + + Select IM + Wybierz metodę wprowadzania + + + + QMultiInputContextPlugin + + Multiple input method switcher + Przełącznik metody wprowadzania + + + Multiple input method switcher that uses the context menu of the text widgets + Przełącznik metody wprowadzania, który w widżetach tekstowych używa podręcznego menu + + + + QNativeSocketEngine + + The remote host closed the connection + Zdalny host zakończył połączenie + + + Network operation timed out + Przekroczony czas operacji sieciowej + + + Out of resources + Zasoby wyczerpane + + + Unsupported socket operation + Nieobsługiwana operacja gniazda + + + Protocol type not supported + Nieobsługiwany typ protokołu + + + Invalid socket descriptor + Niepoprawny opis gniazda + + + Network unreachable + Sieć niedostępna + + + Permission denied + Brak dostępu + + + Connection timed out + Przekroczony czas połączenia + + + Connection refused + Połączenie odrzucone + + + The bound address is already in use + Adres jest aktualnie w użyciu + + + The address is not available + Adres nie jest dostępny + + + The address is protected + Adres jest zabezpieczony + + + Unable to send a message + Nie można wysłać wiadomości + + + Unable to receive a message + Nie można odebrać wiadomości + + + Unable to write + Nie można zapisać + + + Network error + Błąd sieci + + + Another socket is already listening on the same port + Inne gniazdo nasłuchuje już na tym porcie + + + Unable to initialize non-blocking socket + Nie można uruchomić gniazda w nieblokującym trybie + + + Unable to initialize broadcast socket + Nie można uruchomić gniazda rozsyłającego + + + Attempt to use IPv6 socket on a platform with no IPv6 support + Próba użycia IPv6 na platformie bez obsługi IPv6 + + + Host unreachable + Komputer niedostępny + + + Datagram was too large to send + Datagram za długi do wysłania + + + Operation on non-socket + Nieprawidłowa operacja na gnieździe + + + Unknown error + Nieznany błąd + + + The proxy type is invalid for this operation + Typ pośrednika nie jest poprawny dla tej operacji + + + + QNetworkAccessCacheBackend + + Error opening %1 + Błąd otwierania %1 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + Błąd w trakcie zapisywania do %1: %2 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + Żądanie otwarcia zdalnego pliku %1 + + + Error opening %1: %2 + Błąd otwierania %1: %2 + + + Write error writing to %1: %2 + Błąd w trakcie zapisywania do %1: %2 + + + Cannot open %1: Path is a directory + Nie można otworzyć %1: Ścieżka jest katalogiem + + + Read error reading from %1: %2 + Błąd w trakcie czytania z %1: %2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + Nie odnaleziono odpowiedniego pośrednika + + + Cannot open %1: is a directory + Nie można otworzyć %1: jest to katalog + + + Logging in to %1 failed: authentication required + Błąd podczas logowania do %1: wymagana autoryzacja + + + Error while downloading %1: %2 + Błąd podczas pobierania %1: %2 + + + Error while uploading %1: %2 + Błąd podczas wysyłania %1: %2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + Nie odnaleziono odpowiedniego pośrednika + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + Błąd podczas pobierania %1 - odpowiedź serwera: %2 + + + Protocol "%1" is unknown + Protokół "%1" nie jest znany + + + + QNetworkReplyImpl + + Operation canceled + Operacja anulowana + + + + QOCIDriver + + Unable to logon + Nie można się zalogować + + + Unable to initialize + QOCIDriver + Nie można dokonać inicjalizacji + + + Unable to begin transaction + Nie można rozpocząć transakcji + + + Unable to commit transaction + Nie można dokonać transakcji + + + Unable to rollback transaction + Nie można wycofać transakcji + + + + QOCIResult + + Unable to bind column for batch execute + Nie można powiązać kolumny dla wykonania zestawu poleceń + + + Unable to execute batch statement + Nie można wykonać polecenia wsadowego + + + Unable to goto next + Nie można przejść do kolejnego wiersza danych + + + Unable to alloc statement + Nie można przydzielić miejsca na polecenie + + + Unable to prepare statement + Nie można przygotować polecenia + + + Unable to get statement type + Nie można pobrać typu polecenia + + + Unable to bind value + Nie można powiązać wartości + + + Unable to execute statement + Nie można wykonać polecenia + + + + QODBCDriver + + Unable to connect + Nie można nawiązać połączenia + + + Unable to disable autocommit + Nie można wyłączyć trybu automatycznego dokonywania transakcji + + + Unable to commit transaction + Nie można potwierdzić transakcji + + + Unable to rollback transaction + Nie można wycofać transakcji + + + Unable to enable autocommit + Nie można włączyć trybu automatycznego dokonywania transakcji + + + Unable to connect - Driver doesn't support all functionality required + Nie można nawiązać połączenia - sterownik nie obsługuje całej potrzebnej funkcjonalności + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: Nie można ustawić 'SQL_CURSOR_STATIC' jako atrybutu polecenia. Proszę sprawdzić konfiguracje sterownika ODBC + + + Unable to execute statement + Nie można wykonać polecenia + + + Unable to fetch next + Nie można pobrać kolejnych danych + + + Unable to prepare statement + Nie można przygotować polecenia + + + Unable to bind variable + Nie można powiązać zmiennej + + + Unable to fetch last + Nie można pobrać ostatnich danych + + + Unable to fetch + Nie można pobrać + + + Unable to fetch first + Nie można pobrać pierwszych danych + + + Unable to fetch previous + Nie można pobrać poprzednich danych + + + + QObject + + Invalid hostname + Niepoprawna nazwa hosta + + + Operation not supported on %1 + Operacja nieobsługiwana na %1 + + + Invalid URI: %1 + Niepoprawny URI: %1 + + + Socket error on %1: %2 + Błąd gniazda na %1: %2 + + + Remote host closed the connection prematurely on %1 + Zdalny host przedwcześnie zakończył połączenie na %1 + + + No host name given + Nie podano nazwy hosta + + + + QPPDOptionsModel + + Name + Nazwa + + + Value + Wartość + + + + QPSQLDriver + + Unable to connect + Nie można nawiązać połączenia + + + Could not begin transaction + Nie można rozpocząć transakcji + + + Could not commit transaction + Nie można potwierdzić transakcji + + + Could not rollback transaction + Nie można wycofać transakcji + + + Unable to subscribe + Nie można wykonać subskrypcji + + + Unable to unsubscribe + Nie można zrezygnować z subskrypcji + + + + QPSQLResult + + Unable to create query + Nie można utworzyć zapytania + + + Unable to prepare statement + Nie można przygotować polecenia + + + + QPageSetupWidget + + Centimeters (cm) + Centymetry (cm) + + + Millimeters (mm) + Milimetry (mm) + + + Inches (in) + Cale (in) + + + Points (pt) + Punkty (pt) + + + Form + Formularz + + + Paper + Papier + + + Page size: + Rozmiar strony: + + + Width: + Szerokość: + + + Height: + Wysokość: + + + Paper source: + Źródło papieru: + + + Orientation + Położenie + + + Portrait + Portret + + + Landscape + Pejzaż + + + Reverse landscape + Odwrócony pejzaż + + + Reverse portrait + Odwrócony portret + + + Margins + Marginesy + + + top margin + Górny margines + + + left margin + Lewy margines + + + right margin + Prawy margines + + + bottom margin + Dolny margines + + + + QPluginLoader + + Unknown error + Nieznany błąd + + + The plugin was not loaded. + Wtyczka nie została załadowana. + + + + QPrintDialog + + locally connected + podłączony lokalnie + + + Aliases: %1 + Aliasy: %1 + + + unknown + nieznany + + + OK + OK + + + Print all + Drukuj wszystko + + + Print range + Drukuj zakres + + + A0 (841 x 1189 mm) + A0 (841 x 1189 mm) + + + A1 (594 x 841 mm) + A1 (594 x 841 mm) + + + A2 (420 x 594 mm) + A2 (420 x 594 mm) + + + A3 (297 x 420 mm) + A3 (297 x 420 mm) + + + A5 (148 x 210 mm) + A5 (148 x 210 mm) + + + A6 (105 x 148 mm) + A6 (105 x 148 mm) + + + A7 (74 x 105 mm) + A7 (74 x 105 mm) + + + A8 (52 x 74 mm) + A8 (52 x 74 mm) + + + A9 (37 x 52 mm) + A9 (37 x 52 mm) + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 mm) + + + B1 (707 x 1000 mm) + B1 (707 x 1000 mm) + + + B2 (500 x 707 mm) + B2 (500 x 707 mm) + + + B3 (353 x 500 mm) + B3 (353 x 500 mm) + + + B4 (250 x 353 mm) + B4 (250 x 353 mm) + + + B6 (125 x 176 mm) + B6 (125 x 176 mm) + + + B7 (88 x 125 mm) + B7 (88 x 125 mm) + + + B8 (62 x 88 mm) + B8 (62 x 88 mm) + + + B9 (44 x 62 mm) + B9 (44 x 62 mm) + + + B10 (31 x 44 mm) + B10 (31 x 44 mm) + + + C5E (163 x 229 mm) + C5E (163 x 229 mm) + + + DLE (110 x 220 mm) + DLE (110 x 220 mm) + + + Folio (210 x 330 mm) + Folio (210 x 330 mm) + + + Ledger (432 x 279 mm) + Ledger (432 x 279 mm) + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432 mm) + + + US Common #10 Envelope (105 x 241 mm) + US Common #10 Envelope (105 x 241 mm) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 mm, 8.26 x 11.7 cali) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 mm, 6.93 x 9.84 cali) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10 cali, 191 x 254 mm) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14 cali, 216 x 356 mm) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11 cali, 216 x 279 mm) + + + Print selection + Drukuj zaznaczone + + + Print + Drukowanie + + + Print To File ... + Drukuj do pliku ... + + + File %1 is not writable. +Please choose a different file name. + Plik %1 jest plikiem tylko do odczytu. +Proszę wybrać inną nazwę pliku. + + + %1 already exists. +Do you want to overwrite it? + %1 już istnieje. +Czy chcesz nadpisać? + + + File exists + Plik istnieje + + + <qt>Do you want to overwrite it?</qt> + <qt>Czy chcesz nadpisać?</qt> + + + %1 is a directory. +Please choose a different file name. + %1 jest katalogiem. +Proszę wybrać inną nazwę pliku. + + + The 'From' value cannot be greater than the 'To' value. + Wartość "od" nie może być większa od wartości "do". + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + Executive + + + Folio + Folio + + + Ledger + Ledger + + + Legal + Legal + + + Letter + Letter + + + Tabloid + Tabloid + + + US Common #10 Envelope + US Common #10 Envelope + + + Custom + Niestandardowy + + + &Options >> + &Opcje >> + + + &Options << + &Opcje << + + + Print to File (PDF) + Drukuj do pliku (PDF) + + + Print to File (Postscript) + Drukuj do pliku (Postscript) + + + Local file + Plik lokalny + + + Write %1 file + Zapisz %1 plik + + + &Print + Wy&drukuj + + + + QPrintPreviewDialog + + %1% + %1% + + + Print Preview + Podgląd wydruku + + + Next page + Następna strona + + + Previous page + Poprzednia strona + + + First page + Pierwsza strona + + + Last page + Ostatnia strona + + + Fit width + Dopasuj szerokość + + + Fit page + Dopasuj stronę + + + Zoom in + Powiększ + + + Zoom out + Pomniejsz + + + Portrait + Portret + + + Landscape + Pejzaż + + + Show single page + Pokaż pojedynczą stronę + + + Show facing pages + Pokaż sąsiednie strony + + + Show overview of all pages + Pokaż wszystkie strony + + + Print + Wydrukuj + + + Page setup + Ustawienia strony + + + Close + + + + Export to PDF + Wyeksportuj do PDF + + + Export to PostScript + Wyeksportuj do PostScript + + + Page Setup + Ustawienia strony + + + + QPrintPropertiesWidget + + Form + Forma + + + Page + Strona + + + Advanced + Zaawansowane + + + + QPrintSettingsOutput + + Form + Forma + + + Copies + Liczba kopii + + + Print range + Zakres wydruku + + + Print all + Drukuj wszystko + + + Pages from + Strony od + + + to + do + + + Selection + Wybrane strony + + + Output Settings + Ustawienia wyjściowe + + + Copies: + Kopie: + + + Collate + Parami + + + Reverse + Odwróć + + + Options + Opcje + + + Color Mode + Tryb koloru + + + Color + Kolor + + + Grayscale + Skala szarości + + + Duplex Printing + Drukowanie dupleksowe + + + None + Brak + + + Long side + Długa strona + + + Short side + Krótka strona + + + + QPrintWidget + + Form + Forma + + + Printer + Drukarka + + + &Name: + &Nazwa: + + + P&roperties + &Właściwości + + + Location: + Położenie: + + + Preview + Podgląd + + + Type: + Typ: + + + Output &file: + &Plik wyjściowy: + + + ... + ... + + + + QProcess + + Could not open input redirection for reading + Nie można otworzyć wejściowego przekierowania do odczytu + + + Could not open output redirection for writing + Nie można otworzyć wyjściowego przekierowania do zapisu + + + Resource error (fork failure): %1 + Błąd zasobów (błąd forkowania): %1 + + + Process operation timed out + Przekroczony czas operacji procesu + + + Error reading from process + Błąd odczytywania z procesu + + + Error writing to process + Błąd zapisywania do procesu + + + Process crashed + Wystąpił błąd w procesie - proces zakończony + + + No program defined + Nie zdefiniowano programu + + + Process failed to start: %1 + Nie można rozpocząć procesu: %1 + + + + QProgressDialog + + Cancel + Anuluj + + + + QPushButton + + Open + Otwórz + + + + QRadioButton + + Check + Zaznacz + + + + QRegExp + + no error occurred + nie pojawił się żaden błąd + + + disabled feature used + użyta funkcja została wyłączona + + + bad char class syntax + niepoprawna składnia klasy znakowej + + + bad lookahead syntax + niepoprawna składnia "lookahead" + + + bad repetition syntax + niepoprawna składnia powtórzenia + + + invalid octal value + niepoprawna wartość ósemkowa + + + missing left delim + brakujący lewy separator + + + unexpected end + nieoczekiwany koniec + + + met internal limit + napotkano wewnętrzne ograniczenie + + + invalid interval + Niepoprawny interwał + + + invalid category + Niepoprawna kategoria + + + + QSQLite2Driver + + Error opening database + Błąd otwierania bazy danych + + + Unable to begin transaction + Nie można rozpocząć transakcji + + + Unable to commit transaction + Nie można dokonać transakcji + + + Unable to rollback transaction + Nie można wycofać transakcji + + + + QSQLite2Result + + Unable to fetch results + Nie można pobrać wyników + + + Unable to execute statement + Nie można wykonać polecenia + + + + QSQLiteDriver + + Error opening database + Błąd otwierania bazy danych + + + Error closing database + Błąd zamykania bazy danych + + + Unable to begin transaction + Nie można rozpocząć transakcji + + + Unable to commit transaction + Nie można dokonać transakcji + + + Unable to rollback transaction + Nie można wycofać transakcji + + + + QSQLiteResult + + Unable to fetch row + Nie można pobrać wiersza danych + + + Unable to execute statement + Nie można wykonać polecenia + + + Unable to reset statement + Nie można skasować polecenia + + + Unable to bind parameters + Nie można powiązać parametrów + + + Parameter count mismatch + Niezgodna liczba parametrów + + + No query + Brak zapytania + + + + QScriptBreakpointsModel + + ID + Identyfikator + + + Location + Położenie + + + Condition + Warunek + + + Ignore-count + Licznik pominięć + + + Single-shot + ## + + + Hit-count + Licznik trafień + + + + QScriptBreakpointsWidget + + New + Nowy + + + Delete + Skasuj + + + + QScriptDebugger + + Go to Line + Przejdź do linii + + + Line: + Linia: + + + Interrupt + Przerwij + + + Shift+F5 + Shift+F5 + + + Continue + Kontynuuj + + + F5 + F5 + + + Step Into + Wskocz do wnętrza + + + F11 + F11 + + + Step Over + Przeskocz + + + F10 + F10 + + + Step Out + Wyskocz na zewnątrz + + + Shift+F11 + Shift+F11 + + + Run to Cursor + Uruchom do kursora + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + Uruchom do nowego skryptu + + + Toggle Breakpoint + Przełącz ustawienie pułapki + + + F9 + F9 + + + Clear Debug Output + Wyczyść wyjście debuggera + + + Clear Error Log + Wyczyść log z błędami + + + Clear Console + Wyczyść konsolę + + + &Find in Script... + &Znajdź w skrypcie... + + + Ctrl+F + Ctrl+F + + + Find &Next + Znajdź &następne + + + F3 + F3 + + + Find &Previous + Znajdź &poprzednie + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + Debuguj + + + + QScriptDebuggerCodeFinderWidget + + Close + Zamknij + + + Previous + Poprzednie + + + Next + Następne + + + Case Sensitive + Uwzględniaj wielkość liter + + + Whole words + Całe słowa + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Przeszukano od początku + + + + QScriptDebuggerLocalsModel + + Name + Nazwa + + + Value + Wartość + + + + QScriptDebuggerStackModel + + Level + Poziom + + + Name + Nazwa + + + Location + Położenie + + + + QScriptEdit + + Toggle Breakpoint + Przełącz ustawienie pułapki + + + Disable Breakpoint + Wyłącz pułapkę + + + Enable Breakpoint + Włącz pułapkę + + + Breakpoint Condition: + Warunek dla pułapki: + + + + QScriptEngineDebugger + + Loaded Scripts + Załadowane skrypty + + + Breakpoints + Pułapki + + + Stack + Stos + + + Locals + Zmienne lokalne + + + Console + Konsola + + + Debug Output + Wyjście debuggera + + + Error Log + Log z błędami + + + Search + Szukaj + + + View + Widok + + + Qt Script Debugger + Debugger Qt Script + + + + QScriptNewBreakpointWidget + + Close + Zamknij + + + + QScrollBar + + Scroll here + Przewiń tutaj + + + Left edge + Lewa krawędź + + + Top + Do góry + + + Right edge + Prawa krawędź + + + Bottom + W dół + + + Page left + Strona w lewo + + + Page up + Strona do góry + + + Page right + Strona w prawo + + + Page down + Strona w dół + + + Scroll left + Przewiń w lewo + + + Scroll up + Przewiń do góry + + + Scroll right + Przewiń w prawo + + + Scroll down + Przewiń w dół + + + Line up + Linia w górę + + + Position + Pozycja + + + Line down + Linia w dół + + + + QSharedMemory + + %1: create size is less then 0 + %1: rozmiar przy tworzeniu mniejszy od 0 + + + %1: unable to lock + %1: nie można zablokować + + + %1: unable to unlock + %1: nie można odblokować + + + %1: permission denied + %1: brak dostępu + + + %1: already exists + %1: już istnieje + + + %1: doesn't exists + %1: nie istnieje + + + %1: out of resources + %1: zasoby wyczerpane + + + %1: unknown error %2 + %1: nieznany błąd %2 + + + %1: key is empty + %1: klucz jest pusty + + + %1: ftok failed + %1: wystąpił błąd w funkcji ftok() + + + %1: unable to make key + %1: nie można utworzyć klucza + + + %1: doesn't exist + %1: nie istnieje + + + %1: UNIX key file doesn't exist + %1: unixowy plik z kluczem nie istnieje + + + %1: system-imposed size restrictions + %1: ograniczenia rozmiarów narzucone przez system + + + %1: not attached + %1: niedołączony + + + %1: invalid size + %1: niepoprawny rozmiar + + + %1: key error + %1: błąd klucza + + + %1: size query failed + %1: zapytanie o rozmiar nie powiodło się + + + %1: unable to set key on lock + %1: nie można ustawić klucza na zablokowanym segmencie pamięci współdzielonej + + + + QShortcut + + Space + Spacja + + + Esc + Esc + + + Tab + Tabulator + + + Backtab + Backtab + + + Backspace + Backspace + + + Return + Powrót + + + Enter + Enter + + + Ins + Ins + + + Del + Del + + + Pause + Pauza + + + Print + Wydrukuj + + + SysReq + SysReq + + + Home + Home + + + End + End + + + Left + Lewo + + + Up + Góra + + + Right + Prawo + + + Down + Dół + + + PgUp + PgUp + + + PgDown + PgDown + + + CapsLock + CapsLock + + + NumLock + NumLock + + + ScrollLock + ScrollLock + + + Menu + Menu + + + Help + Pomoc + + + Back + Back + + + Forward + Do przodu + + + Stop + Zatrzymaj + + + Refresh + Odśwież + + + Volume Down + Przycisz + + + Volume Mute + Wycisz + + + Volume Up + Zrób głośniej + + + Bass Boost + Wzmocnienie basów + + + Bass Up + Basy w górę + + + Bass Down + Basy w dół + + + Treble Up + Soprany w górę + + + Treble Down + Soprany w dół + + + Media Play + Odtwarzaj + + + Media Stop + Zatrzymaj + + + Media Previous + Poprzednia ścieżka + + + Media Next + Następna ścieżka + + + Media Record + Nagrywaj + + + Favorites + Ulubione + + + Search + Szukaj + + + Standby + Tryb oczekiwania + + + Open URL + Otwórz adres + + + Launch Mail + Uruchom program pocztowy + + + Launch Media + Uruchom przeglądarkę mediów + + + Launch (0) + Uruchom (0) + + + Launch (1) + Uruchom (1) + + + Launch (2) + Uruchom (2) + + + Launch (3) + Uruchom (3) + + + Launch (4) + Uruchom (4) + + + Launch (5) + Uruchom (5) + + + Launch (6) + Uruchom (6) + + + Launch (7) + Uruchom (7) + + + Launch (8) + Uruchom (8) + + + Launch (9) + Uruchom (9) + + + Launch (A) + Uruchom (A) + + + Launch (B) + Uruchom (B) + + + Launch (C) + Uruchom (C) + + + Launch (D) + Uruchom (D) + + + Launch (E) + Uruchom (E) + + + Launch (F) + Uruchom (F) + + + Monitor Brightness Up + Zwiększ jasność monitora + + + Monitor Brightness Down + Zmniejsz jasność monitora + + + Keyboard Light On/Off + Włącz/wyłącz podświetlenie klawiatury + + + Keyboard Brightness Up + Zwiększ jasność klawiatury + + + Keyboard Brightness Down + Zmniejsz jasność klawiatury + + + Power Off + Wyłączenie zasilania + + + Wake Up + ## + + + Eject + Wysuń + + + Screensaver + Wygaszacz ekranu + + + WWW + WWW + + + Sleep + ## + + + LightBulb + Żarówka + + + Shop + Sklep + + + History + Historia + + + Add Favorite + Dodaj do ulubionych + + + Hot Links + Popularne łącza + + + Adjust Brightness + Ustaw jasność + + + Finance + Finanse + + + Community + Społeczność + + + Audio Rewind + Przewijanie do tyłu + + + Back Forward + ## + + + Application Left + ## + + + Application Right + ## + + + Book + Książka + + + CD + CD + + + Calculator + Kalkulator + + + Clear + Wyczyść + + + Clear Grab + ## + + + Close + Zamknij + + + Copy + Skopiuj + + + Cut + Wytnij + + + Display + Wyświetlacz + + + DOS + DOS + + + Documents + Dokumenty + + + Spreadsheet + Arkusz kalkulacyjny + + + Browser + Przeglądarka + + + Game + Gra + + + Go + Przejdź + + + iTouch + iTouch + + + Logoff + Wyloguj + + + Market + Rynek + + + Meeting + Spotkanie + + + Keyboard Menu + Menu klawiatury + + + Menu PB + Menu PG + + + My Sites + Moje strony + + + News + Wiadomości + + + Home Office + ## + + + Option + Opcje + + + Paste + Wklej + + + Phone + Telefon + + + Reply + Odpowiedz + + + Reload + Przeładuj + + + Rotate Windows + Obróć okna + + + Rotation PB + Obrót PB + + + Rotation KB + Obrót KB + + + Save + Zachowaj + + + Send + Wyślij + + + Spellchecker + Funkcja sprawdzania pisowni + + + Split Screen + Podziel ekran + + + Support + Pomoc techniczna + + + Task Panel + Panel zadań + + + Terminal + Terminal + + + Tools + Narzędzia + + + Travel + Podróże + + + Video + Wideo + + + Word Processor + Edytor tekstów + + + XFer + XFer + + + Zoom In + Powiększ + + + Zoom Out + Pomniejsz + + + Away + ## + + + Messenger + Messenger + + + WebCam + WebCam + + + Mail Forward + Przesyłanie wiadomości + + + Pictures + Zdjęcia + + + Music + Muzyka + + + Battery + Bateria + + + Bluetooth + Bluetooth + + + Wireless + Bezprzewodowy + + + Ultra Wide Band + Ultraszerokie pasmo + + + Audio Forward + Przewijanie do przodu + + + Audio Repeat + Powtarzanie + + + Audio Random Play + Odtwarzanie losowe + + + Subtitle + Napisy + + + Audio Cycle Track + ## + + + Time + Czas + + + View + Widok + + + Top Menu + Menu główne + + + Suspend + Wstrzymaj + + + Hibernate + Hibernuj + + + Print Screen + Wydrukuj zawartość ekranu + + + Page Up + Strona w dół + + + Page Down + Strona do góry + + + Caps Lock + Caps Lock + + + Num Lock + Num Lock + + + Number Lock + Number Lock + + + Scroll Lock + Scroll Lock + + + Insert + Insert + + + Delete + Delete + + + Escape + Escape + + + System Request + Żądanie systemu + + + Select + Wybierz + + + Yes + Tak + + + No + Nie + + + Context1 + Kontekst1 + + + Context2 + Kontekst2 + + + Context3 + Kontekst3 + + + Context4 + Kontekst4 + + + Call + Wywołaj + + + Hangup + Zawieś + + + Flip + Odwróć + + + Ctrl + Ctrl + + + Shift + Shift + + + Alt + Alt + + + Meta + Meta + + + + + + + + + F%1 + F%1 + + + Home Page + Strona startowa + + + + QSlider + + Page left + Strona w lewo + + + Page up + Strona do góry + + + Position + Położenie + + + Page right + Strona w prawo + + + Page down + Strona w dół + + + + QSocks5SocketEngine + + Connection to proxy refused + Odmowa połączenia z pośrednikiem + + + Connection to proxy closed prematurely + Przedwczesne zakończenie połączenia z pośrednikiem + + + Proxy host not found + Nie odnaleziono hosta pośredniczącego + + + Connection to proxy timed out + Przekroczony czas połączenia do pośrednika + + + Proxy authentication failed + Autoryzacja pośrednika zakończona błędem + + + Proxy authentication failed: %1 + Autoryzacja pośrednika zakończona błędem: %1 + + + SOCKS version 5 protocol error + Błąd protokołu SOCKS wersji 5 + + + General SOCKSv5 server failure + Generalny błąd serwera SOCKS wersji 5 + + + Connection not allowed by SOCKSv5 server + Połączenie niedozwolone przez serwer SOCKS wersji 5 + + + TTL expired + TTL stracił ważność + + + SOCKSv5 command not supported + Nieobsługiwana komenda SOCKS wersji 5 + + + Address type not supported + Nieobsługiwany typ adresu + + + Unknown SOCKSv5 proxy error code 0x%1 + Nieznany kod błędu (0x%1) pośrednika SOCKS wersji 5 + + + Network operation timed out + Przekroczony czas operacji sieciowej + + + + QSoftKeyManager + + Ok + OK + + + Select + Wybierz + + + Done + Zrobione + + + Options + Opcje + + + Cancel + Anuluj + + + Exit + Wyjście + + + + QSpinBox + + More + Więcej + + + Less + Mniej + + + + QSql + + Delete + Skasuj + + + Delete this record? + Skasować ten rekord? + + + Yes + Tak + + + No + Nie + + + Insert + Wstaw + + + Update + Uaktualnij + + + Save edits? + Zachować zmiany? + + + Cancel + Anuluj + + + Confirm + Potwierdź + + + Cancel your edits? + Anulować zmiany? + + + + QSslSocket + + Unable to write data: %1 + + + + Unable to decrypt data: %1 + Nie można odszyfrować danych: %1 + + + Error while reading: %1 + Błąd podczas czytania: %1 + + + Error during SSL handshake: %1 + Błąd podczas nawiązania sesji SSL: %1 + + + Error creating SSL context (%1) + Błąd tworzenia kontekstu (%1) + + + Invalid or empty cipher list (%1) + Niepoprawna lub pusta lista szyfrów (%1) + + + Private key does not certify public key, %1 + Prywatny klucz nie uwiarygodnia publicznego, %1 + + + Error creating SSL session, %1 + Błąd tworzenia sesji SSL, %1 + + + Error creating SSL session: %1 + Błąd tworzenia sesji SSL: %1 + + + Cannot provide a certificate with no key, %1 + Nie można dostarczyć certyfikatu bez klucza, %1 + + + Error loading local certificate, %1 + Błąd ładowania lokalnego certyfikatu, %1 + + + Error loading private key, %1 + Błąd ładowania prywatnego klucza, %1 + + + No error + Brak błędu + + + The issuer certificate could not be found + Nie można odnaleźć wydawcy certyfikatu + + + The certificate signature could not be decrypted + Nie można odszyfrować podpisu certyfikatu + + + The public key in the certificate could not be read + Nie można odczytać publicznego klucza w certyfikacie + + + The signature of the certificate is invalid + Niepoprawny podpis certyfikatu + + + The certificate is not yet valid + Certyfikat nie jest jeszcze ważny + + + The certificate has expired + Certyfikat utracił ważność + + + The certificate's notBefore field contains an invalid time + Pole "notBefore" certyfikatu zawiera niepoprawną datę + + + The certificate's notAfter field contains an invalid time + Pole "notAfter" certyfikatu zawiera niepoprawną datę + + + The certificate is self-signed, and untrusted + Certyfikat z podpisem własnym, niezaufany + + + The root certificate of the certificate chain is self-signed, and untrusted + Główny certyfikat łańcucha certyfikatów ma własny podpis i jest niezaufany + + + The issuer certificate of a locally looked up certificate could not be found + Nie można znaleźć certyfikatu wydawcy wyszukanego lokalnie + + + No certificates could be verified + Nie można zweryfikować certyfikatów + + + One of the CA certificates is invalid + Jeden z certyfikatów urzędu certyfikacji jest nieprawidłowy + + + The basicConstraints path length parameter has been exceeded + Długość ścieżki określona w podstawowych warunkach ograniczających została przekroczona + + + The supplied certificate is unsuitable for this purpose + Dostarczony certyfikat jest nieodpowiedni do tego celu + + + The root CA certificate is not trusted for this purpose + Główny certyfikat urzędu certyfikacji nie jest zaufany do tego celu + + + The root CA certificate is marked to reject the specified purpose + Główny certyfikat urzędu certyfikacji jest wyznaczony do odrzucania określonego celu + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + Certyfikat wydawcy obecnego kandydata został odrzucony, ponieważ nazwa podmiotu nie odpowiadała nazwie wydawcy obecnego certyfikatu + + + 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 + Certyfikat wydawcy obecnego kandydata został odrzucony, ponieważ nazwa wydawcy i przedstawiony numer seryjny nie odpowiadały identyfikatorowi klucza urzędu certyfikacji obecnego certyfikatu + + + The peer did not present any certificate + Element równorzędny nie przedstawił żadnego certyfikatu + + + The host name did not match any of the valid hosts for this certificate + Nazwa hosta nie odpowiadała żadnemu z prawidłowych hostów tego certyfikatu + + + Unknown error + + + + + QStateMachine + + Missing initial state in compound state '%1' + + + + Missing default state in history state '%1' + + + + No common ancestor for targets and source of transition from state '%1' + + + + Unknown error + + + + + QSystemSemaphore + + %1: does not exist + + + + %1: out of resources + + + + %1: permission denied + + + + %1: already exists + + + + %1: unknown error %2 + + + + + QTDSDriver + + Unable to open connection + + + + Unable to use database + + + + + QTabBar + + Scroll Left + + + + Scroll Right + + + + + QTcpServer + + Operation on socket is not supported + + + + + QTextControl + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + Copy &Link Location + + + + &Paste + + + + Delete + + + + Select All + + + + + QToolButton + + Press + + + + Open + + + + + QUdpSocket + + This platform does not support IPv6 + Ta platforma nie obsługuje IPv6 + + + + QUndoGroup + + Undo + Cofnij + + + Redo + Przywróć + + + + QUndoModel + + <empty> + <pusty> + + + + QUndoStack + + Undo + Cofnij + + + Redo + Przywróć + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM znacznik od prawej do lewej + + + RLM Right-to-left mark + RLM Znacznik od prawej do lewej + + + ZWJ Zero width joiner + ZWJ Łącznik zerowej długości + + + ZWNJ Zero width non-joiner + ZWNJ Rozdzielnik zerowej długości + + + ZWSP Zero width space + ZWSP Przerwa zerowej długości + + + LRE Start of left-to-right embedding + LRE Początek osadzania od lewej do prawej + + + RLE Start of right-to-left embedding + RLE Początek osadzania od prawej do lewej + + + LRO Start of left-to-right override + LRO Początek nadpisania od lewej do prawej + + + RLO Start of right-to-left override + RLO Początek nadpisania od prawej do lewej + + + PDF Pop directional formatting + PDF Formatowanie kierunkowe pop + + + Insert Unicode control character + Wstaw znak kontroli Unicode + + + + QWebFrame + + Request cancelled + Prośba anulowana + + + Request blocked + Prośba zablokowana + + + Cannot show URL + Nie można pokazać URL + + + Frame load interrupted by policy change + Ładowanie ramki przerwane przez zmianę strategii + + + Cannot show mimetype + Nie można pokazać typu MIME + + + File does not exist + Plik nie istnieje + + + + QWebPage + + Submit + default label for Submit buttons in forms on web pages + Wyślij + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + Wyślij + + + Reset + default label for Reset buttons in forms on web pages + Wyczyść + + + Choose File + title for file button used in HTML forms + Wybierz plik + + + No file selected + text to display in file button used in HTML forms when no file is selected + Nie zaznaczono pliku + + + Open in New Window + Open in New Window context menu item + Otwórz w nowym oknie + + + Save Link... + Download Linked File context menu item + Zachowaj odsyłacz... + + + Copy Link + Copy Link context menu item + Skopiuj odsyłacz + + + Open Image + Open Image in New Window context menu item + Otwórz obrazek + + + Save Image + Download Image context menu item + Zachowaj obrazek + + + Copy Image + Copy Link context menu item + Skopiuj obrazek + + + Open Frame + Open Frame in New Window context menu item + Otwórz ramkę + + + Copy + Copy context menu item + Skopiuj + + + Go Back + Back context menu item + Wróć + + + Go Forward + Forward context menu item + Idź dalej + + + Stop + Stop context menu item + Zatrzymaj + + + Reload + Reload context menu item + Przeładuj + + + Cut + Cut context menu item + Wytnij + + + Paste + Paste context menu item + Wklej + + + No Guesses Found + No Guesses Found context menu item + Nie odnaleziono podpowiedzi + + + Ignore + Ignore Spelling context menu item + Zignoruj + + + Add To Dictionary + Learn Spelling context menu item + Dodaj do słownika + + + Search The Web + Search The Web context menu item + Wyszukaj w sieci + + + Look Up In Dictionary + Look Up in Dictionary context menu item + Poszukaj w słowniku + + + Open Link + Open Link context menu item + Otwórz odsyłacz + + + Ignore + Ignore Grammar context menu item + Zignoruj + + + Spelling + Spelling and Grammar context sub-menu item + Pisownia + + + Show Spelling and Grammar + menu item title + Pokaż pisownię i gramatykę + + + Hide Spelling and Grammar + menu item title + Schowaj pisownię i gramatykę + + + Check Spelling + Check spelling context menu item + Sprawdź pisownię + + + Check Spelling While Typing + Check spelling while typing context menu item + Sprawdzaj pisownię podczas pisania + + + Check Grammar With Spelling + Check grammar with spelling context menu item + Sprawdzaj gramatykę wraz z pisownią + + + Fonts + Font context sub-menu item + Czcionki + + + Bold + Bold context menu item + Pogrubiony + + + Italic + Italic context menu item + Kursywa + + + Underline + Underline context menu item + Podkreślenie + + + Outline + Outline context menu item + Kontur + + + Direction + Writing direction context sub-menu item + Kierunek + + + Text Direction + Text direction context sub-menu item + Kierunek tekstu + + + Default + Default writing direction context menu item + Domyślny + + + Left to Right + Left to Right context menu item + Z lewej na prawą + + + Right to Left + Right to Left context menu item + Z prawej na lewą + + + Loading... + Media controller status message when the media is loading + Ładowanie... + + + Live Broadcast + Media controller status message when watching a live broadcast + Transmisja na żywo + + + Audio Element + Media controller element + Element dźwiękowy + + + Video Element + Media controller element + Element wideo + + + Mute Button + Media controller element + Przycisk wyłączania głosu + + + Unmute Button + Media controller element + Przycisk włączania głosu + + + Play Button + Media controller element + Przycisk odtwarzania + + + Pause Button + Media controller element + Przycisk pauzy + + + Slider + Media controller element + Suwak + + + Slider Thumb + Media controller element + Uchwyt suwaka + + + Rewind Button + Media controller element + Przycisk przewijania + + + Return to Real-time Button + Media controller element + Przycisk powrotu do czasu rzeczywistego + + + Elapsed Time + Media controller element + Czas który upłynął + + + Remaining Time + Media controller element + Czas który pozostał + + + Status Display + Media controller element + Wyświetlacz stanu + + + Fullscreen Button + Media controller element + Przycisk trybu pełnoekranowego + + + Seek Forward Button + Media controller element + Przycisk przeszukiwania do przodu + + + Seek Back Button + Media controller element + Przycisk przeszukiwania do tyłu + + + Audio element playback controls and status display + Media controller element + Kontrolki odtwarzania dźwięku i wyświetlacz stanu + + + Video element playback controls and status display + Media controller element + Kontrolki odtwarzania wideo i wyświetlacz stanu + + + Mute audio tracks + Media controller element + Wyłącz ścieżkę dźwiękową + + + Unmute audio tracks + Media controller element + Włącz ścieżkę dźwiękową + + + Begin playback + Media controller element + Rozpocznij odtwarzanie + + + Pause playback + Media controller element + Wstrzymaj odtwarzanie + + + Movie time scrubber + Media controller element + Suwak czasu + + + Movie time scrubber thumb + Media controller element + Uchwyt suwaka czasu + + + Rewind movie + Media controller element + Przewiń film + + + Return streaming movie to real-time + Media controller element + Przywróć przesyłanie filmu do czasu rzeczywistego + + + Current movie time + Media controller element + Czas bieżącego filmu + + + Remaining movie time + Media controller element + Czas do końca filmu + + + Current movie status + Media controller element + Stan bieżącego filmu + + + Play movie in full-screen mode + Media controller element + Odtwarzaj film w trybie pełnoekranowym + + + Seek quickly back + Media controller element + Przeszukaj szybko do tyłu + + + Seek quickly forward + Media controller element + Przeszukaj szybko do przodu + + + Indefinite time + Media time description + Nieokreślony czas + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1 dni %2 godzin %3 minut %4 sekund + + + %1 hours %2 minutes %3 seconds + Media time description + %1 godzin %2 minut %3 sekund + + + %1 minutes %2 seconds + Media time description + %1 minut %2 sekund + + + %1 seconds + Media time description + %1 sekund + + + Inspect + Inspect Element context menu item + Zwiedzaj + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + Brak ostatnich wyszukiwań + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + Ostatnie wyszukiwania + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + Wyczyść ostatnie wyszukiwania + + + Unknown + Unknown filesize FTP directory listing item + Nieznany + + + Web Inspector - %2 + Wizytator sieciowy - %2 + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 piksli) + + + Bad HTTP request + Niepoprawna komenda HTTP + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + To jest indeks wyszukiwawczy. Podaj słowa do wyszukania: + + + Scroll here + Przewiń tutaj + + + Left edge + Lewa krawędź + + + Top + Do góry + + + Right edge + Prawa krawędź + + + Bottom + W dół + + + Page left + Strona w lewo + + + Page up + Strona do góry + + + Page right + Strona w prawo + + + Page down + Strona w dół + + + Scroll left + Przewiń w lewo + + + Scroll up + Przewiń do góry + + + Scroll right + Przewiń w prawo + + + Scroll down + Przewiń w dół + + + %n file(s) + number of chosen file + + %n plik + %n pliki + %n plików + + + + JavaScript Alert - %1 + Ostrzeżenie JavaScript - %1 + + + JavaScript Confirm - %1 + Potwierdzenie JavaScript - %1 + + + JavaScript Prompt - %1 + Zachęta JavaScript - %1 + + + JavaScript Problem - %1 + Problem JavaScript - %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + Skrypt na tej stronie nie działa poprawnie. Czy chcesz przerwać ten skrypt? + + + Move the cursor to the next character + Przesuń kursor do następnego znaku + + + Move the cursor to the previous character + Przesuń kursor do poprzedniego znaku + + + Move the cursor to the next word + Przesuń kursor do następnego słowa + + + Move the cursor to the previous word + Przesuń kursor do poprzedniego słowa + + + Move the cursor to the next line + Przesuń kursor do następnej linii + + + Move the cursor to the previous line + Przesuń kursor do poprzedniej linii + + + Move the cursor to the start of the line + Przesuń kursor do początku linii + + + Move the cursor to the end of the line + Przesuń kursor do końca linii + + + Move the cursor to the start of the block + Przesuń kursor do początku bloku + + + Move the cursor to the end of the block + Przesuń kursor do końca bloku + + + Move the cursor to the start of the document + Przesuń kursor do początku dokumentu + + + Move the cursor to the end of the document + Przesuń kursor do końca dokumentu + + + Select all + Zaznacz wszystko + + + Select to the next character + Zaznacz do następnego znaku + + + Select to the previous character + Zaznacz do poprzedniego znaku + + + Select to the next word + Zaznacz do następnego słowa + + + Select to the previous word + Zaznacz do poprzedniego słowa + + + Select to the next line + Zaznacz do następnej linii + + + Select to the previous line + Zaznacz do poprzedniej linii + + + Select to the start of the line + Zaznacz do początku linii + + + Select to the end of the line + Zaznacz do końca linii + + + Select to the start of the block + Zaznacz do początku bloku + + + Select to the end of the block + Zaznacz do końca bloku + + + Select to the start of the document + Zaznacz do początku dokumentu + + + Select to the end of the document + Zaznacz do końca dokumentu + + + Delete to the start of the word + Skasuj do początku słowa + + + Delete to the end of the word + Skasuj do końca słowa + + + Insert a new paragraph + Wstaw nowy paragraf + + + Insert a new line + Wstaw nową linię + + + Paste and Match Style + Wklej i dopasuj styl + + + Remove formatting + Usuń formatowanie + + + Strikethrough + Przekreślenie + + + Subscript + Indeks dolny + + + Superscript + Indeks górny + + + Insert Bulleted List + Wstaw listę wypunktowaną + + + Insert Numbered List + Wstaw listę ponumerowaną + + + Indent + Zwiększ wcięcie + + + Outdent + Zmniejsz wcięcie + + + Center + Wyśrodkuj + + + Justify + Wyjustuj + + + Align Left + Wyrównaj do lewej + + + Align Right + Wyrównaj do prawej + + + + QWhatsThisAction + + What's This? + Co to jest? + + + + QWidget + + * + * + + + + QWizard + + Cancel + Anuluj + + + Help + Pomoc + + + < &Back + < &Wstecz + + + &Finish + &Zakończ + + + &Help + &Pomoc + + + Go Back + Wróć + + + Continue + Kontynuuj + + + Commit + Dokonaj + + + Done + Wykonano + + + &Next + &Dalej + + + &Next > + &Dalej > + + + + QWorkspace + + &Restore + &Przywróć + + + &Move + &Przenieś + + + &Size + &Rozmiar + + + Mi&nimize + Zmi&nimalizuj + + + Ma&ximize + Zma&ksymalizuj + + + &Close + &Zamknij + + + Stay on &Top + Pozostaw na &wierzchu + + + Minimize + Zminimalizuj + + + Restore Down + Przywróć pod spód + + + Close + Zamknij + + + Sh&ade + &Zwiń + + + %1 - [%2] + %1 - [%2] + + + &Unshade + R&ozwiń + + + + QXml + + no error occurred + nie pojawił się żaden błąd + + + error triggered by consumer + błąd wywołany przez konsumenta + + + unexpected end of file + nieoczekiwany koniec pliku + + + more than one document type definition + więcej niż jedna definicja typu dokumentu + + + error occurred while parsing element + wystąpił błąd podczas parsowania elementu + + + tag mismatch + niepoprawny tag + + + error occurred while parsing content + wystąpił błąd podczas parsowania zawartości + + + unexpected character + nieoczekiwany znak + + + invalid name for processing instruction + niepoprawna nazwa dla instrukcji przetwarzającej + + + version expected while reading the XML declaration + oczekiwana wersja podczas czytania deklaracji XML + + + wrong value for standalone declaration + błędna wartość dla deklaracji "standalone" + + + error occurred while parsing document type definition + wystąpił błąd podczas parsowania typu definicji dokumentu + + + letter is expected + oczekiwana jest litera + + + error occurred while parsing comment + wystąpił błąd podczas parsowania komentarza + + + error occurred while parsing reference + wystąpił błąd podczas parsowania odwołania + + + internal general entity reference not allowed in DTD + odwołanie do jednostki ogólnej wewnętrznej nie dozwolone w DTD + + + external parsed general entity reference not allowed in attribute value + odwołanie do jednostki ogólnej zewnętrznie przetworzonej nie dozwolone dla wartości atrybutu + + + external parsed general entity reference not allowed in DTD + odwołanie do jednostki ogólnej zewnętrznie przetworzonej nie dozwolone w DTD + + + unparsed entity reference in wrong context + odwołanie do jednostki nieprzetworzonej w złym kontekście + + + recursive entities + jednostki rekurencyjne + + + error in the text declaration of an external entity + błąd w deklaracji "text" zewnętrznej jednostki + + + encoding declaration or standalone declaration expected while reading the XML declaration + oczekiwano deklaracji "encoding" lub "standalone" podczas odczytywania deklaracji XML + + + standalone declaration expected while reading the XML declaration + deklaracja "standalone" oczekiwana podczas czytania deklaracji XML + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + Ostrzeżenie w %1, wiersz %2, kolumna %3: %4 + + + Warning in %1: %2 + Ostrzeżenie w %1: %2 + + + Unknown location + Nieznana lokalizacja + + + Error %1 in %2, at line %3, column %4: %5 + Błąd %1 w %2, wiersz %3, kolumna %4: %5 + + + Error %1 in %2: %3 + Błąd %1 w %2: %3 + + + + QXmlStream + + Extra content at end of document. + Dodatkowa treść na końcu dokumentu. + + + Invalid entity value. + Niepoprawna wartość jednostki. + + + Invalid XML character. + Niepoprawny znak XML. + + + Sequence ']]>' not allowed in content. + Ciąg ']]>' niedozwolony w treści. + + + Namespace prefix '%1' not declared + Przedrostek przestrzeni nazw '%1' nie został zadeklarowany + + + Attribute redefined. + Atrybut zdefiniowany wielokrotnie. + + + Unexpected character '%1' in public id literal. + Nieoczekiwany znak '%1' w publicznej stałej znakowej. + + + Invalid XML version string. + Niepoprawna wersja XML. + + + Unsupported XML version. + Nieobsługiwana wersja XML. + + + %1 is an invalid encoding name. + %1 jest niepoprawną nazwą kodowania. + + + Encoding %1 is unsupported + Kodowanie %1 jest nieobsługiwane + + + Standalone accepts only yes or no. + Tylko wartości "tak" lub "nie" są akceptowane przez "standalone". + + + Invalid attribute in XML declaration. + Niepoprawny atrybut w deklaracji XML. + + + Premature end of document. + Przedwczesne zakończenie dokumentu. + + + Invalid document. + Niepoprawny dokument. + + + Expected + Oczekiwano + + + , but got ' + , ale otrzymano ' + + + Unexpected ' + Nieoczekiwany ' + + + Expected character data. + Oczekiwana dana znakowa. + + + Recursive entity detected. + Wykryto jednostkę rekurencyjną. + + + Start tag expected. + Oczekiwano tagu start. + + + XML declaration not at start of document. + Deklaracja XML nie jest na początku dokumentu. + + + NDATA in parameter entity declaration. + NDATA w deklaracji parametru obiektu. + + + %1 is an invalid processing instruction name. + %1 jest niepoprawną nazwą instrukcji przetwarzającej. + + + Invalid processing instruction name. + Niepoprawna nazwa instrukcji przetwarzającej. + + + Illegal namespace declaration. + Niepoprawna deklaracja przestrzeni nazw. + + + Invalid XML name. + Niepoprawna nazwa XML. + + + Opening and ending tag mismatch. + Niezgodne tagi początku i końca. + + + Reference to unparsed entity '%1'. + Odwołanie do nieprzetworzonej jednostki '%1'. + + + Entity '%1' not declared. + Jednostka '%1' nie zadeklarowana. + + + Reference to external entity '%1' in attribute value. + Odwołanie do zewnętrznej jednostki '%1' jako wartość atrybutu. + + + Invalid character reference. + Niepoprawny znak odwołania. + + + Encountered incorrectly encoded content. + Natrafiono na niepoprawnie zakodowaną treść. + + + The standalone pseudo attribute must appear after the encoding. + Pseudo atrybut "standalone" musi pojawić się po "encoding". + + + %1 is an invalid PUBLIC identifier. + %1 jest niepoprawnym publicznym identyfikatorem. + + + + QtXmlPatterns + + At least one component must be present. + Przynajmniej jeden komponent musi być obecny. + + + %1 is not a valid value of type %2. + %1 nie jest poprawną wartością dla typu %2. + + + When casting to %1 from %2, the source value cannot be %3. + W rzutowaniu %1 na %2 wartość źródłowa nie może być %3. + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Efektywna wartość boolowska (EBV) nie może być obliczona dla sekwencji zawierającej dwie lub więcej wartości atomowe. + + + The data of a processing instruction cannot contain the string %1 + Dane instrukcji przetwarzania nie mogą zawierać ciągu %1 + + + %1 is an invalid %2 + %1 jest niepoprawnym %2 + + + %1 is not a valid XML 1.0 character. + %1 nie jest poprawnym znakiem XML 1.0. + + + %1 was called. + Wywołano %1. + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + W ciągu zastępczym, po %1 musi następować przynajmniej jedna cyfra + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + W ciągu zastępczym, %1 może być użyte tylko do zabezpieczenia samej siebie lub %2, nigdy %3 + + + %1 matches newline characters + %1 dopasowało znak nowej linii + + + Matches are case insensitive + Dopasowania uwzględniają wielkość liter + + + %1 is an invalid regular expression pattern: %2 + %1 jest niepoprawnym wzorcem wyrażenia regularnego: %2 + + + It will not be possible to retrieve %1. + Nie będzie można odzyskać %1. + + + The default collection is undefined + Domyślna kolekcja jest niezdefiniowana + + + %1 cannot be retrieved + + + + The item %1 did not match the required type %2. + Element %1 nie został dopasowany do wymaganego typu %2. + + + %1 is an unknown schema type. + %1 jest nieznanym typem schematu. + + + A template with name %1 has already been declared. + Szablon o nazwie %1 został już zadeklarowany. + + + Only one %1 declaration can occur in the query prolog. + Tylko jedna deklaracja %1 może się pojawić w prologu zapytania. + + + The initialization of variable %1 depends on itself + Inicjalizacja zmiennej %1 zależy od niej samej + + + The variable %1 is unused + Zmienna %1 jest nieużywana + + + Version %1 is not supported. The supported XQuery version is 1.0. + Wersja %1 nie jest obsługiwana. Obsługiwaną wersją XQuery jest wersja 1.0. + + + No function with signature %1 is available + Żadna funkcja w postaci %1 nie jest dostępna + + + It is not possible to redeclare prefix %1. + Nie jest możliwe ponowne zadeklarowanie przedrostka %1. + + + Prefix %1 is already declared in the prolog. + Przedrostek %1 jest już zadeklarowany w prologu. + + + The name of an option must have a prefix. There is no default namespace for options. + Nazwa opcji musi posiadać przedrostek. Nie istnieje domyślna przestrzeń nazw dla opcji. + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + Cecha "Import schematu" nie jest obsługiwana, dlatego deklaracje %1 nie mogą pojawić. + + + The target namespace of a %1 cannot be empty. + Docelowa przestrzeń nazw dla %1 nie może być pusta. + + + The module import feature is not supported + Cecha "Import modułu" nie jest obsługiwana + + + 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 + Przestrzeń nazw dla funkcji zdefiniowanej przez użytkownika w module bibliotecznym musi odpowiadać przestrzeni nazw modułu. Powinna to być %1 zamiast %2 + + + A function already exists with the signature %1. + Funkcja w postaci %1 już istnieje. + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + Zewnętrzne funkcje nie są obsługiwane. Wszystkie obsługiwane funkcje mogą być używane bezpośrednio, bez ich uprzedniego deklarowania jako zewnętrzne + + + The %1-axis is unsupported in XQuery + Oś %1 nie jest obsługiwana w XQuery + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + Przestrzeń nazw URI nie może być pustym ciągiem w powiązaniu z przedrostkiem, %1. + + + %1 is an invalid namespace URI. + %1 jest niepoprawną przestrzenią nazw URI. + + + It is not possible to bind to the prefix %1 + Nie jest możliwe powiązanie z przedrostkiem %1 + + + Two namespace declaration attributes have the same name: %1. + Atrybuty deklaracji przestrzeni nazw mają tą samą nazwę: %1. + + + The namespace URI must be a constant and cannot use enclosed expressions. + Przestrzeń nazw URI nie może być stałą i nie może używać zawartych w niej wyrażeń. + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 nie jest wewnątrz zakresu deklaracji atrybutów. Zwróć uwagę że importowanie schematów nie jest obsługiwane. + + + empty + pusty + + + zero or one + zero lub jeden + + + exactly one + dokładnie jeden + + + one or more + jeden lub więcej + + + zero or more + zero lub więcej + + + The focus is undefined. + Focus jest niezdefiniowany. + + + An attribute by name %1 has already been created. + Atrybut o nazwie %1 został już utworzony. + + + Network timeout. + Przekroczony czas połączenia. + + + Element %1 can't be serialized because it appears outside the document element. + Element %1 nie może być zserializowany ponieważ pojawił się poza elementem "document". + + + Year %1 is invalid because it begins with %2. + Rok %1 jest niepoprawny ponieważ rozpoczyna się: %2. + + + Day %1 is outside the range %2..%3. + Dzień %1 jest poza zakresem %2..%3. + + + Month %1 is outside the range %2..%3. + Miesiąc %1 jest poza zakresem %2..%3. + + + Overflow: Can't represent date %1. + Przepełnienie: Nie można wyrazić daty %1. + + + Day %1 is invalid for month %2. + Dzień %1 jest niepoprawny dla miesiąca %2. + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + Czas 24:%1:%2:%3 jest niepoprawny. Godzina jest 24, ale minuty, sekundy i milisekundy nie są równocześnie zerami; + + + Time %1:%2:%3.%4 is invalid. + Czas %1:%2:%3.%4 jest niepoprawny. + + + Overflow: Date can't be represented. + Przepełnienie: Data nie może być wyrażona. + + + At least one time component must appear after the %1-delimiter. + Przynajmniej jeden komponent musi wystąpić po nawiasie %1. + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + Dzielenie wartości typu %1 przez %2 (typ nienumeryczny) jest niedozwolone. + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + Dzielenie wartości typu %1 przez %2 lub %3 (plus lub minus zero) jest niedozwolone. + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + Mnożenie wartości typu %1 przez %2 lub %3 (plus lub minus nieskończoność) jest niedozwolone. + + + A value of type %1 cannot have an Effective Boolean Value. + Wartość typu %1 nie może posiadać efektywnej wartości boolowskiej (EBV). + + + Value %1 of type %2 exceeds maximum (%3). + Wartość %1 typu %2 przekracza maksimum (%3). + + + Value %1 of type %2 is below minimum (%3). + Wartość %1 typu %2 jest poniżej minimum (%3). + + + A value of type %1 must contain an even number of digits. The value %2 does not. + Wartość typu %1 musi zawierać parzystą liczbę cyfr. Wartość %2 nie zawiera. + + + %1 is not valid as a value of type %2. + Wartość %1 nie jest poprawna jako wartość typu %2. + + + Operator %1 cannot be used on type %2. + Operator %1 nie może być użyty dla typu %2. + + + Operator %1 cannot be used on atomic values of type %2 and %3. + Operator %1 nie może być użyty dla atomowych wartości typu %2 i %3. + + + The namespace URI in the name for a computed attribute cannot be %1. + Przestrzeń nazw URI nie może być %1 w nazwie dla obliczonego atrybutu. + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + Nazwa dla wyliczonego atrybutu nie może zawierać przestrzeni nazw URI %1 z lokalną nazwą %2. + + + Type error in cast, expected %1, received %2. + Błąd typów w rzutowaniu: spodziewano się %1, otrzymano %2. + + + 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. + Podczas rzutowania na %1 lub na typ pochodny, wartość źródłowa musi być tego samego typu lub musi być zapisem tekstowym. Typ %2 nie jest dozwolony. + + + A comment cannot contain %1 + Komentarz nie może zawierać %1 + + + A comment cannot end with a %1. + Komentarz nie może kończyć się: %1. + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + Węzeł "attribute" nie może być podelementem węzła "document". Dlatego atrybut %1 jest w złym miejscu. + + + A library module cannot be evaluated directly. It must be imported from a main module. + Moduł biblioteki nie może być bezpośrednio oceniony. On musi być zaimportowany z głównego modułu. + + + No template by name %1 exists. + Szablon o nazwie %1 nie istnieje. + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + Wartość typu %1 nie może być predykatem. Predykat musi być typu liczbowego lub Efektywną Wartość Logiczną. + + + A positional predicate must evaluate to a single numeric value. + Wynikiem predykatu pozycyjnego musi być pojedyncza wartość liczbowa. + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + Docelowa nazwa w instrukcji przetwarzania nie może być %1 w żadnej kombinacji wielkich i małych liter. Dlatego nazwa %2 jest niepoprawna. + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 nie jest poprawną nazwą docelową w instrukcji przetwarzania. Nazwa musi być wartością %2, np. %3. + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + Ostatni krok w ścieżce musi zawierać albo węzły albo wartości atomowe. Nie może zawierać obu jednocześnie. + + + No namespace binding exists for the prefix %1 + Żadna przestrzeń nazw nie jest powiązana z przedrostkiem %1 + + + No namespace binding exists for the prefix %1 in %2 + Żadna przestrzeń nazw nie jest powiązana z przedrostkiem %1 w %2 + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + Pierwszy argument w %1 nie może być typu %2. Musi on być typu liczbowego: xs:yearMonthDuration lub xs:dayTimeDuration. + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + Pierwszy argument w %1 nie może być typu %2. Musi on być typu: %3, %4 lub %5. + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + Drugi argument w %1 nie może być typu %2. Musi on być typu: %3, %4 lub %5. + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + Jeśli oba argumenty mają przesunięcia strefowe, muszą one być takie same. %1 i %2 nie są takie same. + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + Po %1 musi następować %2 lub %3, lecz nie na końcu zastępczego ciągu. + + + %1 and %2 match the start and end of a line. + + + + Whitespace characters are removed, except when they appear in character classes + Spacje są usuwane z wyjątkiem kiedy pojawią się w klasach znakowych + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 jest niepoprawną flagą dla wyrażeń regularnych. Poprawnymi flagami są: + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + Jeśli pierwszy argument jest pustą sekwencją lub zerowej długości ciągiem (przy braku przestrzeni nazw), przedrostek nie może wystąpić. Podano przedrostek %1. + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + Znormalizowana forma %1 nie jest obsługiwana. Obsługiwanymi formami są: %2, %3, %4 i %5 oraz pusta forma (brak normalizacji). + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + Przesunięcie strefowe musi być w zakresie %1..%2 włącznie. %3 jest poza tym zakresem. + + + Required cardinality is %1; got cardinality %2. + Wymagana liczność wynosi %1; otrzymano %2. + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + Enkodowanie %1 jest niepoprawne. Może ono zawierać jedynie znaki alfabetu łacińskiego, nie może zawierać spacji i musi być dopasowane do wyrażenia regularnego %2. + + + The keyword %1 cannot occur with any other mode name. + Słowo kluczowe %1 nie może wystąpić z inną nazwą trybu. + + + No variable with name %1 exists + Zmienna o nazwie %1 nie istnieje + + + The value of attribute %1 must be of type %2, which %3 isn't. + Wartość atrybutu %1 musi być typu %2, którym nie jest %3. + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + Przedrostek %1 nie może być powiązany. Jest on domyślnie powiązany z przestrzenią nazw %2. + + + A variable with name %1 has already been declared. + Zmienna o nazwie %1 została już zadeklarowana. + + + No value is available for the external variable with name %1. + Brak wartości dla zewnętrznej zmiennej o nazwie %1. + + + A stylesheet function must have a prefixed name. + Funkcja arkusza stylu musi zawierać nazwę z przedrostkiem. + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + Przestrzeń nazw %1 jest zarezerwowana, dlatego funkcje zdefiniowane przez użytkownika nie mogą jej użyć. Spróbuj predefiniowany przedrostek %2, który istnieje w takich przypadkach. + + + An argument with name %1 has already been declared. Every argument name must be unique. + Argument o nazwie %1 został już zadeklarowany. Każda nazwa argumentu musi być unikatowa. + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + Gdy funkcja %1 jest wykorzystana do dopasowania wewnątrz wzorca, jej argument musi być referencją do zmiennej lub napisem. + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + We wzorze XSL-T pierwszy argument w funkcji %1 musi być stałą znakową podczas dopasowywania. + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + We wzorze XSL-T pierwszy argument w funkcji %1 musi być stałą znakową lub nazwą zmiennej podczas dopasowywania. + + + In an XSL-T pattern, function %1 cannot have a third argument. + We wzorze XSL-T funkcja %1 nie może zawierać trzeciego argumentu. + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + We wzorze XSL-T tylko funkcje %1 i %2 mogą być użyte do dopasowania, zaś funkcja %3 nie. + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + We wzorze XSL-T tylko osie %2 i %3 mogą być użyte, zaś oś %1 nie. + + + %1 is an invalid template mode name. + %1 nie jest poprawną nazwa trybu szablonu. + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + Nazwa zmiennej powiązanej w wyrażeniu "for" musi być inna od zmiennej pozycjonującej. W związku z tym dwie zmienne o nazwie %1 kolidują ze sobą. + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + Cecha "Walidacja schematu" nie jest obsługiwana. Dlatego też wyrażenia %1 nie mogą być użyte. + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + Wyrażenia "pragma" nie są obsługiwane. Dlatego musi wystąpić wyrażenie zastępcze + + + Each name of a template parameter must be unique; %1 is duplicated. + Każda nazwa parametru szablonu musi być unikatowa; %1 się powtarza. + + + No function with name %1 is available. + Żadna funkcja o nazwie %1 nie jest dostępna. + + + %1 is not a valid numeric literal. + %1 nie jest poprawnym zapisem liczbowym. + + + W3C XML Schema identity constraint selector + Selektor narzucenia niepowtarzalności W3C XML Schema + + + W3C XML Schema identity constraint field + Pole narzucenia niepowtarzalności W3C XML Schema + + + A construct was encountered which is disallowed in the current language(%1). + Wystąpiła konstrukcja która jest niedozwolona w bieżącym języku (%1). + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + Przestrzeń nazw %1 może być jedynie powiązana z %2 (w przeciwnym wypadku jest ona domyślnie zadeklarowana). + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + Przedrostek %1 może być jedynie powiązany z %2 (w przeciwnym wypadku jest on domyślnie zadeklarowany). + + + An attribute with name %1 has already appeared on this element. + Atrybut o nazwie %1 już się pojawił w tym elemencie. + + + A direct element constructor is not well-formed. %1 is ended with %2. + Konstruktor elementu bezpośredniego nie jest dobrze sformatowany. %1 jest zakończony %2. + + + The name %1 does not refer to any schema type. + Nazwa %1 nie odpowiada żadnemu typowi schematu. + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 jest typem złożonym. Rzutowanie na typy złożone nie jest możliwe. Jednakże rzutowanie na typy atomowe np.: %2 jest dozwolone. + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 nie jest typem atomowym. Możliwe jest rzutowanie tylko na typy atomowe. + + + %1 is not a valid name for a processing-instruction. + %1 nie jest poprawną nazwą dla instrukcji przetwarzającej. + + + The name of an extension expression must be in a namespace. + Nazwa dodatkowego wyrażenia musi znajdować sie w przestrzeni nazw. + + + Required type is %1, but %2 was found. + Odnaleziono typ %2, lecz wymaganym typem jest %1. + + + Promoting %1 to %2 may cause loss of precision. + Przekształcenie %1 do %2 może spowodować utratę precyzji. + + + It's not possible to add attributes after any other kind of node. + Dodanie atrybutu poza węzłami nie jest możliwe. + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Obsługiwane jest jedynie "Unicode Codepoint Collation" (%1), %2 nie jest obsługiwane. + + + Integer division (%1) by zero (%2) is undefined. + Dzielenie w dziedzinie liczb całkowitych (%1) przez zero (%2) jest niezdefiniowane. + + + Division (%1) by zero (%2) is undefined. + Dzielenie (%1) przez zero (%2) jest niezdefiniowane. + + + Modulus division (%1) by zero (%2) is undefined. + Dzielenie modulo (%1) przez zero (%2) jest niezdefiniowane. + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 przyjmuje co najwyżej %n argument. %2 jest dlatego niepoprawne. + %1 przyjmuje co najwyżej %n argumenty. %2 jest dlatego niepoprawne. + %1 przyjmuje co najwyżej %n argumentów. %2 jest dlatego niepoprawne. + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 wymaga przynajmniej %n argumentu. %2 jest dlatego niepoprawne. + %1 wymaga przynajmniej %n argumentów. %2 jest dlatego niepoprawne. + %1 wymaga przynajmniej %n argumentów. %2 jest dlatego niepoprawne. + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + Głównym węzłem drugiego argumentu w funkcji %1 musi być węzeł "document". %2 nie jest węzłem "document". + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + Przestrzeń nazw dla funkcji zdefiniowanej przez użytkownika nie może być pusta (spróbuj predefiniowany przedrostek %1, który stworzono specjalnie do takich sytuacji) + + + A default namespace declaration must occur before function, variable, and option declarations. + Domyślna deklaracja przestrzeni nazw musi pojawić się przed deklaracjami funkcji, zmiennych i opcji. + + + Namespace declarations must occur before function, variable, and option declarations. + Deklaracje przestrzeni nazw muszą pojawić się przed deklaracjami funkcji, zmiennych i opcji. + + + Module imports must occur before function, variable, and option declarations. + Importy modułów muszą pojawić się przed deklaracjami funkcji, zmiennych i opcji. + + + %1 is not a whole number of minutes. + %1 nie jest całkowitą liczbą minut. + + + Attribute %1 can't be serialized because it appears at the top level. + Atrybut %1 nie może być zserializowany ponieważ pojawił się na najwyższym poziomie. + + + %1 is an unsupported encoding. + Nieobsługiwane kodowanie %1. + + + %1 contains octets which are disallowed in the requested encoding %2. + + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + Kod %1 który pojawił się w %2 i który używa kodowania %3 jest niepoprawnym znakiem XML. + + + Ambiguous rule match. + Dopasowano niejednoznaczną regułę. + + + In a namespace constructor, the value for a namespace cannot be an empty string. + W konstruktorze przestrzeni nazw wartość przestrzeni nazw nie może być pustym ciągiem. + + + The prefix must be a valid %1, which %2 is not. + Przedrostek musi być poprawnym %1, którym %2 nie jest. + + + The prefix %1 cannot be bound. + Przedrostek %1 nie może być powiązany. + + + Only the prefix %1 can be bound to %2 and vice versa. + Tylko przedrostek %1 może być powiązany z %2 i vice versa. + + + The parameter %1 is required, but no corresponding %2 is supplied. + Wymagany jest parametr %1 lecz żaden odpowiadający mu %2 nie został dostarczony. + + + The parameter %1 is passed, but no corresponding %2 exists. + Przekazany jest parametr %1 lecz żaden odpowiadający mu %2 nie istnieje. + + + The URI cannot have a fragment + URI nie może posiadać fragmentu + + + Element %1 is not allowed at this location. + Element %1 jest niedozwolony w tym miejscu. + + + Text nodes are not allowed at this location. + Węzły tekstowe są niedozwolone w tym miejscu. + + + Parse error: %1 + Błąd parsowania: %1 + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + Wartość atrybutu wersji XSL-T musi być typu %1, którym %2 nie jest. + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + Przetwarzanie arkusza XSL-T w wersji 1.0 przez procesor w wersji 2.0. + + + Unknown XSL-T attribute %1. + Nieznany atrybut %1 XSL-T. + + + Attribute %1 and %2 are mutually exclusive. + Atrybuty %1 i %2 wzajemnie się wykluczającą. + + + In a simplified stylesheet module, attribute %1 must be present. + W uproszczonym module arkuszu stylu musi wystąpić atrybut %1. + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + Jeśli element %1 nie posiada atrybutu %2, nie może on również posiadać atrybutu %3 ani %4. + + + Element %1 must have at least one of the attributes %2 or %3. + Element %1 musi posiadać przynajmniej jeden z atrybutów: %2 lub %3. + + + At least one mode must be specified in the %1-attribute on element %2. + Przynajmniej jeden tryb musi być podany w atrybucie %1 elementu %2. + + + Element %1 must come last. + Element %1 musi wystąpić jako ostatni. + + + At least one %1-element must occur before %2. + Przynajmniej jeden element %1 musi wystąpić przed %2. + + + Only one %1-element can appear. + Może wystąpić tylko jeden element %1. + + + At least one %1-element must occur inside %2. + Przynajmniej jeden element %1 musi wystąpić wewnątrz %2. + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + Kiedy atrybut %1 występuje w %2 konstruktor sekwencyjny nie może być użyty. + + + Element %1 must have either a %2-attribute or a sequence constructor. + Element %1 musi posiadać albo atrybut %2 albo sekwencyjny konstruktor. + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + Kiedy wymagany jest parametr, domyślna wartość nie może być dostarczona przez atrybut %1 ani przez sekwencyjny konstruktor. + + + Element %1 cannot have children. + Element %1 nie może posiadać potomków. + + + Element %1 cannot have a sequence constructor. + Element %1 nie może posiadać sekwencyjnego konstruktora. + + + The attribute %1 cannot appear on %2, when it is a child of %3. + Atrybut %1 nie może wystąpić w %2 kiedy jest on potomkiem %3. + + + A parameter in a function cannot be declared to be a tunnel. + Parametr funkcji nie może być zadeklarowany jako tunelowy. + + + This processor is not Schema-aware and therefore %1 cannot be used. + Procesor nie obsługuje schematów, więc %1 nie może zostać użyte. + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + Elementy arkusza stylu najwyższego poziomu muszą być w niezerowej przestrzeni nazw, którą %1 nie jest. + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + Wartością atrybutu %1 w elemencie %2 musi być %3 albo %4, lecz nie %5. + + + Attribute %1 cannot have the value %2. + Atrybut %1 nie może posiadać wartości %2. + + + The attribute %1 can only appear on the first %2 element. + Atrybut %1 może wystąpić jedynie w pierwszym elemencie %2. + + + At least one %1 element must appear as child of %2. + Przynajmniej jeden element %1 musi wystąpić jako potomek %2. + + + %1 has inheritance loop in its base type %2. + %1 ma pętlę w dziedziczeniu w jego podstawowym typie %2. + + + Circular inheritance of base type %1. + Cykliczne dziedziczenie podstawowego typu %1. + + + Circular inheritance of union %1. + Cykliczne dziedziczenie unii %1. + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + Nie można wywieść %1 z %2 ograniczając go ponieważ jest on zdefiniowany jako końcowy. + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + Nie można wywieść %1 z %2 rozszerzając go ponieważ jest on zdefiniowany jako końcowy. + + + Base type of simple type %1 cannot be complex type %2. + Typ podstawowy dla typu prostego %1 nie może być typem złożonym %2. + + + Simple type %1 cannot have direct base type %2. + Typ prosty %1 nie może mieć bezpośredniego typu podstawowego %2. + + + Simple type %1 is not allowed to have base type %2. + Typ prosty %1 nie może mieć typu podstawowego %2. + + + Simple type %1 can only have simple atomic type as base type. + Typem podstawowym typu prostego %1 może być tylko typ atomowy. + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + Typ prosty %1 nie może wywodzić się z %2 ponieważ ten ostatni jest zdefiniowany jako końcowy. + + + Variety of item type of %1 must be either atomic or union. + Typem elementów listy %1 musi być albo typ atomowy albo unia. + + + Variety of member types of %1 must be atomic. + Typy składników %1 muszą być atomowe. + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + Nie można wywieść %1 z %2 poprzez listę ponieważ jest to zdefiniowane ostatecznie w typie podstawowym. + + + Simple type %1 is only allowed to have %2 facet. + Typ prosty %1 może jedynie posiadać aspekt %2. + + + Base type of simple type %1 must have variety of type list. + Typ podstawowy dla typu prostego %1 musi być listą typów. + + + Base type of simple type %1 has defined derivation by restriction as final. + Typ podstawowy dla typu prostego %1 ma zdefiniowane wywodzenie poprzez ograniczenie jako końcowe. + + + Item type of base type does not match item type of %1. + Typ elementów listy typu podstawowego nie pasuje do typu elementów listy %1. + + + Simple type %1 contains not allowed facet type %2. + Typ prosty %1 posiada niedozwolony aspekt %2. + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + Nie można wywieść %1 z %2 poprzez unię ponieważ jest to zdefiniowane ostatecznie w typie podstawowym. + + + %1 is not allowed to have any facets. + %1 nie może posiadać żadnych aspektów. + + + Base type %1 of simple type %2 must have variety of union. + Typ podstawowy %1 dla typu prostego %2 musi być unią. + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + Typ podstawowy %1 dla typu prostego %2 nie może posiadać ograniczenia dla atrybutu %3. + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + Typ %1 składnika nie może być wywiedziony z typu %2 który jest typem składnika %3 typu podstawowego %4. + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + Metodą wywodzenia z %1 musi być rozszerzenie ponieważ typ podstawowy %2 jest typem prostym. + + + Complex type %1 has duplicated element %2 in its content model. + Typ złożony %1 posiada powielony element %2 w jego modelu zawartości. + + + Complex type %1 has non-deterministic content. + Typ złożony %1 posiada nieokreśloną zawartość. + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + Atrybuty typu złożonego %1 nie są poprawnym rozszerzeniem atrybutów typu podstawowego %2: %3. + + + Content model of complex type %1 is not a valid extension of content model of %2. + Model zawartości typu złożonego %1 nie jest poprawnym rozszerzeniem modelu zawartości %2. + + + Complex type %1 must have simple content. + Typ złożony %1 musi mieć prostą zawartość. + + + Complex type %1 must have the same simple type as its base class %2. + Typ złożony %1 musi posiadać ten sam prosty typ jaki posiada jego klasa podstawowa %2. + + + Complex type %1 cannot be derived from base type %2%3. + Typ złożony %1 nie może być wywiedziony z typu %2%3. + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + Atrybuty typu złożonego %1 nie są poprawnym ograniczeniem atrybutów typu podstawowego %2: %3. + + + Complex type %1 with simple content cannot be derived from complex base type %2. + Typ złożony %1 z prostą zawartością nie może być wywiedziony z podstawowego typu złożonego %2. + + + Item type of simple type %1 cannot be a complex type. + Typ elementów listy w prostym typie %1 nie może być typem złożonym. + + + Member type of simple type %1 cannot be a complex type. + Typ składnika typu prostego %1 nie może być typem złożonym. + + + %1 is not allowed to have a member type with the same name as itself. + %1 nie może posiadać typu składnika o tej samej nazwie jaką on sam posiada. + + + %1 facet collides with %2 facet. + + + + %1 facet must have the same value as %2 facet of base type. + Aspekt %1 musi mieć tą samą wartość jaką ma aspekt %2 typu podstawowego. + + + %1 facet must be equal or greater than %2 facet of base type. + Wartość aspektu %1 musi większa od lub równa wartości aspektu %2 typu podstawowego. + + + %1 facet must be less than or equal to %2 facet of base type. + Wartość aspektu %1 musi być mniejsza od lub równa wartości aspektu %2 typu podstawowego. + + + %1 facet contains invalid regular expression + Aspekt %1 zawiera niepoprawne wyrażenie regularne + + + Unknown notation %1 used in %2 facet. + Nieznany zapis %1 użyty w aspekcie %2. + + + %1 facet contains invalid value %2: %3. + Aspekt %1 zawiera niepoprawną wartość %2: %3. + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + + %1 facet cannot be %2 if %3 facet of base type is %4. + + + + %1 facet must be less than or equal to %2 facet. + Wartość aspektu %1 musi być mniejsza od lub równa wartości aspektu %2. + + + %1 facet must be less than %2 facet of base type. + Wartość aspektu %1 musi być mniejsza od wartości aspektu %2 typu podstawowego. + + + %1 facet and %2 facet cannot appear together. + + + + %1 facet must be greater than %2 facet of base type. + Wartość aspektu %1 musi być większa od wartości aspektu %2 typu podstawowego. + + + %1 facet must be less than %2 facet. + Wartość aspektu %1 musi być mniejsza od wartości aspektu %2. + + + %1 facet must be greater than or equal to %2 facet of base type. + Wartość aspektu %1 musi być większa od lub równa wartości aspektu %2 typu podstawowego. + + + Simple type contains not allowed facet %1. + Typ prosty zawiera niedozwolony aspekt %1. + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + + Only %1 and %2 facets are allowed when derived by union. + Dozwolone są jedynie aspekty %1 i %2 podczas wywodzenia z unii. + + + %1 contains %2 facet with invalid data: %3. + + + + Attribute group %1 contains attribute %2 twice. + Grupa atrybutów %1 zawiera dwukrotnie atrybut %2. + + + Attribute group %1 contains two different attributes that both have types derived from %2. + Grupa atrybutów %1 zawiera dwa różne atrybuty których typy są wywiedzione z %2. + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + Grupa atrybutów %1 zawiera atrybut %2 który ma ograniczenie wartości ale typ wywodzi się z %3. + + + Complex type %1 contains attribute %2 twice. + Typ złożony %1 zawiera atrybut %2 dwukrotnie. + + + Complex type %1 contains two different attributes that both have types derived from %2. + Typ złożony %1 zawiera dwa różne atrybuty których typy są wywiedzione z %2. + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + Typ złożony %1 zawiera atrybut %2 który ma ograniczenie wartości ale typ wywodzi się z %3. + + + Element %1 is not allowed to have a value constraint if its base type is complex. + Element %1 nie może zawierać ograniczenia wartości gdy jego typ podstawowy jest złożony. + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + Element %1 nie może zawierać ograniczenia wartości gdy jego typ jest wywiedziony z %2. + + + Value constraint of element %1 is not of elements type: %2. + Ograniczenie wartości elementu %1 nie jest typu: %2. + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + Element %1 nie może przynależeć do grupy zastępującej ponieważ nie jest on elementem globalnym. + + + Type of element %1 cannot be derived from type of substitution group affiliation. + Typ elementu %1 nie może być wywiedziony z typu przynależnego do grupy zastępującej. + + + Value constraint of attribute %1 is not of attributes type: %2. + Ograniczenie wartości atrybutu %1 nie jest typu: %2. + + + Attribute %1 has value constraint but has type derived from %2. + Atrybut %1 posiada ograniczenie wartości lecz jego typ wywodzi się z %2. + + + %1 attribute in derived complex type must be %2 like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + Atrybut %1 w wywiedzionym typie złożonym musi zawierać ograniczenie wartości %2 jak w typie podstawowym. + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + Atrybut %1 w wywiedzionym typie złożonym musi zawierać te same ograniczenie wartości %2 jak w typie podstawowym. + + + Attribute %1 in derived complex type must have %2 value constraint. + Atrybut %1 w wywiedzionym typie złożonym musi zawierać ograniczenie wartości %2. + + + processContent of base wildcard must be weaker than derived wildcard. + "processContent" podstawowego dżokera musi być słabszy od wywiedzionego dżokera. + + + Element %1 exists twice with different types. + Istnieją dwa elementy %1 o różnych typach. + + + Particle contains non-deterministic wildcards. + Element zawiera nieokreślone dżokery. + + + Base attribute %1 is required but derived attribute is not. + Wymagany jest bazowy atrybut %1, wywiedziony zaś nie. + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + Typ wywiedzionego atrybutu %1 nie może być poprawnie wywiedziony z typu podstawowego atrybutu. + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + Ograniczenie wartości wywiedzionego atrybutu %1 nie pasuje do ograniczenia wartości podstawowego atrybutu. + + + Derived attribute %1 does not exist in the base definition. + Wywiedziony atrybut %1 nie istnieje w podstawowej definicji. + + + Derived attribute %1 does not match the wildcard in the base definition. + Wywiedziony atrybut %1 nie pasuje do dżokera w podstawowej definicji. + + + Base attribute %1 is required but missing in derived definition. + Brak wymaganego bazowego atrybutu %1 w wywiedzionej definicji. + + + Derived definition contains an %1 element that does not exists in the base definition + Wywiedziona definicja zawiera element %1 który nie istnieje w definicji podstawowej + + + Derived wildcard is not a subset of the base wildcard. + Wywiedziony dżoker nie jest podzbiorem podstawowego dżokera. + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + %1 wywiedzionego dżokera nie jest poprawnym ograniczeniem %2 podstawowego dżokera + + + Attribute %1 from base type is missing in derived type. + Brak atrybutu %1 typu bazowego w wywiedzionej definicji. + + + Type of derived attribute %1 differs from type of base attribute. + Typ wywiedzionego atrybutu %1 różni się od typu podstawowego atrybutu. + + + Base definition contains an %1 element that is missing in the derived definition + Podstawowa definicja zawiera element %1 którego brakuje w wywiedzionej definicji + + + %1 references unknown %2 or %3 element %4. + %1 odwołuje się do nieznanego elementu %2 lub %3: %4. + + + %1 references identity constraint %2 that is no %3 or %4 element. + %1 odwołuje się do narzucenia niepowtarzalności %2 które nie jest elementem %3 ani %4. + + + %1 has a different number of fields from the identity constraint %2 that it references. + %1 posiada inna liczbę pól od narzucenia niepowtarzalności %2 które się do niego odwołuje. + + + Base type %1 of %2 element cannot be resolved. + Nie można rozwiązać typu podstawowego %1 elementu %2. + + + Item type %1 of %2 element cannot be resolved. + Nie można rozwiązać typu elementów listy %1 w elemencie %2. + + + Member type %1 of %2 element cannot be resolved. + Nie można rozwiązać typu %1 składnika elementu %2. + + + Type %1 of %2 element cannot be resolved. + Nie można rozwiązać typu %1 elementu %2. + + + Base type %1 of complex type cannot be resolved. + Nie można rozwiązać typu podstawowego %1 dla typu złożonego. + + + %1 cannot have complex base type that has a %2. + + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + Model zawartości typu złożonego %1 posiada element %2 więc nie może być on wywiedziony poprzez rozszerzenie niepustego typu. + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + Typ złożony %1 nie może być wywiedziony z %2 poprzez rozszerzenie ponieważ ten ostatni zawiera element %3 w jego modelu zawartości. + + + Type of %1 element must be a simple type, %2 is not. + Typem elementu %1 musi być typ prosty, %2 nim nie jest. + + + Substitution group %1 of %2 element cannot be resolved. + Nie można rozwiązać grupy zastępującej %1 elementu %2. + + + Substitution group %1 has circular definition. + Grupa zastępująca %1 posiada cykliczną definicję. + + + Duplicated element names %1 in %2 element. + Powielona nazwa elementu %1 w elemencie %2. + + + Reference %1 of %2 element cannot be resolved. + Nie można rozwiązać odwołania %1 do elementu %2. + + + Circular group reference for %1. + Cykliczne odwołanie do grupy dla %1. + + + %1 element is not allowed in this scope + + + + %1 element cannot have %2 attribute with value other than %3. + + + + %1 element cannot have %2 attribute with value other than %3 or %4. + + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + Atrybut %1 lub %2 odwołania %3 nie pasuje do deklaracji atrybutu %4. + + + Attribute group %1 has circular reference. + Grupa atrybutów %1 posiada cykliczne odwołanie. + + + %1 attribute in %2 must have %3 use like in base type %4. + + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + Atrybut dżokera %1 nie jest poprawnym ograniczeniem atrybutu dżokera typu podstawowego %2. + + + %1 has attribute wildcard but its base type %2 has not. + %1 posiada atrybut dżokera lecz jego typ podstawowy %2 go nie posiada. + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + Nie można wyrazić unii atrybutu dżokera typu %1 i atrybutu dżokera jego typu podstawowego %2. + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + Aspekt "enumeration" posiada niepoprawną zawartość: {%1} nie jest wartością typu %2. + + + Namespace prefix of qualified name %1 is not defined. + Przedrostek przestrzeni nazw występujący w pełnej nazwie %1 nie jest zdefiniowany. + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + + Empty particle cannot be derived from non-empty particle. + Pusty element nie może być wywiedziony z niepustego elementu. + + + Derived particle is missing element %1. + Brak elementu %1 w wywiedzionym elemencie. + + + Derived element %1 is missing value constraint as defined in base particle. + Brak ograniczenia wartości w wywiedzionym elemencie %1 takiego jak w podstawowym elemencie. + + + Derived element %1 has weaker value constraint than base particle. + Wywiedziony element %1 posiada słabsze ograniczenie wartości niż element podstawowy. + + + Fixed value constraint of element %1 differs from value constraint in base particle. + Ograniczenie stałej wartości elementu %1 różni się od ograniczenia wartości w podstawowym elemencie. + + + Derived element %1 cannot be nillable as base element is not nillable. + Wywiedziony element %1 może być zerowalny ponieważ element podstawowy nie jest zerowalny. + + + Block constraints of derived element %1 must not be more weaker than in the base element. + Ograniczenia blokujące dla wywiedzionego elementu %1 nie mogą być słabsze od ograniczeń w elemencie podstawowym. + + + Simple type of derived element %1 cannot be validly derived from base element. + Typ prosty w elemencie wywiedzionym %1 nie może być poprawnie wywiedziony z elementu podstawowego. + + + Complex type of derived element %1 cannot be validly derived from base element. + Typ złożony w elemencie wywiedzionym %1 nie może być poprawnie wywiedziony z elementu podstawowego. + + + Element %1 is missing in derived particle. + Brak elementu %1 w wywiedzionym elemencie. + + + Element %1 does not match namespace constraint of wildcard in base particle. + Element %1 nie pasuje do ograniczenia przestrzeni nazw dżokera w elemencie podstawowym. + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + Dżoker w wywiedzionym elemencie nie jest poprawnym podzbiorem dżokera w elemencie podstawowym. + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + "processContent" dżokera w wywiedzionym elemencie jest słabszy od dżokera w podstawowym elemencie. + + + Derived particle allows content that is not allowed in the base particle. + Wywiedziony element pozwala na zawartość która jest niedozwolona w podstawowym elemencie. + + + Can not process unknown element %1, expected elements are: %2. + Nie można przetworzyć nieznanego elementu %1, spodziewanymi elementami są: %2. + + + Element %1 is not allowed in this scope, possible elements are: %2. + Element %1 jest niedozwolony w tym zakresie, możliwymi elementami są: %2. + + + Child element is missing in that scope, possible child elements are: %1. + Brak podelementu w tym zakresie, możliwymi podelementami są: %1. + + + Document is not a XML schema. + Dokument nie jest schematem XML. + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + + %1 attribute of %2 element contains invalid content: {%3}. + + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + Docelowa przestrzeń nazw %1 załączonego schematu jest różna od docelowej przestrzeni nazw %2 która jest zdefiniowana w schemacie załączającym. + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + Docelowa przestrzeń nazw %1 zaimportowanego schematu jest różna od docelowej przestrzeni nazw %2 która jest zdefiniowana w schemacie importującym. + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + + %1 element is not allowed inside %2 element if %3 attribute is present. + + + + %1 element has neither %2 attribute nor %3 child element. + + + + %1 element with %2 child element must not have a %3 attribute. + + + + %1 attribute of %2 element must be %3 or %4. + + + + %1 attribute of %2 element must have a value of %3. + + + + %1 attribute of %2 element must have a value of %3 or %4. + + + + %1 element must not have %2 and %3 attribute together. + + + + Content of %1 attribute of %2 element must not be from namespace %3. + Zawartość atrybutu %1 elementu %2 nie może pochodzić z przestrzeni nazw %3. + + + %1 attribute of %2 element must not be %3. + + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + + Specifying use='prohibited' inside an attribute group has no effect. + Podawanie: use='prohibited' wewnątrz grupy atrybutów nie przynosi żadnego efektu. + + + %1 element must have either %2 or %3 attribute. + + + + %1 element must have either %2 attribute or %3 or %4 as child element. + + + + %1 element requires either %2 or %3 attribute. + + + + Text or entity references not allowed inside %1 element + Tekst ani odwołanie nie są dozwolone wewnątrz elementu %1 + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + + %1 element is not allowed in this context. + + + + %1 attribute of %2 element has larger value than %3 attribute. + + + + Prefix of qualified name %1 is not defined. + Przedrostek w pełnej nazwie %1 nie jest zdefiniowany. + + + %1 attribute of %2 element must either contain %3 or the other values. + + + + Component with ID %1 has been defined previously. + Komponent o identyfikatorze %1 został uprzednio zdefiniowany. + + + Element %1 already defined. + Element %1 jest już zdefiniowany. + + + Attribute %1 already defined. + Atrybut %1 jest już zdefiniowany. + + + Type %1 already defined. + Typ %1 jest już zdefiniowany. + + + Attribute group %1 already defined. + Grupa atrybutów %1 jest już zdefiniowana. + + + Element group %1 already defined. + Grupa elementów %1 jest już zdefiniowana. + + + Notation %1 already defined. + Zapis %1 jest już zdefiniowany. + + + Identity constraint %1 already defined. + Narzucenie niepowtarzalności %1 jest już zdefiniowane. + + + Duplicated facets in simple type %1. + Powielone aspekty w prostym typie %1. + + + %1 is not valid according to %2. + %1 nie jest poprawne według %2. + + + String content does not match the length facet. + Wartość ciągu koliduje z aspektem "length". + + + String content does not match the minLength facet. + Wartość ciągu koliduje z aspektem "minLength". + + + String content does not match the maxLength facet. + Wartość ciągu koliduje z aspektem "maxLength". + + + String content does not match pattern facet. + Wartość ciągu koliduje z aspektem "pattern". + + + String content is not listed in the enumeration facet. + Wartość ciągu nie widnieje na liście aspektu "enumeration". + + + Signed integer content does not match the maxInclusive facet. + Wartość liczby całkowitej koliduje z aspektem "maxInclusive". + + + Signed integer content does not match the maxExclusive facet. + Wartość liczby całkowitej koliduje z aspektem "maxExclusive". + + + Signed integer content does not match the minInclusive facet. + Wartość liczby całkowitej koliduje z aspektem "minInclusive". + + + Signed integer content does not match the minExclusive facet. + Wartość liczby całkowitej koliduje z aspektem "minExclusive". + + + Signed integer content is not listed in the enumeration facet. + Wartość liczby całkowitej nie widnieje na liście aspektu "enumeration". + + + Signed integer content does not match pattern facet. + Wartość liczby całkowitej koliduje z aspektem "pattern". + + + Signed integer content does not match in the totalDigits facet. + Wartość liczby całkowitej koliduje z aspektem "totalDigits". + + + Unsigned integer content does not match the maxInclusive facet. + Wartość liczby naturalnej koliduje z aspektem "maxInclusive". + + + Unsigned integer content does not match the maxExclusive facet. + Wartość liczby naturalnej koliduje z aspektem "maxExclusive". + + + Unsigned integer content does not match the minInclusive facet. + Wartość liczby naturalnej koliduje z aspektem "minInclusive". + + + Unsigned integer content does not match the minExclusive facet. + Wartość liczby naturalnej koliduje z aspektem "minExclusive". + + + Unsigned integer content is not listed in the enumeration facet. + Wartość liczby naturalnej nie widnieje na liście aspektu "enumeration". + + + Unsigned integer content does not match pattern facet. + Wartość liczby naturalnej koliduje z aspektem "pattern". + + + Unsigned integer content does not match in the totalDigits facet. + Wartość liczby naturalnej koliduje z aspektem "totalDigits". + + + Double content does not match the maxInclusive facet. + Wartość liczby rzeczywistej koliduje z aspektem "maxInclusive". + + + Double content does not match the maxExclusive facet. + Wartość liczby rzeczywistej koliduje z aspektem "maxExclusive". + + + Double content does not match the minInclusive facet. + Wartość liczby rzeczywistej koliduje z aspektem "minInclusive". + + + Double content does not match the minExclusive facet. + Wartość liczby rzeczywistej koliduje z aspektem "minExclusive". + + + Double content is not listed in the enumeration facet. + Wartość liczby rzeczywistej nie widnieje na liście aspektu "enumeration". + + + Double content does not match pattern facet. + Wartość liczby rzeczywistej koliduje z aspektem "pattern". + + + Decimal content does not match in the fractionDigits facet. + Wartość liczby rzeczywistej koliduje z aspektem "fractionDigits". + + + Decimal content does not match in the totalDigits facet. + Wartość liczby rzeczywistej koliduje z aspektem "totalDigits". + + + Date time content does not match the maxInclusive facet. + Zawartość daty i czasu koliduje z aspektem "maxInclusive". + + + Date time content does not match the maxExclusive facet. + Zawartość daty i czasu koliduje z aspektem "maxExclusive". + + + Date time content does not match the minInclusive facet. + Zawartość daty i czasu koliduje z aspektem "minInclusive". + + + Date time content does not match the minExclusive facet. + Zawartość daty i czasu koliduje z aspektem "minExclusive". + + + Date time content is not listed in the enumeration facet. + Zawartość daty i czasu nie widnieje na liście aspektu "enumeration". + + + Date time content does not match pattern facet. + Zawartość daty i czasu koliduje z aspektem "pattern". + + + Duration content does not match the maxInclusive facet. + Wartość długości okresu czasu koliduje z aspektem "maxInclusive". + + + Duration content does not match the maxExclusive facet. + Wartość długości okresu czasu koliduje z aspektem "maxExclusive". + + + Duration content does not match the minInclusive facet. + Wartość długości okresu czasu koliduje z aspektem "minInclusive". + + + Duration content does not match the minExclusive facet. + Wartość długości okresu czasu koliduje z aspektem "minExclusive". + + + Duration content is not listed in the enumeration facet. + Wartość długości okresu czasu nie widnieje na liście aspektu "enumeration". + + + Duration content does not match pattern facet. + Wartość długości okresu czasu koliduje z aspektem "pattern". + + + Boolean content does not match pattern facet. + Wartość boolowska koliduje z aspektem "pattern". + + + Binary content does not match the length facet. + Wartość binarna koliduje z aspektem "length". + + + Binary content does not match the minLength facet. + Wartość binarna koliduje z aspektem "minLength". + + + Binary content does not match the maxLength facet. + Wartość binarna koliduje z aspektem "maxLength". + + + Binary content is not listed in the enumeration facet. + Wartość binarna nie widnieje na liście aspektu "enumeration". + + + Invalid QName content: %1. + Niepoprawna zawartość QName: %1. + + + QName content is not listed in the enumeration facet. + Zawartość QName nie widnieje na liście aspektu "enumeration". + + + QName content does not match pattern facet. + Zawartość QName koliduje z aspektem "pattern". + + + Notation content is not listed in the enumeration facet. + Zapis zawartości nie widnieje na liście aspektu "enumeration". + + + List content does not match length facet. + Zawartość listy koliduje z aspektem "length". + + + List content does not match minLength facet. + Zawartość listy koliduje z aspektem "minLength". + + + List content does not match maxLength facet. + Zawartość listy koliduje z aspektem "maxLength". + + + List content is not listed in the enumeration facet. + Zawartość listy nie widnieje na liście aspektu "enumeration". + + + List content does not match pattern facet. + Zawartość listy koliduje z aspektem "pattern". + + + Union content is not listed in the enumeration facet. + Zawartość unii nie widnieje na liście aspektu "enumeration". + + + Union content does not match pattern facet. + Zawartość unii koliduje z aspektem "pattern". + + + Data of type %1 are not allowed to be empty. + Dane typu %1 nie mogą być puste. + + + Element %1 is missing child element. + Brak wymaganego podelementu w elemencie %1. + + + There is one IDREF value with no corresponding ID: %1. + Istnieje wartość IDREF bez odpowiadającej jej wartości ID: %1. + + + Loaded schema file is invalid. + Załadowany plik nie jest poprawnym plikiem ze schematem. + + + %1 contains invalid data. + + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + Przestrzeń nazw "xsi:schemaLocation" %1 wystąpiła już wcześniej w dokumencie. + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + "xsi:noNamespaceSchemaLocation" nie może wystąpić po pierwszym elemencie lub atrybucie który nie jest przestrzenią nazw. + + + No schema defined for validation. + Brak zdefiniowanego schematu dla walidacji. + + + No definition for element %1 available. + Brak dostępnej definicji dla elementu %1. + + + Specified type %1 is not known to the schema. + Podany typ %1 nie jest schematowi znany. + + + Element %1 is not defined in this scope. + Element %1 nie jest zdefiniowany w tym zakresie. + + + Declaration for element %1 does not exist. + Brak deklaracji dla elementu %1. + + + Element %1 contains invalid content. + Element %1 posiada niepoprawną zawartość. + + + Element %1 is declared as abstract. + Element %1 jest zadeklarowany jako abstrakcyjny. + + + Element %1 is not nillable. + Element %1 nie jest zerowalny. + + + Attribute %1 contains invalid data: %2 + Atrybut %1 zawiera niepoprawne dane: %2 + + + Element contains content although it is nillable. + Element posiada zawartość chociaż jest zerowalny. + + + Fixed value constraint not allowed if element is nillable. + Ograniczenie stałej wartości jest niedozwolone gdy element jest zerowalny. + + + Element %1 cannot contain other elements, as it has a fixed content. + Element %1 nie może zawierać innych elementów ponieważ posiada on stałą zawartość. + + + Specified type %1 is not validly substitutable with element type %2. + Podany typ %1 nie jest poprawnie zastępowalny typem elementu %2. + + + Complex type %1 is not allowed to be abstract. + Typ złożony %1 nie może być abstrakcyjny. + + + Element %1 contains not allowed attributes. + Element %1 zawiera niedozwolone atrybuty. + + + Element %1 contains not allowed child element. + Element %1 zawiera niedozwolony podelement. + + + Content of element %1 does not match its type definition: %2. + Zawartość elementu %1 nie pasuje do jego definicji typu: %2. + + + Content of element %1 does not match defined value constraint. + Zawartość elementu %1 nie pasuje do zdefiniowanego ograniczenia wartości. + + + Element %1 contains not allowed child content. + Element %1 zawiera niedozwolony podelement. + + + Element %1 contains not allowed text content. + Element %1 zawiera niedozwolony text. + + + Element %1 is missing required attribute %2. + Brak wymaganego atrybutu %2 w elemencie %1. + + + Attribute %1 does not match the attribute wildcard. + Atrybut %1 nie pasuje do atrybutu dżokera. + + + Declaration for attribute %1 does not exist. + Brak deklaracji atrybutu %1. + + + Element %1 contains two attributes of type %2. + Element %1 posiada dwa atrybuty typu %2. + + + Attribute %1 contains invalid content. + Atrybut %1 posiada niepoprawną zawartość. + + + Element %1 contains unknown attribute %2. + Element %1 posiada nieznany atrybut %2. + + + Content of attribute %1 does not match its type definition: %2. + Zawartość atrybutu %1 nie pasuje do jego definicji typu: %2. + + + Content of attribute %1 does not match defined value constraint. + Zawartość elementu %1 nie pasuje do zdefiniowanego ograniczenia wartości. + + + Non-unique value found for constraint %1. + Znaleziono nieunikatową wartość dla ograniczenia %1. + + + Key constraint %1 contains absent fields. + Ograniczenie klucza %1 zawiera nieobecne pola. + + + Key constraint %1 contains references nillable element %2. + + + + No referenced value found for key reference %1. + Brak wartości do której odwołuje się klucz %1. + + + More than one value found for field %1. + Znaleziono więcej niż jedną wartość dla pola %1. + + + Field %1 has no simple type. + Pole %1 nie posiada prostego typu. + + + ID value '%1' is not unique. + Wartość ID "%1" nie jest unikatowa. + + + '%1' attribute contains invalid QName content: %2. + + + + diff --git a/config.profiles/symbian/translations/qt_ru_symbian.ts b/config.profiles/symbian/translations/qt_ru_symbian.ts new file mode 100644 index 0000000..b7e69cb --- /dev/null +++ b/config.profiles/symbian/translations/qt_ru_symbian.ts @@ -0,0 +1,8522 @@ + + + + + + CloseButton + + Close Tab + Закрыть вкладку + + + + FakeReply + + Fake error ! + Ошибка: фальшивый! + + + Invalid URL + Некорректный URL + + + + Phonon:: + + Notifications + Уведомления + + + Music + Музыка + + + Video + Видео + + + Communication + Общение + + + Games + Игры + + + Accessibility + Специальные возможности + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>Звуковое устройство <b>%1</b> не работает.<br/>Будет использоваться <b>%2</b>.</html> + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>Переключение на звуковое устройство <b>%1</b><br/>, которое доступно и имеет высший приоритет.</html> + + + Revert back to device '%1' + Возвращение к устройству '%1' + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + Внимание: Похоже, пакет gstreamer0.10-plugins-good не установлен. + Некоторые возможности воспроизведения видео недоступны. + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + Внимание: Похоже, основной модуль GStreamer не установлен. + Поддержка видео и аудио отключена + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + Отсутствует необходимый кодек. Вам нужно установить следующие кодеки для воспроизведения данного содержимого: %0 + + + Could not open media source. + Не удалось открыть источник медиа-данных. + + + Invalid source type. + Неверный тип источника медиа-данных. + + + Could not locate media source. + Не удалось найти источник медиа-данных. + + + Could not open audio device. The device is already in use. + Не удалось открыть звуковое устройство. Устройство уже используется. + + + Could not decode media source. + Не удалось декодировать источник медиа-данных. + + + + Phonon::MMF + + Audio Output + Воспроизведение звука + + + The audio output device + Устройство воспроизведения звука + + + No error + Нет ошибки + + + Not found + Не найдено + + + Out of memory + Недостаточно памяти + + + Not supported + Не поддерживается + + + Overflow + Переполнение + + + Underflow + Потеря значимости + + + Already exists + Уже существует + + + Path not found + Путь не найден + + + In use + Используется + + + Not ready + Не готово + + + Access denied + Доступ запрещен + + + Could not connect + Подключение невозможно + + + Disconnected + Разъединено + + + Permission denied + Отказано в разрешении + + + Insufficient bandwidth + Недостаточная скорость передачи + + + Network unavailable + Сеть недоступна + + + Network communication error + Сетевая ошибка связи + + + Streaming not supported + Потоки не поддерживаются + + + Server alert + Сигнал сервера + + + Invalid protocol + Неверный протокол + + + Invalid URL + Неверный адрес URL + + + Multicast error + Ошибка групповой передачи + + + Proxy server error + Ошибка прокси-сервера + + + Proxy server not supported + Прокси-сервер не поддерживается + + + Audio output error + Ошибка вывода аудио + + + Video output error + Ошибка вывода видео + + + Decoder error + Ошибка декодера + + + Audio or video components could not be played + Невозможно воспроизвести аудио или видеокомпоненты + + + DRM error + Ошибка DRM + + + Unknown error (%1) + Неизвестная ошибка (%1) + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + Не готов к воспроизведению + + + Error opening file + Ошибка при открытии файла + + + Error opening URL + Ошибка при открытии адреса URL + + + Setting volume failed + Сбой при настройке громкости + + + Playback complete + Воспроизведение завершено + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + %1 Гц + + + + Phonon::MMF::AudioPlayer + + Getting position failed + Сбой определения позиции + + + Opening clip failed + Сбой при открытии клипа + + + + Phonon::MMF::EffectFactory + + Enabled + Включено + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + Коэффициент затухания ВЧ (%) + + + Decay time (ms) + Время затухания (мс) + + + Density (%) + Плотность (%) + + + Diffusion (%) + Рассеяние (%) + + + Reflections delay (ms) + Затухание отражений (мс) + + + Reflections level (mB) + Уровень отражений (Мбит) + + + Reverb delay (ms) + Задержка реверберации (мс) + + + Reverb level (mB) + Уровень реверберации (Мбит) + + + Room HF level + Уровень ВЧ помещения + + + Room level (mB) + Уровень помещения (Мбит) + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + Ошибка при открытии источника: тип не поддерживается + + + Error opening source: media type could not be determined + Ошибка при открытии источника: тип носителя определить невозможно + + + + Phonon::MMF::StereoWidening + + Level (%) + Уровень (%) + + + + Phonon::MMF::VideoPlayer + + Pause failed + Сбой паузы + + + Seek failed + Сбой при поиске + + + Getting position failed + Сбой определения позиции + + + Opening clip failed + Сбой при открытии клипа + + + Buffering clip failed + Сбой при буферизации клипа + + + Video display error + Ошибка отображения видео + + + + Phonon::VolumeSlider + + Volume: %1% + Громкость: %1% + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + Используйте данный ползунок для настройки громкости. Крайнее левое положение соответствует 0%, крайнее правое - %1% + + + Muted + Без звука + + + + Q3Accel + + %1, %2 not defined + %1, %2 не определён + + + Ambiguous %1 not handled + + + + + Q3DataTable + + True + Да + + + False + Нет + + + Insert + Вставить + + + Update + Обновить + + + Delete + Удалить + + + + Q3FileDialog + + Copy or Move a File + Копировать или переместить файл + + + Read: %1 + Чтение: %1 + + + Write: %1 + Запись: %1 + + + Cancel + Отмена + + + All Files (*) + Все файлы (*) + + + Name + Имя + + + Size + Размер + + + Type + Тип + + + Date + Дата + + + Attributes + Атрибуты + + + &OK + &ОК + + + Look &in: + &Папка: + + + File &name: + &Имя файла: + + + File &type: + &Тип файла: + + + Back + Назад + + + One directory up + Вверх на один уровень + + + Create New Folder + Создать папку + + + List View + Список + + + Detail View + Подробный вид + + + Preview File Info + Предпросмотр информации о файле + + + Preview File Contents + Предпросмотр содержимого файла + + + Read-write + Чтение и запись + + + Read-only + Только чтение + + + Write-only + Только запись + + + Inaccessible + Нет доступа + + + Symlink to File + Ссылка на файл + + + Symlink to Directory + Ссылка на каталог + + + Symlink to Special + Ссылка на спецфайл + + + File + Файл + + + Dir + Каталог + + + Special + Спецфайл + + + Open + Открыть + + + Save As + Сохранить как + + + &Open + &Открыть + + + &Save + &Сохранить + + + &Rename + &Переименовать + + + &Delete + &Удалить + + + R&eload + О&бновить + + + Sort by &Name + По &имени + + + Sort by &Size + По &размеру + + + Sort by &Date + По &дате + + + &Unsorted + &Не упорядочивать + + + Sort + Упорядочить + + + Show &hidden files + Показать ск&рытые файлы + + + the file + файл + + + the directory + каталог + + + the symlink + ссылку + + + Delete %1 + Удалить %1 + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>Вы действительно хотите удалить %1 "%2"?</qt> + + + &Yes + &Да + + + &No + &Нет + + + New Folder 1 + Новая папка 1 + + + New Folder + Новая папка + + + New Folder %1 + Новая папка %1 + + + Find Directory + Найти каталог + + + Directories + Каталоги + + + Directory: + Каталог: + + + Error + Ошибка + + + %1 +File not found. +Check path and filename. + %1 +Файл не найден. +Проверьте правильность пути и имени файла. + + + All Files (*.*) + Все файлы (*.*) + + + Open + Открыть + + + Select a Directory + Выбрать каталог + + + + Q3LocalFs + + Could not read directory +%1 + Не удалось прочитать каталог +%1 + + + Could not create directory +%1 + Не удалось создать каталог +%1 + + + Could not remove file or directory +%1 + Не удалось удалить файл или каталог +%1 + + + Could not rename +%1 +to +%2 + Не удалось переименовать +%1 +в +%2 + + + Could not open +%1 + Не удалось открыть +%1 + + + Could not write +%1 + Не удалось записать +%1 + + + + Q3MainWindow + + Line up + Выровнять + + + Customize... + Настроить... + + + + Q3NetworkProtocol + + Operation stopped by the user + Операция остановлена пользователем + + + + Q3ProgressDialog + + Cancel + Отмена + + + + Q3TabDialog + + OK + ОК + + + Apply + Применить + + + Help + Справка + + + Defaults + По умолчанию + + + Cancel + Отмена + + + + Q3TextEdit + + &Undo + &Отменить действие + + + &Redo + &Повторить действие + + + Cu&t + &Вырезать + + + &Copy + &Копировать + + + &Paste + В&ставить + + + Clear + Очистить + + + Select All + Выделить всё + + + + Q3TitleBar + + System + Системное меню + + + Restore up + Восстановить + + + Minimize + Свернуть + + + Restore down + Восстановить + + + Maximize + Распахнуть + + + Close + Закрыть + + + Contains commands to manipulate the window + Содержит команды управления окном + + + Puts a minimized window back to normal + Возвращает свёрнутое окно в нормальное состояние + + + Moves the window out of the way + Сворачивает окно + + + Puts a maximized window back to normal + Возвращает распахнутое окно в нормальное состояние + + + Makes the window full screen + Разворачивает окно на весь экран + + + Closes the window + Зыкрывает окно + + + Displays the name of the window and contains controls to manipulate it + Отображает название окна и содержит команды управления им + + + + Q3ToolBar + + More... + Больше... + + + + Q3UrlOperator + + The protocol `%1' is not supported + Протокол '%1' не поддерживается + + + The protocol `%1' does not support listing directories + Протокол '%1' не поддерживает просмотр каталогов + + + The protocol `%1' does not support creating new directories + Протокол '%1' не поддерживает создание каталогов + + + The protocol `%1' does not support removing files or directories + Протокол '%1' не поддерживает удаление файлов или каталогов + + + The protocol `%1' does not support renaming files or directories + Протокол '%1' не поддерживает переименование файлов или каталогов + + + The protocol `%1' does not support getting files + Протокол '%1' не поддерживает доставку файлов + + + The protocol `%1' does not support putting files + Протокол '%1' не поддерживает отправку файлов + + + The protocol `%1' does not support copying or moving files or directories + Протокол '%1' не поддерживает копирование или перемещение файлов или каталогов + + + (unknown) + (неизвестно) + + + + Q3Wizard + + &Cancel + От&мена + + + < &Back + < &Назад + + + &Next > + &Далее > + + + &Finish + &Завершить + + + &Help + &Справка + + + + QAbstractSocket + + Host not found + Узел не найден + + + Connection refused + Отказано в соединении + + + Connection timed out + Время на соединение истекло + + + Operation on socket is not supported + Операция с сокетом не поддерживается + + + Socket operation timed out + Время на операцию с сокетом истекло + + + Socket is not connected + Сокет не подключён + + + Network unreachable + Сеть недоступна + + + + QAbstractSpinBox + + &Step up + Шаг вв&ерх + + + Step &down + Шаг вн&из + + + &Select All + &Выделить всё + + + + QAccessibleButton + + Press + Нажмите + + + + QApplication + + QT_LAYOUT_DIRECTION + 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. + LTR + + + Executable '%1' requires Qt %2, found Qt %3. + Программный модуль '%1' требует Qt %2, найдена версия %3. + + + Incompatible Qt Library Error + Ошибка совместимости библиотеки Qt + + + Activate + Активировать + + + Activates the program's main window + Активирует главное окно программы + + + + QAxSelect + + Select ActiveX Control + Выбор компоненты ActiveX + + + OK + Выбрать + + + &Cancel + От&мена + + + COM &Object: + &Объект COM: + + + + QCheckBox + + Uncheck + Снять отметку + + + Check + Отметить + + + Toggle + Переключить + + + + QColorDialog + + Hu&e: + &Тон: + + + &Sat: + &Нас: + + + &Val: + &Ярк: + + + &Red: + &Красный: + + + &Green: + &Зелёный: + + + Bl&ue: + С&иний: + + + A&lpha channel: + &Альфа-канал: + + + Select Color + Выбор цвета + + + &Basic colors + &Основные цвета + + + &Custom colors + &Пользовательские цвета + + + &Add to Custom Colors + &Добавить к пользовательским цветам + + + + QComboBox + + Open + Открыть + + + False + Нет + + + True + Да + + + Close + Закрыть + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + %1: пустой ключ + + + %1: unable to make key + QSystemSemaphore + %1: невозможно создать ключ + + + %1: ftok failed + QSystemSemaphore + %1: ошибка ftok + + + %1: already exists + QSystemSemaphore + %1: уже существует + + + %1: does not exist + QSystemSemaphore + %1: не существует + + + %1: out of resources + QSystemSemaphore + %1: недостаточно ресурсов + + + %1: unknown error %2 + QSystemSemaphore + %1: неизвестная ошибка %2 + + + + QDB2Driver + + Unable to connect + Невозможно соединиться + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Unable to rollback transaction + Невозможно отозвать транзакцию + + + Unable to set autocommit + Невозможно установить автозавершение транзакций + + + + QDB2Result + + Unable to execute statement + Невозможно выполнить выражение + + + Unable to prepare statement + Невозможно подготовить выражение + + + Unable to bind variable + Невозможно привязать значение + + + Unable to fetch record %1 + Невозможно получить запись %1 + + + Unable to fetch next + Невозможно получить следующую строку + + + Unable to fetch first + Невозможно получить первую строку + + + + QDateTimeEdit + + AM + AM + + + am + am + + + PM + PM + + + pm + pm + + + + QDial + + QDial + QDial + + + SpeedoMeter + SpeedoMeter + + + SliderHandle + SliderHandle + + + + QDialog + + What's This? + Что это? + + + Done + Готово + + + + QDialogButtonBox + + OK + ОК + + + Save + Сохранить + + + &Save + &Сохранить + + + Open + Открыть + + + Cancel + Отмена + + + &Cancel + От&мена + + + Close + Закрыть + + + &Close + &Закрыть + + + Apply + Применить + + + Reset + Сбросить + + + Help + Справка + + + Don't Save + Не сохранять + + + Discard + Отклонить + + + &Yes + &Да + + + Yes to &All + Да для &всех + + + &No + &Нет + + + N&o to All + Н&ет для всех + + + Save All + Сохранить все + + + Abort + Прервать + + + Retry + Повторить + + + Ignore + Пропустить + + + Restore Defaults + Восстановить значения + + + Close without Saving + Закрыть без сохранения + + + &OK + &ОК + + + + QDirModel + + Name + Имя + + + Size + Размер + + + Kind + Match OS X Finder + Вид + + + Type + All other platforms + Тип + + + Date Modified + Дата изменения + + + + QDockWidget + + Close + Закрыть + + + Dock + Прикрепить + + + Float + Открепить + + + + QDoubleSpinBox + + More + Больше + + + Less + Меньше + + + + QErrorMessage + + &Show this message again + &Показывать это сообщение в дальнейшем + + + &OK + &Закрыть + + + Debug Message: + Отладочное сообщение: + + + Warning: + Предупреждение: + + + Fatal Error: + Критическая ошибка: + + + + QFile + + Destination file exists + Файл существует + + + Will not rename sequential file using block copy + Последовательный файл не будет переименован с использованием поблочного копирования + + + Cannot remove source file + Невозможно удалить исходный файл + + + Cannot open %1 for input + Невозможно открыть %1 для ввода + + + Cannot open for output + Невозможно открыть для вывода + + + Failure to write block + Сбой записи блока + + + Cannot create %1 for output + Невозможно создать %1 для вывода + + + + QFileDialog + + All Files (*) + Все файлы (*) + + + Back + Назад + + + List View + Список + + + Detail View + Подробный вид + + + File + Файл + + + Open + Открыть + + + Save As + Сохранить как + + + &Open + &Открыть + + + &Save + &Сохранить + + + Recent Places + Недавние документы + + + &Rename + &Переименовать + + + &Delete + &Удалить + + + Show &hidden files + Показать ск&рытые файлы + + + New Folder + Новая папка + + + Find Directory + Найти каталог + + + Directories + Каталоги + + + All Files (*.*) + Все файлы (*.*) + + + Directory: + Каталог: + + + %1 already exists. +Do you want to replace it? + %1 уже существует. +Хотите заменить его? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +Файл не найден. +Проверьте правильность указанного имени файла. + + + My Computer + Мой компьютер + + + Parent Directory + Родительский каталог + + + Files of type: + Типы файлов: + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +Каталог не найден. +Проверьте правильность указанного имени каталога. + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' защищён от записи. +Всё-равно хотите удалить? + + + Are sure you want to delete '%1'? + Вы действительно хотите удалить '%1'? + + + Could not delete directory. + Не удалось удалить каталог. + + + Drive + Диск + + + File Folder + Match Windows Explorer + Папка с файлами + + + Folder + All other platforms + Папка + + + Alias + Mac OS X Finder + Псевдоним + + + Shortcut + All other platforms + Ярлык + + + Unknown + Неизвестный + + + Show + Показать + + + Forward + Вперёд + + + &New Folder + &Новая папка + + + &Choose + &Выбрать + + + Remove + Удалить + + + File &name: + &Имя файла: + + + Look in: + Перейти к: + + + Create New Folder + Создать папку + + + + QFileSystemModel + + %1 TB + %1 Тб + + + %1 GB + %1 Гб + + + %1 MB + %1 Мб + + + %1 KB + %1 Кб + + + %1 bytes + %1 байт + + + Invalid filename + Некорректное имя файла + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>Имя "%1" не может быть использовано.</b><p>Попробуйте использовать имя меньшей длины и/или без символов пунктуации. + + + Name + Имя + + + Size + Размер + + + Kind + Match OS X Finder + Вид + + + Type + All other platforms + Тип + + + Date Modified + Дата изменения + + + My Computer + Мой компьютер + + + Computer + Компьютер + + + %1 byte(s) + %1 байт(ов) + + + + QFontDatabase + + Normal + Обычный + + + Bold + Жирный + + + Demi Bold + Полужирный + + + Black + Чёрный + + + Demi + Средний + + + Light + Светлый + + + Italic + Курсив + + + Oblique + Наклонный + + + Any + Любая + + + Latin + Латиница + + + Greek + Греческая + + + Cyrillic + Кириллица + + + Armenian + Армянская + + + Hebrew + Иврит + + + Arabic + Арабская + + + Syriac + Сирийская + + + Thaana + Таана + + + Devanagari + Деванагири + + + Bengali + Бенгальская + + + Gurmukhi + Гурмукхи + + + Gujarati + Гуджарати + + + Oriya + Ория + + + Tamil + Тамильская + + + Telugu + Телугу + + + Kannada + Каннада + + + Malayalam + Малайялам + + + Sinhala + Сингальская + + + Thai + Тайская + + + Lao + Лаосская + + + Tibetan + Тибетская + + + Myanmar + Мьянма + + + Georgian + Грузинская + + + Khmer + Кхмерская + + + Simplified Chinese + Китайская упрощенная + + + Traditional Chinese + Китайская традиционная + + + Japanese + Японская + + + Korean + Корейская + + + Vietnamese + Вьетнамская + + + Symbol + Символьная + + + Ogham + Огамическая + + + Runic + Руническая + + + N'Ko + ## + + + + QFontDialog + + &Font + &Шрифт + + + Font st&yle + &Начертание + + + &Size + &Размер + + + Effects + Эффекты + + + Stri&keout + Зачёр&кнутый + + + &Underline + П&одчёркнутый + + + Sample + Пример + + + Select Font + Выбор шрифта + + + Wr&iting System + &Система письма + + + + QFtp + + Host %1 found + Узел %1 найден + + + Host found + Узел найден + + + Connected to host %1 + Установлено соединение с узлом %1 + + + Connected to host + Соединение с узлом установлено + + + Connection to %1 closed + Соединение с %1 закрыто + + + Connection closed + Соединение закрыто + + + Host %1 not found + Узел %1 не найден + + + Connection refused to host %1 + В соединении с узлом %1 отказано + + + Connection timed out to host %1 + Время на соединение с узлом %1 истекло + + + Unknown error + Неизвестная ошибка + + + Connecting to host failed: +%1 + Не удалось соединиться с узлом: +%1 + + + Login failed: +%1 + Не удалось авторизоваться: +%1 + + + Listing directory failed: +%1 + Не удалось прочитать каталог: +%1 + + + Changing directory failed: +%1 + Не удалось сменить каталог: +%1 + + + Downloading file failed: +%1 + Не удалось загрузить файл: +%1 + + + Uploading file failed: +%1 + Не удалось отгрузить файл: +%1 + + + Removing file failed: +%1 + Не удалось удалить файл: +%1 + + + Creating directory failed: +%1 + Не удалось создать каталог: +%1 + + + Removing directory failed: +%1 + Не удалось удалить каталог: +%1 + + + Not connected + Соединение не установлено + + + Connection refused for data connection + Отказ в соединении для передачи данных + + + + QHostInfo + + Unknown error + Неизвестная ошибка + + + + QHostInfoAgent + + Host not found + Узел не найден + + + Unknown address type + Неизвестный тип адреса + + + Unknown error + Неизвестная ошибка + + + No host name given + Имя узла не задано + + + Invalid hostname + Некорректное имя узла + + + + QHttp + + Connection refused + Отказано в соединении + + + Host %1 not found + Узел %1 не найден + + + Wrong content length + Неверная длина содержимого + + + HTTP request failed + HTTP-запрос не удался + + + Host %1 found + Узел %1 найден + + + Host found + Узел найден + + + Connected to host %1 + Установлено соединение с узлом %1 + + + Connected to host + Соединение с узлом установлено + + + Connection to %1 closed + Соединение с узлом %1 закрыто + + + Connection closed + Соединение закрыто + + + Unknown error + Неизвестная ошибка + + + Request aborted + Запрос прерван + + + No server set to connect to + Не указан сервер для подключения + + + Server closed connection unexpectedly + Сервер неожиданно разорвал соединение + + + Invalid HTTP response header + Некорректный HTTP-заголовок ответа + + + Unknown authentication method + Неизвестный метод авторизации + + + Invalid HTTP chunked body + Некорректное HTTP-фрагментирование данных + + + Error writing response to device + Ошибка записи ответа на устройство + + + Proxy authentication required + Требуется авторизация на прокси-сервере + + + Authentication required + Требуется авторизация + + + Proxy requires authentication + Прокси-сервер требует авторизацию + + + Host requires authentication + Узел требует авторизацию + + + Data corrupted + Данные повреждены + + + SSL handshake failed + Квитирование SSL не удалось + + + Unknown protocol specified + Указан неизвестный протокол + + + Connection refused (or timed out) + В соединении отказано (или время ожидания истекло) + + + HTTPS connection requested but SSL support not compiled in + Запрошено соединение по протоколу HTTPS, но поддержка SSL не скомпилирована + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + Не получен HTTP-ответ от прокси-сервера + + + Error parsing authentication request from proxy + Ошибка разбора запроса авторизации от прокси-сервера + + + Authentication required + Требуется авторизация + + + Proxy denied connection + Прокси-сервер запретил соединение + + + Error communicating with HTTP proxy + Ошибка обмена данными с прокси-сервером HTTP + + + Proxy server not found + Прокси-сервер не найден + + + Proxy connection refused + В соединении прокси-сервером отказано + + + Proxy server connection timed out + Время на соединение с прокси-сервером истекло + + + Proxy connection closed prematurely + Соединение с прокси-сервером неожиданно закрыто + + + + QIBaseDriver + + Error opening database + Ошибка открытия базы данных + + + Could not start transaction + Не удалось начать транзакцию + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Unable to rollback transaction + Невозможно отозвать транзакцию + + + + QIBaseResult + + Unable to create BLOB + Невозможно создать BLOB + + + Unable to write BLOB + Невозможно записать BLOB + + + Unable to open BLOB + Невозможно открыть BLOB + + + Unable to read BLOB + Невозможно прочитать BLOB + + + Could not find array + Не удалось найти массив + + + Could not get array data + Не удалось найти данные массива + + + Could not get query info + Не удалось найти информацию о запросе + + + Could not start transaction + Не удалось начать транзакцию + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Could not allocate statement + Не удалось получить ресурсы для создания выражения + + + Could not prepare statement + Не удалось подготовить выражение + + + Could not describe input statement + Не удалось описать входящее выражение + + + Could not describe statement + Не удалось описать выражение + + + Unable to close statement + Невозможно закрыть выражение + + + Unable to execute query + Невозможно выполнить запрос + + + Could not fetch next item + Не удалось получить следующий элемент + + + Could not get statement info + Не удалось найти информацию о выражении + + + + QIODevice + + Permission denied + Доступ запрещён + + + Too many open files + Слишком много открытых файлов + + + No such file or directory + Файл или каталог не существует + + + No space left on device + Нет свободного места на устройстве + + + Unknown error + Неизвестная ошибка + + + + QInputContext + + XIM + Метод ввода X-сервера + + + FEP + Метод ввода S60 FEP + + + XIM input method + Метод ввода X-сервера + + + Windows input method + Метод ввода Windows + + + Mac OS X input method + Метод ввода Mac OS X + + + S60 FEP input method + Метод ввода S60 FEP + + + + QInputDialog + + Enter a value: + Укажите значение: + + + + QLibrary + + Could not mmap '%1': %2 + Не удалось выполнить mmap '%1': %2 + + + Plugin verification data mismatch in '%1' + Проверочная информация для модуля '%1' не совпадает + + + Could not unmap '%1': %2 + Не удалось выполнить unmap '%1': %2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + Модуль '%1' использует несоместимую библиотеку Qt. (%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + Модуль '%1' использует несоместимую библиотеку Qt. Ожидается ключ "%2", но получен ключ "%3" + + + Unknown error + Неизвестная ошибка + + + The shared library was not found. + Динамическая библиотека не найдена. + + + The file '%1' is not a valid Qt plugin. + Файл '%1' - не является корректным модулем Qt. + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + Модуль '%1' использует несоместимую библиотеку Qt. (Невозможно совместить релизные и отладочные библиотеки.) + + + Cannot load library %1: %2 + Невозможно загрузить библиотеку %1: %2 + + + Cannot unload library %1: %2 + Невозможно выгрузить библиотеку %1: %2 + + + Cannot resolve symbol "%1" in %2: %3 + Невозможно разрешить символ "%1" в %2: %3 + + + + QLineEdit + + Select All + Выделить всё + + + &Undo + &Отменить действие + + + &Redo + &Повторить действие + + + Cu&t + &Вырезать + + + &Copy + &Копировать + + + &Paste + В&ставить + + + Delete + Удалить + + + + QLocalServer + + %1: Name error + %1: Некорректное имя + + + %1: Permission denied + %1: Доступ запрещён + + + %1: Address in use + %1: Адрес используется + + + %1: Unknown error %2 + %1: Неизвестная ошибка %2 + + + + QLocalSocket + + %1: Connection refused + %1: Отказано в соединении + + + %1: Remote closed + %1: Закрыто удаленной стороной + + + %1: Invalid name + %1: Некорректное имя + + + %1: Socket access error + %1: Ошибка обращения к сокету + + + %1: Socket resource error + %1: Ошибка выделения ресурсов сокета + + + %1: Socket operation timed out + %1: Время на операцию с сокетом истекло + + + %1: Datagram too large + %1: Датаграмма слишком большая + + + %1: Connection error + %1: Ошибка соединения + + + %1: The socket operation is not supported + %1: Операция с сокетом не поддерживается + + + %1: Unknown error + %1: Неизвестная ошибка + + + %1: Unknown error %2 + %1: Неизвестная ошибка %2 + + + + QMYSQLDriver + + Unable to open database ' + Невозможно открыть базу данных ' + + + Unable to connect + Невозможно соединиться + + + Unable to begin transaction + Невозможно начать транзакцию + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Unable to rollback transaction + Невозможно отозвать транзакцию + + + + QMYSQLResult + + Unable to fetch data + Невозможно получить данные + + + Unable to execute query + Невозможно выполнить запрос + + + Unable to store result + Невозможно сохранить результат + + + Unable to prepare statement + Невозможно подготовить выражение + + + Unable to reset statement + Невозможно сбросить выражение + + + Unable to bind value + Невозможно привязать значение + + + Unable to execute statement + Невозможно выполнить выражение + + + Unable to bind outvalues + Невозможно привязать результирующие значения + + + Unable to store statement results + Невозможно сохранить результаты выполнения выражения + + + Unable to execute next query + Невозможно выполнить следующий запрос + + + Unable to store next result + Невозможно сохранить следующий результат + + + + QMdiArea + + (Untitled) + (Неозаглавлено) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + Закрыть + + + Minimize + Свернуть + + + Restore Down + Восстановить + + + &Restore + &Восстановить + + + &Move + &Переместить + + + &Size + &Размер + + + Mi&nimize + &Свернуть + + + Ma&ximize + Р&аспахнуть + + + Stay on &Top + Оставаться &сверху + + + &Close + &Закрыть + + + Maximize + Распахнуть + + + Unshade + Восстановить из заголовка + + + Shade + Свернуть в заголовок + + + Restore + Восстановить + + + Help + Справка + + + Menu + Меню + + + - [%1] + - [%1] + + + + QMenu + + Close + Закрыть + + + Open + Открыть + + + Execute + Выполнить + + + + QMenuBar + + Actions + Действия + + + + QMessageBox + + OK + Закрыть + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <h3>О Qt</h3><p>Данная программа использует Qt версии %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><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> + <p>Qt - это инструментарий для разработки кроссплатформенных приложений на C++.</p><p>Qt предоставляет совместимость на уровне исходных текстов между MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux и всеми популярными коммерческими вариантами Unix. Также Qt доступна для встраиваемых устройств в виде Qt для Embedded Linux и Qt для Windows CE.</p><p>Qt доступна под тремя различными лицензиями, разработанными для удовлетворения различных требований.</p><p>Qt под нашей коммерческой лицензией предназначена для развития проприетарного/коммерческого программного обеспечения, когда Вы не желаете предоставлять исходные тексты третьим сторонам, или в случае невозможности принятия условий лицензий GNU LGPL версии 2.1 или GNU GPL версии 3.0.</p><p>Qt под лицензией GNU LGPL версии 2.1 предназначена для разработки программного обеспечения с открытыми исходными текстами или коммерческого программного обеспечения при соблюдении условий лицензии GNU LGPL версии 2.1.</p><p>Qt под лицензией GNU General Public License версии 3.0 предназначена для разработки программных приложений в тех случаях, когда Вы хотели бы использовать такие приложения в сочетании с программным обеспечением на условиях лицензии GNU GPL с версии 3.0 или если Вы готовы соблюдать условия лицензии GNU GPL версии 3.0.</p><p>Обратитесь к <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> для обзора лицензий Qt.</p><p>Copyright (C) 2010 Корпорация Nokia и/или её дочерние подразделения.</p><p>Qt - продукт компании Nokia. Обратитесь к <a href="http://qt.nokia.com/">qt.nokia.com</a> для получения дополнительной информации.</p> + + + About Qt + О Qt + + + Help + Справка + + + Show Details... + Показать подробности... + + + Hide Details... + Скрыть подробности... + + + + QMultiInputContext + + Select IM + Выбор режима ввода + + + + QMultiInputContextPlugin + + Multiple input method switcher + Переключатель режима множественного ввода + + + Multiple input method switcher that uses the context menu of the text widgets + Переключатель режима множественного ввода, используемый в контекстном меню текстовых виджетов + + + + QNativeSocketEngine + + The remote host closed the connection + Удалённый узел закрыл соединение + + + Network operation timed out + Время на сетевую операцию истекло + + + Out of resources + Недостаточно ресурсов + + + Unsupported socket operation + Операция с сокетом не поддерживается + + + Protocol type not supported + Протокол не поддерживается + + + Invalid socket descriptor + Некорректный дескриптор сокета + + + Network unreachable + Сеть недоступна + + + Permission denied + Доступ запрещён + + + Connection timed out + Время на соединение истекло + + + Connection refused + Отказано в соединении + + + The bound address is already in use + Адрес уже используется + + + The address is not available + Адрес недоступен + + + The address is protected + Адрес защищён + + + Unable to send a message + Невозможно отправить сообщение + + + Unable to receive a message + Невозможно получить сообщение + + + Unable to write + Невозможно записать + + + Network error + Ошибка сети + + + Another socket is already listening on the same port + Другой сокет уже прослушивает этот порт + + + Unable to initialize non-blocking socket + Невозможно инициализировать не-блочный сокет + + + Unable to initialize broadcast socket + Невозможно инициализировать широковещательный сокет + + + Attempt to use IPv6 socket on a platform with no IPv6 support + Попытка использовать IPv6 на платформе, не поддерживающей IPv6 + + + Host unreachable + Узел недоступен + + + Datagram was too large to send + Датаграмма слишком большая для отправки + + + Operation on non-socket + Операция с не-сокетом + + + Unknown error + Неизвестная ошибка + + + The proxy type is invalid for this operation + Некорректный тип прокси-сервера для данной операции + + + + QNetworkAccessCacheBackend + + Error opening %1 + Ошибка открытия %1 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + Ошибка записи в %1: %2 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + Запрос на открытие файла вне файловой системы %1 + + + Error opening %1: %2 + Ошибка открытия %1: %2 + + + Write error writing to %1: %2 + Ошибка записи в %1: %2 + + + Cannot open %1: Path is a directory + Невозможно открыть %1: Указан путь к каталогу + + + Read error reading from %1: %2 + Ошибка чтения из %1: %2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + Подходящий прокси-сервер не найден + + + Cannot open %1: is a directory + Невозможно открыть %1: Указан путь к каталогу + + + Logging in to %1 failed: authentication required + Соединение с %1 не удалось: требуется авторизация + + + Error while downloading %1: %2 + Ошибка в процессе загрузки %1: %2 + + + Error while uploading %1: %2 + Ошибка в процессе отгрузки %1: %2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + Подходящий прокси-сервер не найден + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + Ошибка загрузки %1 - ответ сервера: %2 + + + Protocol "%1" is unknown + Неизвестный протокол "%1" + + + + QNetworkReplyImpl + + Operation canceled + Операция отменена + + + + QOCIDriver + + Unable to logon + Невозможно авторизоваться + + + Unable to initialize + QOCIDriver + Невозможно инициализировать + + + Unable to begin transaction + Невозможно начать транзакцию + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Unable to rollback transaction + Невозможно отозвать транзакцию + + + + QOCIResult + + Unable to bind column for batch execute + Невозможно привязать столбец для пакетного выполнения + + + Unable to execute batch statement + Невозможно выполнить пакетное выражение + + + Unable to goto next + Невозможно перейти к следующей строке + + + Unable to alloc statement + Невозможно создать выражение + + + Unable to prepare statement + Невозможно подготовить выражение + + + Unable to get statement type + Невозможно определить тип выражения + + + Unable to bind value + Невозможно привязать результирующие значения + + + Unable to execute statement + Невозможно выполнить выражение + + + + QODBCDriver + + Unable to connect + Невозможно соединиться + + + Unable to disable autocommit + Невозможно отключить автозавершение транзакций + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Unable to rollback transaction + Невозможно отозвать транзакцию + + + Unable to enable autocommit + Невозможно включить автозавершение транзакций + + + Unable to connect - Driver doesn't support all functionality required + Невозможно соединиться - Драйвер не поддерживает требуемый функционал + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: Невозможно установить 'SQL_CURSOR_STATIC' атрибутом выражение. Проверьте настройки драйвера ODBC + + + Unable to execute statement + Невозможно выполнить выражение + + + Unable to fetch next + Невозможно получить следующую строку + + + Unable to prepare statement + Невозможно подготовить выражение + + + Unable to bind variable + Невозможно привязать значение + + + Unable to fetch last + Невозможно получить последнюю строку + + + Unable to fetch + Невозможно получить данные + + + Unable to fetch first + Невозможно получить первую строку + + + Unable to fetch previous + Невозможно получить предыдущую строку + + + + QObject + + Invalid hostname + Некорректное имя узла + + + Operation not supported on %1 + Операция не поддерживается для %1 + + + Invalid URI: %1 + Некорректный URI: %1 + + + Socket error on %1: %2 + Ошика сокета для %1: %2 + + + Remote host closed the connection prematurely on %1 + Удалённый узел неожиданно прервал соединение для %1 + + + No host name given + Имя узла не задано + + + + QPPDOptionsModel + + Name + Имя + + + Value + Значение + + + + QPSQLDriver + + Unable to connect + Невозможно соединиться + + + Could not begin transaction + Не удалось начать транзакцию + + + Could not commit transaction + Не удалось завершить транзакцию + + + Could not rollback transaction + Не удалось отозвать транзакцию + + + Unable to subscribe + Невозможно подписаться + + + Unable to unsubscribe + Невозможно отписаться + + + + QPSQLResult + + Unable to create query + Невозможно создать запрос + + + Unable to prepare statement + Невозможно подготовить выражение + + + + QPageSetupWidget + + Centimeters (cm) + Сантиметры (cm) + + + Millimeters (mm) + Миллиметры (mm) + + + Inches (in) + Дюймы (in) + + + Points (pt) + Точки (pt) + + + Form + Форма + + + Paper + Бумага + + + Page size: + Размер страницы: + + + Width: + Ширина: + + + Height: + Высота: + + + Paper source: + Источник бумаги: + + + Orientation + Ориентация + + + Portrait + Книжная + + + Landscape + Альбомная + + + Reverse landscape + Перевёрнутая альбомная + + + Reverse portrait + Перевёрнутая книжная + + + Margins + Поля + + + top margin + верхнее поле + + + left margin + левое поле + + + right margin + правое поле + + + bottom margin + нижнее поле + + + + QPluginLoader + + Unknown error + Неизвестная ошибка + + + The plugin was not loaded. + Модуль не был загружен. + + + + QPrintDialog + + locally connected + соединено локально + + + Aliases: %1 + Псевдонимы: %1 + + + unknown + неизвестно + + + OK + Закрыть + + + Print all + Печатать все + + + Print range + Печатать диапазон + + + A0 (841 x 1189 mm) + A0 (841 x 1189 мм) + + + A1 (594 x 841 mm) + A1 (594 x 841 мм) + + + A2 (420 x 594 mm) + A2 (420 x 594 мм) + + + A3 (297 x 420 mm) + A3 (297 x 420 мм) + + + A5 (148 x 210 mm) + A5 (148 x 210 мм) + + + A6 (105 x 148 mm) + A6 (105 x 148 мм) + + + A7 (74 x 105 mm) + A7 (74 x 105 мм) + + + A8 (52 x 74 mm) + A8 (52 x 74 мм) + + + A9 (37 x 52 mm) + A9 (37 x 52 мм) + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 мм) + + + B1 (707 x 1000 mm) + B1 (707 x 1000 мм) + + + B2 (500 x 707 mm) + B2 (500 x 707 мм) + + + B3 (353 x 500 mm) + B3 (353 x 500 мм) + + + B4 (250 x 353 mm) + B4 (250 x 353 мм) + + + B6 (125 x 176 mm) + B6 (125 x 176 мм) + + + B7 (88 x 125 mm) + B7 (88 x 125 мм) + + + B8 (62 x 88 mm) + B8 (62 x 88 мм) + + + B9 (44 x 62 mm) + B9 (44 x 62 мм) + + + B10 (31 x 44 mm) + B10 (31 x 44 мм) + + + C5E (163 x 229 mm) + C5E (163 x 229 мм) + + + DLE (110 x 220 mm) + DLE (110 x 220 мм) + + + Folio (210 x 330 mm) + Folio (210 x 330 мм) + + + Ledger (432 x 279 mm) + Ledger (432 x 279 мм) + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432 мм) + + + US Common #10 Envelope (105 x 241 mm) + Конверт US #10 (105x241 мм) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 мм, 8.26 x 11.7 дюймов) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 мм, 6.93 x 9.84 дюймов) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (191 x 254 мм, 7.5 x 10 дюймов) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (216 x 356 мм, 8.5 x 14 дюймов) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (216 x 279 мм, 8.5 x 11 дюймов) + + + Print selection + Выделенный фрагмент + + + Print + Печать + + + Print To File ... + Печать в файл ... + + + File %1 is not writable. +Please choose a different file name. + %1 недоступен для записи. +Выберите другое имя файла. + + + %1 already exists. +Do you want to overwrite it? + %1 уже существует. +Хотите заменить его? + + + File exists + Файл существует + + + <qt>Do you want to overwrite it?</qt> + <qt>Хотите заменить?</qt> + + + %1 is a directory. +Please choose a different file name. + %1 - это каталог. +Выберите другое имя файла. + + + The 'From' value cannot be greater than the 'To' value. + Значение 'от' не может быть больше значения 'до'. + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + Executive + + + Folio + Folio + + + Ledger + Ledger + + + Legal + Legal + + + Letter + Letter + + + Tabloid + Tabloid + + + US Common #10 Envelope + US Common #10 Envelope + + + Custom + Пользовательский + + + &Options >> + &Параметры >> + + + &Options << + &Параметры << + + + Print to File (PDF) + Печать в файл (PDF) + + + Print to File (Postscript) + Печать в файл (Postscript) + + + Local file + Локальный файл + + + Write %1 file + Запись %1 файла + + + &Print + &Печать + + + + QPrintPreviewDialog + + %1% + %1% + + + Print Preview + Просмотр печати + + + Next page + Следующая страница + + + Previous page + Предыдущая страница + + + First page + Первая страница + + + Last page + Последняя страница + + + Fit width + По ширине + + + Fit page + На всю страницу + + + Zoom in + Увеличить + + + Zoom out + Уменьшить + + + Portrait + Книжная + + + Landscape + Альбомная + + + Show single page + Показать одну страницу + + + Show facing pages + Показать титульные страницы + + + Show overview of all pages + Показать обзор всех страниц + + + Print + Печать + + + Page setup + Параметры страницы + + + Close + + + + Export to PDF + Экспорт в PDF + + + Export to PostScript + Экспорт в Postscript + + + Page Setup + Параметры страницы + + + + QPrintPropertiesWidget + + Form + Форма + + + Page + Страница + + + Advanced + Дополнительно + + + + QPrintSettingsOutput + + Form + Форма + + + Copies + Копии + + + Print range + Диапазон печати + + + Print all + Все + + + Pages from + Страницы от + + + to + до + + + Selection + Выделенный фрагмент + + + Output Settings + Настройки вывода + + + Copies: + Количество копий: + + + Collate + Разобрать про копиям + + + Reverse + Обратный порядок + + + Options + Параметры + + + Color Mode + Режим цвета + + + Color + Цвет + + + Grayscale + Оттенки серого + + + Duplex Printing + Двусторонняя печать + + + None + Нет + + + Long side + По длинной стороне + + + Short side + По короткой стороне + + + + QPrintWidget + + Form + Форма + + + Printer + Принтер + + + &Name: + &Название: + + + P&roperties + С&войства + + + Location: + Расположение: + + + Preview + Просмотр + + + Type: + Тип: + + + Output &file: + Вывод в &файл: + + + ... + ... + + + + QProcess + + Could not open input redirection for reading + Не удалось открыть перенаправление ввода для чтения + + + Could not open output redirection for writing + Не удалось открыть перенаправление вывода для записи + + + Resource error (fork failure): %1 + Ошибка выделения ресурсов (сбой fork): %1 + + + Process operation timed out + Время на операцию с процессом истекло + + + Error reading from process + Ошибка получения данных от процесса + + + Error writing to process + Ошибка отправки данных процессу + + + Process crashed + Процесс завершился с ошибкой + + + No program defined + Программа не указана + + + Process failed to start: %1 + Не удалось запустить процесс: %1 + + + + QProgressDialog + + Cancel + Отмена + + + + QPushButton + + Open + Открыть + + + + QRadioButton + + Check + Отметить + + + + QRegExp + + no error occurred + ошибки отсутствуют + + + disabled feature used + использование отключённых возможностей + + + bad char class syntax + неправильный синтаксис класса символов + + + bad lookahead syntax + неправильный предварительный синтаксис + + + bad repetition syntax + неправильный синтаксис повторения + + + invalid octal value + некорректное восьмеричное значение + + + missing left delim + отсутствует левый разделитель + + + unexpected end + неожиданный конец + + + met internal limit + достигнуто внутреннее ограничение + + + invalid interval + некорректный интервал + + + invalid category + некорректная категория + + + + QSQLite2Driver + + Error opening database + Ошибка открытия базы данных + + + Unable to begin transaction + Невозможно начать транзакцию + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Unable to rollback transaction + Невозможно отозвать транзакцию + + + + QSQLite2Result + + Unable to fetch results + Невозможно получить результаты + + + Unable to execute statement + Невозможно выполнить выражение + + + + QSQLiteDriver + + Error opening database + Ошибка открытия базы данных + + + Error closing database + Ошибка закрытия базы данных + + + Unable to begin transaction + Невозможно начать транзакцию + + + Unable to commit transaction + Невозможно завершить транзакцию + + + Unable to rollback transaction + Невозможно отозвать транзакцию + + + + QSQLiteResult + + Unable to fetch row + Невозможно получить строку + + + Unable to execute statement + Невозможно выполнить выражение + + + Unable to reset statement + Невозможно сбросить выражение + + + Unable to bind parameters + Невозможно привязать параметр + + + Parameter count mismatch + Количество параметров не совпадает + + + No query + Отсутствует запрос + + + + QScriptBreakpointsModel + + ID + ID + + + Location + Размещение + + + Condition + Условие + + + Ignore-count + Пропустить + + + Single-shot + Один раз + + + Hit-count + Попаданий + + + + QScriptBreakpointsWidget + + New + Новая + + + Delete + Удалить + + + + QScriptDebugger + + Go to Line + Перейти к строке + + + Line: + Строка: + + + Interrupt + Прервать + + + Shift+F5 + Shift+F5 + + + Continue + Продолжить + + + F5 + F5 + + + Step Into + Войти в + + + F11 + F11 + + + Step Over + Перейти через + + + F10 + F10 + + + Step Out + Выйти из функции + + + Shift+F11 + Shift+F11 + + + Run to Cursor + Выполнить до курсора + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + Выполнить до нового сценария + + + Toggle Breakpoint + Установить/убрать точку останова + + + F9 + F9 + + + Clear Debug Output + Очистить отладочный вывод + + + Clear Error Log + Очистить журнал ошибок + + + Clear Console + Очистить консоль + + + &Find in Script... + &Найти в сценарии... + + + Ctrl+F + Ctrl+F + + + Find &Next + Найти &следующее + + + F3 + F3 + + + Find &Previous + Найти &предыдущее + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + Отладка + + + + QScriptDebuggerCodeFinderWidget + + Close + Закрыть + + + Previous + Предыдущий + + + Next + Следующий + + + Case Sensitive + Учитывать регистр + + + Whole words + Слова целиком + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Поиск с начала + + + + QScriptDebuggerLocalsModel + + Name + Название + + + Value + Значение + + + + QScriptDebuggerStackModel + + Level + Уровень + + + Name + Название + + + Location + Размещение + + + + QScriptEdit + + Toggle Breakpoint + Установить/убрать точку останова + + + Disable Breakpoint + Убрать точку останова + + + Enable Breakpoint + Установить точку останова + + + Breakpoint Condition: + Условие точки останова: + + + + QScriptEngineDebugger + + Loaded Scripts + Загруженные сценарии + + + Breakpoints + Точки останова + + + Stack + Стек + + + Locals + Локальные переменные + + + Console + Консоль + + + Debug Output + Отладочный вывод + + + Error Log + Журнал ошибок + + + Search + Поиск + + + View + Вид + + + Qt Script Debugger + Отладчик сценариев Qt + + + + QScriptNewBreakpointWidget + + Close + Закрыть + + + + QScrollBar + + Scroll here + Прокрутить сюда + + + Left edge + К левой границе + + + Top + Вверх + + + Right edge + К правой границе + + + Bottom + Вниз + + + Page left + На страницу влево + + + Page up + На страницу вверх + + + Page right + На страницу вправо + + + Page down + На страницу вниз + + + Scroll left + Прокрутить влево + + + Scroll up + Прокрутить вверх + + + Scroll right + Прокрутить вправо + + + Scroll down + Прокрутить вниз + + + Line up + На строку вверх + + + Position + Положение + + + Line down + На строку вниз + + + + QSharedMemory + + %1: create size is less then 0 + %1: размер меньше нуля + + + %1: unable to lock + %1: невозможно заблокировать + + + %1: unable to unlock + %1: невозможно разблокировать + + + %1: permission denied + %1: доступ запрещён + + + %1: already exists + %1: уже существует + + + %1: doesn't exists + %1: не существует + + + %1: out of resources + %1: недостаточно ресурсов + + + %1: unknown error %2 + %1: неизвестная ошибка %2 + + + %1: key is empty + %1: пустой ключ + + + %1: ftok failed + %1: ошибка ftok + + + %1: unable to make key + %1: невозможно создать ключ + + + %1: doesn't exist + %1: не существует + + + %1: UNIX key file doesn't exist + %1: специфический ключ UNIX не существует + + + %1: system-imposed size restrictions + %1: системой наложены ограничения на размер + + + %1: not attached + %1: не приложенный + + + %1: invalid size + %1: некорректный размер + + + %1: key error + %1: некорректный ключ + + + %1: size query failed + %1: не удалось запросить размер + + + %1: unable to set key on lock + %1: невозможно установить ключ на блокировку + + + + QShortcut + + Space + Пробел + + + Esc + Esc + + + Tab + Tab + + + Backtab + Обратная табуляция + + + Backspace + Backspace + + + Return + Возврат + + + Enter + Ввод + + + Ins + Ins + + + Del + Del + + + Pause + Пауза + + + Print + Распечатать + + + SysReq + SysReq + + + Home + Главный + + + End + Завершить + + + Left + Влево + + + Up + Вверх + + + Right + Вправо + + + Down + Вниз + + + PgUp + PgUp + + + PgDown + PgDown + + + CapsLock + CapsLock + + + NumLock + NumLock + + + ScrollLock + ScrollLock + + + Menu + Меню + + + Help + Справка + + + Back + Назад + + + Forward + Вперёд + + + Stop + Остановить + + + Refresh + Обновить + + + Volume Down + Тише + + + Volume Mute + Выключить звук + + + Volume Up + Громче + + + Bass Boost + Усиление басов + + + Bass Up + Увеличить басы + + + Bass Down + Уменьшить басы + + + Treble Up + Увеличить ВЧ + + + Treble Down + Уменьшить ВЧ + + + Media Play + Воспроизведение + + + Media Stop + Остановить воспроизведение + + + Media Previous + Воспроизвести предыдущее + + + Media Next + Воспроизвести следующее + + + Media Record + Запись + + + Favorites + Избранное + + + Search + Поиск + + + Standby + Режим ожидания + + + Open URL + Открыть URL + + + Launch Mail + Почта + + + Launch Media + Проигрыватель + + + Launch (0) + Запустить (0) + + + Launch (1) + Запустить (1) + + + Launch (2) + Запустить (2) + + + Launch (3) + Запустить (3) + + + Launch (4) + Запустить (4) + + + Launch (5) + Запустить (5) + + + Launch (6) + Запустить (6) + + + Launch (7) + Запустить (7) + + + Launch (8) + Запустить (8) + + + Launch (9) + Запустить (9) + + + Launch (A) + Запустить (A) + + + Launch (B) + Запустить (B) + + + Launch (C) + Запустить (C) + + + Launch (D) + Запустить (D) + + + Launch (E) + Запустить (E) + + + Launch (F) + Запустить (F) + + + Monitor Brightness Up + Увеличить яркость монитора + + + Monitor Brightness Down + Уменьшить яркость монитора + + + Keyboard Light On/Off + Вкл./Откл. подсветку клавиатуры + + + Keyboard Brightness Up + Увеличить яркость клавиатуры + + + Keyboard Brightness Down + Уменьшить яркость клавиатуры + + + Power Off + Откл. питание + + + Wake Up + Проснуться + + + Eject + Извлечь + + + Screensaver + Экранная заставка + + + WWW + WWW + + + Sleep + Спящий режим + + + LightBulb + Лампочка + + + Shop + Магазин + + + History + История + + + Add Favorite + Добавить избранные + + + Hot Links + Активные ссылки + + + Adjust Brightness + Настроить яркость + + + Finance + Финансы + + + Community + Сообщество + + + Audio Rewind + Перемотка аудио назад + + + Back Forward + ## + + + Application Left + Приложение слева + + + Application Right + Приложение справа + + + Book + Книга + + + CD + Компакт-диск + + + Calculator + Калькулятор + + + Clear + Очистить + + + Clear Grab + Очистить буфер + + + Close + Закрыть + + + Copy + Скопировать + + + Cut + Вырезать + + + Display + Дисплей + + + DOS + DOS + + + Documents + Документы + + + Spreadsheet + Электронная таблица + + + Browser + Браузер + + + Game + Игра + + + Go + Перейти + + + iTouch + iTouch + + + Logoff + Выйти + + + Market + Рынок + + + Meeting + Встреча + + + Keyboard Menu + Меню клавиатуры + + + Menu PB + Меню PB + + + My Sites + Мои сайты + + + News + Новости + + + Home Office + Домашний офис + + + Option + Функция + + + Paste + Вставить + + + Phone + Телефон + + + Reply + Ответить + + + Reload + Перезагрузить + + + Rotate Windows + Повернуть Windows + + + Rotation PB + Поворот PB + + + Rotation KB + Поворот KB + + + Save + Сохранить + + + Send + Передать + + + Spellchecker + Проверка правописания + + + Split Screen + Разделить экран + + + Support + Поддержка + + + Task Panel + Панель задач + + + Terminal + Терминал + + + Tools + Инструменты + + + Travel + ## + + + Video + Видео + + + Word Processor + Редактор текста + + + XFer + XFer + + + Zoom In + Увеличить + + + Zoom Out + Уменьшить + + + Away + Отсутствует + + + Messenger + Messenger + + + WebCam + WebCam + + + Mail Forward + Переслать почту + + + Pictures + Фотографии + + + Music + Музыка + + + Battery + Аккумулятор + + + Bluetooth + Bluetooth + + + Wireless + Беспроводной + + + Ultra Wide Band + Сверхширокий диапазон + + + Audio Forward + Перемотка аудио вперед + + + Audio Repeat + Повтор аудио + + + Audio Random Play + Воспроизведение аудио в случайном порядке + + + Subtitle + Подзаголовок + + + Audio Cycle Track + Повтор аудиодорожки + + + Time + Время + + + View + Вид + + + Top Menu + Верхнее меню + + + Suspend + Приостановить + + + Hibernate + Спящий режим + + + Print Screen + Печать экрана + + + Page Up + Страница вверх + + + Page Down + Страница вниз + + + Caps Lock + Caps Lock + + + Num Lock + Num Lock + + + Number Lock + Режим ввода цифр + + + Scroll Lock + Блокировка прокрутки + + + Insert + Вставить + + + Delete + Удалить + + + Escape + Выход + + + System Request + Системный запрос + + + Select + Выбрать + + + Yes + Да + + + No + Нет + + + Context1 + Контекст1 + + + Context2 + Контекст2 + + + Context3 + Контекст3 + + + Context4 + Контекст4 + + + Call + Вызов + + + Hangup + Завершить вызов + + + Flip + Перевернуть + + + Ctrl + Ctrl + + + Shift + Shift + + + Alt + Alt + + + Meta + ## + + + + + + + + + F%1 + F%1 + + + Home Page + Главная страница + + + + QSlider + + Page left + Страница влево + + + Page up + Страница вверх + + + Position + Положение + + + Page right + Страница вправо + + + Page down + Страница вниз + + + + QSocks5SocketEngine + + Connection to proxy refused + В соединении с прокси-сервером отказано + + + Connection to proxy closed prematurely + Соединение с прокси-сервером неожиданно закрыто + + + Proxy host not found + Прокси-сервер не найден + + + Connection to proxy timed out + Время на соединение с прокси-сервером истекло + + + Proxy authentication failed + Не удалось авторизоваться на прокси-сервере + + + Proxy authentication failed: %1 + Не удалось авторизоваться на прокси-сервере: %1 + + + SOCKS version 5 protocol error + Ошибка протокола SOCKSv5 + + + General SOCKSv5 server failure + Ошибка сервере SOCKSv5 + + + Connection not allowed by SOCKSv5 server + Соединение не разрешено сервером SOCKSv5 + + + TTL expired + TTL истекло + + + SOCKSv5 command not supported + Команда SOCKSv5 не поддерживается + + + Address type not supported + Тип адреса не поддерживается + + + Unknown SOCKSv5 proxy error code 0x%1 + Неизвестная ошибка SOCKSv5 прокси (код 0x%1) + + + Network operation timed out + Время на сетевую операцию истекло + + + + QSoftKeyManager + + Ok + ОК + + + Select + Выбрать + + + Done + Готово + + + Options + Параметры + + + Cancel + Отмена + + + Exit + Выход + + + + QSpinBox + + More + Больше + + + Less + Меньше + + + + QSql + + Delete + Удалить + + + Delete this record? + Удалить данную запись? + + + Yes + Да + + + No + Нет + + + Insert + Вставить + + + Update + Обновить + + + Save edits? + Сохранить изменения? + + + Cancel + Отмена + + + Confirm + Подтверждение + + + Cancel your edits? + Отменить изменения? + + + + QSslSocket + + Unable to write data: %1 + Невозможно записать данные: %1 + + + Unable to decrypt data: %1 + Невозможно расшифровать данные: %1 + + + Error while reading: %1 + Ошибка чтения: %1 + + + Error during SSL handshake: %1 + Ошибка квитирования SSL: %1 + + + Error creating SSL context (%1) + Ошибка создания контекста SSL: (%1) + + + Invalid or empty cipher list (%1) + Неправильный или пустой список шифров (%1) + + + Private key does not certify public key, %1 + Частный ключ не подтверждает общий ключ, %1 + + + Error creating SSL session, %1 + Ошибка создания сессии SSL, %1 + + + Error creating SSL session: %1 + Ошибка создания сессии SSL: %1 + + + Cannot provide a certificate with no key, %1 + Невозможно предоставить сертификат без ключа, %1 + + + Error loading local certificate, %1 + Ошибка загрузки локального сертификата, %1 + + + Error loading private key, %1 + Ошибка загрузки закрытого ключа, %1 + + + No error + Нет ошибки + + + The issuer certificate could not be found + Невозможно найти сертификат издателя + + + The certificate signature could not be decrypted + Невозможно расшифровать подпись сертификата + + + The public key in the certificate could not be read + Невозможно прочитать общий ключ сертификата + + + The signature of the certificate is invalid + Неверная подпись сертификата + + + The certificate is not yet valid + Сертификат еще не действует + + + The certificate has expired + Сертификат истек + + + The certificate's notBefore field contains an invalid time + Поле notBefore сертификата содержит неверное время + + + The certificate's notAfter field contains an invalid time + Поле notAfter сертификата содержит неверное время + + + The certificate is self-signed, and untrusted + Сертификаты с внутренней подписью и не проверены + + + The root certificate of the certificate chain is self-signed, and untrusted + Корневой сертификат цепочки сертификатов имеет внутреннюю подппись и не проверен + + + The issuer certificate of a locally looked up certificate could not be found + Невозможно найти сертификат издателя локального сертификата + + + No certificates could be verified + Невозможно проверить сертификаты + + + One of the CA certificates is invalid + Один из сертификатов центра сертификации неверный + + + The basicConstraints path length parameter has been exceeded + Превышено значение параметра длины пути basicConstraints + + + The supplied certificate is unsuitable for this purpose + Представленный сертификат непригоден для этой цели + + + The root CA certificate is not trusted for this purpose + Корневой сертификат ЦС не проверен для этой цели + + + The root CA certificate is marked to reject the specified purpose + Корневой сертификат ЦС отмечен для отклонения для указанной цели + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + Текущий кандидат сертификат издателя отклонен, так как название темы не совпадает с названием издателя текущего сертификата + + + 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 + Текущий кандидат сертификат издателя отклонен, так как его название издателя и серийный номер не совпадают с идентификатором ключа текущего сертификата + + + The peer did not present any certificate + Сертификат не представлен + + + The host name did not match any of the valid hosts for this certificate + Имя владельца не совпадает с допустимыми владельцами сертификата + + + Unknown error + Неизвестная ошибка + + + + QStateMachine + + Missing initial state in compound state '%1' + Отсутствует исходное состояние в составном состоянии '%1' + + + Missing default state in history state '%1' + Отсутствует состояние по умолчанию в историческом состоянии '%1' + + + No common ancestor for targets and source of transition from state '%1' + Нет общего предка для целей и источника перехода из состояния '%1' + + + Unknown error + Неизвестная ошибка + + + + QSystemSemaphore + + %1: does not exist + %1: не существует + + + %1: out of resources + %1: недостаточно ресурсов + + + %1: permission denied + %1: доступ запрещён + + + %1: already exists + %1: уже существует + + + %1: unknown error %2 + %1: неизвестная ошибка %2 + + + + QTDSDriver + + Unable to open connection + Невозможно открыть соединение + + + Unable to use database + Невозможно использовать базу данных + + + + QTabBar + + Scroll Left + Прокрутить влево + + + Scroll Right + Прокрутить вправо + + + + QTcpServer + + Operation on socket is not supported + Операция с сокетом не поддерживается + + + + QTextControl + + &Undo + &Отменить действие + + + &Redo + &Повторить действие + + + Cu&t + &Вырезать + + + &Copy + &Копировать + + + Copy &Link Location + Скопировать &адрес ссылки + + + &Paste + В&ставить + + + Delete + Удалить + + + Select All + Выделить всё + + + + QToolButton + + Press + Нажать + + + Open + Открыть + + + + QUdpSocket + + This platform does not support IPv6 + Данная платформа не поддерживает IPv6 + + + + QUndoGroup + + Undo + Отменить действие + + + Redo + Повторить действие + + + + QUndoModel + + <empty> + <пусто> + + + + QUndoStack + + Undo + Отменить действие + + + Redo + Повторить действие + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM Признак письма слева направо + + + RLM Right-to-left mark + RLM Признак письма справа налево + + + ZWJ Zero width joiner + ZWJ Объединяющий символ нулевой ширины + + + ZWNJ Zero width non-joiner + ZWNJ Не объединяющий символ нулевой ширины + + + ZWSP Zero width space + ZWSP Пробел нулевой ширины + + + LRE Start of left-to-right embedding + LRE Начать встраивание слева направо + + + RLE Start of right-to-left embedding + RLE Начать встраивание справа налево + + + LRO Start of left-to-right override + LRE Начать замену слева направо + + + RLO Start of right-to-left override + RLE Начать замену справа налево + + + PDF Pop directional formatting + ## + + + Insert Unicode control character + Вставить управляющий символ Unicode + + + + QWebFrame + + Request cancelled + Запрос отменён + + + Request blocked + Запрос блокирован + + + Cannot show URL + Невозможно отобразить URL + + + Frame load interrupted by policy change + Загрузка фрейма прервана изменением политики + + + Cannot show mimetype + Невозможно отобразить тип MIME + + + File does not exist + Файл не существует + + + + QWebPage + + Submit + default label for Submit buttons in forms on web pages + Отправить + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + Отправить + + + Reset + default label for Reset buttons in forms on web pages + Сбросить + + + Choose File + title for file button used in HTML forms + Обзор... + + + No file selected + text to display in file button used in HTML forms when no file is selected + Файл не указан + + + Open in New Window + Open in New Window context menu item + Открыть в новом окне + + + Save Link... + Download Linked File context menu item + Сохранить по ссылке как... + + + Copy Link + Copy Link context menu item + Копировать адрес ссылки + + + Open Image + Open Image in New Window context menu item + Открыть изображение + + + Save Image + Download Image context menu item + Сохранить изображение + + + Copy Image + Copy Link context menu item + Копировать изображение в буффер обмена + + + Open Frame + Open Frame in New Window context menu item + Открыть фрейм + + + Copy + Copy context menu item + Копировать + + + Go Back + Back context menu item + Назад + + + Go Forward + Forward context menu item + Вперёд + + + Stop + Stop context menu item + Остановить + + + Reload + Reload context menu item + Обновить + + + Cut + Cut context menu item + Вырезать + + + Paste + Paste context menu item + Вставить + + + No Guesses Found + No Guesses Found context menu item + Неверное слово + + + Ignore + Ignore Spelling context menu item + Пропустить + + + Add To Dictionary + Learn Spelling context menu item + Добавить в словарь + + + Search The Web + Search The Web context menu item + Искать в Интернет + + + Look Up In Dictionary + Look Up in Dictionary context menu item + Искать в словаре + + + Open Link + Open Link context menu item + Открыть ссылку + + + Ignore + Ignore Grammar context menu item + Пропустить + + + Spelling + Spelling and Grammar context sub-menu item + Орфография + + + Show Spelling and Grammar + menu item title + Показать панель проверки правописания + + + Hide Spelling and Grammar + menu item title + Скрыть панель проверки правописания + + + Check Spelling + Check spelling context menu item + Проверка орфографии + + + Check Spelling While Typing + Check spelling while typing context menu item + Проверять орфографию при наборе текста + + + Check Grammar With Spelling + Check grammar with spelling context menu item + Проверять грамматику с орфографией + + + Fonts + Font context sub-menu item + Шрифты + + + Bold + Bold context menu item + Жирный + + + Italic + Italic context menu item + Курсив + + + Underline + Underline context menu item + Подчёркнутый + + + Outline + Outline context menu item + Перечёркнутый + + + Direction + Writing direction context sub-menu item + Направление письма + + + Text Direction + Text direction context sub-menu item + Направление текста + + + Default + Default writing direction context menu item + По умолчанию + + + Left to Right + Left to Right context menu item + Слева направо + + + Right to Left + Right to Left context menu item + Справа налево + + + Loading... + Media controller status message when the media is loading + Загрузка... + + + Live Broadcast + Media controller status message when watching a live broadcast + Потоковое вещание + + + Audio Element + Media controller element + Аудио-элемент + + + Video Element + Media controller element + Видеоэлемент + + + Mute Button + Media controller element + Кнопка "Отключить звук" + + + Unmute Button + Media controller element + Кнопка "Включить звук" + + + Play Button + Media controller element + Кнопка воспроизведения + + + Pause Button + Media controller element + Кнопка "Пауза" + + + Slider + Media controller element + Регулятор + + + Slider Thumb + Media controller element + Метка регулятора + + + Rewind Button + Media controller element + Кнопка "Перемотка назад" + + + Return to Real-time Button + Media controller element + Кнопка "Вернуть в реальное время" + + + Elapsed Time + Media controller element + Прошедшее время + + + Remaining Time + Media controller element + Оставшееся время + + + Status Display + Media controller element + Экран состояния + + + Fullscreen Button + Media controller element + Кнопка "На весь экран" + + + Seek Forward Button + Media controller element + Кнопка "Поиск вперед" + + + Seek Back Button + Media controller element + Кнопка "Поиск назад" + + + Audio element playback controls and status display + Media controller element + Органы управления воспроизведением аудио-элементов и отображением состояния + + + Video element playback controls and status display + Media controller element + Органы управления воспроизведением видеоэлементов и отображением состояния + + + Mute audio tracks + Media controller element + Отключить звук аудиодорожек + + + Unmute audio tracks + Media controller element + Включить звук аудиодорожек + + + Begin playback + Media controller element + Начать воспроизведение + + + Pause playback + Media controller element + Воспроизведение после паузы + + + Movie time scrubber + Media controller element + Очиститель времени фильма + + + Movie time scrubber thumb + Media controller element + Метка очистителя времени фильма + + + Rewind movie + Media controller element + Перемотать фильм назад + + + Return streaming movie to real-time + Media controller element + Вернуть потоковое воспроизведение фильма в реальное время + + + Current movie time + Media controller element + Время текущего фильма + + + Remaining movie time + Media controller element + Оставшееся время фильма + + + Current movie status + Media controller element + Состояние текущего фильма + + + Play movie in full-screen mode + Media controller element + Воспроизведение фильма в режиме отображения на весь экран + + + Seek quickly back + Media controller element + Быстрый поиск назад + + + Seek quickly forward + Media controller element + Быстрый поиск вперед + + + Indefinite time + Media time description + Неопределенное время + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1 дн. %2 ч. %3 мин. %4 сек. + + + %1 hours %2 minutes %3 seconds + Media time description + %1 ч. %2 мин. %3 сек. + + + %1 minutes %2 seconds + Media time description + %1 мин. %2 сек. + + + %1 seconds + Media time description + %1 сек. + + + Inspect + Inspect Element context menu item + Проверить + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + История поиска пуста + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + История поиска + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + Очистить историю поиска + + + Unknown + Unknown filesize FTP directory listing item + Неизвестно + + + Web Inspector - %2 + + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 px) + + + Bad HTTP request + Некорректный HTTP-запрос + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + Индекс поиска. Введите ключевые слова для поиска: + + + Scroll here + Прокрутить сюда + + + Left edge + К левой границе + + + Top + Вверх + + + Right edge + К правой границе + + + Bottom + Вниз + + + Page left + На страницу влево + + + Page up + На страницу вверх + + + Page right + На страницу вправо + + + Page down + На страницу вниз + + + Scroll left + Прокрутить влево + + + Scroll up + Прокрутить вверх + + + Scroll right + Прокрутить вправо + + + Scroll down + Прокрутить вниз + + + %n file(s) + number of chosen file + + %n файл(а) + %n файла + %n файлов + + + + JavaScript Alert - %1 + JavaScript: Предупреждение - %1 + + + JavaScript Confirm - %1 + JavaScript: Подтверждение - %1 + + + JavaScript Prompt - %1 + JavaScript: Запрос - %1 + + + JavaScript Problem - %1 + JavaScript: Проблема - %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + Сбой выполнения сценария на данной странице. Желаете остановить выполение сценария? + + + Move the cursor to the next character + Переместить указатель к следующему символу + + + Move the cursor to the previous character + Переместить указатель к предыдущему символу + + + Move the cursor to the next word + Переместить указатель к следующему слову + + + Move the cursor to the previous word + Переместить указатель к предыдущему слову + + + Move the cursor to the next line + Переместить указатель на следующую строку + + + Move the cursor to the previous line + Переместить указатель на предыдущую строку + + + Move the cursor to the start of the line + Переместить указатель в начало строки + + + Move the cursor to the end of the line + Переместить указатель в конец строки + + + Move the cursor to the start of the block + Переместить указатель в начало блока + + + Move the cursor to the end of the block + Переместить указатель в конец блока + + + Move the cursor to the start of the document + Переместить указатель в начало документа + + + Move the cursor to the end of the document + Переместить указатель в конец документа + + + Select all + Выделить всё + + + Select to the next character + Выделить до следующего символа + + + Select to the previous character + Выделить до предыдущего символа + + + Select to the next word + Выделить до следующего слова + + + Select to the previous word + Выделить до предыдущего слова + + + Select to the next line + Выделить до следующей строки + + + Select to the previous line + Выделить до предыдущей строки + + + Select to the start of the line + Выделить до начала строки + + + Select to the end of the line + Выделить до конца строки + + + Select to the start of the block + Выделить до начала блока + + + Select to the end of the block + Выделить до конца блока + + + Select to the start of the document + Выделить до начала документа + + + Select to the end of the document + Выделить до конца документа + + + Delete to the start of the word + Удалить до начала слова + + + Delete to the end of the word + Удалить до конца слова + + + Insert a new paragraph + Вставить новый параграф + + + Insert a new line + Вставить новую строку + + + Paste and Match Style + Вставить, сохранив стиль + + + Remove formatting + Удалить форматирование + + + Strikethrough + Зачёркнутый + + + Subscript + Подстрочный + + + Superscript + Надстрочный + + + Insert Bulleted List + Вставить маркированный список + + + Insert Numbered List + Вставить нумерованный список + + + Indent + Увеличить отступ + + + Outdent + Уменьшить отступ + + + Center + По центру + + + Justify + По ширине + + + Align Left + По левому краю + + + Align Right + По правому краю + + + + QWhatsThisAction + + What's This? + + + + + QWidget + + * + + + + + QWizard + + Cancel + + + + Help + + + + < &Back + + + + &Finish + + + + &Help + + + + Go Back + + + + Continue + + + + Commit + + + + Done + + + + &Next + + + + &Next > + + + + + QWorkspace + + &Restore + + + + &Move + + + + &Size + + + + Mi&nimize + + + + Ma&ximize + + + + &Close + + + + Stay on &Top + + + + Minimize + + + + Restore Down + + + + Close + + + + Sh&ade + + + + %1 - [%2] + + + + &Unshade + + + + + QXml + + no error occurred + + + + error triggered by consumer + + + + unexpected end of file + + + + more than one document type definition + + + + error occurred while parsing element + + + + tag mismatch + + + + error occurred while parsing content + + + + unexpected character + + + + invalid name for processing instruction + + + + version expected while reading the XML declaration + + + + wrong value for standalone declaration + + + + error occurred while parsing document type definition + + + + letter is expected + + + + error occurred while parsing comment + + + + error occurred while parsing reference + + + + internal general entity reference not allowed in DTD + + + + external parsed general entity reference not allowed in attribute value + + + + external parsed general entity reference not allowed in DTD + + + + unparsed entity reference in wrong context + + + + recursive entities + + + + error in the text declaration of an external entity + + + + encoding declaration or standalone declaration expected while reading the XML declaration + + + + standalone declaration expected while reading the XML declaration + + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + Предупреждение в %1, в строке %2, столбце%3: %4 + + + Warning in %1: %2 + Предупреждение в %1: %2 + + + Unknown location + Неизвестное местоположение + + + Error %1 in %2, at line %3, column %4: %5 + Ошибка %1 в %2, в строке %3, столбце %4: %5 + + + Error %1 in %2: %3 + Ошибка %1 в %2: %3 + + + + QXmlStream + + Extra content at end of document. + + + + Invalid entity value. + + + + Invalid XML character. + + + + Sequence ']]>' not allowed in content. + + + + Namespace prefix '%1' not declared + + + + Attribute redefined. + + + + Unexpected character '%1' in public id literal. + + + + Invalid XML version string. + + + + Unsupported XML version. + + + + %1 is an invalid encoding name. + + + + Encoding %1 is unsupported + + + + Standalone accepts only yes or no. + + + + Invalid attribute in XML declaration. + + + + Premature end of document. + + + + Invalid document. + + + + Expected + + + + , but got ' + + + + Unexpected ' + + + + Expected character data. + + + + Recursive entity detected. + + + + Start tag expected. + + + + XML declaration not at start of document. + + + + NDATA in parameter entity declaration. + + + + %1 is an invalid processing instruction name. + + + + Invalid processing instruction name. + + + + Illegal namespace declaration. + + + + Invalid XML name. + + + + Opening and ending tag mismatch. + + + + Reference to unparsed entity '%1'. + + + + Entity '%1' not declared. + + + + Reference to external entity '%1' in attribute value. + + + + Invalid character reference. + + + + Encountered incorrectly encoded content. + + + + The standalone pseudo attribute must appear after the encoding. + + + + %1 is an invalid PUBLIC identifier. + + + + + QtXmlPatterns + + At least one component must be present. + Должна присутствовать как минимум одна компонента. + + + %1 is not a valid value of type %2. + %1 не является правильным значением типа %2. + + + When casting to %1 from %2, the source value cannot be %3. + При преобразовании %2 в %1 исходное значение не может быть %3. + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Булево значение не может быть вычислено для последовательностей, которые содержат два и более атомарных значения. + + + The data of a processing instruction cannot contain the string %1 + Данные обрабатываемой инструкции не могут содержать строку '%1' + + + %1 is an invalid %2 + %1 некоррекно для %2 + + + %1 is not a valid XML 1.0 character. + Символ %1 недопустим для XML 1.0. + + + %1 was called. + %1 было вызвано. + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + В замещаемой строке '%1' должно сопровождаться как минимум одной цифрой, если неэкранировано. + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + В замещаемой строке символ '%1' может использоваться только для экранирования самого себя или '%2', но не '%3' + + + %1 matches newline characters + %1 соответствует символам конца строки + + + Matches are case insensitive + Соответствия регистронезависимы + + + %1 is an invalid regular expression pattern: %2 + %1 - неверный шаблон регулярного выражения: %2 + + + It will not be possible to retrieve %1. + Будет невозможно восстановить %1. + + + The default collection is undefined + Набор по умолчанию не определён + + + %1 cannot be retrieved + %1 не может быть восстановлен + + + The item %1 did not match the required type %2. + Элемент %1 не соответствует необходимому типу %2. + + + %1 is an unknown schema type. + %1 является схемой неизвестного типа. + + + A template with name %1 has already been declared. + + + + Only one %1 declaration can occur in the query prolog. + Только одно объявление %1 может присутствовать в прологе запроса. + + + The initialization of variable %1 depends on itself + Инициализация переменной %1 зависит от себя самой + + + The variable %1 is unused + Переменная %1 не используется + + + Version %1 is not supported. The supported XQuery version is 1.0. + Версия %1 не поддерживается. Поддерживается XQuery версии 1.0. + + + No function with signature %1 is available + Функция с сигнатурой %1 отсутствует + + + It is not possible to redeclare prefix %1. + Невозможно переопределить префикс %1. + + + Prefix %1 is already declared in the prolog. + Префикс %1 уже объявлен в прологе. + + + The name of an option must have a prefix. There is no default namespace for options. + Название опции должно содержать префикс. Нет пространства имён по умолчанию для опций. + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + Возможность импорта схем не поддерживается, следовательно, объявлений %1 быть не должно. + + + The target namespace of a %1 cannot be empty. + Целевое пространство имён %1 не может быть пустым. + + + The module import feature is not supported + Возможность импорта модулей не поддерживается + + + 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 + Пространство имён пользовательской функции в модуле библиотеки должен соответствовать пространству имён модуля. Другими словами, он должен быть %1 вместо %2 + + + A function already exists with the signature %1. + Функция с сигнатурой %1 уже существует. + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + Внешние функции не поддерживаются. Все поддерживаемые функции могут использоваться напрямую без первоначального объявления их в качестве внешних + + + The %1-axis is unsupported in XQuery + Ось %1 не поддерживается в XQuery + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + URI пространства имён не может быть пустой строкой при связывании с префиксом %1. + + + %1 is an invalid namespace URI. + %1 - неверный URI пространства имён. + + + It is not possible to bind to the prefix %1 + Невозможно связать с префиксом %1 + + + Two namespace declaration attributes have the same name: %1. + Два атрибута объявления пространств имён имеют одинаковое имя: %1. + + + The namespace URI must be a constant and cannot use enclosed expressions. + URI пространства имён должно быть константой и не может содержать выражений. + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 является объявлением атрибута вне области объявлений. Имейте в виду, возможность импорта схем не поддерживается. + + + empty + пусто + + + zero or one + нуль или один + + + exactly one + ровно один + + + one or more + один или более + + + zero or more + нуль или более + + + The focus is undefined. + Фокус не определён. + + + An attribute by name %1 has already been created. + Атрибут с именем %1 уже существует. + + + Network timeout. + Время ожидания сети истекло. + + + Element %1 can't be serialized because it appears outside the document element. + Элемент %1 не может быть сериализован, так как присутствует вне документа. + + + Year %1 is invalid because it begins with %2. + Год %1 неверен, так как начинается с %2. + + + Day %1 is outside the range %2..%3. + День %1 вне диапазона %2..%3. + + + Month %1 is outside the range %2..%3. + Месяц %1 вне диапазона %2..%3. + + + Overflow: Can't represent date %1. + Переполнение: Не удается представить дату %1. + + + Day %1 is invalid for month %2. + День %1 неверен для месяца %2. + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + Время 24:%1:%2.%3 неверно. 24 часа, но минуты, секунды и/или миллисекунды отличны от 0; + + + Time %1:%2:%3.%4 is invalid. + Время %1:%2:%3.%4 неверно. + + + Overflow: Date can't be represented. + Переполнение: невозможно представить дату. + + + At least one time component must appear after the %1-delimiter. + Как минимум одна компонента времени должна следовать за разделителем '%1'. + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + Деление числа типа %1 на %2 (не числовое выражение) недопустимо. + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + Деление числа типа %1 на %2 или %3 (плюс или минус нуль) недопустимо. + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + Умножение числа типа %1 на %2 или %3 (плюс-минус бесконечность) недопустимо. + + + A value of type %1 cannot have an Effective Boolean Value. + Значение типа %1 не может быть булевым значением. + + + Value %1 of type %2 exceeds maximum (%3). + Значение %1 типа %2 больше максимума (%3). + + + Value %1 of type %2 is below minimum (%3). + Значение %1 типа %2 меньше минимума (%3). + + + A value of type %1 must contain an even number of digits. The value %2 does not. + Значение типа %1 должно содержать четное количество цифр. Значение %2 этому требованию не удовлетворяет. + + + %1 is not valid as a value of type %2. + Значение %1 некорректно для типа %2. + + + Operator %1 cannot be used on type %2. + Оператор %1 не может использоваться для типа %2. + + + Operator %1 cannot be used on atomic values of type %2 and %3. + Оператор %1 не может использоваться для атомарных значений типов %2 и %3. + + + The namespace URI in the name for a computed attribute cannot be %1. + URI пространства имён в названии рассчитываемого атрибута не может быть %1. + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + Название расчитываемого атрибута не может иметь URI пространства имён %1 с локальным именем %2. + + + Type error in cast, expected %1, received %2. + Ошибка типов в преобразовании, ожидалось %1, получено %2. + + + 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. + При преобразовании в %1 или производные от него типы исходное значение должно быть того же типа или строковым литералом. Тип %2 недопустим. + + + A comment cannot contain %1 + Комментарий не может содержать %1 + + + A comment cannot end with a %1. + Комментарий не может оканчиваться на %1. + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + Узел-атрибут не может быть потомком узла-документа. Атрибут %1 неуместен. + + + A library module cannot be evaluated directly. It must be imported from a main module. + Модуль библиотеки не может использоваться напрямую. Он должен быть импортирован из основного модуля. + + + No template by name %1 exists. + Шаблон с именем %1 отсутствует. + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + Значение типа %1 не может быть условием. Условием могут являться числовой и булевый типы. + + + A positional predicate must evaluate to a single numeric value. + Позиционный предикат должен вычисляться как числовое выражение. + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + Целевое имя в обрабатываемой инструкции не может быть %1 в любой комбинации нижнего и верхнего регистров. Имя %2 некорректно. + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 некорректное целевое имя в обрабатываемой инструкции. Имя должно быть значением типа %2, например: %3. + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + Последняя часть пути должна содержать узлы или атомарные значения, но не может содержать и то, и другое одновременно. + + + No namespace binding exists for the prefix %1 + Отсутствует привязка к пространству имён для префикса %1 + + + No namespace binding exists for the prefix %1 in %2 + Отсутствует привязка к пространству имён для префикса %1 в %2 + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + Первый аргумент %1 не может быть типа %2. Он должен быть числового типа, типа xs:yearMonthDuration или типа xs:dayTimeDuration. + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + Первый аргумент %1 не может быть типа %2. Он должен быть типа %3, %4 или %5. + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + Второй аргумент %1 не может быть типа %2. Он должен быть типа %3, %4 или %5. + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + Если оба значения имеют региональные смещения, смещения должны быть одинаковы. %1 и %2 не одинаковы. + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + '%1' должно сопровождаться '%2' или '%3', но не в конце замещаемой строки. + + + %1 and %2 match the start and end of a line. + %1 и %2 соответствуют началу и концу строки. + + + Whitespace characters are removed, except when they appear in character classes + Символы пробелов удалены, за исключением тех, что были в классах символов + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 - неверный флаг для регулярного выражения. Допустимые флаги: + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + Префикс не должен быть указан, если первый параметр - пустая последовательность или пустая строка (вне пространства имён). Был указан префикс %1. + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + Форма нормализации %1 не поддерживается. Поддерживаются только %2, %3, %4, %5 и пустая, т.е. пустая строка (без нормализации). + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + Региональное смещение должно быть в переделах от %1 до %2 включительно. %3 выходит за допустимые пределы. + + + Required cardinality is %1; got cardinality %2. + Необходимо %1 элементов, получено %2. + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + Кодировка %1 неверна. Имя кодировки должно содержать только символы латиницы без пробелов и должно удовлетворять регулярному выражению %2. + + + The keyword %1 cannot occur with any other mode name. + Ключевое слово %1 не может встречаться с любым другим названием режима. + + + No variable with name %1 exists + + + + The value of attribute %1 must be of type %2, which %3 isn't. + + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + + + + A variable with name %1 has already been declared. + + + + No value is available for the external variable with name %1. + + + + A stylesheet function must have a prefixed name. + Функция стилей должна иметь имя с префиксом. + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + Пространтсво имён %1 зарезервировано, поэтому пользовательские функции не могут его использовать. Попробуйте предопределённый префикс %2, который существует для подобных ситуаций. + + + An argument with name %1 has already been declared. Every argument name must be unique. + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + Если функция %1 используется для сравнения внутри шаблона, аргумент должен быть ссылкой на переменную или строковым литералом. + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + В шаблоне XSL-T первый аргумент функции %1 должен быть строковым литералом, если функция используется для сравнения. + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + В шаблоне XSL-T первый аргумент функции %1 должен быть литералом или ссылкой на переменную, если функция используется для сравнения. + + + In an XSL-T pattern, function %1 cannot have a third argument. + В шаблоне XSL-T у функции %1 не должно быть третьего аргумента. + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + В шаблоне XSL-T только функции %1 и %2 могут использоваться для сравнения, но не %3. + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + В шаблоне XSL-T не может быть использована ось %1 - только оси %2 или %3. + + + %1 is an invalid template mode name. + %1 является неверным шаблоном имени режима. + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + Имя переменной, связанной с выражением for, должно отличаться от позиционной переменной. Две переменные с именем %1 конфликтуют. + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + Возможность проверки по схеме не поддерживается. Выражения %1 не могут использоваться. + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + Ни одно из выражений pragma не поддерживается. Должно существовать запасное выражение + + + Each name of a template parameter must be unique; %1 is duplicated. + Имя каждого параметра шаблона должно быть уникальным, но %1 повторяется. + + + No function with name %1 is available. + + + + %1 is not a valid numeric literal. + %1 является неверным числовым литералом. + + + W3C XML Schema identity constraint selector + + + + W3C XML Schema identity constraint field + + + + A construct was encountered which is disallowed in the current language(%1). + Встречена конструкция, запрещённая для текущего языка (%1). + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + Пространство имён %1 может быть связано только с %2 (в данном случае уже предопределено). + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + Префикс %1 может быть связан только с %2 (в данном случае уже предопределено). + + + An attribute with name %1 has already appeared on this element. + + + + A direct element constructor is not well-formed. %1 is ended with %2. + Прямой конструктор элемента составлен некорректно. %1 заканчивается на %2. + + + The name %1 does not refer to any schema type. + Название %1 не соответствует ни одному типу схемы. + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 - сложный тип. Преобразование к сложным типам невозможно. Однако, преобразование к атомарным типам как %2 работает. + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 - не атомарный тип. Преобразование возможно только к атомарным типам. + + + %1 is not a valid name for a processing-instruction. + %1 является неверным названием для инструкции обработки. + + + The name of an extension expression must be in a namespace. + Название выражения расширения должно быть в пространстве имён. + + + Required type is %1, but %2 was found. + Требуется тип %1, но обнаружен %2. + + + Promoting %1 to %2 may cause loss of precision. + Преобразование %1 к %2 может снизить точность. + + + It's not possible to add attributes after any other kind of node. + Невозможно добавлять атрибуты после любого другого вида узла. + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Поддерживается только Unicode Codepoint Collation (%1). %2 не поддерживается. + + + Integer division (%1) by zero (%2) is undefined. + Целочисленное деление (%1) на нуль (%2) не определено. + + + Division (%1) by zero (%2) is undefined. + Деление (%1) на нуль (%2) не определено. + + + Modulus division (%1) by zero (%2) is undefined. + Деление по модулю (%1) на нуль (%2) не определено. + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 принимает не более %n аргумента. Следовательно, %2 неверно. + %1 принимает не более %n аргументов. Следовательно, %2 неверно. + %1 принимает не более %n аргументов. Следовательно, %2 неверно. + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 принимает не менее %n аргумента. Следовательно, %2 неверно. + %1 принимает не менее %n аргументов. Следовательно, %2 неверно. + %1 принимает не менее %n аргументов. Следовательно, %2 неверно. + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + Корневой узел второго аргумента функции %1 должен быть документом. %2 не является документом. + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + Пространство имён для пользовательских функций не может быть пустым (попробуйте предопределённый префикс %1, который существует для подобных ситуаций) + + + A default namespace declaration must occur before function, variable, and option declarations. + Объявление пространство имён по умолчанию должно быть до объявления функций, переменных и опций. + + + Namespace declarations must occur before function, variable, and option declarations. + Объявление пространства имён должно быть до объявления функций, переменных и опций. + + + Module imports must occur before function, variable, and option declarations. + Импортируемые модули должны быть указаны до объявления функций, переменных и опций. + + + %1 is not a whole number of minutes. + %1 не является полным количеством минут. + + + Attribute %1 can't be serialized because it appears at the top level. + Атрибут %1 не может быть сериализован, так как присутствует на верхнем уровне. + + + %1 is an unsupported encoding. + Кодировка %1 не поддерживается. + + + %1 contains octets which are disallowed in the requested encoding %2. + %1 содержит октеты, которые недопустимы в требуемой кодировке %2. + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + Символ с кодом %1, присутствующий в %2 при использовании кодировки %3, не является допустимым символом XML. + + + Ambiguous rule match. + Неоднозначное соответствие правилу. + + + In a namespace constructor, the value for a namespace cannot be an empty string. + В конструкторе пространства имён значение пространства имён не может быть пустой строкой. + + + The prefix must be a valid %1, which %2 is not. + Префикс должен быть корректным %1, но %2 им не является. + + + The prefix %1 cannot be bound. + Префикс%1 не может быть связан. + + + Only the prefix %1 can be bound to %2 and vice versa. + Только префикс %1 может быть связан с %2 и наоборот. + + + The parameter %1 is required, but no corresponding %2 is supplied. + Необходим параметр %1 , но соответствующего %2 не передано. + + + The parameter %1 is passed, but no corresponding %2 exists. + Передан параметр %1 , но соответствующего %2 не существует. + + + The URI cannot have a fragment + URI не может содержать фрагмент + + + Element %1 is not allowed at this location. + Элемент %1 недопустим в этом месте. + + + Text nodes are not allowed at this location. + Текстовые узлы недопустимы в этом месте. + + + Parse error: %1 + Ошибка разбора: %1 + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + Значение атрибута версии XSL-T должно быть типа %1, но %2 им не является. + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + Выполняется таблица стилей XSL-T 1.0 с обработчиком версии 2.0. + + + Unknown XSL-T attribute %1. + Неизвествный атрибут XSL-T %1. + + + Attribute %1 and %2 are mutually exclusive. + Атрибуты %1 и %2 взаимоисключающие. + + + In a simplified stylesheet module, attribute %1 must be present. + В модуле упрощённой таблицы стилей обязан присутствовать атрибут %1. + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + Если элемент %1 не имеет атрибут %2, у него не может быть атрибутов %3 и %4. + + + Element %1 must have at least one of the attributes %2 or %3. + Элемент %1 должен иметь как минимум один из атрибутов %2 или %3. + + + At least one mode must be specified in the %1-attribute on element %2. + Как минимум один режим должен быть указан в атрибуте %1 элемента %2. + + + Element %1 must come last. + Элемент %1 должен идти последним. + + + At least one %1-element must occur before %2. + Как минимум один элемент %1 должен быть перед %2. + + + Only one %1-element can appear. + Должен быть только один элемент %1. + + + At least one %1-element must occur inside %2. + Как минимум один элемент %1 должен быть внутри %2. + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + Если %2 содержит атрибут %1, конструктор последовательности не может быть использован. + + + Element %1 must have either a %2-attribute or a sequence constructor. + Элемент %1 должен иметь атрибут %2 или конструктор последовательности. + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + Если параметр необходим, значение по умолчание не может быть передано через атрибут %1 или конструктор последовательности. + + + Element %1 cannot have children. + У элемента %1 не может быть потомков. + + + Element %1 cannot have a sequence constructor. + У элемента %1 не может быть конструктора последовательности. + + + The attribute %1 cannot appear on %2, when it is a child of %3. + У %2 не может быть атрибута %1, когда он является потомком %3. + + + A parameter in a function cannot be declared to be a tunnel. + Параметр в функции не может быть объявлен туннелем. + + + This processor is not Schema-aware and therefore %1 cannot be used. + Данный обработчик не работает со схемами, следовательно, %1 не может использоваться. + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + Элементы верхнего уровня таблицы стилей должны быть в пространстве имен, которым %1 не является. + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + Значение атрибута %1 элемента %2 должно быть или %3, или %4, но не %5. + + + Attribute %1 cannot have the value %2. + Атрибут %1 не может принимать значение %2. + + + The attribute %1 can only appear on the first %2 element. + Атрибут %1 может быть только у первого элемента %2. + + + At least one %1 element must appear as child of %2. + Как минимум один элемент %1 должен быть в %2. + + + %1 has inheritance loop in its base type %2. + + + + Circular inheritance of base type %1. + + + + Circular inheritance of union %1. + + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + + + + Base type of simple type %1 cannot be complex type %2. + + + + Simple type %1 cannot have direct base type %2. + + + + Simple type %1 is not allowed to have base type %2. + + + + Simple type %1 can only have simple atomic type as base type. + + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + + + + Variety of item type of %1 must be either atomic or union. + + + + Variety of member types of %1 must be atomic. + + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + + + + Simple type %1 is only allowed to have %2 facet. + + + + Base type of simple type %1 must have variety of type list. + + + + Base type of simple type %1 has defined derivation by restriction as final. + + + + Item type of base type does not match item type of %1. + + + + Simple type %1 contains not allowed facet type %2. + + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + + + + %1 is not allowed to have any facets. + + + + Base type %1 of simple type %2 must have variety of union. + + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + + + + Complex type %1 has duplicated element %2 in its content model. + + + + Complex type %1 has non-deterministic content. + + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + + + + Content model of complex type %1 is not a valid extension of content model of %2. + + + + Complex type %1 must have simple content. + + + + Complex type %1 must have the same simple type as its base class %2. + + + + Complex type %1 cannot be derived from base type %2%3. + + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + + + + Complex type %1 with simple content cannot be derived from complex base type %2. + + + + Item type of simple type %1 cannot be a complex type. + + + + Member type of simple type %1 cannot be a complex type. + + + + %1 is not allowed to have a member type with the same name as itself. + + + + %1 facet collides with %2 facet. + + + + %1 facet must have the same value as %2 facet of base type. + + + + %1 facet must be equal or greater than %2 facet of base type. + + + + %1 facet must be less than or equal to %2 facet of base type. + + + + %1 facet contains invalid regular expression + + + + Unknown notation %1 used in %2 facet. + + + + %1 facet contains invalid value %2: %3. + + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + + %1 facet cannot be %2 if %3 facet of base type is %4. + + + + %1 facet must be less than or equal to %2 facet. + + + + %1 facet must be less than %2 facet of base type. + + + + %1 facet and %2 facet cannot appear together. + + + + %1 facet must be greater than %2 facet of base type. + + + + %1 facet must be less than %2 facet. + + + + %1 facet must be greater than or equal to %2 facet of base type. + + + + Simple type contains not allowed facet %1. + + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + + Only %1 and %2 facets are allowed when derived by union. + + + + %1 contains %2 facet with invalid data: %3. + + + + Attribute group %1 contains attribute %2 twice. + + + + Attribute group %1 contains two different attributes that both have types derived from %2. + + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Complex type %1 contains attribute %2 twice. + + + + Complex type %1 contains two different attributes that both have types derived from %2. + + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Element %1 is not allowed to have a value constraint if its base type is complex. + + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + + + + Value constraint of element %1 is not of elements type: %2. + + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + + + + Type of element %1 cannot be derived from type of substitution group affiliation. + + + + Value constraint of attribute %1 is not of attributes type: %2. + + + + Attribute %1 has value constraint but has type derived from %2. + + + + %1 attribute in derived complex type must be %2 like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint. + + + + processContent of base wildcard must be weaker than derived wildcard. + + + + Element %1 exists twice with different types. + + + + Particle contains non-deterministic wildcards. + + + + Base attribute %1 is required but derived attribute is not. + + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + + + + Derived attribute %1 does not exist in the base definition. + + + + Derived attribute %1 does not match the wildcard in the base definition. + + + + Base attribute %1 is required but missing in derived definition. + + + + Derived definition contains an %1 element that does not exists in the base definition + + + + Derived wildcard is not a subset of the base wildcard. + + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + + + + Attribute %1 from base type is missing in derived type. + + + + Type of derived attribute %1 differs from type of base attribute. + + + + Base definition contains an %1 element that is missing in the derived definition + + + + %1 references unknown %2 or %3 element %4. + + + + %1 references identity constraint %2 that is no %3 or %4 element. + + + + %1 has a different number of fields from the identity constraint %2 that it references. + + + + Base type %1 of %2 element cannot be resolved. + + + + Item type %1 of %2 element cannot be resolved. + + + + Member type %1 of %2 element cannot be resolved. + + + + Type %1 of %2 element cannot be resolved. + + + + Base type %1 of complex type cannot be resolved. + + + + %1 cannot have complex base type that has a %2. + + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + + + + Type of %1 element must be a simple type, %2 is not. + + + + Substitution group %1 of %2 element cannot be resolved. + + + + Substitution group %1 has circular definition. + + + + Duplicated element names %1 in %2 element. + + + + Reference %1 of %2 element cannot be resolved. + + + + Circular group reference for %1. + + + + %1 element is not allowed in this scope + + + + %1 element cannot have %2 attribute with value other than %3. + + + + %1 element cannot have %2 attribute with value other than %3 or %4. + + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + + + + Attribute group %1 has circular reference. + + + + %1 attribute in %2 must have %3 use like in base type %4. + + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + + + + %1 has attribute wildcard but its base type %2 has not. + + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + + + + Namespace prefix of qualified name %1 is not defined. + + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + + Empty particle cannot be derived from non-empty particle. + + + + Derived particle is missing element %1. + + + + Derived element %1 is missing value constraint as defined in base particle. + + + + Derived element %1 has weaker value constraint than base particle. + + + + Fixed value constraint of element %1 differs from value constraint in base particle. + + + + Derived element %1 cannot be nillable as base element is not nillable. + + + + Block constraints of derived element %1 must not be more weaker than in the base element. + + + + Simple type of derived element %1 cannot be validly derived from base element. + + + + Complex type of derived element %1 cannot be validly derived from base element. + + + + Element %1 is missing in derived particle. + + + + Element %1 does not match namespace constraint of wildcard in base particle. + + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + + + + Derived particle allows content that is not allowed in the base particle. + + + + Can not process unknown element %1, expected elements are: %2. + + + + Element %1 is not allowed in this scope, possible elements are: %2. + + + + Child element is missing in that scope, possible child elements are: %1. + + + + Document is not a XML schema. + + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + + %1 attribute of %2 element contains invalid content: {%3}. + + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + + %1 element is not allowed inside %2 element if %3 attribute is present. + + + + %1 element has neither %2 attribute nor %3 child element. + + + + %1 element with %2 child element must not have a %3 attribute. + + + + %1 attribute of %2 element must be %3 or %4. + + + + %1 attribute of %2 element must have a value of %3. + + + + %1 attribute of %2 element must have a value of %3 or %4. + + + + %1 element must not have %2 and %3 attribute together. + + + + Content of %1 attribute of %2 element must not be from namespace %3. + + + + %1 attribute of %2 element must not be %3. + + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + + Specifying use='prohibited' inside an attribute group has no effect. + + + + %1 element must have either %2 or %3 attribute. + + + + %1 element must have either %2 attribute or %3 or %4 as child element. + + + + %1 element requires either %2 or %3 attribute. + + + + Text or entity references not allowed inside %1 element + + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + + %1 element is not allowed in this context. + + + + %1 attribute of %2 element has larger value than %3 attribute. + + + + Prefix of qualified name %1 is not defined. + + + + %1 attribute of %2 element must either contain %3 or the other values. + + + + Component with ID %1 has been defined previously. + + + + Element %1 already defined. + + + + Attribute %1 already defined. + + + + Type %1 already defined. + + + + Attribute group %1 already defined. + + + + Element group %1 already defined. + + + + Notation %1 already defined. + + + + Identity constraint %1 already defined. + + + + Duplicated facets in simple type %1. + + + + %1 is not valid according to %2. + + + + String content does not match the length facet. + + + + String content does not match the minLength facet. + + + + String content does not match the maxLength facet. + + + + String content does not match pattern facet. + + + + String content is not listed in the enumeration facet. + + + + Signed integer content does not match the maxInclusive facet. + + + + Signed integer content does not match the maxExclusive facet. + + + + Signed integer content does not match the minInclusive facet. + + + + Signed integer content does not match the minExclusive facet. + + + + Signed integer content is not listed in the enumeration facet. + + + + Signed integer content does not match pattern facet. + + + + Signed integer content does not match in the totalDigits facet. + + + + Unsigned integer content does not match the maxInclusive facet. + + + + Unsigned integer content does not match the maxExclusive facet. + + + + Unsigned integer content does not match the minInclusive facet. + + + + Unsigned integer content does not match the minExclusive facet. + + + + Unsigned integer content is not listed in the enumeration facet. + + + + Unsigned integer content does not match pattern facet. + + + + Unsigned integer content does not match in the totalDigits facet. + + + + Double content does not match the maxInclusive facet. + + + + Double content does not match the maxExclusive facet. + + + + Double content does not match the minInclusive facet. + + + + Double content does not match the minExclusive facet. + + + + Double content is not listed in the enumeration facet. + + + + Double content does not match pattern facet. + + + + Decimal content does not match in the fractionDigits facet. + + + + Decimal content does not match in the totalDigits facet. + + + + Date time content does not match the maxInclusive facet. + + + + Date time content does not match the maxExclusive facet. + + + + Date time content does not match the minInclusive facet. + + + + Date time content does not match the minExclusive facet. + + + + Date time content is not listed in the enumeration facet. + + + + Date time content does not match pattern facet. + + + + Duration content does not match the maxInclusive facet. + + + + Duration content does not match the maxExclusive facet. + + + + Duration content does not match the minInclusive facet. + + + + Duration content does not match the minExclusive facet. + + + + Duration content is not listed in the enumeration facet. + + + + Duration content does not match pattern facet. + + + + Boolean content does not match pattern facet. + + + + Binary content does not match the length facet. + + + + Binary content does not match the minLength facet. + + + + Binary content does not match the maxLength facet. + + + + Binary content is not listed in the enumeration facet. + + + + Invalid QName content: %1. + + + + QName content is not listed in the enumeration facet. + + + + QName content does not match pattern facet. + + + + Notation content is not listed in the enumeration facet. + + + + List content does not match length facet. + + + + List content does not match minLength facet. + + + + List content does not match maxLength facet. + + + + List content is not listed in the enumeration facet. + + + + List content does not match pattern facet. + + + + Union content is not listed in the enumeration facet. + + + + Union content does not match pattern facet. + + + + Data of type %1 are not allowed to be empty. + + + + Element %1 is missing child element. + + + + There is one IDREF value with no corresponding ID: %1. + + + + Loaded schema file is invalid. + + + + %1 contains invalid data. + + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + + + + No schema defined for validation. + + + + No definition for element %1 available. + + + + Specified type %1 is not known to the schema. + + + + Element %1 is not defined in this scope. + + + + Declaration for element %1 does not exist. + + + + Element %1 contains invalid content. + + + + Element %1 is declared as abstract. + + + + Element %1 is not nillable. + + + + Attribute %1 contains invalid data: %2 + + + + Element contains content although it is nillable. + + + + Fixed value constraint not allowed if element is nillable. + + + + Element %1 cannot contain other elements, as it has a fixed content. + + + + Specified type %1 is not validly substitutable with element type %2. + + + + Complex type %1 is not allowed to be abstract. + + + + Element %1 contains not allowed attributes. + + + + Element %1 contains not allowed child element. + + + + Content of element %1 does not match its type definition: %2. + + + + Content of element %1 does not match defined value constraint. + + + + Element %1 contains not allowed child content. + + + + Element %1 contains not allowed text content. + + + + Element %1 is missing required attribute %2. + + + + Attribute %1 does not match the attribute wildcard. + + + + Declaration for attribute %1 does not exist. + + + + Element %1 contains two attributes of type %2. + + + + Attribute %1 contains invalid content. + + + + Element %1 contains unknown attribute %2. + + + + Content of attribute %1 does not match its type definition: %2. + + + + Content of attribute %1 does not match defined value constraint. + + + + Non-unique value found for constraint %1. + + + + Key constraint %1 contains absent fields. + + + + Key constraint %1 contains references nillable element %2. + + + + No referenced value found for key reference %1. + + + + More than one value found for field %1. + + + + Field %1 has no simple type. + + + + ID value '%1' is not unique. + + + + '%1' attribute contains invalid QName content: %2. + + + + diff --git a/config.profiles/symbian/translations/qt_ur.ts b/config.profiles/symbian/translations/qt_ur.ts new file mode 100644 index 0000000..13797d5 --- /dev/null +++ b/config.profiles/symbian/translations/qt_ur.ts @@ -0,0 +1,8507 @@ + + + + + + CloseButton + + Close Tab + + + + + FakeReply + + Fake error ! + + + + Invalid URL + + + + + Phonon:: + + Notifications + + + + Music + + + + Video + + + + Communication + + + + Games + + + + Accessibility + + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + + + + Revert back to device '%1' + + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + + + + Could not open media source. + + + + Invalid source type. + + + + Could not locate media source. + + + + Could not open audio device. The device is already in use. + + + + Could not decode media source. + + + + + Phonon::MMF + + Audio Output + + + + The audio output device + + + + No error + + + + Not found + + + + Out of memory + + + + Not supported + + + + Overflow + + + + Underflow + + + + Already exists + + + + Path not found + + + + In use + + + + Not ready + + + + Access denied + + + + Could not connect + + + + Disconnected + + + + Permission denied + + + + Insufficient bandwidth + + + + Network unavailable + + + + Network communication error + + + + Streaming not supported + + + + Server alert + + + + Invalid protocol + + + + Invalid URL + + + + Multicast error + + + + Proxy server error + + + + Proxy server not supported + + + + Audio output error + + + + Video output error + + + + Decoder error + + + + Audio or video components could not be played + + + + DRM error + + + + Unknown error (%1) + + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + + + + Error opening file + + + + Error opening URL + + + + Setting volume failed + + + + Playback complete + + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + + + + + Phonon::MMF::AudioPlayer + + Getting position failed + + + + Opening clip failed + + + + + Phonon::MMF::EffectFactory + + Enabled + + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + + + + Decay time (ms) + + + + Density (%) + + + + Diffusion (%) + + + + Reflections delay (ms) + + + + Reflections level (mB) + + + + Reverb delay (ms) + + + + Reverb level (mB) + + + + Room HF level + + + + Room level (mB) + + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + + + + Error opening source: media type could not be determined + + + + + Phonon::MMF::StereoWidening + + Level (%) + + + + + Phonon::MMF::VideoPlayer + + Pause failed + + + + Seek failed + + + + Getting position failed + + + + Opening clip failed + + + + Buffering clip failed + + + + Video display error + + + + + Phonon::VolumeSlider + + Volume: %1% + + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + + + + Muted + + + + + Q3Accel + + %1, %2 not defined + + + + Ambiguous %1 not handled + + + + + Q3DataTable + + True + + + + False + + + + Insert + + + + Update + + + + Delete + + + + + Q3FileDialog + + Copy or Move a File + + + + Read: %1 + + + + Write: %1 + + + + Cancel + + + + All Files (*) + + + + Name + + + + Size + + + + Type + + + + Date + + + + Attributes + + + + &OK + + + + Look &in: + + + + File &name: + + + + File &type: + + + + Back + + + + One directory up + + + + Create New Folder + + + + List View + + + + Detail View + + + + Preview File Info + + + + Preview File Contents + + + + Read-write + + + + Read-only + + + + Write-only + + + + Inaccessible + + + + Symlink to File + + + + Symlink to Directory + + + + Symlink to Special + + + + File + + + + Dir + + + + Special + + + + Open + + + + Save As + + + + &Open + + + + &Save + + + + &Rename + + + + &Delete + + + + R&eload + + + + Sort by &Name + + + + Sort by &Size + + + + Sort by &Date + + + + &Unsorted + + + + Sort + + + + Show &hidden files + + + + the file + + + + the directory + + + + the symlink + + + + Delete %1 + + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + + + + &Yes + + + + &No + + + + New Folder 1 + + + + New Folder + + + + New Folder %1 + + + + Find Directory + + + + Directories + + + + Directory: + + + + Error + + + + %1 +File not found. +Check path and filename. + + + + All Files (*.*) + + + + Open + + + + Select a Directory + + + + + Q3LocalFs + + Could not read directory +%1 + + + + Could not create directory +%1 + + + + Could not remove file or directory +%1 + + + + Could not rename +%1 +to +%2 + + + + Could not open +%1 + + + + Could not write +%1 + + + + + Q3MainWindow + + Line up + + + + Customize... + + + + + Q3NetworkProtocol + + Operation stopped by the user + + + + + Q3ProgressDialog + + Cancel + + + + + Q3TabDialog + + OK + + + + Apply + + + + Help + + + + Defaults + + + + Cancel + + + + + Q3TextEdit + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + &Paste + + + + Clear + + + + Select All + + + + + Q3TitleBar + + System + + + + Restore up + + + + Minimize + + + + Restore down + + + + Maximize + + + + Close + + + + Contains commands to manipulate the window + + + + Puts a minimized window back to normal + + + + Moves the window out of the way + + + + Puts a maximized window back to normal + + + + Makes the window full screen + + + + Closes the window + + + + Displays the name of the window and contains controls to manipulate it + + + + + Q3ToolBar + + More... + + + + + Q3UrlOperator + + The protocol `%1' is not supported + + + + The protocol `%1' does not support listing directories + + + + The protocol `%1' does not support creating new directories + + + + The protocol `%1' does not support removing files or directories + + + + The protocol `%1' does not support renaming files or directories + + + + The protocol `%1' does not support getting files + + + + The protocol `%1' does not support putting files + + + + The protocol `%1' does not support copying or moving files or directories + + + + (unknown) + + + + + Q3Wizard + + &Cancel + + + + < &Back + + + + &Next > + + + + &Finish + + + + &Help + + + + + QAbstractSocket + + Host not found + + + + Connection refused + + + + Connection timed out + + + + Operation on socket is not supported + + + + Socket operation timed out + + + + Socket is not connected + + + + Network unreachable + + + + + QAbstractSpinBox + + &Step up + + + + Step &down + + + + &Select All + + + + + QAccessibleButton + + Press + + + + + QApplication + + QT_LAYOUT_DIRECTION + 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. + RTL + + + Executable '%1' requires Qt %2, found Qt %3. + + + + Incompatible Qt Library Error + + + + Activate + + + + Activates the program's main window + + + + + QAxSelect + + Select ActiveX Control + + + + OK + + + + &Cancel + + + + COM &Object: + + + + + QCheckBox + + Uncheck + + + + Check + + + + Toggle + + + + + QColorDialog + + Hu&e: + Hu&e: + + + &Sat: + &Sat: + + + &Val: + &Val: + + + &Red: + &Red: + + + &Green: + + + + Bl&ue: + + + + A&lpha channel: + + + + Select Color + Select Color + + + &Basic colors + + + + &Custom colors + + + + &Add to Custom Colors + + + + + QComboBox + + Open + Open + + + False + False + + + True + True + + + Close + Close + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + %1: key is empty + + + %1: unable to make key + QSystemSemaphore + %1: unable to make key + + + %1: ftok failed + QSystemSemaphore + %1: ftok failed + + + %1: already exists + QSystemSemaphore + %1: already exists + + + %1: does not exist + QSystemSemaphore + %1: does not exist + + + %1: out of resources + QSystemSemaphore + %1: out of resources + + + %1: unknown error %2 + QSystemSemaphore + %1: unknown error %2 + + + + QDB2Driver + + Unable to connect + Unable to connect + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + Unable to set autocommit + Unable to set autocommit + + + + QDB2Result + + Unable to execute statement + Unable to execute statement + + + Unable to prepare statement + Unable to prepare statement + + + Unable to bind variable + Unable to bind variable + + + Unable to fetch record %1 + Unable to fetch record %1 + + + Unable to fetch next + Unable to fetch next + + + Unable to fetch first + Unable to fetch first + + + + QDateTimeEdit + + AM + AM + + + am + am + + + PM + PM + + + pm + pm + + + + QDial + + QDial + QDial + + + SpeedoMeter + SpeedoMeter + + + SliderHandle + SliderHandle + + + + QDialog + + What's This? + What's This? + + + Done + Done + + + + QDialogButtonBox + + OK + OK + + + Save + Save + + + &Save + &Save + + + Open + Open + + + Cancel + Cancel + + + &Cancel + &Cancel + + + Close + Close + + + &Close + &Close + + + Apply + Apply + + + Reset + Reset + + + Help + Help + + + Don't Save + Don't Save + + + Discard + Discard + + + &Yes + &Yes + + + Yes to &All + Yes to &All + + + &No + &No + + + N&o to All + N&o to All + + + Save All + Save All + + + Abort + Abort + + + Retry + Retry + + + Ignore + Ignore + + + Restore Defaults + Restore Defaults + + + Close without Saving + Close without Saving + + + &OK + &OK + + + + QDirModel + + Name + Name + + + Size + Size + + + Kind + Match OS X Finder + Kind + + + Type + All other platforms + Type + + + Date Modified + Date Modified + + + + QDockWidget + + Close + Close + + + Dock + Dock + + + Float + Float + + + + QDoubleSpinBox + + More + More + + + Less + Less + + + + QErrorMessage + + &Show this message again + &Show this message again + + + &OK + &OK + + + Debug Message: + Debug Message: + + + Warning: + Warning: + + + Fatal Error: + Fatal Error: + + + + QFile + + Destination file exists + Destination file exists + + + Will not rename sequential file using block copy + Will not rename sequential file using block copy + + + Cannot remove source file + Cannot remove source file + + + Cannot open %1 for input + Cannot open %1 for input + + + Cannot open for output + Cannot open for output + + + Failure to write block + Failure to write block + + + Cannot create %1 for output + Cannot create %1 for output + + + + QFileDialog + + All Files (*) + All Files (*) + + + Back + Back + + + List View + List View + + + Detail View + Detail View + + + File + File + + + Open + Open + + + Save As + Save As + + + &Open + &Open + + + &Save + &Save + + + Recent Places + Recent Places + + + &Rename + &Rename + + + &Delete + &Delete + + + Show &hidden files + Show &hidden files + + + New Folder + New Folder + + + Find Directory + Find Directory + + + Directories + Directories + + + All Files (*.*) + All Files (*.*) + + + Directory: + Directory: + + + %1 already exists. +Do you want to replace it? + %1 already exists. +Do you want to replace it? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +File not found. +Please verify the correct file name was given. + + + My Computer + My Computer + + + Parent Directory + Parent Directory + + + Files of type: + Files of type: + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +Directory not found. +Please verify the correct directory name was given. + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' is write protected. +Do you want to delete it anyway? + + + Are sure you want to delete '%1'? + Are sure you want to delete '%1'? + + + Could not delete directory. + Could not delete directory. + + + Drive + Drive + + + File Folder + Match Windows Explorer + File Folder + + + Folder + All other platforms + Folder + + + Alias + Mac OS X Finder + Alias + + + Shortcut + All other platforms + Shortcut + + + Unknown + Unknown + + + Show + Show + + + Forward + Forward + + + &New Folder + &New Folder + + + &Choose + &Choose + + + Remove + Remove + + + File &name: + File &name: + + + Look in: + Look in: + + + Create New Folder + Create New Folder + + + + QFileSystemModel + + %1 TB + %1 TB + + + %1 GB + %1 GB + + + %1 MB + %1 MB + + + %1 KB + %1 KB + + + %1 bytes + %1 bytes + + + Invalid filename + Invalid filename + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + + + Name + Name + + + Size + Size + + + Kind + Match OS X Finder + Kind + + + Type + All other platforms + Type + + + Date Modified + Date Modified + + + My Computer + My Computer + + + Computer + Computer + + + %1 byte(s) + %1 byte(s) + + + + QFontDatabase + + Normal + Normal + + + Bold + Bold + + + Demi Bold + Demi Bold + + + Black + Black + + + Demi + Demi + + + Light + Light + + + Italic + Italic + + + Oblique + Oblique + + + Any + Any + + + Latin + Latin + + + Greek + Greek + + + Cyrillic + Cyrillic + + + Armenian + Armenian + + + Hebrew + Hebrew + + + Arabic + Arabic + + + Syriac + Syriac + + + Thaana + Thaana + + + Devanagari + Devanagari + + + Bengali + Bengali + + + Gurmukhi + Gurmukhi + + + Gujarati + Gujarati + + + Oriya + Oriya + + + Tamil + Tamil + + + Telugu + Telugu + + + Kannada + Kannada + + + Malayalam + Malayalam + + + Sinhala + Sinhala + + + Thai + Thai + + + Lao + Lao + + + Tibetan + Tibetan + + + Myanmar + Myanmar + + + Georgian + Georgian + + + Khmer + Khmer + + + Simplified Chinese + Simplified Chinese + + + Traditional Chinese + Traditional Chinese + + + Japanese + Japanese + + + Korean + Korean + + + Vietnamese + Vietnamese + + + Symbol + Symbol + + + Ogham + Ogham + + + Runic + Runic + + + N'Ko + N'Ko + + + + QFontDialog + + &Font + &Font + + + Font st&yle + Font st&yle + + + &Size + &Size + + + Effects + Effects + + + Stri&keout + Stri&keout + + + &Underline + &Underline + + + Sample + Sample + + + Select Font + Select Font + + + Wr&iting System + Wr&iting System + + + + QFtp + + Host %1 found + Host %1 found + + + Host found + Host found + + + Connected to host %1 + Connected to host %1 + + + Connected to host + Connected to host + + + Connection to %1 closed + Connection to %1 closed + + + Connection closed + Connection closed + + + Host %1 not found + Host %1 not found + + + Connection refused to host %1 + Connection refused to host %1 + + + Connection timed out to host %1 + Connection timed out to host %1 + + + Unknown error + Unknown error + + + Connecting to host failed: +%1 + Connecting to host failed: +%1 + + + Login failed: +%1 + Login failed: +%1 + + + Listing directory failed: +%1 + Listing directory failed: +%1 + + + Changing directory failed: +%1 + Changing directory failed: +%1 + + + Downloading file failed: +%1 + Downloading file failed: +%1 + + + Uploading file failed: +%1 + Uploading file failed: +%1 + + + Removing file failed: +%1 + Removing file failed: +%1 + + + Creating directory failed: +%1 + Creating directory failed: +%1 + + + Removing directory failed: +%1 + Removing directory failed: +%1 + + + Not connected + Not connected + + + Connection refused for data connection + Connection refused for data connection + + + + QHostInfo + + Unknown error + Unknown error + + + + QHostInfoAgent + + Host not found + Host not found + + + Unknown address type + Unknown address type + + + Unknown error + Unknown error + + + No host name given + No host name given + + + Invalid hostname + Invalid hostname + + + + QHttp + + Connection refused + Connection refused + + + Host %1 not found + Host %1 not found + + + Wrong content length + Wrong content length + + + HTTP request failed + HTTP request failed + + + Host %1 found + Host %1 found + + + Host found + Host found + + + Connected to host %1 + Connected to host %1 + + + Connected to host + Connected to host + + + Connection to %1 closed + Connection to %1 closed + + + Connection closed + Connection closed + + + Unknown error + Unknown error + + + Request aborted + Request aborted + + + No server set to connect to + No server set to connect to + + + Server closed connection unexpectedly + Server closed connection unexpectedly + + + Invalid HTTP response header + Invalid HTTP response header + + + Unknown authentication method + Unknown authentication method + + + Invalid HTTP chunked body + Invalid HTTP chunked body + + + Error writing response to device + Error writing response to device + + + Proxy authentication required + Proxy authentication required + + + Authentication required + Authentication required + + + Proxy requires authentication + Proxy requires authentication + + + Host requires authentication + Host requires authentication + + + Data corrupted + Data corrupted + + + SSL handshake failed + SSL handshake failed + + + Unknown protocol specified + Unknown protocol specified + + + Connection refused (or timed out) + Connection refused (or timed out) + + + HTTPS connection requested but SSL support not compiled in + HTTPS connection requested but SSL support not compiled in + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + Did not receive HTTP response from proxy + + + Error parsing authentication request from proxy + Error parsing authentication request from proxy + + + Authentication required + Authentication required + + + Proxy denied connection + Proxy denied connection + + + Error communicating with HTTP proxy + Error communicating with HTTP proxy + + + Proxy server not found + Proxy server not found + + + Proxy connection refused + Proxy connection refused + + + Proxy server connection timed out + Proxy server connection timed out + + + Proxy connection closed prematurely + Proxy connection closed prematurely + + + + QIBaseDriver + + Error opening database + Error opening database + + + Could not start transaction + Could not start transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QIBaseResult + + Unable to create BLOB + Unable to create BLOB + + + Unable to write BLOB + Unable to write BLOB + + + Unable to open BLOB + Unable to open BLOB + + + Unable to read BLOB + Unable to read BLOB + + + Could not find array + Could not find array + + + Could not get array data + Could not get array data + + + Could not get query info + Could not get query info + + + Could not start transaction + Could not start transaction + + + Unable to commit transaction + Unable to commit transaction + + + Could not allocate statement + Could not allocate statement + + + Could not prepare statement + Could not prepare statement + + + Could not describe input statement + Could not describe input statement + + + Could not describe statement + Could not describe statement + + + Unable to close statement + Unable to close statement + + + Unable to execute query + Unable to execute query + + + Could not fetch next item + Could not fetch next item + + + Could not get statement info + Could not get statement info + + + + QIODevice + + Permission denied + Permission denied + + + Too many open files + Too many open files + + + No such file or directory + No such file or directory + + + No space left on device + No space left on device + + + Unknown error + Unknown error + + + + QInputContext + + XIM + XIM + + + FEP + FEP + + + XIM input method + XIM input method + + + Windows input method + Windows input method + + + Mac OS X input method + Mac OS X input method + + + S60 FEP input method + S60 FEP input method + + + + QInputDialog + + Enter a value: + Enter a value: + + + + QLibrary + + Could not mmap '%1': %2 + Could not mmap '%1': %2 + + + Plugin verification data mismatch in '%1' + Plugin verification data mismatch in '%1' + + + Could not unmap '%1': %2 + Could not unmap '%1': %2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + + + Unknown error + Unknown error + + + The shared library was not found. + The shared library was not found. + + + The file '%1' is not a valid Qt plugin. + The file '%1' is not a valid Qt plugin. + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + + + Cannot load library %1: %2 + Cannot load library %1: %2 + + + Cannot unload library %1: %2 + Cannot unload library %1: %2 + + + Cannot resolve symbol "%1" in %2: %3 + Cannot resolve symbol "%1" in %2: %3 + + + + QLineEdit + + Select All + Select All + + + &Undo + &Undo + + + &Redo + &Redo + + + Cu&t + Cu&t + + + &Copy + &Copy + + + &Paste + &Paste + + + Delete + Delete + + + + QLocalServer + + %1: Name error + %1: Name error + + + %1: Permission denied + %1: Permission denied + + + %1: Address in use + %1: Address in use + + + %1: Unknown error %2 + %1: Unknown error %2 + + + + QLocalSocket + + %1: Connection refused + %1: Connection refused + + + %1: Remote closed + %1: Remote closed + + + %1: Invalid name + %1: Invalid name + + + %1: Socket access error + %1: Socket access error + + + %1: Socket resource error + %1: Socket resource error + + + %1: Socket operation timed out + %1: Socket operation timed out + + + %1: Datagram too large + %1: Datagram too large + + + %1: Connection error + %1: Connection error + + + %1: The socket operation is not supported + %1: The socket operation is not supported + + + %1: Unknown error + %1: Unknown error + + + %1: Unknown error %2 + %1: Unknown error %2 + + + + QMYSQLDriver + + Unable to open database ' + Unable to open database ' + + + Unable to connect + Unable to connect + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QMYSQLResult + + Unable to fetch data + Unable to fetch data + + + Unable to execute query + Unable to execute query + + + Unable to store result + Unable to store result + + + Unable to prepare statement + Unable to prepare statement + + + Unable to reset statement + Unable to reset statement + + + Unable to bind value + Unable to bind value + + + Unable to execute statement + Unable to execute statement + + + Unable to bind outvalues + Unable to bind outvalues + + + Unable to store statement results + Unable to store statement results + + + Unable to execute next query + Unable to execute next query + + + Unable to store next result + Unable to store next result + + + + QMdiArea + + (Untitled) + (Untitled) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + Close + + + Minimize + Minimize + + + Restore Down + Restore Down + + + &Restore + &Restore + + + &Move + &Move + + + &Size + &Size + + + Mi&nimize + Mi&nimize + + + Ma&ximize + Ma&ximize + + + Stay on &Top + Stay on &Top + + + &Close + &Close + + + Maximize + Maximize + + + Unshade + Unshade + + + Shade + Shade + + + Restore + Restore + + + Help + Help + + + Menu + Menu + + + - [%1] + - [%1] + + + + QMenu + + Close + Close + + + Open + Open + + + Execute + Execute + + + + QMenuBar + + Actions + Actions + + + + QMessageBox + + OK + OK + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <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><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> + <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> + + + About Qt + About Qt + + + Help + Help + + + Show Details... + Show Details... + + + Hide Details... + Hide Details... + + + + QMultiInputContext + + Select IM + Select IM + + + + QMultiInputContextPlugin + + Multiple input method switcher + Multiple input method switcher + + + Multiple input method switcher that uses the context menu of the text widgets + Multiple input method switcher that uses the context menu of the text widgets + + + + QNativeSocketEngine + + The remote host closed the connection + The remote host closed the connection + + + Network operation timed out + Network operation timed out + + + Out of resources + Out of resources + + + Unsupported socket operation + Unsupported socket operation + + + Protocol type not supported + Protocol type not supported + + + Invalid socket descriptor + Invalid socket descriptor + + + Network unreachable + Network unreachable + + + Permission denied + Permission denied + + + Connection timed out + Connection timed out + + + Connection refused + Connection refused + + + The bound address is already in use + The bound address is already in use + + + The address is not available + The address is not available + + + The address is protected + The address is protected + + + Unable to send a message + Unable to send a message + + + Unable to receive a message + Unable to receive a message + + + Unable to write + Unable to write + + + Network error + Network error + + + Another socket is already listening on the same port + Another socket is already listening on the same port + + + Unable to initialize non-blocking socket + Unable to initialize non-blocking socket + + + Unable to initialize broadcast socket + Unable to initialize broadcast socket + + + Attempt to use IPv6 socket on a platform with no IPv6 support + Attempt to use IPv6 socket on a platform with no IPv6 support + + + Host unreachable + Host unreachable + + + Datagram was too large to send + Datagram was too large to send + + + Operation on non-socket + Operation on non-socket + + + Unknown error + Unknown error + + + The proxy type is invalid for this operation + The proxy type is invalid for this operation + + + + QNetworkAccessCacheBackend + + Error opening %1 + Error opening %1 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + Write error writing to %1: %2 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + Request for opening non-local file %1 + + + Error opening %1: %2 + Error opening %1: %2 + + + Write error writing to %1: %2 + Write error writing to %1: %2 + + + Cannot open %1: Path is a directory + Cannot open %1: Path is a directory + + + Read error reading from %1: %2 + Read error reading from %1: %2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + No suitable proxy found + + + Cannot open %1: is a directory + Cannot open %1: is a directory + + + Logging in to %1 failed: authentication required + Logging in to %1 failed: authentication required + + + Error while downloading %1: %2 + Error while downloading %1: %2 + + + Error while uploading %1: %2 + Error while uploading %1: %2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + No suitable proxy found + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + Error downloading %1 - server replied: %2 + + + Protocol "%1" is unknown + Protocol "%1" is unknown + + + + QNetworkReplyImpl + + Operation canceled + Operation canceled + + + + QOCIDriver + + Unable to logon + Unable to logon + + + Unable to initialize + QOCIDriver + Unable to initialize + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QOCIResult + + Unable to bind column for batch execute + Unable to bind column for batch execute + + + Unable to execute batch statement + Unable to execute batch statement + + + Unable to goto next + Unable to goto next + + + Unable to alloc statement + Unable to alloc statement + + + Unable to prepare statement + Unable to prepare statement + + + Unable to get statement type + Unable to get statement type + + + Unable to bind value + Unable to bind value + + + Unable to execute statement + Unable to execute statement + + + + QODBCDriver + + Unable to connect + Unable to connect + + + Unable to disable autocommit + Unable to disable autocommit + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + Unable to enable autocommit + Unable to enable autocommit + + + Unable to connect - Driver doesn't support all functionality required + Unable to connect - Driver doesn't support all functionality required + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + + + Unable to execute statement + Unable to execute statement + + + Unable to fetch next + Unable to fetch next + + + Unable to prepare statement + Unable to prepare statement + + + Unable to bind variable + Unable to bind variable + + + Unable to fetch last + Unable to fetch last + + + Unable to fetch + Unable to fetch + + + Unable to fetch first + Unable to fetch first + + + Unable to fetch previous + Unable to fetch previous + + + + QObject + + Invalid hostname + Invalid hostname + + + Operation not supported on %1 + Operation not supported on %1 + + + Invalid URI: %1 + Invalid URI: %1 + + + Socket error on %1: %2 + Socket error on %1: %2 + + + Remote host closed the connection prematurely on %1 + Remote host closed the connection prematurely on %1 + + + No host name given + No host name given + + + + QPPDOptionsModel + + Name + Name + + + Value + Value + + + + QPSQLDriver + + Unable to connect + Unable to connect + + + Could not begin transaction + Could not begin transaction + + + Could not commit transaction + Could not commit transaction + + + Could not rollback transaction + Could not rollback transaction + + + Unable to subscribe + Unable to subscribe + + + Unable to unsubscribe + Unable to unsubscribe + + + + QPSQLResult + + Unable to create query + Unable to create query + + + Unable to prepare statement + Unable to prepare statement + + + + QPageSetupWidget + + Centimeters (cm) + Centimeters (cm) + + + Millimeters (mm) + Millimeters (mm) + + + Inches (in) + Inches (in) + + + Points (pt) + Points (pt) + + + Form + Form + + + Paper + Paper + + + Page size: + Page size: + + + Width: + Width: + + + Height: + Height: + + + Paper source: + Paper source: + + + Orientation + Orientation + + + Portrait + Portrait + + + Landscape + Landscape + + + Reverse landscape + Reverse landscape + + + Reverse portrait + Reverse portrait + + + Margins + Margins + + + top margin + top margin + + + left margin + left margin + + + right margin + right margin + + + bottom margin + bottom margin + + + + QPluginLoader + + Unknown error + Unknown error + + + The plugin was not loaded. + The plugin was not loaded. + + + + QPrintDialog + + locally connected + locally connected + + + Aliases: %1 + Aliases: %1 + + + unknown + unknown + + + OK + OK + + + Print all + Print all + + + Print range + Print range + + + A0 (841 x 1189 mm) + A0 (841 x 1189 mm) + + + A1 (594 x 841 mm) + A1 (594 x 841 mm) + + + A2 (420 x 594 mm) + A2 (420 x 594 mm) + + + A3 (297 x 420 mm) + A3 (297 x 420 mm) + + + A5 (148 x 210 mm) + A5 (148 x 210 mm) + + + A6 (105 x 148 mm) + A6 (105 x 148 mm) + + + A7 (74 x 105 mm) + A7 (74 x 105 mm) + + + A8 (52 x 74 mm) + A8 (52 x 74 mm) + + + A9 (37 x 52 mm) + A9 (37 x 52 mm) + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 mm) + + + B1 (707 x 1000 mm) + B1 (707 x 1000 mm) + + + B2 (500 x 707 mm) + B2 (500 x 707 mm) + + + B3 (353 x 500 mm) + B3 (353 x 500 mm) + + + B4 (250 x 353 mm) + B4 (250 x 353 mm) + + + B6 (125 x 176 mm) + B6 (125 x 176 mm) + + + B7 (88 x 125 mm) + B7 (88 x 125 mm) + + + B8 (62 x 88 mm) + B8 (62 x 88 mm) + + + B9 (44 x 62 mm) + B9 (44 x 62 mm) + + + B10 (31 x 44 mm) + B10 (31 x 44 mm) + + + C5E (163 x 229 mm) + C5E (163 x 229 mm) + + + DLE (110 x 220 mm) + DLE (110 x 220 mm) + + + Folio (210 x 330 mm) + Folio (210 x 330 mm) + + + Ledger (432 x 279 mm) + Ledger (432 x 279 mm) + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432 mm) + + + US Common #10 Envelope (105 x 241 mm) + US Common #10 Envelope (105 x 241 mm) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 mm, 8.26 x 11.7 inches) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 mm, 6.93 x 9.84 inches) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10 inches, 191 x 254 mm) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14 inches, 216 x 356 mm) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11 inches, 216 x 279 mm) + + + Print selection + Print selection + + + Print + Print + + + Print To File ... + Print To File ... + + + File %1 is not writable. +Please choose a different file name. + File %1 is not writable. +Please choose a different file name. + + + %1 already exists. +Do you want to overwrite it? + %1 already exists. +Do you want to overwrite it? + + + File exists + File exists + + + <qt>Do you want to overwrite it?</qt> + <qt>Do you want to overwrite it?</qt> + + + %1 is a directory. +Please choose a different file name. + %1 is a directory. +Please choose a different file name. + + + The 'From' value cannot be greater than the 'To' value. + The 'From' value cannot be greater than the 'To' value. + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + Executive + + + Folio + Folio + + + Ledger + Ledger + + + Legal + Legal + + + Letter + Letter + + + Tabloid + Tabloid + + + US Common #10 Envelope + US Common #10 Envelope + + + Custom + Custom + + + &Options >> + &Options >> + + + &Options << + &Options << + + + Print to File (PDF) + Print to File (PDF) + + + Print to File (Postscript) + Print to File (Postscript) + + + Local file + Local file + + + Write %1 file + Write %1 file + + + &Print + &Print + + + + QPrintPreviewDialog + + %1% + %1% + + + Print Preview + Print Preview + + + Next page + Next page + + + Previous page + Previous page + + + First page + First page + + + Last page + Last page + + + Fit width + Fit width + + + Fit page + Fit page + + + Zoom in + Zoom in + + + Zoom out + Zoom out + + + Portrait + Portrait + + + Landscape + Landscape + + + Show single page + Show single page + + + Show facing pages + Show facing pages + + + Show overview of all pages + Show overview of all pages + + + Print + Print + + + Page setup + Page setup + + + Close + Close + + + Export to PDF + Export to PDF + + + Export to PostScript + Export to PostScript + + + Page Setup + Page Setup + + + + QPrintPropertiesWidget + + Form + Form + + + Page + Page + + + Advanced + Advanced + + + + QPrintSettingsOutput + + Form + Form + + + Copies + Copies + + + Print range + Print range + + + Print all + Print all + + + Pages from + Pages from + + + to + to + + + Selection + Selection + + + Output Settings + Output Settings + + + Copies: + Copies: + + + Collate + Collate + + + Reverse + Reverse + + + Options + Options + + + Color Mode + Color Mode + + + Color + Color + + + Grayscale + Grayscale + + + Duplex Printing + Duplex Printing + + + None + None + + + Long side + Long side + + + Short side + Short side + + + + QPrintWidget + + Form + Form + + + Printer + Printer + + + &Name: + &Name: + + + P&roperties + P&roperties + + + Location: + Location: + + + Preview + Preview + + + Type: + Type: + + + Output &file: + Output &file: + + + ... + ... + + + + QProcess + + Could not open input redirection for reading + Could not open input redirection for reading + + + Could not open output redirection for writing + Could not open output redirection for writing + + + Resource error (fork failure): %1 + Resource error (fork failure): %1 + + + Process operation timed out + Process operation timed out + + + Error reading from process + Error reading from process + + + Error writing to process + Error writing to process + + + Process crashed + Process crashed + + + No program defined + No program defined + + + Process failed to start: %1 + Process failed to start: %1 + + + + QProgressDialog + + Cancel + Cancel + + + + QPushButton + + Open + Open + + + + QRadioButton + + Check + Check + + + + QRegExp + + no error occurred + no error occurred + + + disabled feature used + disabled feature used + + + bad char class syntax + bad char class syntax + + + bad lookahead syntax + bad lookahead syntax + + + bad repetition syntax + bad repetition syntax + + + invalid octal value + invalid octal value + + + missing left delim + missing left delim + + + unexpected end + unexpected end + + + met internal limit + met internal limit + + + invalid interval + invalid interval + + + invalid category + invalid category + + + + QSQLite2Driver + + Error opening database + Error opening database + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QSQLite2Result + + Unable to fetch results + Unable to fetch results + + + Unable to execute statement + Unable to execute statement + + + + QSQLiteDriver + + Error opening database + Error opening database + + + Error closing database + Error closing database + + + Unable to begin transaction + Unable to begin transaction + + + Unable to commit transaction + Unable to commit transaction + + + Unable to rollback transaction + Unable to rollback transaction + + + + QSQLiteResult + + Unable to fetch row + Unable to fetch row + + + Unable to execute statement + Unable to execute statement + + + Unable to reset statement + Unable to reset statement + + + Unable to bind parameters + Unable to bind parameters + + + Parameter count mismatch + Parameter count mismatch + + + No query + No query + + + + QScriptBreakpointsModel + + ID + ID + + + Location + Location + + + Condition + Condition + + + Ignore-count + Ignore-count + + + Single-shot + Single-shot + + + Hit-count + Hit-count + + + + QScriptBreakpointsWidget + + New + New + + + Delete + Delete + + + + QScriptDebugger + + Go to Line + Go to Line + + + Line: + Line: + + + Interrupt + Interrupt + + + Shift+F5 + Shift+F5 + + + Continue + Continue + + + F5 + F5 + + + Step Into + Step Into + + + F11 + F11 + + + Step Over + Step Over + + + F10 + F10 + + + Step Out + Step Out + + + Shift+F11 + Shift+F11 + + + Run to Cursor + Run to Cursor + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + Run to New Script + + + Toggle Breakpoint + Toggle Breakpoint + + + F9 + F9 + + + Clear Debug Output + Clear Debug Output + + + Clear Error Log + Clear Error Log + + + Clear Console + Clear Console + + + &Find in Script... + &Find in Script... + + + Ctrl+F + Ctrl+F + + + Find &Next + Find &Next + + + F3 + F3 + + + Find &Previous + Find &Previous + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + Debug + + + + QScriptDebuggerCodeFinderWidget + + Close + Close + + + Previous + Previous + + + Next + Next + + + Case Sensitive + Case Sensitive + + + Whole words + Whole words + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + + + + QScriptDebuggerLocalsModel + + Name + Name + + + Value + Value + + + + QScriptDebuggerStackModel + + Level + Level + + + Name + Name + + + Location + Location + + + + QScriptEdit + + Toggle Breakpoint + Toggle Breakpoint + + + Disable Breakpoint + Disable Breakpoint + + + Enable Breakpoint + Enable Breakpoint + + + Breakpoint Condition: + Breakpoint Condition: + + + + QScriptEngineDebugger + + Loaded Scripts + Loaded Scripts + + + Breakpoints + Breakpoints + + + Stack + Stack + + + Locals + Locals + + + Console + Console + + + Debug Output + Debug Output + + + Error Log + Error Log + + + Search + Search + + + View + View + + + Qt Script Debugger + Qt Script Debugger + + + + QScriptNewBreakpointWidget + + Close + Close + + + + QScrollBar + + Scroll here + Scroll here + + + Left edge + Left edge + + + Top + Top + + + Right edge + Right edge + + + Bottom + Bottom + + + Page left + Page left + + + Page up + Page up + + + Page right + Page right + + + Page down + Page down + + + Scroll left + Scroll left + + + Scroll up + Scroll up + + + Scroll right + Scroll right + + + Scroll down + Scroll down + + + Line up + Line up + + + Position + Position + + + Line down + Line down + + + + QSharedMemory + + %1: create size is less then 0 + %1: create size is less then 0 + + + %1: unable to lock + %1: unable to lock + + + %1: unable to unlock + %1: unable to unlock + + + %1: permission denied + %1: permission denied + + + %1: already exists + %1: already exists + + + %1: doesn't exists + %1: doesn't exists + + + %1: out of resources + %1: out of resources + + + %1: unknown error %2 + %1: unknown error %2 + + + %1: key is empty + %1: key is empty + + + %1: ftok failed + %1: ftok failed + + + %1: unable to make key + %1: unable to make key + + + %1: doesn't exist + %1: doesn't exist + + + %1: UNIX key file doesn't exist + %1: UNIX key file doesn't exist + + + %1: system-imposed size restrictions + %1: system-imposed size restrictions + + + %1: not attached + %1: not attached + + + %1: invalid size + %1: invalid size + + + %1: key error + %1: key error + + + %1: size query failed + %1: size query failed + + + %1: unable to set key on lock + %1: unable to set key on lock + + + + QShortcut + + Space + Space + + + Esc + Esc + + + Tab + Tab + + + Backtab + Backtab + + + Backspace + Backspace + + + Return + Return + + + Enter + Enter + + + Ins + Ins + + + Del + Del + + + Pause + Pause + + + Print + Print + + + SysReq + SysReq + + + Home + Home + + + End + End + + + Left + Left + + + Up + Up + + + Right + Right + + + Down + Down + + + PgUp + PgUp + + + PgDown + PgDown + + + CapsLock + CapsLock + + + NumLock + NumLock + + + ScrollLock + ScrollLock + + + Menu + Menu + + + Help + Help + + + Back + Back + + + Forward + Forward + + + Stop + Stop + + + Refresh + Refresh + + + Volume Down + Volume Down + + + Volume Mute + Volume Mute + + + Volume Up + Volume Up + + + Bass Boost + Bass Boost + + + Bass Up + Bass Up + + + Bass Down + Bass Down + + + Treble Up + Treble Up + + + Treble Down + Treble Down + + + Media Play + Media Play + + + Media Stop + Media Stop + + + Media Previous + Media Previous + + + Media Next + Media Next + + + Media Record + Media Record + + + Favorites + Favorites + + + Search + Search + + + Standby + Standby + + + Open URL + Open URL + + + Launch Mail + Launch Mail + + + Launch Media + Launch Media + + + Launch (0) + Launch (0) + + + Launch (1) + Launch (1) + + + Launch (2) + Launch (2) + + + Launch (3) + Launch (3) + + + Launch (4) + Launch (4) + + + Launch (5) + Launch (5) + + + Launch (6) + Launch (6) + + + Launch (7) + Launch (7) + + + Launch (8) + Launch (8) + + + Launch (9) + Launch (9) + + + Launch (A) + Launch (A) + + + Launch (B) + Launch (B) + + + Launch (C) + Launch (C) + + + Launch (D) + Launch (D) + + + Launch (E) + Launch (E) + + + Launch (F) + Launch (F) + + + Monitor Brightness Up + Monitor Brightness Up + + + Monitor Brightness Down + Monitor Brightness Down + + + Keyboard Light On/Off + Keyboard Light On/Off + + + Keyboard Brightness Up + Keyboard Brightness Up + + + Keyboard Brightness Down + Keyboard Brightness Down + + + Power Off + Power Off + + + Wake Up + Wake Up + + + Eject + Eject + + + Screensaver + Screensaver + + + WWW + WWW + + + Sleep + Sleep + + + LightBulb + LightBulb + + + Shop + Shop + + + History + History + + + Add Favorite + Add Favorite + + + Hot Links + Hot Links + + + Adjust Brightness + Adjust Brightness + + + Finance + Finance + + + Community + Community + + + Audio Rewind + Audio Rewind + + + Back Forward + Back Forward + + + Application Left + Application Left + + + Application Right + Application Right + + + Book + Book + + + CD + CD + + + Calculator + Calculator + + + Clear + Clear + + + Clear Grab + Clear Grab + + + Close + Close + + + Copy + Copy + + + Cut + Cut + + + Display + Display + + + DOS + DOS + + + Documents + Documents + + + Spreadsheet + Spreadsheet + + + Browser + Browser + + + Game + Game + + + Go + Go + + + iTouch + iTouch + + + Logoff + Logoff + + + Market + Market + + + Meeting + Meeting + + + Keyboard Menu + Keyboard Menu + + + Menu PB + Menu PB + + + My Sites + My Sites + + + News + News + + + Home Office + Home Office + + + Option + Option + + + Paste + Paste + + + Phone + Phone + + + Reply + Reply + + + Reload + Reload + + + Rotate Windows + Rotate Windows + + + Rotation PB + Rotation PB + + + Rotation KB + Rotation KB + + + Save + Save + + + Send + Send + + + Spellchecker + Spellchecker + + + Split Screen + Split Screen + + + Support + Support + + + Task Panel + Task Panel + + + Terminal + Terminal + + + Tools + Tools + + + Travel + Travel + + + Video + Video + + + Word Processor + Word Processor + + + XFer + XFer + + + Zoom In + Zoom In + + + Zoom Out + Zoom Out + + + Away + Away + + + Messenger + Messenger + + + WebCam + WebCam + + + Mail Forward + Mail Forward + + + Pictures + Pictures + + + Music + Music + + + Battery + Battery + + + Bluetooth + Bluetooth + + + Wireless + Wireless + + + Ultra Wide Band + Ultra Wide Band + + + Audio Forward + Audio Forward + + + Audio Repeat + Audio Repeat + + + Audio Random Play + Audio Random Play + + + Subtitle + Subtitle + + + Audio Cycle Track + Audio Cycle Track + + + Time + Time + + + View + View + + + Top Menu + Top Menu + + + Suspend + Suspend + + + Hibernate + Hibernate + + + Print Screen + Print Screen + + + Page Up + Page Up + + + Page Down + Page Down + + + Caps Lock + Caps Lock + + + Num Lock + Num Lock + + + Number Lock + Number Lock + + + Scroll Lock + Scroll Lock + + + Insert + Insert + + + Delete + Delete + + + Escape + Escape + + + System Request + System Request + + + Select + Select + + + Yes + Yes + + + No + No + + + Context1 + Context1 + + + Context2 + Context2 + + + Context3 + Context3 + + + Context4 + Context4 + + + Call + Call + + + Hangup + Hangup + + + Flip + Flip + + + Ctrl + Ctrl + + + Shift + Shift + + + Alt + Alt + + + Meta + Meta + + + + + + + + + F%1 + F%1 + + + Home Page + Home Page + + + + QSlider + + Page left + Page left + + + Page up + Page up + + + Position + Position + + + Page right + Page right + + + Page down + Page down + + + + QSocks5SocketEngine + + Connection to proxy refused + Connection to proxy refused + + + Connection to proxy closed prematurely + Connection to proxy closed prematurely + + + Proxy host not found + Proxy host not found + + + Connection to proxy timed out + Connection to proxy timed out + + + Proxy authentication failed + Proxy authentication failed + + + Proxy authentication failed: %1 + Proxy authentication failed: %1 + + + SOCKS version 5 protocol error + SOCKS version 5 protocol error + + + General SOCKSv5 server failure + General SOCKSv5 server failure + + + Connection not allowed by SOCKSv5 server + Connection not allowed by SOCKSv5 server + + + TTL expired + TTL expired + + + SOCKSv5 command not supported + SOCKSv5 command not supported + + + Address type not supported + Address type not supported + + + Unknown SOCKSv5 proxy error code 0x%1 + Unknown SOCKSv5 proxy error code 0x%1 + + + Network operation timed out + Network operation timed out + + + + QSoftKeyManager + + Ok + Ok + + + Select + Select + + + Done + Done + + + Options + Options + + + Cancel + Cancel + + + Exit + Exit + + + + QSpinBox + + More + More + + + Less + Less + + + + QSql + + Delete + Delete + + + Delete this record? + Delete this record? + + + Yes + Yes + + + No + No + + + Insert + Insert + + + Update + Update + + + Save edits? + Save edits? + + + Cancel + Cancel + + + Confirm + Confirm + + + Cancel your edits? + Cancel your edits? + + + + QSslSocket + + Unable to write data: %1 + Unable to write data: %1 + + + Unable to decrypt data: %1 + Unable to decrypt data: %1 + + + Error while reading: %1 + Error while reading: %1 + + + Error during SSL handshake: %1 + Error during SSL handshake: %1 + + + Error creating SSL context (%1) + Error creating SSL context (%1) + + + Invalid or empty cipher list (%1) + Invalid or empty cipher list (%1) + + + Private key does not certify public key, %1 + Private key does not certify public key, %1 + + + Error creating SSL session, %1 + Error creating SSL session, %1 + + + Error creating SSL session: %1 + Error creating SSL session: %1 + + + Cannot provide a certificate with no key, %1 + Cannot provide a certificate with no key, %1 + + + Error loading local certificate, %1 + Error loading local certificate, %1 + + + Error loading private key, %1 + Error loading private key, %1 + + + No error + No error + + + The issuer certificate could not be found + The issuer certificate could not be found + + + The certificate signature could not be decrypted + The certificate signature could not be decrypted + + + The public key in the certificate could not be read + The public key in the certificate could not be read + + + The signature of the certificate is invalid + The signature of the certificate is invalid + + + The certificate is not yet valid + The certificate is not yet valid + + + The certificate has expired + The certificate has expired + + + The certificate's notBefore field contains an invalid time + The certificate's notBefore field contains an invalid time + + + The certificate's notAfter field contains an invalid time + The certificate's notAfter field contains an invalid time + + + The certificate is self-signed, and untrusted + The certificate is self-signed, and untrusted + + + The root certificate of the certificate chain is self-signed, and untrusted + The root certificate of the certificate chain is self-signed, and untrusted + + + The issuer certificate of a locally looked up certificate could not be found + The issuer certificate of a locally looked up certificate could not be found + + + No certificates could be verified + No certificates could be verified + + + One of the CA certificates is invalid + One of the CA certificates is invalid + + + The basicConstraints path length parameter has been exceeded + The basicConstraints path length parameter has been exceeded + + + The supplied certificate is unsuitable for this purpose + The supplied certificate is unsuitable for this purpose + + + The root CA certificate is not trusted for this purpose + The root CA certificate is not trusted for this purpose + + + The root CA certificate is marked to reject the specified purpose + The root CA certificate is marked to reject the specified purpose + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + + + 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 + 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 + + + The peer did not present any certificate + The peer did not present any certificate + + + The host name did not match any of the valid hosts for this certificate + The host name did not match any of the valid hosts for this certificate + + + Unknown error + Unknown error + + + + QStateMachine + + Missing initial state in compound state '%1' + Missing initial state in compound state '%1' + + + Missing default state in history state '%1' + Missing default state in history state '%1' + + + No common ancestor for targets and source of transition from state '%1' + No common ancestor for targets and source of transition from state '%1' + + + Unknown error + Unknown error + + + + QSystemSemaphore + + %1: does not exist + %1: does not exist + + + %1: out of resources + %1: out of resources + + + %1: permission denied + %1: permission denied + + + %1: already exists + %1: already exists + + + %1: unknown error %2 + %1: unknown error %2 + + + + QTDSDriver + + Unable to open connection + Unable to open connection + + + Unable to use database + Unable to use database + + + + QTabBar + + Scroll Left + Scroll Left + + + Scroll Right + Scroll Right + + + + QTcpServer + + Operation on socket is not supported + Operation on socket is not supported + + + + QTextControl + + &Undo + &Undo + + + &Redo + &Redo + + + Cu&t + Cu&t + + + &Copy + &Copy + + + Copy &Link Location + Copy &Link Location + + + &Paste + &Paste + + + Delete + Delete + + + Select All + Select All + + + + QToolButton + + Press + Press + + + Open + Open + + + + QUdpSocket + + This platform does not support IPv6 + This platform does not support IPv6 + + + + QUndoGroup + + Undo + Undo + + + Redo + Redo + + + + QUndoModel + + <empty> + <empty> + + + + QUndoStack + + Undo + Undo + + + Redo + Redo + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM Left-to-right mark + + + RLM Right-to-left mark + RLM Right-to-left mark + + + ZWJ Zero width joiner + ZWJ Zero width joiner + + + ZWNJ Zero width non-joiner + ZWNJ Zero width non-joiner + + + ZWSP Zero width space + ZWSP Zero width space + + + LRE Start of left-to-right embedding + LRE Start of left-to-right embedding + + + RLE Start of right-to-left embedding + RLE Start of right-to-left embedding + + + LRO Start of left-to-right override + LRO Start of left-to-right override + + + RLO Start of right-to-left override + RLO Start of right-to-left override + + + PDF Pop directional formatting + PDF Pop directional formatting + + + Insert Unicode control character + Insert Unicode control character + + + + QWebFrame + + Request cancelled + Request cancelled + + + Request blocked + Request blocked + + + Cannot show URL + Cannot show URL + + + Frame load interrupted by policy change + Frame load interrupted by policy change + + + Cannot show mimetype + Cannot show mimetype + + + File does not exist + File does not exist + + + + QWebPage + + Submit + default label for Submit buttons in forms on web pages + Submit + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + Submit + + + Reset + default label for Reset buttons in forms on web pages + Reset + + + Choose File + title for file button used in HTML forms + Choose File + + + No file selected + text to display in file button used in HTML forms when no file is selected + No file selected + + + Open in New Window + Open in New Window context menu item + Open in New Window + + + Save Link... + Download Linked File context menu item + Save Link... + + + Copy Link + Copy Link context menu item + Copy Link + + + Open Image + Open Image in New Window context menu item + Open Image + + + Save Image + Download Image context menu item + Save Image + + + Copy Image + Copy Link context menu item + Copy Image + + + Open Frame + Open Frame in New Window context menu item + Open Frame + + + Copy + Copy context menu item + Copy + + + Go Back + Back context menu item + Go Back + + + Go Forward + Forward context menu item + Go Forward + + + Stop + Stop context menu item + Stop + + + Reload + Reload context menu item + Reload + + + Cut + Cut context menu item + Cut + + + Paste + Paste context menu item + Paste + + + No Guesses Found + No Guesses Found context menu item + No Guesses Found + + + Ignore + Ignore Spelling context menu item + Ignore + + + Add To Dictionary + Learn Spelling context menu item + Add To Dictionary + + + Search The Web + Search The Web context menu item + Search The Web + + + Look Up In Dictionary + Look Up in Dictionary context menu item + Look Up In Dictionary + + + Open Link + Open Link context menu item + Open Link + + + Ignore + Ignore Grammar context menu item + Ignore + + + Spelling + Spelling and Grammar context sub-menu item + Spelling + + + Show Spelling and Grammar + menu item title + Show Spelling and Grammar + + + Hide Spelling and Grammar + menu item title + Hide Spelling and Grammar + + + Check Spelling + Check spelling context menu item + Check Spelling + + + Check Spelling While Typing + Check spelling while typing context menu item + Check Spelling While Typing + + + Check Grammar With Spelling + Check grammar with spelling context menu item + Check Grammar With Spelling + + + Fonts + Font context sub-menu item + Fonts + + + Bold + Bold context menu item + Bold + + + Italic + Italic context menu item + Italic + + + Underline + Underline context menu item + Underline + + + Outline + Outline context menu item + Outline + + + Direction + Writing direction context sub-menu item + Direction + + + Text Direction + Text direction context sub-menu item + Text Direction + + + Default + Default writing direction context menu item + Default + + + Left to Right + Left to Right context menu item + Left to Right + + + Right to Left + Right to Left context menu item + Right to Left + + + Loading... + Media controller status message when the media is loading + Loading... + + + Live Broadcast + Media controller status message when watching a live broadcast + Live Broadcast + + + Audio Element + Media controller element + Audio Element + + + Video Element + Media controller element + Video Element + + + Mute Button + Media controller element + Mute Button + + + Unmute Button + Media controller element + Unmute Button + + + Play Button + Media controller element + Play Button + + + Pause Button + Media controller element + Pause Button + + + Slider + Media controller element + Slider + + + Slider Thumb + Media controller element + Slider Thumb + + + Rewind Button + Media controller element + Rewind Button + + + Return to Real-time Button + Media controller element + Return to Real-time Button + + + Elapsed Time + Media controller element + Elapsed Time + + + Remaining Time + Media controller element + Remaining Time + + + Status Display + Media controller element + Status Display + + + Fullscreen Button + Media controller element + Fullscreen Button + + + Seek Forward Button + Media controller element + Seek Forward Button + + + Seek Back Button + Media controller element + Seek Back Button + + + Audio element playback controls and status display + Media controller element + Audio element playback controls and status display + + + Video element playback controls and status display + Media controller element + Video element playback controls and status display + + + Mute audio tracks + Media controller element + Mute audio tracks + + + Unmute audio tracks + Media controller element + Unmute audio tracks + + + Begin playback + Media controller element + Begin playback + + + Pause playback + Media controller element + Pause playback + + + Movie time scrubber + Media controller element + Movie time scrubber + + + Movie time scrubber thumb + Media controller element + Movie time scrubber thumb + + + Rewind movie + Media controller element + Rewind movie + + + Return streaming movie to real-time + Media controller element + Return streaming movie to real-time + + + Current movie time + Media controller element + Current movie time + + + Remaining movie time + Media controller element + Remaining movie time + + + Current movie status + Media controller element + Current movie status + + + Play movie in full-screen mode + Media controller element + Play movie in full-screen mode + + + Seek quickly back + Media controller element + Seek quickly back + + + Seek quickly forward + Media controller element + Seek quickly forward + + + Indefinite time + Media time description + Indefinite time + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1 days %2 hours %3 minutes %4 seconds + + + %1 hours %2 minutes %3 seconds + Media time description + %1 hours %2 minutes %3 seconds + + + %1 minutes %2 seconds + Media time description + %1 minutes %2 seconds + + + %1 seconds + Media time description + %1 seconds + + + Inspect + Inspect Element context menu item + Inspect + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + No recent searches + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + Recent searches + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + Clear recent searches + + + Unknown + Unknown filesize FTP directory listing item + Unknown + + + Web Inspector - %2 + Web Inspector - %2 + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 pixels) + + + Bad HTTP request + Bad HTTP request + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + This is a searchable index. Enter search keywords: + + + Scroll here + Scroll here + + + Left edge + Left edge + + + Top + Top + + + Right edge + Right edge + + + Bottom + Bottom + + + Page left + Page left + + + Page up + Page up + + + Page right + Page right + + + Page down + Page down + + + Scroll left + Scroll left + + + Scroll up + Scroll up + + + Scroll right + Scroll right + + + Scroll down + Scroll down + + + %n file(s) + number of chosen file + + %n file(s) + %n file(s) + + + + JavaScript Alert - %1 + JavaScript Alert - %1 + + + JavaScript Confirm - %1 + JavaScript Confirm - %1 + + + JavaScript Prompt - %1 + JavaScript Prompt - %1 + + + JavaScript Problem - %1 + JavaScript Problem - %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + The script on this page appears to have a problem. Do you want to stop the script? + + + Move the cursor to the next character + Move the cursor to the next character + + + Move the cursor to the previous character + Move the cursor to the previous character + + + Move the cursor to the next word + Move the cursor to the next word + + + Move the cursor to the previous word + Move the cursor to the previous word + + + Move the cursor to the next line + Move the cursor to the next line + + + Move the cursor to the previous line + Move the cursor to the previous line + + + Move the cursor to the start of the line + Move the cursor to the start of the line + + + Move the cursor to the end of the line + Move the cursor to the end of the line + + + Move the cursor to the start of the block + Move the cursor to the start of the block + + + Move the cursor to the end of the block + Move the cursor to the end of the block + + + Move the cursor to the start of the document + Move the cursor to the start of the document + + + Move the cursor to the end of the document + Move the cursor to the end of the document + + + Select all + Select all + + + Select to the next character + Select to the next character + + + Select to the previous character + Select to the previous character + + + Select to the next word + Select to the next word + + + Select to the previous word + Select to the previous word + + + Select to the next line + Select to the next line + + + Select to the previous line + Select to the previous line + + + Select to the start of the line + Select to the start of the line + + + Select to the end of the line + Select to the end of the line + + + Select to the start of the block + Select to the start of the block + + + Select to the end of the block + Select to the end of the block + + + Select to the start of the document + Select to the start of the document + + + Select to the end of the document + Select to the end of the document + + + Delete to the start of the word + Delete to the start of the word + + + Delete to the end of the word + Delete to the end of the word + + + Insert a new paragraph + Insert a new paragraph + + + Insert a new line + Insert a new line + + + Paste and Match Style + Paste and Match Style + + + Remove formatting + Remove formatting + + + Strikethrough + Strikethrough + + + Subscript + Subscript + + + Superscript + Superscript + + + Insert Bulleted List + Insert Bulleted List + + + Insert Numbered List + Insert Numbered List + + + Indent + Indent + + + Outdent + Outdent + + + Center + Center + + + Justify + Justify + + + Align Left + Align Left + + + Align Right + Align Right + + + + QWhatsThisAction + + What's This? + What's This? + + + + QWidget + + * + * + + + + QWizard + + Cancel + Cancel + + + Help + Help + + + < &Back + < &Back + + + &Finish + &Finish + + + &Help + &Help + + + Go Back + Go Back + + + Continue + Continue + + + Commit + Commit + + + Done + Done + + + &Next + &Next + + + &Next > + &Next > + + + + QWorkspace + + &Restore + &Restore + + + &Move + &Move + + + &Size + &Size + + + Mi&nimize + Mi&nimize + + + Ma&ximize + Ma&ximize + + + &Close + &Close + + + Stay on &Top + Stay on &Top + + + Minimize + Minimize + + + Restore Down + Restore Down + + + Close + Close + + + Sh&ade + Sh&ade + + + %1 - [%2] + %1 - [%2] + + + &Unshade + &Unshade + + + + QXml + + no error occurred + no error occurred + + + error triggered by consumer + error triggered by consumer + + + unexpected end of file + unexpected end of file + + + more than one document type definition + more than one document type definition + + + error occurred while parsing element + error occurred while parsing element + + + tag mismatch + tag mismatch + + + error occurred while parsing content + error occurred while parsing content + + + unexpected character + unexpected character + + + invalid name for processing instruction + invalid name for processing instruction + + + version expected while reading the XML declaration + version expected while reading the XML declaration + + + wrong value for standalone declaration + wrong value for standalone declaration + + + error occurred while parsing document type definition + error occurred while parsing document type definition + + + letter is expected + letter is expected + + + error occurred while parsing comment + error occurred while parsing comment + + + error occurred while parsing reference + error occurred while parsing reference + + + internal general entity reference not allowed in DTD + internal general entity reference not allowed in DTD + + + external parsed general entity reference not allowed in attribute value + external parsed general entity reference not allowed in attribute value + + + external parsed general entity reference not allowed in DTD + external parsed general entity reference not allowed in DTD + + + unparsed entity reference in wrong context + unparsed entity reference in wrong context + + + recursive entities + recursive entities + + + error in the text declaration of an external entity + error in the text declaration of an external entity + + + encoding declaration or standalone declaration expected while reading the XML declaration + encoding declaration or standalone declaration expected while reading the XML declaration + + + standalone declaration expected while reading the XML declaration + standalone declaration expected while reading the XML declaration + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + Warning in %1, at line %2, column %3: %4 + + + Warning in %1: %2 + Warning in %1: %2 + + + Unknown location + Unknown location + + + Error %1 in %2, at line %3, column %4: %5 + Error %1 in %2, at line %3, column %4: %5 + + + Error %1 in %2: %3 + Error %1 in %2: %3 + + + + QXmlStream + + Extra content at end of document. + Extra content at end of document. + + + Invalid entity value. + Invalid entity value. + + + Invalid XML character. + Invalid XML character. + + + Sequence ']]>' not allowed in content. + Sequence ']]>' not allowed in content. + + + Namespace prefix '%1' not declared + Namespace prefix '%1' not declared + + + Attribute redefined. + Attribute redefined. + + + Unexpected character '%1' in public id literal. + Unexpected character '%1' in public id literal. + + + Invalid XML version string. + Invalid XML version string. + + + Unsupported XML version. + Unsupported XML version. + + + %1 is an invalid encoding name. + %1 is an invalid encoding name. + + + Encoding %1 is unsupported + Encoding %1 is unsupported + + + Standalone accepts only yes or no. + Standalone accepts only yes or no. + + + Invalid attribute in XML declaration. + Invalid attribute in XML declaration. + + + Premature end of document. + Premature end of document. + + + Invalid document. + Invalid document. + + + Expected + Expected + + + , but got ' + , but got ' + + + Unexpected ' + Unexpected ' + + + Expected character data. + Expected character data. + + + Recursive entity detected. + Recursive entity detected. + + + Start tag expected. + Start tag expected. + + + XML declaration not at start of document. + XML declaration not at start of document. + + + NDATA in parameter entity declaration. + NDATA in parameter entity declaration. + + + %1 is an invalid processing instruction name. + %1 is an invalid processing instruction name. + + + Invalid processing instruction name. + Invalid processing instruction name. + + + Illegal namespace declaration. + Illegal namespace declaration. + + + Invalid XML name. + Invalid XML name. + + + Opening and ending tag mismatch. + Opening and ending tag mismatch. + + + Reference to unparsed entity '%1'. + Reference to unparsed entity '%1'. + + + Entity '%1' not declared. + Entity '%1' not declared. + + + Reference to external entity '%1' in attribute value. + Reference to external entity '%1' in attribute value. + + + Invalid character reference. + Invalid character reference. + + + Encountered incorrectly encoded content. + Encountered incorrectly encoded content. + + + The standalone pseudo attribute must appear after the encoding. + The standalone pseudo attribute must appear after the encoding. + + + %1 is an invalid PUBLIC identifier. + %1 is an invalid PUBLIC identifier. + + + + QtXmlPatterns + + At least one component must be present. + At least one component must be present. + + + %1 is not a valid value of type %2. + %1 is not a valid value of type %2. + + + When casting to %1 from %2, the source value cannot be %3. + When casting to %1 from %2, the source value cannot be %3. + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + + + The data of a processing instruction cannot contain the string %1 + The data of a processing instruction cannot contain the string %1 + + + %1 is an invalid %2 + %1 is an invalid %2 + + + %1 is not a valid XML 1.0 character. + %1 is not a valid XML 1.0 character. + + + %1 was called. + %1 was called. + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + In the replacement string, %1 must be followed by at least one digit when not escaped. + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + In the replacement string, %1 can only be used to escape itself or %2, not %3 + + + %1 matches newline characters + %1 matches newline characters + + + Matches are case insensitive + Matches are case insensitive + + + %1 is an invalid regular expression pattern: %2 + %1 is an invalid regular expression pattern: %2 + + + It will not be possible to retrieve %1. + It will not be possible to retrieve %1. + + + The default collection is undefined + The default collection is undefined + + + %1 cannot be retrieved + %1 cannot be retrieved + + + The item %1 did not match the required type %2. + The item %1 did not match the required type %2. + + + %1 is an unknown schema type. + %1 is an unknown schema type. + + + A template with name %1 has already been declared. + A template with name %1 has already been declared. + + + Only one %1 declaration can occur in the query prolog. + Only one %1 declaration can occur in the query prolog. + + + The initialization of variable %1 depends on itself + The initialization of variable %1 depends on itself + + + The variable %1 is unused + The variable %1 is unused + + + Version %1 is not supported. The supported XQuery version is 1.0. + Version %1 is not supported. The supported XQuery version is 1.0. + + + No function with signature %1 is available + No function with signature %1 is available + + + It is not possible to redeclare prefix %1. + It is not possible to redeclare prefix %1. + + + Prefix %1 is already declared in the prolog. + Prefix %1 is already declared in the prolog. + + + The name of an option must have a prefix. There is no default namespace for options. + The name of an option must have a prefix. There is no default namespace for options. + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + + + The target namespace of a %1 cannot be empty. + The target namespace of a %1 cannot be empty. + + + The module import feature is not supported + The module import feature is not supported + + + 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 + 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 + + + A function already exists with the signature %1. + A function already exists with the signature %1. + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + No external functions are supported. All supported functions can be used directly, without first declaring them as external + + + The %1-axis is unsupported in XQuery + The %1-axis is unsupported in XQuery + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + The namespace URI cannot be the empty string when binding to a prefix, %1. + + + %1 is an invalid namespace URI. + %1 is an invalid namespace URI. + + + It is not possible to bind to the prefix %1 + It is not possible to bind to the prefix %1 + + + Two namespace declaration attributes have the same name: %1. + Two namespace declaration attributes have the same name: %1. + + + The namespace URI must be a constant and cannot use enclosed expressions. + The namespace URI must be a constant and cannot use enclosed expressions. + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + + + empty + empty + + + zero or one + zero or one + + + exactly one + exactly one + + + one or more + one or more + + + zero or more + zero or more + + + The focus is undefined. + The focus is undefined. + + + An attribute by name %1 has already been created. + An attribute by name %1 has already been created. + + + Network timeout. + Network timeout. + + + Element %1 can't be serialized because it appears outside the document element. + Element %1 can't be serialized because it appears outside the document element. + + + Year %1 is invalid because it begins with %2. + Year %1 is invalid because it begins with %2. + + + Day %1 is outside the range %2..%3. + Day %1 is outside the range %2..%3. + + + Month %1 is outside the range %2..%3. + Month %1 is outside the range %2..%3. + + + Overflow: Can't represent date %1. + Overflow: Can't represent date %1. + + + Day %1 is invalid for month %2. + Day %1 is invalid for month %2. + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + + + Time %1:%2:%3.%4 is invalid. + Time %1:%2:%3.%4 is invalid. + + + Overflow: Date can't be represented. + Overflow: Date can't be represented. + + + At least one time component must appear after the %1-delimiter. + At least one time component must appear after the %1-delimiter. + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + + + A value of type %1 cannot have an Effective Boolean Value. + A value of type %1 cannot have an Effective Boolean Value. + + + Value %1 of type %2 exceeds maximum (%3). + Value %1 of type %2 exceeds maximum (%3). + + + Value %1 of type %2 is below minimum (%3). + Value %1 of type %2 is below minimum (%3). + + + A value of type %1 must contain an even number of digits. The value %2 does not. + A value of type %1 must contain an even number of digits. The value %2 does not. + + + %1 is not valid as a value of type %2. + %1 is not valid as a value of type %2. + + + Operator %1 cannot be used on type %2. + Operator %1 cannot be used on type %2. + + + Operator %1 cannot be used on atomic values of type %2 and %3. + Operator %1 cannot be used on atomic values of type %2 and %3. + + + The namespace URI in the name for a computed attribute cannot be %1. + The namespace URI in the name for a computed attribute cannot be %1. + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + + + Type error in cast, expected %1, received %2. + Type error in cast, expected %1, received %2. + + + 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. + 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. + + + A comment cannot contain %1 + A comment cannot contain %1 + + + A comment cannot end with a %1. + A comment cannot end with a %1. + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + + + A library module cannot be evaluated directly. It must be imported from a main module. + A library module cannot be evaluated directly. It must be imported from a main module. + + + No template by name %1 exists. + No template by name %1 exists. + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + + + A positional predicate must evaluate to a single numeric value. + A positional predicate must evaluate to a single numeric value. + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + + + No namespace binding exists for the prefix %1 + No namespace binding exists for the prefix %1 + + + No namespace binding exists for the prefix %1 in %2 + No namespace binding exists for the prefix %1 in %2 + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 must be followed by %2 or %3, not at the end of the replacement string. + + + %1 and %2 match the start and end of a line. + %1 and %2 match the start and end of a line. + + + Whitespace characters are removed, except when they appear in character classes + Whitespace characters are removed, except when they appear in character classes + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 is an invalid flag for regular expressions. Valid flags are: + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + + + Required cardinality is %1; got cardinality %2. + Required cardinality is %1; got cardinality %2. + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + + + The keyword %1 cannot occur with any other mode name. + The keyword %1 cannot occur with any other mode name. + + + No variable with name %1 exists + No variable with name %1 exists + + + The value of attribute %1 must be of type %2, which %3 isn't. + The value of attribute %1 must be of type %2, which %3 isn't. + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + + + A variable with name %1 has already been declared. + A variable with name %1 has already been declared. + + + No value is available for the external variable with name %1. + No value is available for the external variable with name %1. + + + A stylesheet function must have a prefixed name. + A stylesheet function must have a prefixed name. + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + + + An argument with name %1 has already been declared. Every argument name must be unique. + An argument with name %1 has already been declared. Every argument name must be unique. + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + + + In an XSL-T pattern, function %1 cannot have a third argument. + In an XSL-T pattern, function %1 cannot have a third argument. + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + + + %1 is an invalid template mode name. + %1 is an invalid template mode name. + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + None of the pragma expressions are supported. Therefore, a fallback expression must be present + + + Each name of a template parameter must be unique; %1 is duplicated. + Each name of a template parameter must be unique; %1 is duplicated. + + + No function with name %1 is available. + No function with name %1 is available. + + + %1 is not a valid numeric literal. + %1 is not a valid numeric literal. + + + W3C XML Schema identity constraint selector + W3C XML Schema identity constraint selector + + + W3C XML Schema identity constraint field + W3C XML Schema identity constraint field + + + A construct was encountered which is disallowed in the current language(%1). + A construct was encountered which is disallowed in the current language(%1). + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + An attribute with name %1 has already appeared on this element. + An attribute with name %1 has already appeared on this element. + + + A direct element constructor is not well-formed. %1 is ended with %2. + A direct element constructor is not well-formed. %1 is ended with %2. + + + The name %1 does not refer to any schema type. + The name %1 does not refer to any schema type. + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 is not an atomic type. Casting is only possible to atomic types. + + + %1 is not a valid name for a processing-instruction. + %1 is not a valid name for a processing-instruction. + + + The name of an extension expression must be in a namespace. + The name of an extension expression must be in a namespace. + + + Required type is %1, but %2 was found. + Required type is %1, but %2 was found. + + + Promoting %1 to %2 may cause loss of precision. + Promoting %1 to %2 may cause loss of precision. + + + It's not possible to add attributes after any other kind of node. + It's not possible to add attributes after any other kind of node. + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + + + Integer division (%1) by zero (%2) is undefined. + Integer division (%1) by zero (%2) is undefined. + + + Division (%1) by zero (%2) is undefined. + Division (%1) by zero (%2) is undefined. + + + Modulus division (%1) by zero (%2) is undefined. + Modulus division (%1) by zero (%2) is undefined. + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 takes at most %n argument(s). %2 is therefore invalid. + %1 takes at most %n argument(s). %2 is therefore invalid. + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 requires at least %n argument(s). %2 is therefore invalid. + %1 requires at least %n argument(s). %2 is therefore invalid. + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + + + A default namespace declaration must occur before function, variable, and option declarations. + A default namespace declaration must occur before function, variable, and option declarations. + + + Namespace declarations must occur before function, variable, and option declarations. + Namespace declarations must occur before function, variable, and option declarations. + + + Module imports must occur before function, variable, and option declarations. + Module imports must occur before function, variable, and option declarations. + + + %1 is not a whole number of minutes. + %1 is not a whole number of minutes. + + + Attribute %1 can't be serialized because it appears at the top level. + Attribute %1 can't be serialized because it appears at the top level. + + + %1 is an unsupported encoding. + %1 is an unsupported encoding. + + + %1 contains octets which are disallowed in the requested encoding %2. + %1 contains octets which are disallowed in the requested encoding %2. + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + + + Ambiguous rule match. + Ambiguous rule match. + + + In a namespace constructor, the value for a namespace cannot be an empty string. + In a namespace constructor, the value for a namespace cannot be an empty string. + + + The prefix must be a valid %1, which %2 is not. + The prefix must be a valid %1, which %2 is not. + + + The prefix %1 cannot be bound. + The prefix %1 cannot be bound. + + + Only the prefix %1 can be bound to %2 and vice versa. + Only the prefix %1 can be bound to %2 and vice versa. + + + The parameter %1 is required, but no corresponding %2 is supplied. + The parameter %1 is required, but no corresponding %2 is supplied. + + + The parameter %1 is passed, but no corresponding %2 exists. + The parameter %1 is passed, but no corresponding %2 exists. + + + The URI cannot have a fragment + The URI cannot have a fragment + + + Element %1 is not allowed at this location. + Element %1 is not allowed at this location. + + + Text nodes are not allowed at this location. + Text nodes are not allowed at this location. + + + Parse error: %1 + Parse error: %1 + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + + + Unknown XSL-T attribute %1. + Unknown XSL-T attribute %1. + + + Attribute %1 and %2 are mutually exclusive. + Attribute %1 and %2 are mutually exclusive. + + + In a simplified stylesheet module, attribute %1 must be present. + In a simplified stylesheet module, attribute %1 must be present. + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + + + Element %1 must have at least one of the attributes %2 or %3. + Element %1 must have at least one of the attributes %2 or %3. + + + At least one mode must be specified in the %1-attribute on element %2. + At least one mode must be specified in the %1-attribute on element %2. + + + Element %1 must come last. + Element %1 must come last. + + + At least one %1-element must occur before %2. + At least one %1-element must occur before %2. + + + Only one %1-element can appear. + Only one %1-element can appear. + + + At least one %1-element must occur inside %2. + At least one %1-element must occur inside %2. + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + When attribute %1 is present on %2, a sequence constructor cannot be used. + + + Element %1 must have either a %2-attribute or a sequence constructor. + Element %1 must have either a %2-attribute or a sequence constructor. + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + + + Element %1 cannot have children. + Element %1 cannot have children. + + + Element %1 cannot have a sequence constructor. + Element %1 cannot have a sequence constructor. + + + The attribute %1 cannot appear on %2, when it is a child of %3. + The attribute %1 cannot appear on %2, when it is a child of %3. + + + A parameter in a function cannot be declared to be a tunnel. + A parameter in a function cannot be declared to be a tunnel. + + + This processor is not Schema-aware and therefore %1 cannot be used. + This processor is not Schema-aware and therefore %1 cannot be used. + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + + + Attribute %1 cannot have the value %2. + Attribute %1 cannot have the value %2. + + + The attribute %1 can only appear on the first %2 element. + The attribute %1 can only appear on the first %2 element. + + + At least one %1 element must appear as child of %2. + At least one %1 element must appear as child of %2. + + + %1 has inheritance loop in its base type %2. + %1 has inheritance loop in its base type %2. + + + Circular inheritance of base type %1. + Circular inheritance of base type %1. + + + Circular inheritance of union %1. + Circular inheritance of union %1. + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + + + Base type of simple type %1 cannot be complex type %2. + Base type of simple type %1 cannot be complex type %2. + + + Simple type %1 cannot have direct base type %2. + Simple type %1 cannot have direct base type %2. + + + Simple type %1 is not allowed to have base type %2. + Simple type %1 is not allowed to have base type %2. + + + Simple type %1 can only have simple atomic type as base type. + Simple type %1 can only have simple atomic type as base type. + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + + + Variety of item type of %1 must be either atomic or union. + Variety of item type of %1 must be either atomic or union. + + + Variety of member types of %1 must be atomic. + Variety of member types of %1 must be atomic. + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + %1 is not allowed to derive from %2 by list as the latter defines it as final. + + + Simple type %1 is only allowed to have %2 facet. + Simple type %1 is only allowed to have %2 facet. + + + Base type of simple type %1 must have variety of type list. + Base type of simple type %1 must have variety of type list. + + + Base type of simple type %1 has defined derivation by restriction as final. + Base type of simple type %1 has defined derivation by restriction as final. + + + Item type of base type does not match item type of %1. + Item type of base type does not match item type of %1. + + + Simple type %1 contains not allowed facet type %2. + Simple type %1 contains not allowed facet type %2. + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + %1 is not allowed to derive from %2 by union as the latter defines it as final. + + + %1 is not allowed to have any facets. + %1 is not allowed to have any facets. + + + Base type %1 of simple type %2 must have variety of union. + Base type %1 of simple type %2 must have variety of union. + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + Member type %1 cannot be derived from member type %2 of %3's base type %4. + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + Derivation method of %1 must be extension because the base type %2 is a simple type. + + + Complex type %1 has duplicated element %2 in its content model. + Complex type %1 has duplicated element %2 in its content model. + + + Complex type %1 has non-deterministic content. + Complex type %1 has non-deterministic content. + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + + + Content model of complex type %1 is not a valid extension of content model of %2. + Content model of complex type %1 is not a valid extension of content model of %2. + + + Complex type %1 must have simple content. + Complex type %1 must have simple content. + + + Complex type %1 must have the same simple type as its base class %2. + Complex type %1 must have the same simple type as its base class %2. + + + Complex type %1 cannot be derived from base type %2%3. + Complex type %1 cannot be derived from base type %2%3. + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + + + Complex type %1 with simple content cannot be derived from complex base type %2. + Complex type %1 with simple content cannot be derived from complex base type %2. + + + Item type of simple type %1 cannot be a complex type. + Item type of simple type %1 cannot be a complex type. + + + Member type of simple type %1 cannot be a complex type. + Member type of simple type %1 cannot be a complex type. + + + %1 is not allowed to have a member type with the same name as itself. + %1 is not allowed to have a member type with the same name as itself. + + + %1 facet collides with %2 facet. + %1 facet collides with %2 facet. + + + %1 facet must have the same value as %2 facet of base type. + %1 facet must have the same value as %2 facet of base type. + + + %1 facet must be equal or greater than %2 facet of base type. + %1 facet must be equal or greater than %2 facet of base type. + + + %1 facet must be less than or equal to %2 facet of base type. + %1 facet must be less than or equal to %2 facet of base type. + + + %1 facet contains invalid regular expression + %1 facet contains invalid regular expression + + + Unknown notation %1 used in %2 facet. + Unknown notation %1 used in %2 facet. + + + %1 facet contains invalid value %2: %3. + %1 facet contains invalid value %2: %3. + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + %1 facet cannot be %2 if %3 facet of base type is %4. + %1 facet cannot be %2 if %3 facet of base type is %4. + + + %1 facet must be less than or equal to %2 facet. + %1 facet must be less than or equal to %2 facet. + + + %1 facet must be less than %2 facet of base type. + %1 facet must be less than %2 facet of base type. + + + %1 facet and %2 facet cannot appear together. + %1 facet and %2 facet cannot appear together. + + + %1 facet must be greater than %2 facet of base type. + %1 facet must be greater than %2 facet of base type. + + + %1 facet must be less than %2 facet. + %1 facet must be less than %2 facet. + + + %1 facet must be greater than or equal to %2 facet of base type. + %1 facet must be greater than or equal to %2 facet of base type. + + + Simple type contains not allowed facet %1. + Simple type contains not allowed facet %1. + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + Only %1 and %2 facets are allowed when derived by union. + Only %1 and %2 facets are allowed when derived by union. + + + %1 contains %2 facet with invalid data: %3. + %1 contains %2 facet with invalid data: %3. + + + Attribute group %1 contains attribute %2 twice. + Attribute group %1 contains attribute %2 twice. + + + Attribute group %1 contains two different attributes that both have types derived from %2. + Attribute group %1 contains two different attributes that both have types derived from %2. + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + Complex type %1 contains attribute %2 twice. + Complex type %1 contains attribute %2 twice. + + + Complex type %1 contains two different attributes that both have types derived from %2. + Complex type %1 contains two different attributes that both have types derived from %2. + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + Element %1 is not allowed to have a value constraint if its base type is complex. + Element %1 is not allowed to have a value constraint if its base type is complex. + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + Element %1 is not allowed to have a value constraint if its type is derived from %2. + + + Value constraint of element %1 is not of elements type: %2. + Value constraint of element %1 is not of elements type: %2. + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + Element %1 is not allowed to have substitution group affiliation as it is no global element. + + + Type of element %1 cannot be derived from type of substitution group affiliation. + Type of element %1 cannot be derived from type of substitution group affiliation. + + + Value constraint of attribute %1 is not of attributes type: %2. + Value constraint of attribute %1 is not of attributes type: %2. + + + Attribute %1 has value constraint but has type derived from %2. + Attribute %1 has value constraint but has type derived from %2. + + + %1 attribute in derived complex type must be %2 like in base type. + %1 attribute in derived complex type must be %2 like in base type. + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + Attribute %1 in derived complex type must have %2 value constraint like in base type. + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + + + Attribute %1 in derived complex type must have %2 value constraint. + Attribute %1 in derived complex type must have %2 value constraint. + + + processContent of base wildcard must be weaker than derived wildcard. + processContent of base wildcard must be weaker than derived wildcard. + + + Element %1 exists twice with different types. + Element %1 exists twice with different types. + + + Particle contains non-deterministic wildcards. + Particle contains non-deterministic wildcards. + + + Base attribute %1 is required but derived attribute is not. + Base attribute %1 is required but derived attribute is not. + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + Type of derived attribute %1 cannot be validly derived from type of base attribute. + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + Value constraint of derived attribute %1 does not match value constraint of base attribute. + + + Derived attribute %1 does not exist in the base definition. + Derived attribute %1 does not exist in the base definition. + + + Derived attribute %1 does not match the wildcard in the base definition. + Derived attribute %1 does not match the wildcard in the base definition. + + + Base attribute %1 is required but missing in derived definition. + Base attribute %1 is required but missing in derived definition. + + + Derived definition contains an %1 element that does not exists in the base definition + Derived definition contains an %1 element that does not exists in the base definition + + + Derived wildcard is not a subset of the base wildcard. + Derived wildcard is not a subset of the base wildcard. + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + + + Attribute %1 from base type is missing in derived type. + Attribute %1 from base type is missing in derived type. + + + Type of derived attribute %1 differs from type of base attribute. + Type of derived attribute %1 differs from type of base attribute. + + + Base definition contains an %1 element that is missing in the derived definition + Base definition contains an %1 element that is missing in the derived definition + + + %1 references unknown %2 or %3 element %4. + %1 references unknown %2 or %3 element %4. + + + %1 references identity constraint %2 that is no %3 or %4 element. + %1 references identity constraint %2 that is no %3 or %4 element. + + + %1 has a different number of fields from the identity constraint %2 that it references. + %1 has a different number of fields from the identity constraint %2 that it references. + + + Base type %1 of %2 element cannot be resolved. + Base type %1 of %2 element cannot be resolved. + + + Item type %1 of %2 element cannot be resolved. + Item type %1 of %2 element cannot be resolved. + + + Member type %1 of %2 element cannot be resolved. + Member type %1 of %2 element cannot be resolved. + + + Type %1 of %2 element cannot be resolved. + Type %1 of %2 element cannot be resolved. + + + Base type %1 of complex type cannot be resolved. + Base type %1 of complex type cannot be resolved. + + + %1 cannot have complex base type that has a %2. + %1 cannot have complex base type that has a %2. + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + + + Type of %1 element must be a simple type, %2 is not. + Type of %1 element must be a simple type, %2 is not. + + + Substitution group %1 of %2 element cannot be resolved. + Substitution group %1 of %2 element cannot be resolved. + + + Substitution group %1 has circular definition. + Substitution group %1 has circular definition. + + + Duplicated element names %1 in %2 element. + Duplicated element names %1 in %2 element. + + + Reference %1 of %2 element cannot be resolved. + Reference %1 of %2 element cannot be resolved. + + + Circular group reference for %1. + Circular group reference for %1. + + + %1 element is not allowed in this scope + %1 element is not allowed in this scope + + + %1 element cannot have %2 attribute with value other than %3. + %1 element cannot have %2 attribute with value other than %3. + + + %1 element cannot have %2 attribute with value other than %3 or %4. + %1 element cannot have %2 attribute with value other than %3 or %4. + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + + + Attribute group %1 has circular reference. + Attribute group %1 has circular reference. + + + %1 attribute in %2 must have %3 use like in base type %4. + %1 attribute in %2 must have %3 use like in base type %4. + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + + + %1 has attribute wildcard but its base type %2 has not. + %1 has attribute wildcard but its base type %2 has not. + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + Enumeration facet contains invalid content: {%1} is not a value of type %2. + + + Namespace prefix of qualified name %1 is not defined. + Namespace prefix of qualified name %1 is not defined. + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + Empty particle cannot be derived from non-empty particle. + Empty particle cannot be derived from non-empty particle. + + + Derived particle is missing element %1. + Derived particle is missing element %1. + + + Derived element %1 is missing value constraint as defined in base particle. + Derived element %1 is missing value constraint as defined in base particle. + + + Derived element %1 has weaker value constraint than base particle. + Derived element %1 has weaker value constraint than base particle. + + + Fixed value constraint of element %1 differs from value constraint in base particle. + Fixed value constraint of element %1 differs from value constraint in base particle. + + + Derived element %1 cannot be nillable as base element is not nillable. + Derived element %1 cannot be nillable as base element is not nillable. + + + Block constraints of derived element %1 must not be more weaker than in the base element. + Block constraints of derived element %1 must not be more weaker than in the base element. + + + Simple type of derived element %1 cannot be validly derived from base element. + Simple type of derived element %1 cannot be validly derived from base element. + + + Complex type of derived element %1 cannot be validly derived from base element. + Complex type of derived element %1 cannot be validly derived from base element. + + + Element %1 is missing in derived particle. + Element %1 is missing in derived particle. + + + Element %1 does not match namespace constraint of wildcard in base particle. + Element %1 does not match namespace constraint of wildcard in base particle. + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + Wildcard in derived particle is not a valid subset of wildcard in base particle. + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + processContent of wildcard in derived particle is weaker than wildcard in base particle. + + + Derived particle allows content that is not allowed in the base particle. + Derived particle allows content that is not allowed in the base particle. + + + Can not process unknown element %1, expected elements are: %2. + Can not process unknown element %1, expected elements are: %2. + + + Element %1 is not allowed in this scope, possible elements are: %2. + Element %1 is not allowed in this scope, possible elements are: %2. + + + Child element is missing in that scope, possible child elements are: %1. + Child element is missing in that scope, possible child elements are: %1. + + + Document is not a XML schema. + Document is not a XML schema. + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + %1 attribute of %2 element contains invalid content: {%3}. + %1 attribute of %2 element contains invalid content: {%3}. + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + %1 element is not allowed inside %2 element if %3 attribute is present. + %1 element is not allowed inside %2 element if %3 attribute is present. + + + %1 element has neither %2 attribute nor %3 child element. + %1 element has neither %2 attribute nor %3 child element. + + + %1 element with %2 child element must not have a %3 attribute. + %1 element with %2 child element must not have a %3 attribute. + + + %1 attribute of %2 element must be %3 or %4. + %1 attribute of %2 element must be %3 or %4. + + + %1 attribute of %2 element must have a value of %3. + %1 attribute of %2 element must have a value of %3. + + + %1 attribute of %2 element must have a value of %3 or %4. + %1 attribute of %2 element must have a value of %3 or %4. + + + %1 element must not have %2 and %3 attribute together. + %1 element must not have %2 and %3 attribute together. + + + Content of %1 attribute of %2 element must not be from namespace %3. + Content of %1 attribute of %2 element must not be from namespace %3. + + + %1 attribute of %2 element must not be %3. + %1 attribute of %2 element must not be %3. + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + Specifying use='prohibited' inside an attribute group has no effect. + Specifying use='prohibited' inside an attribute group has no effect. + + + %1 element must have either %2 or %3 attribute. + %1 element must have either %2 or %3 attribute. + + + %1 element must have either %2 attribute or %3 or %4 as child element. + %1 element must have either %2 attribute or %3 or %4 as child element. + + + %1 element requires either %2 or %3 attribute. + %1 element requires either %2 or %3 attribute. + + + Text or entity references not allowed inside %1 element + Text or entity references not allowed inside %1 element + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + %1 element is not allowed in this context. + %1 element is not allowed in this context. + + + %1 attribute of %2 element has larger value than %3 attribute. + %1 attribute of %2 element has larger value than %3 attribute. + + + Prefix of qualified name %1 is not defined. + Prefix of qualified name %1 is not defined. + + + %1 attribute of %2 element must either contain %3 or the other values. + %1 attribute of %2 element must either contain %3 or the other values. + + + Component with ID %1 has been defined previously. + Component with ID %1 has been defined previously. + + + Element %1 already defined. + Element %1 already defined. + + + Attribute %1 already defined. + Attribute %1 already defined. + + + Type %1 already defined. + Type %1 already defined. + + + Attribute group %1 already defined. + Attribute group %1 already defined. + + + Element group %1 already defined. + Element group %1 already defined. + + + Notation %1 already defined. + Notation %1 already defined. + + + Identity constraint %1 already defined. + Identity constraint %1 already defined. + + + Duplicated facets in simple type %1. + Duplicated facets in simple type %1. + + + %1 is not valid according to %2. + %1 is not valid according to %2. + + + String content does not match the length facet. + String content does not match the length facet. + + + String content does not match the minLength facet. + String content does not match the minLength facet. + + + String content does not match the maxLength facet. + String content does not match the maxLength facet. + + + String content does not match pattern facet. + String content does not match pattern facet. + + + String content is not listed in the enumeration facet. + String content is not listed in the enumeration facet. + + + Signed integer content does not match the maxInclusive facet. + Signed integer content does not match the maxInclusive facet. + + + Signed integer content does not match the maxExclusive facet. + Signed integer content does not match the maxExclusive facet. + + + Signed integer content does not match the minInclusive facet. + Signed integer content does not match the minInclusive facet. + + + Signed integer content does not match the minExclusive facet. + Signed integer content does not match the minExclusive facet. + + + Signed integer content is not listed in the enumeration facet. + Signed integer content is not listed in the enumeration facet. + + + Signed integer content does not match pattern facet. + Signed integer content does not match pattern facet. + + + Signed integer content does not match in the totalDigits facet. + Signed integer content does not match in the totalDigits facet. + + + Unsigned integer content does not match the maxInclusive facet. + Unsigned integer content does not match the maxInclusive facet. + + + Unsigned integer content does not match the maxExclusive facet. + Unsigned integer content does not match the maxExclusive facet. + + + Unsigned integer content does not match the minInclusive facet. + Unsigned integer content does not match the minInclusive facet. + + + Unsigned integer content does not match the minExclusive facet. + Unsigned integer content does not match the minExclusive facet. + + + Unsigned integer content is not listed in the enumeration facet. + Unsigned integer content is not listed in the enumeration facet. + + + Unsigned integer content does not match pattern facet. + Unsigned integer content does not match pattern facet. + + + Unsigned integer content does not match in the totalDigits facet. + Unsigned integer content does not match in the totalDigits facet. + + + Double content does not match the maxInclusive facet. + Double content does not match the maxInclusive facet. + + + Double content does not match the maxExclusive facet. + Double content does not match the maxExclusive facet. + + + Double content does not match the minInclusive facet. + Double content does not match the minInclusive facet. + + + Double content does not match the minExclusive facet. + Double content does not match the minExclusive facet. + + + Double content is not listed in the enumeration facet. + Double content is not listed in the enumeration facet. + + + Double content does not match pattern facet. + Double content does not match pattern facet. + + + Decimal content does not match in the fractionDigits facet. + Decimal content does not match in the fractionDigits facet. + + + Decimal content does not match in the totalDigits facet. + Decimal content does not match in the totalDigits facet. + + + Date time content does not match the maxInclusive facet. + Date time content does not match the maxInclusive facet. + + + Date time content does not match the maxExclusive facet. + Date time content does not match the maxExclusive facet. + + + Date time content does not match the minInclusive facet. + Date time content does not match the minInclusive facet. + + + Date time content does not match the minExclusive facet. + Date time content does not match the minExclusive facet. + + + Date time content is not listed in the enumeration facet. + Date time content is not listed in the enumeration facet. + + + Date time content does not match pattern facet. + Date time content does not match pattern facet. + + + Duration content does not match the maxInclusive facet. + Duration content does not match the maxInclusive facet. + + + Duration content does not match the maxExclusive facet. + Duration content does not match the maxExclusive facet. + + + Duration content does not match the minInclusive facet. + Duration content does not match the minInclusive facet. + + + Duration content does not match the minExclusive facet. + Duration content does not match the minExclusive facet. + + + Duration content is not listed in the enumeration facet. + Duration content is not listed in the enumeration facet. + + + Duration content does not match pattern facet. + Duration content does not match pattern facet. + + + Boolean content does not match pattern facet. + Boolean content does not match pattern facet. + + + Binary content does not match the length facet. + Binary content does not match the length facet. + + + Binary content does not match the minLength facet. + Binary content does not match the minLength facet. + + + Binary content does not match the maxLength facet. + Binary content does not match the maxLength facet. + + + Binary content is not listed in the enumeration facet. + Binary content is not listed in the enumeration facet. + + + Invalid QName content: %1. + Invalid QName content: %1. + + + QName content is not listed in the enumeration facet. + QName content is not listed in the enumeration facet. + + + QName content does not match pattern facet. + QName content does not match pattern facet. + + + Notation content is not listed in the enumeration facet. + Notation content is not listed in the enumeration facet. + + + List content does not match length facet. + List content does not match length facet. + + + List content does not match minLength facet. + List content does not match minLength facet. + + + List content does not match maxLength facet. + List content does not match maxLength facet. + + + List content is not listed in the enumeration facet. + List content is not listed in the enumeration facet. + + + List content does not match pattern facet. + List content does not match pattern facet. + + + Union content is not listed in the enumeration facet. + Union content is not listed in the enumeration facet. + + + Union content does not match pattern facet. + Union content does not match pattern facet. + + + Data of type %1 are not allowed to be empty. + Data of type %1 are not allowed to be empty. + + + Element %1 is missing child element. + Element %1 is missing child element. + + + There is one IDREF value with no corresponding ID: %1. + There is one IDREF value with no corresponding ID: %1. + + + Loaded schema file is invalid. + Loaded schema file is invalid. + + + %1 contains invalid data. + %1 contains invalid data. + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + + + No schema defined for validation. + No schema defined for validation. + + + No definition for element %1 available. + No definition for element %1 available. + + + Specified type %1 is not known to the schema. + Specified type %1 is not known to the schema. + + + Element %1 is not defined in this scope. + Element %1 is not defined in this scope. + + + Declaration for element %1 does not exist. + Declaration for element %1 does not exist. + + + Element %1 contains invalid content. + Element %1 contains invalid content. + + + Element %1 is declared as abstract. + Element %1 is declared as abstract. + + + Element %1 is not nillable. + Element %1 is not nillable. + + + Attribute %1 contains invalid data: %2 + Attribute %1 contains invalid data: %2 + + + Element contains content although it is nillable. + Element contains content although it is nillable. + + + Fixed value constraint not allowed if element is nillable. + Fixed value constraint not allowed if element is nillable. + + + Element %1 cannot contain other elements, as it has a fixed content. + Element %1 cannot contain other elements, as it has a fixed content. + + + Specified type %1 is not validly substitutable with element type %2. + Specified type %1 is not validly substitutable with element type %2. + + + Complex type %1 is not allowed to be abstract. + Complex type %1 is not allowed to be abstract. + + + Element %1 contains not allowed attributes. + Element %1 contains not allowed attributes. + + + Element %1 contains not allowed child element. + Element %1 contains not allowed child element. + + + Content of element %1 does not match its type definition: %2. + Content of element %1 does not match its type definition: %2. + + + Content of element %1 does not match defined value constraint. + Content of element %1 does not match defined value constraint. + + + Element %1 contains not allowed child content. + Element %1 contains not allowed child content. + + + Element %1 contains not allowed text content. + Element %1 contains not allowed text content. + + + Element %1 is missing required attribute %2. + Element %1 is missing required attribute %2. + + + Attribute %1 does not match the attribute wildcard. + Attribute %1 does not match the attribute wildcard. + + + Declaration for attribute %1 does not exist. + Declaration for attribute %1 does not exist. + + + Element %1 contains two attributes of type %2. + Element %1 contains two attributes of type %2. + + + Attribute %1 contains invalid content. + Attribute %1 contains invalid content. + + + Element %1 contains unknown attribute %2. + Element %1 contains unknown attribute %2. + + + Content of attribute %1 does not match its type definition: %2. + Content of attribute %1 does not match its type definition: %2. + + + Content of attribute %1 does not match defined value constraint. + Content of attribute %1 does not match defined value constraint. + + + Non-unique value found for constraint %1. + Non-unique value found for constraint %1. + + + Key constraint %1 contains absent fields. + Key constraint %1 contains absent fields. + + + Key constraint %1 contains references nillable element %2. + Key constraint %1 contains references nillable element %2. + + + No referenced value found for key reference %1. + No referenced value found for key reference %1. + + + More than one value found for field %1. + More than one value found for field %1. + + + Field %1 has no simple type. + Field %1 has no simple type. + + + ID value '%1' is not unique. + ID value '%1' is not unique. + + + '%1' attribute contains invalid QName content: %2. + '%1' attribute contains invalid QName content: %2. + + + diff --git a/config.profiles/symbian/translations/qt_zh_cn_symbian.ts b/config.profiles/symbian/translations/qt_zh_cn_symbian.ts new file mode 100644 index 0000000..b1b9941 --- /dev/null +++ b/config.profiles/symbian/translations/qt_zh_cn_symbian.ts @@ -0,0 +1,8517 @@ + + + + + + CloseButton + + Close Tab + 关闭标签页 + + + + FakeReply + + Fake error ! + 虚假错误! + + + Invalid URL + 无效URL + + + + Phonon:: + + Notifications + 通知 + + + Music + 音乐 + + + Video + 视频 + + + Communication + 通讯 + + + Games + 游戏 + + + Accessibility + 无障碍环境 + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>音频播放设备<b>%1</b>不工作。<br/>无法返回到<b>%2</b>。</html> + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>切换到刚刚可用且较为<br/>偏爱的音频播放设备<b>%1</b>。</html> + + + Revert back to device '%1' + 回复到设备"%1" + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + 警告:看起来,您没有安装 gstreamer0.10-plugins-good 包。 + 一些视频特性已经被关闭。 + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + 警告:看起来,您没有安装基础的 GStreamer 插件。 + 所有的音频和视频支持都已经被关闭。 + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + 缺少一个需要的解码器。您需要安装如下解码器来播放这个内容:%0 + + + Could not open media source. + 不能打开媒体源。 + + + Invalid source type. + 无效的源类型。 + + + Could not locate media source. + 不能定位媒体源。 + + + Could not open audio device. The device is already in use. + 不能打开音频设备。这个设备正在被使用。 + + + Could not decode media source. + 不能解码媒体源。 + + + + Phonon::MMF + + Audio Output + 音频输出 + + + The audio output device + 音频输出设备 + + + No error + 无错误 + + + Not found + 未找到 + + + Out of memory + 存储不足 + + + Not supported + 不支持 + + + Overflow + 溢出 + + + Underflow + 下溢 + + + Already exists + 已经存在 + + + Path not found + 未找到路径 + + + In use + 在使用中 + + + Not ready + 未就绪 + + + Access denied + 访问被拒绝 + + + Could not connect + 无法连接 + + + Disconnected + 已断开连接 + + + Permission denied + 权限被拒绝 + + + Insufficient bandwidth + 带宽不足 + + + Network unavailable + 网络不可用 + + + Network communication error + 网络通讯错误 + + + Streaming not supported + 不支持流 + + + Server alert + 服务器提示 + + + Invalid protocol + 无效协议 + + + Invalid URL + 无效URL + + + Multicast error + 组播错误 + + + Proxy server error + 代理服务器错误 + + + Proxy server not supported + 代理服务器不受支持 + + + Audio output error + 音频输出错误 + + + Video output error + 视频输出错误 + + + Decoder error + 解码器错误 + + + Audio or video components could not be played + 无法播放音频或视频组件 + + + DRM error + DRM错误 + + + Unknown error (%1) + 未知错误(%1) + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + 不准备播放 + + + Error opening file + 打开文件时出错 + + + Error opening URL + 打开URL时出错 + + + Setting volume failed + 设置卷失败 + + + Playback complete + 播放结束 + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + %1赫兹 + + + + Phonon::MMF::AudioPlayer + + Getting position failed + 获取位置失败 + + + Opening clip failed + 打开片段失败 + + + + Phonon::MMF::EffectFactory + + Enabled + 已启用 + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + 高频衰减率(%) + + + Decay time (ms) + 衰减时间(毫秒) + + + Density (%) + 密度(%) + + + Diffusion (%) + 散射(%) + + + Reflections delay (ms) + 反映延迟(毫秒) + + + Reflections level (mB) + 反映级别(mB) + + + Reverb delay (ms) + 混响延迟(毫秒) + + + Reverb level (mB) + 混响级别(mB) + + + Room HF level + 高频室级别 + + + Room level (mB) + 室级别(mB) + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + 打开源时出错:类型不受支持 + + + Error opening source: media type could not be determined + 打开源时出错:无法判断多媒体类型 + + + + Phonon::MMF::StereoWidening + + Level (%) + 级别(%) + + + + Phonon::MMF::VideoPlayer + + Pause failed + 暂停失败 + + + Seek failed + 寻找失败 + + + Getting position failed + 获取位置失败 + + + Opening clip failed + 打开片段失败 + + + Buffering clip failed + 片段缓冲失败 + + + Video display error + 视频显示错误 + + + + Phonon::VolumeSlider + + Volume: %1% + 音量:%1% + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + 请使用这个滑块调节音量。最左为%0,最右为%1% + + + Muted + 已静音 + + + + Q3Accel + + %1, %2 not defined + %1,%2未定义 + + + Ambiguous %1 not handled + 不明确的%1没有被处理 + + + + Q3DataTable + + True + + + + False + + + + Insert + 插入 + + + Update + 更新 + + + Delete + 删除 + + + + Q3FileDialog + + Copy or Move a File + 复制或者移动一个文件 + + + Read: %1 + 读取:%1 + + + Write: %1 + 写入:%1 + + + Cancel + 取消 + + + All Files (*) + 所有文件 (*) + + + Name + 名称 + + + Size + 大小 + + + Type + 类型 + + + Date + 日期 + + + Attributes + 属性 + + + &OK + 确定(&O) + + + Look &in: + 查找范围(&I): + + + File &name: + 文件名称(&N): + + + File &type: + 文件类型(&T): + + + Back + 后退 + + + One directory up + 向上一级 + + + Create New Folder + 创建新文件夹 + + + List View + 列表视图 + + + Detail View + 详细视图 + + + Preview File Info + 预览文件信息 + + + Preview File Contents + 预览文件内容 + + + Read-write + 读写 + + + Read-only + 只读 + + + Write-only + 只写 + + + Inaccessible + 不可访问的 + + + Symlink to File + 文件的系统链接 + + + Symlink to Directory + 目录的系统链接 + + + Symlink to Special + 特殊的系统链接 + + + File + 文件 + + + Dir + 目录 + + + Special + 特殊 + + + Open + 打开 + + + Save As + 另存为 + + + &Open + 打开(&O) + + + &Save + 保存(&S) + + + &Rename + 重命名(&R) + + + &Delete + 删除(&D) + + + R&eload + 重新载入(&E) + + + Sort by &Name + 按名称排列(&N) + + + Sort by &Size + 按大小排列(&S) + + + Sort by &Date + 按日期排列(&D) + + + &Unsorted + 未排列的(&U) + + + Sort + 排列 + + + Show &hidden files + 显示隐藏文件(&H) + + + the file + 文件 + + + the directory + 目录 + + + the symlink + 系统链接 + + + Delete %1 + 删除%1 + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>你确认你想删除%1,“%2”?</qt> + + + &Yes + 是(&Y) + + + &No + 否(&N) + + + New Folder 1 + 新建文件夹1 + + + New Folder + 新建文件夹 + + + New Folder %1 + 新建文件夹%1 + + + Find Directory + 查找目录 + + + Directories + 目录 + + + Directory: + 目录: + + + Error + 错误 + + + %1 +File not found. +Check path and filename. + 文件%1 +未找到。 +请检查路径和文件名。 + + + + All Files (*.*) + 所有文件 (*.*) + + + Open + 打开 + + + Select a Directory + 选择一个目录 + + + + Q3LocalFs + + Could not read directory +%1 + 不能读取目录 +%1 + + + Could not create directory +%1 + 不能创建目录 +%1 + + + Could not remove file or directory +%1 + 不能移除文件或者目录 +%1 + + + Could not rename +%1 +to +%2 + 不能把 +%1 +重命名为 +%2 + + + Could not open +%1 + 不能打开 +%1 + + + Could not write +%1 + 不能写入 +%1 + + + + Q3MainWindow + + Line up + 排列 + + + Customize... + 自定义... + + + + Q3NetworkProtocol + + Operation stopped by the user + 操作被用户停止 + + + + Q3ProgressDialog + + Cancel + 取消 + + + + Q3TabDialog + + OK + 确认 + + + Apply + 应用 + + + Help + 帮助 + + + Defaults + 默认 + + + Cancel + 取消 + + + + Q3TextEdit + + &Undo + 撤消(&U) + + + &Redo + 恢复(&R) + + + Cu&t + 剪切(&T) + + + &Copy + 复制(&C) + + + &Paste + 粘贴(&P) + + + Clear + 清空 + + + Select All + 选择全部 + + + + Q3TitleBar + + System + 系统 + + + Restore up + 向上恢复 + + + Minimize + 最小化 + + + Restore down + 向下恢复 + + + Maximize + 最大化 + + + Close + 关闭 + + + Contains commands to manipulate the window + 包含操作窗口的命令。 + + + Puts a minimized window back to normal + + + + Moves the window out of the way + 把窗口移到外面 + + + Puts a maximized window back to normal + 把一个最大化窗口恢复为普通状态 + + + Makes the window full screen + 窗口全屏化 + + + Closes the window + 关闭窗口 + + + Displays the name of the window and contains controls to manipulate it + 显示窗口名称并且包含维护它的控件 + + + + Q3ToolBar + + More... + 更多... + + + + Q3UrlOperator + + The protocol `%1' is not supported + 协议“%1”不被支持 + + + The protocol `%1' does not support listing directories + 协议“%1”不支持列出目录 + + + The protocol `%1' does not support creating new directories + 协议“%1”不支持创建新目录 + + + The protocol `%1' does not support removing files or directories + 协议“%1”不支持移除文件或者目录 + + + The protocol `%1' does not support renaming files or directories + 协议“%1”不支持重命名文件或者目录 + + + The protocol `%1' does not support getting files + 协议“%1”不支持获取文件 + + + The protocol `%1' does not support putting files + 协议“%1”不支持上传文件 + + + The protocol `%1' does not support copying or moving files or directories + 协议“%1”不支持复制或者移动文件或者目录 + + + (unknown) + (未知的) + + + + Q3Wizard + + &Cancel + 取消(&C) + + + < &Back + < 上一步(&B) + + + &Next > + 下一步(&N) > + + + &Finish + 完成(&F) + + + &Help + 帮助(&H) + + + + QAbstractSocket + + Host not found + 主机未找到 + + + Connection refused + 连接被拒绝 + + + Connection timed out + 连接超时 + + + Operation on socket is not supported + Socket操作不被支持 + + + Socket operation timed out + 套接字操作超时 + + + Socket is not connected + 套接字没有被连接 + + + Network unreachable + 网络不能访问 + + + + QAbstractSpinBox + + &Step up + 增加(&S) + + + Step &down + 减少(&D) + + + &Select All + 选择关部(&S) + + + + QAccessibleButton + + Press + 按下 + + + + QApplication + + QT_LAYOUT_DIRECTION + 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. + LTR + + + Executable '%1' requires Qt %2, found Qt %3. + 执行“%1”需要Qt %2,只找到了Qt %3。 + + + Incompatible Qt Library Error + 不兼容的Qt错误 + + + Activate + 激活 + + + Activates the program's main window + 激活这个程序的主窗口 + + + + QAxSelect + + Select ActiveX Control + 选择ActiveX控件 + + + OK + 确定 + + + &Cancel + 取消(&C) + + + COM &Object: + COM对象(&O): + + + + QCheckBox + + Uncheck + 取消选中 + + + Check + 选中 + + + Toggle + 切换 + + + + QColorDialog + + Hu&e: + 色调(&E): + + + &Sat: + 饱和度(&S): + + + &Val: + 亮度(&V): + + + &Red: + 红色(&R): + + + &Green: + 绿色(&G): + + + Bl&ue: + 蓝色(&U): + + + A&lpha channel: + Alpha通道(&A): + + + Select Color + 选择颜色 + + + &Basic colors + 基本颜色(&B) + + + &Custom colors + 自定义颜色(&C) + + + &Add to Custom Colors + 添加到自定义颜色(&A) + + + + QComboBox + + Open + 打开 + + + False + + + + True + + + + Close + 关闭 + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + %1:键是空的 + + + %1: unable to make key + QSystemSemaphore + %1:不能制造键 + + + %1: ftok failed + QSystemSemaphore + %1:ftok 失败 + + + %1: already exists + QSystemSemaphore + %1:已经存在 + + + %1: does not exist + QSystemSemaphore + %1:不存在 + + + %1: out of resources + QSystemSemaphore + %1:资源耗尽了 + + + %1: unknown error %2 + QSystemSemaphore + %1:未知错误 %2 + + + + QDB2Driver + + Unable to connect + 不能连接 + + + Unable to commit transaction + 不能提交事务 + + + Unable to rollback transaction + 不能回滚事务 + + + Unable to set autocommit + 不能设置自动提交 + + + + QDB2Result + + Unable to execute statement + 不能执行语句 + + + Unable to prepare statement + 不能准备语句 + + + Unable to bind variable + 不能帮定变量 + + + Unable to fetch record %1 + 不能获取记录%1 + + + Unable to fetch next + 不能获取下一个 + + + Unable to fetch first + 不能获取第一个 + + + + QDateTimeEdit + + AM + AM + + + am + am + + + PM + PM + + + pm + pm + + + + QDial + + QDial + QDial + + + SpeedoMeter + SpeedoMeter + + + SliderHandle + SliderHandle + + + + QDialog + + What's This? + 这是什么? + + + Done + 完成 + + + + QDialogButtonBox + + OK + 确定 + + + Save + 保存 + + + &Save + 保存(&S) + + + Open + 打开 + + + Cancel + 取消 + + + &Cancel + 取消(&C) + + + Close + 关闭 + + + &Close + 关闭(&C) + + + Apply + 应用 + + + Reset + 重置 + + + Help + 帮助 + + + Don't Save + 不保存 + + + Discard + 抛弃 + + + &Yes + 是(&Y) + + + Yes to &All + 全部是(&A) + + + &No + 否(&N) + + + N&o to All + 全部否(&O) + + + Save All + 保存全部 + + + Abort + 放弃 + + + Retry + 重试 + + + Ignore + 忽略 + + + Restore Defaults + 恢复默认 + + + Close without Saving + 不保存关闭 + + + &OK + 确定(&O) + + + + QDirModel + + Name + 名称 + + + Size + 大小 + + + Kind + Match OS X Finder + 类型 + + + Type + All other platforms + 类型 + + + Date Modified + 日期被修改 + + + + QDockWidget + + Close + 关闭 + + + Dock + 锚接 + + + Float + 浮动 + + + + QDoubleSpinBox + + More + 更多 + + + Less + 更少 + + + + QErrorMessage + + &Show this message again + 再次显示这个消息(&S) + + + &OK + 确定(&O) + + + Debug Message: + 调试消息: + + + Warning: + 警告: + + + Fatal Error: + 致命错误: + + + + QFile + + Destination file exists + 目标文件已存在 + + + Will not rename sequential file using block copy + 将不使用块复制重命名顺序文件 + + + Cannot remove source file + 无法删除源文件 + + + Cannot open %1 for input + 无法输入 %1 + + + Cannot open for output + 无法输出 + + + Failure to write block + 写块失败 + + + Cannot create %1 for output + 无法创建 %1 + + + + QFileDialog + + All Files (*) + 所有文件 (*) + + + Back + 后退 + + + List View + 列表视图 + + + Detail View + 详细视图 + + + File + 文件 + + + Open + 打开 + + + Save As + 另存为 + + + &Open + 打开(&O) + + + &Save + 保存(&S) + + + Recent Places + 最近的地方 + + + &Rename + 重命名(&R) + + + &Delete + 删除(&D) + + + Show &hidden files + 显示隐藏文件(&H) + + + New Folder + 新建文件夹 + + + Find Directory + 查找目录 + + + Directories + 目录 + + + All Files (*.*) + 所有文件 (*.*) + + + Directory: + 目录: + + + %1 already exists. +Do you want to replace it? + %1已经存在。 +你想要替换它么? + + + %1 +File not found. +Please verify the correct file name was given. + 文件%1 +没有找到。 +请核实已给定正确文件名。 + + + My Computer + 我的计算机 + + + Parent Directory + 父目录 + + + Files of type: + 文件类型: + + + %1 +Directory not found. +Please verify the correct directory name was given. + 目录%1 +没有找到。 +请核实已给定正确目录名。 + + + '%1' is write protected. +Do you want to delete it anyway? + “%1“是写保护的。 +你还是想删除它么? + + + Are sure you want to delete '%1'? + 你确认你想删除“%1“? + + + Could not delete directory. + 不能删除目录。 + + + Drive + 驱动器 + + + File Folder + Match Windows Explorer + 文件文件夹 + + + Folder + All other platforms + 文件夹 + + + Alias + Mac OS X Finder + 别名 + + + Shortcut + All other platforms + 快捷方式 + + + Unknown + 未知的 + + + Show + 显示 + + + Forward + 前进 + + + &New Folder + 新建文件夹(&N) + + + &Choose + 选择(&C) + + + Remove + 移除 + + + File &name: + 文件名称(&N): + + + Look in: + 查看: + + + Create New Folder + 创建新文件夹 + + + + QFileSystemModel + + %1 TB + %1 TB + + + %1 GB + %1 GB + + + %1 MB + %1 MB + + + %1 KB + %1千字节 + + + %1 bytes + %1字节 + + + Invalid filename + 无效文件名 + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>名称“%1“不能被使用。</b><p>请使用另外一个包含更少字符或者不含有标点符号的名称。 + + + Name + 名称 + + + Size + 大小 + + + Kind + Match OS X Finder + 类型 + + + Type + All other platforms + 类型 + + + Date Modified + 日期被修改 + + + My Computer + 我的计算机 + + + Computer + 计算机 + + + %1 byte(s) + %1字节 + + + + QFontDatabase + + Normal + 普通 + + + Bold + 粗体 + + + Demi Bold + 半粗体 + + + Black + 黑体 + + + Demi + 半体 + + + Light + 轻体 + + + Italic + 意大利体 + + + Oblique + 斜体 + + + Any + 任意 + + + Latin + 拉丁文 + + + Greek + 希腊文 + + + Cyrillic + 西里尔文 + + + Armenian + 亚美尼亚文 + + + Hebrew + 希伯来文 + + + Arabic + 阿拉伯文 + + + Syriac + 叙利亚文 + + + Thaana + 马尔代夫文 + + + Devanagari + 梵文 + + + Bengali + 孟加拉文 + + + Gurmukhi + 旁遮普文 + + + Gujarati + 古吉拉特文 + + + Oriya + 奥里雅文 + + + Tamil + 泰米尔文 + + + Telugu + 泰卢固文 + + + Kannada + 埃纳德文 + + + Malayalam + 马拉亚拉姆文 + + + Sinhala + 僧伽罗文 + + + Thai + 泰国文 + + + Lao + 老挝文 + + + Tibetan + 藏文 + + + Myanmar + 缅甸文 + + + Georgian + 格鲁吉亚文 + + + Khmer + 谷美尔文 + + + Simplified Chinese + 简体中文 + + + Traditional Chinese + 繁体中文 + + + Japanese + 日文 + + + Korean + 韩文 + + + Vietnamese + 越南文 + + + Symbol + 符号 + + + Ogham + 欧甘文 + + + Runic + 古北欧文 + + + N'Ko + N'Ko + + + + QFontDialog + + &Font + 字体(&F) + + + Font st&yle + 字体风格(&Y) + + + &Size + 大小(&S) + + + Effects + 效果 + + + Stri&keout + 删除线(&K) + + + &Underline + 下划线(&U) + + + Sample + 实例 + + + Select Font + 选择字体 + + + Wr&iting System + 书写系统(&I) + + + + QFtp + + Host %1 found + 主机%1找到了 + + + Host found + 主机找到了 + + + Connected to host %1 + 连接到主机%1了 + + + Connected to host + 连接到主机了 + + + Connection to %1 closed + 到%1的连接关闭了 + + + Connection closed + 连接关闭了 + + + Host %1 not found + 主机%1没有找到 + + + Connection refused to host %1 + 连接被主机 %1 拒绝 + + + Connection timed out to host %1 + 主机%1连接超时 + + + Unknown error + 未知的错误 + + + Connecting to host failed: +%1 + 连接主机失败: +%1 + + + Login failed: +%1 + 登录失败: +%1 + + + Listing directory failed: +%1 + 列出目录失败: +%1 + + + Changing directory failed: +%1 + 改变目录失败: +%1 + + + Downloading file failed: +%1 + 下载文件失败: +%1 + + + Uploading file failed: +%1 + 上传文件失败: +%1 + + + Removing file failed: +%1 + 移除文件失败: +%1 + + + Creating directory failed: +%1 + 创建目录失败: +%1 + + + Removing directory failed: +%1 + 移除目录失败: +%1 + + + Not connected + 没有连接 + + + Connection refused for data connection + 因为数据连接而被拒绝连接 + + + + QHostInfo + + Unknown error + 未知的错误 + + + + QHostInfoAgent + + Host not found + 主机未找到 + + + Unknown address type + 未知的地址类型 + + + Unknown error + 未知的错误 + + + No host name given + 未给定主机名 + + + Invalid hostname + 无效主机名 + + + + QHttp + + Connection refused + 连接被拒绝 + + + Host %1 not found + 主机%1没有找到 + + + Wrong content length + 错误的内容长度 + + + HTTP request failed + HTTP请求失败 + + + Host %1 found + 主机%1找到了 + + + Host found + 主机找到了 + + + Connected to host %1 + 连接到%1主机了 + + + Connected to host + 连接到主机了 + + + Connection to %1 closed + 到%1的连接关闭了 + + + Connection closed + 连接关闭了 + + + Unknown error + 未知的错误 + + + Request aborted + 请求被放弃了 + + + No server set to connect to + 没有设置要连接的服务器 + + + Server closed connection unexpectedly + 服务器异常地关闭了连接 + + + Invalid HTTP response header + 无效的HTTP响应头 + + + Unknown authentication method + 未知鉴定方法 + + + Invalid HTTP chunked body + 无效的HTTP臃肿体 + + + Error writing response to device + 向设备中进行写回复时发生错误 + + + Proxy authentication required + 代理需要认证 + + + Authentication required + 需要认证 + + + Proxy requires authentication + 代理需要验证 + + + Host requires authentication + 主机需要验证 + + + Data corrupted + 数据错误 + + + SSL handshake failed + SSL 握手失败 + + + Unknown protocol specified + 所指定的协议是未知的 + + + Connection refused (or timed out) + 连接被拒绝(或者超时) + + + HTTPS connection requested but SSL support not compiled in + HTTPS 连接需要 SSL,但它没有被编译进来 + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + 未收到代理的HTTP响应 + + + Error parsing authentication request from proxy + 解析代理的认证请求出错 + + + Authentication required + 需要认证 + + + Proxy denied connection + 代理拒绝连接 + + + Error communicating with HTTP proxy + 和HTTP代理通讯时发生错误 + + + Proxy server not found + 未找到代理服务器 + + + Proxy connection refused + 代理连接被拒绝 + + + Proxy server connection timed out + 代理服务器连接超时 + + + Proxy connection closed prematurely + 代理连接过早关闭 + + + + QIBaseDriver + + Error opening database + 打开数据库错误 + + + Could not start transaction + 不能开始事务 + + + Unable to commit transaction + 不能提交事务 + + + Unable to rollback transaction + 不能回滚事务 + + + + QIBaseResult + + Unable to create BLOB + 不能创建BLOB + + + Unable to write BLOB + 不能写入BLOB + + + Unable to open BLOB + 不能打开BLOB + + + Unable to read BLOB + 不能读取BLOB + + + Could not find array + 不能找到数组 + + + Could not get array data + 不能得到数组数据 + + + Could not get query info + 不能得到查询信息 + + + Could not start transaction + 不能开始事务 + + + Unable to commit transaction + 不能提交事务 + + + Could not allocate statement + 不能分配语句 + + + Could not prepare statement + 不能准备语句 + + + Could not describe input statement + 不能描述输入语句 + + + Could not describe statement + 不能描述语句 + + + Unable to close statement + 不能关闭语句 + + + Unable to execute query + 不能执行查询 + + + Could not fetch next item + 不能获取下一项 + + + Could not get statement info + 不能得到语句信息 + + + + QIODevice + + Permission denied + 权限被拒绝 + + + Too many open files + 太多打开的文件 + + + No such file or directory + 没有这个文件或者目录 + + + No space left on device + 设备上没有空间了 + + + Unknown error + 未知的错误 + + + + QInputContext + + XIM + XIM + + + FEP + FEP + + + XIM input method + XIM输入法 + + + Windows input method + Windows输入法 + + + Mac OS X input method + Mac OS X输入法 + + + S60 FEP input method + S60 FEP输入法 + + + + QInputDialog + + Enter a value: + 输入一个值: + + + + QLibrary + + Could not mmap '%1': %2 + 不能映射”%1“:%2 + + + Plugin verification data mismatch in '%1' + “%1“中的插件验证数据不匹配 + + + Could not unmap '%1': %2 + 不能取消映射“%1“:%2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + 插件“%1”使用了不兼容的Qt库。(%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + 插件“%1“使用了不兼容的Qt库。期待的构建键是“%2“,得到的却是”%3“ + + + Unknown error + 未知的错误 + + + The shared library was not found. + 共享库没有被找到。 + + + The file '%1' is not a valid Qt plugin. + 文件“%1“不是有效的Qt插件。 + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + 插件“%1“使用了不兼容的Qt库。(不能混合使用库的调试版本和发布版本。) + + + Cannot load library %1: %2 + 无法加载库%1:%2 + + + Cannot unload library %1: %2 + 无法卸载库%1:%2 + + + Cannot resolve symbol "%1" in %2: %3 + 无法解析%2中的符号“%2”:%3 + + + + QLineEdit + + Select All + 选择全部 + + + &Undo + 撤消(&U) + + + &Redo + 恢复(&R) + + + Cu&t + 剪切(&T) + + + &Copy + 复制(&C) + + + &Paste + 粘贴(&P) + + + Delete + 删除 + + + + QLocalServer + + %1: Name error + %1: 名称错误 + + + %1: Permission denied + %1:权限被拒绝 + + + %1: Address in use + %1:地址正在被使用 + + + %1: Unknown error %2 + %1:未知错误 %2 + + + + QLocalSocket + + %1: Connection refused + %1:连接被拒绝 + + + %1: Remote closed + %1:远程已关闭 + + + %1: Invalid name + %1:无效名称 + + + %1: Socket access error + %1:套接字访问错误 + + + %1: Socket resource error + %1:套接字资源错误 + + + %1: Socket operation timed out + %1:套接字操作超时 + + + %1: Datagram too large + %1:数据报太大 + + + %1: Connection error + %1:连接错误 + + + %1: The socket operation is not supported + %1:套接字操作不被支持 + + + %1: Unknown error + %1:未知错误 + + + %1: Unknown error %2 + %1:未知错误 %2 + + + + QMYSQLDriver + + Unable to open database ' + 不能打开数据库 + + + Unable to connect + 不能连接 + + + Unable to begin transaction + 不能开始事务 + + + Unable to commit transaction + 不能提交事务 + + + Unable to rollback transaction + 不能回滚事务 + + + + QMYSQLResult + + Unable to fetch data + 不能获取数据 + + + Unable to execute query + 不能执行查询 + + + Unable to store result + 不能存储结果 + + + Unable to prepare statement + 不能准备语句 + + + Unable to reset statement + 不能重置语句 + + + Unable to bind value + 不能绑定值 + + + Unable to execute statement + 不能执行语句 + + + Unable to bind outvalues + 不能绑定外值 + + + Unable to store statement results + 不能存储语句结果 + + + Unable to execute next query + 不能执行下一个查询 + + + Unable to store next result + 不能存储下一个结果 + + + + QMdiArea + + (Untitled) + (未命名的) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + 关闭 + + + Minimize + 最小化 + + + Restore Down + 向下恢复 + + + &Restore + 恢复(&R) + + + &Move + 移动(&M) + + + &Size + 大小(&S) + + + Mi&nimize + 最小化(&N) + + + Ma&ximize + 最大化(&X) + + + Stay on &Top + 总在最前(&T) + + + &Close + 关闭(&C) + + + Maximize + 最大化 + + + Unshade + 取消遮蔽 + + + Shade + 遮蔽 + + + Restore + 恢复 + + + Help + 帮助 + + + Menu + 菜单 + + + - [%1] + - [%1] + + + + QMenu + + Close + 关闭 + + + Open + 打开 + + + Execute + 执行 + + + + QMenuBar + + Actions + 操作 + + + + QMessageBox + + OK + 确定 + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <h3>关于Qt</h3><p>此程序使用Qt版本%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><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> + <p>Qt是一个C++工具箱,用于跨平台应用程序开发。</p><p>Qt具有单一源跨可移植性,可跨越MS&nbsp;Windows、Mac&nbsp;OS&nbsp;X、Linux和所有主要的商业Unix类平台进行移植。Qt还适用于嵌入式设备,如Qt for Embedded Linux和Qt for Windows CE。</p><p>Qt有三种不同许可方式,以满足各种用户需求。</p><p>假如您要开发专利/商业软件,但不希望与第三方共享任何源代码,或者无法符合GNU LGPL版本2.1或GNU GPL版本3.0的条款,则按照我们的商业许可证协议授权的Qt非常适用。</p><p>假如您能够符合GNU LGPL版本2.1的条款和条件,则按照GNU LGPL版本2.1授权的Qt非常适合开发Qt应用程序(专有或开放源码)。</p><p>假如在开发Qt应用程序过程中,您希望这类应用程序能与遵循GNU GPL版本3.0的软件合用,或者您愿意符合GNU GPL版本3.0条款,则按照GNU通用公共许可证版本3.0授权的Qt非常适用。</p><p>请参阅<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>了解Qt授权概况。</p><p>版权所有 (C) 2010 诺基亚公司和/或附属公司。</p><p>Qt是一款诺基亚产品。请参阅<a href="http://qt.nokia.com/">qt.nokia.com</a>了解详情。</p> + + + About Qt + 关于Qt + + + Help + 帮助 + + + Show Details... + 显示细节…… + + + Hide Details... + 隐藏细节…… + + + + QMultiInputContext + + Select IM + 选择输入法 + + + + QMultiInputContextPlugin + + Multiple input method switcher + 多输入法切换器 + + + Multiple input method switcher that uses the context menu of the text widgets + 使用文本窗口部件上下文菜单的多输入法切换器 + + + + QNativeSocketEngine + + The remote host closed the connection + 远端主机关闭了这个连接 + + + Network operation timed out + 网络操作超时 + + + Out of resources + 资源耗尽了 + + + Unsupported socket operation + 不被支持的套接字操作 + + + Protocol type not supported + 协议类型不被支持 + + + Invalid socket descriptor + 无效的套接字描述符 + + + Network unreachable + 网络不能访问 + + + Permission denied + 权限被拒绝 + + + Connection timed out + 连接超时 + + + Connection refused + 连接被拒绝 + + + The bound address is already in use + 要启用的地址已经被使用 + + + The address is not available + 这个地址不可用 + + + The address is protected + 这个地址被保护了 + + + Unable to send a message + 不能发送一个消息 + + + Unable to receive a message + 不能接收一个消息 + + + Unable to write + 不能写入 + + + Network error + 网络错误 + + + Another socket is already listening on the same port + 另一个套接字已经正在监听同一端口 + + + Unable to initialize non-blocking socket + 不能初始化非阻塞套接字 + + + Unable to initialize broadcast socket + 不能初始化广播套接字 + + + Attempt to use IPv6 socket on a platform with no IPv6 support + 试图在不支持IPv6支持的平台上使用IPv6套接字 + + + Host unreachable + 主机不能访问 + + + Datagram was too large to send + 不能发送过大的数据报 + + + Operation on non-socket + 对非套接字操作 + + + Unknown error + 未知的错误 + + + The proxy type is invalid for this operation + 对于这个操作代理类型是无效的。 + + + + QNetworkAccessCacheBackend + + Error opening %1 + 打开%1发生错误 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + 写入%1时出错:%2 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + 正在打开非本地文件 %1 的请求 + + + Error opening %1: %2 + 打开 %1 错误:%2 + + + Write error writing to %1: %2 + 写入 %1 错误:%2 + + + Cannot open %1: Path is a directory + 无法打开 %1:路径是一个目录 + + + Read error reading from %1: %2 + 读取 %1 错误:%2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + 未找到合适的代理 + + + Cannot open %1: is a directory + 无法读取 %1:是一个目录 + + + Logging in to %1 failed: authentication required + 登入 %1 失败:需要验证 + + + Error while downloading %1: %2 + 下载 %1 时错误:%2 + + + Error while uploading %1: %2 + 上载 %1 时错误:%2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + 未找到合适的代理 + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + 下载 %1 错误 - 服务器回复:%2 + + + Protocol "%1" is unknown + 协议“%1”是未知的 + + + + QNetworkReplyImpl + + Operation canceled + 操作被取消 + + + + QOCIDriver + + Unable to logon + 不能登录 + + + Unable to initialize + QOCIDriver + 不能初始化 + + + Unable to begin transaction + 不能开始事务 + + + Unable to commit transaction + 不能提交事务 + + + Unable to rollback transaction + 不能回滚事务 + + + + QOCIResult + + Unable to bind column for batch execute + 不能绑定批处理执行的列 + + + Unable to execute batch statement + 不能执行批处理语句 + + + Unable to goto next + 不能进入下一个 + + + Unable to alloc statement + 不能分配语句 + + + Unable to prepare statement + 不能准备语句 + + + Unable to get statement type + + + + Unable to bind value + 不能绑定值 + + + Unable to execute statement + 不能执行语句 + + + + QODBCDriver + + Unable to connect + 不能连接 + + + Unable to disable autocommit + 不能禁止自动提交 + + + Unable to commit transaction + 不能提交事务 + + + Unable to rollback transaction + 不能回滚事务 + + + Unable to enable autocommit + 不能打开自动提交 + + + Unable to connect - Driver doesn't support all functionality required + + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: 不能把“SQL_CURSOR_STATIC”设置为语句属性。请检查你的ODBC驱动程序设置。 + + + Unable to execute statement + 不能执行语句 + + + Unable to fetch next + 不能获取下一个 + + + Unable to prepare statement + 不能准备语句 + + + Unable to bind variable + 不能帮定变量 + + + Unable to fetch last + 不能获取最后一个 + + + Unable to fetch + 不能获取 + + + Unable to fetch first + 不能获取第一个 + + + Unable to fetch previous + 不能获取上一个 + + + + QObject + + Invalid hostname + 无效主机名 + + + Operation not supported on %1 + 在 %1 上不被支持的操作 + + + Invalid URI: %1 + 无效的 URI:%1 + + + Socket error on %1: %2 + %1 上的套接字错误:%2 + + + Remote host closed the connection prematurely on %1 + 远程主机过早地关闭了在 %1 上的这个连接 + + + No host name given + 未指定主机名 + + + + QPPDOptionsModel + + Name + 名称 + + + Value + + + + + QPSQLDriver + + Unable to connect + 不能连接 + + + Could not begin transaction + 不能开始事务 + + + Could not commit transaction + 不能提交事务 + + + Could not rollback transaction + 不能回滚事务 + + + Unable to subscribe + 不能订阅 + + + Unable to unsubscribe + 不能取消订阅 + + + + QPSQLResult + + Unable to create query + 不能创建查询 + + + Unable to prepare statement + 不能准备语句 + + + + QPageSetupWidget + + Centimeters (cm) + 厘米 (cm) + + + Millimeters (mm) + 毫米 (mm) + + + Inches (in) + 英寸 (in) + + + Points (pt) + 点 (pt) + + + Form + 窗体 + + + Paper + 纸张 + + + Page size: + 纸张大小: + + + Width: + 宽度: + + + Height: + 高度: + + + Paper source: + 纸张源: + + + Orientation + 方向 + + + Portrait + 纵向 + + + Landscape + 横向 + + + Reverse landscape + 反向横向 + + + Reverse portrait + 反向纵向 + + + Margins + 边距 + + + top margin + 上边距 + + + left margin + 左边距 + + + right margin + 右边距 + + + bottom margin + 下边距 + + + + QPluginLoader + + Unknown error + 未知的错误 + + + The plugin was not loaded. + 插件没有被载入。 + + + + QPrintDialog + + locally connected + 本地已经连接的 + + + Aliases: %1 + 别名:%1 + + + unknown + 未知的 + + + OK + 确定 + + + Print all + 打印全部 + + + Print range + 打印范围 + + + A0 (841 x 1189 mm) + A0 (841 x 1189 毫米) + + + A1 (594 x 841 mm) + A1 (594 x 841 毫米) + + + A2 (420 x 594 mm) + A2 (420 x 594 毫米) + + + A3 (297 x 420 mm) + A3 (297 x 420 毫米) + + + A5 (148 x 210 mm) + A5 (148 x 210 毫米) + + + A6 (105 x 148 mm) + A6 (105 x 148 毫米) + + + A7 (74 x 105 mm) + A7 (74 x 105 毫米) + + + A8 (52 x 74 mm) + A8 (52 x 74 毫米) + + + A9 (37 x 52 mm) + A9 (37 x 52 毫米) + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 毫米) + + + B1 (707 x 1000 mm) + B1 (707 x 1000 毫米) + + + B2 (500 x 707 mm) + B2 (500 x 707 毫米) + + + B3 (353 x 500 mm) + B3 (353 x 500 毫米) + + + B4 (250 x 353 mm) + B4 (250 x 353 毫米) + + + B6 (125 x 176 mm) + B6 (125 x 176 毫米) + + + B7 (88 x 125 mm) + B7 (88 x 125 毫米) + + + B8 (62 x 88 mm) + B8 (62 x 88 毫米) + + + B9 (44 x 62 mm) + B9 (44 x 62 毫米) + + + B10 (31 x 44 mm) + B10 (31 x 44 毫米) + + + C5E (163 x 229 mm) + C5E (163 x 229 毫米) + + + DLE (110 x 220 mm) + DLE (110 x 220 毫米) + + + Folio (210 x 330 mm) + Folio (210 x 330 毫米) + + + Ledger (432 x 279 mm) + Ledger (432 x 279 毫米) + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432 毫米) + + + US Common #10 Envelope (105 x 241 mm) + 美国普通10号信封 (105 x 241 毫米) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 毫米,8.26 x 11.7 英寸) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 毫米,6.93 x 9.84 英寸) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10 英寸,191 x 254 毫米) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14 英寸,216 x 356 毫米) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11 英寸,216 x 279 毫米) + + + Print selection + 打印选择 + + + Print + 打印 + + + Print To File ... + 打印到文件…… + + + File %1 is not writable. +Please choose a different file name. + 文件%1不可写。 +请选择一个不同的文件名。 + + + %1 already exists. +Do you want to overwrite it? + %1已经存在。 +你想覆盖它么? + + + File exists + 文件存在 + + + <qt>Do you want to overwrite it?</qt> + <qt>你想覆盖它么?</qt> + + + %1 is a directory. +Please choose a different file name. + %1是目录。 +请选择一个不同的文件名。 + + + The 'From' value cannot be greater than the 'To' value. + “从”的数值不能大于“到”的数值。 + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + 决策文书 + + + Folio + 对开纸 + + + Ledger + 帐页 + + + Legal + 法律文书 + + + Letter + 信纸 + + + Tabloid + 小型报纸 + + + US Common #10 Envelope + 美国普通10号信封 + + + Custom + 自定义 + + + &Options >> + 选项(&O) >> + + + &Options << + 选项(&O) << + + + Print to File (PDF) + 打印到文件(PDF) + + + Print to File (Postscript) + 打印到文件(Postscript) + + + Local file + 本地文件 + + + Write %1 file + 写入 %1 文件 + + + &Print + 打印(&P) + + + + QPrintPreviewDialog + + %1% + %1% + + + Print Preview + 打印预览 + + + Next page + 下一页 + + + Previous page + 上一页 + + + First page + 第一页 + + + Last page + 最后一页 + + + Fit width + 适应宽度 + + + Fit page + 适应页面 + + + Zoom in + 放大 + + + Zoom out + 缩小 + + + Portrait + 纵向 + + + Landscape + 横向 + + + Show single page + 显示单页 + + + Show facing pages + 显示当前页 + + + Show overview of all pages + 显示所有页的概览 + + + Print + 打印 + + + Page setup + 打印设置 + + + Close + 关闭 + + + Export to PDF + 导出为PDF + + + Export to PostScript + 导出为PostScript + + + Page Setup + 页面设置 + + + + QPrintPropertiesWidget + + Form + 窗体 + + + Page + + + + Advanced + 高级 + + + + QPrintSettingsOutput + + Form + 窗体 + + + Copies + 拷贝 + + + Print range + 打印范围 + + + Print all + 打印全部 + + + Pages from + 页数从 + + + to + + + + Selection + 选择 + + + Output Settings + 输出设置 + + + Copies: + 备份: + + + Collate + 校对 + + + Reverse + 反向 + + + Options + 选项 + + + Color Mode + 彩色模式 + + + Color + 彩色 + + + Grayscale + 灰度 + + + Duplex Printing + 两部分打印 + + + None + + + + Long side + 长侧 + + + Short side + 短侧 + + + + QPrintWidget + + Form + 窗体 + + + Printer + 打印机 + + + &Name: + 名称(&N): + + + P&roperties + 属性(&R) + + + Location: + 位置: + + + Preview + 预览 + + + Type: + 类型: + + + Output &file: + 输出文件(&F): + + + ... + ... + + + + QProcess + + Could not open input redirection for reading + 无法打开用于读取的输入重定向 + + + Could not open output redirection for writing + 无法打开用于写入的输出重定向 + + + Resource error (fork failure): %1 + 资源错误(fork失败):%1 + + + Process operation timed out + 进程处理超时 + + + Error reading from process + 从进程中读取时发生错误 + + + Error writing to process + 向进程写入时发生错误 + + + Process crashed + 进程已崩溃 + + + No program defined + 未定义程序 + + + Process failed to start: %1 + 过程无法启动:%1 + + + + QProgressDialog + + Cancel + 撤消 + + + + QPushButton + + Open + 打开 + + + + QRadioButton + + Check + 选中 + + + + QRegExp + + no error occurred + 没有错误发生 + + + disabled feature used + 使用了失效的特效 + + + bad char class syntax + 错误的字符类语法 + + + bad lookahead syntax + 错误的预测语法 + + + bad repetition syntax + 错误的重复语法 + + + invalid octal value + 无效的八进制数值 + + + missing left delim + 找不到左分隔符 + + + unexpected end + 意外的终止 + + + met internal limit + 遇到内部限制 + + + invalid interval + 无效时间间隔 + + + invalid category + 无效类别 + + + + QSQLite2Driver + + Error opening database + 打开数据库时出错 + + + Unable to begin transaction + 不能开始事务 + + + Unable to commit transaction + 不能提交事务 + + + Unable to rollback transaction + 不能回滚事务 + + + + QSQLite2Result + + Unable to fetch results + 不能获取结果 + + + Unable to execute statement + 不能执行语句 + + + + QSQLiteDriver + + Error opening database + 打开数据库错误 + + + Error closing database + 关闭数据库错误 + + + Unable to begin transaction + 不能开始事务 + + + Unable to commit transaction + 不能提交事务 + + + Unable to rollback transaction + 不能回滚事务 + + + + QSQLiteResult + + Unable to fetch row + 不能获取行 + + + Unable to execute statement + 不能执行语句 + + + Unable to reset statement + 不能重置语句 + + + Unable to bind parameters + 不能绑定参数 + + + Parameter count mismatch + 参数数量不匹配 + + + No query + 没有查询 + + + + QScriptBreakpointsModel + + ID + ID + + + Location + 位置 + + + Condition + 条件 + + + Ignore-count + 忽略计数 + + + Single-shot + 单发 + + + Hit-count + 点击量 + + + + QScriptBreakpointsWidget + + New + 新建 + + + Delete + 删除 + + + + QScriptDebugger + + Go to Line + 转至行 + + + Line: + 行: + + + Interrupt + 中断 + + + Shift+F5 + Shift+F5 + + + Continue + 继续 + + + F5 + F5 + + + Step Into + 进入 + + + F11 + F11 + + + Step Over + 越过 + + + F10 + F10 + + + Step Out + 跳出 + + + Shift+F11 + Shift+F11 + + + Run to Cursor + 运行到光标 + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + 运行到新脚本 + + + Toggle Breakpoint + 切换断点 + + + F9 + F9 + + + Clear Debug Output + 清除调试输出 + + + Clear Error Log + 清除错误日志 + + + Clear Console + 清除控制台 + + + &Find in Script... + 在脚本中查找(&F)... + + + Ctrl+F + Ctrl+F + + + Find &Next + 查找下一个(&N) + + + F3 + F3 + + + Find &Previous + 查找上一个(&P) + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + 调试 + + + + QScriptDebuggerCodeFinderWidget + + Close + 关闭 + + + Previous + 上一个 + + + Next + 下一个 + + + Case Sensitive + 区分大小写 + + + Whole words + 整个词 + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;搜索已完成 + + + + QScriptDebuggerLocalsModel + + Name + 名称 + + + Value + + + + + QScriptDebuggerStackModel + + Level + 级别 + + + Name + 名称 + + + Location + 位置 + + + + QScriptEdit + + Toggle Breakpoint + 切换断点 + + + Disable Breakpoint + 禁用断点 + + + Enable Breakpoint + 启用断点 + + + Breakpoint Condition: + 断点条件: + + + + QScriptEngineDebugger + + Loaded Scripts + 已加载的脚本 + + + Breakpoints + 断点 + + + Stack + 堆栈 + + + Locals + 区域设置 + + + Console + 控制台 + + + Debug Output + 调试输出 + + + Error Log + 错误日志 + + + Search + 搜索 + + + View + 查看 + + + Qt Script Debugger + Qt脚本调试器 + + + + QScriptNewBreakpointWidget + + Close + 关闭 + + + + QScrollBar + + Scroll here + 滚动到这里 + + + Left edge + 左边缘 + + + Top + 顶部 + + + Right edge + 右边缘 + + + Bottom + 底部 + + + Page left + 左一页 + + + Page up + 上一页 + + + Page right + 右一页 + + + Page down + 下一页 + + + Scroll left + 向左滚动 + + + Scroll up + 向上滚动 + + + Scroll right + 向右滚动 + + + Scroll down + 向下滚动 + + + Line up + 向上排列 + + + Position + 位置 + + + Line down + 向下排列 + + + + QSharedMemory + + %1: create size is less then 0 + %1:创建的大小小于 0 + + + %1: unable to lock + %1:无法锁定 + + + %1: unable to unlock + %1:无法取消锁定 + + + %1: permission denied + %1:权限被拒绝 + + + %1: already exists + %1:已经存在 + + + %1: doesn't exists + %1:不存在 + + + %1: out of resources + %1:资源耗尽了 + + + %1: unknown error %2 + %1:未知错误 %2 + + + %1: key is empty + %1:键是空的 + + + %1: ftok failed + %1:ftok 失败 + + + %1: unable to make key + %1:不能制造键 + + + %1: doesn't exist + %1:不存在 + + + %1: UNIX key file doesn't exist + %1:UNIX密钥文件不存在 + + + %1: system-imposed size restrictions + %1:系统预设大小限制 + + + %1: not attached + %1:没有附加 + + + %1: invalid size + %1:无效大小 + + + %1: key error + %1: 键错误 + + + %1: size query failed + %1:大小查询失败 + + + %1: unable to set key on lock + %1:无法设置锁定的键 + + + + QShortcut + + Space + 空格 + + + Esc + Esc + + + Tab + Tab + + + Backtab + Backtab + + + Backspace + Backspace + + + Return + Return + + + Enter + Enter + + + Ins + Ins + + + Del + Del + + + Pause + Pause + + + Print + Print + + + SysReq + SysReq + + + Home + Home + + + End + End + + + Left + Left + + + Up + Up + + + Right + Right + + + Down + Down + + + PgUp + PgUp + + + PgDown + PgDown + + + CapsLock + CapsLock + + + NumLock + NumLock + + + ScrollLock + ScrollLock + + + Menu + Menu + + + Help + Help + + + Back + 后退 + + + Forward + 前进 + + + Stop + 停止 + + + Refresh + 刷新 + + + Volume Down + 调小音量 + + + Volume Mute + 静音 + + + Volume Up + 调大音量 + + + Bass Boost + 低音增强 + + + Bass Up + 调大低音 + + + Bass Down + 调小低音 + + + Treble Up + 调大高音 + + + Treble Down + 调小高音 + + + Media Play + 多媒体播放 + + + Media Stop + 多媒体停止 + + + Media Previous + 上一个多媒体 + + + Media Next + 下一个多媒体 + + + Media Record + 多媒体记录 + + + Favorites + 最喜爱的 + + + Search + 搜索 + + + Standby + 等待 + + + Open URL + 打开URL + + + Launch Mail + 启动邮件 + + + Launch Media + 启动多媒体 + + + Launch (0) + 启动 (0) + + + Launch (1) + 启动 (1) + + + Launch (2) + 启动 (2) + + + Launch (3) + 启动 (3) + + + Launch (4) + 启动 (4) + + + Launch (5) + 启动 (5) + + + Launch (6) + 启动 (6) + + + Launch (7) + 启动 (7) + + + Launch (8) + 启动 (8) + + + Launch (9) + 启动 (9) + + + Launch (A) + 启动 (A) + + + Launch (B) + 启动 (B) + + + Launch (C) + 启动 (C) + + + Launch (D) + 启动 (D) + + + Launch (E) + 启动 (E) + + + Launch (F) + 启动 (F) + + + Monitor Brightness Up + 提高监视器亮度 + + + Monitor Brightness Down + 降低监视器亮度 + + + Keyboard Light On/Off + 键盘灯打开/关闭 + + + Keyboard Brightness Up + 提高键盘亮度 + + + Keyboard Brightness Down + 降低键盘亮度 + + + Power Off + 关机 + + + Wake Up + 唤醒 + + + Eject + 弹出 + + + Screensaver + 屏幕保护程序 + + + WWW + WWW + + + Sleep + 睡眠 + + + LightBulb + 灯泡 + + + Shop + 商店 + + + History + 历史记录 + + + Add Favorite + 添加收藏夹 + + + Hot Links + 热点链接 + + + Adjust Brightness + 调节亮度 + + + Finance + 财务 + + + Community + 社区 + + + Audio Rewind + 音频倒带 + + + Back Forward + 后倒 + + + Application Left + 应用程序偏左 + + + Application Right + 应用程序偏右 + + + Book + 书籍 + + + CD + CD + + + Calculator + 计算器 + + + Clear + 清除 + + + Clear Grab + 清除抓取 + + + Close + 关闭 + + + Copy + 复制 + + + Cut + 剪切 + + + Display + 显示 + + + DOS + DOS + + + Documents + 文档 + + + Spreadsheet + 电子表格 + + + Browser + 浏览器 + + + Game + 游戏 + + + Go + 转至 + + + iTouch + iTouch + + + Logoff + 注销 + + + Market + 市场 + + + Meeting + 会议 + + + Keyboard Menu + 键盘功能表 + + + Menu PB + 功能表PB + + + My Sites + 我的站点 + + + News + 新闻 + + + Home Office + 家庭办公 + + + Option + 选项 + + + Paste + 粘贴 + + + Phone + 手机 + + + Reply + 回复 + + + Reload + 重新加载 + + + Rotate Windows + 旋转视窗 + + + Rotation PB + 旋转PB + + + Rotation KB + 旋转KB + + + Save + 储存 + + + Send + 发送 + + + Spellchecker + 拼写检查程序 + + + Split Screen + 分屏 + + + Support + 支持 + + + Task Panel + 任务面板 + + + Terminal + 终端 + + + Tools + 工具 + + + Travel + 旅行 + + + Video + 视频 + + + Word Processor + 字处理器 + + + XFer + XFer + + + Zoom In + 放大 + + + Zoom Out + 缩小 + + + Away + 远离 + + + Messenger + ## + + + WebCam + WebCam + + + Mail Forward + 电子邮件转发 + + + Pictures + 图片 + + + Music + 音乐 + + + Battery + 电池 + + + Bluetooth + 蓝牙 + + + Wireless + 无线 + + + Ultra Wide Band + 超宽带 + + + Audio Forward + 音频前进 + + + Audio Repeat + 音频重复 + + + Audio Random Play + 音频随机播放 + + + Subtitle + 小标题 + + + Audio Cycle Track + 音频循环轨道 + + + Time + 时间 + + + View + 查看 + + + Top Menu + 顶端功能表 + + + Suspend + 挂起 + + + Hibernate + 休眠 + + + Print Screen + Print Screen + + + Page Up + Page Up + + + Page Down + Page Down + + + Caps Lock + Caps Lock + + + Num Lock + Num Lock + + + Number Lock + Number Lock + + + Scroll Lock + Scroll Lock + + + Insert + Insert + + + Delete + Delete + + + Escape + Escape + + + System Request + System Request + + + Select + 选择 + + + Yes + + + + No + + + + Context1 + 上下文1 + + + Context2 + 上下文2 + + + Context3 + 上下文3 + + + Context4 + 上下文4 + + + Call + 呼叫 + + + Hangup + 挂起 + + + Flip + 翻转 + + + Ctrl + Ctrl + + + Shift + Shift + + + Alt + Alt + + + Meta + Meta + + + + + + + + + F%1 + F%1 + + + Home Page + 主页 + + + + QSlider + + Page left + 左一页 + + + Page up + 上一页 + + + Position + 位置 + + + Page right + 右一页 + + + Page down + 下一页 + + + + QSocks5SocketEngine + + Connection to proxy refused + 代理拒绝连接 + + + Connection to proxy closed prematurely + 代理连接过早关闭 + + + Proxy host not found + 代理主机未找到 + + + Connection to proxy timed out + 代理连接超时 + + + Proxy authentication failed + 代理认证失败 + + + Proxy authentication failed: %1 + 代理认证失败: %1 + + + SOCKS version 5 protocol error + SOCKS版本5协议错误 + + + General SOCKSv5 server failure + 常规服务器失败 + + + Connection not allowed by SOCKSv5 server + 连接不被SOCKSv5服务器允许 + + + TTL expired + TTL已过期 + + + SOCKSv5 command not supported + 不支持的SOCKSv5命令 + + + Address type not supported + 不支持的地址类型 + + + Unknown SOCKSv5 proxy error code 0x%1 + 未知SOCKSv5代理,错误代码 0x%1 + + + Network operation timed out + 网络操作超时 + + + + QSoftKeyManager + + Ok + 确定 + + + Select + 选择 + + + Done + 完成 + + + Options + 选项 + + + Cancel + 取消 + + + Exit + 退出 + + + + QSpinBox + + More + 更多 + + + Less + 更少 + + + + QSql + + Delete + 删除 + + + Delete this record? + 删除这条记录? + + + Yes + + + + No + + + + Insert + 插入 + + + Update + 更新 + + + Save edits? + 保存编辑? + + + Cancel + 取消 + + + Confirm + 确认 + + + Cancel your edits? + 取消您的编辑? + + + + QSslSocket + + Unable to write data: %1 + 不能写入数据:%1 + + + Unable to decrypt data: %1 + 无法解密数据:%1 + + + Error while reading: %1 + 读取时错误:%1 + + + Error during SSL handshake: %1 + SSL握手错误:%1 + + + Error creating SSL context (%1) + 创建SSL上下文错误(%1) + + + Invalid or empty cipher list (%1) + 无效或者空白的密码列表(%1) + + + Private key does not certify public key, %1 + 私钥不能证明公钥,%1 + + + Error creating SSL session, %1 + 创建SSL会话错误,%1 + + + Error creating SSL session: %1 + 创建SSL会话错误:%1 + + + Cannot provide a certificate with no key, %1 + 不能提供没有键的证书,%1 + + + Error loading local certificate, %1 + 不能载入本地证书,%1 + + + Error loading private key, %1 + 不能载入私有键,%1 + + + No error + 无错误 + + + The issuer certificate could not be found + 找不到发行人证书 + + + The certificate signature could not be decrypted + 证书签名无法解密 + + + The public key in the certificate could not be read + 无法读取证书中的公钥 + + + The signature of the certificate is invalid + 证书签名无效 + + + The certificate is not yet valid + 证书不再失效 + + + The certificate has expired + 证书已过期 + + + The certificate's notBefore field contains an invalid time + 证书的notBefore字段包含无效时间 + + + The certificate's notAfter field contains an invalid time + 证书的notAfter字段包含无效时间 + + + The certificate is self-signed, and untrusted + 证书为自签名,因而不受信任 + + + The root certificate of the certificate chain is self-signed, and untrusted + 证书链的根证书为自签名,因而不受信任 + + + The issuer certificate of a locally looked up certificate could not be found + 无法找到在本地查找的证书的发行人证书 + + + No certificates could be verified + 无证书可验证 + + + One of the CA certificates is invalid + CA证书之一无效 + + + The basicConstraints path length parameter has been exceeded + 已超过basicConstraints路径长度参数 + + + The supplied certificate is unsuitable for this purpose + 提供的证书不适合此用途 + + + The root CA certificate is not trusted for this purpose + 此用途不信任根CA证书 + + + The root CA certificate is marked to reject the specified purpose + 已将根CA证书标记为拒绝用于指定用途 + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + 当前候选发行人证书被拒绝,因其持有人姓名与当前证书的发行人姓名不匹配 + + + 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 + 当前候选发行人证书被拒绝,因其发行人姓名和序列号虽存在,但与当前证书的权威密钥标识符不匹配 + + + The peer did not present any certificate + 对方没有提供任何证书 + + + The host name did not match any of the valid hosts for this certificate + 主机名与此证书的任何有效主机都不匹配 + + + Unknown error + 未知错误 + + + + QStateMachine + + Missing initial state in compound state '%1' + 复合状态“%1”缺少初始状态 + + + Missing default state in history state '%1' + 历史状态“%1”缺少预设状态 + + + No common ancestor for targets and source of transition from state '%1' + 从状态"%1"过渡,但源和目标无共同父辈 + + + Unknown error + 未知错误 + + + + QSystemSemaphore + + %1: does not exist + %1:不存在 + + + %1: out of resources + %1:资源耗尽了 + + + %1: permission denied + %1:权限被拒绝 + + + %1: already exists + %1:已经存在 + + + %1: unknown error %2 + %1:未知错误 %2 + + + + QTDSDriver + + Unable to open connection + 不能打开连接 + + + Unable to use database + 不能使用数据库 + + + + QTabBar + + Scroll Left + 向左滚动 + + + Scroll Right + 向右滚动 + + + + QTcpServer + + Operation on socket is not supported + socket操作不被支持 + + + + QTextControl + + &Undo + 撤消(&U) + + + &Redo + 恢复(&R) + + + Cu&t + 剪切(&T) + + + &Copy + 复制(&C) + + + Copy &Link Location + 复制链接位置(&L) + + + &Paste + 粘贴(&P) + + + Delete + 删除 + + + Select All + 选择全部 + + + + QToolButton + + Press + 按下 + + + Open + 打开 + + + + QUdpSocket + + This platform does not support IPv6 + 这个平台不支持IPv6 + + + + QUndoGroup + + Undo + 撤销 + + + Redo + 恢复 + + + + QUndoModel + + <empty> + <空白> + + + + QUndoStack + + Undo + 撤销 + + + Redo + 恢复 + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM 从左到右标记 + + + RLM Right-to-left mark + RLM 从右向左标记 + + + ZWJ Zero width joiner + ZWJ 零宽度连接器 + + + ZWNJ Zero width non-joiner + ZWNJ 零宽度非连接器 + + + ZWSP Zero width space + ZWSP 零宽度空格 + + + LRE Start of left-to-right embedding + LRE 开始从左到右嵌入 + + + RLE Start of right-to-left embedding + RLE 开始从右向左嵌入 + + + LRO Start of left-to-right override + LRO 开始从左向右覆盖 + + + RLO Start of right-to-left override + RLO 开始从右向左覆盖 + + + PDF Pop directional formatting + PDF 弹出方向格式 + + + Insert Unicode control character + 插入Unicode控制字符 + + + + QWebFrame + + Request cancelled + 请求被取消了 + + + Request blocked + 请求被阻塞了 + + + Cannot show URL + 无法显示 URL + + + Frame load interrupted by policy change + 策略变化导致帧加载中断 + + + Cannot show mimetype + 无法显示 MIMETYPE + + + File does not exist + 文件不存在 + + + + QWebPage + + Submit + default label for Submit buttons in forms on web pages + + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + + + + Reset + default label for Reset buttons in forms on web pages + 重置 + + + Choose File + title for file button used in HTML forms + 选择文件 + + + No file selected + text to display in file button used in HTML forms when no file is selected + 没有文件被选择 + + + Open in New Window + Open in New Window context menu item + 在新窗口中打开 + + + Save Link... + Download Linked File context menu item + 保存链接... + + + Copy Link + Copy Link context menu item + 复制链接 + + + Open Image + Open Image in New Window context menu item + 打开图片 + + + Save Image + Download Image context menu item + 保存图片 + + + Copy Image + Copy Link context menu item + 复制图片 + + + Open Frame + Open Frame in New Window context menu item + 打开框架 + + + Copy + Copy context menu item + 复制 + + + Go Back + Back context menu item + 后退 + + + Go Forward + Forward context menu item + 前进 + + + Stop + Stop context menu item + + + + Reload + Reload context menu item + 重新载入 + + + Cut + Cut context menu item + 剪切 + + + Paste + Paste context menu item + 粘贴 + + + No Guesses Found + No Guesses Found context menu item + 没有找到猜测 + + + Ignore + Ignore Spelling context menu item + 忽略 + + + Add To Dictionary + Learn Spelling context menu item + 添加到字典 + + + Search The Web + Search The Web context menu item + 搜索网页 + + + Look Up In Dictionary + Look Up in Dictionary context menu item + 在字典中查找 + + + Open Link + Open Link context menu item + 打开链接 + + + Ignore + Ignore Grammar context menu item + 忽略 + + + Spelling + Spelling and Grammar context sub-menu item + + + + Show Spelling and Grammar + menu item title + + + + Hide Spelling and Grammar + menu item title + 隐藏拼写和语法 + + + Check Spelling + Check spelling context menu item + 检查拼写 + + + Check Spelling While Typing + Check spelling while typing context menu item + 在输入时检查拼写 + + + Check Grammar With Spelling + Check grammar with spelling context menu item + 检查语法和拼写 + + + Fonts + Font context sub-menu item + 字体 + + + Bold + Bold context menu item + 粗体 + + + Italic + Italic context menu item + 意大利体 + + + Underline + Underline context menu item + + + + Outline + Outline context menu item + 轮廓 + + + Direction + Writing direction context sub-menu item + 方向 + + + Text Direction + Text direction context sub-menu item + + + + Default + Default writing direction context menu item + 默认 + + + Left to Right + Left to Right context menu item + 左到右 + + + Right to Left + Right to Left context menu item + 右到左 + + + Loading... + Media controller status message when the media is loading + 正在加载... + + + Live Broadcast + Media controller status message when watching a live broadcast + 手机广播 + + + Audio Element + Media controller element + 音频元素 + + + Video Element + Media controller element + 视频元素 + + + Mute Button + Media controller element + 静音按钮 + + + Unmute Button + Media controller element + 取消静音按钮 + + + Play Button + Media controller element + 播放按钮 + + + Pause Button + Media controller element + 暂停按钮 + + + Slider + Media controller element + 滑块 + + + Slider Thumb + Media controller element + 滑块微缩图像 + + + Rewind Button + Media controller element + 倒带按钮 + + + Return to Real-time Button + Media controller element + 返回到实时按钮 + + + Elapsed Time + Media controller element + 耗时 + + + Remaining Time + Media controller element + 剩余时间 + + + Status Display + Media controller element + 状态显示 + + + Fullscreen Button + Media controller element + 全屏按钮 + + + Seek Forward Button + Media controller element + 向前寻找按钮 + + + Seek Back Button + Media controller element + 向后寻找按钮 + + + Audio element playback controls and status display + Media controller element + 音频元素播放控件和状态显示 + + + Video element playback controls and status display + Media controller element + 视频元素播放控件和状态显示 + + + Mute audio tracks + Media controller element + 静音音轨 + + + Unmute audio tracks + Media controller element + 取消静音音轨 + + + Begin playback + Media controller element + 开始播放 + + + Pause playback + Media controller element + 暂停播放 + + + Movie time scrubber + Media controller element + 影片时间刷新器 + + + Movie time scrubber thumb + Media controller element + 影片时间刷新器微缩图像 + + + Rewind movie + Media controller element + 影片倒带 + + + Return streaming movie to real-time + Media controller element + 将流式影片返回到实时 + + + Current movie time + Media controller element + 当前影片时间 + + + Remaining movie time + Media controller element + 影片剩余时间 + + + Current movie status + Media controller element + 当前影片状态 + + + Play movie in full-screen mode + Media controller element + 以全屏模式播放影片 + + + Seek quickly back + Media controller element + 快速向后寻找 + + + Seek quickly forward + Media controller element + 快速向前寻找 + + + Indefinite time + Media time description + 不定时间 + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1天%2小时%3分%4秒 + + + %1 hours %2 minutes %3 seconds + Media time description + %1小时%2分%3秒 + + + %1 minutes %2 seconds + Media time description + %1分%2秒 + + + %1 seconds + Media time description + %1秒 + + + Inspect + Inspect Element context menu item + 检查 + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + 没有最近的搜索 + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + 最近的搜索 + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + 清除最近的搜索 + + + Unknown + Unknown filesize FTP directory listing item + + + + Web Inspector - %2 + + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 像素) + + + Bad HTTP request + 错误的 HTTP 请求 + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + + + + Scroll here + 滚动到这里 + + + Left edge + 左边缘 + + + Top + + + + Right edge + 右边缘 + + + Bottom + 底部 + + + Page left + 左一页 + + + Page up + 上一页 + + + Page right + 右一页 + + + Page down + 下一页 + + + Scroll left + 向左滚动 + + + Scroll up + 向上滚动 + + + Scroll right + 向右滚动 + + + Scroll down + 向下滚动 + + + %n file(s) + number of chosen file + + %n 个文件 + + + + JavaScript Alert - %1 + JavaScript警告 - %1 + + + JavaScript Confirm - %1 + JavaScript确认 - %1 + + + JavaScript Prompt - %1 + JavaScript提示 - %1 + + + JavaScript Problem - %1 + JavaScript问题 - %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + 此页上的脚本似乎有问题。是否停止脚本? + + + Move the cursor to the next character + 移动光标到下一个字符 + + + Move the cursor to the previous character + 移动光标到上一个字符 + + + Move the cursor to the next word + 移动光标到下一个单词 + + + Move the cursor to the previous word + 移动光标到上一个单词 + + + Move the cursor to the next line + 移动光标到下一行 + + + Move the cursor to the previous line + 移动光标到上一行 + + + Move the cursor to the start of the line + 移动光标到行首 + + + Move the cursor to the end of the line + 移动光标到行尾 + + + Move the cursor to the start of the block + 移动光标到块首 + + + Move the cursor to the end of the block + 移动光标到块尾 + + + Move the cursor to the start of the document + 移动光标到文件开头 + + + Move the cursor to the end of the document + 移动光标到文件末尾 + + + Select all + 全选 + + + Select to the next character + + + + Select to the previous character + + + + Select to the next word + + + + Select to the previous word + + + + Select to the next line + + + + Select to the previous line + + + + Select to the start of the line + + + + Select to the end of the line + + + + Select to the start of the block + + + + Select to the end of the block + + + + Select to the start of the document + + + + Select to the end of the document + + + + Delete to the start of the word + 删除到单词首 + + + Delete to the end of the word + 删除到单词尾 + + + Insert a new paragraph + 插入新段落 + + + Insert a new line + 插入新行 + + + Paste and Match Style + 粘贴和匹配样式 + + + Remove formatting + 删除格式设置 + + + Strikethrough + 删除线 + + + Subscript + 下标 + + + Superscript + 上标 + + + Insert Bulleted List + 插入项目符号列表 + + + Insert Numbered List + 插入编号列表 + + + Indent + 缩进 + + + Outdent + 凸出 + + + Center + 中心 + + + Justify + 调整 + + + Align Left + 左对齐 + + + Align Right + 右对齐 + + + + QWhatsThisAction + + What's This? + + + + + QWidget + + * + + + + + QWizard + + Cancel + + + + Help + + + + < &Back + + + + &Finish + + + + &Help + + + + Go Back + + + + Continue + + + + Commit + + + + Done + + + + &Next + + + + &Next > + + + + + QWorkspace + + &Restore + + + + &Move + + + + &Size + + + + Mi&nimize + + + + Ma&ximize + + + + &Close + + + + Stay on &Top + + + + Minimize + + + + Restore Down + + + + Close + + + + Sh&ade + + + + %1 - [%2] + + + + &Unshade + + + + + QXml + + no error occurred + + + + error triggered by consumer + + + + unexpected end of file + + + + more than one document type definition + + + + error occurred while parsing element + + + + tag mismatch + + + + error occurred while parsing content + + + + unexpected character + + + + invalid name for processing instruction + + + + version expected while reading the XML declaration + + + + wrong value for standalone declaration + + + + error occurred while parsing document type definition + + + + letter is expected + + + + error occurred while parsing comment + + + + error occurred while parsing reference + + + + internal general entity reference not allowed in DTD + + + + external parsed general entity reference not allowed in attribute value + + + + external parsed general entity reference not allowed in DTD + + + + unparsed entity reference in wrong context + + + + recursive entities + + + + error in the text declaration of an external entity + + + + encoding declaration or standalone declaration expected while reading the XML declaration + + + + standalone declaration expected while reading the XML declaration + + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + %1中出现警告,位于%2行,%3列:%4 + + + Warning in %1: %2 + %1中出现警告:%2 + + + Unknown location + 未知位置 + + + Error %1 in %2, at line %3, column %4: %5 + %2中存在错误%1,位于%3行,%4列:%5 + + + Error %1 in %2: %3 + %2中存在错误%1:%3 + + + + QXmlStream + + Extra content at end of document. + + + + Invalid entity value. + + + + Invalid XML character. + + + + Sequence ']]>' not allowed in content. + + + + Namespace prefix '%1' not declared + + + + Attribute redefined. + + + + Unexpected character '%1' in public id literal. + + + + Invalid XML version string. + + + + Unsupported XML version. + + + + %1 is an invalid encoding name. + + + + Encoding %1 is unsupported + + + + Standalone accepts only yes or no. + + + + Invalid attribute in XML declaration. + + + + Premature end of document. + + + + Invalid document. + + + + Expected + + + + , but got ' + + + + Unexpected ' + + + + Expected character data. + + + + Recursive entity detected. + + + + Start tag expected. + + + + XML declaration not at start of document. + + + + NDATA in parameter entity declaration. + + + + %1 is an invalid processing instruction name. + + + + Invalid processing instruction name. + + + + Illegal namespace declaration. + + + + Invalid XML name. + + + + Opening and ending tag mismatch. + + + + Reference to unparsed entity '%1'. + + + + Entity '%1' not declared. + + + + Reference to external entity '%1' in attribute value. + + + + Invalid character reference. + + + + Encountered incorrectly encoded content. + + + + The standalone pseudo attribute must appear after the encoding. + + + + %1 is an invalid PUBLIC identifier. + + + + + QtXmlPatterns + + At least one component must be present. + 至少有一个组件被呈现。 + + + %1 is not a valid value of type %2. + %1 不是类型为 %2 的有效值。 + + + When casting to %1 from %2, the source value cannot be %3. + 当从 %2 抛出到 %1 时,源值不能是 %3。 + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + 有效的布尔值(Effective Boolean Value)不能被用于计算一个包含两个或者更多原子值的序列。 + + + The data of a processing instruction cannot contain the string %1 + 处理指令的数据不能包含字符串 %1 + + + %1 is an invalid %2 + %1 是一个无效的 %2。 + + + %1 is not a valid XML 1.0 character. + %1 不是一个有效的 XML 1.0 字符。 + + + %1 was called. + %1 被调用了。 + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + 在这个替换字符串中,%1 在没有被转义的时候必须被至少一个数字跟随。 + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + 在这个替换字符串中,%1 只能被用于转义它本身或者 %2,而不是 %3 + + + %1 matches newline characters + %1 匹配了换行符 + + + Matches are case insensitive + 匹配是大小写不敏感的 + + + %1 is an invalid regular expression pattern: %2 + %1 是正则表达式中的一个无效模式:%2 + + + It will not be possible to retrieve %1. + 将不能获取 %1。 + + + The default collection is undefined + 默认收集(collection)是未定义的 + + + %1 cannot be retrieved + 无法获取 %1 + + + The item %1 did not match the required type %2. + 项 %1 和所需的类型 %2 不匹配。 + + + %1 is an unknown schema type. + %1 是一个未知的方案类型。 + + + A template with name %1 has already been declared. + + + + Only one %1 declaration can occur in the query prolog. + 只有一个 %1 的声明可以出现在查询序言中。 + + + The initialization of variable %1 depends on itself + 变量 %1 的初始化依赖于它本身 + + + The variable %1 is unused + 变量 %1 没有被使用 + + + Version %1 is not supported. The supported XQuery version is 1.0. + 不支持版本 %1。被支持的 XQuery 版本是 1.0。 + + + No function with signature %1 is available + 没有签名为 %1 的可用函数。 + + + It is not possible to redeclare prefix %1. + 不能重复声明前缀 %1。 + + + Prefix %1 is already declared in the prolog. + 前缀 %1 在序言中已经声明过了。 + + + The name of an option must have a prefix. There is no default namespace for options. + 一个选项的名称必须带有前缀。对于选项没有默认命名空间。 + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + 不支持方案导入(Schema Import)特性,并且因此 %1 声明不能出现。 + + + The target namespace of a %1 cannot be empty. + %1 的目标命名空间不能为空。 + + + The module import feature is not supported + 不支持模块导入特性 + + + 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 + 用户在一个库模块中定义的函数的命名空间必须和这个模块的命名空间一致。也就是说,它应该是 %1,而不是 %2 + + + A function already exists with the signature %1. + 一个带有签名 %1 的函数已经存在。 + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + 不支持外部函数。所有支持的函数必须可以被直接使用,不能把它们声明为外部的 + + + The %1-axis is unsupported in XQuery + 这个 %1 轴在 XQuery 中是不被支持的。 + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + 当这个命名空间 URI 被绑定到一个前缀 %1 时,它不能是空字符串。 + + + %1 is an invalid namespace URI. + %1 是一个无效的命名空间 URI。 + + + It is not possible to bind to the prefix %1 + 无法绑定到这个前缀 %1。 + + + Two namespace declaration attributes have the same name: %1. + 两个命名空间声明属性使用了相同的名称:%1。 + + + The namespace URI must be a constant and cannot use enclosed expressions. + 命名空间 URI 必须是一个常量并且不能使用封闭的表达式。 + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 不是范围内属性声明。注意方案导入特性是不被支持的。 + + + empty + 空白 + + + zero or one + 零或者一 + + + exactly one + 确切地一 + + + one or more + 一或者更多 + + + zero or more + 零或者更多 + + + The focus is undefined. + 焦点未定义。 + + + An attribute by name %1 has already been created. + 一个名称为 %1 的属性已经被创建。 + + + Network timeout. + 网络超时。 + + + Element %1 can't be serialized because it appears outside the document element. + 元素 %1 不能被串行化,因为它出现在文档元素之外。 + + + Year %1 is invalid because it begins with %2. + %1 年是无效的,因为应该从 %2 开始。 + + + Day %1 is outside the range %2..%3. + %1 日是在 %2...%3 范围之外的。 + + + Month %1 is outside the range %2..%3. + %1 月是在 %2...%3 范围之外的。 + + + Overflow: Can't represent date %1. + 溢出:无法呈现数据 %1。 + + + Day %1 is invalid for month %2. + %1 日对于 %2 月是无效的。 + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + 时间 24:%1:%2.%3 是无效的。小时是 24,但是分钟、秒和毫秒不全为 0; + + + Time %1:%2:%3.%4 is invalid. + 时间 %1:%2:%3.%4 是无效的。 + + + Overflow: Date can't be represented. + 溢出:数据无法被呈现。 + + + At least one time component must appear after the %1-delimiter. + 至少一个时间组件必须出现在这个 %1 界限之后。 + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + 一个类型为 %1 的值除以 %2(不是一个数值)是不允许的。 + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + 一个类型为 %1 的值除以 %2 或者 %3(正负零)是不允许的。 + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + 一个类型为 %1 的值乘以 %2 或者 %3(正负无穷)是不允许的。 + + + A value of type %1 cannot have an Effective Boolean Value. + 一个类型为 %1 的值不能是一个有效的布尔值(Effective Boolean Value)。 + + + Value %1 of type %2 exceeds maximum (%3). + 类型为 %2 的值 %1 超过了最大值(%3)。 + + + Value %1 of type %2 is below minimum (%3). + 类型为 %2 的值 %1 超过了最小值(%3)。 + + + A value of type %1 must contain an even number of digits. The value %2 does not. + 类型为 %1 的值必须包含偶数个数字。值 %2 不是这样的。 + + + %1 is not valid as a value of type %2. + %1 不是类型为 %2 的有效值。 + + + Operator %1 cannot be used on type %2. + 操作符 %1 不能被用于类型 %2。 + + + Operator %1 cannot be used on atomic values of type %2 and %3. + 操作符 %1 不能被用于类型为 %2 和 %3 的原子值。 + + + The namespace URI in the name for a computed attribute cannot be %1. + 一个被计算的属性的名称中的命名空间 URI 不能是 %1。 + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + 一个被计算的属性的名称不能使用带有本地名称 %2 的命名空间 URI %1。 + + + Type error in cast, expected %1, received %2. + 抛出类型错误,期望的是 %1,收到的是 %2。 + + + 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. + 当抛出到 %1 或者它的派生类时,源类型必须是同一类型,或者它必须是一个字符串类型。类型 %2 是不被允许的。 + + + A comment cannot contain %1 + 注释不能包含 %1 + + + A comment cannot end with a %1. + 注释不能以 %1 结尾。 + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + 一个属性节点不能是一个文档节点的子节点。因此,这个属性 %1 所在位置是不合适的。 + + + A library module cannot be evaluated directly. It must be imported from a main module. + 一个库模块不能被直接评估。它必须从一个主模块中导入。 + + + No template by name %1 exists. + 没有名为 %1 的模板存在。 + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + 类型为 %1 的值不能被判断。一个判断必须是数值类型或者一个有效的布尔值(Effective Boolean Value)类型。 + + + A positional predicate must evaluate to a single numeric value. + 一个定位判断必须评估一个单一数值。 + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + 一个处理指令中的目标名称不能是任何大小写混合的 %1。因此,%2 是无效的。 + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 不是处理指令的有效目标名称。它必须是值 %2,例如 %3。 + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + 一个路径中的最后一步必须包含节点或者原子值。它不能是两者的一个组合。 + + + No namespace binding exists for the prefix %1 + 对于前缀 %1,没有存在绑定的命名空间。 + + + No namespace binding exists for the prefix %1 in %2 + 对于 %2 中的前缀 %1,没有存在绑定的命名空间。 + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + %1 的第一个参数不能是类型 %2 的。它必须是数字类型的,xs:yearMonthDuration 或者 xs:dayTimeDuration。 + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 的第一个参数不能是类型 %2 的。它必须是类型 %3、%4 或者 %5 的。 + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + %1 的第二个参数不能是类型 %2 的。它必须是类型 %3、%4 或者 %5 的。 + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + 如果两个值都有区偏移(zone offset),它们必须拥有相同的区偏移。%1 和 %2 的区偏移是不同的。 + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 必须被 %2 或者 %3 跟随,不能在替换字符串的末尾。 + + + %1 and %2 match the start and end of a line. + %1 和 %2 匹配了一行的头和尾。 + + + Whitespace characters are removed, except when they appear in character classes + 空白字符被移除了,除非当它们出现在字符类中 + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 是正则表达式中的一个无效标记。有效标记为: + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + 如果第一个参数是空序列或者零长度字符串(无命名空间),那么就不能指定前缀。前缀 %1 被指定了。 + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + 不支持正规化(normalization)表单 %1。被支持的表单是 %2、%3、%4 和 %5,以及无,例如空字符串(无正规化)。 + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + 区偏移(zone offset)必须在 %1...%2 范围之内。%3 是在范围之外的。 + + + Required cardinality is %1; got cardinality %2. + 所需要的表间关系是 %1;得到的表间关系却是 %2。 + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + 编码方式 %1 是无效的。它必须只包含拉丁字符,必须不包含空白符号,并且必须和正则表达式 %2 匹配。 + + + The keyword %1 cannot occur with any other mode name. + 任何其他模式名称不能出现关键字%1。 + + + No variable with name %1 exists + + + + The value of attribute %1 must be of type %2, which %3 isn't. + + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + + + + A variable with name %1 has already been declared. + + + + No value is available for the external variable with name %1. + + + + A stylesheet function must have a prefixed name. + 样式表函数必须有一个前缀名。 + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + 命名空间 %1 是保留的;因此用户定义的函数不能使用它。请试试预定义的前缀 %2,它就是用于这种情况的。 + + + An argument with name %1 has already been declared. Every argument name must be unique. + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + 当函数%1被用于样式匹配时,参数必须是变量参考或者字符串。 + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + 在XSL-T样式中,函数%1的第一个参数必须是字符串,以便用于匹配。 + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + 在XSL-T样式中,函数%1的第一个参数必须是文字或者变量参考,以便用于匹配。 + + + In an XSL-T pattern, function %1 cannot have a third argument. + 在XSL-T样式中,函数%1不能有第三个参数。 + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + 在XSL-T样式中,只用函数%1和%2可以用于匹配,%3不可以。 + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + 在XSL-T仰视中,不能使用%1轴,只能使用%2轴或者%3轴。 + + + %1 is an invalid template mode name. + %1不是一个合法的模板模式名称。 + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + 一个在 for 表达式中绑定的变量的名称必须和这个定位变量不同。因此,这两个名称为 %1 的变量冲突。 + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + 不支持方案验证特性(Schema Validation Feature)。因此,也许不能使用 %1 表达式。 + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + 不支持任何编译指示表达式(pragma expression)。因此,必须呈现一个回调表达式(fallback expression)。 + + + Each name of a template parameter must be unique; %1 is duplicated. + 每一个模板参数的名称都必须是唯一的;%2是重复的。 + + + No function with name %1 is available. + + + + %1 is not a valid numeric literal. + %1 不是一个有效的数字语义。 + + + W3C XML Schema identity constraint selector + + + + W3C XML Schema identity constraint field + + + + A construct was encountered which is disallowed in the current language(%1). + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + 命名空间 %1 只能和 %2 绑定(并且如果是这种情况,需要提前声明)。 + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + 前缀 %1 只能和 %2 绑定(并且如果是这种情况,需要提前声明)。 + + + An attribute with name %1 has already appeared on this element. + + + + A direct element constructor is not well-formed. %1 is ended with %2. + 一个直接元素构造器没有很好地形成。%1 后面跟着 %2。 + + + The name %1 does not refer to any schema type. + 名称 %1 没有指向任何方案类型。 + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 是一个复杂类型。无法抛出到复杂类型。因此,抛出到例如 %2 这样的原子类型是可以的。 + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 不是原子类型。只能抛出到原子类型。 + + + %1 is not a valid name for a processing-instruction. + %1不是一个处理指令的合法名称。 + + + The name of an extension expression must be in a namespace. + 一个扩展表达式的名称必须在一个命名空间中。 + + + Required type is %1, but %2 was found. + 需要的类型是 %1,但是找到的是 %2。 + + + Promoting %1 to %2 may cause loss of precision. + 把 %1 升级为 %2 会导致精度的损失。 + + + It's not possible to add attributes after any other kind of node. + 不能在任何其它类型节点后添加属性。 + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + 只支持 Unicode 代码点校验(Unicode Codepoint Collation)(%1)。%2 是不被支持的。 + + + Integer division (%1) by zero (%2) is undefined. + 整数除法(%1)除零(%2)是未定义的。 + + + Division (%1) by zero (%2) is undefined. + 除法(%1)除零(%2)是未定义的。 + + + Modulus division (%1) by zero (%2) is undefined. + 求模除法(%1)除零(%2)是未定义的。 + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 最多可以有 %n 个参数。因此 %2 是无效的。 + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 需要至少 %n 个参数。因此 %2 是无效的。 + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + 函数 %1 的第二个参数的根节点必须是一个文档节点。%2 不是一个文档节点。 + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + 用户定义函数的名字空间不能为空(试用为这种情况而存在的预定义前缀%1) + + + A default namespace declaration must occur before function, variable, and option declarations. + 默认命名空间声明必须出现在函数、变量和选项声明之前。 + + + Namespace declarations must occur before function, variable, and option declarations. + 命名空间声明必须出现在函数、变量和选项声明之前。 + + + Module imports must occur before function, variable, and option declarations. + 模块导入不能出现在函数、变量和选项声明之前。 + + + %1 is not a whole number of minutes. + %1 不是分钟的整数。 + + + Attribute %1 can't be serialized because it appears at the top level. + 属性 %1 不能被串行化,因为它出现在最顶层。 + + + %1 is an unsupported encoding. + %1 是不被支持的编码。 + + + %1 contains octets which are disallowed in the requested encoding %2. + %1包含了在请求编码%2中不允许的八进位值。 + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + 在使用编码%3的%2中出现的代码点%1不是一个有效的XML字符。 + + + Ambiguous rule match. + 含糊规则匹配。 + + + In a namespace constructor, the value for a namespace cannot be an empty string. + + + + The prefix must be a valid %1, which %2 is not. + 前缀必须是有效的%1,而%2不是。 + + + The prefix %1 cannot be bound. + 前缀%1不能被绑定。 + + + Only the prefix %1 can be bound to %2 and vice versa. + 只有前缀%1可以绑定到%2,反之也一样 + + + The parameter %1 is required, but no corresponding %2 is supplied. + 需要参数%1,但是没有提供对应的%2。 + + + The parameter %1 is passed, but no corresponding %2 exists. + 参数%1已传递,但没有相应的%2存在。 + + + The URI cannot have a fragment + URI不能有片段 + + + Element %1 is not allowed at this location. + 元素%1不能在这个位置。 + + + Text nodes are not allowed at this location. + 文本节点不能在这个位置。 + + + Parse error: %1 + 解析错误:%1 + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + XSL-T版本属性的值必须是%1类型的值,而%2不是。 + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + 在XSL-T 2.0处理器中运行一个1.0的样式表。 + + + Unknown XSL-T attribute %1. + 未知的XSL-T属性%1。 + + + Attribute %1 and %2 are mutually exclusive. + 属性%1和%2彼此互斥。 + + + In a simplified stylesheet module, attribute %1 must be present. + 在一个简化样式表模块中,属性%1必须存在。 + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + 如果元素%1没有属性%2,那么它也不能有属性%3或者%4。 + + + Element %1 must have at least one of the attributes %2 or %3. + 元素%1必须至少有属性%2或者%3其中一个。 + + + At least one mode must be specified in the %1-attribute on element %2. + 在元素%2的%1属性中至少要指定一个模式。 + + + Element %1 must come last. + 元素%1必须最后出现。 + + + At least one %1-element must occur before %2. + 至少一个元素%1要出现在%2之前。 + + + Only one %1-element can appear. + 只能出现一个元素%1。 + + + At least one %1-element must occur inside %2. + 至少一个元素%1要出现在%2之内。 + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + 当属性%1出现在%2中时,不能使用顺序构造。 + + + Element %1 must have either a %2-attribute or a sequence constructor. + 元素%1必须有在一个%2属性或者顺序构造。 + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + 当需要参数时,不能通过属性%1或者顺序构造提供默认值。 + + + Element %1 cannot have children. + 元素%1不能有子元素。 + + + Element %1 cannot have a sequence constructor. + 元素%1不能有顺序构造。 + + + The attribute %1 cannot appear on %2, when it is a child of %3. + 属性%1不能出现在%2中,因为它是%3的子元素。 + + + A parameter in a function cannot be declared to be a tunnel. + 函数内的参数不能被声明为通道(tunnel)。 + + + This processor is not Schema-aware and therefore %1 cannot be used. + 这个处理器不能感知Schema,因此%1不能被使用。 + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + 顶级样式表元素必须是在非空命名空间中的,而%1不是。 + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + 元素%2中属性%1的值必须是%3或者%4,而不是%5。 + + + Attribute %1 cannot have the value %2. + 属性%1的值不能是%2。 + + + The attribute %1 can only appear on the first %2 element. + 属性%1只能出现在前%2个元素中。 + + + At least one %1 element must appear as child of %2. + %2必须至少又一个子元素%1。 + + + %1 has inheritance loop in its base type %2. + + + + Circular inheritance of base type %1. + + + + Circular inheritance of union %1. + + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + + + + Base type of simple type %1 cannot be complex type %2. + + + + Simple type %1 cannot have direct base type %2. + + + + Simple type %1 is not allowed to have base type %2. + + + + Simple type %1 can only have simple atomic type as base type. + + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + + + + Variety of item type of %1 must be either atomic or union. + + + + Variety of member types of %1 must be atomic. + + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + + + + Simple type %1 is only allowed to have %2 facet. + + + + Base type of simple type %1 must have variety of type list. + + + + Base type of simple type %1 has defined derivation by restriction as final. + + + + Item type of base type does not match item type of %1. + + + + Simple type %1 contains not allowed facet type %2. + + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + + + + %1 is not allowed to have any facets. + + + + Base type %1 of simple type %2 must have variety of union. + + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + + + + Complex type %1 has duplicated element %2 in its content model. + + + + Complex type %1 has non-deterministic content. + + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + + + + Content model of complex type %1 is not a valid extension of content model of %2. + + + + Complex type %1 must have simple content. + + + + Complex type %1 must have the same simple type as its base class %2. + + + + Complex type %1 cannot be derived from base type %2%3. + + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + + + + Complex type %1 with simple content cannot be derived from complex base type %2. + + + + Item type of simple type %1 cannot be a complex type. + + + + Member type of simple type %1 cannot be a complex type. + + + + %1 is not allowed to have a member type with the same name as itself. + + + + %1 facet collides with %2 facet. + + + + %1 facet must have the same value as %2 facet of base type. + + + + %1 facet must be equal or greater than %2 facet of base type. + + + + %1 facet must be less than or equal to %2 facet of base type. + + + + %1 facet contains invalid regular expression + + + + Unknown notation %1 used in %2 facet. + + + + %1 facet contains invalid value %2: %3. + + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + + %1 facet cannot be %2 if %3 facet of base type is %4. + + + + %1 facet must be less than or equal to %2 facet. + + + + %1 facet must be less than %2 facet of base type. + + + + %1 facet and %2 facet cannot appear together. + + + + %1 facet must be greater than %2 facet of base type. + + + + %1 facet must be less than %2 facet. + + + + %1 facet must be greater than or equal to %2 facet of base type. + + + + Simple type contains not allowed facet %1. + + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + + Only %1 and %2 facets are allowed when derived by union. + + + + %1 contains %2 facet with invalid data: %3. + + + + Attribute group %1 contains attribute %2 twice. + + + + Attribute group %1 contains two different attributes that both have types derived from %2. + + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Complex type %1 contains attribute %2 twice. + + + + Complex type %1 contains two different attributes that both have types derived from %2. + + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Element %1 is not allowed to have a value constraint if its base type is complex. + + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + + + + Value constraint of element %1 is not of elements type: %2. + + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + + + + Type of element %1 cannot be derived from type of substitution group affiliation. + + + + Value constraint of attribute %1 is not of attributes type: %2. + + + + Attribute %1 has value constraint but has type derived from %2. + + + + %1 attribute in derived complex type must be %2 like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint. + + + + processContent of base wildcard must be weaker than derived wildcard. + + + + Element %1 exists twice with different types. + + + + Particle contains non-deterministic wildcards. + + + + Base attribute %1 is required but derived attribute is not. + + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + + + + Derived attribute %1 does not exist in the base definition. + + + + Derived attribute %1 does not match the wildcard in the base definition. + + + + Base attribute %1 is required but missing in derived definition. + + + + Derived definition contains an %1 element that does not exists in the base definition + + + + Derived wildcard is not a subset of the base wildcard. + + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + + + + Attribute %1 from base type is missing in derived type. + + + + Type of derived attribute %1 differs from type of base attribute. + + + + Base definition contains an %1 element that is missing in the derived definition + + + + %1 references unknown %2 or %3 element %4. + + + + %1 references identity constraint %2 that is no %3 or %4 element. + + + + %1 has a different number of fields from the identity constraint %2 that it references. + + + + Base type %1 of %2 element cannot be resolved. + + + + Item type %1 of %2 element cannot be resolved. + + + + Member type %1 of %2 element cannot be resolved. + + + + Type %1 of %2 element cannot be resolved. + + + + Base type %1 of complex type cannot be resolved. + + + + %1 cannot have complex base type that has a %2. + + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + + + + Type of %1 element must be a simple type, %2 is not. + + + + Substitution group %1 of %2 element cannot be resolved. + + + + Substitution group %1 has circular definition. + + + + Duplicated element names %1 in %2 element. + + + + Reference %1 of %2 element cannot be resolved. + + + + Circular group reference for %1. + + + + %1 element is not allowed in this scope + + + + %1 element cannot have %2 attribute with value other than %3. + + + + %1 element cannot have %2 attribute with value other than %3 or %4. + + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + + + + Attribute group %1 has circular reference. + + + + %1 attribute in %2 must have %3 use like in base type %4. + + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + + + + %1 has attribute wildcard but its base type %2 has not. + + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + + + + Namespace prefix of qualified name %1 is not defined. + + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + + Empty particle cannot be derived from non-empty particle. + + + + Derived particle is missing element %1. + + + + Derived element %1 is missing value constraint as defined in base particle. + + + + Derived element %1 has weaker value constraint than base particle. + + + + Fixed value constraint of element %1 differs from value constraint in base particle. + + + + Derived element %1 cannot be nillable as base element is not nillable. + + + + Block constraints of derived element %1 must not be more weaker than in the base element. + + + + Simple type of derived element %1 cannot be validly derived from base element. + + + + Complex type of derived element %1 cannot be validly derived from base element. + + + + Element %1 is missing in derived particle. + + + + Element %1 does not match namespace constraint of wildcard in base particle. + + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + + + + Derived particle allows content that is not allowed in the base particle. + + + + Can not process unknown element %1, expected elements are: %2. + + + + Element %1 is not allowed in this scope, possible elements are: %2. + + + + Child element is missing in that scope, possible child elements are: %1. + + + + Document is not a XML schema. + + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + + %1 attribute of %2 element contains invalid content: {%3}. + + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + + %1 element is not allowed inside %2 element if %3 attribute is present. + + + + %1 element has neither %2 attribute nor %3 child element. + + + + %1 element with %2 child element must not have a %3 attribute. + + + + %1 attribute of %2 element must be %3 or %4. + + + + %1 attribute of %2 element must have a value of %3. + + + + %1 attribute of %2 element must have a value of %3 or %4. + + + + %1 element must not have %2 and %3 attribute together. + + + + Content of %1 attribute of %2 element must not be from namespace %3. + + + + %1 attribute of %2 element must not be %3. + + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + + Specifying use='prohibited' inside an attribute group has no effect. + + + + %1 element must have either %2 or %3 attribute. + + + + %1 element must have either %2 attribute or %3 or %4 as child element. + + + + %1 element requires either %2 or %3 attribute. + + + + Text or entity references not allowed inside %1 element + + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + + %1 element is not allowed in this context. + + + + %1 attribute of %2 element has larger value than %3 attribute. + + + + Prefix of qualified name %1 is not defined. + + + + %1 attribute of %2 element must either contain %3 or the other values. + + + + Component with ID %1 has been defined previously. + + + + Element %1 already defined. + + + + Attribute %1 already defined. + + + + Type %1 already defined. + + + + Attribute group %1 already defined. + + + + Element group %1 already defined. + + + + Notation %1 already defined. + + + + Identity constraint %1 already defined. + + + + Duplicated facets in simple type %1. + + + + %1 is not valid according to %2. + + + + String content does not match the length facet. + + + + String content does not match the minLength facet. + + + + String content does not match the maxLength facet. + + + + String content does not match pattern facet. + + + + String content is not listed in the enumeration facet. + + + + Signed integer content does not match the maxInclusive facet. + + + + Signed integer content does not match the maxExclusive facet. + + + + Signed integer content does not match the minInclusive facet. + + + + Signed integer content does not match the minExclusive facet. + + + + Signed integer content is not listed in the enumeration facet. + + + + Signed integer content does not match pattern facet. + + + + Signed integer content does not match in the totalDigits facet. + + + + Unsigned integer content does not match the maxInclusive facet. + + + + Unsigned integer content does not match the maxExclusive facet. + + + + Unsigned integer content does not match the minInclusive facet. + + + + Unsigned integer content does not match the minExclusive facet. + + + + Unsigned integer content is not listed in the enumeration facet. + + + + Unsigned integer content does not match pattern facet. + + + + Unsigned integer content does not match in the totalDigits facet. + + + + Double content does not match the maxInclusive facet. + + + + Double content does not match the maxExclusive facet. + + + + Double content does not match the minInclusive facet. + + + + Double content does not match the minExclusive facet. + + + + Double content is not listed in the enumeration facet. + + + + Double content does not match pattern facet. + + + + Decimal content does not match in the fractionDigits facet. + + + + Decimal content does not match in the totalDigits facet. + + + + Date time content does not match the maxInclusive facet. + + + + Date time content does not match the maxExclusive facet. + + + + Date time content does not match the minInclusive facet. + + + + Date time content does not match the minExclusive facet. + + + + Date time content is not listed in the enumeration facet. + + + + Date time content does not match pattern facet. + + + + Duration content does not match the maxInclusive facet. + + + + Duration content does not match the maxExclusive facet. + + + + Duration content does not match the minInclusive facet. + + + + Duration content does not match the minExclusive facet. + + + + Duration content is not listed in the enumeration facet. + + + + Duration content does not match pattern facet. + + + + Boolean content does not match pattern facet. + + + + Binary content does not match the length facet. + + + + Binary content does not match the minLength facet. + + + + Binary content does not match the maxLength facet. + + + + Binary content is not listed in the enumeration facet. + + + + Invalid QName content: %1. + + + + QName content is not listed in the enumeration facet. + + + + QName content does not match pattern facet. + + + + Notation content is not listed in the enumeration facet. + + + + List content does not match length facet. + + + + List content does not match minLength facet. + + + + List content does not match maxLength facet. + + + + List content is not listed in the enumeration facet. + + + + List content does not match pattern facet. + + + + Union content is not listed in the enumeration facet. + + + + Union content does not match pattern facet. + + + + Data of type %1 are not allowed to be empty. + + + + Element %1 is missing child element. + + + + There is one IDREF value with no corresponding ID: %1. + + + + Loaded schema file is invalid. + + + + %1 contains invalid data. + + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + + + + No schema defined for validation. + + + + No definition for element %1 available. + + + + Specified type %1 is not known to the schema. + + + + Element %1 is not defined in this scope. + + + + Declaration for element %1 does not exist. + + + + Element %1 contains invalid content. + + + + Element %1 is declared as abstract. + + + + Element %1 is not nillable. + + + + Attribute %1 contains invalid data: %2 + + + + Element contains content although it is nillable. + + + + Fixed value constraint not allowed if element is nillable. + + + + Element %1 cannot contain other elements, as it has a fixed content. + + + + Specified type %1 is not validly substitutable with element type %2. + + + + Complex type %1 is not allowed to be abstract. + + + + Element %1 contains not allowed attributes. + + + + Element %1 contains not allowed child element. + + + + Content of element %1 does not match its type definition: %2. + + + + Content of element %1 does not match defined value constraint. + + + + Element %1 contains not allowed child content. + + + + Element %1 contains not allowed text content. + + + + Element %1 is missing required attribute %2. + + + + Attribute %1 does not match the attribute wildcard. + + + + Declaration for attribute %1 does not exist. + + + + Element %1 contains two attributes of type %2. + + + + Attribute %1 contains invalid content. + + + + Element %1 contains unknown attribute %2. + + + + Content of attribute %1 does not match its type definition: %2. + + + + Content of attribute %1 does not match defined value constraint. + + + + Non-unique value found for constraint %1. + + + + Key constraint %1 contains absent fields. + + + + Key constraint %1 contains references nillable element %2. + + + + No referenced value found for key reference %1. + + + + More than one value found for field %1. + + + + Field %1 has no simple type. + + + + ID value '%1' is not unique. + + + + '%1' attribute contains invalid QName content: %2. + + + + diff --git a/config.profiles/symbian/translations/qt_zh_tw_symbian.ts b/config.profiles/symbian/translations/qt_zh_tw_symbian.ts new file mode 100644 index 0000000..3b1fb51 --- /dev/null +++ b/config.profiles/symbian/translations/qt_zh_tw_symbian.ts @@ -0,0 +1,8505 @@ + + + + + + CloseButton + + Close Tab + + + + + FakeReply + + Fake error ! + 假錯誤! + + + Invalid URL + URL無效 + + + + Phonon:: + + Notifications + + + + Music + + + + Video + + + + Communication + + + + Games + + + + Accessibility + + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>音訊播放裝置<b>%1</b>無法運作。<br/>正在切換回<b>%2</b>。</html> + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>正在切換到音訊播放裝置<b>%1</b>,<br/>該裝置剛變成可使用,而且優先順序較高。</html> + + + Revert back to device '%1' + 切換回裝置"%1" + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + + + + Could not open media source. + + + + Invalid source type. + + + + Could not locate media source. + + + + Could not open audio device. The device is already in use. + + + + Could not decode media source. + + + + + Phonon::MMF + + Audio Output + 音訊輸出 + + + The audio output device + 音訊輸出裝置 + + + No error + 沒有錯誤 + + + Not found + 找不到 + + + Out of memory + 記憶體不足 + + + Not supported + 不支援 + + + Overflow + 溢位 + + + Underflow + 降位 + + + Already exists + 已經存在 + + + Path not found + 找不到路徑 + + + In use + 使用中 + + + Not ready + 未就緒 + + + Access denied + 拒絕存取 + + + Could not connect + 無法連線 + + + Disconnected + 已中斷連線 + + + Permission denied + 權限不足 + + + Insufficient bandwidth + 頻寬不足 + + + Network unavailable + 網路無法使用 + + + Network communication error + 網路通訊錯誤 + + + Streaming not supported + 不支援串流 + + + Server alert + 伺服器警告 + + + Invalid protocol + 通訊協定無效 + + + Invalid URL + URL無效 + + + Multicast error + 多點傳送錯誤 + + + Proxy server error + Proxy伺服器錯誤 + + + Proxy server not supported + 不支援的Proxy伺服器 + + + Audio output error + 音訊輸出錯誤 + + + Video output error + 視訊輸出錯誤 + + + Decoder error + 解碼器錯誤 + + + Audio or video components could not be played + 音訊或視訊元件無法播放 + + + DRM error + DRM錯誤 + + + Unknown error (%1) + 不明錯誤(%1) + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + 尚未準備好播放 + + + Error opening file + 開啟檔案時發生錯誤 + + + Error opening URL + 開啟URL時發生錯誤 + + + Setting volume failed + 音量設定失敗 + + + Playback complete + 播放完成 + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + %1 Hz + + + + Phonon::MMF::AudioPlayer + + Getting position failed + 取得位置失敗 + + + Opening clip failed + 開啟檔案失敗 + + + + Phonon::MMF::EffectFactory + + Enabled + 已啟用 + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + 衰減HF比率(%) + + + Decay time (ms) + 衰減時間(ms) + + + Density (%) + 密度(%) + + + Diffusion (%) + 擴散(%) + + + Reflections delay (ms) + 反射延遲(ms) + + + Reflections level (mB) + 反射電平(mB) + + + Reverb delay (ms) + 殘響延遲(ms) + + + Reverb level (mB) + 殘響電平(mB) + + + Room HF level + 空間HF電平 + + + Room level (mB) + 空間電平(mB) + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + 開啟來源時發生錯誤:不支援的類型 + + + Error opening source: media type could not be determined + 開啟來源時發生錯誤:無法判斷媒體類型 + + + + Phonon::MMF::StereoWidening + + Level (%) + 電平(%) + + + + Phonon::MMF::VideoPlayer + + Pause failed + 暫停失敗 + + + Seek failed + 搜尋失敗 + + + Getting position failed + 取得位置失敗 + + + Opening clip failed + 開啟檔案失敗 + + + Buffering clip failed + 檔案緩衝處理失敗 + + + Video display error + 視訊顯示錯誤 + + + + Phonon::VolumeSlider + + Volume: %1% + + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + + + + Muted + 已靜音 + + + + Q3Accel + + %1, %2 not defined + + + + Ambiguous %1 not handled + + + + + Q3DataTable + + True + + + + False + + + + Insert + + + + Update + + + + Delete + + + + + Q3FileDialog + + Copy or Move a File + + + + Read: %1 + + + + Write: %1 + + + + Cancel + + + + All Files (*) + + + + Name + + + + Size + + + + Type + + + + Date + + + + Attributes + + + + &OK + + + + Look &in: + + + + File &name: + + + + File &type: + + + + Back + + + + One directory up + + + + Create New Folder + + + + List View + + + + Detail View + + + + Preview File Info + + + + Preview File Contents + + + + Read-write + + + + Read-only + + + + Write-only + + + + Inaccessible + + + + Symlink to File + + + + Symlink to Directory + + + + Symlink to Special + + + + File + + + + Dir + + + + Special + + + + Open + + + + Save As + + + + &Open + + + + &Save + + + + &Rename + + + + &Delete + + + + R&eload + + + + Sort by &Name + + + + Sort by &Size + + + + Sort by &Date + + + + &Unsorted + + + + Sort + + + + Show &hidden files + + + + the file + + + + the directory + + + + the symlink + + + + Delete %1 + + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + + + + &Yes + + + + &No + + + + New Folder 1 + + + + New Folder + 新資料夾 + + + New Folder %1 + 新資料夾 %1 + + + Find Directory + + + + Directories + + + + Directory: + + + + Error + + + + %1 +File not found. +Check path and filename. + + + + All Files (*.*) + + + + Open + + + + Select a Directory + + + + + Q3LocalFs + + Could not read directory +%1 + + + + Could not create directory +%1 + + + + Could not remove file or directory +%1 + + + + Could not rename +%1 +to +%2 + + + + Could not open +%1 + + + + Could not write +%1 + + + + + Q3MainWindow + + Line up + + + + Customize... + + + + + Q3NetworkProtocol + + Operation stopped by the user + + + + + Q3ProgressDialog + + Cancel + + + + + Q3TabDialog + + OK + + + + Apply + + + + Help + + + + Defaults + + + + Cancel + + + + + Q3TextEdit + + &Undo + + + + &Redo + + + + Cu&t + + + + &Copy + + + + &Paste + + + + Clear + + + + Select All + + + + + Q3TitleBar + + System + + + + Restore up + + + + Minimize + + + + Restore down + + + + Maximize + + + + Close + + + + Contains commands to manipulate the window + + + + Puts a minimized window back to normal + + + + Moves the window out of the way + + + + Puts a maximized window back to normal + + + + Makes the window full screen + + + + Closes the window + + + + Displays the name of the window and contains controls to manipulate it + + + + + Q3ToolBar + + More... + + + + + Q3UrlOperator + + The protocol `%1' is not supported + + + + The protocol `%1' does not support listing directories + + + + The protocol `%1' does not support creating new directories + + + + The protocol `%1' does not support removing files or directories + + + + The protocol `%1' does not support renaming files or directories + + + + The protocol `%1' does not support getting files + + + + The protocol `%1' does not support putting files + + + + The protocol `%1' does not support copying or moving files or directories + + + + (unknown) + + + + + Q3Wizard + + &Cancel + + + + < &Back + + + + &Next > + + + + &Finish + + + + &Help + + + + + QAbstractSocket + + Host not found + + + + Connection refused + + + + Connection timed out + + + + Operation on socket is not supported + + + + Socket operation timed out + + + + Socket is not connected + + + + Network unreachable + + + + + QAbstractSpinBox + + &Step up + + + + Step &down + + + + &Select All + + + + + QAccessibleButton + + Press + + + + + QApplication + + QT_LAYOUT_DIRECTION + 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. + + + + Executable '%1' requires Qt %2, found Qt %3. + + + + Incompatible Qt Library Error + + + + Activate + + + + Activates the program's main window + + + + + QAxSelect + + Select ActiveX Control + + + + OK + + + + &Cancel + + + + COM &Object: + + + + + QCheckBox + + Uncheck + + + + Check + + + + Toggle + + + + + QColorDialog + + Hu&e: + + + + &Sat: + + + + &Val: + + + + &Red: + + + + &Green: + + + + Bl&ue: + + + + A&lpha channel: + + + + Select Color + + + + &Basic colors + + + + &Custom colors + + + + &Add to Custom Colors + + + + + QComboBox + + Open + + + + False + + + + True + + + + Close + + + + + QCoreApplication + + %1: key is empty + QSystemSemaphore + + + + %1: unable to make key + QSystemSemaphore + + + + %1: ftok failed + QSystemSemaphore + + + + %1: already exists + QSystemSemaphore + + + + %1: does not exist + QSystemSemaphore + %1:不存在 + + + %1: out of resources + QSystemSemaphore + + + + %1: unknown error %2 + QSystemSemaphore + + + + + QDB2Driver + + Unable to connect + + + + Unable to commit transaction + + + + Unable to rollback transaction + + + + Unable to set autocommit + + + + + QDB2Result + + Unable to execute statement + + + + Unable to prepare statement + + + + Unable to bind variable + + + + Unable to fetch record %1 + + + + Unable to fetch next + + + + Unable to fetch first + + + + + QDateTimeEdit + + AM + + + + am + + + + PM + + + + pm + + + + + QDial + + QDial + + + + SpeedoMeter + + + + SliderHandle + + + + + QDialog + + What's This? + + + + Done + + + + + QDialogButtonBox + + OK + + + + Save + + + + &Save + + + + Open + + + + Cancel + + + + &Cancel + + + + Close + + + + &Close + + + + Apply + + + + Reset + + + + Help + + + + Don't Save + + + + Discard + + + + &Yes + + + + Yes to &All + + + + &No + + + + N&o to All + + + + Save All + + + + Abort + + + + Retry + + + + Ignore + + + + Restore Defaults + + + + Close without Saving + + + + &OK + + + + + QDirModel + + Name + + + + Size + + + + Kind + Match OS X Finder + + + + Type + All other platforms + + + + Date Modified + + + + + QDockWidget + + Close + + + + Dock + + + + Float + + + + + QDoubleSpinBox + + More + + + + Less + + + + + QErrorMessage + + &Show this message again + 再度顯示此訊息(&S) + + + &OK + + + + Debug Message: + + + + Warning: + 警告: + + + Fatal Error: + + + + + QFile + + Destination file exists + 目標檔已存在 + + + Will not rename sequential file using block copy + 使用區塊複製將不會重新命名循序檔 + + + Cannot remove source file + 無法移除來源檔 + + + Cannot open %1 for input + 無法開啟 %1 以輸入 + + + Cannot open for output + 無法開啟 %1 以輸出 + + + Failure to write block + 寫入區塊時失敗 + + + Cannot create %1 for output + 無法建立 %1 以輸出 + + + + QFileDialog + + All Files (*) + 所有檔案 (*) + + + Back + 返回 + + + List View + 列表檢視 + + + Detail View + 詳細檢視 + + + File + 檔案 + + + Open + 開啟 + + + Save As + 另存新檔 + + + &Open + 開啟(&O) + + + &Save + 儲存(&S) + + + Recent Places + 最近的地方 + + + &Rename + 重新命名(&R) + + + &Delete + 刪除(&D) + + + Show &hidden files + 顯示隱藏檔(&H) + + + New Folder + 新資料夾 + + + Find Directory + 尋找目錄 + + + Directories + 目錄 + + + All Files (*.*) + 所有檔案 (*.*) + + + Directory: + 目錄: + + + %1 already exists. +Do you want to replace it? + %1 已存在 +您要取代它嗎? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +找不到檔案。 +請檢查檔名是否正確。 + + + My Computer + 我的電腦 + + + Parent Directory + 父目錄 + + + Files of type: + 檔案型態: + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +找不到目錄。 +請檢查目錄名稱是否正確。 + + + '%1' is write protected. +Do you want to delete it anyway? + %1 有寫入保護。 +您確定要刪除它嗎? + + + Are sure you want to delete '%1'? + 您確定要刪除 %1 嗎? + + + Could not delete directory. + 無法刪除目錄。 + + + Drive + 磁碟 + + + File Folder + Match Windows Explorer + 檔案資料夾 + + + Folder + All other platforms + 資料夾 + + + Alias + Mac OS X Finder + 別名 + + + Shortcut + All other platforms + 捷徑 + + + Unknown + 未知 + + + Show + 顯示 + + + Forward + 往前 + + + &New Folder + 新增資料夾(&N) + + + &Choose + 選擇(&C) + + + Remove + 移除 + + + File &name: + 檔名(&N): + + + Look in: + 尋找於: + + + Create New Folder + 建立新資料夾 + + + + QFileSystemModel + + %1 TB + %1 TB + + + %1 GB + %1 GB + + + %1 MB + %1 MB + + + %1 KB + %1 KB + + + %1 bytes + %1 位元組 + + + Invalid filename + 不合法的檔名 + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>無法使用名稱 "%1"。</b><p>請使用其它名稱,字元數少一點,或是不要有標點符號。 + + + Name + 名稱 + + + Size + 大小 + + + Kind + Match OS X Finder + 種類 + + + Type + All other platforms + 型態 + + + Date Modified + 變更日期 + + + My Computer + 我的電腦 + + + Computer + 電腦 + + + %1 byte(s) + %1位元組 + + + + QFontDatabase + + Normal + 正常 + + + Bold + 粗體 + + + Demi Bold + 半粗體 + + + Black + 黑體 + + + Demi + 半體 + + + Light + 輕體 + + + Italic + 斜體 + + + Oblique + 傾斜體 + + + Any + 任何 + + + Latin + 拉丁 + + + Greek + 希臘 + + + Cyrillic + 斯拉夫 + + + Armenian + 亞美尼亞 + + + Hebrew + 希伯來 + + + Arabic + 阿拉伯 + + + Syriac + 敘利亞 + + + Thaana + Thaana + + + Devanagari + Devanagari + + + Bengali + 孟加拉 + + + Gurmukhi + Gurmukhi + + + Gujarati + Gujarati + + + Oriya + Oriya + + + Tamil + 坦米爾 + + + Telugu + Telugu + + + Kannada + 坎達那 + + + Malayalam + 馬來語 + + + Sinhala + 錫蘭 + + + Thai + 泰語 + + + Lao + 寮國 + + + Tibetan + 西藏 + + + Myanmar + 緬甸 + + + Georgian + 喬治亞 + + + Khmer + 高棉 + + + Simplified Chinese + 簡體中文 + + + Traditional Chinese + 繁體中文 + + + Japanese + 日語 + + + Korean + 韓語 + + + Vietnamese + 越南 + + + Symbol + 符號 + + + Ogham + 歐甘 + + + Runic + 盧恩 + + + N'Ko + N'Ko + + + + QFontDialog + + &Font + 字型(&F) + + + Font st&yle + 字型樣式(&Y) + + + &Size + 大小(&S) + + + Effects + 效果 + + + Stri&keout + 刪除線(&K) + + + &Underline + 底線(&U) + + + Sample + 範例 + + + Select Font + 選擇字型 + + + Wr&iting System + 寫入系統(&I) + + + + QFtp + + Host %1 found + 找到主機 %1 + + + Host found + 找到主機 + + + Connected to host %1 + 已連接到主機 %1 + + + Connected to host + 已連線到主機 + + + Connection to %1 closed + 到 %1 的連線已關閉 + + + Connection closed + 連線已關閉 + + + Host %1 not found + 找不到主機 %1 + + + Connection refused to host %1 + 連線到主機 %1 被拒 + + + Connection timed out to host %1 + 連線到主機 %1 逾時 + + + Unknown error + 未知的錯誤 + + + Connecting to host failed: +%1 + 連線到主機失敗: +%1 + + + Login failed: +%1 + 登入失敗: +%1 + + + Listing directory failed: +%1 + 列出目錄時失敗: +%1 + + + Changing directory failed: +%1 + 變更目錄時失敗: +%1 + + + Downloading file failed: +%1 + 下載檔案時失敗: +%1 + + + Uploading file failed: +%1 + 上傳檔案時失敗: +%1 + + + Removing file failed: +%1 + 移除檔案時失敗: +%1 + + + Creating directory failed: +%1 + 建立目錄時失敗: +%1 + + + Removing directory failed: +%1 + 移除目錄時失敗: +%1 + + + Not connected + 未連線 + + + Connection refused for data connection + 資料連線被拒 + + + + QHostInfo + + Unknown error + 未知的錯誤 + + + + QHostInfoAgent + + Host not found + 找不到主機 + + + Unknown address type + 未知的位址型態 + + + Unknown error + 未知的錯誤 + + + No host name given + 未提供主機名稱 + + + Invalid hostname + 主機名稱無效 + + + + QHttp + + Connection refused + 連線被拒 + + + Host %1 not found + 找不到主機 %1 + + + Wrong content length + 錯誤的內容長度 + + + HTTP request failed + HTTP 要求失敗 + + + Host %1 found + 找到主機 %1 + + + Host found + 找到主機 + + + Connected to host %1 + 已連接到主機 %1 + + + Connected to host + 已連線到主機 + + + Connection to %1 closed + 到 %1 的連線已關閉 + + + Connection closed + 連線已關閉 + + + Unknown error + 未知的錯誤 + + + Request aborted + 要求中止 + + + No server set to connect to + 沒有設定要連線到哪個伺服器 + + + Server closed connection unexpectedly + 伺服器無預警關閉連線 + + + Invalid HTTP response header + 不合法的 HTTP 回覆標頭 + + + Unknown authentication method + 不明的驗證方法 + + + Invalid HTTP chunked body + 不合法的 HTTP 區塊主體 + + + Error writing response to device + 寫入回應到裝置時發生錯誤 + + + Proxy authentication required + 代理伺服器需要認證 + + + Authentication required + 需要認證 + + + Proxy requires authentication + 代理伺服器需要認證 + + + Host requires authentication + 主機需要認證 + + + Data corrupted + 資料已損毀 + + + SSL handshake failed + SSL 溝通失敗 + + + Unknown protocol specified + 指定了未知的協定 + + + Connection refused (or timed out) + 連線被拒(或連線逾時) + + + HTTPS connection requested but SSL support not compiled in + HTTPS 連線需要的 SSL 支援並未編譯進來 + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + 未從代理伺服器接收到 HTTP 回應 + + + Error parsing authentication request from proxy + 剖析從代理伺服器傳來的認證要求時發生錯誤 + + + Authentication required + 需要認證 + + + Proxy denied connection + 代理伺服器拒絕連線 + + + Error communicating with HTTP proxy + 與 HTTP 代理伺服器聯繫時發生錯誤 + + + Proxy server not found + 找不到代理伺服器 + + + Proxy connection refused + 代理伺服器連線被拒 + + + Proxy server connection timed out + 代理伺服器連線逾時 + + + Proxy connection closed prematurely + 代理伺服器連線已不正常關閉 + + + + QIBaseDriver + + Error opening database + 開啟資料庫發生錯誤 + + + Could not start transaction + 無法開始事務 + + + Unable to commit transaction + 無法提交事務 + + + Unable to rollback transaction + 無法反轉事務 + + + + QIBaseResult + + Unable to create BLOB + 無法建立 BLOB + + + Unable to write BLOB + 無法寫入 BLOB + + + Unable to open BLOB + 無法開啟 BLOB + + + Unable to read BLOB + 無法讀取 BLOB + + + Could not find array + 找不到陣列 + + + Could not get array data + 無法取得陣列資料 + + + Could not get query info + 無法取得查詢資訊 + + + Could not start transaction + 無法開始事務 + + + Unable to commit transaction + 無法提交事務 + + + Could not allocate statement + 無法配置敘述 + + + Could not prepare statement + 無法準備敘述 + + + Could not describe input statement + 無法描述輸入敘述 + + + Could not describe statement + 無法描述敘述 + + + Unable to close statement + 無法關閉敘述 + + + Unable to execute query + 無法執行查詢 + + + Could not fetch next item + 無法抓取下一個項目 + + + Could not get statement info + 無法取得敘述資訊 + + + + QIODevice + + Permission denied + 權限不足 + + + Too many open files + 開啟過多檔案 + + + No such file or directory + 找不到該檔案或目錄 + + + No space left on device + 裝置上已無空間 + + + Unknown error + 未知的錯誤 + + + + QInputContext + + XIM + XIM + + + FEP + FEP + + + XIM input method + XIM 輸入法 + + + Windows input method + Windows 輸入法 + + + Mac OS X input method + Mac OS X 輸入法 + + + S60 FEP input method + S60 FEP輸入法 + + + + QInputDialog + + Enter a value: + 請輸入值: + + + + QLibrary + + Could not mmap '%1': %2 + 無法 mmap '%1':%2 + + + Plugin verification data mismatch in '%1' + 在 %1 中的外掛程式確認資料不符合 + + + Could not unmap '%1': %2 + 無法 unmap '%1':%2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + 外掛程式 %1 使用不相容的 Qt 函式庫(%2.%3.%4)【%5】 + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + 外掛程式 %1 使用不相容的 Qt 函式庫。預期建構鑰 %2,卻得到 %3 + + + Unknown error + 未知的錯誤 + + + The shared library was not found. + 找不到分享函式庫 + + + The file '%1' is not a valid Qt plugin. + 檔案 %1 不是合法的 Qt 外掛程式。 + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + 外掛程式 %1 使用不相容的 Qt 函式庫。(不能將除錯與釋出版的函式庫混在一起。) + + + Cannot load library %1: %2 + 無法載入函式庫 %1:%2 + + + Cannot unload library %1: %2 + 無法卸載函式庫 %1:%2 + + + Cannot resolve symbol "%1" in %2: %3 + 無法反解 %2 內的符號 %1:%3 + + + + QLineEdit + + Select All + 全部選擇 + + + &Undo + 復原(&U) + + + &Redo + 重做(&R) + + + Cu&t + 剪下(&T) + + + &Copy + 複製(&C) + + + &Paste + 貼上(&P) + + + Delete + 刪除 + + + + QLocalServer + + %1: Name error + %1:名稱錯誤 + + + %1: Permission denied + %1:存取被拒 + + + %1: Address in use + %1:位址使用中 + + + %1: Unknown error %2 + %1:未知的錯誤 %2 + + + + QLocalSocket + + %1: Connection refused + %1:連線被拒 + + + %1: Remote closed + %1:遠端已關閉 + + + %1: Invalid name + %1:不合法的名稱 + + + %1: Socket access error + %1:Socket 位址錯誤 + + + %1: Socket resource error + %1:Socket 資源錯誤 + + + %1: Socket operation timed out + %1:Socket 操作逾時 + + + %1: Datagram too large + %1:資料包過大 + + + %1: Connection error + %1:連線錯誤 + + + %1: The socket operation is not supported + %1:socket 操作未支援 + + + %1: Unknown error + %1:未知的錯誤 + + + %1: Unknown error %2 + %1:未知的錯誤 %2 + + + + QMYSQLDriver + + Unable to open database ' + 無法開啟資料庫 + + + Unable to connect + 無法連線 + + + Unable to begin transaction + 無法開始事務 + + + Unable to commit transaction + 無法提交事務 + + + Unable to rollback transaction + 無法反轉事務 + + + + QMYSQLResult + + Unable to fetch data + 無法抓取資料 + + + Unable to execute query + 無法執行查詢 + + + Unable to store result + 無法儲存結果 + + + Unable to prepare statement + 無法準備敘述 + + + Unable to reset statement + 無法重置敘述 + + + Unable to bind value + 無法結合數值 + + + Unable to execute statement + 無法執行敘述 + + + Unable to bind outvalues + 無法結合輸出值 + + + Unable to store statement results + 無法儲存敘述結果 + + + Unable to execute next query + 無法執行下一個查詢 + + + Unable to store next result + 無法儲存下一個結果 + + + + QMdiArea + + (Untitled) + (未命名) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + 關閉 + + + Minimize + 最小化 + + + Restore Down + 向下恢復 + + + &Restore + 回復(&R) + + + &Move + 移動(&M) + + + &Size + 大小(&S) + + + Mi&nimize + 最小化(&N) + + + Ma&ximize + 最大化(&X) + + + Stay on &Top + 留在頂端(&T) + + + &Close + 關閉(&C) + + + Maximize + 最大化 + + + Unshade + 取消遮蔽 + + + Shade + 遮蔽 + + + Restore + 回復 + + + Help + 說明 + + + Menu + 選單 + + + - [%1] + - [%1] + + + + QMenu + + Close + 關閉 + + + Open + 開啟 + + + Execute + 執行 + + + + QMenuBar + + Actions + 動作 + + + + QMessageBox + + OK + 確定 + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <h3>關於Qt</h3><p>本程式使用Qt %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><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> + <p>Qt是一套應用於跨平台應用程式開發的C++工具集。</p><p>Qt提供橫跨MS&nbsp;Windows、Mac&nbsp;OS&nbsp;X、Linux及各主要商業Unix系統的單一來源移植能力。Qt也提供適用於嵌入式裝置的版本,例如Qt for Embedded Linux和Qt for Windows CE。</p><p>針對不同使用者的需求,Qt有三種不同授權方式。</p><p>商業授權合約下的Qt授權適用於專利/商業軟體的開發,在這種情況中,您可能不想與第三方分享任何原始碼或無法遵從GNU LGPL 2.1版或GNU GPL 3.0版的條款。</p><p>GNU LGPL 2.1版下的Qt授權適用於開發Qt應用程式(專利或開放原始碼),您必須遵從GNU LGPL 2.1版的條款與條件。</p><p>GNU GPL 3.0版下的Qt授權適用於開發Qt應用程式,在這種情況中,您希望將此應用程式搭配基於GNU GPL 3.0版開發的軟體一起使用,或您樂意遵從GNU GPL 3.0版的條款。</p><p>請參閱<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>,此頁面對於Qt授權會有概略的介紹。</p><p>Copyright (C) 2010 諾基亞公司及/或其子公司。</p><p>Qt是一項諾基亞產品。如需詳細資訊,請參閱<a href="http://qt.nokia.com/">qt.nokia.com</a>。</p> + + + About Qt + 關於 Qt + + + Help + 說明 + + + Show Details... + 顯示詳情... + + + Hide Details... + 隱藏詳情... + + + + QMultiInputContext + + Select IM + 選擇輸入法 + + + + QMultiInputContextPlugin + + Multiple input method switcher + 多重輸入法切換器 + + + Multiple input method switcher that uses the context menu of the text widgets + 使用文字元件中的內文選單的多重輸入法切換器 + + + + QNativeSocketEngine + + The remote host closed the connection + 遠端主機關閉了連線 + + + Network operation timed out + 網路操作逾時 + + + Out of resources + 資源不足 + + + Unsupported socket operation + 未支援的 socket 操作 + + + Protocol type not supported + 協定型態未支援 + + + Invalid socket descriptor + 不合法的 socket 描述子 + + + Network unreachable + 無法使用網路 + + + Permission denied + 權限不足 + + + Connection timed out + 連線逾時 + + + Connection refused + 連線被拒 + + + The bound address is already in use + 結合的位址已經在使用中 + + + The address is not available + 無法取得位址 + + + The address is protected + 此位址已被保護 + + + Unable to send a message + 無法送出訊息 + + + Unable to receive a message + 無法接收訊息 + + + Unable to write + 無法寫入 + + + Network error + 網路錯誤 + + + Another socket is already listening on the same port + 另一個 socket 已經在監聽同一個連接埠 + + + Unable to initialize non-blocking socket + 無法初始化非阻擋性 socket + + + Unable to initialize broadcast socket + 無法初始化廣播 socket + + + Attempt to use IPv6 socket on a platform with no IPv6 support + 試圖在沒有 IPv6 支援的平台上使用 IPv6 socket + + + Host unreachable + 無法連線到主機 + + + Datagram was too large to send + 資料過大無法送出 + + + Operation on non-socket + 對非 socket 操作 + + + Unknown error + 未知的錯誤 + + + The proxy type is invalid for this operation + 代理伺服器型態無法支援此操作 + + + + QNetworkAccessCacheBackend + + Error opening %1 + 開啟 %1 發生錯誤 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + 寫入%1時發生寫入錯誤:%2 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + 要求開啟非本地端檔案 %1 + + + Error opening %1: %2 + 開啟 %1 發生錯誤:%2 + + + Write error writing to %1: %2 + 寫入 %1 時發生錯誤:%2 + + + Cannot open %1: Path is a directory + 無法開啟 %1:此路徑是一個目錄 + + + Read error reading from %1: %2 + 從 %1 讀取錯誤:%2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + 找不到合適的代理伺服器 + + + Cannot open %1: is a directory + 無法開啟 %1:是一個目錄 + + + Logging in to %1 failed: authentication required + 登入 %1 失敗:需要認證 + + + Error while downloading %1: %2 + 下載 %1 時發生錯誤:%2 + + + Error while uploading %1: %2 + 上傳 %1 時發生錯誤:%2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + 找不到合適的代理伺服器 + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + 下載 %1 時發生錯誤─伺服器回應:%2 + + + Protocol "%1" is unknown + 未知的協定 %1 + + + + QNetworkReplyImpl + + Operation canceled + 取消操作 + + + + QOCIDriver + + Unable to logon + 無法登入 + + + Unable to initialize + QOCIDriver + 無法初始化 + + + Unable to begin transaction + 無法開始事務 + + + Unable to commit transaction + 無法提交事務 + + + Unable to rollback transaction + 無法反轉事務 + + + + QOCIResult + + Unable to bind column for batch execute + 無法結合欄位以做批次執行 + + + Unable to execute batch statement + 無法執行批次敘述 + + + Unable to goto next + 無法跳到下一個 + + + Unable to alloc statement + 無法配置敘述 + + + Unable to prepare statement + 無法準備敘述 + + + Unable to get statement type + + + + Unable to bind value + 無法結合數值 + + + Unable to execute statement + 無法執行敘述 + + + + QODBCDriver + + Unable to connect + 無法連接 + + + Unable to disable autocommit + 無法關閉自動提交功能 + + + Unable to commit transaction + 無法提交事務 + + + Unable to rollback transaction + 無法反轉事務 + + + Unable to enable autocommit + 無法開啟自動提交功能 + + + Unable to connect - Driver doesn't support all functionality required + + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: 無法設定 SQL_CURSOR_STATIC 做為敘述屬性。請檢查您的 ODBC 驅動程式的設定 + + + Unable to execute statement + 無法執行敘述 + + + Unable to fetch next + 無法抓取下一筆 + + + Unable to prepare statement + 無法準備敘述 + + + Unable to bind variable + 無法結合變數 + + + Unable to fetch last + 無法抓取最後一筆 + + + Unable to fetch + 無法抓取 + + + Unable to fetch first + 無法抓取第一筆 + + + Unable to fetch previous + 無法抓取前一筆 + + + + QObject + + Invalid hostname + 主機名稱無效 + + + Operation not supported on %1 + 在 %1 上不支援此操作 + + + Invalid URI: %1 + 不合法的網址:%1 + + + Socket error on %1: %2 + %1 上發生 socket 錯誤:%2 + + + Remote host closed the connection prematurely on %1 + 於 %1 上遠端主機關閉了不正常的連線 + + + No host name given + 未指定主機 + + + + QPPDOptionsModel + + Name + 名稱 + + + Value + + + + + QPSQLDriver + + Unable to connect + 無法連線 + + + Could not begin transaction + 無法開始事務 + + + Could not commit transaction + 無法提交事務 + + + Could not rollback transaction + 無法反轉事務 + + + Unable to subscribe + 無法訂閱 + + + Unable to unsubscribe + 無法取消訂閱 + + + + QPSQLResult + + Unable to create query + 無法建立查詢 + + + Unable to prepare statement + 無法準備敘述 + + + + QPageSetupWidget + + Centimeters (cm) + 公分 + + + Millimeters (mm) + 公厘 + + + Inches (in) + 英吋 + + + Points (pt) + + + + Form + 表單 + + + Paper + 紙張 + + + Page size: + 紙張大小: + + + Width: + 寬度: + + + Height: + 高度: + + + Paper source: + 紙張來源: + + + Orientation + 方向 + + + Portrait + 縱向 + + + Landscape + 橫向 + + + Reverse landscape + 反序橫向 + + + Reverse portrait + 反序縱向 + + + Margins + 邊緣 + + + top margin + 上緣 + + + left margin + 左緣 + + + right margin + 右緣 + + + bottom margin + 下緣 + + + + QPluginLoader + + Unknown error + 未知的錯誤 + + + The plugin was not loaded. + 外掛程式未載入。 + + + + QPrintDialog + + locally connected + 本地連接 + + + Aliases: %1 + 別名:%1 + + + unknown + 未知 + + + OK + 確定 + + + Print all + 全部列印 + + + Print range + 列印範圍 + + + A0 (841 x 1189 mm) + A0 (841 x 1189 mm) + + + A1 (594 x 841 mm) + A1 (594 x 841 mm) + + + A2 (420 x 594 mm) + A2 (420 x 594 mm) + + + A3 (297 x 420 mm) + A3 (297 x 420 mm) + + + A5 (148 x 210 mm) + A5 (148 x 210 mm) + + + A6 (105 x 148 mm) + A6 (105 x 148 mm) + + + A7 (74 x 105 mm) + A7 (74 x 105 mm) + + + A8 (52 x 74 mm) + A8 (52 x 74 mm) + + + A9 (37 x 52 mm) + A9 (37 x 52 mm) + + + B0 (1000 x 1414 mm) + B0 (1000 x 1414 mm) + + + B1 (707 x 1000 mm) + B1 (707 x 1000 mm) + + + B2 (500 x 707 mm) + B2 (500 x 707 mm) + + + B3 (353 x 500 mm) + B3 (353 x 500 mm) + + + B4 (250 x 353 mm) + B4 (250 x 353 mm) + + + B6 (125 x 176 mm) + B6 (125 x 176 mm) + + + B7 (88 x 125 mm) + B7 (88 x 125 mm) + + + B8 (62 x 88 mm) + B8 (62 x 88 mm) + + + B9 (44 x 62 mm) + B9 (44 x 62 mm) + + + B10 (31 x 44 mm) + B10 (31 x 44 mm) + + + C5E (163 x 229 mm) + C5E (163 x 229 mm) + + + DLE (110 x 220 mm) + DLE (110 x 220 mm) + + + Folio (210 x 330 mm) + 對開 (210 x 330 mm) + + + Ledger (432 x 279 mm) + Ledger (432 x 279 mm) + + + Tabloid (279 x 432 mm) + Tabloid (279 x 432 mm) + + + US Common #10 Envelope (105 x 241 mm) + US 常用 10 號信封 (105x241 mm) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 x 297 mm, 8.26 x 11.7 英吋) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 x 250 mm, 6.93 x 9.84 英吋) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7.5 x 10 英吋, 191 x 254 mm) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8.5 x 14 英吋, 216 x 356 mm) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8.5 x 11 英吋, 216 x 279 mm) + + + Print selection + 列印選擇區 + + + Print + 列印 + + + Print To File ... + 列印到檔案... + + + File %1 is not writable. +Please choose a different file name. + 檔案 %1 無法寫入。 +請選擇其它檔名。 + + + %1 already exists. +Do you want to overwrite it? + %1 已存在。 +您要覆寫它嗎? + + + File exists + 檔案已存在 + + + <qt>Do you want to overwrite it?</qt> + <qt>您要覆寫它嗎?</qt> + + + %1 is a directory. +Please choose a different file name. + %1 是一個目錄。 +請選擇其他檔名。 + + + The 'From' value cannot be greater than the 'To' value. + 起始數值不能大於結束數值 + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + Executive + + + Folio + Folio + + + Ledger + Ledger + + + Legal + Legal + + + Letter + Letter + + + Tabloid + Tabloid + + + US Common #10 Envelope + US Common #10 Envelope + + + Custom + 自訂 + + + &Options >> + 操作 (&O) >> + + + &Options << + 操作 (&O) << + + + Print to File (PDF) + 列印到檔案(PDF) + + + Print to File (Postscript) + 列印到檔案(Postscript) + + + Local file + 本地端檔案 + + + Write %1 file + 寫入 %1 檔案 + + + &Print + 列印(&P) + + + + QPrintPreviewDialog + + %1% + %1% + + + Print Preview + 列印預覽 + + + Next page + 下一頁 + + + Previous page + 前一頁 + + + First page + 第一頁 + + + Last page + 最後一頁 + + + Fit width + 符合寬度 + + + Fit page + 符合頁面 + + + Zoom in + 放大 + + + Zoom out + 縮小 + + + Portrait + 縱向 + + + Landscape + 橫向 + + + Show single page + 顯示單一頁面 + + + Show facing pages + 顯示封面 + + + Show overview of all pages + 顯示所有頁面預覽 + + + Print + 列印 + + + Page setup + 列印設定 + + + Close + 關閉 + + + Export to PDF + 匯出到 PDF 檔 + + + Export to PostScript + 匯出到 PostScript 檔 + + + Page Setup + 頁面設定 + + + + QPrintPropertiesWidget + + Form + 表單 + + + Page + 頁面 + + + Advanced + 進階 + + + + QPrintSettingsOutput + + Form + 表單 + + + Copies + 份數 + + + Print range + 列印範圍 + + + Print all + 全部列印 + + + Pages from + 指定頁面:從 + + + to + + + + Selection + 選擇區 + + + Output Settings + 輸出設定 + + + Copies: + 份數: + + + Collate + 校對 + + + Reverse + 反向 + + + Options + 選項 + + + Color Mode + 顏色模式 + + + Color + 顏色 + + + Grayscale + 灰階 + + + Duplex Printing + 雙工列印 + + + None + + + + Long side + 長邊 + + + Short side + 短邊 + + + + QPrintWidget + + Form + 表單 + + + Printer + 印表機 + + + &Name: + 名稱(&N): + + + P&roperties + 屬性(&R) + + + Location: + 位置: + + + Preview + 預覽 + + + Type: + 型態: + + + Output &file: + 輸出檔案(&F): + + + ... + ... + + + + QProcess + + Could not open input redirection for reading + 無法開啟輸入導向以讀取 + + + Could not open output redirection for writing + 無法開啟輸出導向以寫入 + + + Resource error (fork failure): %1 + 資源錯誤(fork 失敗):%1 + + + Process operation timed out + 行程操作逾時 + + + Error reading from process + 從行程讀取時發生錯誤 + + + Error writing to process + 寫入行程時發生錯誤 + + + Process crashed + 行程已崩潰 + + + No program defined + 未定義程式 + + + Process failed to start: %1 + 處理序啟動失敗:%1 + + + + QProgressDialog + + Cancel + 取消 + + + + QPushButton + + Open + 開啟 + + + + QRadioButton + + Check + 勾選 + + + + QRegExp + + no error occurred + 沒有發生錯誤 + + + disabled feature used + 使用已關閉的功能 + + + bad char class syntax + 錯誤的字元類別語法 + + + bad lookahead syntax + 錯誤的 lookahead 語法 + + + bad repetition syntax + 錯誤的重覆語法 + + + invalid octal value + 不合法的八進位值 + + + missing left delim + 少了左方的區隔符 + + + unexpected end + 未預期遇到結尾 + + + met internal limit + 遇到內部限制 + + + invalid interval + 間隔無效 + + + invalid category + 類別無效 + + + + QSQLite2Driver + + Error opening database + 開啟資料庫時發生錯誤 + + + Unable to begin transaction + 無法開始事務 + + + Unable to commit transaction + 無法提交事務 + + + Unable to rollback transaction + 無法復原交易 + + + + QSQLite2Result + + Unable to fetch results + 無法抓取結果 + + + Unable to execute statement + 無法執行敘述 + + + + QSQLiteDriver + + Error opening database + 開啟資料庫發生錯誤 + + + Error closing database + 關閉資料庫發生錯誤 + + + Unable to begin transaction + 無法開始事務 + + + Unable to commit transaction + 無法提交事務 + + + Unable to rollback transaction + 無法反轉事務 + + + + QSQLiteResult + + Unable to fetch row + 無法抓取列 + + + Unable to execute statement + 無法執行敘述 + + + Unable to reset statement + 無法重置敘述 + + + Unable to bind parameters + 無法結合參數 + + + Parameter count mismatch + 參數數量不符合 + + + No query + 沒有查詢 + + + + QScriptBreakpointsModel + + ID + ID + + + Location + 位置 + + + Condition + 條件 + + + Ignore-count + 忽略次數 + + + Single-shot + 單次 + + + Hit-count + 叫用次數 + + + + QScriptBreakpointsWidget + + New + 新增 + + + Delete + 刪除 + + + + QScriptDebugger + + Go to Line + 跳至指定行 + + + Line: + 行: + + + Interrupt + 插斷 + + + Shift+F5 + Shift+F5 + + + Continue + 繼續 + + + F5 + F5 + + + Step Into + 逐步執行 + + + F11 + F11 + + + Step Over + 不進入函式 + + + F10 + F10 + + + Step Out + 跳出函式 + + + Shift+F11 + Shift+F11 + + + Run to Cursor + 執行至游標處 + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + 執行至新指令碼 + + + Toggle Breakpoint + 切換中斷點 + + + F9 + F9 + + + Clear Debug Output + 清除偵錯輸出 + + + Clear Error Log + 清除錯誤記錄 + + + Clear Console + 清除主控台 + + + &Find in Script... + 在指令碼中尋找(&F)... + + + Ctrl+F + Ctrl+F + + + Find &Next + 尋找下一個(&N) + + + F3 + F3 + + + Find &Previous + 尋找上一個(&P) + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + 偵錯 + + + + QScriptDebuggerCodeFinderWidget + + Close + 關閉 + + + Previous + 上一個 + + + Next + 下一個 + + + Case Sensitive + 區分大小寫 + + + Whole words + 全字 + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;搜尋已繞回 + + + + QScriptDebuggerLocalsModel + + Name + 名稱 + + + Value + + + + + QScriptDebuggerStackModel + + Level + 層級 + + + Name + 名稱 + + + Location + 位置 + + + + QScriptEdit + + Toggle Breakpoint + 切換中斷點 + + + Disable Breakpoint + 停用中斷點 + + + Enable Breakpoint + 啟用中斷點 + + + Breakpoint Condition: + 中斷點條件: + + + + QScriptEngineDebugger + + Loaded Scripts + 載入的指令碼 + + + Breakpoints + 中斷點 + + + Stack + 堆疊 + + + Locals + 區域變數 + + + Console + 主控台 + + + Debug Output + 偵錯輸出 + + + Error Log + 錯誤記錄 + + + Search + 搜尋 + + + View + 檢視 + + + Qt Script Debugger + Qt指令碼偵錯程式 + + + + QScriptNewBreakpointWidget + + Close + 關閉 + + + + QScrollBar + + Scroll here + 在此捲軸 + + + Left edge + 左邊緣 + + + Top + 頂端 + + + Right edge + 右邊緣 + + + Bottom + 底端 + + + Page left + 頁面左方 + + + Page up + 頁面上方 + + + Page right + 頁面右方 + + + Page down + 頁面下方 + + + Scroll left + 往左捲軸 + + + Scroll up + 往上捲軸 + + + Scroll right + 往右捲軸 + + + Scroll down + 往下捲軸 + + + Line up + 對上排列 + + + Position + 位置 + + + Line down + 對下排列 + + + + QSharedMemory + + %1: create size is less then 0 + %1:建立大小小於 0 + + + %1: unable to lock + %1:無法鎖定 + + + %1: unable to unlock + %1:無法解除鎖定 + + + %1: permission denied + %1:存取被拒 + + + %1: already exists + %1:已存在 + + + %1: doesn't exists + %1:不存在 + + + %1: out of resources + %1:資源不足 + + + %1: unknown error %2 + %1:未知的錯誤 %2 + + + %1: key is empty + %1:鍵值是空的 + + + %1: ftok failed + %1:ftok 失敗 + + + %1: unable to make key + %1:無法產生鍵值 + + + %1: doesn't exist + %1:不存在 + + + %1: UNIX key file doesn't exist + %1:UNIX金鑰檔不存在 + + + %1: system-imposed size restrictions + %1:系統大小限制 + + + %1: not attached + %1:未附加 + + + %1: invalid size + %1:不合法的大小 + + + %1: key error + %1:鍵值錯誤 + + + %1: size query failed + %1:大小查詢失敗 + + + %1: unable to set key on lock + %1:無法設定鍵值 + + + + QShortcut + + Space + 空白鍵 + + + Esc + Esc + + + Tab + Tab + + + Backtab + Backtab + + + Backspace + Backspace + + + Return + Return + + + Enter + Enter + + + Ins + Ins + + + Del + Del + + + Pause + Pause + + + Print + Print + + + SysReq + SysReq + + + Home + Home + + + End + End + + + Left + 左鍵 + + + Up + 上鍵 + + + Right + 右鍵 + + + Down + 下鍵 + + + PgUp + PgUp + + + PgDown + PgDown + + + CapsLock + 大寫鎖定 + + + NumLock + 數字鎖定 + + + ScrollLock + 捲軸鎖定 + + + Menu + 選單 + + + Help + 說明 + + + Back + 返回 + + + Forward + 往前 + + + Stop + 停止 + + + Refresh + 刷新 + + + Volume Down + 音量降低 + + + Volume Mute + 靜音 + + + Volume Up + 音量提高 + + + Bass Boost + 重低音 + + + Bass Up + Bass Up + + + Bass Down + Bass Down + + + Treble Up + Treble Up + + + Treble Down + Treble Down + + + Media Play + 媒體播放 + + + Media Stop + 媒體停止 + + + Media Previous + 媒體前一首 + + + Media Next + 媒體下一首 + + + Media Record + 媒體錄音 + + + Favorites + 我的最愛 + + + Search + 搜尋 + + + Standby + 待命 + + + Open URL + 開啟網址 + + + Launch Mail + 啟動郵件程式 + + + Launch Media + 啟動媒體程式 + + + Launch (0) + 啟動(0) + + + Launch (1) + 啟動(1) + + + Launch (2) + 啟動(2) + + + Launch (3) + 啟動(3) + + + Launch (4) + 啟動(4) + + + Launch (5) + 啟動(5) + + + Launch (6) + 啟動(6) + + + Launch (7) + 啟動(7) + + + Launch (8) + 啟動(8) + + + Launch (9) + 啟動(9) + + + Launch (A) + 啟動(A) + + + Launch (B) + 啟動(B) + + + Launch (C) + 啟動(C) + + + Launch (D) + 啟動(D) + + + Launch (E) + 啟動(E) + + + Launch (F) + 啟動(F) + + + Monitor Brightness Up + 螢幕亮度提高 + + + Monitor Brightness Down + 螢幕亮度降低 + + + Keyboard Light On/Off + 鍵盤燈光開/關 + + + Keyboard Brightness Up + 鍵盤亮度提高 + + + Keyboard Brightness Down + 鍵盤亮度降低 + + + Power Off + 關閉電源 + + + Wake Up + 喚醒 + + + Eject + 退出 + + + Screensaver + 螢幕保護 + + + WWW + WWW + + + Sleep + 睡眠 + + + LightBulb + 燈泡 + + + Shop + 商店 + + + History + 記錄 + + + Add Favorite + 加入我的最愛 + + + Hot Links + 熱門連結 + + + Adjust Brightness + 調整亮度 + + + Finance + 財務 + + + Community + 社群 + + + Audio Rewind + 音訊倒轉 + + + Back Forward + 上一個下一個 + + + Application Left + 應用程式靠左 + + + Application Right + 應用程式靠右 + + + Book + 書籍 + + + CD + CD + + + Calculator + 計算機 + + + Clear + 清除 + + + Clear Grab + 清除抓取內容 + + + Close + 關閉 + + + Copy + 複製 + + + Cut + 剪下 + + + Display + 顯示 + + + DOS + DOS + + + Documents + 文件 + + + Spreadsheet + 試算表 + + + Browser + 瀏覽器 + + + Game + 遊戲 + + + Go + + + + iTouch + iTouch + + + Logoff + 登出 + + + Market + 市場 + + + Meeting + 會議 + + + Keyboard Menu + 鍵盤功能表 + + + Menu PB + 功能表PB + + + My Sites + 我的網站 + + + News + 新聞 + + + Home Office + Home Office + + + Option + 選項 + + + Paste + 貼上 + + + Phone + 手機 + + + Reply + 回覆 + + + Reload + 重新載入 + + + Rotate Windows + 旋轉視窗 + + + Rotation PB + 循環PB + + + Rotation KB + 循環KB + + + Save + 儲存 + + + Send + 傳送 + + + Spellchecker + 拼字檢查 + + + Split Screen + 分割畫面 + + + Support + 支援 + + + Task Panel + 工作面板 + + + Terminal + 終端機 + + + Tools + 工具 + + + Travel + 旅行 + + + Video + 視訊 + + + Word Processor + 文字處理器 + + + XFer + XFer + + + Zoom In + 放大 + + + Zoom Out + 縮小 + + + Away + 離開 + + + Messenger + Messenger + + + WebCam + 網路攝影機 + + + Mail Forward + 郵件轉寄 + + + Pictures + 圖片 + + + Music + 音樂 + + + Battery + 電池 + + + Bluetooth + 藍牙 + + + Wireless + 無線 + + + Ultra Wide Band + 超寬頻 + + + Audio Forward + 音訊轉送 + + + Audio Repeat + 音訊重複 + + + Audio Random Play + 音訊機播放 + + + Subtitle + 副標題 + + + Audio Cycle Track + 音訊循環軌跡 + + + Time + 時間 + + + View + 檢視 + + + Top Menu + 上層功能表 + + + Suspend + 暫止 + + + Hibernate + 休眠 + + + Print Screen + 列印螢幕 + + + Page Up + 往上一頁 + + + Page Down + 往下一頁 + + + Caps Lock + 大寫鎖定 + + + Num Lock + 數字鎖定 + + + Number Lock + 數字鎖定 + + + Scroll Lock + 捲軸鎖定 + + + Insert + 插入 + + + Delete + 刪除 + + + Escape + Escape + + + System Request + 系統要求 SysRq + + + Select + 選擇 + + + Yes + + + + No + + + + Context1 + 內文1 + + + Context2 + 內文2 + + + Context3 + 內文3 + + + Context4 + 內文4 + + + Call + 呼叫 + + + Hangup + 掛斷 + + + Flip + 反轉 + + + Ctrl + Ctrl + + + Shift + Shift + + + Alt + Alt + + + Meta + Meta + + + + + + + + + F%1 + F%1 + + + Home Page + 首頁 + + + + QSlider + + Page left + 頁面左方 + + + Page up + 頁面上方 + + + Position + 位置 + + + Page right + 頁面右方 + + + Page down + 頁面下方 + + + + QSocks5SocketEngine + + Connection to proxy refused + 代理伺服器連線被拒 + + + Connection to proxy closed prematurely + 代理伺服器連線已不正常關閉 + + + Proxy host not found + 找不到代理伺服器 + + + Connection to proxy timed out + 代理伺服器連線逾時 + + + Proxy authentication failed + 代理伺服器認證失敗 + + + Proxy authentication failed: %1 + 代理伺服器認證失敗:%1 + + + SOCKS version 5 protocol error + SOCKS 5 的協定錯誤 + + + General SOCKSv5 server failure + 一般的 SOCKSv5 伺服器錯誤 + + + Connection not allowed by SOCKSv5 server + 連線未被 SOCKSv5 伺服器允許 + + + TTL expired + TTL 逾時 + + + SOCKSv5 command not supported + SOCKSv5 指令未被支援 + + + Address type not supported + 位址型態未被支援 + + + Unknown SOCKSv5 proxy error code 0x%1 + 未知的 SOCKSv5 代理伺服器錯誤代碼 0x%1 + + + Network operation timed out + 網路操作逾時 + + + + QSoftKeyManager + + Ok + 確定 + + + Select + 選取 + + + Done + 完成 + + + Options + 選項 + + + Cancel + 取消 + + + Exit + 退出 + + + + QSpinBox + + More + 更多 + + + Less + 較少 + + + + QSql + + Delete + 刪除 + + + Delete this record? + 要刪除這筆紀錄嗎? + + + Yes + + + + No + + + + Insert + 插入 + + + Update + 更新 + + + Save edits? + 要儲存編輯過的內容嗎? + + + Cancel + 取消 + + + Confirm + 確認 + + + Cancel your edits? + 要取消編輯嗎? + + + + QSslSocket + + Unable to write data: %1 + 無法寫入資料:%1 + + + Unable to decrypt data: %1 + 無法解密資料:%1 + + + Error while reading: %1 + 讀取時發生錯誤:%1 + + + Error during SSL handshake: %1 + SSL 同步時發生錯誤:%1 + + + Error creating SSL context (%1) + 建立 SSL 內文時發生錯誤(%1) + + + Invalid or empty cipher list (%1) + 不合法或空白的加密清單(%1) + + + Private key does not certify public key, %1 + 私密金鑰無法認證公開金鑰,%1 + + + Error creating SSL session, %1 + 建立 SSL 工作階段時發生錯誤:%1 + + + Error creating SSL session: %1 + 建立 SSL 工作階段時發生錯誤:%1 + + + Cannot provide a certificate with no key, %1 + 沒有金鑰無法提供憑證:%1 + + + Error loading local certificate, %1 + 載入本地憑證時發生錯誤:%1 + + + Error loading private key, %1 + 載入私鑰時發生錯誤:%1 + + + No error + 沒有錯誤 + + + The issuer certificate could not be found + 找不到發行者憑證 + + + The certificate signature could not be decrypted + 無法解密憑證簽名 + + + The public key in the certificate could not be read + 憑證中的公開金鑰無法讀取 + + + The signature of the certificate is invalid + 憑證的簽名無效 + + + The certificate is not yet valid + 憑證尚未生效 + + + The certificate has expired + 憑證已逾期 + + + The certificate's notBefore field contains an invalid time + 憑證的notBefore欄位包含無效的時間 + + + The certificate's notAfter field contains an invalid time + 憑證的notAfter欄位包含無效的時間 + + + The certificate is self-signed, and untrusted + 憑證是自我簽署的,而且不受信任 + + + The root certificate of the certificate chain is self-signed, and untrusted + 憑證鏈的根憑證是自我簽署的,而且不受信任 + + + The issuer certificate of a locally looked up certificate could not be found + 找不到本機查詢憑證的發行者憑證 + + + No certificates could be verified + 沒有可確認的憑證 + + + One of the CA certificates is invalid + CA憑證的其中之一無效 + + + The basicConstraints path length parameter has been exceeded + basicConstraints路徑長度參數已超出限制 + + + The supplied certificate is unsuitable for this purpose + 提供的憑證不適用於此目的 + + + The root CA certificate is not trusted for this purpose + 根CA憑證在此目的中不受信任 + + + The root CA certificate is marked to reject the specified purpose + 根CA憑證已註記拒絕該特定目的 + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + 目前候選發行者的憑證已遭拒絕,因為其主旨名稱和目前憑證的發行者名稱不符 + + + 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 + 目前候選發行者的憑證已遭拒絕,因為其發行者名稱及提出的序號和目前憑證的授權單位金鑰識別元不符 + + + The peer did not present any certificate + 對等節點未提出任何憑證 + + + The host name did not match any of the valid hosts for this certificate + 主機名稱不符合此憑證任何有效的主機 + + + Unknown error + 不明的錯誤 + + + + QStateMachine + + Missing initial state in compound state '%1' + 在複合狀態"%1"中遺失初始狀態 + + + Missing default state in history state '%1' + 在記錄狀態"%1"中遺失預設狀態 + + + No common ancestor for targets and source of transition from state '%1' + 從狀態"%1"的轉換中,目標和來源沒有共同的上階 + + + Unknown error + 不明的錯誤 + + + + QSystemSemaphore + + %1: does not exist + %1:不存在 + + + %1: out of resources + %1:資源不足 + + + %1: permission denied + %1:存取被拒 + + + %1: already exists + %1:已存在 + + + %1: unknown error %2 + %1:未知的錯誤 %2 + + + + QTDSDriver + + Unable to open connection + 無法開啟連線 + + + Unable to use database + 無法使用資料庫 + + + + QTabBar + + Scroll Left + 往左捲軸 + + + Scroll Right + 往右捲軸 + + + + QTcpServer + + Operation on socket is not supported + Socket 的操作未被支援 + + + + QTextControl + + &Undo + 復原(&U) + + + &Redo + 重做(&R) + + + Cu&t + 剪下(&T) + + + &Copy + 複製(&C) + + + Copy &Link Location + 複製連結位址(&L) + + + &Paste + 貼上(&P) + + + Delete + 刪除 + + + Select All + 全部選擇 + + + + QToolButton + + Press + 按下 + + + Open + 開啟 + + + + QUdpSocket + + This platform does not support IPv6 + 此平台不支援 IPv6 + + + + QUndoGroup + + Undo + 復原 + + + Redo + 重做 + + + + QUndoModel + + <empty> + <空白> + + + + QUndoStack + + Undo + 復原 + + + Redo + 重做 + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM 左到右標記 + + + RLM Right-to-left mark + RLM 右到左標記 + + + ZWJ Zero width joiner + ZWJ 零寬度連接器 + + + ZWNJ Zero width non-joiner + ZWNJ 零寬度非連接器 + + + ZWSP Zero width space + ZWSP 零寬度空白 + + + LRE Start of left-to-right embedding + LRE 左到右嵌入起點 + + + RLE Start of right-to-left embedding + RLE 右到左嵌入起點 + + + LRO Start of left-to-right override + LRO 左到右覆寫起點 + + + RLO Start of right-to-left override + RLO 右到左覆寫起點 + + + PDF Pop directional formatting + PDF 彈出方向格式 + + + Insert Unicode control character + 插入萬國碼控制字元 + + + + QWebFrame + + Request cancelled + 請求已取消 + + + Request blocked + 請求已被阻擋 + + + Cannot show URL + 無法顯示網址 + + + Frame load interrupted by policy change + 框架載入因為原則變更而中斷 + + + Cannot show mimetype + 無法顯示 MIME 型態 + + + File does not exist + 檔案不存在 + + + + QWebPage + + Submit + default label for Submit buttons in forms on web pages + + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + + + + Reset + default label for Reset buttons in forms on web pages + 重置 + + + Choose File + title for file button used in HTML forms + 選擇檔案 + + + No file selected + text to display in file button used in HTML forms when no file is selected + 未選取任何檔案 + + + Open in New Window + Open in New Window context menu item + 在新視窗開啟 + + + Save Link... + Download Linked File context menu item + 儲存連結... + + + Copy Link + Copy Link context menu item + 複製連結 + + + Open Image + Open Image in New Window context menu item + 開啟影像 + + + Save Image + Download Image context menu item + 儲存影像 + + + Copy Image + Copy Link context menu item + 複製影像 + + + Open Frame + Open Frame in New Window context menu item + 開啟框架 + + + Copy + Copy context menu item + 複製 + + + Go Back + Back context menu item + 往回 + + + Go Forward + Forward context menu item + 往前 + + + Stop + Stop context menu item + + + + Reload + Reload context menu item + 重新載入 + + + Cut + Cut context menu item + 剪下 + + + Paste + Paste context menu item + 貼上 + + + No Guesses Found + No Guesses Found context menu item + 找不到可能的內容 + + + Ignore + Ignore Spelling context menu item + 忽略 + + + Add To Dictionary + Learn Spelling context menu item + 新增到字典 + + + Search The Web + Search The Web context menu item + 搜尋站台 + + + Look Up In Dictionary + Look Up in Dictionary context menu item + 在字典裡搜尋 + + + Open Link + Open Link context menu item + 開啟連結 + + + Ignore + Ignore Grammar context menu item + 忽略 + + + Spelling + Spelling and Grammar context sub-menu item + + + + Show Spelling and Grammar + menu item title + + + + Hide Spelling and Grammar + menu item title + 隱藏拼字與文法 + + + Check Spelling + Check spelling context menu item + 檢查拼字 + + + Check Spelling While Typing + Check spelling while typing context menu item + 打字時立即檢查拼字 + + + Check Grammar With Spelling + Check grammar with spelling context menu item + 檢查拼字與文法 + + + Fonts + Font context sub-menu item + 字型 + + + Bold + Bold context menu item + 粗體 + + + Italic + Italic context menu item + 斜體 + + + Underline + Underline context menu item + + + + Outline + Outline context menu item + 外框線 + + + Direction + Writing direction context sub-menu item + 方向 + + + Text Direction + Text direction context sub-menu item + + + + Default + Default writing direction context menu item + 預設 + + + Left to Right + Left to Right context menu item + 從左至右 + + + Right to Left + Right to Left context menu item + 從右至左 + + + Loading... + Media controller status message when the media is loading + 載入中... + + + Live Broadcast + Media controller status message when watching a live broadcast + 即時廣播 + + + Audio Element + Media controller element + 音訊元素 + + + Video Element + Media controller element + 視訊元素 + + + Mute Button + Media controller element + 靜音按鈕 + + + Unmute Button + Media controller element + 取消靜音按鈕 + + + Play Button + Media controller element + 播放按鈕 + + + Pause Button + Media controller element + 暫停按鈕 + + + Slider + Media controller element + 滑桿 + + + Slider Thumb + Media controller element + 滑桿縮圖 + + + Rewind Button + Media controller element + 倒轉按鈕 + + + Return to Real-time Button + Media controller element + 回復成即時按鈕 + + + Elapsed Time + Media controller element + 經過時間 + + + Remaining Time + Media controller element + 剩餘時間 + + + Status Display + Media controller element + 狀態顯示 + + + Fullscreen Button + Media controller element + 全螢幕按鈕 + + + Seek Forward Button + Media controller element + 往前搜尋按鈕 + + + Seek Back Button + Media controller element + 往回搜尋按鈕 + + + Audio element playback controls and status display + Media controller element + 音訊元素播放控制和狀態顯示 + + + Video element playback controls and status display + Media controller element + 視訊元素播放控制和狀態顯示 + + + Mute audio tracks + Media controller element + 音軌靜音 + + + Unmute audio tracks + Media controller element + 音軌取消靜音 + + + Begin playback + Media controller element + 開始播放 + + + Pause playback + Media controller element + 暫停播放 + + + Movie time scrubber + Media controller element + 影片時間清除器 + + + Movie time scrubber thumb + Media controller element + 影片時間清除器縮圖 + + + Rewind movie + Media controller element + 倒轉影片 + + + Return streaming movie to real-time + Media controller element + 串流影片回復成即時播放 + + + Current movie time + Media controller element + 目前的影片時間 + + + Remaining movie time + Media controller element + 剩餘的影片時間 + + + Current movie status + Media controller element + 目前的影片狀態 + + + Play movie in full-screen mode + Media controller element + 以全螢幕模式播放影片 + + + Seek quickly back + Media controller element + 快速往回搜尋 + + + Seek quickly forward + Media controller element + 快速往前搜尋 + + + Indefinite time + Media time description + 不限定時間 + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1天%2小時%3分鐘%4秒鐘 + + + %1 hours %2 minutes %3 seconds + Media time description + %1小時%2分鐘%3秒鐘 + + + %1 minutes %2 seconds + Media time description + %1分鐘%2秒鐘 + + + %1 seconds + Media time description + %1秒鐘 + + + Inspect + Inspect Element context menu item + 查驗 + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + 沒有最近的搜尋 + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + 最近的搜尋 + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + 清除最近的搜尋 + + + Unknown + Unknown filesize FTP directory listing item + + + + Web Inspector - %2 + + + + %1 (%2x%3 pixels) + Title string for images + %1(%2x%3 像素) + + + Bad HTTP request + 不良的 HTTP 請求 + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + + + + Scroll here + 在此捲軸 + + + Left edge + 左邊緣 + + + Top + + + + Right edge + 右邊緣 + + + Bottom + 底端 + + + Page left + 頁面左方 + + + Page up + 頁面上方 + + + Page right + 頁面右方 + + + Page down + 頁面下方 + + + Scroll left + 往左捲軸 + + + Scroll up + 往上捲軸 + + + Scroll right + 往右捲軸 + + + Scroll down + 往下捲軸 + + + %n file(s) + number of chosen file + + %n 個檔案 + + + + JavaScript Alert - %1 + JavaScript 警告 ─ %1 + + + JavaScript Confirm - %1 + JavaScript 確認 ─ %1 + + + JavaScript Prompt - %1 + JavaScript 提示 ─ %1 + + + JavaScript Problem - %1 + JavaScript問題 - %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + 此頁面上的指令碼似乎有問題。是否要停止指令碼? + + + Move the cursor to the next character + 移動游標到下一個字元 + + + Move the cursor to the previous character + 移動游標到前一個字元 + + + Move the cursor to the next word + 移動游標到下一個單字 + + + Move the cursor to the previous word + 移動游標到前一個單字 + + + Move the cursor to the next line + 移動游標到下一行 + + + Move the cursor to the previous line + 移動游標到前一行 + + + Move the cursor to the start of the line + 移動游標到這一行的起頭 + + + Move the cursor to the end of the line + 移動游標到這一行的結尾 + + + Move the cursor to the start of the block + 移動游標到這一個區塊的起頭 + + + Move the cursor to the end of the block + 移動游標到這一個區塊的結尾 + + + Move the cursor to the start of the document + 移動游標到這一個文件的起頭 + + + Move the cursor to the end of the document + 移動游標到這一個文件的結尾 + + + Select all + 全選 + + + Select to the next character + + + + Select to the previous character + + + + Select to the next word + + + + Select to the previous word + + + + Select to the next line + + + + Select to the previous line + + + + Select to the start of the line + + + + Select to the end of the line + + + + Select to the start of the block + + + + Select to the end of the block + + + + Select to the start of the document + + + + Select to the end of the document + + + + Delete to the start of the word + 刪除到此單字的起頭 + + + Delete to the end of the word + 刪除到此單字的結尾 + + + Insert a new paragraph + 插入新段落 + + + Insert a new line + 插入新行 + + + Paste and Match Style + 貼上並符合樣式 + + + Remove formatting + 移除格式設定 + + + Strikethrough + 刪除線 + + + Subscript + 下標 + + + Superscript + 上標 + + + Insert Bulleted List + 插入項目符號清單 + + + Insert Numbered List + 插入編號清單 + + + Indent + 縮排 + + + Outdent + 凸排 + + + Center + 置中 + + + Justify + 左右對齊 + + + Align Left + 靠左對齊 + + + Align Right + 靠右對齊 + + + + QWhatsThisAction + + What's This? + + + + + QWidget + + * + + + + + QWizard + + Cancel + + + + Help + + + + < &Back + + + + &Finish + + + + &Help + + + + Go Back + + + + Continue + + + + Commit + + + + Done + + + + &Next + + + + &Next > + + + + + QWorkspace + + &Restore + + + + &Move + + + + &Size + + + + Mi&nimize + + + + Ma&ximize + + + + &Close + + + + Stay on &Top + + + + Minimize + + + + Restore Down + + + + Close + + + + Sh&ade + + + + %1 - [%2] + + + + &Unshade + + + + + QXml + + no error occurred + + + + error triggered by consumer + + + + unexpected end of file + + + + more than one document type definition + + + + error occurred while parsing element + + + + tag mismatch + + + + error occurred while parsing content + + + + unexpected character + + + + invalid name for processing instruction + + + + version expected while reading the XML declaration + + + + wrong value for standalone declaration + + + + error occurred while parsing document type definition + + + + letter is expected + + + + error occurred while parsing comment + + + + error occurred while parsing reference + + + + internal general entity reference not allowed in DTD + + + + external parsed general entity reference not allowed in attribute value + + + + external parsed general entity reference not allowed in DTD + + + + unparsed entity reference in wrong context + + + + recursive entities + + + + error in the text declaration of an external entity + + + + encoding declaration or standalone declaration expected while reading the XML declaration + + + + standalone declaration expected while reading the XML declaration + + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + %1中的警告,位於行%2,欄%3:%4 + + + Warning in %1: %2 + %1中的警告:%2 + + + Unknown location + 不明的位置 + + + Error %1 in %2, at line %3, column %4: %5 + 在%2發生%1錯誤,位於行%3,欄%4:%5 + + + Error %1 in %2: %3 + 在%2發生%1錯誤:%3 + + + + QXmlStream + + Extra content at end of document. + + + + Invalid entity value. + + + + Invalid XML character. + + + + Sequence ']]>' not allowed in content. + + + + Namespace prefix '%1' not declared + + + + Attribute redefined. + + + + Unexpected character '%1' in public id literal. + + + + Invalid XML version string. + + + + Unsupported XML version. + + + + %1 is an invalid encoding name. + + + + Encoding %1 is unsupported + + + + Standalone accepts only yes or no. + + + + Invalid attribute in XML declaration. + + + + Premature end of document. + + + + Invalid document. + + + + Expected + + + + , but got ' + + + + Unexpected ' + + + + Expected character data. + + + + Recursive entity detected. + + + + Start tag expected. + + + + XML declaration not at start of document. + + + + NDATA in parameter entity declaration. + + + + %1 is an invalid processing instruction name. + + + + Invalid processing instruction name. + + + + Illegal namespace declaration. + + + + Invalid XML name. + + + + Opening and ending tag mismatch. + + + + Reference to unparsed entity '%1'. + + + + Entity '%1' not declared. + + + + Reference to external entity '%1' in attribute value. + + + + Invalid character reference. + + + + Encountered incorrectly encoded content. + + + + The standalone pseudo attribute must appear after the encoding. + + + + %1 is an invalid PUBLIC identifier. + + + + + QtXmlPatterns + + At least one component must be present. + 必須表達至少一個組件。 + + + %1 is not a valid value of type %2. + %1 不是合法的 %2 型態的值。 + + + When casting to %1 from %2, the source value cannot be %3. + 從 %2 轉換型態為 %1 的時候,來源數值不能是 %3。 + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + 實際布林值(Effective Boolean)無法用在兩個或兩個以上的原數值(atomic value)的計算。 + + + The data of a processing instruction cannot contain the string %1 + 處理指令的資料不能包含字串 %1 + + + %1 is an invalid %2 + %1 是不合法的 %2 + + + %1 is not a valid XML 1.0 character. + %1 不是合法的 XML 1.0 字元。 + + + %1 was called. + %1 已被呼叫。 + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + 在取代字串中,在未脫逸的情形下 %1 必須至少跟著一位數字。 + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + 在取代字串中,%1 只能用於自身或 %2 的脫逸,而非 %3。 + + + %1 matches newline characters + %1 符合了換行字元 + + + Matches are case insensitive + 比對為區分大小寫 + + + %1 is an invalid regular expression pattern: %2 + %1 是不合法的正規表示式樣式:%2 + + + It will not be possible to retrieve %1. + 無法取得 %1。 + + + The default collection is undefined + 預設的收藏未定義 + + + %1 cannot be retrieved + %1 無法取得 + + + The item %1 did not match the required type %2. + 項目 %1 未符合需要的型態 %2。 + + + %1 is an unknown schema type. + %1 是未知的機制型態。 + + + A template with name %1 has already been declared. + + + + Only one %1 declaration can occur in the query prolog. + 只有一個 %1 宣告可以在查詢中。 + + + The initialization of variable %1 depends on itself + 變數 %1 的初始化與自身相依。 + + + The variable %1 is unused + 變數 %1 未使用 + + + Version %1 is not supported. The supported XQuery version is 1.0. + 版本 %1 未支援。支援的 XQuery 版本為 1.0。 + + + No function with signature %1 is available + 沒有簽章為 %1 的函式可使用 + + + It is not possible to redeclare prefix %1. + 無法重宣告前置字串 %1。 + + + Prefix %1 is already declared in the prolog. + 前置字串 %1 已在 prolog 中宣告。 + + + The name of an option must have a prefix. There is no default namespace for options. + 選項名稱必須有前置字串。沒有選項的預設命名空間。 + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + 機制匯入功能未支援,因此有 %1 個宣告無法達成。 + + + The target namespace of a %1 cannot be empty. + %1 的目標命名空間不能是空的。 + + + The module import feature is not supported + 模組匯入功能未支援。 + + + 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 + 在函式模組中的使用者定義函式的命名空間必須與模組的命名空間相同。也就是,應該為 %1 而不是 %2。 + + + A function already exists with the signature %1. + 已經有簽章為 %1 的函式存在。 + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + 未支援外部函式。所有支援的含式可以直接使用而不需要先宣告為外部函式。 + + + The %1-axis is unsupported in XQuery + XQuery 中未支援 %1 軸 + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + 要與前置字串 %1 結合的命名空間網址不能是空字串。 + + + %1 is an invalid namespace URI. + %1 是不合法的命名空間網址。 + + + It is not possible to bind to the prefix %1 + 無法與前置字串 %1 結合。 + + + Two namespace declaration attributes have the same name: %1. + 有兩個命名空間宣告的屬性有相同的名稱:%1 + + + The namespace URI must be a constant and cannot use enclosed expressions. + 命名空間網址必須是常數,並且不能使用封閉敘述。 + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 不是範圍內屬性宣告。注意機制匯入功能未支援。 + + + empty + 空白 + + + zero or one + 0 或 1 個 + + + exactly one + 剛好一個 + + + one or more + 一個以上 + + + zero or more + 0 個以上 + + + The focus is undefined. + 焦點未定義。 + + + An attribute by name %1 has already been created. + 名為 %1 的屬性已被建立。 + + + Network timeout. + 網路逾時。 + + + Element %1 can't be serialized because it appears outside the document element. + 元素 %1 無法序列化,因為似乎是在文件元素之外。 + + + Year %1 is invalid because it begins with %2. + 年份 %1 不合法,因為是從 %2 開始的。 + + + Day %1 is outside the range %2..%3. + 日期 %1 已超出 %2 到 %3 的範圍。 + + + Month %1 is outside the range %2..%3. + 月份 %1 已超出 %2 到 %3 的範圍。 + + + Overflow: Can't represent date %1. + 溢位:無法表示日期 %1。 + + + Day %1 is invalid for month %2. + 月份 %2 中沒有日期 %1。 + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + 時間 24:%1:%2.%3 不合法。小時為 24 則分、秒與毫秒都必須是 0。 + + + + Time %1:%2:%3.%4 is invalid. + 時間 %1:%2:%3.%4 不合法。 + + + Overflow: Date can't be represented. + 溢位:無法表示日期。 + + + At least one time component must appear after the %1-delimiter. + 在分隔符 %1 後必須至少有一個時間組件。 + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + 將型態 %1 除以 %2(非數值)是不允許的。 + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + 將型態 %1 除以 %2 或 %3(正或負零)是不允許的。 + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + 將型態 %1 乘以 %2 或 %3(正或負無限大)是不允許的。 + + + A value of type %1 cannot have an Effective Boolean Value. + 型態 %1 不能有實際布林值。 + + + Value %1 of type %2 exceeds maximum (%3). + 型態 %2 的數值 %1 已超過最大值(%3)。 + + + Value %1 of type %2 is below minimum (%3). + 型態 %2 的數值 %1 已低過最小值(%3)。 + + + A value of type %1 must contain an even number of digits. The value %2 does not. + 型態 %1 的值必須包含偶數個數字。數值 %2 未符合此條件。 + + + %1 is not valid as a value of type %2. + %1 不是合法的 %2 型態的值。 + + + Operator %1 cannot be used on type %2. + 操作元 %1 不能用於型態 %2。 + + + Operator %1 cannot be used on atomic values of type %2 and %3. + 操作元 %1 不能用於型態 %2 與 %3 的原數值。 + + + The namespace URI in the name for a computed attribute cannot be %1. + 在已計算屬性的名稱的命名空間網址不能是 %1。 + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + 在已計算屬性的名稱不能同時有命名空間網址 %1 與本地端名稱 %2。 + + + Type error in cast, expected %1, received %2. + 轉換型態錯誤,應為 %1 但接收到 %2。 + + + 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. + 轉換為型態 %1 或其衍生型態時,來源數值必須是相同型態,或者是字串。型態 %2 是不被允許的。 + + + A comment cannot contain %1 + 註解不能包含 %1 + + + A comment cannot end with a %1. + 註解不能以 %1 做結尾 + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + 屬性點不能做為文件點的子節點。因此,屬性 %1 的位置不合適。 + + + A library module cannot be evaluated directly. It must be imported from a main module. + 不能直接計算函式模組。必須要從主模組匯入。 + + + No template by name %1 exists. + 沒有名為 %1 的樣本存在。 + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + 型態 %1 的值不能是謂詞(predicate)。謂詞必須是數值型態,或是實際布林值。 + + + A positional predicate must evaluate to a single numeric value. + 位置謂詞必須能計算出單一的數值。 + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + 處理指令的目標名稱不能是任何大小寫組合的 %1。因此,%2 是不合法的值。 + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 不是一個合法的處理指令的目標名稱。必須是 %2 的值,例如 %3。 + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + 路徑的最後一步必須是節點或原值,而不能在兩者之間。 + + + No namespace binding exists for the prefix %1 + 前置字串 %1 沒有結合命名空間 + + + No namespace binding exists for the prefix %1 in %2 + 在 %2 的前置字串 %1 沒有結合命名空間 + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + 呼叫 %1 的第一個參數不能是 %2 型態。必須是數值型態,xs.yearMonthDuration 或 xs.dayTimeDuration。 + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + 呼叫 %1 的第一個參數不能是 %2 型態。必須是 %3、%4 或 %5 型態。 + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + 呼叫 %1 的第二個參數不能是 %2 型態。必須是 %3、%4 或 %5 型態。 + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + 如果兩個值都有區域位移,則必須是相同的區域位移。%1 與 %2 並不相同。 + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 後面必須跟著 %2 或 %3,而非取代字串的結尾。 + + + %1 and %2 match the start and end of a line. + %1 與 %2 符合了一行的開始與結尾。 + + + Whitespace characters are removed, except when they appear in character classes + 空白字元已移除,除非它們出現在字元類別 + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 是正規表示式中不合法的旗標。合法的旗標有: + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + 如果第一個參數是空序列,或是長度為 0 的字串(沒有命名空間),則無法指定前置字串。但是您指定了 %1。 + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + 未支援常態化表單 %1。支援的表單有 %2、%3、%4、%5,以及無(也就是空字串,未常態化)。 + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + 區域位移必須是在 %1 到 %2 範圍之內。%3 已超出範圍。 + + + Required cardinality is %1; got cardinality %2. + 需要的基數為 %1;得到的是 %2。 + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + 編碼 %1 不合法。必須只能包含拉丁字元,不含空白,並且要符合正規表示式 %2。 + + + The keyword %1 cannot occur with any other mode name. + 關鍵字 %1 不能與任何其它模式名稱一起存在。 + + + No variable with name %1 exists + + + + The value of attribute %1 must be of type %2, which %3 isn't. + + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + + + + A variable with name %1 has already been declared. + + + + No value is available for the external variable with name %1. + + + + A stylesheet function must have a prefixed name. + 樣式表函式必須有前置名稱。 + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + 命名空間 %1 已被保留,因此使用者定義函式不能使用它。請試試預定義前置字串 %2。 + + + An argument with name %1 has already been declared. Every argument name must be unique. + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + 當函式 %1 用於樣式比對時,參數必須是變數參考或字串。 + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + 在 XSL-T 樣式內,函式 %1 的第一個參數必須是字串,以便用於比對。 + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + 在 XSL-T 樣式內,函式 %1 的第一個參數必須是文字或變數參考,以便用於比對。 + + + In an XSL-T pattern, function %1 cannot have a third argument. + 在 XSL-T 樣式內,函式 %1 的不能有第三個參數。 + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + 在 XSL-T 樣式內,只有函式 %1,%2 可以用於比對。%3 不行。 + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + 在 XSL-T 樣式內,不能用 %1 軸,只能用 %2 或 %3。 + + + %1 is an invalid template mode name. + %1 不是合法的樣本模式名稱。 + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + 與 for 敘述結合的變數名稱必須與位置變數不同。因此,有兩個名為 %1 的變數衝突了。 + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + 未支援機制確認功能。%1 敘述無法使用。 + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + 未支援 pragma 敘述。因次,必須有預設的敘述。 + + + Each name of a template parameter must be unique; %1 is duplicated. + 每個樣本參數的名稱必須唯一;%1 已經被使用。 + + + No function with name %1 is available. + + + + %1 is not a valid numeric literal. + %1 不是合法的數值。 + + + W3C XML Schema identity constraint selector + + + + W3C XML Schema identity constraint field + + + + A construct was encountered which is disallowed in the current language(%1). + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + 命名空間 %1 只能與 %2 結合(也就是說,要預先定義)。 + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + 前置字串 %1 只能與 %2 結合(也就是說,要預先定義)。 + + + An attribute with name %1 has already appeared on this element. + + + + A direct element constructor is not well-formed. %1 is ended with %2. + 直接元素建構器沒有完整產生。%1 以 %2 結束。 + + + The name %1 does not refer to any schema type. + 名稱 %1 未指向任何機制型態。 + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 是複數型態,無法轉換成複數型態。然而,轉換為原型態,如 %2 是可行的。 + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 不是一個原型態。只能轉換為原型態。 + + + %1 is not a valid name for a processing-instruction. + %1 不是處理指令的合法名稱。 + + + The name of an extension expression must be in a namespace. + 延伸敘述的名稱必須在命名空間內。 + + + Required type is %1, but %2 was found. + 需要的型態為 %1,但找到 %2。 + + + Promoting %1 to %2 may cause loss of precision. + 將 %1 抬升為 %2 可能會失去精確度。 + + + It's not possible to add attributes after any other kind of node. + 不能在任何其它種類的節點後面加入屬性。 + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + 只支援 Unicode Codepoint Collation(%1)。%2 未支援。; + + + Integer division (%1) by zero (%2) is undefined. + 整數除法 %1 除以零(%2)的行為未定義。 + + + Division (%1) by zero (%2) is undefined. + 除法 %1 除以零(%2)的行為未定義。 + + + Modulus division (%1) by zero (%2) is undefined. + 餘數除法 %1 除以零(%2)的行為未定義。 + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 最多只能有 %n 個參數,因此 %2 是不合法的。 + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 至少需要 %n 個參數,因此 %2 是不合法的。 + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + 函式 %1 的第二個參數的根節點必須是文件節點。%2 不是文件節點。 + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + 使用者定義函式的命名空間不能為空白(請試著用預先定義的前置字串 %1) + + + A default namespace declaration must occur before function, variable, and option declarations. + 預設的命名空間宣告必須在函式、變數與選項宣告之前。 + + + Namespace declarations must occur before function, variable, and option declarations. + 命名空間宣告必須在函式、變數與選項宣告之前。 + + + Module imports must occur before function, variable, and option declarations. + 模組匯入必須在函式、變數與選項宣告之前。 + + + %1 is not a whole number of minutes. + %1 不是分鐘的數值。 + + + Attribute %1 can't be serialized because it appears at the top level. + 屬性元素 %1 無法序列化,因為似乎是在頂層。 + + + %1 is an unsupported encoding. + %1 是個未被支援的編碼。 + + + %1 contains octets which are disallowed in the requested encoding %2. + %1 包含了在要求的編碼 %2 內不允許的八進位值。 + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + 在 %2 內的代碼點 %1(編碼 %3)是一個不合法的 XML 字元。 + + + Ambiguous rule match. + 不明確的規則符合。 + + + In a namespace constructor, the value for a namespace cannot be an empty string. + + + + The prefix must be a valid %1, which %2 is not. + 前置字串必須是合法的 %1,但 %2 不是。 + + + The prefix %1 cannot be bound. + 前置字串 %1 不能被結合。 + + + Only the prefix %1 can be bound to %2 and vice versa. + 只有前置字串 %1 能與 %2 結合。反之亦然。 + + + The parameter %1 is required, but no corresponding %2 is supplied. + 需要參數 %1,但是沒有提供相關的 %2。 + + + The parameter %1 is passed, but no corresponding %2 exists. + 參數 %1 已傳送,但找不到相關的 %2。 + + + The URI cannot have a fragment + URI 不能有片段。 + + + Element %1 is not allowed at this location. + 元素 %1 不能在此位置。 + + + Text nodes are not allowed at this location. + 文字節點不能在此位置。 + + + Parse error: %1 + 剖析錯誤:%1 + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + XLS-T 版本屬性的值必須是型態 %1 的值,而 %2 不是。 + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + 使用 2.0 處理器執行 XSL-T 1.0 樣式表中。 + + + Unknown XSL-T attribute %1. + 未知的 XSL-T 屬性 %1。 + + + Attribute %1 and %2 are mutually exclusive. + 屬性 %1 與 %2 彼此互斥。 + + + In a simplified stylesheet module, attribute %1 must be present. + 在簡化的樣式表模組中,屬性 %1 必須存在。 + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + 若元素 %1 沒有屬性 %2,則也不能有屬性 %3 或 %4。 + + + Element %1 must have at least one of the attributes %2 or %3. + 元素 %1 必須至少有屬性 %2 或 %3 其中一個。 + + + At least one mode must be specified in the %1-attribute on element %2. + 在元素 %2 的 %1 屬性中至少要指定一個模式。 + + + Element %1 must come last. + 元素 %1 必須最後出現。 + + + At least one %1-element must occur before %2. + 至少一個元素 %1 要出現在 %2 之前。 + + + Only one %1-element can appear. + 只能出現一個元素 %1。 + + + At least one %1-element must occur inside %2. + 至少一個元素 %1 要出現在 %2 之內。 + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + 當屬性 %1 出現在 %2 內時,不能使用序列建構子。 + + + Element %1 must have either a %2-attribute or a sequence constructor. + 元素 %1 必須至少有一個屬性 %2 或一個序列建構子。 + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + 當需要參數時,不能透過屬性 %1 或序列建構子提供預設值。 + + + Element %1 cannot have children. + 元素 %1 不能有子元素。 + + + Element %1 cannot have a sequence constructor. + 元素 %1不能有序列建構子。 + + + The attribute %1 cannot appear on %2, when it is a child of %3. + 屬性 %1 不能出現在 %2,因為它是 %3 的子元素。 + + + A parameter in a function cannot be declared to be a tunnel. + 函式內的參數不能被宣告為通道(tunnel)。 + + + This processor is not Schema-aware and therefore %1 cannot be used. + 此處理器不是 Schema-aware,因此不能使用 %1。 + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + 頂層樣式表元素必須是非空白的命名空間,而 %1 不是。 + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + 元素 %2 內屬性 %1 的值必須是 %3 或 %4,而不是 %5。 + + + Attribute %1 cannot have the value %2. + 屬性 %1 的值不能為 %2。 + + + The attribute %1 can only appear on the first %2 element. + 屬性 %1 只能出現在前 %2 個元素內。 + + + At least one %1 element must appear as child of %2. + %2 必須至少有一個子元素 %1。 + + + %1 has inheritance loop in its base type %2. + + + + Circular inheritance of base type %1. + + + + Circular inheritance of union %1. + + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + + + + Base type of simple type %1 cannot be complex type %2. + + + + Simple type %1 cannot have direct base type %2. + + + + Simple type %1 is not allowed to have base type %2. + + + + Simple type %1 can only have simple atomic type as base type. + + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + + + + Variety of item type of %1 must be either atomic or union. + + + + Variety of member types of %1 must be atomic. + + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + + + + Simple type %1 is only allowed to have %2 facet. + + + + Base type of simple type %1 must have variety of type list. + + + + Base type of simple type %1 has defined derivation by restriction as final. + + + + Item type of base type does not match item type of %1. + + + + Simple type %1 contains not allowed facet type %2. + + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + + + + %1 is not allowed to have any facets. + + + + Base type %1 of simple type %2 must have variety of union. + + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + + + + Complex type %1 has duplicated element %2 in its content model. + + + + Complex type %1 has non-deterministic content. + + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + + + + Content model of complex type %1 is not a valid extension of content model of %2. + + + + Complex type %1 must have simple content. + + + + Complex type %1 must have the same simple type as its base class %2. + + + + Complex type %1 cannot be derived from base type %2%3. + + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + + + + Complex type %1 with simple content cannot be derived from complex base type %2. + + + + Item type of simple type %1 cannot be a complex type. + + + + Member type of simple type %1 cannot be a complex type. + + + + %1 is not allowed to have a member type with the same name as itself. + + + + %1 facet collides with %2 facet. + + + + %1 facet must have the same value as %2 facet of base type. + + + + %1 facet must be equal or greater than %2 facet of base type. + + + + %1 facet must be less than or equal to %2 facet of base type. + + + + %1 facet contains invalid regular expression + + + + Unknown notation %1 used in %2 facet. + + + + %1 facet contains invalid value %2: %3. + + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + + %1 facet cannot be %2 if %3 facet of base type is %4. + + + + %1 facet must be less than or equal to %2 facet. + + + + %1 facet must be less than %2 facet of base type. + + + + %1 facet and %2 facet cannot appear together. + + + + %1 facet must be greater than %2 facet of base type. + + + + %1 facet must be less than %2 facet. + + + + %1 facet must be greater than or equal to %2 facet of base type. + + + + Simple type contains not allowed facet %1. + + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + + Only %1 and %2 facets are allowed when derived by union. + + + + %1 contains %2 facet with invalid data: %3. + + + + Attribute group %1 contains attribute %2 twice. + + + + Attribute group %1 contains two different attributes that both have types derived from %2. + + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Complex type %1 contains attribute %2 twice. + + + + Complex type %1 contains two different attributes that both have types derived from %2. + + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Element %1 is not allowed to have a value constraint if its base type is complex. + + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + + + + Value constraint of element %1 is not of elements type: %2. + + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + + + + Type of element %1 cannot be derived from type of substitution group affiliation. + + + + Value constraint of attribute %1 is not of attributes type: %2. + + + + Attribute %1 has value constraint but has type derived from %2. + + + + %1 attribute in derived complex type must be %2 like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint. + + + + processContent of base wildcard must be weaker than derived wildcard. + + + + Element %1 exists twice with different types. + + + + Particle contains non-deterministic wildcards. + + + + Base attribute %1 is required but derived attribute is not. + + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + + + + Derived attribute %1 does not exist in the base definition. + + + + Derived attribute %1 does not match the wildcard in the base definition. + + + + Base attribute %1 is required but missing in derived definition. + + + + Derived definition contains an %1 element that does not exists in the base definition + + + + Derived wildcard is not a subset of the base wildcard. + + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + + + + Attribute %1 from base type is missing in derived type. + + + + Type of derived attribute %1 differs from type of base attribute. + + + + Base definition contains an %1 element that is missing in the derived definition + + + + %1 references unknown %2 or %3 element %4. + + + + %1 references identity constraint %2 that is no %3 or %4 element. + + + + %1 has a different number of fields from the identity constraint %2 that it references. + + + + Base type %1 of %2 element cannot be resolved. + + + + Item type %1 of %2 element cannot be resolved. + + + + Member type %1 of %2 element cannot be resolved. + + + + Type %1 of %2 element cannot be resolved. + + + + Base type %1 of complex type cannot be resolved. + + + + %1 cannot have complex base type that has a %2. + + + + Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type. + + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + + + + Type of %1 element must be a simple type, %2 is not. + + + + Substitution group %1 of %2 element cannot be resolved. + + + + Substitution group %1 has circular definition. + + + + Duplicated element names %1 in %2 element. + + + + Reference %1 of %2 element cannot be resolved. + + + + Circular group reference for %1. + + + + %1 element is not allowed in this scope + + + + %1 element cannot have %2 attribute with value other than %3. + + + + %1 element cannot have %2 attribute with value other than %3 or %4. + + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + + + + Attribute group %1 has circular reference. + + + + %1 attribute in %2 must have %3 use like in base type %4. + + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + + + + %1 has attribute wildcard but its base type %2 has not. + + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + + + + Namespace prefix of qualified name %1 is not defined. + + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + + Empty particle cannot be derived from non-empty particle. + + + + Derived particle is missing element %1. + + + + Derived element %1 is missing value constraint as defined in base particle. + + + + Derived element %1 has weaker value constraint than base particle. + + + + Fixed value constraint of element %1 differs from value constraint in base particle. + + + + Derived element %1 cannot be nillable as base element is not nillable. + + + + Block constraints of derived element %1 must not be more weaker than in the base element. + + + + Simple type of derived element %1 cannot be validly derived from base element. + + + + Complex type of derived element %1 cannot be validly derived from base element. + + + + Element %1 is missing in derived particle. + + + + Element %1 does not match namespace constraint of wildcard in base particle. + + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + + + + Derived particle allows content that is not allowed in the base particle. + + + + Can not process unknown element %1, expected elements are: %2. + + + + Element %1 is not allowed in this scope, possible elements are: %2. + + + + Child element is missing in that scope, possible child elements are: %1. + + + + Document is not a XML schema. + + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + + %1 attribute of %2 element contains invalid content: {%3}. + + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + + %1 element is not allowed inside %2 element if %3 attribute is present. + + + + %1 element has neither %2 attribute nor %3 child element. + + + + %1 element with %2 child element must not have a %3 attribute. + + + + %1 attribute of %2 element must be %3 or %4. + + + + %1 attribute of %2 element must have a value of %3. + + + + %1 attribute of %2 element must have a value of %3 or %4. + + + + %1 element must not have %2 and %3 attribute together. + + + + Content of %1 attribute of %2 element must not be from namespace %3. + + + + %1 attribute of %2 element must not be %3. + + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + + Specifying use='prohibited' inside an attribute group has no effect. + + + + %1 element must have either %2 or %3 attribute. + + + + %1 element must have either %2 attribute or %3 or %4 as child element. + + + + %1 element requires either %2 or %3 attribute. + + + + Text or entity references not allowed inside %1 element + + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + + %1 element is not allowed in this context. + + + + %1 attribute of %2 element has larger value than %3 attribute. + + + + Prefix of qualified name %1 is not defined. + + + + %1 attribute of %2 element must either contain %3 or the other values. + + + + Component with ID %1 has been defined previously. + + + + Element %1 already defined. + + + + Attribute %1 already defined. + + + + Type %1 already defined. + + + + Attribute group %1 already defined. + + + + Element group %1 already defined. + + + + Notation %1 already defined. + + + + Identity constraint %1 already defined. + + + + Duplicated facets in simple type %1. + + + + %1 is not valid according to %2. + + + + String content does not match the length facet. + + + + String content does not match the minLength facet. + + + + String content does not match the maxLength facet. + + + + String content does not match pattern facet. + + + + String content is not listed in the enumeration facet. + + + + Signed integer content does not match the maxInclusive facet. + + + + Signed integer content does not match the maxExclusive facet. + + + + Signed integer content does not match the minInclusive facet. + + + + Signed integer content does not match the minExclusive facet. + + + + Signed integer content is not listed in the enumeration facet. + + + + Signed integer content does not match pattern facet. + + + + Signed integer content does not match in the totalDigits facet. + + + + Unsigned integer content does not match the maxInclusive facet. + + + + Unsigned integer content does not match the maxExclusive facet. + + + + Unsigned integer content does not match the minInclusive facet. + + + + Unsigned integer content does not match the minExclusive facet. + + + + Unsigned integer content is not listed in the enumeration facet. + + + + Unsigned integer content does not match pattern facet. + + + + Unsigned integer content does not match in the totalDigits facet. + + + + Double content does not match the maxInclusive facet. + + + + Double content does not match the maxExclusive facet. + + + + Double content does not match the minInclusive facet. + + + + Double content does not match the minExclusive facet. + + + + Double content is not listed in the enumeration facet. + + + + Double content does not match pattern facet. + + + + Decimal content does not match in the fractionDigits facet. + + + + Decimal content does not match in the totalDigits facet. + + + + Date time content does not match the maxInclusive facet. + + + + Date time content does not match the maxExclusive facet. + + + + Date time content does not match the minInclusive facet. + + + + Date time content does not match the minExclusive facet. + + + + Date time content is not listed in the enumeration facet. + + + + Date time content does not match pattern facet. + + + + Duration content does not match the maxInclusive facet. + + + + Duration content does not match the maxExclusive facet. + + + + Duration content does not match the minInclusive facet. + + + + Duration content does not match the minExclusive facet. + + + + Duration content is not listed in the enumeration facet. + + + + Duration content does not match pattern facet. + + + + Boolean content does not match pattern facet. + + + + Binary content does not match the length facet. + + + + Binary content does not match the minLength facet. + + + + Binary content does not match the maxLength facet. + + + + Binary content is not listed in the enumeration facet. + + + + Invalid QName content: %1. + + + + QName content is not listed in the enumeration facet. + + + + QName content does not match pattern facet. + + + + Notation content is not listed in the enumeration facet. + + + + List content does not match length facet. + + + + List content does not match minLength facet. + + + + List content does not match maxLength facet. + + + + List content is not listed in the enumeration facet. + + + + List content does not match pattern facet. + + + + Union content is not listed in the enumeration facet. + + + + Union content does not match pattern facet. + + + + Data of type %1 are not allowed to be empty. + + + + Element %1 is missing child element. + + + + There is one IDREF value with no corresponding ID: %1. + + + + Loaded schema file is invalid. + + + + %1 contains invalid data. + + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + + + + No schema defined for validation. + + + + No definition for element %1 available. + + + + Specified type %1 is not known to the schema. + + + + Element %1 is not defined in this scope. + + + + Declaration for element %1 does not exist. + + + + Element %1 contains invalid content. + + + + Element %1 is declared as abstract. + + + + Element %1 is not nillable. + + + + Attribute %1 contains invalid data: %2 + + + + Element contains content although it is nillable. + + + + Fixed value constraint not allowed if element is nillable. + + + + Element %1 cannot contain other elements, as it has a fixed content. + + + + Specified type %1 is not validly substitutable with element type %2. + + + + Complex type %1 is not allowed to be abstract. + + + + Element %1 contains not allowed attributes. + + + + Element %1 contains not allowed child element. + + + + Content of element %1 does not match its type definition: %2. + + + + Content of element %1 does not match defined value constraint. + + + + Element %1 contains not allowed child content. + + + + Element %1 contains not allowed text content. + + + + Element %1 is missing required attribute %2. + + + + Attribute %1 does not match the attribute wildcard. + + + + Declaration for attribute %1 does not exist. + + + + Element %1 contains two attributes of type %2. + + + + Attribute %1 contains invalid content. + + + + Element %1 contains unknown attribute %2. + + + + Content of attribute %1 does not match its type definition: %2. + + + + Content of attribute %1 does not match defined value constraint. + + + + Non-unique value found for constraint %1. + + + + Key constraint %1 contains absent fields. + + + + Key constraint %1 contains references nillable element %2. + + + + No referenced value found for key reference %1. + + + + More than one value found for field %1. + + + + Field %1 has no simple type. + + + + ID value '%1' is not unique. + + + + '%1' attribute contains invalid QName content: %2. + + + + diff --git a/config.profiles/symbian/translations_symbian/translations.pro b/config.profiles/symbian/translations_symbian/translations.pro new file mode 100644 index 0000000..f304c1b --- /dev/null +++ b/config.profiles/symbian/translations_symbian/translations.pro @@ -0,0 +1,16 @@ +TEMPLATE = subdirs + + +symbian: { +SYMBIANTRANSLATIONSFILES = qt +SYMBIANTRANSLATIONS = ur fa ar he fr pl ru zh_cn zh_tw cs da de es gl hu ja pt sk sl sv uk + +CONFIG = loc + +for( FILE, SYMBIANTRANSLATIONSFILES ) { + for( LANGID, SYMBIANTRANSLATIONS ) { + TRANSLATIONS += $${EPOCROOT}epoc32/include/platform/qt/translations/$${FILE}_$${LANGID}.ts + } +} + +} \ No newline at end of file -- cgit v0.12 From 8a3c4c8283e4762744a29262ce507713565c1c0c Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Wed, 22 Dec 2010 17:13:30 +0100 Subject: Fix crash in indeterminate progressbars on windows Note that this is a surgical fix for 4.7 only. In 4.8 we will add these checks at the top of the styling functions or in the widgets instead. Task-number:QTBUG-15227 Reviewed-by:gabi --- src/gui/styles/qcommonstyle.cpp | 5 +++-- src/gui/styles/qwindowsstyle.cpp | 4 +++- tests/auto/qstyle/tst_qstyle.cpp | 7 +++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 039a6da..1d7c838 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -1403,8 +1403,9 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, } break; case CE_ProgressBarGroove: - qDrawShadePanel(p, opt->rect, opt->palette, true, 1, - &opt->palette.brush(QPalette::Window)); + if (opt->rect.isValid()) + qDrawShadePanel(p, opt->rect, opt->palette, true, 1, + &opt->palette.brush(QPalette::Window)); break; case CE_ProgressBarLabel: if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 654be3c..32a6d8d 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -2397,8 +2397,10 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai #ifndef QT_NO_PROGRESSBAR case CE_ProgressBarContents: if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - QRect rect = pb->rect; + if (!rect.isValid()) + return; + bool vertical = false; bool inverted = false; diff --git a/tests/auto/qstyle/tst_qstyle.cpp b/tests/auto/qstyle/tst_qstyle.cpp index ba24225..9c754d2 100644 --- a/tests/auto/qstyle/tst_qstyle.cpp +++ b/tests/auto/qstyle/tst_qstyle.cpp @@ -413,6 +413,13 @@ void tst_QStyle::testWindowsStyle() QWindowsStyle wstyle; testAllFunctions(&wstyle); lineUpLayoutTest(&wstyle); + + // Tests drawing indeterminate progress with 0 size: QTBUG-15973 + QStyleOptionProgressBar pb; + pb.rect = QRect(0,0,-9,0); + QPixmap surface(QSize(200, 200)); + QPainter painter(&surface); + wstyle.drawControl(QStyle::CE_ProgressBar, &pb, &painter, 0); } void tst_QStyle::testWindowsXPStyle() -- cgit v0.12 From 3c20105f2344172cb1dce95864c0c3b70497f029 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 22 Dec 2010 16:22:57 +0000 Subject: Fix qfile test crash with glibc The test was using a FILE* after closing it (which was a pointer to deleted memory). glibc detects and asserts on this. If the test failed, then file could be closed twice too, so I fixed that at the same time. (would have caused a double free) Reviewed-by: joao --- tests/auto/qfile/tst_qfile.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp index 4e18ec4..18478e3 100644 --- a/tests/auto/qfile/tst_qfile.cpp +++ b/tests/auto/qfile/tst_qfile.cpp @@ -75,6 +75,7 @@ #endif #include +#include #include "../network-settings.h" #if defined(Q_OS_SYMBIAN) @@ -3339,16 +3340,17 @@ void tst_QFile::autocloseHandle() { QFile file("readonlyfile"); QVERIFY(openFile(file, QIODevice::ReadOnly, OpenFd, QFile::AutoCloseHandle)); - QCOMPARE(file.handle(), fd_); + int fd = fd_; + QCOMPARE(file.handle(), fd); file.close(); + fd_ = -1; QCOMPARE(file.handle(), -1); AutoIgnoreInvalidParameter a; Q_UNUSED(a); //file is closed, read should fail char buf; - QCOMPARE(QT_READ(fd_, &buf, 1), -1); + QCOMPARE(QT_READ(fd, &buf, 1), -1); QVERIFY(errno = EBADF); - fd_ = -1; } { @@ -3367,15 +3369,16 @@ void tst_QFile::autocloseHandle() { QFile file("readonlyfile"); QVERIFY(openFile(file, QIODevice::ReadOnly, OpenStream, QFile::AutoCloseHandle)); - QCOMPARE(file.handle(), fileno(stream_)); + int fd = fileno(stream_); + QCOMPARE(file.handle(), fd); file.close(); + stream_ = 0; QCOMPARE(file.handle(), -1); AutoIgnoreInvalidParameter a; Q_UNUSED(a); //file is closed, read should fail char buf; - QCOMPARE(int(::fread(&buf, 1, 1, stream_)), 0); - stream_ = 0; + QCOMPARE(QT_READ(fd, &buf, 1), -1); //not using fread because the FILE* was freed by fclose } { -- cgit v0.12 From b461c315547b42293968219583187d83b2b25e0f Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 22 Dec 2010 09:23:48 +1000 Subject: Add additional QDeclarativeProperty autotests. --- .../tst_qdeclarativeproperty.cpp | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp index 3cc71bb..41f2b19 100644 --- a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp +++ b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp @@ -167,6 +167,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), false); QCOMPARE(prop.object(), (QObject *)0); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -263,6 +264,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), false); QCOMPARE(prop.object(), (QObject *)0); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -309,6 +311,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::Normal); @@ -362,6 +365,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), false); QCOMPARE(prop.object(), (QObject *)0); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -408,6 +412,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::Normal); @@ -456,6 +461,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), true); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -503,6 +509,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), true); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -555,6 +562,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_context() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), false); QCOMPARE(prop.object(), (QObject *)0); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -601,6 +609,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_context() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::Normal); @@ -654,6 +663,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), false); QCOMPARE(prop.object(), (QObject *)0); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -700,6 +710,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), true); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), false); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::Normal); @@ -748,6 +759,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), true); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -795,6 +807,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.isWritable(), false); QCOMPARE(prop.isDesignable(), false); QCOMPARE(prop.isResettable(), false); + QCOMPARE(prop.isSignalProperty(), true); QCOMPARE(prop.isValid(), true); QCOMPARE(prop.object(), qobject_cast(&dobject)); QCOMPARE(prop.propertyTypeCategory(), QDeclarativeProperty::InvalidCategory); @@ -922,6 +935,17 @@ void tst_qdeclarativeproperty::read() QCOMPARE(p.read(), QVariant("myName")); } + // Value prop by name (static) + { + QObject o; + + QCOMPARE(QDeclarativeProperty::read(&o, "objectName"), QVariant(QString())); + + o.setObjectName("myName"); + + QCOMPARE(QDeclarativeProperty::read(&o, "objectName"), QVariant("myName")); + } + // Value-type prop { PropertyObject o; @@ -994,6 +1018,16 @@ void tst_qdeclarativeproperty::read() QCOMPARE(qvariant_cast(v)->property("a").toInt(), 10); QCOMPARE(qvariant_cast(v)->property("b").toInt(), 19); } + { // static + QDeclarativeComponent component(&engine, TEST_FILE("readSynthesizedObject.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QVariant v = QDeclarativeProperty::read(object, "test", &engine); + QVERIFY(v.userType() == QMetaType::QObjectStar); + QCOMPARE(qvariant_cast(v)->property("a").toInt(), 10); + QCOMPARE(qvariant_cast(v)->property("b").toInt(), 19); + } // Attached property { @@ -1026,6 +1060,15 @@ void tst_qdeclarativeproperty::read() QCOMPARE(p.read(), QVariant(10)); delete object; } + { // static + QDeclarativeComponent component(&engine); + component.setData("import Test 1.0 as Foo\nFoo.MyContainer { Foo.MyContainer.foo: 10 }", QUrl()); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(QDeclarativeProperty::read(object, "Foo.MyContainer.foo", qmlContext(object)), QVariant(10)); + delete object; + } } void tst_qdeclarativeproperty::write() @@ -1066,6 +1109,13 @@ void tst_qdeclarativeproperty::write() QCOMPARE(o.objectName(), QString("myName")); } + // Writable prop by name (static) + { + PropertyObject o; + QCOMPARE(QDeclarativeProperty::write(&o, QString("objectName"), QVariant(QString("myName"))), true); + QCOMPARE(o.objectName(), QString("myName")); + } + // Deleted object { PropertyObject *o = new PropertyObject; @@ -1138,6 +1188,18 @@ void tst_qdeclarativeproperty::write() QCOMPARE(p2.write(QUrl("main.qml")), true); QCOMPARE(o.url(), result); } + { // static + PropertyObject o; + + QCOMPARE(QDeclarativeProperty::write(&o, "url", QUrl("main.qml")), true); + QCOMPARE(o.url(), QUrl("main.qml")); + + QUrl result = engine.baseUrl().resolved(QUrl("main.qml")); + QVERIFY(result != QUrl("main.qml")); + + QCOMPARE(QDeclarativeProperty::write(&o, "url", QUrl("main.qml"), engine.rootContext()), true); + QCOMPARE(o.url(), result); + } // Attached property { -- cgit v0.12 From f360cc9b521e5e3e7d4b896627b3257365c6ad3c Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 22 Dec 2010 10:05:06 +1000 Subject: Improve QDeclarativeComponent test coverage. --- src/declarative/qml/qdeclarativecomponent.cpp | 11 ----------- src/declarative/qml/qdeclarativecomponent_p.h | 1 - .../qdeclarativecomponent/tst_qdeclarativecomponent.cpp | 15 +++++++++++++++ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 77fc925..ecb3bc5 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -699,17 +699,6 @@ QObject *QDeclarativeComponent::create(QDeclarativeContext *context) return rv; } -QObject *QDeclarativeComponentPrivate::create(QDeclarativeContextData *context, - const QBitField &bindings) -{ - if (!context) - context = QDeclarativeContextData::get(engine->rootContext()); - - QObject *rv = beginCreate(context, bindings); - completeCreate(); - return rv; -} - /*! This method provides more advanced control over component instance creation. In general, programmers should use QDeclarativeComponent::create() to create a diff --git a/src/declarative/qml/qdeclarativecomponent_p.h b/src/declarative/qml/qdeclarativecomponent_p.h index 7b30bad..daf1dcb 100644 --- a/src/declarative/qml/qdeclarativecomponent_p.h +++ b/src/declarative/qml/qdeclarativecomponent_p.h @@ -81,7 +81,6 @@ class Q_AUTOTEST_EXPORT QDeclarativeComponentPrivate : public QObjectPrivate, pu public: QDeclarativeComponentPrivate() : typeData(0), progress(0.), start(-1), count(-1), cc(0), engine(0), creationContext(0) {} - QObject *create(QDeclarativeContextData *, const QBitField &); QObject *beginCreate(QDeclarativeContextData *, const QBitField &); void completeCreate(); diff --git a/tests/auto/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp b/tests/auto/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp index 8a19b8b..60ce46d 100644 --- a/tests/auto/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp +++ b/tests/auto/declarative/qdeclarativecomponent/tst_qdeclarativecomponent.cpp @@ -57,6 +57,7 @@ public: tst_qdeclarativecomponent() { } private slots: + void null(); void loadEmptyUrl(); void qmlCreateObject(); @@ -64,6 +65,20 @@ private: QDeclarativeEngine engine; }; +void tst_qdeclarativecomponent::null() +{ + { + QDeclarativeComponent c; + QVERIFY(c.isNull()); + } + + { + QDeclarativeComponent c(&engine); + QVERIFY(c.isNull()); + } +} + + void tst_qdeclarativecomponent::loadEmptyUrl() { QDeclarativeComponent c(&engine); -- cgit v0.12 From 01fd44cd76f2da1dd1e39d7e5632b3274ca895a3 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 23 Dec 2010 10:20:23 +1000 Subject: Nested flickables would react alternately to flicks. The grab was not always kept by filtering Flickables, but would remain set next flick, resulting in toggling of flicking. Task-number: QTBUG-16177 Reviewed-by: Michael Brasser --- .../graphicsitems/qdeclarativeflickable.cpp | 6 +- .../data/flickable-nested.0.png | Bin 0 -> 1710 bytes .../data/flickable-nested.1.png | Bin 0 -> 1710 bytes .../data/flickable-nested.2.png | Bin 0 -> 1727 bytes .../data/flickable-nested.3.png | Bin 0 -> 1727 bytes .../data/flickable-nested.4.png | Bin 0 -> 1727 bytes .../data/flickable-nested.5.png | Bin 0 -> 1731 bytes .../data/flickable-nested.qml | 2159 ++++++++++++++++++++ .../qdeclarativeflickable/flickable-nested.qml | 50 + 9 files changed, 2213 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-nested.qml diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index f1d92c5..f5da491 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -671,10 +671,12 @@ void QDeclarativeFlickable::setFlickableDirection(FlickableDirection direction) void QDeclarativeFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event) { + Q_Q(QDeclarativeFlickable); if (interactive && timeline.isActive() && (qAbs(hData.velocity) > 10 || qAbs(vData.velocity) > 10)) stealMouse = true; // If we've been flicked then steal the click. else stealMouse = false; + q->setKeepMouseGrab(stealMouse); pressed = true; timeline.clear(); hData.velocity = 0; @@ -769,6 +771,8 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent } stealMouse = stealX || stealY; + if (stealMouse) + q->setKeepMouseGrab(true); if (!lastPos.isNull()) { qreal elapsed = qreal(QDeclarativeItemPrivate::restart(lastPosTime)) / 1000.; @@ -848,8 +852,6 @@ void QDeclarativeFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event) Q_D(QDeclarativeFlickable); if (d->interactive) { d->handleMouseMoveEvent(event); - if (d->stealMouse) - setKeepMouseGrab(true); event->accept(); } else { QDeclarativeItem::mouseMoveEvent(event); diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.0.png new file mode 100644 index 0000000..464d913 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.1.png new file mode 100644 index 0000000..464d913 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.2.png new file mode 100644 index 0000000..b16b9f0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.3.png new file mode 100644 index 0000000..c3d2a6f Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.4.png new file mode 100644 index 0000000..d074e73 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.5.png new file mode 100644 index 0000000..0cac34c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.qml new file mode 100644 index 0000000..c418cc8 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-nested.qml @@ -0,0 +1,2159 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "flickable-nested.0.png" + } + Frame { + msec: 32 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 48 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 64 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 80 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 96 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 112 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 128 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 144 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 160 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 176 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 192 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 208 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 224 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 240 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 256 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 272 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 288 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 304 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 320 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 336 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 352 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 368 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 384 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 400 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 416 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 432 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 448 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 464 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 480 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 496 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 512 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 528 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 544 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 560 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 576 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 592 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 608 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 624 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 640 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 656 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 672 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 688 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 704 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 720 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 736 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 752 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 768 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 784 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 800 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 816 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 832 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 848 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 864 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 880 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 896 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 912 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 928 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 206; y: 205 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 944 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Frame { + msec: 960 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 976 + image: "flickable-nested.1.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 203 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 202 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 992 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 201 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 199 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1008 + hash: "7523750f0fd21aff13e6ab379e87640d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 197 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 202; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1024 + hash: "bddf8ca2638c9a04f7029d6982152d11" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 191 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1040 + hash: "bc15f1b562879d5058d3b1336fb9074e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 185 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 184 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1056 + hash: "3572c62d7d2b9b23a8d9d3e5037591dd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 182 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 194; y: 182 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1072 + hash: "ce9658887cca581a88e7db14b92d46f2" + } + Frame { + msec: 1088 + hash: "e1fe1a2e1669a200e20468b4aa98dd3d" + } + Frame { + msec: 1104 + hash: "b7582829bf01223e6641ce82f62047df" + } + Frame { + msec: 1120 + hash: "80bd41fe22fb84efb011acf50ec38574" + } + Frame { + msec: 1136 + hash: "04c8d6c3922ce9777ee27d8df59d4729" + } + Frame { + msec: 1152 + hash: "f84dba18e525f1c06548c0232a244b6d" + } + Frame { + msec: 1168 + hash: "26c74b95835e8e0da5aadc7c42cac81c" + } + Frame { + msec: 1184 + hash: "1b4fcb1f0bd83a683cfe0ac303be0033" + } + Frame { + msec: 1200 + hash: "1b4fcb1f0bd83a683cfe0ac303be0033" + } + Frame { + msec: 1216 + hash: "4df47f90656fff253883e3e2d33506dc" + } + Frame { + msec: 1232 + hash: "4df47f90656fff253883e3e2d33506dc" + } + Frame { + msec: 1248 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1264 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1280 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1296 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1312 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1328 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1344 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1360 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1376 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1392 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1408 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1424 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1440 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1456 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1472 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1488 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1504 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1520 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1536 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1552 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1568 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1584 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Frame { + msec: 1600 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 226; y: 218 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1616 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 225; y: 218 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1632 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 223; y: 217 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 222; y: 217 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1648 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 220; y: 216 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 218; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1664 + hash: "7d0d94c4a7a9330f5bd17782ca484848" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 214; y: 212 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 212; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1680 + hash: "54b41609ba43f710b08ba63f0b96df99" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 208 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 207 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1696 + hash: "8910b66b9eb1b2be80e36ed2824df1a0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 205 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 205; y: 205 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1712 + hash: "38df31933f34f961a9b7020ad0d469c2" + } + Frame { + msec: 1728 + hash: "7702a7f710991225d9f411e8f410b515" + } + Frame { + msec: 1744 + hash: "c90d402e68208ccfd2c7345a2bf650cd" + } + Frame { + msec: 1760 + hash: "2630ed37aaf37907d1ee48efb0239615" + } + Frame { + msec: 1776 + hash: "527725818699ce3425b5cb95a25610d5" + } + Frame { + msec: 1792 + hash: "7bd6e37853946a835973c3da213beddc" + } + Frame { + msec: 1808 + hash: "e3c5e113d992e5e50b6780185891edd7" + } + Frame { + msec: 1824 + hash: "e3c5e113d992e5e50b6780185891edd7" + } + Frame { + msec: 1840 + hash: "20ced2b9960931c4c0cbe8bcc1f9e52a" + } + Frame { + msec: 1856 + hash: "09710c8964c8b010a90c67f126acdefa" + } + Frame { + msec: 1872 + hash: "09710c8964c8b010a90c67f126acdefa" + } + Frame { + msec: 1888 + hash: "09710c8964c8b010a90c67f126acdefa" + } + Frame { + msec: 1904 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 1920 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 1936 + image: "flickable-nested.2.png" + } + Frame { + msec: 1952 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 1968 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 1984 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2000 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2016 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2032 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2048 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2064 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2080 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2096 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2112 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2128 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2144 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2160 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2176 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2192 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2208 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2224 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2240 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2256 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2272 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2288 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Frame { + msec: 2304 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 274; y: 218 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2320 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 273; y: 218 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 273; y: 217 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2336 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 272; y: 215 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 272; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2352 + hash: "e80b03bd168ec62aba64cdf75dcd1d5f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 271; y: 210 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 270; y: 208 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2368 + hash: "79a132ab719ccdf48d367cca443cd835" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 269; y: 204 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 269; y: 202 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2384 + hash: "1f19e7d2c7494f5b603dee16e211d65d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 268; y: 196 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 268; y: 193 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2400 + hash: "64fd22407c77fac28d13035ce78c67b2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 268; y: 186 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 266; y: 177 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2416 + hash: "f05a0f956b4964d4ebff056b63252297" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 265; y: 173 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 264; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2432 + hash: "3de1e9a2b33e37b0fe3b799b68ec22d6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 263; y: 164 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 263; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2448 + hash: "71f115c60d4f20422e4ac3f319644c48" + } + Frame { + msec: 2464 + hash: "c3995ac89f0a4b3fb07401479538d338" + } + Frame { + msec: 2480 + hash: "950e83408adf55f4e7fc1c0c127caa89" + } + Frame { + msec: 2496 + hash: "5b335621a76a527d058708384c2e5635" + } + Frame { + msec: 2512 + hash: "a201ae31d5bb778bd44a49dd21951c1b" + } + Frame { + msec: 2528 + hash: "550e6708a8999d56d1f57c121228692f" + } + Frame { + msec: 2544 + hash: "d8eb4dd2b3cf50273cb7dfbb5bd658b9" + } + Frame { + msec: 2560 + hash: "aa1fd0a990e42175acc84de96b384e9d" + } + Frame { + msec: 2576 + hash: "0236fb15db30da5ec794444affee1169" + } + Frame { + msec: 2592 + hash: "a7445a70874a9767462e79e1dff88dbc" + } + Frame { + msec: 2608 + hash: "339ea6bd5b486ff85272e19e07669f0b" + } + Frame { + msec: 2624 + hash: "2b24d9d17c77cd0ac52989328dcf499b" + } + Frame { + msec: 2640 + hash: "2b24d9d17c77cd0ac52989328dcf499b" + } + Frame { + msec: 2656 + hash: "e2fcfe4f3e14e46404eb6955502180a1" + } + Frame { + msec: 2672 + hash: "5d0c9601b871690047f4df91723ccfb1" + } + Frame { + msec: 2688 + hash: "5d0c9601b871690047f4df91723ccfb1" + } + Frame { + msec: 2704 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2720 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2736 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2752 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2768 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2784 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2800 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2816 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2832 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2848 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2864 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2880 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2896 + image: "flickable-nested.3.png" + } + Frame { + msec: 2912 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2928 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2944 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Frame { + msec: 2960 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 268; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2976 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 268; y: 103 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 268; y: 104 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2992 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 268; y: 105 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 269; y: 108 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3008 + hash: "5b5d7e880e9f4942f52a3cde738dc7fb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 270; y: 111 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 270; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3024 + hash: "2b24d9d17c77cd0ac52989328dcf499b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 271; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 272; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3040 + hash: "550e6708a8999d56d1f57c121228692f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 273; y: 130 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 274; y: 138 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3056 + hash: "57f3c0a49cef2137e3cfa435396c099e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 274; y: 142 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 274; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3072 + hash: "0fffc659a270cc614d16ddf3fa2ab51d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 274; y: 153 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 274; y: 161 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3088 + hash: "a8d937c8379950299a6e3611ff313415" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 273; y: 165 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 272; y: 172 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3104 + hash: "46cfebbf821a08aa30055bfa8fffd137" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 271; y: 175 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 270; y: 180 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 270; y: 180 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3120 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3136 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3152 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3168 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3184 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3200 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3216 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3232 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3248 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3264 + hash: "20a32ee8ae2cf88a2cfdb2dd8552255a" + } + Frame { + msec: 3280 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3296 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3312 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3328 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3344 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3360 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3376 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3392 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3408 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3424 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3440 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3456 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3472 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3488 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3504 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3520 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3536 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3552 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3568 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 3584 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 352; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3600 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 205 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3616 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 201 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3632 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 193 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 185 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3648 + hash: "eb718f97648438dae1440e2089434b0a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 176 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 172 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3664 + hash: "e4a2b82752939f351ac46032f2d3333e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 353; y: 163 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 354; y: 158 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3680 + hash: "ab1099a146433a5ec77b336673d0527c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 356; y: 148 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 356; y: 142 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3696 + hash: "7e4ca5ba45d5de10d72ef5ab1171ead5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 357; y: 130 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 357; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3712 + hash: "417bb78fc4f255194a71193e388b752f" + } + Frame { + msec: 3728 + hash: "be63b1e57006d881a345db3ca66e7097" + } + Frame { + msec: 3744 + hash: "e1b96137c2cc0ef18e224a32f665de9d" + } + Frame { + msec: 3760 + hash: "6157ba3962fc7829e8693e2456fd6e8e" + } + Frame { + msec: 3776 + hash: "951ae231b7b18517f8d6504ce7f01b3d" + } + Frame { + msec: 3792 + hash: "57f60f9da1a204cc7eb930575de45ae4" + } + Frame { + msec: 3808 + hash: "008323603b48a55b589af7cbb2f1c8b0" + } + Frame { + msec: 3824 + hash: "b8447e994280cba5ccddc36e7ad3c927" + } + Frame { + msec: 3840 + hash: "98dfc2d6573e5cb7a56a893b8fecf422" + } + Frame { + msec: 3856 + image: "flickable-nested.4.png" + } + Frame { + msec: 3872 + hash: "09dabc3ef85dc857719e7d20111e6023" + } + Frame { + msec: 3888 + hash: "5864c4197fe3269c3f1ad05caf25832e" + } + Frame { + msec: 3904 + hash: "370a471a614d22d281d9987a5b6a42bf" + } + Frame { + msec: 3920 + hash: "36c74e2e325807c7c06e941581613f48" + } + Frame { + msec: 3936 + hash: "e1e2b69992294dc611e6eef7e259d4cd" + } + Frame { + msec: 3952 + hash: "e1e2b69992294dc611e6eef7e259d4cd" + } + Frame { + msec: 3968 + hash: "e1e2b69992294dc611e6eef7e259d4cd" + } + Frame { + msec: 3984 + hash: "36c74e2e325807c7c06e941581613f48" + } + Frame { + msec: 4000 + hash: "36c74e2e325807c7c06e941581613f48" + } + Frame { + msec: 4016 + hash: "bd8f39423d96fceaf577c7f792b61211" + } + Frame { + msec: 4032 + hash: "370a471a614d22d281d9987a5b6a42bf" + } + Frame { + msec: 4048 + hash: "c8fe4424d96460a2503632e3a54d4f6a" + } + Frame { + msec: 4064 + hash: "09dabc3ef85dc857719e7d20111e6023" + } + Frame { + msec: 4080 + hash: "22bff1406eba529d58320b8b19be76d9" + } + Frame { + msec: 4096 + hash: "478bc04322b93b75b5185d047c2898b7" + } + Frame { + msec: 4112 + hash: "98dfc2d6573e5cb7a56a893b8fecf422" + } + Frame { + msec: 4128 + hash: "03b96d3e148e86f1150b09696012d07c" + } + Frame { + msec: 4144 + hash: "735b24d2811beef969477c8b0f400d32" + } + Frame { + msec: 4160 + hash: "b8399d2a7a6de0b5f81e68e8f8825622" + } + Frame { + msec: 4176 + hash: "766a97e0881b623a0de93babfa841125" + } + Frame { + msec: 4192 + hash: "008323603b48a55b589af7cbb2f1c8b0" + } + Frame { + msec: 4208 + hash: "3da913235e4916b4691e3d089dc7b52f" + } + Frame { + msec: 4224 + hash: "3da913235e4916b4691e3d089dc7b52f" + } + Frame { + msec: 4240 + hash: "8c7f6ff7b3db65d7dd9ac4d18545f0d1" + } + Frame { + msec: 4256 + hash: "8c7f6ff7b3db65d7dd9ac4d18545f0d1" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 346; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4272 + hash: "8c7f6ff7b3db65d7dd9ac4d18545f0d1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 346; y: 98 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 346; y: 103 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4288 + hash: "951ae231b7b18517f8d6504ce7f01b3d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 348; y: 110 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 348; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4304 + hash: "364283bbbcedabc87689ec174ae29818" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 351; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 353; y: 129 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4320 + hash: "6a8a59ba8cf0539704fc035d7d5def41" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 358; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 361; y: 145 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4336 + hash: "d4626b39fbf24cc6a4e23ef33a570add" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 370; y: 163 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4352 + hash: "255604ac684a18e272dccfa9a81fa1bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 376; y: 172 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4368 + hash: "2696641e48ea2a0ccfc65057b283814f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 377; y: 175 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 377; y: 175 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4384 + hash: "4ae011d8d81c57f9e2495d32a90fb5c0" + } + Frame { + msec: 4400 + hash: "c07f57059244b1164e698430b20aac8e" + } + Frame { + msec: 4416 + hash: "d39c21bc6fc079c76ea78d1a3fb0c974" + } + Frame { + msec: 4432 + hash: "f955985ee02fcb810ab8c5f4790f5c12" + } + Frame { + msec: 4448 + hash: "d06b83769bf0f0331e53c270f5dc294c" + } + Frame { + msec: 4464 + hash: "a49ef3866e3f71c26c57fcd616a6dc4c" + } + Frame { + msec: 4480 + hash: "086f4bb966b2076f51b1f615368afda5" + } + Frame { + msec: 4496 + hash: "898de0b200cb83c9724869dd2b74ed52" + } + Frame { + msec: 4512 + hash: "47833f93c5c55f57de5733950ba53714" + } + Frame { + msec: 4528 + hash: "0ced71db7e8c5b8ce8e195a7b821507d" + } + Frame { + msec: 4544 + hash: "84888b8748e297ed4e0525019865ea2b" + } + Frame { + msec: 4560 + hash: "0f62d1aaa0fec0dd90351258a3745869" + } + Frame { + msec: 4576 + hash: "e34a874942161ea830907f94040fc0a5" + } + Frame { + msec: 4592 + hash: "9031e4ad8ee57a8b826d6a6394f0feb9" + } + Frame { + msec: 4608 + hash: "9031e4ad8ee57a8b826d6a6394f0feb9" + } + Frame { + msec: 4624 + hash: "cc8a2477368001015b68c99db95ebaa1" + } + Frame { + msec: 4640 + hash: "01c0f4d5b155eb16ac364b24d5085bac" + } + Frame { + msec: 4656 + hash: "4c4f318b03e0da461bcecb61f43ef3cd" + } + Frame { + msec: 4672 + hash: "dffd22d719f18c943cd0c30afe272434" + } + Frame { + msec: 4688 + hash: "4f7ab0450512ae1319dad22a6e0400b7" + } + Frame { + msec: 4704 + hash: "ea29e23bdb49a30694640dfb078c796a" + } + Frame { + msec: 4720 + hash: "80739ed287906d0b55297be4b74a54cb" + } + Frame { + msec: 4736 + hash: "8d9117cf841c4b158f30b79ac8f2afb0" + } + Frame { + msec: 4752 + hash: "1850e9117160b2bd1865274092f9ec84" + } + Frame { + msec: 4768 + hash: "07945c8954860895f95f8e352c49e0a5" + } + Frame { + msec: 4784 + hash: "d0fa6087d2859446ff8f317c9d7dafe1" + } + Frame { + msec: 4800 + hash: "8ebba2084793d90a640ec2fb12dc0547" + } + Frame { + msec: 4816 + image: "flickable-nested.5.png" + } + Frame { + msec: 4832 + hash: "77d479675c36ecda0926061449f5a60b" + } + Frame { + msec: 4848 + hash: "77d479675c36ecda0926061449f5a60b" + } + Frame { + msec: 4864 + hash: "b968c1528ce7ecf80008fbd56f0ca9a9" + } + Frame { + msec: 4880 + hash: "b968c1528ce7ecf80008fbd56f0ca9a9" + } + Frame { + msec: 4896 + hash: "b968c1528ce7ecf80008fbd56f0ca9a9" + } + Frame { + msec: 4912 + hash: "b968c1528ce7ecf80008fbd56f0ca9a9" + } + Frame { + msec: 4928 + hash: "b968c1528ce7ecf80008fbd56f0ca9a9" + } + Frame { + msec: 4944 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 4960 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 4976 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 4992 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5008 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5024 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5040 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5056 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5072 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5088 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5104 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5120 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5136 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5152 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5168 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5184 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5200 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5216 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5232 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5248 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5264 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5280 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5296 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5312 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5328 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5344 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5360 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5376 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5392 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5408 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5424 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5440 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5456 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5472 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5488 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5504 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5520 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5536 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5552 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5568 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5584 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5600 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5616 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5632 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5648 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5664 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5680 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } + Frame { + msec: 5696 + hash: "38f29e86bd9bfe4df04c6411374f76ae" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-nested.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-nested.qml new file mode 100644 index 0000000..9335b9e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-nested.qml @@ -0,0 +1,50 @@ +import QtQuick 1.0 + +Item { + width: 640 + height: 400 + + Flickable { + objectName: "flick 1" + anchors.fill: parent + contentWidth: width + 100 + contentHeight: height + 100 + + Rectangle { + width: 300 + height: 300 + color: "blue" + + Flickable { + objectName: "flick 2" + width: 300 + height: 300 + clip: true + contentWidth: 400 + contentHeight: 400 + + Rectangle { + width: 100 + height: 100 + anchors.centerIn: parent + color: "yellow" + + Flickable { + objectName: "flick 3" + anchors.fill: parent + clip: true + contentWidth: 150 + contentHeight: 150 + Rectangle { + x: 80 + y: 80 + width: 50 + height: 50 + color: "green" + } + } + } + } + } + } +} -- cgit v0.12 From 1699e8240b8073241f1aaddc12ded6065ef520b9 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 23 Dec 2010 11:02:04 +1000 Subject: Ensure PathView doesn't jump when starting to drag. Task-number: QTBUG-16133 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativepathview.cpp | 4 +- .../data/test-pathview-2.0.png | Bin 1114 -> 1114 bytes .../data/test-pathview-2.1.png | Bin 1105 -> 1119 bytes .../data/test-pathview-2.2.png | Bin 1088 -> 1102 bytes .../data/test-pathview-2.3.png | Bin 1096 -> 1092 bytes .../data/test-pathview-2.4.png | Bin 1143 -> 1143 bytes .../data/test-pathview-2.5.png | Bin 1143 -> 1143 bytes .../qdeclarativepathview/data/test-pathview-2.qml | 366 +++++------ .../qdeclarativepathview/data/test-pathview.0.png | Bin 1169 -> 1169 bytes .../qdeclarativepathview/data/test-pathview.1.png | Bin 1182 -> 1172 bytes .../qdeclarativepathview/data/test-pathview.2.png | Bin 1211 -> 1201 bytes .../qdeclarativepathview/data/test-pathview.3.png | Bin 1184 -> 1164 bytes .../qdeclarativepathview/data/test-pathview.4.png | Bin 1152 -> 1226 bytes .../qdeclarativepathview/data/test-pathview.5.png | Bin 1141 -> 1192 bytes .../qdeclarativepathview/data/test-pathview.6.png | Bin 1189 -> 1188 bytes .../qdeclarativepathview/data/test-pathview.qml | 672 ++++++++++----------- .../qdeclarativepathview/test-pathview.qml | 2 + 17 files changed, 524 insertions(+), 520 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 87ea214..a6f44b3 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -1133,8 +1133,10 @@ void QDeclarativePathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent QPointF pathPoint = pointNear(event->pos(), &newPc); if (!stealMouse) { QPointF delta = pathPoint - startPoint; - if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance()) + if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance()) { stealMouse = true; + startPc = newPc; + } } if (stealMouse) { diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png index 699f83e..347e773 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png index a742a6a..370ca80 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png index 71abae2..97e3906 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png index a6e6b3e..5fa3c67 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png index 9f125c4..ce11c09 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png index 41d0cd5..d155742 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml index b75d140..304d5c7 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml @@ -222,7 +222,7 @@ VisualTest { } Frame { msec: 752 - hash: "e21cac055208e47e267ac906c7c2ca9c" + hash: "d2dda5bec262721d653e88ec3eaeca57" } Mouse { type: 5 @@ -234,7 +234,7 @@ VisualTest { } Frame { msec: 768 - hash: "131e094a79edbeea9a1b981592e55abf" + hash: "d61d21ab4d83b8578494720d9bfe6fa8" } Mouse { type: 5 @@ -254,7 +254,7 @@ VisualTest { } Frame { msec: 784 - hash: "73faabf52bd2af8d8b9d28ce21e5e77b" + hash: "0a178235529d721529e8dc3b439a64c9" } Mouse { type: 5 @@ -266,7 +266,7 @@ VisualTest { } Frame { msec: 800 - hash: "359554a95362db1734f606cf677001fc" + hash: "c800609ffea814ba7cc2441790157245" } Mouse { type: 5 @@ -286,43 +286,43 @@ VisualTest { } Frame { msec: 816 - hash: "8ef4ecc5c5ba578f0279dc57a6c17ccd" + hash: "afcb452d41c6e895309bb921a1ad1d31" } Frame { msec: 832 - hash: "69c3d9d2700dd395b656b0b09fa63511" + hash: "02d8f91c33f62aaf366bcfd03d232269" } Frame { msec: 848 - hash: "2bbcc36d72c3e9a4b672a46f2aae5076" + hash: "1ba9bc8c2b941fd0ec82f211eb559682" } Frame { msec: 864 - hash: "125a5f0c8efdf97676edbe379660dcce" + hash: "ee8680df3c58a48f3fff4a8fc221e38c" } Frame { msec: 880 - hash: "4347a02227207fbf870b6aed76131619" + hash: "36c04a2bd58124877a332bb6a262a7e5" } Frame { msec: 896 - hash: "e08b494c818669bfc48273598574d22e" + hash: "e6ea836d68c54a8308e10f33d4eb8b98" } Frame { msec: 912 - hash: "186cb5465f45c0df8082ec8cad6ee8b1" + hash: "f2400819feb116ae3b327284bbb292ff" } Frame { msec: 928 - hash: "91d04d4469492c3bb2a1ed415dcd904c" + hash: "5d9a3458cb59ede36e7b51bac869785a" } Frame { msec: 944 - hash: "8cc8ef251d68af926a8f300b8666ecfd" + hash: "b859b690c633a9fec87941e7c89f5d19" } Frame { msec: 960 - hash: "42f64722245f8519386e75ce7e3c0cd9" + hash: "ef0b66e789a8e88389e16bfa36b9f6e2" } Frame { msec: 976 @@ -330,195 +330,195 @@ VisualTest { } Frame { msec: 992 - hash: "058311da9dcf73a4b4928038334b04b5" + hash: "493e3c7b0de4a7b4b46678fe4ce9a763" } Frame { msec: 1008 - hash: "ea662934ee0c3c8d4dbde3ad49448922" + hash: "b7056d635c69b8e5bf98872f4c07ed43" } Frame { msec: 1024 - hash: "01991a871819e7bdbf817580f720ead6" + hash: "68aa8bd6709e1b49cfefc4594c236c46" } Frame { msec: 1040 - hash: "69a7fe47ae589bcc2607cc42fcea7451" + hash: "4b28ebf737b8c4228771122d844b8166" } Frame { msec: 1056 - hash: "8240d087b767311e00b7dd4b8726246c" + hash: "b04155316770a1265e5dc431e1b9a9a1" } Frame { msec: 1072 - hash: "cc70c8e79d68f09e6db0dd43b99906b7" + hash: "d540453541aba394b0958cdc48f91d48" } Frame { msec: 1088 - hash: "2bfabef74bc6e1dbf72111838a0e7557" + hash: "b3e7cbc83c65ec61c768757798b17c58" } Frame { msec: 1104 - hash: "66616f01553364c5bd589b781e22163a" + hash: "b12b31d4959a697fcc8e54f1c846eef9" } Frame { msec: 1120 - hash: "58b9de84ebdaabee3917608f2af3bbdb" + hash: "77c3bbb94471cfbfd23cc3914d796dfc" } Frame { msec: 1136 - hash: "964d96b9b783efb1053501f8a6931248" + hash: "41975592e60f08a0296a8babe1da2df3" } Frame { msec: 1152 - hash: "055b77b921a2bac71b6780ab3179f19f" + hash: "0a5eea8a11b15ee8583f187f336f56c7" } Frame { msec: 1168 - hash: "074904f31b4f7cf0679f0bf7bba30af2" + hash: "bf9c02945fdee4b06353f8f7f4fca2a3" } Frame { msec: 1184 - hash: "f020a490b6800d5b4402ecb9a8bcd436" + hash: "157c92d133a39a2b1d20a551303d2f6f" } Frame { msec: 1200 - hash: "1615bdedf92f91f089e494d893840c4b" + hash: "213716cad9fa2179a17a512e8c03c8f5" } Frame { msec: 1216 - hash: "b6892f6a5db6d211f0d1bb2bbe5045bf" + hash: "0ec517c50e9e36fef4fb14318e298723" } Frame { msec: 1232 - hash: "5f0d903ba682923ac69454026a359ed9" + hash: "bab010fe0f5d3b57fd556a9b709c285e" } Frame { msec: 1248 - hash: "da5bae496a9ad28585151f4c75ee0c9f" + hash: "b6bdf2f21c4137d4b5f25e0fe728bba5" } Frame { msec: 1264 - hash: "68f553248f7ca116671782d1c357b552" + hash: "c091e46064c8096568224ed7e4c8dc4f" } Frame { msec: 1280 - hash: "5503df04dd7f4c88314f9d309a5b36b4" + hash: "c0a6ede96566533ab35384afa535530f" } Frame { msec: 1296 - hash: "cc48c1f58b553adcb27d60f176e2b910" + hash: "f61f5c7617700b9aad71206cfc9e402e" } Frame { msec: 1312 - hash: "661f546199d8753a7b6f6ccea5928c12" + hash: "c70c106d128051c06da3acdf817f5ffb" } Frame { msec: 1328 - hash: "0fd70052c100f77bddbad177d9e5573d" + hash: "624d7c7fb2f39225d51d1a548aa186ed" } Frame { msec: 1344 - hash: "488e0652c0ed82a014de63a64145c34c" + hash: "f052610f17a7484bf6cb2bd07aa91af6" } Frame { msec: 1360 - hash: "8b6bf2519080a6e4a61fe216f72dfa09" + hash: "44cd80041a1965c8c60fdffd9ae19395" } Frame { msec: 1376 - hash: "4dab1827f6ce9561297fce8e067df1bd" + hash: "7597f86b537fbd70260908c973f9db21" } Frame { msec: 1392 - hash: "b3f4c5cd728eaf2b791612a7fea64e7b" + hash: "30cd60db9aa2df2adc7d01091c905cb4" } Frame { msec: 1408 - hash: "3d01abd0b8a5a62d58a4c09546f212d8" + hash: "8da4613759e9bcb926a0c84556213eb5" } Frame { msec: 1424 - hash: "e76796498cf595c60d4b60cc0e320601" + hash: "1085fcc81f0aed8508817839ca748359" } Frame { msec: 1440 - hash: "1b31e96f2823e78a0c4029e7bc45b9f2" + hash: "b87f002bf6fb0684f0b3cf565507e066" } Frame { msec: 1456 - hash: "f75c182dc24f4fabe1034ee494dba2ad" + hash: "b60916a57aec6ebbd8b69be7c8d66e19" } Frame { msec: 1472 - hash: "646c12edadf350405709860381cfced6" + hash: "a28e1538d18ccb7485d0306b9f7b18a6" } Frame { msec: 1488 - hash: "b6719406da9f2484fe55e3c69184f86c" + hash: "832c857f2e05f2f82308cbf91f7bf401" } Frame { msec: 1504 - hash: "5456857d6d48d064df1cb3f35d8447b5" + hash: "ca3e50cd337a07ef07f063be28fa6dc2" } Frame { msec: 1520 - hash: "8d1809b568345e1532fb6d9428fc9729" + hash: "3ecf7faa733653ef20e4a26eb47d63d1" } Frame { msec: 1536 - hash: "5cffa76fe09a771a9f62a9f0392f0431" + hash: "f17a6be2e183f4c87e31004458e5052c" } Frame { msec: 1552 - hash: "8de59915e874ce829c691a19ac930f28" + hash: "bfa62672ee7fcd9c3a75b63198a4c2bf" } Frame { msec: 1568 - hash: "9027bbf8121f70d26530f70423ec05b7" + hash: "cdaafe7f622c18c2409ac539649de1cd" } Frame { msec: 1584 - hash: "d3d1d8b9f7b4eb74a8b7ae5cf19a8e20" + hash: "c957f5c58e0a9b315b51ac1012709493" } Frame { msec: 1600 - hash: "81ffcc0147e3124a3015deb7c0dbfd90" + hash: "925c55a8564f2318f9de4bd406cb5b13" } Frame { msec: 1616 - hash: "ca0c96e908f05c4ee1af1f80d7b432aa" + hash: "466208a8f6ecf45393be01a6dd7f2b0f" } Frame { msec: 1632 - hash: "2bdb6fbf942623856a6963c335794dd2" + hash: "35cff8c0f4b503ba4948966079484feb" } Frame { msec: 1648 - hash: "18ac264d9ea9b592b0738f1cf732f678" + hash: "47472faf5e9bf4b4e514abe55f1e0b72" } Frame { msec: 1664 - hash: "1ee9adbbae7b97dc050c82b8ed7b0aad" + hash: "b699165e354bcadfd0d914d9ecb3d2aa" } Frame { msec: 1680 - hash: "b502390c452883ade550d2761bb09d3d" + hash: "e255c047ce78f5677ccec8bd9737201a" } Frame { msec: 1696 - hash: "31a6f573fbb3f545ee051e2290938004" + hash: "bd4f08095a9c546a42c85e6df6eaf655" } Frame { msec: 1712 - hash: "3be9788228d9e540313e75671319c5b7" + hash: "ca65869f48b169260c3756d846a12f36" } Frame { msec: 1728 - hash: "23cbd718154f939d8270674e8f7607f0" + hash: "1921889beb8e61c8b959d4affa814465" } Frame { msec: 1744 - hash: "5f7f49b894b80ddd7cdc544a49ec24a2" + hash: "a9dda9ebaa97133c671917473721272c" } Mouse { type: 2 @@ -538,11 +538,11 @@ VisualTest { } Frame { msec: 1760 - hash: "2a1ddee3d3a0c2a4fffab3988e35e274" + hash: "cab96d2118b31d43e85dc902df2ed8ed" } Frame { msec: 1776 - hash: "2a1ddee3d3a0c2a4fffab3988e35e274" + hash: "cab96d2118b31d43e85dc902df2ed8ed" } Mouse { type: 5 @@ -562,7 +562,7 @@ VisualTest { } Frame { msec: 1792 - hash: "5594b9139480ba1c814509a049f9b6c5" + hash: "d21c8af68b314800b86922493db6553e" } Mouse { type: 5 @@ -574,7 +574,7 @@ VisualTest { } Frame { msec: 1808 - hash: "d8729deb404f5b821264743943adb288" + hash: "a80c0f6f679ba5f1354f8e16677c1125" } Mouse { type: 5 @@ -586,7 +586,7 @@ VisualTest { } Frame { msec: 1824 - hash: "6de642baf7698ec65d48ccf0a1e8e7db" + hash: "d8729deb404f5b821264743943adb288" } Mouse { type: 5 @@ -606,7 +606,7 @@ VisualTest { } Frame { msec: 1840 - hash: "f6732999861d1f638484a5aaa9cf0550" + hash: "87d41239eb7e170fa7a1ed523a9af942" } Mouse { type: 5 @@ -618,7 +618,7 @@ VisualTest { } Frame { msec: 1856 - hash: "7cd7c1679838f35556bd4ee4565b7a86" + hash: "1c185649e08a54a6949409ed7ee5dc60" } Mouse { type: 5 @@ -638,7 +638,7 @@ VisualTest { } Frame { msec: 1872 - hash: "4276a4d9350503603b0c9c98552697b3" + hash: "d82969ef0f4baf3c51e112e049cb1334" } Mouse { type: 5 @@ -650,7 +650,7 @@ VisualTest { } Frame { msec: 1888 - hash: "954a47627aee0a1128a78191bf32d984" + hash: "e746a3eb8527036b09afb9cdd3d15648" } Mouse { type: 5 @@ -662,7 +662,7 @@ VisualTest { } Frame { msec: 1904 - hash: "360a47795f7f9389f82f2f55fa1fe83f" + hash: "e1d6c01f6cd66a5bcdb08ca810a07282" } Mouse { type: 5 @@ -674,7 +674,7 @@ VisualTest { } Frame { msec: 1920 - hash: "19d4284791d0031342ba995bd17a7833" + hash: "fd0e9cf835131ee6cc5ecf67c6724d73" } Mouse { type: 5 @@ -706,7 +706,7 @@ VisualTest { } Frame { msec: 1952 - hash: "e9cd8fb810ecf39a90af039ead97aaf1" + hash: "69c17a9c18795b1d8ae63d36d76af626" } Mouse { type: 5 @@ -726,7 +726,7 @@ VisualTest { } Frame { msec: 1968 - hash: "42df1a0fbbe7cce5f2359d9e02696299" + hash: "c7ca4762498af158a2f2da6f5ae560ce" } Mouse { type: 5 @@ -738,7 +738,7 @@ VisualTest { } Frame { msec: 1984 - hash: "cc71434d6bd162386b80cb3b7e387116" + hash: "f500232133ec07a3b833b06425379484" } Mouse { type: 5 @@ -758,7 +758,7 @@ VisualTest { } Frame { msec: 2000 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Mouse { type: 5 @@ -770,7 +770,7 @@ VisualTest { } Frame { msec: 2016 - hash: "5bdb7472e325651e891c115953afdb39" + hash: "1754875ee6a5712ffb8ce1bbae6d4ed1" } Mouse { type: 5 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2032 - hash: "ab3a64b41c67a0b8a6c0830c0e0cb797" + hash: "1e743264f0a312bc0d0a023fbc6db832" } Mouse { type: 5 @@ -794,7 +794,7 @@ VisualTest { } Frame { msec: 2048 - hash: "8eb1f2c8c02c2acf4262e05000045649" + hash: "ab3a64b41c67a0b8a6c0830c0e0cb797" } Mouse { type: 5 @@ -806,7 +806,7 @@ VisualTest { } Frame { msec: 2064 - hash: "514220d357c4a26e4aaf9ed20d3f4f33" + hash: "d05f721f1d7d23d6e0cc67993bf1fa8f" } Mouse { type: 5 @@ -818,7 +818,7 @@ VisualTest { } Frame { msec: 2080 - hash: "e44526ef273048028d5989fc662eb7e6" + hash: "419c09739f855c53be3427a71aa3faf9" } Mouse { type: 5 @@ -838,7 +838,7 @@ VisualTest { } Frame { msec: 2096 - hash: "29ac091428a89cfcb4c52c08e0e10327" + hash: "f0ae80ed5965d7531d6a653c80eed444" } Mouse { type: 5 @@ -858,7 +858,7 @@ VisualTest { } Frame { msec: 2112 - hash: "82beb845af88fc9432dc104ff805a146" + hash: "1419fe55cc28ce9690846d4c03275fe7" } Mouse { type: 5 @@ -870,7 +870,7 @@ VisualTest { } Frame { msec: 2128 - hash: "371392f267b2c1f4e29963506180e246" + hash: "2e22df53697a599b0e44fb2a3986dcd0" } Mouse { type: 5 @@ -882,11 +882,11 @@ VisualTest { } Frame { msec: 2144 - hash: "1da06d036cc0a2d2de34eee37b6981c0" + hash: "96f763c555b523d9b7ed7a0a159db368" } Frame { msec: 2160 - hash: "1da06d036cc0a2d2de34eee37b6981c0" + hash: "96f763c555b523d9b7ed7a0a159db368" } Mouse { type: 5 @@ -898,31 +898,31 @@ VisualTest { } Frame { msec: 2176 - hash: "4980de22342d1085e205401090777d24" + hash: "20f9cf7787c8cfd4843289f5ab2012e7" } Frame { msec: 2192 - hash: "4980de22342d1085e205401090777d24" + hash: "20f9cf7787c8cfd4843289f5ab2012e7" } Frame { msec: 2208 - hash: "4980de22342d1085e205401090777d24" + hash: "20f9cf7787c8cfd4843289f5ab2012e7" } Frame { msec: 2224 - hash: "4980de22342d1085e205401090777d24" + hash: "20f9cf7787c8cfd4843289f5ab2012e7" } Frame { msec: 2240 - hash: "4980de22342d1085e205401090777d24" + hash: "20f9cf7787c8cfd4843289f5ab2012e7" } Frame { msec: 2256 - hash: "4980de22342d1085e205401090777d24" + hash: "20f9cf7787c8cfd4843289f5ab2012e7" } Frame { msec: 2272 - hash: "4980de22342d1085e205401090777d24" + hash: "20f9cf7787c8cfd4843289f5ab2012e7" } Mouse { type: 5 @@ -934,7 +934,7 @@ VisualTest { } Frame { msec: 2288 - hash: "e0a52543b976dc998615704c63b1f3e9" + hash: "1241895174f4d8e4386c3957e3d2e292" } Mouse { type: 5 @@ -946,7 +946,7 @@ VisualTest { } Frame { msec: 2304 - hash: "82beb845af88fc9432dc104ff805a146" + hash: "1419fe55cc28ce9690846d4c03275fe7" } Mouse { type: 5 @@ -958,7 +958,7 @@ VisualTest { } Frame { msec: 2320 - hash: "e44526ef273048028d5989fc662eb7e6" + hash: "419c09739f855c53be3427a71aa3faf9" } Mouse { type: 5 @@ -978,7 +978,7 @@ VisualTest { } Frame { msec: 2336 - hash: "8eb1f2c8c02c2acf4262e05000045649" + hash: "ab3a64b41c67a0b8a6c0830c0e0cb797" } Mouse { type: 5 @@ -990,7 +990,7 @@ VisualTest { } Frame { msec: 2352 - hash: "442958c3a705745204db96ff9902b7fc" + hash: "a130b471b3903f3f1d77f2306da2b92e" } Mouse { type: 5 @@ -1002,31 +1002,31 @@ VisualTest { } Frame { msec: 2368 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Frame { msec: 2384 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Frame { msec: 2400 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Frame { msec: 2416 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Frame { msec: 2432 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Frame { msec: 2448 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Frame { msec: 2464 - hash: "a130b471b3903f3f1d77f2306da2b92e" + hash: "0a0cd0433e206dfc923ec0d3617e04a1" } Mouse { type: 5 @@ -1046,7 +1046,7 @@ VisualTest { } Frame { msec: 2480 - hash: "374dc7c3ea0c93ac93a857a4620bc031" + hash: "47e86b008567366f37ac043ed8802d53" } Mouse { type: 5 @@ -1058,7 +1058,7 @@ VisualTest { } Frame { msec: 2496 - hash: "0b943f48b39053bfc906a4a47a37d68a" + hash: "92e1d5dbc85e777785cc68171a0a3fbf" } Mouse { type: 5 @@ -1070,7 +1070,7 @@ VisualTest { } Frame { msec: 2512 - hash: "099fbdf1560dd79b700914863406c904" + hash: "360a47795f7f9389f82f2f55fa1fe83f" } Mouse { type: 5 @@ -1090,7 +1090,7 @@ VisualTest { } Frame { msec: 2528 - hash: "3aa1614cc49504d19e979ebf190f2970" + hash: "acefb43050e140d689f1d377f50f5c83" } Mouse { type: 5 @@ -1102,7 +1102,7 @@ VisualTest { } Frame { msec: 2544 - hash: "837420c71a5010f25cccd05e5e9b3eec" + hash: "4bc43ae81aac757c872157ac9b41a2d9" } Mouse { type: 5 @@ -1114,7 +1114,7 @@ VisualTest { } Frame { msec: 2560 - hash: "871349fc09f418717231b8f8e20a7fff" + hash: "41421089f087c54ebcd9fa44e95bd96e" } Mouse { type: 5 @@ -1134,7 +1134,7 @@ VisualTest { } Frame { msec: 2576 - hash: "9b6022024aae22ec1f522fd00ed29e9b" + hash: "db0f09393b5c9284142f9eb3cb5952ce" } Mouse { type: 5 @@ -1154,79 +1154,79 @@ VisualTest { } Frame { msec: 2592 - hash: "8d9410909ae259388fa94b3a60342608" + hash: "9491689e51ec46bec07fb8b280daef80" } Frame { msec: 2608 - hash: "0ceb355351ac99458ba75776c11b3039" + hash: "44a30531642ada65c052afe30874d7ba" } Frame { msec: 2624 - hash: "61ca917ecc8ad4c35b7f2a3b828542bf" + hash: "6bf415b82e7cfa68b8321571ab619c3f" } Frame { msec: 2640 - hash: "fd5db933d1d8684b15eb5239d19d8919" + hash: "645e43948279d528020070125b71c33b" } Frame { msec: 2656 - hash: "13f466a82ee22cabf5cbd2463f55b46a" + hash: "495d14df729eede7e560f2e841bae142" } Frame { msec: 2672 - hash: "3b7f7880f5b568a0e45cd0e268822f3a" + hash: "fa3b12e9869bf4254c8cdf6e5b10bb2d" } Frame { msec: 2688 - hash: "cca22501c3b5a2ed4264ba060eeb1a6e" + hash: "482ce41c4b918a71b803c5f521ea494e" } Frame { msec: 2704 - hash: "efe5258ac5962d1d2bfa4286c1621830" + hash: "79d70563c7e139d9f9785565219133c7" } Frame { msec: 2720 - hash: "141998cff765a4e90836b871f229a1ca" + hash: "0dc70772aa50445c1cb7dbd8ee0092b0" } Frame { msec: 2736 - hash: "9d684675fa883d5488194effcb1d8d0a" + hash: "222d638b8fb896563028f029e6fb3c49" } Frame { msec: 2752 - hash: "fa87f781048f264ddf447441a714ee50" + hash: "20b8fc718d9329c9c8901fdfe14557a2" } Frame { msec: 2768 - hash: "61b4992b9c52222345c9ada3148d50f9" + hash: "e3972b3244e4a98c9ee4df2d4b623c12" } Frame { msec: 2784 - hash: "3e255a634d215746cb95f5d765335ea2" + hash: "e3a4b357c00d3d49e4a7d90f6f57054c" } Frame { msec: 2800 - hash: "d64a755e47a502244e7f14f2091f0ca6" + hash: "44ad81d2ad0d502b003e148412871a41" } Frame { msec: 2816 - hash: "582562992b0652f995b439897182e0f8" + hash: "47d757dab5c72cad08cb8026631d67e6" } Frame { msec: 2832 - hash: "2d69b1a274c262faf5ce9ed3191c7d22" + hash: "8522a3b6202b303a9e65a9e136423e27" } Frame { msec: 2848 - hash: "36c04a2bd58124877a332bb6a262a7e5" + hash: "70e3cd650472d0e95f4d6ca9e34a2ce1" } Frame { msec: 2864 - hash: "798711925da8f5034039dad86cc1fad1" + hash: "19a7825cd8c0eaa6f313ec77fff9ec1b" } Frame { msec: 2880 - hash: "31495157a10c3bb4dd70cfd857fd07e6" + hash: "579688ff6ec910570c0c0c60fdf44cf6" } Frame { msec: 2896 @@ -1234,207 +1234,207 @@ VisualTest { } Frame { msec: 2912 - hash: "b81330eb50dbd39f1abcdb8ff1553d08" + hash: "7ab8cf0d0b650e8f994a9beed8be29fb" } Frame { msec: 2928 - hash: "ececcb86b76e9cd2f57585bd87e16bef" + hash: "92e9be6d36844bb475b861ba9c4bc3ff" } Frame { msec: 2944 - hash: "2c37e2c24cf22a334cfcc6f2691ad9fb" + hash: "08b9cce3b2071b328054af6bcb6755c7" } Frame { msec: 2960 - hash: "ad0572020d273dbca046357aa0f8bf3b" + hash: "b505d2f41a6db06d4ca03f5340800aa6" } Frame { msec: 2976 - hash: "51a469e059a5e1a3675db731f55209d3" + hash: "f0267f59e247e24e4cf9c56f8931112b" } Frame { msec: 2992 - hash: "dca7d50a3faab1f049bece34bd16b8c4" + hash: "ddbc73e2df4da11d5122539a00c126de" } Frame { msec: 3008 - hash: "86dc86bafb01fa086caa3b22f9d393d9" + hash: "8dd67df95fae14079ed5b83c421a5b6e" } Frame { msec: 3024 - hash: "05754bd86070a6f01bf90ca2b964f695" + hash: "7b217f7c51087a07e8922b0286b2c1dc" } Frame { msec: 3040 - hash: "911ec290ba303f0cac258cbb893bbf78" + hash: "e464b5121f3204c64cafe2f5e31cf497" } Frame { msec: 3056 - hash: "f27f29249426f46b8fb508372bcbb32d" + hash: "7fc2018f8db17b65fd01b2ddfa44f66d" } Frame { msec: 3072 - hash: "2f452e2d519f33ee03db67ebd7f69e3b" + hash: "a5d1871511eac7224292b3552da466a8" } Frame { msec: 3088 - hash: "35cf7747a75ea3f727c2fe1dae6136c5" + hash: "2f0a55cf3cd30da77fbb73e749b729a3" } Frame { msec: 3104 - hash: "6773187693f52a8f2c0e358e379b4d21" + hash: "9aab649b6664c179878d0ead438dd751" } Frame { msec: 3120 - hash: "abca1f00f7ec60c8c80ba5345898e54b" + hash: "2ad733363d239d9a3ea1c31427a3b3fe" } Frame { msec: 3136 - hash: "9bee1da64534da97de349e1ee973cc9c" + hash: "e73b4fd7cb6285df9a77d666f25ab245" } Frame { msec: 3152 - hash: "087df06ca720918482f2e29653c7fbac" + hash: "53b05d8be52a74c3a24b88779d4927bf" } Frame { msec: 3168 - hash: "5b08911bf0975bd6615bf29294e4b1f5" + hash: "04fc6aac5f090960cd87eefb4273fb0f" } Frame { msec: 3184 - hash: "dead4bb3768b65418f68bae7dd0bf004" + hash: "294c842a71b5e4927146952ce865c8a2" } Frame { msec: 3200 - hash: "6bfe4c866936d8ae509650419ae12455" + hash: "ac6f7afb4a5e67e2edd8300e7dfdff13" } Frame { msec: 3216 - hash: "7428bdd9609a2594be08fdeac6ff1e17" + hash: "8a7ab6dc549b247f3b897e098d784dd8" } Frame { msec: 3232 - hash: "d02f9f693e0ae8c7034bf727064ec28a" + hash: "0a3144254f66a6b005b95a026496cd32" } Frame { msec: 3248 - hash: "b6284efd849547bbfefc22ec77d61062" + hash: "ca457a1c503a980687926e31ac16995b" } Frame { msec: 3264 - hash: "4b78b647be8e918e85edab0c23b6f882" + hash: "c17922ca04f5ce9916e2907a6c28bf8b" } Frame { msec: 3280 - hash: "c4a02c18ce3574d057e6a54b30efadb3" + hash: "b2a071734226b905f6c6f5652f645517" } Frame { msec: 3296 - hash: "d1d190010239d0b02a697d1c63c748ab" + hash: "1f41a314699151771d7d1ca672aaba8f" } Frame { msec: 3312 - hash: "b198689d11aa59d937297e6fcf675c93" + hash: "de94c2ad2e74036d975e8402dd8b06e9" } Frame { msec: 3328 - hash: "218f3371beea895aefd28aa874012dcc" + hash: "9cfe0627852cefe67fc0b44b31085b4a" } Frame { msec: 3344 - hash: "1135de1b9a4ebf1d2829546d3c3f3903" + hash: "de7ab5230efb63264f76fa1f1b61dcfa" } Frame { msec: 3360 - hash: "773a64cc7bb8e99a25078f348986e28f" + hash: "5ad22cf9e1c9a02cfc570beaac55bee0" } Frame { msec: 3376 - hash: "e8ce58aeb18b3f56ebd3d6f61ac94657" + hash: "9e6210d9e6bfda4fe0695b75d03435e2" } Frame { msec: 3392 - hash: "6de92679c32c7f3e9d9b6ba3a47e65eb" + hash: "d3989a9fb7e99d16032fa1842364f2ed" } Frame { msec: 3408 - hash: "339b37207af10ad986269e21ab37ff6d" + hash: "2f3e7040a4966e56858312f6534e9e77" } Frame { msec: 3424 - hash: "ac01f0708800fdfdacec67ac9e80602f" + hash: "16bb17f511519337be2e60d8b9f95149" } Frame { msec: 3440 - hash: "9de89a748b1e18eb6ed94875af6f26de" + hash: "819250fd9899a9457a9300f942f4d8bf" } Frame { msec: 3456 - hash: "d091e4a93c2beafb0ce4b6dff6d5b05f" + hash: "6639a15d4d23540ccf63c9bea0e1689e" } Frame { msec: 3472 - hash: "9532271085864d2fde3aa6e572599588" + hash: "14b553132a86e57577c416e6f6c53433" } Frame { msec: 3488 - hash: "d00804b42ab1c1f082a9f394ff4d666e" + hash: "f7a95239db44b66698d29f0daae826f1" } Frame { msec: 3504 - hash: "2c745f007353e6f8a7195470ba9492c2" + hash: "b5a6abb5294fb9b069ab8a075003cb61" } Frame { msec: 3520 - hash: "b4e952acb734ab1a608297fcb44fbe46" + hash: "391c1c43ce893aeefc42d164e6e8aaac" } Frame { msec: 3536 - hash: "75ceed3c2ddd557866145393fa50a12f" + hash: "271addef36d51d904bc1d68f65b66de3" } Frame { msec: 3552 - hash: "8b83b80554dd4a1266184092d380554c" + hash: "73a23e56edcd64ac6147aff27b785ebb" } Frame { msec: 3568 - hash: "973bddb1b2f9dbadd40c0de3ca7c3510" + hash: "bd43145ae22086348cb5e68765a42ac1" } Frame { msec: 3584 - hash: "5691b5bf54b50d4ff0a717873e001c00" + hash: "4b2706d1215f2b5b08ac87e40ba8c21b" } Frame { msec: 3600 - hash: "8b26b0aa8b06da031354c59d7fb41bf0" + hash: "6420fd46fd8068010d3caaa68eea457e" } Frame { msec: 3616 - hash: "45786c39a10b8e1cf399df98f3fb7ffb" + hash: "188499a79313d984ed1d710329b0237f" } Frame { msec: 3632 - hash: "c6d0be03e167c16566372cc992604dfb" + hash: "12da197320858ea4f8a1437b7ceac95a" } Frame { msec: 3648 - hash: "8d6e057550632d143faf996a62bbd1cd" + hash: "14bdec5663d1a81fa617d3b81e19f8b4" } Frame { msec: 3664 - hash: "7e3a321b95d5f62f0da2b10324b485b6" + hash: "3430047eca214a217aca0bd71814f4db" } Frame { msec: 3680 - hash: "e842f18dfd36947b2fa086a4d0bb2ec5" + hash: "974c431fe7030990389c7fc719655cfd" } Frame { msec: 3696 - hash: "a9359e143dae4113437a43cc00493479" + hash: "d38f3153b3cf39a278dc6948ff9ef71d" } Frame { msec: 3712 - hash: "2eca61c837cca9beb6d1834eafe8c538" + hash: "0c6eec50abcf4afc20311ffa1326d4e8" } Frame { msec: 3728 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 af0e781..da688c7 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 6f1878f..618d238 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 97f09f7..0688ed1 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 878875a..ec6e330 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 cdbe606..1692d17 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 index 7b78f7a..d70704d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png index d7b5943..f8f37c6 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.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 bc900c6..3828e76 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml @@ -182,7 +182,7 @@ VisualTest { } Frame { msec: 592 - hash: "731c8547a72c64ac86aec87c0a9a12cb" + hash: "683d9f54c75f5b1ed082edb0b4559bc8" } Mouse { type: 5 @@ -202,7 +202,7 @@ VisualTest { } Frame { msec: 608 - hash: "d9d7dd7ea05499f028964fdd11af0fe6" + hash: "02e5238c0764f370d0f463cc3f477df7" } Mouse { type: 5 @@ -214,7 +214,7 @@ VisualTest { } Frame { msec: 624 - hash: "361879f350c448a484b71a9e7a42b87f" + hash: "02239cd84ce630a89b94dbcf469d9a70" } Mouse { type: 5 @@ -226,7 +226,7 @@ VisualTest { } Frame { msec: 640 - hash: "998da4b3e36ee3e17deb2b5a097661da" + hash: "6cdaa8ffc906ade671fe259711e76f24" } Mouse { type: 5 @@ -246,7 +246,7 @@ VisualTest { } Frame { msec: 656 - hash: "1b3f9758bd9842cc9545b494499f87c4" + hash: "db00a0d69efd43f69c83dafbf38a06a6" } Mouse { type: 5 @@ -258,7 +258,7 @@ VisualTest { } Frame { msec: 672 - hash: "7e87f7c233dad50549e4bdafe10bb48e" + hash: "76fdf4cb75376ec3a9e084d93765c5cb" } Mouse { type: 5 @@ -286,75 +286,75 @@ VisualTest { } Frame { msec: 688 - hash: "01ceb2fea81f2192ab11d7d6e1df879a" + hash: "b12e86c13e012c5992930b3e559c337c" } Frame { msec: 704 - hash: "9afa862248bd527e07374a5c2f2036a1" + hash: "4056e78a59e8f1e030f3e3a51c436b46" } Frame { msec: 720 - hash: "e06439495148bfbf059cfe2b5df22840" + hash: "c84781b7586943ef889b8911c23e91db" } Frame { msec: 736 - hash: "b206a28d6f3be8cba9595849328b27b8" + hash: "cd952ffa63dbcb772b666ce755c9a2f1" } Frame { msec: 752 - hash: "646e4529bf554dceee0140ec56a02d1c" + hash: "2a31778e3ab7c676ae82278948cef12a" } Frame { msec: 768 - hash: "31bdcf1f178d65e033e23dfbdcb9dc5f" + hash: "ef6319b262fc299b14b40d1521f9c9c3" } Frame { msec: 784 - hash: "b4e897356814ca2dddbc3644b1782f36" + hash: "05ccb24a2025df31188b413c8d837232" } Frame { msec: 800 - hash: "669e5d682aae8727640e0e0f4e855a60" + hash: "df31f9dba1a762397c0364d7e83052ef" } Frame { msec: 816 - hash: "892007b1a379c617412502499df92d01" + hash: "6eec07606ef320072ea23ceedb3f6b29" } Frame { msec: 832 - hash: "f4d66daa2d428aa712a73ded2de7a361" + hash: "e3502cb53c6e17373de3b718a8212f4d" } Frame { msec: 848 - hash: "0c21e69bed6dc2d6b7c23c20714aca67" + hash: "2e01e2e252ca9fb3e7107f04a3ba4031" } Frame { msec: 864 - hash: "189909bdbfeb1f02ad527fbc438d567d" + hash: "547a9f25404c2bf7737526faf67a459d" } Frame { msec: 880 - hash: "b2fcbc0657474e1b6d27e1f2f93be35b" + hash: "aa9c3122e3c2a7ed450a0afffbcf4e6a" } Frame { msec: 896 - hash: "4407d7ad1b6a40b2355145aee136ff15" + hash: "1535dea92038cf87395a616841fd9bf6" } Frame { msec: 912 - hash: "347ada687af0a97f0a862a1f3a1132be" + hash: "1535dea92038cf87395a616841fd9bf6" } Frame { msec: 928 - hash: "db6217ff0194c5a3f9ca9ea7e3b3dfd8" + hash: "1535dea92038cf87395a616841fd9bf6" } Frame { msec: 944 - hash: "8a94ca0ee93daaa1bdcdbfc8a80713c1" + hash: "1535dea92038cf87395a616841fd9bf6" } Frame { msec: 960 - hash: "ab24d0c8545518cbaff876976247be2c" + hash: "1535dea92038cf87395a616841fd9bf6" } Frame { msec: 976 @@ -450,7 +450,7 @@ VisualTest { } Frame { msec: 1216 - hash: "c612bb9906f18786ef7cc6f4e56de218" + hash: "aa9c3122e3c2a7ed450a0afffbcf4e6a" } Mouse { type: 5 @@ -470,7 +470,7 @@ VisualTest { } Frame { msec: 1232 - hash: "ffec210dd863ed32a780506f61b06056" + hash: "b889647c08af7db2e6582d9927cb1cf7" } Mouse { type: 5 @@ -490,7 +490,7 @@ VisualTest { } Frame { msec: 1248 - hash: "9613c658f267d19b84d6e7ef2a676fed" + hash: "ac97616fc3c54711bb067cc72c15d4c5" } Mouse { type: 5 @@ -510,7 +510,7 @@ VisualTest { } Frame { msec: 1264 - hash: "8c5dd8d0f9f434530b20e14a84af9f46" + hash: "b38c46d537e6e622c8a0ecae76dbe506" } Mouse { type: 5 @@ -530,7 +530,7 @@ VisualTest { } Frame { msec: 1280 - hash: "a956e8e9ca8958c387f8f5ce374cdec9" + hash: "6261f2f16bdd89142cfbf1de4ce64a32" } Mouse { type: 5 @@ -550,87 +550,87 @@ VisualTest { } Frame { msec: 1296 - hash: "712e865d894f179cfd9d86b08e60811a" + hash: "d4f8d57bae3d5bc888a4bbe2812b3fdf" } Frame { msec: 1312 - hash: "db5c1f2af2e72ff4edce83cb342b5263" + hash: "4e0a90dda433c1615ea367ec90917409" } Frame { msec: 1328 - hash: "834f0aa26c66234491468c1b27a2d329" + hash: "b20e244f27dae505568fcba25cccb5d8" } Frame { msec: 1344 - hash: "78a2a4b60db730a7367bc77e1dfc1a1b" + hash: "f31d264a002718787ea55a6312c7f9f2" } Frame { msec: 1360 - hash: "a8ff2277b5f7d515bc5a9af1f0e77197" + hash: "0abbf36b5e3f2db9288bde05825dc111" } Frame { msec: 1376 - hash: "e05d730624025000b831860f5b99e8ac" + hash: "64fc0f18174f5e8002cf79a908cc08df" } Frame { msec: 1392 - hash: "54aa124492ea742e4327f1d2b45ab620" + hash: "430d7719ebf3b5835af92683cff10e56" } Frame { msec: 1408 - hash: "bc700bee41ac384a2555723b010e9041" + hash: "411a8fe1ee3a0510574cbf6a69d23456" } Frame { msec: 1424 - hash: "26f66098c505cea4715a89b6a2232759" + hash: "47e431bf01575c44f7c1fa3e20409866" } Frame { msec: 1440 - hash: "00f3255a3ead315410d8c0d338779689" + hash: "d17b62a0b52b4a5220b29b55f764abc6" } Frame { msec: 1456 - hash: "154e7d86d7602ebba38a0d63b211894d" + hash: "9bd0d8dfbee424bd0ccf72703a7c51c2" } Frame { msec: 1472 - hash: "87cf2bff69ebd75af69d0a7c7f668b07" + hash: "8ef880c18ecd8adb66e7e0a2dceb61fc" } Frame { msec: 1488 - hash: "f221b870ecccb1669b6223e5431c31d1" + hash: "fcc1bc7f35342f595448ca2870478b50" } Frame { msec: 1504 - hash: "40a9d4c522d9fd831be2ca698ac10670" + hash: "cf360de1c6649e45beb974ddbe436ea9" } Frame { msec: 1520 - hash: "7ad47479d99fd4d9fde96fef242bdc20" + hash: "b2a6acf1fed92069fd2779b1fa236c95" } Frame { msec: 1536 - hash: "b91912801c790d849399306c693a4d33" + hash: "7128a442b6bb06038477d46ac3da5021" } Frame { msec: 1552 - hash: "e5c8d361abcbc15df0b0b82728cb5b84" + hash: "6a0ab3ccc3749b9a2b9a5b5851b0cf70" } Frame { msec: 1568 - hash: "3f2f82c925e93d4593581cdba16f361f" + hash: "18f6cdad215c55ea8335d06110715aa8" } Frame { msec: 1584 - hash: "7007fd0595c188a9a5b3ff31b0514aa5" + hash: "137420f4b1f51440c3aefd18dbdad71d" } Frame { msec: 1600 - hash: "118661091df765ae35c152c7fe818029" + hash: "faf898388f87948fbacd74589cb18af0" } Frame { msec: 1616 - hash: "0a8edd2a35f7921ced6e3aa7e571bc4b" + hash: "b818181b3fee6f5a35a0da6c0f8e240e" } Mouse { type: 2 @@ -650,7 +650,7 @@ VisualTest { } Frame { msec: 1632 - hash: "ef734ce4d7e1aee19a78b743c9923f90" + hash: "2e74cc22a4e5b20cc231bc08e15e662a" } Mouse { type: 5 @@ -670,7 +670,7 @@ VisualTest { } Frame { msec: 1648 - hash: "09a9925d5ec2fd03cfbf469bc22bf201" + hash: "27be226c985bb0143d1dca3e4be4b10a" } Mouse { type: 5 @@ -690,71 +690,71 @@ VisualTest { } Frame { msec: 1664 - hash: "6babcbf5582d5ed8f0cf52e233867055" + hash: "9384d46806b2a8091b6d16f7636d6ae4" } Frame { msec: 1680 - hash: "94dae9d52f3523e17f3f0e59ca24a069" + hash: "684a17820c3693d893f8199cd7c7076f" } Frame { msec: 1696 - hash: "0d417d25893a0454a729f5c23a2a6c28" + hash: "dc1facc91b6935983bbcd2eada452d4d" } Frame { msec: 1712 - hash: "afd1bbca1dcfea8d1f0a340d86b07fa8" + hash: "6bb08cc431a3ecca1a553ea10669bb0c" } Frame { msec: 1728 - hash: "97e98982742b94dba8b6cb59397bcb66" + hash: "1330640d4ca9ac69dd089cea34b7f61d" } Frame { msec: 1744 - hash: "a0ad8cbbd0daa0afd3831e8a071b9a0e" + hash: "95370207a55b56c41923937b40d5fe6b" } Frame { msec: 1760 - hash: "f71826bcd6ea91d2f64d627a390c379d" + hash: "c36b60f81e7de5c0e5a59655041adff2" } Frame { msec: 1776 - hash: "7699da01cf1ee9a7f404ab053241b530" + hash: "297abbc6b38a1909324fcee6d8b1d908" } Frame { msec: 1792 - hash: "6aba727ecc562d7b5555eae427e6978b" + hash: "0af89e3bab7c517f375897239ea35153" } Frame { msec: 1808 - hash: "ef9c6daa5b04b0be9159594e04524fba" + hash: "05109c3dfac7f65fe00e81d1a145f048" } Frame { msec: 1824 - hash: "6293ede5de83f3b01a3b4d8d87648089" + hash: "57e1e871cbbc627f2fb9bf5583c4f097" } Frame { msec: 1840 - hash: "c3b34d8592f88622cad0f9353d08e739" + hash: "5220aecdd1516d94f0698e79f17fee57" } Frame { msec: 1856 - hash: "880f3cb9d5dbe06cdf17e3a953d4562d" + hash: "f3d8c908e61e5d61bbeeb9c6b5e8a704" } Frame { msec: 1872 - hash: "ed381ce920863a5a6627f383a88ea2fe" + hash: "f27867aeb39ef64ebd50b5d79b69337e" } Frame { msec: 1888 - hash: "b5bc40b8c4abb6458aeb67eda73507b6" + hash: "b807b4e74a0f008df3f4534901debe38" } Frame { msec: 1904 - hash: "482cb61b7fac4b1654483f846b8b6717" + hash: "e19832a0a7fcd57efe46cb0102a8d418" } Frame { msec: 1920 - hash: "e1a4a16d2cf5132a9fbb0869ed6082d9" + hash: "f0dcfd9b22f385fedfde964774480f85" } Frame { msec: 1936 @@ -762,171 +762,171 @@ VisualTest { } Frame { msec: 1952 - hash: "f8874aaab1e65cf9b86d6b5174c3d2c8" + hash: "746c60e03c50dc2e28c62fe52a8dd9d2" } Frame { msec: 1968 - hash: "d8490adeaa793352b812e832f4cb079a" + hash: "27d6da44b605cb38552147fdf451ef45" } Frame { msec: 1984 - hash: "85fdb99926ba34a25fa964df11af9a5a" + hash: "c41d5491c417531ee86ac6ec8571c6a8" } Frame { msec: 2000 - hash: "ad137a75981c181838d97cbe313063ac" + hash: "ac57c578e7e2cbb57e982d6da5fb7268" } Frame { msec: 2016 - hash: "bfa5cecfc0058b56ca66aa816ea098dc" + hash: "db40e242fabf119f0e7187eeb96a34a5" } Frame { msec: 2032 - hash: "53fe3960c2f332eb099fedd8421fcc94" + hash: "0850d4b73a664ee0f1ed6d6e0615ea80" } Frame { msec: 2048 - hash: "61b99ff526560c1589d2fc8737af2af2" + hash: "ae6cb0bfda1cea70b3641251d0dc60c4" } Frame { msec: 2064 - hash: "f9dd63709bed985f5d691d27c0d32484" + hash: "67a28c2188aecfc5dcccedd257789dbc" } Frame { msec: 2080 - hash: "964c20ada9ad9e83edd9b429bf681b83" + hash: "4355f220c8a87ad981088fb23bb15f11" } Frame { msec: 2096 - hash: "997bc44a319c8ce8212387f7564c4005" + hash: "2081c1ffe35f20dd827b3d9f52be90b3" } Frame { msec: 2112 - hash: "892eda6e7446321483ffb1dbf44a0432" + hash: "ba13b0b4790aec7084b5553fe0b0d72b" } Frame { msec: 2128 - hash: "62068dca6da7227882b6c3bc147c6f24" + hash: "7f289e50f1bbd570b6bc2ca1998f8493" } Frame { msec: 2144 - hash: "2cd0c351c53234d4bbf4d2c74d313f59" + hash: "8bb3a37f416032d40cb5f919abb42e30" } Frame { msec: 2160 - hash: "cf812f971bb4f8ab3116cf2b14c325df" + hash: "bcc69f859b3bff759e0c732c7adc23f0" } Frame { msec: 2176 - hash: "be296bd9ab4c38d95e6d7d445d8c7f68" + hash: "d3e8aae08a2518c039d6bda80fc520a4" } Frame { msec: 2192 - hash: "536d0214c8c3f69ce8d4e1585128b2b8" + hash: "955212dc28a6f8fe59c658401284d3a3" } Frame { msec: 2208 - hash: "f71452a0a6ef80758800d67e601a162b" + hash: "8eebcff152288a4ab2a3e64fd7ba6f80" } Frame { msec: 2224 - hash: "e57c099beb70d0a4ca2cbc94a2c3887e" + hash: "85fe363271d480163fb7847a3501472f" } Frame { msec: 2240 - hash: "84cea22f64ff8b8838a7db0b19af1a4e" + hash: "23190380ddcc4e3afce2164a4743d179" } Frame { msec: 2256 - hash: "04aa0d5d089779977f569d0f849b97dd" + hash: "40ca7c3d24883a8d3457de934b247280" } Frame { msec: 2272 - hash: "85b52e125142d52d531132939930dd93" + hash: "299ed19fa4d213e0e9dd127e8799d5fc" } Frame { msec: 2288 - hash: "19bc7b318c21a6ce2be8ebde2e624fc3" + hash: "e39a067860fa7dcb4efba87aee58cc77" } Frame { msec: 2304 - hash: "9cc744249cb031f0400e87893c1642af" + hash: "a709045723c4a9a2e85295fcc360eea9" } Frame { msec: 2320 - hash: "a834706bbf573f37cf9f59c6c6cbbfa5" + hash: "029428301287e4c7cd2f8a1fa6a25381" } Frame { msec: 2336 - hash: "8db3eea9d47a162d8b0ee9cd18e194f3" + hash: "aef25177af3511dc99004a1e37f7f5d3" } Frame { msec: 2352 - hash: "29da9b8da8f572ace93250abb8626a90" + hash: "f9e11fd7023a72366dacaaf19b2eb81c" } Frame { msec: 2368 - hash: "179b74316d885f9ee41066b9c475b57f" + hash: "51f7c896d79c900a2b54a8c756228200" } Frame { msec: 2384 - hash: "35464509ef5a9919af46a30d40c3edc7" + hash: "28c18081813c801c6793873ec23e6c0c" } Frame { msec: 2400 - hash: "aadec42355d38d149421ef6c93783e69" + hash: "39df3050c4100e8a4f6e648b4aa16ba7" } Frame { msec: 2416 - hash: "cb8609791270e8e3c13da4579f85595f" + hash: "752cb6969fa8b76abf4bb229edb2c21f" } Frame { msec: 2432 - hash: "93e81e036a1bc30cc63ce703f8f43a34" + hash: "54d50f6c980cb04a1634622a29a6f0e9" } Frame { msec: 2448 - hash: "d08d18adf9ca92cd6597c2f51ae90383" + hash: "d510db233f025b026f896b760848cc07" } Frame { msec: 2464 - hash: "f54ec103787023647beaa4b992340385" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2480 - hash: "61c9f72d78fce0b966a278abacc97ce6" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2496 - hash: "5b0500ed0562b11280c3424412f74188" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2512 - hash: "b8ee7bc1e94ce35bf946ee71fa03d72c" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2528 - hash: "60ec6aceeaf82fc730c3df55b5c06f90" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2544 - hash: "01cc732bad8b28483e79115c117ee26d" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2560 - hash: "b39c8d373524ba679c8567d16e6c5fe0" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2576 - hash: "2474476dfd021ff485c3a127bd22367e" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2592 - hash: "1342a1a0f6bc02159de1be058cf2411b" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2608 - hash: "a9721b64b9a5526335937245302249ae" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Mouse { type: 2 @@ -938,15 +938,15 @@ VisualTest { } Frame { msec: 2624 - hash: "109dc503ee86e731f52d25908daf5d36" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2640 - hash: "94998dbab6792c518ca1f37f060f1d4b" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Frame { msec: 2656 - hash: "3146ba4e63fa74279939b8de935f067c" + hash: "e5c8d361abcbc15df0b0b82728cb5b84" } Mouse { type: 5 @@ -966,7 +966,7 @@ VisualTest { } Frame { msec: 2672 - hash: "1aaea4143076bf8ba8190d94fcc89e64" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -986,7 +986,7 @@ VisualTest { } Frame { msec: 2688 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -1006,7 +1006,7 @@ VisualTest { } Frame { msec: 2704 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -1026,7 +1026,7 @@ VisualTest { } Frame { msec: 2720 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -1046,7 +1046,7 @@ VisualTest { } Frame { msec: 2736 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -1066,39 +1066,39 @@ VisualTest { } Frame { msec: 2752 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2768 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2784 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2800 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2816 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2832 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2848 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2864 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2880 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2896 @@ -1106,51 +1106,51 @@ VisualTest { } Frame { msec: 2912 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2928 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2944 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2960 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2976 - hash: "a0d8bb20189c3c65e5e72671788d9493" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 2992 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3008 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3024 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3040 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3056 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3072 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3088 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 2 @@ -1162,23 +1162,23 @@ VisualTest { } Frame { msec: 3104 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3120 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3136 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3152 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3168 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -1190,11 +1190,11 @@ VisualTest { } Frame { msec: 3184 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Frame { msec: 3200 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -1214,7 +1214,7 @@ VisualTest { } Frame { msec: 3216 - hash: "1236a317e60f7ae3d3fb2fb521bad2a2" + hash: "f728208b0fc2f230313c86378cf7f419" } Mouse { type: 5 @@ -1234,7 +1234,7 @@ VisualTest { } Frame { msec: 3232 - hash: "1b604ea70459a768fb37a6333000174b" + hash: "7d43010a9951054df82571936a04cc50" } Mouse { type: 5 @@ -1254,7 +1254,7 @@ VisualTest { } Frame { msec: 3248 - hash: "25e0aabe364085a61b4572ef015dac2c" + hash: "ab1980970c82238d2c37d61db4fc5153" } Mouse { type: 5 @@ -1274,7 +1274,7 @@ VisualTest { } Frame { msec: 3264 - hash: "ee6fc5c1de08e6f13f23b26829d2cba2" + hash: "849ffa1fdd718a48e9570b88987f9203" } Mouse { type: 5 @@ -1294,7 +1294,7 @@ VisualTest { } Frame { msec: 3280 - hash: "b077c59359d047738d9ba739f591393b" + hash: "d497eff3c8879d30619630e7ffcbf5c9" } Mouse { type: 5 @@ -1314,7 +1314,7 @@ VisualTest { } Frame { msec: 3296 - hash: "2cc0b8d7bd088f2277f5e939c234114c" + hash: "b0679dfe2f631e41f5cc269bd16d742c" } Mouse { type: 5 @@ -1334,7 +1334,7 @@ VisualTest { } Frame { msec: 3312 - hash: "64703db84cd5bda3109546293783804d" + hash: "ab2d88a4cd58d0064c32660272ff1dbd" } Mouse { type: 5 @@ -1354,7 +1354,7 @@ VisualTest { } Frame { msec: 3328 - hash: "137cd88932ad1fdbfdbf1a80cccf7b3f" + hash: "ea3cff28ff3be273332b19a2b8acb95e" } Mouse { type: 5 @@ -1374,7 +1374,7 @@ VisualTest { } Frame { msec: 3344 - hash: "ff9011d861c64bcad214b52cb4245583" + hash: "458decd62af57d333a07459c89e62393" } Mouse { type: 5 @@ -1394,7 +1394,7 @@ VisualTest { } Frame { msec: 3360 - hash: "c3f0132e472d29ddee95c7349243d33e" + hash: "1347a26241ed98d4913e1cb6cda58286" } Mouse { type: 5 @@ -1414,87 +1414,87 @@ VisualTest { } Frame { msec: 3376 - hash: "42ae9c21dce6a7cd59de228dac775dd5" + hash: "2efe07858c0c4de7fd3e339d7a24d5f5" } Frame { msec: 3392 - hash: "3f8631caf6a98d83356b188d6f94e9a6" + hash: "3edbe6755710ce148341faeb6980707a" } Frame { msec: 3408 - hash: "b2788cd1939a6dd42f12d8fd1282a122" + hash: "0f53231de64ac5b0503e92ad10155dea" } Frame { msec: 3424 - hash: "0d1ab6e9f2780be0c392d20f4b3b9619" + hash: "f2be693c23ea0885d6e8180c3062ba76" } Frame { msec: 3440 - hash: "03fdd91b352798b1ff958c23c0bc5f35" + hash: "207003ce6908f9707e9193a6c82a40c0" } Frame { msec: 3456 - hash: "028fee3630fdb3cf862213c0466a56fe" + hash: "ba86efade16e8965f59f6257ae90d131" } Frame { msec: 3472 - hash: "3ab76009ca029723e5cf0bf9bc154102" + hash: "1fdaaa68c4ed484536c207a0eacf6e72" } Frame { msec: 3488 - hash: "866c59b7dd545364b70ddbf21a8ee874" + hash: "d1223c8254f9e7e37c4e09628f38bce2" } Frame { msec: 3504 - hash: "9b4ff972b1055db38900fc0c5007e7b0" + hash: "c822447614f47b5e15ffad967964a061" } Frame { msec: 3520 - hash: "cbe0073c84617e23f0679a08c1a78492" + hash: "5eb2e64f11847cc9360291e14e866611" } Frame { msec: 3536 - hash: "374a5e6070dd628ed031e80d44be1f3f" + hash: "545dcc2645b50d78c84c658880d0500c" } Frame { msec: 3552 - hash: "4d16c81f877585a82549cfc4f68c574d" + hash: "9d984e07b99137b3cb57dd4df16b8237" } Frame { msec: 3568 - hash: "64b2b4c374a730b138b3573095f45d2c" + hash: "da27085e7a3cccde7cc3db2d9c6cc2cd" } Frame { msec: 3584 - hash: "26c59f4131fdb01ac4771231341c75c3" + hash: "8d8c117ca102cb93e752904fe3aee7bc" } Frame { msec: 3600 - hash: "bf6a3fdb7c516ca9cfc09f1059cc8cdf" + hash: "bfb5ed7b65f36d80e3156560a0ec58b7" } Frame { msec: 3616 - hash: "1bfb86796087cd293c68205cce6ac294" + hash: "bbd5f2b95325fde3b8759f2ef713c6bd" } Frame { msec: 3632 - hash: "e0f76f8fc7bd7756a4e004655f97f782" + hash: "1c36be8deb2079ed81f1718c92e44803" } Frame { msec: 3648 - hash: "61d3aa5f827452482d8a4a903fe64acc" + hash: "5a424e7e66d87d278483c43070920d56" } Frame { msec: 3664 - hash: "c8e42d3a5df195eaa091e50fc9dcd51e" + hash: "ae28bc20e20e022e1ac9bc2ddac0e134" } Frame { msec: 3680 - hash: "bb684dccf4c0a74dc091fb78c1be4f2b" + hash: "1551c4aae06a258bdadc9ef356724871" } Frame { msec: 3696 - hash: "54341e5a76fb4657021c41e6e3f3d496" + hash: "526aec43f710e524d247f8a4b08c261c" } Mouse { type: 2 @@ -1514,7 +1514,7 @@ VisualTest { } Frame { msec: 3712 - hash: "435ee710e108df42f659250ad7dbdb5e" + hash: "b50ef7198c1831623ed2210e651ac618" } Mouse { type: 5 @@ -1526,7 +1526,7 @@ VisualTest { } Frame { msec: 3728 - hash: "0c7078ec0d4a1dea84e0fba06323c533" + hash: "913269856c18d4f478eed1aa1d5ae293" } Mouse { type: 5 @@ -1546,7 +1546,7 @@ VisualTest { } Frame { msec: 3744 - hash: "854103790c02ca86fa011ef1b0f2be0a" + hash: "2c6a32e167bef4c3de0ca97e5764f31b" } Mouse { type: 5 @@ -1566,7 +1566,7 @@ VisualTest { } Frame { msec: 3760 - hash: "1a5995196e5bb4d1464ca76191af72d5" + hash: "88386cf4d982c5ca4e3fbd3519d9bd9c" } Mouse { type: 5 @@ -1586,7 +1586,7 @@ VisualTest { } Frame { msec: 3776 - hash: "397bbd080cae99790621642fab6ded91" + hash: "ecf04273061af5f881925f3a33015fbb" } Mouse { type: 5 @@ -1606,7 +1606,7 @@ VisualTest { } Frame { msec: 3792 - hash: "66ecad306911060329dcf7695c358e87" + hash: "b09c45ea79cd818bac6fe35e4167d4bd" } Mouse { type: 5 @@ -1626,7 +1626,7 @@ VisualTest { } Frame { msec: 3808 - hash: "c06da5f40f3f59f576a1d540d0b3244f" + hash: "4a1dbbac65a3caac16b38c45be61003c" } Mouse { type: 5 @@ -1646,7 +1646,7 @@ VisualTest { } Frame { msec: 3824 - hash: "a88d97691539dce19af4c14baf610275" + hash: "f4a805fc5c12cc3b2a22ef01050bf3aa" } Mouse { type: 5 @@ -1666,7 +1666,7 @@ VisualTest { } Frame { msec: 3840 - hash: "a07dca2c0014609ca5241612550992f5" + hash: "aa7805e4d806c4c56ded804145c44464" } Mouse { type: 5 @@ -1706,7 +1706,7 @@ VisualTest { } Frame { msec: 3872 - hash: "e5a4e76dd607ba1bae97aaf184ee009a" + hash: "fd2eab6b3a65713f057da22a412512c7" } Mouse { type: 5 @@ -1726,7 +1726,7 @@ VisualTest { } Frame { msec: 3888 - hash: "bb1d2614e590562479fc8d301bc7402f" + hash: "0dda191a66162db6365c663979b0990d" } Mouse { type: 5 @@ -1746,7 +1746,7 @@ VisualTest { } Frame { msec: 3904 - hash: "5d9fd2238666d3ae04613f1bba0fab05" + hash: "72a57fe4fc34a19040890a9e2a11dae5" } Mouse { type: 5 @@ -1766,7 +1766,7 @@ VisualTest { } Frame { msec: 3920 - hash: "b12a944cb5e593afbb21a10453879b52" + hash: "fd18bd5f8f09c995f122b8b4ecb80279" } Mouse { type: 5 @@ -1786,7 +1786,7 @@ VisualTest { } Frame { msec: 3936 - hash: "2f04c990978627b86fb2ad04579db0db" + hash: "8d33b6fa9d6525902e5611cf8ed2fa1f" } Mouse { type: 5 @@ -1798,7 +1798,7 @@ VisualTest { } Frame { msec: 3952 - hash: "e7ddf142fc36174fcaaa70b9340ef7a8" + hash: "d73a8eba0c43f214946052481f3db98f" } Mouse { type: 5 @@ -1818,7 +1818,7 @@ VisualTest { } Frame { msec: 3968 - hash: "4fce53c6f5347fe03ecf17b07fabe3ac" + hash: "c2f101636963ff5c61be2ad83c6b7ceb" } Mouse { type: 5 @@ -1846,111 +1846,111 @@ VisualTest { } Frame { msec: 3984 - hash: "75a0ec2c0158c55a90147c3f4afaa19c" + hash: "54630f489303c7ec2e94b4c941bd310f" } Frame { msec: 4000 - hash: "e89e98b7c1f36b74c664c77e121dedcb" + hash: "357106c752b13bcca047d55a3c7cd486" } Frame { msec: 4016 - hash: "f4c1e52a7b97a25fba640be2a1430d2d" + hash: "b00b78122721ddcded2c7131cfe40d53" } Frame { msec: 4032 - hash: "be58ca8f63dac8373825231512f483ca" + hash: "7da9e4197cb9be292e561790af1caa27" } Frame { msec: 4048 - hash: "755b16d4be00cb52595d42775d6227ac" + hash: "076fefc33455667af954dcc5a06017d3" } Frame { msec: 4064 - hash: "c62f1ebbb1e4ae4ca22c060078d6240b" + hash: "76edfedd2b9edcc5770dcce87b022427" } Frame { msec: 4080 - hash: "5f1187e9530584f9eb81ce1ce8267da0" + hash: "12e6711077da076b737aef1aaa336d42" } Frame { msec: 4096 - hash: "5dc9921e9ddf15ee0457fcdc834544c5" + hash: "1e19329fb839a00faa3b95d13b7a9015" } Frame { msec: 4112 - hash: "efacedc2782435ef4e269e6956fb3547" + hash: "7469fb57ce0b7ea9a7cc6da14f6a245a" } Frame { msec: 4128 - hash: "5b356dd3082f6b0920bb41d332595ce1" + hash: "17e3aca0838e2ba75cc9b869bb969220" } Frame { msec: 4144 - hash: "5d8afcc1abd890beb2badf85bcf02897" + hash: "32ebb24cee3ba65f9242708538203553" } Frame { msec: 4160 - hash: "03c56ab4fea11cce19fcbb62dccb7683" + hash: "948429b8ded1f688cd7e27e0f056f40c" } Frame { msec: 4176 - hash: "236254ce32a8e06dc42f2fd3c9ac6c7c" + hash: "c6fc2e8519a31bc18eb924ca98cd24be" } Frame { msec: 4192 - hash: "4beb33da77bc2b41eb882a2a5cdeb539" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4208 - hash: "b345470adead1ffb3af4d1091ffbd95c" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4224 - hash: "c2677f1653b08952338a5c26a724ebe7" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4240 - hash: "45b6633acf0ac28c5b5462920cf61282" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4256 - hash: "26a9a6609ce8eee1f744c2bd43494f22" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4272 - hash: "9373a8010a05d05cb5b3c2ec75359493" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4288 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4304 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4320 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4336 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4352 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4368 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4384 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 4400 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Mouse { type: 2 @@ -1962,7 +1962,7 @@ VisualTest { } Frame { msec: 4416 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Mouse { type: 5 @@ -1974,7 +1974,7 @@ VisualTest { } Frame { msec: 4432 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Mouse { type: 5 @@ -1994,7 +1994,7 @@ VisualTest { } Frame { msec: 4448 - hash: "d0c561761825512a02a9e3640139cadc" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Mouse { type: 5 @@ -2014,7 +2014,7 @@ VisualTest { } Frame { msec: 4464 - hash: "0e7554f077e2d6d8c6cf9496b20ab009" + hash: "d8f9d016318e0bd38d4654b4850da952" } Mouse { type: 5 @@ -2034,7 +2034,7 @@ VisualTest { } Frame { msec: 4480 - hash: "d6e78f43c971abcc1d2aadb96e8b80b0" + hash: "13a2382e08ab10ecb40f9c24c682a797" } Mouse { type: 5 @@ -2054,7 +2054,7 @@ VisualTest { } Frame { msec: 4496 - hash: "10d8e0ee5bd432c639963c9cedd25b85" + hash: "cef145c5d105466f3913bb81bb2b58df" } Mouse { type: 5 @@ -2074,7 +2074,7 @@ VisualTest { } Frame { msec: 4512 - hash: "53e142d6b0112644d75df29f7865fbb4" + hash: "9bc0a21266bebbf8fc3509e5f92dd77f" } Mouse { type: 5 @@ -2086,7 +2086,7 @@ VisualTest { } Frame { msec: 4528 - hash: "9609807e6c2a27a8b9f1d5c878c3dadf" + hash: "e419dbe857667b014e4dd9b57b01bbe4" } Mouse { type: 5 @@ -2098,7 +2098,7 @@ VisualTest { } Frame { msec: 4544 - hash: "a0a1e5fd37e9d8033f182f4f2b20fd26" + hash: "411cb7a7f331161059faba4ae6549229" } Mouse { type: 5 @@ -2110,7 +2110,7 @@ VisualTest { } Frame { msec: 4560 - hash: "b40e553dc373e4018488d5421b9a8914" + hash: "b008d6b2b444881c36521595f6b31539" } Mouse { type: 5 @@ -2122,7 +2122,7 @@ VisualTest { } Frame { msec: 4576 - hash: "22e36512a0af86fac12c09f735dcb1f7" + hash: "77fcc3c74c3832ae6b80aec420cb06e0" } Mouse { type: 5 @@ -2142,59 +2142,59 @@ VisualTest { } Frame { msec: 4592 - hash: "70e9ad0f56e4c37f8684e38f614b889d" + hash: "41d1c54bc76caeae057fb1bdb3b93843" } Frame { msec: 4608 - hash: "0754126f5738e3dcec35fc1ef65fdec3" + hash: "03fdd91b352798b1ff958c23c0bc5f35" } Frame { msec: 4624 - hash: "b3d84ceeecc294d21bc09a3197195c20" + hash: "2098ea8b55b54ca8dd648fb285c43ebf" } Frame { msec: 4640 - hash: "ce00501e194b1056edf1ebd43b954a70" + hash: "9929c509654819fd04da4e4b5c8e22b4" } Frame { msec: 4656 - hash: "793f41ac2568530e6d630446216833dc" + hash: "c470d3a57c6b56f9f56b176823b27d53" } Frame { msec: 4672 - hash: "e8573de724b653439bde85c15e9555ab" + hash: "37474b3a23f90dafee6b9e0043a702fa" } Frame { msec: 4688 - hash: "bfb3f3645c7b2425b686ac23bcef82b8" + hash: "0fbb6a9fded011b010fa6f3a2819630c" } Frame { msec: 4704 - hash: "faa78596e208c2cf4593ea25e31fabde" + hash: "6c5a7dad864999548257e4bf0ddc3687" } Frame { msec: 4720 - hash: "f1b0931bffce37abfe5a6d635f1f8454" + hash: "339bc42e559c66d07f37af5e06feacef" } Frame { msec: 4736 - hash: "0975630a55bfd56eb3e39426c1c3f1e5" + hash: "513dc773dc93275e32fa9ac61e6dcb46" } Frame { msec: 4752 - hash: "98f1d79153a8009123abc94141375779" + hash: "b725c84435b1f387dc3f375280e39de6" } Frame { msec: 4768 - hash: "d864817f877a9eeb44c665518ea19687" + hash: "f3d04b513df286aacb9ebdb107d7a0b4" } Frame { msec: 4784 - hash: "79745c267d14e7790e1bb3a7e76f20b4" + hash: "c22839005ed0cb6b2fa9c958d17fd948" } Frame { msec: 4800 - hash: "ec038d4cec64b847711fa221f808bead" + hash: "2fb9a2d5d22a6d0ed567328ffaa512f0" } Frame { msec: 4816 @@ -2202,239 +2202,239 @@ VisualTest { } Frame { msec: 4832 - hash: "ef7b3f93abbf210f8f0d38a58380dc8f" + hash: "ba13b0b4790aec7084b5553fe0b0d72b" } Frame { msec: 4848 - hash: "f0eea63127df25f7f818596fc034fef8" + hash: "2bc983733d4004cc67a56d77e9f48e5d" } Frame { msec: 4864 - hash: "8000dee3ea54522a8193a7f9f2e86023" + hash: "0f729cbe41b155b6eef20a4be207b853" } Frame { msec: 4880 - hash: "111485ebaf93aae4f5e0a83da898bbac" + hash: "c2ca47a7d70ef827029b32c11a052b83" } Frame { msec: 4896 - hash: "4b2dee1fd88dcaeabc8235f6a0e5c090" + hash: "803aefca7f1cbd494d2d2f7e7eea9a3f" } Frame { msec: 4912 - hash: "5e560c777d0294dfa8f249232bfcf3a2" + hash: "2641683e1fa9ed418ac89631be7922f1" } Frame { msec: 4928 - hash: "d8b490092ca5ce3ef9b078f4768c382a" + hash: "3d9370305ca147625828f7ee3b34ca33" } Frame { msec: 4944 - hash: "28b2bbc3fd19786dd9c0ab718141c525" + hash: "5cdfdd22a0dc1ed78035ae4b5e2e26a7" } Frame { msec: 4960 - hash: "d1a61000ebc5a475c0223dde649c8054" + hash: "2af663981b43dbe699849eff4731829a" } Frame { msec: 4976 - hash: "d3e8aae08a2518c039d6bda80fc520a4" + hash: "b159d3a09666327bd2d860bf56920734" } Frame { msec: 4992 - hash: "9f3bd8654adb9af0457dd50ff71fcd43" + hash: "a1ed6f686f4cda9aa59bfd49deb8a075" } Frame { msec: 5008 - hash: "befe00fef613b7616e2dc668a5ed59c7" + hash: "c5f1862e7cbb1dcd6b303e58c525ab5c" } Frame { msec: 5024 - hash: "24e84e6998389aa119d7d9e0ac2206ac" + hash: "3cc5e5d87067978961eee6e7b33ada06" } Frame { msec: 5040 - hash: "2d3d2b66bf016c8e499f527dbf8923db" + hash: "74f3b0eae443bd9f171020fd973ca960" } Frame { msec: 5056 - hash: "52d24673729dbd53d3227675b7001b24" + hash: "432037812ab1a09e0d0b32dfaf0f876e" } Frame { msec: 5072 - hash: "4e5c807682d7b6b7839c047a7fb4ad93" + hash: "0eec7146b8df3b4892e89abd13b8bc9d" } Frame { msec: 5088 - hash: "319affea47c4a0b0e2c3db51b85430bc" + hash: "a01dc5f4b4307aa66068d21159dd64d5" } Frame { msec: 5104 - hash: "344962f0b88c7e8a33df71b4708fd1c0" + hash: "11eefdf5b1be8493a6ed9aaf519c7e17" } Frame { msec: 5120 - hash: "ac099ba8a5639b9c83b6f58f2b5bcf93" + hash: "55ed797b82f5bca2ac2b5954c44c041e" } Frame { msec: 5136 - hash: "2f8e57c93289dcdc758281531300e949" + hash: "498d4ca9faabf8b59e2359b60dc1aff2" } Frame { msec: 5152 - hash: "e4cc3bdf6068064bcfdd0014cc301e65" + hash: "78895368b141ab6d3a16f65f4389b2d5" } Frame { msec: 5168 - hash: "598c8a33e2bbf47b21df8b0636e0f0bc" + hash: "c73b27167bad79f3f3c5ebb64fa579c2" } Frame { msec: 5184 - hash: "6aea67c85370eee8447a22e2b9e8c44c" + hash: "fb05312d65155f0300f456d727698b80" } Frame { msec: 5200 - hash: "39e27a3376f4aba8510f7b0d90ca0e33" + hash: "6e974736a0ecea6a71c1a7052a14fa20" } Frame { msec: 5216 - hash: "0ff93a16a07af43bd5e22a2b00fd2588" + hash: "f5daf5bec03d3e56c877e9b2dc5701b6" } Frame { msec: 5232 - hash: "8b6004368b9b0a766f6b519820fe1ff6" + hash: "29793d2147563feb9ed0ebff18b303cd" } Frame { msec: 5248 - hash: "5d92c0a12ff138d1b2c75bd042be4ea2" + hash: "5b63dfa3cb7ac0847f2e63f9d2a0b2b6" } Frame { msec: 5264 - hash: "4386b0abe49106a0174154c726c301f6" + hash: "cf2f42dd9830d80f50df30e93a0b1ad2" } Frame { msec: 5280 - hash: "832da8d2a86caa3ca96f33d2cd49178e" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5296 - hash: "efee6ab1ba4a1112f2129aad12825667" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5312 - hash: "f20a7e67a4789c559b0b0a7656bd89b1" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5328 - hash: "350cc8c0085a8f79c9ea8880737a0b75" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5344 - hash: "b19715b4029ea489debf7c5a269aca98" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5360 - hash: "f383fcaf603af41650c5622bfaf136b3" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5376 - hash: "0c62a442367fc0bac5117da1327ed39a" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5392 - hash: "323ba45d158d983f359211f1a87b7ebd" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5408 - hash: "aeed1a31b8b77dac2c2858969ff2d86c" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5424 - hash: "27a9357730a97846ffeddd18492df04d" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5440 - hash: "42f78593e64585b33c8854e8ea92710e" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5456 - hash: "064f5cec99b9a351bebe2088019f46d1" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5472 - hash: "d3669826f94aa2afc1069ab967f677a3" + hash: "8abb0aa8951612338c3bb87c7a0d2509" } Frame { msec: 5488 - hash: "a118cf8892d29e6b70b4e65e42380c15" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5504 - hash: "f254260f01ff4697e9e3146cc106140d" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5520 - hash: "ec062b2bb87444115c2e8744b7f80bde" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5536 - hash: "4d45522a4e4253c810cac9cbf24c9b76" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5552 - hash: "532c3d3ead73836948a1036e8e69cadf" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5568 - hash: "4debea14aeac85ff4e64387938d8b010" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5584 - hash: "d8940cf6e39a1bd5e7216a83ce87a676" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5600 - hash: "fba6485f8a60a38ce2f3110137b1f2df" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5616 - hash: "8a8909b114332dd932b784a2640e9ff4" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5632 - hash: "fd901422400333c137240ef5f91928a3" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5648 - hash: "97b84a957515d5823e381fdd86d31fb8" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5664 - hash: "f3547ea694b88dd7d2fb8b04d6bf76a9" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5680 - hash: "9eb0da29d0c323b45e62d31bee97ce8c" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5696 - hash: "9d814096d27e9fbcffdf7e29866e0059" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5712 - hash: "6087185e1e8bf17545a7372be2990ab2" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5728 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5744 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5760 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5776 @@ -2442,126 +2442,126 @@ VisualTest { } Frame { msec: 5792 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5808 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5824 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5840 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5856 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5872 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5888 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5904 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5920 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5936 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5952 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5968 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 5984 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6000 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6016 - hash: "82e534c416dfe884e5abc2f91d902484" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6032 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6048 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6064 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6080 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6096 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6112 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6128 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6144 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6160 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6176 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6192 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6208 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6224 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6240 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6256 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } Frame { msec: 6272 - hash: "6839b467f32eaa79d4c1ce4905145350" + hash: "a29d4b3fa16829823e63bf83e7b62aff" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml index 4374b84..08499e7 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml @@ -35,6 +35,8 @@ Rectangle { id: photoPathView; model: rssModel; delegate: photoDelegate anchors.fill: parent; z: 1 anchors.topMargin:40 + highlightMoveDuration: 200 + flickDeceleration: 200 path: Path { startX: -50; startY: 40; -- cgit v0.12 From e1ac82f713ab2a766ae518f3ec7a7f76689acb48 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Thu, 23 Dec 2010 13:14:06 +1000 Subject: Improve docs for QTEST_MAIN macro. The macro doesn't always create a QApplication, it depends on whether QT_GUI_LIB is defined. Task-number: QTBUG-3899 Reviewed-by: Rohan McGovern --- src/testlib/qtestcase.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index e3a8726..207873e 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -298,10 +298,14 @@ QT_BEGIN_NAMESPACE \relates QTest - Implements a main() function that instantiates a QApplication object and + Implements a main() function that instantiates an application object and the \a TestClass, and executes all tests in the order they were defined. Use this macro to build stand-alone executables. + If \c QT_GUI_LIB is defined, the application object will be a QApplication, + otherwise it will be a QCoreApplication. If qmake is used and the configuration + includes \c{QT += gui}, then \c QT_GUI_LIB will be defined automatically. + \bold {Note:} On platforms that have keypad navigation enabled by default (eg: Symbian), this macro will forcfully disable it to simplify the usage of key events when writing autotests. If you wish to write a test case that uses keypad navigation, you should -- cgit v0.12 From 34630042ded25177b49f8e54b41269db1be42935 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 23 Dec 2010 13:17:20 +1000 Subject: Try fixing build error on Windows --- .../declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro index 472cffb..efcea12 100644 --- a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro +++ b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro @@ -1,5 +1,5 @@ load(qttest_p4) -contains(QT_CONFIG,declarative): QT += declarative script gui +contains(QT_CONFIG,declarative): QT += declarative script gui network contains(QT_CONFIG,xmlpatterns) { QT += xmlpatterns DEFINES += QTEST_XMLPATTERNS -- cgit v0.12 From 16d08f97eaa7dd0469d7c9006546f86f1fd763f6 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 23 Dec 2010 13:13:36 +1000 Subject: Models which load incrementally via fetchMore() don't work. Call canFetchMore()/fetchMore() on setModel(), setRootIndex() and when the last item is created. Task-number: QTBUG-16039 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativevisualitemmodel.cpp | 6 ++ .../qdeclarativelistview/incrementalmodel.cpp | 89 ++++++++++++++++++++++ .../qdeclarativelistview/incrementalmodel.h | 68 +++++++++++++++++ .../qdeclarativelistview/qdeclarativelistview.pro | 3 +- .../tst_qdeclarativelistview.cpp | 28 +++++++ 5 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativelistview/incrementalmodel.cpp create mode 100644 tests/auto/declarative/qdeclarativelistview/incrementalmodel.h diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 4f5213a..bf9263b 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -773,6 +773,8 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model) 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; + if (d->m_abstractItemModel->canFetchMore(d->m_root)) + d->m_abstractItemModel->fetchMore(d->m_root); return; } if ((d->m_visualItemModel = qvariant_cast(model))) { @@ -870,6 +872,8 @@ void QDeclarativeVisualDataModel::setRootIndex(const QVariant &root) if (d->m_root != modelIndex) { int oldCount = d->modelCount(); d->m_root = modelIndex; + if (d->m_abstractItemModel && d->m_abstractItemModel->canFetchMore(modelIndex)) + d->m_abstractItemModel->fetchMore(modelIndex); int newCount = d->modelCount(); if (d->m_delegate && oldCount) emit itemsRemoved(0, oldCount); @@ -1094,6 +1098,8 @@ QDeclarativeItem *QDeclarativeVisualDataModel::item(int index, const QByteArray d->m_delegateValidated = true; } } + if (d->modelCount()-1 == index && d->m_abstractItemModel && d->m_abstractItemModel->canFetchMore(d->m_root)) + d->m_abstractItemModel->fetchMore(d->m_root); return item; } diff --git a/tests/auto/declarative/qdeclarativelistview/incrementalmodel.cpp b/tests/auto/declarative/qdeclarativelistview/incrementalmodel.cpp new file mode 100644 index 0000000..b2c9df5 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/incrementalmodel.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 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 "incrementalmodel.h" +#include +#include + +IncrementalModel::IncrementalModel(QObject *parent) + : QAbstractListModel(parent), count(0) +{ + for (int i = 0; i < 100; ++i) + list.append("Item " + QString::number(i)); +} + +int IncrementalModel::rowCount(const QModelIndex & /* parent */) const +{ + return count; +} + +QVariant IncrementalModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (index.row() >= list.size() || index.row() < 0) + return QVariant(); + + if (role == Qt::DisplayRole) + return list.at(index.row()); + return QVariant(); +} + +bool IncrementalModel::canFetchMore(const QModelIndex & /* index */) const +{ + if (count < list.size()) + return true; + else + return false; +} + +void IncrementalModel::fetchMore(const QModelIndex & /* index */) +{ + int remainder = list.size() - count; + int itemsToFetch = qMin(5, remainder); + + beginInsertRows(QModelIndex(), count, count+itemsToFetch-1); + + count += itemsToFetch; + + endInsertRows(); +} diff --git a/tests/auto/declarative/qdeclarativelistview/incrementalmodel.h b/tests/auto/declarative/qdeclarativelistview/incrementalmodel.h new file mode 100644 index 0000000..b1f7407 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/incrementalmodel.h @@ -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 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$ +** +****************************************************************************/ + +#ifndef IncrementalModel_H +#define IncrementalModel_H + +#include +#include +#include + +class IncrementalModel : public QAbstractListModel +{ + Q_OBJECT + +public: + IncrementalModel(QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + +protected: + bool canFetchMore(const QModelIndex &parent) const; + void fetchMore(const QModelIndex &parent); + +private: + QStringList list; + int count; +}; + +#endif diff --git a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro index 2c5a859..8c99f08 100644 --- a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro +++ b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro @@ -2,7 +2,8 @@ load(qttest_p4) contains(QT_CONFIG,declarative): QT += declarative macx:CONFIG -= app_bundle -SOURCES += tst_qdeclarativelistview.cpp +HEADERS += incrementalmodel.h +SOURCES += tst_qdeclarativelistview.cpp incrementalmodel.cpp symbian: { importFiles.sources = data diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index dba0cc4..e76cb15 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -51,6 +51,7 @@ #include #include #include "../../../shared/util.h" +#include "incrementalmodel.h" #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir @@ -106,6 +107,7 @@ private slots: void resizeDelegate(); void QTBUG_16037(); void indexAt(); + void incrementalModel(); private: template void items(); @@ -1998,6 +2000,32 @@ void tst_QDeclarativeListView::indexAt() delete canvas; } +void tst_QDeclarativeListView::incrementalModel() +{ + QDeclarativeView *canvas = createView(); + + IncrementalModel model; + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/displaylist.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = findItem(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QTRY_COMPARE(listview->count(), 20); + + listview->positionViewAtIndex(10, QDeclarativeListView::Beginning); + + QTRY_COMPARE(listview->count(), 25); + + delete canvas; +} + void tst_QDeclarativeListView::qListModelInterface_items() { items(); -- cgit v0.12 From 508d52477fe16f3b425e5d3ec65584e86ed939b3 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 23 Dec 2010 15:01:58 +1000 Subject: Improve docs on attached properties on view delegates. Clarify that the properties are attached to the root of the delegate, and must be accessed as such by child items. Task-number: QTBUG-16193 Reviewed-by: Bea Lam --- doc/src/snippets/declarative/gridview/gridview.qml | 26 ++++++++++++++++++++++ doc/src/snippets/declarative/listview/listview.qml | 14 ++++++++---- .../declarative/pathview/pathattributes.qml | 4 ++-- doc/src/snippets/declarative/pathview/pathview.qml | 14 ++++++++++-- .../graphicsitems/qdeclarativegridview.cpp | 9 ++++++++ .../graphicsitems/qdeclarativelistview.cpp | 7 ++++++ .../graphicsitems/qdeclarativepathview.cpp | 9 ++++++++ 7 files changed, 75 insertions(+), 8 deletions(-) diff --git a/doc/src/snippets/declarative/gridview/gridview.qml b/doc/src/snippets/declarative/gridview/gridview.qml index 73e58ec..87d70de 100644 --- a/doc/src/snippets/declarative/gridview/gridview.qml +++ b/doc/src/snippets/declarative/gridview/gridview.qml @@ -132,6 +132,32 @@ GridView { } //![highlightFollowsCurrentItem] +//![isCurrentItem] +GridView { + width: 300; height: 200 + cellWidth: 80; cellHeight: 80 + + Component { + id: contactsDelegate + Rectangle { + id: wrapper + width: 80 + height: 80 + color: GridView.isCurrentItem ? "black" : "red" + Text { + id: contactInfo + text: name + ": " + number + color: wrapper.GridView.isCurrentItem ? "red" : "black" + } + } + } + + model: ContactModel {} + delegate: contactsDelegate + focus: true +} +//![isCurrentItem] + } } diff --git a/doc/src/snippets/declarative/listview/listview.qml b/doc/src/snippets/declarative/listview/listview.qml index 8ba47a8..370429e 100644 --- a/doc/src/snippets/declarative/listview/listview.qml +++ b/doc/src/snippets/declarative/listview/listview.qml @@ -127,10 +127,16 @@ ListView { Component { id: contactsDelegate - Text { - id: contactInfo - text: name + ": " + number - color: contactInfo.ListView.isCurrentItem ? "red" : "black" + Rectangle { + id: wrapper + width: 180 + height: contactInfo.height + color: ListView.isCurrentItem ? "black" : "red" + Text { + id: contactInfo + text: name + ": " + number + color: wrapper.ListView.isCurrentItem ? "red" : "black" + } } } diff --git a/doc/src/snippets/declarative/pathview/pathattributes.qml b/doc/src/snippets/declarative/pathview/pathattributes.qml index d6dacdb..be933e0 100644 --- a/doc/src/snippets/declarative/pathview/pathattributes.qml +++ b/doc/src/snippets/declarative/pathview/pathattributes.qml @@ -52,8 +52,8 @@ Rectangle { scale: PathView.iconScale opacity: PathView.iconOpacity Column { - Image { anchors.horizontalCenter: name.horizontalCenter; width: 64; height: 64; source: icon } - Text { text: name; font.pointSize: 16} + Image { anchors.horizontalCenter: nameText.horizontalCenter; width: 64; height: 64; source: icon } + Text { id: nameText; text: name; font.pointSize: 16 } } } } diff --git a/doc/src/snippets/declarative/pathview/pathview.qml b/doc/src/snippets/declarative/pathview/pathview.qml index 93298c4..e5e90a4 100644 --- a/doc/src/snippets/declarative/pathview/pathview.qml +++ b/doc/src/snippets/declarative/pathview/pathview.qml @@ -48,8 +48,18 @@ Rectangle { Component { id: delegate Column { - Image { anchors.horizontalCenter: name.horizontalCenter; width: 64; height: 64; source: icon } - Text { text: name; font.pointSize: 16 } + id: wrapper + Image { + anchors.horizontalCenter: nameText.horizontalCenter + width: 64; height: 64 + source: icon + } + Text { + id: nameText + text: name + font.pointSize: 16 + color: wrapper.PathView.isCurrentItem ? "red" : "black" + } } } //! [1] diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 4a6a9dc..7ddf6a2 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1131,6 +1131,13 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. + GridView attaches a number of properties to the root item of the delegate, for example + \c {GridView.isCurrentItem}. In the following example, the root delegate item can access + this attached property directly as \c GridView.isCurrentItem, while the child + \c contactInfo object must refer to this property as \c wrapper.GridView.isCurrentItem. + + \snippet doc/src/snippets/declarative/gridview/gridview.qml isCurrentItem + \note Views do not set the \l{Item::}{clip} property automatically. If the view is not clipped by another item or the screen, it will be necessary to set this property to true in order to clip the items that are partially or @@ -1167,6 +1174,8 @@ QDeclarativeGridView::~QDeclarativeGridView() This attached property holds the view that manages this delegate instance. It is attached to each instance of the delegate. + + \snippet doc/src/snippets/declarative/gridview/gridview.qml isCurrentItem */ /*! diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 86c8756..702442b 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1416,6 +1416,13 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. + ListView attaches a number of properties to the root item of the delegate, for example + \c {ListView.isCurrentItem}. In the following example, the root delegate item can access + this attached property directly as \c ListView.isCurrentItem, while the child + \c contactInfo object must refer to this property as \c wrapper.ListView.isCurrentItem. + + \snippet doc/src/snippets/declarative/listview/listview.qml isCurrentItem + \note Views do not enable \e clip automatically. If the view is not clipped by another item or the screen, it will be necessary to set \e {clip: true} in order to have the out of view items clipped diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index a6f44b3..e3987d0 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -393,6 +393,13 @@ void QDeclarativePathViewPrivate::regenerate() Delegates are instantiated as needed and may be destroyed at any time. State should \e never be stored in a delegate. + PathView attaches a number of properties to the root item of the delegate, for example + \c {PathView.isCurrentItem}. In the following example, the root delegate item can access + this attached property directly as \c PathView.isCurrentItem, while the child + \c nameText object must refer to this property as \c wrapper.PathView.isCurrentItem. + + \snippet doc/src/snippets/declarative/pathview/pathview.qml 1 + \bold Note that views do not enable \e clip automatically. If the view is not clipped by another item or the screen, it will be necessary to set \e {clip: true} in order to have the out of view items clipped @@ -452,6 +459,8 @@ QDeclarativePathView::~QDeclarativePathView() It is attached to each instance of the delegate. This property may be used to adjust the appearance of the current item. + + \snippet doc/src/snippets/declarative/pathview/pathview.qml 1 */ /*! -- cgit v0.12 From 93edc0680b8ca9cccefa31f8d2df08b0fc8f32f8 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 23 Dec 2010 15:21:32 +1000 Subject: More docs for FolderListModel --- .../qdeclarativefolderlistmodel.cpp | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp index 9c71004..7b05bc5 100644 --- a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp +++ b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp @@ -190,6 +190,12 @@ QVariant QDeclarativeFolderListModel::data(const QModelIndex &index, int role) c return rv; } +/*! + \qmlproperty int FolderListModel::count + + Returns the number of items in the current folder that match the + filter criteria. +*/ int QDeclarativeFolderListModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); @@ -225,6 +231,11 @@ void QDeclarativeFolderListModel::setFolder(const QUrl &folder) } } +/*! + \qmlproperty url FolderListModel::parentFolder + + Returns the URL of the parent of of the current \l folder. +*/ QUrl QDeclarativeFolderListModel::parentFolder() const { QString localFile = d->folder.toLocalFile(); @@ -286,6 +297,21 @@ void QDeclarativeFolderListModel::componentComplete() QMetaObject::invokeMethod(this, "refresh", Qt::QueuedConnection); } +/*! + \qmlproperty enumeration FolderListModel::sortField + + The \a sortField property contains field to use for sorting. sortField + may be one of: + \list + \o Unsorted - no sorting is applied. The order is system default. + \o Name - sort by filename + \o Time - sort by time modified + \o Size - sort by file size + \o Type - sort by file type (extension) + \endlist + + \sa sortReversed +*/ QDeclarativeFolderListModel::SortField QDeclarativeFolderListModel::sortField() const { return d->sortField; @@ -299,6 +325,13 @@ void QDeclarativeFolderListModel::setSortField(SortField field) } } +/*! + \qmlproperty bool FolderListModel::sortReversed + + If set to true, reverses the sort order. The default is false. + + \sa sortField +*/ bool QDeclarativeFolderListModel::sortReversed() const { return d->sortReversed; -- cgit v0.12 From eb395badcba6eada75ad5e6a72b74f5204170ed9 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 23 Dec 2010 15:41:09 +1000 Subject: WorkerScript could starve image loading of CPU. We use idle priority for image loading and XmlListModel in order to keep the UI responsive, but WorkerScript used LowPriority which would significantly reduce CPU available for image loading. Task-number: QTBUG-16167 --- src/declarative/qml/qdeclarativeworkerscript.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativeworkerscript.cpp b/src/declarative/qml/qdeclarativeworkerscript.cpp index 4b78020..9dc214f 100644 --- a/src/declarative/qml/qdeclarativeworkerscript.cpp +++ b/src/declarative/qml/qdeclarativeworkerscript.cpp @@ -458,7 +458,7 @@ QDeclarativeWorkerScriptEngine::QDeclarativeWorkerScriptEngine(QDeclarativeEngin { d->m_lock.lock(); connect(d, SIGNAL(stopThread()), this, SLOT(quit()), Qt::DirectConnection); - start(QThread::LowPriority); + start(QThread::IdlePriority); d->m_wait.wait(&d->m_lock); d->moveToThread(this); d->m_lock.unlock(); -- cgit v0.12 From 03f94089a16cf6b6a3b533ba1f90444eb18c29ab Mon Sep 17 00:00:00 2001 From: Charles Yin Date: Thu, 4 Nov 2010 15:38:57 +1000 Subject: Add Postgresql 8.x and 9 supports Change-Id: Ic740686ead768cc3e106703049d878549dfd3c6a Task-number:QTBUG-14206 Reviewed-by: Michael Goddard --- src/sql/drivers/psql/qsql_psql.cpp | 116 ++++++++++++++++++++++---------- src/sql/drivers/psql/qsql_psql.h | 6 +- tests/auto/qsqldatabase/tst_databases.h | 2 + 3 files changed, 88 insertions(+), 36 deletions(-) diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 2a4e595..bf9685f 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -54,7 +54,6 @@ #include #include - #include #include @@ -619,6 +618,50 @@ static void setDatestyle(PGconn* connection) PQclear(result); } +static QPSQLDriver::Protocol qMakePSQLVersion(int vMaj, int vMin) +{ + switch (vMaj) { + case 6: + return QPSQLDriver::Version6; + case 7: + { + switch (vMin) { + case 1: + return QPSQLDriver::Version71; + case 3: + return QPSQLDriver::Version73; + case 4: + return QPSQLDriver::Version74; + default: + return QPSQLDriver::Version7; + } + break; + } + case 8: + { + switch (vMin) { + case 1: + return QPSQLDriver::Version81; + case 2: + return QPSQLDriver::Version82; + case 3: + return QPSQLDriver::Version83; + case 4: + return QPSQLDriver::Version84; + default: + return QPSQLDriver::Version8; + } + break; + } + case 9: + return QPSQLDriver::Version9; + break; + default: + break; + } + return QPSQLDriver::VersionUnknown; +} + static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection) { QPSQLDriver::Protocol serverVersion = QPSQLDriver::Version6; @@ -626,50 +669,44 @@ static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection) int status = PQresultStatus(result); if (status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK) { QString val = QString::fromAscii(PQgetvalue(result, 0, 0)); + QRegExp rx(QLatin1String("(\\d+)\\.(\\d+)")); rx.setMinimal(true); // enforce non-greedy RegExp + if (rx.indexIn(val) != -1) { int vMaj = rx.cap(1).toInt(); int vMin = rx.cap(2).toInt(); - - switch (vMaj) { - case 7: - switch (vMin) { - case 0: - serverVersion = QPSQLDriver::Version7; - break; - case 1: - case 2: - serverVersion = QPSQLDriver::Version71; - break; - default: - serverVersion = QPSQLDriver::Version73; - break; - } - break; - case 8: - switch (vMin) { - case 0: - serverVersion = QPSQLDriver::Version8; - break; - case 1: - serverVersion = QPSQLDriver::Version81; - break; - case 2: - default: - serverVersion = QPSQLDriver::Version82; - break; - } - break; - default: - break; + serverVersion = qMakePSQLVersion(vMaj, vMin); +#ifdef PG_MAJORVERSION + if (rx.indexIn(QLatin1String(PG_MAJORVERSION)) != -1) { + vMaj = rx.cap(1).toInt(); + vMin = rx.cap(2).toInt(); + } + QPSQLDriver::Protocol clientVersion = qMakePSQLVersion(vMaj, vMin); + + if (serverVersion >= QPSQLDriver::Version9 && clientVersion < QPSQLDriver::Version9) { + //Client version before QPSQLDriver::Version9 only supports escape mode for bytea type, + //but bytea format is set to hex by default in PSQL 9 and above. So need to force the + //server use the old escape mode when connects to the new server with old client library. + result = PQexec(connection, "SET bytea_output=escape; "); + status = PQresultStatus(result); + } else if (serverVersion == QPSQLDriver::VersionUnknown) { + serverVersion = clientVersion; + if (serverVersion != QPSQLDriver::VersionUnknown) + qWarning("The server version of this PostgreSQL is unknown, falling back to the client version."); } +#endif } } PQclear(result); - if (serverVersion < QPSQLDriver::Version71) + //keep the old behavior unchanged + if (serverVersion == QPSQLDriver::VersionUnknown) + serverVersion = QPSQLDriver::Version6; + + if (serverVersion < QPSQLDriver::Version71) { qWarning("This version of PostgreSQL is not supported and may not work."); + } return serverVersion; } @@ -852,7 +889,10 @@ bool QPSQLDriver::commitTransaction() // This hack can dissapear once there is an API to query this sort of information. if (d->pro == QPSQLDriver::Version8 || d->pro == QPSQLDriver::Version81 || - d->pro == QPSQLDriver::Version82) { + d->pro == QPSQLDriver::Version82 || + d->pro == QPSQLDriver::Version83 || + d->pro == QPSQLDriver::Version84 || + d->pro == QPSQLDriver::Version9) { transaction_failed = qstrcmp(PQcmdStatus(res), "ROLLBACK") == 0; } @@ -963,6 +1003,9 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const case QPSQLDriver::Version8: case QPSQLDriver::Version81: case QPSQLDriver::Version82: + case QPSQLDriver::Version83: + case QPSQLDriver::Version84: + case QPSQLDriver::Version9: stmt = QLatin1String("SELECT pg_attribute.attname, pg_attribute.atttypid::int, " "pg_class.relname " "FROM pg_attribute, pg_class " @@ -1046,6 +1089,9 @@ QSqlRecord QPSQLDriver::record(const QString& tablename) const case QPSQLDriver::Version8: case QPSQLDriver::Version81: case QPSQLDriver::Version82: + case QPSQLDriver::Version83: + case QPSQLDriver::Version84: + case QPSQLDriver::Version9: stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, " "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, " "pg_attrdef.adsrc " diff --git a/src/sql/drivers/psql/qsql_psql.h b/src/sql/drivers/psql/qsql_psql.h index 22871ff..107da87 100644 --- a/src/sql/drivers/psql/qsql_psql.h +++ b/src/sql/drivers/psql/qsql_psql.h @@ -97,6 +97,7 @@ class Q_EXPORT_SQLDRIVER_PSQL QPSQLDriver : public QSqlDriver Q_OBJECT public: enum Protocol { + VersionUnknown = -1, Version6 = 6, Version7 = 7, Version71 = 8, @@ -104,7 +105,10 @@ public: Version74 = 10, Version8 = 11, Version81 = 12, - Version82 = 13 + Version82 = 13, + Version83 = 14, + Version84 = 15, + Version9 = 16, }; explicit QPSQLDriver(QObject *parent=0); diff --git a/tests/auto/qsqldatabase/tst_databases.h b/tests/auto/qsqldatabase/tst_databases.h index 80535df..82ee41a 100644 --- a/tests/auto/qsqldatabase/tst_databases.h +++ b/tests/auto/qsqldatabase/tst_databases.h @@ -235,6 +235,8 @@ public: // addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "postgres74-nokia.trolltech.com.au" ); // Version 7.4.19-1.el4_6.1 // addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql81.apac.nokia.com" ); // Version 8.1.11-1.el5_1.1 // addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql84.apac.nokia.com" ); // Version 8.4.1-2.1.i586 +// addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql90.apac.nokia.com" ); // Version 9.0.0 + // addDb( "QDB2", "testdb", "troll", "trond", "silence.nokia.troll.no" ); // DB2 v9.1 on silence -- cgit v0.12 From 26d2580daab37f4a6ff595a5f18b8a49249b5da1 Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Thu, 23 Dec 2010 14:31:54 +0100 Subject: improve performance of QTextEngine, esp. setBoundary by using non-detaching operator[] Improves scrolling in testfile content.xml attached to QTBUG-9549. According to callgrind, the improvement is nearly 35% (comparing total incl. cost of QTextEngine::setBoundary) total incl cost / calls to setBoundary = before: 6.0883269E9 / 46520 = approx. 130875.47 after: 2.4834313E9 / 29370 = approx. 84556.733 in relation this gives us: 84556.733 / 130875.47 = approx. 0.64608542 Merge-request: 975 Reviewed-by: Harald Fernengel --- src/gui/text/qtextengine.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 3bd6122..17d5fc1 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -894,16 +894,16 @@ void QTextEngine::shapeText(int item) const if (letterSpacingIsAbsolute) glyphs.advances_x[i-1] += letterSpacing; else { - const QFixed advance = glyphs.advances_x[i-1]; - glyphs.advances_x[i-1] += (letterSpacing - 100) * advance / 100; + QFixed &advance = glyphs.advances_x[i-1]; + advance += (letterSpacing - 100) * advance / 100; } } } if (letterSpacingIsAbsolute) glyphs.advances_x[si.num_glyphs-1] += letterSpacing; else { - const QFixed advance = glyphs.advances_x[si.num_glyphs-1]; - glyphs.advances_x[si.num_glyphs-1] += (letterSpacing - 100) * advance / 100; + QFixed &advance = glyphs.advances_x[si.num_glyphs-1]; + advance += (letterSpacing - 100) * advance / 100; } } if (wordSpacing != 0) { @@ -2521,14 +2521,14 @@ void QTextEngine::setBoundary(int strPos) const return; int itemToSplit = 0; - while (itemToSplit < layoutData->items.size() && layoutData->items[itemToSplit].position <= strPos) + while (itemToSplit < layoutData->items.size() && layoutData->items.at(itemToSplit).position <= strPos) itemToSplit++; itemToSplit--; - if (layoutData->items[itemToSplit].position == strPos) { + if (layoutData->items.at(itemToSplit).position == strPos) { // already a split at the requested position return; } - splitItem(itemToSplit, strPos - layoutData->items[itemToSplit].position); + splitItem(itemToSplit, strPos - layoutData->items.at(itemToSplit).position); } void QTextEngine::splitItem(int item, int pos) const -- cgit v0.12 From 4d81f771f513a9911a4812b47c6479c85eff0628 Mon Sep 17 00:00:00 2001 From: Niklas Kurkisuo Date: Thu, 23 Dec 2010 14:48:10 +0100 Subject: Fix resource leak in QCLuceneStopAnalyzer::QCLuceneStopAnalyzer. CID 22164. Merge-request: 2534 Reviewed-by: Harald Fernengel --- tools/assistant/lib/fulltextsearch/qanalyzer.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp index 835b72e..23a9f14 100644 --- a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp +++ b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp @@ -147,6 +147,12 @@ QCLuceneStopAnalyzer::QCLuceneStopAnalyzer(const QStringList &stopWords) tArray[stopWords.count()] = 0; d->analyzer = new lucene::analysis::StopAnalyzer(tArray); + + // free memory + for(int i = 0; i < stopWords.count(); ++i) { + delete [] tArray[i]; + } + delete [] tArray; } QStringList QCLuceneStopAnalyzer::englishStopWords() const -- cgit v0.12 From e18dfbc2f5cc99aca1ff7abbab5f9b3be2bfed73 Mon Sep 17 00:00:00 2001 From: Niklas Kurkisuo Date: Thu, 23 Dec 2010 14:48:12 +0100 Subject: Fix resource leak in QCLuceneStandardAnalyzer::QCLuceneStandardAnalyzer. CID 22165. Merge-request: 2534 Reviewed-by: Harald Fernengel --- tools/assistant/lib/fulltextsearch/qanalyzer.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp index 23a9f14..db2f06c 100644 --- a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp +++ b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp @@ -96,6 +96,12 @@ QCLuceneStandardAnalyzer::QCLuceneStandardAnalyzer(const QStringList &stopWords) tArray[stopWords.count()] = 0; d->analyzer = new lucene::analysis::standard::StandardAnalyzer(tArray); + + // free memory + for(int i = 0; i < stopWords.count(); ++i) { + delete [] tArray[i]; + } + delete [] tArray; } -- cgit v0.12 From d2f87812095d658bceea9287543a7f3d52e18944 Mon Sep 17 00:00:00 2001 From: Juuso Pakarinen Date: Thu, 23 Dec 2010 14:48:13 +0100 Subject: Fix for coding conventions. Merge-request: 2534 Reviewed-by: Harald Fernengel --- tools/assistant/lib/fulltextsearch/qanalyzer.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp index db2f06c..c974fa6 100644 --- a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp +++ b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp @@ -97,10 +97,9 @@ QCLuceneStandardAnalyzer::QCLuceneStandardAnalyzer(const QStringList &stopWords) d->analyzer = new lucene::analysis::standard::StandardAnalyzer(tArray); - // free memory - for(int i = 0; i < stopWords.count(); ++i) { + for (int i = 0; i < stopWords.count(); ++i) delete [] tArray[i]; - } + delete [] tArray; } @@ -154,10 +153,9 @@ QCLuceneStopAnalyzer::QCLuceneStopAnalyzer(const QStringList &stopWords) d->analyzer = new lucene::analysis::StopAnalyzer(tArray); - // free memory - for(int i = 0; i < stopWords.count(); ++i) { + for (int i = 0; i < stopWords.count(); ++i) delete [] tArray[i]; - } + delete [] tArray; } -- cgit v0.12 From 1c5a9b8d80b9dfe26b2d669e081d9a461c181222 Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Thu, 23 Dec 2010 14:49:52 +0100 Subject: Whitespace change Since I can't touch merge requests, this is a separate commit to fix whitespace errors in code. --- tools/assistant/lib/fulltextsearch/qanalyzer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp index c974fa6..56eae69 100644 --- a/tools/assistant/lib/fulltextsearch/qanalyzer.cpp +++ b/tools/assistant/lib/fulltextsearch/qanalyzer.cpp @@ -99,7 +99,7 @@ QCLuceneStandardAnalyzer::QCLuceneStandardAnalyzer(const QStringList &stopWords) for (int i = 0; i < stopWords.count(); ++i) delete [] tArray[i]; - + delete [] tArray; } @@ -155,7 +155,7 @@ QCLuceneStopAnalyzer::QCLuceneStopAnalyzer(const QStringList &stopWords) for (int i = 0; i < stopWords.count(); ++i) delete [] tArray[i]; - + delete [] tArray; } -- cgit v0.12 From 15f6124da9c2cf70e74a1e0e6f89c27d17ec9d29 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 23 Dec 2010 15:53:43 +0200 Subject: Fix fullscreen/Maximized dialog misplacement in Symbian Task-number: QTBUG-16277 Reviewed-by: Sami Merila --- src/gui/dialogs/qdialog.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index 16ea045..bcf952c 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -899,9 +899,21 @@ bool QDialog::symbianAdjustedPosition() { #if defined(Q_WS_S60) QPoint p; - const bool doS60Positioning = !(isFullScreen()||isMaximized()); - if (doS60Positioning) { - QPoint oldPos = pos(); + QPoint oldPos = pos(); + if (isFullScreen()) { + p.setX(0); + p.setY(0); + } else if (isMaximized()) { + TRect statusPaneRect = TRect(); + if (S60->screenHeightInPixels > S60->screenWidthInPixels) { + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect); + } else { + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, statusPaneRect); + } + + p.setX(0); + p.setY(statusPaneRect.Height()); + } else { // naive way to deduce screen orientation if (S60->screenHeightInPixels > S60->screenWidthInPixels) { int cbaHeight; @@ -937,10 +949,10 @@ bool QDialog::symbianAdjustedPosition() p.setX(qMax(0,S60->screenWidthInPixels - width())); } } - if (oldPos != p || p.y() < 0) - move(p); } - return doS60Positioning; + if (oldPos != p || p.y() < 0) + move(p); + return true; #else // TODO - check positioning requirement for Symbian, non-s60 return false; -- cgit v0.12 From c168138195b623afc523ddd647dcfb690106c845 Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 23 Dec 2010 15:07:21 +0100 Subject: Fixed several compile and deployment issues in the mmf phonon plugin. RevBy: Trust me Conflicts: src/plugins/phonon/mmf/mmf.pro src/s60installs/s60installs.pro --- src/plugins/phonon/mmf/mmf.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro index e546d83..9dccc4f 100644 --- a/src/plugins/phonon/mmf/mmf.pro +++ b/src/plugins/phonon/mmf/mmf.pro @@ -128,7 +128,7 @@ symbian { is_using_gnupoc { LIBS += -laudioequalizereffect -lbassboosteffect -ldistanceattenuationeffect -ldopplerbase -leffectbase -lenvironmentalreverbeffect -llistenerdopplereffect -llistenerlocationeffect -llistenerorientationeffect -llocationbase -lloudnesseffect -lorientationbase -lsourcedopplereffect -lsourcelocationeffect -lsourceorientationeffect -lstereowideningeffect } else { - LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect + LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerbase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect } # This is needed for having the .qtplugin file properly created on Symbian. -- cgit v0.12 From 76c1492a51746730c1b51539b87f8d8c810f44ff Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 23 Dec 2010 15:52:38 +0100 Subject: Fixed a bug in elf2e32_qtwrapper regarding spaces in def files. It would not parse the line correctly if a space was missing between the "@" and the ordinal number. RevBy: Trust me --- bin/elf2e32_qtwrapper.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index d91be14..a90877e 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -146,7 +146,7 @@ while (1) { $origDefLine = <$origDefFile>; if (defined($origDefLine)) { $origDefLine =~ s/[\n\r]//; - if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + if ($origDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i) { $origSym = $1; $origOrdinal = $2; $origExtraData = $3; @@ -161,7 +161,7 @@ while (1) { if ($savedNewDefFileLine) { # This happens if the new def file was missing an entry. $newDefLine = $savedNewDefFileLine; - $newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i or die("$0: Shouldn't happen"); + $newDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i or die("$0: Shouldn't happen"); $newSym = $1; $newOrdinal = $2; $newExtraData = $3; @@ -171,7 +171,7 @@ while (1) { $newDefLine = <$newDefFile>; if (defined($newDefLine)) { $newDefLine =~ s/[\n\r]//; - if ($newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + if ($newDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i) { $newSym = $1; $newOrdinal = $2; $newExtraData = $3; -- cgit v0.12 From b7ac9ed56ff8bfb3158d115ea7c6e3eef250f4bc Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Tue, 28 Dec 2010 14:19:18 +0100 Subject: Add compiler optimization for QtScript/JSC on Symbian Ported from http://trac.webkit.org/changeset/73126. This gives a ~70% performance improvement for the SunSpider and V8 benchmarks. Task-number: QTBUG-15847 Reviewed-by: Simon Hausmann --- src/script/script.pro | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/script/script.pro b/src/script/script.pro index 4ee86d7..d1633d8 100644 --- a/src/script/script.pro +++ b/src/script/script.pro @@ -84,5 +84,15 @@ symbian { LIBS += -lhal } +symbian { + symbian-abld|symbian-sbsv2 { + MMP_RULES += ALWAYS_BUILD_AS_ARM + } else { + QMAKE_CFLAGS -= --thumb + QMAKE_CXXFLAGS -= --thumb + } + QMAKE_CXXFLAGS.ARMCC += -OTime -O3 +} + # WebKit doesn't compile in C++0x mode *-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x -- cgit v0.12 From ef96a142f790152524248b4dd0f24e3126ef871e Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Wed, 29 Dec 2010 19:15:03 +0200 Subject: Clear WSERV content when a native child receives an "expose" Native child windows on Symbian can cause composition artifacts on S^3 because they own a visible RWindow instance, but the RWindow technically has no content because child windows paint their content to their parent's backing store. In the event that a native child widget completely obscures a top level, the composition engine does not understand that the child is "empty" and should clear the UI surface to let the top level "shine through". The result is that articacts can remain on the UI surface after a transition from a WSERV drawing app to a Qt (EGL rendering) app. To fix this issue, we call CWindowGc::Clear() when the native child widget receives an "expose" event. This clears the UI surface content and ensures the top level is visible even though it is technically below another RWindow. Task-number: QTMOBILITY-484 Reviewed-by: Jani Hautakangas --- src/gui/kernel/qapplication_s60.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 181fcc7..691c02a 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1071,6 +1071,14 @@ void QSymbianControl::Draw(const TRect& controlRect) const Q_ASSERT(topExtra); if (!topExtra->inExpose) { topExtra->inExpose = true; + if (!qwidget->isWindow()) { + // If we get here, then it means we have a native child window + // Since no content should ever be painted to these windows, we + // erase them with a transparent brush when they get an expose. + CWindowGc &gc = SystemGc(); + gc.SetBrushColor(TRgb(0, 0, 0, 0)); + gc.Clear(controlRect); + } QRect exposeRect = qt_TRect2QRect(controlRect); qwidget->d_func()->syncBackingStore(exposeRect); topExtra->inExpose = false; -- cgit v0.12 From a31d271bdd4594ea455736a0000cd3493b0efc93 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Thu, 30 Dec 2010 10:36:06 +1000 Subject: tst_qmessagebox: simulate key events more robustly Don't use QTimer::singleShot because it provides no method of cancelling the event when failures occur. Always verify that the simulated key event is consumed as expected. --- tests/auto/qmessagebox/tst_qmessagebox.cpp | 103 ++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 32 deletions(-) diff --git a/tests/auto/qmessagebox/tst_qmessagebox.cpp b/tests/auto/qmessagebox/tst_qmessagebox.cpp index f6ee764..a39d458 100644 --- a/tests/auto/qmessagebox/tst_qmessagebox.cpp +++ b/tests/auto/qmessagebox/tst_qmessagebox.cpp @@ -107,7 +107,7 @@ class tst_QMessageBox : public QObject public: tst_QMessageBox(); int exec(QMessageBox *msgBox, int key = -1); - int sendReturn(); + void sendKeySoon(); public slots: void sendKey(); @@ -136,8 +136,12 @@ private slots: void setInformativeText(); void iconPixmap(); + void init(); + void initTestCase(); + private: int keyToSend; + QTimer keySendTimer; }; tst_QMessageBox::tst_QMessageBox() : keyToSend(-1) @@ -152,22 +156,16 @@ int tst_QMessageBox::exec(QMessageBox *msgBox, int key) QTimer::singleShot(1000, msgBox, SLOT(close())); } else { keyToSend = key; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); } return msgBox->exec(); } -int tst_QMessageBox::sendReturn() -{ - keyToSend = Qt::Key_Return; - QTimer::singleShot(1000, this, SLOT(sendKey())); - return 0; -} - void tst_QMessageBox::sendKey() { if (keyToSend == -2) { QApplication::activeModalWidget()->close(); + keyToSend = -1; return; } if (keyToSend == -1) @@ -177,6 +175,24 @@ void tst_QMessageBox::sendKey() keyToSend = -1; } +void tst_QMessageBox::sendKeySoon() +{ + keySendTimer.start(); +} + +void tst_QMessageBox::init() +{ + // if there is any pending key send from the last test, cancel it. + keySendTimer.stop(); +} + +void tst_QMessageBox::initTestCase() +{ + keySendTimer.setInterval(1000); + keySendTimer.setSingleShot(true); + QVERIFY(QObject::connect(&keySendTimer, SIGNAL(timeout()), this, SLOT(sendKey()))); +} + void tst_QMessageBox::sanityTest() { QMessageBox msgBox; @@ -317,32 +333,36 @@ void tst_QMessageBox::statics() for (int i = 0; i < 4; i++) { keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); QMessageBox::StandardButton sb = (*statics[i])(0, "caption", "text", QMessageBox::Yes | QMessageBox::No | QMessageBox::Help | QMessageBox::Cancel, QMessageBox::NoButton); QCOMPARE(sb, QMessageBox::Cancel); + QCOMPARE(keyToSend, -1); keyToSend = -2; // close() - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); sb = (*statics[i])(0, "caption", "text", QMessageBox::Yes | QMessageBox::No | QMessageBox::Help | QMessageBox::Cancel, QMessageBox::NoButton); QCOMPARE(sb, QMessageBox::Cancel); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); sb = (*statics[i])(0, "caption", "text", QMessageBox::Yes | QMessageBox::No | QMessageBox::Help, QMessageBox::Yes); QCOMPARE(sb, QMessageBox::Yes); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); sb = (*statics[i])(0, "caption", "text", QMessageBox::Yes | QMessageBox::No | QMessageBox::Help, QMessageBox::No); QCOMPARE(sb, QMessageBox::No); + QCOMPARE(keyToSend, -1); } } @@ -361,16 +381,18 @@ void tst_QMessageBox::shortcut() void tst_QMessageBox::about() { keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); QMessageBox::about(0, "Caption", "This is an auto test"); + QCOMPARE(keyToSend, -1); #if !defined(Q_OS_WINCE) keyToSend = Qt::Key_Enter; #else keyToSend = Qt::Key_Escape; #endif - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); QMessageBox::aboutQt(0, "Caption"); + QCOMPARE(keyToSend, -1); } // Old message box enums @@ -392,7 +414,7 @@ void tst_QMessageBox::staticSourceCompat() // source compat tests for < 4.2 keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", QMessageBox::Yes, QMessageBox::No); int expectedButton = int(QMessageBox::Yes); #if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC) @@ -403,43 +425,51 @@ void tst_QMessageBox::staticSourceCompat() expectedButton = int(QMessageBox::No); #endif QCOMPARE(ret, expectedButton); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", QMessageBox::Yes | QMessageBox::Default, QMessageBox::No); QCOMPARE(ret, int(QMessageBox::Yes)); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", QMessageBox::Yes, QMessageBox::No | QMessageBox::Default); QCOMPARE(ret, int(QMessageBox::No)); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape); QCOMPARE(ret, int(QMessageBox::Yes)); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", QMessageBox::Yes | QMessageBox::Escape, QMessageBox::No | QMessageBox::Default); QCOMPARE(ret, int(QMessageBox::No)); + QCOMPARE(keyToSend, -1); // the button text versions keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", "Yes", "No", QString(), 1); QCOMPARE(ret, 1); + QCOMPARE(keyToSend, -1); if (0) { // dont run these tests since the dialog wont close! keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", "Yes", "No", QString(), 1); QCOMPARE(ret, -1); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", "Yes", "No", QString(), 0, 1); QCOMPARE(ret, 1); + QCOMPARE(keyToSend, -1); } } @@ -472,7 +502,7 @@ void tst_QMessageBox::staticBinaryCompat() // binary compat tests for < 4.2 keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", Old_Yes, Old_No, 0); int expectedButton = int(Old_Yes); #if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC) @@ -483,33 +513,39 @@ void tst_QMessageBox::staticBinaryCompat() expectedButton = int(Old_No); #endif QCOMPARE(ret, expectedButton); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", Old_Yes | Old_Escape, Old_No, 0); QCOMPARE(ret, int(Old_Yes)); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Enter; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", Old_Yes | Old_Default, Old_No, 0); QCOMPARE(ret, int(Old_Yes)); + QCOMPARE(keyToSend, -1); #if 0 keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", Old_Yes, Old_No | Old_Default, 0); QCOMPARE(ret, -1); + QCOMPARE(keyToSend, -1); #endif keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", Old_Yes | Old_Escape, Old_No | Old_Default, 0); QCOMPARE(ret, Old_Yes); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); ret = QMessageBox::information(0, "title", "text", Old_Yes | Old_Default, Old_No | Old_Escape, 0); QCOMPARE(ret, Old_No); + QCOMPARE(keyToSend, -1); } @@ -688,22 +724,25 @@ void tst_QMessageBox::detailsButtonText() void tst_QMessageBox::incorrectDefaultButton() { keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); //Do not crash here QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added"); QMessageBox::question( 0, "", "I've been hit!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Save ); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added"); QMessageBox::question( 0, "", "I've been hit!",QFlag(QMessageBox::Ok | QMessageBox::Cancel),QMessageBox::Save ); + QCOMPARE(keyToSend, -1); keyToSend = Qt::Key_Escape; - QTimer::singleShot(1000, this, SLOT(sendKey())); + sendKeySoon(); QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added"); QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added"); //do not crash here -> call old function of QMessageBox in this case QMessageBox::question( 0, "", "I've been hit!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Ok); + QCOMPARE(keyToSend, -1); } void tst_QMessageBox::updateSize() -- cgit v0.12 From 6981c17455f949fd4fccbaf1bd42ab48f95d4212 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Thu, 30 Dec 2010 10:46:05 +1000 Subject: tst_qmessagebox: make the failure message better for detailsButtonText --- tests/auto/qmessagebox/tst_qmessagebox.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/auto/qmessagebox/tst_qmessagebox.cpp b/tests/auto/qmessagebox/tst_qmessagebox.cpp index a39d458..9e497fa 100644 --- a/tests/auto/qmessagebox/tst_qmessagebox.cpp +++ b/tests/auto/qmessagebox/tst_qmessagebox.cpp @@ -714,8 +714,7 @@ void tst_QMessageBox::detailsButtonText() foreach(btn, list) { if (btn && (btn->inherits("QPushButton"))) { if (btn->text() != QMessageBox::tr("OK") && btn->text() != QMessageBox::tr("Show Details...")) { - qDebug() << btn->text(); - QFAIL("Incorrect messagebox button text!"); + QFAIL(qPrintable(QString("Unexpected messagebox button text: %1").arg(btn->text()))); } } } -- cgit v0.12 From 89866e1112bba004847573c5494aa3b6ec75049f Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Thu, 30 Dec 2010 15:25:38 +1000 Subject: tst_qmessagebox: fix `about' test on mac QMessageBox::about and aboutQt are modeless on Mac (only). This means that if we simulate key events, we need to explicitly run the event loop until they are consumed. Prior to a31d271bdd4594ea455736a0000cd3493b0efc93, this buggy test was causing detailsButtonText to fail. --- tests/auto/qmessagebox/tst_qmessagebox.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/auto/qmessagebox/tst_qmessagebox.cpp b/tests/auto/qmessagebox/tst_qmessagebox.cpp index 9e497fa..4bc1a28 100644 --- a/tests/auto/qmessagebox/tst_qmessagebox.cpp +++ b/tests/auto/qmessagebox/tst_qmessagebox.cpp @@ -55,6 +55,8 @@ #include #endif +#include "../../shared/util.h" + //TESTED_CLASS= //TESTED_FILES= @@ -383,7 +385,13 @@ void tst_QMessageBox::about() keyToSend = Qt::Key_Escape; sendKeySoon(); QMessageBox::about(0, "Caption", "This is an auto test"); + // On Mac, about and aboutQt are not modal, so we need to + // explicitly run the event loop +#ifdef Q_WS_MAC + QTRY_COMPARE(keyToSend, -1); +#else QCOMPARE(keyToSend, -1); +#endif #if !defined(Q_OS_WINCE) keyToSend = Qt::Key_Enter; @@ -392,7 +400,11 @@ void tst_QMessageBox::about() #endif sendKeySoon(); QMessageBox::aboutQt(0, "Caption"); +#ifdef Q_WS_MAC + QTRY_COMPARE(keyToSend, -1); +#else QCOMPARE(keyToSend, -1); +#endif } // Old message box enums -- cgit v0.12 From 8365b863419ad68f7dde7b7595e1b943ad9670ca Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Fri, 31 Dec 2010 08:20:39 +1000 Subject: Fixed networkselftest failing to resolve hostname The logic here was the opposite from what was intended. Note that this bug was hidden under normal circumstances when running the entire testcase. It only appeared when one of the following was true: (1) httpProxy or socks5Proxy was run on its own, or (2) the dnsResolution test failed. --- tests/auto/networkselftest/tst_networkselftest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/networkselftest/tst_networkselftest.cpp b/tests/auto/networkselftest/tst_networkselftest.cpp index 752e368..5e9c50e 100644 --- a/tests/auto/networkselftest/tst_networkselftest.cpp +++ b/tests/auto/networkselftest/tst_networkselftest.cpp @@ -337,7 +337,7 @@ QHostAddress tst_NetworkSelfTest::serverIpAddress() // need resolving QHostInfo resolved = QHostInfo::fromName(QtNetworkSettings::serverName()); if(resolved.error() != QHostInfo::NoError || - !resolved.addresses().isEmpty()) { + resolved.addresses().isEmpty()) { qWarning("QHostInfo::fromName failed (%d).", resolved.error()); return QHostAddress(QHostAddress::Null); } -- cgit v0.12 From 5d18d393808d7a4be56eb00ab9f1e9cda9e211c9 Mon Sep 17 00:00:00 2001 From: Ville Pernu Date: Fri, 31 Dec 2010 12:48:09 +0200 Subject: Fix QNetworkReply autotest cases for QT-3494 These fixes add a new QTest columns to cases tst_QNetworkReply:: ioGetFromHttpStatus100_data and tst_QNetworkReply::ioGetFromHttpNoHeaders. Each test row now has an expected error message per input data string. Task-Number: QT-3494 Reviewed-By: Perttu Pohjonen --- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index cff0ae9..6cd9d3c 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -2585,17 +2585,19 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer() void tst_QNetworkReply::ioGetFromHttpStatus100_data() { QTest::addColumn("dataToSend"); - QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n"); - QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n"); - QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); + QTest::addColumn("expectedError"); + QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; + QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; + QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n") << QNetworkReply::RemoteHostClosedError; + QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n") << QNetworkReply::RemoteHostClosedError; + QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; + QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; } void tst_QNetworkReply::ioGetFromHttpStatus100() { QFETCH(QByteArray, dataToSend); + QFETCH(QNetworkReply::NetworkError, expectedError); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2607,7 +2609,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->error(), QNetworkReply::NoError); + QCOMPARE(reply->error(), expectedError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QVERIFY(reply->rawHeader("bla").isNull()); } @@ -2615,12 +2617,14 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() void tst_QNetworkReply::ioGetFromHttpNoHeaders_data() { QTest::addColumn("dataToSend"); - QTest::newRow("justStatus+noheaders+disconnect") << QByteArray("HTTP/1.0 200 OK\r\n\r\n"); + QTest::addColumn("expectedError"); + QTest::newRow("justStatus+noheaders+disconnect") << QByteArray("HTTP/1.0 200 OK\r\n\r\n") << QNetworkReply::RemoteHostClosedError; } void tst_QNetworkReply::ioGetFromHttpNoHeaders() { QFETCH(QByteArray, dataToSend); + QFETCH(QNetworkReply::NetworkError, expectedError); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2632,7 +2636,7 @@ void tst_QNetworkReply::ioGetFromHttpNoHeaders() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->error(), QNetworkReply::NoError); + QCOMPARE(reply->error(), expectedError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); } -- cgit v0.12 From 1f24941131a7ab62969265f1e29ef990dbc60ff5 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 3 Jan 2011 12:35:16 +0200 Subject: Ignore static_and_shared in Symbian builds. The function addExclusiveBuilds doesn't work on Symbian and is unlikely to ever work due to build system mandated target directories, so ignore static_and_shared in Symbian builds that rely on Symbian toolchains. Task-number: QTBUG-16298 Reviewed-by: axis --- mkspecs/features/static_and_shared.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/static_and_shared.prf b/mkspecs/features/static_and_shared.prf index f586bdd..39a9a1f 100644 --- a/mkspecs/features/static_and_shared.prf +++ b/mkspecs/features/static_and_shared.prf @@ -1,3 +1,3 @@ -!contains(TEMPLATE, subdirs):!macx-xcode { +!contains(TEMPLATE, subdirs):!macx-xcode:!symbian-abld:!symbian-sbsv2 { addExclusiveBuilds(static, Static, shared, Shared) } -- cgit v0.12 From 00cf748fa3d241e52dc0908da90864ea397dab8a Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Mon, 3 Jan 2011 15:08:22 +0100 Subject: Fix crash when closing QFontDialog::getFont() dialog Unfortunately, given the large number of ways of showing a QFontDialog, it's possible that we try to close the dialog before its event loop is finished. Setting the Cocoa font panel's isReleaseOnClose property to FALSE ensures the panel is still around when we effectively exit the dialog's event loop. Reviewed-by: Richard Task-number: QTBUG-15666 --- src/gui/dialogs/qfontdialog_mac.mm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm index 9c63dfa..e2c0ef5 100644 --- a/src/gui/dialogs/qfontdialog_mac.mm +++ b/src/gui/dialogs/qfontdialog_mac.mm @@ -116,6 +116,7 @@ const int StyleMask = NSTitledWindowMask | NSClosableWindowMask | NSResizableWin - (void)showModelessPanel; - (void)showWindowModalSheet:(QWidget *)docWidget; - (void)runApplicationModalPanel; +- (BOOL)isAppModal; - (void)changeFont:(id)sender; - (void)changeAttributes:(id)sender; - (BOOL)windowShouldClose:(id)window; @@ -226,6 +227,7 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont) QBoolBlocker nativeDialogOnTop(QApplicationPrivate::native_modal_dialog_active); mAppModal = true; NSWindow *ourPanel = [mStolenContentView window]; + [ourPanel setReleasedWhenClosed:NO]; [NSApp runModalForWindow:ourPanel]; QAbstractEventDispatcher::instance()->interrupt(); @@ -235,6 +237,11 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont) mPriv->fontDialog()->reject(); } +- (BOOL)isAppModal +{ + return mAppModal; +} + - (void)showWindowModalSheet:(QWidget *)docWidget { #ifdef QT_MAC_USE_COCOA @@ -485,6 +492,8 @@ void QFontDialogPrivate::closeCocoaFontPanel() QT_MANGLE_NAMESPACE(QCocoaFontPanelDelegate) *theDelegate = static_cast(delegate); NSWindow *ourPanel = [theDelegate actualPanel]; [ourPanel close]; + if ([theDelegate isAppModal]) + [ourPanel release]; [theDelegate cleanUpAfterMyself]; [theDelegate release]; this->delegate = 0; -- cgit v0.12 From e21f066df7017e8cb8e50a387b3bf952cf497602 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Tue, 4 Jan 2011 11:12:30 +1000 Subject: Update visual tests Minor changes in flickable and rectangle radius behaviours have led to some altered pixels here and there. Task-number: QTBUG-14792 --- .../qmlvisual/ListView/data/listview.5.png | Bin 1661 -> 1663 bytes .../qmlvisual/ListView/data/listview.6.png | Bin 1674 -> 1666 bytes .../qmlvisual/ListView/data/listview.qml | 234 ++--- .../data/flickable-horizontal.0.png | Bin 1439 -> 1436 bytes .../data/flickable-horizontal.1.png | Bin 1424 -> 1426 bytes .../data/flickable-horizontal.2.png | Bin 1428 -> 1429 bytes .../data/flickable-horizontal.3.png | Bin 1397 -> 1395 bytes .../data/flickable-horizontal.4.png | Bin 1454 -> 1450 bytes .../data/flickable-horizontal.qml | 578 +++++------ .../data/flickable-vertical.0.png | Bin 1073 -> 1070 bytes .../data/flickable-vertical.1.png | Bin 1063 -> 1064 bytes .../data/flickable-vertical.2.png | Bin 1080 -> 1079 bytes .../data/flickable-vertical.3.png | Bin 1080 -> 1079 bytes .../data/flickable-vertical.4.png | Bin 1056 -> 1057 bytes .../data/flickable-vertical.5.png | Bin 1075 -> 1080 bytes .../data/flickable-vertical.6.png | Bin 1029 -> 1030 bytes .../data/flickable-vertical.7.png | Bin 1073 -> 1070 bytes .../data/flickable-vertical.8.png | Bin 1053 -> 1055 bytes .../data/flickable-vertical.qml | 1034 ++++++++++---------- .../qmlvisual/rect/data/rect-painting.0.png | Bin 15272 -> 15366 bytes 20 files changed, 923 insertions(+), 923 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png index 63a594e..d1f06fa 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png index 05e24c6..9e6e29c 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml index 059128d..b1ffe8f 100644 --- a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml +++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml @@ -1550,7 +1550,7 @@ VisualTest { } Frame { msec: 4240 - hash: "84b477b46c313d6dcb0a77628182905b" + hash: "ad913e53e63c030ffdf4560766722760" } Mouse { type: 5 @@ -1570,7 +1570,7 @@ VisualTest { } Frame { msec: 4256 - hash: "281c0499db31ca78175ca7af6292b853" + hash: "ef31f8a4d5bde5a2e308d19ee6d5e759" } Mouse { type: 5 @@ -1582,7 +1582,7 @@ VisualTest { } Frame { msec: 4272 - hash: "5c29d61f037e4636988fdc99ee2ed8a4" + hash: "3ba07527f66e8bea5a8fb7647b0b4f3f" } Mouse { type: 5 @@ -1594,7 +1594,7 @@ VisualTest { } Frame { msec: 4288 - hash: "a18f5e9f7be932dcd1bcb4c7fe0797e8" + hash: "70e5fe656f5fd843383964825690b678" } Mouse { type: 5 @@ -1614,7 +1614,7 @@ VisualTest { } Frame { msec: 4304 - hash: "85a4130b4a57ef79e90d350cf4816801" + hash: "b7d8738be4cd6caa63dbecdb0f810a2f" } Mouse { type: 5 @@ -1626,7 +1626,7 @@ VisualTest { } Frame { msec: 4320 - hash: "364dd89fd6f96e1c77723436c7078a7b" + hash: "d6312191f9d7bbddc07f9253d8a93469" } Mouse { type: 5 @@ -1638,7 +1638,7 @@ VisualTest { } Frame { msec: 4336 - hash: "3e37312c45aa92de34d9661f9b482c48" + hash: "b182da64886cf4f444296e5fde26701e" } Mouse { type: 5 @@ -1650,7 +1650,7 @@ VisualTest { } Frame { msec: 4352 - hash: "dc2d63ad430ea6214f962629793925f3" + hash: "ebefef14b6fb990e0c6900884528bbd3" } Mouse { type: 5 @@ -1662,7 +1662,7 @@ VisualTest { } Frame { msec: 4368 - hash: "188fe1e6af9d02b2680426127ef1d39e" + hash: "9a3451ed091b1bb6b975a9c5506b1ea4" } Mouse { type: 5 @@ -1674,7 +1674,7 @@ VisualTest { } Frame { msec: 4384 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Mouse { type: 5 @@ -1686,7 +1686,7 @@ VisualTest { } Frame { msec: 4400 - hash: "bb74813667f49b15978aa78843436205" + hash: "eaaf9ea1d7fcf4a2a9dd58b1b5bb3cae" } Mouse { type: 5 @@ -1698,7 +1698,7 @@ VisualTest { } Frame { msec: 4416 - hash: "8e88500470517ed1d7c3ca10edd4e230" + hash: "7ca8e3d76cf913d85f84f0b96acde829" } Mouse { type: 5 @@ -1710,7 +1710,7 @@ VisualTest { } Frame { msec: 4432 - hash: "614dc45593db51f467adeda87d84f9a4" + hash: "7cfef56b24a552c6d4ecb3d0b88a1d08" } Mouse { type: 5 @@ -1730,7 +1730,7 @@ VisualTest { } Frame { msec: 4448 - hash: "b170583b9b284debdd04af643752aa6b" + hash: "d032b257259810b4fe514c63ca5c9e4b" } Mouse { type: 5 @@ -1742,7 +1742,7 @@ VisualTest { } Frame { msec: 4464 - hash: "dba0394b92f3ee166bc397439a86e6dc" + hash: "568f6a57e6f1644b0dc245d03a1d7b85" } Mouse { type: 5 @@ -1754,87 +1754,87 @@ VisualTest { } Frame { msec: 4480 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4496 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4512 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4528 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4544 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4560 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4576 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4592 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4608 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4624 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4640 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4656 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4672 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4688 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4704 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4720 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4736 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4752 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4768 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4784 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4800 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4816 @@ -1842,11 +1842,11 @@ VisualTest { } Frame { msec: 4832 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4848 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Mouse { type: 5 @@ -1866,7 +1866,7 @@ VisualTest { } Frame { msec: 4864 - hash: "95ab953fc04389396da9a38d97262d98" + hash: "d48ecbd0661e08b2117fe2fd96ffeb2c" } Mouse { type: 5 @@ -1878,7 +1878,7 @@ VisualTest { } Frame { msec: 4880 - hash: "614dc45593db51f467adeda87d84f9a4" + hash: "7cfef56b24a552c6d4ecb3d0b88a1d08" } Mouse { type: 5 @@ -1890,7 +1890,7 @@ VisualTest { } Frame { msec: 4896 - hash: "0d884cdb22e3668203d07c72055bcb85" + hash: "5b12e9d17d9d464b055601db9cf0da44" } Mouse { type: 5 @@ -1902,7 +1902,7 @@ VisualTest { } Frame { msec: 4912 - hash: "23bd71236829253fb3ef18ebc9dd3136" + hash: "25333e1f0cc9cfc664fd7369af544c06" } Mouse { type: 5 @@ -1914,39 +1914,39 @@ VisualTest { } Frame { msec: 4928 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4944 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4960 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4976 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4992 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5008 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5024 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5040 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5056 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Mouse { type: 3 @@ -1958,179 +1958,179 @@ VisualTest { } Frame { msec: 5072 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5088 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5104 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5120 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5136 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5152 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5168 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5184 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5200 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5216 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5232 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5248 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5264 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5280 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5296 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5312 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5328 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5344 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5360 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5376 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5392 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5408 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5424 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5440 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5456 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5472 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5488 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5504 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5520 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5536 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5552 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5568 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5584 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5600 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5616 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5632 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5648 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5664 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5680 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5696 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5712 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5728 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5744 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5760 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5776 @@ -2138,90 +2138,90 @@ VisualTest { } Frame { msec: 5792 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5808 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5824 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5840 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5856 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5872 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5888 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5904 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5920 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5936 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5952 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5968 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5984 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6000 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6016 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6032 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6048 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6064 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6080 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6096 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6112 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6128 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png index e1b0967..968a78f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png index c7d4e1d..55ab3b7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png index 9373fae..a6ec6d1 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png index 7a30196..e6755ac 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png index 4c4d17c..bc65634 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml index a94aca8..106d108 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml @@ -10,179 +10,179 @@ VisualTest { } Frame { msec: 32 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 48 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 64 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 80 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 96 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 112 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 128 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 144 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 160 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 176 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 192 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 208 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 224 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 240 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 256 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 272 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 288 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 304 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 320 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 336 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 352 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 368 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 384 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 400 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 416 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 432 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 448 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 464 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 480 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 496 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 512 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 528 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 544 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 560 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 576 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 592 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 608 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 624 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 640 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 656 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 672 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 688 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 704 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 720 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 2 @@ -194,15 +194,15 @@ VisualTest { } Frame { msec: 736 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 752 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 768 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -214,7 +214,7 @@ VisualTest { } Frame { msec: 784 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -226,7 +226,7 @@ VisualTest { } Frame { msec: 800 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -246,7 +246,7 @@ VisualTest { } Frame { msec: 816 - hash: "c92e345e4ffdb30c28d9d5aa5400bd30" + hash: "49372aa66b86904d587b72c6c2cfd467" } Mouse { type: 5 @@ -258,7 +258,7 @@ VisualTest { } Frame { msec: 832 - hash: "90f94986ab44ab59618e9a5da17b8cc9" + hash: "06519aabcc86c5fd961c80a65d2cf67c" } Mouse { type: 5 @@ -270,7 +270,7 @@ VisualTest { } Frame { msec: 848 - hash: "0154a65f8693b98576101ac1c2fc8761" + hash: "c3b182c37393ea0468c06474e84f127f" } Mouse { type: 5 @@ -290,31 +290,31 @@ VisualTest { } Frame { msec: 864 - hash: "792c1b5267f14c891dae2348a8188a92" + hash: "dce4bcca20e89c40a603394515f679b1" } Frame { msec: 880 - hash: "15ce9e88d4ad2e698bf167d1432c0b8a" + hash: "dabf2b63bedd0073f761a858f048df5a" } Frame { msec: 896 - hash: "8f4109ef4c24d286d73f689565a0d056" + hash: "c51ca7786b7346b3e62b774c01a67f98" } Frame { msec: 912 - hash: "f5728190bf5c94742686f063b4a4b09b" + hash: "d1628aa2fd1ec92021fa37f9960fb06a" } Frame { msec: 928 - hash: "a38c7527a9a818b7bc25466b0e4939f9" + hash: "4e571776c8a01d1ab79ff1c3affc0474" } Frame { msec: 944 - hash: "ed3902455fc31a4e3232308b815a4daa" + hash: "85a3c22ecaed87c119202b76e22f2b2e" } Frame { msec: 960 - hash: "a2093589363ac2d50491412e99e0193a" + hash: "42d345e97b0a8e5cbcfdf4243ccafcdc" } Frame { msec: 976 @@ -322,227 +322,227 @@ VisualTest { } Frame { msec: 992 - hash: "c32349580e3a9586cc1133c935607cf0" + hash: "1a651405076d8980b03cc8279a379fff" } Frame { msec: 1008 - hash: "cd2068492e346eb20d50aee69e3a3559" + hash: "8c4f3c6a4c67c76fe92ff401114892e7" } Frame { msec: 1024 - hash: "f43a1a38894b8ffad009ba995d84b0ee" + hash: "447a817e33cd8213e362192ffe663272" } Frame { msec: 1040 - hash: "2d5c4a73df2a054801571f1ce119e31f" + hash: "eed6ba9be5f7869101068afd1d46cb69" } Frame { msec: 1056 - hash: "b8825cc6bdca8102a655d797ea41b5b1" + hash: "15ae5acff4211f97802c6c50649ad487" } Frame { msec: 1072 - hash: "3f0be15b85220743d004f2d54b6e137c" + hash: "e30b0a23e215c0b9b71b083381a8523e" } Frame { msec: 1088 - hash: "4b0952d33149b44ffa0a06723a4116c7" + hash: "6fad48a7d3a2480468aca07e6760de94" } Frame { msec: 1104 - hash: "9056bda43259e92cfe56fdf394e2ca54" + hash: "998bd191ac5bac1f300e247514a112d7" } Frame { msec: 1120 - hash: "82ec9f09d2303e5b0b9c05b9a10a84db" + hash: "9245e8bf2fb38f491aa7f0da4400e190" } Frame { msec: 1136 - hash: "751a9b3054c09d900364d7c9cac8bc2b" + hash: "7565ea1f01cd9ad5d92e2a0ee7fc947d" } Frame { msec: 1152 - hash: "17dfdfef20f9da7e8b6f16df974baea9" + hash: "898c6e226787391340099910ee128ed6" } Frame { msec: 1168 - hash: "108e6d9a5a81df32823bfd7a90a000a7" + hash: "bafd74d70e99cf4053d3c00d18915762" } Frame { msec: 1184 - hash: "71dd0d55a3e837d3a8e4b4e318579ade" + hash: "6456a5ca9bb90b2d0fb99bae63a8db35" } Frame { msec: 1200 - hash: "8013cdb2615bca89134ea040409af509" + hash: "2b34216c9f7c76133ef4889b74df7ad9" } Frame { msec: 1216 - hash: "4b2826ad4c755690bd837994133f5fac" + hash: "cbc75068017b378f277c2692f2cb1709" } Frame { msec: 1232 - hash: "52d0da7f138bd37ac587a448d6402aca" + hash: "8c72d80a5a2776ee2d805c089f5c534d" } Frame { msec: 1248 - hash: "e634724c5bb294d338210845bf64d2cf" + hash: "d5a248b9177e078cad40af72b3cbceb5" } Frame { msec: 1264 - hash: "59bc5f0d057ee431f289806377f19213" + hash: "1a9b246f8223bbcf6421a22e8a1fb50e" } Frame { msec: 1280 - hash: "6ef2c5f7766c2cc77b30d636bfaa4422" + hash: "ea9b292eb000a9e4c5b46a8d94b8e80e" } Frame { msec: 1296 - hash: "578d056c3db094420dbaa51bd08ced20" + hash: "ac059cd45cd1936a7ff3fd0fc9fa688b" } Frame { msec: 1312 - hash: "14c6f7a04a52caffefa07af556ccb262" + hash: "fda383d47ffb1e2fd633793594831cfb" } Frame { msec: 1328 - hash: "7cb63d56fec144d0509ce219fc6fe459" + hash: "a4c7709f3642088e4be48ec607d0a0fe" } Frame { msec: 1344 - hash: "462dafa7f6427aecf6c28a5dcf5a10cc" + hash: "08d0268402d4a410f5f8c9bb8ba7b306" } Frame { msec: 1360 - hash: "45360814f985ed780a443568a91fc170" + hash: "ecc8f3c4faf86362e45b465b0f4d6dc2" } Frame { msec: 1376 - hash: "0d18ceb2436e4f7eb56a3443fab706e6" + hash: "3107a4b522744a643dd107da5e5e13c2" } Frame { msec: 1392 - hash: "1d83f367ba9f7f1d4496208271e925ed" + hash: "44c1731d0433aac53edc2e88a38c66b0" } Frame { msec: 1408 - hash: "fdbd00ee4c122aef779df42ea53f403a" + hash: "d86e9dfb38be51b2fa9cf44271eddc3e" } Frame { msec: 1424 - hash: "bedd1cb304efd4851813b39a746198a4" + hash: "0c33ce00df6fbb848d300aa510ad80d9" } Frame { msec: 1440 - hash: "9aa7bed86efa9634466736f20ee0ab5b" + hash: "48ff92aaa0c797c10ca8dbc5b2240736" } Frame { msec: 1456 - hash: "00fc8186a7ae44e10195a7b13defa0d2" + hash: "8582fd8c3643d9a5c1993e1607c6fae8" } Frame { msec: 1472 - hash: "42d6e8e0bbed879ed63644c83e61e7bd" + hash: "2390e374160ec5bc99613a463aa98fb2" } Frame { msec: 1488 - hash: "df074f8c210249e5ef652349479b6325" + hash: "369a11c32596b668a4f275232c45ac68" } Frame { msec: 1504 - hash: "4f94020437e35cf44dd3576997990ab7" + hash: "0b0d82d523a77a925ee00cf457326034" } Frame { msec: 1520 - hash: "8ca6c3b4fa3be73ac35073356b680a35" + hash: "48e7a92905761d7f0b8b9ac95bb5ff45" } Frame { msec: 1536 - hash: "c25eee1c5791383ebc59974e7754eacb" + hash: "2cdccfd2cdf56728fa07a49de34142d9" } Frame { msec: 1552 - hash: "f4917ada78942428cc6b9aa5e56c013d" + hash: "83a8166805523ee8426d88ef80c8f3a9" } Frame { msec: 1568 - hash: "23e1e607101fc7260a4ac841344f5fe0" + hash: "20ac2e68a5c733dc6128921c34f033e5" } Frame { msec: 1584 - hash: "2dcc7d187d8e0493e5766efbf09ef37c" + hash: "836963a1ed3084606b80b7f82fee09ef" } Frame { msec: 1600 - hash: "c1e5602753e80cf44d7b330140c6912e" + hash: "ee49c684d788558e20a10899ebe0b6c2" } Frame { msec: 1616 - hash: "febaf72d01a3763461b4b7d2ddd7a23e" + hash: "e00c0b340165d335cb49730890eca301" } Frame { msec: 1632 - hash: "071262b911b61576f451be25691a57cf" + hash: "fba2c2adeef04e6c1a764c4d8a1a97bc" } Frame { msec: 1648 - hash: "44705db9289fd8753b9d63e8bc963b38" + hash: "8160bd2a6daa2757b948d038fa754c77" } Frame { msec: 1664 - hash: "0c41d7b7d36bd083abfc0b83b862cad9" + hash: "10130d0b75ce420f5c9af6f181500783" } Frame { msec: 1680 - hash: "0c41d7b7d36bd083abfc0b83b862cad9" + hash: "10130d0b75ce420f5c9af6f181500783" } Frame { msec: 1696 - hash: "071262b911b61576f451be25691a57cf" + hash: "fba2c2adeef04e6c1a764c4d8a1a97bc" } Frame { msec: 1712 - hash: "a00aa90e894b48203b0446ca287ee712" + hash: "fec5477699ba60da129866e1c3727e08" } Frame { msec: 1728 - hash: "26c9ca53ee4b084c6595ad65bf4880df" + hash: "12076b96a177bd24be8ad4a3dc179d79" } Frame { msec: 1744 - hash: "f4917ada78942428cc6b9aa5e56c013d" + hash: "83a8166805523ee8426d88ef80c8f3a9" } Frame { msec: 1760 - hash: "ffedee7bf2d8099e361b8b1706b03f88" + hash: "e9016d43624060ef4efbad2b7bc53b1b" } Frame { msec: 1776 - hash: "1778ef1629ce977015b641448b46634f" + hash: "483700c4ba07a9f01d2a226a3efde15f" } Frame { msec: 1792 - hash: "42d6e8e0bbed879ed63644c83e61e7bd" + hash: "2390e374160ec5bc99613a463aa98fb2" } Frame { msec: 1808 - hash: "99e843ec69b79b79b0792e0a2f28cd1b" + hash: "094df49593f0cd1d6de4a0b91c459d15" } Frame { msec: 1824 - hash: "8b3ebca70b50a6a93823e015ea80f0f9" + hash: "0a60ed609c7fcb2d485f393ea309527a" } Frame { msec: 1840 - hash: "8eaa7f076064ce55051237b04861e408" + hash: "d4e0f07c2f298626ae800d5d7b5f098b" } Frame { msec: 1856 - hash: "6acc0ca5e5808d911287edfa78c8ac02" + hash: "ff249c1301704da0b82b023558512c6a" } Frame { msec: 1872 - hash: "e9f05899e0b53c21f6efe834095a3ea4" + hash: "42883458efeb17ff1e52296ae7228fb2" } Mouse { type: 2 @@ -562,7 +562,7 @@ VisualTest { } Frame { msec: 1888 - hash: "e9f05899e0b53c21f6efe834095a3ea4" + hash: "42883458efeb17ff1e52296ae7228fb2" } Mouse { type: 5 @@ -582,7 +582,7 @@ VisualTest { } Frame { msec: 1904 - hash: "d2dece405f5f6ed1de2acb6615a931de" + hash: "36a4b0d745ee8fa53e906b7a23b7ab88" } Mouse { type: 5 @@ -594,7 +594,7 @@ VisualTest { } Frame { msec: 1920 - hash: "21e0f21edc77424e8327c9a3350ecc1d" + hash: "826187b1a24fd09e1abcb6a01c59c059" } Mouse { type: 5 @@ -626,7 +626,7 @@ VisualTest { } Frame { msec: 1952 - hash: "c10c8b0c94f899414d8b3ef0b7c97646" + hash: "426f9459ac16c2903f85d618b366a475" } Mouse { type: 5 @@ -646,235 +646,235 @@ VisualTest { } Frame { msec: 1968 - hash: "807aff4e6c96a9d0de7fa55e233446b1" + hash: "d43dc1cfeaac1da281f2cdbffda93d17" } Frame { msec: 1984 - hash: "dbd02848cefacbb26f4bcb7d8f073d6c" + hash: "766dd54cdb6253ead664b6ab852e934b" } Frame { msec: 2000 - hash: "9a60608d8ea1b39fa2d3851873f2f08e" + hash: "1db59868779a357917a5d4859130108e" } Frame { msec: 2016 - hash: "e7b3e3a40281f63889808211d6746374" + hash: "1da33a5f6a001915464f34799a651f7a" } Frame { msec: 2032 - hash: "188c225c46ec00105df230bfeea09974" + hash: "868a6e445623378b6590789156e4b7e0" } Frame { msec: 2048 - hash: "e2e977b42e91d8c5dee57fd8245692eb" + hash: "46ae42a4b7f00e24a10ffdfd7a076b68" } Frame { msec: 2064 - hash: "ca2f12fb173c405f95e608858ab982ad" + hash: "2a91ffdfec461f573784cfaed2150e33" } Frame { msec: 2080 - hash: "fa86ee5f25fa425cf2569c8ef570b9d8" + hash: "2cbaa11e8589c806e65e52ce59ad1c42" } Frame { msec: 2096 - hash: "9b74656866fb8c7394bbbecec6414aca" + hash: "3b93b1e1fa7963d5a75103814f93a0a2" } Frame { msec: 2112 - hash: "87147326d1baab174c0f9a5ccdc2cb84" + hash: "a2e59dc9459a7afb6916638d08330dff" } Frame { msec: 2128 - hash: "c0d00f98c71bf3f8e5954b45fbab95a8" + hash: "cb3e8334babe3abffa202c2ba2d3b21f" } Frame { msec: 2144 - hash: "c087d1d62e56e573b55c1d8599bba8a6" + hash: "07882f5f098e59c479f089dbc74612bf" } Frame { msec: 2160 - hash: "dd5a94c6febdee58e8f115cb75131aaa" + hash: "e9ad84bf0c7f83bfe1bff3afed591bfd" } Frame { msec: 2176 - hash: "a7465d6137f865f512ce65ceb29533b4" + hash: "1839c26fda8710dc3fa7f5abd8136eee" } Frame { msec: 2192 - hash: "409086f6bb661aab8b548fea56d7e6b1" + hash: "15e3bdd811c390ad3a9cf22949568ed7" } Frame { msec: 2208 - hash: "6a22911e0fb58df31271baa463ff599d" + hash: "61ede9a7ef29997627bb08070fea65a4" } Frame { msec: 2224 - hash: "c4f6dd30d5fdfcf91a8b29cf5c622423" + hash: "fac89040e757522117e3792625ca6a19" } Frame { msec: 2240 - hash: "5a95b83f237c7243a198a43e9a587179" + hash: "1dc01a1118681f8606768fcf246397f7" } Frame { msec: 2256 - hash: "d79ed290efc6dbd976d574bf0b14a6a3" + hash: "2b243094b7f25368a8fb4a9014968cad" } Frame { msec: 2272 - hash: "a7bcb436e96d7c981852239462573495" + hash: "c6677acf9b9d632bc99caa8626448c49" } Frame { msec: 2288 - hash: "f63cc82e351daab503e316f8b516990f" + hash: "9035988b0dc0b7065fe4f1d1a4737801" } Frame { msec: 2304 - hash: "4ea63cd25a1424042ffc60549a78563c" + hash: "cd34e7118d43968cfcf52ed9ce58fc0a" } Frame { msec: 2320 - hash: "ef0fb776012575b3b0dbf6e5f4dee571" + hash: "7142aeaed61722424e184c55bb8d047c" } Frame { msec: 2336 - hash: "e2508faec7737be2666d87ad715b5f74" + hash: "9113c68cf5689e1f4690e58bbf824ae6" } Frame { msec: 2352 - hash: "9fe4e897c6b853f774d11817a0eb53bf" + hash: "2f9ec963d6f06f8252a69760965df2ee" } Frame { msec: 2368 - hash: "c122ce2e73cbfedcc99d649c21d91f9d" + hash: "07373282f0337437944dc8fff1e32343" } Frame { msec: 2384 - hash: "883b8b180853f1f432ae98ddfe1b6ce3" + hash: "4769fa4ba0c08baefa431b94b47a7ffc" } Frame { msec: 2400 - hash: "d0808284e431da60f61d571c257a3011" + hash: "390cd7786aa1989b590033682472f604" } Frame { msec: 2416 - hash: "df90f19450bf4d9496aab987a89e3a02" + hash: "482e2969bc1a877ba63c3df65ec04b7e" } Frame { msec: 2432 - hash: "5640c1e64556b90e7fbd4448fa9db462" + hash: "e3dc252a3a0b35398bf3d91c37d6b5e9" } Frame { msec: 2448 - hash: "6d9b5c2f7d0dedbbc444e69bb39fed08" + hash: "5bce3aac5cc049d81a74e7f71e2cf522" } Frame { msec: 2464 - hash: "485c4a8049068cf73bf22db5fd3618be" + hash: "390edc00756c4e92e94a7a75f3d65c45" } Frame { msec: 2480 - hash: "9e25da59c9e7e4cf7796902e8e2ff92a" + hash: "285397b2ff5a64d2a112c458d6ec5aba" } Frame { msec: 2496 - hash: "bd45e8f2442d7c1a1b16a762bc29e7cf" + hash: "ed0889dc439d66e6b5a81059956ef564" } Frame { msec: 2512 - hash: "ec1013d23e581dbb39b1549d2e1b3b32" + hash: "cb804da0db92d879a5cb8f138c546f88" } Frame { msec: 2528 - hash: "1ea3c2fde8ee3a14406e027f2124d793" + hash: "523fe4d3d9c11631f41d96bcc604103b" } Frame { msec: 2544 - hash: "3c3f31a05fb2f32538872c9fa158aaab" + hash: "cc4717c4233f9a2f2380bfad6dc89075" } Frame { msec: 2560 - hash: "05a84d9c55e634ec01edd2a63e13613b" + hash: "65c4171ff3e98aa04667606d9f6bd9b3" } Frame { msec: 2576 - hash: "0f7ccd2da58e2e73b0ab18bb681dafd5" + hash: "b2994136a603206c8013158fd67ca6bd" } Frame { msec: 2592 - hash: "e481ff78029f8bc4bf7c697db6824f6a" + hash: "44ad0d4645a01243b9d9be0faaf6d6ee" } Frame { msec: 2608 - hash: "efb92b8b7a90acabeb4a8d5cae52fe3c" + hash: "3b7b06f5f3f028fbae21dfedf821e696" } Frame { msec: 2624 - hash: "4728dd0fac4edf40cfd5ef5a422b4ed9" + hash: "b86466e530c3bd51353074cbb9da9ec3" } Frame { msec: 2640 - hash: "27641dcd772c979ae22d12bfbadbb67f" + hash: "2528deb04bae8b89a85dc6fcea05dbbd" } Frame { msec: 2656 - hash: "26268714105bc4832d336a38a859fc50" + hash: "e0ff5e36bff2b9e08244fc7f79cecee6" } Frame { msec: 2672 - hash: "caf0d351d3b6914ca52853a30643ea48" + hash: "34ca311d2e3462da3779324419c027e7" } Frame { msec: 2688 - hash: "319824b1143925162f04aaddcfaa65d9" + hash: "75aae68f21f68364a897c504f26ee655" } Frame { msec: 2704 - hash: "73aa36815f34bf5e005000e7da38555e" + hash: "8039e52e7f1977433596c1a34a41cc9f" } Frame { msec: 2720 - hash: "73aa36815f34bf5e005000e7da38555e" + hash: "8039e52e7f1977433596c1a34a41cc9f" } Frame { msec: 2736 - hash: "319824b1143925162f04aaddcfaa65d9" + hash: "75aae68f21f68364a897c504f26ee655" } Frame { msec: 2752 - hash: "caf0d351d3b6914ca52853a30643ea48" + hash: "34ca311d2e3462da3779324419c027e7" } Frame { msec: 2768 - hash: "c87ba4dda0a5c931d0c7ae74a0fb2896" + hash: "d3649eb8f8232b0e64b0cb476313b63c" } Frame { msec: 2784 - hash: "ab551561ad8a3937558afc080b3e6130" + hash: "cdb30549933d3778e74dbd419b474a5f" } Frame { msec: 2800 - hash: "474d8b566b9e4ef7dc125a8df30ccbb1" + hash: "3a43d652bb85d3f562bd5eaec386107f" } Frame { msec: 2816 - hash: "cc7dfbcfafa12d40210a4d5fa7f60862" + hash: "df6771eb2afa24b6e3250b05b180fa4d" } Frame { msec: 2832 - hash: "3c3f31a05fb2f32538872c9fa158aaab" + hash: "cc4717c4233f9a2f2380bfad6dc89075" } Frame { msec: 2848 - hash: "9705c0dd30c3f381084ec29242bebb2f" + hash: "76e04278dab430d5860306830b73ab6f" } Frame { msec: 2864 - hash: "917579854722d6e6711811e10cbe229f" + hash: "8f70f69731fe8b8f4aa397a667f4c5c0" } Frame { msec: 2880 - hash: "43fa578250e214ed9ad6894329a27c54" + hash: "25b72be5ca16c246bfc6adc4bf19871c" } Frame { msec: 2896 @@ -882,79 +882,79 @@ VisualTest { } Frame { msec: 2912 - hash: "5640c1e64556b90e7fbd4448fa9db462" + hash: "e3dc252a3a0b35398bf3d91c37d6b5e9" } Frame { msec: 2928 - hash: "88cef15940302e2b8b43e73234fd7b9c" + hash: "ce0d8b3f0f0b235eaedc932f4514ea00" } Frame { msec: 2944 - hash: "041aecec2b0b0d59a56e1dd26b45cab1" + hash: "f6b030effcca891ab20073f106b22d73" } Frame { msec: 2960 - hash: "0d519463c713f3da46ecacd155e1a0f3" + hash: "2cfafd1f686f5794d5bf99ec4aaa1d08" } Frame { msec: 2976 - hash: "5dd0c855b97d298244fb599c9f781651" + hash: "502a23fd9a3bcccb29c496e7edeb5d66" } Frame { msec: 2992 - hash: "bfc51621e9bc95d2d46cec632a3fae12" + hash: "82ac348a63a4e358a877a2e45d48e2b1" } Frame { msec: 3008 - hash: "b05fb6e798ab3fed940b5ac4d88ca378" + hash: "0d321f4ca15f09d849c4a28f032cc1cc" } Frame { msec: 3024 - hash: "6bc9cc0d3b11ea91856296b0ec934a8b" + hash: "5c995f84415ea7a260647f946b8963ee" } Frame { msec: 3040 - hash: "f4e63f3af69dacbf2d1d719d4d03a266" + hash: "ee4ecac449c4a2ad4e11ad1d560b3ec3" } Frame { msec: 3056 - hash: "31ab08997eb86fab062a3128aecbccb5" + hash: "0bc3d5b91d781bcf10041eb1557f0d6a" } Frame { msec: 3072 - hash: "90736b240ba1e634bd0ea86423908e16" + hash: "321297177b354e0cc435b3eae49331a3" } Frame { msec: 3088 - hash: "90736b240ba1e634bd0ea86423908e16" + hash: "321297177b354e0cc435b3eae49331a3" } Frame { msec: 3104 - hash: "e74982557dc06aac572078840c7e889a" + hash: "de00148fe89be44237af32d929432655" } Frame { msec: 3120 - hash: "e74982557dc06aac572078840c7e889a" + hash: "de00148fe89be44237af32d929432655" } Frame { msec: 3136 - hash: "ca30c14c7344d1711a35c707f8804f6e" + hash: "756c8068009e9780428bd3ae35df19fe" } Frame { msec: 3152 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 3168 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 3184 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 3200 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 2 @@ -966,15 +966,15 @@ VisualTest { } Frame { msec: 3216 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 3232 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 3248 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -994,7 +994,7 @@ VisualTest { } Frame { msec: 3264 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "96a78749a57bdb87cf28a3804b63793f" } Mouse { type: 5 @@ -1006,7 +1006,7 @@ VisualTest { } Frame { msec: 3280 - hash: "1991cbb0fb053937f922731d5716032c" + hash: "b8f158a8694f2b922faf818d469230e4" } Mouse { type: 5 @@ -1018,7 +1018,7 @@ VisualTest { } Frame { msec: 3296 - hash: "df447575a4734bb5bd9badc6e27d98e4" + hash: "257a298bec9589037e3022cc2fe7a775" } Mouse { type: 5 @@ -1030,7 +1030,7 @@ VisualTest { } Frame { msec: 3312 - hash: "0fbfe1e0d7fb54450188398aa40690cd" + hash: "391d17c09dd33b3dcfc9a619fbb500dc" } Mouse { type: 5 @@ -1042,7 +1042,7 @@ VisualTest { } Frame { msec: 3328 - hash: "cb62e60296046c73d301d7186e14faed" + hash: "b645a1808de7a5d2ce7944ab66a7c233" } Mouse { type: 5 @@ -1054,7 +1054,7 @@ VisualTest { } Frame { msec: 3344 - hash: "909cbd1292476584554e22232cb43639" + hash: "54ddfe85ca8923bcf7f3b6ccab0560de" } Mouse { type: 5 @@ -1066,7 +1066,7 @@ VisualTest { } Frame { msec: 3360 - hash: "e63b7e502dfb2834c06a969b683b9bd3" + hash: "5c1169e17ee96b817e66b4a6097f790c" } Mouse { type: 5 @@ -1078,7 +1078,7 @@ VisualTest { } Frame { msec: 3376 - hash: "4ea63cd25a1424042ffc60549a78563c" + hash: "cd34e7118d43968cfcf52ed9ce58fc0a" } Mouse { type: 5 @@ -1090,7 +1090,7 @@ VisualTest { } Frame { msec: 3392 - hash: "77e39d2d4bfcacecdae4f014e4506d71" + hash: "f3d9d5cd228914b2e1323f19c22aa6f9" } Mouse { type: 5 @@ -1102,7 +1102,7 @@ VisualTest { } Frame { msec: 3408 - hash: "db576eca8bad67cb8b994f12fc448969" + hash: "10e63c46f4b970a9c997126906c01cf9" } Mouse { type: 5 @@ -1114,7 +1114,7 @@ VisualTest { } Frame { msec: 3424 - hash: "efeb3f616da9d78505c3c82fc34ee31c" + hash: "c9b412087f7b744096bf995c6a9ddf15" } Mouse { type: 5 @@ -1126,7 +1126,7 @@ VisualTest { } Frame { msec: 3440 - hash: "e4f8bb02f8ac6bc40e1801cc8f360078" + hash: "70cdc34e22c7a031c2e28898f7edea72" } Mouse { type: 5 @@ -1138,7 +1138,7 @@ VisualTest { } Frame { msec: 3456 - hash: "82118ef71809e3867717232c4d9c5518" + hash: "d0ea5c1f9050499d944ba7e61d354e40" } Mouse { type: 5 @@ -1150,7 +1150,7 @@ VisualTest { } Frame { msec: 3472 - hash: "5363451c696f6c6eb792b23d086243d7" + hash: "d9fc23e14a170b68264721dc18be4fb1" } Mouse { type: 5 @@ -1162,7 +1162,7 @@ VisualTest { } Frame { msec: 3488 - hash: "fe6afe8ae8a7c216a1cffc5515f273d5" + hash: "d59ccdfdb179f2c8c2636a64aecf2a6a" } Mouse { type: 5 @@ -1174,7 +1174,7 @@ VisualTest { } Frame { msec: 3504 - hash: "9b165741d86c70380c15e15cff3fabb6" + hash: "6d21752283210371faf2f757c7a972b3" } Mouse { type: 5 @@ -1186,7 +1186,7 @@ VisualTest { } Frame { msec: 3520 - hash: "f5e176355468f4fa224d4dfcdd7525a3" + hash: "1338a54d3b980a6868ba7d167cfdbdf7" } Mouse { type: 5 @@ -1198,27 +1198,27 @@ VisualTest { } Frame { msec: 3536 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3552 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3568 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3584 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3600 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3616 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Mouse { type: 5 @@ -1230,7 +1230,7 @@ VisualTest { } Frame { msec: 3632 - hash: "f5e176355468f4fa224d4dfcdd7525a3" + hash: "1338a54d3b980a6868ba7d167cfdbdf7" } Mouse { type: 5 @@ -1242,7 +1242,7 @@ VisualTest { } Frame { msec: 3648 - hash: "acf538fce5f1b90b83474d9898b7cdd7" + hash: "b58a71e761abe238de0e90c1c756cd37" } Mouse { type: 5 @@ -1254,7 +1254,7 @@ VisualTest { } Frame { msec: 3664 - hash: "5a0ee016b8732fbc36064e8a35d91215" + hash: "3383dc4a9b1f8267d145d22f9d825dc0" } Mouse { type: 5 @@ -1266,7 +1266,7 @@ VisualTest { } Frame { msec: 3680 - hash: "8fd06a14c1de175813845ce8f07db6ec" + hash: "95df7fbe18630d9b8ffa83850bc5bec5" } Mouse { type: 5 @@ -1278,7 +1278,7 @@ VisualTest { } Frame { msec: 3696 - hash: "26b0ff6ffda0725e0800f7ea3af510ef" + hash: "96c625b6854a862c83ead3fbb32df3b0" } Mouse { type: 5 @@ -1290,7 +1290,7 @@ VisualTest { } Frame { msec: 3712 - hash: "80443f134511be0356a687c9b542b3e7" + hash: "f48f12540c60bc7b60279db8e67ff91b" } Mouse { type: 5 @@ -1302,7 +1302,7 @@ VisualTest { } Frame { msec: 3728 - hash: "3eeb98a829d29b3dc52f3d145ac49d58" + hash: "98353745244809a583c93c1fd87b9a56" } Mouse { type: 5 @@ -1314,7 +1314,7 @@ VisualTest { } Frame { msec: 3744 - hash: "f4d43069b16f41a30e5549aae911d4cd" + hash: "09a1bb3238282c80cc40fccb6e45ba28" } Mouse { type: 5 @@ -1326,7 +1326,7 @@ VisualTest { } Frame { msec: 3760 - hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" + hash: "9e50b6fc980c66698a35178e2520e13c" } Mouse { type: 3 @@ -1338,23 +1338,23 @@ VisualTest { } Frame { msec: 3776 - hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" + hash: "9e50b6fc980c66698a35178e2520e13c" } Frame { msec: 3792 - hash: "1520f54b6c8606b9e8372c5c06180453" + hash: "006c37d9d6b5a8470d74909b9646d5f1" } Frame { msec: 3808 - hash: "0fcf5e2ce47348cbb5bb485f101fe5ac" + hash: "24cf52f7c3cf095be20393757dfaaa6b" } Frame { msec: 3824 - hash: "2eb070e69de07c89830543e0475fc110" + hash: "2189799d060770928f1feaaa44728ec8" } Frame { msec: 3840 - hash: "d73c1059219c0655968af268d22e2c18" + hash: "b8a6375f0303ec8b66cf14f59888c273" } Frame { msec: 3856 @@ -1362,214 +1362,214 @@ VisualTest { } Frame { msec: 3872 - hash: "cc969b2c64839ca6d3b5069c0ed938d0" + hash: "1fd391b060c84ac99c6e94d2d3647c31" } Frame { msec: 3888 - hash: "1f819e18d1297a1c7eeebb7b040bdef8" + hash: "8b594f115e8158b931a9da42fa6829a5" } Frame { msec: 3904 - hash: "3643b99afbd8af0953cb39b2c8c04b9f" + hash: "8f93fdffed4bfd31f9f5977b09074f6a" } Frame { msec: 3920 - hash: "713fd2e2fa38ab27604cb9cae59f1777" + hash: "d0f3eae785732bf24c363fd189672eb2" } Frame { msec: 3936 - hash: "e2508faec7737be2666d87ad715b5f74" + hash: "9113c68cf5689e1f4690e58bbf824ae6" } Frame { msec: 3952 - hash: "fc33b1c7479caeff676ffd885a18d618" + hash: "44dd376f3d5f61ec71b7c488c3a6ee58" } Frame { msec: 3968 - hash: "aca01143db4f870a56bb7546e84cbc5e" + hash: "4555e295bd6de22abcbaecf797ec8902" } Frame { msec: 3984 - hash: "442b58c39fd3745c61a1eb5043fcbb53" + hash: "eb343f3e69f205a240c0425873ea6db1" } Frame { msec: 4000 - hash: "7983d7183cc11d6819fa0a006c2d67b4" + hash: "37a5b81894c16cacd13312f7113a5445" } Frame { msec: 4016 - hash: "9fe4e897c6b853f774d11817a0eb53bf" + hash: "2f9ec963d6f06f8252a69760965df2ee" } Frame { msec: 4032 - hash: "43f528c81ccfa5b9921dfa3564a24c68" + hash: "dec984b2a5cdd85f2dfb8983da5cdee4" } Frame { msec: 4048 - hash: "dfe04ff0b3ccf205bb38beeab58a4411" + hash: "a95f51c3e172ee76b5b74e94532cdfaf" } Frame { msec: 4064 - hash: "32ff30b50b500e9feb51e8eef205783c" + hash: "62d73e875875329c886d2eb540a9c2d9" } Frame { msec: 4080 - hash: "7d83ab4c336b05bcf2cde4e7d8031f6c" + hash: "63c70a0ea1f43d92c717ff23dcfebe81" } Frame { msec: 4096 - hash: "c92e345e4ffdb30c28d9d5aa5400bd30" + hash: "49372aa66b86904d587b72c6c2cfd467" } Frame { msec: 4112 - hash: "02eec604d0c00965aae4ac61b91bdc22" + hash: "523c18f3c7bbaaf9c625835ddf0d8435" } Frame { msec: 4128 - hash: "df447575a4734bb5bd9badc6e27d98e4" + hash: "257a298bec9589037e3022cc2fe7a775" } Frame { msec: 4144 - hash: "bac10d8f94a39573313b3b8b2f871c49" + hash: "d777e4b06791bda82cf1e8e84b1cff5c" } Frame { msec: 4160 - hash: "e5944c5dc6dec8f0c28b7ec3cd58723d" + hash: "c31de5bfff431b13dcbf2b8b4c503bc3" } Frame { msec: 4176 - hash: "1991cbb0fb053937f922731d5716032c" + hash: "b8f158a8694f2b922faf818d469230e4" } Frame { msec: 4192 - hash: "50d6538bcaffc343f6626635a3e5899c" + hash: "5fd4cd0c335cecc7468d44d188e1669d" } Frame { msec: 4208 - hash: "f3613f57cdb9ed38d8e3fa636962aa99" + hash: "77b003c8f72498ed295678158adf417c" } Frame { msec: 4224 - hash: "10a89da9887cb4bbd812c090a8a56797" + hash: "96a78749a57bdb87cf28a3804b63793f" } Frame { msec: 4240 - hash: "89ba74d46970ad2edff701475c059ec8" + hash: "f497ed7bc98daea35a9ae4838427207e" } Frame { msec: 4256 - hash: "6e8b84c70e81578a2216e9e975b35434" + hash: "35a7221f2888ab3afec443b2c1060c80" } Frame { msec: 4272 - hash: "6e8b84c70e81578a2216e9e975b35434" + hash: "35a7221f2888ab3afec443b2c1060c80" } Frame { msec: 4288 - hash: "883b8b180853f1f432ae98ddfe1b6ce3" + hash: "4769fa4ba0c08baefa431b94b47a7ffc" } Frame { msec: 4304 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4320 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4336 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4352 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4368 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4384 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4400 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4416 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4432 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4448 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4464 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4480 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4496 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4512 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4528 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4544 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4560 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4576 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4592 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4608 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4624 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4640 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4656 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4672 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4688 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4704 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png index 2af1a3e..5af9306 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png index 8334a3f..61acc87 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png index c705849..bc6ac34 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png index c705849..bc6ac34 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png index 349dca2..c970488 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png index a0e84e3..0af1424 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png index e5c1583..c826907 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png index 2af1a3e..5af9306 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png index 06468e4..f714fa5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml index 920a48f..8ad3029 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml @@ -10,71 +10,71 @@ VisualTest { } Frame { msec: 32 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 48 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 64 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 80 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 96 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 112 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 128 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 144 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 160 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 176 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 192 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 208 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 224 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 240 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 256 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 272 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 288 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 2 @@ -86,7 +86,7 @@ VisualTest { } Frame { msec: 304 - hash: "3d1b648229210ae5b57a0be51cc02f67" + hash: "71a0273e7582419e07937fe701d8e027" } Mouse { type: 5 @@ -98,7 +98,7 @@ VisualTest { } Frame { msec: 320 - hash: "3d1b648229210ae5b57a0be51cc02f67" + hash: "71a0273e7582419e07937fe701d8e027" } Mouse { type: 5 @@ -118,7 +118,7 @@ VisualTest { } Frame { msec: 336 - hash: "3d1b648229210ae5b57a0be51cc02f67" + hash: "71a0273e7582419e07937fe701d8e027" } Mouse { type: 5 @@ -138,7 +138,7 @@ VisualTest { } Frame { msec: 352 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -158,7 +158,7 @@ VisualTest { } Frame { msec: 368 - hash: "57fa1d842d37df12004b493c1c5761f3" + hash: "a8d53f622836800e43157685ce21fad4" } Mouse { type: 5 @@ -178,7 +178,7 @@ VisualTest { } Frame { msec: 384 - hash: "521a8188877551a97cd3ea82d209e8ae" + hash: "99c8215fbd87e45836908a85748dccc7" } Mouse { type: 5 @@ -198,7 +198,7 @@ VisualTest { } Frame { msec: 400 - hash: "ce126aaade1532e22a35416fd7203dde" + hash: "d56ff1a2994f1acb5ad06b0468672a29" } Mouse { type: 5 @@ -218,119 +218,119 @@ VisualTest { } Frame { msec: 416 - hash: "aa9c4301332240ccc00ec99a05b7f9c9" + hash: "85ba01e36cc978459451887facbc3260" } Frame { msec: 432 - hash: "db0a670d61133a3420a3581ecb532773" + hash: "958d223a6b27ecc87febd860168d5aa5" } Frame { msec: 448 - hash: "b34de164d5ec0294ca27281e1e5e3cd6" + hash: "851ef5f56b7b05d3feb0a1a357f96007" } Frame { msec: 464 - hash: "8636af4591c61c4b4a548f3a38749413" + hash: "4d90460d3b6c46075ffda426bc6ceaa6" } Frame { msec: 480 - hash: "eee4fa336149528dfb16565b856ca692" + hash: "bb67acd602414cf59e27b5ff19f69169" } Frame { msec: 496 - hash: "85eeaeaf359ed87417be68dc18c06d0c" + hash: "acce28653f8bf46c09067254774fb126" } Frame { msec: 512 - hash: "d5db4af6cf35c61146bd24646d82ab83" + hash: "91ea2538dfe0f9af7b4732cb4474215b" } Frame { msec: 528 - hash: "2189fc03c337fe41f3d9f51929c9860f" + hash: "e7fd52f25a4a9c31a2f2fabd59c31160" } Frame { msec: 544 - hash: "4e3e283fb402dc4ec79f65878a513747" + hash: "6acdb4852ef9091382030998e28d02a5" } Frame { msec: 560 - hash: "62f4281d8e049bc12b636b7ebe3862df" + hash: "10c7eaab96a538a7111b054a403132a3" } Frame { msec: 576 - hash: "cf9a0a968459a1283fff91102eb29ba3" + hash: "4ebb31f7945bb5542f9e5146888b1065" } Frame { msec: 592 - hash: "c432221928096cff3b76c8034db26b43" + hash: "b98d594580ad701afb4d2ef186853bc4" } Frame { msec: 608 - hash: "3df59808e56955c3c161609b72d93c7f" + hash: "2700eb44f9b7400f3c1bd11d878e078d" } Frame { msec: 624 - hash: "c497bcbe500905b8a69fd310fd7c7e1a" + hash: "b8a8c4db8325b3e0292e6473084347d9" } Frame { msec: 640 - hash: "7dceef52fab6dc38d140e3097e39a271" + hash: "88ff05697e82e78847794b153be12c46" } Frame { msec: 656 - hash: "c7bbd81b452db98fb8fd892762a23df6" + hash: "06970943c3cd12f07b1d661de0ab730f" } Frame { msec: 672 - hash: "17efc9793ef2966722544d561312b17a" + hash: "5804b412094ab17424de4ba12b2e2e32" } Frame { msec: 688 - hash: "1bf05b272ad6b8e5d134c94d9ba62030" + hash: "8ff038b364f065e67430b2a312a10101" } Frame { msec: 704 - hash: "cad61ba68fdfb26cfb136f22a2f8cc0c" + hash: "8a9a1c725b80af8fd3ffb9d8bc7328ac" } Frame { msec: 720 - hash: "0ce5ff1a1d9a6193ef763affa39cb790" + hash: "83c3481ec7a1dddcbc36d6fb9b7d6149" } Frame { msec: 736 - hash: "880bce9130454aaf1261842b8f9b9a57" + hash: "abf102e5d88bef8ed429c222284907da" } Frame { msec: 752 - hash: "ab78cadac88156d9755d8b70d26384e8" + hash: "e9bcb3268f705e708ffbcf707c78c889" } Frame { msec: 768 - hash: "4a22e502c105a7df0845ca75cbdfb0ec" + hash: "918c60c1ed90f5803d24ea515f21f8fa" } Frame { msec: 784 - hash: "d6209a0b9b9e0f2072179a4623c70fbd" + hash: "f3064485083025aba09224faafcede14" } Frame { msec: 800 - hash: "85e85567831cf57df1f013f5bf3beb86" + hash: "9f36e5b91e6abc9f991625cc52afdd4e" } Frame { msec: 816 - hash: "602d2e02029178faeb99748e2f70827e" + hash: "70a50039fbd67d4b56c0c7ec3d7aecd1" } Frame { msec: 832 - hash: "fd4dbb6f47f6681af98eb6781ae7de58" + hash: "90bbef58e2e59021f68b878db477f74b" } Frame { msec: 848 - hash: "faf3be40e402768724703f5d0051249f" + hash: "21480d7b949acba033f4686c666d3f85" } Frame { msec: 864 - hash: "bc650ca5b7a3bdc1f0f051b9481faf29" + hash: "b622d2cea2428fb92a8e37715a60f195" } Mouse { type: 2 @@ -342,7 +342,7 @@ VisualTest { } Frame { msec: 880 - hash: "bc650ca5b7a3bdc1f0f051b9481faf29" + hash: "b622d2cea2428fb92a8e37715a60f195" } Mouse { type: 5 @@ -362,7 +362,7 @@ VisualTest { } Frame { msec: 896 - hash: "bc650ca5b7a3bdc1f0f051b9481faf29" + hash: "b622d2cea2428fb92a8e37715a60f195" } Mouse { type: 5 @@ -382,7 +382,7 @@ VisualTest { } Frame { msec: 912 - hash: "f2a679f2b7585245d4f1896fed4e0d1e" + hash: "8b537cd0481c1a9bf84f4855ae5697ad" } Mouse { type: 5 @@ -402,7 +402,7 @@ VisualTest { } Frame { msec: 928 - hash: "721b5fa42f583c1e1e1a751fc8aad270" + hash: "f5aba503b2c155401d26be068724e28a" } Mouse { type: 5 @@ -422,7 +422,7 @@ VisualTest { } Frame { msec: 944 - hash: "7e3ddefca9a99d6b9103ffd4524bc593" + hash: "1aca5a9415dd669a0ff76ef4da9c9a56" } Mouse { type: 5 @@ -442,7 +442,7 @@ VisualTest { } Frame { msec: 960 - hash: "7858d23cb4c206676eca51c1c09802b5" + hash: "b046e18396cd3d2da6505fa783bd2b89" } Mouse { type: 5 @@ -474,171 +474,171 @@ VisualTest { } Frame { msec: 992 - hash: "e723da5ecaffe31f03b1d5ca6765229b" + hash: "c4506098417f905871a43d183cd5904d" } Frame { msec: 1008 - hash: "73d169bf6bdfce801b824b7b560c3fad" + hash: "fe8014819e6fe41fa109f5b0ff2e9764" } Frame { msec: 1024 - hash: "4e3e283fb402dc4ec79f65878a513747" + hash: "6acdb4852ef9091382030998e28d02a5" } Frame { msec: 1040 - hash: "38c2e2835c20dbee55c69d0211a0be2d" + hash: "d5a9739669a9a641c0c1f44b777cb9b8" } Frame { msec: 1056 - hash: "84e668ba374ff0004dd7222933a635cf" + hash: "a4006cb90c69313b9b04a6b7b8734855" } Frame { msec: 1072 - hash: "349c7a84ff8f9b52d39dba1282353167" + hash: "23b447e486a6354354505171cf3c45ec" } Frame { msec: 1088 - hash: "b63218110c65b6d7b4bc2d63155204cd" + hash: "ad172b89d9764bd568d9127c91547c0b" } Frame { msec: 1104 - hash: "aad65a7070aa668dd8ce4a3cc0f0f117" + hash: "0003fb6329e0bf293d56af63265bf0ca" } Frame { msec: 1120 - hash: "c4ae97e1d1f2efbc998f9b57c2373201" + hash: "dd62960e62800219c179fcd481e4504d" } Frame { msec: 1136 - hash: "94701ffaa4f45924ad89f92a30157c7d" + hash: "7fe6c7bd1bc9e46d3e520178a2309e87" } Frame { msec: 1152 - hash: "eee4fa336149528dfb16565b856ca692" + hash: "bb67acd602414cf59e27b5ff19f69169" } Frame { msec: 1168 - hash: "ff1a053c0af99c51353503002515843d" + hash: "3170c18b8dd74429b0f366ec07f4870b" } Frame { msec: 1184 - hash: "118494c60034b0e265e28b34e3128d00" + hash: "249e4e489236e3f0748ba63c7a105b33" } Frame { msec: 1200 - hash: "bf693bffb37d7554a437eca21bdec7c1" + hash: "bd2fb97c583e6fe653a32fa610d6ac83" } Frame { msec: 1216 - hash: "880f60263cd79fb6a1bff7252d2373bb" + hash: "95ca2f988370075070c6a98e5e680206" } Frame { msec: 1232 - hash: "b34de164d5ec0294ca27281e1e5e3cd6" + hash: "851ef5f56b7b05d3feb0a1a357f96007" } Frame { msec: 1248 - hash: "e1609c4e40fb9e043a9fff683b94c6c4" + hash: "80f599f50af9e601536f62ea93f4e429" } Frame { msec: 1264 - hash: "2450b61b84c24727232c779114e6a474" + hash: "485d719d81429e63be4de1ba81d53996" } Frame { msec: 1280 - hash: "cf5ac4a5e3d42b3d4e171ed3227cfa85" + hash: "745f3c2e0baede59a52805eddac5b01f" } Frame { msec: 1296 - hash: "5cb5576ab347647ca881d4d450732df3" + hash: "fea3fa6e26eb150ab37fe96a34d3be3b" } Frame { msec: 1312 - hash: "34dc672ebfd75ec017d0c2f0bd435cd8" + hash: "29c8004517294539adf3243533381436" } Frame { msec: 1328 - hash: "aa9c4301332240ccc00ec99a05b7f9c9" + hash: "85ba01e36cc978459451887facbc3260" } Frame { msec: 1344 - hash: "3f98121997a1613bd49d22003d1a1887" + hash: "deedb9ddcc2f5354a2356178db54d971" } Frame { msec: 1360 - hash: "86732d3e900877ae7a8615b7448afaaa" + hash: "9e1fb461c13b4affa39e5909d3ade168" } Frame { msec: 1376 - hash: "7e2f2786d3c0540a0b6559fffe06ad3c" + hash: "684a543d7afc5a5cac2bb823bbb94893" } Frame { msec: 1392 - hash: "79e00bbe77f0a178e8db30023a881c3f" + hash: "636f04661a0418c1fdcaaaba28092671" } Frame { msec: 1408 - hash: "5f611226b3aa38f9aa3cd6a2dbd01f12" + hash: "89cac82b6751208654d1e4ef4df8ef28" } Frame { msec: 1424 - hash: "4f4cd776b76272cfe79b86a108bd6b6e" + hash: "a974415dcf31bee79874c4a6e84cf796" } Frame { msec: 1440 - hash: "a746404a1a26e2a25b8d364dbef46eef" + hash: "f74c075e8cf2aef501b7115427b3b221" } Frame { msec: 1456 - hash: "9124d97d120de1806d86c8f437ec4ed2" + hash: "7efcd27e34db1d3adc3d31e0b9ebe432" } Frame { msec: 1472 - hash: "4fda328eafe6ec2d02d939517d6d82e3" + hash: "c8747327ae3370b04a996aa6b5e373c6" } Frame { msec: 1488 - hash: "6afb6abe291c9e9628fd0b8c3da5d9db" + hash: "b7b32b5e782f8f5b1cbd6f581f90004a" } Frame { msec: 1504 - hash: "cb5962fe94c5d3ef754ff45f905a5c88" + hash: "5fda56f77948e183557ff54690030746" } Frame { msec: 1520 - hash: "57b5fc47ed700831b3dc3f2afbb1c3ed" + hash: "6e43987a8db7a6231887cf5883d381bf" } Frame { msec: 1536 - hash: "38793fb8a19c9566c8dd9d23c9a15b5d" + hash: "901e1f9851d05ff300fa2d52a38829ec" } Frame { msec: 1552 - hash: "2e311a5dc484e9f4bc7bd85d32a693b1" + hash: "abda2edf3c9f1aa28f41bf28083d081f" } Frame { msec: 1568 - hash: "69d1eed68fba918e831899c8b84374a1" + hash: "5e324e90e4056f59730db9fbc941609a" } Frame { msec: 1584 - hash: "c872391012e6ab2a6d1eb98c7f47f9e8" + hash: "d98ec6ad7e6f2df6796f975cdf06ea2c" } Frame { msec: 1600 - hash: "cf12f90835d823550cd83d472b4f022f" + hash: "fa62c8154b5aba9fa6daa0a50229e752" } Frame { msec: 1616 - hash: "fbb2f03ddbd87ed419386eb2942bccac" + hash: "c03b7e52c7da4f1cb6a4a2cab119a1a1" } Frame { msec: 1632 - hash: "0788a0fdb51cedba0f8b597a4cc38ebe" + hash: "57c1149d35ed84de63bac7accdb30c77" } Frame { msec: 1648 - hash: "b6595edf06fba22f3258c9b433af6ab8" + hash: "48823d7e5b72ff6e11bbe877962c9884" } Mouse { type: 2 @@ -650,19 +650,19 @@ VisualTest { } Frame { msec: 1664 - hash: "521a8188877551a97cd3ea82d209e8ae" + hash: "99c8215fbd87e45836908a85748dccc7" } Frame { msec: 1680 - hash: "4d923cd520c00f5cd985283d62cf17ec" + hash: "45e2cf43322f038d2b322dea82e829f1" } Frame { msec: 1696 - hash: "7ccff14d344c7090fa634f6defd6511e" + hash: "6473a0dc426bf118674d09b281fb6c38" } Frame { msec: 1712 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 3 @@ -674,55 +674,55 @@ VisualTest { } Frame { msec: 1728 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1744 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1760 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1776 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1792 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1808 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1824 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1840 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1856 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1872 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1888 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1904 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1920 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1936 @@ -730,39 +730,39 @@ VisualTest { } Frame { msec: 1952 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1968 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1984 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2000 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2016 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2032 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2048 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2064 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2080 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2096 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -802,7 +802,7 @@ VisualTest { } Frame { msec: 2112 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -822,7 +822,7 @@ VisualTest { } Frame { msec: 2128 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -842,7 +842,7 @@ VisualTest { } Frame { msec: 2144 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -862,7 +862,7 @@ VisualTest { } Frame { msec: 2160 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -882,7 +882,7 @@ VisualTest { } Frame { msec: 2176 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -902,7 +902,7 @@ VisualTest { } Frame { msec: 2192 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -922,7 +922,7 @@ VisualTest { } Frame { msec: 2208 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -942,7 +942,7 @@ VisualTest { } Frame { msec: 2224 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -970,79 +970,79 @@ VisualTest { } Frame { msec: 2240 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2256 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2272 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2288 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2304 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2320 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2336 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2352 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2368 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2384 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2400 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2416 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2432 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2448 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2464 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2480 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2496 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2512 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2528 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1054,7 +1054,7 @@ VisualTest { } Frame { msec: 2544 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1066,7 +1066,7 @@ VisualTest { } Frame { msec: 2560 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1086,7 +1086,7 @@ VisualTest { } Frame { msec: 2576 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1106,7 +1106,7 @@ VisualTest { } Frame { msec: 2592 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1126,7 +1126,7 @@ VisualTest { } Frame { msec: 2608 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1146,7 +1146,7 @@ VisualTest { } Frame { msec: 2624 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1166,7 +1166,7 @@ VisualTest { } Frame { msec: 2640 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1186,7 +1186,7 @@ VisualTest { } Frame { msec: 2656 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1206,7 +1206,7 @@ VisualTest { } Frame { msec: 2672 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1226,7 +1226,7 @@ VisualTest { } Frame { msec: 2688 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1246,7 +1246,7 @@ VisualTest { } Frame { msec: 2704 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1266,7 +1266,7 @@ VisualTest { } Frame { msec: 2720 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1286,43 +1286,43 @@ VisualTest { } Frame { msec: 2736 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2752 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2768 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2784 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2800 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2816 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2832 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2848 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2864 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2880 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2896 @@ -1330,63 +1330,63 @@ VisualTest { } Frame { msec: 2912 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2928 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2944 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2960 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2976 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2992 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3008 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3024 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3040 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3056 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3072 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3088 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3104 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3120 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3136 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1398,23 +1398,23 @@ VisualTest { } Frame { msec: 3152 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3168 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3184 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3200 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3216 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 3 @@ -1426,67 +1426,67 @@ VisualTest { } Frame { msec: 3232 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3248 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3264 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3280 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3296 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3312 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3328 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3344 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3360 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3376 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3392 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3408 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3424 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3440 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3456 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3472 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1498,19 +1498,19 @@ VisualTest { } Frame { msec: 3488 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3504 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3520 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3536 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 3 @@ -1522,55 +1522,55 @@ VisualTest { } Frame { msec: 3552 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3568 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3584 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3600 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3616 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3632 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3648 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3664 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3680 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3696 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3712 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3728 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3744 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1582,7 +1582,7 @@ VisualTest { } Frame { msec: 3760 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 5 @@ -1602,7 +1602,7 @@ VisualTest { } Frame { msec: 3776 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 5 @@ -1622,7 +1622,7 @@ VisualTest { } Frame { msec: 3792 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 5 @@ -1642,7 +1642,7 @@ VisualTest { } Frame { msec: 3808 - hash: "2e311a5dc484e9f4bc7bd85d32a693b1" + hash: "abda2edf3c9f1aa28f41bf28083d081f" } Mouse { type: 5 @@ -1662,7 +1662,7 @@ VisualTest { } Frame { msec: 3824 - hash: "cbfcb7b986b0c51828473d98ca9fee03" + hash: "1a0305de0a8156f3f059d74891b71846" } Mouse { type: 5 @@ -1682,7 +1682,7 @@ VisualTest { } Frame { msec: 3840 - hash: "389b514c4cd4a4d65388608643d08c04" + hash: "04c2fbbb1df6ca9d03c105fcfa5c0770" } Mouse { type: 5 @@ -1722,7 +1722,7 @@ VisualTest { } Frame { msec: 3872 - hash: "cf9a0a968459a1283fff91102eb29ba3" + hash: "4ebb31f7945bb5542f9e5146888b1065" } Mouse { type: 5 @@ -1742,139 +1742,139 @@ VisualTest { } Frame { msec: 3888 - hash: "77c86fb26126825cfd5b6ba21b903808" + hash: "2a731429c6d5c4ee1f1fa8f3ca07f0c2" } Frame { msec: 3904 - hash: "c497bcbe500905b8a69fd310fd7c7e1a" + hash: "b8a8c4db8325b3e0292e6473084347d9" } Frame { msec: 3920 - hash: "95bffb4d4aff1603e96af55cbc2dc3f2" + hash: "fae53bd8bc9d05f343968c7006723207" } Frame { msec: 3936 - hash: "6fa87a7136528b688069fe1c4bd94043" + hash: "fe2fc28a79609af32ea1043f3c988b08" } Frame { msec: 3952 - hash: "602c16e1382d810f853d647e531b4e8a" + hash: "18f77a48b14347b2ab41eb39c9de3be4" } Frame { msec: 3968 - hash: "01d1227e4f5b95f8b0c6a57a4b2314c4" + hash: "93e83c35d34715ee703a0d79d51bc145" } Frame { msec: 3984 - hash: "1db6401af45574b7453ad57766e60e6f" + hash: "4ae9d80d6079b92be66fcc099209d779" } Frame { msec: 4000 - hash: "067a1bef3df5d1c40842f28885d60250" + hash: "bd8c0a924552cb4dfc5ddc1451931b01" } Frame { msec: 4016 - hash: "5fba31051e05ec00c0d68b8e8af94132" + hash: "6a1874cdac6f754b36f022c583834d32" } Frame { msec: 4032 - hash: "d6209a0b9b9e0f2072179a4623c70fbd" + hash: "f3064485083025aba09224faafcede14" } Frame { msec: 4048 - hash: "ec30f07ab0056a45954c07ecdfa1401a" + hash: "8e82568ac62969dfedbf1c2082101661" } Frame { msec: 4064 - hash: "fef6c7767970a283bb3b13826f71bdac" + hash: "4e447efea0dd139787c7aa9018327206" } Frame { msec: 4080 - hash: "29621938e96be0d11c95fd1e4ca37631" + hash: "ed23778ce6843053cd4af6df7262bdd0" } Frame { msec: 4096 - hash: "8103c96ac90ddf52056d7e8b32e4ae9e" + hash: "fe1118cc51b4cd25d775b5d1c1d66540" } Frame { msec: 4112 - hash: "d72bf8b88efe603050ad038380173969" + hash: "02a59ccc15df26abe5612f13ce926286" } Frame { msec: 4128 - hash: "4438b56eb6aa800602634db6016caa50" + hash: "71c43a208e3dfbce6cb461f8ff0d2f17" } Frame { msec: 4144 - hash: "44674f7a874023c3932d698344ccda0e" + hash: "404b8155f17dff084c2da1407d6915a9" } Frame { msec: 4160 - hash: "155a834ddaa7128b6f5a2a406b340315" + hash: "ab0dba54c469dea461cd1619161edd82" } Frame { msec: 4176 - hash: "3886efa510581ee5b6c4a2ed76aeb42d" + hash: "e6f158712a7afe1844acc1a1cd9385ec" } Frame { msec: 4192 - hash: "094954e8d10b85d3941626dec4fb36af" + hash: "b9d8fcc3d68ebc6d4d4f60e4652befe3" } Frame { msec: 4208 - hash: "b597aeb20a8630e4b1dfd0a7be383e4d" + hash: "9005a49b3ac2ef2344d78ef68595ea26" } Frame { msec: 4224 - hash: "abc58e74ab197a2d7c243ddd67442e53" + hash: "aad3dd90f766320ad68b62b97559ec02" } Frame { msec: 4240 - hash: "b6ec106d39af13492c3d43bf006b7b15" + hash: "a39008d78d188e8bd3571f80f679a915" } Frame { msec: 4256 - hash: "d80211f898473a01e0c0641b96bc92f4" + hash: "cedc580acc63d6a069442bb83f17b6f8" } Frame { msec: 4272 - hash: "5010579fcd925e65c778c2e9cf0317de" + hash: "f63f5d20e3b5a4b6247339d0ec518449" } Frame { msec: 4288 - hash: "5010579fcd925e65c778c2e9cf0317de" + hash: "f63f5d20e3b5a4b6247339d0ec518449" } Frame { msec: 4304 - hash: "d80211f898473a01e0c0641b96bc92f4" + hash: "cedc580acc63d6a069442bb83f17b6f8" } Frame { msec: 4320 - hash: "27cfc811f62029df48ea7f371ff5654b" + hash: "bccf94c11e92af36f418dbee1b797a86" } Frame { msec: 4336 - hash: "b6ec106d39af13492c3d43bf006b7b15" + hash: "a39008d78d188e8bd3571f80f679a915" } Frame { msec: 4352 - hash: "28c8e3f08f46bf13cc52a7d6a31a7cf1" + hash: "02d38396737a262fa983511a40514b38" } Frame { msec: 4368 - hash: "b597aeb20a8630e4b1dfd0a7be383e4d" + hash: "9005a49b3ac2ef2344d78ef68595ea26" } Frame { msec: 4384 - hash: "a3a3682ce0d2a2d57457458b13645afa" + hash: "c05dad606a9b5b501a201bfead974f03" } Frame { msec: 4400 - hash: "98bf25cbb8202fe1576ac15bac7b9e65" + hash: "27846f086c13e1b06e89a8a395802678" } Frame { msec: 4416 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Mouse { type: 2 @@ -1886,11 +1886,11 @@ VisualTest { } Frame { msec: 4432 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Frame { msec: 4448 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Mouse { type: 5 @@ -1902,7 +1902,7 @@ VisualTest { } Frame { msec: 4464 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Mouse { type: 5 @@ -1922,7 +1922,7 @@ VisualTest { } Frame { msec: 4480 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "ab0dba54c469dea461cd1619161edd82" } Mouse { type: 5 @@ -1942,7 +1942,7 @@ VisualTest { } Frame { msec: 4496 - hash: "abc58e74ab197a2d7c243ddd67442e53" + hash: "aad3dd90f766320ad68b62b97559ec02" } Mouse { type: 5 @@ -1962,7 +1962,7 @@ VisualTest { } Frame { msec: 4512 - hash: "e5c5b741da7c028ec77f52016675c1ca" + hash: "09e110197afc9350dbbaf3e19e24dbe8" } Mouse { type: 5 @@ -1982,7 +1982,7 @@ VisualTest { } Frame { msec: 4528 - hash: "12481bcccb524a478851a57d4db6cf8d" + hash: "c50fa7aa75b947d065109c97a0db4c02" } Mouse { type: 5 @@ -2002,7 +2002,7 @@ VisualTest { } Frame { msec: 4544 - hash: "a49985bd332cd3376986d379c474a3de" + hash: "e701f8ef23f576f10c286191ea4caaf1" } Mouse { type: 5 @@ -2030,51 +2030,51 @@ VisualTest { } Frame { msec: 4560 - hash: "cd4e55b15e9df7fee1862180fddec0ca" + hash: "c24daebe9c5ba9bd46ef674c49edd160" } Frame { msec: 4576 - hash: "64ff54775d198b616597f4539de90bd8" + hash: "fc762235395c772666d2529a5e9bff98" } Frame { msec: 4592 - hash: "2b188745bfff51f9d3af90b7ad9c8d77" + hash: "7f4f4420fde62e6126f0c3bf604425dc" } Frame { msec: 4608 - hash: "2dde7d565f92f22c6524448f97107e35" + hash: "0e9978b0f60cba7bf599571b97f2f751" } Frame { msec: 4624 - hash: "897a454ac464008d6dd7864eb608ae65" + hash: "ff19d1b0a0d7d0cc5dd8919606c17fc8" } Frame { msec: 4640 - hash: "269df4f1aca4f0cdbd5c86c2e115bd3c" + hash: "7c61e0a6c354b4f30db6c861b9250be2" } Frame { msec: 4656 - hash: "ec0ebdbd3f4665fba7f6a523a82a5071" + hash: "bd1196ce51f5abd53f6052f17d926a81" } Frame { msec: 4672 - hash: "c1ac6a385f580f23b3486c643d276e33" + hash: "ab2b1c33a5f60690fe2724a0ddd3bb67" } Frame { msec: 4688 - hash: "3de0d147a6a3c1382ec64a80996bb4f4" + hash: "0a0709d2649d649ab52eaddbe60c1dc9" } Frame { msec: 4704 - hash: "8db942b5909f63d4369ad5b29938ef49" + hash: "ef3b3099811cc2e26d823d94c5b66f1d" } Frame { msec: 4720 - hash: "f7840636f2d01c25be8e9c77230cca53" + hash: "522683305b2706b6e22d0e1770f285d6" } Frame { msec: 4736 - hash: "d315f82e175361fed83193ce550cb6e9" + hash: "c08d933b3dbda5fc476ed673cd7a2e4a" } Mouse { type: 2 @@ -2086,7 +2086,7 @@ VisualTest { } Frame { msec: 4752 - hash: "d315f82e175361fed83193ce550cb6e9" + hash: "c08d933b3dbda5fc476ed673cd7a2e4a" } Mouse { type: 5 @@ -2106,7 +2106,7 @@ VisualTest { } Frame { msec: 4768 - hash: "d315f82e175361fed83193ce550cb6e9" + hash: "ab0dba54c469dea461cd1619161edd82" } Mouse { type: 5 @@ -2126,7 +2126,7 @@ VisualTest { } Frame { msec: 4784 - hash: "00b072a0adbfcd520d495ef6540f5680" + hash: "d23653a4e1651babdbb3561fb7029df2" } Mouse { type: 5 @@ -2146,7 +2146,7 @@ VisualTest { } Frame { msec: 4800 - hash: "fb605e95988a6110384671e7f3f18ad8" + hash: "702d94cbca1ba235a5a2cc30c552d8b7" } Mouse { type: 5 @@ -2186,7 +2186,7 @@ VisualTest { } Frame { msec: 4832 - hash: "4d1eb644b592a693b13fe14377aeed97" + hash: "f53134176897d55299ab723ab20ba3fc" } Mouse { type: 5 @@ -2206,7 +2206,7 @@ VisualTest { } Frame { msec: 4848 - hash: "00eb1d3b016eb0220461074ce81b1aef" + hash: "84146c913b41215c4bab1f36471f2b7b" } Mouse { type: 5 @@ -2234,231 +2234,231 @@ VisualTest { } Frame { msec: 4864 - hash: "77c86fb26126825cfd5b6ba21b903808" + hash: "2a731429c6d5c4ee1f1fa8f3ca07f0c2" } Frame { msec: 4880 - hash: "e80f024bbdce0ceeae137e347abc95a4" + hash: "a1e960ffef391daecb52d31698c7b06c" } Frame { msec: 4896 - hash: "bb189f39a836b9a2aa68f4535ed1d6fb" + hash: "adca54c132f170c517f1ef17c45006c8" } Frame { msec: 4912 - hash: "cf9a0a968459a1283fff91102eb29ba3" + hash: "4ebb31f7945bb5542f9e5146888b1065" } Frame { msec: 4928 - hash: "27130e7f6b853a287a7bdd8608628a4f" + hash: "c43ebd04137e379216c94b4c57cab3d9" } Frame { msec: 4944 - hash: "231c7b7078af00a36cfee3d5e43a4021" + hash: "c0218c548f5e3eb74ef33cb2921dbc96" } Frame { msec: 4960 - hash: "d8ffc8cc9cecc25cb9b4e7990fb7b8e7" + hash: "e6a15947574c7ac8e5a2454a5f8b043d" } Frame { msec: 4976 - hash: "fb5db5dafdb375132f1f1a461193bc60" + hash: "ec9aca63b61a8c3beb4ad476d4e38568" } Frame { msec: 4992 - hash: "64100f9f102ffc9415e306c087547709" + hash: "28f0447e8107d7fac9ec29b83808d2cb" } Frame { msec: 5008 - hash: "6960e5c4feb55043ff91934fc934734e" + hash: "74e28cddf8dd7bd7593c7185e09ea752" } Frame { msec: 5024 - hash: "349c7a84ff8f9b52d39dba1282353167" + hash: "23b447e486a6354354505171cf3c45ec" } Frame { msec: 5040 - hash: "bb41010df844312fc15bb5b42712619a" + hash: "3e3948addc7236ff8638863786dfe045" } Frame { msec: 5056 - hash: "63a3e18670bb2a5e7edfe3b752c0a1b5" + hash: "49885ec2f3242fc3ba9c9b808b3bb491" } Frame { msec: 5072 - hash: "92b1d0fbadbefe9f122b14903a5e0ee9" + hash: "0c12fc65a0298af1a1ec3bccfcdb20ab" } Frame { msec: 5088 - hash: "6b979e1a4bc7226a89ffb97be2f08147" + hash: "49c71089343b963fd8b3587eb1d5d457" } Frame { msec: 5104 - hash: "7b783908e0b10d329a7d3172f2302a85" + hash: "f083682e9bce74022baeafcb26870adb" } Frame { msec: 5120 - hash: "41d5ef3390cfc0d806825fc0cd033be6" + hash: "5bd49eab3fd8b246659b51d4602ea391" } Frame { msec: 5136 - hash: "ff1a053c0af99c51353503002515843d" + hash: "3170c18b8dd74429b0f366ec07f4870b" } Frame { msec: 5152 - hash: "63b26ecde2a2a9ce36884191304352ed" + hash: "d82de8b7c5a144b20085f447cf041350" } Frame { msec: 5168 - hash: "bdcff2f9f2c376974211ea6ad5c4961f" + hash: "60e520c52c5b87c686294a23d96dbd11" } Frame { msec: 5184 - hash: "00ffef1a1d4341ac1c7f43d493a9e826" + hash: "bb5b6cb5862e28a7f309ef5c7cf2b5dd" } Frame { msec: 5200 - hash: "65dcbb543656f65267c7d32dcd644e56" + hash: "b9e255376ad0b74b2c9be6e694f84d90" } Frame { msec: 5216 - hash: "38b49419b7103d76da2b6d7101d63d88" + hash: "e7527c7c8cb2f8c9e5ce32be98612837" } Frame { msec: 5232 - hash: "de39f6bf64745054cbee30ddf306f641" + hash: "8f8547a6508b156d514c6d4a61d18424" } Frame { msec: 5248 - hash: "d6b5ceca4aa48a7d4fd901d44c151b53" + hash: "99b4220101d400b49346ca023799c8fe" } Frame { msec: 5264 - hash: "876e6eee8a35c34e2dd5269f86a9ab3a" + hash: "2d83cf7c5f93aad4f9dcadcfdbb08fa3" } Frame { msec: 5280 - hash: "f94219306eac2e678881d0b607d15a1e" + hash: "c9ea64aa7000008ad9032cddd898767c" } Frame { msec: 5296 - hash: "c9184196ef45c985f08f80435492641d" + hash: "4c37b188261e927f72725484d08ac9e1" } Frame { msec: 5312 - hash: "34dc672ebfd75ec017d0c2f0bd435cd8" + hash: "29c8004517294539adf3243533381436" } Frame { msec: 5328 - hash: "4daf1c730fdf13e0a87b28208f2b6dd1" + hash: "b5126298ebb61d6ab5ae58822c9380ca" } Frame { msec: 5344 - hash: "c28d5d7d9d3a86e5bbf6ad48331f9c61" + hash: "7b546c089dca57353b4867af724ea370" } Frame { msec: 5360 - hash: "3f98121997a1613bd49d22003d1a1887" + hash: "deedb9ddcc2f5354a2356178db54d971" } Frame { msec: 5376 - hash: "86732d3e900877ae7a8615b7448afaaa" + hash: "9e1fb461c13b4affa39e5909d3ade168" } Frame { msec: 5392 - hash: "9f3da7ebaeb319c9fec0abdd6bd76ee2" + hash: "dbb54d7d203c99d466b1a173fb90c148" } Frame { msec: 5408 - hash: "326563c2c812a74c7f1fa5e9da0c2369" + hash: "0a67ef028264551c1122f4d8a0b07c20" } Frame { msec: 5424 - hash: "79e00bbe77f0a178e8db30023a881c3f" + hash: "636f04661a0418c1fdcaaaba28092671" } Frame { msec: 5440 - hash: "e624204566550e928ab2a2c54113d217" + hash: "de8946eb6317277b580cbf6a38a85a29" } Frame { msec: 5456 - hash: "b95bf705b81544b05f560c54dec56ff1" + hash: "45dd5e856c10ef2e5a9b968044802096" } Frame { msec: 5472 - hash: "4f4cd776b76272cfe79b86a108bd6b6e" + hash: "a974415dcf31bee79874c4a6e84cf796" } Frame { msec: 5488 - hash: "ec2eb1b39a252bd9b37d12ede3d231ce" + hash: "58dab05300d4c83ba084c8bef6a04958" } Frame { msec: 5504 - hash: "a746404a1a26e2a25b8d364dbef46eef" + hash: "f74c075e8cf2aef501b7115427b3b221" } Frame { msec: 5520 - hash: "17d190465ee0d348d9b67a748626d99e" + hash: "7fd3e958115134b2f15cc6d3e01cbcfe" } Frame { msec: 5536 - hash: "9124d97d120de1806d86c8f437ec4ed2" + hash: "7efcd27e34db1d3adc3d31e0b9ebe432" } Frame { msec: 5552 - hash: "ea746de2380835d299c56bb01f0aa83c" + hash: "2229621b9ad55dddce371061584a4dfd" } Frame { msec: 5568 - hash: "4fda328eafe6ec2d02d939517d6d82e3" + hash: "c8747327ae3370b04a996aa6b5e373c6" } Frame { msec: 5584 - hash: "9c6f671def0b1f5d780024a9dad439e6" + hash: "677f52c273dda1f878bfea43b6353aaa" } Frame { msec: 5600 - hash: "b7d441d0bb27ed6d1984f324b6e02548" + hash: "d29de2f0505bdaca1e3443812a588fb1" } Frame { msec: 5616 - hash: "3042a62a1125171d9530b696f4b36e19" + hash: "71f3088ea8794a232ee08c6b0ad72e98" } Frame { msec: 5632 - hash: "4534f40cf6bb7f402d7252c474629664" + hash: "3733ba52e740ea8438967cb03c619368" } Frame { msec: 5648 - hash: "cb5962fe94c5d3ef754ff45f905a5c88" + hash: "5fda56f77948e183557ff54690030746" } Frame { msec: 5664 - hash: "b5a5f9f3aa0948f0bd8d9b4a3fceae50" + hash: "5996c2fc31ff3a13e1f3a23a230aad9a" } Frame { msec: 5680 - hash: "2e0605899abb5725cf22561ec9293879" + hash: "90b9b19f9f6aef7279b1199ca7b34b07" } Frame { msec: 5696 - hash: "1f260f1d931326be7e398f7c87e44735" + hash: "05b4559167ff77d07bb3063b87c4e621" } Frame { msec: 5712 - hash: "57b5fc47ed700831b3dc3f2afbb1c3ed" + hash: "6e43987a8db7a6231887cf5883d381bf" } Frame { msec: 5728 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5744 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5760 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5776 @@ -2474,19 +2474,19 @@ VisualTest { } Frame { msec: 5792 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5808 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5824 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5840 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 3 @@ -2498,59 +2498,59 @@ VisualTest { } Frame { msec: 5856 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5872 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5888 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5904 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5920 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5936 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5952 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5968 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5984 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6000 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6016 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6032 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6048 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6064 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 2 @@ -2562,23 +2562,23 @@ VisualTest { } Frame { msec: 6080 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6096 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6112 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6128 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6144 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 3 @@ -2590,63 +2590,63 @@ VisualTest { } Frame { msec: 6160 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6176 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6192 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6208 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6224 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6240 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6256 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6272 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6288 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6304 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6320 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6336 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6352 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6368 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6384 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 2 @@ -2658,11 +2658,11 @@ VisualTest { } Frame { msec: 6400 - hash: "c18aeb6fb3914a0be2d34ff76249ed8e" + hash: "9b748b3b85f63d7f62cd916b0bf4357c" } Frame { msec: 6416 - hash: "c18aeb6fb3914a0be2d34ff76249ed8e" + hash: "9b748b3b85f63d7f62cd916b0bf4357c" } Mouse { type: 5 @@ -2682,7 +2682,7 @@ VisualTest { } Frame { msec: 6432 - hash: "c18aeb6fb3914a0be2d34ff76249ed8e" + hash: "9b748b3b85f63d7f62cd916b0bf4357c" } Mouse { type: 5 @@ -2702,7 +2702,7 @@ VisualTest { } Frame { msec: 6448 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 5 @@ -2722,7 +2722,7 @@ VisualTest { } Frame { msec: 6464 - hash: "a5daa2f6c932fa38038639bdc8231c5d" + hash: "2c84bdd7066c8fd8c66b022783c6fcfe" } Mouse { type: 5 @@ -2742,7 +2742,7 @@ VisualTest { } Frame { msec: 6480 - hash: "f342612efcd5e0820b44bd788ec52d7a" + hash: "ffe18300d9ce72e2d4e191c473a6973c" } Mouse { type: 5 @@ -2762,7 +2762,7 @@ VisualTest { } Frame { msec: 6496 - hash: "9a66e65c69ec833a36cce5cbd7d8257f" + hash: "427720fdd38ff4310c8040b1a5a5f84f" } Mouse { type: 5 @@ -2782,7 +2782,7 @@ VisualTest { } Frame { msec: 6512 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2802,7 +2802,7 @@ VisualTest { } Frame { msec: 6528 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2822,7 +2822,7 @@ VisualTest { } Frame { msec: 6544 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2842,7 +2842,7 @@ VisualTest { } Frame { msec: 6560 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2862,7 +2862,7 @@ VisualTest { } Frame { msec: 6576 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2882,7 +2882,7 @@ VisualTest { } Frame { msec: 6592 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2910,35 +2910,35 @@ VisualTest { } Frame { msec: 6608 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6624 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6640 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6656 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6672 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6688 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6704 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6720 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6736 @@ -2946,67 +2946,67 @@ VisualTest { } Frame { msec: 6752 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6768 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6784 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6800 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6816 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6832 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6848 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6864 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6880 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6896 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6912 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6928 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6944 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6960 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6976 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6992 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 2 @@ -3018,7 +3018,7 @@ VisualTest { } Frame { msec: 7008 - hash: "9ed65a21e4aaedf9c48a38324b3f5480" + hash: "ff198f6b27379e64b901b37e0cf1e98b" } Mouse { type: 5 @@ -3038,7 +3038,7 @@ VisualTest { } Frame { msec: 7024 - hash: "9ed65a21e4aaedf9c48a38324b3f5480" + hash: "ff198f6b27379e64b901b37e0cf1e98b" } Mouse { type: 5 @@ -3058,7 +3058,7 @@ VisualTest { } Frame { msec: 7040 - hash: "9ed65a21e4aaedf9c48a38324b3f5480" + hash: "ff198f6b27379e64b901b37e0cf1e98b" } Mouse { type: 5 @@ -3078,7 +3078,7 @@ VisualTest { } Frame { msec: 7056 - hash: "c4925926f64b852ff6c8d07e1c70ead5" + hash: "61d410fdbe0ee8a41e9c7b25eb2901a7" } Mouse { type: 5 @@ -3098,7 +3098,7 @@ VisualTest { } Frame { msec: 7072 - hash: "da771cedad067b8f25c100613b6a14f2" + hash: "8e27d1db841047a115561861a1c20e67" } Mouse { type: 5 @@ -3118,7 +3118,7 @@ VisualTest { } Frame { msec: 7088 - hash: "c8862bf76a431edc1cf04f4114fa859f" + hash: "7599e2f206da8b46dcaf35a4a7858747" } Mouse { type: 5 @@ -3138,7 +3138,7 @@ VisualTest { } Frame { msec: 7104 - hash: "4d923cd520c00f5cd985283d62cf17ec" + hash: "45e2cf43322f038d2b322dea82e829f1" } Mouse { type: 5 @@ -3158,7 +3158,7 @@ VisualTest { } Frame { msec: 7120 - hash: "76b0d1c77ba29bad836673b1b79de911" + hash: "0170b6aff2eab67213fc4f2883be1db9" } Mouse { type: 5 @@ -3178,7 +3178,7 @@ VisualTest { } Frame { msec: 7136 - hash: "3f9c5686f0a9ef5ecf2b8338ef2e7933" + hash: "23ef985de50ae4600d8f62ed4c91edc9" } Mouse { type: 5 @@ -3198,7 +3198,7 @@ VisualTest { } Frame { msec: 7152 - hash: "799d83eedefa0a56f37a83404c59ad4f" + hash: "a69e534df84e406e06ca94e2221c97f1" } Mouse { type: 5 @@ -3226,79 +3226,79 @@ VisualTest { } Frame { msec: 7168 - hash: "d6b5ceca4aa48a7d4fd901d44c151b53" + hash: "99b4220101d400b49346ca023799c8fe" } Frame { msec: 7184 - hash: "e1609c4e40fb9e043a9fff683b94c6c4" + hash: "80f599f50af9e601536f62ea93f4e429" } Frame { msec: 7200 - hash: "ea457fc4d4065d2ed0e9f6efc47a06ee" + hash: "e211b4a9e0059eaf7a3654121ed6b7a4" } Frame { msec: 7216 - hash: "b7f4319aa9c21640a697ee89f162bb49" + hash: "ef0997291fb3323c877b65847905f7c3" } Frame { msec: 7232 - hash: "880f60263cd79fb6a1bff7252d2373bb" + hash: "95ca2f988370075070c6a98e5e680206" } Frame { msec: 7248 - hash: "00ffef1a1d4341ac1c7f43d493a9e826" + hash: "bb5b6cb5862e28a7f309ef5c7cf2b5dd" } Frame { msec: 7264 - hash: "c949fe87ba91e08f26a1c4d90028513f" + hash: "958e9074dfa2392db05fb3f532573519" } Frame { msec: 7280 - hash: "8636af4591c61c4b4a548f3a38749413" + hash: "4d90460d3b6c46075ffda426bc6ceaa6" } Frame { msec: 7296 - hash: "63b26ecde2a2a9ce36884191304352ed" + hash: "d82de8b7c5a144b20085f447cf041350" } Frame { msec: 7312 - hash: "843f7263f63442f0041bf2c1a6fae400" + hash: "4d5d1c8470df16097c51517e750ef6be" } Frame { msec: 7328 - hash: "ff1a053c0af99c51353503002515843d" + hash: "3170c18b8dd74429b0f366ec07f4870b" } Frame { msec: 7344 - hash: "47aea3ac4ea935d43f731a258287c2e8" + hash: "35b4e282089b4f7e8cc60aaf6635a0f7" } Frame { msec: 7360 - hash: "eee4fa336149528dfb16565b856ca692" + hash: "bb67acd602414cf59e27b5ff19f69169" } Frame { msec: 7376 - hash: "bb94493c25c56c41e81ef1e390adf63d" + hash: "0135220633c5aebe964b596f3c1bae27" } Frame { msec: 7392 - hash: "2915f455a5e1e8c6b8cc78309c5e84d9" + hash: "b4a996bdc1ccae96f84e285b212a19a3" } Frame { msec: 7408 - hash: "94701ffaa4f45924ad89f92a30157c7d" + hash: "7fe6c7bd1bc9e46d3e520178a2309e87" } Frame { msec: 7424 - hash: "92fae8cf4b8d8404b26a31f995860b95" + hash: "b803764915a58bd59aed1223bd7c67d7" } Frame { msec: 7440 - hash: "6b979e1a4bc7226a89ffb97be2f08147" + hash: "49c71089343b963fd8b3587eb1d5d457" } Frame { msec: 7456 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Mouse { type: 2 @@ -3310,11 +3310,11 @@ VisualTest { } Frame { msec: 7472 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Frame { msec: 7488 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Mouse { type: 5 @@ -3334,7 +3334,7 @@ VisualTest { } Frame { msec: 7504 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Mouse { type: 5 @@ -3354,7 +3354,7 @@ VisualTest { } Frame { msec: 7520 - hash: "34c7ed1c072d84626a8a64f7db02f71d" + hash: "21bf0affeaf1033e59a99bed9efeb80d" } Mouse { type: 5 @@ -3374,7 +3374,7 @@ VisualTest { } Frame { msec: 7536 - hash: "e723da5ecaffe31f03b1d5ca6765229b" + hash: "c4506098417f905871a43d183cd5904d" } Mouse { type: 5 @@ -3394,7 +3394,7 @@ VisualTest { } Frame { msec: 7552 - hash: "a85128cae494abeb5d45ab8df0d127a6" + hash: "fdf8dfa53431f930b01e667b3b86c7a1" } Mouse { type: 5 @@ -3414,7 +3414,7 @@ VisualTest { } Frame { msec: 7568 - hash: "3599a92966c27321e9f702f3428b9b00" + hash: "a94e05f80f0f8d3af13678318fd91416" } Mouse { type: 5 @@ -3434,31 +3434,31 @@ VisualTest { } Frame { msec: 7584 - hash: "067a1bef3df5d1c40842f28885d60250" + hash: "bd8c0a924552cb4dfc5ddc1451931b01" } Frame { msec: 7600 - hash: "82f818ed44a191fb51e637b8068786dc" + hash: "ed5bab2126fb459989b7ea0e44da6776" } Frame { msec: 7616 - hash: "f408f59707195549ba61f030a3f020cd" + hash: "756fc80a88e6f5d28f9c6bba771355c5" } Frame { msec: 7632 - hash: "66e79c8b2f8e3a57c3bc14935c5df7d1" + hash: "640c092db0d2a523ce0cdc961e64124a" } Frame { msec: 7648 - hash: "4341c6b7b0d2e8021b51cb1abab85e10" + hash: "097582f1b42c16d41f4413755ac15c3e" } Frame { msec: 7664 - hash: "5ec8ee5ccecac1787b2f5e99268e810d" + hash: "67ef5e3297fe5605bd41a72681899f48" } Frame { msec: 7680 - hash: "1fae7b735ff6e88abfb1423f8960da4f" + hash: "91452c52c309b7d90c7ccca3fc9ae8b2" } Frame { msec: 7696 @@ -3466,182 +3466,182 @@ VisualTest { } Frame { msec: 7712 - hash: "dce74ff07eb37c82a38b3e515f9a43f2" + hash: "ebef3c7095abadf45855fe75cbf3d358" } Frame { msec: 7728 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7744 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7760 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7776 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7792 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7808 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7824 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7840 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7856 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7872 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7888 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7904 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7920 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7936 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7952 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7968 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7984 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8000 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8016 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8032 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8048 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8064 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8080 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8096 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8112 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8128 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8144 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8160 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8176 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8192 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8208 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8224 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8240 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8256 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8272 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8288 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8304 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8320 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8336 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8352 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8368 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8384 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8400 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8416 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } } diff --git a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png index 1dc9372..3556dce 100644 Binary files a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png and b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png differ -- cgit v0.12 From cb470a33bf85cf15b9df57e3ade27c6a0720d138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 4 Jan 2011 08:39:22 +0100 Subject: Fixed first element being a LineToElement in QPainterPath::connectPath() This would produce an invalid path, causing potential crashes in various parts of Qt. Task-number: QTBUG-16377 Reviewed-by: Gunnar Sletta --- src/gui/painting/qpainterpath.cpp | 3 ++- tests/auto/qpainterpath/tst_qpainterpath.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index ffd0d5c..94e2cd4 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -1196,7 +1196,8 @@ void QPainterPath::connectPath(const QPainterPath &other) int first = d->elements.size(); d->elements += other.d_func()->elements; - d->elements[first].type = LineToElement; + if (first != 0) + d->elements[first].type = LineToElement; // avoid duplicate points if (first > 0 && QPointF(d->elements[first]) == QPointF(d->elements[first - 1])) { diff --git a/tests/auto/qpainterpath/tst_qpainterpath.cpp b/tests/auto/qpainterpath/tst_qpainterpath.cpp index d0cddda..66e6d10 100644 --- a/tests/auto/qpainterpath/tst_qpainterpath.cpp +++ b/tests/auto/qpainterpath/tst_qpainterpath.cpp @@ -107,6 +107,7 @@ private slots: void operators(); void connectPathDuplicatePoint(); + void connectPathMoveTo(); void translate(); }; @@ -1169,6 +1170,31 @@ void tst_QPainterPath::connectPathDuplicatePoint() QCOMPARE(c, a); } +void tst_QPainterPath::connectPathMoveTo() +{ + QPainterPath path1; + QPainterPath path2; + QPainterPath path3; + QPainterPath path4; + + path1.moveTo(1,1); + + path2.moveTo(4,4); + path2.lineTo(5,6); + path2.lineTo(6,7); + + path3.connectPath(path2); + + path4.lineTo(5,5); + + path1.connectPath(path2); + + QVERIFY(path1.elementAt(0).type == QPainterPath::MoveToElement); + QVERIFY(path2.elementAt(0).type == QPainterPath::MoveToElement); + QVERIFY(path3.elementAt(0).type == QPainterPath::MoveToElement); + QVERIFY(path4.elementAt(0).type == QPainterPath::MoveToElement); +} + void tst_QPainterPath::translate() { QPainterPath path; -- cgit v0.12 From 7fec0ddfae9e7c79d904c87e7726991a306f5ab3 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 09:29:06 +0100 Subject: QMeeGoSwitchEvent exported and static. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 1009 Reviewed-by: Samuel Rødal --- tools/qmeegographicssystemhelper/qmeegoswitchevent.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/qmeegographicssystemhelper/qmeegoswitchevent.h b/tools/qmeegographicssystemhelper/qmeegoswitchevent.h index 0ddbd3d..462182f 100644 --- a/tools/qmeegographicssystemhelper/qmeegoswitchevent.h +++ b/tools/qmeegographicssystemhelper/qmeegoswitchevent.h @@ -52,7 +52,7 @@ when going to software mode. */ -class QMeeGoSwitchEvent : public QEvent +class Q_DECL_EXPORT QMeeGoSwitchEvent : public QEvent { public: @@ -83,7 +83,7 @@ public: The type is registered on first access. Use this to detect incoming QMeeGoSwitchEvents. */ - QEvent::Type eventNumber(); + static QEvent::Type eventNumber(); private: QString name; -- cgit v0.12 From 3ad35ffdbfcbd2db5e8aac95fa0cc9f80e372128 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 10:28:20 +0100 Subject: Pre-create the GL share widget before window surface creation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not pixmap creation. Merge-request: 988 Reviewed-by: Samuel Rødal --- src/plugins/graphicssystems/meego/qmeegographicssystem.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp index 4a86082..b1a8f5f7 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp @@ -75,6 +75,8 @@ QMeeGoGraphicsSystem::~QMeeGoGraphicsSystem() QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const { + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + QMeeGoGraphicsSystem::surfaceWasCreated = true; QWindowSurface *surface = new QGLWindowSurface(widget); return surface; @@ -82,12 +84,6 @@ QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const QPixmapData *QMeeGoGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const { - // Long story short: without this it's possible to hit an - // uninitialized paintDevice due to a Qt bug too complex to even - // explain here... not to mention fix without going crazy. - // MDK - QGLShareContextScope ctx(qt_gl_share_widget()->context()); - return new QRasterPixmapData(type); } -- cgit v0.12 From b5acfc61f3989ab8b72f784431fc5ab168ffb975 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 10:53:57 +0100 Subject: Support for swap modes in QGLWindowSurface. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AlwaysFull and AlwaysPartial implemented in ES only for now. By default do automatic. Merge-request: 993 Reviewed-by: Samuel Rødal --- src/opengl/qwindowsurface_gl.cpp | 13 ++++++++++++- src/opengl/qwindowsurface_gl_p.h | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 7dc7dc7..b8716ce 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -284,6 +284,7 @@ struct QGLWindowSurfacePrivate }; QGLFormat QGLWindowSurface::surfaceFormat; +QGLWindowSurface::SwapMode QGLWindowSurface::swapBehavior = QGLWindowSurface::AutomaticSwap; void QGLWindowSurfaceGLPaintDevice::endPaint() { @@ -541,6 +542,9 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & const GLenum target = GL_TEXTURE_2D; Q_UNUSED(target); + if (QGLWindowSurface::swapBehavior == QGLWindowSurface::KillSwap) + return; + if (context()) { context()->makeCurrent(); @@ -588,7 +592,14 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & } } #endif - bool doingPartialUpdate = hasPartialUpdateSupport() && br.width() * br.height() < parent->geometry().width() * parent->geometry().height() * 0.2; + bool doingPartialUpdate = false; + if (QGLWindowSurface::swapBehavior == QGLWindowSurface::AutomaticSwap) + doingPartialUpdate = hasPartialUpdateSupport() && br.width() * br.height() < parent->geometry().width() * parent->geometry().height() * 0.2; + else if (QGLWindowSurface::swapBehavior == QGLWindowSurface::AlwaysFullSwap) + doingPartialUpdate = false; + else if (QGLWindowSurface::swapBehavior == QGLWindowSurface::AlwaysPartialSwap) + doingPartialUpdate = hasPartialUpdateSupport(); + QGLContext *ctx = reinterpret_cast(parent->d_func()->extraData()->glContext); if (widget != window()) { if (initializeOffscreenTexture(window()->size())) diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index 6906f35..9b0bee3 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -102,6 +102,9 @@ public: static QGLFormat surfaceFormat; + enum SwapMode { AutomaticSwap, AlwaysFullSwap, AlwaysPartialSwap, KillSwap }; + static SwapMode swapBehavior; + private slots: void deleted(QObject *object); -- cgit v0.12 From 177f2a2f17251c22f57944e9dd100ec8515b891a Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 10:53:58 +0100 Subject: QMeeGoGraphicsSystemHelper::setSwapBehavior implementation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 993 Reviewed-by: Samuel Rødal --- .../qmeegographicssystemhelper.cpp | 15 +++++++++++++++ .../qmeegographicssystemhelper.h | 18 ++++++++++++++++++ .../qmeegographicssystemhelper.pro | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp index b660eb3..37cc417 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include "qmeegoruntime.h" #include "qmeegoswitchevent.h" @@ -153,3 +154,17 @@ void QMeeGoGraphicsSystemHelper::setTranslucent(bool translucent) ENSURE_RUNNING_MEEGO; QMeeGoRuntime::setTranslucent(translucent); } + +void QMeeGoGraphicsSystemHelper::setSwapBehavior(SwapMode mode) +{ + ENSURE_RUNNING_MEEGO; + + if (mode == AutomaticSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::AutomaticSwap; + else if (mode == AlwaysFullSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::AlwaysFullSwap; + else if (mode == AlwaysPartialSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::AlwaysPartialSwap; + else if (mode == KillSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::KillSwap; +} diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h index 6df3c22..c8dccc2 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h @@ -186,6 +186,24 @@ public: on the top-level widget *before* you show it instead. */ static void setTranslucent(bool translucent); + + //! Used to specify the mode for swapping buffers in double-buffered GL rendering. + enum SwapMode { + AutomaticSwap, /**< Automatically choose netween full and partial updates (25% threshold) */ + AlwaysFullSwap, /**< Always do a full swap even if partial updates support present */ + AlwaysPartialSwap, /**< Always do a partial swap (if support present) no matter what threshold */ + KillSwap /**< Do not perform buffer swapping at all (no picture) */ + }; + + //! Sets the buffer swapping mode. + /*! + This can be only called when running with the meego graphics system. + The KillSwap mode can be specififed to effectively block painting. + + This functionality should be used only by applications counting on a specific behavior. + Most applications should use the default automatic behavior. + */ + static void setSwapBehavior(SwapMode mode); }; #endif diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro index 360847e..7639ad7 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro @@ -3,7 +3,7 @@ TARGET = QtMeeGoGraphicsSystemHelper include(../../src/qbase.pri) -QT += gui +QT += gui opengl INCLUDEPATH += '../../src/plugins/graphicssystems/meego' HEADERS = qmeegographicssystemhelper.h qmeegooverlaywidget.h qmeegolivepixmap.h qmeegoruntime.h qmeegolivepixmap_p.h qmeegofencesync.h qmeegofencesync_p.h qmeegoswitchevent.h -- cgit v0.12 From 254281dae38b932998eb8014a55177948842b78d Mon Sep 17 00:00:00 2001 From: Joshua Grauman Date: Tue, 4 Jan 2011 11:03:32 +0100 Subject: Add line spacing to QTextBlockFormat, get/set functions, CSS support The patch adds line spacing options to Qt, as in all modern word processors. I primarily checked OpenOffice as a reference for how to position the lines based on the various types of line spacing as well as where to do the page breaks. The following functions were added: void QTextBlockFormat::setLineHeight(qreal height, int heightType) qreal QTextBlockFormat::lineHeight() int QTextBlockFormat::lineHeightType() qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling) Here are the HeightTypes available: QTextBlockFormat::SingleHeight QTextBlockFormat::ProportionalHeight QTextBlockFormat::FixedHeight QTextBlockFormat::AtLeastHeight QTextBlockFormat::LineDistanceHeight The following CSS syntax was added: line-height:150% line-height:40px line-height:normal line-height:40al line-height:40ld Merge-request: 2305 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qcssparser.cpp | 1 + src/gui/text/qcssparser_p.h | 1 + src/gui/text/qtextdocumentlayout.cpp | 38 ++++++++++++++++---- src/gui/text/qtextformat.cpp | 67 ++++++++++++++++++++++++++++++++++++ src/gui/text/qtextformat.h | 35 +++++++++++++++++++ src/gui/text/qtexthtmlparser.cpp | 18 ++++++++++ 6 files changed, 154 insertions(+), 6 deletions(-) diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp index dafc8e7..edb08ae 100644 --- a/src/gui/text/qcssparser.cpp +++ b/src/gui/text/qcssparser.cpp @@ -122,6 +122,7 @@ static const QCssKnownValue properties[NumProperties - 1] = { { "image", QtImage }, { "image-position", QtImageAlignment }, { "left", Left }, + { "line-height", LineHeight }, { "list-style", ListStyle }, { "list-style-type", ListStyleType }, { "margin" , Margin }, diff --git a/src/gui/text/qcssparser_p.h b/src/gui/text/qcssparser_p.h index ca9688e..6bcbdab 100644 --- a/src/gui/text/qcssparser_p.h +++ b/src/gui/text/qcssparser_p.h @@ -180,6 +180,7 @@ enum Property { TextTransform, QtListNumberPrefix, QtListNumberSuffix, + LineHeight, NumProperties }; diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index ff14490..5334ae8 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2506,6 +2506,23 @@ void QTextDocumentLayoutPrivate::layoutFlow(QTextFrame::Iterator it, QTextLayout fd->currentLayoutStruct = 0; } +static inline void getLineHeightParams(const QTextBlockFormat &blockFormat, const QTextLine &line, qreal scaling, + QFixed *lineAdjustment, QFixed *lineBreakHeight, QFixed *lineHeight) +{ + *lineHeight = QFixed::fromReal(blockFormat.lineHeight(line.height(), scaling)); + if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight || blockFormat.lineHeightType() == QTextBlockFormat::AtLeastHeight) { + *lineBreakHeight = *lineHeight; + if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight) + *lineAdjustment = QFixed::fromReal(line.ascent() + qMax(line.leading(), 0.0)) - ((*lineHeight * 4) / 5); + else + *lineAdjustment = QFixed::fromReal(line.height()) - *lineHeight; + } + else { + *lineBreakHeight = QFixed::fromReal(line.height()); + *lineAdjustment = 0; + } +} + void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosition, const QTextBlockFormat &blockFormat, QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, const QTextBlockFormat *previousBlockFormat) { @@ -2639,8 +2656,12 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi } - QFixed lineHeight = QFixed::fromReal(line.height()); - if (layoutStruct->pageHeight > 0 && layoutStruct->absoluteY() + lineHeight > layoutStruct->pageBottom) { + QFixed lineBreakHeight, lineHeight, lineAdjustment; + qreal scaling = (q->paintDevice() && q->paintDevice()->logicalDpiY() != qt_defaultDpi()) ? + qreal(q->paintDevice()->logicalDpiY()) / qreal(qt_defaultDpi()) : 1; + getLineHeightParams(blockFormat, line, scaling, &lineAdjustment, &lineBreakHeight, &lineHeight); + + if (layoutStruct->pageHeight > 0 && layoutStruct->absoluteY() + lineBreakHeight > layoutStruct->pageBottom) { layoutStruct->newPage(); floatMargins(layoutStruct->y, layoutStruct, &left, &right); @@ -2652,7 +2673,7 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi right -= text_indent; } - line.setPosition(QPointF((left - layoutStruct->x_left).toReal(), (layoutStruct->y - cy).toReal())); + line.setPosition(QPointF((left - layoutStruct->x_left).toReal(), (layoutStruct->y - cy - lineAdjustment).toReal())); layoutStruct->y += lineHeight; layoutStruct->contentsWidth = qMax(layoutStruct->contentsWidth, QFixed::fromReal(line.x() + line.naturalTextWidth()) + totalRightMargin); @@ -2672,11 +2693,16 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi QTextLine line = tl->lineAt(i); layoutStruct->contentsWidth = qMax(layoutStruct->contentsWidth, QFixed::fromReal(line.x() + tl->lineAt(i).naturalTextWidth()) + totalRightMargin); - const QFixed lineHeight = QFixed::fromReal(line.height()); + + QFixed lineBreakHeight, lineHeight, lineAdjustment; + qreal scaling = (q->paintDevice() && q->paintDevice()->logicalDpiY() != qt_defaultDpi()) ? + qreal(q->paintDevice()->logicalDpiY()) / qreal(qt_defaultDpi()) : 1; + getLineHeightParams(blockFormat, line, scaling, &lineAdjustment, &lineBreakHeight, &lineHeight); + if (layoutStruct->pageHeight != QFIXED_MAX) { - if (layoutStruct->absoluteY() + lineHeight > layoutStruct->pageBottom) + if (layoutStruct->absoluteY() + lineBreakHeight > layoutStruct->pageBottom) layoutStruct->newPage(); - line.setPosition(QPointF(line.position().x(), layoutStruct->y.toReal() - tl->position().y())); + line.setPosition(QPointF(line.position().x(), (layoutStruct->y - lineAdjustment).toReal() - tl->position().y())); } layoutStruct->y += lineHeight; } diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 945b012..719db7a 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -541,6 +541,8 @@ Q_GUI_EXPORT QDataStream &operator>>(QDataStream &stream, QTextFormat &fmt) \value TabPositions Specifies the tab positions. The tab positions are structs of QTextOption::Tab which are stored in a QList (internally, in a QList). \value BlockIndent + \value LineHeight + \value LineHeightType \value BlockNonBreakableLines \value BlockTrailingHorizontalRulerWidth The width of a horizontal ruler element. @@ -1856,6 +1858,10 @@ QFont QTextCharFormat::font() const indentation is set with setIndent(), the indentation of the first line with setTextIndent(). + Line spacing is set with setLineHeight() and retreived via lineHeight() + and lineHeightType(). The types of line spacing available are in the + LineHeightTypes enum. + Line breaking can be enabled and disabled with setNonBreakableLines(). The brush used to paint the paragraph's background @@ -1872,6 +1878,22 @@ QFont QTextCharFormat::font() const */ /*! + \since 4.7 + \enum QTextBlockFormat::LineHeightTypes + + This enum describes the various types of line spacing support paragraphs can have. + + \value SingleHeight This is the default line height: single spacing. + \value ProportionalHeight This sets the spacing proportional to the line (in percentage). + For example, set to 200 for double spacing. + \value FixedHeight This sets the line height to a fixed line height (in pixels). + \value AtLeastHeight This sets the minimum line height (in pixels). + \value LineDistanceHeight This adds the specified height between lines (in pixels). + + \sa lineHeight(), lineHeightType(), setLineHeight() +*/ + +/*! \fn QTextBlockFormat::QTextBlockFormat() Constructs a new QTextBlockFormat. @@ -2089,6 +2111,51 @@ QList QTextBlockFormat::tabPositions() const /*! + \fn void QTextBlockFormat::setLineHeight(qreal height, int heightType) + \since 4.7 + + This sets the line height for the paragraph to the value in height + which is dependant on heightType, described by the LineHeightTypes enum. + + \sa LineHeightTypes, lineHeight(), lineHeightType() +*/ + + +/*! + \fn qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling) const + \since 4.7 + + This returns what the height of the lines in the paragraph will be depending + on the given height of the script line and the scaling. The value that is returned + is also dependant on the given LineHeightType of the paragraph as well as the LineHeight + setting that has been set for the paragraph. The scaling is needed for the heights + that include a fixed number of pixels, to scale them appropriately for printing. + + \sa LineHeightTypes, setLineHeight(), lineHeightType() +*/ + + +/*! + \fn qreal QTextBlockFormat::lineHeight() const + \since 4.7 + + This returns the LineHeight property for the paragraph. + + \sa LineHeightTypes, setLineHeight(), lineHeightType() +*/ + + +/*! + \fn qreal QTextBlockFormat::lineHeightType() const + \since 4.7 + + This returns the LineHeightType property of the paragraph. + + \sa LineHeightTypes, setLineHeight(), lineHeight() +*/ + + +/*! \fn void QTextBlockFormat::setNonBreakableLines(bool b) If \a b is true, the lines in the paragraph are treated as diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h index bb6e71d..41cc1d9 100644 --- a/src/gui/text/qtextformat.h +++ b/src/gui/text/qtextformat.h @@ -164,6 +164,8 @@ public: TextIndent = 0x1034, TabPositions = 0x1035, BlockIndent = 0x1040, + LineHeight = 0x1048, + LineHeightType = 0x1049, BlockNonBreakableLines = 0x1050, BlockTrailingHorizontalRulerWidth = 0x1060, @@ -531,6 +533,14 @@ inline void QTextCharFormat::setTableCellColumnSpan(int _tableCellColumnSpan) class Q_GUI_EXPORT QTextBlockFormat : public QTextFormat { public: + enum LineHeightTypes { + SingleHeight = 0, + ProportionalHeight = 1, + FixedHeight = 2, + AtLeastHeight = 3, + LineDistanceHeight = 4 + }; + QTextBlockFormat(); bool isValid() const { return isBlockFormat(); } @@ -568,6 +578,14 @@ public: inline int indent() const { return intProperty(BlockIndent); } + inline void setLineHeight(qreal height, int heightType) + { setProperty(LineHeight, height); setProperty(LineHeightType, heightType); } + inline qreal lineHeight(qreal scriptLineHeight, qreal scaling) const; + inline qreal lineHeight() const + { return doubleProperty(LineHeight); } + inline int lineHeightType() const + { return intProperty(LineHeightType); } + inline void setNonBreakableLines(bool b) { setProperty(BlockNonBreakableLines, b); } inline bool nonBreakableLines() const @@ -592,6 +610,23 @@ inline void QTextBlockFormat::setAlignment(Qt::Alignment aalignment) inline void QTextBlockFormat::setIndent(int aindent) { setProperty(BlockIndent, aindent); } +inline qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling = 1.0) const +{ + switch(intProperty(LineHeightType)) { + case SingleHeight: + return(scriptLineHeight); + case ProportionalHeight: + return(scriptLineHeight * doubleProperty(LineHeight) / 100.0); + case FixedHeight: + return(doubleProperty(LineHeight) * scaling); + case AtLeastHeight: + return(qMax(scriptLineHeight, doubleProperty(LineHeight) * scaling)); + case LineDistanceHeight: + return(scriptLineHeight + doubleProperty(LineHeight) * scaling); + } + return(0); +} + class Q_GUI_EXPORT QTextListFormat : public QTextFormat { public: diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp index 5b9ab90..769a509 100644 --- a/src/gui/text/qtexthtmlparser.cpp +++ b/src/gui/text/qtexthtmlparser.cpp @@ -1250,6 +1250,24 @@ void QTextHtmlParserNode::applyCssDeclarations(const QVector case QCss::QtBlockIndent: blockFormat.setIndent(decl.d->values.first().variant.toInt()); break; + case QCss::LineHeight: { + qreal lineHeight; + if (decl.realValue(&lineHeight, "px")) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::FixedHeight); + else if (decl.realValue(&lineHeight, "al")) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::AtLeastHeight); + else if (decl.realValue(&lineHeight, "ld")) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::LineDistanceHeight); + else { + bool ok; + QString value = decl.d->values.first().toString(); + lineHeight = value.toDouble(&ok); + if (ok) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::ProportionalHeight); + else + blockFormat.setLineHeight(0, QTextBlockFormat::SingleHeight); + } + break; } case QCss::TextIndent: { qreal indent = 0; if (decl.realValue(&indent, "px")) -- cgit v0.12 From 09b06552f98f8ee8be4d156049a6a37a4abed6bd Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 4 Jan 2011 11:09:38 +0100 Subject: Rename QTextBlockFormat::AtLeastHeight -> MinimumHeight Make some alterations to merge request 2305: 1. Rename enum for consistency with other APIs in Qt. 2. Correct documentation with actual version number of features. 3. Remove unstandard css syntax in line-height specification. Reviewed-by: Jiang Jiang --- src/gui/text/qtextdocumentlayout.cpp | 2 +- src/gui/text/qtextformat.cpp | 12 ++++++------ src/gui/text/qtextformat.h | 4 ++-- src/gui/text/qtexthtmlparser.cpp | 8 ++------ 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 5334ae8..22c6b8c 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2510,7 +2510,7 @@ static inline void getLineHeightParams(const QTextBlockFormat &blockFormat, cons QFixed *lineAdjustment, QFixed *lineBreakHeight, QFixed *lineHeight) { *lineHeight = QFixed::fromReal(blockFormat.lineHeight(line.height(), scaling)); - if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight || blockFormat.lineHeightType() == QTextBlockFormat::AtLeastHeight) { + if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight || blockFormat.lineHeightType() == QTextBlockFormat::MinimumHeight) { *lineBreakHeight = *lineHeight; if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight) *lineAdjustment = QFixed::fromReal(line.ascent() + qMax(line.leading(), 0.0)) - ((*lineHeight * 4) / 5); diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 719db7a..b05a830 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -1878,7 +1878,7 @@ QFont QTextCharFormat::font() const */ /*! - \since 4.7 + \since 4.8 \enum QTextBlockFormat::LineHeightTypes This enum describes the various types of line spacing support paragraphs can have. @@ -1887,7 +1887,7 @@ QFont QTextCharFormat::font() const \value ProportionalHeight This sets the spacing proportional to the line (in percentage). For example, set to 200 for double spacing. \value FixedHeight This sets the line height to a fixed line height (in pixels). - \value AtLeastHeight This sets the minimum line height (in pixels). + \value MinimumHeight This sets the minimum line height (in pixels). \value LineDistanceHeight This adds the specified height between lines (in pixels). \sa lineHeight(), lineHeightType(), setLineHeight() @@ -2112,7 +2112,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn void QTextBlockFormat::setLineHeight(qreal height, int heightType) - \since 4.7 + \since 4.8 This sets the line height for the paragraph to the value in height which is dependant on heightType, described by the LineHeightTypes enum. @@ -2123,7 +2123,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling) const - \since 4.7 + \since 4.8 This returns what the height of the lines in the paragraph will be depending on the given height of the script line and the scaling. The value that is returned @@ -2137,7 +2137,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn qreal QTextBlockFormat::lineHeight() const - \since 4.7 + \since 4.8 This returns the LineHeight property for the paragraph. @@ -2147,7 +2147,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn qreal QTextBlockFormat::lineHeightType() const - \since 4.7 + \since 4.8 This returns the LineHeightType property of the paragraph. diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h index 41cc1d9..81b053b 100644 --- a/src/gui/text/qtextformat.h +++ b/src/gui/text/qtextformat.h @@ -537,7 +537,7 @@ public: SingleHeight = 0, ProportionalHeight = 1, FixedHeight = 2, - AtLeastHeight = 3, + MinimumHeight = 3, LineDistanceHeight = 4 }; @@ -619,7 +619,7 @@ inline qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling return(scriptLineHeight * doubleProperty(LineHeight) / 100.0); case FixedHeight: return(doubleProperty(LineHeight) * scaling); - case AtLeastHeight: + case MinimumHeight: return(qMax(scriptLineHeight, doubleProperty(LineHeight) * scaling)); case LineDistanceHeight: return(scriptLineHeight + doubleProperty(LineHeight) * scaling); diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp index 769a509..5d5e2b6 100644 --- a/src/gui/text/qtexthtmlparser.cpp +++ b/src/gui/text/qtexthtmlparser.cpp @@ -1252,13 +1252,9 @@ void QTextHtmlParserNode::applyCssDeclarations(const QVector break; case QCss::LineHeight: { qreal lineHeight; - if (decl.realValue(&lineHeight, "px")) + if (decl.realValue(&lineHeight, "px")) { blockFormat.setLineHeight(lineHeight, QTextBlockFormat::FixedHeight); - else if (decl.realValue(&lineHeight, "al")) - blockFormat.setLineHeight(lineHeight, QTextBlockFormat::AtLeastHeight); - else if (decl.realValue(&lineHeight, "ld")) - blockFormat.setLineHeight(lineHeight, QTextBlockFormat::LineDistanceHeight); - else { + } else { bool ok; QString value = decl.d->values.first().toString(); lineHeight = value.toDouble(&ok); -- cgit v0.12 From f2e3ef4e1eb656e1ce9f980a7d7bf63444b02504 Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Wed, 29 Dec 2010 18:12:30 +0100 Subject: Set no brush when the brush is a solid patern transparent color. Fix a bug in pdf print engine that was noticeable when printing a webpage: the missing image graphic didn't appear in the pdf. Task-number: QTBUG-16435 Reviewed-by: sroedal --- src/gui/painting/qpdf.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index f5f7c3c..29e6a88 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -1156,6 +1156,8 @@ void QPdfBaseEngine::updateState(const QPaintEngineState &state) } if (flags & DirtyBrush) { d->brush = state.brush(); + if (d->brush.color().alpha() == 0 && d->brush.style() == Qt::SolidPattern) + d->brush.setStyle(Qt::NoBrush); d->hasBrush = d->brush.style() != Qt::NoBrush; } if (flags & DirtyBrushOrigin) { -- cgit v0.12 From 7008c516cda01a24d034a1d44dfaab03be4bfdb9 Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Tue, 4 Jan 2011 12:03:37 +0100 Subject: Allow QWidget with size larger than 16383 on Mac OS X (Cocoa) The restriction in place seems to be from the carbon ages, this is not required for cocoa, so removing it. QWidget autotests runs as before. Task-number: QTBUG-11415 Reviewed-by: Joao --- src/gui/kernel/qwidget_mac.mm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 059140e..3c5c458 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -4224,6 +4224,7 @@ void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect) } } +#ifndef QT_MAC_USE_COCOA const QRect validRange(-XCOORD_MAX,-XCOORD_MAX, 2*XCOORD_MAX, 2*XCOORD_MAX); if (!validRange.contains(xrect)) { // we are too big, and must clip @@ -4242,6 +4243,7 @@ void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect) wrect = xrect; wrect.translate(-data.crect.topLeft()); // translate wrect in my Qt coordinates } +#endif //QT_MAC_USE_COCOA } // unmap if we are outside the valid window system coord system -- cgit v0.12 From 3753b15e88f2c8220b887f27be79491c4135a291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 6 Dec 2010 16:13:34 +0100 Subject: Added window focus handling to lighthouse The idea is that QPlatformWindows can request focus handling. And when actual focus shifting is done by windowsystem callbacks/events which are sent to QWindowSystemInterface --- src/gui/kernel/qapplication_p.h | 2 ++ src/gui/kernel/qapplication_qpa.cpp | 7 +++++++ src/gui/kernel/qplatformwindow_qpa.cpp | 19 +++++++++++++++++++ src/gui/kernel/qplatformwindow_qpa.h | 1 + src/gui/kernel/qwidget_qpa.cpp | 8 ++------ src/gui/kernel/qwindowsysteminterface_qpa.cpp | 6 ++++++ src/gui/kernel/qwindowsysteminterface_qpa.h | 1 + src/gui/kernel/qwindowsysteminterface_qpa_p.h | 9 +++++++++ src/plugins/platforms/testlite/qtestlitewindow.cpp | 22 ++++++++++++++++++++++ src/plugins/platforms/testlite/qtestlitewindow.h | 3 +++ 10 files changed, 72 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 7b49999..73c4462 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -508,6 +508,8 @@ public: static void processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e); static void processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e); + static void processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *e); + static void processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e); // static void reportScreenCount(int count); diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index ece035c..a587e8e 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -111,6 +111,9 @@ void QApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate case QWindowSystemInterfacePrivate::Leave: QApplicationPrivate::processLeaveEvent(static_cast(e)); break; + case QWindowSystemInterfacePrivate::ActivatedWindow: + QApplicationPrivate::processActivatedEvent(static_cast(e)); + break; case QWindowSystemInterfacePrivate::Close: QApplicationPrivate::processCloseEvent( static_cast(e)); @@ -823,6 +826