2017-07-21 18:21:34 +02:00
|
|
|
/******************************************************************************
|
|
|
|
* QSkinny - Copyright (C) 2016 Uwe Rathmann
|
|
|
|
* This file may be used under the terms of the QSkinny License, Version 1.0
|
|
|
|
*****************************************************************************/
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
#ifndef QSK_SIZE_POLICY_H
|
|
|
|
#define QSK_SIZE_POLICY_H
|
2017-07-21 18:21:34 +02:00
|
|
|
|
|
|
|
#include "QskGlobal.h"
|
2019-09-10 17:01:47 +02:00
|
|
|
#include <qnamespace.h>
|
2018-07-19 14:10:48 +02:00
|
|
|
#include <qmetatype.h>
|
2017-07-21 18:21:34 +02:00
|
|
|
|
|
|
|
class QSK_EXPORT QskSizePolicy
|
|
|
|
{
|
|
|
|
Q_GADGET
|
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
Q_PROPERTY( Policy horizontalPolicy
|
|
|
|
READ horizontalPolicy WRITE setHorizontalPolicy )
|
|
|
|
|
|
|
|
Q_PROPERTY( Policy verticalPolicy
|
|
|
|
READ verticalPolicy WRITE setVerticalPolicy )
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
public:
|
2017-07-21 18:21:34 +02:00
|
|
|
enum Flag
|
|
|
|
{
|
2019-06-20 11:45:32 +02:00
|
|
|
GrowFlag = 1 << 0,
|
|
|
|
ExpandFlag = 1 << 1,
|
|
|
|
ShrinkFlag = 1 << 2,
|
|
|
|
IgnoreFlag = 1 << 3,
|
|
|
|
ConstrainedFlag = 1 << 4
|
2017-07-21 18:21:34 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
enum Policy
|
|
|
|
{
|
|
|
|
Fixed = 0,
|
2019-06-20 11:45:32 +02:00
|
|
|
|
|
|
|
Minimum = GrowFlag,
|
|
|
|
Maximum = ShrinkFlag,
|
|
|
|
Preferred = GrowFlag | ShrinkFlag,
|
2017-07-21 18:21:34 +02:00
|
|
|
MinimumExpanding = GrowFlag | ExpandFlag,
|
2019-06-20 11:45:32 +02:00
|
|
|
Expanding = GrowFlag | ShrinkFlag | ExpandFlag,
|
|
|
|
|
|
|
|
Ignored = ShrinkFlag | GrowFlag | IgnoreFlag,
|
|
|
|
|
|
|
|
Constrained = ConstrainedFlag,
|
|
|
|
|
|
|
|
ConstrainedMinimum = ConstrainedFlag | Minimum,
|
|
|
|
ConstrainedMaximum = ConstrainedFlag | Maximum,
|
|
|
|
ConstrainedPreferred = ConstrainedFlag | Preferred,
|
|
|
|
ConstrainedMinimumExpanding = ConstrainedFlag | MinimumExpanding,
|
|
|
|
ConstrainedExpanding = ConstrainedFlag | Expanding
|
2017-07-21 18:21:34 +02:00
|
|
|
};
|
|
|
|
|
2019-09-10 17:01:47 +02:00
|
|
|
enum ConstraintType
|
|
|
|
{
|
|
|
|
Unconstrained = 0,
|
|
|
|
|
|
|
|
WidthForHeight = 1 << 0,
|
|
|
|
HeightForWidth = 1 << 1
|
|
|
|
};
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
Q_ENUM( Flag )
|
|
|
|
Q_ENUM( Policy )
|
2019-09-10 17:01:47 +02:00
|
|
|
Q_ENUM( ConstraintType )
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
constexpr QskSizePolicy() noexcept;
|
|
|
|
constexpr QskSizePolicy( Policy horizontalPolicy, Policy verticalPolicy ) noexcept;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
constexpr bool operator==( const QskSizePolicy& ) const noexcept;
|
|
|
|
constexpr bool operator!=( const QskSizePolicy& ) const noexcept;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
void setHorizontalPolicy( Policy ) noexcept;
|
|
|
|
constexpr Policy horizontalPolicy() const noexcept;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
void setVerticalPolicy( Policy ) noexcept;
|
|
|
|
constexpr Policy verticalPolicy() const noexcept;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
void setPolicy( Qt::Orientation, Policy ) noexcept;
|
|
|
|
constexpr Policy policy( Qt::Orientation ) const noexcept;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
ConstraintType constraintType() const noexcept;
|
|
|
|
constexpr bool isConstrained( Qt::Orientation ) const noexcept;
|
2019-09-10 17:01:47 +02:00
|
|
|
|
|
|
|
Qt::SizeHint effectiveSizeHintType(
|
2020-05-03 13:47:10 +02:00
|
|
|
Qt::SizeHint, Qt::Orientation ) const noexcept;
|
2019-09-10 17:01:47 +02:00
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
constexpr QskSizePolicy transposed() const noexcept;
|
|
|
|
void transpose() noexcept;
|
2020-03-13 13:57:56 +01:00
|
|
|
|
2018-08-03 08:15:28 +02:00
|
|
|
private:
|
2019-06-20 11:45:32 +02:00
|
|
|
unsigned char m_horizontalPolicy;
|
|
|
|
unsigned char m_verticalPolicy;
|
2017-07-21 18:21:34 +02:00
|
|
|
};
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr QskSizePolicy::QskSizePolicy() noexcept
|
2018-08-03 08:15:28 +02:00
|
|
|
: m_horizontalPolicy( Ignored )
|
|
|
|
, m_verticalPolicy( Ignored )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr QskSizePolicy::QskSizePolicy(
|
|
|
|
Policy horizontalPolicy, Policy verticalPolicy ) noexcept
|
2018-08-03 08:15:28 +02:00
|
|
|
: m_horizontalPolicy( horizontalPolicy )
|
|
|
|
, m_verticalPolicy( verticalPolicy )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr bool QskSizePolicy::operator==(
|
|
|
|
const QskSizePolicy& other ) const noexcept
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2018-08-03 08:15:28 +02:00
|
|
|
return ( other.m_horizontalPolicy == m_horizontalPolicy ) &&
|
|
|
|
( other.m_verticalPolicy == m_verticalPolicy );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr bool QskSizePolicy::operator!=(
|
|
|
|
const QskSizePolicy& other ) const noexcept
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
return !( *this == other );
|
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline void QskSizePolicy::setHorizontalPolicy( Policy policy ) noexcept
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2020-05-04 12:20:20 +02:00
|
|
|
m_horizontalPolicy = static_cast< unsigned char >( policy );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr QskSizePolicy::Policy QskSizePolicy::horizontalPolicy() const noexcept
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
return static_cast< Policy >( m_horizontalPolicy );
|
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline void QskSizePolicy::setVerticalPolicy( Policy policy ) noexcept
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2020-05-04 12:20:20 +02:00
|
|
|
m_verticalPolicy = static_cast< unsigned char >( policy );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr QskSizePolicy::Policy QskSizePolicy::verticalPolicy() const noexcept
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
return static_cast< Policy >( m_verticalPolicy );
|
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr QskSizePolicy::Policy QskSizePolicy::policy(
|
|
|
|
Qt::Orientation orientation ) const noexcept
|
|
|
|
{
|
|
|
|
return static_cast< Policy >(
|
|
|
|
( orientation == Qt::Horizontal ) ? m_horizontalPolicy : m_verticalPolicy );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void QskSizePolicy::setPolicy(
|
|
|
|
Qt::Orientation orientation, Policy policy ) noexcept
|
|
|
|
{
|
|
|
|
if ( orientation == Qt::Horizontal )
|
2020-05-04 12:20:20 +02:00
|
|
|
m_horizontalPolicy = static_cast< unsigned char >( policy );
|
2020-05-03 13:47:10 +02:00
|
|
|
else
|
2020-05-04 12:20:20 +02:00
|
|
|
m_verticalPolicy = static_cast< unsigned char >( policy );
|
2020-05-03 13:47:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr bool QskSizePolicy::isConstrained(
|
|
|
|
Qt::Orientation orientation ) const noexcept
|
2019-09-10 17:01:47 +02:00
|
|
|
{
|
|
|
|
return ( policy( orientation ) & ConstrainedFlag );
|
|
|
|
}
|
|
|
|
|
2020-05-03 13:47:10 +02:00
|
|
|
inline constexpr QskSizePolicy QskSizePolicy::transposed() const noexcept
|
|
|
|
{
|
|
|
|
return QskSizePolicy( verticalPolicy(), horizontalPolicy() );
|
|
|
|
}
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
#ifndef QT_NO_DEBUG_STREAM
|
2020-05-03 13:47:10 +02:00
|
|
|
class QDebug;
|
2017-07-21 18:21:34 +02:00
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskSizePolicy& );
|
|
|
|
#endif
|
|
|
|
|
|
|
|
Q_DECLARE_TYPEINFO( QskSizePolicy, Q_MOVABLE_TYPE );
|
|
|
|
Q_DECLARE_METATYPE( QskSizePolicy )
|
|
|
|
|
|
|
|
#endif
|