Commit Graph

48 Commits

Author SHA1 Message Date
Marc Mutz
6d44fa53e1 QItemSelection: fix a quadratic loop
QList::erase(it) is a linear operation. Calling it in a loop
constitutes quadratic behavior.

Fix by using the erase-remove idiom.

Write a generic function object QtFunctionObjects::IsNotValid, instead
of a lambda, because I am building up a collection of such function
objects in my tree, to be submitted any time now™, so this will reduce
the churn once that gets merged. Wrap it in the unnamed namespace to
avoid ODR violations in case this pattern repeats.

Replace an existing erase-remove idiom's isNotValid lambda function
with the new function object.

Change-Id: I4f0af04e7b201eb168e79beeda332eee3c6f33c3
Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2017-05-22 18:16:38 +00:00
Liang Qi
550e16b814 Merge remote-tracking branch 'origin/5.9.0' into 5.9
Change-Id: Ia8ac1960387c0f78c32f9d0385bb0aa9a8209af1
2017-05-19 08:57:59 +02:00
Filippo Cucchetto
be0a221ae4 Fix missing handling of columns when merging selection ranges
This commit fixes two bugs:
1) Two ranges should not be merged if they are of different columns.
The old code would have merged (0,0) with (1, 1). Tranforming a selection
of just two indexes in a rectangle of four indexes.
2) The QItemSelectionRange appended had wrong column and worked only for
indexes of the first column. For example if 'tl' was (0, 1) than br was (0, 1)
so the QItemSelectionRange would have be ((0,1), (0, 1-1)) so ((0,1), (0,0)).
This QItemSelectionRange is invalid because topLeft columns is greater than
bottomRight column. The fix take in consideration the bottomRight column.

Task-number: QTBUG-58871
Change-Id: I591ef0bcc63926f24a7b1ced002af9b7737a4b6e
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2017-05-09 13:46:51 +00:00
Marc Mutz
0208cac94f QItemSelectionRange: don't compare pointers with op<
... use std::less<> to avoid undefined behavior.

Change-Id: Ib6736f86359c4a16fd90ca63b57a8517c6137ead
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2017-04-30 17:23:15 +00:00
Marc Mutz
5497e6de89 QItemSelectionRange: de-inline op<
It's a bit large for an inline function.

Note for Qt 6 that this function is nonsense.

Change-Id: If6af5d3538aac86d55313ba6accdb13f892e6564
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2016-12-02 20:22:20 +00:00
Anton Kudryavtsev
f083830b8d CoreLib: use const (and const APIs) more
For CoW types const methods will be called.

Mark store_persistent_indexes() as const,
because this method does not modify the object.

Change-Id: Ic867913b4fb5aaebfbaaffe1d3be45cf7b646403
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-04-18 04:49:19 +00:00
Anton Kudryavtsev
8903460093 QtBase: use erase and std::remove_if with QList and QVector
... instead of using removeAt in a loop, with quadratic complexity.

Change-Id: I38b49e56b12c396db9fc0f1b75d8fb43c503a7f6
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-04-08 19:35:26 +00:00
Anton Kudryavtsev
df909d8b1f QItemSelectionModel: refactoring of internal functions
Introduce template helper function qSelectionIndexes().
Template argument is container. Now we have the same code for
QVector and QList.

Also it's needed for a follow-up change in this file:
add method QModelIndex QItemSelection::index().

Change-Id: I7f86a9b96e5feac9873cf0df7a1cbca74f9191ec
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-03-11 13:34:03 +00:00
Jani Heikkinen
1a88b2f768 Updated license headers
From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see
http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/

Updated license headers to use new LGPL header instead of LGPL21 one
(in those files which will be under LGPL v3)

Change-Id: I046ec3e47b1876cd7b4b0353a576b352e3a946d9
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-15 12:25:24 +00:00
Marc Mutz
90484f3901 QtCore: eradicate all Q_FOREACH loops [itemmodels]
Saves more than 4KiB in text size on optimized GCC 4.9 Linux
AMD64 builds.

