introduce fullscreen mode, fixes #803
[quassel.git] / src / qtui / chatscene.h
index 3daf861..c54c186 100644 (file)
@@ -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;