/****************************************************************************** * QSkinny - Copyright (C) 2016 Uwe Rathmann * This file may be used under the terms of the QSkinny License, Version 1.0 *****************************************************************************/ #ifndef QSK_TEXT_OPTIONS_H #define QSK_TEXT_OPTIONS_H #include "QskGlobal.h" #include #include #include class QSK_EXPORT QskTextOptions { Q_GADGET Q_PROPERTY( TextFormat format READ format WRITE setFormat ) Q_PROPERTY( Qt::TextElideMode elideMode READ elideMode WRITE setElideMode ) Q_PROPERTY( WrapMode wrapMode READ wrapMode WRITE setWrapMode ) Q_PROPERTY( FontSizeMode fontSizeMode READ fontSizeMode WRITE setFontSizeMode ) Q_PROPERTY( int maximumLineCount READ maximumLineCount WRITE setMaximumLineCount ) public: enum FontSizeMode { FixedSize, HorizontalFit, VerticalFit, Fit }; enum WrapMode { NoWrap = QTextOption::NoWrap, WordWrap = QTextOption::WordWrap, WrapAnywhere = QTextOption::WrapAnywhere, Wrap = QTextOption::WrapAtWordBoundaryOrAnywhere }; Q_ENUM( WrapMode ) enum TextFormat { PlainText = Qt::PlainText, RichText = Qt::RichText, AutoText = Qt::AutoText, StyledText = 4 // taken from QQuickText::StyledText }; Q_ENUM( TextFormat ) constexpr QskTextOptions() noexcept; constexpr TextFormat format() const noexcept; void setFormat( TextFormat ) noexcept; TextFormat effectiveFormat( const QString& text ) const; constexpr Qt::TextElideMode elideMode() const noexcept; void setElideMode( Qt::TextElideMode ) noexcept; constexpr Qt::TextElideMode effectiveElideMode() const noexcept; constexpr FontSizeMode fontSizeMode() const noexcept; void setFontSizeMode( FontSizeMode ) noexcept; constexpr WrapMode wrapMode() const noexcept; void setWrapMode( WrapMode ) noexcept; constexpr int maximumLineCount() const noexcept; void setMaximumLineCount( int ) noexcept; constexpr bool operator==( const QskTextOptions& other ) const noexcept; constexpr bool operator!=( const QskTextOptions& other ) const noexcept; int textFlags() const noexcept; private: int m_maximumLineCount; FontSizeMode m_fontSizeMode : 2; WrapMode m_wrapMode : 4; TextFormat m_format : 3; Qt::TextElideMode m_elideMode : 2; }; inline constexpr QskTextOptions::QskTextOptions() noexcept : m_maximumLineCount( std::numeric_limits< int >::max() ) , m_fontSizeMode( QskTextOptions::FixedSize ) , m_wrapMode( QskTextOptions::NoWrap ) , m_format( PlainText ) // AutoText ??? , m_elideMode( Qt::ElideNone ) { } inline void QskTextOptions::setFormat( TextFormat format ) noexcept { m_format = format; } constexpr inline QskTextOptions::TextFormat QskTextOptions::format() const noexcept { return m_format; } inline void QskTextOptions::setElideMode( Qt::TextElideMode elideMode ) noexcept { m_elideMode = elideMode; } constexpr inline Qt::TextElideMode QskTextOptions::elideMode() const noexcept { return m_elideMode; } constexpr inline Qt::TextElideMode QskTextOptions::effectiveElideMode() const noexcept { return ( m_wrapMode != QskTextOptions::NoWrap ) ? Qt::ElideNone : m_elideMode; } inline void QskTextOptions::setWrapMode( WrapMode wrapMode ) noexcept { m_wrapMode = wrapMode; } constexpr inline QskTextOptions::WrapMode QskTextOptions::wrapMode() const noexcept { return m_wrapMode; } inline void QskTextOptions::setFontSizeMode( FontSizeMode fontSizeMode ) noexcept { m_fontSizeMode = fontSizeMode; } constexpr inline QskTextOptions::FontSizeMode QskTextOptions::fontSizeMode() const noexcept { return m_fontSizeMode; } inline void QskTextOptions::setMaximumLineCount( int lineCount ) noexcept { m_maximumLineCount = lineCount; } constexpr inline int QskTextOptions::maximumLineCount() const noexcept { return m_maximumLineCount; } inline constexpr bool QskTextOptions::operator==( const QskTextOptions& other ) const noexcept { return ( m_format == other.m_format ) && ( m_elideMode == other.m_elideMode ) && ( m_wrapMode == other.m_wrapMode ) && ( m_fontSizeMode == other.m_fontSizeMode ) && ( m_maximumLineCount == other.m_maximumLineCount ); } inline constexpr bool QskTextOptions::operator!=( const QskTextOptions& other ) const noexcept { return !( *this == other ); } QSK_EXPORT uint qHash( const QskTextOptions&, uint seed = 0 ) noexcept; #ifndef QT_NO_DEBUG_STREAM class QDebug; QSK_EXPORT QDebug operator<<( QDebug, const QskTextOptions& ); #endif Q_DECLARE_TYPEINFO( QskTextOptions, Q_MOVABLE_TYPE ); Q_DECLARE_METATYPE( QskTextOptions ) #endif