From 7788cdf1c9c353f70ef7dd6f8f7e80d475eba6cb Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Sat, 13 Jul 2019 10:36:12 +0200 Subject: [PATCH] QskLinearLayoutEngine::clear added --- src/layouts/QskLinearLayoutEngine.cpp | 37 ++++++++++++++++++++++----- src/layouts/QskLinearLayoutEngine.h | 1 + 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/layouts/QskLinearLayoutEngine.cpp b/src/layouts/QskLinearLayoutEngine.cpp index ebd17adc..9a277130 100644 --- a/src/layouts/QskLinearLayoutEngine.cpp +++ b/src/layouts/QskLinearLayoutEngine.cpp @@ -105,6 +105,7 @@ namespace int spacerAt( int index ) const; bool removeAt( int index ); + bool clear(); bool isIgnoredAt( int index ) const; @@ -302,9 +303,27 @@ void EntryTable::insertSpacer( int index, qreal spacing ) bool EntryTable::removeAt( int index ) { - if ( index >= 0 && index < count() ) + auto entry = entryAt( index ); + if ( entry == nullptr ) + return false; + + if ( entry->isIgnored() ) + m_sumIgnored--; + + const auto itemType = QskLayoutConstraint::constraintType( entry->item() ); + if ( itemType > QskLayoutConstraint::Unconstrained ) + m_constraintType = -1; + + m_entries.erase( m_entries.begin() + index ); + + return true; +} + +bool EntryTable::clear() +{ + if ( count() > 0 ) { - m_entries.erase( m_entries.begin() + index ); + m_entries.clear(); invalidate(); return true; @@ -454,15 +473,15 @@ QskLayoutConstraint::Type EntryTable::constraintType() const for ( const auto& entry : m_entries ) { - const auto entryType = QskLayoutConstraint::constraintType( entry.item() ); + const auto itemType = QskLayoutConstraint::constraintType( entry.item() ); - if ( entryType != QskLayoutConstraint::Unconstrained ) + if ( itemType != QskLayoutConstraint::Unconstrained ) { if ( m_constraintType == QskLayoutConstraint::Unconstrained ) { - m_constraintType = entryType; + m_constraintType = itemType; } - else if ( m_constraintType != entryType ) + else if ( m_constraintType != itemType ) { qWarning( "QskLinearLayoutEngine: conflicting constraints"); m_constraintType = QskLayoutConstraint::Unconstrained; @@ -810,6 +829,12 @@ void QskLinearLayoutEngine::removeAt( int index ) invalidate( CellCache | LayoutCache ); } +void QskLinearLayoutEngine::clear() +{ + if ( m_data->entryTable.clear() ) + invalidate( CellCache | LayoutCache ); +} + QQuickItem* QskLinearLayoutEngine::itemAt( int index ) const { return m_data->entryTable.itemAt( index ); diff --git a/src/layouts/QskLinearLayoutEngine.h b/src/layouts/QskLinearLayoutEngine.h index 86154e39..43328f7a 100644 --- a/src/layouts/QskLinearLayoutEngine.h +++ b/src/layouts/QskLinearLayoutEngine.h @@ -50,6 +50,7 @@ class QskLinearLayoutEngine void addSpacer( qreal spacing ); void removeAt( int index ); + void clear(); QQuickItem* itemAt( int index ) const; int spacerAt( int index ) const;