OSDN Git Service

reimplement QJsonDocument via Jansson
authorIvailo Monev <xakepa10@gmail.com>
Wed, 10 Feb 2021 23:36:04 +0000 (01:36 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Wed, 10 Feb 2021 23:37:58 +0000 (01:37 +0200)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
43 files changed:
CMakeLists.txt
appveyor.yml
cmake/modules/FindJansson.cmake [new file with mode: 0644]
package/archlinux/PKGBUILD
package/debian/control
package/fedora/katie.spec
package/freebsd/Makefile
package/freebsd/pkg-plist
package/netbsd/Makefile
package/netbsd/PLIST.common
package/openbsd/Makefile
package/openbsd/pkg/PLIST
scripts/incfsck.py
scripts/namefsck.py
src/core/CMakeLists.txt
src/core/io/qsettings.cpp
src/core/json/qjson.cpp [deleted file]
src/core/json/qjson_p.h [deleted file]
src/core/json/qjsonarray.cpp [deleted file]
src/core/json/qjsonarray.h [deleted file]
src/core/json/qjsondocument.cpp [deleted file]
src/core/json/qjsondocument.h [deleted file]
src/core/json/qjsonobject.cpp [deleted file]
src/core/json/qjsonobject.h [deleted file]
src/core/json/qjsonparser.cpp [deleted file]
src/core/json/qjsonparser_p.h [deleted file]
src/core/json/qjsonvalue.cpp [deleted file]
src/core/json/qjsonvalue.h [deleted file]
src/core/json/qjsonwriter.cpp [deleted file]
src/core/json/qjsonwriter_p.h [deleted file]
src/core/kernel/qmetatype.cpp
src/core/kernel/qmetatype.h
src/core/kernel/qvariant.cpp
src/core/kernel/qvariant.h
src/core/tools/qjsondocument.cpp [new file with mode: 0644]
src/core/tools/qjsondocument.h [new file with mode: 0644]
src/tools/uic/cpp/cppwriteincludes.cpp
tests/auto/qjsondocument/CMakeLists.txt [new file with mode: 0644]
tests/auto/qjsondocument/invalidjson.json [new file with mode: 0644]
tests/auto/qjsondocument/qjsondocument.json [new file with mode: 0644]
tests/auto/qjsondocument/tst_qjsondocument.cpp [new file with mode: 0644]
translations/qt.pot
translations/qt_tools.pot

index 3300fc9..ede9a49 100644 (file)
@@ -215,6 +215,15 @@ set_package_properties(ZSTD PROPERTIES
     TYPE REQUIRED
 )
 
+# v2.0+ required for json_loads() with three arguments
+find_package(Jansson 2.0)
+set_package_properties(Jansson PROPERTIES
+    PURPOSE "Required for JSON support"
+    DESCRIPTION "C library for encoding, decoding and manipulating JSON data"
+    URL "https://github.com/akheron/jansson"
+    TYPE REQUIRED
+)
+
 # v0.9.8+ required for SHA-224...SHA-512 support
 find_package(OpenSSL 0.9.8)
 set_package_properties(OpenSSL PROPERTIES
@@ -742,7 +751,6 @@ katie_generate_obsolete(QItemEditorCreatorBase QtGui qitemeditorfactory.h)
 katie_generate_obsolete(QItemEditorCreator QtGui qitemeditorfactory.h)
 katie_generate_obsolete(QItemSelection QtGui qitemselectionmodel.h)
 katie_generate_obsolete(QItemSelectionRange QtGui qitemselectionmodel.h)
-katie_generate_obsolete(QJsonParseError QtCore qjsondocument.h)
 katie_generate_obsolete(QKeyEvent QtGui qevent.h)
 katie_generate_obsolete(QLatin1Char QtCore qchar.h)
 katie_generate_obsolete(QLatin1String QtCore qstring.h)
index ef8e082..cf59016 100644 (file)
@@ -12,7 +12,7 @@ build_script:
     sudo apt-get install -qq libpcre3-dev libssl-dev zlib1g-dev libzstd-dev libc6-dev libpng-dev \
         libjpeg-dev libtiff-dev libcups2-dev libfreetype6-dev libfontconfig1-dev libdbus-1-dev \
         libicu-dev unixodbc-dev libpq-dev libmariadbclient-dev libmariadbd-dev liblz4-dev \
-        libsqlite3-dev xorg-dev dbus-x11
+        libsqlite3-dev xorg-dev dbus-x11 libjansson-dev
 
     cmake . -Wno-dev -DKATIE_TESTS=ON -DKATIE_BENCHMARKS=ON -DKATIE_UTILS=ON -DKATIE_PCH=ON -DCMAKE_UNITY_BUILD=ON
 
diff --git a/cmake/modules/FindJansson.cmake b/cmake/modules/FindJansson.cmake
new file mode 100644 (file)
index 0000000..da0555c
--- /dev/null
@@ -0,0 +1,32 @@
+# - Try to find Jansson
+# Once done this will define
+#
+#  JANSSON_FOUND - system has Jansson
+#  JANSSON_INCLUDES - the Jansson include directory
+#  JANSSON_LIBRARIES - the libraries needed to use Jansson
+#
+# Copyright (C) 2021, Ivailo Monev, <xakepa10@gmail.com>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+
+include(FindPkgConfig)
+include(FindPackageHandleStandardArgs)
+
+pkg_check_modules(PC_JANSSON QUIET jansson)
+
+find_path(JANSSON_INCLUDES
+    NAMES jansson.h
+    HINTS $ENV{JANSSONDIR}/include ${PC_JANSSON_INCLUDEDIR}
+)
+
+find_library(JANSSON_LIBRARIES
+    NAMES jansson
+    HINTS $ENV{JANSSONDIR}/lib ${PC_JANSSON_LIBDIR}
+)
+
+find_package_handle_standard_args(Jansson
+    VERSION_VAR PC_JANSSON_VERSION
+    REQUIRED_VARS JANSSON_LIBRARIES JANSSON_INCLUDES
+)
+
+mark_as_advanced(JANSSON_INCLUDES JANSSON_LIBRARIES)
index 33d2b96..2b70b8f 100644 (file)
@@ -10,8 +10,8 @@ pkgdesc='C++ toolkit derived from the Qt 4.8 framework'
 arch=('i486' 'i686' 'pentium4' 'x86_64' 'arm')
 url='https://github.com/fluxer/katie'
 license=('LGPL' 'BSD')
-depends=('libsm' 'libxcursor' 'libxinerama' 'icu' 'libcups' 'libxrandr' 'sqlite' 'fontconfig'
-        'xdg-utils')
+depends=('libsm' 'libxcursor' 'libxinerama' 'icu' 'libcups' 'libxrandr' 'sqlite'
+        'fontconfig' 'xdg-utils' 'jansson')
 makedepends=('cmake' 'git' 'postgresql' 'mariadb-libs' 'unixodbc' 'unifdef')
 optdepends=('postgresql-libs: PostgreSQL driver'
         'mariadb-libs: MariaDB driver'
index 3672e67..9e852ca 100644 (file)
@@ -6,11 +6,12 @@ Vcs-Git: git://github.com/fluxer/katie.git
 Vcs-browser: https://github.com/fluxer/katie
 Standards-Version: 4.10.0
 Build-Depends: debhelper (>= 9~), libssl-dev, zlib1g-dev, libzstd-dev,
- libc6-dev, libpng-dev, libjpeg-dev, libtiff5-dev, libcups2-dev,
- libfreetype6-dev, libfontconfig1-dev, libpcre3-dev, libdbus-1-dev,
- unixodbc-dev, libicu-dev, libsqlite3-dev, cmake, git, xserver-xorg-dev,
- libxinerama-dev, libxrandr-dev, libxrender-dev, libxcursor-dev, libsm-dev,
- libpq-dev, libmariadbclient-dev, libmariadbd-dev, unifdef | dpkg
+ libc6-dev, libjansson-dev, libpng-dev, libjpeg-dev, libtiff5-dev,
+ libcups2-dev, libfreetype6-dev, libfontconfig1-dev, libpcre3-dev,
+ libdbus-1-dev, unixodbc-dev, libicu-dev, libsqlite3-dev, cmake, git,
+ xserver-xorg-dev, libxinerama-dev, libxrandr-dev, libxrender-dev,
+ libxcursor-dev, libsm-dev, libpq-dev, libmariadbclient-dev, libmariadbd-dev,
+ unifdef | dpkg
 
 Package: katie-runtime
 Architecture: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x hurd-i386
index 9e1dd25..d2286eb 100644 (file)
@@ -7,7 +7,7 @@ Summary: C++ toolkit derived from the Qt 4.8 framework
 License: BSD and LGPLv2+
 URL: https://github.com/fluxer/katie
 
-BuildRequires: gcc-c++ cmake libicu-devel libzstd-devel zlib-devel libsq3-devel libpng-devel freetype-devel pcre-devel openssl-devel libX11-devel libXinerama-devel libXrandr-devel libXrender-devel libXfixes-devel libXcursor-devel libSM-devel libICE-devel dbus-devel libtiff-devel libjpeg-turbo-devel fontconfig-devel cups-devel libiodbc-devel libpq-devel mariadb-embedded-devel unifdef
+BuildRequires: gcc-c++ cmake libicu-devel libzstd-devel jansson-devel zlib-devel libsq3-devel libpng-devel freetype-devel pcre-devel openssl-devel libX11-devel libXinerama-devel libXrandr-devel libXrender-devel libXfixes-devel libXcursor-devel libSM-devel libICE-devel dbus-devel libtiff-devel libjpeg-turbo-devel fontconfig-devel cups-devel libiodbc-devel libpq-devel mariadb-embedded-devel unifdef
 Requires: xdg-utils
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
index 7f9b0da..1fb4b86 100644 (file)
@@ -19,10 +19,12 @@ USES = compiler:c++11-lang pkgconfig cmake ssl xorg sqlite:3 desktop-file-utils
 USE_XORG = xinerama xrandr xrender xfixes xcursor xext sm ice
 USE_LDCONFIG = yes
 RUN_DEPENDS = xdg-open:devel/xdg-utils
-LIB_DEPENDS = libzstd.so:archivers/zstd libicuuc.so:devel/icu libicui18n.so:devel/icu \
-       libpcre.so:devel/pcre libpng.so:graphics/png libjpeg.so:graphics/jpeg-turbo \
-       libtiff.so:graphics/tiff libfreetype.so:print/freetype2 \
-       libfontconfig.so:x11-fonts/fontconfig libdbus-1.so:devel/dbus libcups.so:print/cups \
+LIB_DEPENDS = libzstd.so:archivers/zstd libicuuc.so:devel/icu \
+       libicui18n.so:devel/icu libjansson.so:devel/jansson \
+       libpcre.so:devel/pcre libpng.so:graphics/png \
+       libjpeg.so:graphics/jpeg-turbo libtiff.so:graphics/tiff \
+       libfreetype.so:print/freetype2 libfontconfig.so:x11-fonts/fontconfig \
+       libdbus-1.so:devel/dbus libcups.so:print/cups \
        libiodbc.so:databases/libiodbc
 CMAKE_ARGS = -DKATIE_TOOLS_SUFFIX="-katie"
 
index a3bcf79..2c98d54 100644 (file)
@@ -71,11 +71,7 @@ include/katie/QtCore/QHashNode
 include/katie/QtCore/QIODevice
 include/katie/QtCore/QIncompatibleFlag
 include/katie/QtCore/QInternal
-include/katie/QtCore/QJsonArray
 include/katie/QtCore/QJsonDocument
-include/katie/QtCore/QJsonObject
-include/katie/QtCore/QJsonParseError
-include/katie/QtCore/QJsonValue
 include/katie/QtCore/QLatin1Char
 include/katie/QtCore/QLatin1String
 include/katie/QtCore/QLibrary
@@ -256,10 +252,7 @@ include/katie/QtCore/qglobal.h
 include/katie/QtCore/qhash.h
 include/katie/QtCore/qiodevice.h
 include/katie/QtCore/qiterator.h
-include/katie/QtCore/qjsonarray.h
 include/katie/QtCore/qjsondocument.h
-include/katie/QtCore/qjsonobject.h
-include/katie/QtCore/qjsonvalue.h
 include/katie/QtCore/qlibrary.h
 include/katie/QtCore/qlibraryinfo.h
 include/katie/QtCore/qline.h
index d57b50f..9be4151 100644 (file)
@@ -26,6 +26,7 @@ DEPENDS = xdg-utils-[0-9]*:../../misc/xdg-utils
 
 .include "../../sysutils/desktop-file-utils/desktopdb.mk"
 .include "../../archivers/zstd/buildlink3.mk"
+.include "../../textproc/jansson/buildlink3.mk"
 .include "../../textproc/icu/buildlink3.mk"
 .include "../../devel/pcre/buildlink3.mk"
 .include "../../devel/zlib/buildlink3.mk"
index 05624ec..6c2962a 100644 (file)
@@ -74,11 +74,7 @@ include/katie/QtCore/QHashNode
 include/katie/QtCore/QIODevice
 include/katie/QtCore/QIncompatibleFlag
 include/katie/QtCore/QInternal
-include/katie/QtCore/QJsonArray
 include/katie/QtCore/QJsonDocument
-include/katie/QtCore/QJsonObject
-include/katie/QtCore/QJsonParseError
-include/katie/QtCore/QJsonValue
 include/katie/QtCore/QLatin1Char
 include/katie/QtCore/QLatin1String
 include/katie/QtCore/QLibrary
@@ -259,10 +255,7 @@ include/katie/QtCore/qglobal.h
 include/katie/QtCore/qhash.h
 include/katie/QtCore/qiodevice.h
 include/katie/QtCore/qiterator.h
-include/katie/QtCore/qjsonarray.h
 include/katie/QtCore/qjsondocument.h
-include/katie/QtCore/qjsonobject.h
-include/katie/QtCore/qjsonvalue.h
 include/katie/QtCore/qlibrary.h
 include/katie/QtCore/qlibraryinfo.h
 include/katie/QtCore/qline.h
index 74b3fe7..6a151d9 100644 (file)
@@ -21,9 +21,9 @@ COMPILER = base-clang ports-gcc
 MODULES = devel/cmake
 BUILD_DEPENDS = devel/gettext,-tools
 RUN_DEPENDS = devel/desktop-file-utils devel/xdg-utils
-LIB_DEPENDS = archivers/zstd textproc/icu4c devel/pcre graphics/png \
-       graphics/jpeg graphics/tiff x11/dbus print/cups,-libs databases/iodbc \
-       databases/sqlite3 devel/gettext,-runtime
+LIB_DEPENDS = archivers/zstd textproc/icu4c devel/jansson devel/pcre \
+       graphics/png graphics/jpeg graphics/tiff x11/dbus print/cups,-libs \
+       databases/iodbc databases/sqlite3 devel/gettext,-runtime
 WANTLIB = ${COMPILER_LIBCXX} ICE SM X11 Xcursor Xext Xfixes Xinerama Xrandr \
        Xrender fontconfig freetype zstd icui18n icuuc pcre png jpeg tiff \
        dbus-1 cups iodbc sqlite3 intl ssl z c crypto m
index 3dfa2c7..59d303a 100644 (file)
@@ -74,11 +74,7 @@ include/katie/QtCore/QHashNode
 include/katie/QtCore/QIODevice
 include/katie/QtCore/QIncompatibleFlag
 include/katie/QtCore/QInternal
-include/katie/QtCore/QJsonArray
 include/katie/QtCore/QJsonDocument
-include/katie/QtCore/QJsonObject
-include/katie/QtCore/QJsonParseError
-include/katie/QtCore/QJsonValue
 include/katie/QtCore/QLatin1Char
 include/katie/QtCore/QLatin1String
 include/katie/QtCore/QLibrary
@@ -259,10 +255,7 @@ include/katie/QtCore/qglobal.h
 include/katie/QtCore/qhash.h
 include/katie/QtCore/qiodevice.h
 include/katie/QtCore/qiterator.h
-include/katie/QtCore/qjsonarray.h
 include/katie/QtCore/qjsondocument.h
-include/katie/QtCore/qjsonobject.h
-include/katie/QtCore/qjsonvalue.h
 include/katie/QtCore/qlibrary.h
 include/katie/QtCore/qlibraryinfo.h
 include/katie/QtCore/qline.h
index db7e828..642b38d 100755 (executable)
@@ -36,7 +36,6 @@ incmap = {
         'QHashNode': 'qhash.h',
         'QIncompatibleFlag': 'qglobal.h',
         'QInternal': 'qnamespace.h',
-        'QJsonParseError': 'qjsondocument.h',
         'QLatin1Char': 'qchar.h',
         'QLatin1String': 'qstring.h',
         'QLineF': 'qline.h',
index a88209d..86de772 100755 (executable)
@@ -362,11 +362,7 @@ classlist = [
     "QItemSelection",
     "QItemSelectionModel",
     "QItemSelectionRange",
-    "QJsonArray",
     "QJsonDocument",
-    "QJsonObject",
-    "QJsonParseError",
-    "QJsonValue",
     "QKeyEvent",
     "QKeySequence",
     "QLabel",
index e9e7402..defff6c 100644 (file)
@@ -3,6 +3,7 @@ set(EXTRA_CORE_LIBS
     ${ZLIB_LIBRARIES}
     ${ICU_LIBRARIES}
     ${ZSTD_LIBRARIES}
+    ${JANSSON_LIBRARIES}
     ${CMAKE_THREAD_LIBS_INIT}
     # libm should be present by default becaue this is C++
     m
@@ -101,10 +102,7 @@ set(CORE_PUBLIC_HEADERS
     QBasicTimer
     QThread
     QSocketNotifier
-    QJsonArray
     QJsonDocument
-    QJsonObject
-    QJsonValue
 )
 
 include_directories(
@@ -114,6 +112,7 @@ include_directories(
     ${ZLIB_INCLUDE_DIRS}
     ${ICU_INCLUDES}
     ${ZSTD_INCLUDES}
+    ${JANSSON_INCLUDES}
 )
 
 set(CORE_HEADERS
@@ -188,13 +187,6 @@ set(CORE_HEADERS
     ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemengine_p.h
     ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemmetadata_p.h
     ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemiterator_p.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonarray.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsondocument.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonobject.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonparser_p.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjson_p.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonvalue.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonwriter_p.h
     ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstracteventdispatcher.h
     ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstractitemmodel.h
     ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstractitemmodel_p.h
@@ -255,6 +247,7 @@ set(CORE_HEADERS
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qdatetime_p.h
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qeasingcurve.h
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qhash.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/tools/qjsondocument.h
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qline.h
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlinkedlist.h
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlist.h
@@ -339,13 +332,6 @@ set(CORE_SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/io/qprocess_unix.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/io/qfilesystemiterator_unix.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/io/qstandardpaths_unix.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonarray.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjson.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsondocument.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonobject.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonparser.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonvalue.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/json/qjsonwriter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstracteventdispatcher.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qabstractitemmodel.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/kernel/qbasictimer.cpp
@@ -390,6 +376,7 @@ set(CORE_SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qeasingcurve.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qelapsedtimer.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qhash.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/tools/qjsondocument.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qline.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlinkedlist.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/tools/qlist.cpp
index 51cdb60..7582952 100644 (file)
@@ -23,7 +23,6 @@
 #include "qplatformdefs.h"
 #include "qsettings.h"
 #include "qjsondocument.h"
-#include "qjsonobject.h"
 #include "qstandardpaths.h"
 #include "qmutex.h"
 #include "qcoreapplication.h"
@@ -63,14 +62,13 @@ static bool json_settings_read(QIODevice &device, QSettings::SettingsMap &map)
         return false;
     }
 
-    QJsonParseError error;
-    QJsonDocument jsondoc = QJsonDocument::fromJson(data, &error);
+    QJsonDocument jsondoc = QJsonDocument::fromJson(data);
     if (Q_UNLIKELY(jsondoc.isNull())) {
-        qWarning("json_settings_read: %s", error.errorString().toUtf8().constData());
+        qWarning("json_settings_read: %s", jsondoc.errorString().toUtf8().constData());
         return false;
     }
 
-    map = jsondoc.object().toVariantMap();
+    map = jsondoc.toVariant().toMap();
 
     // qDebug() << "json_settings_read" << jsondoc.toJson();
     return true;
@@ -78,7 +76,7 @@ static bool json_settings_read(QIODevice &device, QSettings::SettingsMap &map)
 
 static bool json_settings_write(QIODevice &device, const QSettings::SettingsMap &map)
 {
-    QJsonDocument jsondoc = QJsonDocument(QJsonObject::fromVariantMap(map));
+    QJsonDocument jsondoc = QJsonDocument::fromVariant(map);
     QByteArray jsondata = jsondoc.toJson();
     if (Q_UNLIKELY(jsondoc.isNull() || jsondata.isNull())) {
         return false;
diff --git a/src/core/json/qjson.cpp b/src/core/json/qjson.cpp
deleted file mode 100644 (file)
index 292131d..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qjson_p.h"
-#include "qalgorithms.h"
-
-QT_BEGIN_NAMESPACE
-
-namespace QJsonPrivate {
-
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
-#define Q_TO_LITTLE_ENDIAN(x) (x)
-#else
-#define Q_TO_LITTLE_ENDIAN(x) ( ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x & 0xff000000) >> 24) )
-#endif
-
-static const Base emptyArray = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } };
-static const Base emptyObject = { { Q_TO_LITTLE_ENDIAN(sizeof(Base)) }, { 0 }, { 0 } };
-
-
-void Data::compact()
-{
-   Q_ASSERT(sizeof(Value) == sizeof(offset));
-
-   if (!compactionCounter) {
-      return;
-   }
-
-   Base *base = header->root();
-   int reserve = 0;
-   if (base->is_object) {
-      Object *o = static_cast<Object *>(base);
-      for (int i = 0; i < (int)o->length; ++i) {
-         reserve += o->entryAt(i)->usedStorage(o);
-      }
-   } else {
-      Array *a = static_cast<Array *>(base);
-      for (int i = 0; i < (int)a->length; ++i) {
-         reserve += (*a)[i].usedStorage(a);
-      }
-   }
-
-   int size = sizeof(Base) + reserve + base->length * sizeof(offset);
-   int alloc = sizeof(Header) + size;
-   Header *h = (Header *) malloc(alloc);
-   h->tag = QJsonDocument::BinaryFormatTag;
-   h->version = 1;
-   Base *b = h->root();
-   b->size = size;
-   b->is_object = header->root()->is_object;
-   b->length = base->length;
-   b->tableOffset = reserve + sizeof(Array);
-
-   int offset = sizeof(Base);
-   if (b->is_object) {
-      Object *o = static_cast<Object *>(base);
-      Object *no = static_cast<Object *>(b);
-
-      for (int i = 0; i < (int)o->length; ++i) {
-         no->table()[i] = offset;
-
-         const Entry *e = o->entryAt(i);
-         Entry *ne = no->entryAt(i);
-         int s = e->size();
-         memcpy(ne, e, s);
-         offset += s;
-         int dataSize = e->value.usedStorage(o);
-         if (dataSize) {
-            memcpy((char *)no + offset, e->value.data(o), dataSize);
-            ne->value.value = offset;
-            offset += dataSize;
-         }
-      }
-   } else {
-      Array *a = static_cast<Array *>(base);
-      Array *na = static_cast<Array *>(b);
-
-      for (int i = 0; i < (int)a->length; ++i) {
-         const Value &v = (*a)[i];
-         Value &nv = (*na)[i];
-         nv = v;
-         int dataSize = v.usedStorage(a);
-         if (dataSize) {
-            memcpy((char *)na + offset, v.data(a), dataSize);
-            nv.value = offset;
-            offset += dataSize;
-         }
-      }
-   }
-   Q_ASSERT(offset == (int)b->tableOffset);
-
-   free(header);
-   header = h;
-   this->alloc = alloc;
-   compactionCounter = 0;
-}
-
-bool Data::valid() const
-{
-   if (header->tag != QJsonDocument::BinaryFormatTag || header->version != 1u) {
-      return false;
-   }
-
-   bool res = false;
-   if (header->root()->is_object) {
-      res = static_cast<Object *>(header->root())->isValid();
-   } else {
-      res = static_cast<Array *>(header->root())->isValid();
-   }
-
-   return res;
-}
-
-
-int Base::reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace)
-{
-   Q_ASSERT(posInTable >= 0 && posInTable <= (int)length);
-   if (size + dataSize >= Value::MaxSize) {
-      qWarning("QJson: Document too large to store in data structure %d %d %d", (uint)size, dataSize, Value::MaxSize);
-      return 0;
-   }
-
-   offset off = tableOffset;
-   // move table to new position
-   if (replace) {
-      memmove((char *)(table()) + dataSize, table(), length * sizeof(offset));
-   } else {
-      memmove((char *)(table() + posInTable + numItems) + dataSize, table() + posInTable,
-              (length - posInTable)*sizeof(offset));
-      memmove((char *)(table()) + dataSize, table(), posInTable * sizeof(offset));
-   }
-   tableOffset += dataSize;
-   for (int i = 0; i < (int)numItems; ++i) {
-      table()[posInTable + i] = off;
-   }
-   size += dataSize;
-   if (!replace) {
-      length += numItems;
-      size += numItems * sizeof(offset);
-   }
-   return off;
-}
-
-void Base::removeItems(int pos, int numItems)
-{
-   Q_ASSERT(pos >= 0 && pos <= (int)length);
-   if (pos + numItems < (int)length) {
-      memmove(table() + pos, table() + pos + numItems, (length - pos - numItems)*sizeof(offset));
-   }
-   length -= numItems;
-}
-
-int Object::indexOf(const QString &key, bool *exists)
-{
-   int min = 0;
-   int n = length;
-   while (n > 0) {
-      int half = n >> 1;
-      int middle = min + half;
-      if (*entryAt(middle) >= key) {
-         n = half;
-      } else {
-         min = middle + 1;
-         n -= half + 1;
-      }
-   }
-   if (min < (int)length && *entryAt(min) == key) {
-      *exists = true;
-      return min;
-   }
-   *exists = false;
-   return min;
-}
-
-bool Object::isValid() const
-{
-   if (tableOffset + length * sizeof(offset) > size) {
-      return false;
-   }
-
-   for (uint i = 0; i < length; ++i) {
-      offset entryOffset = table()[i];
-      if (entryOffset + sizeof(Entry) >= tableOffset) {
-         return false;
-      }
-      Entry *e = entryAt(i);
-      int s = e->size();
-      if (table()[i] + s > tableOffset) {
-         return false;
-      }
-      if (!e->value.isValid(this)) {
-         return false;
-      }
-   }
-   return true;
-}
-
-
-
-bool Array::isValid() const
-{
-   if (tableOffset + length * sizeof(offset) > size) {
-      return false;
-   }
-
-   for (uint i = 0; i < length; ++i) {
-      if (!at(i).isValid(this)) {
-         return false;
-      }
-   }
-   return true;
-}
-
-
-bool Entry::operator ==(const QString &key) const
-{
-   if (value.latinKey) {
-      return (shallowLatin1Key() == key);
-   } else {
-      return (shallowKey() == key);
-   }
-}
-
-bool Entry::operator ==(const Entry &other) const
-{
-   if (value.latinKey) {
-      if (other.value.latinKey) {
-         return shallowLatin1Key() == other.shallowLatin1Key();
-      }
-      return shallowLatin1Key() == other.shallowKey();
-   } else if (other.value.latinKey) {
-      return shallowKey() == other.shallowLatin1Key();
-   }
-   return shallowKey() == other.shallowKey();
-}
-
-bool Entry::operator >=(const Entry &other) const
-{
-   if (value.latinKey) {
-      if (other.value.latinKey) {
-         return shallowLatin1Key() >= other.shallowLatin1Key();
-      }
-      return shallowLatin1Key() >= other.shallowKey();
-   } else if (other.value.latinKey) {
-      return shallowKey() >= other.shallowLatin1Key();
-   }
-   return shallowKey() >= other.shallowKey();
-}
-
-
-int Value::usedStorage(const Base *b) const
-{
-   int s = 0;
-   switch (type) {
-      case QJsonValue::Double:
-         if (latinOrIntValue) {
-            break;
-         }
-         s = sizeof(double);
-         break;
-      case QJsonValue::String: {
-         char *d = data(b);
-         if (latinOrIntValue) {
-            s = sizeof(ushort) + qFromLittleEndian(*(ushort *)d);
-         } else {
-            s = sizeof(int) + sizeof(ushort) * qFromLittleEndian(*(int *)d);
-         }
-         break;
-      }
-      case QJsonValue::Array:
-      case QJsonValue::Object:
-         s = base(b)->size;
-         break;
-      case QJsonValue::Null:
-      case QJsonValue::Bool:
-      default:
-         break;
-   }
-   return alignedSize(s);
-}
-
-bool Value::isValid(const Base *b) const
-{
-   int offset = 0;
-   switch (type) {
-      case QJsonValue::Double:
-         if (latinOrIntValue) {
-            break;
-         }
-      // fall through
-      case QJsonValue::String:
-      case QJsonValue::Array:
-      case QJsonValue::Object:
-         offset = value;
-         break;
-      case QJsonValue::Null:
-      case QJsonValue::Bool:
-      default:
-         break;
-   }
-
-   if (!offset) {
-      return true;
-   }
-   if (offset + sizeof(uint) > b->tableOffset) {
-      return false;
-   }
-
-   int s = usedStorage(b);
-   if (!s) {
-      return true;
-   }
-   if (s < 0 || offset + s > (int)b->tableOffset) {
-      return false;
-   }
-   if (type == QJsonValue::Array) {
-      return static_cast<Array *>(base(b))->isValid();
-   }
-   if (type == QJsonValue::Object) {
-      return static_cast<Object *>(base(b))->isValid();
-   }
-   return true;
-}
-
-/*!
-    \internal
- */
-int Value::requiredStorage(QJsonValue &v, bool *compressed)
-{
-   *compressed = false;
-   switch (v.t) {
-      case QJsonValue::Double:
-         if (QJsonPrivate::compressedNumber(v.dbl) != INT_MAX) {
-            *compressed = true;
-            return 0;
-         }
-         return sizeof(double);
-      case QJsonValue::String: {
-         QString s = v.toString();
-         *compressed = QJsonPrivate::useCompressed(s);
-         return QJsonPrivate::qStringSize(s, *compressed);
-      }
-      case QJsonValue::Array:
-      case QJsonValue::Object:
-         if (v.d && v.d->compactionCounter) {
-            v.detach();
-            v.d->compact();
-            v.base = static_cast<QJsonPrivate::Base *>(v.d->header->root());
-         }
-         return v.base ? v.base->size : sizeof(QJsonPrivate::Base);
-      case QJsonValue::Undefined:
-      case QJsonValue::Null:
-      case QJsonValue::Bool:
-         break;
-   }
-   return 0;
-}
-
-/*!
-    \internal
- */
-uint Value::valueToStore(const QJsonValue &v, uint offset)
-{
-   switch (v.t) {
-      case QJsonValue::Undefined:
-      case QJsonValue::Null:
-         break;
-      case QJsonValue::Bool:
-         return v.b;
-      case QJsonValue::Double: {
-         int c = QJsonPrivate::compressedNumber(v.dbl);
-         if (c != INT_MAX) {
-            return c;
-         }
-      }
-      // fall through
-      case QJsonValue::String:
-      case QJsonValue::Array:
-      case QJsonValue::Object:
-         return offset;
-   }
-   return 0;
-}
-
-/*!
-    \internal
- */
-void Value::copyData(const QJsonValue &v, char *dest, bool compressed)
-{
-   switch (v.t) {
-      case QJsonValue::Double:
-         if (!compressed) {
-            qToLittleEndian(v.dbl, (uchar *)dest);
-         }
-         break;
-      case QJsonValue::String: {
-         QString str = v.toString();
-         QJsonPrivate::copyString(dest, str, compressed);
-         break;
-      }
-      case QJsonValue::Array:
-      case QJsonValue::Object: {
-         const QJsonPrivate::Base *b = v.base;
-         if (!b) {
-            b = (v.t == QJsonValue::Array ? &emptyArray : &emptyObject);
-         }
-         memcpy(dest, b, b->size);
-         break;
-      }
-      default:
-         break;
-   }
-}
-
-} // namespace QJsonPrivate
-
-QT_END_NAMESPACE
diff --git a/src/core/json/qjson_p.h b/src/core/json/qjson_p.h
deleted file mode 100644 (file)
index 1cc5c27..0000000
+++ /dev/null
@@ -1,849 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSON_P_H
-#define QJSON_P_H
-
-#include "qjsonobject.h"
-#include "qjsonvalue.h"
-#include "qjsondocument.h"
-#include "qjsonarray.h"
-#include "qatomic.h"
-#include "qstring.h"
-#include "qendian.h"
-#include "qnumeric.h"
-#include <limits.h>
-#include <limits>
-
-QT_BEGIN_NAMESPACE
-
-/*
-  This defines a binary data structure for Json data. The data structure is optimised for fast reading
-  and minimum allocations. The whole data structure can be mmap'ed and used directly.
-
-  In most cases the binary structure is not as space efficient as a utf8 encoded text representation, but
-  much faster to access.
-
-  The size requirements are:
-
-  String:
-    Latin1 data: 2 bytes header + string.length()
-    Full Unicode: 4 bytes header + 2*(string.length())
-
-  Values: 4 bytes + size of data (size can be 0 for some data)
-    bool: 0 bytes
-    double: 8 bytes (0 if integer with less than 27bits)
-    string: see above
-    array: size of array
-    object: size of object
-  Array: 12 bytes + 4*length + size of Value data
-  Object: 12 bytes + 8*length + size of Key Strings + size of Value data
-
-  For an example such as
-
-    {                                           // object: 12 + 5*8                   = 52
-         "firstName": "John",                   // key 12, value 8                    = 20
-         "lastName" : "Smith",                  // key 12, value 8                    = 20
-         "age"      : 25,                       // key 8, value 0                     = 8
-         "address"  :                           // key 12, object below               = 140
-         {                                      // object: 12 + 4*8
-             "streetAddress": "21 2nd Street",  // key 16, value 16
-             "city"         : "New York",       // key 8, value 12
-             "state"        : "NY",             // key 8, value 4
-             "postalCode"   : "10021"           // key 12, value 8
-         },                                     // object total: 128
-         "phoneNumber":                         // key: 16, value array below         = 172
-         [                                      // array: 12 + 2*4 + values below: 156
-             {                                  // object 12 + 2*8
-               "type"  : "home",                // key 8, value 8
-               "number": "212 555-1234"         // key 8, value 16
-             },                                 // object total: 68
-             {                                  // object 12 + 2*8
-               "type"  : "fax",                 // key 8, value 8
-               "number": "646 555-4567"         // key 8, value 16
-             }                                  // object total: 68
-         ]                                      // array total: 156
-    }                                           // great total:                         412 bytes
-
-    The uncompressed text file used roughly 500 bytes, so in this case we end up using about
-    the same space as the text representation.
-
-    Other measurements have shown a slightly bigger binary size than a compact text
-    representation where all possible whitespace was stripped out.
-*/
-namespace QJsonPrivate {
-
-class Array;
-class Object;
-class Value;
-class Entry;
-
-template<typename T>
-class q_littleendian
-{
- public:
-   T val;
-
-   q_littleendian &operator =(T i) {
-      val = qToLittleEndian(i);
-      return *this;
-   }
-   operator T() const {
-      return qFromLittleEndian(val);
-   }
-
-   bool operator ==(T i) {
-      return qFromLittleEndian(val) == i;
-   }
-   bool operator !=(T i) {
-      return qFromLittleEndian(val) != i;
-   }
-   bool operator ==(q_littleendian<T> i) {
-      return val == i.val;
-   }
-   bool operator !=(q_littleendian<T> i) {
-      return val != i.val;
-   }
-   bool operator <(T i) {
-      return qFromLittleEndian(val) < i;
-   }
-   bool operator >(T i) {
-      return qFromLittleEndian(val) > i;
-   }
-   bool operator <=(T i) {
-      return qFromLittleEndian(val) <= i;
-   }
-   bool operator >=(T i) {
-      return qFromLittleEndian(val) >= i;
-   }
-   q_littleendian &operator +=(T i) {
-      val = qToLittleEndian(qFromLittleEndian(val) + i);
-      return *this;
-   }
-};
-
-typedef q_littleendian<short> qle_short;
-typedef q_littleendian<unsigned short> qle_ushort;
-typedef q_littleendian<int> qle_int;
-typedef q_littleendian<unsigned int> qle_uint;
-
-template<int pos, int width>
-class qle_bitfield
-{
- public:
-   uint val;
-
-   enum {
-      mask = ((1u << width) - 1) << pos
-   };
-
-   void operator =(uint t) {
-      uint i = qFromLittleEndian(val);
-      i &= ~mask;
-      i |= t << pos;
-      val = qToLittleEndian(i);
-   }
-   operator uint() const {
-      uint t = qFromLittleEndian(val);
-      t &= mask;
-      t >>= pos;
-      return t;
-   }
-   bool operator !() const {
-      return !operator uint();
-   }
-
-   bool operator ==(uint t) {
-      return uint(*this) == t;
-   }
-   bool operator !=(uint t) {
-      return uint(*this) != t;
-   }
-   bool operator <(uint t) {
-      return uint(*this) < t;
-   }
-   bool operator >(uint t) {
-      return uint(*this) > t;
-   }
-   bool operator <=(uint t) {
-      return uint(*this) <= t;
-   }
-   bool operator >=(uint t) {
-      return uint(*this) >= t;
-   }
-   qle_bitfield &operator +=(uint i) {
-      *this = (uint(*this) + i);
-      return *this;
-   }
-   qle_bitfield &operator -=(uint i) {
-      *this = (uint(*this) - i);
-      return *this;
-   }
-};
-
-template<int pos, int width>
-class qle_signedbitfield
-{
- public:
-   uint val;
-
-   enum {
-      mask = ((1u << width) - 1) << pos
-   };
-
-   void operator =(int t) {
-      uint i = qFromLittleEndian(val);
-      i &= ~mask;
-      i |= t << pos;
-      val = qToLittleEndian(i);
-   }
-   operator int() const {
-      uint i = qFromLittleEndian(val);
-      i <<= 32 - width - pos;
-      int t = (int) i;
-      t >>= pos;
-      return t;
-   }
-   bool operator !() const {
-      return !operator int();
-   }
-
-   bool operator ==(int t) {
-      return int(*this) == t;
-   }
-   bool operator !=(int t) {
-      return int(*this) != t;
-   }
-   bool operator <(int t) {
-      return int(*this) < t;
-   }
-   bool operator >(int t) {
-      return int(*this) > t;
-   }
-   bool operator <=(int t) {
-      return int(*this) <= t;
-   }
-   bool operator >=(int t) {
-      return int(*this) >= t;
-   }
-   qle_signedbitfield &operator +=(int i) {
-      *this = (int(*this) + i);
-      return *this;
-   }
-   qle_signedbitfield &operator -=(int i) {
-      *this = (int(*this) - i);
-      return *this;
-   }
-};
-
-typedef qle_uint offset;
-
-// round the size up to the next 4 byte boundary
-inline int alignedSize(int size)
-{
-   return (size + 3) & ~3;
-}
-
-static inline bool useCompressed(const QString &s)
-{
-   if (s.length() >= 0x8000) {
-      return false;
-   }
-   const ushort *uc = (const ushort *)s.constData();
-   const ushort *e = uc + s.length();
-   while (uc < e) {
-      if (*uc > 0xff) {
-         return false;
-      }
-      ++uc;
-   }
-   return true;
-}
-
-static inline int qStringSize(const QString &string, bool compress)
-{
-   int l = 2 + string.length();
-   if (!compress) {
-      l *= 2;
-   }
-   return alignedSize(l);
-}
-
-// returns INT_MAX if it can't compress it into 28 bits
-static inline int compressedNumber(double d)
-{
-   // this relies on details of how ieee floats are represented
-   const int exponent_off = 52;
-   const quint64 fraction_mask = 0x000fffffffffffffull;
-   const quint64 exponent_mask = 0x7ff0000000000000ull;
-
-   quint64 val;
-   memcpy (&val, &d, sizeof(double));
-   int exp = (int)((val & exponent_mask) >> exponent_off) - 1023;
-   if (exp < 0 || exp > 25) {
-      return INT_MAX;
-   }
-
-   quint64 non_int = val & (fraction_mask >> exp);
-   if (non_int) {
-      return INT_MAX;
-   }
-
-   bool neg = (val >> 63);
-   val &= fraction_mask;
-   val |= ((quint64)1 << 52);
-   int res = (int)(val >> (52 - exp));
-   return neg ? -res : res;
-}
-
-class Latin1String;
-
-class String
-{
- public:
-   String(const char *data) {
-      d = (Data *)data;
-   }
-
-   struct Data {
-      qle_int length;
-      qle_ushort utf16[1];
-   };
-
-   Data *d;
-
-   inline String &operator=(const QString &str) {
-      d->length = str.length();
-#if Q_BYTE_ORDER == Q_BIG_ENDIAN
-      const qle_ushort *uc = (const qle_ushort *)str.unicode();
-      for (int i = 0; i < str.length(); ++i) {
-         d->utf16[i] = uc[i];
-      }
-#else
-      memcpy(d->utf16, str.unicode(), str.length()*sizeof(ushort));
-#endif
-      if (str.length() & 1) {
-         d->utf16[str.length()] = 0;
-      }
-      return *this;
-   }
-
-   inline bool operator ==(const QString &str) const {
-      int slen = str.length();
-      int l = d->length;
-      if (slen != l) {
-         return false;
-      }
-      const ushort *s = (const ushort *)str.constData();
-      const qle_ushort *a = d->utf16;
-      const ushort *b = s;
-      while (l-- && *a == *b) {
-         a++, b++;
-      }
-      return (l == -1);
-   }
-   inline bool operator !=(const QString &str) const {
-      return !operator ==(str);
-   }
-   inline bool operator >=(const QString &str) const {
-      // ###
-      return toString() >= str;
-   }
-
-   inline bool operator<(const Latin1String &str) const;
-   inline bool operator>=(const Latin1String &str) const {
-      return !operator <(str);
-   }
-   inline bool operator ==(const Latin1String &str) const;
-
-   inline bool operator ==(const String &str) const {
-      if (d->length != str.d->length) {
-         return false;
-      }
-      return !memcmp(d->utf16, str.d->utf16, d->length * sizeof(ushort));
-   }
-   inline bool operator<(const String &other) const;
-   inline bool operator >=(const String &other) const {
-      return other < *this;
-   }
-
-   inline QString toString() const {
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
-      return QString((QChar *)d->utf16, d->length);
-#else
-      int l = d->length;
-      QString str(l, Qt::Uninitialized);
-      QChar *ch = str.data();
-      for (int i = 0; i < l; ++i) {
-         ch[i] = QChar(d->utf16[i]);
-      }
-      return str;
-#endif
-   }
-
-};
-
-class Latin1String
-{
- public:
-   Latin1String(const char *data) {
-      d = (Data *)data;
-   }
-
-   struct Data {
-      qle_short length;
-      char latin1[1];
-   };
-   Data *d;
-
-   inline Latin1String &operator=(const QString &str) {
-      d->length = str.length();
-      uchar *l = (uchar *)d->latin1;
-      const ushort *uc = (const ushort *)str.unicode();
-      for (int i = 0; i < str.length(); ++i) {
-         *l++ = uc[i];
-      }
-      while ((quintptr)l & 0x3) {
-         *l++ = 0;
-      }
-      return *this;
-   }
-
-   inline bool operator ==(const QString &str) const {
-      return QLatin1String(d->latin1) == str;
-   }
-   inline bool operator !=(const QString &str) const {
-      return !operator ==(str);
-   }
-   inline bool operator >=(const QString &str) const {
-      // ###
-      return toString() >= str;
-   }
-
-   inline bool operator ==(const Latin1String &str) const {
-      return d->length == str.d->length && !strcmp(d->latin1, str.d->latin1);
-   }
-   inline bool operator >=(const Latin1String &str) const {
-      int l = qMin(d->length, str.d->length);
-      int val = strncmp(d->latin1, str.d->latin1, l);
-      if (!val) {
-         val = d->length - str.d->length;
-      }
-      return val >= 0;
-   }
-
-   inline bool operator ==(const String &str) const {
-      return (str == *this);
-   }
-   inline bool operator >=(const String &str) const {
-      return (str < *this);
-   }
-
-   inline QString toString() const {
-      return QString::fromLatin1(d->latin1, d->length);
-   }
-};
-
-inline bool String::operator ==(const Latin1String &str) const
-{
-   if ((int)d->length != (int)str.d->length) {
-      return false;
-   }
-   const qle_ushort *uc = d->utf16;
-   const qle_ushort *e = uc + d->length;
-   const uchar *c = (uchar *)str.d->latin1;
-
-   while (uc < e) {
-      if (*uc != *c) {
-         return false;
-      }
-      ++uc;
-      ++c;
-   }
-   return true;
-}
-
-inline bool String::operator <(const String &other) const
-{
-   int alen = d->length;
-   int blen = other.d->length;
-   int l = qMin(alen, blen);
-   qle_ushort *a = d->utf16;
-   qle_ushort *b = other.d->utf16;
-
-   while (l-- && *a == *b) {
-      a++, b++;
-   }
-   if (l == -1) {
-      return (alen < blen);
-   }
-   return (ushort) * a - (ushort) * b;
-}
-
-inline bool String::operator<(const Latin1String &str) const
-{
-   const uchar *c = (uchar *) str.d->latin1;
-   if (!c || *c == 0) {
-      return false;
-   }
-
-   const qle_ushort *uc = d->utf16;
-   const qle_ushort *e = uc + qMin((int)d->length, (int)str.d->length);
-
-   while (uc < e) {
-      if (*uc != *c) {
-         break;
-      }
-      ++uc;
-      ++c;
-   }
-   return (uc == e ? (int)d->length < (int)str.d->length : (ushort) * uc < *c);
-
-}
-
-static inline void copyString(char *dest, const QString &str, bool compress)
-{
-   if (compress) {
-      Latin1String string(dest);
-      string = str;
-   } else {
-      String string(dest);
-      string = str;
-   }
-}
-
-
-/*
- Base is the base class for both Object and Array. Both classe work more or less the same way.
- The class starts with a header (defined by the struct below), then followed by data (the data for
- values in the Array case and Entry's (see below) for objects.
-
- After the data a table follows (tableOffset points to it) containing Value objects for Arrays, and
- offsets from the beginning of the object to Entry's in the case of Object.
-
- Entry's in the Object's table are lexicographically sorted by key in the table(). This allows the usage
- of a binary search over the keys in an Object.
- */
-class Base
-{
- public:
-   qle_uint size;
-   union {
-      uint _dummy;
-      qle_bitfield<0, 1> is_object;
-      qle_bitfield<1, 31> length;
-   };
-   offset tableOffset;
-   // content follows here
-
-   inline bool isObject() const {
-      return is_object;
-   }
-   inline bool isArray() const {
-      return !isObject();
-   }
-
-   inline offset *table() const {
-      return (offset *) (((char *) this) + tableOffset);
-   }
-
-   int reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace);
-   void removeItems(int pos, int numItems);
-};
-
-class Object : public Base
-{
- public:
-   Entry *entryAt(int i) const {
-      return reinterpret_cast<Entry *>(((char *)this) + table()[i]);
-   }
-   int indexOf(const QString &key, bool *exists);
-
-   bool isValid() const;
-};
-
-
-class Array : public Base
-{
- public:
-   inline Value at(int i) const;
-   inline Value &operator [](int i);
-
-   bool isValid() const;
-};
-
-
-class Value
-{
- public:
-   enum {
-      MaxSize = (1 << 27) - 1
-   };
-   union {
-      uint _dummy;
-      qle_bitfield<0, 3> type;
-      qle_bitfield<3, 1> latinOrIntValue;
-      qle_bitfield<4, 1> latinKey;
-      qle_bitfield<5, 27> value;
-      qle_signedbitfield<5, 27> int_value;
-   };
-
-   inline char *data(const Base *b) const {
-      return ((char *)b) + value;
-   }
-   int usedStorage(const Base *b) const;
-
-   bool toBoolean() const;
-   double toDouble(const Base *b) const;
-   QString toString(const Base *b) const;
-   String asString(const Base *b) const;
-   Latin1String asLatin1String(const Base *b) const;
-   Base *base(const Base *b) const;
-
-   bool isValid(const Base *b) const;
-
-   static int requiredStorage(QJsonValue &v, bool *compressed);
-   static uint valueToStore(const QJsonValue &v, uint offset);
-   static void copyData(const QJsonValue &v, char *dest, bool compressed);
-};
-
-inline Value Array::at(int i) const
-{
-   return *(Value *) (table() + i);
-}
-
-inline Value &Array::operator [](int i)
-{
-   return *(Value *) (table() + i);
-}
-
-
-
-class Entry
-{
- public:
-   Value value;
-   // key
-   // value data follows key
-
-   int size() const {
-      int s = sizeof(Entry);
-      if (value.latinKey) {
-         s += sizeof(ushort) + qFromLittleEndian(*(ushort *) ((const char *)this + sizeof(Entry)));
-      } else {
-         s += sizeof(uint) + qFromLittleEndian(*(int *) ((const char *)this + sizeof(Entry)));
-      }
-      return alignedSize(s);
-   }
-
-   int usedStorage(Base *b) const {
-      return size() + value.usedStorage(b);
-   }
-
-   String shallowKey() const {
-      Q_ASSERT(!value.latinKey);
-      return String((const char *)this + sizeof(Entry));
-   }
-   Latin1String shallowLatin1Key() const {
-      Q_ASSERT(value.latinKey);
-      return Latin1String((const char *)this + sizeof(Entry));
-   }
-   QString key() const {
-      if (value.latinKey) {
-         return shallowLatin1Key().toString();
-      }
-      return shallowKey().toString();
-   }
-
-   bool operator ==(const QString &key) const;
-   inline bool operator !=(const QString &key) const {
-      return !operator ==(key);
-   }
-   inline bool operator >=(const QString &key) const;
-
-   bool operator ==(const Entry &other) const;
-   bool operator >=(const Entry &other) const;
-};
-
-inline bool Entry::operator >=(const QString &key) const
-{
-   if (value.latinKey) {
-      return (shallowLatin1Key() >= key);
-   } else {
-      return (shallowKey() >= key);
-   }
-}
-
-inline bool operator <(const QString &key, const Entry &e)
-{
-   return e >= key;
-}
-
-
-class Header
-{
- public:
-   qle_uint tag; // 'qbjs'
-   qle_uint version; // 1
-   Base *root() {
-      return (Base *)(this + 1);
-   }
-};
-
-
-inline bool Value::toBoolean() const
-{
-   Q_ASSERT(type == QJsonValue::Bool);
-   return value != 0;
-}
-
-inline double Value::toDouble(const Base *b) const
-{
-   Q_ASSERT(type == QJsonValue::Double);
-   if (latinOrIntValue) {
-      return int_value;
-   }
-
-   quint64 i = qFromLittleEndian<quint64>((const uchar *)b + value);
-   double d;
-   memcpy(&d, &i, sizeof(double));
-   return d;
-}
-
-inline String Value::asString(const Base *b) const
-{
-   Q_ASSERT(type == QJsonValue::String && !latinOrIntValue);
-   return String(data(b));
-}
-
-inline Latin1String Value::asLatin1String(const Base *b) const
-{
-   Q_ASSERT(type == QJsonValue::String && latinOrIntValue);
-   return Latin1String(data(b));
-}
-
-inline QString Value::toString(const Base *b) const
-{
-   if (latinOrIntValue) {
-      return asLatin1String(b).toString();
-   } else {
-      return asString(b).toString();
-   }
-}
-
-inline Base *Value::base(const Base *b) const
-{
-   Q_ASSERT(type == QJsonValue::Array || type == QJsonValue::Object);
-   return reinterpret_cast<Base *>(data(b));
-}
-
-class Data
-{
- public:
-   enum Validation {
-      Unchecked,
-      Validated,
-      Invalid
-   };
-
-   QAtomicInt ref;
-   int alloc;
-   union {
-      char *rawData;
-      Header *header;
-   };
-   uint compactionCounter;
-   bool ownsData;
-
-   inline Data(char *raw, int a)
-      : alloc(a), rawData(raw), compactionCounter(0), ownsData(true) {
-   }
-   inline Data(int reserved, QJsonValue::Type valueType)
-      : rawData(0), compactionCounter(0), ownsData(true) {
-      Q_ASSERT(valueType == QJsonValue::Array || valueType == QJsonValue::Object);
-
-      alloc = sizeof(Header) + sizeof(Base) + reserved + sizeof(offset);
-      header = (Header *)malloc(alloc);
-      Q_CHECK_PTR(header);
-      header->tag = QJsonDocument::BinaryFormatTag;
-      header->version = 1;
-      Base *b = header->root();
-      b->size = sizeof(Base);
-      b->is_object = (valueType == QJsonValue::Object);
-      b->tableOffset = sizeof(Base);
-      b->length = 0;
-   }
-   inline ~Data() {
-      if (ownsData) {
-         free(rawData);
-      }
-   }
-
-   uint offsetOf(const void *ptr) const {
-      return (uint)(((char *)ptr - rawData));
-   }
-
-   QJsonObject toObject(Object *o) const {
-      return QJsonObject(const_cast<Data *>(this), o);
-   }
-
-   QJsonArray toArray(Array *a) const {
-      return QJsonArray(const_cast<Data *>(this), a);
-   }
-
-   Data *clone(Base *b, int reserve = 0) {
-      int size = sizeof(Header) + b->size;
-      if (b == header->root() && ref == 1 && alloc >= size + reserve) {
-         return this;
-      }
-
-      if (reserve) {
-         if (reserve < 128) {
-            reserve = 128;
-         }
-         size = qMax(size + reserve, size * 2);
-      }
-      char *raw = (char *)malloc(size);
-      Q_CHECK_PTR(raw);
-      memcpy(raw + sizeof(Header), b, b->size);
-      Header *h = (Header *)raw;
-      h->tag = QJsonDocument::BinaryFormatTag;
-      h->version = 1;
-      Data *d = new Data(raw, size);
-      d->compactionCounter = (b == header->root()) ? compactionCounter : 0;
-      return d;
-   }
-
-   void compact();
-   bool valid() const;
-
- private:
-   Q_DISABLE_COPY(Data)
-};
-
-}
-
-QT_END_NAMESPACE
-
-#endif // QJSON_P_H
diff --git a/src/core/json/qjsonarray.cpp b/src/core/json/qjsonarray.cpp
deleted file mode 100644 (file)
index cb01590..0000000
+++ /dev/null
@@ -1,1117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qjsonobject.h"
-#include "qjsonarray.h"
-#include "qjsonvalue.h"
-#include "qstringlist.h"
-#include "qvariant.h"
-#include "qdebug.h"
-#include "qjsonwriter_p.h"
-#include "qjson_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QJsonArray
-    \inmodule QtCore
-    \ingroup json
-    \reentrant
-    \since 4.9
-
-    \brief The QJsonArray class encapsulates a JSON array.
-
-    A JSON array is a list of values. The list can be manipulated by inserting and
-    removing QJsonValue's from the array.
-
-    A QJsonArray can be converted to and from a QVariantList. You can query the
-    number of entries with size(), insert(), and remove() entries from it
-    and iterate over its content using the standard C++ iterator pattern.
-
-    QJsonArray is an implicitly shared class and shares the data with the document
-    it has been created from as long as it is not being modified.
-
-    You can convert the array to and from text based JSON through QJsonDocument.
-*/
-
-/*!
-    \typedef QJsonArray::Iterator
-
-    Qt-style synonym for QJsonArray::iterator.
-*/
-
-/*!
-    \typedef QJsonArray::ConstIterator
-
-    Qt-style synonym for QJsonArray::const_iterator.
-*/
-
-/*!
-    \typedef QJsonArray::size_type
-
-    Typedef for int. Provided for STL compatibility.
-*/
-
-/*!
-    \typedef QJsonArray::value_type
-
-    Typedef for QJsonValue. Provided for STL compatibility.
-*/
-
-/*!
-    \typedef QJsonArray::difference_type
-
-    Typedef for int. Provided for STL compatibility.
-*/
-
-/*!
-    \typedef QJsonArray::pointer
-
-    Typedef for QJsonValue *. Provided for STL compatibility.
-*/
-
-/*!
-    \typedef QJsonArray::const_pointer
-
-    Typedef for const QJsonValue *. Provided for STL compatibility.
-*/
-
-/*!
-    \typedef QJsonArray::reference
-
-    Typedef for QJsonValue &. Provided for STL compatibility.
-*/
-
-/*!
-    \typedef QJsonArray::const_reference
-
-    Typedef for const QJsonValue &. Provided for STL compatibility.
-*/
-
-/*!
-    Creates an empty array.
- */
-QJsonArray::QJsonArray()
-   : d(0), a(0)
-{
-}
-
-/*!
-    \internal
- */
-QJsonArray::QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array)
-   : d(data), a(array)
-{
-   Q_ASSERT(data);
-   Q_ASSERT(array);
-   d->ref.ref();
-}
-
-/*!
-    Deletes the array.
- */
-QJsonArray::~QJsonArray()
-{
-   if (d && !d->ref.deref()) {
-      delete d;
-   }
-}
-
-/*!
-    Creates a copy of \a other.
-
-    Since QJsonArray is implicitly shared, the copy is shallow
-    as long as the object doesn't get modified.
- */
-QJsonArray::QJsonArray(const QJsonArray &other)
-{
-   d = other.d;
-   a = other.a;
-   if (d) {
-      d->ref.ref();
-   }
-}
-
-/*!
-    Assigns \a other to this array.
- */
-QJsonArray &QJsonArray::operator =(const QJsonArray &other)
-{
-   if (d != other.d) {
-      if (d && !d->ref.deref()) {
-         delete d;
-      }
-      d = other.d;
-      if (d) {
-         d->ref.ref();
-      }
-   }
-   a = other.a;
-
-   return *this;
-}
-
-/*!
-    Converts the string list \a list to a QJsonArray.
-
-    The values in \a list will be converted to JSON values.
-
-    \sa toVariantList(), QJsonValue::fromVariant()
- */
-QJsonArray QJsonArray::fromStringList(const QStringList &list)
-{
-   QJsonArray array;
-   for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) {
-      array.append(QJsonValue(*it));
-   }
-   return array;
-}
-
-/*!
-    Converts the variant list \a list to a QJsonArray.
-
-    The QVariant values in \a list will be converted to JSON values.
-
-    \sa toVariantList(), QJsonValue::fromVariant()
- */
-QJsonArray QJsonArray::fromVariantList(const QVariantList &list)
-{
-   QJsonArray array;
-   for (QVariantList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) {
-      array.append(QJsonValue::fromVariant(*it));
-   }
-   return array;
-}
-
-/*!
-    Converts this object to a QVariantList.
-
-    Returns the created map.
- */
-QVariantList QJsonArray::toVariantList() const
-{
-   QVariantList list;
-
-   if (a) {
-      list.reserve(a->length);
-      for (int i = 0; i < (int)a->length; ++i) {
-         list.append(QJsonValue(d, a, a->at(i)).toVariant());
-      }
-   }
-   return list;
-}
-
-
-/*!
-    Returns the number of values stored in the array.
- */
-int QJsonArray::size() const
-{
-   if (!d) {
-      return 0;
-   }
-
-   return (int)a->length;
-}
-
-/*!
-    \fn QJsonArray::count() const
-
-    Same as size().
-
-    \sa size()
-*/
-
-/*!
-    Returns \c true if the object is empty. This is the same as size() == 0.
-
-    \sa size()
- */
-bool QJsonArray::isEmpty() const
-{
-   if (!d) {
-      return true;
-   }
-
-   return !a->length;
-}
-
-/*!
-    Returns a QJsonValue representing the value for index \a i.
-
-    The returned QJsonValue is \c Undefined, if \a i is out of bounds.
-
- */
-QJsonValue QJsonArray::at(int i) const
-{
-   if (!a || i < 0 || i >= (int)a->length) {
-      return QJsonValue(QJsonValue::Undefined);
-   }
-
-   return QJsonValue(d, a, a->at(i));
-}
-
-/*!
-    Returns the first value stored in the array.
-
-    Same as \c at(0).
-
-    \sa at()
- */
-QJsonValue QJsonArray::first() const
-{
-   return at(0);
-}
-
-/*!
-    Returns the last value stored in the array.
-
-    Same as \c{at(size() - 1)}.
-
-    \sa at()
- */
-QJsonValue QJsonArray::last() const
-{
-   return at(a ? (a->length - 1) : 0);
-}
-
-/*!
-    Inserts \a value at the beginning of the array.
-
-    This is the same as \c{insert(0, value)} and will prepend \a value to the array.
-
-    \sa append(), insert()
- */
-void QJsonArray::prepend(const QJsonValue &value)
-{
-   insert(0, value);
-}
-
-/*!
-    Inserts \a value at the end of the array.
-
-    \sa prepend(), insert()
- */
-void QJsonArray::append(const QJsonValue &value)
-{
-   insert(a ? (int)a->length : 0, value);
-}
-
-/*!
-    Removes the value at index position \a i. \a i must be a valid
-    index position in the array (i.e., \c{0 <= i < size()}).
-
-    \sa insert(), replace()
- */
-void QJsonArray::removeAt(int i)
-{
-   if (!a || i < 0 || i >= (int)a->length) {
-      return;
-   }
-
-   detach();
-   a->removeItems(i, 1);
-   ++d->compactionCounter;
-   if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(a->length) / 2u) {
-      compact();
-   }
-}
-
-/*! \fn void QJsonArray::removeFirst()
-
-    Removes the first item in the array. Calling this function is
-    equivalent to calling \c{removeAt(0)}. The array must not be empty. If
-    the array can be empty, call isEmpty() before calling this
-    function.
-
-    \sa removeAt(), removeLast()
-*/
-
-/*! \fn void QJsonArray::removeLast()
-
-    Removes the last item in the array. Calling this function is
-    equivalent to calling \c{removeAt(size() - 1)}. The array must not be
-    empty. If the array can be empty, call isEmpty() before calling
-    this function.
-
-    \sa removeAt(), removeFirst()
-*/
-
-/*!
-    Removes the item at index position \a i and returns it. \a i must
-    be a valid index position in the array (i.e., \c{0 <= i < size()}).
-
-    If you don't use the return value, removeAt() is more efficient.
-
-    \sa removeAt()
- */
-QJsonValue QJsonArray::takeAt(int i)
-{
-   if (!a || i < 0 || i >= (int)a->length) {
-      return QJsonValue(QJsonValue::Undefined);
-   }
-
-   QJsonValue v(d, a, a->at(i));
-   removeAt(i); // detaches
-   return v;
-}
-
-/*!
-    Inserts \a value at index position \a i in the array. If \a i
-    is \c 0, the value is prepended to the array. If \a i is size(), the
-    value is appended to the array.
-
-    \sa append(), prepend(), replace(), removeAt()
- */
-void QJsonArray::insert(int i, const QJsonValue &value)
-{
-   Q_ASSERT (i >= 0 && i <= (a ? (int)a->length : 0));
-   QJsonValue val = value;
-
-   bool compressed;
-   int valueSize = QJsonPrivate::Value::requiredStorage(val, &compressed);
-
-   detach(valueSize + sizeof(QJsonPrivate::Value));
-
-   if (!a->length) {
-      a->tableOffset = sizeof(QJsonPrivate::Array);
-   }
-
-   int valueOffset = a->reserveSpace(valueSize, i, 1, false);
-   if (!valueOffset) {
-      return;
-   }
-
-   QJsonPrivate::Value &v = (*a)[i];
-   v.type = (val.t == QJsonValue::Undefined ? QJsonValue::Null : val.t);
-   v.latinOrIntValue = compressed;
-   v.latinKey = false;
-   v.value = QJsonPrivate::Value::valueToStore(val, valueOffset);
-   if (valueSize) {
-      QJsonPrivate::Value::copyData(val, (char *)a + valueOffset, compressed);
-   }
-}
-
-/*!
-    \fn QJsonArray::iterator QJsonArray::insert(iterator before, const QJsonValue &value)
-
-    Inserts \a value before the position pointed to by \a before, and returns an iterator
-    pointing to the newly inserted item.
-
-    \sa erase(), insert()
-*/
-
-/*!
-    \fn QJsonArray::iterator QJsonArray::erase(iterator it)
-
-    Removes the item pointed to by \a it, and returns an iterator pointing to the
-    next item.
-
-    \sa removeAt()
-*/
-
-/*!
-    Replaces the item at index position \a i with \a value. \a i must
-    be a valid index position in the array (i.e., \c{0 <= i < size()}).
-
-    \sa operator[](), removeAt()
- */
-void QJsonArray::replace(int i, const QJsonValue &value)
-{
-   Q_ASSERT (a && i >= 0 && i < (int)(a->length));
-   QJsonValue val = value;
-
-   bool compressed;
-   int valueSize = QJsonPrivate::Value::requiredStorage(val, &compressed);
-
-   detach(valueSize);
-
-   if (!a->length) {
-      a->tableOffset = sizeof(QJsonPrivate::Array);
-   }
-
-   int valueOffset = a->reserveSpace(valueSize, i, 1, true);
-   if (!valueOffset) {
-      return;
-   }
-
-   QJsonPrivate::Value &v = (*a)[i];
-   v.type = (val.t == QJsonValue::Undefined ? QJsonValue::Null : val.t);
-   v.latinOrIntValue = compressed;
-   v.latinKey = false;
-   v.value = QJsonPrivate::Value::valueToStore(val, valueOffset);
-   if (valueSize) {
-      QJsonPrivate::Value::copyData(val, (char *)a + valueOffset, compressed);
-   }
-
-   ++d->compactionCounter;
-   if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(a->length) / 2u) {
-      compact();
-   }
-}
-
-/*!
-    Returns \c true if the array contains an occurrence of \a value, otherwise \c false.
-
-    \sa count()
- */
-bool QJsonArray::contains(const QJsonValue &value) const
-{
-   for (int i = 0; i < size(); i++) {
-      if (at(i) == value) {
-         return true;
-      }
-   }
-   return false;
-}
-
-/*!
-    Returns the value at index position \a i as a modifiable reference.
-    \a i must be a valid index position in the array (i.e., \c{0 <= i <
-    size()}).
-
-    The return value is of type QJsonValueRef, a helper class for QJsonArray
-    and QJsonObject. When you get an object of type QJsonValueRef, you can
-    use it as if it were a reference to a QJsonValue. If you assign to it,
-    the assignment will apply to the character in the QJsonArray of QJsonObject
-    from which you got the reference.
-
-    \sa at()
- */
-QJsonValueRef QJsonArray::operator [](int i)
-{
-   Q_ASSERT(a && i >= 0 && i < (int)a->length);
-   return QJsonValueRef(this, i);
-}
-
-/*!
-    \overload
-
-    Same as at().
- */
-QJsonValue QJsonArray::operator[](int i) const
-{
-   return at(i);
-}
-
-/*!
-    Returns \c true if this array is equal to \a other.
- */
-bool QJsonArray::operator==(const QJsonArray &other) const
-{
-   if (a == other.a) {
-      return true;
-   }
-
-   if (!a) {
-      return !other.a->length;
-   }
-   if (!other.a) {
-      return !a->length;
-   }
-   if (a->length != other.a->length) {
-      return false;
-   }
-
-   for (int i = 0; i < (int)a->length; ++i) {
-      if (QJsonValue(d, a, a->at(i)) != QJsonValue(other.d, other.a, other.a->at(i))) {
-         return false;
-      }
-   }
-   return true;
-}
-
-/*!
-    Returns \c true if this array is not equal to \a other.
- */
-bool QJsonArray::operator!=(const QJsonArray &other) const
-{
-   return !(*this == other);
-}
-
-/*! \fn QJsonArray::iterator QJsonArray::begin()
-
-    Returns an \l{STL-style iterator} pointing to the first item in
-    the array.
-
-    \sa constBegin(), end()
-*/
-
-/*! \fn QJsonArray::const_iterator QJsonArray::begin() const
-
-    \overload
-*/
-
-/*! \fn QJsonArray::const_iterator QJsonArray::constBegin() const
-
-    Returns a const \l{STL-style iterator} pointing to the first item
-    in the array.
-
-    \sa begin(), constEnd()
-*/
-
-/*! \fn QJsonArray::iterator QJsonArray::end()
-
-    Returns an \l{STL-style iterator} pointing to the imaginary item
-    after the last item in the array.
-
-    \sa begin(), constEnd()
-*/
-
-/*! \fn const_iterator QJsonArray::end() const
-
-    \overload
-*/
-
-/*! \fn QJsonArray::const_iterator QJsonArray::constEnd() const
-
-    Returns a const \l{STL-style iterator} pointing to the imaginary
-    item after the last item in the array.
-
-    \sa constBegin(), end()
-*/
-
-/*! \fn void QJsonArray::push_back(const QJsonValue &value)
-
-    This function is provided for STL compatibility. It is equivalent
-    to \l{QJsonArray::append()}{append(value)} and will append \a value to the array.
-*/
-
-/*! \fn void QJsonArray::push_front(const QJsonValue &value)
-
-    This function is provided for STL compatibility. It is equivalent
-    to \l{QJsonArray::prepend()}{prepend(value)} and will prepend \a value to the array.
-*/
-
-/*! \fn void QJsonArray::pop_front()
-
-    This function is provided for STL compatibility. It is equivalent
-    to removeFirst(). The array must not be empty. If the array can be
-    empty, call isEmpty() before calling this function.
-*/
-
-/*! \fn void QJsonArray::pop_back()
-
-    This function is provided for STL compatibility. It is equivalent
-    to removeLast(). The array must not be empty. If the array can be
-    empty, call isEmpty() before calling this function.
-*/
-
-/*! \fn bool QJsonArray::empty() const
-
-    This function is provided for STL compatibility. It is equivalent
-    to isEmpty() and returns \c true if the array is empty.
-*/
-
-/*! \class QJsonArray::iterator
-    \inmodule QtCore
-    \brief The QJsonArray::iterator class provides an STL-style non-const iterator for QJsonArray.
-
-    QJsonArray::iterator allows you to iterate over a QJsonArray
-    and to modify the array item associated with the
-    iterator. If you want to iterate over a const QJsonArray, use
-    QJsonArray::const_iterator instead. It is generally a good practice to
-    use QJsonArray::const_iterator on a non-const QJsonArray as well, unless
-    you need to change the QJsonArray through the iterator. Const
-    iterators are slightly faster and improves code readability.
-
-    The default QJsonArray::iterator constructor creates an uninitialized
-    iterator. You must initialize it using a QJsonArray function like
-    QJsonArray::begin(), QJsonArray::end(), or QJsonArray::insert() before you can
-    start iterating.
-
-    Most QJsonArray functions accept an integer index rather than an
-    iterator. For that reason, iterators are rarely useful in
-    connection with QJsonArray. One place where STL-style iterators do
-    make sense is as arguments to \l{generic algorithms}.
-
-    Multiple iterators can be used on the same array. However, be
-    aware that any non-const function call performed on the QJsonArray
-    will render all existing iterators undefined.
-
-    \sa QJsonArray::const_iterator
-*/
-
-/*! \typedef QJsonArray::iterator::iterator_category
-
-  A synonym for \e {std::random_access_iterator_tag} indicating
-  this iterator is a random access iterator.
-*/
-
-/*! \typedef QJsonArray::iterator::difference_type
-
-    \internal
-*/
-
-/*! \typedef QJsonArray::iterator::value_type
-
-    \internal
-*/
-
-/*! \typedef QJsonArray::iterator::reference
-
-    \internal
-*/
-
-/*! \fn QJsonArray::iterator::iterator()
-
-    Constructs an uninitialized iterator.
-
-    Functions like operator*() and operator++() should not be called
-    on an uninitialized iterator. Use operator=() to assign a value
-    to it before using it.
-
-    \sa QJsonArray::begin(), QJsonArray::end()
-*/
-
-/*! \fn QJsonArray::iterator::iterator(QJsonArray *array, int index)
-    \internal
-*/
-
-/*! \fn QJsonValueRef QJsonArray::iterator::operator*() const
-
-    Returns a modifiable reference to the current item.
-
-    You can change the value of an item by using operator*() on the
-    left side of an assignment.
-
-    The return value is of type QJsonValueRef, a helper class for QJsonArray
-    and QJsonObject. When you get an object of type QJsonValueRef, you can
-    use it as if it were a reference to a QJsonValue. If you assign to it,
-    the assignment will apply to the character in the QJsonArray of QJsonObject
-    from which you got the reference.
-*/
-
-/*! \fn QJsonValueRef QJsonArray::iterator::operator[](int j) const
-
-    Returns a modifiable reference to the item at offset \a j from the
-    item pointed to by this iterator (the item at position \c{*this + j}).
-
-    This function is provided to make QJsonArray iterators behave like C++
-    pointers.
-
-    The return value is of type QJsonValueRef, a helper class for QJsonArray
-    and QJsonObject. When you get an object of type QJsonValueRef, you can
-    use it as if it were a reference to a QJsonValue. If you assign to it,
-    the assignment will apply to the character in the QJsonArray of QJsonObject
-    from which you got the reference.
-
-    \sa operator+()
-*/
-
-/*!
-    \fn bool QJsonArray::iterator::operator==(const iterator &other) const
-    \fn bool QJsonArray::iterator::operator==(const const_iterator &other) const
-
-    Returns \c true if \a other points to the same item as this
-    iterator; otherwise returns \c false.
-
-    \sa operator!=()
-*/
-
-/*!
-    \fn bool QJsonArray::iterator::operator!=(const iterator &other) const
-    \fn bool QJsonArray::iterator::operator!=(const const_iterator &other) const
-
-    Returns \c true if \a other points to a different item than this
-    iterator; otherwise returns \c false.
-
-    \sa operator==()
-*/
-
-/*!
-    \fn bool QJsonArray::iterator::operator<(const iterator& other) const
-    \fn bool QJsonArray::iterator::operator<(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is less than
-    the item pointed to by the \a other iterator.
-*/
-
-/*!
-    \fn bool QJsonArray::iterator::operator<=(const iterator& other) const
-    \fn bool QJsonArray::iterator::operator<=(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is less than
-    or equal to the item pointed to by the \a other iterator.
-*/
-
-/*!
-    \fn bool QJsonArray::iterator::operator>(const iterator& other) const
-    \fn bool QJsonArray::iterator::operator>(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is greater
-    than the item pointed to by the \a other iterator.
-*/
-
-/*!
-    \fn bool QJsonArray::iterator::operator>=(const iterator& other) const
-    \fn bool QJsonArray::iterator::operator>=(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is greater
-    than or equal to the item pointed to by the \a other iterator.
-*/
-
-/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator++()
-
-    The prefix ++ operator, \c{++it}, advances the iterator to the
-    next item in the array and returns an iterator to the new current
-    item.
-
-    Calling this function on QJsonArray::end() leads to undefined results.
-
-    \sa operator--()
-*/
-
-/*! \fn QJsonArray::iterator QJsonArray::iterator::operator++(int)
-
-    \overload
-
-    The postfix ++ operator, \c{it++}, advances the iterator to the
-    next item in the array and returns an iterator to the previously
-    current item.
-*/
-
-/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator--()
-
-    The prefix -- operator, \c{--it}, makes the preceding item
-    current and returns an iterator to the new current item.
-
-    Calling this function on QJsonArray::begin() leads to undefined results.
-
-    \sa operator++()
-*/
-
-/*! \fn QJsonArray::iterator QJsonArray::iterator::operator--(int)
-
-    \overload
-
-    The postfix -- operator, \c{it--}, makes the preceding item
-    current and returns an iterator to the previously current item.
-*/
-
-/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator+=(int j)
-
-    Advances the iterator by \a j items. If \a j is negative, the
-    iterator goes backward.
-
-    \sa operator-=(), operator+()
-*/
-
-/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator-=(int j)
-
-    Makes the iterator go back by \a j items. If \a j is negative,
-    the iterator goes forward.
-
-    \sa operator+=(), operator-()
-*/
-
-/*! \fn QJsonArray::iterator QJsonArray::iterator::operator+(int j) const
-
-    Returns an iterator to the item at \a j positions forward from
-    this iterator. If \a j is negative, the iterator goes backward.
-
-    \sa operator-(), operator+=()
-*/
-
-/*! \fn QJsonArray::iterator QJsonArray::iterator::operator-(int j) const
-
-    Returns an iterator to the item at \a j positions backward from
-    this iterator. If \a j is negative, the iterator goes forward.
-
-    \sa operator+(), operator-=()
-*/
-
-/*! \fn int QJsonArray::iterator::operator-(iterator other) const
-
-    Returns the number of items between the item pointed to by \a
-    other and the item pointed to by this iterator.
-*/
-
-/*! \class QJsonArray::const_iterator
-    \inmodule QtCore
-    \brief The QJsonArray::const_iterator class provides an STL-style const iterator for QJsonArray.
-
-    QJsonArray::const_iterator allows you to iterate over a
-    QJsonArray. If you want to modify the QJsonArray as
-    you iterate over it, use QJsonArray::iterator instead. It is generally a
-    good practice to use QJsonArray::const_iterator on a non-const QJsonArray
-    as well, unless you need to change the QJsonArray through the
-    iterator. Const iterators are slightly faster and improves
-    code readability.
-
-    The default QJsonArray::const_iterator constructor creates an
-    uninitialized iterator. You must initialize it using a QJsonArray
-    function like QJsonArray::constBegin(), QJsonArray::constEnd(), or
-    QJsonArray::insert() before you can start iterating.
-
-    Most QJsonArray functions accept an integer index rather than an
-    iterator. For that reason, iterators are rarely useful in
-    connection with QJsonArray. One place where STL-style iterators do
-    make sense is as arguments to \l{generic algorithms}.
-
-    Multiple iterators can be used on the same array. However, be
-    aware that any non-const function call performed on the QJsonArray
-    will render all existing iterators undefined.
-
-    \sa QJsonArray::iterator
-*/
-
-/*! \fn QJsonArray::const_iterator::const_iterator()
-
-    Constructs an uninitialized iterator.
-
-    Functions like operator*() and operator++() should not be called
-    on an uninitialized iterator. Use operator=() to assign a value
-    to it before using it.
-
-    \sa QJsonArray::constBegin(), QJsonArray::constEnd()
-*/
-
-/*! \fn QJsonArray::const_iterator::const_iterator(const QJsonArray *array, int index)
-    \internal
-*/
-
-/*! \typedef QJsonArray::const_iterator::iterator_category
-
-  A synonym for \e {std::random_access_iterator_tag} indicating
-  this iterator is a random access iterator.
-*/
-
-/*! \typedef QJsonArray::const_iterator::difference_type
-
-    \internal
-*/
-
-/*! \typedef QJsonArray::const_iterator::value_type
-
-    \internal
-*/
-
-/*! \typedef QJsonArray::const_iterator::reference
-
-    \internal
-*/
-
-/*! \fn QJsonArray::const_iterator::const_iterator(const const_iterator &other)
-
-    Constructs a copy of \a other.
-*/
-
-/*! \fn QJsonArray::const_iterator::const_iterator(const iterator &other)
-
-    Constructs a copy of \a other.
-*/
-
-/*! \fn QJsonValue QJsonArray::const_iterator::operator*() const
-
-    Returns the current item.
-*/
-
-/*! \fn QJsonValue QJsonArray::const_iterator::operator[](int j) const
-
-    Returns the item at offset \a j from the item pointed to by this iterator (the item at
-    position \c{*this + j}).
-
-    This function is provided to make QJsonArray iterators behave like C++
-    pointers.
-
-    \sa operator+()
-*/
-
-/*! \fn bool QJsonArray::const_iterator::operator==(const const_iterator &other) const
-
-    Returns \c true if \a other points to the same item as this
-    iterator; otherwise returns \c false.
-
-    \sa operator!=()
-*/
-
-/*! \fn bool QJsonArray::const_iterator::operator!=(const const_iterator &other) const
-
-    Returns \c true if \a other points to a different item than this
-    iterator; otherwise returns \c false.
-
-    \sa operator==()
-*/
-
-/*!
-    \fn bool QJsonArray::const_iterator::operator<(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is less than
-    the item pointed to by the \a other iterator.
-*/
-
-/*!
-    \fn bool QJsonArray::const_iterator::operator<=(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is less than
-    or equal to the item pointed to by the \a other iterator.
-*/
-
-/*!
-    \fn bool QJsonArray::const_iterator::operator>(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is greater
-    than the item pointed to by the \a other iterator.
-*/
-
-/*!
-    \fn bool QJsonArray::const_iterator::operator>=(const const_iterator& other) const
-
-    Returns \c true if the item pointed to by this iterator is greater
-    than or equal to the item pointed to by the \a other iterator.
-*/
-
-/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator++()
-
-    The prefix ++ operator, \c{++it}, advances the iterator to the
-    next item in the array and returns an iterator to the new current
-    item.
-
-    Calling this function on QJsonArray::end() leads to undefined results.
-
-    \sa operator--()
-*/
-
-/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator++(int)
-
-    \overload
-
-    The postfix ++ operator, \c{it++}, advances the iterator to the
-    next item in the array and returns an iterator to the previously
-    current item.
-*/
-
-/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator--()
-
-    The prefix -- operator, \c{--it}, makes the preceding item
-    current and returns an iterator to the new current item.
-
-    Calling this function on QJsonArray::begin() leads to undefined results.
-
-    \sa operator++()
-*/
-
-/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator--(int)
-
-    \overload
-
-    The postfix -- operator, \c{it--}, makes the preceding item
-    current and returns an iterator to the previously current item.
-*/
-
-/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator+=(int j)
-
-    Advances the iterator by \a j items. If \a j is negative, the
-    iterator goes backward.
-
-    \sa operator-=(), operator+()
-*/
-
-/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator-=(int j)
-
-    Makes the iterator go back by \a j items. If \a j is negative,
-    the iterator goes forward.
-
-    \sa operator+=(), operator-()
-*/
-
-/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator+(int j) const
-
-    Returns an iterator to the item at \a j positions forward from
-    this iterator. If \a j is negative, the iterator goes backward.
-
-    \sa operator-(), operator+=()
-*/
-
-/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator-(int j) const
-
-    Returns an iterator to the item at \a j positions backward from
-    this iterator. If \a j is negative, the iterator goes forward.
-
-    \sa operator+(), operator-=()
-*/
-
-/*! \fn int QJsonArray::const_iterator::operator-(const_iterator other) const
-
-    Returns the number of items between the item pointed to by \a
-    other and the item pointed to by this iterator.
-*/
-
-
-/*!
-    \internal
- */
-void QJsonArray::detach(uint reserve)
-{
-   if (!d) {
-      d = new QJsonPrivate::Data(reserve, QJsonValue::Array);
-      a = static_cast<QJsonPrivate::Array *>(d->header->root());
-      d->ref.ref();
-      return;
-   }
-   if (reserve == 0 && d->ref == 1) {
-      return;
-   }
-
-   QJsonPrivate::Data *x = d->clone(a, reserve);
-   x->ref.ref();
-   if (!d->ref.deref()) {
-      delete d;
-   }
-   d = x;
-   a = static_cast<QJsonPrivate::Array *>(d->header->root());
-}
-
-/*!
-    \internal
- */
-void QJsonArray::compact()
-{
-   if (!d || !d->compactionCounter) {
-      return;
-   }
-
-   detach();
-   d->compact();
-   a = static_cast<QJsonPrivate::Array *>(d->header->root());
-}
-
-
-QDebug operator<<(QDebug dbg, const QJsonArray &a)
-{
-   if (!a.a) {
-      dbg << "QJsonArray()";
-      return dbg;
-   }
-   QByteArray json;
-   QJsonPrivate::Writer::arrayToJson(a.a, json, 0, true);
-   dbg.nospace() << "QJsonArray("
-                 << json.constData() // print as utf-8 string without extra quotation marks
-                 << ")";
-   return dbg.space();
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/core/json/qjsonarray.h b/src/core/json/qjsonarray.h
deleted file mode 100644 (file)
index 7a7153e..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONARRAY_H
-#define QJSONARRAY_H
-
-#include <QtCore/qjsonvalue.h>
-
-QT_BEGIN_NAMESPACE
-
-
-class QDebug;
-class QStringList;
-
-template <typename T> class QList;
-typedef QList<QVariant> QVariantList;
-
-class Q_CORE_EXPORT QJsonArray
-{
- public:
-   QJsonArray();
-   ~QJsonArray();
-
-   QJsonArray(const QJsonArray &other);
-   QJsonArray &operator =(const QJsonArray &other);
-
-   static QJsonArray fromStringList(const QStringList &list);
-   static QJsonArray fromVariantList(const QVariantList &list);
-   QVariantList toVariantList() const;
-
-   int size() const;
-   inline int count() const {
-      return size();
-   }
-
-   bool isEmpty() const;
-   QJsonValue at(int i) const;
-   QJsonValue first() const;
-   QJsonValue last() const;
-
-   void prepend(const QJsonValue &value);
-   void append(const QJsonValue &value);
-   void removeAt(int i);
-   QJsonValue takeAt(int i);
-   inline void removeFirst() {
-      removeAt(0);
-   }
-   inline void removeLast() {
-      removeAt(size() - 1);
-   }
-
-   void insert(int i, const QJsonValue &value);
-   void replace(int i, const QJsonValue &value);
-
-   bool contains(const QJsonValue &element) const;
-   QJsonValueRef operator[](int i);
-   QJsonValue operator[](int i) const;
-
-   bool operator==(const QJsonArray &other) const;
-   bool operator!=(const QJsonArray &other) const;
-
-   class const_iterator;
-
-   class iterator
-   {
-    public:
-      QJsonArray *a;
-      int i;
-      typedef std::random_access_iterator_tag  iterator_category;
-      typedef int difference_type;
-      typedef QJsonValue value_type;
-      typedef QJsonValueRefPtr pointer;
-      typedef QJsonValueRef reference;
-
-      inline iterator() : a(0), i(0) { }
-      explicit inline iterator(QJsonArray *array, int index) : a(array), i(index) { }
-
-      inline QJsonValueRef operator*() const {
-         return QJsonValueRef(a, i);
-      }
-      inline QJsonValueRefPtr operator->() const { 
-         return QJsonValueRefPtr(a, i);
-      }
-      inline QJsonValueRef operator[](int j) const {
-         return QJsonValueRef(a, i + j);
-      }
-
-      inline bool operator==(const iterator &o) const {
-         return i == o.i;
-      }
-      inline bool operator!=(const iterator &o) const {
-         return i != o.i;
-      }
-      inline bool operator<(const iterator &other) const {
-         return i < other.i;
-      }
-      inline bool operator<=(const iterator &other) const {
-         return i <= other.i;
-      }
-      inline bool operator>(const iterator &other) const {
-         return i > other.i;
-      }
-      inline bool operator>=(const iterator &other) const {
-         return i >= other.i;
-      }
-      inline bool operator==(const const_iterator &o) const {
-         return i == o.i;
-      }
-      inline bool operator!=(const const_iterator &o) const {
-         return i != o.i;
-      }
-      inline bool operator<(const const_iterator &other) const {
-         return i < other.i;
-      }
-      inline bool operator<=(const const_iterator &other) const {
-         return i <= other.i;
-      }
-      inline bool operator>(const const_iterator &other) const {
-         return i > other.i;
-      }
-      inline bool operator>=(const const_iterator &other) const {
-         return i >= other.i;
-      }
-      inline iterator &operator++() {
-         ++i;
-         return *this;
-      }
-      inline iterator operator++(int) {
-         iterator n = *this;
-         ++i;
-         return n;
-      }
-      inline iterator &operator--() {
-         i--;
-         return *this;
-      }
-      inline iterator operator--(int) {
-         iterator n = *this;
-         i--;
-         return n;
-      }
-      inline iterator &operator+=(int j) {
-         i += j;
-         return *this;
-      }
-      inline iterator &operator-=(int j) {
-         i -= j;
-         return *this;
-      }
-      inline iterator operator+(int j) const {
-         return iterator(a, i + j);
-      }
-      inline iterator operator-(int j) const {
-         return iterator(a, i - j);
-      }
-      inline int operator-(iterator j) const {
-         return i - j.i;
-      }
-   };
-   friend class iterator;
-
-   class const_iterator
-   {
-    public:
-      const QJsonArray *a;
-      int i;
-      typedef std::random_access_iterator_tag  iterator_category;
-      typedef qptrdiff difference_type;
-      typedef QJsonValue value_type;
-      typedef QJsonValuePtr pointer;
-      typedef QJsonValue reference;
-
-      inline const_iterator() : a(0), i(0) { }
-      explicit inline const_iterator(const QJsonArray *array, int index) : a(array), i(index) { }
-      inline const_iterator(const const_iterator &o) : a(o.a), i(o.i) {}
-      inline const_iterator(const iterator &o) : a(o.a), i(o.i) {}
-
-      inline QJsonValue operator*() const {
-         return a->at(i);
-      }
-      inline QJsonValuePtr operator->() const { 
-         return QJsonValuePtr(a->at(i));
-      }
-      inline QJsonValue operator[](int j) const {
-         return a->at(i + j);
-      }
-      inline bool operator==(const const_iterator &o) const {
-         return i == o.i;
-      }
-      inline bool operator!=(const const_iterator &o) const {
-         return i != o.i;
-      }
-      inline bool operator<(const const_iterator &other) const {
-         return i < other.i;
-      }
-      inline bool operator<=(const const_iterator &other) const {
-         return i <= other.i;
-      }
-      inline bool operator>(const const_iterator &other) const {
-         return i > other.i;
-      }
-      inline bool operator>=(const const_iterator &other) const {
-         return i >= other.i;
-      }
-      inline const_iterator &operator++() {
-         ++i;
-         return *this;
-      }
-      inline const_iterator operator++(int) {
-         const_iterator n = *this;
-         ++i;
-         return n;
-      }
-      inline const_iterator &operator--() {
-         i--;
-         return *this;
-      }
-      inline const_iterator operator--(int) {
-         const_iterator n = *this;
-         i--;
-         return n;
-      }
-      inline const_iterator &operator+=(int j) {
-         i += j;
-         return *this;
-      }
-      inline const_iterator &operator-=(int j) {
-         i -= j;
-         return *this;
-      }
-      inline const_iterator operator+(int j) const {
-         return const_iterator(a, i + j);
-      }
-      inline const_iterator operator-(int j) const {
-         return const_iterator(a, i - j);
-      }
-      inline int operator-(const_iterator j) const {
-         return i - j.i;
-      }
-   };
-   friend class const_iterator;
-
-   // stl style
-   inline iterator begin() {
-      detach();
-      return iterator(this, 0);
-   }
-   inline const_iterator begin() const {
-      return const_iterator(this, 0);
-   }
-   inline const_iterator constBegin() const {
-      return const_iterator(this, 0);
-   }
-   inline iterator end() {
-      detach();
-      return iterator(this, size());
-   }
-   inline const_iterator end() const {
-      return const_iterator(this, size());
-   }
-   inline const_iterator constEnd() const {
-      return const_iterator(this, size());
-   }
-   iterator insert(iterator before, const QJsonValue &value) {
-      insert(before.i, value);
-      return before;
-   }
-   iterator erase(iterator it) {
-      removeAt(it.i);
-      return it;
-   }
-
-   // more Qt
-   typedef iterator Iterator;
-   typedef const_iterator ConstIterator;
-
-   // stl compatibility
-   inline void push_back(const QJsonValue &t) {
-      append(t);
-   }
-   inline void push_front(const QJsonValue &t) {
-      prepend(t);
-   }
-   inline void pop_front() {
-      removeFirst();
-   }
-   inline void pop_back() {
-      removeLast();
-   }
-   inline bool empty() const {
-      return isEmpty();
-   }
-   typedef int size_type;
-   typedef QJsonValue value_type;
-   typedef value_type *pointer;
-   typedef const value_type *const_pointer;
-   typedef QJsonValueRef reference;
-   typedef QJsonValue const_reference;
-   typedef int difference_type;
-
- private:
-   friend class QJsonPrivate::Data;
-   friend class QJsonValue;
-   friend class QJsonDocument;
-   friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &);
-
-   QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array);
-   void compact();
-   void detach(uint reserve = 0);
-
-   QJsonPrivate::Data *d;
-   QJsonPrivate::Array *a;
-};
-
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &);
-
-QT_END_NAMESPACE
-
-#endif // QJSONARRAY_H
diff --git a/src/core/json/qjsondocument.cpp b/src/core/json/qjsondocument.cpp
deleted file mode 100644 (file)
index 57dca3d..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qjsondocument.h"
-#include "qjsonobject.h"
-#include "qjsonvalue.h"
-#include "qjsonarray.h"
-#include "qstringlist.h"
-#include "qvariant.h"
-#include "qdebug.h"
-#include "qjsonwriter_p.h"
-#include "qjsonparser_p.h"
-#include "qjson_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QJsonDocument::QJsonDocument()
-   : d(0)
-{
-}
-
-QJsonDocument::QJsonDocument(const QJsonObject &object)
-   : d(0)
-{
-   setObject(object);
-}
-
-QJsonDocument::QJsonDocument(const QJsonArray &array)
-   : d(0)
-{
-   setArray(array);
-}
-
-QJsonDocument::QJsonDocument(QJsonPrivate::Data *data)
-   : d(data)
-{
-   Q_ASSERT(d);
-   d->ref.ref();
-}
-
-QJsonDocument::~QJsonDocument()
-{
-   if (d && !d->ref.deref()) {
-      delete d;
-   }
-}
-
-QJsonDocument::QJsonDocument(const QJsonDocument &other)
-{
-   d = other.d;
-   if (d) {
-      d->ref.ref();
-   }
-}
-
-/*!
- * Assigns the \a other document to this QJsonDocument.
- * Returns a reference to this object.
- */
-QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other)
-{
-   if (d != other.d) {
-      if (d && !d->ref.deref()) {
-         delete d;
-      }
-      d = other.d;
-      if (d) {
-         d->ref.ref();
-      }
-   }
-
-   return *this;
-}
-
-/*! \enum QJsonDocument::DataValidation
-
-  This value is used to tell QJsonDocument whether to validate the binary data
-  when converting to a QJsonDocument using fromBinaryData() or fromRawData().
-
-  \value Validate Validate the data before using it. This is the default.
-  \value BypassValidation Bypasses data validation. Only use if you received the
-  data from a trusted place and know it's valid, as using of invalid data can crash
-  the application.
-  */
-
-/*!
- Creates a QJsonDocument that uses the first \a size bytes from
- \a data. It assumes \a data contains a binary encoded JSON document.
- The created document does not take ownership of \a data and the caller
- has to guarantee that \a data will not be deleted or modified as long as
- any QJsonDocument, QJsonObject or QJsonArray still references the data.
-
- \a data has to be aligned to a 4 byte boundary.
-
- \a validation decides whether the data is checked for validity before being used.
- By default the data is validated. If the \a data is not valid, the method returns
- a null document.
-
- Returns a QJsonDocument representing the data.
-
- \sa rawData(), fromBinaryData(), isNull(), DataValidation
- */
-QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation)
-{
-   if (quintptr(data) & 3) {
-      qWarning() << "QJsonDocument::fromRawData: data has to have 4 byte alignment";
-      return QJsonDocument();
-   }
-
-   QJsonPrivate::Data *d = new QJsonPrivate::Data((char *)data, size);
-   d->ownsData = false;
-
-   if (validation != BypassValidation && !d->valid()) {
-      delete d;
-      return QJsonDocument();
-   }
-
-   return QJsonDocument(d);
-}
-
-/*!
-  Returns the raw binary representation of the data
-  \a size will contain the size of the returned data.
-
-  This method is useful to e.g. stream the JSON document
-  in it's binary form to a file.
- */
-const char *QJsonDocument::rawData(int *size) const
-{
-   if (!d) {
-      *size = 0;
-      return 0;
-   }
-   *size = d->alloc;
-   return d->rawData;
-}
-
-/*!
- Creates a QJsonDocument from \a data.
-
- \a validation decides whether the data is checked for validity before being used.
- By default the data is validated. If the \a data is not valid, the method returns
- a null document.
-
- \sa toBinaryData(), fromRawData(), isNull(), DataValidation
- */
-QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation)
-{
-   if (data.size() < (int)(sizeof(QJsonPrivate::Header) + sizeof(QJsonPrivate::Base))) {
-      return QJsonDocument();
-   }
-
-   QJsonPrivate::Header h;
-   memcpy(&h, data.constData(), sizeof(QJsonPrivate::Header));
-   QJsonPrivate::Base root;
-   memcpy(&root, data.constData() + sizeof(QJsonPrivate::Header), sizeof(QJsonPrivate::Base));
-
-   // do basic checks here, so we don't try to allocate more memory than we can.
-   if (h.tag != QJsonDocument::BinaryFormatTag || h.version != 1u ||
-         sizeof(QJsonPrivate::Header) + root.size > (uint)data.size()) {
-      return QJsonDocument();
-   }
-
-   const uint size = sizeof(QJsonPrivate::Header) + root.size;
-   char *raw = (char *)malloc(size);
-   if (!raw) {
-      return QJsonDocument();
-   }
-
-   memcpy(raw, data.constData(), size);
-   QJsonPrivate::Data *d = new QJsonPrivate::Data(raw, size);
-
-   if (validation != BypassValidation && !d->valid()) {
-      delete d;
-      return QJsonDocument();
-   }
-
-   return QJsonDocument(d);
-}
-
-/*!
- Creates a QJsonDocument from the QVariant \a variant.
-
- If the \a variant contains any other type than a QVariant::Map,
- QVariant::List or QVariant::StringList, the returned document
- document is invalid.
-
- \sa toVariant()
- */
-QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)
-{
-   QJsonDocument doc;
-   if (variant.type() == QVariant::Map) {
-      doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));
-   } else if (variant.type() == QVariant::List) {
-      doc.setArray(QJsonArray::fromVariantList(variant.toList()));
-   } else if (variant.type() == QVariant::StringList) {
-      doc.setArray(QJsonArray::fromStringList(variant.toStringList()));
-   }
-   return doc;
-}
-
-/*!
- Returns a QVariant representing the Json document.
-
- The returned variant will be a QVariantList if the document is
- a QJsonArray and a QVariantMap if the document is a QJsonObject.
-
- \sa fromVariant(), QJsonValue::toVariant()
- */
-QVariant QJsonDocument::toVariant() const
-{
-   if (!d) {
-      return QVariant();
-   }
-
-   if (d->header->root()->isArray()) {
-      return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root())).toVariantList();
-   } else {
-      return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root())).toVariantMap();
-   }
-}
-
-QByteArray QJsonDocument::toJson(JsonFormat format) const
-{
-   if (!d) {
-      return QByteArray();
-   }
-
-   QByteArray json;
-
-   if (d->header->root()->isArray()) {
-      QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact));
-   } else {
-      QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(d->header->root()), json, 0,
-                                         (format == Compact));
-   }
-
-   return json;
-}
-
-/*!
- Parses a UTF-8 encoded JSON document and creates a QJsonDocument
- from it.
-
- \a json contains the json document to be parsed.
-
- The optional \a error variable can be used to pass in a QJsonParseError data
- structure that will contain information about possible errors encountered during
- parsing.
-
- \sa toJson(), QJsonParseError
- */
-QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error)
-{
-   QJsonPrivate::Parser parser(json.constData(), json.length());
-   return parser.parse(error);
-}
-
-/*!
-    Returns true if the document doesn't contain any data.
- */
-bool QJsonDocument::isEmpty() const
-{
-   if (!d) {
-      return true;
-   }
-
-   return false;
-}
-
-/*!
- Returns a binary representation of the document.
-
- The binary representation is also the native format used internally in Qt,
- and is very efficient and fast to convert to and from.
-
- The binary format can be stored on disk and interchanged with other applications
- or computers. fromBinaryData() can be used to convert it back into a
- JSON document.
-
- \sa fromBinaryData()
- */
-QByteArray QJsonDocument::toBinaryData() const
-{
-   if (!d || !d->rawData) {
-      return QByteArray();
-   }
-
-   return QByteArray(d->rawData, d->header->root()->size + sizeof(QJsonPrivate::Header));
-}
-
-/*!
-    Returns true if the document contains an array.
-
-    \sa array(), isObject()
- */
-bool QJsonDocument::isArray() const
-{
-   if (!d) {
-      return false;
-   }
-
-   QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;
-   return h->root()->isArray();
-}
-
-/*!
-    Returns true if the document contains an object.
-
-    \sa object(), isArray()
- */
-bool QJsonDocument::isObject() const
-{
-   if (!d) {
-      return false;
-   }
-
-   QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;
-   return h->root()->isObject();
-}
-
-/*!
-    Returns the QJsonObject contained in the document.
-
-    Returns an empty object if the document contains an
-    array.
-
-    \sa isObject(), array(), setObject()
- */
-QJsonObject QJsonDocument::object() const
-{
-   if (d) {
-      QJsonPrivate::Base *b = d->header->root();
-      if (b->isObject()) {
-         return QJsonObject(d, static_cast<QJsonPrivate::Object *>(b));
-      }
-   }
-   return QJsonObject();
-}
-
-/*!
-    Returns the QJsonArray contained in the document.
-
-    Returns an empty array if the document contains an
-    object.
-
-    \sa isArray(), object(), setArray()
- */
-QJsonArray QJsonDocument::array() const
-{
-   if (d) {
-      QJsonPrivate::Base *b = d->header->root();
-      if (b->isArray()) {
-         return QJsonArray(d, static_cast<QJsonPrivate::Array *>(b));
-      }
-   }
-   return QJsonArray();
-}
-
-/*!
-    Sets \a object as the main object of this document.
-
-    \sa setArray(), object()
- */
-void QJsonDocument::setObject(const QJsonObject &object)
-{
-   if (d && !d->ref.deref()) {
-      delete d;
-   }
-
-   d = object.d;
-
-   if (!d) {
-      d = new QJsonPrivate::Data(0, QJsonValue::Object);
-   } else if (d->compactionCounter || object.o != d->header->root()) {
-      QJsonObject o(object);
-      if (d->compactionCounter) {
-         o.compact();
-      } else {
-         o.detach();
-      }
-      d = o.d;
-      d->ref.ref();
-      return;
-   }
-   d->ref.ref();
-}
-
-/*!
-    Sets \a array as the main object of this document.
-
-    \sa setObject(), array()
- */
-void QJsonDocument::setArray(const QJsonArray &array)
-{
-   if (d && !d->ref.deref()) {
-      delete d;
-   }
-
-   d = array.d;
-
-   if (!d) {
-      d = new QJsonPrivate::Data(0, QJsonValue::Array);
-   } else if (d->compactionCounter || array.a != d->header->root()) {
-      QJsonArray a(array);
-      if (d->compactionCounter) {
-         a.compact();
-      } else {
-         a.detach();
-      }
-      d = a.d;
-      d->ref.ref();
-      return;
-   }
-   d->ref.ref();
-}
-
-/*!
-    Returns \c true if the \a other document is equal to this document.
- */
-bool QJsonDocument::operator==(const QJsonDocument &other) const
-{
-   if (d == other.d) {
-      return true;
-   }
-
-   if (!d || !other.d) {
-      return false;
-   }
-
-   if (d->header->root()->isArray() != other.d->header->root()->isArray()) {
-      return false;
-   }
-
-   if (d->header->root()->isObject())
-      return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root()))
-             == QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.d->header->root()));
-   else
-      return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root()))
-             == QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.d->header->root()));
-}
-
-/*!
- \fn bool QJsonDocument::operator!=(const QJsonDocument &other) const
-
-    returns \c true if \a other is not equal to this document
- */
-
-/*!
-    returns true if this document is null.
-
-    Null documents are documents created through the default constructor.
-
-    Documents created from UTF-8 encoded text or the binary format are
-    validated during parsing. If validation fails, the returned document
-    will also be null.
- */
-bool QJsonDocument::isNull() const
-{
-   return (d == 0);
-}
-
-QDebug operator<<(QDebug dbg, const QJsonDocument &o)
-{
-   if (!o.d) {
-      dbg << "QJsonDocument()";
-      return dbg;
-   }
-   QByteArray json;
-   if (o.d->header->root()->isArray()) {
-      QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(o.d->header->root()), json, 0, true);
-   } else {
-      QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(o.d->header->root()), json, 0, true);
-   }
-   dbg.nospace() << "QJsonDocument("
-                 << json.constData() // print as utf-8 string without extra quotation marks
-                 << ")";
-   return dbg.space();
-}
-
-QT_END_NAMESPACE
diff --git a/src/core/json/qjsondocument.h b/src/core/json/qjsondocument.h
deleted file mode 100644 (file)
index cc8868c..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONDOCUMENT_H
-#define QJSONDOCUMENT_H
-
-#include <QtCore/qjsonvalue.h>
-
-QT_BEGIN_NAMESPACE
-
-
-class QDebug;
-
-namespace QJsonPrivate {
-class Parser;
-}
-
-struct Q_CORE_EXPORT QJsonParseError {
-   enum ParseError {
-      NoError = 0,
-      UnterminatedObject,
-      MissingNameSeparator,
-      UnterminatedArray,
-      MissingValueSeparator,
-      IllegalValue,
-      TerminationByNumber,
-      IllegalNumber,
-      IllegalEscapeSequence,
-      IllegalUTF8String,
-      UnterminatedString,
-      MissingObject,
-      DeepNesting,
-      DocumentTooLarge
-   };
-
-   QString    errorString() const;
-
-   int        offset;
-   ParseError error;
-};
-
-class Q_CORE_EXPORT QJsonDocument
-{
- public:
-
-#ifdef Q_LITTLE_ENDIAN
-   static const uint BinaryFormatTag = ('q') | ('b' << 8) | ('j' << 16) | ('s' << 24);
-#else
-   static const uint BinaryFormatTag = ('q' << 24) | ('b' << 16) | ('j' << 8) | ('s');
-#endif
-
-   QJsonDocument();
-   explicit QJsonDocument(const QJsonObject &object);
-   explicit QJsonDocument(const QJsonArray &array);
-   ~QJsonDocument();
-
-   QJsonDocument(const QJsonDocument &other);
-   QJsonDocument &operator =(const QJsonDocument &other);
-
-   enum DataValidation {
-      Validate,
-      BypassValidation
-   };
-
-   static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate);
-   const char *rawData(int *size) const;
-
-   static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation  = Validate);
-   QByteArray toBinaryData() const;
-
-   static QJsonDocument fromVariant(const QVariant &variant);
-   QVariant toVariant() const;
-
-   enum JsonFormat {
-      Indented,
-      Compact
-   };
-
-   static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0);
-
-   QByteArray toJson(JsonFormat format = Indented) const;
-
-   bool isEmpty() const;
-   bool isArray() const;
-   bool isObject() const;
-
-   QJsonObject object() const;
-   QJsonArray array() const;
-
-   void setObject(const QJsonObject &object);
-   void setArray(const QJsonArray &array);
-
-   bool operator==(const QJsonDocument &other) const;
-   bool operator!=(const QJsonDocument &other) const {
-      return !(*this == other);
-   }
-
-   bool isNull() const;
-
- private:
-   friend class QJsonValue;
-   friend class QJsonPrivate::Data;
-   friend class QJsonPrivate::Parser;
-   friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
-
-   QJsonDocument(QJsonPrivate::Data *data);
-
-   QJsonPrivate::Data *d;
-};
-
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
-
-QT_END_NAMESPACE
-
-#endif // QJSONDOCUMENT_H
diff --git a/src/core/json/qjsonobject.cpp b/src/core/json/qjsonobject.cpp
deleted file mode 100644 (file)
index 16a1fc5..0000000
+++ /dev/null
@@ -1,1052 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qjsonobject.h"
-#include "qjsonvalue.h"
-#include "qjsonarray.h"
-#include "qstringlist.h"
-#include "qdebug.h"
-#include "qvariant.h"
-#include "qjson_p.h"
-#include "qjsonwriter_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QJsonObject::QJsonObject()
-   : d(0), o(0)
-{
-}
-
-/*!
-    \internal
- */
-QJsonObject::QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object)
-   : d(data), o(object)
-{
-   Q_ASSERT(d);
-   Q_ASSERT(o);
-   d->ref.ref();
-}
-
-
-/*!
-    Destroys the object.
- */
-QJsonObject::~QJsonObject()
-{
-   if (d && !d->ref.deref()) {
-      delete d;
-   }
-}
-
-/*!
-    Creates a copy of \a other.
-
-    Since QJsonObject is implicitly shared, the copy is shallow
-    as long as the object does not get modified.
- */
-QJsonObject::QJsonObject(const QJsonObject &other)
-{
-   d = other.d;
-   o = other.o;
-   if (d) {
-      d->ref.ref();
-   }
-}
-
-/*!
-    Assigns \a other to this object.
- */
-QJsonObject &QJsonObject::operator =(const QJsonObject &other)
-{
-   if (d != other.d) {
-      if (d && !d->ref.deref()) {
-         delete d;
-      }
-      d = other.d;
-      if (d) {
-         d->ref.ref();
-      }
-   }
-   o = other.o;
-
-   return *this;
-}
-
-/*!
-    Converts the variant map \a map to a QJsonObject.
-
-    The keys in \a map will be used as the keys in the JSON object,
-    and the QVariant values will be converted to JSON values.
-
-    \sa toVariantMap(), QJsonValue::fromVariant()
- */
-QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map)
-{
-   // ### this is implemented the trivial way, not the most efficient way
-
-   QJsonObject object;
-   for (QVariantMap::const_iterator it = map.constBegin(); it != map.constEnd(); ++it) {
-      object.insert(it.key(), QJsonValue::fromVariant(it.value()));
-   }
-   return object;
-}
-
-/*!
-    Converts this object to a QVariantMap.
-
-    Returns the created map.
- */
-QVariantMap QJsonObject::toVariantMap() const
-{
-   QVariantMap map;
-   if (o) {
-      for (uint i = 0; i < o->length; ++i) {
-         const QJsonPrivate::Entry *e = o->entryAt(i);
-         map.insert(e->key(), QJsonValue(d, o, e->value).toVariant());
-      }
-   }
-   return map;
-}
-
-/*!
-    Converts the variant hash \a hash to a QJsonObject.
-    \since 4.9
-
-    The keys in \a hash will be used as the keys in the JSON object,
-    and the QVariant values will be converted to JSON values.
-
-    \sa fromVariantMap(), toVariantHash(), QJsonValue::fromVariant()
- */
-QJsonObject QJsonObject::fromVariantHash(const QVariantHash &hash)
-{
-    // ### this is implemented the trivial way, not the most efficient way
-
-    QJsonObject object;
-    for (QVariantHash::const_iterator it = hash.constBegin(); it != hash.constEnd(); ++it)
-        object.insert(it.key(), QJsonValue::fromVariant(it.value()));
-    return object;
-}
-
-/*!
-    Converts this object to a QVariantHash.
-    \since 4.9
-
-    Returns the created hash.
-
-    \sa toVariantMap()
- */
-QVariantHash QJsonObject::toVariantHash() const
-{
-    QVariantHash hash;
-    if (o) {
-        for (uint i = 0; i < o->length; ++i) {
-            const QJsonPrivate::Entry *e = o->entryAt(i);
-            hash.insert(e->key(), QJsonValue(d, o, e->value).toVariant());
-        }
-    }
-    return hash;
-}
-
-
-/*!
-    Returns a list of all keys in this object.
- */
-QStringList QJsonObject::keys() const
-{
-   if (!d) {
-      return QStringList();
-   }
-
-   QStringList keys;
-   keys.reserve(o->length);
-   for (uint i = 0; i < o->length; ++i) {
-      const QJsonPrivate::Entry *e = o->entryAt(i);
-      keys.append(e->key());
-   }
-
-   return keys;
-}
-
-/*!
-    Returns the the number of (key, value) pairs stored in the object.
- */
-int QJsonObject::size() const
-{
-   if (!d) {
-      return 0;
-   }
-
-   return o->length;
-}
-
-/*!
-    Returns \c true if the object is empty. This is the same as size() == 0.
-
-    \sa size()
- */
-bool QJsonObject::isEmpty() const
-{
-   if (!d) {
-      return true;
-   }
-
-   return !o->length;
-}
-
-/*!
-    Returns a QJsonValue representing the value for the key \a key.
-
-    The returned QJsonValue is \c Undefined, if the key does not exist.
-
-    \sa QJsonValue, QJsonValue::isUndefined()
- */
-QJsonValue QJsonObject::value(const QString &key) const
-{
-   if (!d) {
-      return QJsonValue();
-   }
-
-   bool keyExists;
-   int i = o->indexOf(key, &keyExists);
-   if (!keyExists) {
-      return QJsonValue(QJsonValue::Undefined);
-   }
-   return QJsonValue(d, o, o->entryAt(i)->value);
-}
-
-/*!
-    Returns a QJsonValue representing the value for the key \a key.
-
-    This does the same as value().
-
-    The returned QJsonValue is \c Undefined, if the key does not exist.
-
-    \sa value(), QJsonValue, QJsonValue::isUndefined()
- */
-QJsonValue QJsonObject::operator [](const QString &key) const
-{
-   return value(key);
-}
-
-/*!
-    Returns a reference to the value for \a key.
-
-    The return value is of type QJsonValueRef, a helper class for QJsonArray
-    and QJsonObject. When you get an object of type QJsonValueRef, you can
-    use it as if it were a reference to a QJsonValue. If you assign to it,
-    the assignment will apply to the character in the QJsonArray of QJsonObject
-    from which you got the reference.
-
-    \sa value()
- */
-QJsonValueRef QJsonObject::operator [](const QString &key)
-{
-   // ### somewhat inefficient, as we lookup the key twice if it doesn't yet exist
-   bool keyExists = false;
-   int index = o ? o->indexOf(key, &keyExists) : -1;
-   if (!keyExists) {
-      iterator i = insert(key, QJsonValue());
-      index = i.i;
-   }
-   return QJsonValueRef(this, index);
-}
-
-/*!
-    Inserts a new item with the key \a key and a value of \a value.
-
-    If there is already an item with the key \a key then that item's value
-    is replaced with \a value.
-
-    Returns an iterator pointing to the inserted item.
-
-    If the value is QJsonValue::Undefined, it will cause the key to get removed
-    from the object. The returned iterator will then point to end()
-
-    \sa remove(), take(), QJsonObject::iterator, end()
- */
-QJsonObject::iterator QJsonObject::insert(const QString &key, const QJsonValue &value)
-{
-   if (value.t == QJsonValue::Undefined) {
-      remove(key);
-      return end();
-   }
-   QJsonValue val = value;
-
-   bool latinOrIntValue;
-   int valueSize = QJsonPrivate::Value::requiredStorage(val, &latinOrIntValue);
-
-   bool latinKey = QJsonPrivate::useCompressed(key);
-   int valueOffset = sizeof(QJsonPrivate::Entry) + QJsonPrivate::qStringSize(key, latinKey);
-   int requiredSize = valueOffset + valueSize;
-
-   detach(requiredSize + sizeof(QJsonPrivate::offset)); // offset for the new index entry
-
-   if (!o->length) {
-      o->tableOffset = sizeof(QJsonPrivate::Object);
-   }
-
-   bool keyExists = false;
-   int pos = o->indexOf(key, &keyExists);
-   if (keyExists) {
-      ++d->compactionCounter;
-   }
-
-   uint off = o->reserveSpace(requiredSize, pos, 1, keyExists);
-   if (!off) {
-      return end();
-   }
-
-   QJsonPrivate::Entry *e = o->entryAt(pos);
-   e->value.type = val.t;
-   e->value.latinKey = latinKey;
-   e->value.latinOrIntValue = latinOrIntValue;
-   e->value.value = QJsonPrivate::Value::valueToStore(val, (char *)e - (char *)o + valueOffset);
-   QJsonPrivate::copyString((char *)(e + 1), key, latinKey);
-   if (valueSize) {
-      QJsonPrivate::Value::copyData(val, (char *)e + valueOffset, latinOrIntValue);
-   }
-
-   if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) {
-      compact();
-   }
-
-   return iterator(this, pos);
-}
-
-/*!
-    Removes \a key from the object.
-
-    \sa insert(), take()
- */
-void QJsonObject::remove(const QString &key)
-{
-   if (!d) {
-      return;
-   }
-
-   bool keyExists;
-   int index = o->indexOf(key, &keyExists);
-   if (!keyExists) {
-      return;
-   }
-
-   detach();
-   o->removeItems(index, 1);
-   ++d->compactionCounter;
-   if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) {
-      compact();
-   }
-}
-
-/*!
-    Removes \a key from the object.
-
-    Returns a QJsonValue containing the value referenced by \a key.
-    If \a key was not contained in the object, the returned QJsonValue
-    is Undefined.
-
-    \sa insert(), remove(), QJsonValue
- */
-QJsonValue QJsonObject::take(const QString &key)
-{
-   if (!o) {
-      return QJsonValue(QJsonValue::Undefined);
-   }
-
-   bool keyExists;
-   int index = o->indexOf(key, &keyExists);
-   if (!keyExists) {
-      return QJsonValue(QJsonValue::Undefined);
-   }
-
-   QJsonValue v(d, o, o->entryAt(index)->value);
-   detach();
-   o->removeItems(index, 1);
-   ++d->compactionCounter;
-   if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) {
-      compact();
-   }
-
-   return v;
-}
-
-/*!
-    Returns \c true if the object contains key \a key.
-
-    \sa insert(), remove(), take()
- */
-bool QJsonObject::contains(const QString &key) const
-{
-   if (!o) {
-      return false;
-   }
-
-   bool keyExists;
-   o->indexOf(key, &keyExists);
-   return keyExists;
-}
-
-/*!
-    Returns \c true if \a other is equal to this object
- */
-bool QJsonObject::operator==(const QJsonObject &other) const
-{
-   if (o == other.o) {
-      return true;
-   }
-
-   if (!o) {
-      return !other.o->length;
-   }
-   if (!other.o) {
-      return !o->length;
-   }
-   if (o->length != other.o->length) {
-      return false;
-   }
-
-   for (uint i = 0; i < o->length; ++i) {
-      const QJsonPrivate::Entry *e = o->entryAt(i);
-      const QJsonValue v(d, o, e->value);
-      if (other.value(e->key()) != v) {
-         return false;
-      }
-   }
-
-   return true;
-}
-
-/*!
-    Returns \c true if \a other is not equal to this object
- */
-bool QJsonObject::operator!=(const QJsonObject &other) const
-{
-   return !(*this == other);
-}
-
-/*!
-    Removes the (key, value) pair pointed to by the iterator \a it
-    from the map, and returns an iterator to the next item in the
-    map.
-
-    \sa remove()
- */
-QJsonObject::iterator QJsonObject::erase(QJsonObject::iterator it)
-{
-   Q_ASSERT(d && d->ref == 1);
-
-   if (it.o != this || it.i < 0 || it.i >= (int)o->length) {
-      return iterator(this, o->length);
-   }
-
-   const int index = it.i;
-
-   o->removeItems(index, 1);
-   ++d->compactionCounter;
-   if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(o->length) / 2u) {
-      compact();
-   }
-
-   // iterator hasn't changed
-   return it;
-}
-
-/*!
-    Returns an iterator pointing to the item with key \a key in the
-    map.
-
-    If the map contains no item with key \a key, the function
-    returns end().
- */
-QJsonObject::iterator QJsonObject::find(const QString &key)
-{
-   bool keyExists = false;
-   int index = o ? o->indexOf(key, &keyExists) : 0;
-   if (!keyExists) {
-      return end();
-   }
-   detach();
-   return iterator(this, index);
-}
-
-/*! \fn QJsonObject::const_iterator QJsonObject::find(const QString &key) const
-
-    \overload
-*/
-
-/*!
-    Returns an const iterator pointing to the item with key \a key in the
-    map.
-
-    If the map contains no item with key \a key, the function
-    returns constEnd().
- */
-QJsonObject::const_iterator QJsonObject::constFind(const QString &key) const
-{
-   bool keyExists = false;
-   int index = o ? o->indexOf(key, &keyExists) : 0;
-   if (!keyExists) {
-      return end();
-   }
-   return const_iterator(this, index);
-}
-
-/*! \fn int QJsonObject::count() const
-
-    \overload
-
-    Same as size().
-*/
-
-/*! \fn int QJsonObject::length() const
-
-    \overload
-
-    Same as size().
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::begin()
-
-    Returns an \l{STL-style iterator} pointing to the first item in
-    the object.
-
-    \sa constBegin(), end()
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::begin() const
-
-    \overload
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::constBegin() const
-
-    Returns a const \l{STL-style iterator} pointing to the first item
-    in the object.
-
-    \sa begin(), constEnd()
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::end()
-
-    Returns an \l{STL-style iterator} pointing to the imaginary item
-    after the last item in the object.
-
-    \sa begin(), constEnd()
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::end() const
-
-    \overload
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::constEnd() const
-
-    Returns a const \l{STL-style iterator} pointing to the imaginary
-    item after the last item in the object.
-
-    \sa constBegin(), end()
-*/
-
-/*!
-    \fn bool QJsonObject::empty() const
-
-    This function is provided for STL compatibility. It is equivalent
-    to isEmpty(), returning \c true if the object is empty; otherwise
-    returning \c false.
-*/
-
-/*! \class QJsonObject::iterator
-    \inmodule QtCore
-    \ingroup json
-    \reentrant
-    \since 4.9
-
-    \brief The QJsonObject::iterator class provides an STL-style non-const iterator for QJsonObject.
-
-    QJsonObject::iterator allows you to iterate over a QJsonObject
-    and to modify the value (but not the key) stored under
-    a particular key. If you want to iterate over a const QJsonObject, you
-    should use QJsonObject::const_iterator. It is generally good practice to
-    use QJsonObject::const_iterator on a non-const QJsonObject as well, unless you
-    need to change the QJsonObject through the iterator. Const iterators are
-    slightly faster, and improves code readability.
-
-    The default QJsonObject::iterator constructor creates an uninitialized
-    iterator. You must initialize it using a QJsonObject function like
-    QJsonObject::begin(), QJsonObject::end(), or QJsonObject::find() before you can
-    start iterating.
-
-    Multiple iterators can be used on the same object. Existing iterators will however
-    become dangling once the object gets modified.
-
-    \sa QJsonObject::const_iterator
-*/
-
-/*! \typedef QJsonObject::iterator::difference_type
-
-    \internal
-*/
-
-/*! \typedef QJsonObject::iterator::iterator_category
-
-  A synonym for \e {std::bidirectional_iterator_tag} indicating
-  this iterator is a bidirectional iterator.
-*/
-
-/*! \typedef QJsonObject::iterator::reference
-
-    \internal
-*/
-
-/*! \typedef QJsonObject::iterator::value_type
-
-    \internal
-*/
-
-/*! \fn QJsonObject::iterator::iterator()
-
-    Constructs an uninitialized iterator.
-
-    Functions like key(), value(), and operator++() must not be
-    called on an uninitialized iterator. Use operator=() to assign a
-    value to it before using it.
-
-    \sa QJsonObject::begin(), QJsonObject::end()
-*/
-
-/*! \fn QJsonObject::iterator::iterator(QJsonObject *obj, int index)
-    \internal
-*/
-
-/*! \fn QString QJsonObject::iterator::key() const
-
-    Returns the current item's key.
-
-    There is no direct way of changing an item's key through an
-    iterator, although it can be done by calling QJsonObject::erase()
-    followed by QJsonObject::insert().
-
-    \sa value()
-*/
-
-/*! \fn QJsonValueRef QJsonObject::iterator::value() const
-
-    Returns a modifiable reference to the current item's value.
-
-    You can change the value of an item by using value() on
-    the left side of an assignment.
-
-    The return value is of type QJsonValueRef, a helper class for QJsonArray
-    and QJsonObject. When you get an object of type QJsonValueRef, you can
-    use it as if it were a reference to a QJsonValue. If you assign to it,
-    the assignment will apply to the character in the QJsonArray of QJsonObject
-    from which you got the reference.
-
-    \sa key(), operator*()
-*/
-
-/*! \fn QJsonValueRef QJsonObject::iterator::operator*() const
-
-    Returns a modifiable reference to the current item's value.
-
-    Same as value().
-
-    The return value is of type QJsonValueRef, a helper class for QJsonArray
-    and QJsonObject. When you get an object of type QJsonValueRef, you can
-    use it as if it were a reference to a QJsonValue. If you assign to it,
-    the assignment will apply to the character in the QJsonArray of QJsonObject
-    from which you got the reference.
-
-    \sa key()
-*/
-
-/*!
-    \fn bool QJsonObject::iterator::operator==(const iterator &other) const
-    \fn bool QJsonObject::iterator::operator==(const const_iterator &other) const
-
-    Returns \c true if \a other points to the same item as this
-    iterator; otherwise returns \c false.
-
-    \sa operator!=()
-*/
-
-/*!
-    \fn bool QJsonObject::iterator::operator!=(const iterator &other) const
-    \fn bool QJsonObject::iterator::operator!=(const const_iterator &other) const
-
-    Returns \c true if \a other points to a different item than this
-    iterator; otherwise returns \c false.
-
-    \sa operator==()
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::iterator::operator++()
-
-    The prefix ++ operator, \c{++i}, advances the iterator to the
-    next item in the object and returns an iterator to the new current
-    item.
-
-    Calling this function on QJsonObject::end() leads to undefined results.
-
-    \sa operator--()
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::iterator::operator++(int)
-
-    \overload
-
-    The postfix ++ operator, \c{i++}, advances the iterator to the
-    next item in the object and returns an iterator to the previously
-    current item.
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::iterator::operator--()
-
-    The prefix -- operator, \c{--i}, makes the preceding item
-    current and returns an iterator pointing to the new current item.
-
-    Calling this function on QJsonObject::begin() leads to undefined
-    results.
-
-    \sa operator++()
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::iterator::operator--(int)
-
-    \overload
-
-    The postfix -- operator, \c{i--}, makes the preceding item
-    current and returns an iterator pointing to the previously
-    current item.
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::iterator::operator+(int j) const
-
-    Returns an iterator to the item at \a j positions forward from
-    this iterator. If \a j is negative, the iterator goes backward.
-
-    \sa operator-()
-
-*/
-
-/*! \fn QJsonObject::iterator QJsonObject::iterator::operator-(int j) const
-
-    Returns an iterator to the item at \a j positions backward from
-    this iterator. If \a j is negative, the iterator goes forward.
-
-    \sa operator+()
-*/
-
-/*! \fn QJsonObject::iterator &QJsonObject::iterator::operator+=(int j)
-
-    Advances the iterator by \a j items. If \a j is negative, the
-    iterator goes backward.
-
-    \sa operator-=(), operator+()
-*/
-
-/*! \fn QJsonObject::iterator &QJsonObject::iterator::operator-=(int j)
-
-    Makes the iterator go back by \a j items. If \a j is negative,
-    the iterator goes forward.
-
-    \sa operator+=(), operator-()
-*/
-
-/*!
-    \class QJsonObject::const_iterator
-    \inmodule QtCore
-    \brief The QJsonObject::const_iterator class provides an STL-style const iterator for QJsonObject.
-
-    QJsonObject::const_iterator allows you to iterate over a QJsonObject.
-    If you want to modify the QJsonObject as you iterate
-    over it, you must use QJsonObject::iterator instead. It is generally
-    good practice to use QJsonObject::const_iterator on a non-const QJsonObject as
-    well, unless you need to change the QJsonObject through the iterator.
-    Const iterators are slightly faster and improves code
-    readability.
-
-    The default QJsonObject::const_iterator constructor creates an
-    uninitialized iterator. You must initialize it using a QJsonObject
-    function like QJsonObject::constBegin(), QJsonObject::constEnd(), or
-    QJsonObject::find() before you can start iterating.
-
-    Multiple iterators can be used on the same object. Existing iterators
-    will however become dangling if the object gets modified.
-
-    \sa QJsonObject::iterator
-*/
-
-/*! \typedef QJsonObject::const_iterator::difference_type
-
-    \internal
-*/
-
-/*! \typedef QJsonObject::const_iterator::iterator_category
-
-  A synonym for \e {std::bidirectional_iterator_tag} indicating
-  this iterator is a bidirectional iterator.
-*/
-
-/*! \typedef QJsonObject::const_iterator::reference
-
-    \internal
-*/
-
-/*! \typedef QJsonObject::const_iterator::value_type
-
-    \internal
-*/
-
-/*! \fn QJsonObject::const_iterator::const_iterator()
-
-    Constructs an uninitialized iterator.
-
-    Functions like key(), value(), and operator++() must not be
-    called on an uninitialized iterator. Use operator=() to assign a
-    value to it before using it.
-
-    \sa QJsonObject::constBegin(), QJsonObject::constEnd()
-*/
-
-/*! \fn QJsonObject::const_iterator::const_iterator(const QJsonObject *obj, int index)
-    \internal
-*/
-
-/*! \fn QJsonObject::const_iterator::const_iterator(const iterator &other)
-
-    Constructs a copy of \a other.
-*/
-
-/*! \fn QString QJsonObject::const_iterator::key() const
-
-    Returns the current item's key.
-
-    \sa value()
-*/
-
-/*! \fn QJsonValue QJsonObject::const_iterator::value() const
-
-    Returns the current item's value.
-
-    \sa key(), operator*()
-*/
-
-/*! \fn QJsonValue QJsonObject::const_iterator::operator*() const
-
-    Returns the current item's value.
-
-    Same as value().
-
-    \sa key()
-*/
-
-/*! \fn bool QJsonObject::const_iterator::operator==(const const_iterator &other) const
-    \fn bool QJsonObject::const_iterator::operator==(const iterator &other) const
-
-    Returns \c true if \a other points to the same item as this
-    iterator; otherwise returns \c false.
-
-    \sa operator!=()
-*/
-
-/*! \fn bool QJsonObject::const_iterator::operator!=(const const_iterator &other) const
-    \fn bool QJsonObject::const_iterator::operator!=(const iterator &other) const
-
-    Returns \c true if \a other points to a different item than this
-    iterator; otherwise returns \c false.
-
-    \sa operator==()
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator++()
-
-    The prefix ++ operator, \c{++i}, advances the iterator to the
-    next item in the object and returns an iterator to the new current
-    item.
-
-    Calling this function on QJsonObject::end() leads to undefined results.
-
-    \sa operator--()
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator++(int)
-
-    \overload
-
-    The postfix ++ operator, \c{i++}, advances the iterator to the
-    next item in the object and returns an iterator to the previously
-    current item.
-*/
-
-/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator--()
-
-    The prefix -- operator, \c{--i}, makes the preceding item
-    current and returns an iterator pointing to the new current item.
-
-    Calling this function on QJsonObject::begin() leads to undefined
-    results.
-
-    \sa operator++()
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator--(int)
-
-    \overload
-
-    The postfix -- operator, \c{i--}, makes the preceding item
-    current and returns an iterator pointing to the previously
-    current item.
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator+(int j) const
-
-    Returns an iterator to the item at \a j positions forward from
-    this iterator. If \a j is negative, the iterator goes backward.
-
-    This operation can be slow for large \a j values.
-
-    \sa operator-()
-*/
-
-/*! \fn QJsonObject::const_iterator QJsonObject::const_iterator::operator-(int j) const
-
-    Returns an iterator to the item at \a j positions backward from
-    this iterator. If \a j is negative, the iterator goes forward.
-
-    This operation can be slow for large \a j values.
-
-    \sa operator+()
-*/
-
-/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator+=(int j)
-
-    Advances the iterator by \a j items. If \a j is negative, the
-    iterator goes backward.
-
-    This operation can be slow for large \a j values.
-
-    \sa operator-=(), operator+()
-*/
-
-/*! \fn QJsonObject::const_iterator &QJsonObject::const_iterator::operator-=(int j)
-
-    Makes the iterator go back by \a j items. If \a j is negative,
-    the iterator goes forward.
-
-    This operation can be slow for large \a j values.
-
-    \sa operator+=(), operator-()
-*/
-
-
-/*!
-    \internal
- */
-void QJsonObject::detach(uint reserve)
-{
-   if (!d) {
-      d = new QJsonPrivate::Data(reserve, QJsonValue::Object);
-      o = static_cast<QJsonPrivate::Object *>(d->header->root());
-      d->ref.ref();
-      return;
-   }
-   if (reserve == 0 && d->ref == 1) {
-      return;
-   }
-
-   QJsonPrivate::Data *x = d->clone(o, reserve);
-   x->ref.ref();
-   if (!d->ref.deref()) {
-      delete d;
-   }
-   d = x;
-   o = static_cast<QJsonPrivate::Object *>(d->header->root());
-}
-
-/*!
-    \internal
- */
-void QJsonObject::compact()
-{
-   if (!d || !d->compactionCounter) {
-      return;
-   }
-
-   detach();
-   d->compact();
-   o = static_cast<QJsonPrivate::Object *>(d->header->root());
-}
-
-/*!
-    \internal
- */
-QString QJsonObject::keyAt(int i) const
-{
-   Q_ASSERT(o && i >= 0 && i < (int)o->length);
-
-   const QJsonPrivate::Entry *e = o->entryAt(i);
-   return e->key();
-}
-
-/*!
-    \internal
- */
-QJsonValue QJsonObject::valueAt(int i) const
-{
-   if (!o || i < 0 || i >= (int)o->length) {
-      return QJsonValue(QJsonValue::Undefined);
-   }
-
-   const QJsonPrivate::Entry *e = o->entryAt(i);
-   return QJsonValue(d, o, e->value);
-}
-
-/*!
-    \internal
- */
-void QJsonObject::setValueAt(int i, const QJsonValue &val)
-{
-   Q_ASSERT(o && i >= 0 && i < (int)o->length);
-
-   const QJsonPrivate::Entry *e = o->entryAt(i);
-   insert(e->key(), val);
-}
-
-QDebug operator<<(QDebug dbg, const QJsonObject &o)
-{
-   if (!o.o) {
-      dbg << "QJsonObject()";
-      return dbg;
-   }
-   QByteArray json;
-   QJsonPrivate::Writer::objectToJson(o.o, json, 0, true);
-   dbg.nospace() << "QJsonObject("
-                 << json.constData() // print as utf-8 string without extra quotation marks
-                 << ")";
-   return dbg.space();
-}
-
-QT_END_NAMESPACE
diff --git a/src/core/json/qjsonobject.h b/src/core/json/qjsonobject.h
deleted file mode 100644 (file)
index 42fa0e4..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONOBJECT_H
-#define QJSONOBJECT_H
-
-#include "qjsonvalue.h"
-#include <QtCore/qcontainerfwd.h>
-#include <QtCore/qiterator.h>
-
-QT_BEGIN_NAMESPACE
-
-
-class QDebug;
-typedef QMap<QString, QVariant> QVariantMap;
-typedef QHash<QString, QVariant> QVariantHash;
-
-class Q_CORE_EXPORT QJsonObject
-{
- public:
-   QJsonObject();
-   ~QJsonObject();
-
-   QJsonObject(const QJsonObject &other);
-   QJsonObject &operator =(const QJsonObject &other);
-
-   static QJsonObject fromVariantMap(const QVariantMap &map);
-   QVariantMap toVariantMap() const;
-   static QJsonObject fromVariantHash(const QVariantHash &map);
-   QVariantHash toVariantHash() const;
-
-   QStringList keys() const;
-   int size() const;
-   inline int count() const {
-      return size();
-   }
-   inline int length() const {
-      return size();
-   }
-   bool isEmpty() const;
-
-   QJsonValue value(const QString &key) const;
-   QJsonValue operator[] (const QString &key) const;
-   QJsonValueRef operator[] (const QString &key);
-
-   void remove(const QString &key);
-   QJsonValue take(const QString &key);
-   bool contains(const QString &key) const;
-
-   bool operator==(const QJsonObject &other) const;
-   bool operator!=(const QJsonObject &other) const;
-
-   class const_iterator;
-
-   class iterator
-   {
-      friend class const_iterator;
-      friend class QJsonObject;
-      QJsonObject *o;
-      int i;
-
-    public:
-      typedef std::bidirectional_iterator_tag iterator_category;
-      typedef int difference_type;
-      typedef QJsonValue value_type;
-      typedef QJsonValueRefPtr pointer;
-      typedef QJsonValueRef reference;
-
-      inline iterator() : o(0), i(0) {}
-      inline iterator(QJsonObject *obj, int index) : o(obj), i(index) {}
-
-      inline QString key() const {
-         return o->keyAt(i);
-      }
-      inline QJsonValueRef value() const {
-         return QJsonValueRef(o, i);
-      }
-      inline QJsonValueRef operator*() const {
-         return QJsonValueRef(o, i);
-      }
-      inline QJsonValueRefPtr operator->() const { 
-         return QJsonValueRefPtr(o, i);
-      }
-      inline bool operator==(const iterator &other) const {
-         return i == other.i;
-      }
-      inline bool operator!=(const iterator &other) const {
-         return i != other.i;
-      }
-
-      inline iterator &operator++() {
-         ++i;
-         return *this;
-      }
-      inline iterator operator++(int) {
-         iterator r = *this;
-         ++i;
-         return r;
-      }
-      inline iterator &operator--() {
-         --i;
-         return *this;
-      }
-      inline iterator operator--(int) {
-         iterator r = *this;
-         --i;
-         return r;
-      }
-      inline iterator operator+(int j) const {
-         iterator r = *this;
-         r.i += j;
-         return r;
-      }
-      inline iterator operator-(int j) const {
-         return operator+(-j);
-      }
-      inline iterator &operator+=(int j) {
-         i += j;
-         return *this;
-      }
-      inline iterator &operator-=(int j) {
-         i -= j;
-         return *this;
-      }
-
-    public:
-      inline bool operator==(const const_iterator &other) const {
-         return i == other.i;
-      }
-      inline bool operator!=(const const_iterator &other) const {
-         return i != other.i;
-      }
-   };
-   friend class iterator;
-
-   class const_iterator
-   {
-      friend class iterator;
-      const QJsonObject *o;
-      int i;
-
-    public:
-      typedef std::bidirectional_iterator_tag iterator_category;
-      typedef int difference_type;
-      typedef QJsonValue* value_type;
-      typedef QJsonValuePtr pointer;
-      typedef QJsonValue reference;
-
-      inline const_iterator() : o(0), i(0) {}
-      inline const_iterator(const QJsonObject *obj, int index)
-         : o(obj), i(index) {}
-      inline const_iterator(const iterator &other)
-         : o(other.o), i(other.i) {}
-
-      inline QString key() const {
-         return o->keyAt(i);
-      }
-      inline QJsonValue value() const {
-         return o->valueAt(i);
-      }
-      inline QJsonValue operator*() const {
-         return o->valueAt(i);
-      }
-      inline QJsonValuePtr operator->() const { 
-         return  QJsonValuePtr(o->valueAt(i));
-      }
-      inline bool operator==(const const_iterator &other) const {
-         return i == other.i;
-      }
-      inline bool operator!=(const const_iterator &other) const {
-         return i != other.i;
-      }
-
-      inline const_iterator &operator++() {
-         ++i;
-         return *this;
-      }
-      inline const_iterator operator++(int) {
-         const_iterator r = *this;
-         ++i;
-         return r;
-      }
-      inline const_iterator &operator--() {
-         --i;
-         return *this;
-      }
-      inline const_iterator operator--(int) {
-         const_iterator r = *this;
-         --i;
-         return r;
-      }
-      inline const_iterator operator+(int j) const {
-         const_iterator r = *this;
-         r.i += j;
-         return r;
-      }
-      inline const_iterator operator-(int j) const {
-         return operator+(-j);
-      }
-      inline const_iterator &operator+=(int j) {
-         i += j;
-         return *this;
-      }
-      inline const_iterator &operator-=(int j) {
-         i -= j;
-         return *this;
-      }
-
-      inline bool operator==(const iterator &other) const {
-         return i == other.i;
-      }
-      inline bool operator!=(const iterator &other) const {
-         return i != other.i;
-      }
-   };
-   friend class const_iterator;
-
-   // STL style
-   inline iterator begin() {
-      detach();
-      return iterator(this, 0);
-   }
-   inline const_iterator begin() const {
-      return const_iterator(this, 0);
-   }
-   inline const_iterator constBegin() const {
-      return const_iterator(this, 0);
-   }
-   inline iterator end() {
-      detach();
-      return iterator(this, size());
-   }
-   inline const_iterator end() const {
-      return const_iterator(this, size());
-   }
-   inline const_iterator constEnd() const {
-      return const_iterator(this, size());
-   }
-   iterator erase(iterator it);
-
-   // more Qt
-   typedef iterator Iterator;
-   typedef const_iterator ConstIterator;
-   iterator find(const QString &key);
-   const_iterator find(const QString &key) const {
-      return constFind(key);
-   }
-   const_iterator constFind(const QString &key) const;
-   iterator insert(const QString &key, const QJsonValue &value);
-
-   // STL compatibility
-   typedef QJsonValue mapped_type;
-   typedef QString key_type;
-   typedef int size_type;
-
-   inline bool empty() const {
-      return isEmpty();
-   }
-
- private:
-   friend class QJsonPrivate::Data;
-   friend class QJsonValue;
-   friend class QJsonDocument;
-   friend class QJsonValueRef;
-
-   friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &);
-
-   QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object);
-   void detach(uint reserve = 0);
-   void compact();
-
-   QString keyAt(int i) const;
-   QJsonValue valueAt(int i) const;
-   void setValueAt(int i, const QJsonValue &val);
-
-   QJsonPrivate::Data *d;
-   QJsonPrivate::Object *o;
-};
-
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &);
-
-QT_END_NAMESPACE
-
-#endif // QJSONOBJECT_H
diff --git a/src/core/json/qjsonparser.cpp b/src/core/json/qjsonparser.cpp
deleted file mode 100644 (file)
index 06d123c..0000000
+++ /dev/null
@@ -1,984 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qcoreapplication.h"
-#include "qdebug.h"
-#include "qjsonparser_p.h"
-#include "qjson_p.h"
-
-//#define PARSER_DEBUG
-#ifdef PARSER_DEBUG
-static int indent = 0;
-#define BEGIN qDebug() << QByteArray(4*indent++, ' ').constData() << "pos=" << current
-#define END --indent
-#define DEBUG qDebug() << QByteArray(4*indent, ' ').constData()
-#else
-#define BEGIN if (1) ; else qDebug()
-#define END do {} while (0)
-#define DEBUG if (1) ; else qDebug()
-#endif
-
-static const int nestingLimit = 1024;
-
-QT_BEGIN_NAMESPACE
-
-// error strings for the JSON parser
-#define JSONERR_OK          QT_TRANSLATE_NOOP("QJsonParseError", "no error occurred")
-#define JSONERR_UNTERM_OBJ  QT_TRANSLATE_NOOP("QJsonParseError", "unterminated object")
-#define JSONERR_MISS_NSEP   QT_TRANSLATE_NOOP("QJsonParseError", "missing name separator")
-#define JSONERR_UNTERM_AR   QT_TRANSLATE_NOOP("QJsonParseError", "unterminated array")
-#define JSONERR_MISS_VSEP   QT_TRANSLATE_NOOP("QJsonParseError", "missing value separator")
-#define JSONERR_ILLEGAL_VAL QT_TRANSLATE_NOOP("QJsonParseError", "illegal value")
-#define JSONERR_END_OF_NUM  QT_TRANSLATE_NOOP("QJsonParseError", "invalid termination by number")
-#define JSONERR_ILLEGAL_NUM QT_TRANSLATE_NOOP("QJsonParseError", "illegal number")
-#define JSONERR_STR_ESC_SEQ QT_TRANSLATE_NOOP("QJsonParseError", "invalid escape sequence")
-#define JSONERR_STR_UTF8    QT_TRANSLATE_NOOP("QJsonParseError", "invalid UTF8 string")
-#define JSONERR_UTERM_STR   QT_TRANSLATE_NOOP("QJsonParseError", "unterminated string")
-#define JSONERR_MISS_OBJ    QT_TRANSLATE_NOOP("QJsonParseError", "object is missing after a comma")
-#define JSONERR_DEEP_NEST   QT_TRANSLATE_NOOP("QJsonParseError", "too deeply nested document")
-#define JSONERR_DOC_LARGE   QT_TRANSLATE_NOOP("QJsonParseError", "too large document")
-
-/*!
-    \class QJsonParseError
-    \inmodule QtCore
-    \ingroup json
-    \reentrant
-    \since 4.9
-
-    \brief The QJsonParseError class is used to report errors during JSON parsing.
-*/
-
-/*!
-    \enum QJsonParseError::ParseError
-
-    This enum describes the type of error that occurred during the parsing of a JSON document.
-
-    \value NoError                  No error occurred
-    \value UnterminatedObject       An object is not correctly terminated with a closing curly bracket
-    \value MissingNameSeparator     A comma separating different items is missing
-    \value UnterminatedArray        The array is not correctly terminated with a closing square bracket
-    \value MissingValueSeparator    A colon separating keys from values inside objects is missing
-    \value IllegalValue             The value is illegal
-    \value TerminationByNumber      The input stream ended while parsing a number
-    \value IllegalNumber            The number is not well formed
-    \value IllegalEscapeSequence    An illegal escape sequence occurred in the input
-    \value IllegalUTF8String        An illegal UTF8 sequence occurred in the input
-    \value UnterminatedString       A string wasn't terminated with a quote
-    \value MissingObject            An object was expected but couldn't be found
-    \value DeepNesting              The JSON document is too deeply nested for the parser to parse it
-    \value DocumentTooLarge         The JSON document is too large for the parser to parse it
-*/
-
-/*!
-    \variable QJsonParseError::error
-
-    Contains the type of the parse error. Is equal to QJsonParseError::NoError if the document
-    was parsed correctly.
-
-    \sa ParseError, errorString()
-*/
-
-
-/*!
-    \variable QJsonParseError::offset
-
-    Contains the offset in the input string where the parse error occurred.
-
-    \sa error, errorString()
-*/
-
-/*!
-  Returns the human-readable message appropriate to the reported JSON parsing error.
-
-  \sa error
- */
-QString QJsonParseError::errorString() const
-{
-   const char *sz = "";
-   switch (error) {
-      case NoError:
-         sz = JSONERR_OK;
-         break;
-      case UnterminatedObject:
-         sz = JSONERR_UNTERM_OBJ;
-         break;
-      case MissingNameSeparator:
-         sz = JSONERR_MISS_NSEP;
-         break;
-      case UnterminatedArray:
-         sz = JSONERR_UNTERM_AR;
-         break;
-      case MissingValueSeparator:
-         sz = JSONERR_MISS_VSEP;
-         break;
-      case IllegalValue:
-         sz = JSONERR_ILLEGAL_VAL;
-         break;
-      case TerminationByNumber:
-         sz = JSONERR_END_OF_NUM;
-         break;
-      case IllegalNumber:
-         sz = JSONERR_ILLEGAL_NUM;
-         break;
-      case IllegalEscapeSequence:
-         sz = JSONERR_STR_ESC_SEQ;
-         break;
-      case IllegalUTF8String:
-         sz = JSONERR_STR_UTF8;
-         break;
-      case UnterminatedString:
-         sz = JSONERR_UTERM_STR;
-         break;
-      case MissingObject:
-         sz = JSONERR_MISS_OBJ;
-         break;
-      case DeepNesting:
-         sz = JSONERR_DEEP_NEST;
-         break;
-      case DocumentTooLarge:
-         sz = JSONERR_DOC_LARGE;
-         break;
-   }
-
-   return QCoreApplication::translate("QJsonParseError", sz);
-}
-
-using namespace QJsonPrivate;
-
-Parser::Parser(const char *json, int length)
-   : head(json), json(json), data(0), dataLength(0), current(0), nestingLevel(0), lastError(QJsonParseError::NoError)
-{
-   end = json + length;
-}
-
-
-
-/*
-
-begin-array     = ws %x5B ws  ; [ left square bracket
-
-begin-object    = ws %x7B ws  ; { left curly bracket
-
-end-array       = ws %x5D ws  ; ] right square bracket
-
-end-object      = ws %x7D ws  ; } right curly bracket
-
-name-separator  = ws %x3A ws  ; : colon
-
-value-separator = ws %x2C ws  ; , comma
-
-Insignificant whitespace is allowed before or after any of the six
-structural characters.
-
-ws = *(
-          %x20 /              ; WhiteSpace
-          %x09 /              ; Horizontal tab
-          %x0A /              ; Line feed or New line
-          %x0D                ; Carriage return
-      )
-
-*/
-
-enum {
-   WhiteSpace = 0x20,
-   Tab = 0x09,
-   LineFeed = 0x0a,
-   Return = 0x0d,
-   BeginArray = 0x5b,
-   BeginObject = 0x7b,
-   EndArray = 0x5d,
-   EndObject = 0x7d,
-   NameSeparator = 0x3a,
-   ValueSeparator = 0x2c,
-   Quote = 0x22
-};
-
-void Parser::eatBOM()
-{
-   // eat UTF-8 byte order mark
-   uchar utf8bom[3] = { 0xef, 0xbb, 0xbf };
-   if (end - json > 3 &&
-         (uchar)json[0] == utf8bom[0] &&
-         (uchar)json[1] == utf8bom[1] &&
-         (uchar)json[2] == utf8bom[2]) {
-      json += 3;
-   }
-}
-
-bool Parser::eatSpace()
-{
-   while (json < end) {
-      if (*json > WhiteSpace) {
-         break;
-      }
-      if (*json != WhiteSpace &&
-            *json != Tab &&
-            *json != LineFeed &&
-            *json != Return) {
-         break;
-      }
-      ++json;
-   }
-   return (json < end);
-}
-
-char Parser::nextToken()
-{
-   if (!eatSpace()) {
-      return 0;
-   }
-   char token = *json++;
-   switch (token) {
-      case BeginArray:
-      case BeginObject:
-      case NameSeparator:
-      case ValueSeparator:
-      case EndArray:
-      case EndObject:
-         eatSpace();
-      case Quote:
-         break;
-      default:
-         token = 0;
-         break;
-   }
-   return token;
-}
-
-/*
-    JSON-text = object / array
-*/
-QJsonDocument Parser::parse(QJsonParseError *error)
-{
-#ifdef PARSER_DEBUG
-   indent = 0;
-   qDebug() << ">>>>> parser begin";
-#endif
-   // allocate some space
-   dataLength = qMax(end - json, (ptrdiff_t) 256);
-   data = (char *)malloc(dataLength);
-
-   // fill in Header data
-   QJsonPrivate::Header *h = (QJsonPrivate::Header *)data;
-   h->tag = QJsonDocument::BinaryFormatTag;
-   h->version = 1u;
-
-   current = sizeof(QJsonPrivate::Header);
-
-   eatBOM();
-   char token = nextToken();
-
-   DEBUG << hex << (uint)token;
-   if (token == BeginArray) {
-      if (!parseArray()) {
-         goto error;
-      }
-   } else if (token == BeginObject) {
-      if (!parseObject()) {
-         goto error;
-      }
-   } else {
-      lastError = QJsonParseError::IllegalValue;
-      goto error;
-   }
-
-   END;
-   {
-      if (error) {
-         error->offset = 0;
-         error->error = QJsonParseError::NoError;
-      }
-      return QJsonDocument(new QJsonPrivate::Data(data, current));
-   }
-
-error:
-#ifdef PARSER_DEBUG
-   qDebug() << ">>>>> parser error";
-#endif
-   if (error) {
-      error->offset = json - head;
-      error->error  = lastError;
-   }
-   free(data);
-   return QJsonDocument();
-}
-
-
-void Parser::ParsedObject::insert(uint offset)
-{
-   const QJsonPrivate::Entry *newEntry = reinterpret_cast<const QJsonPrivate::Entry *>(parser->data + objectPosition +
-                                         offset);
-   int min = 0;
-   int n = offsets.size();
-   while (n > 0) {
-      int half = n >> 1;
-      int middle = min + half;
-      if (*entryAt(middle) >= *newEntry) {
-         n = half;
-      } else {
-         min = middle + 1;
-         n -= half + 1;
-      }
-   }
-   if (min < offsets.size() && *entryAt(min) == *newEntry) {
-      offsets[min] = offset;
-   } else {
-      offsets.insert(min, offset);
-   }
-}
-
-/*
-    object = begin-object [ member *( value-separator member ) ]
-    end-object
-*/
-
-bool Parser::parseObject()
-{
-   if (++nestingLevel > nestingLimit) {
-      lastError = QJsonParseError::DeepNesting;
-      return false;
-   }
-
-   int objectOffset = reserveSpace(sizeof(QJsonPrivate::Object));
-   BEGIN << "parseObject pos=" << objectOffset << current << json;
-
-   ParsedObject parsedObject(this, objectOffset);
-
-   char token = nextToken();
-   while (token == Quote) {
-      int off = current - objectOffset;
-      if (!parseMember(objectOffset)) {
-         return false;
-      }
-      parsedObject.insert(off);
-      token = nextToken();
-      if (token != ValueSeparator) {
-         break;
-      }
-      token = nextToken();
-      if (token == EndObject) {
-         lastError = QJsonParseError::MissingObject;
-         return false;
-      }
-   }
-
-   DEBUG << "end token=" << token;
-   if (token != EndObject) {
-      lastError = QJsonParseError::UnterminatedObject;
-      return false;
-   }
-
-   DEBUG << "numEntries" << parsedObject.offsets.size();
-   int table = objectOffset;
-   // finalize the object
-   if (parsedObject.offsets.size()) {
-      int tableSize = parsedObject.offsets.size() * sizeof(uint);
-      table = reserveSpace(tableSize);
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
-      memcpy(data + table, parsedObject.offsets.constData(), tableSize);
-#else
-      offset *o = (offset *)(data + table);
-      for (int i = 0; i < tableSize; ++i) {
-         o[i] = parsedObject.offsets[i];
-      }
-
-#endif
-   }
-
-   QJsonPrivate::Object *o = (QJsonPrivate::Object *)(data + objectOffset);
-   o->tableOffset = table - objectOffset;
-   o->size = current - objectOffset;
-   o->is_object = true;
-   o->length = parsedObject.offsets.size();
-
-   DEBUG << "current=" << current;
-   END;
-
-   --nestingLevel;
-   return true;
-}
-
-/*
-    member = string name-separator value
-*/
-bool Parser::parseMember(int baseOffset)
-{
-   int entryOffset = reserveSpace(sizeof(QJsonPrivate::Entry));
-   BEGIN << "parseMember pos=" << entryOffset;
-
-   bool latin1;
-   if (!parseString(&latin1)) {
-      return false;
-   }
-   char token = nextToken();
-   if (token != NameSeparator) {
-      lastError = QJsonParseError::MissingNameSeparator;
-      return false;
-   }
-   QJsonPrivate::Value val;
-   if (!parseValue(&val, baseOffset)) {
-      return false;
-   }
-
-   // finalize the entry
-   QJsonPrivate::Entry *e = (QJsonPrivate::Entry *)(data + entryOffset);
-   e->value = val;
-   e->value.latinKey = latin1;
-
-   END;
-   return true;
-}
-
-/*
-    array = begin-array [ value *( value-separator value ) ] end-array
-*/
-bool Parser::parseArray()
-{
-   BEGIN << "parseArray";
-
-   if (++nestingLevel > nestingLimit) {
-      lastError = QJsonParseError::DeepNesting;
-      return false;
-   }
-
-   int arrayOffset = reserveSpace(sizeof(QJsonPrivate::Array));
-
-   QVarLengthArray<QJsonPrivate::Value, 64> values;
-
-   if (!eatSpace()) {
-      lastError = QJsonParseError::UnterminatedArray;
-      return false;
-   }
-   if (*json == EndArray) {
-      nextToken();
-   } else {
-      while (1) {
-         QJsonPrivate::Value val;
-         if (!parseValue(&val, arrayOffset)) {
-            return false;
-         }
-         values.append(val);
-         char token = nextToken();
-         if (token == EndArray) {
-            break;
-         } else if (token != ValueSeparator) {
-            if (!eatSpace()) {
-               lastError = QJsonParseError::UnterminatedArray;
-            } else {
-               lastError = QJsonParseError::MissingValueSeparator;
-            }
-            return false;
-         }
-      }
-   }
-
-   DEBUG << "size =" << values.size();
-   int table = arrayOffset;
-   // finalize the object
-   if (values.size()) {
-      int tableSize = values.size() * sizeof(QJsonPrivate::Value);
-      table = reserveSpace(tableSize);
-      memcpy(data + table, values.constData(), tableSize);
-   }
-
-   QJsonPrivate::Array *a = (QJsonPrivate::Array *)(data + arrayOffset);
-   a->tableOffset = table - arrayOffset;
-   a->size = current - arrayOffset;
-   a->is_object = false;
-   a->length = values.size();
-
-   DEBUG << "current=" << current;
-   END;
-
-   --nestingLevel;
-   return true;
-}
-
-/*
-value = false / null / true / object / array / number / string
-
-*/
-
-bool Parser::parseValue(QJsonPrivate::Value *val, int baseOffset)
-{
-   BEGIN << "parse Value" << json;
-   val->_dummy = 0;
-
-   switch (*json++) {
-      case 'n':
-         if (end - json < 4) {
-            lastError = QJsonParseError::IllegalValue;
-            return false;
-         }
-         if (*json++ == 'u' &&
-               *json++ == 'l' &&
-               *json++ == 'l') {
-            val->type = QJsonValue::Null;
-            DEBUG << "value: null";
-            END;
-            return true;
-         }
-         lastError = QJsonParseError::IllegalValue;
-         return false;
-      case 't':
-         if (end - json < 4) {
-            lastError = QJsonParseError::IllegalValue;
-            return false;
-         }
-         if (*json++ == 'r' &&
-               *json++ == 'u' &&
-               *json++ == 'e') {
-            val->type = QJsonValue::Bool;
-            val->value = true;
-            DEBUG << "value: true";
-            END;
-            return true;
-         }
-         lastError = QJsonParseError::IllegalValue;
-         return false;
-      case 'f':
-         if (end - json < 5) {
-            lastError = QJsonParseError::IllegalValue;
-            return false;
-         }
-         if (*json++ == 'a' &&
-               *json++ == 'l' &&
-               *json++ == 's' &&
-               *json++ == 'e') {
-            val->type = QJsonValue::Bool;
-            val->value = false;
-            DEBUG << "value: false";
-            END;
-            return true;
-         }
-         lastError = QJsonParseError::IllegalValue;
-         return false;
-      case Quote: {
-         val->type = QJsonValue::String;
-         if (current - baseOffset >= Value::MaxSize) {
-            lastError = QJsonParseError::DocumentTooLarge;
-            return false;
-         }
-         val->value = current - baseOffset;
-         bool latin1;
-         if (!parseString(&latin1)) {
-            return false;
-         }
-         val->latinOrIntValue = latin1;
-         DEBUG << "value: string";
-         END;
-         return true;
-      }
-      case BeginArray:
-         val->type = QJsonValue::Array;
-         if (current - baseOffset >= Value::MaxSize) {
-            lastError = QJsonParseError::DocumentTooLarge;
-            return false;
-         }
-         val->value = current - baseOffset;
-         if (!parseArray()) {
-            return false;
-         }
-         DEBUG << "value: array";
-         END;
-         return true;
-      case BeginObject:
-         val->type = QJsonValue::Object;
-         if (current - baseOffset >= Value::MaxSize) {
-            lastError = QJsonParseError::DocumentTooLarge;
-            return false;
-         }
-         val->value = current - baseOffset;
-         if (!parseObject()) {
-            return false;
-         }
-         DEBUG << "value: object";
-         END;
-         return true;
-      case EndArray:
-         lastError = QJsonParseError::MissingObject;
-         return false;
-      default:
-         --json;
-         if (!parseNumber(val, baseOffset)) {
-            return false;
-         }
-         DEBUG << "value: number";
-         END;
-   }
-
-   return true;
-}
-
-
-
-
-
-/*
-        number = [ minus ] int [ frac ] [ exp ]
-        decimal-point = %x2E       ; .
-        digit1-9 = %x31-39         ; 1-9
-        e = %x65 / %x45            ; e E
-        exp = e [ minus / plus ] 1*DIGIT
-        frac = decimal-point 1*DIGIT
-        int = zero / ( digit1-9 *DIGIT )
-        minus = %x2D               ; -
-        plus = %x2B                ; +
-        zero = %x30                ; 0
-
-*/
-
-bool Parser::parseNumber(QJsonPrivate::Value *val, int baseOffset)
-{
-   BEGIN << "parseNumber" << json;
-   val->type = QJsonValue::Double;
-
-   const char *start = json;
-   bool isInt = true;
-
-   // minus
-   if (json < end && *json == '-') {
-      ++json;
-   }
-
-   // int = zero / ( digit1-9 *DIGIT )
-   if (json < end && *json == '0') {
-      ++json;
-   } else {
-      while (json < end && *json >= '0' && *json <= '9') {
-         ++json;
-      }
-   }
-
-   // frac = decimal-point 1*DIGIT
-   if (json < end && *json == '.') {
-      isInt = false;
-      ++json;
-      while (json < end && *json >= '0' && *json <= '9') {
-         ++json;
-      }
-   }
-
-   // exp = e [ minus / plus ] 1*DIGIT
-   if (json < end && (*json == 'e' || *json == 'E')) {
-      isInt = false;
-      ++json;
-      if (json < end && (*json == '-' || *json == '+')) {
-         ++json;
-      }
-      while (json < end && *json >= '0' && *json <= '9') {
-         ++json;
-      }
-   }
-
-   if (json >= end) {
-      lastError = QJsonParseError::TerminationByNumber;
-      return false;
-   }
-
-   QByteArray number(start, json - start);
-   DEBUG << "numberstring" << number;
-
-   if (isInt) {
-      bool ok;
-      int n = number.toInt(&ok);
-      if (ok && n < (1 << 25) && n > -(1 << 25)) {
-         val->int_value = n;
-         val->latinOrIntValue = true;
-         END;
-         return true;
-      }
-   }
-
-   bool ok;
-   union {
-      quint64 ui;
-      double d;
-   };
-   d = number.toDouble(&ok);
-
-   if (!ok) {
-      lastError = QJsonParseError::IllegalNumber;
-      return false;
-   }
-
-   int pos = reserveSpace(sizeof(double));
-   *(quint64 *)(data + pos) = qToLittleEndian(ui);
-   if (current - baseOffset >= Value::MaxSize) {
-      lastError = QJsonParseError::DocumentTooLarge;
-      return false;
-   }
-   val->value = pos - baseOffset;
-   val->latinOrIntValue = false;
-
-   END;
-   return true;
-}
-
-/*
-
-        string = quotation-mark *char quotation-mark
-
-        char = unescaped /
-               escape (
-                   %x22 /          ; "    quotation mark  U+0022
-                   %x5C /          ; \    reverse solidus U+005C
-                   %x2F /          ; /    solidus         U+002F
-                   %x62 /          ; b    backspace       U+0008
-                   %x66 /          ; f    form feed       U+000C
-                   %x6E /          ; n    line feed       U+000A
-                   %x72 /          ; r    carriage return U+000D
-                   %x74 /          ; t    tab             U+0009
-                   %x75 4HEXDIG )  ; uXXXX                U+XXXX
-
-        escape = %x5C              ; \
-
-        quotation-mark = %x22      ; "
-
-        unescaped = %x20-21 / %x23-5B / %x5D-10FFFF
- */
-static inline bool addHexDigit(char digit, uint *result)
-{
-   *result <<= 4;
-   if (digit >= '0' && digit <= '9') {
-      *result |= (digit - '0');
-   } else if (digit >= 'a' && digit <= 'f') {
-      *result |= (digit - 'a') + 10;
-   } else if (digit >= 'A' && digit <= 'F') {
-      *result |= (digit - 'A') + 10;
-   } else {
-      return false;
-   }
-   return true;
-}
-
-static inline bool scanEscapeSequence(const char *&json, const char *end, uint *ch)
-{
-   ++json;
-   if (json >= end) {
-      return false;
-   }
-
-   DEBUG << "scan escape" << (char)*json;
-   uint escaped = *json++;
-   switch (escaped) {
-      case '"':
-         *ch = '"';
-         break;
-      case '\\':
-         *ch = '\\';
-         break;
-      case '/':
-         *ch = '/';
-         break;
-      case 'b':
-         *ch = 0x8;
-         break;
-      case 'f':
-         *ch = 0xc;
-         break;
-      case 'n':
-         *ch = 0xa;
-         break;
-      case 'r':
-         *ch = 0xd;
-         break;
-      case 't':
-         *ch = 0x9;
-         break;
-      case 'u': {
-         *ch = 0;
-         if (json > end - 4) {
-            return false;
-         }
-         for (int i = 0; i < 4; ++i) {
-            if (!addHexDigit(*json, ch)) {
-               return false;
-            }
-            ++json;
-         }
-         return true;
-      }
-      default:
-         // this is not as strict as one could be, but allows for more Json files
-         // to be parsed correctly.
-         *ch = escaped;
-         return true;
-   }
-   return true;
-}
-
-static inline bool scanUtf8Char(const char *&json, const char *end, uint *result)
-{
-   int need;
-   uint min_uc;
-   uint uc;
-   uchar ch = *json++;
-   if (ch < 128) {
-      *result = ch;
-      return true;
-   } else if ((ch & 0xe0) == 0xc0) {
-      uc = ch & 0x1f;
-      need = 1;
-      min_uc = 0x80;
-   } else if ((ch & 0xf0) == 0xe0) {
-      uc = ch & 0x0f;
-      need = 2;
-      min_uc = 0x800;
-   } else if ((ch & 0xf8) == 0xf0) {
-      uc = ch & 0x07;
-      need = 3;
-      min_uc = 0x10000;
-   } else {
-      return false;
-   }
-
-   if (json >= end - need) {
-      return false;
-   }
-
-   for (int i = 0; i < need; ++i) {
-      ch = *json++;
-      if ((ch & 0xc0) != 0x80) {
-         return false;
-      }
-      uc = (uc << 6) | (ch & 0x3f);
-   }
-
-   /* Qt 5 Beta 1
-   if (uc < min_uc || QChar::isNonCharacter(uc) ||
-       QChar::isSurrogate(uc) || uc > QChar::LastValidCodePoint) {
-   */
-   // Temporary for missing QChar methods. Does not check for non-characters
-   // or past last valid code point.
-   if (uc < min_uc ||
-         QChar::isHighSurrogate(uc) || QChar::isLowSurrogate(uc)) {
-      return false;
-   }
-
-   *result = uc;
-   return true;
-}
-
-bool Parser::parseString(bool *latin1)
-{
-   *latin1 = true;
-
-   const char *start = json;
-   int outStart = current;
-
-   // try to write out a latin1 string
-
-   int stringPos = reserveSpace(2);
-   BEGIN << "parse string stringPos=" << stringPos << json;
-   while (json < end) {
-      uint ch = 0;
-      if (*json == '"') {
-         break;
-      } else if (*json == '\\') {
-         if (!scanEscapeSequence(json, end, &ch)) {
-            lastError = QJsonParseError::IllegalEscapeSequence;
-            return false;
-         }
-      } else {
-         if (!scanUtf8Char(json, end, &ch)) {
-            lastError = QJsonParseError::IllegalUTF8String;
-            return false;
-         }
-      }
-      if (ch > 0xff) {
-         *latin1 = false;
-         break;
-      }
-      int pos = reserveSpace(1);
-      DEBUG << "  " << ch << (char)ch;
-      data[pos] = (uchar)ch;
-   }
-   ++json;
-   DEBUG << "end of string";
-   if (json >= end) {
-      lastError = QJsonParseError::UnterminatedString;
-      return false;
-   }
-
-   // no unicode string, we are done
-   if (*latin1) {
-      // write string length
-      *(QJsonPrivate::qle_ushort *)(data + stringPos) = ushort(current - outStart - sizeof(ushort));
-      int pos = reserveSpace((4 - current) & 3);
-      while (pos & 3) {
-         data[pos++] = 0;
-      }
-      END;
-      return true;
-   }
-
-   *latin1 = false;
-   DEBUG << "not latin";
-
-   json = start;
-   current = outStart + sizeof(int);
-
-   while (json < end) {
-      uint ch = 0;
-      if (*json == '"') {
-         break;
-      } else if (*json == '\\') {
-         if (!scanEscapeSequence(json, end, &ch)) {
-            lastError = QJsonParseError::IllegalEscapeSequence;
-            return false;
-         }
-      } else {
-         if (!scanUtf8Char(json, end, &ch)) {
-            lastError = QJsonParseError::IllegalUTF8String;
-            return false;
-         }
-      }
-      if (QChar::requiresSurrogates(ch)) {
-         int pos = reserveSpace(4);
-         *(QJsonPrivate::qle_ushort *)(data + pos) = QChar::highSurrogate(ch);
-         *(QJsonPrivate::qle_ushort *)(data + pos + 2) = QChar::lowSurrogate(ch);
-      } else {
-         int pos = reserveSpace(2);
-         *(QJsonPrivate::qle_ushort *)(data + pos) = (ushort)ch;
-      }
-   }
-   ++json;
-
-   if (json >= end) {
-      lastError = QJsonParseError::UnterminatedString;
-      return false;
-   }
-
-   // write string length
-   *(QJsonPrivate::qle_int *)(data + stringPos) = (current - outStart - sizeof(int)) / 2;
-   int pos = reserveSpace((4 - current) & 3);
-   while (pos & 3) {
-      data[pos++] = 0;
-   }
-   END;
-   return true;
-}
-
-QT_END_NAMESPACE
diff --git a/src/core/json/qjsonparser_p.h b/src/core/json/qjsonparser_p.h
deleted file mode 100644 (file)
index 68aa3b5..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONPARSER_P_H
-#define QJSONPARSER_P_H
-
-#include "qjsondocument.h"
-#include "qvarlengtharray.h"
-
-QT_BEGIN_NAMESPACE
-
-namespace QJsonPrivate {
-
-class Parser
-{
- public:
-   Parser(const char *json, int length);
-
-   QJsonDocument parse(QJsonParseError *error);
-
-   class ParsedObject
-   {
-    public:
-      ParsedObject(Parser *p, int pos) : parser(p), objectPosition(pos) {}
-      void insert(uint offset);
-
-      Parser *parser;
-      int objectPosition;
-      QVarLengthArray<uint, 64> offsets;
-
-      inline QJsonPrivate::Entry *entryAt(int i) const {
-         return reinterpret_cast<QJsonPrivate::Entry *>(parser->data + objectPosition + offsets[i]);
-      }
-   };
-
-
- private:
-   inline void eatBOM();
-   inline bool eatSpace();
-   inline char nextToken();
-
-   bool parseObject();
-   bool parseArray();
-   bool parseMember(int baseOffset);
-   bool parseString(bool *latin1);
-   bool parseValue(QJsonPrivate::Value *val, int baseOffset);
-   bool parseNumber(QJsonPrivate::Value *val, int baseOffset);
-   const char *head;
-   const char *json;
-   const char *end;
-
-   char *data;
-   int dataLength;
-   int current;
-   int nestingLevel;
-   QJsonParseError::ParseError lastError;
-
-   inline int reserveSpace(int space) {
-      if (current + space >= dataLength) {
-         dataLength = 2 * dataLength + space;
-         data = (char *)realloc(data, dataLength);
-      }
-      int pos = current;
-      current += space;
-      return pos;
-   }
-};
-
-}
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/core/json/qjsonvalue.cpp b/src/core/json/qjsonvalue.cpp
deleted file mode 100644 (file)
index 42c1e5a..0000000
+++ /dev/null
@@ -1,693 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qjsonobject.h"
-#include "qjsonvalue.h"
-#include "qjsonarray.h"
-#include "qvariant.h"
-#include "qstringlist.h"
-#include "qdebug.h"
-#include "qjson_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QJsonValue
-    \inmodule QtCore
-    \ingroup json
-    \reentrant
-    \since 4.9
-
-    \brief The QJsonValue class encapsulates a value in JSON.
-
-    A value in JSON can be one of 6 basic types:
-
-    JSON is a format to store structured data. It has 6 basic data types:
-
-    \list
-    \li bool QJsonValue::Bool
-    \li double QJsonValue::Double
-    \li string QJsonValue::String
-    \li array QJsonValue::Array
-    \li object QJsonValue::Object
-    \li null QJsonValue::Null
-    \endlist
-
-    A value can represent any of the above data types. In addition, QJsonValue has one special
-    flag to represent undefined values. This can be queried with isUndefined().
-
-    The type of the value can be queried with type() or accessors like isBool(), isString(), and so on.
-    Likewise, the value can be converted to the type stored in it using the toBool(), toString() and so on.
-
-    Values are strictly typed internally and contrary to QVariant will not attempt to do any implicit type
-    conversions. This implies that converting to a type that is not stored in the value will return a default
-    constructed return value.
-*/
-
-/*!
-    Creates a QJsonValue of type \a type.
-
-    The default is to create a Null value.
- */
-QJsonValue::QJsonValue(Type type)
-   : b(false), dbl(0), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(type)
-{
-}
-
-/*!
-    \internal
- */
-QJsonValue::QJsonValue(QJsonPrivate::Data *data, QJsonPrivate::Base *privbase, const QJsonPrivate::Value &v)
-   : b(false), dbl(0), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(static_cast<Type>(uint(v.type)))
-{
-   switch (t) {
-      case Undefined:
-      case Null:
-         break;
-      case Bool:
-         b = v.toBoolean();
-         break;
-      case Double:
-         dbl = v.toDouble(privbase);
-         break;
-      case String: {
-         stringData = new QString(v.toString(privbase));
-         break;
-      }
-      case Array:
-      case Object:
-         d = data;
-         base = v.base(privbase);
-         break;
-   }
-   if (d) {
-      d->ref.ref();
-   }
-}
-
-/*!
-    Creates a value of type Bool, with value \a a.
- */
-QJsonValue::QJsonValue(bool a)
-   : b(a), dbl(0), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Bool)
-{
-}
-
-/*!
-    Creates a value of type Double, with value \a n.
- */
-QJsonValue::QJsonValue(double n)
-   : b(false), dbl(n), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Double)
-{
-}
-
-/*!
-    \overload
-    Creates a value of type Double, with value \a n.
- */
-QJsonValue::QJsonValue(int n)
-   : b(false), dbl(n), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Double)
-{
-}
-
-/*!
-    \overload
-    Creates a value of type Double, with value \a n.
-    NOTE: the integer limits for IEEE 754 double precision data is 2^53 (-9007199254740992 to +9007199254740992).
-    If you pass in values outside this range expect a loss of precision to occur.
- */
-QJsonValue::QJsonValue(qint64 n)
-   : b(false), dbl(n), stringData(Q_NULLPTR), base(Q_NULLPTR), d(Q_NULLPTR), t(Double)
-{
-}
-
-/*!
-    Creates a value of type String, with value \a s.
- */
-QJsonValue::QJsonValue(const QString &s)
-   : b(false), dbl(0), stringData(new QString(s)), base(Q_NULLPTR), d(Q_NULLPTR), t(String)
-{
-}
-
-/*!
-    Creates a value of type String, with value \a s.
- */
-QJsonValue::QJsonValue(QLatin1String s)
-   : b(false), dbl(0), stringData(new QString(s)), base(Q_NULLPTR), d(Q_NULLPTR), t(String)
-{
-}
-
-/*!
-    Creates a value of type Array, with value \a a.
- */
-QJsonValue::QJsonValue(const QJsonArray &a)
-   : b(false), dbl(0), stringData(Q_NULLPTR), base(a.a), d(a.d), t(Array)
-{
-   if (d) {
-      d->ref.ref();
-   }
-}
-
-/*!
-    Creates a value of type Object, with value \a o.
- */
-QJsonValue::QJsonValue(const QJsonObject &o)
-   : b(false), dbl(0), stringData(Q_NULLPTR), base(o.o), d(o.d), t(Object)
-{
-   if (d) {
-      d->ref.ref();
-   }
-}
-
-
-/*!
-    Destroys the value.
- */
-QJsonValue::~QJsonValue()
-{
-   if (t == String) {
-      delete stringData;
-   }
-
-   if (d && !d->ref.deref()) {
-      delete d;
-   }
-}
-
-/*!
-    Creates a copy of \a other.
- */
-QJsonValue::QJsonValue(const QJsonValue &other)
-   : b(other.b), dbl(other.dbl), stringData(Q_NULLPTR), base(Q_NULLPTR), d(other.d), t(other.t)
-{
-   if (d) {
-      d->ref.ref();
-   }
-
-   if (t == String && other.stringData) {
-      stringData = new QString(*other.stringData);
-   }
-}
-
-/*!
-    Assigns the value stored in \a other to this object.
- */
-QJsonValue &QJsonValue::operator =(const QJsonValue &other)
-{
-   if (t == String) {
-      delete stringData;
-      stringData = Q_NULLPTR;
-   }
-
-   t = other.t;
-   b = other.b;
-   dbl = other.dbl;
-
-   qAtomicAssign(d, other.d);
-
-   if (t == String && other.stringData) {
-      stringData = new QString(*other.stringData);
-   }
-
-   return *this;
-}
-
-/*!
-    \fn bool QJsonValue::isNull() const
-
-    Returns true if the value is null.
-*/
-
-/*!
-    \fn bool QJsonValue::isBool() const
-
-    Returns true if the value contains a boolean.
-
-    \sa toBool()
- */
-
-/*!
-    \fn bool QJsonValue::isDouble() const
-
-    Returns true if the value contains a double.
-
-    \sa toDouble()
- */
-
-/*!
-    \fn bool QJsonValue::isString() const
-
-    Returns true if the value contains a string.
-
-    \sa toString()
- */
-
-/*!
-    \fn bool QJsonValue::isArray() const
-
-    Returns true if the value contains an array.
-
-    \sa toArray()
- */
-
-/*!
-    \fn bool QJsonValue::isObject() const
-
-    Returns true if the value contains an object.
-
-    \sa toObject()
- */
-
-/*!
-    \fn bool QJsonValue::isUndefined() const
-
-    Returns true if the value is undefined. This can happen in certain
-    error cases as e.g. accessing a non existing key in a QJsonObject.
- */
-
-
-/*!
-    Converts \a variant to a QJsonValue and returns it.
-
-    The conversion will convert QVariant types as follows:
-
-    \list
-    \li QVariant::Bool to Bool
-    \li QVariant::Int
-    \li QVariant::Double
-    \li QVariant::LongLong
-    \li QVariant::ULongLong
-    \li QVariant::UInt to Double
-    \li QVariant::String to String
-    \li QVariant::StringList
-    \li QVariant::VariantList to Array
-    \li QVariant::VariantMap to Object
-    \endlist
-
-    For all other QVariant types a conversion to a QString will be attempted. If the returned string
-    is empty, a Null QJsonValue will be stored, otherwise a String value using the returned QString.
-
-    \sa toVariant()
- */
-QJsonValue QJsonValue::fromVariant(const QVariant &variant)
-{
-    switch (variant.type()) {
-        case QVariant::Bool:
-            return QJsonValue(variant.toBool());
-        case QVariant::Int:
-        case QVariant::Double:
-        case QVariant::LongLong:
-        case QVariant::ULongLong:
-        case QVariant::UInt:
-            return QJsonValue(variant.toDouble());
-        case QVariant::String:
-            return QJsonValue(variant.toString());
-        case QVariant::StringList:
-            return QJsonValue(QJsonArray::fromStringList(variant.toStringList()));
-        case QVariant::List:
-            return QJsonValue(QJsonArray::fromVariantList(variant.toList()));
-        case QVariant::Map:
-            return QJsonValue(QJsonObject::fromVariantMap(variant.toMap()));
-        default:
-            break;
-    }
-
-    QByteArray a;
-    {
-        QDataStream s(&a, QIODevice::WriteOnly);
-        s << variant;
-    }
-    if (a.isEmpty()) {
-        return QJsonValue();
-    }
-
-    QString result = QLatin1String("@(");
-    result += QString::fromLatin1(a.constData(), a.size());
-    result += QLatin1String(")@");
-    return QJsonValue(result);
-}
-
-/*!
-    Converts the value to a QVariant.
-
-    The QJsonValue types will be converted as follows:
-
-    \value Null     QVariant()
-    \value Bool     QVariant::Bool
-    \value Double   QVariant::Double
-    \value String   QVariant::String
-    \value Array    QVariantList
-    \value Object   QVariantMap
-    \value Undefined QVariant()
-
-    \sa fromVariant()
- */
-QVariant QJsonValue::toVariant() const
-{
-    switch (t) {
-        case Bool:
-            return b;
-        case Double:
-            return dbl;
-        case String: {
-            QVariant variant = toString();
-            QString string = variant.toString();
-            if (string.startsWith(QLatin1String("@(")) && string.endsWith(")@")) {
-                QByteArray a(string.toLatin1());
-                a.remove(0, 2);
-                a.chop(2);
-                QDataStream stream(&a, QIODevice::ReadOnly);
-                QVariant result;
-                stream >> result;
-                return result;
-            }
-            return variant;
-        }
-        case Array:
-            return d ?
-                    QJsonArray(d, static_cast<QJsonPrivate::Array *>(base)).toVariantList() :
-                    QVariantList();
-        case Object:
-            return d ?
-                    QJsonObject(d, static_cast<QJsonPrivate::Object *>(base)).toVariantMap() :
-                    QVariantMap();
-        case Null:
-        case Undefined:
-            return QVariant();
-    }
-
-   return QVariant();
-}
-
-/*!
-    \enum QJsonValue::Type
-
-    This enum describes the type of the JSON value.
-
-    \value Null     A Null value
-    \value Bool     A boolean value. Use toBool() to convert to a bool.
-    \value Double   A double. Use toDouble() to convert to a double.
-    \value String   A string. Use toString() to convert to a QString.
-    \value Array    An array. Use toArray() to convert to a QJsonArray.
-    \value Object   An object. Use toObject() to convert to a QJsonObject.
-    \value Undefined The value is undefined. This is usually returned as an
-                    error condition, when trying to read an out of bounds value
-                    in an array or a non existent key in an object.
-*/
-
-/*!
-    Returns the type of the value.
-
-    \sa QJsonValue::Type
- */
-QJsonValue::Type QJsonValue::type() const
-{
-   return t;
-}
-
-/*!
-    Converts the value to a bool and returns it.
-
-    If type() is not bool, the \a defaultValue will be returned.
- */
-bool QJsonValue::toBool(bool defaultValue) const
-{
-   if (t != Bool) {
-      return defaultValue;
-   }
-   return b;
-}
-
-/*!
-    Converts the value to an int and returns it.
-
-    If type() is not Double or the value is not a whole number,
-    the \a defaultValue will be returned.
- */
-int QJsonValue::toInt(int defaultValue) const
-{
-   if (t == Double && int(dbl) == dbl) {
-      return dbl;
-   }
-   return defaultValue;
-}
-
-/*!
-    Converts the value to a double and returns it.
-
-    If type() is not Double, the \a defaultValue will be returned.
- */
-double QJsonValue::toDouble(double defaultValue) const
-{
-   if (t != Double) {
-      return defaultValue;
-   }
-   return dbl;
-}
-
-/*!
-    Converts the value to a QString and returns it.
-
-    If type() is not String, the \a defaultValue will be returned.
- */
-QString QJsonValue::toString(const QString &defaultValue) const
-{
-   if (t != String) {
-      return defaultValue;
-   }
-   return *stringData;
-}
-
-/*!
-    Converts the value to an array and returns it.
-
-    If type() is not Array, the \a defaultValue will be returned.
- */
-QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const
-{
-   if (!d || t != Array) {
-      return defaultValue;
-   }
-
-   return QJsonArray(d, static_cast<QJsonPrivate::Array *>(base));
-}
-
-/*!
-    \overload
-
-    Converts the value to an array and returns it.
-
-    If type() is not Array, a QJsonArray() will be returned.
- */
-QJsonArray QJsonValue::toArray() const
-{
-   return toArray(QJsonArray());
-}
-
-/*!
-    Converts the value to an object and returns it.
-
-    If type() is not Object, the \a defaultValue will be returned.
- */
-QJsonObject QJsonValue::toObject(const QJsonObject &defaultValue) const
-{
-   if (!d || t != Object) {
-      return defaultValue;
-   }
-
-   return QJsonObject(d, static_cast<QJsonPrivate::Object *>(base));
-}
-
-/*!
-    \overload
-
-    Converts the value to an object and returns it.
-
-    If type() is not Object, the QJsonObject() will be returned.
- */
-QJsonObject QJsonValue::toObject() const
-{
-   return toObject(QJsonObject());
-}
-
-/*!
-    Returns true if the value is equal to \a other.
- */
-bool QJsonValue::operator==(const QJsonValue &other) const
-{
-   if (t != other.t) {
-      return false;
-   }
-
-   switch (t) {
-      case Undefined:
-      case Null:
-         break;
-      case Bool:
-         return b == other.b;
-      case Double:
-         return dbl == other.dbl;
-      case String:
-         return toString() == other.toString();
-      case Array:
-         if (base == other.base) {
-            return true;
-         }
-         if (!base || !other.base) {
-            return false;
-         }
-         return QJsonArray(d, static_cast<QJsonPrivate::Array *>(base))
-                == QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.base));
-      case Object:
-         if (base == other.base) {
-            return true;
-         }
-         if (!base || !other.base) {
-            return false;
-         }
-         return QJsonObject(d, static_cast<QJsonPrivate::Object *>(base))
-                == QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.base));
-   }
-   return true;
-}
-
-/*!
-    Returns true if the value is not equal to \a other.
- */
-bool QJsonValue::operator!=(const QJsonValue &other) const
-{
-   return !(*this == other);
-}
-
-/*!
-    \internal
- */
-void QJsonValue::detach()
-{
-   if (!d) {
-      return;
-   }
-
-   qAtomicAssign(d, d->clone(base));
-   base = static_cast<QJsonPrivate::Object *>(d->header->root());
-}
-
-
-/*!
-    \class QJsonValueRef
-    \inmodule QtCore
-    \reentrant
-    \brief The QJsonValueRef class is a helper class for QJsonValue.
-
-    \internal
-
-    \ingroup json
-
-    When you get an object of type QJsonValueRef, if you can assign to it,
-    the assignment will apply to the character in the string from
-    which you got the reference. That is its whole purpose in life.
-
-    You can use it exactly in the same way as a reference to a QJsonValue.
-
-    The QJsonValueRef becomes invalid once modifications are made to the
-    string: if you want to keep the character, copy it into a QJsonValue.
-
-    Most of the QJsonValue member functions also exist in QJsonValueRef.
-    However, they are not explicitly documented here.
-*/
-
-
-QJsonValueRef &QJsonValueRef::operator =(const QJsonValue &val)
-{
-   if (is_object) {
-      o->setValueAt(index, val);
-   } else {
-      a->replace(index, val);
-   }
-
-   return *this;
-}
-
-QJsonValueRef &QJsonValueRef::operator =(const QJsonValueRef &ref)
-{
-   if (is_object) {
-      o->setValueAt(index, ref);
-   } else {
-      a->replace(index, ref);
-   }
-
-   return *this;
-}
-
-QJsonArray QJsonValueRef::toArray() const
-{
-   return toValue().toArray();
-}
-
-QJsonObject QJsonValueRef::toObject() const
-{
-   return toValue().toObject();
-}
-
-QJsonValue QJsonValueRef::toValue() const
-{
-   if (!is_object) {
-      return a->at(index);
-   }
-   return o->valueAt(index);
-}
-
-QDebug operator<<(QDebug dbg, const QJsonValue &o)
-{
-   switch (o.t) {
-      case QJsonValue::Undefined:
-         dbg.nospace() << "QJsonValue(undefined)";
-         break;
-      case QJsonValue::Null:
-         dbg.nospace() << "QJsonValue(null)";
-         break;
-      case QJsonValue::Bool:
-         dbg.nospace() << "QJsonValue(bool, " << o.toBool() << ")";
-         break;
-      case QJsonValue::Double:
-         dbg.nospace() << "QJsonValue(double, " << o.toDouble() << ")";
-         break;
-      case QJsonValue::String:
-         dbg.nospace() << "QJsonValue(string, " << o.toString() << ")";
-         break;
-      case QJsonValue::Array:
-         dbg.nospace() << "QJsonValue(array, ";
-         dbg.nospace() << o.toArray();
-         dbg.nospace() << ")";
-         break;
-      case QJsonValue::Object:
-         dbg.nospace() << "QJsonValue(object, ";
-         dbg.nospace() << o.toObject();
-         dbg.nospace() << ")";
-         break;
-   }
-   return dbg.space();
-}
-
-QT_END_NAMESPACE
diff --git a/src/core/json/qjsonvalue.h b/src/core/json/qjsonvalue.h
deleted file mode 100644 (file)
index 049f679..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONVALUE_H
-#define QJSONVALUE_H
-
-#include <QtCore/qobjectdefs.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-
-class QDebug;
-class QVariant;
-class QJsonArray;
-class QJsonObject;
-
-namespace QJsonPrivate {
-class Data;
-class Base;
-class Object;
-class Header;
-class Array;
-class Value;
-class Entry;
-}
-
-class Q_CORE_EXPORT QJsonValue
-{
- public:
-   enum Type {
-      Null =  0x0,
-      Bool = 0x1,
-      Double = 0x2,
-      String = 0x3,
-      Array = 0x4,
-      Object = 0x5,
-      Undefined = 0x80
-   };
-
-   QJsonValue(Type = Null);
-   QJsonValue(bool b);
-   QJsonValue(double n);
-   QJsonValue(int n);
-   QJsonValue(qint64 n);
-   QJsonValue(const QString &s);
-   QJsonValue(QLatin1String s);
-   QJsonValue(const QJsonArray &a);
-   QJsonValue(const QJsonObject &o);
-
-   ~QJsonValue();
-
-   QJsonValue(const QJsonValue &other);
-   QJsonValue &operator =(const QJsonValue &other);
-
-   static QJsonValue fromVariant(const QVariant &variant);
-   QVariant toVariant() const;
-
-   Type type() const;
-   inline bool isNull() const {
-      return type() == Null;
-   }
-   inline bool isBool() const {
-      return type() == Bool;
-   }
-   inline bool isDouble() const {
-      return type() == Double;
-   }
-   inline bool isString() const {
-      return type() == String;
-   }
-   inline bool isArray() const {
-      return type() == Array;
-   }
-   inline bool isObject() const {
-      return type() == Object;
-   }
-   inline bool isUndefined() const {
-      return type() == Undefined;
-   }
-
-   bool toBool(bool defaultValue = false) const;
-   int toInt(int defaultValue = 0) const;
-   double toDouble(double defaultValue = 0) const;
-   QString toString(const QString &defaultValue = QString()) const;
-   QJsonArray toArray() const;
-   QJsonArray toArray(const QJsonArray &defaultValue) const;
-   QJsonObject toObject() const;
-   QJsonObject toObject(const QJsonObject &defaultValue) const;
-
-   bool operator==(const QJsonValue &other) const;
-   bool operator!=(const QJsonValue &other) const;
-
- private:
-   // avoid implicit conversions from char * to bool
-   inline QJsonValue(const void *) {}
-   friend class QJsonPrivate::Value;
-   friend class QJsonArray;
-   friend class QJsonObject;
-   friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &);
-
-   QJsonValue(QJsonPrivate::Data *d, QJsonPrivate::Base *b, const QJsonPrivate::Value &v);
-
-   void detach();
-
-   bool b;
-   double dbl;
-   QString *stringData;
-   QJsonPrivate::Base *base;
-   QJsonPrivate::Data *d; // needed for Objects and Arrays
-   Type t;
-};
-
-class Q_CORE_EXPORT QJsonValueRef
-{
- public:
-   QJsonValueRef(QJsonArray *array, int idx)
-      : a(array), is_object(false), index(idx) {}
-   QJsonValueRef(QJsonObject *object, int idx)
-      : o(object), is_object(true), index(idx) {}
-
-   inline operator QJsonValue() const {
-      return toValue();
-   }
-   QJsonValueRef &operator = (const QJsonValue &val);
-   QJsonValueRef &operator = (const QJsonValueRef &val);
-
-   inline QJsonValue::Type type() const {
-      return toValue().type();
-   }
-   inline bool isNull() const {
-      return type() == QJsonValue::Null;
-   }
-   inline bool isBool() const {
-      return type() == QJsonValue::Bool;
-   }
-   inline bool isDouble() const {
-      return type() == QJsonValue::Double;
-   }
-   inline bool isString() const {
-      return type() == QJsonValue::String;
-   }
-   inline bool isArray() const {
-      return type() == QJsonValue::Array;
-   }
-   inline bool isObject() const {
-      return type() == QJsonValue::Object;
-   }
-   inline bool isUndefined() const {
-      return type() == QJsonValue::Undefined;
-   }
-
-   inline bool toBool() const {
-      return toValue().toBool();
-   }
-   inline int toInt() const {
-      return toValue().toInt();
-   }
-   inline double toDouble() const {
-      return toValue().toDouble();
-   }
-   inline QString toString() const {
-      return toValue().toString();
-   }
-   QJsonArray toArray() const;
-   QJsonObject toObject() const;
-
-   inline bool operator==(const QJsonValue &other) const {
-      return toValue() == other;
-   }
-   inline bool operator!=(const QJsonValue &other) const {
-      return toValue() != other;
-   }
-
- private:
-   QJsonValue toValue() const;
-
-   union {
-      QJsonArray *a;
-      QJsonObject *o;
-   };
-   bool is_object;
-   int index;
-};
-
-class Q_CORE_EXPORT QJsonValueRefPtr {
- public:
-    template<typename T1, typename T2>
-    QJsonValueRefPtr(T1 a, T2 b)
-        : m_ref(a, b) { }
-
-    QJsonValueRef* operator->() const { return &m_ref; };
-
- private:
-    mutable QJsonValueRef m_ref;
-};
-
-class Q_CORE_EXPORT QJsonValuePtr {
- public:
-
-    QJsonValuePtr(QJsonValue val)
-        : m_value(val) { }
-
-    const QJsonValue * operator->() const { return &m_value; };
-
- private:
-    const QJsonValue m_value;
-};
-
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &);
-
-QT_END_NAMESPACE
-
-#endif // QJSONVALUE_H
diff --git a/src/core/json/qjsonwriter.cpp b/src/core/json/qjsonwriter.cpp
deleted file mode 100644 (file)
index a6e7627..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qjsonwriter_p.h"
-#include "qjson_p.h"
-
-QT_BEGIN_NAMESPACE
-
-using namespace QJsonPrivate;
-
-static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact);
-static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact);
-
-static inline uchar hexdig(uint u)
-{
-   return (u < 0xa ? '0' + u : 'a' + u - 0xa);
-}
-
-static QByteArray escapedString(const QString &s)
-{
-   const uchar replacement = '?';
-   QByteArray ba(s.length(), Qt::Uninitialized);
-
-   uchar *cursor = (uchar *)ba.data();
-   const uchar *ba_end = cursor + ba.length();
-
-   const QChar *ch = (const QChar *)s.constData();
-   const QChar *end = ch + s.length();
-
-   int surrogate_high = -1;
-
-   while (ch < end) {
-      if (cursor >= ba_end - 6) {
-         // ensure we have enough space
-         int pos = cursor - (const uchar *)ba.constData();
-         ba.resize(ba.size() * 2);
-         cursor = (uchar *)ba.data() + pos;
-         ba_end = (const uchar *)ba.constData() + ba.length();
-      }
-
-      uint u = ch->unicode();
-      if (surrogate_high >= 0) {
-         if (ch->isLowSurrogate()) {
-            u = QChar::surrogateToUcs4(surrogate_high, u);
-            surrogate_high = -1;
-         } else {
-            // high surrogate without low
-            *cursor = replacement;
-            ++ch;
-            surrogate_high = -1;
-            continue;
-         }
-      } else if (ch->isLowSurrogate()) {
-         // low surrogate without high
-         *cursor = replacement;
-         ++ch;
-         continue;
-      } else if (ch->isHighSurrogate()) {
-         surrogate_high = u;
-         ++ch;
-         continue;
-      }
-
-      if (u < 0x80) {
-         if (u < 0x20 || u == 0x22 || u == 0x5c) {
-            *cursor++ = '\\';
-            switch (u) {
-               case 0x22:
-                  *cursor++ = '"';
-                  break;
-               case 0x5c:
-                  *cursor++ = '\\';
-                  break;
-               case 0x8:
-                  *cursor++ = 'b';
-                  break;
-               case 0xc:
-                  *cursor++ = 'f';
-                  break;
-               case 0xa:
-                  *cursor++ = 'n';
-                  break;
-               case 0xd:
-                  *cursor++ = 'r';
-                  break;
-               case 0x9:
-                  *cursor++ = 't';
-                  break;
-               default:
-                  *cursor++ = 'u';
-                  *cursor++ = '0';
-                  *cursor++ = '0';
-                  *cursor++ = hexdig(u >> 4);
-                  *cursor++ = hexdig(u & 0xf);
-            }
-         } else {
-            *cursor++ = (uchar)u;
-         }
-      } else {
-         if (u < 0x0800) {
-            *cursor++ = 0xc0 | ((uchar) (u >> 6));
-         } else {
-            /* Qt 5 Beta 1
-            // is it one of the Unicode non-characters?
-            if (QChar::isNonCharacter(u)) {
-                *cursor++ = replacement;
-                ++ch;
-                continue;
-            }
-            */
-
-            if (QChar::requiresSurrogates(u)) {
-               *cursor++ = 0xf0 | ((uchar) (u >> 18));
-               *cursor++ = 0x80 | (((uchar) (u >> 12)) & 0x3f);
-            } else {
-               *cursor++ = 0xe0 | (((uchar) (u >> 12)) & 0x3f);
-            }
-            *cursor++ = 0x80 | (((uchar) (u >> 6)) & 0x3f);
-         }
-         *cursor++ = 0x80 | ((uchar) (u & 0x3f));
-      }
-      ++ch;
-   }
-
-   ba.resize(cursor - (const uchar *)ba.constData());
-   return ba;
-}
-
-static void valueToJson(const QJsonPrivate::Base *b, const QJsonPrivate::Value &v, QByteArray &json, int indent,
-                        bool compact)
-{
-   QJsonValue::Type type = (QJsonValue::Type)(uint)v.type;
-   switch (type) {
-      case QJsonValue::Bool:
-         json += v.toBoolean() ? "true" : "false";
-         break;
-      case QJsonValue::Double:
-         json += QByteArray::number(v.toDouble(b), 'g', 17);
-         break;
-      case QJsonValue::String:
-         json += '"';
-         json += escapedString(v.toString(b));
-         json += '"';
-         break;
-      case QJsonValue::Array:
-         json += compact ? "[" : "[\n";
-         arrayContentToJson(static_cast<QJsonPrivate::Array *>(v.base(b)), json, indent + (compact ? 0 : 1), compact);
-         json += QByteArray(4 * indent, ' ');
-         json += "]";
-         break;
-      case QJsonValue::Object:
-         json += compact ? "{" : "{\n";
-         objectContentToJson(static_cast<QJsonPrivate::Object *>(v.base(b)), json, indent + (compact ? 0 : 1), compact);
-         json += QByteArray(4 * indent, ' ');
-         json += "}";
-         break;
-      case QJsonValue::Null:
-      default:
-         json += "null";
-   }
-}
-
-static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact)
-{
-   if (!a || !a->length) {
-      return;
-   }
-
-   QByteArray indentString(4 * indent, ' ');
-
-   uint i = 0;
-   while (1) {
-      json += indentString;
-      valueToJson(a, a->at(i), json, indent, compact);
-
-      if (++i == a->length) {
-         if (!compact) {
-            json += '\n';
-         }
-         break;
-      }
-
-      json += compact ? "," : ",\n";
-   }
-}
-
-
-static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact)
-{
-   if (!o || !o->length) {
-      return;
-   }
-
-   QByteArray indentString(4 * indent, ' ');
-
-   uint i = 0;
-   while (1) {
-      QJsonPrivate::Entry *e = o->entryAt(i);
-      json += indentString;
-      json += '"';
-      json += escapedString(e->key());
-      json += "\": ";
-      valueToJson(o, e->value, json, indent, compact);
-
-      if (++i == o->length) {
-         if (!compact) {
-            json += '\n';
-         }
-         break;
-      }
-
-      json += compact ? "," : ",\n";
-   }
-}
-
-void Writer::objectToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact)
-{
-   json.reserve(json.size() + (o ? (int)o->size : 16));
-   json += compact ? "{" : "{\n";
-   objectContentToJson(o, json, indent + (compact ? 0 : 1), compact);
-   json += QByteArray(4 * indent, ' ');
-   json += compact ? "}" : "}\n";
-}
-
-void Writer::arrayToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact)
-{
-   json.reserve(json.size() + (a ? (int)a->size : 16));
-   json += compact ? "[" : "[\n";
-   arrayContentToJson(a, json, indent + (compact ? 0 : 1), compact);
-   json += QByteArray(4 * indent, ' ');
-   json += compact ? "]" : "]\n";
-}
-
-QT_END_NAMESPACE
diff --git a/src/core/json/qjsonwriter_p.h b/src/core/json/qjsonwriter_p.h
deleted file mode 100644 (file)
index c11769a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/****************************************************************************
-**
-** Copyright (c) 2012-2015 Barbara Geller
-** Copyright (c) 2012-2015 Ansel Sermersheim
-** Copyright (c) 2012-2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONWRITER_P_H
-#define QJSONWRITER_P_H
-
-#include "qjsonvalue.h"
-
-QT_BEGIN_NAMESPACE
-
-namespace QJsonPrivate {
-
-class Writer
-{
- public:
-   static void objectToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact = false);
-   static void arrayToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact = false);
-};
-
-}
-
-QT_END_NAMESPACE
-
-#endif
index 89319e9..978ba7b 100644 (file)
@@ -31,9 +31,6 @@
 
 #ifndef QT_BOOTSTRAPPED
 #  include "qeasingcurve.h"
-#  include "qjsonvalue.h"
-#  include "qjsonobject.h"
-#  include "qjsonarray.h"
 #  include "qjsondocument.h"
 #  include "qbitarray.h"
 #  include "qurl.h"
@@ -117,9 +114,6 @@ QT_BEGIN_NAMESPACE
     \value QPointF QPointF
     \value QRegExp QRegExp
     \value QEasingCurve QEasingCurve
-    \value QJsonValue QJsonValue
-    \value QJsonObject QJsonObject
-    \value QJsonArray QJsonArray
     \value QJsonDocument QJsonDocument
     \value QVariantHash QVariantHash
     \value QVariantList QVariantList
@@ -244,9 +238,6 @@ static const struct MetaTypeTblData {
     QT_ADD_STATIC_METATYPE("QPointF", QMetaType::QPointF),
     QT_ADD_STATIC_METATYPE("QRegExp", QMetaType::QRegExp),
     QT_ADD_STATIC_METATYPE("QEasingCurve", QMetaType::QEasingCurve),
-    QT_ADD_STATIC_METATYPE("QJsonValue", QMetaType:: QJsonValue),
-    QT_ADD_STATIC_METATYPE("QJsonObject", QMetaType::QJsonObject),
-    QT_ADD_STATIC_METATYPE("QJsonArray", QMetaType::QJsonArray),
     QT_ADD_STATIC_METATYPE("QJsonDocument", QMetaType::QJsonDocument),
     QT_ADD_STATIC_METATYPE("QVariantHash", QMetaType::QVariantHash),
     QT_ADD_STATIC_METATYPE("QVariantList", QMetaType::QVariantList),
@@ -621,9 +612,6 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
     case QMetaType::VoidStar:
     case QMetaType::QObjectStar:
     case QMetaType::QWidgetStar:
-    case QMetaType::QJsonValue:
-    case QMetaType::QJsonObject:
-    case QMetaType::QJsonArray:
     case QMetaType::QJsonDocument:
         return false;
     case QMetaType::Long:
@@ -818,9 +806,6 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
     case QMetaType::VoidStar:
     case QMetaType::QObjectStar:
     case QMetaType::QWidgetStar:
-    case QMetaType::QJsonValue:
-    case QMetaType::QJsonObject:
-    case QMetaType::QJsonArray:
     case QMetaType::QJsonDocument:
         return false;
     case QMetaType::Long: {
@@ -1094,12 +1079,6 @@ void *QMetaType::construct(int type, const void *copy)
 #ifndef QT_BOOTSTRAPPED
         case QMetaType::QEasingCurve:
             return new NS(QEasingCurve)(*static_cast<const NS(QEasingCurve)*>(copy));
-        case QMetaType::QJsonValue:
-            return new NS(QJsonValue)(*static_cast<const NS(QJsonValue)*>(copy));
-        case QMetaType::QJsonObject:
-            return new NS(QJsonObject)(*static_cast<const NS(QJsonObject)*>(copy));
-        case QMetaType::QJsonArray:
-            return new NS(QJsonArray)(*static_cast<const NS(QJsonArray)*>(copy));
         case QMetaType::QJsonDocument:
             return new NS(QJsonDocument)(*static_cast<const NS(QJsonDocument)*>(copy));
 #endif
@@ -1362,15 +1341,6 @@ void QMetaType::destroy(int type, void *data)
     case QMetaType::QEasingCurve:
         delete static_cast< NS(QEasingCurve)* >(data);
         break;
-    case QMetaType::QJsonValue:
-        delete static_cast< NS(QJsonValue)* >(data);
-        break;
-    case QMetaType::QJsonObject:
-        delete static_cast< NS(QJsonObject)* >(data);
-        break;
-    case QMetaType::QJsonArray:
-        delete static_cast< NS(QJsonArray)* >(data);
-        break;
     case QMetaType::QJsonDocument:
         delete static_cast< NS(QJsonDocument)* >(data);
         break;
index 7b7e1af..5679e86 100644 (file)
@@ -45,9 +45,8 @@ public:
         QByteArray = 11, QBitArray = 12, QDate = 13, QTime = 14,
         QDateTime = 15, QUrl = 16, QLocale = 17, QRect = 18, QRectF = 19,
         QSize = 20, QSizeF = 21, QLine = 22, QLineF = 23, QPoint = 24,
-        QPointF = 25, QRegExp = 26, QEasingCurve = 27, QJsonValue = 28,
-        QJsonObject = 29, QJsonArray = 30, QJsonDocument = 31,
-        QVariantHash = 32, QVariantList = 33, QVariantMap = 34,
+        QPointF = 25, QRegExp = 26, QEasingCurve = 27, QJsonDocument = 28,
+        QVariantHash = 29, QVariantList = 30, QVariantMap = 31,
         LastCoreType = QVariantMap,
 
         FirstGuiType = 64 /* QFont */,
@@ -262,9 +261,6 @@ class QPointF;
 #ifndef QT_NO_REGEXP
 class QRegExp;
 #endif
-class QJsonValue;
-class QJsonObject;
-class QJsonArray;
 class QJsonDocument;
 class QEasingCurve;
 class QWidget;
@@ -327,9 +323,6 @@ Q_DECLARE_BUILTIN_METATYPE(QPointF, QPointF)
 Q_DECLARE_BUILTIN_METATYPE(QRegExp, QRegExp)
 #endif
 Q_DECLARE_BUILTIN_METATYPE(QEasingCurve, QEasingCurve)
-Q_DECLARE_BUILTIN_METATYPE(QJsonValue, QJsonValue)
-Q_DECLARE_BUILTIN_METATYPE(QJsonObject, QJsonObject)
-Q_DECLARE_BUILTIN_METATYPE(QJsonArray, QJsonArray)
 Q_DECLARE_BUILTIN_METATYPE(QJsonDocument, QJsonDocument)
 // QVariantHash
 // QVariantList
index 10265fb..0283f6c 100644 (file)
@@ -36,9 +36,6 @@
 
 #ifndef QT_BOOTSTRAPPED
 #  include "qeasingcurve.h"
-#  include "qjsonvalue.h"
-#  include "qjsonobject.h"
-#  include "qjsonarray.h"
 #  include "qjsondocument.h"
 #  include "qsize.h"
 #  include "qpoint.h"
@@ -133,15 +130,6 @@ static void construct(QVariant::Private *x, const void *copy)
     case QVariant::EasingCurve:
         v_construct<QEasingCurve>(x, copy);
         break;
-    case QVariant::JsonValue:
-        v_construct<QJsonValue>(x, copy);
-        break;
-    case QVariant::JsonObject:
-        v_construct<QJsonObject>(x, copy);
-        break;
-    case QVariant::JsonArray:
-        v_construct<QJsonArray>(x, copy);
-        break;
     case QVariant::JsonDocument:
         v_construct<QJsonDocument>(x, copy);
         break;
@@ -265,15 +253,6 @@ static void clear(QVariant::Private *d)
     case QVariant::EasingCurve:
         v_clear<QEasingCurve>(d);
         break;
-    case QVariant::JsonValue:
-        v_clear<QJsonValue>(d);
-        break;
-    case QVariant::JsonObject:
-        v_clear<QJsonObject>(d);
-        break;
-    case QVariant::JsonArray:
-        v_clear<QJsonArray>(d);
-        break;
     case QVariant::JsonDocument:
         v_clear<QJsonDocument>(d);
         break;
@@ -335,12 +314,8 @@ static bool isNull(const QVariant::Private *d)
         return v_cast<QPoint>(d)->isNull();
     case QVariant::PointF:
         return v_cast<QPointF>(d)->isNull();
-    case QVariant::JsonValue:
-        return v_cast<QJsonValue>(d)->isNull();
     case QVariant::JsonDocument:
         return v_cast<QJsonDocument>(d)->isNull();
-    case QVariant::JsonObject:
-    case QVariant::JsonArray:
     case QVariant::EasingCurve:
     case QVariant::Url:
 #endif
@@ -464,12 +439,6 @@ static bool compare(const QVariant::Private *a, const QVariant::Private *b)
 #ifndef QT_BOOTSTRAPPED
     case QVariant::EasingCurve:
         return *v_cast<QEasingCurve>(a) == *v_cast<QEasingCurve>(b);
-    case QVariant::JsonValue:
-        return *v_cast<QJsonValue>(a) == *v_cast<QJsonValue>(b);
-    case QVariant::JsonObject:
-        return *v_cast<QJsonObject>(a) == *v_cast<QJsonObject>(b);
-    case QVariant::JsonArray:
-        return *v_cast<QJsonArray>(a) == *v_cast<QJsonArray>(b);
     case QVariant::JsonDocument:
         return *v_cast<QJsonDocument>(a) == *v_cast<QJsonDocument>(b);
 #endif
@@ -534,10 +503,6 @@ static qlonglong qMetaTypeNumber(const QVariant::Private *d)
         return qRound64(d->data.f);
     case QVariant::Double:
         return qRound64(d->data.d);
-#ifndef QT_BOOTSTRAPPED
-    case QMetaType::QJsonValue:
-        return v_cast<QJsonValue>(d)->toDouble(0.0);
-#endif
     }
     Q_ASSERT(false);
     return 0;
@@ -574,12 +539,6 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok)
         return v_cast<QByteArray>(d)->toLongLong(ok);
     case QVariant::Bool:
         return qlonglong(d->data.b);
-#ifndef QT_BOOTSTRAPPED
-    case QVariant::JsonValue:
-        if (!v_cast<QJsonValue>(d)->isDouble())
-            break;
-        return qlonglong(v_cast<QJsonValue>(d)->toDouble(0.0));
-#endif
     case QVariant::Double:
     case QVariant::Int:
     case QMetaType::Char:
@@ -613,12 +572,6 @@ static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok)
         return v_cast<QByteArray>(d)->toULongLong(ok);
     case QVariant::Bool:
         return qulonglong(d->data.b);
-#ifndef QT_BOOTSTRAPPED
-    case QVariant::JsonValue:
-        if (!v_cast<QJsonValue>(d)->isDouble())
-            break;
-        return qulonglong(v_cast<QJsonValue>(d)->toDouble(0.0));
-#endif
     case QVariant::Double:
     case QVariant::Int:
     case QMetaType::Char:
@@ -716,12 +669,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
         case QVariant::Url:
             *str = v_cast<QUrl>(d)->toString();
             return true;
-        case QMetaType::QJsonValue:
-            if (v_cast<QJsonValue>(d)->isString()) {
-                *str = v_cast<QJsonValue>(d)->toString();
-                return true;
-            }
-            return false;
 #endif
         default:
             return false;
@@ -946,13 +893,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
         case QMetaType::ULong:
             *static_cast<bool *>(result) = qMetaTypeUNumber(d) != Q_UINT64_C(0);
             return true;
-#ifndef QT_BOOTSTRAPPED
-        case QMetaType::QJsonValue:
-            if (!v_cast<QJsonValue>(d)->isBool())
-                return false;
-            *static_cast<bool *>(result) = v_cast<QJsonValue>(d)->toBool(false);
-            return true;
-#endif
         default:
             return false;
         }
@@ -986,13 +926,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
         case QMetaType::ULong:
             *static_cast<double *>(result) = double(qMetaTypeUNumber(d));
             return true;
-#ifndef QT_BOOTSTRAPPED
-        case QMetaType::QJsonValue:
-            if (!v_cast<QJsonValue>(d)->isDouble())
-                return false;
-            *static_cast<double *>(result) = v_cast<QJsonValue>(d)->toDouble(0.0);
-            return true;
-#endif
         default:
             return false;
         }
@@ -1026,13 +959,6 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
         case QMetaType::ULong:
             *static_cast<float *>(result) = float(qMetaTypeUNumber(d));
             return true;
-#ifndef QT_BOOTSTRAPPED
-        case QMetaType::QJsonValue:
-            if (!v_cast<QJsonValue>(d)->isDouble())
-                return false;
-            *static_cast<float *>(result) = v_cast<QJsonValue>(d)->toDouble(0.0);
-            return true;
-#endif
         default:
             return false;
         }
@@ -1047,48 +973,18 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
         } else if (d->type == QVariant::List) {
             *static_cast<QVariantList *>(result) = *static_cast<QList<QVariant> *>(d->data.shared->ptr);
             return true;
-#ifndef QT_BOOTSTRAPPED
-        } else if (d->type == QMetaType::QJsonValue) {
-            if (!v_cast<QJsonValue>(d)->isArray())
-                return false;
-            *static_cast<QVariantList *>(result) = v_cast<QJsonValue>(d)->toArray().toVariantList();
-            return true;
-        } else if (d->type == QMetaType::QJsonArray) {
-            *static_cast<QVariantList *>(result) = v_cast<QJsonArray>(d)->toVariantList();
-            return true;
-#endif
         }
         return false;
     case QVariant::Map:
         if (d->type == QVariant::Map) {
             *static_cast<QVariantMap *>(result) = *static_cast<QMap<QString, QVariant> *>(d->data.shared->ptr);
             return true;
-#ifndef QT_BOOTSTRAPPED
-        } else if (d->type == QMetaType::QJsonValue) {
-            if (!v_cast<QJsonValue>(d)->isObject())
-                return false;
-            *static_cast<QVariantMap *>(result) = v_cast<QJsonValue>(d)->toObject().toVariantMap();
-            return true;
-        } else if (d->type == QMetaType::QJsonObject) {
-            *static_cast<QVariantMap *>(result) = v_cast<QJsonObject>(d)->toVariantMap();
-            return true;
-#endif
         }
         return false;
     case QVariant::Hash:
         if (d->type == QVariant::Hash) {
             *static_cast<QVariantHash *>(result) = *static_cast<QHash<QString, QVariant> *>(d->data.shared->ptr);
             return true;
-#ifndef QT_BOOTSTRAPPED
-        } else if (d->type == QMetaType::QJsonValue) {
-            if (!v_cast<QJsonValue>(d)->isObject())
-                return false;
-            *static_cast<QVariantHash *>(result) = v_cast<QJsonValue>(d)->toObject().toVariantHash();
-            return true;
-        } else if (d->type == QMetaType::QJsonObject) {
-            *static_cast<QVariantHash *>(result) = v_cast<QJsonObject>(d)->toVariantHash();
-            return true;
-#endif
         }
         return false;
 #ifndef QT_BOOTSTRAPPED
@@ -1187,15 +1083,6 @@ static void streamDebug(QDebug dbg, const QVariant &v)
     case QVariant::EasingCurve:
         dbg.nospace() << v.toEasingCurve();
         break;
-    case QVariant::JsonValue:
-        dbg.nospace() << v.toJsonValue();
-        break;
-    case QVariant::JsonObject:
-        dbg.nospace() << v.toJsonObject();
-        break;
-    case QVariant::JsonArray:
-        dbg.nospace() << v.toJsonArray();
-        break;
     case QVariant::JsonDocument:
         dbg.nospace() << v.toJsonDocument();
         break;
@@ -1368,9 +1255,6 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler;
     \value DateTime  a QDateTime
     \value Double  a double
     \value EasingCurve a QEasingCurve
-    \value QJsonValue QJsonValue
-    \value QJsonObject QJsonObject
-    \value QJsonArray QJsonArray
     \value QJsonDocument QJsonDocument
     \value Font  a QFont
     \value Hash a QVariantHash
@@ -1588,27 +1472,6 @@ QVariant::QVariant(const char *val)
 
 /*!
     \since 4.9
-    \fn QVariant::QVariant(const QJsonValue &val)
-
-    Constructs a new variant with a json value, \a val.
-*/
-
-/*!
-    \since 4.9
-    \fn QVariant::QVariant(const QJsonObject &val)
-
-    Constructs a new variant with a json object value, \a val.
-*/
-
-/*!
-    \since 4.9
-    \fn QVariant::QVariant(const QJsonArray &val)
-
-    Constructs a new variant with a json array value, \a val.
-*/
-
-/*!
-    \since 4.9
     \fn QVariant::QVariant(const QJsonDocument &val)
 
     Constructs a new variant with a json document value, \a val.
@@ -1812,9 +1675,6 @@ QVariant::QVariant(const QDateTime &val)
 #ifndef QT_BOOTSTRAPPED
 QVariant::QVariant(const QEasingCurve &val)
 { d.is_null = false; d.type = EasingCurve; v_construct<QEasingCurve>(&d, val); }
-QVariant::QVariant(const QJsonValue &jsonValue) { d.is_null = false; d.type = JsonValue; v_construct<QJsonValue>(&d, jsonValue); }
-QVariant::QVariant(const QJsonObject &jsonObject) { d.is_null = false; d.type = JsonObject; v_construct<QJsonObject>(&d, jsonObject); }
-QVariant::QVariant(const QJsonArray &jsonArray) { d.is_null = false; d.type = JsonArray; v_construct<QJsonArray>(&d, jsonArray); }
 QVariant::QVariant(const QJsonDocument &jsonDocument) { d.is_null = false; d.type = JsonDocument; v_construct<QJsonDocument>(&d, jsonDocument); }
 #endif
 QVariant::QVariant(const QList<QVariant> &list)
@@ -2254,45 +2114,6 @@ QEasingCurve QVariant::toEasingCurve() const
 /*!
     \since 4.9
 
-    Returns the variant as a QJsonValue if the variant has userType() \l
-    QJsonValue; otherwise returns a default constructed QJsonValue.
-
-    \sa canConvert(), convert()
-*/
-QJsonValue QVariant::toJsonValue() const
-{
-    return qVariantToHelper<QJsonValue>(d, JsonValue, handler);
-}
-
-/*!
-    \since 4.9
-
-    Returns the variant as a QJsonObject if the variant has userType() \l
-    QJsonObject; otherwise returns a default constructed QJsonObject.
-
-    \sa canConvert(), convert()
-*/
-QJsonObject QVariant::toJsonObject() const
-{
-    return qVariantToHelper<QJsonObject>(d, JsonObject, handler);
-}
-
-/*!
-    \since 4.9
-
-    Returns the variant as a QJsonArray if the variant has userType() \l
-    QJsonArray; otherwise returns a default constructed QJsonArray.
-
-    \sa canConvert(), convert()
-*/
-QJsonArray QVariant::toJsonArray() const
-{
-    return qVariantToHelper<QJsonArray>(d, JsonArray, handler);
-}
-
-/*!
-    \since 4.9
-
     Returns the variant as a QJsonDocument if the variant has userType() \l
     QJsonDocument; otherwise returns a default constructed QJsonDocument.
 
@@ -2972,44 +2793,6 @@ bool QVariant::canConvert(Type t) const
     /* RegExp */
     /* Hash */
     /* EasingCurve */
-    } else if (d.type == QVariant::JsonValue) {
-        switch (int(t)) {
-        case QVariant::String:
-        case QVariant::Bool:
-        case QVariant::Int:
-        case QVariant::UInt:
-        case QVariant::Double:
-        case QVariant::Float:
-        case QMetaType::ULong:
-        case QMetaType::Long:
-        case QVariant::LongLong:
-        case QVariant::ULongLong:
-        case QMetaType::UShort:
-        case QMetaType::UChar:
-        case QMetaType::Char:
-        case QMetaType::Short:
-        case QVariant::List:
-        case QVariant::Map:
-        case QVariant::Hash:
-            return true;
-        default:
-            return false;
-        }
-    } else if (d.type == QVariant::JsonObject) {
-        switch (t) {
-        case QVariant::Map:
-        case QVariant::Hash:
-            return true;
-        default:
-            return false;
-        }
-    } else if (d.type == QVariant::JsonArray) {
-        switch (t) {
-        case QVariant::List:
-            return true;
-        default:
-            return false;
-        }
     /* JsonDocument */
     } else if (t == QVariant::Font) {
         switch (d.type) {
index b182f33..7aabac2 100644 (file)
@@ -36,9 +36,6 @@ class QDate;
 class QDateTime;
 #ifndef QT_BOOTSTRAPPED
 class QEasingCurve;
-class QJsonValue;
-class QJsonObject;
-class QJsonArray;
 class QJsonDocument;
 #endif
 class QLine;
@@ -105,9 +102,6 @@ class Q_CORE_EXPORT QVariant
         RegExp = QMetaType::QRegExp,
         Hash = QMetaType::QVariantHash,
         EasingCurve = QMetaType::QEasingCurve,
-        JsonValue = QMetaType::QJsonValue,
-        JsonObject = QMetaType::QJsonObject,
-        JsonArray = QMetaType::QJsonArray,
         JsonDocument = QMetaType::QJsonDocument,
         LastCoreType = QMetaType::LastCoreType,
 
@@ -191,9 +185,6 @@ class Q_CORE_EXPORT QVariant
 #endif
 #ifndef QT_BOOTSTRAPPED
     QVariant(const QEasingCurve &easing);
-    QVariant(const QJsonValue &jsonValue);
-    QVariant(const QJsonObject &jsonObject);
-    QVariant(const QJsonArray &jsonArray);
     QVariant(const QJsonDocument &jsonDocument);
 #endif
 
@@ -258,9 +249,6 @@ class Q_CORE_EXPORT QVariant
 #endif
 #ifndef QT_BOOTSTRAPPED
     QEasingCurve toEasingCurve() const;
-    QJsonValue toJsonValue() const;
-    QJsonObject toJsonObject() const;
-    QJsonArray toJsonArray() const;
     QJsonDocument toJsonDocument() const;
 #endif
 
diff --git a/src/core/tools/qjsondocument.cpp b/src/core/tools/qjsondocument.cpp
new file mode 100644 (file)
index 0000000..23f4d40
--- /dev/null
@@ -0,0 +1,408 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 Ivailo Monev
+**
+** This file is part of the QtCore module of the Katie Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+**
+** GNU Lesser General Public License Usage
+** 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.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qjsondocument.h"
+#include "qstringlist.h"
+#include "qvariant.h"
+#include "qscopedpointer.h"
+#include "qcoreapplication.h"
+
+#include <jansson.h>
+
+QT_BEGIN_NAMESPACE
+
+class QJsonDocumentPrivate {
+public:
+    QJsonDocumentPrivate() : ref(1) { }
+
+    QVariantMap jsonToMap(const QByteArray &jsondata);
+    QByteArray mapToJson(const QVariantMap &jsonmap);
+
+    QAtomicInt ref;
+    QByteArray json;
+    QVariantMap map;
+    QString error;
+};
+
+QVariantMap QJsonDocumentPrivate::jsonToMap(const QByteArray &jsondata)
+{
+    QVariantMap result;
+
+    if (jsondata.isEmpty()) {
+        error = QCoreApplication::translate("QJsonDocument", "Data is empty");
+        return result;
+    }
+
+    json_error_t jerror;
+    json_t *jroot = json_loads(jsondata.constData(), 0, &jerror);
+
+    if (!jroot) {
+        error = jerror.text;
+        return result;
+    }
+
+    switch(json_typeof(jroot)) {
+        case JSON_OBJECT: {
+            const char *jkey;
+            json_t *jobject;
+            json_object_foreach(jroot, jkey, jobject) {
+                switch(json_typeof(jobject)) {
+                    case JSON_OBJECT: {
+                        result.insert(jkey, jsonToMap(json_dumps(jobject, 0)));
+                        break;
+                    }
+                    case JSON_ARRAY: {
+                        QVariantList listvalue;
+                        for (size_t i = 0; i < json_array_size(jobject); i++) {
+                            json_t *jarray = json_array_get(jobject, i);
+                            switch(json_typeof(jarray)) {
+                                case JSON_OBJECT: {
+                                    listvalue.append(jsonToMap(json_dumps(jarray, 0)));
+                                    break;
+                                }
+                                case JSON_STRING: {
+                                    listvalue.append(QVariant(json_string_value(jarray)));
+                                    break;
+                                }
+                                case JSON_INTEGER: {
+                                    listvalue.append(QVariant(json_integer_value(jarray)));
+                                    break;
+                                }
+                                case JSON_REAL: {
+                                    listvalue.append(QVariant(json_real_value(jarray)));
+                                    break;
+                                }
+                                case JSON_TRUE: {
+                                    listvalue.append(QVariant(true));
+                                    break;
+                                }
+                                case JSON_FALSE: {
+                                    listvalue.append(QVariant(false));
+                                    break;
+                                }
+                                case JSON_NULL: {
+                                    listvalue.append(QVariant());
+                                    break;
+                                }
+                                default: {
+                                    error = QCoreApplication::translate("QJsonDocument", "Unknown JSON type in array");
+                                    break;
+                                }
+                            }
+                        }
+                        result.insert(jkey, listvalue);
+                        break;
+                    }
+                    case JSON_STRING: {
+                        result.insert(jkey, QVariant(json_string_value(jobject)));
+                        break;
+                    }
+                    case JSON_INTEGER: {
+                        result.insert(jkey, QVariant(json_integer_value(jobject)));
+                        break;
+                    }
+                    case JSON_REAL: {
+                        result.insert(jkey, QVariant(json_real_value(jobject)));
+                        break;
+                    }
+                    case JSON_TRUE: {
+                        result.insert(jkey, QVariant(true));
+                        break;
+                    }
+                    case JSON_FALSE: {
+                        result.insert(jkey, QVariant(false));
+                        break;
+                    }
+                    case JSON_NULL: {
+                        result.insert(jkey, QVariant());
+                        break;
+                    }
+                    default: {
+                        error = QCoreApplication::translate("QJsonDocument", "Unknown JSON type");
+                        break;
+                    }
+                }
+            }
+            break;
+        }
+        default: {
+            error = QCoreApplication::translate("QJsonDocument", "Rootless array/values are not supported");
+            break;
+        }
+    }
+
+    json_decref(jroot);
+
+    // qDebug() << "converted" << jsondata << "to" << result;
+
+    return result;
+}
+
+QByteArray QJsonDocumentPrivate::mapToJson(const QVariantMap &jsonmap)
+{
+    QByteArray result;
+
+    if (jsonmap.isEmpty()) {
+        error = QCoreApplication::translate("QJsonDocument", "Data map is empty");
+        return result;
+    }
+
+    static const size_t jflags = JSON_SORT_KEYS | JSON_INDENT(4);
+    json_t *jroot = json_object();
+
+    foreach(const QString &key, jsonmap.keys()) {
+        const QVariant value = jsonmap.value(key);
+        const QByteArray bytearraykey = key.toUtf8();
+        switch(value.type()) {
+            case QVariant::Invalid: {
+                json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_null());
+                break;
+            }
+            case QVariant::Bool: {
+                json_object_set_new_nocheck(jroot, bytearraykey.constData(), value.toBool() ? json_true() : json_false());
+                break;
+            }
+            case QVariant::Int:
+            case QVariant::LongLong: {
+                json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_integer(value.toLongLong()));
+                break;
+            }
+            case QVariant::UInt:
+            case QVariant::ULongLong: {
+                json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_integer(value.toULongLong()));
+                break;
+            }
+            case QVariant::Float:
+            case QVariant::Double: {
+                json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_real(value.toReal()));
+                break;
+            }
+            case QVariant::Char:
+            case QVariant::ByteArray:
+            case QVariant::String: {
+                const QByteArray bytearrayvalue = value.toByteArray();
+                json_object_set_new_nocheck(jroot, bytearraykey.constData(), json_string(bytearrayvalue.constData()));
+                break;
+            }
+            case QVariant::List: // TODO: this works only for QString-convertable types
+            case QVariant::StringList: {
+                json_t *jarray = json_array();
+                foreach(const QString &listvalue, value.toStringList()) {
+                    const QByteArray bytearrayvalue = listvalue.toUtf8();
+                    json_array_append_new(jarray, json_stringn_nocheck(bytearrayvalue.constData(), bytearrayvalue.size()));
+                }
+                json_object_set_new_nocheck(jroot, bytearraykey.constData(), jarray);
+                break;
+            }
+            case QVariant::Hash:
+            case QVariant::Map: {
+                result += mapToJson(value.toMap());
+                break;
+            }
+
+            default: {
+                error = QCoreApplication::translate("QJsonDocument", "Unknown JSON type");
+                break;
+            }
+        }
+    }
+
+    result += json_dumps(jroot, jflags);
+    json_decref(jroot);
+
+    // qDebug() << "converted" << jsonmap << "to" << result;
+
+    return result;
+}
+
+QJsonDocument::QJsonDocument()
+   : d_ptr(Q_NULLPTR)
+{
+}
+
+QJsonDocument::~QJsonDocument()
+{
+    Q_D(QJsonDocument);
+    if (d && !d->ref.deref()) {
+        delete d;
+    }
+}
+
+QJsonDocument::QJsonDocument(const QJsonDocument &other)
+{
+    qAtomicAssign(d_ptr, other.d_ptr);
+}
+
+/*!
+    Assigns the \a other document to this QJsonDocument.
+    Returns a reference to this object.
+*/
+QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other)
+{
+    qAtomicAssign(d_ptr, other.d_ptr);
+    return *this;
+}
+
+/*!
+    Creates a QJsonDocument from the QVariant \a variant.
+
+    If the \a variant contains any other type than a QVariant::Invalid,
+    QVariant::Bool, QVariant::Int, QVariant::LongLong, QVariant::UInt,
+    QVariant::ULongLong, QVariant::Float, QVariant::Double, QVariant::Char,
+    QVariant::ByteArray, QVariant::String, QVariant::List,
+    QVariant::StringList, QVariant::Hash or QVariant::Map the returned document
+    is null.
+
+    \sa toVariant()
+ */
+QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)
+{
+    QScopedPointer<QJsonDocumentPrivate> d(new QJsonDocumentPrivate());
+    d->map = variant.toMap();
+    d->json = d->mapToJson(d->map);
+
+    QJsonDocument jd;
+    if (Q_UNLIKELY(!d->error.isEmpty())) {
+        d->json.clear();
+        d->map.clear();
+    }
+
+    jd.d_ptr = d.take();
+
+    // qDebug() << "QJsonDocument::fromVariant" << jd.errorString();
+
+    return jd;
+}
+
+/*!
+    Returns a QVariant representing the Json document.
+
+    The returned variant will be a QVariantList if the document is
+    a array and a QVariantMap if the document is a object.
+
+    \sa fromVariant()
+ */
+QVariant QJsonDocument::toVariant() const
+{
+    Q_D(const QJsonDocument);
+    if (!d) {
+        return QVariant();
+    }
+
+    return d->map;
+}
+
+/*!
+    Parses a UTF-8 encoded JSON document and creates a QJsonDocument
+    from it.
+
+    \a json contains the json document to be parsed.
+
+    \sa toJson(), errorString()
+ */
+QJsonDocument QJsonDocument::fromJson(const QByteArray &json)
+{
+    QScopedPointer<QJsonDocumentPrivate> d(new QJsonDocumentPrivate());
+    d->json = json;
+    d->map = d->jsonToMap(json);
+
+    if (Q_UNLIKELY(!d->error.isEmpty())) {
+        d->json.clear();
+        d->map.clear();
+    }
+
+    QJsonDocument jd;
+    jd.d_ptr = d.take();
+
+    // qDebug() << "QJsonDocument::fromJson" << jd.errorString();
+
+    return jd;
+}
+
+QByteArray QJsonDocument::toJson() const
+{
+    Q_D(const QJsonDocument);
+    if (!d) {
+        return QByteArray();
+    }
+
+    return d->json;
+}
+
+/*!
+    Returns \c true if the \a other document is equal to this document.
+ */
+bool QJsonDocument::operator==(const QJsonDocument &other) const
+{
+    Q_D(const QJsonDocument);
+    if (d == other.d_ptr) {
+        return true;
+    }
+
+    if (!d || !other.d_ptr) {
+        return false;
+    }
+
+    return (d->json == other.d_ptr->json && d->map == other.d_ptr->map);
+}
+
+/*!
+    \fn bool QJsonDocument::operator!=(const QJsonDocument &other) const
+
+    returns \c true if \a other is not equal to this document
+ */
+
+/*!
+    returns true if this document is null.
+
+    Null documents are documents created through the default constructor.
+
+    Documents created from UTF-8 encoded text are validated during parsing. If
+    validation fails, the returned document will be null.
+ */
+bool QJsonDocument::isNull() const
+{
+    Q_D(const QJsonDocument);
+    return (!d || (d->json.isEmpty() && d->map.isEmpty()));
+}
+
+QString QJsonDocument::errorString() const
+{
+    Q_D(const QJsonDocument);
+    if (!d) {
+        return QString();
+    }
+
+    return d->error;
+}
+
+QDebug operator<<(QDebug dbg, const QJsonDocument &jd)
+{
+    if (jd.isNull()) {
+        dbg << "QJsonDocument()";
+        return dbg;
+    }
+    dbg.nospace() << "QJsonDocument("
+                  << jd.toJson().constData()
+                  << ")";
+    return dbg.space();
+}
+
+QT_END_NAMESPACE
diff --git a/src/core/tools/qjsondocument.h b/src/core/tools/qjsondocument.h
new file mode 100644 (file)
index 0000000..debe1e4
--- /dev/null
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 Ivailo Monev
+**
+** This file is part of the QtCore module of the Katie Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+**
+** GNU Lesser General Public License Usage
+** 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.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QJSONDOCUMENT_H
+#define QJSONDOCUMENT_H
+
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+class QJsonDocumentPrivate;
+
+class Q_CORE_EXPORT QJsonDocument
+{
+    Q_DECLARE_PRIVATE(QJsonDocument)
+public:
+    QJsonDocument();
+    ~QJsonDocument();
+
+    QJsonDocument(const QJsonDocument &other);
+    QJsonDocument &operator =(const QJsonDocument &other);
+
+    static QJsonDocument fromVariant(const QVariant &variant);
+    QVariant toVariant() const;
+
+    static QJsonDocument fromJson(const QByteArray &json);
+    QByteArray toJson() const;
+
+    bool isNull() const;
+    QString errorString() const;
+
+    bool operator==(const QJsonDocument &other) const;
+    bool operator!=(const QJsonDocument &other) const {
+        return !(*this == other);
+    }
+
+private:
+    friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
+
+    QJsonDocumentPrivate *d_ptr;
+};
+
+Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
+
+QT_END_NAMESPACE
+
+#endif // QJSONDOCUMENT_H
index f846c91..f54625c 100644 (file)
@@ -371,14 +371,7 @@ static const struct ClassTblData {
     { QLatin1String("QItemSelection"), QLatin1String("QtGui/qitemselectionmodel.h") },
     { QLatin1String("QItemSelectionModel"), QLatin1String("QtGui/qitemselectionmodel.h") },
     { QLatin1String("QItemSelectionRange"), QLatin1String("QtGui/qitemselectionmodel.h") },
-    { QLatin1String("QJsonArray"), QLatin1String("QtCore/qjsonarray.h") },
     { QLatin1String("QJsonDocument"), QLatin1String("QtCore/qjsondocument.h") },
-    { QLatin1String("QJsonObject"), QLatin1String("QtCore/qjsonobject.h") },
-    { QLatin1String("QJsonParseError"), QLatin1String("QtCore/qjsondocument.h") },
-    { QLatin1String("QJsonValue"), QLatin1String("QtCore/qjsonvalue.h") },
-    { QLatin1String("QJsonValuePtr"), QLatin1String("QtCore/qjsonvalue.h") },
-    { QLatin1String("QJsonValueRef"), QLatin1String("QtCore/qjsonvalue.h") },
-    { QLatin1String("QJsonValueRefPtr"), QLatin1String("QtCore/qjsonvalue.h") },
     { QLatin1String("QKeyEvent"), QLatin1String("QtGui/qevent.h") },
     { QLatin1String("QKeySequence"), QLatin1String("QtGui/qkeysequence.h") },
     { QLatin1String("QLCDNumber"), QLatin1String("QtGui/qlcdnumber.h") },
diff --git a/tests/auto/qjsondocument/CMakeLists.txt b/tests/auto/qjsondocument/CMakeLists.txt
new file mode 100644 (file)
index 0000000..cc714ba
--- /dev/null
@@ -0,0 +1,3 @@
+katie_test(tst_qjsondocument
+    ${CMAKE_CURRENT_SOURCE_DIR}/tst_qjsondocument.cpp
+)
diff --git a/tests/auto/qjsondocument/invalidjson.json b/tests/auto/qjsondocument/invalidjson.json
new file mode 100644 (file)
index 0000000..9c5988b
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "Qt/GUIEffects": [
+        "none"
+    ],
+}
diff --git a/tests/auto/qjsondocument/qjsondocument.json b/tests/auto/qjsondocument/qjsondocument.json
new file mode 100644 (file)
index 0000000..5b0a82a
--- /dev/null
@@ -0,0 +1,35 @@
+{
+    "Qt/GUIEffects": [
+        "none"
+    ],
+    "Qt/Palette/active": [
+    ],
+    "Qt/Palette/disabled": [
+    ],
+    "Qt/Palette/inactive": [
+    ],
+    "Qt/cursorFlashTime": 1000,
+    "Qt/doubleClickInterval": 400,
+    "Qt/embedFonts": true,
+    "Qt/font": "Sans Serif,9,-1,5,50,0,0,0,0",
+    "Qt/fontPath": [
+    ],
+    "Qt/globalStrut/height": 0,
+    "Qt/globalStrut/width": 0,
+    "Qt/resolveSymlinks": false,
+    "Qt/style": "Cleanlooks",
+    "Qt/useRtlExtensions": false,
+    "Qt/wheelScrollLines": 3,
+
+    "MixedArray": [
+        1,
+        "a"
+    ],
+
+    "NestedObject": {
+        "MixedArray": [
+            2,
+            "b"
+        ]
+    }
+}
diff --git a/tests/auto/qjsondocument/tst_qjsondocument.cpp b/tests/auto/qjsondocument/tst_qjsondocument.cpp
new file mode 100644 (file)
index 0000000..4cd796a
--- /dev/null
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 Ivailo Monev
+**
+** This file is part of the test suite of the Katie Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+**
+** GNU Lesser General Public License Usage
+** 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.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <QtCore/QtCore>
+
+//TESTED_CLASS=QJsonDocument
+//TESTED_FILES=qjsondocument.cpp,qjsondocument.h
+
+static QString testinvalidfile = QString::fromLatin1(SRCDIR "/invalidjson.json");
+static QString testjsonfile = QString::fromLatin1(SRCDIR "/qjsondocument.json");
+static QVariantMap testjsondata;
+
+class tst_QJsonDocument : public QObject
+{
+    Q_OBJECT
+
+public slots:
+    void init();
+    void cleanup();
+
+private slots:
+    void read();
+    void write();
+    void error();
+};
+
+void tst_QJsonDocument::init()
+{
+    testjsondata.insert("Qt/GUIEffects", QStringList() << "none");
+    testjsondata.insert("Qt/doubleClickInterval", 400);
+    testjsondata.insert("Qt/embedFonts", true);
+    testjsondata.insert("Qt/style", "Cleanlooks");
+
+    testjsondata.insert("MixedArray", QVariantList() << 1 << "a");
+    QVariantMap NestedObject;
+    NestedObject.insert("MixedArray", QVariantList() << 2 << "b");
+    testjsondata.insert("NestedObject", NestedObject);
+}
+
+void tst_QJsonDocument::cleanup()
+{
+    testjsondata.clear();
+}
+
+void tst_QJsonDocument::read()
+{
+    QJsonDocument jsondoc = QJsonDocument::fromVariant(testjsondata);
+    QVERIFY(jsondoc.errorString().isEmpty());
+    QVariantMap jsonmap = jsondoc.toVariant().toMap();
+
+    QStringList GUIEffects = jsonmap.value("Qt/GUIEffects").toStringList();
+    QCOMPARE(GUIEffects, QStringList() << "none");
+
+    int doubleClickInterval = jsonmap.value("Qt/doubleClickInterval").toInt();
+    QCOMPARE(doubleClickInterval, 400);
+
+    bool embedFonts = jsonmap.value("Qt/embedFonts").toBool();
+    QCOMPARE(embedFonts, true);
+
+    QString style = jsonmap.value("Qt/style").toString();
+    QCOMPARE(style, QLatin1String("Cleanlooks"));
+
+    QVariantList MixedArray = jsonmap.value("MixedArray").toList();
+    QCOMPARE(MixedArray, QVariantList() << 1 << "a");
+
+    QVariantList NestedObject = jsonmap.value("NestedObject").toMap().value("MixedArray").toList();
+    QCOMPARE(NestedObject, QVariantList() << 2 << "b");
+
+    QFile jsonfile(testjsonfile);
+    QVERIFY(jsonfile.open(QIODevice::ReadOnly));
+
+    jsondoc = QJsonDocument::fromJson(jsonfile.readAll());
+    QVERIFY(jsondoc.errorString().isEmpty());
+    jsonmap = jsondoc.toVariant().toMap();
+
+    GUIEffects = jsonmap.value("Qt/GUIEffects").toStringList();
+    QCOMPARE(GUIEffects, QStringList() << "none");
+
+    doubleClickInterval = jsonmap.value("Qt/doubleClickInterval").toInt();
+    QCOMPARE(doubleClickInterval, 400);
+
+    embedFonts = jsonmap.value("Qt/embedFonts").toBool();
+    QCOMPARE(embedFonts, true);
+
+    style = jsonmap.value("Qt/style").toString();
+    QCOMPARE(style, QLatin1String("Cleanlooks"));
+
+    MixedArray = jsonmap.value("MixedArray").toList();
+    QCOMPARE(MixedArray, QVariantList() << 1 << "a");
+
+    NestedObject = jsonmap.value("NestedObject").toMap().value("MixedArray").toList();
+    QCOMPARE(NestedObject, QVariantList() << 2 << "b");
+
+    // TODO: test other types too
+}
+
+void tst_QJsonDocument::write()
+{
+    QJsonDocument jsondoc = QJsonDocument::fromVariant(testjsondata);
+    // TODO: compare to desired output
+    QVERIFY(!jsondoc.toJson().isEmpty());
+
+    QFile jsonfile(testjsonfile);
+    QVERIFY(jsonfile.open(QIODevice::ReadOnly));
+    QByteArray jsoncontent = jsonfile.readAll();
+    jsondoc = QJsonDocument::fromJson(jsoncontent);
+    QCOMPARE(jsoncontent, jsondoc.toJson());
+}
+
+void tst_QJsonDocument::error()
+{
+    QFile jsonfile(testinvalidfile);
+    QVERIFY(jsonfile.open(QIODevice::ReadOnly));
+    QJsonDocument jsondoc = QJsonDocument::fromJson(jsonfile.readAll());
+    // not testing for specific string on purpose
+    QVERIFY(!jsondoc.errorString().isEmpty());
+    QVERIFY(jsondoc.isNull());
+
+    jsondoc = QJsonDocument::fromVariant(QVariantMap());
+    QCOMPARE(jsondoc.errorString(), QLatin1String("Data map is empty"));
+    QVERIFY(jsondoc.isNull());
+
+    // TODO: indermediate error test
+}
+
+QTEST_MAIN(tst_QJsonDocument)
+
+#include "moc_tst_qjsondocument.cpp"
index 78321c1..67fe81a 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-05 06:17+0200\n"
+"POT-Creation-Date: 2021-02-11 01:35+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,1394 +17,1349 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/core/plugin/qlibrary.cpp:187
+#: src/core/plugin/qlibrary.cpp:175
 msgid "'%1' is not ELF file"
 msgstr ""
 
-#: src/core/plugin/qlibrary.cpp:190
+#: src/core/plugin/qlibrary.cpp:178
 msgid "ELF class mismatch in '%1'"
 msgstr ""
 
-#: src/core/plugin/qlibrary.cpp:214
+#: src/core/plugin/qlibrary.cpp:202
 msgid "Plugin verification data mismatch in '%1'"
 msgstr ""
 
-#: src/core/plugin/qlibrary.cpp:426 src/core/plugin/qlibrary.cpp:461
-#: src/core/plugin/qpluginloader.cpp:274
+#: src/core/plugin/qlibrary.cpp:414 src/core/plugin/qlibrary.cpp:449
+#: src/core/plugin/qpluginloader.cpp:262
 msgid "The shared library was not found."
 msgstr ""
 
-#: src/core/plugin/qlibrary.cpp:463
+#: src/core/plugin/qlibrary.cpp:451
 msgid "The file '%1' is not a valid Katie plugin."
 msgstr ""
 
-#: src/core/plugin/qlibrary.cpp:476
+#: src/core/plugin/qlibrary.cpp:464
 msgid "The plugin uses incompatible Katie library: %1 (%2, %3)"
 msgstr ""
 
-#: src/core/plugin/qlibrary.cpp:809 src/core/plugin/qpluginloader.cpp:291
-#: src/core/io/qiodevice.cpp:1541 src/network/ssl/qsslerror.cpp:261
-#: src/network/socket/qnativesocketengine.cpp:268
-#: src/network/access/qftp.cpp:1439 src/uitools/formscriptrunner.cpp:116
+#: src/core/plugin/qlibrary.cpp:797 src/core/plugin/qpluginloader.cpp:279
+#: src/core/io/qiodevice.cpp:1529 src/network/ssl/qsslerror.cpp:249
+#: src/network/socket/qnativesocketengine.cpp:256
+#: src/network/access/qftp.cpp:1427 src/uitools/formscriptrunner.cpp:104
 msgid "Unknown error"
 msgstr ""
 
-#: src/core/plugin/qlibrary_unix.cpp:68
+#: src/core/plugin/qlibrary_unix.cpp:56
 msgid "Cannot load library %1: %2"
 msgstr ""
 
-#: src/core/plugin/qlibrary_unix.cpp:79
+#: src/core/plugin/qlibrary_unix.cpp:67
 msgid "Cannot unload library %1: %2"
 msgstr ""
 
-#: src/core/plugin/qlibrary_unix.cpp:90
+#: src/core/plugin/qlibrary_unix.cpp:78
 msgid "Cannot resolve symbol \"%1\" in %2: %3"
 msgstr ""
 
-#: src/core/plugin/qpluginloader.cpp:229
+#: src/core/plugin/qpluginloader.cpp:217
 msgid "The plugin was not loaded."
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:295
+#: src/core/io/qstandardpaths.cpp:283
 msgctxt "QStandardPaths"
 msgid "Desktop"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:297
+#: src/core/io/qstandardpaths.cpp:285
 msgctxt "QStandardPaths"
 msgid "Documents"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:299
+#: src/core/io/qstandardpaths.cpp:287
 msgctxt "QStandardPaths"
 msgid "Fonts"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:301
+#: src/core/io/qstandardpaths.cpp:289
 msgctxt "QStandardPaths"
 msgid "Applications"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:303
+#: src/core/io/qstandardpaths.cpp:291
 msgctxt "QStandardPaths"
 msgid "Music"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:305
+#: src/core/io/qstandardpaths.cpp:293
 msgctxt "QStandardPaths"
 msgid "Movies"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:307
+#: src/core/io/qstandardpaths.cpp:295
 msgctxt "QStandardPaths"
 msgid "Pictures"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:309
+#: src/core/io/qstandardpaths.cpp:297
 msgctxt "QStandardPaths"
 msgid "Temporary Directory"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:311
+#: src/core/io/qstandardpaths.cpp:299
 msgctxt "QStandardPaths"
 msgid "Home"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:313
+#: src/core/io/qstandardpaths.cpp:301
 msgctxt "QStandardPaths"
 msgid "Application Data"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:315
+#: src/core/io/qstandardpaths.cpp:303
 msgctxt "QStandardPaths"
 msgid "Cache"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:317
+#: src/core/io/qstandardpaths.cpp:305
 msgctxt "QStandardPaths"
 msgid "Shared Data"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:319
+#: src/core/io/qstandardpaths.cpp:307
 msgctxt "QStandardPaths"
 msgid "Runtime"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:321
+#: src/core/io/qstandardpaths.cpp:309
 msgctxt "QStandardPaths"
 msgid "Configuration"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:323
+#: src/core/io/qstandardpaths.cpp:311
 msgctxt "QStandardPaths"
 msgid "Shared Configuration"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:325
+#: src/core/io/qstandardpaths.cpp:313
 msgctxt "QStandardPaths"
 msgid "Shared Cache"
 msgstr ""
 
-#: src/core/io/qstandardpaths.cpp:327
+#: src/core/io/qstandardpaths.cpp:315
 msgctxt "QStandardPaths"
 msgid "Download"
 msgstr ""
 
-#: src/core/io/qfile.cpp:597
+#: src/core/io/qfile.cpp:585
 msgid "Destination file exists"
 msgstr ""
 
-#: src/core/io/qfile.cpp:612
+#: src/core/io/qfile.cpp:600
 msgid "Will not rename sequential file using block copy"
 msgstr ""
 
-#: src/core/io/qfile.cpp:635
+#: src/core/io/qfile.cpp:623
 msgid "Cannot remove source file"
 msgstr ""
 
-#: src/core/io/qfile.cpp:1034
+#: src/core/io/qfile.cpp:1022
 msgid "No file engine available or engine does not support UnMapExtension"
 msgstr ""
 
-#: src/core/io/qprocess.cpp:809 src/core/io/qprocess.cpp:861
+#: src/core/io/qprocess.cpp:797 src/core/io/qprocess.cpp:849
 msgid "Error reading from process"
 msgstr ""
 
-#: src/core/io/qprocess.cpp:908
+#: src/core/io/qprocess.cpp:896
 msgid "Error writing to process"
 msgstr ""
 
-#: src/core/io/qprocess.cpp:971
+#: src/core/io/qprocess.cpp:959
 msgid "Process crashed"
 msgstr ""
 
-#: src/core/io/qprocess.cpp:1858
+#: src/core/io/qprocess.cpp:1846
 msgid "No program defined"
 msgstr ""
 
-#: src/core/io/qprocess_unix.cpp:393
+#: src/core/io/qprocess_unix.cpp:381
 msgid "Could not open input redirection for reading"
 msgstr ""
 
-#: src/core/io/qprocess_unix.cpp:405
+#: src/core/io/qprocess_unix.cpp:393
 msgid "Could not open output redirection for writing"
 msgstr ""
 
-#: src/core/io/qprocess_unix.cpp:623
+#: src/core/io/qprocess_unix.cpp:611
 msgid "Resource error (fork failure): %1"
 msgstr ""
 
-#: src/core/io/qprocess_unix.cpp:860 src/core/io/qprocess_unix.cpp:908
-#: src/core/io/qprocess_unix.cpp:978 src/core/io/qprocess_unix.cpp:1040
+#: src/core/io/qprocess_unix.cpp:848 src/core/io/qprocess_unix.cpp:896
+#: src/core/io/qprocess_unix.cpp:966 src/core/io/qprocess_unix.cpp:1028
 msgid "Process operation timed out"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory.cpp:220
+#: src/core/kernel/qsharedmemory.cpp:208
 msgid "%1: unable to set key on lock"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory.cpp:304
+#: src/core/kernel/qsharedmemory.cpp:292
 msgid "%1: create size is less then 0"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory.cpp:477 src/core/kernel/qsharedmemory_p.h:131
+#: src/core/kernel/qsharedmemory.cpp:465 src/core/kernel/qsharedmemory_p.h:119
 msgid "%1: unable to lock"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory.cpp:498
+#: src/core/kernel/qsharedmemory.cpp:486
 msgid "%1: unable to unlock"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:75
+#: src/core/kernel/qsharedmemory_unix.cpp:63
 msgid "%1: permission denied"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:79
+#: src/core/kernel/qsharedmemory_unix.cpp:67
 msgid "%1: already exists"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:83
+#: src/core/kernel/qsharedmemory_unix.cpp:71
 msgid "%1: doesn't exist"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:91
+#: src/core/kernel/qsharedmemory_unix.cpp:79
 msgid "%1: out of resources"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:95
+#: src/core/kernel/qsharedmemory_unix.cpp:83
 msgid "%1: invalid size"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:99
+#: src/core/kernel/qsharedmemory_unix.cpp:87
 msgid "%1: unknown error %2"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:118
-#: src/core/kernel/qsystemsemaphore_unix.cpp:125
+#: src/core/kernel/qsharedmemory_unix.cpp:106
+#: src/core/kernel/qsystemsemaphore_unix.cpp:113
 msgid "%1: key is empty"
 msgstr ""
 
-#: src/core/kernel/qsharedmemory_unix.cpp:146
-#: src/core/kernel/qsharedmemory_unix.cpp:182
+#: src/core/kernel/qsharedmemory_unix.cpp:134
+#: src/core/kernel/qsharedmemory_unix.cpp:170
 msgid "%1: bad name"
 msgstr ""
 
-#: src/core/kernel/qsystemsemaphore_unix.cpp:80
+#: src/core/kernel/qsystemsemaphore_unix.cpp:68
 msgctxt "QSystemSemaphore"
 msgid "%1: permission denied"
 msgstr ""
 
-#: src/core/kernel/qsystemsemaphore_unix.cpp:84
+#: src/core/kernel/qsystemsemaphore_unix.cpp:72
 msgctxt "QSystemSemaphore"
 msgid "%1: already exists"
 msgstr ""
 
-#: src/core/kernel/qsystemsemaphore_unix.cpp:88
+#: src/core/kernel/qsystemsemaphore_unix.cpp:76
 msgctxt "QSystemSemaphore"
 msgid "%1: does not exist"
 msgstr ""
 
-#: src/core/kernel/qsystemsemaphore_unix.cpp:97
+#: src/core/kernel/qsystemsemaphore_unix.cpp:85
 msgctxt "QSystemSemaphore"
 msgid "%1: out of resources"
 msgstr ""
 
-#: src/core/kernel/qsystemsemaphore_unix.cpp:101
+#: src/core/kernel/qsystemsemaphore_unix.cpp:89
 msgctxt "QSystemSemaphore"
 msgid "%1: name error"
 msgstr ""
 
-#: src/core/kernel/qsystemsemaphore_unix.cpp:105
+#: src/core/kernel/qsystemsemaphore_unix.cpp:93
 msgctxt "QSystemSemaphore"
 msgid "%1: unknown error %2"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:57
+#: src/core/tools/qregexp.cpp:45
 msgctxt "QRegExp"
 msgid "no error occurred"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:58
+#: src/core/tools/qregexp.cpp:46
 msgctxt "QRegExp"
 msgid "disabled feature used"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:59
+#: src/core/tools/qregexp.cpp:47
 msgctxt "QRegExp"
 msgid "bad char class syntax"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:60
+#: src/core/tools/qregexp.cpp:48
 msgctxt "QRegExp"
 msgid "bad lookahead syntax"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:61
+#: src/core/tools/qregexp.cpp:49
 msgctxt "QRegExp"
 msgid "lookbehinds not supported, see QTBUG-2371"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:62
+#: src/core/tools/qregexp.cpp:50
 msgctxt "QRegExp"
 msgid "bad repetition syntax"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:63
+#: src/core/tools/qregexp.cpp:51
 msgctxt "QRegExp"
 msgid "invalid octal value"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:64
+#: src/core/tools/qregexp.cpp:52
 msgctxt "QRegExp"
 msgid "missing left delim"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:65
+#: src/core/tools/qregexp.cpp:53
 msgctxt "QRegExp"
 msgid "unexpected end"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:66
+#: src/core/tools/qregexp.cpp:54
 msgctxt "QRegExp"
 msgid "met internal limit"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:67
+#: src/core/tools/qregexp.cpp:55
 msgctxt "QRegExp"
 msgid "invalid interval"
 msgstr ""
 
-#: src/core/tools/qregexp.cpp:68
+#: src/core/tools/qregexp.cpp:56
 msgctxt "QRegExp"
 msgid "invalid category"
 msgstr ""
 
-#: src/core/json/qjsonparser.cpp:59
-msgctxt "QJsonParseError"
-msgid "no error occurred"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:60
-msgctxt "QJsonParseError"
-msgid "unterminated object"
+#: src/core/tools/qjsondocument.cpp:49
+msgctxt "QJsonDocument"
+msgid "Data is empty"
 msgstr ""
 
-#: src/core/json/qjsonparser.cpp:61
-msgctxt "QJsonParseError"
-msgid "missing name separator"
+#: src/core/tools/qjsondocument.cpp:105
+msgctxt "QJsonDocument"
+msgid "Unknown JSON type in array"
 msgstr ""
 
-#: src/core/json/qjsonparser.cpp:62
-msgctxt "QJsonParseError"
-msgid "unterminated array"
+#: src/core/tools/qjsondocument.cpp:138 src/core/tools/qjsondocument.cpp:221
+msgctxt "QJsonDocument"
+msgid "Unknown JSON type"
 msgstr ""
 
-#: src/core/json/qjsonparser.cpp:63
-msgctxt "QJsonParseError"
-msgid "missing value separator"
+#: src/core/tools/qjsondocument.cpp:146
+msgctxt "QJsonDocument"
+msgid "Rootless array/values are not supported"
 msgstr ""
 
-#: src/core/json/qjsonparser.cpp:64
-msgctxt "QJsonParseError"
-msgid "illegal value"
+#: src/core/tools/qjsondocument.cpp:163
+msgctxt "QJsonDocument"
+msgid "Data map is empty"
 msgstr ""
 
-#: src/core/json/qjsonparser.cpp:65
-msgctxt "QJsonParseError"
-msgid "invalid termination by number"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:66
-msgctxt "QJsonParseError"
-msgid "illegal number"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:67
-msgctxt "QJsonParseError"
-msgid "invalid escape sequence"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:68
-msgctxt "QJsonParseError"
-msgid "invalid UTF8 string"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:69
-msgctxt "QJsonParseError"
-msgid "unterminated string"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:70
-msgctxt "QJsonParseError"
-msgid "object is missing after a comma"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:71
-msgctxt "QJsonParseError"
-msgid "too deeply nested document"
-msgstr ""
-
-#: src/core/json/qjsonparser.cpp:72
-msgctxt "QJsonParseError"
-msgid "too large document"
-msgstr ""
-
-#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:95
+#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:83
 msgctxt "QDeclarativeAnimatedImage"
 msgid "Katie was built without support for QMovie"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:167
+#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:155
 msgid "KeyNavigation is only available via attached properties"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:168
+#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:156
 msgid "Keys is only available via attached properties"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:193
+#: src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp:181
 msgid "LayoutMirroring is only available via attached properties"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeloader.cpp:399
+#: src/declarative/graphicsitems/qdeclarativeloader.cpp:387
 msgid "Loader does not support loading non-visual elements."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:189
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:177
 msgid "Possible anchor loop detected on fill."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:218
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:206
 msgid "Possible anchor loop detected on centerIn."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:426
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:460
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1106
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1143
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:414
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:448
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1094
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1131
 msgid "Cannot anchor to an item that isn't a parent or sibling."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:573
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:561
 msgid "Possible anchor loop detected on vertical anchor."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:668
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:656
 msgid "Possible anchor loop detected on horizontal anchor."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1090
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1078
 msgid "Cannot specify left, right, and hcenter anchors."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1100
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1137
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1088
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1125
 msgid "Cannot anchor to a null item."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1103
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1091
 msgid "Cannot anchor a horizontal edge to a vertical edge."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1109
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1146
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1097
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1134
 msgid "Cannot anchor item to self."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1121
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1109
 msgid "Cannot specify top, bottom, and vcenter anchors."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1127
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1115
 msgid ""
 "Baseline anchor cannot be used in conjunction with top, bottom, or vcenter "
 "anchors."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1140
+#: src/declarative/graphicsitems/qdeclarativeanchors.cpp:1128
 msgid "Cannot anchor a vertical edge to a horizontal edge."
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:921
-#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:929
+#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:909
+#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:917
 msgid "Could not load cursor delegate"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:940
+#: src/declarative/graphicsitems/qdeclarativetextinput.cpp:928
 msgid "Could not instantiate cursor delegate"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:130
+#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:118
 msgid "front is a write-once property"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:150
+#: src/declarative/graphicsitems/qdeclarativeflipable.cpp:138
 msgid "back is a write-once property"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativeitem.cpp:795
+#: src/declarative/graphicsitems/qdeclarativeitem.cpp:783
 msgid "LayoutDirection attached property only works with Items"
 msgstr ""
 
-#: src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp:1093
+#: src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp:1081
 msgid "Delegate component must be Item type."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:176
-#: src/declarative/qml/qdeclarativecompiler.cpp:1830
-#: src/declarative/qml/qdeclarativecompiler.cpp:2035
-#: src/declarative/qml/qdeclarativecompiler.cpp:2116
-#: src/declarative/qml/qdeclarativecompiler.cpp:2191
-#: src/declarative/qml/qdeclarativecompiler.cpp:2785
+#: src/declarative/qml/qdeclarativecompiler.cpp:164
+#: src/declarative/qml/qdeclarativecompiler.cpp:1818
+#: src/declarative/qml/qdeclarativecompiler.cpp:2023
+#: src/declarative/qml/qdeclarativecompiler.cpp:2104
+#: src/declarative/qml/qdeclarativecompiler.cpp:2179
+#: src/declarative/qml/qdeclarativecompiler.cpp:2773
 msgid "Invalid property assignment: \"%1\" is a read-only property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:185
+#: src/declarative/qml/qdeclarativecompiler.cpp:173
 msgid "Invalid property assignment: unknown enumeration"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:193
+#: src/declarative/qml/qdeclarativecompiler.cpp:181
 msgid "Invalid property assignment: string expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:196
+#: src/declarative/qml/qdeclarativecompiler.cpp:184
 msgid "Invalid property assignment: url expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:206
+#: src/declarative/qml/qdeclarativecompiler.cpp:194
 msgid "Invalid property assignment: unsigned int expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:217
+#: src/declarative/qml/qdeclarativecompiler.cpp:205
 msgid "Invalid property assignment: int expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:221
-#: src/declarative/qml/qdeclarativecompiler.cpp:224
+#: src/declarative/qml/qdeclarativecompiler.cpp:209
+#: src/declarative/qml/qdeclarativecompiler.cpp:212
 msgid "Invalid property assignment: number expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:230
+#: src/declarative/qml/qdeclarativecompiler.cpp:218
 msgid "Invalid property assignment: color expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:238
+#: src/declarative/qml/qdeclarativecompiler.cpp:226
 msgid "Invalid property assignment: date expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:245
+#: src/declarative/qml/qdeclarativecompiler.cpp:233
 msgid "Invalid property assignment: time expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:252
+#: src/declarative/qml/qdeclarativecompiler.cpp:240
 msgid "Invalid property assignment: datetime expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:261
+#: src/declarative/qml/qdeclarativecompiler.cpp:249
 msgid "Invalid property assignment: point expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:269
+#: src/declarative/qml/qdeclarativecompiler.cpp:257
 msgid "Invalid property assignment: size expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:277
+#: src/declarative/qml/qdeclarativecompiler.cpp:265
 msgid "Invalid property assignment: rect expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:282
+#: src/declarative/qml/qdeclarativecompiler.cpp:270
 msgid "Invalid property assignment: boolean expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:289
+#: src/declarative/qml/qdeclarativecompiler.cpp:277
 msgid "Invalid property assignment: 3D vector expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:294
+#: src/declarative/qml/qdeclarativecompiler.cpp:282
 msgid "Invalid property assignment: unsupported type \"%1\""
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:566
+#: src/declarative/qml/qdeclarativecompiler.cpp:554
 msgid "Element is not creatable."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1216
+#: src/declarative/qml/qdeclarativecompiler.cpp:1204
 msgid "Component elements may not contain properties other than id"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1223
+#: src/declarative/qml/qdeclarativecompiler.cpp:1211
 msgid "Invalid component id specification"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1229
-#: src/declarative/qml/qdeclarativecompiler.cpp:1744
+#: src/declarative/qml/qdeclarativecompiler.cpp:1217
+#: src/declarative/qml/qdeclarativecompiler.cpp:1732
 msgid "id is not unique"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1239
+#: src/declarative/qml/qdeclarativecompiler.cpp:1227
 msgid "Invalid component body specification"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1242
+#: src/declarative/qml/qdeclarativecompiler.cpp:1230
 msgid "Component objects cannot declare new properties."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1244
+#: src/declarative/qml/qdeclarativecompiler.cpp:1232
 msgid "Component objects cannot declare new signals."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1246
+#: src/declarative/qml/qdeclarativecompiler.cpp:1234
 msgid "Component objects cannot declare new functions."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1253
+#: src/declarative/qml/qdeclarativecompiler.cpp:1241
 msgid "Cannot create empty component specification"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1341
-#: src/declarative/qml/qdeclarativecompiler.cpp:1462
+#: src/declarative/qml/qdeclarativecompiler.cpp:1329
+#: src/declarative/qml/qdeclarativecompiler.cpp:1450
 msgid "\"%1.%2\" is not available in %3 %4.%5."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1343
-#: src/declarative/qml/qdeclarativecompiler.cpp:1464
+#: src/declarative/qml/qdeclarativecompiler.cpp:1331
+#: src/declarative/qml/qdeclarativecompiler.cpp:1452
 msgid "\"%1.%2\" is not available due to component versioning."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1354
+#: src/declarative/qml/qdeclarativecompiler.cpp:1342
 msgid "Incorrectly specified signal assignment"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1366
+#: src/declarative/qml/qdeclarativecompiler.cpp:1354
 msgid "Cannot assign a value to a signal (expecting a script to be run)"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1370
+#: src/declarative/qml/qdeclarativecompiler.cpp:1358
 msgid "Empty signal assignment"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1408
+#: src/declarative/qml/qdeclarativecompiler.cpp:1396
 msgid "Empty property assignment"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1420
+#: src/declarative/qml/qdeclarativecompiler.cpp:1408
 msgid "Attached properties cannot be used here"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1434
-#: src/declarative/qml/qdeclarativecompiler.cpp:1562
+#: src/declarative/qml/qdeclarativecompiler.cpp:1422
+#: src/declarative/qml/qdeclarativecompiler.cpp:1550
 msgid "Non-existent attached object"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1438
-#: src/declarative/qml/qdeclarativecompiler.cpp:1565
+#: src/declarative/qml/qdeclarativecompiler.cpp:1426
+#: src/declarative/qml/qdeclarativecompiler.cpp:1553
 msgid "Invalid attached object assignment"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1517
+#: src/declarative/qml/qdeclarativecompiler.cpp:1505
 msgid "Cannot assign to non-existent default property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1519
-#: src/declarative/qml/qdeclarativecompiler.cpp:1875
-#: src/declarative/qml/qdeclarativecompiler.cpp:1878
-#: src/declarative/util/qdeclarativeconnections.cpp:199
-#: src/declarative/util/qdeclarativeconnections.cpp:263
-#: src/declarative/util/qdeclarativepropertychanges.cpp:416
+#: src/declarative/qml/qdeclarativecompiler.cpp:1507
+#: src/declarative/qml/qdeclarativecompiler.cpp:1863
+#: src/declarative/qml/qdeclarativecompiler.cpp:1866
+#: src/declarative/util/qdeclarativeconnections.cpp:187
+#: src/declarative/util/qdeclarativeconnections.cpp:251
+#: src/declarative/util/qdeclarativepropertychanges.cpp:404
 msgid "Cannot assign to non-existent property \"%1\""
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1549
+#: src/declarative/qml/qdeclarativecompiler.cpp:1537
 msgid "Invalid use of namespace"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1554
+#: src/declarative/qml/qdeclarativecompiler.cpp:1542
 msgid "Not an attached property name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1736
+#: src/declarative/qml/qdeclarativecompiler.cpp:1724
 msgid "Invalid use of id property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1823
-#: src/declarative/qml/qdeclarativecompiler.cpp:1825
+#: src/declarative/qml/qdeclarativecompiler.cpp:1811
+#: src/declarative/qml/qdeclarativecompiler.cpp:1813
 msgid "Property has already been assigned a value"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1843
-#: src/declarative/qml/qdeclarativecompiler.cpp:1850
+#: src/declarative/qml/qdeclarativecompiler.cpp:1831
+#: src/declarative/qml/qdeclarativecompiler.cpp:1838
 msgid "Invalid grouped property access"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1853
+#: src/declarative/qml/qdeclarativecompiler.cpp:1841
 msgid "Cannot assign a value directly to a grouped property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1869
+#: src/declarative/qml/qdeclarativecompiler.cpp:1857
 msgid "Invalid property use"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1884
+#: src/declarative/qml/qdeclarativecompiler.cpp:1872
 msgid "Property assignment expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1887
+#: src/declarative/qml/qdeclarativecompiler.cpp:1875
 msgid "Single property assignment expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1892
+#: src/declarative/qml/qdeclarativecompiler.cpp:1880
 msgid "Unexpected object assignment"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1957
+#: src/declarative/qml/qdeclarativecompiler.cpp:1945
 msgid "Cannot assign object to list"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1963
+#: src/declarative/qml/qdeclarativecompiler.cpp:1951
 msgid "Can only assign one binding to lists"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1969
+#: src/declarative/qml/qdeclarativecompiler.cpp:1957
 msgid "Cannot assign primitives to lists"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1982
+#: src/declarative/qml/qdeclarativecompiler.cpp:1970
 msgid "Cannot assign multiple values to a script property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:1985
+#: src/declarative/qml/qdeclarativecompiler.cpp:1973
 msgid "Invalid property assignment: script expected"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2000
+#: src/declarative/qml/qdeclarativecompiler.cpp:1988
 msgid "Cannot assign multiple values to a singular property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2093
+#: src/declarative/qml/qdeclarativecompiler.cpp:2081
 msgid "Cannot assign object to property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2143
+#: src/declarative/qml/qdeclarativecompiler.cpp:2131
 msgid "\"%1\" cannot operate on \"%2\""
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2319
+#: src/declarative/qml/qdeclarativecompiler.cpp:2307
 msgid "Duplicate default property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2324
+#: src/declarative/qml/qdeclarativecompiler.cpp:2312
 msgid "Duplicate property name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2328
+#: src/declarative/qml/qdeclarativecompiler.cpp:2316
 msgid "Property names cannot begin with an upper case letter"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2331
+#: src/declarative/qml/qdeclarativecompiler.cpp:2319
 msgid "Illegal property name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2339
+#: src/declarative/qml/qdeclarativecompiler.cpp:2327
 msgid "Duplicate signal name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2342
+#: src/declarative/qml/qdeclarativecompiler.cpp:2330
 msgid "Signal names cannot begin with an upper case letter"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2344
+#: src/declarative/qml/qdeclarativecompiler.cpp:2332
 msgid "Illegal signal name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2350
+#: src/declarative/qml/qdeclarativecompiler.cpp:2338
 msgid "Duplicate method name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2353
+#: src/declarative/qml/qdeclarativecompiler.cpp:2341
 msgid "Method names cannot begin with an upper case letter"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2355
+#: src/declarative/qml/qdeclarativecompiler.cpp:2343
 msgid "Illegal method name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2376
+#: src/declarative/qml/qdeclarativecompiler.cpp:2364
 msgid "Property value set multiple times"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2380
+#: src/declarative/qml/qdeclarativecompiler.cpp:2368
 msgid "Invalid property nesting"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2432
+#: src/declarative/qml/qdeclarativecompiler.cpp:2420
 msgid "Cannot override FINAL property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2455
+#: src/declarative/qml/qdeclarativecompiler.cpp:2443
 msgid "Invalid property type"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2632
+#: src/declarative/qml/qdeclarativecompiler.cpp:2620
 msgid "Invalid empty ID"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2635
+#: src/declarative/qml/qdeclarativecompiler.cpp:2623
 msgid "IDs cannot start with an uppercase letter"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2641
+#: src/declarative/qml/qdeclarativecompiler.cpp:2629
 msgid "IDs must start with a letter or underscore"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2643
+#: src/declarative/qml/qdeclarativecompiler.cpp:2631
 msgid "IDs must contain only letters, numbers, and underscores"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2649
+#: src/declarative/qml/qdeclarativecompiler.cpp:2637
 msgid "ID illegally masks global JavaScript property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2680
-#: src/declarative/qml/qdeclarativecompiler.cpp:2689
+#: src/declarative/qml/qdeclarativecompiler.cpp:2668
+#: src/declarative/qml/qdeclarativecompiler.cpp:2677
 msgid "No property alias location"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2685
-#: src/declarative/qml/qdeclarativecompiler.cpp:2710
-#: src/declarative/qml/qdeclarativecompiler.cpp:2717
-#: src/declarative/qml/qdeclarativecompiler.cpp:2724
-#: src/declarative/qml/qdeclarativecompiler.cpp:2730
+#: src/declarative/qml/qdeclarativecompiler.cpp:2673
+#: src/declarative/qml/qdeclarativecompiler.cpp:2698
+#: src/declarative/qml/qdeclarativecompiler.cpp:2705
+#: src/declarative/qml/qdeclarativecompiler.cpp:2712
+#: src/declarative/qml/qdeclarativecompiler.cpp:2718
 msgid "Invalid alias location"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2694
+#: src/declarative/qml/qdeclarativecompiler.cpp:2682
 msgid ""
 "Invalid alias reference. An alias reference must be specified as <id>, <id>."
 "<property> or <id>.<value property>.<property>"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2697
+#: src/declarative/qml/qdeclarativecompiler.cpp:2685
 msgid "Invalid alias reference. Unable to find id \"%1\""
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiler.cpp:2712
+#: src/declarative/qml/qdeclarativecompiler.cpp:2700
 msgid "Alias property exceeds alias bounds"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:372
+#: src/declarative/qml/qdeclarativeimport.cpp:360
 msgid "plugin cannot be loaded for module \"%1\": %2"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:377
+#: src/declarative/qml/qdeclarativeimport.cpp:365
 msgid "module \"%1\" plugin \"%2\" not found"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:521
-#: src/declarative/qml/qdeclarativeimport.cpp:589
+#: src/declarative/qml/qdeclarativeimport.cpp:509
+#: src/declarative/qml/qdeclarativeimport.cpp:577
 msgid "module \"%1\" version %2.%3 is not installed"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:523
+#: src/declarative/qml/qdeclarativeimport.cpp:511
 msgid "module \"%1\" is not installed"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:537
-#: src/declarative/qml/qdeclarativeimport.cpp:557
+#: src/declarative/qml/qdeclarativeimport.cpp:525
+#: src/declarative/qml/qdeclarativeimport.cpp:545
 msgid "\"%1\": no such directory"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:555
+#: src/declarative/qml/qdeclarativeimport.cpp:543
 msgid "import \"%1\" has no qmldir and no namespace"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:623
+#: src/declarative/qml/qdeclarativeimport.cpp:611
 msgid "- %1 is not a namespace"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:629
+#: src/declarative/qml/qdeclarativeimport.cpp:617
 msgid "- nested namespaces not allowed"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:676
-#: src/declarative/qml/qdeclarativeimport.cpp:680
+#: src/declarative/qml/qdeclarativeimport.cpp:664
+#: src/declarative/qml/qdeclarativeimport.cpp:668
 msgid "local directory"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:686
+#: src/declarative/qml/qdeclarativeimport.cpp:674
 msgid "is ambiguous. Found in %1 and in %2"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:690
+#: src/declarative/qml/qdeclarativeimport.cpp:678
 msgid "is ambiguous. Found in %1 in version %2.%3 and %4.%5"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:704
+#: src/declarative/qml/qdeclarativeimport.cpp:692
 msgid "is instantiated recursively"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativeimport.cpp:706
+#: src/declarative/qml/qdeclarativeimport.cpp:694
 msgid "is not a type"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativebinding.cpp:419
+#: src/declarative/qml/qdeclarativebinding.cpp:407
 msgid "Binding loop detected for property \"%1\""
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecomponent.cpp:489
+#: src/declarative/qml/qdeclarativecomponent.cpp:477
 msgid "Invalid empty URL"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecomponent.cpp:637
+#: src/declarative/qml/qdeclarativecomponent.cpp:625
 msgid "createObject: value is not an object"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:211
+#: src/declarative/qml/qdeclarativevme.cpp:199
 msgctxt "QDeclarativeVME"
 msgid "Unable to create object of type %1"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:651
+#: src/declarative/qml/qdeclarativevme.cpp:639
 msgctxt "QDeclarativeVME"
 msgid "Cannot assign object type %1 with no default method"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:654
+#: src/declarative/qml/qdeclarativevme.cpp:642
 msgctxt "QDeclarativeVME"
 msgid "Cannot connect mismatched signal/slot %1 %vs. %2"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:659
+#: src/declarative/qml/qdeclarativevme.cpp:647
 msgctxt "QDeclarativeVME"
 msgid "Cannot assign an object to signal property %1"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:808
+#: src/declarative/qml/qdeclarativevme.cpp:796
 msgctxt "QDeclarativeVME"
 msgid "Cannot assign object to list"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:851
+#: src/declarative/qml/qdeclarativevme.cpp:839
 msgctxt "QDeclarativeVME"
 msgid "Cannot assign object to interface property"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:862
+#: src/declarative/qml/qdeclarativevme.cpp:850
 msgctxt "QDeclarativeVME"
 msgid "Unable to create attached object"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativevme.cpp:894
+#: src/declarative/qml/qdeclarativevme.cpp:882
 msgctxt "QDeclarativeVME"
 msgid "Cannot set properties on %1 as it is null"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:246
-#: src/declarative/qml/qdeclarativescriptparser.cpp:675
-#: src/declarative/qml/qdeclarativescriptparser.cpp:734
+#: src/declarative/qml/qdeclarativescriptparser.cpp:234
+#: src/declarative/qml/qdeclarativescriptparser.cpp:663
+#: src/declarative/qml/qdeclarativescriptparser.cpp:722
 msgctxt "QDeclarativeParser"
 msgid "Property value set multiple times"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:257
+#: src/declarative/qml/qdeclarativescriptparser.cpp:245
 msgctxt "QDeclarativeParser"
 msgid "Expected type name"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:391
+#: src/declarative/qml/qdeclarativescriptparser.cpp:379
 msgctxt "QDeclarativeParser"
 msgid "Invalid import qualifier ID"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:399
+#: src/declarative/qml/qdeclarativescriptparser.cpp:387
 msgctxt "QDeclarativeParser"
 msgid "Reserved name \"Qt\" cannot be used as an qualifier"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:414
+#: src/declarative/qml/qdeclarativescriptparser.cpp:402
 msgctxt "QDeclarativeParser"
 msgid "Script import qualifiers must be unique."
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:424
+#: src/declarative/qml/qdeclarativescriptparser.cpp:412
 msgctxt "QDeclarativeParser"
 msgid "Script import requires a qualifier"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:435
+#: src/declarative/qml/qdeclarativescriptparser.cpp:423
 msgctxt "QDeclarativeParser"
 msgid "Library import requires a version"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:494
+#: src/declarative/qml/qdeclarativescriptparser.cpp:482
 msgctxt "QDeclarativeParser"
 msgid "Expected parameter type"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:536
+#: src/declarative/qml/qdeclarativescriptparser.cpp:524
 msgctxt "QDeclarativeParser"
 msgid "Invalid property type modifier"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:545
+#: src/declarative/qml/qdeclarativescriptparser.cpp:533
 msgctxt "QDeclarativeParser"
 msgid "Unexpected property type modifier"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:554
+#: src/declarative/qml/qdeclarativescriptparser.cpp:542
 msgctxt "QDeclarativeParser"
 msgid "Expected property type"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:563
+#: src/declarative/qml/qdeclarativescriptparser.cpp:551
 msgctxt "QDeclarativeParser"
 msgid "Readonly not yet supported"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativescriptparser.cpp:781
+#: src/declarative/qml/qdeclarativescriptparser.cpp:769
 msgctxt "QDeclarativeParser"
 msgid "JavaScript declaration outside Script element"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativecompiledbindings.cpp:337
+#: src/declarative/qml/qdeclarativecompiledbindings.cpp:325
 msgctxt "QDeclarativeCompiledBindings"
 msgid "Binding loop detected for property \"%1\""
 msgstr ""
 
-#: src/declarative/qml/qdeclarativetypeloader.cpp:914
+#: src/declarative/qml/qdeclarativetypeloader.cpp:902
 msgid "Script %1 unavailable"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativetypeloader.cpp:932
+#: src/declarative/qml/qdeclarativetypeloader.cpp:920
 msgid "Type %1 unavailable"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativetypeloader.cpp:1118
+#: src/declarative/qml/qdeclarativetypeloader.cpp:1106
 msgid "Namespace %1 cannot be used as a type"
 msgstr ""
 
-#: src/declarative/qml/qdeclarativetypeloader.cpp:1120
+#: src/declarative/qml/qdeclarativetypeloader.cpp:1108
 msgid "%1 %2"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1817
-#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1885
+#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1805
+#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1873
 msgctxt "QDeclarativeParser"
 msgid "Syntax error"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1819
+#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1807
 msgctxt "QDeclarativeParser"
 msgid "Unexpected token `%1'"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1848
-#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1872
+#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1836
+#: src/declarative/qml/parser/qdeclarativejsparser.cpp:1860
 msgctxt "QDeclarativeParser"
 msgid "Expected token `%1'"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:532
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:655
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:709
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:520
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:643
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:697
 msgctxt "QDeclarativeParser"
 msgid "Illegal unicode escape sequence"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:569
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:557
 msgctxt "QDeclarativeParser"
 msgid "Illegal character"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:583
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:571
 msgctxt "QDeclarativeParser"
 msgid "Unclosed string at end of line"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:609
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:597
 msgctxt "QDeclarativeParser"
 msgid "Illegal escape sequence"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:681
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:669
 msgctxt "QDeclarativeParser"
 msgid "Unclosed comment at end of file"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:783
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:771
 msgctxt "QDeclarativeParser"
 msgid "Illegal syntax for exponential number"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:809
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:797
 msgctxt "QDeclarativeParser"
 msgid "Identifier cannot start with numeric literal"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1147
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1135
 msgctxt "QDeclarativeParser"
 msgid "Unterminated regular expression literal"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1162
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1150
 msgctxt "QDeclarativeParser"
 msgid "Invalid regular expression flag '%0'"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1178
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1200
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1166
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1188
 msgctxt "QDeclarativeParser"
 msgid "Unterminated regular expression backslash sequence"
 msgstr ""
 
-#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1213
+#: src/declarative/qml/parser/qdeclarativejslexer.cpp:1201
 msgctxt "QDeclarativeParser"
 msgid "Unterminated regular expression class"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeconnections.cpp:209
+#: src/declarative/util/qdeclarativeconnections.cpp:197
 msgid "Connections: nested objects not allowed"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeconnections.cpp:212
+#: src/declarative/util/qdeclarativeconnections.cpp:200
 msgid "Connections: syntax error"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeconnections.cpp:220
+#: src/declarative/util/qdeclarativeconnections.cpp:208
 msgid "Connections: script expected"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeanimation.cpp:164
+#: src/declarative/util/qdeclarativeanimation.cpp:152
 msgid "Cannot animate non-existent property \"%1\""
 msgstr ""
 
-#: src/declarative/util/qdeclarativeanimation.cpp:167
+#: src/declarative/util/qdeclarativeanimation.cpp:155
 msgid "Cannot animate read-only property \"%1\""
 msgstr ""
 
-#: src/declarative/util/qdeclarativeanimation.cpp:601
-#: src/declarative/util/qdeclarativeanimation.cpp:1835
-#: src/declarative/util/qdeclarativeanimation.cpp:2855
+#: src/declarative/util/qdeclarativeanimation.cpp:589
+#: src/declarative/util/qdeclarativeanimation.cpp:1823
+#: src/declarative/util/qdeclarativeanimation.cpp:2843
 msgid "Cannot set a duration of < 0"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeanimation.cpp:2687
-#: src/declarative/util/qdeclarativestateoperations.cpp:95
+#: src/declarative/util/qdeclarativeanimation.cpp:2675
+#: src/declarative/util/qdeclarativestateoperations.cpp:83
 msgid "Unable to preserve appearance under complex transform"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeanimation.cpp:2698
-#: src/declarative/util/qdeclarativeanimation.cpp:2705
-#: src/declarative/util/qdeclarativestateoperations.cpp:106
-#: src/declarative/util/qdeclarativestateoperations.cpp:113
+#: src/declarative/util/qdeclarativeanimation.cpp:2686
+#: src/declarative/util/qdeclarativeanimation.cpp:2693
+#: src/declarative/util/qdeclarativestateoperations.cpp:94
+#: src/declarative/util/qdeclarativestateoperations.cpp:101
 msgid "Unable to preserve appearance under non-uniform scale"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeanimation.cpp:2712
-#: src/declarative/util/qdeclarativestateoperations.cpp:120
+#: src/declarative/util/qdeclarativeanimation.cpp:2700
+#: src/declarative/util/qdeclarativestateoperations.cpp:108
 msgid "Unable to preserve appearance under scale of 0"
 msgstr ""
 
-#: src/declarative/util/qdeclarativepropertychanges.cpp:248
+#: src/declarative/util/qdeclarativepropertychanges.cpp:236
 msgid "PropertyChanges does not support creating state-specific objects."
 msgstr ""
 
-#: src/declarative/util/qdeclarativepropertychanges.cpp:419
+#: src/declarative/util/qdeclarativepropertychanges.cpp:407
 msgid "Cannot assign to read-only property \"%1\""
 msgstr ""
 
-#: src/declarative/util/qdeclarativebehavior.cpp:119
+#: src/declarative/util/qdeclarativebehavior.cpp:107
 msgid "Cannot change the animation assigned to a Behavior."
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:382
+#: src/declarative/util/qdeclarativelistmodel.cpp:370
 msgid "remove: index %1 out of range"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:415
+#: src/declarative/util/qdeclarativelistmodel.cpp:403
 msgid "insert: value is not an object"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:420
+#: src/declarative/util/qdeclarativelistmodel.cpp:408
 msgid "insert: index %1 out of range"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:450
+#: src/declarative/util/qdeclarativelistmodel.cpp:438
 msgid "move: out of range"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:490
+#: src/declarative/util/qdeclarativelistmodel.cpp:478
 msgid "append: value is not an object"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:561
+#: src/declarative/util/qdeclarativelistmodel.cpp:549
 msgid "set: value is not an object"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:565
-#: src/declarative/util/qdeclarativelistmodel.cpp:603
+#: src/declarative/util/qdeclarativelistmodel.cpp:553
+#: src/declarative/util/qdeclarativelistmodel.cpp:591
 msgid "set: index %1 out of range"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:640
-#: src/declarative/util/qdeclarativelistmodel.cpp:657
+#: src/declarative/util/qdeclarativelistmodel.cpp:628
+#: src/declarative/util/qdeclarativelistmodel.cpp:645
 msgid "ListElement: cannot contain nested elements"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:661
+#: src/declarative/util/qdeclarativelistmodel.cpp:649
 msgid "ListElement: cannot use reserved \"id\" property"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:715
+#: src/declarative/util/qdeclarativelistmodel.cpp:703
 msgid "ListElement: cannot use script for property value"
 msgstr ""
 
-#: src/declarative/util/qdeclarativelistmodel.cpp:747
+#: src/declarative/util/qdeclarativelistmodel.cpp:735
 msgid "ListModel: undefined property '%1'"
 msgstr ""
 
-#: src/declarative/util/qdeclarativepixmapcache.cpp:298
+#: src/declarative/util/qdeclarativepixmapcache.cpp:286
 msgid "Error decoding: %1: %2"
 msgstr ""
 
-#: src/declarative/util/qdeclarativepixmapcache.cpp:471
-#: src/declarative/util/qdeclarativepixmapcache.cpp:832
+#: src/declarative/util/qdeclarativepixmapcache.cpp:459
+#: src/declarative/util/qdeclarativepixmapcache.cpp:820
 msgid "Failed to get image from provider: %1"
 msgstr ""
 
-#: src/declarative/util/qdeclarativepixmapcache.cpp:489
-#: src/declarative/util/qdeclarativepixmapcache.cpp:850
+#: src/declarative/util/qdeclarativepixmapcache.cpp:477
+#: src/declarative/util/qdeclarativepixmapcache.cpp:838
 msgid "Cannot open: %1"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeutilmodule.cpp:71
+#: src/declarative/util/qdeclarativeutilmodule.cpp:59
 msgid "Application is an abstract class"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeutilmodule.cpp:99
+#: src/declarative/util/qdeclarativeutilmodule.cpp:87
 msgid "Animation is an abstract class"
 msgstr ""
 
-#: src/declarative/util/qdeclarativeutilmodule.cpp:110
-#: src/declarative/util/qdeclarativeutilmodule.cpp:112
+#: src/declarative/util/qdeclarativeutilmodule.cpp:98
+#: src/declarative/util/qdeclarativeutilmodule.cpp:100
 msgctxt "QDeclarativeXmlListModel"
 msgid "Katie does not support xmlpatterns"
 msgstr ""
 
-#: src/gui/accessible/qaccessibleobject.cpp:365
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1609
+#: src/gui/accessible/qaccessibleobject.cpp:353
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1597
 msgid "Activate"
 msgstr ""
 
-#: src/gui/accessible/qaccessibleobject.cpp:367
+#: src/gui/accessible/qaccessibleobject.cpp:355
 msgid "Activates the program's main window"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:590
+#: src/gui/dialogs/qwizard.cpp:578
 msgid "Go Back"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:590
+#: src/gui/dialogs/qwizard.cpp:578
 msgid "< &Back"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:593
-#: src/scripttools/debugging/qscriptdebugger.cpp:1679
+#: src/gui/dialogs/qwizard.cpp:581
+#: src/scripttools/debugging/qscriptdebugger.cpp:1667
 msgid "Continue"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:595
+#: src/gui/dialogs/qwizard.cpp:583
 msgid "&Next >"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:597
+#: src/gui/dialogs/qwizard.cpp:585
 msgid "Commit"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:599
+#: src/gui/dialogs/qwizard.cpp:587
 msgid "Done"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:599
+#: src/gui/dialogs/qwizard.cpp:587
 msgid "&Finish"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:601 src/gui/dialogs/qprogressdialog.cpp:176
+#: src/gui/dialogs/qwizard.cpp:589 src/gui/dialogs/qprogressdialog.cpp:164
 msgid "Cancel"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:603 src/gui/widgets/qmdisubwindow.cpp:324
+#: src/gui/dialogs/qwizard.cpp:591 src/gui/widgets/qmdisubwindow.cpp:312
 msgid "Help"
 msgstr ""
 
-#: src/gui/dialogs/qwizard.cpp:603
+#: src/gui/dialogs/qwizard.cpp:591
 msgid "&Help"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:238
+#: src/gui/dialogs/qprintpreviewdialog.cpp:226
 msgid "%1%"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:307
+#: src/gui/dialogs/qprintpreviewdialog.cpp:295
 msgctxt "QPrintPreviewDialog"
 msgid "Print Preview"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:333
+#: src/gui/dialogs/qprintpreviewdialog.cpp:321
 msgctxt "QPrintPreviewDialog"
 msgid "Next page"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:334
+#: src/gui/dialogs/qprintpreviewdialog.cpp:322
 msgctxt "QPrintPreviewDialog"
 msgid "Previous page"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:335
+#: src/gui/dialogs/qprintpreviewdialog.cpp:323
 msgctxt "QPrintPreviewDialog"
 msgid "First page"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:336
+#: src/gui/dialogs/qprintpreviewdialog.cpp:324
 msgctxt "QPrintPreviewDialog"
 msgid "Last page"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:345
+#: src/gui/dialogs/qprintpreviewdialog.cpp:333
 msgctxt "QPrintPreviewDialog"
 msgid "Fit width"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:346
+#: src/gui/dialogs/qprintpreviewdialog.cpp:334
 msgctxt "QPrintPreviewDialog"
 msgid "Fit page"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:357
+#: src/gui/dialogs/qprintpreviewdialog.cpp:345
 msgctxt "QPrintPreviewDialog"
 msgid "Zoom in"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:358
+#: src/gui/dialogs/qprintpreviewdialog.cpp:346
 msgctxt "QPrintPreviewDialog"
 msgid "Zoom out"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:364
+#: src/gui/dialogs/qprintpreviewdialog.cpp:352
 msgctxt "QPrintPreviewDialog"
 msgid "Portrait"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:365
+#: src/gui/dialogs/qprintpreviewdialog.cpp:353
 msgctxt "QPrintPreviewDialog"
 msgid "Landscape"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:375
+#: src/gui/dialogs/qprintpreviewdialog.cpp:363
 msgctxt "QPrintPreviewDialog"
 msgid "Show single page"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:376
+#: src/gui/dialogs/qprintpreviewdialog.cpp:364
 msgctxt "QPrintPreviewDialog"
 msgid "Show facing pages"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:377
+#: src/gui/dialogs/qprintpreviewdialog.cpp:365
 msgctxt "QPrintPreviewDialog"
 msgid "Show overview of all pages"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:392
+#: src/gui/dialogs/qprintpreviewdialog.cpp:380
 msgctxt "QPrintPreviewDialog"
 msgid "Print"
 msgstr ""
 
-#: src/gui/dialogs/qprintpreviewdialog.cpp:393
+#: src/gui/dialogs/qprintpreviewdialog.cpp:381
 msgctxt "QPrintPreviewDialog"
 msgid "Page setup"
 msgstr ""
 
-#: src/gui/dialogs/qinputdialog.cpp:209
+#: src/gui/dialogs/qinputdialog.cpp:197
 msgid "Enter a value:"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel_p.h:244
+#: src/gui/dialogs/qfilesystemmodel_p.h:232
 msgid "Computer"
 msgstr ""
 
-#: src/gui/dialogs/qmessagebox.cpp:117
+#: src/gui/dialogs/qmessagebox.cpp:105
 msgid "Show Details..."
 msgstr ""
 
-#: src/gui/dialogs/qmessagebox.cpp:117
+#: src/gui/dialogs/qmessagebox.cpp:105
 msgid "Hide Details..."
 msgstr ""
 
-#: src/gui/dialogs/qmessagebox.cpp:1466
+#: src/gui/dialogs/qmessagebox.cpp:1454
 msgid "<h3>About Katie</h3><p>This program uses Katie version %1.</p>"
 msgstr ""
 
-#: src/gui/dialogs/qmessagebox.cpp:1470
+#: src/gui/dialogs/qmessagebox.cpp:1458
 msgid ""
 "<p>Katie is a C++ toolkit derived from the Qt 4.8 framework.</p><p>Katie is "
 "available under two different licensing options designed to accommodate the "
@@ -1420,3388 +1375,3388 @@ msgid ""
 "more information.</p>"
 msgstr ""
 
-#: src/gui/dialogs/qmessagebox.cpp:1486
+#: src/gui/dialogs/qmessagebox.cpp:1474
 msgid "About Katie"
 msgstr ""
 
-#: src/gui/dialogs/qsidebar.cpp:417
+#: src/gui/dialogs/qsidebar.cpp:405
 msgid "Remove"
 msgstr ""
 
+#: src/gui/dialogs/qabstractpagesetupdialog.cpp:48
 #: src/gui/dialogs/qabstractpagesetupdialog.cpp:60
-#: src/gui/dialogs/qabstractpagesetupdialog.cpp:72
 msgctxt "QPrintPreviewDialog"
 msgid "Page Setup"
 msgstr ""
 
-#: src/gui/dialogs/qdialog.cpp:507 src/gui/kernel/qwhatsthis.cpp:480
+#: src/gui/dialogs/qdialog.cpp:495 src/gui/kernel/qwhatsthis.cpp:468
 msgid "What's This?"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:167
+#: src/gui/dialogs/qfontdialog.cpp:155
 msgid "Select Font"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:691
+#: src/gui/dialogs/qfontdialog.cpp:679
 msgid "&Font"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:692
+#: src/gui/dialogs/qfontdialog.cpp:680
 msgid "Font st&yle"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:693 src/gui/widgets/qmdisubwindow.cpp:1028
-#: src/gui/widgets/qworkspace.cpp:1028
+#: src/gui/dialogs/qfontdialog.cpp:681 src/gui/widgets/qmdisubwindow.cpp:1016
+#: src/gui/widgets/qworkspace.cpp:1016
 msgid "&Size"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:696
+#: src/gui/dialogs/qfontdialog.cpp:684
 msgid "Effects"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:697
+#: src/gui/dialogs/qfontdialog.cpp:685
 msgid "Stri&keout"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:698
+#: src/gui/dialogs/qfontdialog.cpp:686
 msgid "&Underline"
 msgstr ""
 
-#: src/gui/dialogs/qfontdialog.cpp:699
+#: src/gui/dialogs/qfontdialog.cpp:687
 msgid "Sample"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1214
+#: src/gui/dialogs/qcolordialog.cpp:1202
 msgid "Hu&e:"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1215
+#: src/gui/dialogs/qcolordialog.cpp:1203
 msgid "&Sat:"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1216
+#: src/gui/dialogs/qcolordialog.cpp:1204
 msgid "&Val:"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1217
+#: src/gui/dialogs/qcolordialog.cpp:1205
 msgid "&Red:"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1218
+#: src/gui/dialogs/qcolordialog.cpp:1206
 msgid "&Green:"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1219
+#: src/gui/dialogs/qcolordialog.cpp:1207
 msgid "Bl&ue:"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1220
+#: src/gui/dialogs/qcolordialog.cpp:1208
 msgid "A&lpha channel:"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1321
+#: src/gui/dialogs/qcolordialog.cpp:1309
 msgid "Select Color"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1448
+#: src/gui/dialogs/qcolordialog.cpp:1436
 msgid "&Basic colors"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1449
+#: src/gui/dialogs/qcolordialog.cpp:1437
 msgid "&Custom colors"
 msgstr ""
 
-#: src/gui/dialogs/qcolordialog.cpp:1450
+#: src/gui/dialogs/qcolordialog.cpp:1438
 msgid "&Add to Custom Colors"
 msgstr ""
 
-#: src/gui/dialogs/qmessagebox.h:229
-msgid "Executable '%1' requires Qt %2, found Qt %3."
+#: src/gui/dialogs/qmessagebox.h:217
+msgid "Executable '%1' requires Katie %2, found Katie %3."
 msgstr ""
 
-#: src/gui/dialogs/qmessagebox.h:231
-msgid "Incompatible Qt Library Error"
+#: src/gui/dialogs/qmessagebox.h:219
+msgid "Incompatible Katie Library Error"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:64
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:52
 msgid "A0"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:65
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:53
 msgid "A1"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:66
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:54
 msgid "A2"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:67
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:55
 msgid "A3"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:68
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:56
 msgid "A4"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:69
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:57
 msgid "A5"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:70
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:58
 msgid "A6"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:71
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:59
 msgid "A7"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:72
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:60
 msgid "A8"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:73
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:61
 msgid "A9"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:74
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:62
 msgid "B0"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:75
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:63
 msgid "B1"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:76
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:64
 msgid "B2"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:77
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:65
 msgid "B3"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:78
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:66
 msgid "B4"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:79
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:67
 msgid "B5"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:80
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:68
 msgid "B6"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:81
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:69
 msgid "B7"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:82
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:70
 msgid "B8"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:83
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:71
 msgid "B9"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:84
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:72
 msgid "B10"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:85
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:73
 msgid "C5E"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:86
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:74
 msgid "DLE"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:87
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:75
 msgid "Executive"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:88
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:76
 msgid "Folio"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:89
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:77
 msgid "Ledger"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:90
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:78
 msgid "Legal"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:91
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:79
 msgid "Letter"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:92
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:80
 msgid "Tabloid"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:93
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:81
 msgid "US Common #10 Envelope"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:94
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:82
 msgid "Custom"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269
 msgid "Centimeters (cm)"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269
 msgid "Millimeters (mm)"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269
 msgid "Inches (in)"
 msgstr ""
 
-#: src/gui/dialogs/qpagesetupdialog_unix.cpp:281
+#: src/gui/dialogs/qpagesetupdialog_unix.cpp:269
 msgid "Points (pt)"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:365
-#: src/gui/dialogs/qprintdialog_unix.cpp:433
+#: src/gui/dialogs/qprintdialog_unix.cpp:353
+#: src/gui/dialogs/qprintdialog_unix.cpp:421
 msgid "&Options >>"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:370
+#: src/gui/dialogs/qprintdialog_unix.cpp:358
 msgid "&Print"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:437
+#: src/gui/dialogs/qprintdialog_unix.cpp:425
 msgid "&Options <<"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:662
+#: src/gui/dialogs/qprintdialog_unix.cpp:650
 msgid "Print to File (PDF)"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:663
+#: src/gui/dialogs/qprintdialog_unix.cpp:651
 msgid "Print to File (Postscript)"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:710
+#: src/gui/dialogs/qprintdialog_unix.cpp:698
 msgid "Local file"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:711
+#: src/gui/dialogs/qprintdialog_unix.cpp:699
 msgid "Write %1 file"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:772
+#: src/gui/dialogs/qprintdialog_unix.cpp:760
 msgid "Print To File ..."
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:850
+#: src/gui/dialogs/qprintdialog_unix.cpp:838
 msgid ""
 "%1 is a directory.\n"
 "Please choose a different file name."
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:854
+#: src/gui/dialogs/qprintdialog_unix.cpp:842
 msgid ""
 "File %1 is not writable.\n"
 "Please choose a different file name."
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:858
+#: src/gui/dialogs/qprintdialog_unix.cpp:846
 msgid ""
 "%1 already exists.\n"
 "Do you want to overwrite it?"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:1147
+#: src/gui/dialogs/qprintdialog_unix.cpp:1135
 msgctxt "QPPDOptionsModel"
 msgid "Name"
 msgstr ""
 
-#: src/gui/dialogs/qprintdialog_unix.cpp:1149
+#: src/gui/dialogs/qprintdialog_unix.cpp:1137
 msgctxt "QPPDOptionsModel"
 msgid "Value"
 msgstr ""
 
-#: src/gui/dialogs/qabstractprintdialog.cpp:104
-#: src/gui/dialogs/qabstractprintdialog.cpp:117
+#: src/gui/dialogs/qabstractprintdialog.cpp:92
+#: src/gui/dialogs/qabstractprintdialog.cpp:105
 msgctxt "QPrintDialog"
 msgid "Print"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:503
+#: src/gui/dialogs/qfiledialog.cpp:491
 msgid "Find Directory"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:505
-#: src/plugins/accessible/widgets/simplewidgets.cpp:108
-#: src/plugins/accessible/widgets/simplewidgets.cpp:423
-#: src/plugins/accessible/widgets/simplewidgets.cpp:431
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:150
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:375
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:429
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1841
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1907
+#: src/gui/dialogs/qfiledialog.cpp:493
+#: src/plugins/accessible/widgets/simplewidgets.cpp:96
+#: src/plugins/accessible/widgets/simplewidgets.cpp:411
+#: src/plugins/accessible/widgets/simplewidgets.cpp:419
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:138
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:363
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:417
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1829
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1895
 msgid "Open"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:507
+#: src/gui/dialogs/qfiledialog.cpp:495
 msgid "Save As"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:522 src/gui/dialogs/qfiledialog.cpp:1023
+#: src/gui/dialogs/qfiledialog.cpp:510 src/gui/dialogs/qfiledialog.cpp:1011
 msgid "All Files (*)"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:532
+#: src/gui/dialogs/qfiledialog.cpp:520
 msgid "Show "
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:536
+#: src/gui/dialogs/qfiledialog.cpp:524
 msgid "&Rename"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:537
+#: src/gui/dialogs/qfiledialog.cpp:525
 msgid "&Delete"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:538
+#: src/gui/dialogs/qfiledialog.cpp:526
 msgid "Show &hidden files"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:539
+#: src/gui/dialogs/qfiledialog.cpp:527
 msgid "&New Folder"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:544 src/gui/dialogs/qfiledialog.cpp:1204
+#: src/gui/dialogs/qfiledialog.cpp:532 src/gui/dialogs/qfiledialog.cpp:1192
 msgid "Directory:"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:546 src/gui/dialogs/qfiledialog.cpp:1210
+#: src/gui/dialogs/qfiledialog.cpp:534 src/gui/dialogs/qfiledialog.cpp:1198
 msgid "File &name:"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:1197 src/gui/dialogs/qfiledialog.cpp:1252
-#: src/gui/dialogs/qfiledialog.cpp:2699
+#: src/gui/dialogs/qfiledialog.cpp:1185 src/gui/dialogs/qfiledialog.cpp:1240
+#: src/gui/dialogs/qfiledialog.cpp:2687
 msgid "&Open"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:1197 src/gui/dialogs/qfiledialog.cpp:1252
+#: src/gui/dialogs/qfiledialog.cpp:1185 src/gui/dialogs/qfiledialog.cpp:1240
 msgid "&Save"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:1200
+#: src/gui/dialogs/qfiledialog.cpp:1188
 msgid "Directories"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:1207 src/gui/dialogs/qfiledialog.cpp:1250
+#: src/gui/dialogs/qfiledialog.cpp:1195 src/gui/dialogs/qfiledialog.cpp:1238
 msgid "&Choose"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:1917 src/gui/dialogs/qfiledialog.cpp:2770
+#: src/gui/dialogs/qfiledialog.cpp:1905 src/gui/dialogs/qfiledialog.cpp:2758
 msgid ""
 "%1\n"
 "Directory not found.\n"
 "Please verify the correct directory name was given."
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:1951
+#: src/gui/dialogs/qfiledialog.cpp:1939
 msgid ""
 "%1 already exists.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:1971
+#: src/gui/dialogs/qfiledialog.cpp:1959
 msgid ""
 "%1\n"
 "File not found.\n"
 "Please verify the correct file name was given."
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:2420
+#: src/gui/dialogs/qfiledialog.cpp:2408
 msgid "New Folder"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:2548
+#: src/gui/dialogs/qfiledialog.cpp:2536
 msgid ""
 "'%1' is write protected.\n"
 "Do you want to delete it anyway?"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:2553
+#: src/gui/dialogs/qfiledialog.cpp:2541
 msgid "Are sure you want to delete '%1'?"
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:2568
+#: src/gui/dialogs/qfiledialog.cpp:2556
 msgid "Could not delete directory."
 msgstr ""
 
-#: src/gui/dialogs/qfiledialog.cpp:2966
+#: src/gui/dialogs/qfiledialog.cpp:2954
 msgid "Recent Places"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:655
-#: src/gui/itemviews/qdirmodel.cpp:1217
+#: src/gui/dialogs/qfilesystemmodel.cpp:643
+#: src/gui/itemviews/qdirmodel.cpp:1205
 msgid "%1 TB"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:657
-#: src/gui/itemviews/qdirmodel.cpp:1219
+#: src/gui/dialogs/qfilesystemmodel.cpp:645
+#: src/gui/itemviews/qdirmodel.cpp:1207
 msgid "%1 GB"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:659
-#: src/gui/itemviews/qdirmodel.cpp:1221
+#: src/gui/dialogs/qfilesystemmodel.cpp:647
+#: src/gui/itemviews/qdirmodel.cpp:1209
 msgid "%1 MB"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:661
-#: src/gui/itemviews/qdirmodel.cpp:1223
+#: src/gui/dialogs/qfilesystemmodel.cpp:649
+#: src/gui/itemviews/qdirmodel.cpp:1211
 msgid "%1 KB"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:662
+#: src/gui/dialogs/qfilesystemmodel.cpp:650
 msgid "%1 bytes"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:732
+#: src/gui/dialogs/qfilesystemmodel.cpp:720
 msgid "Invalid filename"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:733
+#: src/gui/dialogs/qfilesystemmodel.cpp:721
 msgid ""
 "<b>The name \"%1\" can not be used.</b><p>Try using another name, with fewer "
 "characters or no punctuations marks."
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:797 src/gui/itemviews/qdirmodel.cpp:407
+#: src/gui/dialogs/qfilesystemmodel.cpp:785 src/gui/itemviews/qdirmodel.cpp:395
 msgid "Name"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:799 src/gui/itemviews/qdirmodel.cpp:408
+#: src/gui/dialogs/qfilesystemmodel.cpp:787 src/gui/itemviews/qdirmodel.cpp:396
 msgid "Size"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:801 src/gui/itemviews/qdirmodel.cpp:409
+#: src/gui/dialogs/qfilesystemmodel.cpp:789 src/gui/itemviews/qdirmodel.cpp:397
 msgid "Type"
 msgstr ""
 
-#: src/gui/dialogs/qfilesystemmodel.cpp:807 src/gui/itemviews/qdirmodel.cpp:412
+#: src/gui/dialogs/qfilesystemmodel.cpp:795 src/gui/itemviews/qdirmodel.cpp:400
 msgid "Date Modified"
 msgstr ""
 
-#: src/gui/dialogs/qerrormessage.cpp:155
+#: src/gui/dialogs/qerrormessage.cpp:143
 msgid "Warning:"
 msgstr ""
 
-#: src/gui/dialogs/qerrormessage.cpp:158
+#: src/gui/dialogs/qerrormessage.cpp:146
 msgid "Fatal Error:"
 msgstr ""
 
-#: src/gui/dialogs/qerrormessage.cpp:161
+#: src/gui/dialogs/qerrormessage.cpp:149
 msgid "Debug Message:"
 msgstr ""
 
-#: src/gui/dialogs/qerrormessage.cpp:354
+#: src/gui/dialogs/qerrormessage.cpp:342
 msgid "&Show this message again"
 msgstr ""
 
-#: src/gui/dialogs/qerrormessage.cpp:355
+#: src/gui/dialogs/qerrormessage.cpp:343
 msgid "&OK"
 msgstr ""
 
-#: src/gui/image/qimagereader.cpp:476
+#: src/gui/image/qimagereader.cpp:463
 msgctxt "QImageReader"
 msgid "Invalid device"
 msgstr ""
 
-#: src/gui/image/qimagereader.cpp:503
+#: src/gui/image/qimagereader.cpp:490
 msgctxt "QImageReader"
 msgid "File not found"
 msgstr ""
 
-#: src/gui/image/qimagereader.cpp:512
+#: src/gui/image/qimagereader.cpp:499
 msgctxt "QImageReader"
 msgid "Unsupported image format"
 msgstr ""
 
-#: src/gui/image/qimagereader.cpp:1044
+#: src/gui/image/qimagereader.cpp:1031
 msgctxt "QImageReader"
 msgid "Unable to read image data"
 msgstr ""
 
-#: src/gui/image/qimagereader.cpp:1235
+#: src/gui/image/qimagereader.cpp:1222
 msgctxt "QImageReader"
 msgid "Unknown error"
 msgstr ""
 
-#: src/gui/widgets/qtabbar.cpp:2191
+#: src/gui/widgets/qtabbar.cpp:2179
 msgid "Close Tab"
 msgstr ""
 
-#: src/gui/widgets/qlineedit.cpp:1767 src/gui/text/qtextcontrol.cpp:1870
+#: src/gui/widgets/qlineedit.cpp:1755 src/gui/text/qtextcontrol.cpp:1858
 msgid "&Undo"
 msgstr ""
 
-#: src/gui/widgets/qlineedit.cpp:1771 src/gui/text/qtextcontrol.cpp:1872
+#: src/gui/widgets/qlineedit.cpp:1759 src/gui/text/qtextcontrol.cpp:1860
 msgid "&Redo"
 msgstr ""
 
-#: src/gui/widgets/qlineedit.cpp:1780 src/gui/text/qtextcontrol.cpp:1876
+#: src/gui/widgets/qlineedit.cpp:1768 src/gui/text/qtextcontrol.cpp:1864
 msgid "Cu&t"
 msgstr ""
 
-#: src/gui/widgets/qlineedit.cpp:1786 src/gui/text/qtextcontrol.cpp:1881
+#: src/gui/widgets/qlineedit.cpp:1774 src/gui/text/qtextcontrol.cpp:1869
 msgid "&Copy"
 msgstr ""
 
-#: src/gui/widgets/qlineedit.cpp:1792 src/gui/text/qtextcontrol.cpp:1894
+#: src/gui/widgets/qlineedit.cpp:1780 src/gui/text/qtextcontrol.cpp:1882
 msgid "&Paste"
 msgstr ""
 
-#: src/gui/widgets/qlineedit.cpp:1799 src/gui/text/qtextcontrol.cpp:1897
-#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:291
+#: src/gui/widgets/qlineedit.cpp:1787 src/gui/text/qtextcontrol.cpp:1885
+#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:279
 msgid "Delete"
 msgstr ""
 
-#: src/gui/widgets/qlineedit.cpp:1807 src/gui/text/qtextcontrol.cpp:1904
+#: src/gui/widgets/qlineedit.cpp:1795 src/gui/text/qtextcontrol.cpp:1892
 msgid "Select All"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:394
+#: src/gui/widgets/qscrollbar.cpp:382
 msgid "Scroll here"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:396
+#: src/gui/widgets/qscrollbar.cpp:384
 msgid "Left edge"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:396
+#: src/gui/widgets/qscrollbar.cpp:384
 msgid "Top"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:397
+#: src/gui/widgets/qscrollbar.cpp:385
 msgid "Right edge"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:397
+#: src/gui/widgets/qscrollbar.cpp:385
 msgid "Bottom"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:399
-#: src/plugins/accessible/widgets/rangecontrols.cpp:697
+#: src/gui/widgets/qscrollbar.cpp:387
+#: src/plugins/accessible/widgets/rangecontrols.cpp:685
 msgid "Page left"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:399
-#: src/plugins/accessible/widgets/rangecontrols.cpp:544
-#: src/plugins/accessible/widgets/rangecontrols.cpp:697
+#: src/gui/widgets/qscrollbar.cpp:387
+#: src/plugins/accessible/widgets/rangecontrols.cpp:532
+#: src/plugins/accessible/widgets/rangecontrols.cpp:685
 msgid "Page up"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:400
-#: src/plugins/accessible/widgets/rangecontrols.cpp:702
+#: src/gui/widgets/qscrollbar.cpp:388
+#: src/plugins/accessible/widgets/rangecontrols.cpp:690
 msgid "Page right"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:400
-#: src/plugins/accessible/widgets/rangecontrols.cpp:548
-#: src/plugins/accessible/widgets/rangecontrols.cpp:702
+#: src/gui/widgets/qscrollbar.cpp:388
+#: src/plugins/accessible/widgets/rangecontrols.cpp:536
+#: src/plugins/accessible/widgets/rangecontrols.cpp:690
 msgid "Page down"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:402
+#: src/gui/widgets/qscrollbar.cpp:390
 msgid "Scroll left"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:402
+#: src/gui/widgets/qscrollbar.cpp:390
 msgid "Scroll up"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:403
+#: src/gui/widgets/qscrollbar.cpp:391
 msgid "Scroll right"
 msgstr ""
 
-#: src/gui/widgets/qscrollbar.cpp:403
+#: src/gui/widgets/qscrollbar.cpp:391
 msgid "Scroll down"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:451
+#: src/gui/widgets/qdialogbuttonbox.cpp:439
 msgctxt "QDialogButtonBox"
 msgid "OK"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:454
+#: src/gui/widgets/qdialogbuttonbox.cpp:442
 msgctxt "QDialogButtonBox"
 msgid "Save"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:457
+#: src/gui/widgets/qdialogbuttonbox.cpp:445
 msgctxt "QDialogButtonBox"
 msgid "Open"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:460
+#: src/gui/widgets/qdialogbuttonbox.cpp:448
 msgctxt "QDialogButtonBox"
 msgid "Cancel"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:463
+#: src/gui/widgets/qdialogbuttonbox.cpp:451
 msgctxt "QDialogButtonBox"
 msgid "Close"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:466
+#: src/gui/widgets/qdialogbuttonbox.cpp:454
 msgctxt "QDialogButtonBox"
 msgid "Apply"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:469
+#: src/gui/widgets/qdialogbuttonbox.cpp:457
 msgctxt "QDialogButtonBox"
 msgid "Reset"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:472
+#: src/gui/widgets/qdialogbuttonbox.cpp:460
 msgctxt "QDialogButtonBox"
 msgid "Help"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:475
+#: src/gui/widgets/qdialogbuttonbox.cpp:463
 msgctxt "QDialogButtonBox"
 msgid "Discard"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:478
+#: src/gui/widgets/qdialogbuttonbox.cpp:466
 msgctxt "QDialogButtonBox"
 msgid "&Yes"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:481
+#: src/gui/widgets/qdialogbuttonbox.cpp:469
 msgctxt "QDialogButtonBox"
 msgid "Yes to &All"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:484
+#: src/gui/widgets/qdialogbuttonbox.cpp:472
 msgctxt "QDialogButtonBox"
 msgid "&No"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:487
+#: src/gui/widgets/qdialogbuttonbox.cpp:475
 msgctxt "QDialogButtonBox"
 msgid "N&o to All"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:490
+#: src/gui/widgets/qdialogbuttonbox.cpp:478
 msgctxt "QDialogButtonBox"
 msgid "Save All"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:493
+#: src/gui/widgets/qdialogbuttonbox.cpp:481
 msgctxt "QDialogButtonBox"
 msgid "Abort"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:496
+#: src/gui/widgets/qdialogbuttonbox.cpp:484
 msgctxt "QDialogButtonBox"
 msgid "Retry"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:499
+#: src/gui/widgets/qdialogbuttonbox.cpp:487
 msgctxt "QDialogButtonBox"
 msgid "Ignore"
 msgstr ""
 
-#: src/gui/widgets/qdialogbuttonbox.cpp:502
+#: src/gui/widgets/qdialogbuttonbox.cpp:490
 msgctxt "QDialogButtonBox"
 msgid "Restore Defaults"
 msgstr ""
 
-#: src/gui/widgets/qdatetimeedit.cpp:2093
+#: src/gui/widgets/qdatetimeedit.cpp:2081
 msgid "AM"
 msgstr ""
 
-#: src/gui/widgets/qdatetimeedit.cpp:2093
+#: src/gui/widgets/qdatetimeedit.cpp:2081
 msgid "am"
 msgstr ""
 
-#: src/gui/widgets/qdatetimeedit.cpp:2095
+#: src/gui/widgets/qdatetimeedit.cpp:2083
 msgid "PM"
 msgstr ""
 
-#: src/gui/widgets/qdatetimeedit.cpp:2095
+#: src/gui/widgets/qdatetimeedit.cpp:2083
 msgid "pm"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:261
+#: src/gui/widgets/qmdisubwindow.cpp:249
 msgid "- [%1]"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:262 src/gui/widgets/qworkspace.cpp:1804
-#: src/gui/widgets/qworkspace.cpp:1864
+#: src/gui/widgets/qmdisubwindow.cpp:250 src/gui/widgets/qworkspace.cpp:1792
+#: src/gui/widgets/qworkspace.cpp:1852
 msgid "%1 - [%2]"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:303 src/gui/widgets/qworkspace.cpp:107
+#: src/gui/widgets/qmdisubwindow.cpp:291 src/gui/widgets/qworkspace.cpp:95
 msgid "Minimize"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:306
+#: src/gui/widgets/qmdisubwindow.cpp:294
 msgid "Maximize"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:309
+#: src/gui/widgets/qmdisubwindow.cpp:297
 msgid "Unshade"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:312
+#: src/gui/widgets/qmdisubwindow.cpp:300
 msgid "Shade"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:316 src/gui/widgets/qworkspace.cpp:109
+#: src/gui/widgets/qmdisubwindow.cpp:304 src/gui/widgets/qworkspace.cpp:97
 msgid "Restore Down"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:318
+#: src/gui/widgets/qmdisubwindow.cpp:306
 msgid "Restore"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:321 src/gui/widgets/qworkspace.cpp:105
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:149
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:374
-#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1321
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1606
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1907
-#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:68
-#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:128
+#: src/gui/widgets/qmdisubwindow.cpp:309 src/gui/widgets/qworkspace.cpp:93
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:137
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:362
+#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1309
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1594
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1895
+#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:56
+#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:116
 msgid "Close"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:327
+#: src/gui/widgets/qmdisubwindow.cpp:315
 msgid "Menu"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:1024 src/gui/widgets/qworkspace.cpp:1026
+#: src/gui/widgets/qmdisubwindow.cpp:1012 src/gui/widgets/qworkspace.cpp:1014
 msgid "&Restore"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:1027 src/gui/widgets/qworkspace.cpp:1027
+#: src/gui/widgets/qmdisubwindow.cpp:1015 src/gui/widgets/qworkspace.cpp:1015
 msgid "&Move"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:1029 src/gui/widgets/qworkspace.cpp:1030
+#: src/gui/widgets/qmdisubwindow.cpp:1017 src/gui/widgets/qworkspace.cpp:1018
 msgid "Mi&nimize"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:1031 src/gui/widgets/qworkspace.cpp:1032
+#: src/gui/widgets/qmdisubwindow.cpp:1019 src/gui/widgets/qworkspace.cpp:1020
 msgid "Ma&ximize"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:1033 src/gui/widgets/qworkspace.cpp:1040
+#: src/gui/widgets/qmdisubwindow.cpp:1021 src/gui/widgets/qworkspace.cpp:1028
 msgid "Stay on &Top"
 msgstr ""
 
-#: src/gui/widgets/qmdisubwindow.cpp:1036 src/gui/widgets/qworkspace.cpp:1034
+#: src/gui/widgets/qmdisubwindow.cpp:1024 src/gui/widgets/qworkspace.cpp:1022
 msgid "&Close"
 msgstr ""
 
-#: src/gui/widgets/qmdiarea.cpp:263
+#: src/gui/widgets/qmdiarea.cpp:251
 msgid "(Untitled)"
 msgstr ""
 
-#: src/gui/widgets/qworkspace.cpp:1043 src/gui/widgets/qworkspace.cpp:2082
+#: src/gui/widgets/qworkspace.cpp:1031 src/gui/widgets/qworkspace.cpp:2070
 msgid "Sh&ade"
 msgstr ""
 
-#: src/gui/widgets/qworkspace.cpp:2078
+#: src/gui/widgets/qworkspace.cpp:2066
 msgid "&Unshade"
 msgstr ""
 
-#: src/gui/widgets/qmenubar.cpp:1611
+#: src/gui/widgets/qmenubar.cpp:1599
 msgctxt "QMenuBar"
 msgid "Corner Toolbar"
 msgstr ""
 
-#: src/gui/widgets/qabstractspinbox.cpp:1164
+#: src/gui/widgets/qabstractspinbox.cpp:1152
 msgid "&Select All"
 msgstr ""
 
-#: src/gui/widgets/qabstractspinbox.cpp:1170
+#: src/gui/widgets/qabstractspinbox.cpp:1158
 msgid "&Step up"
 msgstr ""
 
-#: src/gui/widgets/qabstractspinbox.cpp:1172
+#: src/gui/widgets/qabstractspinbox.cpp:1160
 msgid "Step &down"
 msgstr ""
 
-#: src/gui/kernel/qwidget.cpp:5102
+#: src/gui/kernel/qwidget.cpp:5090
 msgid "*"
 msgstr ""
 
-#: src/gui/kernel/qapplication.cpp:1732
+#: src/gui/kernel/qapplication.cpp:1705
 msgid "QT_LAYOUT_DIRECTION"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:207
+#: src/gui/kernel/qkeysequence.cpp:195
 msgctxt "QShortcut"
 msgid "Space"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:208
+#: src/gui/kernel/qkeysequence.cpp:196
 msgctxt "QShortcut"
 msgid "Esc"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:209
+#: src/gui/kernel/qkeysequence.cpp:197
 msgctxt "QShortcut"
 msgid "Tab"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:210
+#: src/gui/kernel/qkeysequence.cpp:198
 msgctxt "QShortcut"
 msgid "Backtab"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:211
+#: src/gui/kernel/qkeysequence.cpp:199
 msgctxt "QShortcut"
 msgid "Backspace"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:212
+#: src/gui/kernel/qkeysequence.cpp:200
 msgctxt "QShortcut"
 msgid "Return"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:213
+#: src/gui/kernel/qkeysequence.cpp:201
 msgctxt "QShortcut"
 msgid "Enter"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:214
+#: src/gui/kernel/qkeysequence.cpp:202
 msgctxt "QShortcut"
 msgid "Ins"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:215
+#: src/gui/kernel/qkeysequence.cpp:203
 msgctxt "QShortcut"
 msgid "Del"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:216
+#: src/gui/kernel/qkeysequence.cpp:204
 msgctxt "QShortcut"
 msgid "Pause"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:217
+#: src/gui/kernel/qkeysequence.cpp:205
 msgctxt "QShortcut"
 msgid "Print"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:218
+#: src/gui/kernel/qkeysequence.cpp:206
 msgctxt "QShortcut"
 msgid "SysReq"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:219
+#: src/gui/kernel/qkeysequence.cpp:207
 msgctxt "QShortcut"
 msgid "Home"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:220
+#: src/gui/kernel/qkeysequence.cpp:208
 msgctxt "QShortcut"
 msgid "End"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:221
+#: src/gui/kernel/qkeysequence.cpp:209
 msgctxt "QShortcut"
 msgid "Left"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:222
+#: src/gui/kernel/qkeysequence.cpp:210
 msgctxt "QShortcut"
 msgid "Up"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:223
+#: src/gui/kernel/qkeysequence.cpp:211
 msgctxt "QShortcut"
 msgid "Right"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:224
+#: src/gui/kernel/qkeysequence.cpp:212
 msgctxt "QShortcut"
 msgid "Down"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:225
+#: src/gui/kernel/qkeysequence.cpp:213
 msgctxt "QShortcut"
 msgid "PgUp"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:226
+#: src/gui/kernel/qkeysequence.cpp:214
 msgctxt "QShortcut"
 msgid "PgDown"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:227
+#: src/gui/kernel/qkeysequence.cpp:215
 msgctxt "QShortcut"
 msgid "CapsLock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:228
+#: src/gui/kernel/qkeysequence.cpp:216
 msgctxt "QShortcut"
 msgid "NumLock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:229
+#: src/gui/kernel/qkeysequence.cpp:217
 msgctxt "QShortcut"
 msgid "ScrollLock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:230
+#: src/gui/kernel/qkeysequence.cpp:218
 msgctxt "QShortcut"
 msgid "Menu"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:231
+#: src/gui/kernel/qkeysequence.cpp:219
 msgctxt "QShortcut"
 msgid "Help"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:236
+#: src/gui/kernel/qkeysequence.cpp:224
 msgctxt "QShortcut"
 msgid "Back"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:237
+#: src/gui/kernel/qkeysequence.cpp:225
 msgctxt "QShortcut"
 msgid "Forward"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:238
+#: src/gui/kernel/qkeysequence.cpp:226
 msgctxt "QShortcut"
 msgid "Stop"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:239
+#: src/gui/kernel/qkeysequence.cpp:227
 msgctxt "QShortcut"
 msgid "Refresh"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:240
+#: src/gui/kernel/qkeysequence.cpp:228
 msgctxt "QShortcut"
 msgid "Volume Down"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:241
+#: src/gui/kernel/qkeysequence.cpp:229
 msgctxt "QShortcut"
 msgid "Volume Mute"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:242
+#: src/gui/kernel/qkeysequence.cpp:230
 msgctxt "QShortcut"
 msgid "Volume Up"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:243
+#: src/gui/kernel/qkeysequence.cpp:231
 msgctxt "QShortcut"
 msgid "Media Play"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:244
+#: src/gui/kernel/qkeysequence.cpp:232
 msgctxt "QShortcut"
 msgid "Media Stop"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:245
+#: src/gui/kernel/qkeysequence.cpp:233
 msgctxt "QShortcut"
 msgid "Media Previous"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:246
+#: src/gui/kernel/qkeysequence.cpp:234
 msgctxt "QShortcut"
 msgid "Media Next"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:247
+#: src/gui/kernel/qkeysequence.cpp:235
 msgctxt "QShortcut"
 msgid "Media Record"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:249
+#: src/gui/kernel/qkeysequence.cpp:237
 msgctxt "QShortcut"
 msgid "Media Pause"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:251
+#: src/gui/kernel/qkeysequence.cpp:239
 msgctxt "QShortcut"
 msgid "Home Page"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:252
+#: src/gui/kernel/qkeysequence.cpp:240
 msgctxt "QShortcut"
 msgid "Favorites"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:253
+#: src/gui/kernel/qkeysequence.cpp:241
 msgctxt "QShortcut"
 msgid "Search"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:254
+#: src/gui/kernel/qkeysequence.cpp:242
 msgctxt "QShortcut"
 msgid "Standby"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:255
+#: src/gui/kernel/qkeysequence.cpp:243
 msgctxt "QShortcut"
 msgid "Open URL"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:256
+#: src/gui/kernel/qkeysequence.cpp:244
 msgctxt "QShortcut"
 msgid "Launch Mail"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:257
+#: src/gui/kernel/qkeysequence.cpp:245
 msgctxt "QShortcut"
 msgid "Launch Media"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:258
+#: src/gui/kernel/qkeysequence.cpp:246
 msgctxt "QShortcut"
 msgid "Launch (0)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:259
+#: src/gui/kernel/qkeysequence.cpp:247
 msgctxt "QShortcut"
 msgid "Launch (1)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:260
+#: src/gui/kernel/qkeysequence.cpp:248
 msgctxt "QShortcut"
 msgid "Launch (2)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:261
+#: src/gui/kernel/qkeysequence.cpp:249
 msgctxt "QShortcut"
 msgid "Launch (3)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:262
+#: src/gui/kernel/qkeysequence.cpp:250
 msgctxt "QShortcut"
 msgid "Launch (4)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:263
+#: src/gui/kernel/qkeysequence.cpp:251
 msgctxt "QShortcut"
 msgid "Launch (5)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:264
+#: src/gui/kernel/qkeysequence.cpp:252
 msgctxt "QShortcut"
 msgid "Launch (6)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:265
+#: src/gui/kernel/qkeysequence.cpp:253
 msgctxt "QShortcut"
 msgid "Launch (7)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:266
+#: src/gui/kernel/qkeysequence.cpp:254
 msgctxt "QShortcut"
 msgid "Launch (8)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:267
+#: src/gui/kernel/qkeysequence.cpp:255
 msgctxt "QShortcut"
 msgid "Launch (9)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:268
+#: src/gui/kernel/qkeysequence.cpp:256
 msgctxt "QShortcut"
 msgid "Launch (A)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:269
+#: src/gui/kernel/qkeysequence.cpp:257
 msgctxt "QShortcut"
 msgid "Launch (B)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:270
+#: src/gui/kernel/qkeysequence.cpp:258
 msgctxt "QShortcut"
 msgid "Launch (C)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:271
+#: src/gui/kernel/qkeysequence.cpp:259
 msgctxt "QShortcut"
 msgid "Launch (D)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:272
+#: src/gui/kernel/qkeysequence.cpp:260
 msgctxt "QShortcut"
 msgid "Launch (E)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:273
+#: src/gui/kernel/qkeysequence.cpp:261
 msgctxt "QShortcut"
 msgid "Launch (F)"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:274
+#: src/gui/kernel/qkeysequence.cpp:262
 msgctxt "QShortcut"
 msgid "Monitor Brightness Up"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:275
+#: src/gui/kernel/qkeysequence.cpp:263
 msgctxt "QShortcut"
 msgid "Monitor Brightness Down"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:276
+#: src/gui/kernel/qkeysequence.cpp:264
 msgctxt "QShortcut"
 msgid "Keyboard Light On/Off"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:277
+#: src/gui/kernel/qkeysequence.cpp:265
 msgctxt "QShortcut"
 msgid "Keyboard Brightness Up"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:278
+#: src/gui/kernel/qkeysequence.cpp:266
 msgctxt "QShortcut"
 msgid "Keyboard Brightness Down"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:279
+#: src/gui/kernel/qkeysequence.cpp:267
 msgctxt "QShortcut"
 msgid "Power Off"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:280
+#: src/gui/kernel/qkeysequence.cpp:268
 msgctxt "QShortcut"
 msgid "Wake Up"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:281
+#: src/gui/kernel/qkeysequence.cpp:269
 msgctxt "QShortcut"
 msgid "Eject"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:282
+#: src/gui/kernel/qkeysequence.cpp:270
 msgctxt "QShortcut"
 msgid "Screensaver"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:283
+#: src/gui/kernel/qkeysequence.cpp:271
 msgctxt "QShortcut"
 msgid "WWW"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:284
+#: src/gui/kernel/qkeysequence.cpp:272
 msgctxt "QShortcut"
 msgid "Sleep"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:285
+#: src/gui/kernel/qkeysequence.cpp:273
 msgctxt "QShortcut"
 msgid "LightBulb"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:286
+#: src/gui/kernel/qkeysequence.cpp:274
 msgctxt "QShortcut"
 msgid "Shop"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:287
+#: src/gui/kernel/qkeysequence.cpp:275
 msgctxt "QShortcut"
 msgid "History"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:288
+#: src/gui/kernel/qkeysequence.cpp:276
 msgctxt "QShortcut"
 msgid "Add Favorite"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:289
+#: src/gui/kernel/qkeysequence.cpp:277
 msgctxt "QShortcut"
 msgid "Hot Links"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:290
+#: src/gui/kernel/qkeysequence.cpp:278
 msgctxt "QShortcut"
 msgid "Adjust Brightness"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:291
+#: src/gui/kernel/qkeysequence.cpp:279
 msgctxt "QShortcut"
 msgid "Finance"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:292
+#: src/gui/kernel/qkeysequence.cpp:280
 msgctxt "QShortcut"
 msgid "Community"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:293
+#: src/gui/kernel/qkeysequence.cpp:281
 msgctxt "QShortcut"
 msgid "Audio Rewind"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:294
+#: src/gui/kernel/qkeysequence.cpp:282
 msgctxt "QShortcut"
 msgid "Back Forward"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:295
+#: src/gui/kernel/qkeysequence.cpp:283
 msgctxt "QShortcut"
 msgid "Application Left"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:296
+#: src/gui/kernel/qkeysequence.cpp:284
 msgctxt "QShortcut"
 msgid "Application Right"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:297
+#: src/gui/kernel/qkeysequence.cpp:285
 msgctxt "QShortcut"
 msgid "Book"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:298
+#: src/gui/kernel/qkeysequence.cpp:286
 msgctxt "QShortcut"
 msgid "CD"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:299
+#: src/gui/kernel/qkeysequence.cpp:287
 msgctxt "QShortcut"
 msgid "Calculator"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:300
+#: src/gui/kernel/qkeysequence.cpp:288
 msgctxt "QShortcut"
 msgid "Clear"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:301
+#: src/gui/kernel/qkeysequence.cpp:289
 msgctxt "QShortcut"
 msgid "Clear Grab"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:302
+#: src/gui/kernel/qkeysequence.cpp:290
 msgctxt "QShortcut"
 msgid "Close"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:303
+#: src/gui/kernel/qkeysequence.cpp:291
 msgctxt "QShortcut"
 msgid "Copy"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:304
+#: src/gui/kernel/qkeysequence.cpp:292
 msgctxt "QShortcut"
 msgid "Cut"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:305
+#: src/gui/kernel/qkeysequence.cpp:293
 msgctxt "QShortcut"
 msgid "Display"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:306
+#: src/gui/kernel/qkeysequence.cpp:294
 msgctxt "QShortcut"
 msgid "DOS"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:307
+#: src/gui/kernel/qkeysequence.cpp:295
 msgctxt "QShortcut"
 msgid "Documents"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:308
+#: src/gui/kernel/qkeysequence.cpp:296
 msgctxt "QShortcut"
 msgid "Spreadsheet"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:309
+#: src/gui/kernel/qkeysequence.cpp:297
 msgctxt "QShortcut"
 msgid "Browser"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:310
+#: src/gui/kernel/qkeysequence.cpp:298
 msgctxt "QShortcut"
 msgid "Game"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:311
+#: src/gui/kernel/qkeysequence.cpp:299
 msgctxt "QShortcut"
 msgid "Go"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:312
+#: src/gui/kernel/qkeysequence.cpp:300
 msgctxt "QShortcut"
 msgid "iTouch"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:313
+#: src/gui/kernel/qkeysequence.cpp:301
 msgctxt "QShortcut"
 msgid "Logoff"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:314
+#: src/gui/kernel/qkeysequence.cpp:302
 msgctxt "QShortcut"
 msgid "Market"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:315
+#: src/gui/kernel/qkeysequence.cpp:303
 msgctxt "QShortcut"
 msgid "Meeting"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:316
+#: src/gui/kernel/qkeysequence.cpp:304
 msgctxt "QShortcut"
 msgid "Keyboard Menu"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:317
+#: src/gui/kernel/qkeysequence.cpp:305
 msgctxt "QShortcut"
 msgid "Menu PB"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:318
+#: src/gui/kernel/qkeysequence.cpp:306
 msgctxt "QShortcut"
 msgid "My Sites"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:319
+#: src/gui/kernel/qkeysequence.cpp:307
 msgctxt "QShortcut"
 msgid "News"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:320
+#: src/gui/kernel/qkeysequence.cpp:308
 msgctxt "QShortcut"
 msgid "Home Office"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:321
+#: src/gui/kernel/qkeysequence.cpp:309
 msgctxt "QShortcut"
 msgid "Option"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:322
+#: src/gui/kernel/qkeysequence.cpp:310
 msgctxt "QShortcut"
 msgid "Paste"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:323
+#: src/gui/kernel/qkeysequence.cpp:311
 msgctxt "QShortcut"
 msgid "Phone"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:324
+#: src/gui/kernel/qkeysequence.cpp:312
 msgctxt "QShortcut"
 msgid "Reply"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:325
+#: src/gui/kernel/qkeysequence.cpp:313
 msgctxt "QShortcut"
 msgid "Reload"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:326
+#: src/gui/kernel/qkeysequence.cpp:314
 msgctxt "QShortcut"
 msgid "Rotate Windows"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:327
+#: src/gui/kernel/qkeysequence.cpp:315
 msgctxt "QShortcut"
 msgid "Rotation PB"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:328
+#: src/gui/kernel/qkeysequence.cpp:316
 msgctxt "QShortcut"
 msgid "Rotation KB"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:329
+#: src/gui/kernel/qkeysequence.cpp:317
 msgctxt "QShortcut"
 msgid "Save"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:330
+#: src/gui/kernel/qkeysequence.cpp:318
 msgctxt "QShortcut"
 msgid "Send"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:331
+#: src/gui/kernel/qkeysequence.cpp:319
 msgctxt "QShortcut"
 msgid "Spellchecker"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:332
+#: src/gui/kernel/qkeysequence.cpp:320
 msgctxt "QShortcut"
 msgid "Split Screen"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:333
+#: src/gui/kernel/qkeysequence.cpp:321
 msgctxt "QShortcut"
 msgid "Support"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:334
+#: src/gui/kernel/qkeysequence.cpp:322
 msgctxt "QShortcut"
 msgid "Task Panel"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:335
+#: src/gui/kernel/qkeysequence.cpp:323
 msgctxt "QShortcut"
 msgid "Terminal"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:336
+#: src/gui/kernel/qkeysequence.cpp:324
 msgctxt "QShortcut"
 msgid "Tools"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:337
+#: src/gui/kernel/qkeysequence.cpp:325
 msgctxt "QShortcut"
 msgid "Travel"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:338
+#: src/gui/kernel/qkeysequence.cpp:326
 msgctxt "QShortcut"
 msgid "Video"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:339
+#: src/gui/kernel/qkeysequence.cpp:327
 msgctxt "QShortcut"
 msgid "Word Processor"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:340
+#: src/gui/kernel/qkeysequence.cpp:328
 msgctxt "QShortcut"
 msgid "XFer"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:341
+#: src/gui/kernel/qkeysequence.cpp:329
 msgctxt "QShortcut"
 msgid "Zoom In"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:342
+#: src/gui/kernel/qkeysequence.cpp:330
 msgctxt "QShortcut"
 msgid "Zoom Out"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:343
+#: src/gui/kernel/qkeysequence.cpp:331
 msgctxt "QShortcut"
 msgid "Away"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:344
+#: src/gui/kernel/qkeysequence.cpp:332
 msgctxt "QShortcut"
 msgid "Messenger"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:345
+#: src/gui/kernel/qkeysequence.cpp:333
 msgctxt "QShortcut"
 msgid "WebCam"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:346
+#: src/gui/kernel/qkeysequence.cpp:334
 msgctxt "QShortcut"
 msgid "Mail Forward"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:347
+#: src/gui/kernel/qkeysequence.cpp:335
 msgctxt "QShortcut"
 msgid "Pictures"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:348
+#: src/gui/kernel/qkeysequence.cpp:336
 msgctxt "QShortcut"
 msgid "Music"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:349
+#: src/gui/kernel/qkeysequence.cpp:337
 msgctxt "QShortcut"
 msgid "Battery"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:350
+#: src/gui/kernel/qkeysequence.cpp:338
 msgctxt "QShortcut"
 msgid "Bluetooth"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:351
+#: src/gui/kernel/qkeysequence.cpp:339
 msgctxt "QShortcut"
 msgid "Wireless"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:352
+#: src/gui/kernel/qkeysequence.cpp:340
 msgctxt "QShortcut"
 msgid "Ultra Wide Band"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:353
+#: src/gui/kernel/qkeysequence.cpp:341
 msgctxt "QShortcut"
 msgid "Audio Forward"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:354
+#: src/gui/kernel/qkeysequence.cpp:342
 msgctxt "QShortcut"
 msgid "Audio Repeat"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:355
+#: src/gui/kernel/qkeysequence.cpp:343
 msgctxt "QShortcut"
 msgid "Audio Random Play"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:356
+#: src/gui/kernel/qkeysequence.cpp:344
 msgctxt "QShortcut"
 msgid "Subtitle"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:357
+#: src/gui/kernel/qkeysequence.cpp:345
 msgctxt "QShortcut"
 msgid "Audio Cycle Track"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:358
+#: src/gui/kernel/qkeysequence.cpp:346
 msgctxt "QShortcut"
 msgid "Time"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:359
+#: src/gui/kernel/qkeysequence.cpp:347
 msgctxt "QShortcut"
 msgid "Select"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:360
+#: src/gui/kernel/qkeysequence.cpp:348
 msgctxt "QShortcut"
 msgid "View"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:361
+#: src/gui/kernel/qkeysequence.cpp:349
 msgctxt "QShortcut"
 msgid "Top Menu"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:362
+#: src/gui/kernel/qkeysequence.cpp:350
 msgctxt "QShortcut"
 msgid "Suspend"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:363
+#: src/gui/kernel/qkeysequence.cpp:351
 msgctxt "QShortcut"
 msgid "Hibernate"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:367
+#: src/gui/kernel/qkeysequence.cpp:355
 msgctxt "QShortcut"
 msgid "Print Screen"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:368
+#: src/gui/kernel/qkeysequence.cpp:356
 msgctxt "QShortcut"
 msgid "Page Up"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:369
+#: src/gui/kernel/qkeysequence.cpp:357
 msgctxt "QShortcut"
 msgid "Page Down"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:370
+#: src/gui/kernel/qkeysequence.cpp:358
 msgctxt "QShortcut"
 msgid "Caps Lock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:371
+#: src/gui/kernel/qkeysequence.cpp:359
 msgctxt "QShortcut"
 msgid "Num Lock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:372
+#: src/gui/kernel/qkeysequence.cpp:360
 msgctxt "QShortcut"
 msgid "Number Lock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:373
+#: src/gui/kernel/qkeysequence.cpp:361
 msgctxt "QShortcut"
 msgid "Scroll Lock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:374
+#: src/gui/kernel/qkeysequence.cpp:362
 msgctxt "QShortcut"
 msgid "Insert"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:375
+#: src/gui/kernel/qkeysequence.cpp:363
 msgctxt "QShortcut"
 msgid "Delete"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:376
+#: src/gui/kernel/qkeysequence.cpp:364
 msgctxt "QShortcut"
 msgid "Escape"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:377
+#: src/gui/kernel/qkeysequence.cpp:365
 msgctxt "QShortcut"
 msgid "System Request"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:381
+#: src/gui/kernel/qkeysequence.cpp:369
 msgctxt "QShortcut"
 msgid "Kanji"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:382
+#: src/gui/kernel/qkeysequence.cpp:370
 msgctxt "QShortcut"
 msgid "Muhenkan"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:383
+#: src/gui/kernel/qkeysequence.cpp:371
 msgctxt "QShortcut"
 msgid "Henkan"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:384
+#: src/gui/kernel/qkeysequence.cpp:372
 msgctxt "QShortcut"
 msgid "Romaji"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:385
+#: src/gui/kernel/qkeysequence.cpp:373
 msgctxt "QShortcut"
 msgid "Hiragana"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:386
+#: src/gui/kernel/qkeysequence.cpp:374
 msgctxt "QShortcut"
 msgid "Katakana"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:387
+#: src/gui/kernel/qkeysequence.cpp:375
 msgctxt "QShortcut"
 msgid "Hiragana Katakana"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:388
+#: src/gui/kernel/qkeysequence.cpp:376
 msgctxt "QShortcut"
 msgid "Zenkaku"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:389
+#: src/gui/kernel/qkeysequence.cpp:377
 msgctxt "QShortcut"
 msgid "Hankaku"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:390
+#: src/gui/kernel/qkeysequence.cpp:378
 msgctxt "QShortcut"
 msgid "Zenkaku Hankaku"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:391
+#: src/gui/kernel/qkeysequence.cpp:379
 msgctxt "QShortcut"
 msgid "Touroku"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:392
+#: src/gui/kernel/qkeysequence.cpp:380
 msgctxt "QShortcut"
 msgid "Massyo"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:393
+#: src/gui/kernel/qkeysequence.cpp:381
 msgctxt "QShortcut"
 msgid "Kana Lock"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:394
+#: src/gui/kernel/qkeysequence.cpp:382
 msgctxt "QShortcut"
 msgid "Kana Shift"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:395
+#: src/gui/kernel/qkeysequence.cpp:383
 msgctxt "QShortcut"
 msgid "Eisu Shift"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:396
+#: src/gui/kernel/qkeysequence.cpp:384
 msgctxt "QShortcut"
 msgid "Eisu toggle"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:397
+#: src/gui/kernel/qkeysequence.cpp:385
 msgctxt "QShortcut"
 msgid "Code input"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:398
+#: src/gui/kernel/qkeysequence.cpp:386
 msgctxt "QShortcut"
 msgid "Multiple Candidate"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:399
+#: src/gui/kernel/qkeysequence.cpp:387
 msgctxt "QShortcut"
 msgid "Previous Candidate"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:852 src/gui/kernel/qkeysequence.cpp:931
+#: src/gui/kernel/qkeysequence.cpp:840 src/gui/kernel/qkeysequence.cpp:919
 msgid "Ctrl"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:853 src/gui/kernel/qkeysequence.cpp:935
+#: src/gui/kernel/qkeysequence.cpp:841 src/gui/kernel/qkeysequence.cpp:923
 msgid "Shift"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:854 src/gui/kernel/qkeysequence.cpp:933
+#: src/gui/kernel/qkeysequence.cpp:842 src/gui/kernel/qkeysequence.cpp:921
 msgid "Alt"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:855 src/gui/kernel/qkeysequence.cpp:929
+#: src/gui/kernel/qkeysequence.cpp:843 src/gui/kernel/qkeysequence.cpp:917
 msgid "Meta"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:918
+#: src/gui/kernel/qkeysequence.cpp:906
 msgid "+"
 msgstr ""
 
-#: src/gui/kernel/qkeysequence.cpp:942
+#: src/gui/kernel/qkeysequence.cpp:930
 msgid "F%1"
 msgstr ""
 
-#: src/gui/itemviews/qdirmodel.cpp:805
+#: src/gui/itemviews/qdirmodel.cpp:793
 msgctxt "QFileDialog"
 msgid "My Computer"
 msgstr ""
 
-#: src/gui/itemviews/qdirmodel.cpp:1224
+#: src/gui/itemviews/qdirmodel.cpp:1212
 msgid "%1 byte(s)"
 msgstr ""
 
-#: src/gui/itemviews/qitemeditorfactory.cpp:548
+#: src/gui/itemviews/qitemeditorfactory.cpp:536
 msgid "False"
 msgstr ""
 
-#: src/gui/itemviews/qitemeditorfactory.cpp:549
+#: src/gui/itemviews/qitemeditorfactory.cpp:537
 msgid "True"
 msgstr ""
 
-#: src/gui/itemviews/qfileiconprovider.cpp:145
+#: src/gui/itemviews/qfileiconprovider.cpp:133
 msgctxt "QFileDialog"
 msgid "Drive"
 msgstr ""
 
-#: src/gui/itemviews/qfileiconprovider.cpp:148
-#: src/gui/itemviews/qfileiconprovider.cpp:149
+#: src/gui/itemviews/qfileiconprovider.cpp:136
+#: src/gui/itemviews/qfileiconprovider.cpp:137
 msgctxt "QFileDialog"
 msgid "File"
 msgstr ""
 
-#: src/gui/itemviews/qfileiconprovider.cpp:153
+#: src/gui/itemviews/qfileiconprovider.cpp:141
 msgctxt "QFileDialog"
 msgid "Folder"
 msgstr ""
 
-#: src/gui/itemviews/qfileiconprovider.cpp:158
+#: src/gui/itemviews/qfileiconprovider.cpp:146
 msgctxt "QFileDialog"
 msgid "Shortcut"
 msgstr ""
 
-#: src/gui/itemviews/qfileiconprovider.cpp:162
+#: src/gui/itemviews/qfileiconprovider.cpp:150
 msgctxt "QFileDialog"
 msgid "Unknown"
 msgstr ""
 
-#: src/gui/util/qundostack.cpp:869 src/gui/util/qundogroup.cpp:380
+#: src/gui/util/qundostack.cpp:857 src/gui/util/qundogroup.cpp:368
 msgid "Undo %1"
 msgstr ""
 
-#: src/gui/util/qundostack.cpp:869 src/gui/util/qundogroup.cpp:380
+#: src/gui/util/qundostack.cpp:857 src/gui/util/qundogroup.cpp:368
 msgid "Undo"
 msgstr ""
 
-#: src/gui/util/qundostack.cpp:899 src/gui/util/qundogroup.cpp:411
+#: src/gui/util/qundostack.cpp:887 src/gui/util/qundogroup.cpp:399
 msgid "Redo %1"
 msgstr ""
 
-#: src/gui/util/qundostack.cpp:899 src/gui/util/qundogroup.cpp:411
+#: src/gui/util/qundostack.cpp:887 src/gui/util/qundogroup.cpp:399
 msgid "Redo"
 msgstr ""
 
-#: src/gui/util/qundoview.cpp:93
+#: src/gui/util/qundoview.cpp:81
 msgid "<empty>"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:74 src/gui/text/qfontdatabase.cpp:837
+#: src/gui/text/qfontdatabase.cpp:62 src/gui/text/qfontdatabase.cpp:825
 msgctxt "QFontDatabase"
 msgid "Normal"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:77 src/gui/text/qfontdatabase.cpp:89
-#: src/gui/text/qfontdatabase.cpp:825
+#: src/gui/text/qfontdatabase.cpp:65 src/gui/text/qfontdatabase.cpp:77
+#: src/gui/text/qfontdatabase.cpp:813
 msgctxt "QFontDatabase"
 msgid "Bold"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:80 src/gui/text/qfontdatabase.cpp:827
+#: src/gui/text/qfontdatabase.cpp:68 src/gui/text/qfontdatabase.cpp:815
 msgctxt "QFontDatabase"
 msgid "Demi Bold"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:83 src/gui/text/qfontdatabase.cpp:101
-#: src/gui/text/qfontdatabase.cpp:823
+#: src/gui/text/qfontdatabase.cpp:71 src/gui/text/qfontdatabase.cpp:89
+#: src/gui/text/qfontdatabase.cpp:811
 msgctxt "QFontDatabase"
 msgid "Black"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:91
+#: src/gui/text/qfontdatabase.cpp:79
 msgctxt "QFontDatabase"
 msgid "Demi"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:97 src/gui/text/qfontdatabase.cpp:829
+#: src/gui/text/qfontdatabase.cpp:85 src/gui/text/qfontdatabase.cpp:817
 msgctxt "QFontDatabase"
 msgid "Light"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:205 src/gui/text/qfontdatabase.cpp:832
+#: src/gui/text/qfontdatabase.cpp:193 src/gui/text/qfontdatabase.cpp:820
 msgctxt "QFontDatabase"
 msgid "Italic"
 msgstr ""
 
-#: src/gui/text/qfontdatabase.cpp:208 src/gui/text/qfontdatabase.cpp:834
+#: src/gui/text/qfontdatabase.cpp:196 src/gui/text/qfontdatabase.cpp:822
 msgctxt "QFontDatabase"
 msgid "Oblique"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:1888
+#: src/gui/text/qtextcontrol.cpp:1876
 msgid "Copy &Link Location"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2804
+#: src/gui/text/qtextcontrol.cpp:2792
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "LRM Left-to-right mark"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2805
+#: src/gui/text/qtextcontrol.cpp:2793
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "RLM Right-to-left mark"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2806
+#: src/gui/text/qtextcontrol.cpp:2794
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "ZWJ Zero width joiner"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2807
+#: src/gui/text/qtextcontrol.cpp:2795
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "ZWNJ Zero width non-joiner"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2808
+#: src/gui/text/qtextcontrol.cpp:2796
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "ZWSP Zero width space"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2809
+#: src/gui/text/qtextcontrol.cpp:2797
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "LRE Start of left-to-right embedding"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2810
+#: src/gui/text/qtextcontrol.cpp:2798
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "RLE Start of right-to-left embedding"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2811
+#: src/gui/text/qtextcontrol.cpp:2799
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "LRO Start of left-to-right override"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2812
+#: src/gui/text/qtextcontrol.cpp:2800
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "RLO Start of right-to-left override"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2813
+#: src/gui/text/qtextcontrol.cpp:2801
 msgctxt "QUnicodeControlCharacterMenu"
 msgid "PDF Pop directional formatting"
 msgstr ""
 
-#: src/gui/text/qtextcontrol.cpp:2819
+#: src/gui/text/qtextcontrol.cpp:2807
 msgid "Insert Unicode control character"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:209
+#: src/network/ssl/qsslerror.cpp:197
 msgid "No error"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:211
+#: src/network/ssl/qsslerror.cpp:199
 msgid "The issuer certificate could not be found"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:213
+#: src/network/ssl/qsslerror.cpp:201
 msgid "The certificate signature could not be decrypted"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:215
+#: src/network/ssl/qsslerror.cpp:203
 msgid "The public key in the certificate could not be read"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:217
+#: src/network/ssl/qsslerror.cpp:205
 msgid "The signature of the certificate is invalid"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:219
+#: src/network/ssl/qsslerror.cpp:207
 msgid "The certificate is not yet valid"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:221
+#: src/network/ssl/qsslerror.cpp:209
 msgid "The certificate has expired"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:223
+#: src/network/ssl/qsslerror.cpp:211
 msgid "The certificate's notBefore field contains an invalid time"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:225
+#: src/network/ssl/qsslerror.cpp:213
 msgid "The certificate's notAfter field contains an invalid time"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:227
+#: src/network/ssl/qsslerror.cpp:215
 msgid "The certificate is self-signed, and untrusted"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:229
+#: src/network/ssl/qsslerror.cpp:217
 msgid ""
 "The root certificate of the certificate chain is self-signed, and untrusted"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:231
+#: src/network/ssl/qsslerror.cpp:219
 msgid ""
 "The issuer certificate of a locally looked up certificate could not be found"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:233
+#: src/network/ssl/qsslerror.cpp:221
 msgid "No certificates could be verified"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:235
+#: src/network/ssl/qsslerror.cpp:223
 msgid "One of the CA certificates is invalid"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:237
+#: src/network/ssl/qsslerror.cpp:225
 msgid "The basicConstraints path length parameter has been exceeded"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:239
+#: src/network/ssl/qsslerror.cpp:227
 msgid "The supplied certificate is unsuitable for this purpose"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:241
+#: src/network/ssl/qsslerror.cpp:229
 msgid "The root CA certificate is not trusted for this purpose"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:243
+#: src/network/ssl/qsslerror.cpp:231
 msgid "The root CA certificate is marked to reject the specified purpose"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:245
+#: src/network/ssl/qsslerror.cpp:233
 msgid ""
 "The current candidate issuer certificate was rejected because its subject "
 "name did not match the issuer name of the current certificate"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:248
+#: src/network/ssl/qsslerror.cpp:236
 msgid ""
 "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"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:252
+#: src/network/ssl/qsslerror.cpp:240
 msgid "The peer did not present any certificate"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:254
+#: src/network/ssl/qsslerror.cpp:242
 msgid "The host name did not match any of the valid hosts for this certificate"
 msgstr ""
 
-#: src/network/ssl/qsslerror.cpp:257
+#: src/network/ssl/qsslerror.cpp:245
 msgid "The peer certificate is blacklisted"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:266
+#: src/network/ssl/qsslsocket_openssl.cpp:254
 msgid "Error creating SSL context (%1)"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:320
+#: src/network/ssl/qsslsocket_openssl.cpp:308
 msgid "Invalid or empty cipher list (%1)"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:352
+#: src/network/ssl/qsslsocket_openssl.cpp:340
 msgid "Cannot provide a certificate with no key, %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:359
+#: src/network/ssl/qsslsocket_openssl.cpp:347
 msgid "Error loading local certificate, %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:374
+#: src/network/ssl/qsslsocket_openssl.cpp:362
 msgid "Error loading private key, %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:381
+#: src/network/ssl/qsslsocket_openssl.cpp:369
 msgid "Private key does not certify public key, %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:401
+#: src/network/ssl/qsslsocket_openssl.cpp:389
 msgid "Error creating SSL session, %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:437
+#: src/network/ssl/qsslsocket_openssl.cpp:425
 msgid "Error creating SSL session: %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:686
+#: src/network/ssl/qsslsocket_openssl.cpp:674
 msgid "Unable to write data: %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:757
+#: src/network/ssl/qsslsocket_openssl.cpp:745
 msgid "Unable to decrypt data: %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:830
+#: src/network/ssl/qsslsocket_openssl.cpp:818
 msgid "The TLS/SSL connection has been closed"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:838
-#: src/network/ssl/qsslsocket_openssl.cpp:848
+#: src/network/ssl/qsslsocket_openssl.cpp:826
+#: src/network/ssl/qsslsocket_openssl.cpp:836
 msgid "Error while reading: %1"
 msgstr ""
 
-#: src/network/ssl/qsslsocket_openssl.cpp:943
+#: src/network/ssl/qsslsocket_openssl.cpp:931
 msgid "Error during SSL handshake: %1"
 msgstr ""
 
-#: src/network/kernel/qhostinfo_p.h:91
+#: src/network/kernel/qhostinfo_p.h:79
 msgctxt "QHostInfo"
 msgid "Unknown error"
 msgstr ""
 
-#: src/network/kernel/qhostinfo.cpp:146
+#: src/network/kernel/qhostinfo.cpp:134
 msgctxt "QHostInfo"
 msgid "No host name given"
 msgstr ""
 
-#: src/network/kernel/qhostinfo_unix.cpp:98
-#: src/network/kernel/qhostinfo_unix.cpp:184
-#: src/network/socket/qabstractsocket.cpp:885
-#: src/network/socket/qhttpsocketengine.cpp:662
-#: src/network/socket/qsocks5socketengine.cpp:638
-#: src/network/socket/qsocks5socketengine.cpp:664
+#: src/network/kernel/qhostinfo_unix.cpp:86
+#: src/network/kernel/qhostinfo_unix.cpp:172
+#: src/network/socket/qabstractsocket.cpp:873
+#: src/network/socket/qhttpsocketengine.cpp:650
+#: src/network/socket/qsocks5socketengine.cpp:626
+#: src/network/socket/qsocks5socketengine.cpp:652
 msgid "Host not found"
 msgstr ""
 
-#: src/network/kernel/qhostinfo_unix.cpp:116
+#: src/network/kernel/qhostinfo_unix.cpp:104
 msgid "No host name given"
 msgstr ""
 
-#: src/network/kernel/qhostinfo_unix.cpp:118
+#: src/network/kernel/qhostinfo_unix.cpp:106
 msgid "Invalid hostname"
 msgstr ""
 
-#: src/network/kernel/qhostinfo_unix.cpp:172
+#: src/network/kernel/qhostinfo_unix.cpp:160
 msgid "Unknown address type"
 msgstr ""
 
-#: src/network/bearer/qnetworksession.cpp:444
+#: src/network/bearer/qnetworksession.cpp:432
 msgid "Invalid configuration."
 msgstr ""
 
-#: src/network/socket/qtcpserver.cpp:278 src/network/socket/qtcpserver.cpp:400
-#: src/network/socket/qabstractsocket.cpp:536
-#: src/network/socket/qabstractsocket.cpp:1323
-#: src/network/socket/qabstractsocket.cpp:1533
+#: src/network/socket/qtcpserver.cpp:266 src/network/socket/qtcpserver.cpp:388
+#: src/network/socket/qabstractsocket.cpp:524
+#: src/network/socket/qabstractsocket.cpp:1311
+#: src/network/socket/qabstractsocket.cpp:1521
 msgid "Operation on socket is not supported"
 msgstr ""
 
-#: src/network/socket/qlocalserver_unix.cpp:203
+#: src/network/socket/qlocalserver_unix.cpp:191
 msgid "%1: Permission denied"
 msgstr ""
 
-#: src/network/socket/qlocalserver_unix.cpp:211
-#: src/network/socket/qlocalserver.cpp:214
+#: src/network/socket/qlocalserver_unix.cpp:199
+#: src/network/socket/qlocalserver.cpp:202
 msgid "%1: Name error"
 msgstr ""
 
-#: src/network/socket/qlocalserver_unix.cpp:215
+#: src/network/socket/qlocalserver_unix.cpp:203
 msgid "%1: Address in use"
 msgstr ""
 
-#: src/network/socket/qlocalserver_unix.cpp:220
-#: src/network/socket/qlocalsocket_unix.cpp:153
+#: src/network/socket/qlocalserver_unix.cpp:208
+#: src/network/socket/qlocalsocket_unix.cpp:141
 msgid "%1: Unknown error %2"
 msgstr ""
 
-#: src/network/socket/qabstractsocket.cpp:927
-#: src/network/socket/qhttpsocketengine.cpp:665
-#: src/network/socket/qnativesocketengine.cpp:232
-#: src/network/socket/qsocks5socketengine.cpp:668
+#: src/network/socket/qabstractsocket.cpp:915
+#: src/network/socket/qhttpsocketengine.cpp:653
+#: src/network/socket/qnativesocketengine.cpp:220
+#: src/network/socket/qsocks5socketengine.cpp:656
 msgid "Connection refused"
 msgstr ""
 
-#: src/network/socket/qabstractsocket.cpp:1069
-#: src/network/socket/qnativesocketengine.cpp:229
+#: src/network/socket/qabstractsocket.cpp:1057
+#: src/network/socket/qnativesocketengine.cpp:217
 msgid "Connection timed out"
 msgstr ""
 
-#: src/network/socket/qabstractsocket.cpp:1710
+#: src/network/socket/qabstractsocket.cpp:1698
 msgid "Socket operation timed out"
 msgstr ""
 
-#: src/network/socket/qabstractsocket.cpp:2121
+#: src/network/socket/qabstractsocket.cpp:2109
 msgid "Socket is not connected"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:562
+#: src/network/socket/qhttpsocketengine.cpp:550
 msgid "Did not receive HTTP response from proxy"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:598
+#: src/network/socket/qhttpsocketengine.cpp:586
 msgid "Error parsing authentication request from proxy"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:632
+#: src/network/socket/qhttpsocketengine.cpp:620
 msgid "Authentication required"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:659
+#: src/network/socket/qhttpsocketengine.cpp:647
 msgid "Proxy denied connection"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:669
+#: src/network/socket/qhttpsocketengine.cpp:657
 msgid "Error communicating with HTTP proxy"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:692
+#: src/network/socket/qhttpsocketengine.cpp:680
 msgid "Proxy server not found"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:694
+#: src/network/socket/qhttpsocketengine.cpp:682
 msgid "Proxy connection refused"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:696
+#: src/network/socket/qhttpsocketengine.cpp:684
 msgid "Proxy server connection timed out"
 msgstr ""
 
-#: src/network/socket/qhttpsocketengine.cpp:698
+#: src/network/socket/qhttpsocketengine.cpp:686
 msgid "Proxy connection closed prematurely"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:193
+#: src/network/socket/qnativesocketengine.cpp:181
 msgid "Unable to initialize non-blocking socket"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:196
+#: src/network/socket/qnativesocketengine.cpp:184
 msgid "Unable to initialize broadcast socket"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:199
+#: src/network/socket/qnativesocketengine.cpp:187
 msgid "Attempt to use IPv6 socket on a platform with no IPv6 support"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:202
+#: src/network/socket/qnativesocketengine.cpp:190
 msgid "The remote host closed the connection"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:205
+#: src/network/socket/qnativesocketengine.cpp:193
 msgid "Network operation timed out"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:208
+#: src/network/socket/qnativesocketengine.cpp:196
 msgid "Out of resources"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:211
+#: src/network/socket/qnativesocketengine.cpp:199
 msgid "Unsupported socket operation"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:214
+#: src/network/socket/qnativesocketengine.cpp:202
 msgid "Protocol type not supported"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:217
+#: src/network/socket/qnativesocketengine.cpp:205
 msgid "Invalid socket descriptor"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:220
+#: src/network/socket/qnativesocketengine.cpp:208
 msgid "Host unreachable"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:223
-#: src/network/socket/qsocks5socketengine.cpp:660
+#: src/network/socket/qnativesocketengine.cpp:211
+#: src/network/socket/qsocks5socketengine.cpp:648
 msgid "Network unreachable"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:226
+#: src/network/socket/qnativesocketengine.cpp:214
 msgid "Permission denied"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:235
+#: src/network/socket/qnativesocketengine.cpp:223
 msgid "The bound address is already in use"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:238
+#: src/network/socket/qnativesocketengine.cpp:226
 msgid "The address is not available"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:241
+#: src/network/socket/qnativesocketengine.cpp:229
 msgid "The address is protected"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:244
+#: src/network/socket/qnativesocketengine.cpp:232
 msgid "Datagram was too large to send"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:247
+#: src/network/socket/qnativesocketengine.cpp:235
 msgid "Unable to send a message"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:250
+#: src/network/socket/qnativesocketengine.cpp:238
 msgid "Unable to receive a message"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:253
+#: src/network/socket/qnativesocketengine.cpp:241
 msgid "Unable to write"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:256
+#: src/network/socket/qnativesocketengine.cpp:244
 msgid "Network error"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:259
+#: src/network/socket/qnativesocketengine.cpp:247
 msgid "Another socket is already listening on the same port"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:262
+#: src/network/socket/qnativesocketengine.cpp:250
 msgid "Operation on non-socket"
 msgstr ""
 
-#: src/network/socket/qnativesocketengine.cpp:265
+#: src/network/socket/qnativesocketengine.cpp:253
 msgid "The proxy type is invalid for this operation"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:125
+#: src/network/socket/qlocalsocket_unix.cpp:113
 msgid "%1: Connection refused"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:128
+#: src/network/socket/qlocalsocket_unix.cpp:116
 msgid "%1: Remote closed"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:131
+#: src/network/socket/qlocalsocket_unix.cpp:119
 msgid "%1: Invalid name"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:134
+#: src/network/socket/qlocalsocket_unix.cpp:122
 msgid "%1: Socket access error"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:137
+#: src/network/socket/qlocalsocket_unix.cpp:125
 msgid "%1: Socket resource error"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:140
+#: src/network/socket/qlocalsocket_unix.cpp:128
 msgid "%1: Socket operation timed out"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:143
+#: src/network/socket/qlocalsocket_unix.cpp:131
 msgid "%1: Datagram too large"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:146
+#: src/network/socket/qlocalsocket_unix.cpp:134
 msgid "%1: Connection error"
 msgstr ""
 
-#: src/network/socket/qlocalsocket_unix.cpp:149
+#: src/network/socket/qlocalsocket_unix.cpp:137
 msgid "%1: The socket operation is not supported"
 msgstr ""
 
-#: src/network/socket/qudpsocket.cpp:193
+#: src/network/socket/qudpsocket.cpp:181
 msgid "This platform does not support IPv6"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:593
+#: src/network/socket/qsocks5socketengine.cpp:581
 msgid "Connection to proxy refused"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:597
+#: src/network/socket/qsocks5socketengine.cpp:585
 msgid "Connection to proxy closed prematurely"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:601
+#: src/network/socket/qsocks5socketengine.cpp:589
 msgid "Proxy host not found"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:606
+#: src/network/socket/qsocks5socketengine.cpp:594
 msgid "Connection to proxy timed out"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:623
+#: src/network/socket/qsocks5socketengine.cpp:611
 msgid "Proxy authentication failed"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:624
+#: src/network/socket/qsocks5socketengine.cpp:612
 msgid "Proxy authentication failed: %1"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:633
+#: src/network/socket/qsocks5socketengine.cpp:621
 msgid "SOCKS version 5 protocol error"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:652
+#: src/network/socket/qsocks5socketengine.cpp:640
 msgid "General SOCKSv5 server failure"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:656
+#: src/network/socket/qsocks5socketengine.cpp:644
 msgid "Connection not allowed by SOCKSv5 server"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:672
+#: src/network/socket/qsocks5socketengine.cpp:660
 msgid "TTL expired"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:676
+#: src/network/socket/qsocks5socketengine.cpp:664
 msgid "SOCKSv5 command not supported"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:680
+#: src/network/socket/qsocks5socketengine.cpp:668
 msgid "Address type not supported"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:685
+#: src/network/socket/qsocks5socketengine.cpp:673
 msgid "Unknown SOCKSv5 proxy error code 0x%1"
 msgstr ""
 
-#: src/network/socket/qsocks5socketengine.cpp:1377
+#: src/network/socket/qsocks5socketengine.cpp:1365
 msgctxt "QSocks5SocketEngine"
 msgid "Network operation timed out"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:668
-#: src/network/access/qhttp.cpp:2599
+#: src/network/access/qhttpnetworkconnection.cpp:656
+#: src/network/access/qhttp.cpp:2587
 msgctxt "QHttp"
 msgid "Host %1 not found"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:671
+#: src/network/access/qhttpnetworkconnection.cpp:659
 msgctxt "QHttp"
 msgid "Connection refused"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:674
+#: src/network/access/qhttpnetworkconnection.cpp:662
 msgctxt "QHttp"
 msgid "Connection closed"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:677
+#: src/network/access/qhttpnetworkconnection.cpp:665
 msgctxt "QAbstractSocket"
 msgid "Socket operation timed out"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:680
+#: src/network/access/qhttpnetworkconnection.cpp:668
 msgctxt "QHttp"
 msgid "Proxy requires authentication"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:683
+#: src/network/access/qhttpnetworkconnection.cpp:671
 msgctxt "QHttp"
 msgid "Host requires authentication"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:686
+#: src/network/access/qhttpnetworkconnection.cpp:674
 msgctxt "QHttp"
 msgid "Data corrupted"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:689
+#: src/network/access/qhttpnetworkconnection.cpp:677
 msgctxt "QHttp"
 msgid "Unknown protocol specified"
 msgstr ""
 
-#: src/network/access/qhttpnetworkconnection.cpp:692
+#: src/network/access/qhttpnetworkconnection.cpp:680
 msgctxt "QHttp"
 msgid "SSL handshake failed"
 msgstr ""
 
-#: src/network/access/qnetworkaccessdebugpipebackend.cpp:182
+#: src/network/access/qnetworkaccessdebugpipebackend.cpp:170
 msgctxt "QNetworkAccessDebugPipeBackend"
 msgid "Write error writing to %1: %2"
 msgstr ""
 
-#: src/network/access/qnetworkaccessdebugpipebackend.cpp:242
+#: src/network/access/qnetworkaccessdebugpipebackend.cpp:230
 msgid "Socket error on %1: %2"
 msgstr ""
 
-#: src/network/access/qnetworkaccessdebugpipebackend.cpp:257
+#: src/network/access/qnetworkaccessdebugpipebackend.cpp:245
 msgid "Remote host closed the connection prematurely on %1"
 msgstr ""
 
-#: src/network/access/qnetworkaccessftpbackend.cpp:126
-#: src/network/access/qnetworkaccesshttpbackend.cpp:416
+#: src/network/access/qnetworkaccessftpbackend.cpp:114
+#: src/network/access/qnetworkaccesshttpbackend.cpp:404
 msgid "No suitable proxy found"
 msgstr ""
 
-#: src/network/access/qnetworkaccessftpbackend.cpp:140
+#: src/network/access/qnetworkaccessftpbackend.cpp:128
 msgid "Cannot open %1: is a directory"
 msgstr ""
 
-#: src/network/access/qnetworkaccessftpbackend.cpp:240
+#: src/network/access/qnetworkaccessftpbackend.cpp:228
 msgid "Logging in to %1 failed: authentication required"
 msgstr ""
 
-#: src/network/access/qnetworkaccessftpbackend.cpp:272
+#: src/network/access/qnetworkaccessftpbackend.cpp:260
 msgid "Error while downloading %1: %2"
 msgstr ""
 
-#: src/network/access/qnetworkaccessftpbackend.cpp:274
+#: src/network/access/qnetworkaccessftpbackend.cpp:262
 msgid "Error while uploading %1: %2"
 msgstr ""
 
-#: src/network/access/qnetworkreplydataimpl.cpp:74
+#: src/network/access/qnetworkreplydataimpl.cpp:62
 msgctxt "QNetworkAccessDataBackend"
 msgid "Invalid URI: %1"
 msgstr ""
 
-#: src/network/access/qnetworkaccesscachebackend.cpp:58
+#: src/network/access/qnetworkaccesscachebackend.cpp:46
 msgctxt "QNetworkAccessCacheBackend"
 msgid "Error opening %1"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:1554 src/network/access/qhttp.cpp:2370
+#: src/network/access/qhttp.cpp:1542 src/network/access/qhttp.cpp:2358
 msgctxt "QHttp"
 msgid "Unknown error"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:1806
+#: src/network/access/qhttp.cpp:1794
 msgid "Request aborted"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2381
+#: src/network/access/qhttp.cpp:2369
 msgctxt "QHttp"
 msgid "No server set to connect to"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2537
+#: src/network/access/qhttp.cpp:2525
 msgctxt "QHttp"
 msgid "Wrong content length"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2541
+#: src/network/access/qhttp.cpp:2529
 msgctxt "QHttp"
 msgid "Server closed connection unexpectedly"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2596
+#: src/network/access/qhttp.cpp:2584
 msgctxt "QHttp"
 msgid "Connection refused (or timed out)"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2619
+#: src/network/access/qhttp.cpp:2607
 msgctxt "QHttp"
 msgid "HTTP request failed"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2707
+#: src/network/access/qhttp.cpp:2695
 msgctxt "QHttp"
 msgid "Invalid HTTP response header"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2735
+#: src/network/access/qhttp.cpp:2723
 msgctxt "QHttp"
 msgid "Unknown authentication method"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2745
+#: src/network/access/qhttp.cpp:2733
 msgctxt "QHttp"
 msgid "Proxy authentication required"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2749
+#: src/network/access/qhttp.cpp:2737
 msgctxt "QHttp"
 msgid "Authentication required"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2832 src/network/access/qhttp.cpp:2880
+#: src/network/access/qhttp.cpp:2820 src/network/access/qhttp.cpp:2868
 msgctxt "QHttp"
 msgid "Invalid HTTP chunked body"
 msgstr ""
 
-#: src/network/access/qhttp.cpp:2918
+#: src/network/access/qhttp.cpp:2906
 msgctxt "QHttp"
 msgid "Error writing response to device"
 msgstr ""
 
-#: src/network/access/qhttpthreaddelegate.cpp:419
-#: src/network/access/qhttpthreaddelegate.cpp:442
+#: src/network/access/qhttpthreaddelegate.cpp:407
+#: src/network/access/qhttpthreaddelegate.cpp:430
 msgctxt "QNetworkReply"
 msgid "Error downloading %1 - server replied: %2"
 msgstr ""
 
-#: src/network/access/qnetworkreplyimpl.cpp:80
+#: src/network/access/qnetworkreplyimpl.cpp:68
 msgctxt "QNetworkReply"
 msgid "Protocol \"%1\" is unknown"
 msgstr ""
 
-#: src/network/access/qnetworkreplyimpl.cpp:106
-#: src/network/access/qnetworkreplyimpl.cpp:297
+#: src/network/access/qnetworkreplyimpl.cpp:94
+#: src/network/access/qnetworkreplyimpl.cpp:285
 msgctxt "QNetworkReply"
 msgid "Network session error."
 msgstr ""
 
-#: src/network/access/qnetworkreplyimpl.cpp:113
+#: src/network/access/qnetworkreplyimpl.cpp:101
 msgctxt "QNetworkReply"
 msgid "backend start error."
 msgstr ""
 
-#: src/network/access/qnetworkreplyimpl.cpp:760
+#: src/network/access/qnetworkreplyimpl.cpp:748
 msgid "Temporary network failure."
 msgstr ""
 
-#: src/network/access/qnetworkreplyimpl.cpp:875
-#: src/network/access/qnetworkreplyimpl.cpp:905
+#: src/network/access/qnetworkreplyimpl.cpp:863
+#: src/network/access/qnetworkreplyimpl.cpp:893
 msgid "Operation canceled"
 msgstr ""
 
-#: src/network/access/qnetworkreplyimpl.cpp:1100
+#: src/network/access/qnetworkreplyimpl.cpp:1088
 msgctxt "QNetworkAccessManager"
 msgid "Network access is disabled."
 msgstr ""
 
-#: src/network/access/qftp.cpp:867
+#: src/network/access/qftp.cpp:855
 msgid "Not connected"
 msgstr ""
 
-#: src/network/access/qftp.cpp:946
+#: src/network/access/qftp.cpp:934
 msgid "Host %1 not found"
 msgstr ""
 
-#: src/network/access/qftp.cpp:950
+#: src/network/access/qftp.cpp:938
 msgid "Connection refused to host %1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:954
+#: src/network/access/qftp.cpp:942
 msgid "Connection timed out to host %1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:1058
+#: src/network/access/qftp.cpp:1046
 msgid "Connected to host %1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:1266
+#: src/network/access/qftp.cpp:1254
 msgid "Connection refused for data connection"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2340
+#: src/network/access/qftp.cpp:2328
 msgctxt "QFtp"
 msgid ""
 "Connecting to host failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2344
+#: src/network/access/qftp.cpp:2332
 msgctxt "QFtp"
 msgid ""
 "Login failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2348
+#: src/network/access/qftp.cpp:2336
 msgctxt "QFtp"
 msgid ""
 "Listing directory failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2352
+#: src/network/access/qftp.cpp:2340
 msgctxt "QFtp"
 msgid ""
 "Changing directory failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2356
+#: src/network/access/qftp.cpp:2344
 msgctxt "QFtp"
 msgid ""
 "Downloading file failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2360
+#: src/network/access/qftp.cpp:2348
 msgctxt "QFtp"
 msgid ""
 "Uploading file failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2364
+#: src/network/access/qftp.cpp:2352
 msgctxt "QFtp"
 msgid ""
 "Removing file failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2368
+#: src/network/access/qftp.cpp:2356
 msgctxt "QFtp"
 msgid ""
 "Creating directory failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2372
+#: src/network/access/qftp.cpp:2360
 msgctxt "QFtp"
 msgid ""
 "Removing directory failed:\n"
 "%1"
 msgstr ""
 
-#: src/network/access/qftp.cpp:2400
+#: src/network/access/qftp.cpp:2388
 msgctxt "QFtp"
 msgid "Connection closed"
 msgstr ""
 
-#: src/network/access/qnetworkaccessfilebackend.cpp:99
-#: src/network/access/qnetworkreplyfileimpl.cpp:66
+#: src/network/access/qnetworkaccessfilebackend.cpp:87
+#: src/network/access/qnetworkreplyfileimpl.cpp:54
 msgctxt "QNetworkAccessFileBackend"
 msgid "Request for opening non-local file %1"
 msgstr ""
 
-#: src/network/access/qnetworkaccessfilebackend.cpp:143
-#: src/network/access/qnetworkreplyfileimpl.cpp:101
+#: src/network/access/qnetworkaccessfilebackend.cpp:131
+#: src/network/access/qnetworkreplyfileimpl.cpp:89
 msgctxt "QNetworkAccessFileBackend"
 msgid "Error opening %1: %2"
 msgstr ""
 
-#: src/network/access/qnetworkaccessfilebackend.cpp:181
+#: src/network/access/qnetworkaccessfilebackend.cpp:169
 msgctxt "QNetworkAccessFileBackend"
 msgid "Write error writing to %1: %2"
 msgstr ""
 
-#: src/network/access/qnetworkaccessfilebackend.cpp:223
-#: src/network/access/qnetworkreplyfileimpl.cpp:88
+#: src/network/access/qnetworkaccessfilebackend.cpp:211
+#: src/network/access/qnetworkreplyfileimpl.cpp:76
 msgctxt "QNetworkAccessFileBackend"
 msgid "Cannot open %1: Path is a directory"
 msgstr ""
 
-#: src/network/access/qnetworkaccessfilebackend.cpp:244
+#: src/network/access/qnetworkaccessfilebackend.cpp:232
 msgctxt "QNetworkAccessFileBackend"
 msgid "Read error reading from %1: %2"
 msgstr ""
 
-#: src/plugins/accessible/widgets/simplewidgets.cpp:112
-#: src/plugins/accessible/widgets/simplewidgets.cpp:257
+#: src/plugins/accessible/widgets/simplewidgets.cpp:100
+#: src/plugins/accessible/widgets/simplewidgets.cpp:245
 msgid "Uncheck"
 msgstr ""
 
-#: src/plugins/accessible/widgets/simplewidgets.cpp:115
-#: src/plugins/accessible/widgets/simplewidgets.cpp:120
-#: src/plugins/accessible/widgets/simplewidgets.cpp:259
+#: src/plugins/accessible/widgets/simplewidgets.cpp:103
+#: src/plugins/accessible/widgets/simplewidgets.cpp:108
+#: src/plugins/accessible/widgets/simplewidgets.cpp:247
 msgid "Check"
 msgstr ""
 
-#: src/plugins/accessible/widgets/simplewidgets.cpp:116
-#: src/plugins/accessible/widgets/simplewidgets.cpp:726
+#: src/plugins/accessible/widgets/simplewidgets.cpp:104
+#: src/plugins/accessible/widgets/simplewidgets.cpp:714
 msgid "Toggle"
 msgstr ""
 
-#: src/plugins/accessible/widgets/simplewidgets.cpp:262
-#: src/plugins/accessible/widgets/simplewidgets.cpp:421
-#: src/plugins/accessible/widgets/simplewidgets.cpp:427
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1611
+#: src/plugins/accessible/widgets/simplewidgets.cpp:250
+#: src/plugins/accessible/widgets/simplewidgets.cpp:409
+#: src/plugins/accessible/widgets/simplewidgets.cpp:415
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1599
 msgid "Press"
 msgstr ""
 
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:152
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:377
-#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:430
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:140
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:365
+#: src/plugins/accessible/widgets/qaccessiblemenu.cpp:418
 msgid "Execute"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:140
-#: src/plugins/accessible/widgets/rangecontrols.cpp:403
+#: src/plugins/accessible/widgets/rangecontrols.cpp:128
+#: src/plugins/accessible/widgets/rangecontrols.cpp:391
 msgid "More"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:142
-#: src/plugins/accessible/widgets/rangecontrols.cpp:405
+#: src/plugins/accessible/widgets/rangecontrols.cpp:130
+#: src/plugins/accessible/widgets/rangecontrols.cpp:393
 msgid "Less"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:542
+#: src/plugins/accessible/widgets/rangecontrols.cpp:530
 msgid "Line up"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:546
-#: src/plugins/accessible/widgets/rangecontrols.cpp:699
+#: src/plugins/accessible/widgets/rangecontrols.cpp:534
+#: src/plugins/accessible/widgets/rangecontrols.cpp:687
 msgid "Position"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:550
+#: src/plugins/accessible/widgets/rangecontrols.cpp:538
 msgid "Line down"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:924
+#: src/plugins/accessible/widgets/rangecontrols.cpp:912
 msgid "QDial"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:926
+#: src/plugins/accessible/widgets/rangecontrols.cpp:914
 msgid "SpeedoMeter"
 msgstr ""
 
-#: src/plugins/accessible/widgets/rangecontrols.cpp:928
+#: src/plugins/accessible/widgets/rangecontrols.cpp:916
 msgid "SliderHandle"
 msgstr ""
 
-#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1323
+#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1311
 msgid "Dock"
 msgstr ""
 
-#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1324
+#: src/plugins/accessible/widgets/qaccessiblewidgets.cpp:1312
 msgid "Float"
 msgstr ""
 
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1507
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1495
 msgid "Scroll Left"
 msgstr ""
 
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1507
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1495
 msgid "Scroll Right"
 msgstr ""
 
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1616
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1604
 msgid "Close the tab"
 msgstr ""
 
-#: src/plugins/accessible/widgets/complexwidgets.cpp:1619
+#: src/plugins/accessible/widgets/complexwidgets.cpp:1607
 msgid "Activate the tab"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:130
+#: src/plugins/imageformats/tga/qtgafile.cpp:118
 msgid "Could not read image data"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:135
+#: src/plugins/imageformats/tga/qtgafile.cpp:123
 msgid "Sequential device (eg socket) for image read not supported"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:140
+#: src/plugins/imageformats/tga/qtgafile.cpp:128
 msgid "Seek file/device for image read failed"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:146
+#: src/plugins/imageformats/tga/qtgafile.cpp:134
 msgid "Image mHeader read failed"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:153
+#: src/plugins/imageformats/tga/qtgafile.cpp:141
 msgid "Image type not supported"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:161
+#: src/plugins/imageformats/tga/qtgafile.cpp:149
 msgid "Image depth not valid"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:166
+#: src/plugins/imageformats/tga/qtgafile.cpp:154
 msgid "Could not seek to image read footer"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:174
+#: src/plugins/imageformats/tga/qtgafile.cpp:162
 msgid "Could not read footer"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:178
+#: src/plugins/imageformats/tga/qtgafile.cpp:166
 msgid "Image type (non-TrueVision 2.0) not supported"
 msgstr ""
 
-#: src/plugins/imageformats/tga/qtgafile.cpp:182
+#: src/plugins/imageformats/tga/qtgafile.cpp:170
 msgid "Could not reset to start position"
 msgstr ""
 
-#: src/plugins/bearer/qnetworksession_impl.cpp:246
+#: src/plugins/bearer/qnetworksession_impl.cpp:234
 msgid "Unknown session error."
 msgstr ""
 
-#: src/plugins/bearer/qnetworksession_impl.cpp:248
+#: src/plugins/bearer/qnetworksession_impl.cpp:236
 msgid "The session was aborted by the user or system."
 msgstr ""
 
-#: src/plugins/bearer/qnetworksession_impl.cpp:250
+#: src/plugins/bearer/qnetworksession_impl.cpp:238
 msgid "The requested operation is not supported by the system."
 msgstr ""
 
-#: src/plugins/bearer/qnetworksession_impl.cpp:252
+#: src/plugins/bearer/qnetworksession_impl.cpp:240
 msgid "The specified configuration cannot be used."
 msgstr ""
 
-#: src/plugins/bearer/qnetworksession_impl.cpp:254
+#: src/plugins/bearer/qnetworksession_impl.cpp:242
 msgid "Roaming was aborted or is not possible."
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:196
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:184
 msgctxt "QPSQLResult"
 msgid "Unable to create query"
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:572
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:560
 msgctxt "QPSQLResult"
 msgid "Unable to prepare statement"
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:836
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1798
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1176
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:824
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1786
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1164
 msgid "Unable to connect"
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:885
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:873
 msgid "Could not begin transaction"
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:913
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:901
 msgid "Could not commit transaction"
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:930
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:918
 msgid "Could not rollback transaction"
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1251
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1239
 msgid "Unable to subscribe"
 msgstr ""
 
-#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1283
+#: src/plugins/sqldrivers/psql/qsql_psql.cpp:1271
 msgid "Unable to unsubscribe"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:899
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1238
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:887
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1226
 msgctxt "QODBCResult"
 msgid ""
 "QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement "
 "attribute. Please check your ODBC driver configuration"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:909
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1530
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:897
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1518
 msgctxt "QODBCResult"
 msgid "Unable to execute statement"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:963
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:951
 msgctxt "QODBCResult"
 msgid "Unable to fetch"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:985
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:973
 msgctxt "QODBCResult"
 msgid "Unable to fetch next"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1007
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:995
 msgctxt "QODBCResult"
 msgid "Unable to fetch first"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1026
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1014
 msgctxt "QODBCResult"
 msgid "Unable to fetch previous"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1057
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1634
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1045
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1622
 msgctxt "QODBCResult"
 msgid "Unable to fetch last"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1249
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1237
 msgctxt "QODBCResult"
 msgid "Unable to prepare statement"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1522
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1510
 msgctxt "QODBCResult"
 msgid "Unable to bind variable"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1804
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:1792
 msgid "Unable to connect - Driver doesn't support all functionality required"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2077
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2065
 msgid "Unable to disable autocommit"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2094
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1330
-#: src/sql/drivers/qsql_sqlite.cpp:645
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2082
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1318
+#: src/sql/drivers/qsql_sqlite.cpp:633
 msgid "Unable to commit transaction"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2111
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1347
-#: src/sql/drivers/qsql_sqlite.cpp:660
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2099
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1335
+#: src/sql/drivers/qsql_sqlite.cpp:648
 msgid "Unable to rollback transaction"
 msgstr ""
 
-#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2126
+#: src/plugins/sqldrivers/odbc/qsql_odbc.cpp:2114
 msgid "Unable to enable autocommit"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:457
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:484
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:445
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:472
 msgctxt "QMYSQLResult"
 msgid "Unable to fetch data"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:636
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:624
 msgctxt "QMYSQLResult"
 msgid "Unable to execute query"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:642
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:630
 msgctxt "QMYSQLResult"
 msgid "Unable to store result"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:734
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:722
 msgctxt "QMYSQLResult"
 msgid "Unable to execute next query"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:744
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:732
 msgctxt "QMYSQLResult"
 msgid "Unable to store next result"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:811
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:820
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:799
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:808
 msgctxt "QMYSQLResult"
 msgid "Unable to prepare statement"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:852
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:840
 msgctxt "QMYSQLResult"
 msgid "Unable to reset statement"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:943
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:931
 msgctxt "QMYSQLResult"
 msgid "Unable to bind value"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:954
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:942
 msgctxt "QMYSQLResult"
 msgid "Unable to execute statement"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:968
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:989
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:956
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:977
 msgctxt "QMYSQLResult"
 msgid "Unable to bind outvalues"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:977
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:965
 msgctxt "QMYSQLResult"
 msgid "Unable to store statement results"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1165
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1153
 msgid "Unable to open database '"
 msgstr ""
 
-#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1313
-#: src/sql/drivers/qsql_sqlite.cpp:630
+#: src/plugins/sqldrivers/mysql/qsql_mysql.cpp:1301
+#: src/sql/drivers/qsql_sqlite.cpp:618
 msgid "Unable to begin transaction"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptedit.cpp:403
-#: src/scripttools/debugging/qscriptdebugger.cpp:1780
+#: src/scripttools/debugging/qscriptedit.cpp:391
+#: src/scripttools/debugging/qscriptdebugger.cpp:1768
 msgid "Toggle Breakpoint"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptedit.cpp:405
+#: src/scripttools/debugging/qscriptedit.cpp:393
 msgid "Disable Breakpoint"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptedit.cpp:406
+#: src/scripttools/debugging/qscriptedit.cpp:394
 msgid "Enable Breakpoint"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptedit.cpp:410
+#: src/scripttools/debugging/qscriptedit.cpp:398
 msgid "Breakpoint Condition:"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:285
+#: src/scripttools/debugging/qscriptbreakpointswidget.cpp:273
 msgid "New"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:153
+#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:141
 msgctxt "QScriptDebuggerStackModel"
 msgid "Level"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:155
+#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:143
 msgctxt "QScriptDebuggerStackModel"
 msgid "Name"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:157
+#: src/scripttools/debugging/qscriptdebuggerstackmodel.cpp:145
 msgctxt "QScriptDebuggerStackModel"
 msgid "Location"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:888
+#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:876
 msgctxt "QScriptDebuggerLocalsModel"
 msgid "Name"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:890
+#: src/scripttools/debugging/qscriptdebuggerlocalsmodel.cpp:878
 msgctxt "QScriptDebuggerLocalsModel"
 msgid "Value"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:447
+#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:435
 msgctxt "QScriptBreakpointsModel"
 msgid "ID"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:449
+#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:437
 msgctxt "QScriptBreakpointsModel"
 msgid "Location"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:451
+#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:439
 msgctxt "QScriptBreakpointsModel"
 msgid "Condition"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:453
+#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:441
 msgctxt "QScriptBreakpointsModel"
 msgid "Ignore-count"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:455
+#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:443
 msgctxt "QScriptBreakpointsModel"
 msgid "Single-shot"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:457
+#: src/scripttools/debugging/qscriptbreakpointsmodel.cpp:445
 msgctxt "QScriptBreakpointsModel"
 msgid "Hit-count"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:872
-#: src/scripttools/debugging/qscriptdebugger.cpp:1883
+#: src/scripttools/debugging/qscriptdebugger.cpp:860
+#: src/scripttools/debugging/qscriptdebugger.cpp:1871
 msgid "Go to Line"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:873
+#: src/scripttools/debugging/qscriptdebugger.cpp:861
 msgid "Line:"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1662
+#: src/scripttools/debugging/qscriptdebugger.cpp:1650
 msgid "Interrupt"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1664
+#: src/scripttools/debugging/qscriptdebugger.cpp:1652
 msgid "Shift+F5"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1681
+#: src/scripttools/debugging/qscriptdebugger.cpp:1669
 msgid "F5"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1696
+#: src/scripttools/debugging/qscriptdebugger.cpp:1684
 msgid "Step Into"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1698
+#: src/scripttools/debugging/qscriptdebugger.cpp:1686
 msgid "F11"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1713
+#: src/scripttools/debugging/qscriptdebugger.cpp:1701
 msgid "Step Over"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1715
+#: src/scripttools/debugging/qscriptdebugger.cpp:1703
 msgid "F10"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1730
+#: src/scripttools/debugging/qscriptdebugger.cpp:1718
 msgid "Step Out"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1732
+#: src/scripttools/debugging/qscriptdebugger.cpp:1720
 msgid "Shift+F11"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1747
+#: src/scripttools/debugging/qscriptdebugger.cpp:1735
 msgid "Run to Cursor"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1749
+#: src/scripttools/debugging/qscriptdebugger.cpp:1737
 msgid "Ctrl+F10"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1765
+#: src/scripttools/debugging/qscriptdebugger.cpp:1753
 msgid "Run to New Script"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1781
+#: src/scripttools/debugging/qscriptdebugger.cpp:1769
 msgid "F9"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1795
+#: src/scripttools/debugging/qscriptdebugger.cpp:1783
 msgid "Clear Debug Output"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1808
+#: src/scripttools/debugging/qscriptdebugger.cpp:1796
 msgid "Clear Error Log"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1821
+#: src/scripttools/debugging/qscriptdebugger.cpp:1809
 msgid "Clear Console"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1835
+#: src/scripttools/debugging/qscriptdebugger.cpp:1823
 msgid "&Find in Script..."
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1836
+#: src/scripttools/debugging/qscriptdebugger.cpp:1824
 msgid "Ctrl+F"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1853
+#: src/scripttools/debugging/qscriptdebugger.cpp:1841
 msgid "Find &Next"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1855
+#: src/scripttools/debugging/qscriptdebugger.cpp:1843
 msgid "F3"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1868
+#: src/scripttools/debugging/qscriptdebugger.cpp:1856
 msgid "Find &Previous"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1870
+#: src/scripttools/debugging/qscriptdebugger.cpp:1858
 msgid "Shift+F3"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1884
+#: src/scripttools/debugging/qscriptdebugger.cpp:1872
 msgid "Ctrl+G"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebugger.cpp:1895
+#: src/scripttools/debugging/qscriptdebugger.cpp:1883
 msgid "Debug"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:497
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:485
 msgid "Loaded Scripts"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:503
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:491
 msgid "Breakpoints"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:509
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:497
 msgid "Stack"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:515
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:503
 msgid "Locals"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:521
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:509
 msgid "Console"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:527
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:515
 msgid "Debug Output"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:533
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:521
 msgid "Error Log"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:545
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:533
 msgid "Search"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:552
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:540
 msgid "View"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptenginedebugger.cpp:570
+#: src/scripttools/debugging/qscriptenginedebugger.cpp:558
 msgid "Katie Script Debugger"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:141
+#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:129
 msgid "Previous"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:148
+#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:136
 msgid "Next"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:153
+#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:141
 msgid "Case Sensitive"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:156
+#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:144
 msgid "Whole words"
 msgstr ""
 
-#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:165
+#: src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp:153
 msgid ""
 "<img src=\":/qt/scripttools/debugging/images/wrap.png\">&nbsp;Search wrapped"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:223 src/sql/drivers/qsql_sqlite.cpp:299
-#: src/sql/drivers/qsql_sqlite.cpp:308
+#: src/sql/drivers/qsql_sqlite.cpp:211 src/sql/drivers/qsql_sqlite.cpp:287
+#: src/sql/drivers/qsql_sqlite.cpp:296
 msgctxt "QSQLiteResult"
 msgid "Unable to fetch row"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:224
+#: src/sql/drivers/qsql_sqlite.cpp:212
 msgctxt "QSQLiteResult"
 msgid "No query"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:371
+#: src/sql/drivers/qsql_sqlite.cpp:359
 msgctxt "QSQLiteResult"
 msgid "Unable to execute statement"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:376
+#: src/sql/drivers/qsql_sqlite.cpp:364
 msgctxt "QSQLiteResult"
 msgid "Unable to execute multiple statements at a time"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:396
+#: src/sql/drivers/qsql_sqlite.cpp:384
 msgctxt "QSQLiteResult"
 msgid "Unable to reset statement"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:448
+#: src/sql/drivers/qsql_sqlite.cpp:436
 msgctxt "QSQLiteResult"
 msgid "Unable to bind parameters"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:455
+#: src/sql/drivers/qsql_sqlite.cpp:443
 msgctxt "QSQLiteResult"
 msgid "Parameter count mismatch"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:589
+#: src/sql/drivers/qsql_sqlite.cpp:577
 msgid "Error opening database"
 msgstr ""
 
-#: src/sql/drivers/qsql_sqlite.cpp:611
+#: src/sql/drivers/qsql_sqlite.cpp:599
 msgid "Error closing database"
 msgstr ""
 
-#: src/uitools/formbuilderextra.cpp:361
+#: src/uitools/formbuilderextra.cpp:349
 msgctxt "FormBuilder"
 msgid "Invalid stretch value for '%1': '%2'"
 msgstr ""
 
-#: src/uitools/formbuilderextra.cpp:423
+#: src/uitools/formbuilderextra.cpp:411
 msgctxt "FormBuilder"
 msgid "Invalid minimum size for '%1': '%2'"
 msgstr ""
 
-#: src/uitools/properties.cpp:98
+#: src/uitools/properties.cpp:86
 msgctxt "QFormBuilder"
 msgid "The set-type property %1 could not be read."
 msgstr ""
 
-#: src/uitools/properties.cpp:121
+#: src/uitools/properties.cpp:109
 msgctxt "QFormBuilder"
 msgid "The enumeration-type property %1 could not be read."
 msgstr ""
 
-#: src/uitools/properties.cpp:311
+#: src/uitools/properties.cpp:299
 msgctxt "QFormBuilder"
 msgid "Reading properties of the type %1 is not supported yet."
 msgstr ""
 
-#: src/uitools/properties.cpp:577
+#: src/uitools/properties.cpp:565
 msgctxt "QFormBuilder"
 msgid "The property %1 could not be written. The type %2 is not supported yet."
 msgstr ""
 
-#: src/uitools/formbuilder.cpp:162
+#: src/uitools/formbuilder.cpp:150
 msgctxt "QFormBuilder"
 msgid "An empty class name was passed on to %1 (object name: '%2')."
 msgstr ""
 
-#: src/uitools/formbuilder.cpp:216
+#: src/uitools/formbuilder.cpp:204
 msgctxt "QFormBuilder"
 msgid ""
 "QFormBuilder was unable to create a custom widget of the class '%1'; "
 "defaulting to base class '%2'."
 msgstr ""
 
-#: src/uitools/formbuilder.cpp:222
+#: src/uitools/formbuilder.cpp:210
 msgctxt "QFormBuilder"
 msgid "QFormBuilder was unable to create a widget of the class '%1'."
 msgstr ""
 
-#: src/uitools/formbuilder.cpp:263
+#: src/uitools/formbuilder.cpp:251
 msgctxt "QFormBuilder"
 msgid "The layout type `%1' is not supported."
 msgstr ""
 
-#: src/uitools/formscriptrunner.cpp:80
+#: src/uitools/formscriptrunner.cpp:68
 msgid "Exception at line %1: %2"
 msgstr ""
 
-#: src/uitools/formscriptrunner.cpp:166
+#: src/uitools/formscriptrunner.cpp:154
 msgid ""
 "An error occurred while running the script for %1: %2\n"
 "Script: %3"
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:195
+#: src/uitools/abstractformbuilder.cpp:183
 msgctxt "QAbstractFormBuilder"
 msgid "Unexpected element <%1>"
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:200
+#: src/uitools/abstractformbuilder.cpp:188
 msgctxt "QAbstractFormBuilder"
 msgid ""
 "An error has occurred while reading the UI file at line %1, column %2: %3"
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:206
+#: src/uitools/abstractformbuilder.cpp:194
 msgctxt "QAbstractFormBuilder"
 msgid "Invalid UI file: The root element <ui> is missing."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:310
+#: src/uitools/abstractformbuilder.cpp:298
 msgctxt "QAbstractFormBuilder"
 msgid "The creation of a widget of the class '%1' failed."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:606
+#: src/uitools/abstractformbuilder.cpp:594
 msgctxt "QAbstractFormBuilder"
 msgid "Attempt to add child that is not of class QWizardPage to QWizard."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:668
+#: src/uitools/abstractformbuilder.cpp:656
 msgctxt "QAbstractFormBuilder"
 msgid ""
 "Attempt to add a layout to a widget '%1' (%2) which already has a layout of "
@@ -4809,298 +4764,298 @@ msgid ""
 "This indicates an inconsistency in the ui-file."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:878
+#: src/uitools/abstractformbuilder.cpp:866
 msgctxt "QAbstractFormBuilder"
 msgid "Empty widget item in %1 '%2'."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:1624
+#: src/uitools/abstractformbuilder.cpp:1612
 msgctxt "QAbstractFormBuilder"
 msgid "Flags property are not supported yet."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:1705
+#: src/uitools/abstractformbuilder.cpp:1693
 msgctxt "QAbstractFormBuilder"
 msgid "While applying tab stops: The widget '%1' could not be found."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:2451
+#: src/uitools/abstractformbuilder.cpp:2439
 msgctxt "QAbstractFormBuilder"
 msgid "Invalid QButtonGroup reference '%1' referenced by '%2'."
 msgstr ""
 
-#: src/uitools/abstractformbuilder.cpp:2962
+#: src/uitools/abstractformbuilder.cpp:2950
 msgctxt "QAbstractFormBuilder"
 msgid "This version of the uitools library is linked without script support."
 msgstr ""
 
-#: src/uitools/properties_p.h:121
+#: src/uitools/properties_p.h:109
 msgctxt "QFormBuilder"
 msgid ""
 "The enumeration-value '%1' is invalid. The default value '%2' will be used "
 "instead."
 msgstr ""
 
-#: src/uitools/properties_p.h:135
+#: src/uitools/properties_p.h:123
 msgctxt "QFormBuilder"
 msgid "The flag-value '%1' is invalid. Zero will be used instead."
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:48
+#: src/xml/sax/qxml.cpp:36
 msgctxt "QXml"
 msgid "no error occurred"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:49
+#: src/xml/sax/qxml.cpp:37
 msgctxt "QXml"
 msgid "error triggered by consumer"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:50
+#: src/xml/sax/qxml.cpp:38
 msgctxt "QXml"
 msgid "unexpected end of file"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:51
+#: src/xml/sax/qxml.cpp:39
 msgctxt "QXml"
 msgid "more than one document type definition"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:52
+#: src/xml/sax/qxml.cpp:40
 msgctxt "QXml"
 msgid "error occurred while parsing element"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:53
+#: src/xml/sax/qxml.cpp:41
 msgctxt "QXml"
 msgid "tag mismatch"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:54
+#: src/xml/sax/qxml.cpp:42
 msgctxt "QXml"
 msgid "error occurred while parsing content"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:55
+#: src/xml/sax/qxml.cpp:43
 msgctxt "QXml"
 msgid "unexpected character"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:56
+#: src/xml/sax/qxml.cpp:44
 msgctxt "QXml"
 msgid "invalid name for processing instruction"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:57
+#: src/xml/sax/qxml.cpp:45
 msgctxt "QXml"
 msgid "version expected while reading the XML declaration"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:58
+#: src/xml/sax/qxml.cpp:46
 msgctxt "QXml"
 msgid "wrong value for standalone declaration"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:59
+#: src/xml/sax/qxml.cpp:47
 msgctxt "QXml"
 msgid ""
 "encoding declaration or standalone declaration expected while reading the "
 "XML declaration"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:60
+#: src/xml/sax/qxml.cpp:48
 msgctxt "QXml"
 msgid "standalone declaration expected while reading the XML declaration"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:61
+#: src/xml/sax/qxml.cpp:49
 msgctxt "QXml"
 msgid "error occurred while parsing document type definition"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:62
+#: src/xml/sax/qxml.cpp:50
 msgctxt "QXml"
 msgid "letter is expected"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:63
+#: src/xml/sax/qxml.cpp:51
 msgctxt "QXml"
 msgid "error occurred while parsing comment"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:64
+#: src/xml/sax/qxml.cpp:52
 msgctxt "QXml"
 msgid "error occurred while parsing reference"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:65
+#: src/xml/sax/qxml.cpp:53
 msgctxt "QXml"
 msgid "internal general entity reference not allowed in DTD"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:66
+#: src/xml/sax/qxml.cpp:54
 msgctxt "QXml"
 msgid "external parsed general entity reference not allowed in attribute value"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:67
+#: src/xml/sax/qxml.cpp:55
 msgctxt "QXml"
 msgid "external parsed general entity reference not allowed in DTD"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:68
+#: src/xml/sax/qxml.cpp:56
 msgctxt "QXml"
 msgid "unparsed entity reference in wrong context"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:69
+#: src/xml/sax/qxml.cpp:57
 msgctxt "QXml"
 msgid "recursive entities"
 msgstr ""
 
-#: src/xml/sax/qxml.cpp:70
+#: src/xml/sax/qxml.cpp:58
 msgctxt "QXml"
 msgid "error in the text declaration of an external entity"
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:755
+#: src/xml/kernel/qxmlstream_p.h:743
 msgid "Recursive entity detected."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1056 src/xml/kernel/qxmlstream.cpp:1393
+#: src/xml/kernel/qxmlstream_p.h:1044 src/xml/kernel/qxmlstream.cpp:1381
 msgid "Encountered incorrectly encoded content."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1268
+#: src/xml/kernel/qxmlstream_p.h:1256
 msgid "Start tag expected."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1459
+#: src/xml/kernel/qxmlstream_p.h:1447
 msgid "NDATA in parameter entity declaration."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1490
+#: src/xml/kernel/qxmlstream_p.h:1478
 msgid "XML declaration not at start of document."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1493
+#: src/xml/kernel/qxmlstream_p.h:1481
 msgid "%1 is an invalid processing instruction name."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1504
+#: src/xml/kernel/qxmlstream_p.h:1492
 msgid "Invalid processing instruction name."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1618
+#: src/xml/kernel/qxmlstream_p.h:1606
 msgid "%1 is an invalid PUBLIC identifier."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1668 src/xml/kernel/qxmlstream_p.h:1721
-#: src/xml/kernel/qxmlstream.cpp:1456 src/xml/kernel/qxmlstream.cpp:1468
+#: src/xml/kernel/qxmlstream_p.h:1656 src/xml/kernel/qxmlstream_p.h:1709
+#: src/xml/kernel/qxmlstream.cpp:1444 src/xml/kernel/qxmlstream.cpp:1456
 msgid "Illegal namespace declaration."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1736
+#: src/xml/kernel/qxmlstream_p.h:1724
 msgid "Invalid XML name."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1747 src/xml/kernel/qxmlstream.cpp:583
+#: src/xml/kernel/qxmlstream_p.h:1735 src/xml/kernel/qxmlstream.cpp:571
 msgid "Extra content at end of document."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1759
+#: src/xml/kernel/qxmlstream_p.h:1747
 msgid "Opening and ending tag mismatch."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1764 src/xml/kernel/qxmlstream_p.h:1825
-#: src/xml/kernel/qxmlstream_p.h:1865
+#: src/xml/kernel/qxmlstream_p.h:1752 src/xml/kernel/qxmlstream_p.h:1813
+#: src/xml/kernel/qxmlstream_p.h:1853
 msgid "Entity '%1' not declared."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1777
+#: src/xml/kernel/qxmlstream_p.h:1765
 msgid "Reference to unparsed entity '%1'."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1839
+#: src/xml/kernel/qxmlstream_p.h:1827
 msgid "Reference to external entity '%1' in attribute value."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream_p.h:1879
+#: src/xml/kernel/qxmlstream_p.h:1867
 msgid "Invalid character reference."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:816
+#: src/xml/kernel/qxmlstream.cpp:804
 msgid "Invalid entity value."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:924
+#: src/xml/kernel/qxmlstream.cpp:912
 msgid "Invalid XML character."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1183
+#: src/xml/kernel/qxmlstream.cpp:1171
 msgid "Sequence ']]>' not allowed in content."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1423
+#: src/xml/kernel/qxmlstream.cpp:1411
 msgid "Namespace prefix '%1' not declared"
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1500
+#: src/xml/kernel/qxmlstream.cpp:1488
 msgid "Attribute redefined."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1614
+#: src/xml/kernel/qxmlstream.cpp:1602
 msgid "Unexpected character '%1' in public id literal."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1642
+#: src/xml/kernel/qxmlstream.cpp:1630
 msgid "Invalid XML version string."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1644
+#: src/xml/kernel/qxmlstream.cpp:1632
 msgid "Unsupported XML version."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1665
+#: src/xml/kernel/qxmlstream.cpp:1653
 msgid "The standalone pseudo attribute must appear after the encoding."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1667
+#: src/xml/kernel/qxmlstream.cpp:1655
 msgid "%1 is an invalid encoding name."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1674
+#: src/xml/kernel/qxmlstream.cpp:1662
 msgid "Encoding %1 is unsupported"
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1690
+#: src/xml/kernel/qxmlstream.cpp:1678
 msgid "Standalone accepts only yes or no."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1692
+#: src/xml/kernel/qxmlstream.cpp:1680
 msgid "Invalid attribute in XML declaration."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1708
+#: src/xml/kernel/qxmlstream.cpp:1696
 msgid "Premature end of document."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1710
+#: src/xml/kernel/qxmlstream.cpp:1698
 msgid "Invalid document."
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1750
+#: src/xml/kernel/qxmlstream.cpp:1738
 msgid "Expected "
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1761
+#: src/xml/kernel/qxmlstream.cpp:1749
 msgid ", but got '"
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1765
+#: src/xml/kernel/qxmlstream.cpp:1753
 msgid "Unexpected '"
 msgstr ""
 
-#: src/xml/kernel/qxmlstream.cpp:1990
+#: src/xml/kernel/qxmlstream.cpp:1978
 msgid "Expected character data."
 msgstr ""
index ace74eb..76b077c 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-05 06:17+0200\n"
+"POT-Creation-Date: 2021-02-11 01:35+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,11 +17,11 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/tools/qtconfig/previewframe.cpp:75
+#: src/tools/qtconfig/previewframe.cpp:63
 msgid "Desktop settings will only take effect after an application restart."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:68
+#: src/tools/qtconfig/mainwindow.cpp:56
 msgctxt "MainWindow"
 msgid ""
 "<p><b><font size+=2>Appearance</font></b></p><hr><p>Use this tab to "
@@ -36,7 +36,7 @@ msgid ""
 "Window shows what the selected Style and colors look like."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:84
+#: src/tools/qtconfig/mainwindow.cpp:72
 msgctxt "MainWindow"
 msgid ""
 "<p><b><font size+=2>Fonts</font></b></p><hr><p>Use this tab to select the "
@@ -54,7 +54,7 @@ msgid ""
 "text)."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:103
+#: src/tools/qtconfig/mainwindow.cpp:91
 msgctxt "MainWindow"
 msgid ""
 "<p><b><font size+=2>Interface</font></b></p><hr><p>Use this tab to customize "
@@ -69,7 +69,7 @@ msgid ""
 "disable the Global Strut feature."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:118
+#: src/tools/qtconfig/mainwindow.cpp:106
 msgctxt "MainWindow"
 msgid ""
 "<p><b><font size+=2>Printer</font></b></p><hr><p>Use this tab to configure "
@@ -82,755 +82,755 @@ msgid ""
 "the X server font path is used."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:201
+#: src/tools/qtconfig/mainwindow.cpp:189
 msgid "Desktop Settings (Default)"
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:207
+#: src/tools/qtconfig/mainwindow.cpp:195
 msgid "Choose style and palette based on your desktop settings."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:222
+#: src/tools/qtconfig/mainwindow.cpp:210
 msgid "Unknown"
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:368
+#: src/tools/qtconfig/mainwindow.cpp:356
 msgid "No changes to be saved."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:372
+#: src/tools/qtconfig/mainwindow.cpp:360
 msgid "Saving changes..."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:457
+#: src/tools/qtconfig/mainwindow.cpp:445
 msgid "Saved changes."
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:723
+#: src/tools/qtconfig/mainwindow.cpp:711
 msgid "Select a Directory"
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:738
+#: src/tools/qtconfig/mainwindow.cpp:726
 msgid ""
 "<h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2015 The Qt Company Ltd."
 "<br/><br/>Copyright (C) 2016 Ivailo Monev"
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:743 src/tools/qtconfig/mainwindow.cpp:744
-#: src/tools/qtconfig/mainwindow.cpp:751
+#: src/tools/qtconfig/mainwindow.cpp:731 src/tools/qtconfig/mainwindow.cpp:732
+#: src/tools/qtconfig/mainwindow.cpp:739
 msgid "Katie Configuration"
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:770
+#: src/tools/qtconfig/mainwindow.cpp:758
 msgid "Save Changes"
 msgstr ""
 
-#: src/tools/qtconfig/mainwindow.cpp:771
+#: src/tools/qtconfig/mainwindow.cpp:759
 msgid "Save changes to settings?"
 msgstr ""
 
-#: src/tools/qtconfig/paletteeditoradvanced.cpp:46
-#: src/tools/qtconfig/paletteeditoradvanced.cpp:52
+#: src/tools/qtconfig/paletteeditoradvanced.cpp:34
+#: src/tools/qtconfig/paletteeditoradvanced.cpp:40
 msgid "Choose a color"
 msgstr ""
 
-#: src/tools/qtconfig/paletteeditoradvanced.cpp:47
+#: src/tools/qtconfig/paletteeditoradvanced.cpp:35
 msgid "Choose a color for the selected central color role."
 msgstr ""
 
-#: src/tools/qtconfig/paletteeditoradvanced.cpp:53
+#: src/tools/qtconfig/paletteeditoradvanced.cpp:41
 msgid "Choose a color for the selected effect color role."
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:63
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:51
 msgctxt "QtDBusViewer"
 msgid "Katie D-Bus Viewer"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:70
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:58
 msgid "Session Bus"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:71
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:59
 msgid "System Bus"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:73
-#: src/tools/designer/qdesigner_workbench.cpp:188
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:61
+#: src/tools/designer/qdesigner_workbench.cpp:176
 msgid "&File"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:74
-#: src/tools/designer/qdesigner_actions.cpp:177
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:62
+#: src/tools/designer/qdesigner_actions.cpp:165
 msgid "&Quit"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:77
-#: src/tools/designer/qdesigner_workbench.cpp:205
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:65
+#: src/tools/designer/qdesigner_workbench.cpp:193
 msgid "&Help"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:78
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:66
 msgid "&About"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewermain.cpp:82
+#: src/tools/qdbusviewer/qdbusviewermain.cpp:70
 msgid "About &Katie"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:75
+#: src/tools/qdbusviewer/qdbusviewer.cpp:63
 msgid "Search..."
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:86
+#: src/tools/qdbusviewer/qdbusviewer.cpp:74
 msgid "&Refresh"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:202
+#: src/tools/qdbusviewer/qdbusviewer.cpp:190
 msgid "Arguments"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:203
+#: src/tools/qdbusviewer/qdbusviewer.cpp:191
 msgid "Please enter the value of the property %1 (type %2)"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:211
+#: src/tools/qdbusviewer/qdbusviewer.cpp:199
 msgid "Unable to marshall"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:212
+#: src/tools/qdbusviewer/qdbusviewer.cpp:200
 msgid "Value conversion failed, unable to set property"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:249
+#: src/tools/qdbusviewer/qdbusviewer.cpp:237
 msgid "Unable to find method"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:250
+#: src/tools/qdbusviewer/qdbusviewer.cpp:238
 msgid "Unable to find method %1 on path %2 in interface %3"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:272
+#: src/tools/qdbusviewer/qdbusviewer.cpp:260
 msgid "Please enter parameters for the method \"%1\""
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:322
+#: src/tools/qdbusviewer/qdbusviewer.cpp:310
 msgid "&Connect"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:327
+#: src/tools/qdbusviewer/qdbusviewer.cpp:315
 msgid "&Call"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:332
+#: src/tools/qdbusviewer/qdbusviewer.cpp:320
 msgid "&Set value"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:334
+#: src/tools/qdbusviewer/qdbusviewer.cpp:322
 msgid "&Get value"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:367
+#: src/tools/qdbusviewer/qdbusviewer.cpp:355
 msgid "Unable to connect to service %1, path %2, interface %3, signal %4"
 msgstr ""
 
-#: src/tools/qdbusviewer/qdbusviewer.cpp:489
-#: src/tools/qdbusviewer/qdbusviewer.cpp:490
+#: src/tools/qdbusviewer/qdbusviewer.cpp:477
+#: src/tools/qdbusviewer/qdbusviewer.cpp:478
 msgid "D-Bus Viewer"
 msgstr ""
 
-#: src/tools/designer/versiondialog.cpp:158
+#: src/tools/designer/versiondialog.cpp:146
 msgid "<h3>%1</h3><br/><br/>Version %2"
 msgstr ""
 
-#: src/tools/designer/versiondialog.cpp:159
-#: src/tools/designer/mainwindow.cpp:127
+#: src/tools/designer/versiondialog.cpp:147
+#: src/tools/designer/mainwindow.cpp:115
 msgid "Katie Designer"
 msgstr ""
 
-#: src/tools/designer/versiondialog.cpp:160
+#: src/tools/designer/versiondialog.cpp:148
 msgid ""
 "<br/>Katie Designer is a graphical user interface designer for Qt "
 "applications.<br/>"
 msgstr ""
 
-#: src/tools/designer/versiondialog.cpp:162
+#: src/tools/designer/versiondialog.cpp:150
 msgid ""
 "%1<br/>Copyright (C) 2015 The Qt Company Ltd.<br/>Copyright (C) 2016 Ivailo "
 "Monev"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:143
+#: src/tools/designer/appfontdialog.cpp:131
 msgctxt "AppFontManager"
 msgid "'%1' is not a file."
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:147
+#: src/tools/designer/appfontdialog.cpp:135
 msgctxt "AppFontManager"
 msgid "The font file '%1' does not have read permissions."
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:155
+#: src/tools/designer/appfontdialog.cpp:143
 msgctxt "AppFontManager"
 msgid "The font file '%1' is already loaded."
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:162
+#: src/tools/designer/appfontdialog.cpp:150
 msgctxt "AppFontManager"
 msgid "The font file '%1' could not be loaded."
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:179
+#: src/tools/designer/appfontdialog.cpp:167
 msgctxt "AppFontManager"
 msgid "'%1' is not a valid font id."
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:190
+#: src/tools/designer/appfontdialog.cpp:178
 msgctxt "AppFontManager"
 msgid "There is no loaded font matching the id '%1'."
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:205
+#: src/tools/designer/appfontdialog.cpp:193
 msgctxt "AppFontManager"
 msgid "The font '%1' (%2) could not be unloaded."
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:231
+#: src/tools/designer/appfontdialog.cpp:219
 msgid "Fonts"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:289
+#: src/tools/designer/appfontdialog.cpp:277
 msgid "Add font files"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:294
+#: src/tools/designer/appfontdialog.cpp:282
 msgid "Remove current font file"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:298
+#: src/tools/designer/appfontdialog.cpp:286
 msgid "Remove all font files"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:317
+#: src/tools/designer/appfontdialog.cpp:305
 msgid "Add Font Files"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:318
+#: src/tools/designer/appfontdialog.cpp:306
 msgid "Font files (*.ttf)"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:331
+#: src/tools/designer/appfontdialog.cpp:319
 msgid "Error Adding Fonts"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:355
+#: src/tools/designer/appfontdialog.cpp:343
 msgid "Error Removing Fonts"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:377
+#: src/tools/designer/appfontdialog.cpp:365
 msgid "Remove Fonts"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:377
+#: src/tools/designer/appfontdialog.cpp:365
 msgid "Would you like to remove all fonts?"
 msgstr ""
 
-#: src/tools/designer/appfontdialog.cpp:410
+#: src/tools/designer/appfontdialog.cpp:398
 msgid "Additional Fonts"
 msgstr ""
 
-#: src/tools/designer/qdesigner_formwindow.cpp:209
+#: src/tools/designer/qdesigner_formwindow.cpp:197
 msgid "%1 - %2[*]"
 msgstr ""
 
-#: src/tools/designer/qdesigner_formwindow.cpp:219
-#: src/tools/designer/qdesigner_actions.cpp:824
-#: src/tools/designer/qdesigner_actions.cpp:864
+#: src/tools/designer/qdesigner_formwindow.cpp:207
+#: src/tools/designer/qdesigner_actions.cpp:812
+#: src/tools/designer/qdesigner_actions.cpp:852
 msgid "Save Form?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_formwindow.cpp:220
+#: src/tools/designer/qdesigner_formwindow.cpp:208
 msgid "Do you want to save the changes to this document before closing?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_formwindow.cpp:222
+#: src/tools/designer/qdesigner_formwindow.cpp:210
 msgid "If you don't save, your changes will be lost."
 msgstr ""
 
-#: src/tools/designer/newform.cpp:65
+#: src/tools/designer/newform.cpp:53
 msgid "Show this Dialog on Startup"
 msgstr ""
 
-#: src/tools/designer/newform.cpp:66
+#: src/tools/designer/newform.cpp:54
 msgctxt "NewForm"
 msgid "C&reate"
 msgstr ""
 
-#: src/tools/designer/newform.cpp:67
+#: src/tools/designer/newform.cpp:55
 msgctxt "NewForm"
 msgid "Recent"
 msgstr ""
 
-#: src/tools/designer/newform.cpp:70
+#: src/tools/designer/newform.cpp:58
 msgid "New Form"
 msgstr ""
 
-#: src/tools/designer/newform.cpp:99
+#: src/tools/designer/newform.cpp:87
 msgctxt "NewForm"
 msgid "&Close"
 msgstr ""
 
-#: src/tools/designer/newform.cpp:102
+#: src/tools/designer/newform.cpp:90
 msgctxt "NewForm"
 msgid "&Open..."
 msgstr ""
 
-#: src/tools/designer/newform.cpp:106
-#: src/tools/designer/qdesigner_actions.cpp:481
+#: src/tools/designer/newform.cpp:94
+#: src/tools/designer/qdesigner_actions.cpp:469
 msgid "&Recent Forms"
 msgstr ""
 
-#: src/tools/designer/newform.cpp:170
-#: src/tools/designer/qdesigner_actions.cpp:742
+#: src/tools/designer/newform.cpp:158
+#: src/tools/designer/qdesigner_actions.cpp:730
 msgid "Read error"
 msgstr ""
 
-#: src/tools/designer/newform.cpp:193
+#: src/tools/designer/newform.cpp:181
 msgid "A temporary form file could not be created in %1."
 msgstr ""
 
-#: src/tools/designer/newform.cpp:199
+#: src/tools/designer/newform.cpp:187
 msgid "The temporary form file %1 could not be written."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:117
+#: src/tools/designer/qdesigner_actions.cpp:105
 msgid "Saved %1."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:143
+#: src/tools/designer/qdesigner_actions.cpp:131
 msgid ""
 "%1 already exists.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:167
+#: src/tools/designer/qdesigner_actions.cpp:155
 msgid "Edit Widgets"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:168
+#: src/tools/designer/qdesigner_actions.cpp:156
 msgid "&New..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:169
+#: src/tools/designer/qdesigner_actions.cpp:157
 msgid "&Open..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:170
+#: src/tools/designer/qdesigner_actions.cpp:158
 msgid "&Save"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:171
+#: src/tools/designer/qdesigner_actions.cpp:159
 msgid "Save &As..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:172
+#: src/tools/designer/qdesigner_actions.cpp:160
 msgid "Save A&ll"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:173
+#: src/tools/designer/qdesigner_actions.cpp:161
 msgid "Save As &Template..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:174
-#: src/tools/designer/qdesigner_actions.cpp:1023
+#: src/tools/designer/qdesigner_actions.cpp:162
+#: src/tools/designer/qdesigner_actions.cpp:1011
 msgid "&Close"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:175
+#: src/tools/designer/qdesigner_actions.cpp:163
 msgid "Save &Image..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:176
+#: src/tools/designer/qdesigner_actions.cpp:164
 msgid "&Print..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:179
+#: src/tools/designer/qdesigner_actions.cpp:167
 msgid "View &Code..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:180
+#: src/tools/designer/qdesigner_actions.cpp:168
 msgid "&Minimize"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:182
+#: src/tools/designer/qdesigner_actions.cpp:170
 msgid "Bring All to Front"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:184
+#: src/tools/designer/qdesigner_actions.cpp:172
 msgid "Preferences..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:185
+#: src/tools/designer/qdesigner_actions.cpp:173
 msgid "Additional Fonts..."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:257
+#: src/tools/designer/qdesigner_actions.cpp:245
 msgid "CTRL+SHIFT+S"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:378
+#: src/tools/designer/qdesigner_actions.cpp:366
 msgid "CTRL+R"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:396
+#: src/tools/designer/qdesigner_actions.cpp:384
 msgid "CTRL+M"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:427
+#: src/tools/designer/qdesigner_actions.cpp:415
 msgid "About Plugins"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:433
-#: src/tools/designer/qdesigner_actions.cpp:1004
+#: src/tools/designer/qdesigner_actions.cpp:421
+#: src/tools/designer/qdesigner_actions.cpp:992
 msgid "About Katie Designer"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:439
+#: src/tools/designer/qdesigner_actions.cpp:427
 msgid "About Katie"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:475
+#: src/tools/designer/qdesigner_actions.cpp:463
 msgid "Clear &Menu"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:558
-#: src/tools/designer/qdesigner_actions.cpp:755
+#: src/tools/designer/qdesigner_actions.cpp:546
+#: src/tools/designer/qdesigner_actions.cpp:743
 msgid "Open Form"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:559
-#: src/tools/designer/qdesigner_actions.cpp:596
-#: src/tools/designer/qdesigner_actions.cpp:756
+#: src/tools/designer/qdesigner_actions.cpp:547
+#: src/tools/designer/qdesigner_actions.cpp:584
+#: src/tools/designer/qdesigner_actions.cpp:744
 msgid "Designer UI files (*.%1);;All Files (*)"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:596
-#: src/tools/designer/qdesigner_actions.cpp:844
+#: src/tools/designer/qdesigner_actions.cpp:584
+#: src/tools/designer/qdesigner_actions.cpp:832
 msgid "Save Form As"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:683
+#: src/tools/designer/qdesigner_actions.cpp:671
 msgid "Designer"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:683
+#: src/tools/designer/qdesigner_actions.cpp:671
 msgid "Feature not implemented yet!"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:698
+#: src/tools/designer/qdesigner_actions.cpp:686
 msgid "Code generation failed"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:743
+#: src/tools/designer/qdesigner_actions.cpp:731
 msgid ""
 "%1\n"
 "Do you want to update the file location or generate a new form?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:746
+#: src/tools/designer/qdesigner_actions.cpp:734
 msgid "&Update"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:747
+#: src/tools/designer/qdesigner_actions.cpp:735
 msgid "&New Form"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:825
+#: src/tools/designer/qdesigner_actions.cpp:813
 msgid "Could not open file"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:829
+#: src/tools/designer/qdesigner_actions.cpp:817
 msgid ""
 "The file %1 could not be opened.\n"
 "Reason: %2\n"
 "Would you like to retry or select a different file?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:835
+#: src/tools/designer/qdesigner_actions.cpp:823
 msgid "Select New File"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:865
+#: src/tools/designer/qdesigner_actions.cpp:853
 msgid "Could not write file"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:868
+#: src/tools/designer/qdesigner_actions.cpp:856
 msgid ""
 "It was not possible to write the entire file %1 to disk.\n"
 "Reason:%2\n"
 "Would you like to retry?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1021
+#: src/tools/designer/qdesigner_actions.cpp:1009
 msgid "&Close Preview"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1062
-#: src/tools/designer/qdesigner_actions.cpp:1085
+#: src/tools/designer/qdesigner_actions.cpp:1050
+#: src/tools/designer/qdesigner_actions.cpp:1073
 msgid "The backup file %1 could not be written."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1192
+#: src/tools/designer/qdesigner_actions.cpp:1180
 msgid "The backup directory %1 could not be created."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1198
+#: src/tools/designer/qdesigner_actions.cpp:1186
 msgid "The temporary backup directory %1 could not be created."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1228
+#: src/tools/designer/qdesigner_actions.cpp:1216
 msgid "Preview failed"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1252
+#: src/tools/designer/qdesigner_actions.cpp:1240
 msgid "Image files (*.%1)"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1261
-#: src/tools/designer/qdesigner_actions.cpp:1278
+#: src/tools/designer/qdesigner_actions.cpp:1249
+#: src/tools/designer/qdesigner_actions.cpp:1266
 msgid "Save Image"
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1274
+#: src/tools/designer/qdesigner_actions.cpp:1262
 msgid "Saved image %1."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1279
+#: src/tools/designer/qdesigner_actions.cpp:1267
 msgid "The file %1 could not be written."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1292
+#: src/tools/designer/qdesigner_actions.cpp:1280
 msgid "Please close all forms to enable the loading of additional fonts."
 msgstr ""
 
-#: src/tools/designer/qdesigner_actions.cpp:1343
+#: src/tools/designer/qdesigner_actions.cpp:1331
 msgid "Printed %1."
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:64
+#: src/tools/designer/saveformastemplate.cpp:52
 msgid "Add path..."
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:87
+#: src/tools/designer/saveformastemplate.cpp:75
 msgid "Template Exists"
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:88
+#: src/tools/designer/saveformastemplate.cpp:76
 msgid ""
 "A template with the name %1 already exists.\n"
 "Do you want overwrite the template?"
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:91
+#: src/tools/designer/saveformastemplate.cpp:79
 msgid "Overwrite Template"
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:98
+#: src/tools/designer/saveformastemplate.cpp:86
 msgid "Open Error"
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:99
+#: src/tools/designer/saveformastemplate.cpp:87
 msgid "There was an error opening template %1 for writing. Reason: %2"
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:112
+#: src/tools/designer/saveformastemplate.cpp:100
 msgid "Write Error"
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:113
+#: src/tools/designer/saveformastemplate.cpp:101
 msgid "There was an error writing the template %1 to disk. Reason: %2"
 msgstr ""
 
-#: src/tools/designer/saveformastemplate.cpp:140
+#: src/tools/designer/saveformastemplate.cpp:128
 msgid "Pick a directory to save templates in"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:111
+#: src/tools/designer/mainwindow.cpp:99
 msgid "Main"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:117 src/tools/designer/mainwindow.cpp:247
+#: src/tools/designer/mainwindow.cpp:105 src/tools/designer/mainwindow.cpp:235
 msgid "File"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:118 src/tools/designer/mainwindow.cpp:251
+#: src/tools/designer/mainwindow.cpp:106 src/tools/designer/mainwindow.cpp:239
 msgid "Edit"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:119 src/tools/designer/mainwindow.cpp:255
+#: src/tools/designer/mainwindow.cpp:107 src/tools/designer/mainwindow.cpp:243
 msgid "Tools"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:120 src/tools/designer/mainwindow.cpp:259
+#: src/tools/designer/mainwindow.cpp:108 src/tools/designer/mainwindow.cpp:247
 msgid "Form"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:216
+#: src/tools/designer/mainwindow.cpp:204
 msgid "Configure Toolbars..."
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:231
+#: src/tools/designer/mainwindow.cpp:219
 msgid "Window"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:232
+#: src/tools/designer/mainwindow.cpp:220
 msgid "Help"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:239
+#: src/tools/designer/mainwindow.cpp:227
 msgid "Style"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:241
+#: src/tools/designer/mainwindow.cpp:229
 msgid "Dock views"
 msgstr ""
 
-#: src/tools/designer/mainwindow.cpp:263
-#: src/tools/designer/qdesigner_workbench.cpp:228
+#: src/tools/designer/mainwindow.cpp:251
+#: src/tools/designer/qdesigner_workbench.cpp:216
 msgid "Toolbars"
 msgstr ""
 
-#: src/tools/designer/qdesigner_toolwindow.cpp:179
+#: src/tools/designer/qdesigner_toolwindow.cpp:167
 msgid "Property Editor"
 msgstr ""
 
-#: src/tools/designer/qdesigner_toolwindow.cpp:233
+#: src/tools/designer/qdesigner_toolwindow.cpp:221
 msgid "Action Editor"
 msgstr ""
 
-#: src/tools/designer/qdesigner_toolwindow.cpp:275
+#: src/tools/designer/qdesigner_toolwindow.cpp:263
 msgid "Object Inspector"
 msgstr ""
 
-#: src/tools/designer/qdesigner_toolwindow.cpp:310
+#: src/tools/designer/qdesigner_toolwindow.cpp:298
 msgid "Resource Browser"
 msgstr ""
 
-#: src/tools/designer/qdesigner_toolwindow.cpp:344
+#: src/tools/designer/qdesigner_toolwindow.cpp:332
 msgid "Signal/Slot Editor"
 msgstr ""
 
-#: src/tools/designer/qdesigner_toolwindow.cpp:385
-#: src/tools/designer/qdesigner_workbench.cpp:394
+#: src/tools/designer/qdesigner_toolwindow.cpp:373
+#: src/tools/designer/qdesigner_workbench.cpp:382
 msgid "Widget Box"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:190
+#: src/tools/designer/qdesigner_workbench.cpp:178
 msgid "&Edit"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:194
+#: src/tools/designer/qdesigner_workbench.cpp:182
 msgid "F&orm"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:195
+#: src/tools/designer/qdesigner_workbench.cpp:183
 msgid "Preview in"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:199
+#: src/tools/designer/qdesigner_workbench.cpp:187
 msgid "&View"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:201
+#: src/tools/designer/qdesigner_workbench.cpp:189
 msgid "&Settings"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:203
+#: src/tools/designer/qdesigner_workbench.cpp:191
 msgid "&Window"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:683
+#: src/tools/designer/qdesigner_workbench.cpp:671
 msgid "Save Forms?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:684
+#: src/tools/designer/qdesigner_workbench.cpp:672
 msgid ""
 "There are %1 forms with unsaved changes. Do you want to review these changes "
 "before quitting?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:687
+#: src/tools/designer/qdesigner_workbench.cpp:675
 msgid "If you do not review your documents, all your changes will be lost."
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:688
+#: src/tools/designer/qdesigner_workbench.cpp:676
 msgid "Discard Changes"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:690
+#: src/tools/designer/qdesigner_workbench.cpp:678
 msgid "Review Changes"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:785
+#: src/tools/designer/qdesigner_workbench.cpp:773
 msgid "Backup Information"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:786
+#: src/tools/designer/qdesigner_workbench.cpp:774
 msgid ""
 "The last session of Designer was not terminated correctly. Backup files were "
 "left behind. Do you want to load them?"
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:896
+#: src/tools/designer/qdesigner_workbench.cpp:884
 msgid "The file <b>%1</b> could not be opened."
 msgstr ""
 
-#: src/tools/designer/qdesigner_workbench.cpp:942
+#: src/tools/designer/qdesigner_workbench.cpp:930
 msgid "The file <b>%1</b> is not a valid Designer UI file."
 msgstr ""
 
-#: src/tools/designer/qdesigner_appearanceoptions.cpp:77
+#: src/tools/designer/qdesigner_appearanceoptions.cpp:65
 msgid "Docked Window"
 msgstr ""
 
-#: src/tools/designer/qdesigner_appearanceoptions.cpp:78
+#: src/tools/designer/qdesigner_appearanceoptions.cpp:66
 msgid "Multiple Top-Level Windows"
 msgstr ""
 
-#: src/tools/designer/qdesigner_appearanceoptions.cpp:83
+#: src/tools/designer/qdesigner_appearanceoptions.cpp:71
 msgid "Toolwindow Font"
 msgstr ""
 
-#: src/tools/designer/qdesigner_appearanceoptions.cpp:128
+#: src/tools/designer/qdesigner_appearanceoptions.cpp:116
 msgctxt "QDesignerAppearanceOptionsPage"
 msgid "Appearance"
 msgstr ""
 
-#: src/tools/designer/qdesigner.cpp:121
+#: src/tools/designer/qdesigner.cpp:109
 msgctxt "QDesigner"
 msgid "%1 - warning"
 msgstr ""
 
-#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1234
+#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1222
 msgid "Custom Toolbar"
 msgstr ""
 
-#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1777
+#: src/tools/designer/qttoolbardialog/qttoolbardialog.cpp:1765
 msgid "< S E P A R A T O R >"
 msgstr ""
 
-#: src/tools/designer/fontpanel/fontpanel.cpp:54
+#: src/tools/designer/fontpanel/fontpanel.cpp:42
 msgid "Font"
 msgstr ""
 
-#: src/tools/designer/fontpanel/fontpanel.cpp:59
+#: src/tools/designer/fontpanel/fontpanel.cpp:47
 msgid "&Family"
 msgstr ""
 
-#: src/tools/designer/fontpanel/fontpanel.cpp:63
+#: src/tools/designer/fontpanel/fontpanel.cpp:51
 msgid "&Style"
 msgstr ""
 
-#: src/tools/designer/fontpanel/fontpanel.cpp:67
+#: src/tools/designer/fontpanel/fontpanel.cpp:55
 msgid "&Point size"
 msgstr ""