/***************************************************************************
- * Copyright (C) 2005-2015 by the Quassel Project *
+ * Copyright (C) 2005-2016 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
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, too.
+ *
+ * @see ../qtui/settingspages/chatviewsettingspage.ui
+ */
+ const QList<QColor> defaultSenderColors = QList<QColor> {
+ QColor(233, 13, 127), /// Sender00
+ QColor(142, 85, 233), /// Sender01
+ QColor(179, 14, 14), /// Sender02
+ QColor(23, 179, 57), /// Sender03
+ QColor(88, 175, 179), /// Sender04
+ QColor(157, 84, 179), /// Sender05
+ QColor(179, 151, 117), /// Sender06
+ QColor(49, 118, 179), /// Sender07
+ QColor(233, 13, 127), /// Sender08
+ QColor(142, 85, 233), /// Sender09
+ QColor(179, 14, 14), /// Sender10
+ QColor(23, 179, 57), /// Sender11
+ QColor(88, 175, 179), /// Sender12
+ QColor(157, 84, 179), /// Sender13
+ QColor(179, 151, 117), /// Sender14
+ QColor(49, 118, 179), /// 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, quint32 baseFormat = Base);
static QString mircToInternal(const QString &);
- static inline QString timestampFormatString() { return _timestampFormatString; }
+
+ /**
+ * 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(quint32 formatType, quint32 messageLabel) const;
QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel) const;
static FormatType formatType(const QString &code);
static QString formatCode(FormatType);
+
+ /**
+ * Cache the system locale timestamp format string
+ *
+ * Based on whether or not AM/PM designators are used in the QLocale::system().timeFormat(),
+ * this extends the system locale timestamp format string to include seconds.
+ *
+ * @see UiStyle::systemTimestampFormatString()
+ */
+ static void updateSystemTimestampFormat();
+
+ /**
+ * Updates the local setting cache of whether or not to use the custom timestamp format
+ *
+ * @param[in] enabled If true, custom timestamp format used, otherwise false
+ */
+ static void setUseCustomTimestampFormat(bool enabled);
+
+ /**
+ * Updates the local setting cache of the timestamp format string
+ *
+ * @param[in] format Timestamp format string
+ */
static void setTimestampFormatString(const QString &format);
+ /**
+ * Updates the local setting cache of whether or not to show sender brackets
+ *
+ * @param[in] enabled If true, sender brackets are enabled, otherwise false.
+ */
+ static void enableSenderBrackets(bool enabled);
+
QVariant itemData(int role, const QTextCharFormat &format) const;
private slots:
mutable QHash<quint64, QFontMetricsF *> _metricsCache;
QHash<quint32, QTextCharFormat> _listItemFormats;
static QHash<QString, FormatType> _formatCodes;
- static QString _timestampFormatString;
+ static bool _useCustomTimestampFormat; /// If true, use the custom timestamp format
+ static QString _systemTimestampFormatString; /// Cached copy of system locale timestamp format
+ static QString _timestampFormatString; /// Timestamp format string
+ static bool _showSenderBrackets; /// If true, show brackets around sender names
QIcon _channelJoinedIcon;
QIcon _channelPartedIcon;