Change-Id: Ice3fe915622a399d1ed10e0ce364cf54b4b835fe
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2016-01-04 12:22:45 +00:00
Nico Vertriest
b07c10c5de Revert "Doc: Added info about sorting in QItemSelectionModel::selectedIndexes"
This reverts commit d0f57439d0.
This commit had introduced a wrong statement about the sorting.

Change-Id: I2f6ea6f7cfb318bca7bd44c686956ba135b65b20
Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
2015-12-03 13:49:43 +00:00
Nico Vertriest
d0f57439d0 Doc: Added info about sorting in QItemSelectionModel::selectedIndexes
Task-number: QTBUG-40726
Change-Id: I450f9735fbbdc6574e8a14ea0076a28ee65077de
Reviewed-by: Martin Smith <martin.smith@digia.com>
2015-11-16 15:26:11 +00:00
Joni Poikelin
61f2e9a9a7 Fix QItemSelectionModel deselection range
Left and right were swapped which caused invalid selection ranges to be
emitted through selectionChanged.

Task-number: QTBUG-48402
Change-Id: I18692c2b50c49ab39065f9b360b37b7615227ee9
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
2015-09-24 08:13:07 +00:00
Frederik Gladhorn
77da617dc8 Merge remote-tracking branch 'origin/5.5' into dev
Conflicts:
	doc/global/qt-cpp-defines.qdocconf
	src/3rdparty/forkfd/forkfd.c
	src/corelib/codecs/qtextcodec.cpp
	src/corelib/kernel/qmetatype.cpp
	src/corelib/tools/qset.qdoc
	src/gui/accessible/qaccessible.cpp
	src/gui/image/qpixmapcache.cpp
	src/opengl/qgl.cpp
	src/tools/qdoc/generator.cpp
	src/widgets/kernel/qwidget.cpp
	tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp

Change-Id: I4fbe1fa756a54c6843aa75f4ef70a1069ba7b085
2015-08-06 10:54:01 +02:00
Marc Mutz
02affdb891 QItemSelectionRange: add nothrow member-swap
Change-Id: Ie550f4a66b3c623b0ec630c18f38bcd96f6bbc99
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-07-22 21:12:25 +00:00
Nico Vertriest
e6ddae07e1 Doc:added doc to undocumented functions
Task-number: QTBUG-36985
Change-Id: Ic358682b276d67ef804f727bcf14191718613469
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-07-22 13:47:23 +00:00
Friedemann Kleint
a299ae3dc4 Fix some qdoc-warnings.
qtbase/src/corelib/io/qdatastream.cpp:501: warning: Undocumented enum item 'Qt_5_6' in QDataStream::Version
qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp:1764: warning: Undocumented parameter 'model' in QItemSelectionModel::setModel()
qtbase/src/corelib/statemachine/qabstractstate.cpp:216: warning: Undocumented parameter 'active' in QAbstractState::activeChanged()
qtbase/src/corelib/statemachine/qstatemachine.cpp:3262: warning: Undocumented parameter 'running' in QStateMachine::runningChanged()
qtbase/src/corelib/tools/qchar.cpp:160: warning: Undocumented enum item 'Unicode_7_0' in QChar::UnicodeVersion
qtbase/src/gui/image/qimagereader.cpp:1168: warning: Undocumented parameter 'enabled' in QImageReader::setAutoTransform()
qtbase/src/gui/image/qimagewriter.cpp:621: warning: Undocumented parameter 'transform' in QImageWriter::setTransformation()
qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:1268: warning: Undocumented parameter 'tristate' in QStandardItem::setAutoTristate()
qtbase/src/gui/kernel/qscreen.cpp:590: warning: Undocumented parameter 'orientation' in QScreen::orientationChanged()
qtbase/src/gui/kernel/qscreen.cpp:599: warning: Undocumented parameter 'orientation' in QScreen::primaryOrientationChanged()
qtbase/src/gui/text/qtextdocument.cpp:1455: warning: No such parameter 'from' in QTextDocument::find()
qtbase/src/gui/text/qtextdocument.cpp:533: warning: Undocumented parameter 'option' in QTextDocument::setDefaultTextOption()
qtbase/src/widgets/itemviews/qtableview.cpp:2546: warning: Undocumented parameter 'enable' in QTableView::setSortingEnabled()
qtbase/src/widgets/statemachine/qkeyeventtransition.cpp:119: warning: Undocumented parameter 'key' in QKeyEventTransition::setKey()
qtbase/src/widgets/widgets/qplaintextedit.cpp:1610: warning: Can't link to 'toText()'
qtbase/src/opengl/qgl.cpp:4371: warning: No documentation for 'QGLWidget::event()'

