X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fuistyle.cpp;h=ed5156ce2e7e9ed81f3cee454787216c98e6921e;hp=229e4babc4be590eff9475246191b5b2765af57d;hb=0cbdf2e324edc5f6ec3cee3842ee6b1830a57e23;hpb=03976b69a41261782602d745805a178d8f3f1dc9 diff --git a/src/uisupport/uistyle.cpp b/src/uisupport/uistyle.cpp index 229e4bab..ed5156ce 100644 --- a/src/uisupport/uistyle.cpp +++ b/src/uisupport/uistyle.cpp @@ -73,14 +73,14 @@ void UiStyle::mergeSubElementFormat(QTextCharFormat& fmt, quint32 ftype, quint32 quint64 key = ftype | ((quint64)label << 32); // start with the most general format and then specialize - fmt.merge(cachedFormat(key & 0x00000000fffffff0)); // basic subelement format - fmt.merge(cachedFormat(key & 0x00000000ffffffff)); // subelement + msgtype - fmt.merge(cachedFormat(key & 0xffff0000fffffff0)); // subelement + nickhash - fmt.merge(cachedFormat(key & 0xffff0000ffffffff)); // subelement + nickhash + msgtype - fmt.merge(cachedFormat(key & 0x0000fffffffffff0)); // label + subelement - fmt.merge(cachedFormat(key & 0x0000ffffffffffff)); // label + subelement + msgtype - fmt.merge(cachedFormat(key & 0xfffffffffffffff0)); // label + subelement + nickhash - fmt.merge(cachedFormat(key & 0xffffffffffffffff)); // label + subelement + nickhash + msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0x00000000fffffff0))); // basic subelement format + fmt.merge(cachedFormat(key & Q_UINT64_C(0x00000000ffffffff))); // subelement + msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffff0000fffffff0))); // subelement + nickhash + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffff0000ffffffff))); // subelement + nickhash + msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000fffffffffff0))); // label + subelement + fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000ffffffffffff))); // label + subelement + msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0xfffffffffffffff0))); // label + subelement + nickhash + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffffffffffffffff))); // label + subelement + nickhash + msgtype } // NOTE: This function is intimately tied to the values in FormatType. Don't change this @@ -96,10 +96,14 @@ QTextCharFormat UiStyle::format(quint32 ftype, quint32 label) { if(fmt.properties().count()) return fmt; - fmt.merge(cachedFormat(key & 0x0000000000000000)); // basic - fmt.merge(cachedFormat(key & 0x000000000000000f)); // msgtype - fmt.merge(cachedFormat(key & 0x0000ffff00000000)); // label - fmt.merge(cachedFormat(key & 0x0000ffff0000000f)); // label + msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000000000000000))); // basic + fmt.merge(cachedFormat(key & Q_UINT64_C(0x000000000000000f))); // msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffff000000000000))); // nickhash + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffff00000000000f))); // nickhash + msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000ffff00000000))); // label + fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000ffff0000000f))); // label + msgtype + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffffffff00000000))); // label + nickhash + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffffffff0000000f))); // label + nickhash + msgtype // TODO: allow combinations for mirc formats and colors (each), e.g. setting a special format for "bold and italic" // or "foreground 01 and background 03" @@ -308,6 +312,10 @@ QString UiStyle::mircToInternal(const QString &mirc_) { UiStyle::StyledMessage::StyledMessage(const Message &msg) : Message(msg) { + if(type() == Message::Plain) + _senderHash = 0xff; + else + _senderHash = 0x00; // this means we never compute the hash for msgs that aren't plain } void UiStyle::StyledMessage::style() const { @@ -497,6 +505,22 @@ UiStyle::FormatType UiStyle::StyledMessage::senderFormat() const { } } +// FIXME hardcoded to 16 sender hashes +quint8 UiStyle::StyledMessage::senderHash() const { + if(_senderHash != 0xff) + return _senderHash; + + QString nick = nickFromMask(sender()).toLower(); + if(!nick.isEmpty()) { + int chopCount = 0; + while(nick.at(nick.count() - 1 - chopCount) == '_') + chopCount++; + nick.chop(chopCount); + } + quint16 hash = qChecksum(nick.toAscii().data(), nick.toAscii().size()); + return (_senderHash = (hash & 0xf) + 1); +} + /***********************************************************************************/ QDataStream &operator<<(QDataStream &out, const UiStyle::FormatList &formatList) {