qskinny/src/controls/QskBox.cpp
2019-12-14 13:34:30 +01:00

113 lines
2.5 KiB
C++

/******************************************************************************
* QSkinny - Copyright (C) 2016 Uwe Rathmann
* This file may be used under the terms of the QSkinny License, Version 1.0
*****************************************************************************/
#include "QskBox.h"
QSK_SUBCONTROL( QskBox, Panel )
QskBox::QskBox( QQuickItem* parent )
: QskBox( true, parent )
{
}
QskBox::QskBox( bool hasPanel, QQuickItem* parent )
: Inherited( parent )
, m_hasPanel( hasPanel )
{
}
QskBox::~QskBox()
{
}
void QskBox::setPanel( bool on )
{
if ( on != m_hasPanel )
{
m_hasPanel = on;
resetImplicitSize();
polish();
update();
}
}
bool QskBox::hasPanel() const
{
return m_hasPanel;
}
void QskBox::setPadding( qreal padding )
{
setPadding( QMarginsF( padding, padding, padding, padding ) );
}
void QskBox::setPadding( const QMarginsF& padding )
{
using namespace QskAspect;
const QMarginsF pd(
qMax( qreal( padding.left() ), qreal( 0.0 ) ),
qMax( qreal( padding.top() ), qreal( 0.0 ) ),
qMax( qreal( padding.right() ), qreal( 0.0 ) ),
qMax( qreal( padding.bottom() ), qreal( 0.0 ) ) );
if ( pd != this->padding() )
{
const auto subControl = effectiveSubcontrol( QskBox::Panel );
setMarginsHint( subControl | Padding, pd );
resetImplicitSize();
if ( polishOnResize() || autoLayoutChildren() )
polish();
Q_EMIT paddingChanged( pd );
}
}
void QskBox::resetPadding()
{
using namespace QskAspect;
if ( resetHint( QskBox::Panel | Metric | Padding ) )
{
resetImplicitSize();
if ( polishOnResize() || autoLayoutChildren() )
polish();
Q_EMIT paddingChanged( padding() );
}
}
QMarginsF QskBox::padding() const
{
return marginsHint( QskBox::Panel | QskAspect::Padding );
}
QRectF QskBox::layoutRectForSize( const QSizeF& size ) const
{
if ( !m_hasPanel )
return Inherited::layoutRectForSize( size );
return innerBox( Panel, subControlRect( size, Panel ) );
}
QSizeF QskBox::contentsSizeHint(
Qt::SizeHint which, const QSizeF& constraint ) const
{
if ( m_hasPanel && which == Qt::PreferredSize )
{
return QSizeF(
metric( Panel | QskAspect::MinimumWidth ),
metric( Panel | QskAspect::MinimumHeight ) );
}
return Inherited::contentsSizeHint( which, constraint );
}
#include "moc_QskBox.cpp"