summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2020-01-28 18:27:28 +0100
committerSimon Hausmann <simon.hausmann@qt.io>2020-01-28 18:27:28 +0100
commita4ea0d9eacd574a6a96f70b138dcb111e9d11d21 (patch)
tree3c6439e1c9007e20bb0e8665cdba36c675b4a78f
parentef442327b8a4122fe46462e95a0537ec5ac53cb6 (diff)
parent6c3eb39832876a65291546476b92fd94950b1208 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
-rw-r--r--examples/widgets/animation/easing/window.cpp7
-rw-r--r--examples/widgets/animation/easing/window.h2
-rw-r--r--examples/widgets/graphicsview/chip/view.cpp4
-rw-r--r--examples/widgets/graphicsview/diagramscene/mainwindow.cpp17
-rw-r--r--examples/widgets/graphicsview/diagramscene/mainwindow.h4
-rw-r--r--examples/widgets/painting/affine/xform.cpp4
-rw-r--r--examples/widgets/painting/deform/pathdeform.cpp2
-rw-r--r--examples/widgets/painting/pathstroke/pathstroke.cpp4
-rw-r--r--mkspecs/features/create_cmake.prf41
-rw-r--r--mkspecs/features/default_post.prf2
-rw-r--r--mkspecs/features/default_pre.prf6
-rw-r--r--mkspecs/features/qt_common.prf4
-rw-r--r--mkspecs/wasm-emscripten/qmake.conf1
-rw-r--r--qmake/doc/src/qmake-manual.qdoc7
-rw-r--r--src/corelib/global/qlibraryinfo.cpp21
-rw-r--r--src/corelib/global/qnamespace.qdoc2
-rw-r--r--src/corelib/serialization/qxmlstream.cpp14
-rw-r--r--src/corelib/serialization/qxmlstream_p.h2
-rw-r--r--src/corelib/text/qlocale.cpp12
-rw-r--r--src/corelib/text/text.pri2
-rw-r--r--src/gui/doc/snippets/code/src_gui_painting_qpainter.cpp4
-rw-r--r--src/gui/doc/src/richtext.qdoc49
-rw-r--r--src/gui/image/qimage.cpp12
-rw-r--r--src/gui/image/qimage.h4
-rw-r--r--src/gui/image/qpixmap.cpp12
-rw-r--r--src/gui/image/qpixmap.h4
-rw-r--r--src/gui/image/qpnghandler.cpp3
-rw-r--r--src/gui/kernel/qevent.cpp4
-rw-r--r--src/gui/kernel/qguivariant.cpp1
-rw-r--r--src/gui/math3d/qmatrix4x4.cpp10
-rw-r--r--src/gui/math3d/qmatrix4x4.h6
-rw-r--r--src/gui/painting/qbrush.cpp10
-rw-r--r--src/gui/painting/qbrush.h9
-rw-r--r--src/gui/painting/qmatrix.cpp3
-rw-r--r--src/gui/painting/qpaintengine.cpp2
-rw-r--r--src/gui/painting/qpaintengine.h4
-rw-r--r--src/gui/painting/qpainter.cpp8
-rw-r--r--src/gui/painting/qpainter.h1
-rw-r--r--src/gui/painting/qpainter_p.h1
-rw-r--r--src/gui/painting/qpainterpath.cpp16
-rw-r--r--src/gui/painting/qpainterpath.h6
-rw-r--r--src/gui/painting/qpdf_p.h1
-rw-r--r--src/gui/painting/qpolygon.cpp18
-rw-r--r--src/gui/painting/qregion.cpp3
-rw-r--r--src/gui/painting/qtransform.cpp6
-rw-r--r--src/gui/painting/qtransform.h4
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp4
-rw-r--r--src/plugins/platforms/wasm/qwasmclipboard.cpp38
-rw-r--r--src/plugins/platforms/wasm/qwasmcursor.cpp7
-rw-r--r--src/plugins/platforms/wasm/qwasmeventtranslator.cpp6
-rw-r--r--src/plugins/platforms/wasm/qwasmintegration.cpp11
-rw-r--r--src/plugins/platforms/wasm/qwasmscreen.cpp4
-rw-r--r--src/plugins/platforms/wasm/qwasmservices.cpp6
-rw-r--r--src/plugins/platforms/wasm/qwasmstring.cpp61
-rw-r--r--src/plugins/platforms/wasm/qwasmstring.h45
-rw-r--r--src/plugins/platforms/wasm/wasm.pro6
-rw-r--r--src/plugins/styles/windowsvista/qwindowsxpstyle.cpp2
-rw-r--r--src/printsupport/kernel/qprintengine_pdf_p.h1
-rw-r--r--src/printsupport/widgets/qprintpreviewwidget.cpp2
-rw-r--r--src/sql/doc/snippets/sqldatabase/sqldatabase.cpp10
-rw-r--r--src/sql/models/qsqlquerymodel.cpp4
-rw-r--r--src/sql/models/qsqltablemodel.cpp2
-rw-r--r--src/widgets/doc/snippets/javastyle.cpp4
-rw-r--r--src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc12
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.cpp1
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.h1
-rw-r--r--src/widgets/graphicsview/qgraphicsview.cpp16
-rw-r--r--src/widgets/graphicsview/qgraphicsview.h8
-rw-r--r--src/widgets/kernel/qapplication.cpp3
-rw-r--r--src/widgets/styles/qcommonstyle.cpp2
-rw-r--r--src/widgets/styles/qwindowsstyle.cpp2
-rw-r--r--src/widgets/widgets/qabstractbutton.cpp20
-rw-r--r--src/widgets/widgets/qbuttongroup.cpp4
-rw-r--r--src/widgets/widgets/qbuttongroup.h12
-rw-r--r--src/widgets/widgets/qcombobox.cpp37
-rw-r--r--src/widgets/widgets/qcombobox_p.h1
-rw-r--r--src/widgets/widgets/qscrollarea.cpp4
-rw-r--r--src/widgets/widgets/qspinbox.cpp48
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp40
-rw-r--r--src/widgets/widgets/qwidgettextcontrol_p.h2
-rw-r--r--tests/auto/corelib/animation/qparallelanimationgroup/BLACKLIST2
-rw-r--r--tests/auto/corelib/animation/qpauseanimation/BLACKLIST7
-rw-r--r--tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST4
-rw-r--r--tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST2
-rw-r--r--tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp6
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.ref8003
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.xml1002
-rw-r--r--tests/auto/corelib/thread/qsemaphore/BLACKLIST6
-rw-r--r--tests/auto/corelib/tools/qtimeline/BLACKLIST3
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp6
-rw-r--r--tests/auto/gui/image/qpixmap/tst_qpixmap.cpp1
-rw-r--r--tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp5
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp5
-rw-r--r--tests/auto/gui/kernel/qwindow/BLACKLIST4
-rw-r--r--tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp5
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp21
-rw-r--r--tests/auto/gui/painting/qpathclipper/paths.cpp4
-rw-r--r--tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp6
-rw-r--r--tests/auto/gui/painting/qtransform/tst_qtransform.cpp19
-rw-r--r--tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp6
-rw-r--r--tests/auto/network/access/qnetworkreply/BLACKLIST40
-rw-r--r--tests/auto/network/ssl/qsslsocket/BLACKLIST4
-rw-r--r--tests/auto/other/macnativeevents/BLACKLIST6
-rw-r--r--tests/auto/widgets/dialogs/qdialog/BLACKLIST4
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog2/BLACKLIST4
-rw-r--r--tests/auto/widgets/dialogs/qprogressdialog/BLACKLIST2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp10
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp46
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qwidget/BLACKLIST4
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp28
-rw-r--r--tests/auto/widgets/util/qscroller/BLACKLIST5
-rw-r--r--tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp11
-rw-r--r--tests/auto/widgets/widgets/qdoublespinbox/BLACKLIST4
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/BLACKLIST11
-rw-r--r--tests/auto/widgets/widgets/qmenu/BLACKLIST10
-rw-r--r--tests/auto/widgets/widgets/qtoolbutton/BLACKLIST2
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp2
119 files changed, 9757 insertions, 341 deletions
diff --git a/examples/widgets/animation/easing/window.cpp b/examples/widgets/animation/easing/window.cpp
index d1d6348361..378af07535 100644
--- a/examples/widgets/animation/easing/window.cpp
+++ b/examples/widgets/animation/easing/window.cpp
@@ -67,7 +67,7 @@ Window::Window(QWidget *parent)
connect(m_ui.easingCurvePicker, &QListWidget::currentRowChanged,
this, &Window::curveChanged);
- connect(m_ui.buttonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
+ connect(m_ui.buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
this, &Window::pathChanged);
connect(m_ui.periodSpinBox, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
this, &Window::periodChanged);
@@ -180,9 +180,10 @@ void Window::curveChanged(int row)
m_ui.overshootSpinBox->setEnabled(curveType >= QEasingCurve::InBack && curveType <= QEasingCurve::OutInBack);
}
-void Window::pathChanged(int index)
+void Window::pathChanged(QAbstractButton *button)
{
- m_anim->setPathType((Animation::PathType)index);
+ const int index = m_ui.buttonGroup->id(button);
+ m_anim->setPathType(Animation::PathType(index));
}
void Window::periodChanged(double value)
diff --git a/examples/widgets/animation/easing/window.h b/examples/widgets/animation/easing/window.h
index 541377a981..0c49dd6e8a 100644
--- a/examples/widgets/animation/easing/window.h
+++ b/examples/widgets/animation/easing/window.h
@@ -69,7 +69,7 @@ public:
Window(QWidget *parent = nullptr);
private slots:
void curveChanged(int row);
- void pathChanged(int index);
+ void pathChanged(QAbstractButton *button);
void periodChanged(double);
void amplitudeChanged(double);
void overshootChanged(double);
diff --git a/examples/widgets/graphicsview/chip/view.cpp b/examples/widgets/graphicsview/chip/view.cpp
index 77a6310778..f24cb738a3 100644
--- a/examples/widgets/graphicsview/chip/view.cpp
+++ b/examples/widgets/graphicsview/chip/view.cpp
@@ -220,11 +220,11 @@ void View::setupMatrix()
{
qreal scale = qPow(qreal(2), (zoomSlider->value() - 250) / qreal(50));
- QMatrix matrix;
+ QTransform matrix;
matrix.scale(scale, scale);
matrix.rotate(rotateSlider->value());
- graphicsView->setMatrix(matrix);
+ graphicsView->setTransform(matrix);
setResetButtonEnabled();
}
diff --git a/examples/widgets/graphicsview/diagramscene/mainwindow.cpp b/examples/widgets/graphicsview/diagramscene/mainwindow.cpp
index 3327d4d5df..58b959dd10 100644
--- a/examples/widgets/graphicsview/diagramscene/mainwindow.cpp
+++ b/examples/widgets/graphicsview/diagramscene/mainwindow.cpp
@@ -113,13 +113,14 @@ void MainWindow::backgroundButtonGroupClicked(QAbstractButton *button)
//! [1]
//! [2]
-void MainWindow::buttonGroupClicked(int id)
+void MainWindow::buttonGroupClicked(QAbstractButton *button)
{
const QList<QAbstractButton *> buttons = buttonGroup->buttons();
- for (QAbstractButton *button : buttons) {
- if (buttonGroup->button(id) != button)
+ for (QAbstractButton *myButton : buttons) {
+ if (myButton != button)
button->setChecked(false);
}
+ const int id = buttonGroup->id(button);
if (id == InsertTextButton) {
scene->setMode(DiagramScene::InsertText);
} else {
@@ -154,7 +155,7 @@ void MainWindow::deleteItem()
//! [3]
//! [4]
-void MainWindow::pointerGroupClicked(int)
+void MainWindow::pointerGroupClicked()
{
scene->setMode(DiagramScene::Mode(pointerTypeGroup->checkedId()));
}
@@ -231,8 +232,8 @@ void MainWindow::fontSizeChanged(const QString &)
void MainWindow::sceneScaleChanged(const QString &scale)
{
double newScale = scale.left(scale.indexOf(tr("%"))).toDouble() / 100.0;
- QMatrix oldMatrix = view->matrix();
- view->resetMatrix();
+ QTransform oldMatrix = view->transform();
+ view->resetTransform();
view->translate(oldMatrix.dx(), oldMatrix.dy());
view->scale(newScale, newScale);
}
@@ -334,7 +335,7 @@ void MainWindow::createToolBox()
{
buttonGroup = new QButtonGroup(this);
buttonGroup->setExclusive(false);
- connect(buttonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
+ connect(buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
this, &MainWindow::buttonGroupClicked);
QGridLayout *layout = new QGridLayout;
layout->addWidget(createCellWidget(tr("Conditional"), DiagramItem::Conditional), 0, 0);
@@ -528,7 +529,7 @@ void MainWindow::createToolbars()
pointerTypeGroup = new QButtonGroup(this);
pointerTypeGroup->addButton(pointerButton, int(DiagramScene::MoveItem));
pointerTypeGroup->addButton(linePointerButton, int(DiagramScene::InsertLine));
- connect(pointerTypeGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
+ connect(pointerTypeGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
this, &MainWindow::pointerGroupClicked);
sceneScaleCombo = new QComboBox;
diff --git a/examples/widgets/graphicsview/diagramscene/mainwindow.h b/examples/widgets/graphicsview/diagramscene/mainwindow.h
index e04224fbc7..9fcd1884ca 100644
--- a/examples/widgets/graphicsview/diagramscene/mainwindow.h
+++ b/examples/widgets/graphicsview/diagramscene/mainwindow.h
@@ -82,9 +82,9 @@ public:
private slots:
void backgroundButtonGroupClicked(QAbstractButton *button);
- void buttonGroupClicked(int id);
+ void buttonGroupClicked(QAbstractButton *button);
void deleteItem();
- void pointerGroupClicked(int id);
+ void pointerGroupClicked();
void bringToFront();
void sendToBack();
void itemInserted(DiagramItem *item);
diff --git a/examples/widgets/painting/affine/xform.cpp b/examples/widgets/painting/affine/xform.cpp
index 50acf0f814..4e7cb91ce1 100644
--- a/examples/widgets/painting/affine/xform.cpp
+++ b/examples/widgets/painting/affine/xform.cpp
@@ -223,7 +223,7 @@ void XFormView::setRotation(qreal r)
m_rotation = r;
QPointF center(pts->points().at(0));
- QMatrix m;
+ QTransform m;
m.translate(center.x(), center.y());
m.rotate(m_rotation - old_rot);
m.translate(-center.x(), -center.y());
@@ -236,7 +236,7 @@ void XFormView::timerEvent(QTimerEvent *e)
{
if (e->timerId() == timer.timerId()) {
QPointF center(pts->points().at(0));
- QMatrix m;
+ QTransform m;
m.translate(center.x(), center.y());
m.rotate(0.2);
m.translate(-center.x(), -center.y());
diff --git a/examples/widgets/painting/deform/pathdeform.cpp b/examples/widgets/painting/deform/pathdeform.cpp
index d5c8746247..961d5e5e99 100644
--- a/examples/widgets/painting/deform/pathdeform.cpp
+++ b/examples/widgets/painting/deform/pathdeform.cpp
@@ -374,7 +374,7 @@ void PathDeformRenderer::setText(const QString &text)
}
for (int i=0; i<m_paths.size(); ++i)
- m_paths[i] = m_paths[i] * QMatrix(1, 0, 0, 1, -m_pathBounds.x(), -m_pathBounds.y());
+ m_paths[i] = m_paths[i] * QTransform(1, 0, 0, 1, -m_pathBounds.x(), -m_pathBounds.y());
update();
}
diff --git a/examples/widgets/painting/pathstroke/pathstroke.cpp b/examples/widgets/painting/pathstroke/pathstroke.cpp
index a850ce2672..7dab6f95a2 100644
--- a/examples/widgets/painting/pathstroke/pathstroke.cpp
+++ b/examples/widgets/painting/pathstroke/pathstroke.cpp
@@ -511,10 +511,10 @@ void PathStrokeRenderer::initializePoints()
m_points.clear();
m_vectors.clear();
- QMatrix m;
+ QTransform m;
qreal rot = 360.0 / count;
QPointF center(width() / 2, height() / 2);
- QMatrix vm;
+ QTransform vm;
vm.shear(2, -1);
vm.scale(3, 3);
diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf
index 63b4a73660..46b9698e62 100644
--- a/mkspecs/features/create_cmake.prf
+++ b/mkspecs/features/create_cmake.prf
@@ -212,21 +212,17 @@ contains(CONFIG, plugin) {
CMAKE_PLUGIN_TYPE_ESCAPED = $$replace(PLUGIN_TYPE, [-/], _)
win32 {
+ CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.prl
+ CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.prl
isEmpty(CMAKE_STATIC_TYPE) {
CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.dll
CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.dll
- CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.prl
- CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.prl
} else:mingw {
CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}.a
CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}d.a
- CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}.prl
- CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/lib$${CMAKE_QT_STEM}d.prl
} else { # MSVC static
CMAKE_PLUGIN_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.lib
CMAKE_PLUGIN_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.lib
- CMAKE_PRL_FILE_LOCATION_RELEASE = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}.prl
- CMAKE_PRL_FILE_LOCATION_DEBUG = $$PLUGIN_TYPE/$${CMAKE_QT_STEM}d.prl
}
} else {
mac {
@@ -320,36 +316,25 @@ mac {
CMAKE_LIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.dll
CMAKE_LIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.dll
+ !isEmpty(CMAKE_STATIC_TYPE) {
+ CMAKE_STATIC_WINDOWS_BUILD = "true"
+
+ CMAKE_PRL_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.prl
+ CMAKE_PRL_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.prl
+ }
+
mingw {
CMAKE_WINMAIN_FILE_LOCATION_DEBUG = libqtmain$${QT_LIBINFIX}d.a
CMAKE_WINMAIN_FILE_LOCATION_RELEASE = libqtmain$${QT_LIBINFIX}.a
- !isEmpty(CMAKE_STATIC_TYPE) {
- CMAKE_STATIC_WINDOWS_BUILD = "true"
- CMAKE_IMPLIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.a
- CMAKE_IMPLIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a
-
- CMAKE_PRL_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.prl
- CMAKE_PRL_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.prl
- } else {
- CMAKE_IMPLIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.a
- CMAKE_IMPLIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a
- }
+ CMAKE_IMPLIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}d.a
+ CMAKE_IMPLIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a
} else {
CMAKE_WINMAIN_FILE_LOCATION_DEBUG = qtmain$${QT_LIBINFIX}d.lib
CMAKE_WINMAIN_FILE_LOCATION_RELEASE = qtmain$${QT_LIBINFIX}.lib
- !isEmpty(CMAKE_STATIC_TYPE) {
- CMAKE_STATIC_WINDOWS_BUILD = "true"
- CMAKE_IMPLIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.lib
- CMAKE_IMPLIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.lib
-
- CMAKE_PRL_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.prl
- CMAKE_PRL_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.prl
- } else {
- CMAKE_IMPLIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.lib
- CMAKE_IMPLIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.lib
- }
+ CMAKE_IMPLIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}d.lib
+ CMAKE_IMPLIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.lib
}
} else {
!isEmpty(CMAKE_STATIC_TYPE) {
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index 0e41b825ec..1d79f5c958 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -64,11 +64,13 @@ debug {
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_DEBUG
QMAKE_LFLAGS += $$QMAKE_LFLAGS_DEBUG
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_DEBUG
+ DEFINES += $$DEFINES_DEBUG
} else {
QMAKE_CFLAGS += $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_RELEASE
QMAKE_LFLAGS += $$QMAKE_LFLAGS_RELEASE
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_RELEASE
+ DEFINES += $$DEFINES_RELEASE
}
stack_protector_strong {
diff --git a/mkspecs/features/default_pre.prf b/mkspecs/features/default_pre.prf
index b2629d04c0..1c24bf071a 100644
--- a/mkspecs/features/default_pre.prf
+++ b/mkspecs/features/default_pre.prf
@@ -26,10 +26,4 @@ CONFIG = \
unset(today)
}
-CONFIG(debug, debug|release) {
- DEFINES += $$DEFINES_DEBUG
-} else {
- DEFINES += $$DEFINES_RELEASE
-}
-
load(toolchain)
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
index c24f2c6062..02460a2e0c 100644
--- a/mkspecs/features/qt_common.prf
+++ b/mkspecs/features/qt_common.prf
@@ -23,7 +23,6 @@ qtConfig(c11): CONFIG += c11
qtConfig(stack-protector-strong): CONFIG += stack_protector_strong
contains(TEMPLATE, .*lib) {
# module and plugins
- if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
unix:qtConfig(reduce_relocations): CONFIG += bsymbolic_functions
qtConfig(separate_debug_info): CONFIG += separate_debug_info
@@ -58,6 +57,9 @@ contains(TEMPLATE, .*lib) {
QMAKE_PRL_INSTALL_REPLACE += qtlibdir_replace
}
}
+contains(TEMPLATE, .*lib)|darwin {
+ if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
+}
# The remainder of this file must not apply to host tools/libraries,
# as the host compiler's version and capabilities are not checked.
diff --git a/mkspecs/wasm-emscripten/qmake.conf b/mkspecs/wasm-emscripten/qmake.conf
index d520ce361a..8773e1bd00 100644
--- a/mkspecs/wasm-emscripten/qmake.conf
+++ b/mkspecs/wasm-emscripten/qmake.conf
@@ -36,6 +36,7 @@ EMCC_COMMON_LFLAGS += \
-s USE_WEBGL2=1 \
-s NO_EXIT_RUNTIME=0 \
-s ERROR_ON_UNDEFINED_SYMBOLS=1 \
+ -s EXTRA_EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"] \
--bind
# The -s arguments can also be used with release builds,
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index cd8129a539..3a1d79cb79 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -1168,7 +1168,7 @@
\section1 DEFINES_DEBUG
Specifies preprocessor defines for the debug configuration. The values of
- this variable get added to \l{DEFINES} before the project is loaded. This
+ this variable get added to \l{DEFINES} after the project is loaded. This
variable is typically set in \l{#QMAKESPEC}{qmake.conf} and rarely needs
to be modified.
@@ -1178,10 +1178,13 @@
\section1 DEFINES_RELEASE
Specifies preprocessor defines for the release configuration. The values of
- this variable get added to \l{DEFINES} before the project is loaded. This
+ this variable get added to \l{DEFINES} after the project is loaded. This
variable is typically set in \l{#QMAKESPEC}{qmake.conf} and rarely needs
to be modified.
+ \note For MSVC mkspecs, this variable contains the value \c NDEBUG by
+ default.
+
This variable was introduced in Qt 5.13.2.
\target DEF_FILE
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 9fab49a73e..73597b6bcc 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -534,8 +534,25 @@ static QString getRelocatablePrefix()
#if defined(QT_STATIC)
prefixPath = prefixFromAppDirHelper();
#elif defined(Q_OS_DARWIN) && QT_CONFIG(framework)
- CFBundleRef qtCoreBundle = CFBundleGetBundleWithIdentifier(
- CFSTR("org.qt-project.QtCore"));
+ auto qtCoreBundle = CFBundleGetBundleWithIdentifier(CFSTR("org.qt-project.QtCore"));
+ if (!qtCoreBundle) {
+ // When running Qt apps over Samba shares, CoreFoundation will fail to find
+ // the Resources directory inside the bundle, This directory is a symlink,
+ // and CF relies on readdir() and dtent.dt_type to detect symlinks, which
+ // does not work reliably for Samba shares. We work around it by manually
+ // looking for the QtCore bundle.
+ auto allBundles = CFBundleGetAllBundles();
+ auto bundleCount = CFArrayGetCount(allBundles);
+ for (int i = 0; i < bundleCount; ++i) {
+ auto bundle = CFBundleRef(CFArrayGetValueAtIndex(allBundles, i));
+ auto url = QCFType<CFURLRef>(CFBundleCopyBundleURL(bundle));
+ auto path = QCFType<CFStringRef>(CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle));
+ if (CFStringHasSuffix(path, CFSTR("/QtCore.framework"))) {
+ qtCoreBundle = bundle;
+ break;
+ }
+ }
+ }
Q_ASSERT(qtCoreBundle);
QCFType<CFURLRef> qtCorePath = CFBundleCopyBundleURL(qtCoreBundle);
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 29b58783d5..9acb978efc 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -1023,7 +1023,7 @@
\value WA_MacNoClickThrough This value is obsolete and has no effect.
- \value WA_MacOpaqueSizeGrip Indicates that the native Carbon size grip
+ \value WA_MacOpaqueSizeGrip Indicates that the native size grip
should be opaque instead of transparent (the default). This attribute
is only applicable to \macos and is set by the widget's author.
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
index 500e0aa6be..7ff87885a5 100644
--- a/src/corelib/serialization/qxmlstream.cpp
+++ b/src/corelib/serialization/qxmlstream.cpp
@@ -50,6 +50,7 @@
#endif
#include <qstack.h>
#include <qbuffer.h>
+#include <qscopeguard.h>
#ifndef QT_BOOTSTRAPPED
#include <qcoreapplication.h>
#else
@@ -68,6 +69,8 @@ public: \
{ return QString::fromLatin1(sourceText); } \
private:
#endif
+#include <private/qmemory_p.h>
+
QT_BEGIN_NAMESPACE
#include "qxmlstream_p.h"
@@ -847,7 +850,7 @@ void QXmlStreamReaderPrivate::init()
#endif
attributeStack.clear();
attributeStack.reserve(16);
- entityParser = nullptr;
+ entityParser.reset();
hasCheckedStartDocument = false;
normalizeLiterals = false;
hasSeenTag = false;
@@ -880,7 +883,7 @@ void QXmlStreamReaderPrivate::parseEntity(const QString &value)
if (!entityParser)
- entityParser = new QXmlStreamReaderPrivate(q);
+ entityParser = qt_make_unique<QXmlStreamReaderPrivate>(q);
else
entityParser->init();
entityParser->inParseEntity = true;
@@ -910,7 +913,6 @@ QXmlStreamReaderPrivate::~QXmlStreamReaderPrivate()
#endif
free(sym_stack);
free(state_stack);
- delete entityParser;
}
@@ -1582,6 +1584,7 @@ QStringRef QXmlStreamReaderPrivate::namespaceForPrefix(const QStringRef &prefix)
*/
void QXmlStreamReaderPrivate::resolveTag()
{
+ const auto attributeStackCleaner = qScopeGuard([this](){ attributeStack.clear(); });
int n = attributeStack.size();
if (namespaceProcessing) {
@@ -1649,7 +1652,10 @@ void QXmlStreamReaderPrivate::resolveTag()
if (attributes[j].name() == attribute.name()
&& attributes[j].namespaceUri() == attribute.namespaceUri()
&& (namespaceProcessing || attributes[j].qualifiedName() == attribute.qualifiedName()))
+ {
raiseWellFormedError(QXmlStream::tr("Attribute '%1' redefined.").arg(attribute.qualifiedName()));
+ return;
+ }
}
}
@@ -1680,8 +1686,6 @@ void QXmlStreamReaderPrivate::resolveTag()
attribute.m_isDefault = true;
attributes.append(attribute);
}
-
- attributeStack.clear();
}
void QXmlStreamReaderPrivate::resolvePublicNamespaces()
diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
index cde66a48a3..9c94e6d434 100644
--- a/src/corelib/serialization/qxmlstream_p.h
+++ b/src/corelib/serialization/qxmlstream_p.h
@@ -981,7 +981,7 @@ public:
QString resolveUndeclaredEntity(const QString &name);
void parseEntity(const QString &value);
- QXmlStreamReaderPrivate *entityParser;
+ std::unique_ptr<QXmlStreamReaderPrivate> entityParser;
bool scanAfterLangleBang();
bool scanPublicOrSystem();
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index fb45b82967..6dbec8ba33 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -734,23 +734,23 @@ static void updateSystemPrivate()
globalLocaleData.m_script_id = res.toInt();
res = sys_locale->query(QSystemLocale::DecimalPoint, QVariant());
- if (!res.isNull())
+ if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_decimal = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::GroupSeparator, QVariant());
- if (!res.isNull())
+ if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_group = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::ZeroDigit, QVariant());
- if (!res.isNull())
+ if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_zero = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::NegativeSign, QVariant());
- if (!res.isNull())
+ if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_minus = res.toString().at(0).unicode();
res = sys_locale->query(QSystemLocale::PositiveSign, QVariant());
- if (!res.isNull())
+ if (!res.isNull() && !res.toString().isEmpty())
globalLocaleData.m_plus = res.toString().at(0).unicode();
}
#endif // !QT_NO_SYSTEMLOCALE
@@ -4463,6 +4463,8 @@ QStringList QLocale::uiLanguages() const
for (const auto entry : qAsConst(uiLanguages))
locales.append(QLocale(entry));
}
+ if (locales.isEmpty())
+ locales.append(systemLocale()->fallbackUiLocale());
} else
#endif
{
diff --git a/src/corelib/text/text.pri b/src/corelib/text/text.pri
index 25e281f37a..d2a02059c7 100644
--- a/src/corelib/text/text.pri
+++ b/src/corelib/text/text.pri
@@ -48,7 +48,7 @@ SOURCES += \
NO_PCH_SOURCES += text/qstring_compat.cpp
false: SOURCES += $$NO_PCH_SOURCES # Hack for QtCreator
-!nacl:macos: {
+!nacl:darwin: {
SOURCES += text/qlocale_mac.mm
}
else:unix {
diff --git a/src/gui/doc/snippets/code/src_gui_painting_qpainter.cpp b/src/gui/doc/snippets/code/src_gui_painting_qpainter.cpp
index 37fae52778..d1ee6bbdea 100644
--- a/src/gui/doc/snippets/code/src_gui_painting_qpainter.cpp
+++ b/src/gui/doc/snippets/code/src_gui_painting_qpainter.cpp
@@ -93,9 +93,9 @@ painter2->begin(myWidget); // impossible - only one painter at a time
//! [4]
void QPainter::rotate(qreal angle)
{
- QMatrix matrix;
+ QTransform matrix;
matrix.rotate(angle);
- setWorldMatrix(matrix, true);
+ setWorldTransform(matrix, true);
}
//! [4]
diff --git a/src/gui/doc/src/richtext.qdoc b/src/gui/doc/src/richtext.qdoc
index 24fd4240b3..31a2ebf05b 100644
--- a/src/gui/doc/src/richtext.qdoc
+++ b/src/gui/doc/src/richtext.qdoc
@@ -1269,6 +1269,55 @@
\row \li \c word-spacing
\li <width>px
\li Specifies an alternate spacing between each word.
+ \row \li \c line-height
+ \li <number>[% | px | pt | cm]
+ \li Specifies the height of a line. It can be one of the
+ following:
+ \list
+ \li fixed line height in pixels, points, or centimeters.
+ \li a percentage of the current font size.
+ \endlist
+ \endtable
+
+ \section1 Qt-specific CSS properties
+
+ Besides the standard CSS properties listed earlier, the following
+ Qt-specific properties can also be used to style a text block:
+
+ \table
+ \header \li Property
+ \li Values
+ \li Description
+ \row
+ \li \c -qt-block-indent
+ \li \c <number>
+ \li Indents the text block by the specified no. spaces.
+ \row
+ \li \c -qt-list-indent
+ \li \c <number>
+ \li Indents the list items by the specified no. of spaces.
+ \row
+ \li \c -qt-list-number-prefix
+ \li \c <string>
+ \li Prefixes the given string to list number in an HTML ordered list.
+ \row
+ \li \c -qt-list-number-suffix
+ \li <string>
+ \li Suffixes the given string to list number in an HTML ordered list.
+ \row
+ \li \c -qt-paragraph-type
+ \li \c empty
+ \li Hides the text block.
+ \row
+ \li \c -qt-table-type
+ \li \c{root | frame}
+ \li \c root renders the text blocks inline without borders and
+ indentation, whereas \c frame renders them on a new line
+ with a frame around.
+ \row
+ \li \c -qt-user-state
+ \li \c <number>
+ \li Adds it as user data for the text block.
\endtable
\section1 Supported CSS Selectors
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 74dc81e365..738aa29794 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -2847,7 +2847,13 @@ QImage QImage::scaledToHeight(int h, Qt::TransformationMode mode) const
}
+#if QT_DEPRECATED_SINCE(5, 15)
+
/*!
+ \obsolete
+
+ Use trueMatrix(const QTransform &matrix, int w, int h) instead.
+
\fn QMatrix QImage::trueMatrix(const QMatrix &matrix, int width, int height)
Returns the actual matrix used for transforming an image with the
@@ -2869,6 +2875,10 @@ QMatrix QImage::trueMatrix(const QMatrix &matrix, int w, int h)
}
/*!
+ \obsolete
+
+ Use transformed(const QTransform &matrix, Qt::TransformationMode mode) instead.
+
Returns a copy of the image that is transformed using the given
transformation \a matrix and transformation \a mode.
@@ -2893,6 +2903,8 @@ QImage QImage::transformed(const QMatrix &matrix, Qt::TransformationMode mode) c
return transformed(QTransform(matrix), mode);
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
+
/*!
Builds and returns a 1-bpp mask from the alpha buffer in this
image. Returns a null image if the image's format is
diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h
index b8df4b83d1..35dc41be2d 100644
--- a/src/gui/image/qimage.h
+++ b/src/gui/image/qimage.h
@@ -241,8 +241,12 @@ public:
Qt::TransformationMode mode = Qt::FastTransformation) const;
QImage scaledToWidth(int w, Qt::TransformationMode mode = Qt::FastTransformation) const;
QImage scaledToHeight(int h, Qt::TransformationMode mode = Qt::FastTransformation) const;
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_X("Use transformed(const QTransform &matrix, Qt::TransformationMode mode)")
QImage transformed(const QMatrix &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const;
+ QT_DEPRECATED_X("trueMatrix(const QTransform &, int w, int h)")
static QMatrix trueMatrix(const QMatrix &, int w, int h);
+#endif // QT_DEPRECATED_SINCE(5, 15)
QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const;
static QTransform trueMatrix(const QTransform &, int w, int h);
QImage mirrored(bool horizontally = false, bool vertically = true) const &
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index adadba2057..269f236ecd 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -438,7 +438,7 @@ QImage QPixmap::toImage() const
}
/*!
- \fn QMatrix QPixmap::trueMatrix(const QTransform &matrix, int width, int height)
+ \fn QTransform QPixmap::trueMatrix(const QTransform &matrix, int width, int height)
Returns the actual matrix used for transforming a pixmap with the
given \a width, \a height and \a matrix.
@@ -458,8 +458,12 @@ QTransform QPixmap::trueMatrix(const QTransform &m, int w, int h)
return QImage::trueMatrix(m, w, h);
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\overload
+ \obsolete
+
+ Use trueMatrix(const QTransform &m, int w, int h) instead.
This convenience function loads the matrix \a m into a
QTransform and calls the overloaded function with the
@@ -469,6 +473,7 @@ QMatrix QPixmap::trueMatrix(const QMatrix &m, int w, int h)
{
return trueMatrix(QTransform(m), w, h).toAffine();
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
@@ -1233,8 +1238,12 @@ QPixmap QPixmap::transformed(const QTransform &transform,
return data->transformed(transform, mode);
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\overload
+ \obsolete
+
+ Use transformed(const QTransform &transform, Qt::TransformationMode mode)() instead.
This convenience function loads the \a matrix into a
QTransform and calls the overloaded function.
@@ -1243,6 +1252,7 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode)
{
return transformed(QTransform(matrix), mode);
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h
index 8a06ebe603..e47a9fe59e 100644
--- a/src/gui/image/qpixmap.h
+++ b/src/gui/image/qpixmap.h
@@ -129,8 +129,12 @@ public:
Qt::TransformationMode mode = Qt::FastTransformation) const;
QPixmap scaledToWidth(int w, Qt::TransformationMode mode = Qt::FastTransformation) const;
QPixmap scaledToHeight(int h, Qt::TransformationMode mode = Qt::FastTransformation) const;
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_X("Use transformed(const QTransform &, Qt::TransformationMode mode)")
QPixmap transformed(const QMatrix &, Qt::TransformationMode mode = Qt::FastTransformation) const;
+ QT_DEPRECATED_X("Use trueMatrix(const QTransform &m, int w, int h)")
static QMatrix trueMatrix(const QMatrix &m, int w, int h);
+#endif // QT_DEPRECATED_SINCE(5, 15)
QPixmap transformed(const QTransform &, Qt::TransformationMode mode = Qt::FastTransformation) const;
static QTransform trueMatrix(const QTransform &m, int w, int h);
diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp
index 251f09fe52..49f9550519 100644
--- a/src/gui/image/qpnghandler.cpp
+++ b/src/gui/image/qpnghandler.cpp
@@ -916,6 +916,9 @@ bool QPNGImageWriter::writeImage(const QImage& image, int compression_in, const
}
png_set_error_fn(png_ptr, nullptr, nullptr, qt_png_warning);
+#ifdef PNG_BENIGN_ERRORS_SUPPORTED
+ png_set_benign_errors(png_ptr, 1);
+#endif
info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index 5a71475dc9..663573b640 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -1150,8 +1150,8 @@ QKeyEvent::~QKeyEvent()
Note: The native scan code may be 0, even if the key event contains
extended information.
- Note: On Mac OS/X, this function is not useful, because there is no
- way to get the scan code from Carbon or Cocoa. The function always
+ Note: On \macos, this function is not useful, because there is no
+ way to get the scan code from the system APIs. The function always
returns 1 (or 0 in the case explained above).
*/
diff --git a/src/gui/kernel/qguivariant.cpp b/src/gui/kernel/qguivariant.cpp
index 94296dd6fc..f06a3721a1 100644
--- a/src/gui/kernel/qguivariant.cpp
+++ b/src/gui/kernel/qguivariant.cpp
@@ -49,7 +49,6 @@
# include "qkeysequence.h"
#endif
#include "qtransform.h"
-#include "qmatrix.h"
#include "qpalette.h"
#include "qpen.h"
#include "qpixmap.h"
diff --git a/src/gui/math3d/qmatrix4x4.cpp b/src/gui/math3d/qmatrix4x4.cpp
index 6666eb037f..cdaed788e9 100644
--- a/src/gui/math3d/qmatrix4x4.cpp
+++ b/src/gui/math3d/qmatrix4x4.cpp
@@ -187,7 +187,10 @@ QMatrix4x4::QMatrix4x4(const float *values, int cols, int rows)
flagBits = General;
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
+ \obsolete
+
Constructs a 4x4 matrix from a conventional Qt 2D affine
transformation \a matrix.
@@ -218,6 +221,7 @@ QMatrix4x4::QMatrix4x4(const QMatrix& matrix)
m[3][3] = 1.0f;
flagBits = Translation | Scale | Rotation2D;
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Constructs a 4x4 matrix from the conventional Qt 2D
@@ -1659,7 +1663,12 @@ void QMatrix4x4::copyDataTo(float *values) const
values[row * 4 + col] = float(m[col][row]);
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
+ \obsolete
+
+ Use toTransform() instead.
+
Returns the conventional Qt 2D affine transformation matrix that
corresponds to this matrix. It is assumed that this matrix
only contains 2D affine transformation elements.
@@ -1672,6 +1681,7 @@ QMatrix QMatrix4x4::toAffine() const
m[1][0], m[1][1],
m[3][0], m[3][1]);
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Returns the conventional Qt 2D transformation matrix that
diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h
index 4ad6cceaea..5a8b2c0daf 100644
--- a/src/gui/math3d/qmatrix4x4.h
+++ b/src/gui/math3d/qmatrix4x4.h
@@ -72,7 +72,9 @@ public:
QMatrix4x4(const float *values, int cols, int rows);
QMatrix4x4(const QTransform& transform);
+#if QT_DEPRECATED_SINCE(5, 15)
QMatrix4x4(const QMatrix& matrix);
+#endif // QT_DEPRECATED_SINCE(5, 15)
inline const float& operator()(int row, int column) const;
inline float& operator()(int row, int column);
@@ -156,7 +158,9 @@ public:
void copyDataTo(float *values) const;
- QMatrix toAffine() const;
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_X("Use toTransform()") QMatrix toAffine() const;
+#endif // QT_DEPRECATED_SINCE(5, 15)
QTransform toTransform() const;
QTransform toTransform(float distanceToPlane) const;
diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp
index e84916e063..28cc20bfc5 100644
--- a/src/gui/painting/qbrush.cpp
+++ b/src/gui/painting/qbrush.cpp
@@ -893,8 +893,12 @@ bool QBrush::isOpaque() const
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\since 4.2
+ \obsolete
+
+ Use setTransform() instead.
Sets \a matrix as an explicit transformation matrix on the
current brush. The brush transformation matrix is merged with
@@ -906,6 +910,7 @@ void QBrush::setMatrix(const QMatrix &matrix)
{
setTransform(QTransform(matrix));
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
\since 4.3
@@ -923,14 +928,19 @@ void QBrush::setTransform(const QTransform &matrix)
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\fn void QBrush::matrix() const
\since 4.2
+ \obsolete
+
+ Use transform() instead.
Returns the current transformation matrix for the brush.
\sa setMatrix()
*/
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
\fn bool QBrush::operator!=(const QBrush &brush) const
diff --git a/src/gui/painting/qbrush.h b/src/gui/painting/qbrush.h
index 1d7199782f..3a01248c57 100644
--- a/src/gui/painting/qbrush.h
+++ b/src/gui/painting/qbrush.h
@@ -89,8 +89,10 @@ public:
inline Qt::BrushStyle style() const;
void setStyle(Qt::BrushStyle);
- inline const QMatrix &matrix() const;
- void setMatrix(const QMatrix &mat);
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_X("Use transform()") inline const QMatrix &matrix() const;
+ QT_DEPRECATED_X("Use setTransform()") void setMatrix(const QMatrix &mat);
+#endif // QT_DEPRECATED_SINCE(5, 15)
inline QTransform transform() const;
void setTransform(const QTransform &);
@@ -157,7 +159,10 @@ struct QBrushData
inline Qt::BrushStyle QBrush::style() const { return d->style; }
inline const QColor &QBrush::color() const { return d->color; }
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_DEPRECATED_X("Use transform()")
inline const QMatrix &QBrush::matrix() const { return d->transform.toAffine(); }
+#endif // QT_DEPRECATED_SINCE(5, 15)
inline QTransform QBrush::transform() const { return d->transform; }
inline bool QBrush::isDetached() const { return d->ref.loadRelaxed() == 1; }
diff --git a/src/gui/painting/qmatrix.cpp b/src/gui/painting/qmatrix.cpp
index 890b0079de..7ebd2dbd09 100644
--- a/src/gui/painting/qmatrix.cpp
+++ b/src/gui/painting/qmatrix.cpp
@@ -45,6 +45,7 @@
#include "qregion.h"
#include "qpainterpath.h"
#include "qpainterpath_p.h"
+#include "qtransform.h"
#include "qvariant.h"
#include <qmath.h>
@@ -680,7 +681,7 @@ QRegion QMatrix::map(const QRegion &r) const
}
QPainterPath p = map(qt_regionToPath(r));
- return p.toFillPolygon().toPolygon();
+ return p.toFillPolygon(QTransform()).toPolygon();
}
/*!
diff --git a/src/gui/painting/qpaintengine.cpp b/src/gui/painting/qpaintengine.cpp
index 1785fcd12d..315bf0daf2 100644
--- a/src/gui/painting/qpaintengine.cpp
+++ b/src/gui/painting/qpaintengine.cpp
@@ -508,7 +508,7 @@ void QPaintEngine::drawEllipse(const QRectF &rect)
if (hasFeature(PainterPaths)) {
drawPath(path);
} else {
- QPolygonF polygon = path.toFillPolygon();
+ QPolygonF polygon = path.toFillPolygon(QTransform());
drawPolygon(polygon.data(), polygon.size(), ConvexMode);
}
}
diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h
index 9fb67e253e..e90020dbbf 100644
--- a/src/gui/painting/qpaintengine.h
+++ b/src/gui/painting/qpaintengine.h
@@ -273,7 +273,9 @@ public:
QBrush backgroundBrush() const;
Qt::BGMode backgroundMode() const;
QFont font() const;
- QMatrix matrix() const;
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_X("Use transform()") QMatrix matrix() const;
+#endif // QT_DEPRECATED_SINCE(5, 15)
QTransform transform() const;
Qt::ClipOperation clipOperation() const;
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index b0553a1ff9..390147463d 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -2555,19 +2555,19 @@ QRegion QPainter::clipRegion() const
case QPainterClipInfo::PathClip: {
QTransform matrix = (info.matrix * d->invMatrix);
if (lastWasNothing) {
- region = QRegion((info.path * matrix).toFillPolygon().toPolygon(),
+ region = QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(),
info.path.fillRule());
lastWasNothing = false;
continue;
}
if (info.operation == Qt::IntersectClip) {
- region &= QRegion((info.path * matrix).toFillPolygon().toPolygon(),
+ region &= QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(),
info.path.fillRule());
} else if (info.operation == Qt::NoClip) {
lastWasNothing = true;
region = QRegion();
} else {
- region = QRegion((info.path * matrix).toFillPolygon().toPolygon(),
+ region = QRegion((info.path * matrix).toFillPolygon(QTransform()).toPolygon(),
info.path.fillRule());
}
break;
@@ -8089,6 +8089,8 @@ QFont QPaintEngineState::font() const
\since 4.2
\obsolete
+ Use transform() instead.
+
Returns the matrix in the current paint engine
state.
diff --git a/src/gui/painting/qpainter.h b/src/gui/painting/qpainter.h
index 3394da63c7..77c6504d2e 100644
--- a/src/gui/painting/qpainter.h
+++ b/src/gui/painting/qpainter.h
@@ -72,7 +72,6 @@ class QPen;
class QPolygon;
class QTextItem;
class QTextEngine;
-class QMatrix;
class QTransform;
class QStaticText;
class QGlyphRun;
diff --git a/src/gui/painting/qpainter_p.h b/src/gui/painting/qpainter_p.h
index 285bd90502..dafd6e33be 100644
--- a/src/gui/painting/qpainter_p.h
+++ b/src/gui/painting/qpainter_p.h
@@ -59,7 +59,6 @@
#include "QtGui/qfont.h"
#include "QtGui/qpen.h"
#include "QtGui/qregion.h"
-#include "QtGui/qmatrix.h"
#include "QtGui/qpainter.h"
#include "QtGui/qpainterpath.h"
#include "QtGui/qpaintengine.h"
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp
index 17d8b863ab..ab60afd9cd 100644
--- a/src/gui/painting/qpainterpath.cpp
+++ b/src/gui/painting/qpainterpath.cpp
@@ -1660,13 +1660,18 @@ QList<QPolygonF> QPainterPath::toSubpathPolygons(const QTransform &matrix) const
return flatCurves;
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\overload
+ \obsolete
+
+ Use toSubpathPolygons(const QTransform &matrix) instead.
*/
QList<QPolygonF> QPainterPath::toSubpathPolygons(const QMatrix &matrix) const
{
return toSubpathPolygons(QTransform(matrix));
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Converts the path into a list of polygons using the
@@ -1787,13 +1792,18 @@ QList<QPolygonF> QPainterPath::toFillPolygons(const QTransform &matrix) const
return polys;
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\overload
+ \obsolete
+
+ Use toFillPolygons(const QTransform &matrix) instead.
*/
QList<QPolygonF> QPainterPath::toFillPolygons(const QMatrix &matrix) const
{
return toFillPolygons(QTransform(matrix));
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
//same as qt_polygon_isect_line in qpolygon.cpp
static void qt_painterpath_isect_line(const QPointF &p1,
@@ -2904,14 +2914,18 @@ QPolygonF QPainterPath::toFillPolygon(const QTransform &matrix) const
return polygon;
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\overload
+ \obsolete
+
+ Use toFillPolygon(const QTransform &matrix) instead.
*/
QPolygonF QPainterPath::toFillPolygon(const QMatrix &matrix) const
{
return toFillPolygon(QTransform(matrix));
}
-
+#endif // QT_DEPRECATED_SINCE(5, 15)
//derivative of the equation
static inline qreal slopeAt(qreal t, qreal a, qreal b, qreal c, qreal d)
diff --git a/src/gui/painting/qpainterpath.h b/src/gui/painting/qpainterpath.h
index ed5be667b7..26b92dc6fa 100644
--- a/src/gui/painting/qpainterpath.h
+++ b/src/gui/painting/qpainterpath.h
@@ -175,9 +175,15 @@ public:
bool isEmpty() const;
Q_REQUIRED_RESULT QPainterPath toReversed() const;
+
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_X("Use toSubpathPolygons(const QTransform &)")
QList<QPolygonF> toSubpathPolygons(const QMatrix &matrix = QMatrix()) const;
+ QT_DEPRECATED_X("Use toFillPolygons(const QTransform &")
QList<QPolygonF> toFillPolygons(const QMatrix &matrix = QMatrix()) const;
+ QT_DEPRECATED_X("Use toFillPolygon(const QTransform &)")
QPolygonF toFillPolygon(const QMatrix &matrix = QMatrix()) const;
+#endif // QT_DEPRECATED_SINCE(5, 15)
QList<QPolygonF> toSubpathPolygons(const QTransform &matrix) const;
QList<QPolygonF> toFillPolygons(const QTransform &matrix) const;
QPolygonF toFillPolygon(const QTransform &matrix) const;
diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h
index 57d70db442..4ff540e67b 100644
--- a/src/gui/painting/qpdf_p.h
+++ b/src/gui/painting/qpdf_p.h
@@ -55,7 +55,6 @@
#ifndef QT_NO_PDF
-#include "QtGui/qmatrix.h"
#include "QtCore/qstring.h"
#include "QtCore/qvector.h"
#include "private/qstroker_p.h"
diff --git a/src/gui/painting/qpolygon.cpp b/src/gui/painting/qpolygon.cpp
index 20337477b7..4fe819cae0 100644
--- a/src/gui/painting/qpolygon.cpp
+++ b/src/gui/painting/qpolygon.cpp
@@ -40,9 +40,9 @@
#include "qpolygon.h"
#include "qrect.h"
#include "qdatastream.h"
-#include "qmatrix.h"
#include "qdebug.h"
#include "qpainterpath.h"
+#include "qtransform.h"
#include "qvariant.h"
#include "qpainterpath_p.h"
#include "qbezier_p.h"
@@ -111,7 +111,7 @@ static void qt_polygon_isect_line(const QPointF &p1, const QPointF &p2, const QP
from a specified index (resizing the polygon if necessary).
QPolygon provides the boundingRect() and translate() functions for
- geometry functions. Use the QMatrix::map() function for more
+ geometry functions. Use the QTransform::map() function for more
general transformations of QPolygons.
The QPolygon class is \l {Implicit Data Sharing}{implicitly
@@ -495,7 +495,7 @@ QDebug operator<<(QDebug dbg, const QPolygon &a)
In addition to the functions provided by QVector, QPolygonF
provides the boundingRect() and translate() functions for geometry
- operations. Use the QMatrix::map() function for more general
+ operations. Use the QTransform::map() function for more general
transformations of QPolygonFs.
QPolygonF also provides the isClosed() function to determine
@@ -899,7 +899,7 @@ QPolygon QPolygon::united(const QPolygon &r) const
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
- return subject.united(clip).toFillPolygon().toPolygon();
+ return subject.united(clip).toFillPolygon(QTransform()).toPolygon();
}
/*!
@@ -918,7 +918,7 @@ QPolygon QPolygon::intersected(const QPolygon &r) const
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
- return subject.intersected(clip).toFillPolygon().toPolygon();
+ return subject.intersected(clip).toFillPolygon(QTransform()).toPolygon();
}
/*!
@@ -936,7 +936,7 @@ QPolygon QPolygon::subtracted(const QPolygon &r) const
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
- return subject.subtracted(clip).toFillPolygon().toPolygon();
+ return subject.subtracted(clip).toFillPolygon(QTransform()).toPolygon();
}
/*!
@@ -975,7 +975,7 @@ QPolygonF QPolygonF::united(const QPolygonF &r) const
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
- return subject.united(clip).toFillPolygon();
+ return subject.united(clip).toFillPolygon(QTransform());
}
/*!
@@ -994,7 +994,7 @@ QPolygonF QPolygonF::intersected(const QPolygonF &r) const
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
- return subject.intersected(clip).toFillPolygon();
+ return subject.intersected(clip).toFillPolygon(QTransform());
}
/*!
@@ -1011,7 +1011,7 @@ QPolygonF QPolygonF::subtracted(const QPolygonF &r) const
{
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
- return subject.subtracted(clip).toFillPolygon();
+ return subject.subtracted(clip).toFillPolygon(QTransform());
}
/*!
diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp
index 44ee038194..bac042c784 100644
--- a/src/gui/painting/qregion.cpp
+++ b/src/gui/painting/qregion.cpp
@@ -46,6 +46,7 @@
#include "qvarlengtharray.h"
#include "qimage.h"
#include "qbitmap.h"
+#include "qtransform.h"
#include <private/qdebug_p.h>
@@ -3916,7 +3917,7 @@ QRegion::QRegion(const QRect &r, RegionType t)
} else if (t == Ellipse) {
QPainterPath path;
path.addEllipse(r.x(), r.y(), r.width(), r.height());
- QPolygon a = path.toSubpathPolygons().at(0).toPolygon();
+ QPolygon a = path.toSubpathPolygons(QTransform()).at(0).toPolygon();
d->qt_rgn = PolygonRegion(a.constData(), a.size(), EvenOddRule);
}
}
diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp
index 279a817ff1..9d8bb0c3e2 100644
--- a/src/gui/painting/qtransform.cpp
+++ b/src/gui/painting/qtransform.cpp
@@ -311,8 +311,10 @@ QTransform::QTransform(qreal h11, qreal h12, qreal h21,
{
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
\fn QTransform::QTransform(const QMatrix &matrix)
+ \obsolete
Constructs a matrix that is a copy of the given \a matrix.
Note that the \c m13, \c m23, and \c m33 elements are set to 0, 0,
@@ -328,6 +330,7 @@ QTransform::QTransform(const QMatrix &mtx)
#endif
{
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Returns the adjoint of this matrix.
@@ -2082,7 +2085,9 @@ void QTransform::map(int x, int y, int *tx, int *ty) const
*ty = qRound(fy);
}
+#if QT_DEPRECATED_SINCE(5, 15)
/*!
+ \obsolete
Returns the QTransform as an affine matrix.
\warning If a perspective transformation has been specified,
@@ -2092,6 +2097,7 @@ const QMatrix &QTransform::toAffine() const
{
return affine;
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
/*!
Returns the transformation type of this matrix.
diff --git a/src/gui/painting/qtransform.h b/src/gui/painting/qtransform.h
index b2a634dd2a..485caa5140 100644
--- a/src/gui/painting/qtransform.h
+++ b/src/gui/painting/qtransform.h
@@ -73,7 +73,9 @@ public:
qreal h31, qreal h32, qreal h33 = 1.0);
QTransform(qreal h11, qreal h12, qreal h21,
qreal h22, qreal dx, qreal dy);
+#if QT_DEPRECATED_SINCE(5, 15)
explicit QTransform(const QMatrix &mtx);
+#endif // QT_DEPRECATED_SINCE(5, 15)
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
// ### Qt 6: remove; the compiler-generated ones are fine!
@@ -158,7 +160,9 @@ public:
void map(int x, int y, int *tx, int *ty) const;
void map(qreal x, qreal y, qreal *tx, qreal *ty) const;
+#if QT_DEPRECATED_SINCE(5, 15)
const QMatrix &toAffine() const;
+#endif // QT_DEPRECATED_SINCE(5, 15)
QTransform &operator*=(qreal div);
QTransform &operator/=(qreal div);
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index fd2644717e..1c7800358f 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -900,7 +900,7 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
uenv.venv = nullptr;
m_javaVM = nullptr;
- if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {
+ if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK) {
__android_log_print(ANDROID_LOG_FATAL, "Qt", "GetEnv failed");
return -1;
}
@@ -922,5 +922,5 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
if (threadSetter.thread())
threadSetter.thread()->setObjectName("QtMainLoopThread");
__android_log_print(ANDROID_LOG_INFO, "Qt", "qt started");
- return JNI_VERSION_1_4;
+ return JNI_VERSION_1_6;
}
diff --git a/src/plugins/platforms/wasm/qwasmclipboard.cpp b/src/plugins/platforms/wasm/qwasmclipboard.cpp
index fb46f1534f..f02c2c6ccb 100644
--- a/src/plugins/platforms/wasm/qwasmclipboard.cpp
+++ b/src/plugins/platforms/wasm/qwasmclipboard.cpp
@@ -29,6 +29,7 @@
#include "qwasmclipboard.h"
#include "qwasmwindow.h"
+#include "qwasmstring.h"
#include <emscripten.h>
#include <emscripten/html5.h>
@@ -40,22 +41,22 @@
using namespace emscripten;
// there has got to be a better way...
-static QByteArray g_clipboardArray;
-static QByteArray g_clipboardFormat;
+static QString g_clipboardText;
+static QString g_clipboardFormat;
static val getClipboardData()
{
- return val(g_clipboardArray.constData());
+ return QWasmString::fromQString(g_clipboardText);
}
static val getClipboardFormat()
{
- return val(g_clipboardFormat.constData());
+ return QWasmString::fromQString(g_clipboardFormat);
}
static void pasteClipboardData(emscripten::val format, emscripten::val dataPtr)
{
- QString formatString = QString::fromStdString(format.as<std::string>());
+ QString formatString = QWasmString::toQString(format);
QByteArray dataArray = QByteArray::fromStdString(dataPtr.as<std::string>());
QMimeData *mMimeData = new QMimeData;
mMimeData->setData(formatString, dataArray);
@@ -102,11 +103,10 @@ static void qClipboardPasteTo(val event)
bool hasClipboardApi = QWasmIntegration::get()->getWasmClipboard()->hasClipboardApi;
val clipdata = hasClipboardApi ?
val::global("Module").call<val>("qtGetClipboardData") :
- event["clipboardData"].call<val>("getData", std::string("text"));
+ event["clipboardData"].call<val>("getData", val("text"));
- const std::string data = clipdata.as<std::string>();
- if (data.length() > 0) {
- QString qstr = QString::fromStdString(data);
+ const QString qstr = QWasmString::toQString(clipdata);
+ if (qstr.length() > 0) {
QMimeData *mMimeData = new QMimeData;
mMimeData->setText(qstr);
QWasmClipboard::qWasmClipboardPaste(mMimeData);
@@ -133,7 +133,7 @@ QWasmClipboard::QWasmClipboard()
QWasmClipboard::~QWasmClipboard()
{
- g_clipboardArray.clear();
+ g_clipboardText.clear();
g_clipboardFormat.clear();
}
@@ -148,11 +148,11 @@ QMimeData* QWasmClipboard::mimeData(QClipboard::Mode mode)
void QWasmClipboard::setMimeData(QMimeData* mimeData, QClipboard::Mode mode)
{
if (mimeData->hasText()) {
- g_clipboardFormat = mimeData->formats().at(0).toUtf8();
- g_clipboardArray = mimeData->text().toUtf8();
+ g_clipboardFormat = mimeData->formats().at(0);
+ g_clipboardText = mimeData->text();
} else if (mimeData->hasHtml()) {
- g_clipboardFormat =mimeData->formats().at(0).toUtf8();
- g_clipboardArray = mimeData->html().toUtf8();
+ g_clipboardFormat = mimeData->formats().at(0);
+ g_clipboardText = mimeData->html();
}
QPlatformClipboard::setMimeData(mimeData, mode);
@@ -199,13 +199,13 @@ void QWasmClipboard::installEventHandlers(const QString &canvasId)
// Fallback path for browsers which do not support direct clipboard access
val document = val::global("document");
- val canvas = document.call<val>("getElementById", val(canvasId.toUtf8().constData()));
+ val canvas = document.call<val>("getElementById", QWasmString::fromQString(canvasId));
- canvas.call<void>("addEventListener", std::string("cut"),
+ canvas.call<void>("addEventListener", val("cut"),
val::module_property("qtClipboardCutTo"));
- canvas.call<void>("addEventListener", std::string("copy"),
+ canvas.call<void>("addEventListener", val("copy"),
val::module_property("qtClipboardCopyTo"));
- canvas.call<void>("addEventListener", std::string("paste"),
+ canvas.call<void>("addEventListener", val("paste"),
val::module_property("qtClipboardPasteTo"));
}
@@ -226,6 +226,6 @@ void QWasmClipboard::writeTextToClipboard()
val txt = module.call<val>("qtGetClipboardData");
val format = module.call<val>("qtGetClipboardFormat");
val navigator = val::global("navigator");
- navigator["clipboard"].call<void>("writeText", txt.as<std::string>());
+ navigator["clipboard"].call<void>("writeText", txt);
}
}
diff --git a/src/plugins/platforms/wasm/qwasmcursor.cpp b/src/plugins/platforms/wasm/qwasmcursor.cpp
index c04fa6441a..616456b2fa 100644
--- a/src/plugins/platforms/wasm/qwasmcursor.cpp
+++ b/src/plugins/platforms/wasm/qwasmcursor.cpp
@@ -29,6 +29,7 @@
#include "qwasmcursor.h"
#include "qwasmscreen.h"
+#include "qwasmstring.h"
#include <QtCore/qdebug.h>
#include <QtGui/qwindow.h>
@@ -56,11 +57,11 @@ void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
htmlCursorName = "auto";
// Set cursor on the canvas
- QByteArray canvasId = QWasmScreen::get(screen)->canvasId().toUtf8();
+ val jsCanvasId = QWasmString::fromQString(QWasmScreen::get(screen)->canvasId());
val document = val::global("document");
- val canvas = document.call<val>("getElementById", val(canvasId.constData()));
+ val canvas = document.call<val>("getElementById", jsCanvasId);
val canvasStyle = canvas["style"];
- canvasStyle.set("cursor", emscripten::val(htmlCursorName.constData()));
+ canvasStyle.set("cursor", val(htmlCursorName.constData()));
}
QByteArray QWasmCursor::cursorShapeToHtml(Qt::CursorShape shape)
diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
index d6ea147ccf..d99c202c48 100644
--- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
+++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp
@@ -32,6 +32,7 @@
#include "qwasmcompositor.h"
#include "qwasmintegration.h"
#include "qwasmclipboard.h"
+#include "qwasmstring.h"
#include <QtGui/qevent.h>
#include <qpa/qwindowsysteminterface.h>
@@ -355,9 +356,10 @@ void QWasmEventTranslator::initEventHandlers()
if (emscripten::val::global("window")["safari"].isUndefined()) {
val document = val::global("document");
- val canvas = document.call<val>("getElementById", val(canvasId));
+ val jsCanvasId = QWasmString::fromQString(screen()->canvasId());
+ val canvas = document.call<val>("getElementById", jsCanvasId);
canvas.call<void>("addEventListener",
- std::string("wheel"),
+ val("wheel"),
val::module_property("qtMouseWheelEvent"));
}
}
diff --git a/src/plugins/platforms/wasm/qwasmintegration.cpp b/src/plugins/platforms/wasm/qwasmintegration.cpp
index 1e9f68027c..fd53cd0bae 100644
--- a/src/plugins/platforms/wasm/qwasmintegration.cpp
+++ b/src/plugins/platforms/wasm/qwasmintegration.cpp
@@ -36,6 +36,7 @@
#include "qwasmclipboard.h"
#include "qwasmservices.h"
#include "qwasmoffscreensurface.h"
+#include "qwasmstring.h"
#include "qwasmwindow.h"
#ifndef QT_NO_OPENGL
@@ -67,19 +68,19 @@ static void browserBeforeUnload(emscripten::val)
static void addCanvasElement(emscripten::val canvas)
{
- QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
+ QString canvasId = QWasmString::toQString(canvas["id"]);
QWasmIntegration::get()->addScreen(canvasId);
}
static void removeCanvasElement(emscripten::val canvas)
{
- QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
+ QString canvasId = QWasmString::toQString(canvas["id"]);
QWasmIntegration::get()->removeScreen(canvasId);
}
static void resizeCanvasElement(emscripten::val canvas)
{
- QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
+ QString canvasId = QWasmString::toQString(canvas["id"]);
QWasmIntegration::get()->resizeScreen(canvasId);
}
@@ -115,11 +116,11 @@ QWasmIntegration::QWasmIntegration()
int screenCount = qtCanvaseElements["length"].as<int>();
for (int i = 0; i < screenCount; ++i) {
emscripten::val canvas = qtCanvaseElements[i].as<emscripten::val>();
- QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
+ QString canvasId = QWasmString::toQString(canvas["id"]);
addScreen(canvasId);
}
} else if (!canvas.isUndefined()){
- QString canvasId = QString::fromStdString(canvas["id"].as<std::string>());
+ QString canvasId = QWasmString::toQString(canvas["id"]);
addScreen(canvasId);
}
diff --git a/src/plugins/platforms/wasm/qwasmscreen.cpp b/src/plugins/platforms/wasm/qwasmscreen.cpp
index d50765e3fb..5e6f94b9ed 100644
--- a/src/plugins/platforms/wasm/qwasmscreen.cpp
+++ b/src/plugins/platforms/wasm/qwasmscreen.cpp
@@ -32,6 +32,8 @@
#include "qwasmeventtranslator.h"
#include "qwasmcompositor.h"
#include "qwasmintegration.h"
+#include "qwasmstring.h"
+
#include <emscripten/bind.h>
#include <emscripten/val.h>
@@ -186,7 +188,7 @@ void QWasmScreen::updateQScreenAndCanvasRenderSize()
QSizeF canvasSize = cssSize * devicePixelRatio();
val document = val::global("document");
- val canvas = document.call<val>("getElementById", val(canvasId.constData()));
+ val canvas = document.call<val>("getElementById", QWasmString::fromQString(m_canvasId));
canvas.set("width", canvasSize.width());
canvas.set("height", canvasSize.height());
diff --git a/src/plugins/platforms/wasm/qwasmservices.cpp b/src/plugins/platforms/wasm/qwasmservices.cpp
index 9328b8c065..4eee3fe972 100644
--- a/src/plugins/platforms/wasm/qwasmservices.cpp
+++ b/src/plugins/platforms/wasm/qwasmservices.cpp
@@ -28,6 +28,8 @@
****************************************************************************/
#include "qwasmservices.h"
+#include "qwasmstring.h"
+
#include <QtCore/QUrl>
#include <QtCore/QDebug>
@@ -37,8 +39,8 @@ QT_BEGIN_NAMESPACE
bool QWasmServices::openUrl(const QUrl &url)
{
- QByteArray utf8Url = url.toString().toUtf8();
- emscripten::val::global("window").call<void>("open", emscripten::val(utf8Url.constData()), emscripten::val("_blank"));
+ emscripten::val jsUrl = QWasmString::fromQString(url.toString());
+ emscripten::val::global("window").call<void>("open", jsUrl, emscripten::val("_blank"));
return true;
}
diff --git a/src/plugins/platforms/wasm/qwasmstring.cpp b/src/plugins/platforms/wasm/qwasmstring.cpp
new file mode 100644
index 0000000000..05b571c459
--- /dev/null
+++ b/src/plugins/platforms/wasm/qwasmstring.cpp
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwasmstring.h"
+
+QT_BEGIN_NAMESPACE
+
+using namespace emscripten;
+
+val QWasmString::fromQString(const QString &str)
+{
+ static const val UTF16ToString(
+ val::global("Module")["UTF16ToString"]);
+
+ auto ptr = quintptr(str.utf16());
+ return UTF16ToString(val(ptr));
+}
+
+QString QWasmString::toQString(const val &v)
+{
+ QString result;
+ if (!v.isString())
+ return result;
+
+ static const val stringToUTF16(
+ val::global("Module")["stringToUTF16"]);
+ static const val length("length");
+
+ result.resize(v[length].as<int>());
+ auto ptr = quintptr(result.utf16());
+ stringToUTF16(v, val(ptr));
+ return result;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/wasm/qwasmstring.h b/src/plugins/platforms/wasm/qwasmstring.h
new file mode 100644
index 0000000000..de5da92830
--- /dev/null
+++ b/src/plugins/platforms/wasm/qwasmstring.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <qstring.h>
+
+#include <emscripten/val.h>
+
+QT_BEGIN_NAMESPACE
+
+class QWasmString
+{
+public:
+ static emscripten::val fromQString(const QString &str);
+ static QString toQString(const emscripten::val &v);
+};
+QT_END_NAMESPACE
+
diff --git a/src/plugins/platforms/wasm/wasm.pro b/src/plugins/platforms/wasm/wasm.pro
index 9087c484d5..c8b28fb37d 100644
--- a/src/plugins/platforms/wasm/wasm.pro
+++ b/src/plugins/platforms/wasm/wasm.pro
@@ -23,7 +23,8 @@ SOURCES = \
qwasmtheme.cpp \
qwasmclipboard.cpp \
qwasmservices.cpp \
- qwasmoffscreensurface.cpp
+ qwasmoffscreensurface.cpp \
+ qwasmstring.cpp
HEADERS = \
qwasmintegration.h \
@@ -39,7 +40,8 @@ HEADERS = \
qwasmtheme.h \
qwasmclipboard.h \
qwasmservices.h \
- qwasmoffscreensurface.h
+ qwasmoffscreensurface.h \
+ qwasmstring.h
wasmfonts.files = \
../../../3rdparty/wasm/Vera.ttf \
diff --git a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
index 899e7f7c17..9ae8bd6c90 100644
--- a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
+++ b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
@@ -1025,7 +1025,7 @@ bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeDa
imgCopy = cachedPixmap.toImage();
if (themeData.rotate) {
- QMatrix rotMatrix;
+ QTransform rotMatrix;
rotMatrix.rotate(themeData.rotate);
imgCopy = imgCopy.transformed(rotMatrix);
}
diff --git a/src/printsupport/kernel/qprintengine_pdf_p.h b/src/printsupport/kernel/qprintengine_pdf_p.h
index e7ae21f260..c8d8f8e866 100644
--- a/src/printsupport/kernel/qprintengine_pdf_p.h
+++ b/src/printsupport/kernel/qprintengine_pdf_p.h
@@ -55,7 +55,6 @@
#ifndef QT_NO_PRINTER
#include "QtCore/qmap.h"
-#include "QtGui/qmatrix.h"
#include "QtCore/qstring.h"
#include "QtCore/qvector.h"
#include "QtGui/qpaintengine.h"
diff --git a/src/printsupport/widgets/qprintpreviewwidget.cpp b/src/printsupport/widgets/qprintpreviewwidget.cpp
index 92370be2bd..16b84e328d 100644
--- a/src/printsupport/widgets/qprintpreviewwidget.cpp
+++ b/src/printsupport/widgets/qprintpreviewwidget.cpp
@@ -264,7 +264,7 @@ void QPrintPreviewWidgetPrivate::_q_fit(bool doFitting)
} else {
graphicsView->fitInView(target, Qt::KeepAspectRatio);
if (zoomMode == QPrintPreviewWidget::FitInView) {
- int step = qRound(graphicsView->matrix().mapRect(target).height());
+ const int step = qRound(graphicsView->transform().mapRect(target).height());
graphicsView->verticalScrollBar()->setSingleStep(step);
graphicsView->verticalScrollBar()->setPageStep(step);
}
diff --git a/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp b/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp
index bba0487452..a45b5f409a 100644
--- a/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp
+++ b/src/sql/doc/snippets/sqldatabase/sqldatabase.cpp
@@ -249,16 +249,15 @@ void QSqlQueryModel_snippets()
}
//! [21]
- QSqlTableModel model;
- model.setTable("employee");
- model.select();
+ QSqlQueryModel model;
+ model.setQuery("SELECT name, salary FROM employee");
int salary = model.record(4).value("salary").toInt();
//! [21]
Q_UNUSED(salary);
{
//! [22]
- int salary = model.data(model.index(4, 2)).toInt();
+ int salary = model.data(model.index(4, 1)).toInt();
//! [22]
Q_UNUSED(salary);
}
@@ -308,7 +307,8 @@ void QSqlTableModel_snippets()
//! [25]
QSqlTableModel model;
model.setTable("employee");
- QString name = model.record(4).value("name").toString();
+ model.select();
+ int salary = model.record(4).value("salary").toInt();
//! [25]
}
}
diff --git a/src/sql/models/qsqlquerymodel.cpp b/src/sql/models/qsqlquerymodel.cpp
index c0b1061c6b..31d0ec985d 100644
--- a/src/sql/models/qsqlquerymodel.cpp
+++ b/src/sql/models/qsqlquerymodel.cpp
@@ -124,8 +124,8 @@ int QSqlQueryModelPrivate::columnInQuery(int modelColumn) const
\snippet sqldatabase/sqldatabase.cpp 21
The code snippet above extracts the \c salary field from record 4 in
- the result set of the query \c{SELECT * from employee}. Assuming
- that \c salary is column 2, we can rewrite the last line as follows:
+ the result set of the \c SELECT query. Since \c salary is the 2nd
+ column (or column index 1), we can rewrite the last line as follows:
\snippet sqldatabase/sqldatabase.cpp 22
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index 4d20915c09..941735767d 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -222,7 +222,7 @@ bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement,
QSqlTableModel can also be used to access a database
programmatically, without binding it to a view:
- \snippet sqldatabase/sqldatabase.cpp 21
+ \snippet sqldatabase/sqldatabase.cpp 25
The code snippet above extracts the \c salary field from record 4 in
the result set of the query \c{SELECT * from employee}.
diff --git a/src/widgets/doc/snippets/javastyle.cpp b/src/widgets/doc/snippets/javastyle.cpp
index 54a4ade921..1d18b45c37 100644
--- a/src/widgets/doc/snippets/javastyle.cpp
+++ b/src/widgets/doc/snippets/javastyle.cpp
@@ -380,10 +380,10 @@ void JavaStyle::drawControl(ControlElement control, const QStyleOption *option,
QRect rect = bar->rect;
if (bar->orientation == Qt::Vertical) {
rect = QRect(rect.left(), rect.top(), rect.height(), rect.width());
- QMatrix m;
+ QTransform m;
m.translate(rect.height()-1, 0);
m.rotate(90.0);
- painter->setMatrix(m);
+ painter->setTransform(m);
}
painter->setPen(bar->palette.color(QPalette::Mid));
diff --git a/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc
index 35bad6786a..50f626e7a6 100644
--- a/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc
+++ b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc
@@ -2543,6 +2543,18 @@
See also \l{#height-prop}{height}.
+ \row
+ \li \b -qt-background-role
+ \li \l{#paletterole}{PaletteRole}
+ \li The \c{background-color} for the subcontrol or widget based on the
+ chosen role.
+
+ \row
+ \li \b -qt-style-features
+ \li \c list
+ \li The list of CSS properties that you want to apply Qt-specific styles on.
+
+ \note The \c list can only include properties that are not pixmap-based.
\endtable
\target list of icons
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp
index 1cb24f74b6..bbcceb1ce6 100644
--- a/src/widgets/graphicsview/qgraphicsscene.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene.cpp
@@ -231,7 +231,6 @@
#include <QtWidgets/qgraphicslayout.h>
#include <QtWidgets/qgraphicsproxywidget.h>
#include <QtWidgets/qgraphicswidget.h>
-#include <QtGui/qmatrix.h>
#include <QtGui/qpaintengine.h>
#include <QtGui/qpainter.h>
#include <QtGui/qpixmapcache.h>
diff --git a/src/widgets/graphicsview/qgraphicsscene.h b/src/widgets/graphicsview/qgraphicsscene.h
index e72ed99a7b..e459b80970 100644
--- a/src/widgets/graphicsview/qgraphicsscene.h
+++ b/src/widgets/graphicsview/qgraphicsscene.h
@@ -47,7 +47,6 @@
#include <QtGui/qbrush.h>
#include <QtGui/qfont.h>
#include <QtGui/qtransform.h>
-#include <QtGui/qmatrix.h>
#include <QtGui/qpen.h>
QT_REQUIRE_CONFIG(graphicsview);
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp
index 102f3e894f..686b41960a 100644
--- a/src/widgets/graphicsview/qgraphicsview.cpp
+++ b/src/widgets/graphicsview/qgraphicsview.cpp
@@ -1795,7 +1795,13 @@ void QGraphicsView::setSceneRect(const QRectF &rect)
d->recalculateContentSize();
}
+#if QT_DEPRECATED_SINCE(5, 15)
+
/*!
+ \obsolete
+
+ Use transform() instead.
+
Returns the current transformation matrix for the view. If no current
transformation is set, the identity matrix is returned.
@@ -1808,6 +1814,10 @@ QMatrix QGraphicsView::matrix() const
}
/*!
+ \obsolete
+
+ Use setTransform() instead.
+
Sets the view's current transformation matrix to \a matrix.
If \a combine is true, then \a matrix is combined with the current matrix;
@@ -1839,6 +1849,10 @@ void QGraphicsView::setMatrix(const QMatrix &matrix, bool combine)
}
/*!
+ \obsolete
+
+ Use resetTransform() instead.
+
Resets the view transformation matrix to the identity matrix.
\sa resetTransform()
@@ -1848,6 +1862,8 @@ void QGraphicsView::resetMatrix()
resetTransform();
}
+#endif // QT_DEPRECATED_SINCE(5, 15)
+
/*!
Rotates the current view transformation \a angle degrees clockwise.
diff --git a/src/widgets/graphicsview/qgraphicsview.h b/src/widgets/graphicsview/qgraphicsview.h
index 1389796c3f..e98ec52d8f 100644
--- a/src/widgets/graphicsview/qgraphicsview.h
+++ b/src/widgets/graphicsview/qgraphicsview.h
@@ -165,9 +165,11 @@ public:
void setSceneRect(const QRectF &rect);
inline void setSceneRect(qreal x, qreal y, qreal w, qreal h);
- QMatrix matrix() const;
- void setMatrix(const QMatrix &matrix, bool combine = false);
- void resetMatrix();
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_X("Use transform()") QMatrix matrix() const;
+ QT_DEPRECATED_X("Use setTransform()") void setMatrix(const QMatrix &matrix, bool combine = false);
+ QT_DEPRECATED_X("Use resetTransform()") void resetMatrix();
+#endif // QT_DEPRECATED_SINCE(5, 15)
QTransform transform() const;
QTransform viewportTransform() const;
bool isTransformed() const;
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 68f6b72d20..129569a466 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -2124,7 +2124,8 @@ QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool
&& !(!next && focusProxy && test->isAncestorOf(focusProxy))
&& test->isVisibleTo(toplevel) && test->isEnabled()
&& !(w->windowType() == Qt::SubWindow && !w->isAncestorOf(test))
- && (toplevel->windowType() != Qt::SubWindow || toplevel->isAncestorOf(test))) {
+ && (toplevel->windowType() != Qt::SubWindow || toplevel->isAncestorOf(test))
+ && f != focusProxy) {
w = test;
if (seenWindow)
focusWidgetAfterWindow = true;
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index c241f7a936..1e5830d216 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -1556,7 +1556,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
qint64 maximum = qint64(pb->maximum);
qint64 progress = qint64(pb->progress);
- QMatrix m;
+ QTransform m;
if (vertical) {
rect = QRect(rect.y(), rect.x(), rect.height(), rect.width()); // flip width and height
diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp
index 497afd17e1..105eba370a 100644
--- a/src/widgets/styles/qwindowsstyle.cpp
+++ b/src/widgets/styles/qwindowsstyle.cpp
@@ -1692,7 +1692,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
const bool vertical = pb->orientation == Qt::Vertical;
const bool inverted = pb->invertedAppearance;
- QMatrix m;
+ QTransform m;
if (vertical) {
rect = QRect(rect.y(), rect.x(), rect.height(), rect.width()); // flip width and height
m.rotate(90);
diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp
index 29d28847f3..7c26b8cc42 100644
--- a/src/widgets/widgets/qabstractbutton.cpp
+++ b/src/widgets/widgets/qabstractbutton.cpp
@@ -414,8 +414,13 @@ void QAbstractButtonPrivate::emitClicked()
emit q->clicked(checked);
#if QT_CONFIG(buttongroup)
if (guard && group) {
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
emit group->buttonClicked(group->id(q));
if (guard && group)
+QT_WARNING_POP
+#endif
emit group->buttonClicked(q);
}
#endif
@@ -428,8 +433,13 @@ void QAbstractButtonPrivate::emitPressed()
emit q->pressed();
#if QT_CONFIG(buttongroup)
if (guard && group) {
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
emit group->buttonPressed(group->id(q));
if (guard && group)
+QT_WARNING_POP
+#endif
emit group->buttonPressed(q);
}
#endif
@@ -442,8 +452,13 @@ void QAbstractButtonPrivate::emitReleased()
emit q->released();
#if QT_CONFIG(buttongroup)
if (guard && group) {
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
emit group->buttonReleased(group->id(q));
if (guard && group)
+QT_WARNING_POP
+#endif
emit group->buttonReleased(q);
}
#endif
@@ -456,8 +471,13 @@ void QAbstractButtonPrivate::emitToggled(bool checked)
emit q->toggled(checked);
#if QT_CONFIG(buttongroup)
if (guard && group) {
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
emit group->buttonToggled(group->id(q), checked);
if (guard && group)
+QT_WARNING_POP
+#endif
emit group->buttonToggled(q, checked);
}
#endif
diff --git a/src/widgets/widgets/qbuttongroup.cpp b/src/widgets/widgets/qbuttongroup.cpp
index c3fd37d8e9..9162029cdb 100644
--- a/src/widgets/widgets/qbuttongroup.cpp
+++ b/src/widgets/widgets/qbuttongroup.cpp
@@ -164,6 +164,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonClicked(int id)
+ \obsolete
This signal is emitted when a button with the given \a id is
clicked.
@@ -183,6 +184,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonPressed(int id)
\since 4.2
+ \obsolete
This signal is emitted when a button with the given \a id is
pressed down.
@@ -202,6 +204,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonReleased(int id)
\since 4.2
+ \obsolete
This signal is emitted when a button with the given \a id is
released.
@@ -222,6 +225,7 @@ void QButtonGroup::setExclusive(bool exclusive)
/*!
\fn void QButtonGroup::buttonToggled(int id, bool checked)
\since 5.2
+ \obsolete
This signal is emitted when a button with the given \a id is toggled.
\a checked is true if the button is checked, or false if the button is unchecked.
diff --git a/src/widgets/widgets/qbuttongroup.h b/src/widgets/widgets/qbuttongroup.h
index fec94ccb3e..2989dcb4ba 100644
--- a/src/widgets/widgets/qbuttongroup.h
+++ b/src/widgets/widgets/qbuttongroup.h
@@ -78,13 +78,19 @@ public:
Q_SIGNALS:
void buttonClicked(QAbstractButton *);
- void buttonClicked(int);
void buttonPressed(QAbstractButton *);
- void buttonPressed(int);
void buttonReleased(QAbstractButton *);
- void buttonReleased(int);
void buttonToggled(QAbstractButton *, bool);
+#if QT_DEPRECATED_SINCE(5, 15)
+ QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonClicked(QAbstractButton *) instead")
+ void buttonClicked(int);
+ QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonPressed(QAbstractButton *) instead")
+ void buttonPressed(int);
+ QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonReleased(QAbstractButton *) instead")
+ void buttonReleased(int);
+ QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonToggled(QAbstractButton *, bool) instead")
void buttonToggled(int, bool);
+#endif
private:
Q_DISABLE_COPY(QButtonGroup)
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 53a711adc4..9789004473 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -293,8 +293,7 @@ void QComboBoxPrivate::_q_modelReset()
lineEdit->setText(QString());
updateLineEditGeometry();
}
- if (currentIndex.row() != indexBeforeChange)
- _q_emitCurrentIndexChanged(currentIndex);
+ trySetValidIndex();
modelChanged();
q->update();
}
@@ -304,6 +303,25 @@ void QComboBoxPrivate::_q_modelDestroyed()
model = QAbstractItemModelPrivate::staticEmptyModel();
}
+void QComboBoxPrivate::trySetValidIndex()
+{
+ Q_Q(QComboBox);
+ bool currentReset = false;
+
+ const int rowCount = q->count();
+ for (int pos = 0; pos < rowCount; ++pos) {
+ const QModelIndex idx(model->index(pos, modelColumn, root));
+ if (idx.flags() & Qt::ItemIsEnabled) {
+ setCurrentIndex(idx);
+ currentReset = true;
+ break;
+ }
+ }
+
+ if (!currentReset)
+ setCurrentIndex(QModelIndex());
+}
+
QRect QComboBoxPrivate::popupGeometry(int screen) const
{
return QStylePrivate::useFullScreenForPopup()
@@ -2202,20 +2220,7 @@ void QComboBox::setModel(QAbstractItemModel *model)
setRootModelIndex(QModelIndex());
- bool currentReset = false;
-
- const int rowCount = count();
- for (int pos=0; pos < rowCount; pos++) {
- if (d->model->index(pos, d->modelColumn, d->root).flags() & Qt::ItemIsEnabled) {
- setCurrentIndex(pos);
- currentReset = true;
- break;
- }
- }
-
- if (!currentReset)
- setCurrentIndex(-1);
-
+ d->trySetValidIndex();
d->modelChanged();
}
diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h
index 7a3fcf6e0f..3e78e756a6 100644
--- a/src/widgets/widgets/qcombobox_p.h
+++ b/src/widgets/widgets/qcombobox_p.h
@@ -371,6 +371,7 @@ public:
void _q_rowsRemoved(const QModelIndex &parent, int start, int end);
void updateArrow(QStyle::StateFlag state);
bool updateHoverControl(const QPoint &pos);
+ void trySetValidIndex();
QRect popupGeometry(int screen = -1) const;
QStyle::SubControl newHoverControl(const QPoint &pos);
int computeWidthHint() const;
diff --git a/src/widgets/widgets/qscrollarea.cpp b/src/widgets/widgets/qscrollarea.cpp
index ce08e3439a..f7a4f8e446 100644
--- a/src/widgets/widgets/qscrollarea.cpp
+++ b/src/widgets/widgets/qscrollarea.cpp
@@ -490,14 +490,14 @@ void QScrollArea::ensureWidgetVisible(QWidget *childWidget, int xmargin, int yma
if (focusRect.width() > visibleRect.width())
d->hbar->setValue(focusRect.center().x() - d->viewport->width() / 2);
else if (focusRect.right() > visibleRect.right())
- d->hbar->setValue(focusRect.right() - d->viewport->width());
+ d->hbar->setValue(focusRect.right() - d->viewport->width() + 1);
else if (focusRect.left() < visibleRect.left())
d->hbar->setValue(focusRect.left());
if (focusRect.height() > visibleRect.height())
d->vbar->setValue(focusRect.center().y() - d->viewport->height() / 2);
else if (focusRect.bottom() > visibleRect.bottom())
- d->vbar->setValue(focusRect.bottom() - d->viewport->height());
+ d->vbar->setValue(focusRect.bottom() - d->viewport->height() + 1);
else if (focusRect.top() < visibleRect.top())
d->vbar->setValue(focusRect.top());
}
diff --git a/src/widgets/widgets/qspinbox.cpp b/src/widgets/widgets/qspinbox.cpp
index 08428f673e..cbd600ec6c 100644
--- a/src/widgets/widgets/qspinbox.cpp
+++ b/src/widgets/widgets/qspinbox.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWidgets module of the Qt Toolkit.
@@ -1168,11 +1168,11 @@ QVariant QSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
} else {
num = locale.toInt(copy, &ok);
if (!ok && (max >= 1000 || min <= -1000)) {
- const QChar sep = locale.groupSeparator();
- const QChar doubleSep[2] = {sep, sep};
- if (copy.contains(sep) && !copy.contains(QString(doubleSep, 2))) {
+ const QString sep(locale.groupSeparator());
+ const QString doubleSep = sep + sep;
+ if (copy.contains(sep) && !copy.contains(doubleSep)) {
QString copy2 = copy;
- copy2.remove(locale.groupSeparator());
+ copy2.remove(sep);
num = locale.toInt(copy2, &ok);
}
}
@@ -1314,6 +1314,10 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
const bool plus = max >= 0;
const bool minus = min <= 0;
+ const QString group(locale.groupSeparator());
+ const uint groupUcs = (group.size() > 1 && group.at(0).isHighSurrogate()
+ ? QChar::surrogateToUcs4(group.at(0), group.at(1))
+ : group.at(0).unicode());
switch (len) {
case 0:
state = max != min ? QValidator::Intermediate : QValidator::Invalid;
@@ -1360,14 +1364,15 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
}
}
} else {
- const QChar last = copy.at(len - 1);
- const QChar secondLast = copy.at(len - 2);
- if ((last == locale.groupSeparator() || last.isSpace())
- && (secondLast == locale.groupSeparator() || secondLast.isSpace())) {
+ const QChar last = copy.back();
+ const bool groupEnd = copy.endsWith(group);
+ const QStringView head(copy.constData(), groupEnd ? len - group.size() : len - 1);
+ const QChar secondLast = head.back();
+ if ((groupEnd || last.isSpace()) && (head.endsWith(group) || secondLast.isSpace())) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
- } else if (last.isSpace() && (!locale.groupSeparator().isSpace() || secondLast.isSpace())) {
+ } else if (last.isSpace() && (!QChar::isSpace(groupUcs) || secondLast.isSpace())) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
@@ -1381,26 +1386,31 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
QSBDEBUG() << __FILE__ << __LINE__ << locale << copy << num << ok;
if (!ok) {
- if (locale.groupSeparator().isPrint()) {
- if (max < 1000 && min > -1000 && copy.contains(locale.groupSeparator())) {
+ if (QChar::isPrint(groupUcs)) {
+ if (max < 1000 && min > -1000 && copy.contains(group)) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
}
const int len = copy.size();
- for (int i=0; i<len- 1; ++i) {
- if (copy.at(i) == locale.groupSeparator() && copy.at(i + 1) == locale.groupSeparator()) {
- QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
- state = QValidator::Invalid;
- goto end;
+ for (int i = 0; i < len - 1;) {
+ if (QStringView(copy).mid(i).startsWith(group)) {
+ if (QStringView(copy).mid(i + group.size()).startsWith(group)) {
+ QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
+ state = QValidator::Invalid;
+ goto end;
+ }
+ i += group.size();
+ } else {
+ i++;
}
}
QString copy2 = copy;
- copy2.remove(locale.groupSeparator());
+ copy2.remove(group);
num = locale.toDouble(copy2, &ok);
- QSBDEBUG() << locale.groupSeparator() << num << copy2 << ok;
+ QSBDEBUG() << group << num << copy2 << ok;
if (!ok) {
state = QValidator::Invalid;
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index 49a1a02867..3da7e365c8 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -992,12 +992,12 @@ void QWidgetTextControl::selectAll()
void QWidgetTextControl::processEvent(QEvent *e, const QPointF &coordinateOffset, QWidget *contextWidget)
{
- QMatrix m;
- m.translate(coordinateOffset.x(), coordinateOffset.y());
- processEvent(e, m, contextWidget);
+ QTransform t;
+ t.translate(coordinateOffset.x(), coordinateOffset.y());
+ processEvent(e, t, contextWidget);
}
-void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget *contextWidget)
+void QWidgetTextControl::processEvent(QEvent *e, const QTransform &transform, QWidget *contextWidget)
{
Q_D(QWidgetTextControl);
if (d->interactionFlags == Qt::NoTextInteraction) {
@@ -1038,22 +1038,22 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
break;
case QEvent::MouseButtonPress: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
- d->mousePressEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
+ d->mousePressEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::MouseMove: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
- d->mouseMoveEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
+ d->mouseMoveEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::MouseButtonRelease: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
- d->mouseReleaseEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
+ d->mouseReleaseEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::MouseButtonDblClick: {
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
- d->mouseDoubleClickEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
+ d->mouseDoubleClickEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(),
ev->buttons(), ev->globalPos());
break; }
case QEvent::InputMethod:
@@ -1062,7 +1062,7 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
#ifndef QT_NO_CONTEXTMENU
case QEvent::ContextMenu: {
QContextMenuEvent *ev = static_cast<QContextMenuEvent *>(e);
- d->contextMenuEvent(ev->globalPos(), matrix.map(ev->pos()), contextWidget);
+ d->contextMenuEvent(ev->globalPos(), transform.map(ev->pos()), contextWidget);
break; }
#endif // QT_NO_CONTEXTMENU
case QEvent::FocusIn:
@@ -1077,7 +1077,7 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
#ifndef QT_NO_TOOLTIP
case QEvent::ToolTip: {
QHelpEvent *ev = static_cast<QHelpEvent *>(e);
- d->showToolTip(ev->globalPos(), matrix.map(ev->pos()), contextWidget);
+ d->showToolTip(ev->globalPos(), transform.map(ev->pos()), contextWidget);
break;
}
#endif // QT_NO_TOOLTIP
@@ -1094,13 +1094,13 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
break;
case QEvent::DragMove: {
QDragMoveEvent *ev = static_cast<QDragMoveEvent *>(e);
- if (d->dragMoveEvent(e, ev->mimeData(), matrix.map(ev->pos())))
+ if (d->dragMoveEvent(e, ev->mimeData(), transform.map(ev->pos())))
ev->acceptProposedAction();
break;
}
case QEvent::Drop: {
QDropEvent *ev = static_cast<QDropEvent *>(e);
- if (d->dropEvent(ev->mimeData(), matrix.map(ev->pos()), ev->dropAction(), ev->source()))
+ if (d->dropEvent(ev->mimeData(), transform.map(ev->pos()), ev->dropAction(), ev->source()))
ev->acceptProposedAction();
break;
}
@@ -1109,32 +1109,32 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
#if QT_CONFIG(graphicsview)
case QEvent::GraphicsSceneMousePress: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
- d->mousePressEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
+ d->mousePressEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneMouseMove: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
- d->mouseMoveEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
+ d->mouseMoveEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneMouseRelease: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
- d->mouseReleaseEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
+ d->mouseReleaseEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneMouseDoubleClick: {
QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
- d->mouseDoubleClickEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
+ d->mouseDoubleClickEvent(ev, ev->button(), transform.map(ev->pos()), ev->modifiers(), ev->buttons(),
ev->screenPos());
break; }
case QEvent::GraphicsSceneContextMenu: {
QGraphicsSceneContextMenuEvent *ev = static_cast<QGraphicsSceneContextMenuEvent *>(e);
- d->contextMenuEvent(ev->screenPos(), matrix.map(ev->pos()), contextWidget);
+ d->contextMenuEvent(ev->screenPos(), transform.map(ev->pos()), contextWidget);
break; }
case QEvent::GraphicsSceneHoverMove: {
QGraphicsSceneHoverEvent *ev = static_cast<QGraphicsSceneHoverEvent *>(e);
- d->mouseMoveEvent(ev, Qt::NoButton, matrix.map(ev->pos()), ev->modifiers(),Qt::NoButton,
+ d->mouseMoveEvent(ev, Qt::NoButton, transform.map(ev->pos()), ev->modifiers(),Qt::NoButton,
ev->screenPos());
break; }
@@ -1148,12 +1148,12 @@ void QWidgetTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget
break;
case QEvent::GraphicsSceneDragMove: {
QGraphicsSceneDragDropEvent *ev = static_cast<QGraphicsSceneDragDropEvent *>(e);
- if (d->dragMoveEvent(e, ev->mimeData(), matrix.map(ev->pos())))
+ if (d->dragMoveEvent(e, ev->mimeData(), transform.map(ev->pos())))
ev->acceptProposedAction();
break; }
case QEvent::GraphicsSceneDrop: {
QGraphicsSceneDragDropEvent *ev = static_cast<QGraphicsSceneDragDropEvent *>(e);
- if (d->dropEvent(ev->mimeData(), matrix.map(ev->pos()), ev->dropAction(), ev->source()))
+ if (d->dropEvent(ev->mimeData(), transform.map(ev->pos()), ev->dropAction(), ev->source()))
ev->accept();
break; }
#endif // QT_CONFIG(graphicsview)
diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h
index 1f06aa0b97..c445ecaf80 100644
--- a/src/widgets/widgets/qwidgettextcontrol_p.h
+++ b/src/widgets/widgets/qwidgettextcontrol_p.h
@@ -252,7 +252,7 @@ public:
QPalette palette() const;
void setPalette(const QPalette &pal);
- virtual void processEvent(QEvent *e, const QMatrix &matrix, QWidget *contextWidget = nullptr);
+ virtual void processEvent(QEvent *e, const QTransform &transform, QWidget *contextWidget = nullptr);
void processEvent(QEvent *e, const QPointF &coordinateOffset = QPointF(), QWidget *contextWidget = nullptr);
// control methods
diff --git a/tests/auto/corelib/animation/qparallelanimationgroup/BLACKLIST b/tests/auto/corelib/animation/qparallelanimationgroup/BLACKLIST
index 3e42a737df..9172149e33 100644
--- a/tests/auto/corelib/animation/qparallelanimationgroup/BLACKLIST
+++ b/tests/auto/corelib/animation/qparallelanimationgroup/BLACKLIST
@@ -1,2 +1,2 @@
[deleteChildrenWithRunningGroup]
-osx-10.13
+macos
diff --git a/tests/auto/corelib/animation/qpauseanimation/BLACKLIST b/tests/auto/corelib/animation/qpauseanimation/BLACKLIST
index 33cd53d788..714df08b18 100644
--- a/tests/auto/corelib/animation/qpauseanimation/BLACKLIST
+++ b/tests/auto/corelib/animation/qpauseanimation/BLACKLIST
@@ -1,5 +1,6 @@
[pauseAndPropertyAnimations]
-osx
+macos
[multipleSequentialGroups]
-osx
-
+macos
+[noTimerUpdates]
+macos
diff --git a/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST b/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST
index e516c0e826..f07c0ec4a1 100644
--- a/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST
+++ b/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST
@@ -1,6 +1,6 @@
[finishWithUncontrolledAnimation]
windows-10 msvc-2015
-osx-10.13
+macos
[groupWithZeroDurationAnimations]
-osx-10.13
+macos
diff --git a/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST b/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST
index 569880e1db..2317cf886c 100644
--- a/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST
+++ b/tests/auto/corelib/kernel/qelapsedtimer/BLACKLIST
@@ -1,3 +1,3 @@
[elapsed]
-osx-10.13
+macos
windows-10
diff --git a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
index d402e3f63b..29cff8b469 100644
--- a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
+++ b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
@@ -3298,7 +3298,10 @@ void tst_QDataStream::streamRealDataTypes()
QCOMPARE(col, color);
stream >> rGrad;
QCOMPARE(rGrad.style(), radialBrush.style());
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
QCOMPARE(rGrad.matrix(), radialBrush.matrix());
+QT_WARNING_POP
QCOMPARE(rGrad.gradient()->type(), radialBrush.gradient()->type());
QCOMPARE(rGrad.gradient()->stops(), radialBrush.gradient()->stops());
QCOMPARE(rGrad.gradient()->spread(), radialBrush.gradient()->spread());
@@ -3307,7 +3310,10 @@ void tst_QDataStream::streamRealDataTypes()
QCOMPARE(((QRadialGradient *)rGrad.gradient())->radius(), ((QRadialGradient *)radialBrush.gradient())->radius());
stream >> cGrad;
QCOMPARE(cGrad.style(), conicalBrush.style());
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
QCOMPARE(cGrad.matrix(), conicalBrush.matrix());
+QT_WARNING_POP
QCOMPARE(cGrad.gradient()->type(), conicalBrush.gradient()->type());
QCOMPARE(cGrad.gradient()->stops(), conicalBrush.gradient()->stops());
QCOMPARE(cGrad.gradient()->spread(), conicalBrush.gradient()->spread());
diff --git a/tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.ref b/tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.ref
new file mode 100644
index 0000000000..a578de8bb4
--- /dev/null
+++ b/tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.ref
@@ -0,0 +1,8003 @@
+StartDocument( )
+Invalid( name="a" qualifiedName="a"
+ Attribute( name="b" qualifiedName="b" value="1" )
+
+ Attribute( name="b" qualifiedName="b" value="2" )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+
+ Attribute( )
+ )
+ERROR: Attribute 'b' redefined.
diff --git a/tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.xml b/tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.xml
new file mode 100644
index 0000000000..5f8b1003e9
--- /dev/null
+++ b/tests/auto/corelib/serialization/qxmlstream/data/duplicatedattributes.xml
@@ -0,0 +1,1002 @@
+<a
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+b="1" b="2" b="3" b="4"
+/>
diff --git a/tests/auto/corelib/thread/qsemaphore/BLACKLIST b/tests/auto/corelib/thread/qsemaphore/BLACKLIST
index d7af5c420b..f7f6d5149c 100644
--- a/tests/auto/corelib/thread/qsemaphore/BLACKLIST
+++ b/tests/auto/corelib/thread/qsemaphore/BLACKLIST
@@ -2,9 +2,7 @@
osx
[tryAcquireWithTimeout:0.2s]
windows
-osx-10.12
-osx-10.13
+macos
[tryAcquireWithTimeout:2s]
windows
-osx-10.12
-osx-10.13
+macos
diff --git a/tests/auto/corelib/tools/qtimeline/BLACKLIST b/tests/auto/corelib/tools/qtimeline/BLACKLIST
index 9794b0059f..961147a3cf 100644
--- a/tests/auto/corelib/tools/qtimeline/BLACKLIST
+++ b/tests/auto/corelib/tools/qtimeline/BLACKLIST
@@ -2,6 +2,5 @@
windows-10 msvc-2015
osx
[frameRate]
-osx-10.12
-osx-10.13
+macos
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index bc964e0d5c..71aaa23da4 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -32,7 +32,7 @@
#include <qimage.h>
#include <qimagereader.h>
#include <qlist.h>
-#include <qmatrix.h>
+#include <qtransform.h>
#include <qrandom.h>
#include <stdio.h>
@@ -1204,7 +1204,7 @@ void tst_QImage::rotate()
// original.save("rotated90_original.png", "png");
// Initialize the matrix manually (do not use rotate) to avoid rounding errors
- QMatrix matRotate90;
+ QTransform matRotate90;
matRotate90.rotate(degrees);
QImage dest = original;
// And rotate it 4 times, then the image should be identical to the original
@@ -1218,7 +1218,7 @@ void tst_QImage::rotate()
// dest.save("rotated90_result.png","png");
QCOMPARE(original, dest);
- // Test with QMatrix::rotate 90 also, since we trust that now
+ // Test with QTransform::rotate 90 also, since we trust that now
matRotate90.rotate(degrees);
dest = original;
// And rotate it 4 times, then the image should be identical to the original
diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
index ba5df809f2..1d77f70919 100644
--- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
@@ -32,7 +32,6 @@
#include <qbitmap.h>
#include <qimage.h>
#include <qimagereader.h>
-#include <qmatrix.h>
#ifndef QT_NO_WIDGETS
#include <qdesktopwidget.h>
#include <qsplashscreen.h>
diff --git a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
index 2645bb111e..d60d6643b2 100644
--- a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
+++ b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
@@ -197,9 +197,14 @@ template<> struct TestValueFactory<QMetaType::QTextLength> {
template<> struct TestValueFactory<QMetaType::QTextFormat> {
static QTextFormat *create() { return new QTextFormat(QTextFormat::FrameFormat); }
};
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
template<> struct TestValueFactory<QMetaType::QMatrix> {
static QMatrix *create() { return new QMatrix(10, 20, 30, 40, 50, 60); }
};
+QT_WARNING_POP
+#endif
template<> struct TestValueFactory<QMetaType::QTransform> {
static QTransform *create() { return new QTransform(10, 20, 30, 40, 50, 60); }
};
diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
index 0b9fc3c9ae..8b301c145a 100644
--- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
+++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
@@ -402,6 +402,9 @@ void tst_QGuiVariant::toString()
QCOMPARE( str, result );
}
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QGuiVariant::matrix()
{
QVariant variant;
@@ -414,6 +417,8 @@ void tst_QGuiVariant::matrix()
QVERIFY(mmatrix);
QMetaType::destroy(QVariant::Matrix, mmatrix);
}
+QT_WARNING_POP
+#endif
void tst_QGuiVariant::matrix4x4()
{
diff --git a/tests/auto/gui/kernel/qwindow/BLACKLIST b/tests/auto/gui/kernel/qwindow/BLACKLIST
index 27463adf99..44a55316ab 100644
--- a/tests/auto/gui/kernel/qwindow/BLACKLIST
+++ b/tests/auto/gui/kernel/qwindow/BLACKLIST
@@ -2,10 +2,10 @@
opensuse-leap
[positioning:default]
linux
-osx-10.12 ci
+macos ci
winrt
[positioning:fake]
-osx-10.12 ci
+macos ci
[modalWithChildWindow]
# QTBUG-66851
# QTBUG-69160
diff --git a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
index e19f76d830..3c4f2f2e75 100644
--- a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
+++ b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
@@ -3061,6 +3061,9 @@ void tst_QMatrixNxN::columnsAndRows()
QVERIFY(m1.row(3) == QVector4D(4, 8, 12, 16));
}
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
// Test converting QMatrix objects into QMatrix4x4 and then
// checking that transformations in the original perform the
// equivalent transformations in the new matrix.
@@ -3107,6 +3110,8 @@ void tst_QMatrixNxN::convertQMatrix()
QVERIFY(qFuzzyCompare(float(m5.dx()), float(m7.dx())));
QVERIFY(qFuzzyCompare(float(m5.dy()), float(m7.dy())));
}
+QT_WARNING_POP
+#endif
// Test converting QTransform objects into QMatrix4x4 and then
// checking that transformations in the original perform the
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index e05de64be5..9eb62ceab2 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -1704,8 +1704,11 @@ void tst_QPainter::combinedMatrix()
QTransform ct = p.combinedTransform();
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
QMatrix cm = p.combinedMatrix();
QCOMPARE(cm, ct.toAffine());
+QT_WARNING_POP
#endif
QPointF pt = QPointF(0, 0) * ct.toAffine();
@@ -2245,7 +2248,7 @@ void tst_QPainter::clippedPolygon()
{
QFETCH(QSize, imageSize);
QFETCH(QPainterPath, path);
- QPolygonF polygon = path.toFillPolygon();
+ QPolygonF polygon = path.toFillPolygon(QTransform());
QFETCH(QRect, clipRect);
QPainterPath clipPath;
clipPath.addRect(clipRect);
@@ -3066,7 +3069,7 @@ void tst_QPainter::fpe_steepSlopes_data()
const qreal dsin = 0.000014946676875461832484392500630665523431162000633776187896728515625;
const qreal dcos = 0.9999999998882984630910186751862056553363800048828125;
- const QTransform transform = QTransform(QMatrix(dcos, dsin, -dsin, dcos, 64, 64));
+ const QTransform transform = QTransform(dcos, dsin, -dsin, dcos, 64, 64);
const QLineF line(2, 2, 2, 6);
QTest::newRow("task 207147 aa") << transform << line << true;
@@ -4064,7 +4067,7 @@ void tst_QPainter::drawPolygon()
path.moveTo(2, 34);
path.lineTo(34, 2);
- QPolygonF poly = stroker.createStroke(path).toFillPolygon();
+ QPolygonF poly = stroker.createStroke(path).toFillPolygon(QTransform());
img.fill(0xffffffff);
QPainter p(&img);
@@ -4133,7 +4136,10 @@ void tst_QPainter::inactivePainter()
p.setClipping(true);
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.combinedMatrix();
+QT_WARNING_POP
#endif
p.combinedTransform();
@@ -4142,7 +4148,10 @@ void tst_QPainter::inactivePainter()
p.device();
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.deviceMatrix();
+QT_WARNING_POP
#endif
p.deviceTransform();
@@ -4168,7 +4177,10 @@ void tst_QPainter::inactivePainter()
p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, false);
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.resetMatrix();
+QT_WARNING_POP
#endif
p.resetTransform();
p.rotate(1);
@@ -4186,8 +4198,11 @@ void tst_QPainter::inactivePainter()
p.setWindow(QRect(10, 10, 620, 460));
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.worldMatrix();
p.setWorldMatrix(QMatrix().translate(43, 21), true);
+QT_WARNING_POP
#endif
p.setWorldMatrixEnabled(true);
diff --git a/tests/auto/gui/painting/qpathclipper/paths.cpp b/tests/auto/gui/painting/qpathclipper/paths.cpp
index 1328befd1b..a814958394 100644
--- a/tests/auto/gui/painting/qpathclipper/paths.cpp
+++ b/tests/auto/gui/painting/qpathclipper/paths.cpp
@@ -713,9 +713,5 @@ QPainterPath Paths::bezierQuadrant()
path.closeSubpath();
}
- QMatrix m(2, 0,
- 0, 2,
- 0, 0);
-
return path;
}
diff --git a/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp b/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
index 93035af7d3..01853d841a 100644
--- a/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
+++ b/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
@@ -152,9 +152,9 @@ void tst_QPathClipper::initTestCase()
for (int i = 0; i < paths.size(); ++i) {
QRectF bounds = paths[i].boundingRect();
- QMatrix m(1, 0,
- 0, 1,
- -bounds.center().x(), -bounds.center().y());
+ QTransform m(1, 0,
+ 0, 1,
+ -bounds.center().x(), -bounds.center().y());
paths[i] = m.map(paths[i]);
}
diff --git a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
index f9366c9227..78638a7518 100644
--- a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
+++ b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
@@ -331,17 +331,13 @@ void tst_QTransform::mapToPolygon()
void tst_QTransform::qhash()
{
- QMatrix m1;
- m1.shear(3.0, 2.0);
- m1.rotate(44);
+ QTransform t1;
+ t1.shear(3.0, 2.0);
+ t1.rotate(44);
- QMatrix m2 = m1;
-
- QTransform t1(m1);
- QTransform t2(m2);
+ QTransform t2 = t1;
// not really much to test here, so just the bare minimum:
- QCOMPARE(qHash(m1), qHash(m2));
QCOMPARE(qHash(t1), qHash(t2));
}
@@ -376,6 +372,9 @@ void tst_QTransform::scale()
QVERIFY( QTransform::fromScale( 1, 1 ) == QTransform());
}
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QTransform::matrix()
{
QMatrix mat1;
@@ -414,7 +413,7 @@ void tst_QTransform::matrix()
QRect rect(43, 70, 200, 200);
QPoint pt(43, 66);
- QCOMPARE(tranInv.map(pt), matInv.map(pt));
+ QCOMPARE(tranInv.mapRect(rect), matInv.mapRect(rect));
QCOMPARE(tranInv.map(pt), matInv.map(pt));
QPainterPath path;
@@ -431,6 +430,8 @@ void tst_QTransform::testOffset()
const QMatrix &aff = trans.toAffine();
QCOMPARE((void*)(&aff), (void*)(&trans));
}
+QT_WARNING_POP
+#endif
void tst_QTransform::types()
{
diff --git a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp b/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp
index da88a868f3..281639c27a 100644
--- a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp
+++ b/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp
@@ -32,6 +32,9 @@
#include <qmath.h>
#include <qpolygon.h>
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
class tst_QWMatrix : public QObject
{
@@ -324,5 +327,8 @@ void tst_QWMatrix::mapPolygon()
}
}
+QT_WARNING_POP
+#endif
+
QTEST_APPLESS_MAIN(tst_QWMatrix)
#include "tst_qwmatrix.moc"
diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST
index 18450f1853..a2c6224ce0 100644
--- a/tests/auto/network/access/qnetworkreply/BLACKLIST
+++ b/tests/auto/network/access/qnetworkreply/BLACKLIST
@@ -47,21 +47,21 @@ windows-7sp1
windows-10
osx
[backgroundRequest]
-osx-10.12
+macos
[connectToIPv6Address]
-osx-10.12
+macos
[deleteFromHttp]
-osx-10.12
+macos
[downloadProgress]
-osx-10.12
+macos
[encrypted]
-osx-10.13
+macos
[httpCanReadLine]
-osx-10.12
+macos
[httpRecursiveCreation]
osx
[httpWithNoCredentialUsage]
-osx-10.12
+macos
[ignoreSslErrorsList]
osx
[ignoreSslErrorsListWithSlot]
@@ -69,27 +69,27 @@ osx
[ioGetFromBuiltinHttp]
osx
[ioGetFromHttp]
-osx-10.12
+macos
[ioPostToHttpFromFile]
-osx-10.13
+macos
[ioPostToHttpFromSocketSynchronous]
osx
[ioPostToHttpUploadProgress]
osx
[ioPutToHttpFromFile]
-osx-10.13
+macos
[lastModifiedHeaderForHttp]
-osx-10.12
+macos
[multipartSkipIndices]
-osx-10.12
+macos
[nestedEventLoops]
osx
[postToHttp]
-osx-10.12
+macos
[postToHttpMultipart]
-osx-10.12
+macos
[postToHttpSynchronous]
-osx-10.12
+macos
[postToHttps]
osx
[postToHttpsMultipart]
@@ -97,17 +97,17 @@ osx
[postToHttpsSynchronous]
osx
[putGetDeleteGetFromHttp]
-osx-10.12
+macos
[putToHttpSynchronous]
-osx-10.12
+macos
[putToHttps]
osx
[putToHttpsSynchronous]
osx
[putWithRateLimiting]
-osx-10.13
+macos
[qtbug13431replyThrottling]
-osx-10.12
+macos
[receiveCookiesFromHttp]
osx
[receiveCookiesFromHttpSynchronous]
@@ -117,7 +117,7 @@ osx
[sendCookiesSynchronous]
osx
[sendCustomRequestToHttp]
-osx-10.12
+macos
[sslConfiguration]
osx
[synchronousRequest]
diff --git a/tests/auto/network/ssl/qsslsocket/BLACKLIST b/tests/auto/network/ssl/qsslsocket/BLACKLIST
index 7b4a29f463..749c59d968 100644
--- a/tests/auto/network/ssl/qsslsocket/BLACKLIST
+++ b/tests/auto/network/ssl/qsslsocket/BLACKLIST
@@ -3,9 +3,9 @@ windows
[spontaneousWrite]
windows-7sp1
[connectToHostEncrypted]
-osx-10.13
+macos
[setSslConfiguration]
windows-10 msvc-2015
windows-7sp1
[connectToHostEncryptedWithVerificationPeerName]
-osx-10.13
+macos
diff --git a/tests/auto/other/macnativeevents/BLACKLIST b/tests/auto/other/macnativeevents/BLACKLIST
index 2922e22d9f..b0a6551587 100644
--- a/tests/auto/other/macnativeevents/BLACKLIST
+++ b/tests/auto/other/macnativeevents/BLACKLIST
@@ -19,7 +19,7 @@ osx
osx
[testMouseDragToNonClientArea]
osx
-osx-10.12 ci
+macos ci
# The following key tests fail after switching to synchronous
# expose events, and we don't know why yet. QTBUG-62042
[testKeyPressOnToplevel]
@@ -32,8 +32,8 @@ osx
osx
# QTQAINFRA-1292
[testPushButtonPressRelease]
-osx-10.12 ci
+macos ci
# QTQAINFRA-1292
[testModifierCtrlWithDontSwapCtrlAndMeta]
-osx-10.12 ci
+macos ci
diff --git a/tests/auto/widgets/dialogs/qdialog/BLACKLIST b/tests/auto/widgets/dialogs/qdialog/BLACKLIST
index 72e3dff6dd..ad86386895 100644
--- a/tests/auto/widgets/dialogs/qdialog/BLACKLIST
+++ b/tests/auto/widgets/dialogs/qdialog/BLACKLIST
@@ -1,4 +1,4 @@
[snapToDefaultButton]
-osx-10.14
+macos
[showFullScreen]
-osx-10.13 ci
+macos ci
diff --git a/tests/auto/widgets/dialogs/qfiledialog2/BLACKLIST b/tests/auto/widgets/dialogs/qfiledialog2/BLACKLIST
index 875855b59e..9e14db48d0 100644
--- a/tests/auto/widgets/dialogs/qfiledialog2/BLACKLIST
+++ b/tests/auto/widgets/dialogs/qfiledialog2/BLACKLIST
@@ -1,4 +1,2 @@
[QTBUG4419_lineEditSelectAll]
-osx-10.12
-osx-10.14
-osx-10.13
+macos
diff --git a/tests/auto/widgets/dialogs/qprogressdialog/BLACKLIST b/tests/auto/widgets/dialogs/qprogressdialog/BLACKLIST
index 2b784414cd..92f9680e7e 100644
--- a/tests/auto/widgets/dialogs/qprogressdialog/BLACKLIST
+++ b/tests/auto/widgets/dialogs/qprogressdialog/BLACKLIST
@@ -1,2 +1,2 @@
[autoShow]
-osx-10.13
+macos
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index 0010718d3e..4206ce1f87 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -8016,11 +8016,21 @@ public:
//Doesn't use the extended style option so the exposed rect is the boundingRect
if (!(flags() & QGraphicsItem::ItemUsesExtendedStyleOption)) {
QCOMPARE(option->exposedRect, boundingRect());
+#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
QCOMPARE(option->matrix, QMatrix());
+QT_WARNING_POP
+#endif
} else {
QVERIFY(option->exposedRect != QRect());
QVERIFY(option->exposedRect != boundingRect());
+#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
QCOMPARE(option->matrix, sceneTransform().toAffine());
+QT_WARNING_POP
+#endif
}
}
QGraphicsRectItem::paint(painter, option, widget);
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp b/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp
index ed79904ed8..0d8e5b4d54 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp
@@ -31,7 +31,6 @@
#include <qgraphicsitemanimation.h>
#include <QtCore/qtimeline.h>
-#include <QtGui/qmatrix.h>
class tst_QGraphicsItemAnimation : public QObject
{
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index d521c6f11c..bd027f9eb1 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
@@ -67,7 +67,7 @@ using namespace QTestPrivate;
Q_DECLARE_METATYPE(ExpectedValueDescription)
Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QList<QRectF>)
-Q_DECLARE_METATYPE(QMatrix)
+Q_DECLARE_METATYPE(QTransform)
Q_DECLARE_METATYPE(QPainterPath)
Q_DECLARE_METATYPE(Qt::ScrollBarPolicy)
Q_DECLARE_METATYPE(ScrollBarCount)
@@ -291,7 +291,7 @@ void tst_QGraphicsView::construction()
QCOMPARE(view.sceneRect(), QRectF());
QVERIFY(view.viewport());
QCOMPARE(view.viewport()->metaObject()->className(), "QWidget");
- QCOMPARE(view.matrix(), QMatrix());
+ QCOMPARE(view.transform(), QTransform());
QVERIFY(view.items().isEmpty());
QVERIFY(view.items(QPoint()).isEmpty());
QVERIFY(view.items(QRect()).isEmpty());
@@ -1208,37 +1208,37 @@ void tst_QGraphicsView::matrix()
void tst_QGraphicsView::matrix_convenience()
{
QGraphicsView view;
- QCOMPARE(view.matrix(), QMatrix());
+ QCOMPARE(view.transform(), QTransform());
// Check the convenience functions
view.rotate(90);
- QCOMPARE(view.matrix(), QMatrix().rotate(90));
+ QCOMPARE(view.transform(), QTransform().rotate(90));
view.scale(2, 2);
- QCOMPARE(view.matrix(), QMatrix().scale(2, 2) * QMatrix().rotate(90));
+ QCOMPARE(view.transform(), QTransform().scale(2, 2) * QTransform().rotate(90));
view.shear(1.2, 1.2);
- QCOMPARE(view.matrix(), QMatrix().shear(1.2, 1.2) * QMatrix().scale(2, 2) * QMatrix().rotate(90));
+ QCOMPARE(view.transform(), QTransform().shear(1.2, 1.2) * QTransform().scale(2, 2) * QTransform().rotate(90));
view.translate(1, 1);
- QCOMPARE(view.matrix(), QMatrix().translate(1, 1) * QMatrix().shear(1.2, 1.2) * QMatrix().scale(2, 2) * QMatrix().rotate(90));
+ QCOMPARE(view.transform(), QTransform().translate(1, 1) * QTransform().shear(1.2, 1.2) * QTransform().scale(2, 2) * QTransform().rotate(90));
}
void tst_QGraphicsView::matrix_combine()
{
// Check matrix combining
QGraphicsView view;
- QCOMPARE(view.matrix(), QMatrix());
- view.setMatrix(QMatrix().rotate(90), true);
- view.setMatrix(QMatrix().rotate(90), true);
- view.setMatrix(QMatrix().rotate(90), true);
- view.setMatrix(QMatrix().rotate(90), true);
- QCOMPARE(view.matrix(), QMatrix());
-
- view.resetMatrix();
- QCOMPARE(view.matrix(), QMatrix());
- view.setMatrix(QMatrix().rotate(90), false);
- view.setMatrix(QMatrix().rotate(90), false);
- view.setMatrix(QMatrix().rotate(90), false);
- view.setMatrix(QMatrix().rotate(90), false);
- QCOMPARE(view.matrix(), QMatrix().rotate(90));
+ QCOMPARE(view.transform(), QTransform());
+ view.setTransform(QTransform().rotate(90), true);
+ view.setTransform(QTransform().rotate(90), true);
+ view.setTransform(QTransform().rotate(90), true);
+ view.setTransform(QTransform().rotate(90), true);
+ QCOMPARE(view.transform(), QTransform());
+
+ view.resetTransform();
+ QCOMPARE(view.transform(), QTransform());
+ view.setTransform(QTransform().rotate(90), false);
+ view.setTransform(QTransform().rotate(90), false);
+ view.setTransform(QTransform().rotate(90), false);
+ view.setTransform(QTransform().rotate(90), false);
+ QCOMPARE(view.transform(), QTransform().rotate(90));
}
void tst_QGraphicsView::centerOnPoint()
@@ -2125,8 +2125,8 @@ void tst_QGraphicsView::mapFromScenePath()
QPainterPath path2;
path2.addPolygon(polygon2);
- QPolygonF pathPoly = view.mapFromScene(path).toFillPolygon();
- QPolygonF path2Poly = path2.toFillPolygon();
+ QPolygonF pathPoly = view.mapFromScene(path).toFillPolygon(QTransform());
+ QPolygonF path2Poly = path2.toFillPolygon(QTransform());
for (int i = 0; i < pathPoly.size(); ++i) {
QVERIFY(qAbs(pathPoly[i].x() - path2Poly[i].x()) < 3);
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST b/tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST
new file mode 100644
index 0000000000..1233bec166
--- /dev/null
+++ b/tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST
@@ -0,0 +1,2 @@
+[task200665_itemEntered]
+macos # Can't move cursor (QTBUG-76312)
diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST
index be19d8fd0b..cf35491ec0 100644
--- a/tests/auto/widgets/kernel/qwidget/BLACKLIST
+++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST
@@ -24,9 +24,7 @@ opensuse-42.3
[childEvents]
macos
[renderInvisible]
-osx-10.12
-osx-10.11
-osx-10.14
+macos
[optimizedResizeMove]
osx
[optimizedResize_topLevel]
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index dd747a8616..c015bf85d0 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -72,6 +72,7 @@
#include <QtWidgets/QGraphicsProxyWidget>
#include <QtGui/qwindow.h>
#include <qtimer.h>
+#include <QtWidgets/QDoubleSpinBox>
#if defined(Q_OS_OSX)
#include "tst_qwidget_mac_helpers.h" // Abstract the ObjC stuff out so not everyone must run an ObjC++ compile.
@@ -187,6 +188,7 @@ private slots:
void tabOrderNoChange2();
void appFocusWidgetWithFocusProxyLater();
void appFocusWidgetWhenLosingFocusProxy();
+ void explicitTabOrderWithComplexWidget();
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
void activation();
#endif
@@ -2110,6 +2112,32 @@ void tst_QWidget::appFocusWidgetWhenLosingFocusProxy()
QCOMPARE(QApplication::focusWidget(), lineEdit);
}
+void tst_QWidget::explicitTabOrderWithComplexWidget()
+{
+ // Check that handling tab/backtab with a widget comprimised of other widgets
+ // handles tabbing correctly
+ Container window;
+ auto lineEditOne = new QLineEdit;
+ window.box->addWidget(lineEditOne);
+ auto lineEditTwo = new QLineEdit;
+ window.box->addWidget(lineEditTwo);
+ QWidget::setTabOrder(lineEditOne, lineEditTwo);
+ lineEditOne->setFocus();
+ window.show();
+ QApplication::setActiveWindow(&window);
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ QTRY_COMPARE(QApplication::focusWidget(), lineEditOne);
+
+ window.tab();
+ QTRY_COMPARE(QApplication::focusWidget(), lineEditTwo);
+ window.tab();
+ QTRY_COMPARE(QApplication::focusWidget(), lineEditOne);
+ window.backTab();
+ QTRY_COMPARE(QApplication::focusWidget(), lineEditTwo);
+ window.backTab();
+ QTRY_COMPARE(QApplication::focusWidget(), lineEditOne);
+}
+
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
void tst_QWidget::activation()
{
diff --git a/tests/auto/widgets/util/qscroller/BLACKLIST b/tests/auto/widgets/util/qscroller/BLACKLIST
new file mode 100644
index 0000000000..347ab6440b
--- /dev/null
+++ b/tests/auto/widgets/util/qscroller/BLACKLIST
@@ -0,0 +1,5 @@
+[scrollTo]
+macos
+
+[scroll]
+macos
diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
index ea1b330152..3878e7ccb2 100644
--- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
@@ -2756,10 +2756,7 @@ void tst_QComboBox::resetModel()
class StringListModel : public QStringListModel
{
public:
- StringListModel(const QStringList &list) : QStringListModel(list)
- {
- }
-
+ using QStringListModel::QStringListModel;
void reset()
{
QStringListModel::beginResetModel();
@@ -2767,8 +2764,8 @@ void tst_QComboBox::resetModel()
}
};
QComboBox cb;
- StringListModel model( QStringList() << "1" << "2");
- QSignalSpy spy(&cb, SIGNAL(currentIndexChanged(int)));
+ StringListModel model({"1", "2"});
+ QSignalSpy spy(&cb, QOverload<int>::of(&QComboBox::currentIndexChanged));
QCOMPARE(spy.count(), 0);
QCOMPARE(cb.currentIndex(), -1); //no selection
@@ -2779,7 +2776,7 @@ void tst_QComboBox::resetModel()
model.reset();
QCOMPARE(spy.count(), 2);
- QCOMPARE(cb.currentIndex(), -1); //no selection
+ QCOMPARE(cb.currentIndex(), 0); //first item selected
}
diff --git a/tests/auto/widgets/widgets/qdoublespinbox/BLACKLIST b/tests/auto/widgets/widgets/qdoublespinbox/BLACKLIST
index 8f5648d0f9..9da179e365 100644
--- a/tests/auto/widgets/widgets/qdoublespinbox/BLACKLIST
+++ b/tests/auto/widgets/widgets/qdoublespinbox/BLACKLIST
@@ -1,4 +1,2 @@
[editingFinished]
-osx-10.12
-osx-10.14
-osx-10.13
+macos
diff --git a/tests/auto/widgets/widgets/qmdiarea/BLACKLIST b/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
index 1dd876ea97..6010772be7 100644
--- a/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
@@ -2,15 +2,12 @@
ubuntu-16.04
rhel-7.6
opensuse-leap
-osx-10.11
-osx-10.13
+macos
ubuntu-18.04
-osx-10.14
+macos
rhel-7.4
-osx-10.12
+macos
opensuse-42.3
[resizeTimer]
-osx-10.12
-osx-10.14
-osx-10.13
+macos
diff --git a/tests/auto/widgets/widgets/qmenu/BLACKLIST b/tests/auto/widgets/widgets/qmenu/BLACKLIST
index ba9c184a67..5677172f8e 100644
--- a/tests/auto/widgets/widgets/qmenu/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmenu/BLACKLIST
@@ -1,14 +1,12 @@
[task258920_mouseBorder]
-osx-10.14
-osx-10.13
+macos
[layoutDirection]
-osx-10.12
-osx-10.13
+macos
# Fails when enabling synchronous expose events QTBUG-62092
[pushButtonPopulateOnAboutToShow]
-osx-10.13
+macos
[tearOff]
-osx-10.14
+macos
[activeSubMenuPosition]
winrt
[submenuTearOffDontClose]
diff --git a/tests/auto/widgets/widgets/qtoolbutton/BLACKLIST b/tests/auto/widgets/widgets/qtoolbutton/BLACKLIST
index 52ba36562f..315e179d0a 100644
--- a/tests/auto/widgets/widgets/qtoolbutton/BLACKLIST
+++ b/tests/auto/widgets/widgets/qtoolbutton/BLACKLIST
@@ -1,2 +1,2 @@
[task176137_autoRepeatOfAction]
-osx-10.13
+macos
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
index 6e0ac445a6..60e8dd0032 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
@@ -187,7 +187,7 @@ void View::setupMatrix()
{
qreal scale = qPow(qreal(2), (zoomSlider->value() - 250) / qreal(50));
- QMatrix matrix;
+ QTransform matrix;
matrix.scale(scale, scale);
matrix.rotate(rotateSlider->value());