Remove the documentation as they are properties:
qtbase/src/widgets/widgets/qfontcombobox.cpp:407: warning: Undocumented parameter 'font' in QFontComboBox::setCurrentFont()
qtbase/src/widgets/widgets/qfontcombobox.cpp:403: warning: Undocumented parameter 'script' in QFontComboBox::setWritingSystem()

Change-Id: If599a3ce747bbb8a3418dd973810923b87246371
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
2015-07-10 18:01:39 +00:00
Stephen Kelly
ebafb2f14b QItemSelectionModel: Make selectedIndexes a Q_PROPERTY.
With reasoning similar to commit v5.5.0-alpha1~124 (Make the
QItemSelectionModel::selection a property., 2015-02-25), this should
be a property instead of a Q_INVOKABLE so that it can participate in
persistent bindings.

Change-Id: Ib9a7900dfa3acbd6f9f7df7b6f00deb6e05c3937
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
2015-03-27 21:13:28 +00:00
Friedemann Kleint
28fedba03b Fix various qdoc-warnings.
qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp:1199: warning: Undocumented parameter 'model' in QItemSelectionModel::modelChanged()
qtbase/src/corelib/plugin/qpluginloader.cpp:420: warning: Can't link to 'staticPlugin()'
qtbase/src/gui/text/qtextdocument.cpp:1452: warning: No such parameter 'from' in QTextDocument::find()
qtbase/src/testlib/qtestcase.cpp:2770: warning: No documentation for 'QTest::qExtractTestData()'

Change-Id: I76758dbdf3ad7b0ae1f14de0407a6fde523827d0
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2015-02-25 15:26:04 +00:00
Jani Heikkinen
83a5694dc2 Update copyright headers
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.

Outdated header.LGPL removed (use header.LGPL21 instead)

Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)

Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination

Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
2015-02-11 06:49:51 +00:00
Kai Koehne
868201155f QtCore: Use QDebugStateSaver in (almost) all QDebug operator<<
Unify the behavior of the different operator<< by always using
QDebugStateSaver (appending an optional space at exit), and making
sure that the space(), nospace() setting isn't 'leaked'.

Change-Id: I38e4f82fa6f7419d8b5edfc4dc37495af497e8ac
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
2015-02-09 11:30:02 +00:00
Gabriel de Dietrich
7ab29c4ebb Allow exposing QItemSelectionModel to QML
This requires being able to create a QItemSelectionModel
without specifiying its model, and also setting the model
later. Also, several classes, like QPersistentModelIndex,
need to be declared as meta-type.

Finally, and in order to introduce the 'model' property,
we need to have a type compatible getter. Hence the new,
non-const model() function.

Where needed, meta-type declarations have been removed from
auto-tests.

[ChangeLog][QtCore][Item Models] QItemSelectionModel
can now be created without a model and have one set later.

Change-Id: If49bed061a5d1012331f335ca7f6e3959ecd3f1c
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
2015-02-03 18:40:19 +00:00
Nico Vertriest
fbfc2b8e0b Doc: corrected autolink issues itemmodels
Task-number: QTBUG-40362
Change-Id: I8423643e47d27358dbbce58009cc9039aecb74cf
Reviewed-by: Martin Smith <martin.smith@digia.com>
2014-11-20 16:14:06 +01:00
Matti Paaso
974c210835 Update license headers and add new license files
- Renamed LICENSE.LGPL to LICENSE.LGPLv21
- Added LICENSE.LGPLv3
- Removed LICENSE.GPL

Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2
Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
2014-09-24 12:26:19 +02:00
Friedemann Kleint
9c774b7621 QItemSelectionModel: Sort persistent model indexes taking parent into account.
When sorting a tree model with large sub-trees and and a large
selection, the existing sort function would mix indexes of
different parents, causing a fragmented selection,
which slows down painting.

