X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fuisupport%2Fuistyle.h;h=57e8988b65cd537b741992cf81d19368f6d65ccd;hb=90eb5244fb07eb2371279c12266fca06d0fed23c;hp=14d60a1d62b042385271732bbe479eaec3096dcb;hpb=0f940afade8a434b061fa45d324ce90f83dad08d;p=quassel.git diff --git a/src/uisupport/uistyle.h b/src/uisupport/uistyle.h index 14d60a1d..57e8988b 100644 --- a/src/uisupport/uistyle.h +++ b/src/uisupport/uistyle.h @@ -23,9 +23,11 @@ #include #include +#include #include #include -#include +#include +#include #include "message.h" #include "settings.h" @@ -49,6 +51,7 @@ public: enum FormatType { None = 0x00000000, Invalid = 0x11111111, + // Message Formats (mutually exclusive!) PlainMsg = 0x00000001, NoticeMsg = 0x00000002, @@ -61,11 +64,18 @@ public: RenameMsg = 0x00000009, ModeMsg = 0x0000000a, ActionMsg = 0x0000000b, + HighlightMsg = 0x0000000f, + + // Note: mergedFormat() assumes that 0x10 - 0x80 are *only* used within the message contents, + // e.g. not together with any of 0x0100-0x2000! + // If we happen to find a use case for that, we can see if/how to implement that though. + // Standard Formats Bold = 0x00000010, Italic = 0x00000020, Underline = 0x00000040, Reverse = 0x00000080, + // Individual parts of a message Timestamp = 0x00000100, Sender = 0x00000200, @@ -73,9 +83,11 @@ public: Hostmask = 0x00000800, ChannelName = 0x00001000, ModeFlags = 0x00002000, + // URL is special, we want that to take precedence over the rest... Url = 0x00100000, - // Colors + + // mIRC Colors - we assume those to be present only in plain contents FgCol00 = 0x00400000, FgCol01 = 0x01400000, FgCol02 = 0x02400000, @@ -132,13 +144,9 @@ public: SenderCol18 = 0x12000200, SenderCol19 = 0x13000200, SenderCol20 = 0x14000200, - SenderCol21 = 0x15000200 - - }; + SenderCol21 = 0x15000200, - struct UrlInfo { - int start, end; - QUrl url; + SenderColSelf = 0xff000200 }; struct StyledString { @@ -147,11 +155,13 @@ public: }; class StyledMessage; + class QssParser; StyledString styleString(const QString &); QString mircToInternal(const QString &) const; void setFormat(FormatType, QTextCharFormat, Settings::Mode mode/* = Settings::Custom*/); + void setSenderAutoColor(bool state); QTextCharFormat format(FormatType, Settings::Mode mode = Settings::Custom) const; QTextCharFormat mergedFormat(quint32 formatType); QFontMetricsF *fontMetrics(quint32 formatType); @@ -164,6 +174,10 @@ public: QList toTextLayoutList(const FormatList &, int textLength); protected: + void loadStyleSheet(); + + bool _senderAutoColor; + private: QFont _defaultFont; QTextCharFormat _defaultPlainFormat; @@ -199,6 +213,56 @@ private: mutable StyledString _contents; }; +class UiStyle::QssParser { +public: + enum Column { + Any, + Timestamp, + Sender, + Contents + }; + + struct ChatLineFormat { + QVector senderColors; + QVector mircColors; + QHash formats; + + }; + + QssParser(); + + void loadStyleSheet(const QString &sheet); + + inline QPalette palette() const { return _palette; } + ChatLineFormat basicFormat() const; + QHash specialFormats() const; + +protected: + typedef QList ColorTuple; + + void parseChatLineData(const QString &decl, const QString &contents); + void parsePaletteData(const QString &decl, const QString &contents); + + QTextCharFormat parseFormat(const QString &qss); + bool parsePalette(QPalette &, const QString &qss); + + // Parse basic data types + QBrush parseBrushValue(const QString &str); + QColor parseColorValue(const QString &str); + QFont parseFont(const QString &str); + + // Parse subelements + ColorTuple parseColorTuple(const QString &str); + QGradientStops parseGradientStops(const QString &str); + + QHash _paletteColorRoles; + +private: + QPalette _palette; + ChatLineFormat _basicFormat; + QHash _specialFormats; +}; + QDataStream &operator<<(QDataStream &out, const UiStyle::FormatList &formatList); QDataStream &operator>>(QDataStream &in, UiStyle::FormatList &formatList);