179 lines
4.8 KiB
C++
179 lines
4.8 KiB
C++
/******************************************************************************
|
|
* 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 <qmetatype.h>
|
|
#include <qtextoption.h>
|
|
|
|
#include <limits>
|
|
|
|
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
|