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
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)
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
--- /dev/null
+# - 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)
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'
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
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
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"
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
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
.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"
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
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
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
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
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
'QHashNode': 'qhash.h',
'QIncompatibleFlag': 'qglobal.h',
'QInternal': 'qnamespace.h',
- 'QJsonParseError': 'qjsondocument.h',
'QLatin1Char': 'qchar.h',
'QLatin1String': 'qstring.h',
'QLineF': 'qline.h',
"QItemSelection",
"QItemSelectionModel",
"QItemSelectionRange",
- "QJsonArray",
"QJsonDocument",
- "QJsonObject",
- "QJsonParseError",
- "QJsonValue",
"QKeyEvent",
"QKeySequence",
"QLabel",
${ZLIB_LIBRARIES}
${ICU_LIBRARIES}
${ZSTD_LIBRARIES}
+ ${JANSSON_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
# libm should be present by default becaue this is C++
m
QBasicTimer
QThread
QSocketNotifier
- QJsonArray
QJsonDocument
- QJsonObject
- QJsonValue
)
include_directories(
${ZLIB_INCLUDE_DIRS}
${ICU_INCLUDES}
${ZSTD_INCLUDES}
+ ${JANSSON_INCLUDES}
)
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
${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
${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
${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
#include "qplatformdefs.h"
#include "qsettings.h"
#include "qjsondocument.h"
-#include "qjsonobject.h"
#include "qstandardpaths.h"
#include "qmutex.h"
#include "qcoreapplication.h"
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;
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;
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
-
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
+++ /dev/null
-/****************************************************************************
-**
-** 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
#ifndef QT_BOOTSTRAPPED
# include "qeasingcurve.h"
-# include "qjsonvalue.h"
-# include "qjsonobject.h"
-# include "qjsonarray.h"
# include "qjsondocument.h"
# include "qbitarray.h"
# include "qurl.h"
\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
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),
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:
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: {
#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
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;
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 */,
#ifndef QT_NO_REGEXP
class QRegExp;
#endif
-class QJsonValue;
-class QJsonObject;
-class QJsonArray;
class QJsonDocument;
class QEasingCurve;
class QWidget;
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
#ifndef QT_BOOTSTRAPPED
# include "qeasingcurve.h"
-# include "qjsonvalue.h"
-# include "qjsonobject.h"
-# include "qjsonarray.h"
# include "qjsondocument.h"
# include "qsize.h"
# include "qpoint.h"
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;
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;
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
#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
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;
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:
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:
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;
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;
}
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;
}
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;
}
} 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
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;
\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
/*!
\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.
#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)
/*!
\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.
/* 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) {
class QDateTime;
#ifndef QT_BOOTSTRAPPED
class QEasingCurve;
-class QJsonValue;
-class QJsonObject;
-class QJsonArray;
class QJsonDocument;
#endif
class QLine;
RegExp = QMetaType::QRegExp,
Hash = QMetaType::QVariantHash,
EasingCurve = QMetaType::QEasingCurve,
- JsonValue = QMetaType::QJsonValue,
- JsonObject = QMetaType::QJsonObject,
- JsonArray = QMetaType::QJsonArray,
JsonDocument = QMetaType::QJsonDocument,
LastCoreType = QMetaType::LastCoreType,
#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
#endif
#ifndef QT_BOOTSTRAPPED
QEasingCurve toEasingCurve() const;
- QJsonValue toJsonValue() const;
- QJsonObject toJsonObject() const;
- QJsonArray toJsonArray() const;
QJsonDocument toJsonDocument() const;
#endif
--- /dev/null
+/****************************************************************************
+**
+** 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
--- /dev/null
+/****************************************************************************
+**
+** 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
{ 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") },
--- /dev/null
+katie_test(tst_qjsondocument
+ ${CMAKE_CURRENT_SOURCE_DIR}/tst_qjsondocument.cpp
+)
--- /dev/null
+{
+ "Qt/GUIEffects": [
+ "none"
+ ],
+}
--- /dev/null
+{
+ "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"
+ ]
+ }
+}
--- /dev/null
+/****************************************************************************
+**
+** 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"
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"
"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 "
"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\"> 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 "
"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 ""
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"
"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 "
"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 "
"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 "
"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 "
"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 ""