/******************************************************************************
 * 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 )

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

QskSeparator::QskSeparator( Qt::Orientation orientation, QQuickItem* parent ):
    Inherited( parent ),
    m_orientation( orientation )
{
    if ( orientation == Qt::Horizontal )
        initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed );
    else
        initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum );
}

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 );

    if ( thickness != metric( QskSeparator::Panel | QskAspect::Size ) )
    {
        setMetric( QskSeparator::Panel | QskAspect::Size, thickness );

        resetImplicitSize();
        update();

        Q_EMIT thicknessChanged();
    }
}

qreal QskSeparator::thickness() const
{
    return metric( QskSeparator::Panel | QskAspect::Size );
}

QSizeF QskSeparator::contentsSizeHint() const
{
    const qreal m = thickness();

    if ( m_orientation == Qt::Horizontal )
        return QSizeF( -1, m );
    else
        return QSizeF( m, -1 );
}

QskAspect::Placement QskSeparator::effectivePlacement() const
{
    using namespace QskAspect;
    return ( m_orientation == Qt::Horizontal ) ? Preserved : Transposed;
}

#include "moc_QskSeparator.cpp"
