Switch sender colors to use color palette
[quassel.git] / src / uisupport / uistyle.h
index b179147..ee78c9b 100644 (file)
@@ -124,6 +124,30 @@ public:
 
     enum 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!
     };
 
@@ -138,9 +162,10 @@ public:
      * 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.
+     * 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(233, 13, 127),  /// Sender00
@@ -178,7 +203,33 @@ public:
     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;
@@ -209,7 +260,31 @@ protected:
 
     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
      *
@@ -231,8 +306,10 @@ private:
     mutable QHash<quint64, QFontMetricsF *> _metricsCache;
     QHash<quint32, QTextCharFormat> _listItemFormats;
     static QHash<QString, FormatType> _formatCodes;
-    static QString _timestampFormatString;
-    static bool _showSenderBrackets;  /// If true, show brackets around sender names
+    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;