qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
chatline.h
Go to the documentation of this file.
1 /*
2  Copyright © 2014-2019 by The qTox Project Contributors
3 
4  This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6  qTox is libre software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  qTox is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with qTox. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #pragma once
21 
22 #include <QPointF>
23 #include <QRectF>
24 #include <QVector>
25 #include <memory>
26 
27 class ChatWidget;
28 class ChatLineContent;
29 class QGraphicsScene;
30 class QStyleOptionGraphicsItem;
31 class QFont;
32 
34 {
35  enum Policy
36  {
39  };
40 
41  enum Align
42  {
46  };
47 
49  {
50  }
51  ColumnFormat(qreal s, Policy p, Align halign = Left)
52  : size(s)
53  , policy(p)
54  , hAlign(halign)
55  {
56  }
57 
58  qreal size = 1.0;
61 };
62 
63 using ColumnFormats = QVector<ColumnFormat>;
64 
65 class ChatLine
66 {
67 public:
68  using Ptr = std::shared_ptr<ChatLine>;
69 
70  ChatLine();
71  virtual ~ChatLine();
72 
73  QRectF sceneBoundingRect() const;
74 
75  void replaceContent(int col, ChatLineContent* lineContent);
76  void layout(qreal width, QPointF scenePos);
77  void moveBy(qreal deltaY);
78  void removeFromScene();
79  void addToScene(QGraphicsScene* scene);
80  void setVisible(bool visible);
81  void selectionCleared();
82  void selectionFocusChanged(bool focusIn);
83  void fontChanged(const QFont& font);
84  void reloadTheme();
85 
86  int getColumnCount();
87 
88  ChatLineContent* getContent(int col) const;
89  ChatLineContent* getContent(QPointF scenePos) const;
90 
91  bool isOverSelection(QPointF scenePos);
92 
93  // comparators
94  static bool lessThanBSRectTop(const ChatLine::Ptr& lhs, const qreal& rhs);
95  static bool lessThanBSRectBottom(const ChatLine::Ptr& lhs, const qreal& rhs);
96 
97 protected:
98  friend class ChatWidget;
99 
100  QPointF mapToContent(ChatLineContent* c, QPointF pos);
101 
102  void addColumn(ChatLineContent* item, ColumnFormat fmt);
103  void updateBBox();
104  void visibilityChanged(bool visible);
105 
106 private:
107  int row = -1;
108  QVector<ChatLineContent*> content;
109  QVector<ColumnFormat> format;
110  qreal width = 100.0;
111  qreal columnSpacing = 15.0;
112  QRectF bbox;
113  bool isVisible = false;
114 };
ColumnFormat::Right
@ Right
Definition: chatline.h:45
ChatLine::removeFromScene
void removeFromScene()
Definition: chatline.cpp:68
ColumnFormats
QVector< ColumnFormat > ColumnFormats
Definition: chatline.h:63
ChatLine::setVisible
void setVisible(bool visible)
Definition: chatline.cpp:85
ColumnFormat::Center
@ Center
Definition: chatline.h:44
ColumnFormat
Definition: chatline.h:33
ChatLine::width
qreal width
Definition: chatline.h:110
ChatLine::lessThanBSRectBottom
static bool lessThanBSRectBottom(const ChatLine::Ptr &lhs, const qreal &rhs)
Definition: chatline.cpp:249
ChatLine::~ChatLine
virtual ~ChatLine()
Definition: chatline.cpp:30
ChatLine::row
int row
Definition: chatline.h:107
ChatLine::replaceContent
void replaceContent(int col, ChatLineContent *lineContent)
Definition: chatline.cpp:146
ChatLine::fontChanged
void fontChanged(const QFont &font)
Definition: chatline.cpp:103
ChatWidget
Definition: chatwidget.h:41
ChatLine::getContent
ChatLineContent * getContent(int col) const
Definition: chatline.cpp:50
ColumnFormat::Left
@ Left
Definition: chatline.h:43
ChatLine
Definition: chatline.h:65
ChatLine::format
QVector< ColumnFormat > format
Definition: chatline.h:109
ColumnFormat::Policy
Policy
Definition: chatline.h:35
ColumnFormat::hAlign
Align hAlign
Definition: chatline.h:60
ColumnFormat::Align
Align
Definition: chatline.h:41
ChatLine::moveBy
void moveBy(qreal deltaY)
Definition: chatline.cpp:235
ChatLine::ChatLine
ChatLine()
Definition: chatline.cpp:26
ColumnFormat::ColumnFormat
ColumnFormat(qreal s, Policy p, Align halign=Left)
Definition: chatline.h:51
ChatLine::isOverSelection
bool isOverSelection(QPointF scenePos)
ColumnFormat::FixedSize
@ FixedSize
Definition: chatline.h:37
ChatLine::bbox
QRectF bbox
Definition: chatline.h:112
ChatLine::addToScene
void addToScene(QGraphicsScene *scene)
Definition: chatline.cpp:76
ChatLine::sceneBoundingRect
QRectF sceneBoundingRect() const
Definition: chatline.cpp:131
ChatLineContent
Definition: chatlinecontent.h:26
ColumnFormat::ColumnFormat
ColumnFormat()
Definition: chatline.h:48
ChatLine::lessThanBSRectTop
static bool lessThanBSRectTop(const ChatLine::Ptr &lhs, const qreal &rhs)
Definition: chatline.cpp:244
ChatLine::isVisible
bool isVisible
Definition: chatline.h:113
ColumnFormat::VariableSize
@ VariableSize
Definition: chatline.h:38
ChatLine::content
QVector< ChatLineContent * > content
Definition: chatline.h:108
ChatLine::layout
void layout(qreal width, QPointF scenePos)
Definition: chatline.cpp:164
ColumnFormat::policy
Policy policy
Definition: chatline.h:59
ChatLine::getColumnCount
int getColumnCount()
Definition: chatline.cpp:116
ChatLine::mapToContent
QPointF mapToContent(ChatLineContent *c, QPointF pos)
ColumnFormat::size
qreal size
Definition: chatline.h:58
ChatLine::selectionCleared
void selectionCleared()
Definition: chatline.cpp:91
ChatLine::visibilityChanged
void visibilityChanged(bool visible)
Definition: chatline.cpp:40
ChatLine::columnSpacing
qreal columnSpacing
Definition: chatline.h:111
ChatLine::addColumn
void addColumn(ChatLineContent *item, ColumnFormat fmt)
Definition: chatline.cpp:136
ChatLine::selectionFocusChanged
void selectionFocusChanged(bool focusIn)
Definition: chatline.cpp:97
ChatLine::Ptr
std::shared_ptr< ChatLine > Ptr
Definition: chatline.h:68
ChatLine::reloadTheme
void reloadTheme()
Definition: chatline.cpp:109
ChatLine::updateBBox
void updateBBox()
Definition: chatline.cpp:121