2D: Avoid needless full rebuilds in QXYModelMapper
QXYModelMapperPrivate::initializeXYFromModel() clears the series and
refills it from the model. It was reached more often than necessary:
- modelReset and layoutChanged were connected straight to it, bypassing
m_modelSignalsBlock. A model that emits either from insertRows() or
removeRows() therefore rebuilt the whole series on every series edit
the mapper wrote back to it. Route both through onModelReset(), which
honors the block flag like the other model slots.
- Every property setter reinitialized and emitted its changed signal
even when the value was unchanged. Return early in that case, also for
setModel() and setSeries() with the current pointer.
- initializeXYFromModel() now builds the new point list first and leaves
the series untouched if it already matches, and reserves the list.
Add tests covering series edits with a reset-emitting model, external
resets, unchanged resets and unchanged setters.
Pick-to: 6.12
Task-number: QTBUG-151152
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Change-Id: I83260033c4b39d1a68e5e9fe067ec55aeb662741
Reviewed-by: Tomi Korpipaa <tomi.korpipaa@qt.io>