Add rudimentary keyboard navigation for previous/next buffer
[quassel.git] / src / qtui / chatline.cpp
index 7e0acd5..4f03794 100644 (file)
@@ -59,6 +59,11 @@ ChatLine::ChatLine(int row, QAbstractItemModel *model,
   setHighlighted(index.data(MessageModel::FlagsRole).toInt() & Message::Highlight);
 }
 
+ChatLine::~ChatLine() {
+  if(chatView())
+    chatView()->setHasCache(this, false);
+}
+
 ChatItem *ChatLine::item(ChatLineModel::ColumnType column) {
   switch(column) {
     case ChatLineModel::TimestampColumn:
@@ -82,6 +87,12 @@ ChatItem *ChatLine::itemAt(const QPointF &pos) {
   return 0;
 }
 
+void ChatLine::clearCache() {
+  _timestampItem.clearCache();
+  _senderItem.clearCache();
+  _contentsItem.clearCache();
+}
+
 void ChatLine::setMouseGrabberItem(ChatItem *item) {
   _mouseGrabberItem = item;
 }
@@ -198,26 +209,6 @@ void ChatLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
   timestampItem()->paint(painter, option, widget);
   senderItem()->paint(painter, option, widget);
   contentsItem()->paint(painter, option, widget);
-
-  // new line marker
-  if(model_ && row() > 0  && chatScene()->isSingleBufferScene()) {
-    QModelIndex prevRowIdx = model_->index(row() - 1, 0);
-    MsgId prevMsgId = prevRowIdx.data(MessageModel::MsgIdRole).value<MsgId>();
-    MsgId myMsgId = myIdx.data(MessageModel::MsgIdRole).value<MsgId>();
-    Message::Flags flags = (Message::Flags)myIdx.data(MessageModel::FlagsRole).toInt();
-
-    // don't show the marker if we wrote that new line
-    if(!(flags & Message::Self)) {
-      BufferId bufferId = BufferId(chatScene()->idString().toInt());
-      MsgId lastSeenMsgId = Client::networkModel()->markerLineMsgId(bufferId);
-      if(lastSeenMsgId < myMsgId && lastSeenMsgId >= prevMsgId) {
-        QLinearGradient gradient(0, 0, 0, contentsItem()->fontMetrics()->lineSpacing());
-        gradient.setColorAt(0, QtUi::style()->brush(UiStyle::MarkerLine).color()); // FIXME: Use full (gradient?) brush instead of just the color
-        gradient.setColorAt(0.1, Qt::transparent);
-        painter->fillRect(boundingRect(), gradient);
-      }
-    }
-  }
 }
 
 // We need to dispatch all mouse-related events to the appropriate (mouse grabbing) ChatItem