X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fuistyle.h;h=899ab9a71ad34b370eb457ae7a98ecebcde0478a;hp=030c1ac145314d02bb1b01d1f6565709fb821f60;hb=68878dc8366f2f4a0afe132847aad9a51a80cdbf;hpb=5f13dd167785d830a851b134863dce231ec450dd diff --git a/src/uisupport/uistyle.h b/src/uisupport/uistyle.h index 030c1ac1..899ab9a7 100644 --- a/src/uisupport/uistyle.h +++ b/src/uisupport/uistyle.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,9 +18,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef UISTYLE_H_ -#define UISTYLE_H_ +#pragma once +#include +#include + +#include #include #include #include @@ -43,8 +46,6 @@ public: UiStyle(QObject *parent = 0); virtual ~UiStyle(); - typedef QList > FormatList; - //! This enumerates the possible formats a text element may have. */ /** These formats are ordered on increasing importance, in cases where a given property is specified * by multiple active formats. @@ -52,7 +53,7 @@ public: * methods in this class (in particular mergedFormat())! * Also, we _do_ rely on certain properties of these values in styleString() and friends! */ - enum FormatType { + enum class FormatType : quint32 { Base = 0x00000000, Invalid = 0xffffffff, @@ -80,7 +81,7 @@ public: Bold = 0x00000100, Italic = 0x00000200, Underline = 0x00000400, - Reverse = 0x00000800, + Strikethrough = 0x00000800, // Individual parts of a message Timestamp = 0x00001000, @@ -99,13 +100,16 @@ public: // background: 0x.0800000 }; - enum MessageLabel { + enum class MessageLabel : quint32 { + None = 0x00000000, OwnMsg = 0x00000001, Highlight = 0x00000002, Selected = 0x00000004 // must be last! }; - enum ItemFormatType { + enum class ItemFormatType : quint32 { + None = 0x00000000, + BufferViewItem = 0x00000001, NickViewItem = 0x00000002, @@ -119,10 +123,17 @@ public: ActiveBuffer = 0x00002000, UnreadBuffer = 0x00004000, HighlightedBuffer = 0x00008000, - UserAway = 0x00010000 + UserAway = 0x00010000, + + Invalid = 0xffffffff + }; + + enum class FormatProperty { + AllowForegroundOverride = QTextFormat::UserProperty, + AllowBackgroundOverride }; - enum ColorRole { + enum class ColorRole { MarkerLine, // Sender colors (16 + self) // These aren't used directly to avoid having storing all of the sender color options in the @@ -151,6 +162,14 @@ public: NumRoles // must be last! }; + struct Format { + FormatType type; + QColor foreground; + QColor background; + }; + + using FormatList = std::vector>; + struct StyledString { QString plainText; FormatList formatList; // starting pos, ftypes @@ -201,7 +220,7 @@ public: const QColor defaultSenderColorSelf = QColor(0, 0, 0); static FormatType formatType(Message::Type msgType); - static StyledString styleString(const QString &string, quint32 baseFormat = Base); + static StyledString styleString(const QString &string, FormatType baseFormat = FormatType::Base); static QString mircToInternal(const QString &); /** @@ -231,10 +250,10 @@ public: */ static QString timestampFormatString(); - QTextCharFormat format(quint32 formatType, quint32 messageLabel) const; - QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel) const; + QTextCharFormat format(const Format &format, MessageLabel messageLabel) const; + QFontMetricsF *fontMetrics(FormatType formatType, MessageLabel messageLabel) const; - QList toTextLayoutList(const FormatList &, int textLength, quint32 messageLabel) const; + QList toTextLayoutList(const FormatList &, int textLength, MessageLabel messageLabel) const; inline const QBrush &brush(ColorRole role) const { return _uiStylePalette.at((int)role); } inline void setBrush(ColorRole role, const QBrush &brush) { _uiStylePalette[(int)role] = brush; } @@ -252,11 +271,12 @@ protected: void loadStyleSheet(); QString loadStyleSheet(const QString &name, bool shouldExist = false); - QTextCharFormat format(quint64 key) const; - QTextCharFormat cachedFormat(quint32 formatType, quint32 messageLabel) const; - void setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel) const; - void mergeFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel) const; - void mergeSubElementFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel) const; + QTextCharFormat parsedFormat(quint64 key) const; + QTextCharFormat cachedFormat(const Format &format, MessageLabel messageLabel) const; + void setCachedFormat(const QTextCharFormat &charFormat, const Format &format, MessageLabel messageLabel) const; + void mergeFormat(QTextCharFormat &charFormat, const Format &format, MessageLabel messageLabel) const; + void mergeSubElementFormat(QTextCharFormat &charFormat, FormatType formatType, MessageLabel messageLabel) const; + void mergeColors(QTextCharFormat &charFormat, const Format &format, MessageLabel messageLabel) const; static FormatType formatType(const QString &code); static QString formatCode(FormatType); @@ -284,6 +304,12 @@ protected: * @param[in] format Timestamp format string */ static void setTimestampFormatString(const QString &format); + /** + * Updates the local setting cache of whether or not to show sender prefixmodes + * + * @param[in] enabled If true, sender prefixmodes are enabled, otherwise false. + */ + static void enableSenderPrefixes(bool enabled); /** * Updates the local setting cache of whether or not to show sender brackets @@ -302,13 +328,14 @@ private: QVector _uiStylePalette; QBrush _markerLineBrush; QHash _formats; - mutable QHash _formatCache; + mutable QHash _formatCache; mutable QHash _metricsCache; - QHash _listItemFormats; + QHash _listItemFormats; static QHash _formatCodes; static bool _useCustomTimestampFormat; /// If true, use the custom timestamp format static QString _systemTimestampFormatString; /// Cached copy of system locale timestamp format static QString _timestampFormatString; /// Timestamp format string + static bool _showSenderPrefixes; /// If true, show prefixmodes before sender names static bool _showSenderBrackets; /// If true, show brackets around sender names QIcon _channelJoinedIcon; @@ -350,10 +377,39 @@ private: mutable quint8 _senderHash; }; +#if QT_VERSION < 0x050000 +uint qHash(UiStyle::ItemFormatType key); +#else +uint qHash(UiStyle::ItemFormatType key, uint seed); +#endif + +// ---- Operators for dealing with enums ---------------------------------------------------------- + +UiStyle::FormatType operator|(UiStyle::FormatType lhs, UiStyle::FormatType rhs); +UiStyle::FormatType& operator|=(UiStyle::FormatType &lhs, UiStyle::FormatType rhs); +UiStyle::FormatType operator|(UiStyle::FormatType lhs, quint32 rhs); +UiStyle::FormatType& operator|=(UiStyle::FormatType &lhs, quint32 rhs); +UiStyle::FormatType operator&(UiStyle::FormatType lhs, UiStyle::FormatType rhs); +UiStyle::FormatType& operator&=(UiStyle::FormatType &lhs, UiStyle::FormatType rhs); +UiStyle::FormatType operator&(UiStyle::FormatType lhs, quint32 rhs); +UiStyle::FormatType& operator&=(UiStyle::FormatType &lhs, quint32 rhs); +UiStyle::FormatType& operator^=(UiStyle::FormatType &lhs, UiStyle::FormatType rhs); + +UiStyle::MessageLabel operator|(UiStyle::MessageLabel lhs, UiStyle::MessageLabel rhs); +UiStyle::MessageLabel& operator|=(UiStyle::MessageLabel &lhs, UiStyle::MessageLabel rhs); +UiStyle::MessageLabel operator&(UiStyle::MessageLabel lhs, quint32 rhs); +UiStyle::MessageLabel& operator&=(UiStyle::MessageLabel &lhs, UiStyle::MessageLabel rhs); + +// Shifts the label into the upper half of the return value +quint64 operator|(UiStyle::FormatType lhs, UiStyle::MessageLabel rhs); + +UiStyle::ItemFormatType operator|(UiStyle::ItemFormatType lhs, UiStyle::ItemFormatType rhs); +UiStyle::ItemFormatType& operator|=(UiStyle::ItemFormatType &lhs, UiStyle::ItemFormatType rhs); + +// ---- Allow for FormatList in QVariant ---------------------------------------------------------- QDataStream &operator<<(QDataStream &out, const UiStyle::FormatList &formatList); QDataStream &operator>>(QDataStream &in, UiStyle::FormatList &formatList); Q_DECLARE_METATYPE(UiStyle::FormatList) - -#endif +Q_DECLARE_METATYPE(UiStyle::MessageLabel)