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
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
#ifndef QSK_ASPECT_H
|
|
|
|
#define QSK_ASPECT_H
|
|
|
|
|
|
|
|
#include "QskFlags.h"
|
|
|
|
#include <QMetaObject>
|
|
|
|
#include <functional>
|
|
|
|
|
|
|
|
#ifdef Q_MOC_RUN
|
|
|
|
|
|
|
|
#define QSK_NAMESPACE( name ) struct name
|
|
|
|
#define QSK_ENUM( name ) Q_GADGET Q_ENUM( name )
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
#define QSK_NAMESPACE( name ) namespace name
|
|
|
|
#define QSK_ENUM( name )
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
QSK_NAMESPACE( QskAspect )
|
|
|
|
{
|
|
|
|
enum Subcontrol : quint16
|
|
|
|
{
|
|
|
|
Control = 0,
|
|
|
|
LastSubcontrol = ( 1 << 12 ) - 1
|
|
|
|
};
|
|
|
|
QSK_ENUM( Subcontrol )
|
|
|
|
|
|
|
|
enum Type : quint8
|
|
|
|
{
|
|
|
|
Flag = 0,
|
|
|
|
Metric = 1,
|
|
|
|
Color = 2,
|
|
|
|
};
|
|
|
|
QSK_ENUM( Type )
|
|
|
|
|
|
|
|
enum FlagPrimitive : quint8
|
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
NoFlagPrimitive,
|
2017-07-21 18:21:34 +02:00
|
|
|
|
|
|
|
Alignment,
|
|
|
|
Style,
|
|
|
|
SizeMode,
|
|
|
|
Decoration,
|
|
|
|
GraphicRole,
|
|
|
|
FontRole
|
|
|
|
};
|
|
|
|
QSK_ENUM( FlagPrimitive )
|
|
|
|
|
|
|
|
enum MetricPrimitive : quint8
|
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
NoMetricPrimitive,
|
2017-07-21 18:21:34 +02:00
|
|
|
|
|
|
|
Size,
|
|
|
|
Position,
|
|
|
|
MinimumWidth,
|
|
|
|
MinimumHeight,
|
|
|
|
MaximumWidth,
|
|
|
|
MaximumHeight,
|
2017-08-23 14:53:29 +02:00
|
|
|
|
|
|
|
Margin,
|
|
|
|
Padding,
|
|
|
|
Shadow,
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
Spacing,
|
|
|
|
|
|
|
|
Shape,
|
|
|
|
Border
|
2017-07-21 18:21:34 +02:00
|
|
|
};
|
|
|
|
QSK_ENUM( MetricPrimitive )
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
enum { LastType = Color }; // max. value for all types
|
|
|
|
enum { LastPrimitive = 16 }; // max. value for all sort of primitives
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
enum ColorPrimitive : quint8
|
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
NoColorPrimitive,
|
2017-07-21 18:21:34 +02:00
|
|
|
|
|
|
|
TextColor,
|
|
|
|
StyleColor,
|
|
|
|
LinkColor
|
|
|
|
};
|
|
|
|
QSK_ENUM( ColorPrimitive )
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
enum Placement : quint8
|
|
|
|
{
|
|
|
|
Preserved = 0,
|
|
|
|
Transposed = 1
|
|
|
|
};
|
|
|
|
QSK_ENUM ( Placement )
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
enum State : quint16
|
|
|
|
{
|
|
|
|
NoState = 0,
|
|
|
|
|
|
|
|
FirstSystemState = 1 << 0,
|
|
|
|
FirstUserState = 1 << 4,
|
|
|
|
LastUserState = 1 << 11,
|
|
|
|
LastSystemState = 1 << 15,
|
|
|
|
|
|
|
|
AllStates = 0xFFFF
|
|
|
|
};
|
|
|
|
QSK_ENUM ( State )
|
|
|
|
|
|
|
|
extern const QMetaObject staticMetaObject;
|
|
|
|
}
|
|
|
|
|
|
|
|
QSK_DECLARE_OPERATORS_FOR_FLAGS( QskAspect::State )
|
|
|
|
|
|
|
|
#undef QSK_NAMESPACE
|
|
|
|
#undef QSK_ENUM
|
|
|
|
|
|
|
|
namespace QskAspect
|
|
|
|
{
|
|
|
|
class QSK_EXPORT Aspect
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
constexpr Aspect();
|
|
|
|
constexpr Aspect( Subcontrol );
|
|
|
|
constexpr Aspect( Type );
|
2017-10-17 17:34:00 +02:00
|
|
|
constexpr Aspect( Placement );
|
2017-07-21 18:21:34 +02:00
|
|
|
|
|
|
|
constexpr Aspect( const Aspect& ) = default;
|
|
|
|
constexpr Aspect( Aspect&& ) = default;
|
|
|
|
|
|
|
|
Aspect& operator=( const QskAspect::Aspect& ) = default;
|
|
|
|
|
|
|
|
bool operator==( const Aspect& ) const;
|
|
|
|
bool operator!=( const Aspect& ) const;
|
|
|
|
|
|
|
|
bool operator<( const Aspect& ) const;
|
|
|
|
|
|
|
|
constexpr Aspect operator|( Subcontrol ) const;
|
|
|
|
constexpr Aspect operator|( Type ) const;
|
|
|
|
constexpr Aspect operator|( FlagPrimitive ) const;
|
|
|
|
constexpr Aspect operator|( MetricPrimitive ) const;
|
|
|
|
constexpr Aspect operator|( ColorPrimitive ) const;
|
2017-10-17 17:34:00 +02:00
|
|
|
constexpr Aspect operator|( Placement ) const;
|
2017-07-21 18:21:34 +02:00
|
|
|
constexpr Aspect operator|( State ) const;
|
|
|
|
|
|
|
|
constexpr quint64 value() const;
|
|
|
|
|
|
|
|
bool isAnimator() const;
|
|
|
|
void setAnimator( bool on );
|
|
|
|
|
|
|
|
Subcontrol subControl() const;
|
|
|
|
void setSubControl( Subcontrol );
|
|
|
|
|
|
|
|
Type type() const;
|
|
|
|
void setType( Type );
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
Placement placement() const;
|
|
|
|
void setPlacement( Placement );
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
State state() const;
|
|
|
|
State topState() const;
|
|
|
|
|
|
|
|
void addState( State state );
|
|
|
|
void clearState( State state );
|
|
|
|
void clearStates();
|
|
|
|
|
|
|
|
FlagPrimitive flagPrimitive() const;
|
|
|
|
ColorPrimitive colorPrimitive() const;
|
|
|
|
MetricPrimitive metricPrimitive() const;
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
void setPrimitive( Type, int primitive );
|
|
|
|
int primitive() const;
|
|
|
|
void clearPrimitive();
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
const char* toPrintable() const;
|
|
|
|
|
|
|
|
private:
|
2017-10-17 17:34:00 +02:00
|
|
|
constexpr Aspect( Subcontrol, Type, Placement );
|
2017-07-21 18:21:34 +02:00
|
|
|
constexpr Aspect( uint subControl, uint type, bool isAnimator,
|
2017-10-17 17:34:00 +02:00
|
|
|
uint primitive, uint placement, uint states );
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-12-07 11:54:06 +01:00
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
uint m_subControl : 12;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-12-07 11:54:06 +01:00
|
|
|
uint m_type : 3;
|
|
|
|
bool m_isAnimator : 1;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-12-07 11:54:06 +01:00
|
|
|
uint m_primitive : 7;
|
|
|
|
uint m_placement : 1;
|
|
|
|
uint m_reserved1 : 8;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-12-07 11:54:06 +01:00
|
|
|
uint m_states : 16;
|
|
|
|
uint m_reserved2 : 16;
|
|
|
|
};
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-12-07 11:54:06 +01:00
|
|
|
quint64 m_value;
|
|
|
|
};
|
|
|
|
};
|
2017-07-21 18:21:34 +02:00
|
|
|
|
|
|
|
inline constexpr Aspect::Aspect():
|
2017-10-17 17:34:00 +02:00
|
|
|
Aspect( Control, Flag, Preserved )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect::Aspect( Subcontrol subControl ):
|
2017-10-17 17:34:00 +02:00
|
|
|
Aspect( subControl, Flag, Preserved )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect::Aspect( Type type ):
|
2017-10-17 17:34:00 +02:00
|
|
|
Aspect( Control, type, Preserved )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect::Aspect( Placement placement ):
|
|
|
|
Aspect( Control, Flag, placement )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect::Aspect( Subcontrol subControl, Type type, Placement placement ):
|
|
|
|
Aspect( subControl, type, false, 0, placement, NoState )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect::Aspect( uint subControl, uint type, bool isAnimator,
|
2017-10-17 17:34:00 +02:00
|
|
|
uint primitive, uint placement, uint states ):
|
2017-07-21 18:21:34 +02:00
|
|
|
m_subControl( subControl ),
|
|
|
|
m_type( type ),
|
|
|
|
m_isAnimator( isAnimator ),
|
|
|
|
m_primitive( primitive ),
|
2017-10-17 17:34:00 +02:00
|
|
|
m_placement( placement ),
|
|
|
|
m_reserved1( 0 ),
|
2017-07-21 18:21:34 +02:00
|
|
|
m_states( states ),
|
|
|
|
m_reserved2( 0 )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
inline bool Aspect::operator==( const Aspect& other ) const
|
|
|
|
{
|
2017-12-07 11:54:06 +01:00
|
|
|
return m_value == other.m_value;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline bool Aspect::operator!=( const Aspect& other ) const
|
|
|
|
{
|
2017-12-07 11:54:06 +01:00
|
|
|
return m_value != other.m_value;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline bool Aspect::operator<( const Aspect& other ) const
|
|
|
|
{
|
2017-12-07 11:54:06 +01:00
|
|
|
return m_value < other.m_value;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect Aspect::operator|( Subcontrol subControl ) const
|
|
|
|
{
|
|
|
|
return Aspect( subControl, m_type, m_isAnimator,
|
2017-10-17 17:34:00 +02:00
|
|
|
m_primitive, m_placement, m_states );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect Aspect::operator|( Type type ) const
|
|
|
|
{
|
|
|
|
return Aspect( m_subControl, type, m_isAnimator,
|
2017-10-17 17:34:00 +02:00
|
|
|
m_primitive, m_placement, m_states );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect Aspect::operator|( FlagPrimitive primitive ) const
|
|
|
|
{
|
|
|
|
return Aspect( m_subControl, m_type, m_isAnimator,
|
2017-10-17 17:34:00 +02:00
|
|
|
primitive, m_placement, m_states );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect Aspect::operator|( MetricPrimitive primitive ) const
|
|
|
|
{
|
|
|
|
return operator|( static_cast< FlagPrimitive >( primitive ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect Aspect::operator|( ColorPrimitive primitive ) const
|
|
|
|
{
|
|
|
|
return operator|( static_cast< FlagPrimitive >( primitive ) );
|
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect Aspect::operator|( Placement placement ) const
|
|
|
|
{
|
|
|
|
return Aspect( m_subControl, m_type, m_isAnimator,
|
|
|
|
m_primitive, placement, m_states );
|
|
|
|
}
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
inline constexpr Aspect Aspect::operator|( State state ) const
|
|
|
|
{
|
|
|
|
return Aspect( m_subControl, m_type, m_isAnimator,
|
2017-10-17 17:34:00 +02:00
|
|
|
m_primitive, m_placement, m_states | state );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr quint64 Aspect::value() const
|
|
|
|
{
|
2017-12-07 11:54:06 +01:00
|
|
|
return m_value;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline bool Aspect::isAnimator() const
|
|
|
|
{
|
|
|
|
return m_isAnimator;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void Aspect::setAnimator( bool on )
|
|
|
|
{
|
|
|
|
m_isAnimator = on;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline Subcontrol Aspect::subControl() const
|
|
|
|
{
|
|
|
|
return static_cast< Subcontrol >( m_subControl );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void Aspect::setSubControl( Subcontrol subControl )
|
|
|
|
{
|
|
|
|
m_subControl = subControl;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline Type Aspect::type() const
|
|
|
|
{
|
|
|
|
return static_cast< Type >( m_type );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void Aspect::setType( Type type )
|
|
|
|
{
|
|
|
|
m_type = type;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline State Aspect::state() const
|
|
|
|
{
|
|
|
|
return static_cast< State >( m_states );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void Aspect::addState( State state )
|
|
|
|
{
|
|
|
|
m_states |= state;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void Aspect::clearState( State state )
|
|
|
|
{
|
|
|
|
m_states &= ~state;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void Aspect::clearStates()
|
|
|
|
{
|
|
|
|
m_states = 0;
|
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline FlagPrimitive Aspect::flagPrimitive() const
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
if ( m_type != Flag )
|
|
|
|
return NoFlagPrimitive;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
return static_cast< FlagPrimitive >( m_primitive );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline ColorPrimitive Aspect::colorPrimitive() const
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
if ( m_type != Color )
|
|
|
|
return NoColorPrimitive;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
return static_cast< ColorPrimitive >( m_primitive );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline MetricPrimitive Aspect::metricPrimitive() const
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
if ( m_type != Metric )
|
|
|
|
return NoMetricPrimitive;
|
2017-07-21 18:21:34 +02:00
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
return static_cast< MetricPrimitive >( m_primitive );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline int Aspect::primitive() const
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return m_primitive;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline void Aspect::setPrimitive( Type type, int primitive )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
m_type = type;
|
|
|
|
m_primitive = primitive;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline void Aspect::clearPrimitive()
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
m_primitive = 0;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline Placement Aspect::placement() const
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return static_cast< Placement >( m_placement );
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline void Aspect::setPlacement( Placement placement )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
m_placement = placement;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( State state, const Aspect& aspect )
|
|
|
|
{
|
|
|
|
return aspect | state;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Subcontrol subControl, const Aspect& aspect )
|
|
|
|
{
|
2017-10-30 08:08:58 +01:00
|
|
|
return aspect | subControl;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Type type, const Aspect& aspect )
|
|
|
|
{
|
|
|
|
return aspect | type;
|
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect operator|( Placement placement, const Aspect& aspect )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return aspect | placement;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Subcontrol subControl, Type type )
|
|
|
|
{
|
|
|
|
return Aspect( subControl ) | type;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Type type, Subcontrol subControl )
|
|
|
|
{
|
|
|
|
return subControl | type;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Subcontrol subControl, State state )
|
|
|
|
{
|
|
|
|
return Aspect( subControl ) | state;
|
|
|
|
}
|
|
|
|
|
2017-12-07 11:54:06 +01:00
|
|
|
inline constexpr Aspect operator|( Type type, Placement placement )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return Aspect( type ) | placement;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect operator|( Placement placement, Type type )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return type | placement;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect operator|( State state, Subcontrol subControl )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return subControl | state;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Subcontrol subControl, FlagPrimitive primitive )
|
|
|
|
{
|
|
|
|
return Aspect( subControl ) | primitive;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( FlagPrimitive primitive, Subcontrol subControl )
|
|
|
|
{
|
|
|
|
return subControl | primitive;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Subcontrol subControl, ColorPrimitive primitive )
|
|
|
|
{
|
|
|
|
return Aspect( subControl ) | primitive;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( ColorPrimitive primitive, Subcontrol subControl )
|
|
|
|
{
|
|
|
|
return subControl | primitive;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( Subcontrol subControl, MetricPrimitive primitive )
|
|
|
|
{
|
|
|
|
return Aspect( subControl ) | primitive;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline constexpr Aspect operator|( MetricPrimitive primitive, Subcontrol subControl )
|
|
|
|
{
|
|
|
|
return subControl | primitive;
|
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect operator|( Subcontrol subControl, Placement placement )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return Aspect( subControl ) | placement;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
2017-10-17 17:34:00 +02:00
|
|
|
inline constexpr Aspect operator|( Placement placement, Subcontrol subControl )
|
2017-07-21 18:21:34 +02:00
|
|
|
{
|
2017-10-17 17:34:00 +02:00
|
|
|
return subControl | placement;
|
2017-07-21 18:21:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
QSK_EXPORT State registerState( const QMetaObject*, State, const char* );
|
|
|
|
QSK_EXPORT Subcontrol nextSubcontrol( const QMetaObject*, const char* );
|
|
|
|
|
|
|
|
QSK_EXPORT QByteArray subControlName( Subcontrol );
|
|
|
|
QSK_EXPORT QVector< QByteArray > subControlNames( const QMetaObject* = nullptr );
|
|
|
|
QSK_EXPORT QVector< Subcontrol > subControls( const QMetaObject* );
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace std
|
|
|
|
{
|
|
|
|
template< > struct hash< QskAspect::Aspect >
|
|
|
|
{
|
|
|
|
constexpr size_t operator()( const QskAspect::Aspect& aspect ) const noexcept
|
|
|
|
{
|
|
|
|
return aspect.value();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
Q_DECLARE_TYPEINFO( QskAspect::Aspect, Q_MOVABLE_TYPE );
|
|
|
|
|
|
|
|
#ifndef QT_NO_DEBUG_STREAM
|
|
|
|
|
|
|
|
class QDebug;
|
|
|
|
|
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::Aspect& );
|
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::Type& );
|
2017-10-17 17:34:00 +02:00
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::Subcontrol& );
|
|
|
|
|
2017-07-21 18:21:34 +02:00
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::FlagPrimitive& );
|
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::ColorPrimitive& );
|
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::MetricPrimitive& );
|
2017-10-17 17:34:00 +02:00
|
|
|
|
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::Placement& );
|
2017-07-21 18:21:34 +02:00
|
|
|
QSK_EXPORT QDebug operator<<( QDebug, const QskAspect::State& );
|
|
|
|
|
|
|
|
QSK_EXPORT void qskDebugState( QDebug, const QMetaObject*, QskAspect::State );
|
|
|
|
QSK_EXPORT void qskDebugAspect( QDebug, const QMetaObject*, QskAspect::Aspect );
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define QSK_SUBCONTROLS( ... ) static const QskAspect::Subcontrol __VA_ARGS__;
|
|
|
|
#define QSK_STATES( ... ) static const QskAspect::State __VA_ARGS__;
|
|
|
|
|
|
|
|
#define QSK_SUBCONTROL( type, name ) \
|
|
|
|
const QskAspect::Subcontrol type::name = \
|
|
|
|
QskAspect::nextSubcontrol( &type::staticMetaObject, #type "::" #name );
|
|
|
|
|
|
|
|
#define QSK_STATE( type, name, value ) \
|
|
|
|
const QskAspect::State type::name = \
|
|
|
|
QskAspect::registerState( &type::staticMetaObject, value, #type "::" #name );
|
|
|
|
#endif
|