+ struct StyledString {
+ QString plainText;
+ FormatList formatList; // starting pos, ftypes
+ };
+
+ 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);
+
+ FormatType formatType(const QString &code) const;
+ QString formatCode(FormatType) const;
+
+ inline QFont defaultFont() const { return _defaultFont; }
+
+ QList<QTextLayout::FormatRange> toTextLayoutList(const FormatList &, int textLength);
+
+protected:
+ void loadStyleSheet();
+
+ bool _senderAutoColor;
+
+private:
+ QFont _defaultFont;
+ QTextCharFormat _defaultPlainFormat;
+ QHash<FormatType, QTextCharFormat> _defaultFormats;
+ QHash<FormatType, QTextCharFormat> _customFormats;
+ QHash<quint32, QTextCharFormat> _cachedFormats;
+ QHash<quint32, QFontMetricsF *> _cachedFontMetrics;
+ QHash<QString, FormatType> _formatCodes;
+
+ QString _settingsKey;
+};
+
+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) const;
+
+
+ QString decoratedTimestamp() const;
+ QString plainSender() const; //!< Nickname (no decorations) for Plain and Notice, empty else
+ QString decoratedSender() const;
+ 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:
+ mutable StyledString _contents;