diff --git a/examples/layouts/StackLayoutPage.cpp b/examples/layouts/StackLayoutPage.cpp index 5d23f543..6627e096 100644 --- a/examples/layouts/StackLayoutPage.cpp +++ b/examples/layouts/StackLayoutPage.cpp @@ -25,6 +25,7 @@ namespace setObjectName( "StackBox" ); setBackgroundColor( Qt::white ); + setDefaultAlignment( Qt::AlignCenter ); setMargins( 30 ); @@ -77,7 +78,7 @@ namespace { auto rect = new TestRectangle( colorName ); rect->setText( QString::number( itemCount() + 1 ) ); - addItem( rect, Qt::AlignCenter ); + addItem( rect ); } int incrementedIndex( int offset ) const diff --git a/qmlexport/QskLayoutQml.h b/qmlexport/QskLayoutQml.h index b0410c2b..689a7c10 100644 --- a/qmlexport/QskLayoutQml.h +++ b/qmlexport/QskLayoutQml.h @@ -8,7 +8,6 @@ #include "QskQmlGlobal.h" -#include #include #include @@ -47,31 +46,6 @@ class QskLayoutBoxQml : public LayoutBox // QML does not like a const version LayoutBox::removeItem( item ); } - - Q_INVOKABLE void setAlignment( QQuickItem* item, Qt::Alignment alignment ) - { - LayoutBox::setAlignment( item, alignment ); - } - - Q_INVOKABLE Qt::Alignment alignment( QQuickItem* item ) const - { - return LayoutBox::alignment( item ); - } -}; - -class QskStackBoxQml : public QskLayoutBoxQml< QskStackBox > -{ - Q_OBJECT - - Q_INVOKABLE void setAlignmentAt( int index, Qt::Alignment alignment ) - { - QskStackBox::setAlignmentAt( index, alignment ); - } - - Q_INVOKABLE Qt::Alignment alignmentAt( int index ) const - { - return QskStackBox::alignmentAt( index ); - } }; class QskLinearBoxQml : public QskLayoutBoxQml< QskLinearBox > diff --git a/qmlexport/QskQml.cpp b/qmlexport/QskQml.cpp index 58bfd807..b9d31cd8 100644 --- a/qmlexport/QskQml.cpp +++ b/qmlexport/QskQml.cpp @@ -243,7 +243,6 @@ void QskQml::registerTypes() #if 1 QSK_REGISTER( QskGridBoxQml, "GridBox" ); QSK_REGISTER( QskLinearBoxQml, "LinearBox" ); - QSK_REGISTER( QskStackBoxQml, "StackBox" ); #else QskGridBoxQml gridBox; #endif diff --git a/src/controls/QskTabView.cpp b/src/controls/QskTabView.cpp index 17bcf5c6..bfae031d 100644 --- a/src/controls/QskTabView.cpp +++ b/src/controls/QskTabView.cpp @@ -113,7 +113,7 @@ int QskTabView::insertTab( int index, QskTabButton* button, QQuickItem* item ) item->setParent( this ); index = m_data->tabBar->insertTab( index, button ); - m_data->stackBox->insertItem( index, item, Qt::Alignment() ); + m_data->stackBox->insertItem( index, item ); return index; } diff --git a/src/layouts/QskStackBox.cpp b/src/layouts/QskStackBox.cpp index 456930ca..0af4ee92 100644 --- a/src/layouts/QskStackBox.cpp +++ b/src/layouts/QskStackBox.cpp @@ -35,31 +35,10 @@ static qreal qskConstrainedValue( QskLayoutConstraint::Type type, return constrainedValue; } -namespace -{ - class ItemInfo - { - public: - inline ItemInfo() - : item( nullptr ) - { - } - - inline ItemInfo( Qt::Alignment alignment, QQuickItem* item ) - : alignment( alignment ) - , item( item ) - { - } - - Qt::Alignment alignment; - QQuickItem* item; - }; -} - class QskStackBox::PrivateData { public: - QVector< ItemInfo > itemInfos; + QVector< QQuickItem* > items; QPointer< QskStackBoxAnimator > animator; int currentIndex = -1; @@ -140,24 +119,21 @@ QskStackBoxAnimator* QskStackBox::effectiveAnimator() int QskStackBox::itemCount() const { - return m_data->itemInfos.count(); + return m_data->items.count(); } QQuickItem* QskStackBox::itemAtIndex( int index ) const { - if ( index >= 0 && index < m_data->itemInfos.count() ) - return m_data->itemInfos[ index ].item; - - return nullptr; + return m_data->items.value( index ); } int QskStackBox::indexOf( const QQuickItem* item ) const { if ( item && ( item->parentItem() != this ) ) { - for ( int i = 0; i < m_data->itemInfos.count(); i++ ) + for ( int i = 0; i < m_data->items.count(); i++ ) { - if ( item == m_data->itemInfos[i].item ) + if ( item == m_data->items[i] ) return i; } } @@ -220,13 +196,12 @@ void QskStackBox::setCurrentItem( const QQuickItem* item ) setCurrentIndex( indexOf( item ) ); } -void QskStackBox::addItem( QQuickItem* item, Qt::Alignment alignment ) +void QskStackBox::addItem( QQuickItem* item ) { - insertItem( -1, item, alignment ); + insertItem( -1, item ); } -void QskStackBox::insertItem( - int index, QQuickItem* item, Qt::Alignment alignment ) +void QskStackBox::insertItem( int index, QQuickItem* item ) { if ( item == nullptr ) return; @@ -251,30 +226,21 @@ void QskStackBox::insertItem( if ( ( index == oldIndex ) || ( doAppend && ( oldIndex == itemCount() - 1 ) ) ) { // already in place - - auto& itemInfo = m_data->itemInfos[oldIndex]; - - if ( alignment != itemInfo.alignment ) - { - itemInfo.alignment = alignment; - polish(); - } - return; } - m_data->itemInfos.removeAt( oldIndex ); + m_data->items.removeAt( oldIndex ); } } if ( doAppend ) index = itemCount(); - m_data->itemInfos.insert( index, { alignment, item } ); + m_data->items.insert( index, item ); const int oldCurrentIndex = m_data->currentIndex; - if ( m_data->itemInfos.count() == 1 ) + if ( m_data->items.count() == 1 ) { m_data->currentIndex = 0; item->setVisible( true ); @@ -301,19 +267,19 @@ void QskStackBox::removeAt( int index ) void QskStackBox::removeItemInternal( int index, bool unparent ) { - if ( index < 0 || index >= m_data->itemInfos.count() ) + if ( index < 0 || index >= m_data->items.count() ) return; if ( !unparent ) { - if ( auto item = m_data->itemInfos[ index ].item ) + if ( auto item = m_data->items[ index ] ) { if ( item->parentItem() == this ) item->setParentItem( nullptr ); } } - m_data->itemInfos.removeAt( index ); + m_data->items.removeAt( index ); if ( index <= m_data->currentIndex ) Q_EMIT currentIndexChanged( --m_data->currentIndex ); @@ -339,21 +305,15 @@ void QskStackBox::autoRemoveItem( QQuickItem* item ) void QskStackBox::clear( bool autoDelete ) { - for ( const auto& itemInfo : qskAsConst( m_data->itemInfos ) ) + for ( const auto item : qskAsConst( m_data->items ) ) { - auto item = itemInfo.item; - if( autoDelete && ( item->parent() == this ) ) - { delete item; - } else - { item->setParentItem( nullptr ); - } } - m_data->itemInfos.clear(); + m_data->items.clear(); if ( m_data->currentIndex >= 0 ) { @@ -362,45 +322,17 @@ void QskStackBox::clear( bool autoDelete ) } } -void QskStackBox::setAlignment( const QQuickItem* item, Qt::Alignment alignment ) -{ - setAlignmentAt( indexOf( item ), alignment ); -} - -Qt::Alignment QskStackBox::alignment( const QQuickItem* item ) const -{ - return alignmentAt( indexOf( item ) ); -} - -void QskStackBox::setAlignmentAt( int index, Qt::Alignment alignment ) -{ - if ( index < 0 || index >= m_data->itemInfos.count() ) - return; - - m_data->itemInfos[ index ].alignment = alignment; - - if ( index == m_data->currentIndex ) - polish(); -} - -Qt::Alignment QskStackBox::alignmentAt( int index ) const -{ - if ( index >= 0 && index < m_data->itemInfos.count() ) - return m_data->itemInfos[ index ].alignment; - - return Qt::Alignment(); -} - QRectF QskStackBox::geometryForItemAt( int index ) const { const auto r = layoutRect(); - if ( index >= 0 && index < m_data->itemInfos.count() ) + if ( const auto item = m_data->items.value( index ) ) { - const auto& info = m_data->itemInfos[ index ]; + auto alignment = QskLayoutConstraint::layoutAlignmentHint( item ); + if ( alignment == 0 ) + alignment = m_data->defaultAlignment; - const auto align = info.alignment ? info.alignment : m_data->defaultAlignment; - return QskLayoutConstraint::boundedRect( info.item, r, align ); + return QskLayoutConstraint::boundedRect( item, r, alignment ); } return QRectF( r.x(), r.y(), 0.0, 0.0 ); @@ -411,12 +343,12 @@ void QskStackBox::updateLayout() if ( maybeUnresized() ) return; - const auto idx = m_data->currentIndex; + const auto index = m_data->currentIndex; - if ( idx >= 0 ) + if ( index >= 0 ) { - const auto rect = geometryForItemAt( idx ); - qskSetItemGeometry( m_data->itemInfos[ idx ].item, rect ); + const auto rect = geometryForItemAt( index ); + qskSetItemGeometry( m_data->items[ index ], rect ); } } @@ -434,10 +366,8 @@ QSizeF QskStackBox::contentsSizeHint() const int constraintTypes = Unconstrained; - for ( const auto& itemInfo : qskAsConst( m_data->itemInfos ) ) + for ( const auto item : qskAsConst( m_data->items ) ) { - const auto item = itemInfo.item; - const auto type = constraintType( item ); if ( type != Unconstrained ) { @@ -463,13 +393,11 @@ QSizeF QskStackBox::contentsSizeHint() const { const QSizeF constraint( -1, height ); - for ( const auto& itemInfo : qskAsConst( m_data->itemInfos ) ) + for ( const auto& item : qskAsConst( m_data->items ) ) { - const auto item = itemInfo.item; - if ( constraintType( item ) == WidthForHeight ) { - const QSizeF hint = QskLayoutConstraint::sizeHint( + const auto hint = QskLayoutConstraint::sizeHint( item, Qt::PreferredSize, constraint ); width = qMax( width, hint.width() ); @@ -481,10 +409,8 @@ QSizeF QskStackBox::contentsSizeHint() const { const QSizeF constraint( width, -1 ); - for ( const auto& itemInfo : qskAsConst( m_data->itemInfos ) ) + for ( const auto& item : qskAsConst( m_data->items ) ) { - const auto item = itemInfo.item; - if ( constraintType( item ) == HeightForWidth ) { const QSizeF hint = QskLayoutConstraint::sizeHint( diff --git a/src/layouts/QskStackBox.h b/src/layouts/QskStackBox.h index 62e4b9ee..f58e2037 100644 --- a/src/layouts/QskStackBox.h +++ b/src/layouts/QskStackBox.h @@ -34,11 +34,9 @@ class QSK_EXPORT QskStackBox : public QskIndexedLayoutBox QQuickItem* itemAtIndex( int index ) const; int indexOf( const QQuickItem* ) const; - void addItem( - QQuickItem*, Qt::Alignment alignment = Qt::Alignment() ); + void addItem( QQuickItem* ); - void insertItem( - int index, QQuickItem*, Qt::Alignment alignment = Qt::Alignment() ); + void insertItem( int index, QQuickItem* ); void removeItem( const QQuickItem* ); void removeAt( int index ); @@ -49,12 +47,6 @@ class QSK_EXPORT QskStackBox : public QskIndexedLayoutBox void setDefaultAlignment( Qt::Alignment ); Qt::Alignment defaultAlignment() const; - void setAlignmentAt( int index, Qt::Alignment ); - Qt::Alignment alignmentAt( int index ) const; - - void setAlignment( const QQuickItem*, Qt::Alignment ); - Qt::Alignment alignment( const QQuickItem* ) const; - void setAnimator( QskStackBoxAnimator* ); const QskStackBoxAnimator* animator() const; QskStackBoxAnimator* animator();