/****************************************************************************** * QSkinny - Copyright (C) 2016 Uwe Rathmann * This file may be used under the terms of the QSkinny License, Version 1.0 *****************************************************************************/ #ifndef QSK_LINEAR_BOX_H #define QSK_LINEAR_BOX_H #include "QskIndexedLayoutBox.h" class QSK_EXPORT QskLinearBox : public QskIndexedLayoutBox { Q_OBJECT Q_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged FINAL ) Q_PROPERTY( uint dimension READ dimension WRITE setDimension NOTIFY dimensionChanged FINAL ) Q_PROPERTY( qreal spacing READ spacing WRITE setSpacing RESET resetSpacing NOTIFY spacingChanged FINAL ) Q_PROPERTY( Qt::Alignment defaultAlignment READ defaultAlignment WRITE setDefaultAlignment NOTIFY defaultAlignmentChanged ) Q_PROPERTY( Qt::Edges extraSpacingAt READ extraSpacingAt WRITE setExtraSpacingAt NOTIFY extraSpacingAtChanged ) Q_PROPERTY( int entryCount READ entryCount() ) Q_PROPERTY( bool empty READ isEmpty() ) using Inherited = QskIndexedLayoutBox; public: explicit QskLinearBox( QQuickItem* parent = nullptr ); explicit QskLinearBox( Qt::Orientation, QQuickItem* parent = nullptr ); QskLinearBox( Qt::Orientation, uint dimension, QQuickItem* parent = nullptr ); ~QskLinearBox() override; bool isEmpty() const; int entryCount() const; // items and spacers #ifdef QSK_LAYOUT_COMPAT int itemCount() const { return entryCount(); } // items and spacers #endif int spacingAtIndex( int index ) const; QQuickItem* itemAtIndex( int index ) const; int indexOf( const QQuickItem* ) const; void removeItem( const QQuickItem* ); void removeAt( int index ); QSizeF contentsSizeHint() const override; qreal heightForWidth( qreal width ) const override; qreal widthForHeight( qreal height ) const override; Qt::Orientation orientation() const; void setOrientation( Qt::Orientation ); void setDimension( uint ); uint dimension() const; void setExtraSpacingAt( Qt::Edges ); Qt::Edges extraSpacingAt() const; void setDefaultAlignment( Qt::Alignment ); Qt::Alignment defaultAlignment() const; void setSpacing( qreal spacing ); void resetSpacing(); qreal spacing() const; Q_INVOKABLE void addItem( QQuickItem*, Qt::Alignment alignment = Qt::Alignment() ); Q_INVOKABLE void insertItem( int index, QQuickItem*, Qt::Alignment alignment = Qt::Alignment() ); Q_INVOKABLE void addSpacer( qreal spacing, int stretchFactor = 0 ); Q_INVOKABLE void insertSpacer( int index, qreal spacing, int stretchFactor = 0 ); Q_INVOKABLE void addStretch( int stretchFactor = 0 ); Q_INVOKABLE void insertStretch( int index, int stretchFactor = 0 ); Q_INVOKABLE void setStretchFactor( int index, int stretchFactor ); Q_INVOKABLE int stretchFactor( int index ) const; 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(); void invalidate(); void clear( bool autoDelete = false ); Q_SIGNALS: void orientationChanged(); void dimensionChanged(); void defaultAlignmentChanged(); void spacingChanged(); void extraSpacingAtChanged(); protected: bool event( QEvent* ) override; void geometryChangeEvent( QskGeometryChangeEvent* ) override; void itemChange( ItemChange, const ItemChangeData& ) override; void updateLayout() override; void autoAddItem( QQuickItem* ) override final; void autoRemoveItem( QQuickItem* ) override final; private: void removeItemInternal( int index, bool autoDelete ); class PrivateData; std::unique_ptr< PrivateData > m_data; }; inline bool QskLinearBox::isEmpty() const { return entryCount() <= 0; } #endif