client: Highest sender prefix mode, migrate, fix
[quassel.git] / src / uisupport / uistyle.cpp
index bd9b013..d1c78cd 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2016 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -36,7 +36,7 @@ QHash<QString, UiStyle::FormatType> UiStyle::_formatCodes;
 bool UiStyle::_useCustomTimestampFormat;       /// If true, use the custom timestamp format
 QString UiStyle::_timestampFormatString;       /// Timestamp format
 QString UiStyle::_systemTimestampFormatString; /// Cached copy of system locale timestamp format
-bool UiStyle::_showSenderPrefixes;             /// If true, show prefixmodes before sender names
+UiStyle::SenderPrefixMode UiStyle::_senderPrefixDisplay; /// Display of prefix modes before sender
 bool UiStyle::_showSenderBrackets;             /// If true, show brackets around sender names
 
 namespace {
@@ -63,8 +63,8 @@ QColor extendedMircColor(int number)
 
 UiStyle::UiStyle(QObject *parent)
     : QObject(parent),
-    _channelJoinedIcon(QIcon::fromTheme("irc-channel-joined", QIcon(":/icons/irc-channel-joined.png"))),
-    _channelPartedIcon(QIcon::fromTheme("irc-channel-parted", QIcon(":/icons/irc-channel-parted.png"))),
+    _channelJoinedIcon(QIcon::fromTheme("irc-channel-active", QIcon(":/icons/irc-channel-active.png"))),
+    _channelPartedIcon(QIcon::fromTheme("irc-channel-inactive", QIcon(":/icons/irc-channel-inactive.png"))),
     _userOfflineIcon(QIcon::fromTheme("im-user-offline", QIcon::fromTheme("user-offline", QIcon(":/icons/im-user-offline.png")))),
     _userOnlineIcon(QIcon::fromTheme("im-user", QIcon::fromTheme("user-available", QIcon(":/icons/im-user.png")))), // im-user-* are non-standard oxygen extensions
     _userAwayIcon(QIcon::fromTheme("im-user-away", QIcon::fromTheme("user-away", QIcon(":/icons/im-user-away.png")))),
@@ -85,8 +85,9 @@ UiStyle::UiStyle(QObject *parent)
     // Now initialize the mapping between FormatCodes and FormatTypes...
     _formatCodes["%O"] = FormatType::Base;
     _formatCodes["%B"] = FormatType::Bold;
-    _formatCodes["%S"] = FormatType::Italic;
+    _formatCodes["%I"] = FormatType::Italic;
     _formatCodes["%U"] = FormatType::Underline;
+    _formatCodes["%S"] = FormatType::Strikethrough;
 
     _formatCodes["%DN"] = FormatType::Nick;
     _formatCodes["%DH"] = FormatType::Hostmask;
@@ -99,8 +100,8 @@ UiStyle::UiStyle(QObject *parent)
     // in there.
     setUseCustomTimestampFormat(false);
     setTimestampFormatString(" hh:mm:ss");
-    enableSenderPrefixes(false);
-    enableSenderBrackets(true);
+    setSenderPrefixDisplay(UiStyle::SenderPrefixMode::HighestMode);
+    enableSenderBrackets(false);
 
     // BufferView / NickView settings
     UiStyleSettings s;
@@ -250,10 +251,10 @@ void UiStyle::setTimestampFormatString(const QString &format)
     }
 }
 
-void UiStyle::enableSenderPrefixes(bool enabled)
+void UiStyle::setSenderPrefixDisplay(UiStyle::SenderPrefixMode mode)
 {
-    if (_showSenderPrefixes != enabled) {
-        _showSenderPrefixes = enabled;
+    if (_senderPrefixDisplay != mode) {
+        _senderPrefixDisplay = mode;
     }
 }
 
@@ -756,11 +757,17 @@ QString UiStyle::mircToInternal(const QString &mirc_)
                 case '\x09':
                     mirc += "        ";
                     break;
+                case '\x11':
+                    // Monospace not supported yet
+                    break;
                 case '\x12':
                 case '\x16':
                     mirc += "%R";
                     break;
                 case '\x1d':
+                    mirc += "%I";
+                    break;
+                case '\x1e':
                     mirc += "%S";
                     break;
                 case '\x1f':
@@ -1051,8 +1058,18 @@ QString UiStyle::StyledMessage::plainSender() const
 QString UiStyle::StyledMessage::decoratedSender() const
 {
     QString _senderPrefixes;
-    if (_showSenderPrefixes) {
+    switch (_senderPrefixDisplay) {
+    case UiStyle::SenderPrefixMode::AllModes:
+        // Show every available mode
         _senderPrefixes = senderPrefixes();
+        break;
+    case UiStyle::SenderPrefixMode::HighestMode:
+        // Show the highest available mode (left-most)
+        _senderPrefixes = senderPrefixes().left(1);
+        break;
+    case UiStyle::SenderPrefixMode::NoModes:
+        // Don't show any mode (already empty by default)
+        break;
     }
 
     switch (type()) {