qskinny/src/layouts/QskLinearBox.h

129 lines
3.8 KiB
C
Raw Normal View History

2017-07-21 16:21:34 +00:00
/******************************************************************************
* 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 )
2017-07-21 16:21:34 +00:00
Q_PROPERTY( Qt::Edges extraSpacingAt READ extraSpacingAt
WRITE setExtraSpacingAt NOTIFY extraSpacingAtChanged )
Q_PROPERTY( int count READ count )
Q_PROPERTY( bool empty READ isEmpty() )
2017-07-21 16:21:34 +00:00
using Inherited = QskIndexedLayoutBox;
2018-08-03 06:15:28 +00:00
public:
2017-07-21 16:21:34 +00:00
explicit QskLinearBox( QQuickItem* parent = nullptr );
explicit QskLinearBox( Qt::Orientation, QQuickItem* parent = nullptr );
2017-12-07 16:04:05 +00:00
QskLinearBox( Qt::Orientation, uint dimension, QQuickItem* parent = nullptr );
2018-07-31 15:32:25 +00:00
~QskLinearBox() override;
2017-07-21 16:21:34 +00:00
bool isEmpty() const;
int count() const; // items and spacers
#ifdef QSK_LAYOUT_COMPAT
int itemCount() const { return count(); }
#endif
2019-07-09 12:27:50 +00:00
int spacingAtIndex( int index ) const;
QQuickItem* itemAtIndex( int index ) const;
int indexOf( const QQuickItem* ) const;
void removeItem( const QQuickItem* );
void removeAt( int index );
qreal heightForWidth( qreal width ) const override;
qreal widthForHeight( qreal height ) const override;
2017-07-21 16:21:34 +00:00
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;
2017-07-21 16:21:34 +00:00
void setSpacing( qreal spacing );
void resetSpacing();
qreal spacing() const;
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 );
2017-07-21 16:21:34 +00:00
Q_INVOKABLE int addStretch( int stretchFactor = 0 );
Q_INVOKABLE int insertStretch( int index, int stretchFactor = 0 );
2017-07-21 16:21:34 +00:00
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;
2018-08-03 06:15:28 +00:00
public Q_SLOTS:
2017-07-21 16:21:34 +00:00
void transpose();
void activate();
void invalidate();
void clear( bool autoDelete = false );
2017-07-21 16:21:34 +00:00
2018-08-03 06:15:28 +00:00
Q_SIGNALS:
2017-07-21 16:21:34 +00:00
void orientationChanged();
void dimensionChanged();
void defaultAlignmentChanged();
2017-07-21 16:21:34 +00:00
void spacingChanged();
void extraSpacingAtChanged();
2018-08-03 06:15:28 +00:00
protected:
bool event( QEvent* ) override;
void geometryChangeEvent( QskGeometryChangeEvent* ) override;
2017-07-21 16:21:34 +00:00
void itemChange( ItemChange, const ItemChangeData& ) override;
void updateLayout() override;
2019-09-05 13:16:33 +00:00
QSizeF contentsSizeHint() const override;
void autoAddItem( QQuickItem* ) override final;
void autoRemoveItem( QQuickItem* ) override final;
2017-07-21 16:21:34 +00:00
private:
void removeItemInternal( int index, bool autoDelete );
2017-07-21 16:21:34 +00:00
class PrivateData;
std::unique_ptr< PrivateData > m_data;
};
inline bool QskLinearBox::isEmpty() const
{
return count() <= 0;
}
2017-07-21 16:21:34 +00:00
#endif