qskinny/src/controls/QskSeparator.cpp

111 lines
2.5 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
*****************************************************************************/
#include "QskSeparator.h"
#include "QskAspect.h"
QSK_SUBCONTROL( QskSeparator, Panel )
2020-12-11 14:17:09 +00:00
static inline QskAspect::Aspect qskAspectThickness()
{
return QskSeparator::Panel | QskAspect::Metric | QskAspect::Size;
2020-12-11 14:17:09 +00:00
}
2018-08-03 06:15:28 +00:00
QskSeparator::QskSeparator( QQuickItem* parent )
: QskSeparator( Qt::Horizontal, parent )
2017-07-21 16:21:34 +00:00
{
}
2018-08-03 06:15:28 +00:00
QskSeparator::QskSeparator( Qt::Orientation orientation, QQuickItem* parent )
: Inherited( parent )
, m_orientation( orientation )
2017-07-21 16:21:34 +00:00
{
if ( orientation == Qt::Horizontal )
initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed );
2017-07-21 16:21:34 +00:00
else
initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum );
2017-07-21 16:21:34 +00:00
}
QskSeparator::~QskSeparator()
{
}
void QskSeparator::setOrientation( Qt::Orientation orientation )
{
if ( orientation == m_orientation )
return;
m_orientation = orientation;
#if 1
// swapping the size policy: guess this is what a user expects
setSizePolicy( sizePolicy( Qt::Vertical ), sizePolicy( Qt::Horizontal ) );
#endif
resetImplicitSize();
update();
Q_EMIT orientationChanged( m_orientation );
}
Qt::Orientation QskSeparator::orientation() const
{
return m_orientation;
}
void QskSeparator::setThickness( qreal thickness )
{
thickness = qMax( thickness, 0.0 );
const auto aspect = qskAspectThickness();
if ( thickness != metric( aspect ) )
{
setMetric( aspect, thickness );
resetImplicitSize();
update();
2020-12-11 14:17:09 +00:00
Q_EMIT thicknessChanged( thickness );
}
}
qreal QskSeparator::thickness() const
{
2020-12-11 14:17:09 +00:00
return metric( qskAspectThickness() );
}
void QskSeparator::resetThickness()
{
if ( resetHint( qskAspectThickness() ) )
{
resetImplicitSize();
update();
Q_EMIT thicknessChanged( thickness() );
}
}
QSizeF QskSeparator::contentsSizeHint(
Qt::SizeHint which, const QSizeF& ) const
2017-07-21 16:21:34 +00:00
{
if ( which != Qt::PreferredSize )
return QSizeF();
const qreal m = thickness();
2017-07-21 16:21:34 +00:00
if ( m_orientation == Qt::Horizontal )
return QSizeF( -1, m );
else
return QSizeF( m, -1 );
}
QskAspect::Placement QskSeparator::effectivePlacement() const
{
return static_cast< QskAspect::Placement >( m_orientation );
}
2017-07-21 16:21:34 +00:00
#include "moc_QskSeparator.cpp"