using QskControl::alignmentHint instead of QskStackBox:.setAlignmentOf
This commit is contained in:
parent
6a588dc95a
commit
72aee9970c
|
@ -25,6 +25,7 @@ namespace
|
||||||
setObjectName( "StackBox" );
|
setObjectName( "StackBox" );
|
||||||
|
|
||||||
setBackgroundColor( Qt::white );
|
setBackgroundColor( Qt::white );
|
||||||
|
setDefaultAlignment( Qt::AlignCenter );
|
||||||
|
|
||||||
setMargins( 30 );
|
setMargins( 30 );
|
||||||
|
|
||||||
|
@ -77,7 +78,7 @@ namespace
|
||||||
{
|
{
|
||||||
auto rect = new TestRectangle( colorName );
|
auto rect = new TestRectangle( colorName );
|
||||||
rect->setText( QString::number( itemCount() + 1 ) );
|
rect->setText( QString::number( itemCount() + 1 ) );
|
||||||
addItem( rect, Qt::AlignCenter );
|
addItem( rect );
|
||||||
}
|
}
|
||||||
|
|
||||||
int incrementedIndex( int offset ) const
|
int incrementedIndex( int offset ) const
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
#include "QskQmlGlobal.h"
|
#include "QskQmlGlobal.h"
|
||||||
|
|
||||||
#include <QskStackBox.h>
|
|
||||||
#include <QskLinearBox.h>
|
#include <QskLinearBox.h>
|
||||||
#include <QskGridBox.h>
|
#include <QskGridBox.h>
|
||||||
|
|
||||||
|
@ -47,31 +46,6 @@ class QskLayoutBoxQml : public LayoutBox
|
||||||
// QML does not like a const version
|
// QML does not like a const version
|
||||||
LayoutBox::removeItem( item );
|
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 >
|
class QskLinearBoxQml : public QskLayoutBoxQml< QskLinearBox >
|
||||||
|
|
|
@ -243,7 +243,6 @@ void QskQml::registerTypes()
|
||||||
#if 1
|
#if 1
|
||||||
QSK_REGISTER( QskGridBoxQml, "GridBox" );
|
QSK_REGISTER( QskGridBoxQml, "GridBox" );
|
||||||
QSK_REGISTER( QskLinearBoxQml, "LinearBox" );
|
QSK_REGISTER( QskLinearBoxQml, "LinearBox" );
|
||||||
QSK_REGISTER( QskStackBoxQml, "StackBox" );
|
|
||||||
#else
|
#else
|
||||||
QskGridBoxQml gridBox;
|
QskGridBoxQml gridBox;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -113,7 +113,7 @@ int QskTabView::insertTab( int index, QskTabButton* button, QQuickItem* item )
|
||||||
item->setParent( this );
|
item->setParent( this );
|
||||||
|
|
||||||
index = m_data->tabBar->insertTab( index, button );
|
index = m_data->tabBar->insertTab( index, button );
|
||||||
m_data->stackBox->insertItem( index, item, Qt::Alignment() );
|
m_data->stackBox->insertItem( index, item );
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,31 +35,10 @@ static qreal qskConstrainedValue( QskLayoutConstraint::Type type,
|
||||||
return constrainedValue;
|
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
|
class QskStackBox::PrivateData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QVector< ItemInfo > itemInfos;
|
QVector< QQuickItem* > items;
|
||||||
QPointer< QskStackBoxAnimator > animator;
|
QPointer< QskStackBoxAnimator > animator;
|
||||||
|
|
||||||
int currentIndex = -1;
|
int currentIndex = -1;
|
||||||
|
@ -140,24 +119,21 @@ QskStackBoxAnimator* QskStackBox::effectiveAnimator()
|
||||||
|
|
||||||
int QskStackBox::itemCount() const
|
int QskStackBox::itemCount() const
|
||||||
{
|
{
|
||||||
return m_data->itemInfos.count();
|
return m_data->items.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
QQuickItem* QskStackBox::itemAtIndex( int index ) const
|
QQuickItem* QskStackBox::itemAtIndex( int index ) const
|
||||||
{
|
{
|
||||||
if ( index >= 0 && index < m_data->itemInfos.count() )
|
return m_data->items.value( index );
|
||||||
return m_data->itemInfos[ index ].item;
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int QskStackBox::indexOf( const QQuickItem* item ) const
|
int QskStackBox::indexOf( const QQuickItem* item ) const
|
||||||
{
|
{
|
||||||
if ( item && ( item->parentItem() != this ) )
|
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;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -220,13 +196,12 @@ void QskStackBox::setCurrentItem( const QQuickItem* item )
|
||||||
setCurrentIndex( indexOf( 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(
|
void QskStackBox::insertItem( int index, QQuickItem* item )
|
||||||
int index, QQuickItem* item, Qt::Alignment alignment )
|
|
||||||
{
|
{
|
||||||
if ( item == nullptr )
|
if ( item == nullptr )
|
||||||
return;
|
return;
|
||||||
|
@ -251,30 +226,21 @@ void QskStackBox::insertItem(
|
||||||
if ( ( index == oldIndex ) || ( doAppend && ( oldIndex == itemCount() - 1 ) ) )
|
if ( ( index == oldIndex ) || ( doAppend && ( oldIndex == itemCount() - 1 ) ) )
|
||||||
{
|
{
|
||||||
// already in place
|
// already in place
|
||||||
|
|
||||||
auto& itemInfo = m_data->itemInfos[oldIndex];
|
|
||||||
|
|
||||||
if ( alignment != itemInfo.alignment )
|
|
||||||
{
|
|
||||||
itemInfo.alignment = alignment;
|
|
||||||
polish();
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_data->itemInfos.removeAt( oldIndex );
|
m_data->items.removeAt( oldIndex );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( doAppend )
|
if ( doAppend )
|
||||||
index = itemCount();
|
index = itemCount();
|
||||||
|
|
||||||
m_data->itemInfos.insert( index, { alignment, item } );
|
m_data->items.insert( index, item );
|
||||||
|
|
||||||
const int oldCurrentIndex = m_data->currentIndex;
|
const int oldCurrentIndex = m_data->currentIndex;
|
||||||
|
|
||||||
if ( m_data->itemInfos.count() == 1 )
|
if ( m_data->items.count() == 1 )
|
||||||
{
|
{
|
||||||
m_data->currentIndex = 0;
|
m_data->currentIndex = 0;
|
||||||
item->setVisible( true );
|
item->setVisible( true );
|
||||||
|
@ -301,19 +267,19 @@ void QskStackBox::removeAt( int index )
|
||||||
|
|
||||||
void QskStackBox::removeItemInternal( int index, bool unparent )
|
void QskStackBox::removeItemInternal( int index, bool unparent )
|
||||||
{
|
{
|
||||||
if ( index < 0 || index >= m_data->itemInfos.count() )
|
if ( index < 0 || index >= m_data->items.count() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( !unparent )
|
if ( !unparent )
|
||||||
{
|
{
|
||||||
if ( auto item = m_data->itemInfos[ index ].item )
|
if ( auto item = m_data->items[ index ] )
|
||||||
{
|
{
|
||||||
if ( item->parentItem() == this )
|
if ( item->parentItem() == this )
|
||||||
item->setParentItem( nullptr );
|
item->setParentItem( nullptr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_data->itemInfos.removeAt( index );
|
m_data->items.removeAt( index );
|
||||||
|
|
||||||
if ( index <= m_data->currentIndex )
|
if ( index <= m_data->currentIndex )
|
||||||
Q_EMIT currentIndexChanged( --m_data->currentIndex );
|
Q_EMIT currentIndexChanged( --m_data->currentIndex );
|
||||||
|
@ -339,21 +305,15 @@ void QskStackBox::autoRemoveItem( QQuickItem* item )
|
||||||
|
|
||||||
void QskStackBox::clear( bool autoDelete )
|
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 ) )
|
if( autoDelete && ( item->parent() == this ) )
|
||||||
{
|
|
||||||
delete item;
|
delete item;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
item->setParentItem( nullptr );
|
item->setParentItem( nullptr );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
m_data->itemInfos.clear();
|
m_data->items.clear();
|
||||||
|
|
||||||
if ( m_data->currentIndex >= 0 )
|
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
|
QRectF QskStackBox::geometryForItemAt( int index ) const
|
||||||
{
|
{
|
||||||
const auto r = layoutRect();
|
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( item, r, alignment );
|
||||||
return QskLayoutConstraint::boundedRect( info.item, r, align );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return QRectF( r.x(), r.y(), 0.0, 0.0 );
|
return QRectF( r.x(), r.y(), 0.0, 0.0 );
|
||||||
|
@ -411,12 +343,12 @@ void QskStackBox::updateLayout()
|
||||||
if ( maybeUnresized() )
|
if ( maybeUnresized() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto idx = m_data->currentIndex;
|
const auto index = m_data->currentIndex;
|
||||||
|
|
||||||
if ( idx >= 0 )
|
if ( index >= 0 )
|
||||||
{
|
{
|
||||||
const auto rect = geometryForItemAt( idx );
|
const auto rect = geometryForItemAt( index );
|
||||||
qskSetItemGeometry( m_data->itemInfos[ idx ].item, rect );
|
qskSetItemGeometry( m_data->items[ index ], rect );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,10 +366,8 @@ QSizeF QskStackBox::contentsSizeHint() const
|
||||||
|
|
||||||
int constraintTypes = Unconstrained;
|
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 );
|
const auto type = constraintType( item );
|
||||||
if ( type != Unconstrained )
|
if ( type != Unconstrained )
|
||||||
{
|
{
|
||||||
|
@ -463,13 +393,11 @@ QSizeF QskStackBox::contentsSizeHint() const
|
||||||
{
|
{
|
||||||
const QSizeF constraint( -1, height );
|
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 )
|
if ( constraintType( item ) == WidthForHeight )
|
||||||
{
|
{
|
||||||
const QSizeF hint = QskLayoutConstraint::sizeHint(
|
const auto hint = QskLayoutConstraint::sizeHint(
|
||||||
item, Qt::PreferredSize, constraint );
|
item, Qt::PreferredSize, constraint );
|
||||||
|
|
||||||
width = qMax( width, hint.width() );
|
width = qMax( width, hint.width() );
|
||||||
|
@ -481,10 +409,8 @@ QSizeF QskStackBox::contentsSizeHint() const
|
||||||
{
|
{
|
||||||
const QSizeF constraint( width, -1 );
|
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 )
|
if ( constraintType( item ) == HeightForWidth )
|
||||||
{
|
{
|
||||||
const QSizeF hint = QskLayoutConstraint::sizeHint(
|
const QSizeF hint = QskLayoutConstraint::sizeHint(
|
||||||
|
|
|
@ -34,11 +34,9 @@ class QSK_EXPORT QskStackBox : public QskIndexedLayoutBox
|
||||||
QQuickItem* itemAtIndex( int index ) const;
|
QQuickItem* itemAtIndex( int index ) const;
|
||||||
int indexOf( const QQuickItem* ) const;
|
int indexOf( const QQuickItem* ) const;
|
||||||
|
|
||||||
void addItem(
|
void addItem( QQuickItem* );
|
||||||
QQuickItem*, Qt::Alignment alignment = Qt::Alignment() );
|
|
||||||
|
|
||||||
void insertItem(
|
void insertItem( int index, QQuickItem* );
|
||||||
int index, QQuickItem*, Qt::Alignment alignment = Qt::Alignment() );
|
|
||||||
|
|
||||||
void removeItem( const QQuickItem* );
|
void removeItem( const QQuickItem* );
|
||||||
void removeAt( int index );
|
void removeAt( int index );
|
||||||
|
@ -49,12 +47,6 @@ class QSK_EXPORT QskStackBox : public QskIndexedLayoutBox
|
||||||
void setDefaultAlignment( Qt::Alignment );
|
void setDefaultAlignment( Qt::Alignment );
|
||||||
Qt::Alignment defaultAlignment() const;
|
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* );
|
void setAnimator( QskStackBoxAnimator* );
|
||||||
const QskStackBoxAnimator* animator() const;
|
const QskStackBoxAnimator* animator() const;
|
||||||
QskStackBoxAnimator* animator();
|
QskStackBoxAnimator* animator();
|
||||||
|
|
Loading…
Reference in New Issue