+ // Explicitly declare QList<QColor> type for defaultSenderColors, otherwise error C2797
+ // "list initialization inside member initializer list" will occur in Windows builds with Visual
+ // Studio's compiler.
+ //
+ // See https://blogs.msdn.microsoft.com/vcblog/2014/08/19/the-future-of-non-static-data-member-initialization/
+ // Note: Qt Creator flags this as invalid unless you set Clang in
+ // Settings -> C++ -> Code Model -> Code Completion and Semantic Highlighting -> C
+ //
+ // See https://bugreports.qt.io/browse/QTCREATORBUG-1902
+
+ /**
+ * Default sender color for sent messages
+ */
+ const QColor defaultSenderColorSelf = QColor(0, 0, 0);
+
+ static FormatType formatType(Message::Type msgType);
+ static StyledString styleString(const QString &string, FormatType baseFormat = FormatType::Base);
+ static QString mircToInternal(const QString &);
+
+ /**
+ * Gets if a custom timestamp format is used.
+ *
+ * @return True if custom timestamp format used, otherwise false
+ */
+ static inline bool useCustomTimestampFormat() { return _useCustomTimestampFormat; }
+
+ /**
+ * Gets the format string for chat log timestamps according to the system locale.
+ *
+ * This will return " hh:mm:ss" for system locales with 24-hour time or " h:mm:ss AP" for
+ * systems with 12-hour time.
+ *
+ * @return String representing timestamp format according to system locale, e.g. " hh:mm:ss"
+ */
+ static QString systemTimestampFormatString();
+
+ /**
+ * Gets the format string for chat log timestamps, either system locale or custom.
+ *
+ * Depending on useCustomTimestampFormat(), this will return either the system locale based
+ * time format, or the custom user-specified string.
+ *
+ * @return String representing timestamp format, e.g. "[hh:mm:ss]" or " hh:mm:ss"
+ */
+ static QString timestampFormatString();
+
+ QTextCharFormat format(const Format &format, MessageLabel messageLabel) const;
+ QFontMetricsF *fontMetrics(FormatType formatType, MessageLabel messageLabel) const;
+
+ QList<QTextLayout::FormatRange> 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; }
+
+ QVariant bufferViewItemData(const QModelIndex &networkModelIndex, int role) const;
+ QVariant nickViewItemData(const QModelIndex &networkModelIndex, int role) const;
+
+public slots:
+ void reload();
+
+signals:
+ void changed();
+
+protected:
+ void loadStyleSheet();
+ QString loadStyleSheet(const QString &name, bool shouldExist = false);