making the panel optional

This commit is contained in:
Uwe Rathmann 2019-05-10 07:44:13 +02:00
parent 16d071489e
commit 01d5fedca7
3 changed files with 48 additions and 0 deletions

View File

@ -8,7 +8,13 @@
QSK_SUBCONTROL( QskBox, Panel ) QSK_SUBCONTROL( QskBox, Panel )
QskBox::QskBox( QQuickItem* parent ) QskBox::QskBox( QQuickItem* parent )
: QskBox( true, parent )
{
}
QskBox::QskBox( bool hasPanel, QQuickItem* parent )
: Inherited( parent ) : Inherited( parent )
, m_hasPanel( hasPanel )
{ {
} }
@ -16,13 +22,36 @@ QskBox::~QskBox()
{ {
} }
void QskBox::setPanel( bool on )
{
if ( on != m_hasPanel )
{
m_hasPanel = on;
resetImplicitSize();
polish();
update();
}
}
bool QskBox::hasPanel() const
{
return m_hasPanel;
}
QRectF QskBox::layoutRectForSize( const QSizeF& size ) const QRectF QskBox::layoutRectForSize( const QSizeF& size ) const
{ {
if ( !m_hasPanel )
return Inherited::layoutRectForSize( size );
return innerBox( Panel, subControlRect( size, Panel ) ); return innerBox( Panel, subControlRect( size, Panel ) );
} }
QSizeF QskBox::contentsSizeHint() const QSizeF QskBox::contentsSizeHint() const
{ {
if ( !m_hasPanel )
return Inherited::contentsSizeHint();
QSizeF size( -1, -1 ); QSizeF size( -1, -1 );
if ( autoLayoutChildren() ) if ( autoLayoutChildren() )

View File

@ -14,14 +14,28 @@ class QSK_EXPORT QskBox : public QskControl
using Inherited = QskControl; using Inherited = QskControl;
Q_PROPERTY( bool panel READ hasPanel
WRITE setPanel NOTIFY panelChanged FINAL )
public: public:
QSK_SUBCONTROLS( Panel ) QSK_SUBCONTROLS( Panel )
QskBox( QQuickItem* parent = nullptr ); QskBox( QQuickItem* parent = nullptr );
QskBox( bool hasPanel, QQuickItem* parent = nullptr );
~QskBox() override; ~QskBox() override;
void setPanel( bool );
bool hasPanel() const;
QRectF layoutRectForSize( const QSizeF& ) const override; QRectF layoutRectForSize( const QSizeF& ) const override;
QSizeF contentsSizeHint() const override; QSizeF contentsSizeHint() const override;
Q_SIGNALS:
void panelChanged( bool );
private:
bool m_hasPanel;
}; };
#endif #endif

View File

@ -30,10 +30,15 @@ QRectF QskBoxSkinlet::subControlRect( const QskSkinnable* skinnable,
QSGNode* QskBoxSkinlet::updateSubNode( QSGNode* QskBoxSkinlet::updateSubNode(
const QskSkinnable* skinnable, quint8 nodeRole, QSGNode* node ) const const QskSkinnable* skinnable, quint8 nodeRole, QSGNode* node ) const
{ {
const auto box = static_cast< const QskBox* >( skinnable );
switch ( nodeRole ) switch ( nodeRole )
{ {
case PanelRole: case PanelRole:
{ {
if ( !box->hasPanel() )
return nullptr;
return updateBoxNode( skinnable, node, QskBox::Panel ); return updateBoxNode( skinnable, node, QskBox::Panel );
} }
} }