Task-number: QTBUG-33954
Change-Id: Ia585fc1e5de9a1a3f6124a58c9c7c40fcbdbfb6a
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2014-07-17 11:26:29 +02:00
Marc Mutz
0326c036d6 QItemSelectionModel: use QSignalBlocker
Change-Id: Ib88db7516fd7dd8f10a86444c506f3294948e79b
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-10-30 12:57:14 +01:00
Jerome Pasion
4533cc9944 Doc: Adding mark-up to boolean default values.
Default values should have mark-up to denote that they are code.
This commit changes:
-"property is true" to "property is \c true".
-"Returns true" to "Returns \c true".
-"property is false" to "property is \c false".
-"returns true" to "returns \c true".
-"returns false" to "returns \c false".

src/3rdparty and non-documentation instances were ignored.

Task-number: QTBUG-33360
Change-Id: Ie87eaa57af947caa1230602b61c5c46292a4cf4e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
2013-10-08 00:46:27 +02:00
Stephen Kelly
45e5a6ff7c Reset the QItemSelectionModel when its model is reset.
Change-Id: I12af41adb18a2ecf8825b23d5715766dcae55436
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-08-13 16:34:06 +02:00
Sergio Ahumada
48e0c4df23 Update copyright year in Digia's license headers
Change-Id: Ic804938fc352291d011800d21e549c10acac66fb
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-01-18 09:07:35 +01:00
Giuseppe D'Angelo
a454ccb89e Remove qSort/qStableSort usages from itemmodels
Change-Id: I53c650f170fc8a6142373c1e7da0f4876188a39e
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
2012-11-07 21:26:08 +01:00
Stephen Kelly
d18eb260d7 Use the layout change hint to speed up QItemSelectionModel.
The testcase in the bug report takes 370035 ms to sort the rows with
Qt 4, and 5646 ms in Qt 5 (when using the extra hints to layout*Changed).

That's an improvement of more than 98%.

Task-number: QTBUG-17732
Change-Id: If78f972d80c501e0cb39078228086c4f4ac8a65b
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2012-10-22 19:36:43 +02:00
Stephen Kelly
ae3ad0ad21 Handle the case where persistent indexes have gone invalid.
Don't add invalid ranges to the result. They will be removed
whenever d->ranges is processed for public consumption
anyway. For example, QItemSelectionModel::selection() calls
merge() with another selection. The merge() method removes
invalid ranges already. But the invalid ranges don't need
to be there in the first place, so this patch removes them.

A longer-term goal is to maintain d->ranges as an always-sorted list.

This method can be called with a vector containing invalid
QPersistentModelIndexes when those persistent indexes are made invalid
in between layoutAboutToBeChanged and layoutChanged. It's a normal
thing to happen and a case that should be handled deliberately.

Change-Id: I741ed9208d8a75644975c9e8d61f0d6d78e20576
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2012-10-19 00:44:54 +02:00
Stephen Kelly
cea7a87d5f Take a QPersistentIndex out of the container instead of casting it.
These indexes are later used as the boundary points of a QItemSelectionRange
anyway, which means that they're going to become QPersistentModelIndexes again
soon.

Because QPersistentModelIndex::row and ::column API are not inline, we cache
the resulting values in the loop.

Change-Id: Ib5099148269a8ccbb7ff2d8819a347e429c55dd1
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2012-09-27 18:35:55 +02:00
Stephen Kelly
978d3d01cf Use a QVector to store QPersistentModelIndexes.
QPersistentModelIndex is not so big that it causes very bad QList performance,
but considering how we use the container, QVector is fine. We never prepend to
the container, we only ever append, clear and iterate over it.

