+ 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
+ // rendering routine of each item. Also, I couldn't figure out how to do that.
+ // It would be nice to have the UseSenderColors preference also toggle sender colors set by
+ // themes, so hopefully this can be extended in the future.
+ // Furthermore, using this palette directly would mean separate sets of colors couldn't be
+ // used for different message types.
+ SenderColorSelf,
+ SenderColor00,
+ SenderColor01,
+ SenderColor02,
+ SenderColor03,
+ SenderColor04,
+ SenderColor05,
+ SenderColor06,
+ SenderColor07,
+ SenderColor08,
+ SenderColor09,
+ SenderColor0a,
+ SenderColor0b,
+ SenderColor0c,
+ SenderColor0d,
+ SenderColor0e,
+ SenderColor0f,
+ NumRoles // must be last!
+ };
+
+ /// Display of sender prefix modes
+ enum class SenderPrefixMode
+ {
+ NoModes = 0, ///< Hide sender modes
+ HighestMode = 1, ///< Show the highest active sender mode
+ AllModes = 2 ///< Show all active sender modes
+ };
+ // Do not change SenderPrefixMode numbering without also adjusting
+ // ChatViewSettingsPage::initSenderPrefixComboBox() and chatviewsettingspage.ui "defaultValue"
+
+ struct Format
+ {
+ FormatType type;
+ QColor foreground;
+ QColor background;
+ };
+
+ using FormatList = std::vector<std::pair<quint16, Format>>;
+
+ struct StyledString
+ {
+ QString plainText;
+ FormatList formatList; // starting pos, ftypes
+ };
+
+ class StyledMessage;
+
+ /**
+ * List of default sender colors
+ *
+ * In order from 1 - 16, matching the Sender## format in the settings file.
+ * Don't change the length or values of the colors without updating the UI and color roles, too.
+ *
+ * @see ../qtui/settingspages/chatviewsettingspage.ui
+ * @see UiStyle::ColorRole
+ */
+ const QList<QColor> defaultSenderColors = QList<QColor>{
+ QColor(204, 0 , 0 ), ///< Sender00
+ QColor(0 , 108, 173), ///< Sender01
+ QColor(77 , 153, 0 ), ///< Sender02
+ QColor(102, 0 , 204), ///< Sender03
+ QColor(166, 125, 0 ), ///< Sender04
+ QColor(0 , 153, 39 ), ///< Sender05
+ QColor(0 , 48 , 192), ///< Sender06
+ QColor(204, 0 , 154), ///< Sender07
+ QColor(185, 70 , 0 ), ///< Sender08
+ QColor(134, 153, 0), ///< Sender09
+ QColor(20 , 153, 0), ///< Sender10
+ QColor(0 , 153, 96), ///< Sender11
+ QColor(0 , 108, 173), ///< Sender12
+ QColor(0 , 153, 204), ///< Sender13
+ QColor(179, 0 , 204), ///< Sender14
+ QColor(204, 0 , 77 ), ///< Sender15
+ };
+ // 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; }