X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.h;h=1bb00df6d9ac0b15c4ee6c34cd1259b9c9467508;hb=982bfbf8081be22ce7ce08adcf3ba92361ee7ca5;hp=3daf861bb82e5356da0564897a9ee2a0c6f15dd7;hpb=57982f5802c957e768ce842888591115694fcbef;p=quassel.git diff --git a/src/qtui/chatscene.h b/src/qtui/chatscene.h index 3daf861b..1bb00df6 100644 --- a/src/qtui/chatscene.h +++ b/src/qtui/chatscene.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2010 by the Quassel Project * + * Copyright (C) 2005-2012 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -36,6 +36,7 @@ class ChatItem; class ChatLine; class ChatView; class ColumnHandleItem; +class MarkerLineItem; class WebPreviewItem; class QGraphicsSceneMouseEvent; @@ -57,7 +58,8 @@ public: ContentsChatItemType, SearchHighlightType, WebPreviewType, - ColumnHandleType + ColumnHandleType, + MarkerLineType }; enum ClickMode { @@ -86,16 +88,22 @@ public: inline ChatLine *chatLine(const QModelIndex &index) const { return _lines.value(index.row()); } //! Find the ChatLine belonging to a MsgId - /** Searches for the ChatLine belonging to a MsgId. + /** Searches for the ChatLine belonging to a MsgId. If there are more than one ChatLine with the same msgId, + * the first one is returned. * Note that this method performs a binary search, hence it has as complexity of O(log n). - * If there is more than one ChatLine for the given ID, the first one will be returned. - * \param msgId The message ID to look for + * If matchExact is false, and we don't have an exact match for the given msgId, we return the visible line right + * above the requested one. + * \param msgId The message ID to look for + * \param matchExact Whether we find only exact matches + * \param ignoreDayChange Whether we ignore day change messages * \return The ChatLine corresponding to the given MsgId */ - ChatLine *chatLine(MsgId msgId) const; + ChatLine *chatLine(MsgId msgId, bool matchExact = true, bool ignoreDayChange = true) const; inline ChatLine *lastLine() const { return _lines.count() ? _lines.last() : 0; } + inline MarkerLineItem *markerLine() const { return _markerLine; } + inline bool isSingleBufferScene() const { return _singleBufferId.isValid(); } inline BufferId singleBufferId() const { return _singleBufferId; } bool containsBuffer(const BufferId &id) const; @@ -115,13 +123,15 @@ public: bool isScrollingAllowed() const; - virtual bool event(QEvent *e); - public slots: void updateForViewport(qreal width, qreal height); void setWidth(qreal width); void layout(int start, int end, qreal width); + void setMarkerLineVisible(bool visible = true); + void setMarkerLine(MsgId msgId = MsgId()); + void jumpToMarkerLine(bool requestBacklog); + // these are used by the chatitems to notify the scene and manage selections void setSelectingItem(ChatItem *item); ChatItem *selectingItem() const { return _selectingItem; } @@ -164,6 +174,8 @@ private slots: #endif void showWebPreviewChanged(); + void rowsRemoved(); + void clickTimeout(); private: @@ -185,6 +197,9 @@ private: void updateSceneRect(const QRectF &rect); qreal _viewportHeight; + MarkerLineItem *_markerLine; + bool _markerLineVisible, _markerLineValid, _markerLineJumpPending; + ColumnHandleItem *_firstColHandle, *_secondColHandle; qreal _firstColHandlePos, _secondColHandlePos; CutoffMode _cutoffMode;