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
bool UiStyle::_showSenderBrackets; /// If true, show brackets around sender names
UiStyle::UiStyle(QObject *parent)
// in there.
setUseCustomTimestampFormat(false);
setTimestampFormatString(" hh:mm:ss");
+ enableSenderPrefixes(false);
enableSenderBrackets(true);
// BufferView / NickView settings
}
}
+void UiStyle::enableSenderPrefixes(bool enabled)
+{
+ if (_showSenderPrefixes != enabled) {
+ _showSenderPrefixes = enabled;
+ }
+}
+
void UiStyle::enableSenderBrackets(bool enabled)
{
if (_showSenderBrackets != enabled) {
UiStyle::StyledMessage::StyledMessage(const Message &msg)
: Message(msg)
{
- if (type() == Message::Plain || type() == Message::Action)
- _senderHash = 0xff;
- else
- _senderHash = 0x00;
- // This means we never compute the hash for msgs that aren't Plain or Action
+ switch (type()) {
+ // Don't compute the sender hash for message types without a nickname embedded
+ case Message::Server:
+ case Message::Info:
+ case Message::Error:
+ case Message::DayChange:
+ case Message::Topic:
+ case Message::Invite:
+ // Don't compute the sender hash for messages with multiple nicks
+ // Fixing this without breaking themes would be.. complex.
+ case Message::NetsplitJoin:
+ case Message::NetsplitQuit:
+ case Message::Kick:
+ // Don't compute the sender hash for message types that are not yet completed elsewhere
+ case Message::Kill:
+ _senderHash = 0x00;
+ break;
+ default:
+ // Compute the sender hash for all other message types
+ _senderHash = 0xff;
+ break;
+ }
}
QString UiStyle::StyledMessage::decoratedSender() const
{
+ QString _senderPrefixes;
+ if (_showSenderPrefixes) {
+ _senderPrefixes = senderPrefixes();
+ }
+
switch (type()) {
case Message::Plain:
if (_showSenderBrackets)
- return QString("<%1>").arg(plainSender());
+ return QString("<%1%2>").arg(_senderPrefixes, plainSender());
else
- return QString("%1").arg(plainSender());
+ return QString("%1%2").arg(_senderPrefixes, plainSender());
break;
case Message::Notice:
- return QString("[%1]").arg(plainSender()); break;
+ return QString("[%1%2]").arg(_senderPrefixes, plainSender()); break;
case Message::Action:
return "-*-"; break;
case Message::Nick:
case Message::Invite:
return "->"; break;
default:
- return QString("%1").arg(plainSender());
+ return QString("%1%2").arg(_senderPrefixes, plainSender());
}
}
if (_senderHash != 0xff)
return _senderHash;
- QString nick = nickFromMask(sender()).toLower();
+ QString nick;
+
+ // HACK: Until multiple nicknames with different colors can be solved in the theming engine,
+ // for /nick change notifications, use the color of the new nickname (if possible), not the old
+ // nickname.
+ if (type() == Message::Nick) {
+ // New nickname is given as contents. Change to that.
+ nick = stripFormatCodes(contents()).toLower();
+ } else {
+ // Just use the sender directly
+ nick = nickFromMask(sender()).toLower();
+ }
+
if (!nick.isEmpty()) {
int chopCount = 0;
while (chopCount < nick.size() && nick.at(nick.count() - 1 - chopCount) == '_')