Wupps, Altlast-Alarm
[quassel.git] / src / qtui / chatlinemodelitem.cpp
index 0bcc7a7..3613630 100644 (file)
@@ -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>(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>(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<UiStyle::FormatList>(_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<QBrush>(fmt.background());
   return QVariant();