From 6a588dc95a2eddf2d54e160deff43e6c41dc11bc Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 5 Sep 2019 10:46:42 +0200 Subject: [PATCH] moving alignment/retainSizeWhenHidden from layouts to QskControl --- examples/automotive/SoundControl.cpp | 20 ++-- examples/gbenchmark/main.cpp | 3 +- examples/layouts/DynamicConstraintsPage.cpp | 6 +- examples/layouts/FlowLayoutPage.cpp | 7 +- examples/layouts/LinearLayoutPage.cpp | 8 +- examples/layouts/StackLayoutPage.cpp | 7 +- examples/mycontrols/main.cpp | 4 +- examples/qvgviewer/MainWindow.cpp | 3 +- examples/sliders/main.cpp | 5 +- examples/tabview/main.cpp | 3 +- playground/grids/GridSkinny.cpp | 12 +-- qmlexport/QskLayoutQml.h | 30 ------ src/controls/QskControl.cpp | 58 +++++++++++ src/controls/QskControl.h | 19 ++++ src/controls/QskControlPrivate.cpp | 2 + src/controls/QskControlPrivate.h | 4 +- src/dialogs/QskMessageSubWindow.cpp | 7 +- src/dialogs/QskMessageWindow.cpp | 8 +- src/inputpanel/QskInputPanelBox.cpp | 5 +- src/inputpanel/QskInputPredictionBar.cpp | 2 +- src/layouts/QskGridBox.cpp | 46 +-------- src/layouts/QskGridBox.h | 22 +--- src/layouts/QskGridLayoutEngine.cpp | 107 ++------------------ src/layouts/QskGridLayoutEngine.h | 8 +- src/layouts/QskLayoutConstraint.cpp | 80 +++++++++++++-- src/layouts/QskLayoutConstraint.h | 6 ++ src/layouts/QskLayoutEngine2D.cpp | 4 +- src/layouts/QskLayoutEngine2D.h | 3 +- src/layouts/QskLinearBox.cpp | 60 +---------- src/layouts/QskLinearBox.h | 19 +--- src/layouts/QskLinearLayoutEngine.cpp | 92 +---------------- src/layouts/QskLinearLayoutEngine.h | 6 -- 32 files changed, 249 insertions(+), 417 deletions(-) diff --git a/examples/automotive/SoundControl.cpp b/examples/automotive/SoundControl.cpp index 0959ed38..07eb77de 100644 --- a/examples/automotive/SoundControl.cpp +++ b/examples/automotive/SoundControl.cpp @@ -359,7 +359,15 @@ class BalanceFadeControlBox final : public QskGridBox { MarkerControlButton* buttons[ 4 ]; for ( int i = 0; i < 4; i++ ) - buttons[ i ] = new MarkerControlButton( static_cast< Qsk::Direction >( i ) ); + { + auto button = new MarkerControlButton( static_cast< Qsk::Direction >( i ) ); + button->setLayoutAlignmentHint( Qt::AlignCenter ); + + connect( button, &QskPushButton::pressed, + this, [ this, button ]() { shift( button->offset() ); } ); + + buttons[ i ] = button; + } m_carControl = new StackedControl(); @@ -369,16 +377,6 @@ class BalanceFadeControlBox final : public QskGridBox addItem( buttons[ Qsk::TopToBottom ], 2, 1 ); addItem( m_carControl, 1, 1 ); - - for ( int i = 0; i < 4; i++ ) - { - const auto button = buttons[ i ]; - - setAlignment( button, Qt::AlignCenter ); - - connect( button, &QskPushButton::pressed, - this, [ this, button ]() { shift( button->offset() ); } ); - } } void shift( const QPointF& offset ) diff --git a/examples/gbenchmark/main.cpp b/examples/gbenchmark/main.cpp index a9d82e41..2a5b00a2 100644 --- a/examples/gbenchmark/main.cpp +++ b/examples/gbenchmark/main.cpp @@ -48,10 +48,11 @@ int main( int argc, char* argv[] ) parser.showHelp( 1 ); auto button = new Button( args[ 0 ] ); + button->setLayoutAlignmentHint( Qt::AlignCenter ); QObject::connect( button, &Button::clicked, button, &Button::run ); auto box = new QskLinearBox(); - box->addItem( button, Qt::AlignCenter ); + box->addItem( button ); QskWindow window; window.setColor( Qt::white ); diff --git a/examples/layouts/DynamicConstraintsPage.cpp b/examples/layouts/DynamicConstraintsPage.cpp index 6c611404..55b54bb5 100644 --- a/examples/layouts/DynamicConstraintsPage.cpp +++ b/examples/layouts/DynamicConstraintsPage.cpp @@ -89,6 +89,7 @@ Box::Box( QQuickItem* parent ) setObjectName( "Box" ); setBackgroundColor( Qt::white ); + setDefaultAlignment( Qt::AlignCenter ); setMargins( 10 ); setSpacing( 5 ); @@ -116,7 +117,7 @@ void Box::flip() void Box::addControl( Control* control ) { - addItem( control, Qt::AlignCenter ); + addItem( control ); } DynamicConstraintsPage::DynamicConstraintsPage( QQuickItem* parent ) @@ -129,9 +130,10 @@ DynamicConstraintsPage::DynamicConstraintsPage( QQuickItem* parent ) auto button = new QskPushButton( "Flip" ); button->setSizePolicy( Qt::Horizontal, QskSizePolicy::Fixed ); + button->setLayoutAlignmentHint( Qt::AlignTop | Qt::AlignLeft ); QObject::connect( button, &QskPushButton::clicked, box, &Box::flip ); - addItem( button, Qt::AlignTop | Qt::AlignLeft ); + addItem( button ); addItem( box ); } diff --git a/examples/layouts/FlowLayoutPage.cpp b/examples/layouts/FlowLayoutPage.cpp index ea5e8faa..0e97a80e 100644 --- a/examples/layouts/FlowLayoutPage.cpp +++ b/examples/layouts/FlowLayoutPage.cpp @@ -27,6 +27,8 @@ namespace setMargins( 10 ); setSpacing( 5 ); + setDefaultAlignment( Qt::AlignCenter ); + addRectangle( "LightSteelBlue" ); addRectangle( "PowderBlue" ); addRectangle( "LightBlue" ); @@ -78,7 +80,7 @@ namespace auto rect = new TestRectangle( colorName ); rect->setText( QString::number( count() + 1 ) ); - addItem( rect, Qt::AlignCenter ); + addItem( rect ); } }; } @@ -92,12 +94,13 @@ FlowLayoutPage::FlowLayoutPage( QQuickItem* parent ) auto box = new Box(); auto buttonBox = new ButtonBox(); + buttonBox->setLayoutAlignmentHint( Qt::AlignTop | Qt::AlignLeft ); buttonBox->addButton( "Flip", [ box ]() { box->transpose(); } ); buttonBox->addButton( "Mirror", [ box ]() { box->mirror(); } ); buttonBox->addButton( "Rotate", [ box ]() { box->rotate(); } ); buttonBox->addButton( "Dim+", [ box ]() { box->incrementDimension( +1 ); } ); buttonBox->addButton( "Dim-", [ box ]() { box->incrementDimension( -1 ); } ); - addItem( buttonBox, Qt::AlignTop | Qt::AlignLeft ); + addItem( buttonBox ); addItem( box ); } diff --git a/examples/layouts/LinearLayoutPage.cpp b/examples/layouts/LinearLayoutPage.cpp index b8fad547..2b4ed739 100644 --- a/examples/layouts/LinearLayoutPage.cpp +++ b/examples/layouts/LinearLayoutPage.cpp @@ -26,6 +26,8 @@ namespace setMargins( 10 ); setSpacing( 5 ); + setDefaultAlignment( Qt::AlignCenter ); + addRectangle( "LightSalmon" ); addRectangle( "Salmon" ); addRectangle( "DarkSalmon" ); @@ -71,7 +73,7 @@ namespace auto rect = new TestRectangle( colorName ); rect->setText( QString::number( count() + 1 ) ); - addItem( rect, Qt::AlignCenter ); + addItem( rect ); } }; } @@ -85,12 +87,14 @@ LinearLayoutPage::LinearLayoutPage( QQuickItem* parent ) auto box = new Box(); auto buttonBox = new ButtonBox(); + + buttonBox->setLayoutAlignmentHint( Qt::AlignTop | Qt::AlignLeft ); buttonBox->addButton( "Flip", [ box ]() { box->transpose(); } ); buttonBox->addButton( "Mirror", [ box ]() { box->mirror(); } ); buttonBox->addButton( "Rotate", [ box ]() { box->rotate(); } ); buttonBox->addButton( "Spacing+", [ box ]() { box->incrementSpacing( +1 ); }, true ); buttonBox->addButton( "Spacing-", [ box ]() { box->incrementSpacing( -1 ); }, true ); - addItem( buttonBox, Qt::AlignTop | Qt::AlignLeft ); + addItem( buttonBox ); addItem( box ); } diff --git a/examples/layouts/StackLayoutPage.cpp b/examples/layouts/StackLayoutPage.cpp index 4df201eb..5d23f543 100644 --- a/examples/layouts/StackLayoutPage.cpp +++ b/examples/layouts/StackLayoutPage.cpp @@ -106,6 +106,8 @@ StackLayoutPage::StackLayoutPage( QQuickItem* parent ) auto* box = new StackBox(); auto* buttonBox = new ButtonBox(); + + buttonBox->setLayoutAlignmentHint( Qt::AlignTop | Qt::AlignLeft ); buttonBox->addButton( "<<", [ box ]() { box->incrementScrolling( Qt::Horizontal, +1 ); } ); buttonBox->addButton( ">>", [ box ]() { box->incrementScrolling( Qt::Horizontal, -1 ); } ); buttonBox->addButton( "^", [ box ]() { box->incrementScrolling( Qt::Vertical, -1 ); } ); @@ -115,9 +117,10 @@ StackLayoutPage::StackLayoutPage( QQuickItem* parent ) auto pageIndicator = new QskPageIndicator(); pageIndicator->setCount( box->itemCount() ); pageIndicator->setCurrentIndex( box->currentIndex() ); + pageIndicator->setLayoutAlignmentHint( Qt::AlignCenter ); - addItem( buttonBox, Qt::AlignTop | Qt::AlignLeft ); - addItem( pageIndicator, Qt::AlignCenter ); + addItem( buttonBox ); + addItem( pageIndicator ); addItem( box ); connect( box, &QskStackBox::currentIndexChanged, diff --git a/examples/mycontrols/main.cpp b/examples/mycontrols/main.cpp index d60e9404..ec59ade8 100644 --- a/examples/mycontrols/main.cpp +++ b/examples/mycontrols/main.cpp @@ -77,13 +77,15 @@ class Window : public QskWindow Window() { auto button = new MyToggleButton(); + button->setTextAt( 0, "Skin 1" ); button->setTextAt( 1, "Skin 2" ); + button->setLayoutAlignmentHint( Qt::AlignRight ); auto box = new QskLinearBox( Qt::Vertical ); box->setMargins( 20 ); - box->addItem( button, Qt::AlignRight ); + box->addItem( button ); box->addSpacer( 10 ); box->addItem( new ContentBox() ); diff --git a/examples/qvgviewer/MainWindow.cpp b/examples/qvgviewer/MainWindow.cpp index 65164d7d..cd821a77 100644 --- a/examples/qvgviewer/MainWindow.cpp +++ b/examples/qvgviewer/MainWindow.cpp @@ -90,10 +90,11 @@ MainWindow::MainWindow() auto invertButton = new QskPushButton( "Inverted" ); invertButton->setSizePolicy( Qt::Horizontal, QskSizePolicy::Fixed ); invertButton->setCheckable( true ); + invertButton->setLayoutAlignmentHint( Qt::AlignRight ); auto box = new QskLinearBox( Qt::Vertical ); box->setMargins( 5 ); - box->addItem( invertButton, Qt::AlignRight ); + box->addItem( invertButton ); box->addItem( m_tabView ); addItem( box ); diff --git a/examples/sliders/main.cpp b/examples/sliders/main.cpp index 2d41a243..9d9d88ba 100644 --- a/examples/sliders/main.cpp +++ b/examples/sliders/main.cpp @@ -142,7 +142,7 @@ class SliderBox : public QskLinearBox connect( slider, &QskSlider::valueChanged, []( qreal value ) { qDebug() << value; } ); #endif - setAlignment( slider, Qt::AlignCenter ); + slider->setLayoutAlignmentHint( Qt::AlignCenter ); } } } @@ -203,9 +203,10 @@ int main( int argc, char* argv[] ) sliderBox, &SliderBox::flip ); auto mainBox = new QskLinearBox( Qt::Vertical ); + mainBox->setDefaultAlignment( Qt::AlignLeft ); mainBox->setMargins( 10 ); mainBox->setSpacing( 10 ); - mainBox->addItem( buttonFlip, Qt::AlignLeft ); + mainBox->addItem( buttonFlip ); mainBox->addItem( sliderBox ); mainBox->setStretchFactor( sliderBox, 10 ); diff --git a/examples/tabview/main.cpp b/examples/tabview/main.cpp index 4e16b865..afa58203 100644 --- a/examples/tabview/main.cpp +++ b/examples/tabview/main.cpp @@ -87,9 +87,10 @@ int main( int argc, char* argv[] ) QObject::connect( rotateButton, &QskPushButton::clicked, tabView, &TabView::rotate ); auto layoutBox = new QskLinearBox( Qt::Vertical ); + layoutBox->setDefaultAlignment( Qt::AlignLeft ); layoutBox->setMargins( 5 ); layoutBox->setSpacing( 10 ); - layoutBox->addItem( rotateButton, Qt::AlignLeft ); + layoutBox->addItem( rotateButton ); layoutBox->addItem( tabView ); auto focusIndicator = new QskFocusIndicator(); diff --git a/playground/grids/GridSkinny.cpp b/playground/grids/GridSkinny.cpp index ebbe97ef..af9c1389 100644 --- a/playground/grids/GridSkinny.cpp +++ b/playground/grids/GridSkinny.cpp @@ -87,7 +87,7 @@ void GridSkinny::setStretchFactor( void GridSkinny::setSizeHintAt( int index, Qt::Orientation orientation, Qt::SizeHint which, int hint ) { - if ( auto control = qobject_cast< QskControl* >( m_grid->itemAtIndex( index ) ) ) + if ( auto control = qskControlCast( m_grid->itemAtIndex( index ) ) ) { auto size = control->explicitSizeHint( which ); @@ -103,7 +103,7 @@ void GridSkinny::setSizeHintAt( int index, Qt::Orientation orientation, void GridSkinny::setSizePolicyAt( int index, Qt::Orientation orientation, int policy ) { - if ( auto control = qobject_cast< QskControl* >( m_grid->itemAtIndex( index ) ) ) + if ( auto control = qskControlCast( m_grid->itemAtIndex( index ) ) ) { control->setSizePolicy( orientation, static_cast< QskSizePolicy::Policy >( policy ) ); @@ -112,14 +112,14 @@ void GridSkinny::setSizePolicyAt( void GridSkinny::setAlignmentAt( int index, Qt::Alignment alignment ) { - if ( auto item = m_grid->itemAtIndex( index ) ) - m_grid->setAlignment( item, alignment ); + if ( auto control = qskControlCast( m_grid->itemAtIndex( index ) ) ) + control->setLayoutAlignmentHint( alignment ); } void GridSkinny::setRetainSizeWhenHiddenAt( int index, bool on ) { - if ( auto item = m_grid->itemAtIndex( index ) ) - m_grid->setRetainSizeWhenHidden( item, on ); + if ( auto control = qskControlCast( m_grid->itemAtIndex( index ) ) ) + control->setLayoutHint( QskControl::RetainSizeWhenHidden, on ); } void GridSkinny::setVisibleAt( int index, bool on ) diff --git a/qmlexport/QskLayoutQml.h b/qmlexport/QskLayoutQml.h index 1f43afd8..b0410c2b 100644 --- a/qmlexport/QskLayoutQml.h +++ b/qmlexport/QskLayoutQml.h @@ -80,16 +80,6 @@ class QskLinearBoxQml : public QskLayoutBoxQml< QskLinearBox > public: - Q_INVOKABLE void setAlignment( int index, Qt::Alignment alignment ) - { - QskLinearBox::setAlignment( index, alignment ); - } - - Q_INVOKABLE Qt::Alignment alignment( int index ) const - { - return QskLinearBox::alignment( index ); - } - Q_INVOKABLE void setStretchFactor( QQuickItem* item, int stretchFactor ) { QskLinearBox::setStretchFactor( item, stretchFactor ); @@ -99,16 +89,6 @@ class QskLinearBoxQml : public QskLayoutBoxQml< QskLinearBox > { return QskLinearBox::stretchFactor( item ); } - - Q_INVOKABLE void setRetainSizeWhenHidden( QQuickItem* item, bool on ) - { - QskLinearBox::setRetainSizeWhenHidden( item, on ); - } - - Q_INVOKABLE bool retainSizeWhenHidden( QQuickItem* item ) const - { - return QskLinearBox::retainSizeWhenHidden( item ); - } }; class QskGridBoxQml : public QskLayoutBoxQml< QskGridBox > @@ -132,16 +112,6 @@ class QskGridBoxQml : public QskLayoutBoxQml< QskGridBox > void resetVerticalSpacing(); qreal verticalSpacing() const; - Q_INVOKABLE bool retainSizeWhenHidden( QQuickItem* item ) const - { - return QskGridBox::retainSizeWhenHidden( item ); - } - - Q_INVOKABLE void setRetainSizeWhenHidden( QQuickItem* item, bool on ) - { - QskGridBox::setRetainSizeWhenHidden( item, on ); - } - Q_SIGNALS: void verticalSpacingChanged(); void horizontalSpacingChanged(); diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index be491f2a..08a80a47 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -341,6 +341,64 @@ QskSizePolicy::Policy QskControl::sizePolicy( Qt::Orientation orientation ) cons return d_func()->sizePolicy.policy( orientation ); } +/* + Layout attributes belong more to the layout code, than + being parameters of the control. So storing them here is kind of a + design flaw ( similar to QWidget/QSizePolicy ). + But this way we don't need to add the attributes to all type of + layout engines + we can make use of them when doing layouts + manually ( f.e autoLayoutChildren ). + */ +void QskControl::setLayoutAlignmentHint( Qt::Alignment alignment ) +{ + Q_D( QskControl ); + + if ( d->layoutAlignmentHint != alignment ) + { + d->layoutAlignmentHint = alignment; + d->layoutConstraintChanged(); + } +} + +Qt::Alignment QskControl::layoutAlignmentHint() const +{ + return static_cast< Qt::Alignment >( d_func()->layoutAlignmentHint ); +} + +void QskControl::setLayoutHint( LayoutHint flag, bool on ) +{ + Q_D( QskControl ); + if ( ( d->layoutHints & flag ) != on ) + { + if ( on ) + d->layoutHints |= flag; + else + d->layoutHints &= ~flag; + + d->layoutConstraintChanged(); + } +} + +bool QskControl::testLayoutHint( LayoutHint hint ) const +{ + return d_func()->layoutHints & hint; +} + +void QskControl::setLayoutHints( LayoutHints hints ) +{ + Q_D( QskControl ); + if ( hints != layoutHints() ) + { + d->layoutHints = hints; + d->layoutConstraintChanged(); + } +} + +QskControl::LayoutHints QskControl::layoutHints() const +{ + return static_cast< LayoutHints >( d_func()->layoutHints ); +} + void QskControl::setPreferredSize( const QSizeF& size ) { setExplicitSizeHint( Qt::PreferredSize, size ); diff --git a/src/controls/QskControl.h b/src/controls/QskControl.h index fddd70c3..56b631ec 100644 --- a/src/controls/QskControl.h +++ b/src/controls/QskControl.h @@ -56,6 +56,15 @@ class QSK_EXPORT QskControl : public QskQuickItem, public QskSkinnable public: QSK_STATES( Disabled, Hovered, Focused ) + enum LayoutHint + { + // How to be treated by layouts + RetainSizeWhenHidden = 1 << 0 + }; + + Q_ENUM( LayoutHint ) + Q_DECLARE_FLAGS( LayoutHints, LayoutHint ) + QskControl( QQuickItem* parent = nullptr ); ~QskControl() override; @@ -99,6 +108,16 @@ class QSK_EXPORT QskControl : public QskQuickItem, public QskSkinnable QskSizePolicy sizePolicy() const; QskSizePolicy::Policy sizePolicy( Qt::Orientation ) const; + // hints for how to be treated by layouts + void setLayoutAlignmentHint( Qt::Alignment ); + Qt::Alignment layoutAlignmentHint() const; + + void setLayoutHint( LayoutHint, bool on ); + bool testLayoutHint( LayoutHint ) const; + + void setLayoutHints( LayoutHints ); + LayoutHints layoutHints() const; + void setMinimumSize( const QSizeF& ); void setMinimumSize( qreal width, qreal height ); void setMinimumWidth( qreal width ); diff --git a/src/controls/QskControlPrivate.cpp b/src/controls/QskControlPrivate.cpp index c981e94a..8b483278 100644 --- a/src/controls/QskControlPrivate.cpp +++ b/src/controls/QskControlPrivate.cpp @@ -39,6 +39,8 @@ static inline void qskSendEventTo( QObject* object, QEvent::Type type ) QskControlPrivate::QskControlPrivate() : explicitSizeHints( nullptr ) , sizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Preferred ) + , layoutHints( 0 ) + , layoutAlignmentHint( 0 ) , explicitLocale( false ) , autoFillBackground( false ) , autoLayoutChildren( false ) diff --git a/src/controls/QskControlPrivate.h b/src/controls/QskControlPrivate.h index 66b89f9b..7c9365be 100644 --- a/src/controls/QskControlPrivate.h +++ b/src/controls/QskControlPrivate.h @@ -8,7 +8,6 @@ #include "QskGlobal.h" #include "QskControl.h" - #include "QskQuickItemPrivate.h" class QskControlPrivate : public QskQuickItemPrivate @@ -43,7 +42,10 @@ class QskControlPrivate : public QskQuickItemPrivate QSizeF* explicitSizeHints; QLocale locale; + QskSizePolicy sizePolicy; + int layoutHints : 4; + unsigned int layoutAlignmentHint : 8; bool explicitLocale : 1; diff --git a/src/dialogs/QskMessageSubWindow.cpp b/src/dialogs/QskMessageSubWindow.cpp index d5eba883..4f3e197d 100644 --- a/src/dialogs/QskMessageSubWindow.cpp +++ b/src/dialogs/QskMessageSubWindow.cpp @@ -85,12 +85,11 @@ QskMessageSubWindow::QskMessageSubWindow( QQuickItem* parent ) m_data->symbolLabel = new SymbolLabel( this ); m_data->symbolLabel->hide(); - const auto alignment = Qt::AlignTop | Qt::AlignHCenter; - auto box = new QskLinearBox( Qt::Horizontal ); + box->setDefaultAlignment( Qt::AlignTop | Qt::AlignHCenter ); box->setSpacing( 0 ); - box->addItem( m_data->symbolLabel, alignment ); - box->addItem( m_data->textLabel, alignment ); + box->addItem( m_data->symbolLabel ); + box->addItem( m_data->textLabel ); box->setStretchFactor( m_data->textLabel, 10 ); setContentItem( box ); diff --git a/src/dialogs/QskMessageWindow.cpp b/src/dialogs/QskMessageWindow.cpp index 2fbfeb9f..4e09c0ca 100644 --- a/src/dialogs/QskMessageWindow.cpp +++ b/src/dialogs/QskMessageWindow.cpp @@ -89,12 +89,12 @@ QskMessageWindow::QskMessageWindow( QWindow* parent ) m_data->symbolLabel = new SymbolLabel( this ); m_data->symbolLabel->hide(); - const auto alignment = Qt::AlignTop | Qt::AlignHCenter; - auto box = new QskLinearBox( Qt::Horizontal ); + + box->setDefaultAlignment( Qt::AlignTop | Qt::AlignHCenter ); box->setSpacing( 0 ); - box->addItem( m_data->symbolLabel, alignment ); - box->addItem( m_data->textLabel, alignment ); + box->addItem( m_data->symbolLabel ); + box->addItem( m_data->textLabel ); box->setStretchFactor( m_data->textLabel, 10 ); setDialogContentItem( box ); diff --git a/src/inputpanel/QskInputPanelBox.cpp b/src/inputpanel/QskInputPanelBox.cpp index 4b84fb43..06364503 100644 --- a/src/inputpanel/QskInputPanelBox.cpp +++ b/src/inputpanel/QskInputPanelBox.cpp @@ -93,9 +93,10 @@ QskInputPanelBox::QskInputPanelBox( QQuickItem* parent ) m_data->keyboard = new QskVirtualKeyboard(); auto layout = new QskLinearBox( Qt::Vertical, this ); + layout->setDefaultAlignment( Qt::AlignLeft | Qt::AlignHCenter ); - layout->addItem( m_data->prompt, Qt::AlignLeft | Qt::AlignHCenter ); - layout->addItem( m_data->inputProxy, Qt::AlignLeft | Qt::AlignHCenter ); + layout->addItem( m_data->prompt ); + layout->addItem( m_data->inputProxy ); layout->addStretch( 10 ); layout->addItem( m_data->predictionBar ); layout->addItem( m_data->keyboard ); diff --git a/src/inputpanel/QskInputPredictionBar.cpp b/src/inputpanel/QskInputPredictionBar.cpp index 94113375..79d54307 100644 --- a/src/inputpanel/QskInputPredictionBar.cpp +++ b/src/inputpanel/QskInputPredictionBar.cpp @@ -87,7 +87,7 @@ QskInputPredictionBar::QskInputPredictionBar( QQuickItem* parent ) if ( i == 0 ) { // to keep the height - m_data->layoutBox->setRetainSizeWhenHidden( button, true ); + button->setLayoutHint( QskControl::RetainSizeWhenHidden, true ); } } } diff --git a/src/layouts/QskGridBox.cpp b/src/layouts/QskGridBox.cpp index 8668d4cc..e5b58c61 100644 --- a/src/layouts/QskGridBox.cpp +++ b/src/layouts/QskGridBox.cpp @@ -96,8 +96,7 @@ QskGridBox::~QskGridBox() } int QskGridBox::addItem( QQuickItem* item, - int row, int column, int rowSpan, int columnSpan, - Qt::Alignment alignment ) + int row, int column, int rowSpan, int columnSpan ) { if ( item == nullptr || row < 0 || column < 0 ) return -1; @@ -116,12 +115,7 @@ int QskGridBox::addItem( QQuickItem* item, if ( index >= 0 ) { if ( engine.gridAt( index ) == itemGrid ) - { - if ( engine.setAlignmentAt( index, alignment ) ) - polish(); - return index; - } } } @@ -134,7 +128,7 @@ int QskGridBox::addItem( QQuickItem* item, item->setParentItem( this ); qskSetItemActive( this, item, true ); - index = engine.insertItem( item, itemGrid, alignment ); + index = engine.insertItem( item, itemGrid ); } if ( engine.count() > 1 ) @@ -311,42 +305,6 @@ void QskGridBox::setColumnFixedWidth( int column, qreal width ) setColumnSizeHint( column, Qt::MaximumSize, width ); } -void QskGridBox::setAlignment( const QQuickItem* item, Qt::Alignment alignment ) -{ - auto& engine = m_data->engine; - - const int index = engine.indexOf( item ); - if ( index >= 0 ) - { - if ( engine.setAlignmentAt( index, alignment ) ) - polish(); - } -} - -Qt::Alignment QskGridBox::alignment( const QQuickItem* item ) const -{ - const auto& engine = m_data->engine; - return engine.alignmentAt( engine.indexOf( item ) ); -} - -void QskGridBox::setRetainSizeWhenHidden( const QQuickItem* item, bool on ) -{ - auto& engine = m_data->engine; - - const int index = engine.indexOf( item ); - if ( index >= 0 ) - { - if ( engine.setRetainSizeWhenHiddenAt( index, on ) ) - invalidate(); - } -} - -bool QskGridBox::retainSizeWhenHidden( const QQuickItem* item ) const -{ - const auto& engine = m_data->engine; - return engine.retainSizeWhenHiddenAt( engine.indexOf( item ) ); -} - void QskGridBox::setRowSizeHint( int row, Qt::SizeHint which, qreal height ) { if ( m_data->engine.setRowSizeHint( row, which, height ) ) diff --git a/src/layouts/QskGridBox.h b/src/layouts/QskGridBox.h index 5fee1fff..b3f19c8e 100644 --- a/src/layouts/QskGridBox.h +++ b/src/layouts/QskGridBox.h @@ -24,13 +24,10 @@ class QSK_EXPORT QskGridBox : public QskBox explicit QskGridBox( QQuickItem* parent = nullptr ); ~QskGridBox() override; - Q_INVOKABLE int addItem( - QQuickItem*, int row, int column, int rowSpan, int columnSpan, - Qt::Alignment alignment = Qt::Alignment() ); + Q_INVOKABLE int addItem( QQuickItem*, + int row, int column, int rowSpan, int columnSpan ); - Q_INVOKABLE int addItem( - QQuickItem*, int row, int column, - Qt::Alignment alignment = Qt::Alignment() ); + Q_INVOKABLE int addItem( QQuickItem*, int row, int column ); Q_INVOKABLE int addSpacer( qreal spacing, int row, int column, int columnSpan = 1, int rowSpan = 1 ); @@ -102,14 +99,6 @@ class QSK_EXPORT QskGridBox : public QskBox Q_INVOKABLE void setRowFixedHeight( int row, qreal height ); Q_INVOKABLE void setColumnFixedWidth( int column, qreal width ); - // alignments - - void setAlignment( const QQuickItem* item, Qt::Alignment alignment ); - Qt::Alignment alignment( const QQuickItem* item ) const; - - bool retainSizeWhenHidden( const QQuickItem* ) const; - void setRetainSizeWhenHidden( const QQuickItem*, bool on ); - QSizeF contentsSizeHint() const override; qreal heightForWidth( qreal width ) const override; @@ -134,10 +123,9 @@ class QSK_EXPORT QskGridBox : public QskBox std::unique_ptr< PrivateData > m_data; }; -inline int QskGridBox::addItem( - QQuickItem* item, int row, int column, Qt::Alignment alignment ) +inline int QskGridBox::addItem( QQuickItem* item, int row, int column ) { - return addItem( item, row, column, 1, 1, alignment ); + return addItem( item, row, column, 1, 1 ); } inline bool QskGridBox::isEmpty() const diff --git a/src/layouts/QskGridLayoutEngine.cpp b/src/layouts/QskGridLayoutEngine.cpp index a5d420bd..99bb8e48 100644 --- a/src/layouts/QskGridLayoutEngine.cpp +++ b/src/layouts/QskGridLayoutEngine.cpp @@ -158,7 +158,7 @@ namespace class Element { public: - Element( QQuickItem*, const QRect&, Qt::Alignment ); + Element( QQuickItem*, const QRect& ); Element( qreal spacing, const QRect& ); Element& operator=( const Element& ); @@ -166,12 +166,6 @@ namespace qreal spacer() const; QQuickItem* item() const; - Qt::Alignment alignment() const; - void setAlignment( Qt::Alignment ); - - bool retainSizeWhenHidden() const; - void setRetainSizeWhenHidden( bool ); - QRect grid() const; void setGrid( const QRect& ); @@ -193,29 +187,21 @@ namespace }; QRect m_grid; - - unsigned int m_alignment : 8; - bool m_isSpacer : 1; - bool m_retainSizeWhenHidden : 1; + bool m_isSpacer; }; } -Element::Element( QQuickItem* item, - const QRect& grid, Qt::Alignment alignment ) +Element::Element( QQuickItem* item, const QRect& grid ) : m_item( item ) , m_grid( grid ) - , m_alignment(alignment) , m_isSpacer( false ) - , m_retainSizeWhenHidden( false ) { } Element::Element( qreal spacing, const QRect& grid ) : m_spacer( spacing ) , m_grid( grid ) - , m_alignment( 0 ) , m_isSpacer( true ) - , m_retainSizeWhenHidden( false ) { } @@ -229,8 +215,6 @@ Element& Element::operator=( const Element& other ) m_item = other.m_item; m_grid = other.m_grid; - m_alignment = other.m_alignment; - m_retainSizeWhenHidden = other.m_retainSizeWhenHidden; return *this; } @@ -245,26 +229,6 @@ inline QQuickItem* Element::item() const return m_isSpacer ? nullptr : m_item; } -inline Qt::Alignment Element::alignment() const -{ - return static_cast< Qt::Alignment >( m_alignment ); -} - -void Element::setAlignment( Qt::Alignment alignment ) -{ - m_alignment = alignment; -} - -inline bool Element::retainSizeWhenHidden() const -{ - return m_retainSizeWhenHidden; -} - -void Element::setRetainSizeWhenHidden( bool on ) -{ - m_retainSizeWhenHidden = on; -} - QRect Element::grid() const { return m_grid; @@ -283,7 +247,7 @@ QRect Element::minimumGrid() const bool Element::isIgnored() const { - if ( !m_isSpacer && !m_retainSizeWhenHidden ) + if ( !m_isSpacer && !QskLayoutConstraint::retainSizeWhenHidden( m_item ) ) return !qskIsVisibleToParent( m_item ); return false; @@ -325,8 +289,7 @@ class QskGridLayoutEngine::PrivateData return const_cast< Element* >( &this->elements[index] ); } - int insertElement( QQuickItem* item, qreal spacing, - QRect grid, Qt::Alignment alignment ) + int insertElement( QQuickItem* item, qreal spacing, QRect grid ) { // -1 means unlimited, while 0 does not make any sense if ( grid.width() == 0 ) @@ -336,7 +299,7 @@ class QskGridLayoutEngine::PrivateData grid.setHeight( 1 ); if ( item ) - elements.push_back( Element( item, grid, alignment ) ); + elements.push_back( Element( item, grid ) ); else elements.push_back( Element( spacing, grid ) ); @@ -452,66 +415,16 @@ qreal QskGridLayoutEngine::columnSizeHint( int column, Qt::SizeHint which ) cons return settings.settingAt( column ).hint().size( which ); } -bool QskGridLayoutEngine::setAlignmentAt( int index, Qt::Alignment alignment ) -{ - if ( auto element = m_data->elementAt( index ) ) - { - if ( alignment != element->alignment() ) - element->setAlignment( alignment ); - - return true; - } - - return false; -} - -Qt::Alignment QskGridLayoutEngine::alignmentAt( int index ) const -{ - if ( const auto element = m_data->elementAt( index ) ) - return element->alignment(); - - return Qt::Alignment(); -} - -bool QskGridLayoutEngine::setRetainSizeWhenHiddenAt( int index, bool on ) -{ - if ( auto element = m_data->elementAt( index ) ) - { - if ( on != element->retainSizeWhenHidden() ) - { - const bool isIgnored = element->isIgnored(); - element->setRetainSizeWhenHidden( on ); - - if ( isIgnored != element->isIgnored() ) - { - invalidate(); - return true; - } - } - } - - return false; -} - -bool QskGridLayoutEngine::retainSizeWhenHiddenAt( int index ) const -{ - if ( const auto element = m_data->elementAt( index ) ) - return element->retainSizeWhenHidden(); - - return false; -} - -int QskGridLayoutEngine::insertItem( QQuickItem* item, - const QRect& grid, Qt::Alignment alignment ) +int QskGridLayoutEngine::insertItem( QQuickItem* item, const QRect& grid ) { invalidate(); - return m_data->insertElement( item, -1, grid, alignment ); + return m_data->insertElement( item, -1, grid ); } int QskGridLayoutEngine::insertSpacer( qreal spacing, const QRect& grid ) { spacing = qMax( spacing, 0.0 ); - return m_data->insertElement( nullptr, spacing, grid, Qt::Alignment() ); + return m_data->insertElement( nullptr, spacing, grid ); } bool QskGridLayoutEngine::removeAt( int index ) @@ -640,7 +553,7 @@ void QskGridLayoutEngine::layoutItems() if ( auto item = element.item() ) { const auto grid = m_data->effectiveGrid( element ); - layoutItem( item, grid, element.alignment() ); + layoutItem( item, grid ); } } } diff --git a/src/layouts/QskGridLayoutEngine.h b/src/layouts/QskGridLayoutEngine.h index d5231a82..f68154f0 100644 --- a/src/layouts/QskGridLayoutEngine.h +++ b/src/layouts/QskGridLayoutEngine.h @@ -33,7 +33,7 @@ class QskGridLayoutEngine : public QskLayoutEngine2D bool setColumnSizeHint( int column, Qt::SizeHint, qreal width ); qreal columnSizeHint( int column, Qt::SizeHint ) const; - int insertItem( QQuickItem*, const QRect& grid, Qt::Alignment ); + int insertItem( QQuickItem*, const QRect& grid ); int insertSpacer( qreal spacing, const QRect& grid ); bool removeAt( int index ); @@ -50,12 +50,6 @@ class QskGridLayoutEngine : public QskLayoutEngine2D QRect effectiveGridAt( int index ) const; - bool setRetainSizeWhenHiddenAt( int index, bool on ); - bool retainSizeWhenHiddenAt( int index ) const; - - bool setAlignmentAt( int index, Qt::Alignment ); - Qt::Alignment alignmentAt( int index ) const; - void transpose(); private: diff --git a/src/layouts/QskLayoutConstraint.cpp b/src/layouts/QskLayoutConstraint.cpp index 4aecb734..10857a34 100644 --- a/src/layouts/QskLayoutConstraint.cpp +++ b/src/layouts/QskLayoutConstraint.cpp @@ -7,6 +7,7 @@ #include "QskControl.h" #include "QskSizePolicy.h" #include "QskLayoutHint.h" +#include "QskQuick.h" #include "QskFunctions.h" #include @@ -219,14 +220,11 @@ qreal QskLayoutConstraint::constrainedChildrenMetric( const auto children = control->childItems(); for ( auto child : children ) { - if ( auto control = qskControlCast( child ) ) + if ( !qskIsTransparentForPositioner( child ) ) { - if ( !control->isTransparentForPositioner() ) - { - const auto v = constrainFunction( control, constraint ); - if ( v > constrainedValue ) - constrainedValue = v; - } + const auto v = constrainFunction( child, constraint ); + if ( v > constrainedValue ) + constrainedValue = v; } } @@ -425,3 +423,71 @@ QskLayoutHint QskLayoutConstraint::layoutHint( return QskLayoutHint( minimum, preferred, maximum ); } + +static const char s_alignmentProperty[] = "layoutAlignmentHint"; +static const char s_retainSizeWhenHiddenProperty[] = "layoutRetainSizeWhenHidden"; + +Qt::Alignment QskLayoutConstraint::layoutAlignmentHint( const QQuickItem* item ) +{ + if ( auto control = qskControlCast( item ) ) + { + return control->layoutAlignmentHint(); + } + else if ( item ) + { + const QVariant v = item->property( s_alignmentProperty ); + if ( v.canConvert< Qt::Alignment >() ) + return v.value< Qt::Alignment >(); + } + + return Qt::Alignment(); +} + +void QskLayoutConstraint::setLayoutAlignmentHint( + QQuickItem* item, Qt::Alignment alignment ) +{ + if ( auto control = qskControlCast( item ) ) + { + control->setLayoutAlignmentHint( alignment ); + } + else if ( item ) + { + QVariant v; + if ( alignment ) + v.setValue( alignment ); + + item->setProperty( s_alignmentProperty, v ); + } +} + +bool QskLayoutConstraint::retainSizeWhenHidden( const QQuickItem* item ) +{ + if ( auto control = qskControlCast( item ) ) + { + return control->layoutHints() & QskControl::RetainSizeWhenHidden; + } + else if ( item ) + { + const QVariant v = item->property( s_retainSizeWhenHiddenProperty ); + if ( v.canConvert< bool >() ) + return v.toBool(); + } + + return false; +} + +void QskLayoutConstraint::setRetainSizeWhenHidden( QQuickItem* item, bool on ) +{ + if ( auto control = qskControlCast( item ) ) + { + control->setLayoutHint( QskControl::RetainSizeWhenHidden, on ); + } + else if ( item ) + { + QVariant v; + if ( on ) + v.setValue( on ); + + item->setProperty( s_retainSizeWhenHiddenProperty, v ); + } +} diff --git a/src/layouts/QskLayoutConstraint.h b/src/layouts/QskLayoutConstraint.h index 70445efc..55b36f06 100644 --- a/src/layouts/QskLayoutConstraint.h +++ b/src/layouts/QskLayoutConstraint.h @@ -60,6 +60,12 @@ namespace QskLayoutConstraint QSK_EXPORT QskLayoutHint layoutHint( const QQuickItem*, Qt::Orientation, qreal constraint ); + QSK_EXPORT Qt::Alignment layoutAlignmentHint( const QQuickItem* ); + QSK_EXPORT void setLayoutAlignmentHint( QQuickItem*, Qt::Alignment ); + + QSK_EXPORT bool retainSizeWhenHidden( const QQuickItem* ); + QSK_EXPORT void setRetainSizeWhenHidden( QQuickItem*, bool ); + const qreal unlimited = std::numeric_limits< float >::max(); const QSizeF defaultSizeHints[] = { { 0, 0 }, { -1, -1 }, { unlimited, unlimited } }; } diff --git a/src/layouts/QskLayoutEngine2D.cpp b/src/layouts/QskLayoutEngine2D.cpp index 884dd234..45df97d8 100644 --- a/src/layouts/QskLayoutEngine2D.cpp +++ b/src/layouts/QskLayoutEngine2D.cpp @@ -252,14 +252,14 @@ void QskLayoutEngine2D::setGeometries( const QRectF& rect ) m_data->layoutData = nullptr; } -void QskLayoutEngine2D::layoutItem( QQuickItem* item, - const QRect& grid, Qt::Alignment alignment ) const +void QskLayoutEngine2D::layoutItem( QQuickItem* item, const QRect& grid ) const { auto layoutData = m_data->layoutData; if ( layoutData == nullptr || item == nullptr ) return; + auto alignment = QskLayoutConstraint::layoutAlignmentHint( item ); alignment = m_data->effectiveAlignment( alignment ); QRectF rect = layoutData->geometryAt( grid ); diff --git a/src/layouts/QskLayoutEngine2D.h b/src/layouts/QskLayoutEngine2D.h index 6cb07273..2d9214ac 100644 --- a/src/layouts/QskLayoutEngine2D.h +++ b/src/layouts/QskLayoutEngine2D.h @@ -54,8 +54,7 @@ class QskLayoutEngine2D protected: - void layoutItem( QQuickItem*, - const QRect& grid, Qt::Alignment ) const; + void layoutItem( QQuickItem*, const QRect& grid ) const; enum { diff --git a/src/layouts/QskLinearBox.cpp b/src/layouts/QskLinearBox.cpp index 8ea9b8fc..48e26a3e 100644 --- a/src/layouts/QskLinearBox.cpp +++ b/src/layouts/QskLinearBox.cpp @@ -379,13 +379,12 @@ Qt::Edges QskLinearBox::extraSpacingAt() const return m_data->engine.extraSpacingAt(); } -int QskLinearBox::addItem( QQuickItem* item, Qt::Alignment alignment ) +int QskLinearBox::addItem( QQuickItem* item ) { - return insertItem( -1, item, alignment ); + return insertItem( -1, item ); } -int QskLinearBox::insertItem( - int index, QQuickItem* item, Qt::Alignment alignment ) +int QskLinearBox::insertItem( int index, QQuickItem* item ) { if ( item == nullptr ) return -1; @@ -415,7 +414,6 @@ int QskLinearBox::insertItem( reparentItem( item ); index = engine.insertItem( item, index ); - engine.setAlignmentAt( index, alignment ); // Re-ordering the child items to have a a proper focus tab chain @@ -490,30 +488,6 @@ int QskLinearBox::insertStretch( int index, int stretchFactor ) return insertSpacer( index, 0, stretchFactor ); } -void QskLinearBox::setAlignment( int index, Qt::Alignment alignment ) -{ - if ( alignment != m_data->engine.alignmentAt( index ) ) - { - m_data->engine.setAlignmentAt( index, alignment ); - polish(); - } -} - -Qt::Alignment QskLinearBox::alignment( int index ) const -{ - return m_data->engine.alignmentAt( index ); -} - -void QskLinearBox::setAlignment( const QQuickItem* item, Qt::Alignment alignment ) -{ - setAlignment( indexOf( item ), alignment ); -} - -Qt::Alignment QskLinearBox::alignment( const QQuickItem* item ) const -{ - return alignment( indexOf( item ) ); -} - void QskLinearBox::setStretchFactor( int index, int stretchFactor ) { auto& engine = m_data->engine; @@ -540,32 +514,4 @@ int QskLinearBox::stretchFactor( const QQuickItem* item ) const return stretchFactor( indexOf( item ) ); } -void QskLinearBox::setRetainSizeWhenHidden( int index, bool on ) -{ - auto& engine = m_data->engine; - - if ( engine.retainSizeWhenHiddenAt( index ) != on ) - { - engine.setRetainSizeWhenHiddenAt( index, on ); - - resetImplicitSize(); - polish(); - } -} - -bool QskLinearBox::retainSizeWhenHidden( int index ) const -{ - return m_data->engine.retainSizeWhenHiddenAt( index ); -} - -void QskLinearBox::setRetainSizeWhenHidden( const QQuickItem* item, bool on ) -{ - setRetainSizeWhenHidden( indexOf( item ), on ); -} - -bool QskLinearBox::retainSizeWhenHidden( const QQuickItem* item ) const -{ - return retainSizeWhenHidden( indexOf( item ) ); -} - #include "moc_QskLinearBox.cpp" diff --git a/src/layouts/QskLinearBox.h b/src/layouts/QskLinearBox.h index 3a6bd5b4..811b6bb9 100644 --- a/src/layouts/QskLinearBox.h +++ b/src/layouts/QskLinearBox.h @@ -75,11 +75,8 @@ class QSK_EXPORT QskLinearBox : public QskIndexedLayoutBox void resetSpacing(); qreal spacing() const; - Q_INVOKABLE int addItem( - QQuickItem*, Qt::Alignment alignment = Qt::Alignment() ); - - Q_INVOKABLE int insertItem( - int index, QQuickItem*, Qt::Alignment alignment = Qt::Alignment() ); + Q_INVOKABLE int addItem( QQuickItem* ); + Q_INVOKABLE int insertItem( int index, QQuickItem* ); Q_INVOKABLE int addSpacer( qreal spacing, int stretchFactor = 0 ); Q_INVOKABLE int insertSpacer( int index, qreal spacing, int stretchFactor = 0 ); @@ -93,18 +90,6 @@ class QSK_EXPORT QskLinearBox : public QskIndexedLayoutBox void setStretchFactor( const QQuickItem*, int stretchFactor ); int stretchFactor( const QQuickItem* ) const; - void setAlignment( int index, Qt::Alignment ); - Qt::Alignment alignment( int index ) const; - - void setAlignment( const QQuickItem*, Qt::Alignment ); - Qt::Alignment alignment( const QQuickItem* ) const; - - Q_INVOKABLE bool retainSizeWhenHidden( int index ) const; - Q_INVOKABLE void setRetainSizeWhenHidden( int index, bool on ); - - bool retainSizeWhenHidden( const QQuickItem* ) const; - void setRetainSizeWhenHidden( const QQuickItem*, bool on ); - public Q_SLOTS: void transpose(); void activate(); diff --git a/src/layouts/QskLinearLayoutEngine.cpp b/src/layouts/QskLinearLayoutEngine.cpp index 3fc40ac6..957cf0aa 100644 --- a/src/layouts/QskLinearLayoutEngine.cpp +++ b/src/layouts/QskLinearLayoutEngine.cpp @@ -47,29 +47,20 @@ namespace qreal m_spacer; }; - int m_stretch; - - unsigned int m_alignment : 8; - bool m_isSpacer : 1; - bool m_retainSizeWhenHidden : 1; + int m_stretch = -1; + bool m_isSpacer; }; } Element::Element( QQuickItem* item ) : m_item( item ) - , m_stretch( -1 ) - , m_alignment( 0 ) , m_isSpacer( false ) - , m_retainSizeWhenHidden( false ) { } Element::Element( qreal spacing ) : m_spacer( spacing ) - , m_stretch( -1 ) - , m_alignment( 0 ) , m_isSpacer( true ) - , m_retainSizeWhenHidden( false ) { } @@ -83,8 +74,6 @@ Element& Element::operator=( const Element& other ) m_item = other.m_item; m_stretch = other.m_stretch; - m_alignment = other.m_alignment; - m_retainSizeWhenHidden = other.m_retainSizeWhenHidden; return *this; } @@ -99,26 +88,6 @@ inline QQuickItem* Element::item() const return m_isSpacer ? nullptr : m_item; } -inline Qt::Alignment Element::alignment() const -{ - return static_cast< Qt::Alignment >( m_alignment ); -} - -inline void Element::setAlignment( Qt::Alignment alignment ) -{ - m_alignment = alignment; -} - -bool Element::retainSizeWhenHidden() const -{ - return m_retainSizeWhenHidden; -} - -void Element::setRetainSizeWhenHidden( bool on ) -{ - m_retainSizeWhenHidden = on; -} - inline int Element::stretch() const { return m_stretch; @@ -131,7 +100,7 @@ inline void Element::setStretch( int stretch ) bool Element::isIgnored() const { - if ( !m_isSpacer && !m_retainSizeWhenHidden ) + if ( !m_isSpacer && !QskLayoutConstraint::retainSizeWhenHidden( m_item ) ) return !qskIsVisibleToParent( m_item ); return false; @@ -259,38 +228,6 @@ int QskLinearLayoutEngine::count() const return m_data->elements.size(); } -bool QskLinearLayoutEngine::setRetainSizeWhenHiddenAt( int index, bool on ) -{ - if ( auto element = m_data->elementAt( index ) ) - { - if ( on != element->retainSizeWhenHidden() ) - { - const bool isIgnored = element->isIgnored(); - - element->setRetainSizeWhenHidden( on ); - - if ( isIgnored != element->isIgnored() ) - { - if ( m_data->sumIgnored >= 0 ) - m_data->sumIgnored += on ? 1 : -1; - - invalidate( LayoutCache ); - return true; - } - } - } - - return false; -} - -bool QskLinearLayoutEngine::retainSizeWhenHiddenAt( int index ) const -{ - if ( const auto element = m_data->elementAt( index ) ) - return element->retainSizeWhenHidden(); - - return false; -} - bool QskLinearLayoutEngine::setStretchFactorAt( int index, int stretchFactor ) { if ( auto element = m_data->elementAt( index ) ) @@ -318,27 +255,6 @@ int QskLinearLayoutEngine::stretchFactorAt( int index ) const return -1; } -bool QskLinearLayoutEngine::setAlignmentAt( int index, Qt::Alignment alignment ) -{ - if ( auto element = m_data->elementAt( index ) ) - { - if ( alignment != element->alignment() ) - element->setAlignment( alignment ); - - return true; - } - - return false; -} - -Qt::Alignment QskLinearLayoutEngine::alignmentAt( int index ) const -{ - if ( const auto element = m_data->elementAt( index ) ) - return element->alignment(); - - return Qt::Alignment(); -} - int QskLinearLayoutEngine::insertItem( QQuickItem* item, int index ) { auto& elements = m_data->elements; @@ -440,7 +356,7 @@ void QskLinearLayoutEngine::layoutItems() if ( auto item = element.item() ) { const QRect grid( col, row, 1, 1 ); - layoutItem( item, grid, element.alignment() ); + layoutItem( item, grid ); } if ( m_data->orientation == Qt::Horizontal ) diff --git a/src/layouts/QskLinearLayoutEngine.h b/src/layouts/QskLinearLayoutEngine.h index c81b48c6..b54a0d40 100644 --- a/src/layouts/QskLinearLayoutEngine.h +++ b/src/layouts/QskLinearLayoutEngine.h @@ -42,12 +42,6 @@ class QskLinearLayoutEngine : public QskLayoutEngine2D QQuickItem* itemAt( int index ) const override final; qreal spacerAt( int index ) const override final; - bool setRetainSizeWhenHiddenAt( int index, bool on ); - bool retainSizeWhenHiddenAt( int index ) const; - - bool setAlignmentAt( int index, Qt::Alignment ); - Qt::Alignment alignmentAt( int index ) const; - bool setStretchFactorAt( int index, int stretchFactor ); int stretchFactorAt( int index ) const;