Change-Id: If1e53db9252c22340f1e0179b14a460495b5b35d
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2012-09-27 18:35:55 +02:00
Stephen Kelly
edec823c00 Avoid looping over the indexes multiple times to create a persistent list.
Change-Id: I089d272254eb531cd27c7b23fbab4d7183ba01d4
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
2012-09-27 18:35:55 +02:00
Stephen Kelly
2d97c6a474 Use the sibling method to make iteration over a range potentially faster.
The implementation of QAIM can implement an efficient version of sibling.

Task-number: QTBUG-17732
Change-Id: I474dbc11e52b3ccc42e2165bc9336882fab13d03
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2012-09-27 18:35:55 +02:00
Stephen Kelly
ebf0ee34e7 Don't call parent() so often when processing a range.
Task-number: QTBUG-17732
Change-Id: Iefe5801f5941136f77001c532870e22f7fdd2c69
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2012-09-26 19:09:14 +02:00
Iikka Eklund
be15856f61 Change copyrights from Nokia to Digia
Change copyrights and license headers from Nokia to Digia

Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
2012-09-22 19:20:11 +02:00
Thiago Macieira
7b39a06fab Doc: Add \inmodule QtCore to all QtCore class doc bodies
Change-Id: I19100755c97cc155c76a859e19940e9f9222d34e
Reviewed-by: Casper van Donderen <casper.vandonderen@nokia.com>
2012-08-23 13:22:23 +02:00
Stephen Kelly
eb0e960e74 Fix the doc errors in itemmodels and itemviews.
Other errors remain, but they appear to be due to missing links
to QtCore documentation (a generic error not specific to itemviews).

Change-Id: I7b83380c3754c26d3d42be9ef0c0721ce3127562
Reviewed-by: Shawn Rutledge <shawn.rutledge@nokia.com>
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
2012-08-20 21:10:02 +02:00
Stephen Kelly
c1df856d6b Make rowIntersectsSelection take account of the parent argument.
Task-number: QTBUG-22370

Change-Id: I497194793eab624b760deea93dac0df767850330
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2012-08-10 22:02:11 +02:00
Casper van Donderen
0bc02fd0d6 Doc: Prepare for building modular QtCore docs.
This change fixes most qdoc errors in QtCore. There are about 900 left.
The main thing this change does is moving documentation from qtcore from
/doc/src to /src/corelib/doc.
Other issues resolved are mis-use of qdoc commands.

Change-Id: I002d01edfb13575e8bf27ce91596a577a92562d1
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@nokia.com>
2012-04-19 07:34:53 +02:00
Stephen Kelly
6aded68111 Deprecate QItemSelectionModel::intersect().
It is already obsolete since the beginning of time (Qt 4.5).

Change-Id: Ia2f9d934f0c0bd2038d693a29d1315867a526dfe
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2012-04-02 20:29:23 +02:00
Stephen Kelly
f783ec5347 Remove use of Q_BROKEN_DEBUG_STREAM.
No supported compiler defines it, and it was not used consistently
so it didn't work anyway.

Change-Id: Icc9e911e22daaedaee3d9316c15d19be26cd2e72
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2012-02-22 19:25:06 +01:00
Jason McDonald
5635823e17 Remove "All rights reserved" line from license headers.
As in the past, to avoid rewriting various autotests that contain
line-number information, an extra blank line has been inserted at the
end of the license text to ensure that this commit does not change the
total number of lines in the license header.

Change-Id: I311e001373776812699d6efc045b5f742890c689
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
2012-01-30 03:54:59 +01:00
Jason McDonald
629d6eda5c Update contact information in license headers.
Replace Nokia contact email address with Qt Project website.

Change-Id: I431bbbf76d7c27d8b502f87947675c116994c415
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
2012-01-23 04:04:33 +01:00
Jason McDonald
1fdfc2abfe Update copyright year in license headers.
Change-Id: I02f2c620296fcd91d4967d58767ea33fc4e1e7dc
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
2012-01-05 06:36:56 +01:00
Stephen Kelly
211e434a05 Move proxy and selection models to QtCore.
Change-Id: I71097855cb9e28105238e496778f29f99f7fc84e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
2011-12-16 13:00:57 +01:00