X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fuistyle.cpp;h=b5e8911b15ff8d6cfafe63ffb772ae2bbf72df4a;hp=80a29b2f5d6f270688bceb1de3071fd7d41140ad;hb=2b5d210cb6e61a25a6a9d0c119aec025322b3b84;hpb=2c16b8e356817cb4a4bf7fcd59c0c7429b0100e1 diff --git a/src/uisupport/uistyle.cpp b/src/uisupport/uistyle.cpp index 80a29b2f..b5e8911b 100644 --- a/src/uisupport/uistyle.cpp +++ b/src/uisupport/uistyle.cpp @@ -98,8 +98,12 @@ QTextCharFormat UiStyle::format(quint32 ftype, quint32 label) { fmt.merge(cachedFormat(key & 0x0000000000000000)); // basic fmt.merge(cachedFormat(key & 0x000000000000000f)); // msgtype + fmt.merge(cachedFormat(key & 0xffff000000000000)); // nickhash + fmt.merge(cachedFormat(key & 0xffff00000000000f)); // nickhash + msgtype fmt.merge(cachedFormat(key & 0x0000ffff00000000)); // label fmt.merge(cachedFormat(key & 0x0000ffff0000000f)); // label + msgtype + fmt.merge(cachedFormat(key & 0xffffffff00000000)); // label + nickhash + fmt.merge(cachedFormat(key & 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" @@ -204,7 +208,7 @@ UiStyle::StyledString UiStyle::styleString(const QString &s_, quint32 baseFormat return StyledString(); } StyledString result; - result.formatList.append(qMakePair((quint16)0, (quint32)None)); + result.formatList.append(qMakePair((quint16)0, baseFormat)); quint32 curfmt = baseFormat; int pos = 0; quint16 length = 0; for(;;) { @@ -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) {