Quassel IRC  Pre-Release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
chatview.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2015 by the Quassel Project *
3  * devel@quassel-irc.org *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) version 3. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19  ***************************************************************************/
20 
21 #ifndef CHATVIEW_H_
22 #define CHATVIEW_H_
23 
24 #include <QGraphicsView>
25 #include <QTimer>
26 
28 
30 class AbstractUiMsg;
31 class Buffer;
32 class ChatLine;
33 class ChatScene;
34 class MessageFilter;
35 class QMenu;
36 
37 class ChatView : public QGraphicsView, public AbstractChatView
38 {
39  Q_OBJECT
40 
41 public:
42  ChatView(MessageFilter *, QWidget *parent = 0);
43  ChatView(BufferId bufferId, QWidget *parent = 0);
44 
45  virtual MsgId lastMsgId() const;
46  virtual MsgId lastVisibleMsgId() const;
49 
50  inline ChatScene *scene() const { return _scene; }
51 
53 
56  QSet<ChatLine *> visibleChatLines(Qt::ItemSelectionMode mode = Qt::ContainsItemBoundingRect) const;
57 
59 
63  QList<ChatLine *> visibleChatLinesSorted(Qt::ItemSelectionMode mode = Qt::ContainsItemBoundingRect) const;
64 
66 
69  ChatLine *lastVisibleChatLine(bool ignoreDayChange = false) const;
70 
71  virtual void addActionsToMenu(QMenu *, const QPointF &pos);
72 
74 
80  void setHasCache(ChatLine *line, bool hasCache = true);
81 
82 public slots:
83  inline virtual void clear() {}
84  void zoomIn();
85  void zoomOut();
86  void zoomOriginal();
87 
88  void setMarkerLineVisible(bool visible = true);
89  void setMarkerLine(MsgId msgId);
90  void jumpToMarkerLine(bool requestBacklog);
91 
92 protected:
93  virtual bool event(QEvent *event);
94  virtual void resizeEvent(QResizeEvent *event);
95  virtual void scrollContentsBy(int dx, int dy);
96 
97 protected slots:
98  virtual void verticalScrollbarChanged(int);
99 
100 private slots:
101  void lastLineChanged(QGraphicsItem *chatLine, qreal offset);
102  void adjustSceneRect();
103  void checkChatLineCaches();
104  void mouseMoveWhileSelecting(const QPointF &scenePos);
105  void scrollTimerTimeout();
106  void invalidateFilter();
107  void markerLineSet(BufferId buffer, MsgId msg);
108 
109 private:
110  void init(MessageFilter *filter);
111 
116  QTimer _scrollTimer;
119  QSet<ChatLine *> _linesWithCache;
120 };
121 
122 
123 #endif