+quint8 UiStyle::StyledMessage::senderHash() const
+{
+ if (_senderHash != 0xff)
+ return _senderHash;
+
+ 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) == '_')
+ chopCount++;
+ if (chopCount < nick.size())
+ nick.chop(chopCount);
+ }
+ quint16 hash = qChecksum(nick.toLatin1().data(), nick.toLatin1().size());
+ return (_senderHash = (hash & 0xf) + 1);
+}
+
+/***********************************************************************************/
+
+uint qHash(UiStyle::ItemFormatType key, uint seed)
+{
+ return qHash(static_cast<quint32>(key), seed);
+}
+
+UiStyle::FormatType operator|(UiStyle::FormatType lhs, UiStyle::FormatType rhs)
+{
+ return static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) | static_cast<quint32>(rhs));
+}
+
+UiStyle::FormatType& operator|=(UiStyle::FormatType& lhs, UiStyle::FormatType rhs)
+{
+ lhs = static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) | static_cast<quint32>(rhs));
+ return lhs;
+}
+
+UiStyle::FormatType operator|(UiStyle::FormatType lhs, quint32 rhs)
+{
+ return static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) | rhs);
+}
+
+UiStyle::FormatType& operator|=(UiStyle::FormatType& lhs, quint32 rhs)
+{
+ lhs = static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) | rhs);
+ return lhs;
+}
+
+UiStyle::FormatType operator&(UiStyle::FormatType lhs, UiStyle::FormatType rhs)
+{
+ return static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) & static_cast<quint32>(rhs));
+}
+
+UiStyle::FormatType& operator&=(UiStyle::FormatType& lhs, UiStyle::FormatType rhs)
+{
+ lhs = static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) & static_cast<quint32>(rhs));
+ return lhs;
+}
+
+UiStyle::FormatType operator&(UiStyle::FormatType lhs, quint32 rhs)
+{
+ return static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) & rhs);
+}
+
+UiStyle::FormatType& operator&=(UiStyle::FormatType& lhs, quint32 rhs)
+{
+ lhs = static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) & rhs);
+ return lhs;
+}
+
+UiStyle::FormatType& operator^=(UiStyle::FormatType& lhs, UiStyle::FormatType rhs)
+{
+ lhs = static_cast<UiStyle::FormatType>(static_cast<quint32>(lhs) ^ static_cast<quint32>(rhs));
+ return lhs;
+}
+
+UiStyle::MessageLabel operator|(UiStyle::MessageLabel lhs, UiStyle::MessageLabel rhs)
+{
+ return static_cast<UiStyle::MessageLabel>(static_cast<quint32>(lhs) | static_cast<quint32>(rhs));
+}
+
+UiStyle::MessageLabel& operator|=(UiStyle::MessageLabel& lhs, UiStyle::MessageLabel rhs)
+{
+ lhs = static_cast<UiStyle::MessageLabel>(static_cast<quint32>(lhs) | static_cast<quint32>(rhs));
+ return lhs;
+}
+
+UiStyle::MessageLabel operator&(UiStyle::MessageLabel lhs, quint32 rhs)
+{
+ return static_cast<UiStyle::MessageLabel>(static_cast<quint32>(lhs) & rhs);
+}
+
+UiStyle::MessageLabel& operator&=(UiStyle::MessageLabel& lhs, UiStyle::MessageLabel rhs)
+{
+ lhs = static_cast<UiStyle::MessageLabel>(static_cast<quint32>(lhs) & static_cast<quint32>(rhs));
+ return lhs;
+}
+
+quint64 operator|(UiStyle::FormatType lhs, UiStyle::MessageLabel rhs)
+{
+ return static_cast<quint64>(lhs) | (static_cast<quint64>(rhs) << 32ull);
+}
+
+UiStyle::ItemFormatType operator|(UiStyle::ItemFormatType lhs, UiStyle::ItemFormatType rhs)
+{
+ return static_cast<UiStyle::ItemFormatType>(static_cast<quint32>(lhs) | static_cast<quint32>(rhs));
+}
+
+UiStyle::ItemFormatType& operator|=(UiStyle::ItemFormatType& lhs, UiStyle::ItemFormatType rhs)
+{
+ lhs = static_cast<UiStyle::ItemFormatType>(static_cast<quint32>(lhs) | static_cast<quint32>(rhs));
+ return lhs;