qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
text.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 "../chatlinecontent.h"
23 #include "src/widget/style.h"
24 
25 #include <QFont>
26 
27 class QTextDocument;
28 
29 class Text : public ChatLineContent
30 {
31  Q_OBJECT
32 
33 public:
34  enum TextType
35  {
39  };
40 
41  Text(const QString& txt = "", const QFont& font = QFont(), bool enableElide = false,
42  const QString& rawText = QString(), const TextType& type = NORMAL, const QColor& custom = Style::getColor(Style::MainText));
43  virtual ~Text();
44 
45  void setText(const QString& txt);
46  void selectText(const QString& txt, const std::pair<int, int>& point);
47  void selectText(const QRegularExpression& exp, const std::pair<int, int>& point);
48  void deselectText();
49 
50  void setWidth(qreal width) final;
51 
52  void selectionMouseMove(QPointF scenePos) final;
53  void selectionStarted(QPointF scenePos) final;
54  void selectionCleared() final;
55  void selectionDoubleClick(QPointF scenePos) final;
56  void selectionTripleClick(QPointF scenePos) final;
57  void selectionFocusChanged(bool focusIn) final;
58  bool isOverSelection(QPointF scenePos) const final;
59  QString getSelectedText() const final;
60  void fontChanged(const QFont& font) final;
61 
62  QRectF boundingRect() const final;
63  void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) final;
64 
65  void visibilityChanged(bool keepInMemory) final;
66  void reloadTheme() final;
67 
68  qreal getAscent() const final;
69  void mousePressEvent(QGraphicsSceneMouseEvent* event) final;
70  void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) final;
71  void hoverMoveEvent(QGraphicsSceneHoverEvent* event) final;
72 
73  QString getText() const final;
74  QString getLinkAt(QPointF scenePos) const;
75 
76 protected:
77  // dynamic resource management
78  void regenerate();
79  void freeResources();
80 
81  virtual QSizeF idealSize();
82  int cursorFromPos(QPointF scenePos, bool fuzzy = true) const;
83  int getSelectionEnd() const;
84  int getSelectionStart() const;
85  bool hasSelection() const;
86  QString extractSanitizedText(int from, int to) const;
87  QString extractImgTooltip(int pos) const;
88 
89  QTextDocument* doc = nullptr;
90  QSizeF size;
91  qreal width = 0.0;
92 
93 private:
94  void selectText(QTextCursor& cursor, const std::pair<int, int>& point);
95  QColor textColor() const;
96 
97  QString text;
98  QString rawText;
99  QString selectedText;
100  bool keepInMemory = false;
101  bool elide = false;
102  bool dirty = false;
103  bool selectionHasFocus = true;
104  int selectionEnd = -1;
105  int selectionAnchor = -1;
106  qreal ascent = 0.0;
107  QFont defFont;
108  QString defStyleSheet;
110  QColor color;
111  QColor customColor;
112 };
Text::selectionAnchor
int selectionAnchor
Definition: text.h:105
style.h
Text::selectionCleared
void selectionCleared() final
Definition: text.cpp:125
Text::extractSanitizedText
QString extractSanitizedText(int from, int to) const
Definition: text.cpp:401
Text::visibilityChanged
void visibilityChanged(bool keepInMemory) final
Definition: text.cpp:242
Text::ACTION
@ ACTION
Definition: text.h:37
Text::width
qreal width
Definition: text.h:91
Text::textColor
QColor textColor() const
Definition: text.cpp:471
Text::selectionStarted
void selectionStarted(QPointF scenePos) final
Definition: text.cpp:116
Text::regenerate
void regenerate()
Definition: text.cpp:315
Text::color
QColor color
Definition: text.h:110
Text::defStyleSheet
QString defStyleSheet
Definition: text.h:108
Text::selectionMouseMove
void selectionMouseMove(QPointF scenePos) final
Definition: text.cpp:102
Text::rawText
QString rawText
Definition: text.h:98
Text::cursorFromPos
int cursorFromPos(QPointF scenePos, bool fuzzy=true) const
Definition: text.cpp:377
Text::selectText
void selectText(const QString &txt, const std::pair< int, int > &point)
Definition: text.cpp:61
Text::getSelectedText
QString getSelectedText() const final
Definition: text.cpp:196
Text::paint
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) final
Definition: text.cpp:211
Text::doc
QTextDocument * doc
Definition: text.h:89
Text::selectionTripleClick
void selectionTripleClick(QPointF scenePos) final
Definition: text.cpp:157
Text::idealSize
virtual QSizeF idealSize()
Definition: text.cpp:369
Text::text
QString text
Definition: text.h:97
Text::customColor
QColor customColor
Definition: text.h:111
Text::setWidth
void setWidth(qreal width) final
Definition: text.cpp:94
Text::~Text
virtual ~Text()
Definition: text.cpp:49
Text::dirty
bool dirty
Definition: text.h:102
Text::selectionDoubleClick
void selectionDoubleClick(QPointF scenePos) final
Definition: text.cpp:136
Text::extractImgTooltip
QString extractImgTooltip(int pos) const
Definition: text.cpp:442
Text::selectedText
QString selectedText
Definition: text.h:99
Text::ascent
qreal ascent
Definition: text.h:106
Text::selectionHasFocus
bool selectionHasFocus
Definition: text.h:103
Text
Definition: text.h:29
ChatLineContent::type
int type() const final
Definition: chatlinecontent.cpp:33
Text::freeResources
void freeResources()
Definition: text.cpp:363
Text::selectionEnd
int selectionEnd
Definition: text.h:104
ChatLineContent
Definition: chatlinecontent.h:26
Style::getColor
static QColor getColor(ColorPalette entry)
Definition: style.cpp:209
Text::getText
QString getText() const final
Definition: text.cpp:298
Text::size
QSizeF size
Definition: text.h:90
Text::hoverMoveEvent
void hoverMoveEvent(QGraphicsSceneHoverEvent *event) final
Definition: text.cpp:282
Text::mousePressEvent
void mousePressEvent(QGraphicsSceneMouseEvent *event) final
Definition: text.cpp:264
Text::CUSTOM
@ CUSTOM
Definition: text.h:38
Text::NORMAL
@ NORMAL
Definition: text.h:36
Text::TextType
TextType
Definition: text.h:34
Text::elide
bool elide
Definition: text.h:101
Text::reloadTheme
void reloadTheme() final
Definition: text.cpp:250
Text::mouseReleaseEvent
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) final
Definition: text.cpp:270
Text::isOverSelection
bool isOverSelection(QPointF scenePos) const final
Definition: text.cpp:187
Style::MainText
@ MainText
Definition: style.h:37
Text::selectionFocusChanged
void selectionFocusChanged(bool focusIn) final
Definition: text.cpp:181
Text::getSelectionStart
int getSelectionStart() const
Definition: text.cpp:391
Text::boundingRect
QRectF boundingRect() const final
Definition: text.cpp:206
Text::fontChanged
void fontChanged(const QFont &font) final
Definition: text.cpp:201
Text::getLinkAt
QString getLinkAt(QPointF scenePos) const
Extracts the target of a link from the text at a given coordinate.
Definition: text.cpp:308
Text::Text
Text(const QString &txt="", const QFont &font=QFont(), bool enableElide=false, const QString &rawText=QString(), const TextType &type=NORMAL, const QColor &custom=Style::getColor(Style::MainText))
Definition: text.cpp:34
Text::getAscent
qreal getAscent() const final
Definition: text.cpp:259
Text::deselectText
void deselectText()
Definition: text.cpp:87
Text::setText
void setText(const QString &txt)
Definition: text.cpp:55
Text::getSelectionEnd
int getSelectionEnd() const
Definition: text.cpp:386
Text::textType
TextType textType
Definition: text.h:109
Text::defFont
QFont defFont
Definition: text.h:107
Text::hasSelection
bool hasSelection() const
Definition: text.cpp:396
Text::keepInMemory
bool keepInMemory
Definition: text.h:100