X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatlinemodelitem.cpp;h=7c130c78ceab4a3443e20f8428e044f1c45196f0;hp=0bcc7a785a9b4c5d991e6e0f3a0df882f91111ad;hb=5ced3405e4365a38f7bea5570881fe11b4b529e0;hpb=2c16b8e356817cb4a4bf7fcd59c0c7429b0100e1 diff --git a/src/qtui/chatlinemodelitem.cpp b/src/qtui/chatlinemodelitem.cpp index 0bcc7a78..7c130c78 100644 --- a/src/qtui/chatlinemodelitem.cpp +++ b/src/qtui/chatlinemodelitem.cpp @@ -52,6 +52,16 @@ ChatLineModelItem::ChatLineModelItem(const Message &msg) _styledMsg.setFlags(msg.flags() |= Message::ServerMsg); } +bool ChatLineModelItem::setData(int column, const QVariant &value, int role) { + switch(role) { + case MessageModel::FlagsRole: + _styledMsg.setFlags((Message::Flags)value.toUInt()); + return true; + default: + return MessageModelItem::setData(column, value, role); + } +} + QVariant ChatLineModelItem::data(int column, int role) const { if(role == ChatLineModel::MsgLabelRole) return messageLabel(); @@ -84,6 +94,8 @@ QVariant ChatLineModelItem::timestampData(int role) const { return _styledMsg.timestamp(); case ChatLineModel::BackgroundRole: return backgroundBrush(UiStyle::Timestamp); + case ChatLineModel::SelectedBackgroundRole: + return backgroundBrush(UiStyle::Timestamp, true); case ChatLineModel::FormatRole: return QVariant::fromValue(UiStyle::FormatList() << qMakePair((quint16)0, (quint32)UiStyle::formatType(_styledMsg.type()) | UiStyle::Timestamp)); @@ -99,6 +111,8 @@ QVariant ChatLineModelItem::senderData(int role) const { return _styledMsg.plainSender(); case ChatLineModel::BackgroundRole: return backgroundBrush(UiStyle::Sender); + case ChatLineModel::SelectedBackgroundRole: + return backgroundBrush(UiStyle::Sender, true); case ChatLineModel::FormatRole: return QVariant::fromValue(UiStyle::FormatList() << qMakePair((quint16)0, (quint32)UiStyle::formatType(_styledMsg.type()) | UiStyle::Sender)); @@ -113,6 +127,8 @@ QVariant ChatLineModelItem::contentsData(int role) const { return _styledMsg.plainContents(); case ChatLineModel::BackgroundRole: return backgroundBrush(UiStyle::Contents); + case ChatLineModel::SelectedBackgroundRole: + return backgroundBrush(UiStyle::Contents, true); case ChatLineModel::FormatRole: return QVariant::fromValue(_styledMsg.contentsFormatList()); case ChatLineModel::WrapListRole: @@ -124,7 +140,7 @@ QVariant ChatLineModelItem::contentsData(int role) const { } quint32 ChatLineModelItem::messageLabel() const { - quint32 label = 0; + quint32 label = _styledMsg.senderHash() << 16; if(_styledMsg.flags() & Message::Self) label |= UiStyle::OwnMsg; if(_styledMsg.flags() & Message::Highlight) @@ -132,8 +148,8 @@ quint32 ChatLineModelItem::messageLabel() const { return label; } -QVariant ChatLineModelItem::backgroundBrush(UiStyle::FormatType subelement) const { - QTextCharFormat fmt = QtUi::style()->format(UiStyle::formatType(_styledMsg.type()) | subelement, messageLabel()); +QVariant ChatLineModelItem::backgroundBrush(UiStyle::FormatType subelement, bool selected) const { + QTextCharFormat fmt = QtUi::style()->format(UiStyle::formatType(_styledMsg.type()) | subelement, messageLabel() | (selected ? UiStyle::Selected : 0)); if(fmt.hasProperty(QTextFormat::BackgroundBrush)) return QVariant::fromValue(fmt.background()); return QVariant(); @@ -185,11 +201,13 @@ void ChatLineModelItem::computeWrapList() const { //if(flg) qDebug() << idx << mode << wordStart << wordEnd << contents->plainText.left(idx) << contents->plainText.mid(idx); if(mode == SearchEnd || (!wordStart && wordEnd)) { - if(wordStart || !wordEnd) continue; oldidx = idx; + if(wordStart || !wordEnd) + continue; mode = SearchStart; continue; } + qreal wordendx = line.cursorToX(oldidx); qreal trailingendx = line.cursorToX(idx); word.endX = wordendx;