X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fuistyle.h;h=ae0ad293dcf672ac2e7b07ca8455b7a201917458;hp=769222793d53afe64464ca325dac8dd7a9cecede;hb=526eccc444029c5a0d80694487c3aec6707cbeda;hpb=1566f62849f9011656d9111b99f023d694bb8805 diff --git a/src/uisupport/uistyle.h b/src/uisupport/uistyle.h index 76922279..ae0ad293 100644 --- a/src/uisupport/uistyle.h +++ b/src/uisupport/uistyle.h @@ -18,14 +18,16 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef UISTYLE_H -#define UISTYLE_H +#ifndef UISTYLE_H_ +#define UISTYLE_H_ #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,13 @@ public: RenameMsg = 0x00000009, ModeMsg = 0x0000000a, ActionMsg = 0x0000000b, + // Standard Formats Bold = 0x00000010, Italic = 0x00000020, Underline = 0x00000040, Reverse = 0x00000080, + // Individual parts of a message Timestamp = 0x00000100, Sender = 0x00000200, @@ -73,9 +78,11 @@ public: Hostmask = 0x00000800, ChannelName = 0x00001000, ModeFlags = 0x00002000, + // URL is special, we want that to take precedence over the rest... - Url = 0x00100000, - // Colors + Url = 0x00080000, + + // mIRC Colors - we assume those to be present only in plain contents FgCol00 = 0x00400000, FgCol01 = 0x01400000, FgCol02 = 0x02400000, @@ -108,13 +115,37 @@ public: BgCol12 = 0xc0800000, BgCol13 = 0xd0800000, BgCol14 = 0xe0800000, - BgCol15 = 0xf0800000 - + BgCol15 = 0xf0800000, + + // Colors used for sender auto coloring + // (starting at 01 because 00 is the default Sender format) + SenderCol01 = 0x01000200, + SenderCol02 = 0x02000200, + SenderCol03 = 0x03000200, + SenderCol04 = 0x04000200, + SenderCol05 = 0x05000200, + SenderCol06 = 0x06000200, + SenderCol07 = 0x07000200, + SenderCol08 = 0x08000200, + SenderCol09 = 0x09000200, + SenderCol10 = 0x0a000200, + SenderCol11 = 0x0b000200, + SenderCol12 = 0x0c000200, + SenderCol13 = 0x0d000200, + SenderCol14 = 0x0e000200, + SenderCol15 = 0x0f000200, + SenderCol16 = 0x10000200, + SenderCol17 = 0x11000200, + SenderCol18 = 0x12000200, + SenderCol19 = 0x13000200, + SenderCol20 = 0x14000200, + SenderCol21 = 0x15000200, + + SenderColSelf = 0xff000200 }; - struct UrlInfo { - int start, end; - QUrl url; + enum MessageLabel { + Highlight = 0x00000001 }; struct StyledString { @@ -123,14 +154,21 @@ public: }; class StyledMessage; + class QssParser; StyledString styleString(const QString &); QString mircToInternal(const QString &) const; - void setFormat(FormatType, QTextCharFormat, Settings::Mode mode/* = Settings::Custom*/); - QTextCharFormat format(FormatType, Settings::Mode mode = Settings::Custom) const; - QTextCharFormat mergedFormat(quint32 formatType); - QFontMetricsF *fontMetrics(quint32 formatType); + void setFormat(FormatType, QTextCharFormat, Settings::Mode mode/* = Settings::Custom*/); // FIXME go away + void setSenderAutoColor(bool state); // FIXME go away + QTextCharFormat format(FormatType, Settings::Mode mode = Settings::Custom) const; // FIXME go away + + QTextCharFormat cachedFormat(quint64 key) const; + QTextCharFormat cachedFormat(quint32 formatType, quint32 messageLabel = 0) const; + void setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel = 0); + + QTextCharFormat mergedFormat(quint32 formatType, quint32 messageLabel = 0); + QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel = 0); FormatType formatType(const QString &code) const; QString formatCode(FormatType) const; @@ -140,13 +178,23 @@ public: QList toTextLayoutList(const FormatList &, int textLength); protected: + void loadStyleSheet(); + + //! Determines the format set to be used for the given hostmask + //int formatSetIndex(const QString &hostmask) const; + //int formatSetIndexForSelf() const; + + void mergeSubElementFormat(QTextCharFormat &format, quint32 formatType, quint32 messageLabel = 0); + + bool _senderAutoColor; + private: QFont _defaultFont; QTextCharFormat _defaultPlainFormat; QHash _defaultFormats; QHash _customFormats; - QHash _cachedFormats; - QHash _cachedFontMetrics; + QHash _formatCache; + QHash _metricsCache; QHash _formatCodes; QString _settingsKey; @@ -156,20 +204,23 @@ class UiStyle::StyledMessage : public Message { public: explicit StyledMessage(const Message &message); + //! Styling is only needed for calls to plainContents() and contentsFormatList() + // StyledMessage can't style lazily by itself, as it doesn't know the used style bool inline needsStyling() const { return _contents.plainText.isNull(); } - void style(UiStyle *style); + void style(UiStyle *style) const; + QString decoratedTimestamp() const; QString plainSender() const; //!< Nickname (no decorations) for Plain and Notice, empty else QString decoratedSender() const; - const QString &plainContents() const { return _contents.plainText; } + inline const QString &plainContents() const { return _contents.plainText; } inline FormatType timestampFormat() const { return UiStyle::Timestamp; } FormatType senderFormat() const; inline const FormatList &contentsFormatList() const { return _contents.formatList; } private: - StyledString _contents; + mutable StyledString _contents; }; QDataStream &operator<<(QDataStream &out, const UiStyle::FormatList &formatList);