controls/QskSwitchButton.cpp

Source code

#include "QskSwitchButton.h"

QSK_SUBCONTROL( QskSwitchButton, Handle )
QSK_SUBCONTROL( QskSwitchButton, Groove )
QSK_SUBCONTROL( QskSwitchButton, Ripple )

struct QskSwitchButton::PrivateData
{
    PrivateData( Qt::Orientation orientation )
        : orientation( orientation )
    {
    }

    bool inverted = false;
    Qt::Orientation orientation;
};

QskSwitchButton::QskSwitchButton( QQuickItem* parent )
    : QskSwitchButton( Qt::Horizontal, parent )
{
}

QskSwitchButton::QskSwitchButton( Qt::Orientation orientation, QQuickItem* parent )
    : QskAbstractButton( parent )
    , m_data( new PrivateData( orientation ) )
{
    initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed );
}

QskSwitchButton::~QskSwitchButton()
{
}

bool QskSwitchButton::isCheckable() const
{
    return true;
}

Qt::Orientation QskSwitchButton::orientation() const
{
    return m_data->orientation;
}

void QskSwitchButton::setOrientation( Qt::Orientation orientation )
{
    if( m_data->orientation != orientation )
    {
        m_data->orientation = orientation;

        resetImplicitSize();
        update();

        Q_EMIT orientationChanged( orientation );
    }
}

bool QskSwitchButton::isInverted() const
{
    return m_data->inverted;
}

void QskSwitchButton::setInverted( bool on )
{
    if( m_data->inverted != on )
    {
        m_data->inverted = on;

        resetImplicitSize(); // in case the size hints depend on it
        update();

        Q_EMIT invertedChanged( on );
    }
}

QskAspect::Placement QskSwitchButton::effectivePlacement() const
{
    /*
        So you can define different hints depending on the orientation,
        but what about the layoutDirection ???
     */
    return static_cast< QskAspect::Placement >( m_data->orientation );
}

#include "moc_QskSwitchButton.cpp"

Updated on 28 July 2023 at 14:02:30 CEST